@elytracms/core 0.0.6
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 +21 -0
- package/dist/clipboard/build.d.ts +77 -0
- package/dist/clipboard/build.js +128 -0
- package/dist/clipboard/build.js.map +1 -0
- package/dist/clipboard/clipboard.d.ts +33 -0
- package/dist/clipboard/clipboard.js +45 -0
- package/dist/clipboard/clipboard.js.map +1 -0
- package/dist/clipboard/fragment.d.ts +112 -0
- package/dist/clipboard/fragment.js +79 -0
- package/dist/clipboard/fragment.js.map +1 -0
- package/dist/clipboard/html.d.ts +26 -0
- package/dist/clipboard/html.js +82 -0
- package/dist/clipboard/html.js.map +1 -0
- package/dist/clipboard/index.d.ts +15 -0
- package/dist/clipboard/index.js +16 -0
- package/dist/clipboard/index.js.map +1 -0
- package/dist/clipboard/references.d.ts +50 -0
- package/dist/clipboard/references.js +0 -0
- package/dist/clipboard/references.js.map +1 -0
- package/dist/clipboard/serialize.d.ts +69 -0
- package/dist/clipboard/serialize.js +130 -0
- package/dist/clipboard/serialize.js.map +1 -0
- package/dist/cms-core/collections.d.ts +82 -0
- package/dist/cms-core/collections.js +187 -0
- package/dist/cms-core/collections.js.map +1 -0
- package/dist/cms-core/documents.d.ts +71 -0
- package/dist/cms-core/documents.js +67 -0
- package/dist/cms-core/documents.js.map +1 -0
- package/dist/cms-core/envelopes.d.ts +80 -0
- package/dist/cms-core/envelopes.js +124 -0
- package/dist/cms-core/envelopes.js.map +1 -0
- package/dist/cms-core/fields.d.ts +220 -0
- package/dist/cms-core/fields.js +250 -0
- package/dist/cms-core/fields.js.map +1 -0
- package/dist/cms-core/fixtures.d.ts +92 -0
- package/dist/cms-core/fixtures.js +357 -0
- package/dist/cms-core/fixtures.js.map +1 -0
- package/dist/cms-core/hierarchy.d.ts +113 -0
- package/dist/cms-core/hierarchy.js +223 -0
- package/dist/cms-core/hierarchy.js.map +1 -0
- package/dist/cms-core/index.d.ts +25 -0
- package/dist/cms-core/index.js +26 -0
- package/dist/cms-core/index.js.map +1 -0
- package/dist/cms-core/infer.d.ts +103 -0
- package/dist/cms-core/infer.js +57 -0
- package/dist/cms-core/infer.js.map +1 -0
- package/dist/cms-core/issues.d.ts +92 -0
- package/dist/cms-core/issues.js +74 -0
- package/dist/cms-core/issues.js.map +1 -0
- package/dist/cms-core/json-schema.d.ts +25 -0
- package/dist/cms-core/json-schema.js +110 -0
- package/dist/cms-core/json-schema.js.map +1 -0
- package/dist/cms-core/localization.d.ts +51 -0
- package/dist/cms-core/localization.js +89 -0
- package/dist/cms-core/localization.js.map +1 -0
- package/dist/cms-core/routes.d.ts +76 -0
- package/dist/cms-core/routes.js +220 -0
- package/dist/cms-core/routes.js.map +1 -0
- package/dist/cms-core/self-type.d.ts +41 -0
- package/dist/cms-core/self-type.js +191 -0
- package/dist/cms-core/self-type.js.map +1 -0
- package/dist/cms-core/url-for-document.d.ts +39 -0
- package/dist/cms-core/url-for-document.js +138 -0
- package/dist/cms-core/url-for-document.js.map +1 -0
- package/dist/cms-core/validate-document.d.ts +121 -0
- package/dist/cms-core/validate-document.js +871 -0
- package/dist/cms-core/validate-document.js.map +1 -0
- package/dist/cms-core/versions.d.ts +75 -0
- package/dist/cms-core/versions.js +97 -0
- package/dist/cms-core/versions.js.map +1 -0
- package/dist/collaboration/approval.d.ts +68 -0
- package/dist/collaboration/approval.js +104 -0
- package/dist/collaboration/approval.js.map +1 -0
- package/dist/collaboration/collaboration.d.ts +49 -0
- package/dist/collaboration/collaboration.js +56 -0
- package/dist/collaboration/collaboration.js.map +1 -0
- package/dist/collaboration/comments.d.ts +72 -0
- package/dist/collaboration/comments.js +118 -0
- package/dist/collaboration/comments.js.map +1 -0
- package/dist/collaboration/core.d.ts +25 -0
- package/dist/collaboration/core.js +26 -0
- package/dist/collaboration/core.js.map +1 -0
- package/dist/collaboration/index.d.ts +14 -0
- package/dist/collaboration/index.js +15 -0
- package/dist/collaboration/index.js.map +1 -0
- package/dist/collaboration/presence.d.ts +62 -0
- package/dist/collaboration/presence.js +85 -0
- package/dist/collaboration/presence.js.map +1 -0
- package/dist/collaboration/publishing.d.ts +60 -0
- package/dist/collaboration/publishing.js +93 -0
- package/dist/collaboration/publishing.js.map +1 -0
- package/dist/collaboration/versions.d.ts +52 -0
- package/dist/collaboration/versions.js +81 -0
- package/dist/collaboration/versions.js.map +1 -0
- package/dist/component-registry/index.d.ts +3 -0
- package/dist/component-registry/index.js +4 -0
- package/dist/component-registry/index.js.map +1 -0
- package/dist/component-registry/issues.d.ts +6 -0
- package/dist/component-registry/issues.js +2 -0
- package/dist/component-registry/issues.js.map +1 -0
- package/dist/component-registry/manifest.d.ts +164 -0
- package/dist/component-registry/manifest.js +129 -0
- package/dist/component-registry/manifest.js.map +1 -0
- package/dist/component-registry/registry.d.ts +33 -0
- package/dist/component-registry/registry.js +90 -0
- package/dist/component-registry/registry.js.map +1 -0
- package/dist/content/__fixtures__/filterable-collections.d.ts +14 -0
- package/dist/content/__fixtures__/filterable-collections.js +15 -0
- package/dist/content/__fixtures__/filterable-collections.js.map +1 -0
- package/dist/content/__fixtures__/sample-accessor-types.d.ts +56 -0
- package/dist/content/__fixtures__/sample-accessor-types.js +5 -0
- package/dist/content/__fixtures__/sample-accessor-types.js.map +1 -0
- package/dist/content/__fixtures__/sample-delivery-types.d.ts +122 -0
- package/dist/content/__fixtures__/sample-delivery-types.js +5 -0
- package/dist/content/__fixtures__/sample-delivery-types.js.map +1 -0
- package/dist/content/assets.d.ts +53 -0
- package/dist/content/assets.js +38 -0
- package/dist/content/assets.js.map +1 -0
- package/dist/content/binding-sources.d.ts +53 -0
- package/dist/content/binding-sources.js +73 -0
- package/dist/content/binding-sources.js.map +1 -0
- package/dist/content/client.d.ts +90 -0
- package/dist/content/client.js +383 -0
- package/dist/content/client.js.map +1 -0
- package/dist/content/codegen.d.ts +54 -0
- package/dist/content/codegen.js +305 -0
- package/dist/content/codegen.js.map +1 -0
- package/dist/content/context.d.ts +38 -0
- package/dist/content/context.js +21 -0
- package/dist/content/context.js.map +1 -0
- package/dist/content/cursor.d.ts +33 -0
- package/dist/content/cursor.js +104 -0
- package/dist/content/cursor.js.map +1 -0
- package/dist/content/index.d.ts +28 -0
- package/dist/content/index.js +29 -0
- package/dist/content/index.js.map +1 -0
- package/dist/content/locale.d.ts +30 -0
- package/dist/content/locale.js +26 -0
- package/dist/content/locale.js.map +1 -0
- package/dist/content/perspective.d.ts +29 -0
- package/dist/content/perspective.js +31 -0
- package/dist/content/perspective.js.map +1 -0
- package/dist/content/populate.d.ts +25 -0
- package/dist/content/populate.js +22 -0
- package/dist/content/populate.js.map +1 -0
- package/dist/content/query.d.ts +122 -0
- package/dist/content/query.js +257 -0
- package/dist/content/query.js.map +1 -0
- package/dist/content/raw.d.ts +13 -0
- package/dist/content/raw.js +14 -0
- package/dist/content/raw.js.map +1 -0
- package/dist/content/resolve.d.ts +97 -0
- package/dist/content/resolve.js +261 -0
- package/dist/content/resolve.js.map +1 -0
- package/dist/content/serialize.d.ts +30 -0
- package/dist/content/serialize.js +57 -0
- package/dist/content/serialize.js.map +1 -0
- package/dist/content/tags.d.ts +54 -0
- package/dist/content/tags.js +40 -0
- package/dist/content/tags.js.map +1 -0
- package/dist/data-binding/fixtures.d.ts +20 -0
- package/dist/data-binding/fixtures.js +47 -0
- package/dist/data-binding/fixtures.js.map +1 -0
- package/dist/data-binding/index.d.ts +14 -0
- package/dist/data-binding/index.js +15 -0
- package/dist/data-binding/index.js.map +1 -0
- package/dist/data-binding/issues.d.ts +45 -0
- package/dist/data-binding/issues.js +46 -0
- package/dist/data-binding/issues.js.map +1 -0
- package/dist/data-binding/resolve.d.ts +87 -0
- package/dist/data-binding/resolve.js +204 -0
- package/dist/data-binding/resolve.js.map +1 -0
- package/dist/data-binding/sample.d.ts +21 -0
- package/dist/data-binding/sample.js +23 -0
- package/dist/data-binding/sample.js.map +1 -0
- package/dist/data-binding/sources.d.ts +225 -0
- package/dist/data-binding/sources.js +154 -0
- package/dist/data-binding/sources.js.map +1 -0
- package/dist/data-binding/tokens.d.ts +62 -0
- package/dist/data-binding/tokens.js +150 -0
- package/dist/data-binding/tokens.js.map +1 -0
- package/dist/design-tokens/css.d.ts +34 -0
- package/dist/design-tokens/css.js +51 -0
- package/dist/design-tokens/css.js.map +1 -0
- package/dist/design-tokens/index.d.ts +10 -0
- package/dist/design-tokens/index.js +11 -0
- package/dist/design-tokens/index.js.map +1 -0
- package/dist/design-tokens/style-guide.d.ts +30 -0
- package/dist/design-tokens/style-guide.js +31 -0
- package/dist/design-tokens/style-guide.js.map +1 -0
- package/dist/design-tokens/tokens.d.ts +89 -0
- package/dist/design-tokens/tokens.js +112 -0
- package/dist/design-tokens/tokens.js.map +1 -0
- package/dist/export-sync/builder-source.d.ts +85 -0
- package/dist/export-sync/builder-source.js +124 -0
- package/dist/export-sync/builder-source.js.map +1 -0
- package/dist/export-sync/check.d.ts +61 -0
- package/dist/export-sync/check.js +126 -0
- package/dist/export-sync/check.js.map +1 -0
- package/dist/export-sync/cli.d.ts +89 -0
- package/dist/export-sync/cli.js +323 -0
- package/dist/export-sync/cli.js.map +1 -0
- package/dist/export-sync/core.d.ts +58 -0
- package/dist/export-sync/core.js +41 -0
- package/dist/export-sync/core.js.map +1 -0
- package/dist/export-sync/eject.d.ts +28 -0
- package/dist/export-sync/eject.js +21 -0
- package/dist/export-sync/eject.js.map +1 -0
- package/dist/export-sync/fixtures.d.ts +25 -0
- package/dist/export-sync/fixtures.js +87 -0
- package/dist/export-sync/fixtures.js.map +1 -0
- package/dist/export-sync/generate.d.ts +7 -0
- package/dist/export-sync/generate.js +505 -0
- package/dist/export-sync/generate.js.map +1 -0
- package/dist/export-sync/index.d.ts +37 -0
- package/dist/export-sync/index.js +39 -0
- package/dist/export-sync/index.js.map +1 -0
- package/dist/export-sync/init.d.ts +123 -0
- package/dist/export-sync/init.js +234 -0
- package/dist/export-sync/init.js.map +1 -0
- package/dist/export-sync/manifest-host.d.ts +48 -0
- package/dist/export-sync/manifest-host.js +73 -0
- package/dist/export-sync/manifest-host.js.map +1 -0
- package/dist/export-sync/node.d.ts +20 -0
- package/dist/export-sync/node.js +101 -0
- package/dist/export-sync/node.js.map +1 -0
- package/dist/export-sync/push.d.ts +76 -0
- package/dist/export-sync/push.js +197 -0
- package/dist/export-sync/push.js.map +1 -0
- package/dist/export-sync/registry-sync-client.d.ts +59 -0
- package/dist/export-sync/registry-sync-client.js +97 -0
- package/dist/export-sync/registry-sync-client.js.map +1 -0
- package/dist/export-sync/sync.d.ts +47 -0
- package/dist/export-sync/sync.js +47 -0
- package/dist/export-sync/sync.js.map +1 -0
- package/dist/export-sync/typegen.d.ts +40 -0
- package/dist/export-sync/typegen.js +45 -0
- package/dist/export-sync/typegen.js.map +1 -0
- package/dist/export-sync/validate.d.ts +19 -0
- package/dist/export-sync/validate.js +102 -0
- package/dist/export-sync/validate.js.map +1 -0
- package/dist/export-sync/watch.d.ts +66 -0
- package/dist/export-sync/watch.js +70 -0
- package/dist/export-sync/watch.js.map +1 -0
- package/dist/operations/assets.d.ts +198 -0
- package/dist/operations/assets.js +75 -0
- package/dist/operations/assets.js.map +1 -0
- package/dist/operations/authorization.d.ts +49 -0
- package/dist/operations/authorization.js +128 -0
- package/dist/operations/authorization.js.map +1 -0
- package/dist/operations/changesets.d.ts +160 -0
- package/dist/operations/changesets.js +442 -0
- package/dist/operations/changesets.js.map +1 -0
- package/dist/operations/client.d.ts +49 -0
- package/dist/operations/client.js +57 -0
- package/dist/operations/client.js.map +1 -0
- package/dist/operations/core.d.ts +238 -0
- package/dist/operations/core.js +269 -0
- package/dist/operations/core.js.map +1 -0
- package/dist/operations/documents.d.ts +432 -0
- package/dist/operations/documents.js +344 -0
- package/dist/operations/documents.js.map +1 -0
- package/dist/operations/graph.d.ts +138 -0
- package/dist/operations/graph.js +78 -0
- package/dist/operations/graph.js.map +1 -0
- package/dist/operations/index.d.ts +19 -0
- package/dist/operations/index.js +20 -0
- package/dist/operations/index.js.map +1 -0
- package/dist/operations/members.d.ts +87 -0
- package/dist/operations/members.js +56 -0
- package/dist/operations/members.js.map +1 -0
- package/dist/operations/publishing.d.ts +89 -0
- package/dist/operations/publishing.js +57 -0
- package/dist/operations/publishing.js.map +1 -0
- package/dist/operations/references.d.ts +222 -0
- package/dist/operations/references.js +177 -0
- package/dist/operations/references.js.map +1 -0
- package/dist/operations/schema.d.ts +413 -0
- package/dist/operations/schema.js +138 -0
- package/dist/operations/schema.js.map +1 -0
- package/dist/operations/tokens.d.ts +79 -0
- package/dist/operations/tokens.js +102 -0
- package/dist/operations/tokens.js.map +1 -0
- package/dist/persistence/adapter.d.ts +79 -0
- package/dist/persistence/adapter.js +55 -0
- package/dist/persistence/adapter.js.map +1 -0
- package/dist/persistence/assets.d.ts +120 -0
- package/dist/persistence/assets.js +141 -0
- package/dist/persistence/assets.js.map +1 -0
- package/dist/persistence/backend-validation.d.ts +43 -0
- package/dist/persistence/backend-validation.js +57 -0
- package/dist/persistence/backend-validation.js.map +1 -0
- package/dist/persistence/cli-tokens.d.ts +50 -0
- package/dist/persistence/cli-tokens.js +66 -0
- package/dist/persistence/cli-tokens.js.map +1 -0
- package/dist/persistence/cms.d.ts +148 -0
- package/dist/persistence/cms.js +232 -0
- package/dist/persistence/cms.js.map +1 -0
- package/dist/persistence/contract-scenarios.d.ts +73 -0
- package/dist/persistence/contract-scenarios.js +496 -0
- package/dist/persistence/contract-scenarios.js.map +1 -0
- package/dist/persistence/core.d.ts +96 -0
- package/dist/persistence/core.js +110 -0
- package/dist/persistence/core.js.map +1 -0
- package/dist/persistence/graph.d.ts +61 -0
- package/dist/persistence/graph.js +98 -0
- package/dist/persistence/graph.js.map +1 -0
- package/dist/persistence/index.d.ts +22 -0
- package/dist/persistence/index.js +23 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/members.d.ts +70 -0
- package/dist/persistence/members.js +0 -0
- package/dist/persistence/members.js.map +1 -0
- package/dist/persistence/publishing.d.ts +59 -0
- package/dist/persistence/publishing.js +95 -0
- package/dist/persistence/publishing.js.map +1 -0
- package/dist/persistence/reference-extraction.d.ts +44 -0
- package/dist/persistence/reference-extraction.js +204 -0
- package/dist/persistence/reference-extraction.js.map +1 -0
- package/dist/persistence/reference-indexing.d.ts +68 -0
- package/dist/persistence/reference-indexing.js +112 -0
- package/dist/persistence/reference-indexing.js.map +1 -0
- package/dist/persistence/references.d.ts +257 -0
- package/dist/persistence/references.js +0 -0
- package/dist/persistence/references.js.map +1 -0
- package/dist/persistence/seed.d.ts +55 -0
- package/dist/persistence/seed.js +102 -0
- package/dist/persistence/seed.js.map +1 -0
- package/dist/persistence/self-maintaining-adapter.d.ts +41 -0
- package/dist/persistence/self-maintaining-adapter.js +79 -0
- package/dist/persistence/self-maintaining-adapter.js.map +1 -0
- package/dist/plugins/asset-storage.d.ts +76 -0
- package/dist/plugins/asset-storage.js +104 -0
- package/dist/plugins/asset-storage.js.map +1 -0
- package/dist/plugins/component-package.d.ts +54 -0
- package/dist/plugins/component-package.js +92 -0
- package/dist/plugins/component-package.js.map +1 -0
- package/dist/plugins/data-sources.d.ts +78 -0
- package/dist/plugins/data-sources.js +99 -0
- package/dist/plugins/data-sources.js.map +1 -0
- package/dist/plugins/examples.d.ts +47 -0
- package/dist/plugins/examples.js +205 -0
- package/dist/plugins/examples.js.map +1 -0
- package/dist/plugins/export-targets.d.ts +47 -0
- package/dist/plugins/export-targets.js +78 -0
- package/dist/plugins/export-targets.js.map +1 -0
- package/dist/plugins/field-types.d.ts +86 -0
- package/dist/plugins/field-types.js +93 -0
- package/dist/plugins/field-types.js.map +1 -0
- package/dist/plugins/hooks.d.ts +60 -0
- package/dist/plugins/hooks.js +94 -0
- package/dist/plugins/hooks.js.map +1 -0
- package/dist/plugins/index.d.ts +27 -0
- package/dist/plugins/index.js +28 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/marketplace.d.ts +90 -0
- package/dist/plugins/marketplace.js +110 -0
- package/dist/plugins/marketplace.js.map +1 -0
- package/dist/plugins/plugin.d.ts +107 -0
- package/dist/plugins/plugin.js +122 -0
- package/dist/plugins/plugin.js.map +1 -0
- package/dist/plugins/templates.d.ts +66 -0
- package/dist/plugins/templates.js +74 -0
- package/dist/plugins/templates.js.map +1 -0
- package/dist/project-graph/binding.d.ts +68 -0
- package/dist/project-graph/binding.js +39 -0
- package/dist/project-graph/binding.js.map +1 -0
- package/dist/project-graph/container.d.ts +126 -0
- package/dist/project-graph/container.js +221 -0
- package/dist/project-graph/container.js.map +1 -0
- package/dist/project-graph/edit.d.ts +66 -0
- package/dist/project-graph/edit.js +201 -0
- package/dist/project-graph/edit.js.map +1 -0
- package/dist/project-graph/fixtures.d.ts +51 -0
- package/dist/project-graph/fixtures.js +224 -0
- package/dist/project-graph/fixtures.js.map +1 -0
- package/dist/project-graph/ids.d.ts +17 -0
- package/dist/project-graph/ids.js +19 -0
- package/dist/project-graph/ids.js.map +1 -0
- package/dist/project-graph/index.d.ts +12 -0
- package/dist/project-graph/index.js +13 -0
- package/dist/project-graph/index.js.map +1 -0
- package/dist/project-graph/issues.d.ts +61 -0
- package/dist/project-graph/issues.js +44 -0
- package/dist/project-graph/issues.js.map +1 -0
- package/dist/project-graph/json.d.ts +6 -0
- package/dist/project-graph/json.js +10 -0
- package/dist/project-graph/json.js.map +1 -0
- package/dist/project-graph/node.d.ts +48 -0
- package/dist/project-graph/node.js +42 -0
- package/dist/project-graph/node.js.map +1 -0
- package/dist/project-graph/normalize.d.ts +17 -0
- package/dist/project-graph/normalize.js +110 -0
- package/dist/project-graph/normalize.js.map +1 -0
- package/dist/project-graph/serialize.d.ts +36 -0
- package/dist/project-graph/serialize.js +51 -0
- package/dist/project-graph/serialize.js.map +1 -0
- package/dist/project-graph/structure.d.ts +40 -0
- package/dist/project-graph/structure.js +36 -0
- package/dist/project-graph/structure.js.map +1 -0
- package/dist/project-graph/validate.d.ts +84 -0
- package/dist/project-graph/validate.js +158 -0
- package/dist/project-graph/validate.js.map +1 -0
- package/dist/rich-text/adapter.d.ts +43 -0
- package/dist/rich-text/adapter.js +24 -0
- package/dist/rich-text/adapter.js.map +1 -0
- package/dist/rich-text/dom-editor.d.ts +101 -0
- package/dist/rich-text/dom-editor.js +482 -0
- package/dist/rich-text/dom-editor.js.map +1 -0
- package/dist/rich-text/embed.d.ts +70 -0
- package/dist/rich-text/embed.js +70 -0
- package/dist/rich-text/embed.js.map +1 -0
- package/dist/rich-text/fixtures.d.ts +25 -0
- package/dist/rich-text/fixtures.js +115 -0
- package/dist/rich-text/fixtures.js.map +1 -0
- package/dist/rich-text/html.d.ts +5 -0
- package/dist/rich-text/html.js +309 -0
- package/dist/rich-text/html.js.map +1 -0
- package/dist/rich-text/index.d.ts +19 -0
- package/dist/rich-text/index.js +20 -0
- package/dist/rich-text/index.js.map +1 -0
- package/dist/rich-text/markdown.d.ts +7 -0
- package/dist/rich-text/markdown.js +235 -0
- package/dist/rich-text/markdown.js.map +1 -0
- package/dist/rich-text/portable-text.d.ts +50 -0
- package/dist/rich-text/portable-text.js +223 -0
- package/dist/rich-text/portable-text.js.map +1 -0
- package/dist/rich-text/registry.d.ts +48 -0
- package/dist/rich-text/registry.js +16 -0
- package/dist/rich-text/registry.js.map +1 -0
- package/dist/rich-text/render.d.ts +69 -0
- package/dist/rich-text/render.js +205 -0
- package/dist/rich-text/render.js.map +1 -0
- package/dist/rich-text/schema.d.ts +86 -0
- package/dist/rich-text/schema.js +80 -0
- package/dist/rich-text/schema.js.map +1 -0
- package/dist/rich-text/test-support.d.ts +7 -0
- package/dist/rich-text/test-support.js +8 -0
- package/dist/rich-text/test-support.js.map +1 -0
- package/dist/runtime-renderer/client.d.ts +14 -0
- package/dist/runtime-renderer/client.js +15 -0
- package/dist/runtime-renderer/client.js.map +1 -0
- package/dist/runtime-renderer/condition.d.ts +8 -0
- package/dist/runtime-renderer/condition.js +48 -0
- package/dist/runtime-renderer/condition.js.map +1 -0
- package/dist/runtime-renderer/content-client.d.ts +62 -0
- package/dist/runtime-renderer/content-client.js +37 -0
- package/dist/runtime-renderer/content-client.js.map +1 -0
- package/dist/runtime-renderer/context.d.ts +185 -0
- package/dist/runtime-renderer/context.js +7 -0
- package/dist/runtime-renderer/context.js.map +1 -0
- package/dist/runtime-renderer/fallback.d.ts +39 -0
- package/dist/runtime-renderer/fallback.js +45 -0
- package/dist/runtime-renderer/fallback.js.map +1 -0
- package/dist/runtime-renderer/index.d.ts +13 -0
- package/dist/runtime-renderer/index.js +13 -0
- package/dist/runtime-renderer/index.js.map +1 -0
- package/dist/runtime-renderer/primitives.d.ts +85 -0
- package/dist/runtime-renderer/primitives.js +442 -0
- package/dist/runtime-renderer/primitives.js.map +1 -0
- package/dist/runtime-renderer/render.d.ts +138 -0
- package/dist/runtime-renderer/render.js +825 -0
- package/dist/runtime-renderer/render.js.map +1 -0
- package/dist/runtime-renderer/rich-text.d.ts +26 -0
- package/dist/runtime-renderer/rich-text.js +113 -0
- package/dist/runtime-renderer/rich-text.js.map +1 -0
- package/dist/starter-kits/index.d.ts +13 -0
- package/dist/starter-kits/index.js +14 -0
- package/dist/starter-kits/index.js.map +1 -0
- package/dist/starter-kits/instantiate.d.ts +29 -0
- package/dist/starter-kits/instantiate.js +24 -0
- package/dist/starter-kits/instantiate.js.map +1 -0
- package/dist/starter-kits/kit.d.ts +61 -0
- package/dist/starter-kits/kit.js +37 -0
- package/dist/starter-kits/kit.js.map +1 -0
- package/dist/starter-kits/kits.d.ts +7 -0
- package/dist/starter-kits/kits.js +201 -0
- package/dist/starter-kits/kits.js.map +1 -0
- package/dist/starter-kits/manifests.d.ts +7 -0
- package/dist/starter-kits/manifests.js +111 -0
- package/dist/starter-kits/manifests.js.map +1 -0
- package/dist/starter-kits/upgrade.d.ts +39 -0
- package/dist/starter-kits/upgrade.js +54 -0
- package/dist/starter-kits/upgrade.js.map +1 -0
- package/dist/starter-kits/validate.d.ts +16 -0
- package/dist/starter-kits/validate.js +77 -0
- package/dist/starter-kits/validate.js.map +1 -0
- package/dist/studio-core/context.d.ts +27 -0
- package/dist/studio-core/context.js +44 -0
- package/dist/studio-core/context.js.map +1 -0
- package/dist/studio-core/errors.d.ts +58 -0
- package/dist/studio-core/errors.js +74 -0
- package/dist/studio-core/errors.js.map +1 -0
- package/dist/studio-core/fixtures.d.ts +18 -0
- package/dist/studio-core/fixtures.js +83 -0
- package/dist/studio-core/fixtures.js.map +1 -0
- package/dist/studio-core/ids.d.ts +22 -0
- package/dist/studio-core/ids.js +33 -0
- package/dist/studio-core/ids.js.map +1 -0
- package/dist/studio-core/index.d.ts +11 -0
- package/dist/studio-core/index.js +12 -0
- package/dist/studio-core/index.js.map +1 -0
- package/dist/studio-core/issues.d.ts +50 -0
- package/dist/studio-core/issues.js +33 -0
- package/dist/studio-core/issues.js.map +1 -0
- package/dist/studio-core/metadata.d.ts +109 -0
- package/dist/studio-core/metadata.js +74 -0
- package/dist/studio-core/metadata.js.map +1 -0
- package/dist/studio-core/repository.d.ts +73 -0
- package/dist/studio-core/repository.js +202 -0
- package/dist/studio-core/repository.js.map +1 -0
- package/dist/studio-core/sections.d.ts +73 -0
- package/dist/studio-core/sections.js +68 -0
- package/dist/studio-core/sections.js.map +1 -0
- package/dist/studio-core/validate.d.ts +15 -0
- package/dist/studio-core/validate.js +119 -0
- package/dist/studio-core/validate.js.map +1 -0
- package/dist/studio-core/workspace-config.d.ts +587 -0
- package/dist/studio-core/workspace-config.js +434 -0
- package/dist/studio-core/workspace-config.js.map +1 -0
- package/package.json +104 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @elytracms/export-sync — the `builder` CLI surfaces around the canonical project model.
|
|
3
|
+
*
|
|
4
|
+
* EC-147 (vision AD-2): `builder push` discovers component manifests in the host repo,
|
|
5
|
+
* validates them, and syncs them up into builder registry persistence — with watch mode for
|
|
6
|
+
* local dev and an all-or-nothing CI mode. This is the day-to-day workflow: the embedded
|
|
7
|
+
* runtime renders the graph in the user's own app.
|
|
8
|
+
*
|
|
9
|
+
* EC-148 (vision AD-2/AD-4): `builder typegen` emits the per-collection delivery-shape +
|
|
10
|
+
* accessor types (EC-142/EC-143 codegen) into the host repo as a committed, deterministic
|
|
11
|
+
* module; `builder check` is the CI gate that verifies code and builder state agree —
|
|
12
|
+
* manifest drift both ways, graph↔code component coverage, type drift, and the canonical
|
|
13
|
+
* validation (route conflicts, broken bindings) surfaced through the CLI.
|
|
14
|
+
*
|
|
15
|
+
* EC-149 (vision AD-1): `builder eject` is the exit guarantee — a pure, deterministic
|
|
16
|
+
* generation (brief §4.9, EC-101–113) of a standalone Next.js App Router app with the model
|
|
17
|
+
* snapshotted in and the host repo's real components imported (never stubbed). The export-era
|
|
18
|
+
* `pull`/`validate` surface remains for validation and drift checks; `pull` is deprecated.
|
|
19
|
+
*/
|
|
20
|
+
export const PACKAGE = '@elytracms/core/export-sync';
|
|
21
|
+
export * from './core';
|
|
22
|
+
export * from './validate';
|
|
23
|
+
export * from './generate';
|
|
24
|
+
export * from './sync';
|
|
25
|
+
export * from './eject';
|
|
26
|
+
export * from './cli';
|
|
27
|
+
export * from './fixtures';
|
|
28
|
+
export * from './manifest-host';
|
|
29
|
+
export * from './registry-sync-client';
|
|
30
|
+
export * from './builder-source';
|
|
31
|
+
export * from './push';
|
|
32
|
+
export * from './watch';
|
|
33
|
+
export * from './typegen';
|
|
34
|
+
export * from './check';
|
|
35
|
+
export * from './init';
|
|
36
|
+
// EC-154: the workspace-config surface host repos use in `elytra.config.ts`.
|
|
37
|
+
// Re-exported from `@elytracms/core/studio-core` so a host only needs the CLI package.
|
|
38
|
+
export { defineElytraConfig, elytraConfigInputSchema, extractWorkspaceConfigExport, resolveWorkspaceConfig, toProjectSettings, WORKSPACE_CONFIG_FILE, WORKSPACE_CONFIG_FILES, } from '@elytracms/core/studio-core';
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/export-sync/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,6BAA6B,CAAA;AAEpD,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA;AACrB,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AAEtB,6EAA6E;AAC7E,uFAAuF;AACvF,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,4BAA4B,EAC5B,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,6BAA6B,CAAA"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import type { CollectionDef } from '@elytracms/core/cms-core';
|
|
2
|
+
import type { OperationsClient } from '@elytracms/core/operations';
|
|
3
|
+
import type { ProjectSettings, WorkspaceConfigIssue } from '@elytracms/core/studio-core';
|
|
4
|
+
import type { FileIO } from './sync';
|
|
5
|
+
/**
|
|
6
|
+
* `builder init` — code-first workspace provisioning (EC-154, vision AD-8).
|
|
7
|
+
*
|
|
8
|
+
* Two modes:
|
|
9
|
+
*
|
|
10
|
+
* - `builder init` (no flags): scaffold a starter `elytra.config.ts` in the
|
|
11
|
+
* host repo when none exists. Idempotent — an existing config is never
|
|
12
|
+
* overwritten.
|
|
13
|
+
* - `builder init --project <slug>`: load + validate the host repo's
|
|
14
|
+
* `elytra.config.ts` (same schema and structured issues as the studio),
|
|
15
|
+
* find the entry, and provision the backend resources through the operations
|
|
16
|
+
* layer. Project *identity & settings* are config-owned (EC-182, AD-11) — there
|
|
17
|
+
* is no backend project record to create — so provisioning seeds the entry's
|
|
18
|
+
* collection schema (`schema.save`) when it references a schema module. The
|
|
19
|
+
* config-derived project id is the slug. Idempotent — a slug already provisioned
|
|
20
|
+
* in this run is reported as already provisioned and left untouched.
|
|
21
|
+
*
|
|
22
|
+
* Like push/check, everything is injectable: a {@link WorkspaceConfigHost}
|
|
23
|
+
* abstracts config/module loading (the real one in `node.ts` uses dynamic
|
|
24
|
+
* `import()` like manifest discovery), and a {@link WorkspaceProvisioningClient}
|
|
25
|
+
* abstracts the backend (the direct adapter wraps an `OperationsClient` —
|
|
26
|
+
* in tests an in-memory one; a live deployment wires the same seam). No issue
|
|
27
|
+
* is ever a raw throw: failures are structured {@link InitIssue}s and a
|
|
28
|
+
* non-zero exit code.
|
|
29
|
+
*/
|
|
30
|
+
/** Loads the host repo's workspace config + referenced schema modules. */
|
|
31
|
+
export interface WorkspaceConfigHost {
|
|
32
|
+
/**
|
|
33
|
+
* Locate and load the `elytra.config.*` module under `root`. Returns the
|
|
34
|
+
* raw module namespace (the default export carries the config), or
|
|
35
|
+
* `undefined` when no config file exists.
|
|
36
|
+
*/
|
|
37
|
+
loadConfig(root: string): Promise<{
|
|
38
|
+
file: string;
|
|
39
|
+
moduleExports: unknown;
|
|
40
|
+
} | undefined>;
|
|
41
|
+
/**
|
|
42
|
+
* Load a collection-schema module referenced by a project entry
|
|
43
|
+
* (`schema: { module: './src/schema' }`), relative to `root`. Returns the
|
|
44
|
+
* raw module namespace; the collections are taken from its default export
|
|
45
|
+
* (or a named `collections` export) and validated here.
|
|
46
|
+
*/
|
|
47
|
+
loadSchemaModule(root: string, modulePath: string): Promise<unknown>;
|
|
48
|
+
}
|
|
49
|
+
/** A backend provisioning failure, carried as data by the init flow. */
|
|
50
|
+
export declare class WorkspaceProvisioningError extends Error {
|
|
51
|
+
constructor(message: string);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Transport between `init --project` and the builder backend: a direct in-process
|
|
55
|
+
* adapter exists now; an HTTP adapter can implement the same interface against
|
|
56
|
+
* builder endpoints later.
|
|
57
|
+
*/
|
|
58
|
+
export interface WorkspaceProvisioningClient {
|
|
59
|
+
readonly transport: 'direct' | 'http';
|
|
60
|
+
/** Find an existing project by slug (archived included), if any. */
|
|
61
|
+
findProjectBySlug(slug: string): Promise<{
|
|
62
|
+
id: string;
|
|
63
|
+
name: string;
|
|
64
|
+
} | undefined>;
|
|
65
|
+
/** Create the project with the config-derived settings; returns its id. */
|
|
66
|
+
createProject(input: {
|
|
67
|
+
name: string;
|
|
68
|
+
slug: string;
|
|
69
|
+
settings: ProjectSettings;
|
|
70
|
+
}): Promise<{
|
|
71
|
+
id: string;
|
|
72
|
+
}>;
|
|
73
|
+
/** Seed/replace the project's CMS collection schema. */
|
|
74
|
+
saveSchema(projectId: string, collections: readonly CollectionDef[]): Promise<void>;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* The direct adapter: schema seeding goes through the operations layer
|
|
78
|
+
* (`schema.save`) so the CLI shares the exact validate → authorize → mutate →
|
|
79
|
+
* event pipeline the studio uses. Project identity is config-owned (EC-182, AD-11)
|
|
80
|
+
* — the slug *is* the project id, so there is no backend project record to create.
|
|
81
|
+
* Provisioning is tracked per process for idempotency. Operation failures are
|
|
82
|
+
* surfaced as {@link WorkspaceProvisioningError}s with the structured message intact.
|
|
83
|
+
*/
|
|
84
|
+
export declare function createDirectWorkspaceProvisioningClient(operations: OperationsClient): WorkspaceProvisioningClient;
|
|
85
|
+
export type InitIssueCode = 'config-missing' | 'config-invalid' | 'unknown-project' | 'schema-load-error' | 'invalid-collections' | 'provision-failed' | 'not-configured';
|
|
86
|
+
/** A structured init failure (CLI output is built from these). */
|
|
87
|
+
export interface InitIssue {
|
|
88
|
+
code: InitIssueCode;
|
|
89
|
+
severity: 'error';
|
|
90
|
+
message: string;
|
|
91
|
+
/** Source file, when attributable (config file or schema module path). */
|
|
92
|
+
file?: string;
|
|
93
|
+
/** Underlying structured config issues, when `code` is 'config-invalid'. */
|
|
94
|
+
configIssues?: readonly WorkspaceConfigIssue[];
|
|
95
|
+
}
|
|
96
|
+
export type InitAction = 'scaffolded' | 'config-exists' | 'provisioned' | 'already-provisioned' | 'failed';
|
|
97
|
+
export interface InitResult {
|
|
98
|
+
ok: boolean;
|
|
99
|
+
action: InitAction;
|
|
100
|
+
issues: InitIssue[];
|
|
101
|
+
/** The backend project id, when provisioning ran (or the project already existed). */
|
|
102
|
+
projectId?: string;
|
|
103
|
+
/** Collections seeded into the new project's schema, by id. */
|
|
104
|
+
seededCollections?: string[];
|
|
105
|
+
}
|
|
106
|
+
export interface InitOptions {
|
|
107
|
+
/** Host-repo root the config (and schema modules) are resolved against. */
|
|
108
|
+
root: string;
|
|
109
|
+
/** Slug of the configured project to provision; omitted = scaffold mode. */
|
|
110
|
+
project?: string;
|
|
111
|
+
}
|
|
112
|
+
export interface InitDeps {
|
|
113
|
+
host: WorkspaceConfigHost;
|
|
114
|
+
/** Required for `--project`; scaffold mode runs without a backend. */
|
|
115
|
+
client?: WorkspaceProvisioningClient;
|
|
116
|
+
}
|
|
117
|
+
/** Starter config written by `builder init` (kept minimal and self-documenting). */
|
|
118
|
+
export declare const STARTER_WORKSPACE_CONFIG = "import { defineElytraConfig } from '@elytracms/core/export-sync'\n\n/**\n * Elytra workspace config (code-first, EC-154).\n *\n * Each entry declares one project. Shared fields can live in `base`; a field\n * set on a project replaces the base field entirely. Provision a project's\n * backend resources with: builder init --project <slug>\n */\nexport default defineElytraConfig({\n projects: [\n {\n name: 'My Site',\n slug: 'my-site',\n locales: ['en'],\n // schema: { module: './src/schema/collections' },\n // components: { dir: './src/components' },\n // convex: { deployment: 'https://<deployment>.convex.cloud' },\n },\n ],\n})\n";
|
|
119
|
+
/**
|
|
120
|
+
* Run `builder init`. Returns a structured result and never throws.
|
|
121
|
+
* Scaffold mode and provisioning mode are both idempotent.
|
|
122
|
+
*/
|
|
123
|
+
export declare function runInit(deps: InitDeps, io: FileIO, options: InitOptions): Promise<InitResult>;
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { collectionDefSchema } from '@elytracms/core/cms-core';
|
|
3
|
+
import { WORKSPACE_CONFIG_FILE, extractWorkspaceConfigExport, resolveWorkspaceConfig, toProjectSettings, } from '@elytracms/core/studio-core';
|
|
4
|
+
/** A backend provisioning failure, carried as data by the init flow. */
|
|
5
|
+
export class WorkspaceProvisioningError extends Error {
|
|
6
|
+
constructor(message) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = 'WorkspaceProvisioningError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The direct adapter: schema seeding goes through the operations layer
|
|
13
|
+
* (`schema.save`) so the CLI shares the exact validate → authorize → mutate →
|
|
14
|
+
* event pipeline the studio uses. Project identity is config-owned (EC-182, AD-11)
|
|
15
|
+
* — the slug *is* the project id, so there is no backend project record to create.
|
|
16
|
+
* Provisioning is tracked per process for idempotency. Operation failures are
|
|
17
|
+
* surfaced as {@link WorkspaceProvisioningError}s with the structured message intact.
|
|
18
|
+
*/
|
|
19
|
+
export function createDirectWorkspaceProvisioningClient(operations) {
|
|
20
|
+
const provisioned = new Map();
|
|
21
|
+
return {
|
|
22
|
+
transport: 'direct',
|
|
23
|
+
async findProjectBySlug(slug) {
|
|
24
|
+
return provisioned.get(slug);
|
|
25
|
+
},
|
|
26
|
+
async createProject(input) {
|
|
27
|
+
// Config-owned identity: the slug is the canonical project id.
|
|
28
|
+
const record = { id: input.slug, name: input.name };
|
|
29
|
+
provisioned.set(input.slug, record);
|
|
30
|
+
return { id: record.id };
|
|
31
|
+
},
|
|
32
|
+
async saveSchema(projectId, collections) {
|
|
33
|
+
const result = await operations.schema.save({ projectId, collections: [...collections] });
|
|
34
|
+
if (!result.ok)
|
|
35
|
+
throw new WorkspaceProvisioningError(result.error.message);
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// --- Scaffold -------------------------------------------------------------------
|
|
40
|
+
/** Starter config written by `builder init` (kept minimal and self-documenting). */
|
|
41
|
+
export const STARTER_WORKSPACE_CONFIG = `import { defineElytraConfig } from '@elytracms/core/export-sync'
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Elytra workspace config (code-first, EC-154).
|
|
45
|
+
*
|
|
46
|
+
* Each entry declares one project. Shared fields can live in \`base\`; a field
|
|
47
|
+
* set on a project replaces the base field entirely. Provision a project's
|
|
48
|
+
* backend resources with: builder init --project <slug>
|
|
49
|
+
*/
|
|
50
|
+
export default defineElytraConfig({
|
|
51
|
+
projects: [
|
|
52
|
+
{
|
|
53
|
+
name: 'My Site',
|
|
54
|
+
slug: 'my-site',
|
|
55
|
+
locales: ['en'],
|
|
56
|
+
// schema: { module: './src/schema/collections' },
|
|
57
|
+
// components: { dir: './src/components' },
|
|
58
|
+
// convex: { deployment: 'https://<deployment>.convex.cloud' },
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
})
|
|
62
|
+
`;
|
|
63
|
+
// --- Run --------------------------------------------------------------------------
|
|
64
|
+
function fail(io, issues) {
|
|
65
|
+
for (const issue of issues) {
|
|
66
|
+
io.log(` error [${issue.code}] ${issue.message}`);
|
|
67
|
+
for (const config of issue.configIssues ?? []) {
|
|
68
|
+
const at = config.path.length > 0 ? ` at ${formatPath(config.path)}` : '';
|
|
69
|
+
io.log(` ${config.severity} [${config.code}]${at}: ${config.message}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return { ok: false, action: 'failed', issues };
|
|
73
|
+
}
|
|
74
|
+
function formatPath(path) {
|
|
75
|
+
return path.reduce((acc, part) => (typeof part === 'number' ? `${acc}[${part}]` : acc ? `${acc}.${part}` : part), '');
|
|
76
|
+
}
|
|
77
|
+
/** Accept the schema module's default export or a named `collections` export. */
|
|
78
|
+
function extractCollectionsCandidate(moduleExports) {
|
|
79
|
+
if (typeof moduleExports === 'object' && moduleExports !== null) {
|
|
80
|
+
const record = moduleExports;
|
|
81
|
+
if (record.default !== undefined)
|
|
82
|
+
return record.default;
|
|
83
|
+
if (record.collections !== undefined)
|
|
84
|
+
return record.collections;
|
|
85
|
+
}
|
|
86
|
+
return moduleExports;
|
|
87
|
+
}
|
|
88
|
+
async function provisionProject(deps, io, options, entry, configFile) {
|
|
89
|
+
const client = deps.client;
|
|
90
|
+
if (!client) {
|
|
91
|
+
return fail(io, [
|
|
92
|
+
{
|
|
93
|
+
code: 'not-configured',
|
|
94
|
+
severity: 'error',
|
|
95
|
+
message: 'init --project is not configured (no provisioning client wired).',
|
|
96
|
+
},
|
|
97
|
+
]);
|
|
98
|
+
}
|
|
99
|
+
// Load the referenced collection schema *before* creating anything, so a
|
|
100
|
+
// broken schema module never leaves a half-provisioned project behind.
|
|
101
|
+
let collections;
|
|
102
|
+
if (typeof entry.schema === 'object') {
|
|
103
|
+
const modulePath = entry.schema.module;
|
|
104
|
+
let moduleExports;
|
|
105
|
+
try {
|
|
106
|
+
moduleExports = await deps.host.loadSchemaModule(options.root, modulePath);
|
|
107
|
+
}
|
|
108
|
+
catch (cause) {
|
|
109
|
+
return fail(io, [
|
|
110
|
+
{
|
|
111
|
+
code: 'schema-load-error',
|
|
112
|
+
severity: 'error',
|
|
113
|
+
message: `Could not load the schema module “${modulePath}”: ${cause instanceof Error ? cause.message : String(cause)}`,
|
|
114
|
+
file: modulePath,
|
|
115
|
+
},
|
|
116
|
+
]);
|
|
117
|
+
}
|
|
118
|
+
const parsed = z
|
|
119
|
+
.array(collectionDefSchema)
|
|
120
|
+
.safeParse(extractCollectionsCandidate(moduleExports));
|
|
121
|
+
if (!parsed.success) {
|
|
122
|
+
return fail(io, [
|
|
123
|
+
{
|
|
124
|
+
code: 'invalid-collections',
|
|
125
|
+
severity: 'error',
|
|
126
|
+
message: `The schema module “${modulePath}” must export an array of collection definitions (default or named \`collections\` export): ${parsed.error.issues[0]?.message ?? 'invalid shape'}`,
|
|
127
|
+
file: modulePath,
|
|
128
|
+
},
|
|
129
|
+
]);
|
|
130
|
+
}
|
|
131
|
+
collections = parsed.data;
|
|
132
|
+
}
|
|
133
|
+
try {
|
|
134
|
+
const existing = await client.findProjectBySlug(entry.slug);
|
|
135
|
+
if (existing) {
|
|
136
|
+
io.log(`Project “${entry.slug}” is already provisioned (id ${existing.id}). Nothing to do — settings were not modified.`);
|
|
137
|
+
return { ok: true, action: 'already-provisioned', issues: [], projectId: existing.id };
|
|
138
|
+
}
|
|
139
|
+
const created = await client.createProject({
|
|
140
|
+
name: entry.name,
|
|
141
|
+
slug: entry.slug,
|
|
142
|
+
settings: toProjectSettings(entry),
|
|
143
|
+
});
|
|
144
|
+
io.log(`Created project “${entry.name}” (${entry.slug}) — id ${created.id}.`);
|
|
145
|
+
let seededCollections;
|
|
146
|
+
if (collections) {
|
|
147
|
+
await client.saveSchema(created.id, collections);
|
|
148
|
+
seededCollections = collections.map((c) => c.id);
|
|
149
|
+
io.log(`Seeded collection schema from ${typeof entry.schema === 'object' ? entry.schema.module : configFile}: ${seededCollections.join(', ') || '(empty)'}.`);
|
|
150
|
+
}
|
|
151
|
+
io.log(`Provisioned “${entry.slug}” from ${configFile}.`);
|
|
152
|
+
return {
|
|
153
|
+
ok: true,
|
|
154
|
+
action: 'provisioned',
|
|
155
|
+
issues: [],
|
|
156
|
+
projectId: created.id,
|
|
157
|
+
...(seededCollections ? { seededCollections } : {}),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
catch (cause) {
|
|
161
|
+
return fail(io, [
|
|
162
|
+
{
|
|
163
|
+
code: 'provision-failed',
|
|
164
|
+
severity: 'error',
|
|
165
|
+
message: cause instanceof Error ? cause.message : String(cause),
|
|
166
|
+
},
|
|
167
|
+
]);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Run `builder init`. Returns a structured result and never throws.
|
|
172
|
+
* Scaffold mode and provisioning mode are both idempotent.
|
|
173
|
+
*/
|
|
174
|
+
export async function runInit(deps, io, options) {
|
|
175
|
+
const loaded = await deps.host.loadConfig(options.root);
|
|
176
|
+
// --- Scaffold mode: `builder init` ---------------------------------------
|
|
177
|
+
if (options.project === undefined) {
|
|
178
|
+
if (loaded) {
|
|
179
|
+
io.log(`Workspace config already exists at ${loaded.file}; nothing written.`);
|
|
180
|
+
return { ok: true, action: 'config-exists', issues: [] };
|
|
181
|
+
}
|
|
182
|
+
io.write(WORKSPACE_CONFIG_FILE, STARTER_WORKSPACE_CONFIG);
|
|
183
|
+
io.log(`Scaffolded ${WORKSPACE_CONFIG_FILE}. Edit it, then run: builder init --project <slug>`);
|
|
184
|
+
return { ok: true, action: 'scaffolded', issues: [] };
|
|
185
|
+
}
|
|
186
|
+
// --- Provision mode: `builder init --project <slug>` ----------------------
|
|
187
|
+
if (!loaded) {
|
|
188
|
+
return fail(io, [
|
|
189
|
+
{
|
|
190
|
+
code: 'config-missing',
|
|
191
|
+
severity: 'error',
|
|
192
|
+
message: `No ${WORKSPACE_CONFIG_FILE} found under “${options.root}”. Run \`builder init\` to scaffold one.`,
|
|
193
|
+
},
|
|
194
|
+
]);
|
|
195
|
+
}
|
|
196
|
+
const extracted = extractWorkspaceConfigExport(loaded.moduleExports, loaded.file);
|
|
197
|
+
if ('issue' in extracted) {
|
|
198
|
+
return fail(io, [
|
|
199
|
+
{
|
|
200
|
+
code: 'config-invalid',
|
|
201
|
+
severity: 'error',
|
|
202
|
+
message: `${loaded.file} is not a valid workspace config.`,
|
|
203
|
+
file: loaded.file,
|
|
204
|
+
configIssues: [extracted.issue],
|
|
205
|
+
},
|
|
206
|
+
]);
|
|
207
|
+
}
|
|
208
|
+
const resolved = resolveWorkspaceConfig(extracted.value, { file: loaded.file });
|
|
209
|
+
if (!resolved.ok) {
|
|
210
|
+
return fail(io, [
|
|
211
|
+
{
|
|
212
|
+
code: 'config-invalid',
|
|
213
|
+
severity: 'error',
|
|
214
|
+
message: `${loaded.file} is not a valid workspace config (${resolved.issues.length} issue(s)).`,
|
|
215
|
+
file: loaded.file,
|
|
216
|
+
configIssues: resolved.issues,
|
|
217
|
+
},
|
|
218
|
+
]);
|
|
219
|
+
}
|
|
220
|
+
const entry = resolved.projects.find((project) => project.slug === options.project);
|
|
221
|
+
if (!entry) {
|
|
222
|
+
const known = resolved.projects.map((project) => project.slug).join(', ');
|
|
223
|
+
return fail(io, [
|
|
224
|
+
{
|
|
225
|
+
code: 'unknown-project',
|
|
226
|
+
severity: 'error',
|
|
227
|
+
message: `No project with slug “${options.project}” in ${loaded.file}. Configured slugs: ${known}.`,
|
|
228
|
+
file: loaded.file,
|
|
229
|
+
},
|
|
230
|
+
]);
|
|
231
|
+
}
|
|
232
|
+
return provisionProject(deps, io, { ...options, project: options.project }, entry, loaded.file);
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/export-sync/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manifest discovery contract for the code → builder push (EC-147, vision AD-2).
|
|
3
|
+
*
|
|
4
|
+
* ## Discovery convention
|
|
5
|
+
*
|
|
6
|
+
* A component manifest module is any file whose name ends in `.manifest.ts` /
|
|
7
|
+
* `.manifest.tsx` (or its compiled `.manifest.js` / `.manifest.mjs` form) anywhere
|
|
8
|
+
* under the scan root, excluding `node_modules`, dot-directories, and common build
|
|
9
|
+
* output directories. Every export of a manifest module must be a component manifest
|
|
10
|
+
* (created with `defineComponent`) or an array of manifests — nothing else. That keeps
|
|
11
|
+
* discovery deterministic: a stray export is a structured validation issue, never a
|
|
12
|
+
* silent skip.
|
|
13
|
+
*
|
|
14
|
+
* Why this convention: manifests today are declared inline with `defineComponent` in
|
|
15
|
+
* plain TS modules (see `@elytracms/core/starter-kits` `manifests.ts` and this package's
|
|
16
|
+
* `fixtures.ts`); a filename suffix keeps that authoring style, colocates a manifest
|
|
17
|
+
* next to its component (`hero.tsx` + `hero.manifest.ts`), mirrors the well-known
|
|
18
|
+
* `*.stories.tsx` / `*.test.ts` ecosystem pattern, and is cheap to glob, grep, and
|
|
19
|
+
* fs-watch.
|
|
20
|
+
*
|
|
21
|
+
* Discovery is injected behind {@link ManifestHost} so the push/watch logic is fully
|
|
22
|
+
* testable offline (fake hosts in tests, Node fs + dynamic import in the real bin).
|
|
23
|
+
* The real Node host lives in `@elytracms/core/export-sync/node` — kept out of the package
|
|
24
|
+
* root so the barrel stays browser-safe (the studio bundles this package via
|
|
25
|
+
* `@elytracms/core/plugins`).
|
|
26
|
+
*/
|
|
27
|
+
/** File suffixes that mark a module as a component manifest module. */
|
|
28
|
+
export declare const MANIFEST_FILE_SUFFIXES: readonly [".manifest.ts", ".manifest.tsx", ".manifest.js", ".manifest.mjs"];
|
|
29
|
+
/** Directories never scanned (or watched) for manifests. */
|
|
30
|
+
export declare const MANIFEST_IGNORED_DIRECTORIES: ReadonlySet<string>;
|
|
31
|
+
/** True when a path matches the manifest filename convention. */
|
|
32
|
+
export declare function isManifestFile(path: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* How the push reaches manifest modules in a host repo. `listManifestFiles` returns
|
|
35
|
+
* root-relative POSIX paths (sorted, deterministic); `loadManifestCandidates` returns
|
|
36
|
+
* the module's exported manifest candidates — validation happens in the push, so a
|
|
37
|
+
* malformed export is a structured issue, never a crash.
|
|
38
|
+
*/
|
|
39
|
+
export interface ManifestHost {
|
|
40
|
+
listManifestFiles(root: string): Promise<string[]> | string[];
|
|
41
|
+
loadManifestCandidates(root: string, file: string): Promise<unknown[]> | unknown[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Flatten a manifest module's exports into candidate manifest values. Arrays are
|
|
45
|
+
* flattened one level (e.g. `export const KIT_MANIFESTS = [...]`); duplicate references
|
|
46
|
+
* (e.g. a default export re-exporting a named one) are deduped.
|
|
47
|
+
*/
|
|
48
|
+
export declare function extractManifestCandidates(moduleExports: unknown): unknown[];
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manifest discovery contract for the code → builder push (EC-147, vision AD-2).
|
|
3
|
+
*
|
|
4
|
+
* ## Discovery convention
|
|
5
|
+
*
|
|
6
|
+
* A component manifest module is any file whose name ends in `.manifest.ts` /
|
|
7
|
+
* `.manifest.tsx` (or its compiled `.manifest.js` / `.manifest.mjs` form) anywhere
|
|
8
|
+
* under the scan root, excluding `node_modules`, dot-directories, and common build
|
|
9
|
+
* output directories. Every export of a manifest module must be a component manifest
|
|
10
|
+
* (created with `defineComponent`) or an array of manifests — nothing else. That keeps
|
|
11
|
+
* discovery deterministic: a stray export is a structured validation issue, never a
|
|
12
|
+
* silent skip.
|
|
13
|
+
*
|
|
14
|
+
* Why this convention: manifests today are declared inline with `defineComponent` in
|
|
15
|
+
* plain TS modules (see `@elytracms/core/starter-kits` `manifests.ts` and this package's
|
|
16
|
+
* `fixtures.ts`); a filename suffix keeps that authoring style, colocates a manifest
|
|
17
|
+
* next to its component (`hero.tsx` + `hero.manifest.ts`), mirrors the well-known
|
|
18
|
+
* `*.stories.tsx` / `*.test.ts` ecosystem pattern, and is cheap to glob, grep, and
|
|
19
|
+
* fs-watch.
|
|
20
|
+
*
|
|
21
|
+
* Discovery is injected behind {@link ManifestHost} so the push/watch logic is fully
|
|
22
|
+
* testable offline (fake hosts in tests, Node fs + dynamic import in the real bin).
|
|
23
|
+
* The real Node host lives in `@elytracms/core/export-sync/node` — kept out of the package
|
|
24
|
+
* root so the barrel stays browser-safe (the studio bundles this package via
|
|
25
|
+
* `@elytracms/core/plugins`).
|
|
26
|
+
*/
|
|
27
|
+
/** File suffixes that mark a module as a component manifest module. */
|
|
28
|
+
export const MANIFEST_FILE_SUFFIXES = [
|
|
29
|
+
'.manifest.ts',
|
|
30
|
+
'.manifest.tsx',
|
|
31
|
+
'.manifest.js',
|
|
32
|
+
'.manifest.mjs',
|
|
33
|
+
];
|
|
34
|
+
/** Directories never scanned (or watched) for manifests. */
|
|
35
|
+
export const MANIFEST_IGNORED_DIRECTORIES = new Set([
|
|
36
|
+
'node_modules',
|
|
37
|
+
'dist',
|
|
38
|
+
'build',
|
|
39
|
+
'out',
|
|
40
|
+
'coverage',
|
|
41
|
+
]);
|
|
42
|
+
/** True when a path matches the manifest filename convention. */
|
|
43
|
+
export function isManifestFile(path) {
|
|
44
|
+
return MANIFEST_FILE_SUFFIXES.some((suffix) => path.endsWith(suffix));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Flatten a manifest module's exports into candidate manifest values. Arrays are
|
|
48
|
+
* flattened one level (e.g. `export const KIT_MANIFESTS = [...]`); duplicate references
|
|
49
|
+
* (e.g. a default export re-exporting a named one) are deduped.
|
|
50
|
+
*/
|
|
51
|
+
export function extractManifestCandidates(moduleExports) {
|
|
52
|
+
if (typeof moduleExports !== 'object' || moduleExports === null)
|
|
53
|
+
return [];
|
|
54
|
+
const seen = new Set();
|
|
55
|
+
const candidates = [];
|
|
56
|
+
const push = (value) => {
|
|
57
|
+
if (seen.has(value))
|
|
58
|
+
return;
|
|
59
|
+
seen.add(value);
|
|
60
|
+
candidates.push(value);
|
|
61
|
+
};
|
|
62
|
+
for (const value of Object.values(moduleExports)) {
|
|
63
|
+
if (Array.isArray(value)) {
|
|
64
|
+
for (const item of value)
|
|
65
|
+
push(item);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
push(value);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return candidates;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=manifest-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-host.js","sourceRoot":"","sources":["../../src/export-sync/manifest-host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,uEAAuE;AACvE,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,cAAc;IACd,eAAe;IACf,cAAc;IACd,eAAe;CACP,CAAA;AAEV,4DAA4D;AAC5D,MAAM,CAAC,MAAM,4BAA4B,GAAwB,IAAI,GAAG,CAAC;IACvE,cAAc;IACd,MAAM;IACN,OAAO;IACP,KAAK;IACL,UAAU;CACX,CAAC,CAAA;AAEF,iEAAiE;AACjE,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;AACvE,CAAC;AAaD;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,aAAsB;IAC9D,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,IAAI;QAAE,OAAO,EAAE,CAAA;IAC1E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAW,CAAA;IAC/B,MAAM,UAAU,GAAc,EAAE,CAAA;IAChC,MAAM,IAAI,GAAG,CAAC,KAAc,EAAQ,EAAE;QACpC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAM;QAC3B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACf,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC,CAAA;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QACjD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { WorkspaceConfigHost } from './init';
|
|
2
|
+
import type { ManifestHost } from './manifest-host';
|
|
3
|
+
import type { WatchDriver } from './watch';
|
|
4
|
+
/**
|
|
5
|
+
* The real {@link ManifestHost}: recursive fs walk + dynamic `import()`. Loading a
|
|
6
|
+
* `.manifest.ts` module requires a TypeScript-capable runtime (the CLI is expected to
|
|
7
|
+
* run under `tsx` or Node type stripping in the host repo); compiled `.manifest.js` /
|
|
8
|
+
* `.manifest.mjs` modules load under plain Node.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createNodeManifestHost(): ManifestHost;
|
|
11
|
+
/**
|
|
12
|
+
* The real {@link WorkspaceConfigHost} (EC-154): probes the conventional
|
|
13
|
+
* `elytra.config.*` names under the host-repo root and loads modules with
|
|
14
|
+
* dynamic `import()`, exactly like manifest discovery. Loading the `.ts`
|
|
15
|
+
* variants requires a TypeScript-capable runtime (`tsx` / Node type stripping);
|
|
16
|
+
* compiled `.js`/`.mjs` configs load under plain Node.
|
|
17
|
+
*/
|
|
18
|
+
export declare function createNodeWorkspaceConfigHost(): WorkspaceConfigHost;
|
|
19
|
+
/** The real watch driver: `node:fs` recursive watch (no external watcher dependency). */
|
|
20
|
+
export declare function createFsWatchDriver(): WatchDriver;
|