@jini-ai/cms 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/LICENSE +201 -0
- package/README.md +84 -0
- package/dist/content-types/agent-tools.d.ts +65 -0
- package/dist/content-types/agent-tools.d.ts.map +1 -0
- package/dist/content-types/agent-tools.js +172 -0
- package/dist/content-types/agent-tools.js.map +1 -0
- package/dist/content-types/cleanup.d.ts +118 -0
- package/dist/content-types/cleanup.d.ts.map +1 -0
- package/dist/content-types/cleanup.js +65 -0
- package/dist/content-types/cleanup.js.map +1 -0
- package/dist/content-types/errors.d.ts +90 -0
- package/dist/content-types/errors.d.ts.map +1 -0
- package/dist/content-types/errors.js +119 -0
- package/dist/content-types/errors.js.map +1 -0
- package/dist/content-types/field-defs.d.ts +25 -0
- package/dist/content-types/field-defs.d.ts.map +1 -0
- package/dist/content-types/field-defs.js +155 -0
- package/dist/content-types/field-defs.js.map +1 -0
- package/dist/content-types/index-provisioning.d.ts +94 -0
- package/dist/content-types/index-provisioning.d.ts.map +1 -0
- package/dist/content-types/index-provisioning.js +133 -0
- package/dist/content-types/index-provisioning.js.map +1 -0
- package/dist/content-types/index.d.ts +63 -0
- package/dist/content-types/index.d.ts.map +1 -0
- package/dist/content-types/index.js +36 -0
- package/dist/content-types/index.js.map +1 -0
- package/dist/content-types/lifecycle-dispatch.d.ts +38 -0
- package/dist/content-types/lifecycle-dispatch.d.ts.map +1 -0
- package/dist/content-types/lifecycle-dispatch.js +28 -0
- package/dist/content-types/lifecycle-dispatch.js.map +1 -0
- package/dist/content-types/lifecycle.d.ts +104 -0
- package/dist/content-types/lifecycle.d.ts.map +1 -0
- package/dist/content-types/lifecycle.js +143 -0
- package/dist/content-types/lifecycle.js.map +1 -0
- package/dist/content-types/list.d.ts +44 -0
- package/dist/content-types/list.d.ts.map +1 -0
- package/dist/content-types/list.js +13 -0
- package/dist/content-types/list.js.map +1 -0
- package/dist/content-types/repo.memory.d.ts +72 -0
- package/dist/content-types/repo.memory.d.ts.map +1 -0
- package/dist/content-types/repo.memory.js +71 -0
- package/dist/content-types/repo.memory.js.map +1 -0
- package/dist/content-types/tool-registrations.d.ts +65 -0
- package/dist/content-types/tool-registrations.d.ts.map +1 -0
- package/dist/content-types/tool-registrations.js +180 -0
- package/dist/content-types/tool-registrations.js.map +1 -0
- package/dist/content-types/types.d.ts +78 -0
- package/dist/content-types/types.d.ts.map +1 -0
- package/dist/content-types/types.js +32 -0
- package/dist/content-types/types.js.map +1 -0
- package/dist/content-types/write-service.d.ts +141 -0
- package/dist/content-types/write-service.d.ts.map +1 -0
- package/dist/content-types/write-service.js +180 -0
- package/dist/content-types/write-service.js.map +1 -0
- package/dist/core/commands/change-set.d.ts +98 -0
- package/dist/core/commands/change-set.d.ts.map +1 -0
- package/dist/core/commands/change-set.js +2 -0
- package/dist/core/commands/change-set.js.map +1 -0
- package/dist/core/commands/command.d.ts +168 -0
- package/dist/core/commands/command.d.ts.map +1 -0
- package/dist/core/commands/command.js +173 -0
- package/dist/core/commands/command.js.map +1 -0
- package/dist/core/index.d.ts +45 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +43 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/ports.d.ts +139 -0
- package/dist/core/ports.d.ts.map +1 -0
- package/dist/core/ports.js +2 -0
- package/dist/core/ports.js.map +1 -0
- package/dist/core/tools/registration-kit.d.ts +308 -0
- package/dist/core/tools/registration-kit.d.ts.map +1 -0
- package/dist/core/tools/registration-kit.js +381 -0
- package/dist/core/tools/registration-kit.js.map +1 -0
- package/dist/entries/agent-tools.d.ts +78 -0
- package/dist/entries/agent-tools.d.ts.map +1 -0
- package/dist/entries/agent-tools.js +158 -0
- package/dist/entries/agent-tools.js.map +1 -0
- package/dist/entries/errors.d.ts +43 -0
- package/dist/entries/errors.d.ts.map +1 -0
- package/dist/entries/errors.js +59 -0
- package/dist/entries/errors.js.map +1 -0
- package/dist/entries/field-validation.d.ts +70 -0
- package/dist/entries/field-validation.d.ts.map +1 -0
- package/dist/entries/field-validation.js +87 -0
- package/dist/entries/field-validation.js.map +1 -0
- package/dist/entries/index.d.ts +55 -0
- package/dist/entries/index.d.ts.map +1 -0
- package/dist/entries/index.js +38 -0
- package/dist/entries/index.js.map +1 -0
- package/dist/entries/lifecycle-dispatch.d.ts +15 -0
- package/dist/entries/lifecycle-dispatch.d.ts.map +1 -0
- package/dist/entries/lifecycle-dispatch.js +16 -0
- package/dist/entries/lifecycle-dispatch.js.map +1 -0
- package/dist/entries/list.d.ts +47 -0
- package/dist/entries/list.d.ts.map +1 -0
- package/dist/entries/list.js +12 -0
- package/dist/entries/list.js.map +1 -0
- package/dist/entries/repo.memory.d.ts +64 -0
- package/dist/entries/repo.memory.d.ts.map +1 -0
- package/dist/entries/repo.memory.js +73 -0
- package/dist/entries/repo.memory.js.map +1 -0
- package/dist/entries/tool-registrations.d.ts +52 -0
- package/dist/entries/tool-registrations.d.ts.map +1 -0
- package/dist/entries/tool-registrations.js +141 -0
- package/dist/entries/tool-registrations.js.map +1 -0
- package/dist/entries/types.d.ts +55 -0
- package/dist/entries/types.d.ts.map +1 -0
- package/dist/entries/types.js +2 -0
- package/dist/entries/types.js.map +1 -0
- package/dist/entries/write-service.d.ts +202 -0
- package/dist/entries/write-service.d.ts.map +1 -0
- package/dist/entries/write-service.js +204 -0
- package/dist/entries/write-service.js.map +1 -0
- package/dist/identity/admin-crud-service.d.ts +252 -0
- package/dist/identity/admin-crud-service.d.ts.map +1 -0
- package/dist/identity/admin-crud-service.js +437 -0
- package/dist/identity/admin-crud-service.js.map +1 -0
- package/dist/identity/agent-tool-input.d.ts +58 -0
- package/dist/identity/agent-tool-input.d.ts.map +1 -0
- package/dist/identity/agent-tool-input.js +126 -0
- package/dist/identity/agent-tool-input.js.map +1 -0
- package/dist/identity/agent-tools.d.ts +101 -0
- package/dist/identity/agent-tools.d.ts.map +1 -0
- package/dist/identity/agent-tools.js +290 -0
- package/dist/identity/agent-tools.js.map +1 -0
- package/dist/identity/auth-service.d.ts +87 -0
- package/dist/identity/auth-service.d.ts.map +1 -0
- package/dist/identity/auth-service.js +141 -0
- package/dist/identity/auth-service.js.map +1 -0
- package/dist/identity/authorize.d.ts +90 -0
- package/dist/identity/authorize.d.ts.map +1 -0
- package/dist/identity/authorize.js +94 -0
- package/dist/identity/authorize.js.map +1 -0
- package/dist/identity/grant-service.d.ts +198 -0
- package/dist/identity/grant-service.d.ts.map +1 -0
- package/dist/identity/grant-service.js +361 -0
- package/dist/identity/grant-service.js.map +1 -0
- package/dist/identity/hasher.d.ts +39 -0
- package/dist/identity/hasher.d.ts.map +1 -0
- package/dist/identity/hasher.js +39 -0
- package/dist/identity/hasher.js.map +1 -0
- package/dist/identity/index.d.ts +59 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +51 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/identity/password-policy.d.ts +58 -0
- package/dist/identity/password-policy.d.ts.map +1 -0
- package/dist/identity/password-policy.js +67 -0
- package/dist/identity/password-policy.js.map +1 -0
- package/dist/identity/permission-migrations.d.ts +86 -0
- package/dist/identity/permission-migrations.d.ts.map +1 -0
- package/dist/identity/permission-migrations.js +67 -0
- package/dist/identity/permission-migrations.js.map +1 -0
- package/dist/identity/permissions.d.ts +35 -0
- package/dist/identity/permissions.d.ts.map +1 -0
- package/dist/identity/permissions.js +603 -0
- package/dist/identity/permissions.js.map +1 -0
- package/dist/identity/ports.d.ts +201 -0
- package/dist/identity/ports.d.ts.map +1 -0
- package/dist/identity/ports.js +2 -0
- package/dist/identity/ports.js.map +1 -0
- package/dist/identity/repo.memory.d.ts +164 -0
- package/dist/identity/repo.memory.d.ts.map +1 -0
- package/dist/identity/repo.memory.js +224 -0
- package/dist/identity/repo.memory.js.map +1 -0
- package/dist/identity/seed.d.ts +42 -0
- package/dist/identity/seed.d.ts.map +1 -0
- package/dist/identity/seed.js +277 -0
- package/dist/identity/seed.js.map +1 -0
- package/dist/identity/tool-registrations.d.ts +50 -0
- package/dist/identity/tool-registrations.d.ts.map +1 -0
- package/dist/identity/tool-registrations.js +419 -0
- package/dist/identity/tool-registrations.js.map +1 -0
- package/dist/identity/types.d.ts +185 -0
- package/dist/identity/types.d.ts.map +1 -0
- package/dist/identity/types.js +64 -0
- package/dist/identity/types.js.map +1 -0
- package/dist/identity/username.d.ts +12 -0
- package/dist/identity/username.d.ts.map +1 -0
- package/dist/identity/username.js +14 -0
- package/dist/identity/username.js.map +1 -0
- package/dist/media/agent-tools.d.ts +66 -0
- package/dist/media/agent-tools.d.ts.map +1 -0
- package/dist/media/agent-tools.js +131 -0
- package/dist/media/agent-tools.js.map +1 -0
- package/dist/media/blob-gc-lock.d.ts +37 -0
- package/dist/media/blob-gc-lock.d.ts.map +1 -0
- package/dist/media/blob-gc-lock.js +55 -0
- package/dist/media/blob-gc-lock.js.map +1 -0
- package/dist/media/blob-gc.d.ts +246 -0
- package/dist/media/blob-gc.d.ts.map +1 -0
- package/dist/media/blob-gc.js +254 -0
- package/dist/media/blob-gc.js.map +1 -0
- package/dist/media/blob-key.d.ts +28 -0
- package/dist/media/blob-key.d.ts.map +1 -0
- package/dist/media/blob-key.js +11 -0
- package/dist/media/blob-key.js.map +1 -0
- package/dist/media/blob-store.fs.d.ts +23 -0
- package/dist/media/blob-store.fs.d.ts.map +1 -0
- package/dist/media/blob-store.fs.js +48 -0
- package/dist/media/blob-store.fs.js.map +1 -0
- package/dist/media/blob-store.memory.d.ts +22 -0
- package/dist/media/blob-store.memory.d.ts.map +1 -0
- package/dist/media/blob-store.memory.js +23 -0
- package/dist/media/blob-store.memory.js.map +1 -0
- package/dist/media/content-type-sniffer.d.ts +49 -0
- package/dist/media/content-type-sniffer.d.ts.map +1 -0
- package/dist/media/content-type-sniffer.js +141 -0
- package/dist/media/content-type-sniffer.js.map +1 -0
- package/dist/media/image-transformer.d.ts +45 -0
- package/dist/media/image-transformer.d.ts.map +1 -0
- package/dist/media/image-transformer.js +23 -0
- package/dist/media/image-transformer.js.map +1 -0
- package/dist/media/image-transformer.sharp.d.ts +26 -0
- package/dist/media/image-transformer.sharp.d.ts.map +1 -0
- package/dist/media/image-transformer.sharp.js +91 -0
- package/dist/media/image-transformer.sharp.js.map +1 -0
- package/dist/media/index.d.ts +43 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +31 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/media-service.d.ts +244 -0
- package/dist/media/media-service.d.ts.map +1 -0
- package/dist/media/media-service.js +345 -0
- package/dist/media/media-service.js.map +1 -0
- package/dist/media/ports.d.ts +142 -0
- package/dist/media/ports.d.ts.map +1 -0
- package/dist/media/ports.js +2 -0
- package/dist/media/ports.js.map +1 -0
- package/dist/media/rendition-service.d.ts +66 -0
- package/dist/media/rendition-service.d.ts.map +1 -0
- package/dist/media/rendition-service.js +135 -0
- package/dist/media/rendition-service.js.map +1 -0
- package/dist/media/repo.memory.d.ts +107 -0
- package/dist/media/repo.memory.d.ts.map +1 -0
- package/dist/media/repo.memory.js +131 -0
- package/dist/media/repo.memory.js.map +1 -0
- package/dist/media/tool-registrations.d.ts +42 -0
- package/dist/media/tool-registrations.d.ts.map +1 -0
- package/dist/media/tool-registrations.js +121 -0
- package/dist/media/tool-registrations.js.map +1 -0
- package/dist/media/transform-lock.d.ts +36 -0
- package/dist/media/transform-lock.d.ts.map +1 -0
- package/dist/media/transform-lock.js +50 -0
- package/dist/media/transform-lock.js.map +1 -0
- package/dist/media/transform-registry.d.ts +103 -0
- package/dist/media/transform-registry.d.ts.map +1 -0
- package/dist/media/transform-registry.js +87 -0
- package/dist/media/transform-registry.js.map +1 -0
- package/dist/media/transform-types.d.ts +82 -0
- package/dist/media/transform-types.d.ts.map +1 -0
- package/dist/media/transform-types.js +47 -0
- package/dist/media/transform-types.js.map +1 -0
- package/dist/media/types.d.ts +150 -0
- package/dist/media/types.d.ts.map +1 -0
- package/dist/media/types.js +26 -0
- package/dist/media/types.js.map +1 -0
- package/dist/navigation/agent-tools.d.ts +90 -0
- package/dist/navigation/agent-tools.d.ts.map +1 -0
- package/dist/navigation/agent-tools.js +225 -0
- package/dist/navigation/agent-tools.js.map +1 -0
- package/dist/navigation/contracts.d.ts +98 -0
- package/dist/navigation/contracts.d.ts.map +1 -0
- package/dist/navigation/contracts.js +70 -0
- package/dist/navigation/contracts.js.map +1 -0
- package/dist/navigation/index.d.ts +39 -0
- package/dist/navigation/index.d.ts.map +1 -0
- package/dist/navigation/index.js +30 -0
- package/dist/navigation/index.js.map +1 -0
- package/dist/navigation/menu-service.d.ts +256 -0
- package/dist/navigation/menu-service.d.ts.map +1 -0
- package/dist/navigation/menu-service.js +382 -0
- package/dist/navigation/menu-service.js.map +1 -0
- package/dist/navigation/ports.d.ts +147 -0
- package/dist/navigation/ports.d.ts.map +1 -0
- package/dist/navigation/ports.js +2 -0
- package/dist/navigation/ports.js.map +1 -0
- package/dist/navigation/read-model.d.ts +11 -0
- package/dist/navigation/read-model.d.ts.map +1 -0
- package/dist/navigation/read-model.js +27 -0
- package/dist/navigation/read-model.js.map +1 -0
- package/dist/navigation/reconcile.d.ts +57 -0
- package/dist/navigation/reconcile.d.ts.map +1 -0
- package/dist/navigation/reconcile.js +33 -0
- package/dist/navigation/reconcile.js.map +1 -0
- package/dist/navigation/repo.memory.d.ts +137 -0
- package/dist/navigation/repo.memory.d.ts.map +1 -0
- package/dist/navigation/repo.memory.js +95 -0
- package/dist/navigation/repo.memory.js.map +1 -0
- package/dist/navigation/resolver.d.ts +110 -0
- package/dist/navigation/resolver.d.ts.map +1 -0
- package/dist/navigation/resolver.js +131 -0
- package/dist/navigation/resolver.js.map +1 -0
- package/dist/navigation/tool-registrations.d.ts +43 -0
- package/dist/navigation/tool-registrations.d.ts.map +1 -0
- package/dist/navigation/tool-registrations.js +126 -0
- package/dist/navigation/tool-registrations.js.map +1 -0
- package/dist/navigation/types.d.ts +207 -0
- package/dist/navigation/types.d.ts.map +1 -0
- package/dist/navigation/types.js +14 -0
- package/dist/navigation/types.js.map +1 -0
- package/dist/presentation/index.d.ts +15 -0
- package/dist/presentation/index.d.ts.map +1 -0
- package/dist/presentation/index.js +15 -0
- package/dist/presentation/index.js.map +1 -0
- package/dist/presentation/presentation.d.ts +72 -0
- package/dist/presentation/presentation.d.ts.map +1 -0
- package/dist/presentation/presentation.js +51 -0
- package/dist/presentation/presentation.js.map +1 -0
- package/dist/presentation/repo.memory.d.ts +9 -0
- package/dist/presentation/repo.memory.d.ts.map +1 -0
- package/dist/presentation/repo.memory.js +21 -0
- package/dist/presentation/repo.memory.js.map +1 -0
- package/dist/server/index.d.ts +28 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +28 -0
- package/dist/server/index.js.map +1 -0
- package/dist/settings/agent-tools.d.ts +83 -0
- package/dist/settings/agent-tools.d.ts.map +1 -0
- package/dist/settings/agent-tools.js +200 -0
- package/dist/settings/agent-tools.js.map +1 -0
- package/dist/settings/agent-writable-preferences.d.ts +67 -0
- package/dist/settings/agent-writable-preferences.d.ts.map +1 -0
- package/dist/settings/agent-writable-preferences.js +144 -0
- package/dist/settings/agent-writable-preferences.js.map +1 -0
- package/dist/settings/change-feed.d.ts +74 -0
- package/dist/settings/change-feed.d.ts.map +1 -0
- package/dist/settings/change-feed.js +61 -0
- package/dist/settings/change-feed.js.map +1 -0
- package/dist/settings/definitions-dispatch.d.ts +51 -0
- package/dist/settings/definitions-dispatch.d.ts.map +1 -0
- package/dist/settings/definitions-dispatch.js +86 -0
- package/dist/settings/definitions-dispatch.js.map +1 -0
- package/dist/settings/dictionaries/index.d.ts +45 -0
- package/dist/settings/dictionaries/index.d.ts.map +1 -0
- package/dist/settings/dictionaries/index.js +69 -0
- package/dist/settings/dictionaries/index.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ar.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ar.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ar.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ar.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.bn.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.bn.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.bn.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.bn.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.de.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.de.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.de.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.de.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.es.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.es.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.es.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.es.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.fa.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.fa.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.fa.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.fa.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.fr.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.fr.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.fr.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.fr.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.hi.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.hi.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.hi.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.hi.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.hu.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.hu.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.hu.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.hu.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.id.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.id.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.id.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.id.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.it.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.it.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.it.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.it.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ja.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ja.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ja.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ja.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ko.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ko.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ko.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ko.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.pl.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.pl.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.pl.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.pl.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.pt-BR.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.pt-BR.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.pt-BR.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.pt-BR.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ru.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ru.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ru.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ru.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.th.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.th.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.th.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.th.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.tr.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.tr.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.tr.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.tr.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.uk.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.uk.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.uk.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.uk.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ur.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ur.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ur.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ur.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.zh-CN.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.zh-CN.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.zh-CN.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.zh-CN.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.zh-TW.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.zh-TW.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.zh-TW.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.zh-TW.js.map +1 -0
- package/dist/settings/ensure-definitions.d.ts +88 -0
- package/dist/settings/ensure-definitions.d.ts.map +1 -0
- package/dist/settings/ensure-definitions.js +91 -0
- package/dist/settings/ensure-definitions.js.map +1 -0
- package/dist/settings/errors.d.ts +36 -0
- package/dist/settings/errors.d.ts.map +1 -0
- package/dist/settings/errors.js +40 -0
- package/dist/settings/errors.js.map +1 -0
- package/dist/settings/index.d.ts +37 -0
- package/dist/settings/index.d.ts.map +1 -0
- package/dist/settings/index.js +36 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/ports.d.ts +117 -0
- package/dist/settings/ports.d.ts.map +1 -0
- package/dist/settings/ports.js +2 -0
- package/dist/settings/ports.js.map +1 -0
- package/dist/settings/purge-service.d.ts +53 -0
- package/dist/settings/purge-service.d.ts.map +1 -0
- package/dist/settings/purge-service.js +105 -0
- package/dist/settings/purge-service.js.map +1 -0
- package/dist/settings/repo.memory.d.ts +119 -0
- package/dist/settings/repo.memory.d.ts.map +1 -0
- package/dist/settings/repo.memory.js +199 -0
- package/dist/settings/repo.memory.js.map +1 -0
- package/dist/settings/settings.d.ts +124 -0
- package/dist/settings/settings.d.ts.map +1 -0
- package/dist/settings/settings.js +238 -0
- package/dist/settings/settings.js.map +1 -0
- package/dist/settings/tool-registrations.d.ts +56 -0
- package/dist/settings/tool-registrations.d.ts.map +1 -0
- package/dist/settings/tool-registrations.js +240 -0
- package/dist/settings/tool-registrations.js.map +1 -0
- package/dist/settings/types.d.ts +125 -0
- package/dist/settings/types.d.ts.map +1 -0
- package/dist/settings/types.js +3 -0
- package/dist/settings/types.js.map +1 -0
- package/dist/settings/ui-tab-definitions.d.ts +41 -0
- package/dist/settings/ui-tab-definitions.d.ts.map +1 -0
- package/dist/settings/ui-tab-definitions.js +148 -0
- package/dist/settings/ui-tab-definitions.js.map +1 -0
- package/dist/settings/write-service.d.ts +314 -0
- package/dist/settings/write-service.d.ts.map +1 -0
- package/dist/settings/write-service.js +677 -0
- package/dist/settings/write-service.js.map +1 -0
- package/dist/taxonomy/agent-tools.d.ts +76 -0
- package/dist/taxonomy/agent-tools.d.ts.map +1 -0
- package/dist/taxonomy/agent-tools.js +178 -0
- package/dist/taxonomy/agent-tools.js.map +1 -0
- package/dist/taxonomy/content-lookup.d.ts +45 -0
- package/dist/taxonomy/content-lookup.d.ts.map +1 -0
- package/dist/taxonomy/content-lookup.js +9 -0
- package/dist/taxonomy/content-lookup.js.map +1 -0
- package/dist/taxonomy/index.d.ts +38 -0
- package/dist/taxonomy/index.d.ts.map +1 -0
- package/dist/taxonomy/index.js +38 -0
- package/dist/taxonomy/index.js.map +1 -0
- package/dist/taxonomy/list.d.ts +39 -0
- package/dist/taxonomy/list.d.ts.map +1 -0
- package/dist/taxonomy/list.js +19 -0
- package/dist/taxonomy/list.js.map +1 -0
- package/dist/taxonomy/merge-term.d.ts +94 -0
- package/dist/taxonomy/merge-term.d.ts.map +1 -0
- package/dist/taxonomy/merge-term.js +65 -0
- package/dist/taxonomy/merge-term.js.map +1 -0
- package/dist/taxonomy/repo.memory.d.ts +160 -0
- package/dist/taxonomy/repo.memory.d.ts.map +1 -0
- package/dist/taxonomy/repo.memory.js +171 -0
- package/dist/taxonomy/repo.memory.js.map +1 -0
- package/dist/taxonomy/validation-chain.d.ts +114 -0
- package/dist/taxonomy/validation-chain.d.ts.map +1 -0
- package/dist/taxonomy/validation-chain.js +152 -0
- package/dist/taxonomy/validation-chain.js.map +1 -0
- package/dist/taxonomy/write-service.d.ts +387 -0
- package/dist/taxonomy/write-service.d.ts.map +1 -0
- package/dist/taxonomy/write-service.js +350 -0
- package/dist/taxonomy/write-service.js.map +1 -0
- package/dist/workspace/agent-tools.d.ts +67 -0
- package/dist/workspace/agent-tools.d.ts.map +1 -0
- package/dist/workspace/agent-tools.js +103 -0
- package/dist/workspace/agent-tools.js.map +1 -0
- package/dist/workspace/create.d.ts +116 -0
- package/dist/workspace/create.d.ts.map +1 -0
- package/dist/workspace/create.js +69 -0
- package/dist/workspace/create.js.map +1 -0
- package/dist/workspace/delete.d.ts +50 -0
- package/dist/workspace/delete.d.ts.map +1 -0
- package/dist/workspace/delete.js +24 -0
- package/dist/workspace/delete.js.map +1 -0
- package/dist/workspace/index.d.ts +27 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +27 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/repo.memory.d.ts +34 -0
- package/dist/workspace/repo.memory.d.ts.map +1 -0
- package/dist/workspace/repo.memory.js +50 -0
- package/dist/workspace/repo.memory.js.map +1 -0
- package/dist/workspace/tool-registrations.d.ts +38 -0
- package/dist/workspace/tool-registrations.d.ts.map +1 -0
- package/dist/workspace/tool-registrations.js +71 -0
- package/dist/workspace/tool-registrations.js.map +1 -0
- package/dist/workspace/update.d.ts +52 -0
- package/dist/workspace/update.d.ts.map +1 -0
- package/dist/workspace/update.js +41 -0
- package/dist/workspace/update.js.map +1 -0
- package/package.json +149 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Typed error surface for the `entries` package.
|
|
3
|
+
*
|
|
4
|
+
* `class X extends Error {}` does NOT give an instance a `.name` of `"X"` on this runtime unless
|
|
5
|
+
* the constructor sets `this.name` explicitly — every class below sets it, matching the
|
|
6
|
+
* `content-types` package's own convention.
|
|
7
|
+
*
|
|
8
|
+
* Architectural role:
|
|
9
|
+
* `features/entries` domain logic. No dependencies.
|
|
10
|
+
*/
|
|
11
|
+
export declare class ForbiddenError extends Error {
|
|
12
|
+
constructor(message: string);
|
|
13
|
+
}
|
|
14
|
+
export declare class EntryNotFoundError extends Error {
|
|
15
|
+
constructor(message: string);
|
|
16
|
+
}
|
|
17
|
+
/** REQ-29/AC-29 — the owning content type does not exist, or (INV-01) exists only in a different workspace. */
|
|
18
|
+
export declare class ContentTypeNotFoundError extends Error {
|
|
19
|
+
constructor(message: string);
|
|
20
|
+
}
|
|
21
|
+
/** REQ-10 (create) / REQ-28 (update/publish/unpublish) — the owning content type's status forbids this write. */
|
|
22
|
+
export declare class ContentTypeNotActiveError extends Error {
|
|
23
|
+
constructor(message: string);
|
|
24
|
+
}
|
|
25
|
+
/** AC-21 — a second entry submitted with an identical `(workspaceId, type, slug)`. */
|
|
26
|
+
export declare class EntrySlugConflictError extends Error {
|
|
27
|
+
constructor(message: string);
|
|
28
|
+
}
|
|
29
|
+
export declare class VersionConflictError extends Error {
|
|
30
|
+
constructor(message: string);
|
|
31
|
+
}
|
|
32
|
+
/** REQ-14/15 — `fieldsJson` failed `validateFieldsAgainstSchema` against the owning type's current schema. */
|
|
33
|
+
export declare class EntryFieldValidationError extends Error {
|
|
34
|
+
readonly fieldErrors: Array<{
|
|
35
|
+
field: string;
|
|
36
|
+
reason: string;
|
|
37
|
+
}>;
|
|
38
|
+
constructor(fieldErrors: Array<{
|
|
39
|
+
field: string;
|
|
40
|
+
reason: string;
|
|
41
|
+
}>);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/entries/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,+GAA+G;AAC/G,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,iHAAiH;AACjH,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAI5B;AAED,sFAAsF;AACtF,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED,8GAA8G;AAC9G,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;gBAEnD,WAAW,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAKlE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Typed error surface for the `entries` package.
|
|
3
|
+
*
|
|
4
|
+
* `class X extends Error {}` does NOT give an instance a `.name` of `"X"` on this runtime unless
|
|
5
|
+
* the constructor sets `this.name` explicitly — every class below sets it, matching the
|
|
6
|
+
* `content-types` package's own convention.
|
|
7
|
+
*
|
|
8
|
+
* Architectural role:
|
|
9
|
+
* `features/entries` domain logic. No dependencies.
|
|
10
|
+
*/
|
|
11
|
+
export class ForbiddenError extends Error {
|
|
12
|
+
constructor(message) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.name = "ForbiddenError";
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class EntryNotFoundError extends Error {
|
|
18
|
+
constructor(message) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.name = "ENTRY_NOT_FOUND";
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** REQ-29/AC-29 — the owning content type does not exist, or (INV-01) exists only in a different workspace. */
|
|
24
|
+
export class ContentTypeNotFoundError extends Error {
|
|
25
|
+
constructor(message) {
|
|
26
|
+
super(message);
|
|
27
|
+
this.name = "CONTENT_TYPE_NOT_FOUND";
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** REQ-10 (create) / REQ-28 (update/publish/unpublish) — the owning content type's status forbids this write. */
|
|
31
|
+
export class ContentTypeNotActiveError extends Error {
|
|
32
|
+
constructor(message) {
|
|
33
|
+
super(message);
|
|
34
|
+
this.name = "ContentTypeNotActiveError";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** AC-21 — a second entry submitted with an identical `(workspaceId, type, slug)`. */
|
|
38
|
+
export class EntrySlugConflictError extends Error {
|
|
39
|
+
constructor(message) {
|
|
40
|
+
super(message);
|
|
41
|
+
this.name = "ENTRY_SLUG_CONFLICT";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export class VersionConflictError extends Error {
|
|
45
|
+
constructor(message) {
|
|
46
|
+
super(message);
|
|
47
|
+
this.name = "VersionConflictError";
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** REQ-14/15 — `fieldsJson` failed `validateFieldsAgainstSchema` against the owning type's current schema. */
|
|
51
|
+
export class EntryFieldValidationError extends Error {
|
|
52
|
+
fieldErrors;
|
|
53
|
+
constructor(fieldErrors) {
|
|
54
|
+
super(`fieldsJson failed schema validation: ${fieldErrors.map((e) => `${e.field}: ${e.reason}`).join("; ")}`);
|
|
55
|
+
this.name = "EntryFieldValidationError";
|
|
56
|
+
this.fieldErrors = fieldErrors;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/entries/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,+GAA+G;AAC/G,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,iHAAiH;AACjH,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAClD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AAED,sFAAsF;AACtF,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,8GAA8G;AAC9G,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IACzC,WAAW,CAA2C;IAE/D,YAAY,WAAqD;QAC/D,KAAK,CAAC,wCAAwC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9G,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { ContentTypeFieldDef } from "../content-types/types.js";
|
|
2
|
+
/**
|
|
3
|
+
* @file `validateFieldsAgainstSchema`'s envelope-shape-first ordering and
|
|
4
|
+
* `selectVisibleEntryFields`'s orphaned-field read tolerance ("Failure modes",
|
|
5
|
+
* schema drift / dangling fields: "validation is strict on write, tolerant on read").
|
|
6
|
+
*
|
|
7
|
+
* Purpose:
|
|
8
|
+
* The single pure-logic implementation of "does this `fieldsJson` conform to this content type's
|
|
9
|
+
* current schema" — reused identically by `write-service.ts`'s `createEntry`/`updateEntry` and by
|
|
10
|
+
* any future validate-only route, so there is exactly one place this rule can drift.
|
|
11
|
+
* `fieldsJson` must already be wrapped in the `{ ext: { <owner>: {...} } }` namespaced envelope
|
|
12
|
+
* — a flat/unwrapped payload is rejected as a distinct envelope-shape violation
|
|
13
|
+
* BEFORE any per-field check runs, never conflated with a per-field error for a key
|
|
14
|
+
* that happens to share a field's name.
|
|
15
|
+
*
|
|
16
|
+
* Owner namespace (2026-07-21): `validateFieldsAgainstSchema` takes an optional `owner`, defaulting
|
|
17
|
+
* to `"site"` — every caller that omits it keeps the originally-shipped, single-namespace
|
|
18
|
+
* behavior byte-for-byte (same envelope, same error message, same certified test suite).
|
|
19
|
+
* This is the fix for a real, confirmed gap: this module previously hardcoded the literal `site`
|
|
20
|
+
* namespace with no way for a content type to declare its own, contradicting this engine's
|
|
21
|
+
* documented `fields.ext.{owner}.*` promise (first surfaced by a widgets feature, which needs
|
|
22
|
+
* `ext.widget`/`ext.widgets`, not `ext.site`, for data that structurally belongs to a different
|
|
23
|
+
* feature).
|
|
24
|
+
* `selectVisibleEntryFields` is intentionally left untouched — it has no production caller anywhere
|
|
25
|
+
* in this codebase today, so widening it now would be speculative; extend it the same way once a
|
|
26
|
+
* real caller needs a non-`site` read projection.
|
|
27
|
+
*
|
|
28
|
+
* Architectural role:
|
|
29
|
+
* `features/entries` domain logic. Type-only dependency on `features/content-types/types`.
|
|
30
|
+
*/
|
|
31
|
+
export interface FieldValidationError {
|
|
32
|
+
field: string;
|
|
33
|
+
reason: string;
|
|
34
|
+
}
|
|
35
|
+
export interface ValidateFieldsResult {
|
|
36
|
+
valid: boolean;
|
|
37
|
+
fieldErrors: FieldValidationError[];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* REQ-14/15 — validates a candidate `fieldsJson` payload against a content type's current field
|
|
41
|
+
* schema: envelope shape first (AC-50), then per-key unrecognized-field rejection (AC-22) and
|
|
42
|
+
* kind-conformance (AC-49), then a required-field-missing pass (AC-23).
|
|
43
|
+
*
|
|
44
|
+
* @complexity O(f) in the number of schema fields plus O(k) in the number of submitted keys.
|
|
45
|
+
* @overallScore 100
|
|
46
|
+
*/
|
|
47
|
+
export declare function validateFieldsAgainstSchema(required: {
|
|
48
|
+
schema: ContentTypeFieldDef[];
|
|
49
|
+
fieldsJson: unknown;
|
|
50
|
+
/** The `ext` sub-key this content type's fields live under. Defaults to `"site"` — every existing caller keeps identical behavior unless it opts into a different owner namespace. */
|
|
51
|
+
owner?: string | undefined;
|
|
52
|
+
}): ValidateFieldsResult;
|
|
53
|
+
/**
|
|
54
|
+
* Projects an entry's `fieldsJson.ext.site` down to only the keys still present in
|
|
55
|
+
* the content type's CURRENT schema, silently dropping orphaned keys left behind by a prior field
|
|
56
|
+
* removal rather than erroring ("Failure modes": "validation is strict on write, tolerant
|
|
57
|
+
* on read").
|
|
58
|
+
*
|
|
59
|
+
* @complexity O(k) in the number of keys present on the entry's stored fields bag.
|
|
60
|
+
* @overallScore 100
|
|
61
|
+
*/
|
|
62
|
+
export declare function selectVisibleEntryFields(required: {
|
|
63
|
+
entry: {
|
|
64
|
+
fieldsJson: unknown;
|
|
65
|
+
};
|
|
66
|
+
contentType: {
|
|
67
|
+
fields: ContentTypeFieldDef[];
|
|
68
|
+
};
|
|
69
|
+
}): Record<string, unknown>;
|
|
70
|
+
//# sourceMappingURL=field-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-validation.d.ts","sourceRoot":"","sources":["../../src/entries/field-validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAwB,MAAM,2BAA2B,CAAC;AAE3F;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AA8BD;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE;IACpD,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,sLAAsL;IACtL,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,GAAG,oBAAoB,CAiCvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE;IACjD,KAAK,EAAE;QAAE,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC;IAC/B,WAAW,EAAE;QAAE,MAAM,EAAE,mBAAmB,EAAE,CAAA;KAAE,CAAC;CAChD,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAY1B"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
function isPlainObject(value) {
|
|
2
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Runtime-conformance check for one field's value against its declared kind. Loose by design
|
|
6
|
+
* (e.g. `datetime` accepts any string) — kind-conformance here is about JS runtime shape, not
|
|
7
|
+
* full ISO-8601/format validation, which is out of this package's scope.
|
|
8
|
+
*
|
|
9
|
+
* @complexity O(1).
|
|
10
|
+
* @overallScore 100
|
|
11
|
+
*/
|
|
12
|
+
function conformsToKind(value, kind) {
|
|
13
|
+
switch (kind) {
|
|
14
|
+
case "text":
|
|
15
|
+
case "datetime":
|
|
16
|
+
return typeof value === "string";
|
|
17
|
+
case "integer":
|
|
18
|
+
return typeof value === "number" && Number.isInteger(value);
|
|
19
|
+
case "real":
|
|
20
|
+
return typeof value === "number";
|
|
21
|
+
case "boolean":
|
|
22
|
+
return typeof value === "boolean";
|
|
23
|
+
default:
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* REQ-14/15 — validates a candidate `fieldsJson` payload against a content type's current field
|
|
29
|
+
* schema: envelope shape first (AC-50), then per-key unrecognized-field rejection (AC-22) and
|
|
30
|
+
* kind-conformance (AC-49), then a required-field-missing pass (AC-23).
|
|
31
|
+
*
|
|
32
|
+
* @complexity O(f) in the number of schema fields plus O(k) in the number of submitted keys.
|
|
33
|
+
* @overallScore 100
|
|
34
|
+
*/
|
|
35
|
+
export function validateFieldsAgainstSchema(required) {
|
|
36
|
+
const { schema, fieldsJson, owner = "site" } = required;
|
|
37
|
+
const ext = isPlainObject(fieldsJson) ? fieldsJson.ext : undefined;
|
|
38
|
+
const ownerBag = isPlainObject(ext) ? ext[owner] : undefined;
|
|
39
|
+
if (!isPlainObject(fieldsJson) || !isPlainObject(ext) || !isPlainObject(ownerBag)) {
|
|
40
|
+
return {
|
|
41
|
+
valid: false,
|
|
42
|
+
fieldErrors: [{ field: "__envelope__", reason: `fieldsJson must be wrapped in the { ext: { ${owner}: {...} } } envelope shape` }],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
const schemaByName = new Map(schema.map((f) => [f.name, f]));
|
|
46
|
+
const fieldErrors = [];
|
|
47
|
+
for (const [key, value] of Object.entries(ownerBag)) {
|
|
48
|
+
const def = schemaByName.get(key);
|
|
49
|
+
if (!def) {
|
|
50
|
+
fieldErrors.push({ field: key, reason: "unrecognized field: not present in the current content-type schema" });
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (!conformsToKind(value, def.kind)) {
|
|
54
|
+
fieldErrors.push({ field: key, reason: `value does not conform to the declared kind '${def.kind}'` });
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
for (const def of schema) {
|
|
58
|
+
if (def.required && !Object.prototype.hasOwnProperty.call(ownerBag, def.name)) {
|
|
59
|
+
fieldErrors.push({ field: def.name, reason: "required field is missing" });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return { valid: fieldErrors.length === 0, fieldErrors };
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Projects an entry's `fieldsJson.ext.site` down to only the keys still present in
|
|
66
|
+
* the content type's CURRENT schema, silently dropping orphaned keys left behind by a prior field
|
|
67
|
+
* removal rather than erroring ("Failure modes": "validation is strict on write, tolerant
|
|
68
|
+
* on read").
|
|
69
|
+
*
|
|
70
|
+
* @complexity O(k) in the number of keys present on the entry's stored fields bag.
|
|
71
|
+
* @overallScore 100
|
|
72
|
+
*/
|
|
73
|
+
export function selectVisibleEntryFields(required) {
|
|
74
|
+
const fieldsJson = required.entry.fieldsJson;
|
|
75
|
+
const ext = isPlainObject(fieldsJson) ? fieldsJson.ext : undefined;
|
|
76
|
+
const site = isPlainObject(ext) ? ext.site : undefined;
|
|
77
|
+
const allowedNames = new Set(required.contentType.fields.map((f) => f.name));
|
|
78
|
+
const visible = {};
|
|
79
|
+
if (!isPlainObject(site))
|
|
80
|
+
return visible;
|
|
81
|
+
for (const [key, value] of Object.entries(site)) {
|
|
82
|
+
if (allowedNames.has(key))
|
|
83
|
+
visible[key] = value;
|
|
84
|
+
}
|
|
85
|
+
return visible;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=field-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-validation.js","sourceRoot":"","sources":["../../src/entries/field-validation.ts"],"names":[],"mappings":"AA0CA,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,KAAc,EAAE,IAA0B;IAChE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU;YACb,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;QACnC,KAAK,SAAS;YACZ,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9D,KAAK,MAAM;YACT,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;QACnC,KAAK,SAAS;YACZ,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC;QACpC;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CAAC,QAK3C;IACC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,GAAG,MAAM,EAAE,GAAG,QAAQ,CAAC;IAExD,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClF,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,8CAA8C,KAAK,4BAA4B,EAAE,CAAC;SAClI,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,WAAW,GAA2B,EAAE,CAAC;IAE/C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,oEAAoE,EAAE,CAAC,CAAC;YAC/G,SAAS;QACX,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,gDAAgD,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9E,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;AAC1D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAGxC;IACC,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;IAC7C,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAE7E,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAClD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Public surface (barrel) for the `entries` library.
|
|
3
|
+
*
|
|
4
|
+
* A module's public contract is its `index.ts` — deep imports from outside this
|
|
5
|
+
* directory should go through here.
|
|
6
|
+
*
|
|
7
|
+
* `entries` and `content-types` ship as two subpaths rather than one because they are two
|
|
8
|
+
* contracts: an entry's write path needs only a *read-only slice* of its owning content type
|
|
9
|
+
* (`OwningContentType` in `types.ts`), never that type's write authority. The dependency between
|
|
10
|
+
* them is type-only and one-directional, and keeping the entry points separate is what makes that
|
|
11
|
+
* checkable rather than merely intended.
|
|
12
|
+
*/
|
|
13
|
+
export type { EntryStatus, EntryFieldsJson, EntryRecord, OwningContentType, ActorIdentityInput, Result, } from "./types.js";
|
|
14
|
+
export type { EntryListPort } from "./list.js";
|
|
15
|
+
export { listEntries } from "./list.js";
|
|
16
|
+
export type { FieldValidationError, ValidateFieldsResult, } from "./field-validation.js";
|
|
17
|
+
export { validateFieldsAgainstSchema, selectVisibleEntryFields } from "./field-validation.js";
|
|
18
|
+
/**
|
|
19
|
+
* These are exported as **values**, not types: callers catch them with `instanceof`. Because this
|
|
20
|
+
* barrel re-exports rather than redeclares, there is exactly one class object per error across
|
|
21
|
+
* every consumer.
|
|
22
|
+
*
|
|
23
|
+
* `ForbiddenError` and `VersionConflictError` are this module's own, deliberately distinct from the
|
|
24
|
+
* same-named classes on `../core/commands/command.js` and on `../content-types/index.js`. That
|
|
25
|
+
* separation is inherited from the source this was ported from; a consumer catching across the
|
|
26
|
+
* boundary must catch the one it actually called into.
|
|
27
|
+
*/
|
|
28
|
+
export { ForbiddenError, EntryNotFoundError, ContentTypeNotFoundError, ContentTypeNotActiveError, EntrySlugConflictError, VersionConflictError, EntryFieldValidationError, } from "./errors.js";
|
|
29
|
+
export type { EntryLifecycleOp, EntryLifecycleHandler } from "./lifecycle-dispatch.js";
|
|
30
|
+
export { ENTRY_LIFECYCLE_OP_NAMES, ENTRY_LIFECYCLE_OPS, parseEntryLifecycleOp, } from "./lifecycle-dispatch.js";
|
|
31
|
+
export type { AuthorizeFn, EntryRevisionInput, EntryRepoPort, ContentTypeLookupPort, OutboxPort, WatermarkPort, CreateEntryRequired, UpdateEntryRequired, PublishUnpublishEntryRequired, } from "./write-service.js";
|
|
32
|
+
export { createEntry, updateEntry, publishEntry, unpublishEntry } from "./write-service.js";
|
|
33
|
+
/**
|
|
34
|
+
* The in-memory repository. Exported for the same reason `navigation` exports its own: a host's
|
|
35
|
+
* concrete adapter implements the port directly, and the in-memory implementation is the reference
|
|
36
|
+
* a consumer tests against before it has one.
|
|
37
|
+
*/
|
|
38
|
+
export { InMemoryEntryRepo, toEntryOutbox } from "./repo.memory.js";
|
|
39
|
+
/** The agent-tool surface for this domain (see `agent-tools.ts` for what is deliberately omitted). */
|
|
40
|
+
export { entriesAgentToolCatalog, type AgentToolDefinition as EntriesAgentToolDefinition, type AgentToolSideEffect as EntriesAgentToolSideEffect, } from "./agent-tools.js";
|
|
41
|
+
/**
|
|
42
|
+
* The agent-tool wiring for this domain.
|
|
43
|
+
*
|
|
44
|
+
* `EntriesToolDeps` is declared structurally rather than derived from any host's request-scoped
|
|
45
|
+
* dependency bag, which is what lets a host satisfy it by passing whatever object it already has —
|
|
46
|
+
* the shape is the contract, so no host type needs to be named here.
|
|
47
|
+
*/
|
|
48
|
+
export { buildEntriesRegistrations, entriesDerivedRisk, type EntriesToolDeps, } from "./tool-registrations.js";
|
|
49
|
+
/**
|
|
50
|
+
* There is no SQLite adapter export here, deliberately. A concrete `EntryRepoPort` over a specific
|
|
51
|
+
* database handle would put one host's persistence choice on this library's public contract and
|
|
52
|
+
* drag that host's schema into every consumer's dependency closure. Hosts compose their own; this
|
|
53
|
+
* entry point exports the ports they compose against.
|
|
54
|
+
*/
|
|
55
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entries/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,YAAY,EACV,WAAW,EACX,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,GACP,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,YAAY,EACV,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAE9F;;;;;;;;;GASG;AACH,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACrB,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE5F;;;;GAIG;AACH,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEpE,sGAAsG;AACtG,OAAO,EACL,uBAAuB,EACvB,KAAK,mBAAmB,IAAI,0BAA0B,EACtD,KAAK,mBAAmB,IAAI,0BAA0B,GACvD,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,KAAK,eAAe,GACrB,MAAM,yBAAyB,CAAC;AAEjC;;;;;GAKG"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export { listEntries } from "./list.js";
|
|
2
|
+
export { validateFieldsAgainstSchema, selectVisibleEntryFields } from "./field-validation.js";
|
|
3
|
+
/**
|
|
4
|
+
* These are exported as **values**, not types: callers catch them with `instanceof`. Because this
|
|
5
|
+
* barrel re-exports rather than redeclares, there is exactly one class object per error across
|
|
6
|
+
* every consumer.
|
|
7
|
+
*
|
|
8
|
+
* `ForbiddenError` and `VersionConflictError` are this module's own, deliberately distinct from the
|
|
9
|
+
* same-named classes on `../core/commands/command.js` and on `../content-types/index.js`. That
|
|
10
|
+
* separation is inherited from the source this was ported from; a consumer catching across the
|
|
11
|
+
* boundary must catch the one it actually called into.
|
|
12
|
+
*/
|
|
13
|
+
export { ForbiddenError, EntryNotFoundError, ContentTypeNotFoundError, ContentTypeNotActiveError, EntrySlugConflictError, VersionConflictError, EntryFieldValidationError, } from "./errors.js";
|
|
14
|
+
export { ENTRY_LIFECYCLE_OP_NAMES, ENTRY_LIFECYCLE_OPS, parseEntryLifecycleOp, } from "./lifecycle-dispatch.js";
|
|
15
|
+
export { createEntry, updateEntry, publishEntry, unpublishEntry } from "./write-service.js";
|
|
16
|
+
/**
|
|
17
|
+
* The in-memory repository. Exported for the same reason `navigation` exports its own: a host's
|
|
18
|
+
* concrete adapter implements the port directly, and the in-memory implementation is the reference
|
|
19
|
+
* a consumer tests against before it has one.
|
|
20
|
+
*/
|
|
21
|
+
export { InMemoryEntryRepo, toEntryOutbox } from "./repo.memory.js";
|
|
22
|
+
/** The agent-tool surface for this domain (see `agent-tools.ts` for what is deliberately omitted). */
|
|
23
|
+
export { entriesAgentToolCatalog, } from "./agent-tools.js";
|
|
24
|
+
/**
|
|
25
|
+
* The agent-tool wiring for this domain.
|
|
26
|
+
*
|
|
27
|
+
* `EntriesToolDeps` is declared structurally rather than derived from any host's request-scoped
|
|
28
|
+
* dependency bag, which is what lets a host satisfy it by passing whatever object it already has —
|
|
29
|
+
* the shape is the contract, so no host type needs to be named here.
|
|
30
|
+
*/
|
|
31
|
+
export { buildEntriesRegistrations, entriesDerivedRisk, } from "./tool-registrations.js";
|
|
32
|
+
/**
|
|
33
|
+
* There is no SQLite adapter export here, deliberately. A concrete `EntryRepoPort` over a specific
|
|
34
|
+
* database handle would put one host's persistence choice on this library's public contract and
|
|
35
|
+
* drag that host's schema into every consumer's dependency closure. Hosts compose their own; this
|
|
36
|
+
* entry point exports the ports they compose against.
|
|
37
|
+
*/
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/entries/index.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAMxC,OAAO,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAE9F;;;;;;;;;GASG;AACH,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAajC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE5F;;;;GAIG;AACH,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEpE,sGAAsG;AACtG,OAAO,EACL,uBAAuB,GAGxB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,OAAO,EACL,yBAAyB,EACzB,kBAAkB,GAEnB,MAAM,yBAAyB,CAAC;AAEjC;;;;;GAKG"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type PublishUnpublishEntryRequired } from "./write-service.js";
|
|
2
|
+
import type { EntryRecord, Result } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* @file Entry publish/unpublish `op` dispatch (the closed-union-dispatch convention, same
|
|
5
|
+
* shape as `features/content-types/lifecycle-dispatch.ts`).
|
|
6
|
+
*/
|
|
7
|
+
export declare const ENTRY_LIFECYCLE_OP_NAMES: readonly ["publish", "unpublish"];
|
|
8
|
+
export type EntryLifecycleOp = (typeof ENTRY_LIFECYCLE_OP_NAMES)[number];
|
|
9
|
+
/** Narrows an untrusted `op` string to {@link EntryLifecycleOp}, or `null` if it isn't one. */
|
|
10
|
+
export declare function parseEntryLifecycleOp(op: unknown): EntryLifecycleOp | null;
|
|
11
|
+
export type EntryLifecycleHandler = (required: PublishUnpublishEntryRequired) => Promise<Result<{
|
|
12
|
+
entry: EntryRecord;
|
|
13
|
+
}, Error>>;
|
|
14
|
+
export declare const ENTRY_LIFECYCLE_OPS: Record<EntryLifecycleOp, EntryLifecycleHandler>;
|
|
15
|
+
//# sourceMappingURL=lifecycle-dispatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle-dispatch.d.ts","sourceRoot":"","sources":["../../src/entries/lifecycle-dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACtG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEtD;;;GAGG;AAEH,eAAO,MAAM,wBAAwB,mCAAoC,CAAC;AAC1E,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzE,+FAA+F;AAC/F,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAE1E;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,QAAQ,EAAE,6BAA6B,KAAK,OAAO,CAAC,MAAM,CAAC;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,EAAE,KAAK,CAAC,CAAC,CAAC;AAOhI,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,gBAAgB,EAAE,qBAAqB,CAG/E,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { publishEntry, unpublishEntry } from "./write-service.js";
|
|
2
|
+
/**
|
|
3
|
+
* @file Entry publish/unpublish `op` dispatch (the closed-union-dispatch convention, same
|
|
4
|
+
* shape as `features/content-types/lifecycle-dispatch.ts`).
|
|
5
|
+
*/
|
|
6
|
+
export const ENTRY_LIFECYCLE_OP_NAMES = ["publish", "unpublish"];
|
|
7
|
+
/** Narrows an untrusted `op` string to {@link EntryLifecycleOp}, or `null` if it isn't one. */
|
|
8
|
+
export function parseEntryLifecycleOp(op) {
|
|
9
|
+
return typeof op === "string" && ENTRY_LIFECYCLE_OP_NAMES.includes(op) ? op : null;
|
|
10
|
+
}
|
|
11
|
+
const entryLifecycleOps = {
|
|
12
|
+
publish: (required) => publishEntry(required),
|
|
13
|
+
unpublish: (required) => unpublishEntry(required),
|
|
14
|
+
};
|
|
15
|
+
export const ENTRY_LIFECYCLE_OPS = Object.assign(Object.create(null), entryLifecycleOps);
|
|
16
|
+
//# sourceMappingURL=lifecycle-dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle-dispatch.js","sourceRoot":"","sources":["../../src/entries/lifecycle-dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAsC,MAAM,oBAAoB,CAAC;AAGtG;;;GAGG;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,SAAS,EAAE,WAAW,CAAU,CAAC;AAG1E,+FAA+F;AAC/F,MAAM,UAAU,qBAAqB,CAAC,EAAW;IAC/C,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAK,wBAA8C,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,EAAuB,CAAC,CAAC,CAAC,IAAI,CAAC;AAClI,CAAC;AAID,MAAM,iBAAiB,GAAG;IACxB,OAAO,EAAE,CAAC,QAAuC,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC;IAC5E,SAAS,EAAE,CAAC,QAAuC,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC;CACvB,CAAC;AAE5D,MAAM,CAAC,MAAM,mBAAmB,GAAoD,MAAM,CAAC,MAAM,CAC/F,MAAM,CAAC,MAAM,CAAC,IAAI,CAAoD,EACtE,iBAAiB,CAClB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { EntryRecord, EntryStatus } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* @file Admin-UI backend-gap closure (design-spec.md §1.9) — the `entries` package's missing read
|
|
4
|
+
* side. Mirrors `features/content-types/list.ts`'s shape exactly: a thin pass-through over an
|
|
5
|
+
* injected read port, no authorization of its own (the caller route checks `admin.collections.read`
|
|
6
|
+
* first).
|
|
7
|
+
*
|
|
8
|
+
* `status`/`orderBy`/`limit` (2026-07-21) — added to close a real, audit-confirmed gap
|
|
9
|
+
* (`widgets/resolvers/recent-entries.ts` was loading every entry in the workspace into memory with
|
|
10
|
+
* no filter/bound at all, then sorting/slicing in JS, violating this engine's "one bounded
|
|
11
|
+
* query, no unbounded scans" resolver contract). All three are optional and additive — every
|
|
12
|
+
* existing caller that omits them keeps identical behavior.
|
|
13
|
+
*
|
|
14
|
+
* Architectural role:
|
|
15
|
+
* `features/entries` domain logic. Depends only on this package's own `types.ts`.
|
|
16
|
+
*/
|
|
17
|
+
export interface EntryListPort {
|
|
18
|
+
/** Every entry of `type` in `workspaceId`, in no particular guaranteed order (the route layer
|
|
19
|
+
* sorts for display) unless `orderBy` is supplied. `type` is optional so a caller can list across
|
|
20
|
+
* every content type at once (design-spec.md doesn't require this today, but the port stays
|
|
21
|
+
* general rather than baking in the one call shape the current screen needs). `status`/`orderBy`/
|
|
22
|
+
* `limit` are pushed down into the query itself (not applied client-side after a full scan) by
|
|
23
|
+
* every real adapter — a caller needing a bounded, sorted read (e.g. a resolver's cost clamp)
|
|
24
|
+
* must supply them rather than fetching everything and truncating in memory. */
|
|
25
|
+
listByWorkspace(params: {
|
|
26
|
+
workspaceId: string;
|
|
27
|
+
type?: string | undefined;
|
|
28
|
+
status?: EntryStatus | undefined;
|
|
29
|
+
orderBy?: "updatedAt" | undefined;
|
|
30
|
+
orderDirection?: "asc" | "desc" | undefined;
|
|
31
|
+
limit?: number | undefined;
|
|
32
|
+
}): Promise<EntryRecord[]>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Lists entries for `workspaceId`, optionally narrowed to one content `type`.
|
|
36
|
+
*
|
|
37
|
+
* @complexity O(1) plus one `EntryListPort.listByWorkspace()` call.
|
|
38
|
+
* @overallScore 100
|
|
39
|
+
*/
|
|
40
|
+
export declare function listEntries(required: {
|
|
41
|
+
repo: EntryListPort;
|
|
42
|
+
workspaceId: string;
|
|
43
|
+
type?: string | undefined;
|
|
44
|
+
}, _optional?: Record<string, never>): Promise<{
|
|
45
|
+
items: EntryRecord[];
|
|
46
|
+
}>;
|
|
47
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/entries/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE3D;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,aAAa;IAC5B;;;;;;oFAMgF;IAChF,eAAe,CAAC,MAAM,EAAE;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;QACjC,OAAO,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;QAClC,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;QAC5C,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC5B,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EACjF,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GACpC,OAAO,CAAC;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,CAInC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lists entries for `workspaceId`, optionally narrowed to one content `type`.
|
|
3
|
+
*
|
|
4
|
+
* @complexity O(1) plus one `EntryListPort.listByWorkspace()` call.
|
|
5
|
+
* @overallScore 100
|
|
6
|
+
*/
|
|
7
|
+
export async function listEntries(required, _optional = {}) {
|
|
8
|
+
const { repo, workspaceId, type } = required;
|
|
9
|
+
const items = await repo.listByWorkspace({ workspaceId, type });
|
|
10
|
+
return { items };
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/entries/list.ts"],"names":[],"mappings":"AAoCA;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAiF,EACjF,YAAmC,EAAE;IAErC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { EntryRepoPort, EntryRevisionInput, OutboxPort } from "./write-service.js";
|
|
2
|
+
import type { EntryListPort } from "./list.js";
|
|
3
|
+
import type { EntryRecord, EntryStatus } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* @file In-memory `EntryRepoPort` + `EntryListPort` double (same disclosed rule-of-two-until-a-
|
|
6
|
+
* real-adapter-exists precedent as `features/content-types/repo.memory.ts` — see that file's
|
|
7
|
+
* header for the full disclosure, which applies identically here).
|
|
8
|
+
*/
|
|
9
|
+
export declare class InMemoryEntryRepo implements EntryRepoPort, EntryListPort {
|
|
10
|
+
private readonly byId;
|
|
11
|
+
private readonly revisions;
|
|
12
|
+
private static slugKey;
|
|
13
|
+
findBySlug(params: {
|
|
14
|
+
workspaceId: string;
|
|
15
|
+
type: string;
|
|
16
|
+
slug: string;
|
|
17
|
+
}): Promise<EntryRecord | null>;
|
|
18
|
+
findById(params: {
|
|
19
|
+
workspaceId: string;
|
|
20
|
+
id: string;
|
|
21
|
+
}): Promise<EntryRecord | null>;
|
|
22
|
+
save(row: EntryRecord): Promise<void>;
|
|
23
|
+
appendRevision(revision: EntryRevisionInput): Promise<void>;
|
|
24
|
+
transaction<T>(fn: () => Promise<T>): Promise<T>;
|
|
25
|
+
listByWorkspace(params: {
|
|
26
|
+
workspaceId: string;
|
|
27
|
+
type?: string;
|
|
28
|
+
status?: EntryStatus;
|
|
29
|
+
orderBy?: "updatedAt";
|
|
30
|
+
orderDirection?: "asc" | "desc";
|
|
31
|
+
limit?: number;
|
|
32
|
+
}): Promise<EntryRecord[]>;
|
|
33
|
+
}
|
|
34
|
+
/** Adapts a real `core/ports` `OutboxPort` into the narrower `{enqueue({name,payload})}` shape
|
|
35
|
+
* `entries/write-service.ts` declares locally — same pattern as
|
|
36
|
+
* `features/content-types/repo.memory.ts`'s `toContentTypeOutbox`.
|
|
37
|
+
*
|
|
38
|
+
* `workspaceId` is REQUIRED and is declared on the wrapped port's event type on purpose. A real
|
|
39
|
+
* `core/ports` `DomainEvent` carries `workspaceId` as a non-optional tenant boundary, and
|
|
40
|
+
* persistent adapters store it in a NOT NULL column. This wrapper previously under-declared the
|
|
41
|
+
* wrapped port as `{id,name,occurredAt,payload}` and constructed an event without `workspaceId`, so
|
|
42
|
+
* a host binding a SQLite outbox typechecked cleanly and then threw
|
|
43
|
+
* `NOT NULL constraint failed: outbox_events.workspace_id` on every write. Sourcing it from `deps`
|
|
44
|
+
* rather than from `event.payload` is deliberate: the narrow local port carries only `{name,payload}`
|
|
45
|
+
* and payload contents are per-event convention, not a contract. */
|
|
46
|
+
export declare function toEntryOutbox(deps: {
|
|
47
|
+
outbox: {
|
|
48
|
+
enqueue(event: {
|
|
49
|
+
id: string;
|
|
50
|
+
workspaceId: string;
|
|
51
|
+
name: string;
|
|
52
|
+
occurredAt: string;
|
|
53
|
+
payload: Record<string, unknown>;
|
|
54
|
+
}): Promise<void>;
|
|
55
|
+
};
|
|
56
|
+
clock: {
|
|
57
|
+
nowIso(): string;
|
|
58
|
+
};
|
|
59
|
+
idGen: {
|
|
60
|
+
newId(): string;
|
|
61
|
+
};
|
|
62
|
+
workspaceId: string;
|
|
63
|
+
}): OutboxPort;
|
|
64
|
+
//# sourceMappingURL=repo.memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo.memory.d.ts","sourceRoot":"","sources":["../../src/entries/repo.memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACxF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE3D;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,aAAa,EAAE,aAAa;IACpE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkC;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;IAEtD,OAAO,CAAC,MAAM,CAAC,OAAO;IAIhB,UAAU,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAQpG,QAAQ,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAKlF,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,cAAc,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhD,eAAe,CAAC,MAAM,EAAE;QAC5B,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,OAAO,CAAC,EAAE,WAAW,CAAC;QACtB,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;QAChC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAe3B;AAED;;;;;;;;;;;oEAWoE;AACpE,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,MAAM,EAAE;QACN,OAAO,CAAC,KAAK,EAAE;YACb,EAAE,EAAE,MAAM,CAAC;YACX,WAAW,EAAE,MAAM,CAAC;YACpB,IAAI,EAAE,MAAM,CAAC;YACb,UAAU,EAAE,MAAM,CAAC;YACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SAClC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACnB,CAAC;IACF,KAAK,EAAE;QAAE,MAAM,IAAI,MAAM,CAAA;KAAE,CAAC;IAC5B,KAAK,EAAE;QAAE,KAAK,IAAI,MAAM,CAAA;KAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,UAAU,CAYb"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file In-memory `EntryRepoPort` + `EntryListPort` double (same disclosed rule-of-two-until-a-
|
|
3
|
+
* real-adapter-exists precedent as `features/content-types/repo.memory.ts` — see that file's
|
|
4
|
+
* header for the full disclosure, which applies identically here).
|
|
5
|
+
*/
|
|
6
|
+
export class InMemoryEntryRepo {
|
|
7
|
+
byId = new Map();
|
|
8
|
+
revisions = [];
|
|
9
|
+
static slugKey(workspaceId, type, slug) {
|
|
10
|
+
return `${workspaceId}::${type}::${slug}`;
|
|
11
|
+
}
|
|
12
|
+
async findBySlug(params) {
|
|
13
|
+
const target = InMemoryEntryRepo.slugKey(params.workspaceId, params.type, params.slug);
|
|
14
|
+
for (const row of this.byId.values()) {
|
|
15
|
+
if (InMemoryEntryRepo.slugKey(row.workspaceId, row.type, row.slug) === target)
|
|
16
|
+
return { ...row };
|
|
17
|
+
}
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
async findById(params) {
|
|
21
|
+
const row = this.byId.get(params.id);
|
|
22
|
+
return row && row.workspaceId === params.workspaceId ? { ...row } : null;
|
|
23
|
+
}
|
|
24
|
+
async save(row) {
|
|
25
|
+
this.byId.set(row.id, { ...row });
|
|
26
|
+
}
|
|
27
|
+
async appendRevision(revision) {
|
|
28
|
+
this.revisions.push(revision);
|
|
29
|
+
}
|
|
30
|
+
async transaction(fn) {
|
|
31
|
+
return fn();
|
|
32
|
+
}
|
|
33
|
+
async listByWorkspace(params) {
|
|
34
|
+
let rows = [...this.byId.values()]
|
|
35
|
+
.filter((row) => row.workspaceId === params.workspaceId)
|
|
36
|
+
.filter((row) => !params.type || row.type === params.type)
|
|
37
|
+
.filter((row) => !params.status || row.status === params.status);
|
|
38
|
+
if (params.orderBy === "updatedAt") {
|
|
39
|
+
const dir = params.orderDirection === "asc" ? 1 : -1;
|
|
40
|
+
rows = rows.sort((a, b) => (a.updatedAt < b.updatedAt ? -dir : a.updatedAt > b.updatedAt ? dir : 0));
|
|
41
|
+
}
|
|
42
|
+
if (typeof params.limit === "number") {
|
|
43
|
+
rows = rows.slice(0, params.limit);
|
|
44
|
+
}
|
|
45
|
+
return rows.map((row) => ({ ...row }));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** Adapts a real `core/ports` `OutboxPort` into the narrower `{enqueue({name,payload})}` shape
|
|
49
|
+
* `entries/write-service.ts` declares locally — same pattern as
|
|
50
|
+
* `features/content-types/repo.memory.ts`'s `toContentTypeOutbox`.
|
|
51
|
+
*
|
|
52
|
+
* `workspaceId` is REQUIRED and is declared on the wrapped port's event type on purpose. A real
|
|
53
|
+
* `core/ports` `DomainEvent` carries `workspaceId` as a non-optional tenant boundary, and
|
|
54
|
+
* persistent adapters store it in a NOT NULL column. This wrapper previously under-declared the
|
|
55
|
+
* wrapped port as `{id,name,occurredAt,payload}` and constructed an event without `workspaceId`, so
|
|
56
|
+
* a host binding a SQLite outbox typechecked cleanly and then threw
|
|
57
|
+
* `NOT NULL constraint failed: outbox_events.workspace_id` on every write. Sourcing it from `deps`
|
|
58
|
+
* rather than from `event.payload` is deliberate: the narrow local port carries only `{name,payload}`
|
|
59
|
+
* and payload contents are per-event convention, not a contract. */
|
|
60
|
+
export function toEntryOutbox(deps) {
|
|
61
|
+
return {
|
|
62
|
+
enqueue: async (event) => {
|
|
63
|
+
await deps.outbox.enqueue({
|
|
64
|
+
id: deps.idGen.newId(),
|
|
65
|
+
workspaceId: deps.workspaceId,
|
|
66
|
+
name: event.name,
|
|
67
|
+
occurredAt: deps.clock.nowIso(),
|
|
68
|
+
payload: event.payload,
|
|
69
|
+
});
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=repo.memory.js.map
|