@elytracms/core 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/clipboard/build.js.map +1 -1
- package/dist/clipboard/clipboard.js.map +1 -1
- package/dist/clipboard/fragment.js.map +1 -1
- package/dist/clipboard/html.js.map +1 -1
- package/dist/clipboard/index.js.map +1 -1
- package/dist/clipboard/references.js.map +1 -1
- package/dist/clipboard/serialize.js.map +1 -1
- package/dist/cms-core/collection-shape.d.ts +43 -0
- package/dist/cms-core/collection-shape.js +129 -0
- package/dist/cms-core/collection-shape.js.map +1 -0
- package/dist/cms-core/collections.d.ts +5 -6
- package/dist/cms-core/collections.js +26 -13
- package/dist/cms-core/collections.js.map +1 -1
- package/dist/cms-core/documents.d.ts +1 -0
- package/dist/cms-core/documents.js +10 -0
- package/dist/cms-core/documents.js.map +1 -1
- package/dist/cms-core/envelopes.js.map +1 -1
- package/dist/cms-core/fields.js.map +1 -1
- package/dist/cms-core/fixtures.js.map +1 -1
- package/dist/cms-core/hierarchy.js.map +1 -1
- package/dist/cms-core/index.d.ts +1 -0
- package/dist/cms-core/index.js +1 -0
- package/dist/cms-core/index.js.map +1 -1
- package/dist/cms-core/infer.js.map +1 -1
- package/dist/cms-core/issues.d.ts +8 -0
- package/dist/cms-core/issues.js +10 -0
- package/dist/cms-core/issues.js.map +1 -1
- package/dist/cms-core/json-schema.js.map +1 -1
- package/dist/cms-core/localization.js.map +1 -1
- package/dist/cms-core/nesting-depth.js.map +1 -1
- package/dist/cms-core/routes.js.map +1 -1
- package/dist/cms-core/self-type.js.map +1 -1
- package/dist/cms-core/url-for-document.js.map +1 -1
- package/dist/cms-core/validate-document.js.map +1 -1
- package/dist/cms-core/versions.d.ts +1 -0
- package/dist/cms-core/versions.js.map +1 -1
- package/dist/collaboration/approval.js.map +1 -1
- package/dist/collaboration/collaboration.js.map +1 -1
- package/dist/collaboration/comments.js.map +1 -1
- package/dist/collaboration/core.js.map +1 -1
- package/dist/collaboration/index.js.map +1 -1
- package/dist/collaboration/presence.js.map +1 -1
- package/dist/collaboration/publishing.js.map +1 -1
- package/dist/collaboration/versions.js.map +1 -1
- package/dist/component-registry/index.js.map +1 -1
- package/dist/component-registry/issues.js.map +1 -1
- package/dist/component-registry/manifest.js.map +1 -1
- package/dist/component-registry/registry.js.map +1 -1
- package/dist/content/__fixtures__/filterable-collections.js.map +1 -1
- package/dist/content/__fixtures__/sample-accessor-types.js.map +1 -1
- package/dist/content/__fixtures__/sample-delivery-types.js.map +1 -1
- package/dist/content/assets.js.map +1 -1
- package/dist/content/binding-sources.js.map +1 -1
- package/dist/content/client.js.map +1 -1
- package/dist/content/codegen.js.map +1 -1
- package/dist/content/context.js.map +1 -1
- package/dist/content/cursor.js.map +1 -1
- package/dist/content/index.js.map +1 -1
- package/dist/content/locale.js.map +1 -1
- package/dist/content/perspective.js.map +1 -1
- package/dist/content/populate.js.map +1 -1
- package/dist/content/query.js.map +1 -1
- package/dist/content/raw.js.map +1 -1
- package/dist/content/resolve.js.map +1 -1
- package/dist/content/serialize.js.map +1 -1
- package/dist/content/tags.js.map +1 -1
- package/dist/data-binding/fixtures.js.map +1 -1
- package/dist/data-binding/index.js.map +1 -1
- package/dist/data-binding/issues.js.map +1 -1
- package/dist/data-binding/resolve.js.map +1 -1
- package/dist/data-binding/sample.js.map +1 -1
- package/dist/data-binding/sources.js.map +1 -1
- package/dist/data-binding/tokens.js.map +1 -1
- package/dist/design-tokens/css.js.map +1 -1
- package/dist/design-tokens/index.js.map +1 -1
- package/dist/design-tokens/style-guide.js.map +1 -1
- package/dist/design-tokens/tokens.js.map +1 -1
- package/dist/export-sync/builder-source.d.ts +1 -0
- package/dist/export-sync/builder-source.js.map +1 -1
- package/dist/export-sync/check.js.map +1 -1
- package/dist/export-sync/cli.js.map +1 -1
- package/dist/export-sync/core.js.map +1 -1
- package/dist/export-sync/eject.js.map +1 -1
- package/dist/export-sync/fixtures.js.map +1 -1
- package/dist/export-sync/generate.js.map +1 -1
- package/dist/export-sync/index.js.map +1 -1
- package/dist/export-sync/init.js.map +1 -1
- package/dist/export-sync/manifest-host.js.map +1 -1
- package/dist/export-sync/node.js.map +1 -1
- package/dist/export-sync/push.js.map +1 -1
- package/dist/export-sync/registry-sync-client.js.map +1 -1
- package/dist/export-sync/sync.js.map +1 -1
- package/dist/export-sync/typegen.js.map +1 -1
- package/dist/export-sync/validate.js.map +1 -1
- package/dist/export-sync/watch.js.map +1 -1
- package/dist/operations/assets.js.map +1 -1
- package/dist/operations/authorization.js.map +1 -1
- package/dist/operations/changesets.js.map +1 -1
- package/dist/operations/client.js.map +1 -1
- package/dist/operations/core.js.map +1 -1
- package/dist/operations/documents.d.ts +21 -0
- package/dist/operations/documents.js.map +1 -1
- package/dist/operations/graph.js.map +1 -1
- package/dist/operations/index.js.map +1 -1
- package/dist/operations/members.js.map +1 -1
- package/dist/operations/publishing.js.map +1 -1
- package/dist/operations/references.js.map +1 -1
- package/dist/operations/schema.d.ts +18 -0
- package/dist/operations/schema.js.map +1 -1
- package/dist/operations/tokens.js.map +1 -1
- package/dist/persistence/adapter.js.map +1 -1
- package/dist/persistence/assets.js.map +1 -1
- package/dist/persistence/backend-validation.js.map +1 -1
- package/dist/persistence/cli-tokens.js.map +1 -1
- package/dist/persistence/cms.d.ts +3 -0
- package/dist/persistence/cms.js.map +1 -1
- package/dist/persistence/contract-scenarios.js.map +1 -1
- package/dist/persistence/core.js.map +1 -1
- package/dist/persistence/graph.js.map +1 -1
- package/dist/persistence/index.js.map +1 -1
- package/dist/persistence/members.js.map +1 -1
- package/dist/persistence/publishing.js.map +1 -1
- package/dist/persistence/reference-extraction.js.map +1 -1
- package/dist/persistence/reference-indexing.js.map +1 -1
- package/dist/persistence/references.js.map +1 -1
- package/dist/persistence/seed.js.map +1 -1
- package/dist/persistence/self-maintaining-adapter.js.map +1 -1
- package/dist/plugins/asset-storage.js.map +1 -1
- package/dist/plugins/component-package.js.map +1 -1
- package/dist/plugins/data-sources.js.map +1 -1
- package/dist/plugins/examples.js.map +1 -1
- package/dist/plugins/export-targets.js.map +1 -1
- package/dist/plugins/field-types.js.map +1 -1
- package/dist/plugins/hooks.js.map +1 -1
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/marketplace.js.map +1 -1
- package/dist/plugins/plugin.js.map +1 -1
- package/dist/plugins/templates.js.map +1 -1
- package/dist/project-graph/binding.js.map +1 -1
- package/dist/project-graph/container.js.map +1 -1
- package/dist/project-graph/edit.js.map +1 -1
- package/dist/project-graph/fixtures.js.map +1 -1
- package/dist/project-graph/ids.js.map +1 -1
- package/dist/project-graph/index.js.map +1 -1
- package/dist/project-graph/issues.js.map +1 -1
- package/dist/project-graph/json.js.map +1 -1
- package/dist/project-graph/node.js.map +1 -1
- package/dist/project-graph/normalize.js.map +1 -1
- package/dist/project-graph/serialize.js.map +1 -1
- package/dist/project-graph/structure.js.map +1 -1
- package/dist/project-graph/validate.js.map +1 -1
- package/dist/rich-text/adapter.js.map +1 -1
- package/dist/rich-text/dom-editor.js.map +1 -1
- package/dist/rich-text/embed.js.map +1 -1
- package/dist/rich-text/fixtures.js.map +1 -1
- package/dist/rich-text/html.js.map +1 -1
- package/dist/rich-text/index.js.map +1 -1
- package/dist/rich-text/markdown.js.map +1 -1
- package/dist/rich-text/portable-text.js.map +1 -1
- package/dist/rich-text/registry.js.map +1 -1
- package/dist/rich-text/render.js.map +1 -1
- package/dist/rich-text/schema.js.map +1 -1
- package/dist/rich-text/test-support.js.map +1 -1
- package/dist/runtime-renderer/client.js.map +1 -1
- package/dist/runtime-renderer/condition.js.map +1 -1
- package/dist/runtime-renderer/content-client.js.map +1 -1
- package/dist/runtime-renderer/context.js.map +1 -1
- package/dist/runtime-renderer/fallback.js.map +1 -1
- package/dist/runtime-renderer/index.js.map +1 -1
- package/dist/runtime-renderer/primitives.js.map +1 -1
- package/dist/runtime-renderer/render.js.map +1 -1
- package/dist/runtime-renderer/rich-text.js.map +1 -1
- package/dist/starter-kits/index.js.map +1 -1
- package/dist/starter-kits/instantiate.js.map +1 -1
- package/dist/starter-kits/kit.js.map +1 -1
- package/dist/starter-kits/kits.js.map +1 -1
- package/dist/starter-kits/manifests.js.map +1 -1
- package/dist/starter-kits/upgrade.js.map +1 -1
- package/dist/starter-kits/validate.js.map +1 -1
- package/dist/studio-core/context.js.map +1 -1
- package/dist/studio-core/errors.js.map +1 -1
- package/dist/studio-core/fixtures.js.map +1 -1
- package/dist/studio-core/ids.js.map +1 -1
- package/dist/studio-core/index.js.map +1 -1
- package/dist/studio-core/issues.js.map +1 -1
- package/dist/studio-core/metadata.js.map +1 -1
- package/dist/studio-core/repository.js.map +1 -1
- package/dist/studio-core/sections.d.ts +1 -1
- package/dist/studio-core/sections.js.map +1 -1
- package/dist/studio-core/validate.js.map +1 -1
- package/dist/studio-core/workspace-config.d.ts +4 -0
- package/dist/studio-core/workspace-config.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/export-sync/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAElC,OAAO,EAAE,yBAAyB,EAAE,MAAM,QAAQ,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAGhC,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAEhC,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AA0ElC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uDA8B0C,oBAAoB;;;;;8EAKG,oBAAoB;;qDAE7C,cAAc;;;;;;;2CAOxB,yBAAyB;;;;;;;CAOnE,CAAA;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAuB;IAC9C,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IAC3B,MAAM,OAAO,GACX,GAAG,KAAK,MAAM;QACZ,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,GAAG,KAAK,UAAU;YAClB,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,GAAG,KAAK,MAAM;gBACd,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,GAAG,KAAK,OAAO;oBACf,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,GAAG,KAAK,SAAS;wBACjB,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,GAAG,KAAK,OAAO;4BACf,CAAC,CAAC,OAAO;4BACT,CAAC,CAAC,GAAG,KAAK,MAAM;gCACd,CAAC,CAAC,MAAM;gCACR,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,MAAM;oCACnC,CAAC,CAAC,MAAM;oCACR,CAAC,CAAC,SAAS,CAAA;IAE7B,IAAI,KAAK,GAAuB,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IAE/F,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,GAAiB,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YACnB,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;gBACvB,IAAI,KAAK;oBAAE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAA;;oBACvB,KAAK,KAAK,0BAA0B,CAAA;YAC3C,CAAC;iBAAM,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;gBACvB,IAAI,KAAK;oBAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;;oBAC1B,KAAK,KAAK,8BAA8B,CAAA;YAC/C,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,CAAA;IACvF,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,GAAiB,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;QACjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YACnB,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;gBACvB,IAAI,KAAK;oBAAE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAA;;oBACvB,KAAK,KAAK,0BAA0B,CAAA;YAC3C,CAAC;iBAAM,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAA;YAChB,CAAC;iBAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;YACnB,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK;YAAE,KAAK,KAAK,0DAA0D,CAAA;QAC/F,OAAO;YACL,OAAO;YACP,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,IAAI;YACJ,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;SAC/B,CAAA;IACH,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAoB,EAAE,CAAA;QACnC,IAAI,IAAI,GAAe,WAAW,CAAA;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YACnB,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;gBACvB,IAAI,KAAK;oBAAE,OAAO,CAAC,GAAG,GAAG,KAAK,CAAA;;oBACzB,KAAK,KAAK,0BAA0B,CAAA;YAC3C,CAAC;iBAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;gBACvB,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,WAAW;oBAAE,IAAI,GAAG,KAAK,CAAA;;oBACvD,KAAK,KAAK,mBAAmB,KAAK,IAAI,EAAE,+BAA+B,CAAA;YAC9E,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,CAAA;IAC7E,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,KAAK,GAAkB,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;QAC1C,IAAI,IAAI,GAAe,WAAW,CAAA;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YACnB,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;gBACvB,IAAI,KAAK;oBAAE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAA;;oBACxB,KAAK,KAAK,0BAA0B,CAAA;YAC3C,CAAC;iBAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;gBACvB,IAAI,KAAK;oBAAE,KAAK,CAAC,GAAG,GAAG,KAAK,CAAA;;oBACvB,KAAK,KAAK,0BAA0B,CAAA;YAC3C,CAAC;iBAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;gBACvB,IAAI,KAAK;oBAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAA;;oBACzB,KAAK,KAAK,4BAA4B,CAAA;YAC7C,CAAC;iBAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;gBACvB,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,WAAW;oBAAE,IAAI,GAAG,KAAK,CAAA;;oBACvD,KAAK,KAAK,mBAAmB,KAAK,IAAI,EAAE,+BAA+B,CAAA;YAC9E,CAAC;YACD,kEAAkE;QACpE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,CAAA;IAC3E,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,KAAK,GAAkB,EAAE,CAAA;QAC/B,IAAI,IAAI,GAAe,WAAW,CAAA;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YACnB,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;gBACvB,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,WAAW;oBAAE,IAAI,GAAG,KAAK,CAAA;;oBACvD,KAAK,KAAK,mBAAmB,KAAK,IAAI,EAAE,+BAA+B,CAAA;YAC9E,CAAC;iBAAM,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;gBAClC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;gBACvB,IAAI,KAAK;oBAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAA;;oBACpC,KAAK,KAAK,iCAAiC,CAAA;YAClD,CAAC;QACH,CAAC;QACD,OAAO;YACL,OAAO;YACP,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,KAAK;YACL,kEAAkE;YAClE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE;SACrC,CAAA;IACH,CAAC;IAED,IAAI,IAAI,GAAe,WAAW,CAAA;IAClC,IAAI,UAAU,GAAG,KAAK,CAAA;IACtB,IAAI,WAAW,GAAG,KAAK,CAAA;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;YACvB,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,WAAW;gBAAE,IAAI,GAAG,KAAK,CAAA;;gBACvD,KAAK,KAAK,mBAAmB,KAAK,IAAI,EAAE,+BAA+B,CAAA;QAC9E,CAAC;aAAM,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;YACnC,UAAU,GAAG,IAAI,CAAA;QACnB,CAAC;aAAM,IAAI,GAAG,KAAK,iBAAiB,EAAE,CAAC;YACrC,WAAW,GAAG,IAAI,CAAA;QACpB,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO;QACP,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,KAAK,UAAU,EAAE;KACjF,CAAA;AACH,CAAC;AA2BD,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,IAAuB,EACvB,MAAoB,EACpB,EAAU,EACV,QAAsB,EACtB,QAAsB;IAEtB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAErF,IAAI,KAAK,EAAE,CAAC;QACV,EAAE,CAAC,GAAG,CAAC,UAAU,KAAK,EAAE,CAAC,CAAA;QACzB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACZ,OAAO,CAAC,CAAA;IACV,CAAC;IACD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACZ,OAAO,CAAC,CAAA;IACV,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,EAAE,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAA;YACzE,OAAO,CAAC,CAAA;QACV,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,EAAE,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EACtF,EAAE,EACF,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CACtF,CAAA;QACD,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,EAAE,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAA;YACjE,OAAO,CAAC,CAAA;QACV,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAC1B,EAAE,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAA;gBAClE,OAAO,CAAC,CAAA;YACV,CAAC;YACD,MAAM,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,CAAC,WAAW,EAAE;gBACtD,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,GAAG,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjF,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjE,CAAC,CAAA;YACF,OAAO,CAAC,CAAA;QACV,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE;YAC9C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,EAAE,EAAE,IAAI,CAAC,EAAE;SACZ,CAAC,CAAA;QACF,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE;YAC1C,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9C,CAAC,CAAA;QACF,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YACxB,EAAE,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAA;YAClE,OAAO,CAAC,CAAA;QACV,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE;YACvD,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzC,CAAC,CAAA;QACF,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE;YACxC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjF,CAAC,CAAA;QACF,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IAED,4FAA4F;IAC5F,6FAA6F;IAC7F,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,EAAE,CAAC,GAAG,CACJ,6KAA6K,CAC9K,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;IACjD,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC1B,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/export-sync/cli.ts"],"names":[],"mappings":"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","sourcesContent":["import { runCheck } from './check'\nimport type { ExportMode } from './core'\nimport { DEFAULT_COMPONENTS_IMPORT } from './core'\nimport { runEject } from './eject'\nimport { runInit } from './init'\nimport type { WorkspaceConfigHost, WorkspaceProvisioningClient } from './init'\nimport type { ManifestHost } from './manifest-host'\nimport { runPush } from './push'\nimport { SYNC_TOKEN_ENV } from './registry-sync-client'\nimport { runPull } from './sync'\nimport type { ExportSource, FileIO, PullOptions } from './sync'\nimport { DEFAULT_TYPEGEN_PATH, runTypegen } from './typegen'\nimport { runWatch } from './watch'\nimport type { Scheduler, WatchDriver } from './watch'\n\n/**\n * The `builder` CLI surface (EC-147 push; EC-148 typegen + check; EC-149 eject; EC-110–112\n * validate + the deprecated export-era pull). Pure and injectable: `runCli` takes argv, an\n * {@link ExportSource}, a {@link FileIO}, and (for `push`/`check`) the sync dependencies, and\n * returns an exit code — so the whole CLI is unit-testable offline. The real `bin` is a thin\n * wrapper that wires Node `fs`, the Convex source, the Node manifest host, and the HTTP sync\n * client. Exit code 0 = success, 1 = failure (validation error / drift with --fail-on-error /\n * any push validation failure / any check error).\n */\n\n/** Push flags (EC-147). `root` is the host-repo scan root for `*.manifest.ts(x)` modules. */\nexport interface PushCliFlags {\n root: string\n ci: boolean\n watch: boolean\n}\n\n/** Eject flags (EC-149). */\nexport interface EjectCliFlags {\n /** Import specifier for the host repo's components module (default: {@link DEFAULT_COMPONENTS_IMPORT}). */\n componentsImport?: string\n}\n\n/** Typegen flags (EC-148). */\nexport interface TypegenCliFlags {\n /** Output path for the generated types module (default: {@link DEFAULT_TYPEGEN_PATH}). */\n out?: string\n}\n\n/** Check flags (EC-148). Check is always non-interactive; `--ci` is accepted as a no-op. */\nexport interface CheckCliFlags {\n /** Host-repo scan root for `*.manifest.ts(x)` modules. */\n root: string\n /** Typegen output path to drift-check (default: {@link DEFAULT_TYPEGEN_PATH}). */\n out?: string\n token?: string\n}\n\n/** Init flags (EC-154). `root` is the host-repo root holding `elytra.config.ts`. */\nexport interface InitCliFlags {\n root: string\n /** Slug of the configured project to provision; omitted = scaffold a starter config. */\n project?: string\n}\n\nexport interface ParsedCli {\n command:\n | 'pull'\n | 'validate'\n | 'push'\n | 'eject'\n | 'typegen'\n | 'check'\n | 'init'\n | 'help'\n | 'unknown'\n options: PullOptions\n /** Present when `command` is `init`. */\n init?: InitCliFlags\n /** Present when `command` is `push`. */\n push?: PushCliFlags\n /** Present when `command` is `eject`. */\n eject?: EjectCliFlags\n /** Present when `command` is `typegen`. */\n typegen?: TypegenCliFlags\n /** Present when `command` is `check`. */\n check?: CheckCliFlags\n /** Set when argv is malformed (unknown command/flag value) — runCli exits non-zero. */\n error?: string\n}\n\nconst HELP = `builder — Elytra CLI\n\nThe embedded runtime is the default delivery: your app renders the canonical graph through the\npublished @elytracms runtime packages. Component manifests are code-owned (defined in TS next to\nthe components); \\`push\\` validates them, \\`check\\` is the CI gate, and \\`eject\\` is the exit\nguarantee — leave anytime with a standalone, working Next.js app.\n\nUsage:\n builder init [options] Scaffold elytra.config.ts / provision a configured project\n builder push [options] Validate the component manifests declared in this repo\n builder typegen [options] Generate delivery + accessor types from the collection schemas\n builder check [options] CI gate: manifest validation, graph↔code coverage, type drift, validation\n builder eject [options] Generate a standalone Next.js app from builder state (exit path)\n builder validate [options] Validate the project; write nothing\n builder pull [options] [deprecated] Export-era sync — use eject (exit) or push (validate)\n builder help Show this help\n\nInit options:\n --project <slug> Provision the configured project with this slug (creates the\n backend project from elytra.config.ts and seeds its collection\n schema when the entry references a schema module). Idempotent.\n --dir <path> Host-repo root holding elytra.config.ts (default: .)\n Without --project, init scaffolds a starter elytra.config.ts (never overwrites one).\n\nPush options:\n --dir <path> Root to scan for *.manifest.ts(x) modules (default: .)\n --watch Re-validate on manifest changes (local development)\n --ci Non-interactive: any validation failure exits 1\n\nTypegen options:\n --out <path> Output file (default: ${DEFAULT_TYPEGEN_PATH}); commit it\n --mode <published|draft> Schema state to generate from (default: published)\n\nCheck options:\n --dir <path> Root to scan for *.manifest.ts(x) modules (default: .)\n --out <path> Typegen output file to drift-check (default: ${DEFAULT_TYPEGEN_PATH})\n --mode <published|draft> Content state to check (default: published)\n --token <token> Sync auth token (or ${SYNC_TOKEN_ENV}); required over http\n Check is always non-interactive (--ci is a no-op) and exits 1 on any error-severity issue.\n\nEject options:\n --mode <published|draft> Content state to snapshot (default: published)\n --components <specifier> Import specifier for your components module — it must export\n projectManifests + projectImplementations\n (default: ${DEFAULT_COMPONENTS_IMPORT}, relative to lib/registry.ts)\n Eject always validates first and writes nothing on a validation error.\n\nPull options (deprecated):\n --mode <published|draft> Content state to pull (default: published)\n --check-drift Report files out of sync; write nothing\n --fail-on-error Exit non-zero on a validation error (or drift, with --check-drift)\n`\n\n/**\n * Parse argv (without node/script) into a command + options. An unrecognized command or an\n * invalid flag value is reported via `error` so the CLI fails loudly (it is a CI gate).\n */\nexport function parseCli(argv: readonly string[]): ParsedCli {\n const [raw, ...rest] = argv\n const command: ParsedCli['command'] =\n raw === 'pull'\n ? 'pull'\n : raw === 'validate'\n ? 'validate'\n : raw === 'push'\n ? 'push'\n : raw === 'eject'\n ? 'eject'\n : raw === 'typegen'\n ? 'typegen'\n : raw === 'check'\n ? 'check'\n : raw === 'init'\n ? 'init'\n : raw === undefined || raw === 'help'\n ? 'help'\n : 'unknown'\n\n let error: string | undefined = command === 'unknown' ? `Unknown command \"${raw}\".` : undefined\n\n if (command === 'init') {\n const init: InitCliFlags = { root: '.' }\n for (let i = 0; i < rest.length; i++) {\n const arg = rest[i]\n if (arg === '--dir') {\n const value = rest[++i]\n if (value) init.root = value\n else error ??= 'Missing value for --dir.'\n } else if (arg === '--project') {\n const value = rest[++i]\n if (value) init.project = value\n else error ??= 'Missing value for --project.'\n }\n }\n return { command, ...(error ? { error } : {}), init, options: { mode: 'published' } }\n }\n\n if (command === 'push') {\n const push: PushCliFlags = { root: '.', ci: false, watch: false }\n for (let i = 0; i < rest.length; i++) {\n const arg = rest[i]\n if (arg === '--dir') {\n const value = rest[++i]\n if (value) push.root = value\n else error ??= 'Missing value for --dir.'\n } else if (arg === '--ci') {\n push.ci = true\n } else if (arg === '--watch') {\n push.watch = true\n }\n }\n if (push.ci && push.watch) error ??= '--watch is interactive and cannot be combined with --ci.'\n return {\n command,\n ...(error ? { error } : {}),\n push,\n options: { mode: 'published' },\n }\n }\n\n if (command === 'typegen') {\n const typegen: TypegenCliFlags = {}\n let mode: ExportMode = 'published'\n for (let i = 0; i < rest.length; i++) {\n const arg = rest[i]\n if (arg === '--out') {\n const value = rest[++i]\n if (value) typegen.out = value\n else error ??= 'Missing value for --out.'\n } else if (arg === '--mode') {\n const value = rest[++i]\n if (value === 'draft' || value === 'published') mode = value\n else error ??= `Invalid --mode \"${value ?? ''}\" (expected published|draft).`\n }\n }\n return { command, ...(error ? { error } : {}), typegen, options: { mode } }\n }\n\n if (command === 'check') {\n const check: CheckCliFlags = { root: '.' }\n let mode: ExportMode = 'published'\n for (let i = 0; i < rest.length; i++) {\n const arg = rest[i]\n if (arg === '--dir') {\n const value = rest[++i]\n if (value) check.root = value\n else error ??= 'Missing value for --dir.'\n } else if (arg === '--out') {\n const value = rest[++i]\n if (value) check.out = value\n else error ??= 'Missing value for --out.'\n } else if (arg === '--token') {\n const value = rest[++i]\n if (value) check.token = value\n else error ??= 'Missing value for --token.'\n } else if (arg === '--mode') {\n const value = rest[++i]\n if (value === 'draft' || value === 'published') mode = value\n else error ??= `Invalid --mode \"${value ?? ''}\" (expected published|draft).`\n }\n // `--ci` is accepted as a no-op: check is always non-interactive.\n }\n return { command, ...(error ? { error } : {}), check, options: { mode } }\n }\n\n if (command === 'eject') {\n const eject: EjectCliFlags = {}\n let mode: ExportMode = 'published'\n for (let i = 0; i < rest.length; i++) {\n const arg = rest[i]\n if (arg === '--mode') {\n const value = rest[++i]\n if (value === 'draft' || value === 'published') mode = value\n else error ??= `Invalid --mode \"${value ?? ''}\" (expected published|draft).`\n } else if (arg === '--components') {\n const value = rest[++i]\n if (value) eject.componentsImport = value\n else error ??= 'Missing value for --components.'\n }\n }\n return {\n command,\n ...(error ? { error } : {}),\n eject,\n // Eject is always validation-gated; runEject implies failOnError.\n options: { mode, failOnError: true },\n }\n }\n\n let mode: ExportMode = 'published'\n let checkDrift = false\n let failOnError = false\n for (let i = 0; i < rest.length; i++) {\n const arg = rest[i]\n if (arg === '--mode') {\n const value = rest[++i]\n if (value === 'draft' || value === 'published') mode = value\n else error ??= `Invalid --mode \"${value ?? ''}\" (expected published|draft).`\n } else if (arg === '--check-drift') {\n checkDrift = true\n } else if (arg === '--fail-on-error') {\n failOnError = true\n }\n }\n\n return {\n command,\n ...(error ? { error } : {}),\n options: { mode, checkDrift, failOnError, validateOnly: command === 'validate' },\n }\n}\n\n/**\n * What the real bin wires for `push` (EC-147) and `check` (EC-148): manifest discovery\n * and — for `--watch` — an fs event driver. Injected so the push/check CLI is testable\n * without fs or process state. The `check` content source (the builder snapshot) is the\n * injected {@link ExportSource}.\n */\nexport interface PushCliDeps {\n host: ManifestHost\n /** Required for `--watch` (the bin passes `createFsWatchDriver()`). */\n watchDriver?: WatchDriver\n debounceMs?: number\n scheduler?: Scheduler\n}\n\n/**\n * What the real bin wires for `init` (EC-154): config discovery (dynamic import,\n * like manifest discovery) and the backend provisioning seam. Injected so the\n * init CLI is testable with in-memory operations — no live Convex.\n */\nexport interface InitCliDeps {\n configHost: WorkspaceConfigHost\n /** Required for `--project`; scaffold mode runs without a backend. */\n client?: WorkspaceProvisioningClient\n}\n\n/** Run the CLI. Returns a process exit code; never throws. 0 = success, 1 = failure. */\nexport async function runCli(\n argv: readonly string[],\n source: ExportSource,\n io: FileIO,\n pushDeps?: PushCliDeps,\n initDeps?: InitCliDeps,\n): Promise<number> {\n const { command, options, push, eject, typegen, check, init, error } = parseCli(argv)\n\n if (error) {\n io.log(`error: ${error}`)\n io.log(HELP)\n return 1\n }\n if (command === 'help') {\n io.log(HELP)\n return 0\n }\n\n if (command === 'init') {\n if (!initDeps || !init) {\n io.log('error: init is not configured (no workspace config host wired).')\n return 1\n }\n const result = await runInit(\n { host: initDeps.configHost, ...(initDeps.client ? { client: initDeps.client } : {}) },\n io,\n { root: init.root, ...(init.project !== undefined ? { project: init.project } : {}) },\n )\n return result.ok ? 0 : 1\n }\n\n if (command === 'push') {\n if (!pushDeps || !push) {\n io.log('error: push is not configured (no manifest host wired).')\n return 1\n }\n if (push.watch) {\n if (!pushDeps.watchDriver) {\n io.log('error: --watch is not available (no watch driver wired).')\n return 1\n }\n await runWatch(pushDeps.host, io, pushDeps.watchDriver, {\n root: push.root,\n ...(pushDeps.debounceMs !== undefined ? { debounceMs: pushDeps.debounceMs } : {}),\n ...(pushDeps.scheduler ? { scheduler: pushDeps.scheduler } : {}),\n })\n return 0\n }\n const result = await runPush(pushDeps.host, io, {\n root: push.root,\n ci: push.ci,\n })\n return result.ok ? 0 : 1\n }\n\n if (command === 'typegen') {\n const result = await runTypegen(source, io, {\n mode: options.mode,\n ...(typegen?.out ? { out: typegen.out } : {}),\n })\n return result.ok ? 0 : 1\n }\n\n if (command === 'check') {\n if (!pushDeps || !check) {\n io.log('error: check is not configured (no manifest host wired).')\n return 1\n }\n const result = await runCheck(source, pushDeps.host, io, {\n root: check.root,\n mode: options.mode,\n ...(check.out ? { out: check.out } : {}),\n })\n return result.ok ? 0 : 1\n }\n\n if (command === 'eject') {\n const result = await runEject(source, io, {\n mode: options.mode,\n ...(eject?.componentsImport ? { componentsImport: eject.componentsImport } : {}),\n })\n return result.ok ? 0 : 1\n }\n\n // Export-era surface (EC-110–112), demoted by EC-149: still works, but the embedded runtime\n // is the default delivery — `push` (+ typegen) is the day-to-day workflow, `eject` the exit.\n if (command === 'pull') {\n io.log(\n 'deprecated: `builder pull` is the export-era workflow. Use `builder eject` to leave with a standalone app, or `builder push` to sync component manifests up to the builder.',\n )\n }\n\n const result = await runPull(source, io, options)\n return result.ok ? 0 : 1\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/export-sync/core.ts"],"names":[],"mappings":"AA8CA;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,eAAe,CAAA;AAKxD,8FAA8F;AAC9F,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,gEAAgE,IAAI;;8FAEiB,CAAA;AAC9F,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,CAAA;AACnD,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACrB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,MAAM,GAAG,GAA4B,EAAE,CAAA;YACvC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAgC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBACrE,GAAG,CAAC,CAAC,CAAC,GAAI,KAAiC,CAAC,CAAC,CAAC,CAAA;YAChD,CAAC;YACD,OAAO,GAAG,CAAA;QACZ,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;AACH,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,SAAS,CAAC,KAAsB;IAC9C,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACpF,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,QAAQ,GAAG,OAAO;SACrB,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SAC3B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAClE,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACxD,CAAC"}
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/export-sync/core.ts"],"names":[],"mappings":"AA8CA;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,eAAe,CAAA;AAKxD,8FAA8F;AAC9F,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,gEAAgE,IAAI;;8FAEiB,CAAA;AAC9F,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,CAAA;AACnD,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACrB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,MAAM,GAAG,GAA4B,EAAE,CAAA;YACvC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAgC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBACrE,GAAG,CAAC,CAAC,CAAC,GAAI,KAAiC,CAAC,CAAC,CAAC,CAAA;YAChD,CAAC;YACD,OAAO,GAAG,CAAA;QACZ,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;AACH,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,SAAS,CAAC,KAAsB;IAC9C,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACpF,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,QAAQ,GAAG,OAAO;SACrB,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SAC3B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAClE,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACxD,CAAC","sourcesContent":["import type { ComponentManifest } from '@elytracms/core/component-registry'\nimport type { CollectionDef, LocaleConfig, RedirectRecord, RouteRecord } from '@elytracms/core/cms-core'\nimport type { DataSource } from '@elytracms/core/data-binding'\nimport type { ProjectGraph } from '@elytracms/core/project-graph'\n\n/**\n * @elytracms/export-sync core model (brief §4.9, Phase 9; reframed by EC-149 / vision AD-1).\n * The embedded runtime is the default delivery; generation survives as the **eject path** —\n * a pure function from the canonical project model to a standalone Next.js App Router app.\n * The same input always produces the same output (deterministic), so ejected output is\n * reviewable, diffable, and drift-checkable.\n */\n\n/** A single generated file: a repo-relative path and its full contents. */\nexport interface GeneratedFile {\n /** Path relative to the export root, POSIX-separated, e.g. `app/layout.tsx`. */\n path: string\n contents: string\n}\n\n/** Everything the generator needs from the canonical model to produce an app. */\nexport interface ExportInput {\n /** Human project name (drives package name, titles). */\n projectName: string\n /** Stable slug used for the generated package name. */\n slug: string\n graph: ProjectGraph\n routes: RouteRecord[]\n redirects: RedirectRecord[]\n collections: CollectionDef[]\n /** Component manifests to wire into the exported registry (ids + namespaces). */\n manifests: ComponentManifest[]\n sources: DataSource[]\n localeConfig: LocaleConfig\n /** The design-token CSS (from `@elytracms/core/design-tokens` `emitTokensCss()`). */\n tokensCss: string\n /**\n * Import specifier for the host repo's components module (EC-149, vision AD-2): the module\n * that exports `projectManifests` and `projectImplementations` — the project's REAL component\n * code, which lives in the host repo and is never generated. Relative specifiers resolve from\n * `lib/registry.ts`; bare specifiers must be a dependency of the ejected app. Defaults to\n * {@link DEFAULT_COMPONENTS_IMPORT}. Only used when the project has non-primitive components.\n */\n componentsImport?: string\n}\n\n/**\n * Default host-components import specifier: a `components/` module at the ejected app root\n * (relative to the generated `lib/registry.ts`). Point `eject --components <specifier>` at your\n * real components module to override.\n */\nexport const DEFAULT_COMPONENTS_IMPORT = '../components'\n\n/** Which content state the exported app reads (brief §4.9 — published vs draft). */\nexport type ExportMode = 'published' | 'draft'\n\n/** A namespaced banner all generated files carry, so ejected code is clearly identifiable. */\nexport function generatedBanner(path: string): string {\n return `/* Generated by \\`builder eject\\` (@elytracms/export-sync) — ${path}.\n * Yours after eject: no builder-only runtime dependencies, safe to edit and own.\n * Re-running \\`builder eject\\` overwrites generated files with the current builder state. */`\n}\n\n/** Stable JSON serialization (sorted keys) so generated data files are diff-stable. */\nexport function stableJson(value: unknown): string {\n return JSON.stringify(value, sortedReplacer(), 2)\n}\n\nfunction sortedReplacer(): (key: string, value: unknown) => unknown {\n return (_key, value) => {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const out: Record<string, unknown> = {}\n for (const k of Object.keys(value as Record<string, unknown>).sort()) {\n out[k] = (value as Record<string, unknown>)[k]\n }\n return out\n }\n return value\n }\n}\n\n/** Sort generated files by path for deterministic ordering. */\nexport function sortFiles(files: GeneratedFile[]): GeneratedFile[] {\n return [...files].sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0))\n}\n\n/** Convert a route pattern (`/blog/:slug`) into a Next.js App Router segment path. */\nexport function routeToAppPath(pattern: string): string {\n const segments = pattern\n .split('/')\n .filter((s) => s.length > 0)\n .map((seg) => (seg.startsWith(':') ? `[${seg.slice(1)}]` : seg))\n return segments.length === 0 ? '' : segments.join('/')\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eject.js","sourceRoot":"","sources":["../../src/export-sync/eject.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,QAAQ,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AA8BhC,8FAA8F;AAC9F,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAoB,EACpB,EAAU,EACV,OAAqB;IAErB,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,yBAAyB,CAAA;IAE9E,uFAAuF;IACvF,uDAAuD;IACvD,MAAM,WAAW,GAAiB;QAChC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC;KACrF,CAAA;IAED,EAAE,CAAC,GAAG,CAAC,UAAU,OAAO,CAAC,IAAI,2DAA2D,gBAAgB,IAAI,CAAC,CAAA;IAC7G,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;IACxF,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACd,EAAE,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAA;IACnG,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,GAAG,CAAC,sFAAsF,CAAC,CAAA;IAChG,CAAC;IACD,OAAO,EAAE,GAAG,MAAM,EAAE,gBAAgB,EAAE,CAAA;AACxC,CAAC"}
|
|
1
|
+
{"version":3,"file":"eject.js","sourceRoot":"","sources":["../../src/export-sync/eject.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,QAAQ,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AA8BhC,8FAA8F;AAC9F,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAoB,EACpB,EAAU,EACV,OAAqB;IAErB,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,yBAAyB,CAAA;IAE9E,uFAAuF;IACvF,uDAAuD;IACvD,MAAM,WAAW,GAAiB;QAChC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC;KACrF,CAAA;IAED,EAAE,CAAC,GAAG,CAAC,UAAU,OAAO,CAAC,IAAI,2DAA2D,gBAAgB,IAAI,CAAC,CAAA;IAC7G,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;IACxF,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACd,EAAE,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAA;IACnG,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,GAAG,CAAC,sFAAsF,CAAC,CAAA;IAChG,CAAC;IACD,OAAO,EAAE,GAAG,MAAM,EAAE,gBAAgB,EAAE,CAAA;AACxC,CAAC","sourcesContent":["import type { ExportMode } from './core'\nimport { DEFAULT_COMPONENTS_IMPORT } from './core'\nimport { runPull } from './sync'\nimport type { ExportSource, FileIO, PullResult } from './sync'\n\n/**\n * `builder eject` (EC-149, vision AD-1). The embedded runtime is the default delivery; eject is\n * the **exit guarantee** — generate a standalone, buildable Next.js app from the current builder\n * state, with the canonical model snapshotted into the repo (zero runtime dependency on the\n * builder backend) and the host repo's REAL components imported by the generated registry\n * (vision AD-2 — no stubs are generated).\n *\n * Eject reuses the deterministic EC-101–113 pipeline via {@link runPull} and is always\n * validation-gated: an eject never writes a broken app, so `--fail-on-error` is implied.\n */\n\nexport interface EjectOptions {\n /** Content state to snapshot (default: published). */\n mode: ExportMode\n /**\n * Import specifier the generated registry uses for the host repo's components module (the\n * module exporting `projectManifests` + `projectImplementations`). Defaults to\n * {@link DEFAULT_COMPONENTS_IMPORT}.\n */\n componentsImport?: string\n}\n\n/** The structured eject result — the underlying pull result plus the resolved components import. */\nexport interface EjectResult extends PullResult {\n componentsImport: string\n}\n\n/** Run an eject. Returns a structured result and never throws; validation issues are data. */\nexport async function runEject(\n source: ExportSource,\n io: FileIO,\n options: EjectOptions,\n): Promise<EjectResult> {\n const componentsImport = options.componentsImport ?? DEFAULT_COMPONENTS_IMPORT\n\n // Inject the components-import wiring into the canonical input; everything else is the\n // provider's published/draft state, snapshotted as-is.\n const ejectSource: ExportSource = {\n loadInput: async (mode) => ({ ...(await source.loadInput(mode)), componentsImport }),\n }\n\n io.log(`Eject (${options.mode}): generating a standalone Next.js app (components from ${componentsImport}).`)\n const result = await runPull(ejectSource, io, { mode: options.mode, failOnError: true })\n if (result.ok) {\n io.log('Eject complete: the app builds from its content snapshot — no builder backend required.')\n } else {\n io.log('Eject aborted: fix the validation errors above — an eject never writes a broken app.')\n }\n return { ...result, componentsImport }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../src/export-sync/fixtures.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../src/export-sync/fixtures.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineComponent } from '@elytracms/core/component-registry'\nimport type { ComponentManifest } from '@elytracms/core/component-registry'\nimport { sampleCollections, sampleLocaleConfig } from '@elytracms/core/cms-core'\nimport type { RedirectRecord, RouteRecord } from '@elytracms/core/cms-core'\nimport { sampleSources } from '@elytracms/core/data-binding'\nimport { emitTokensCss } from '@elytracms/core/design-tokens'\nimport { validSampleGraph } from '@elytracms/core/project-graph'\nimport type { ExportInput } from './core'\n\n/**\n * A deterministic reference export input (EC-113), assembled from the canonical sample fixtures.\n * Used to test generation determinism and as a worked example — NOT a production seed.\n *\n * The component manifests are defined inline (rather than imported from the React renderer) so\n * this logic package stays free of UI/React deps; they mirror the base primitives the sample\n * graph uses, with prop/slot shapes the graph validator checks against. Props are field-defs\n * (EC-190 \"props as fields\"): the record key is the prop name; each value is a `FieldDef` minus\n * `name`, with `context: 'prop'`.\n */\n\n/** The base primitives the reference graph (validSampleGraph) actually uses. */\nexport const referenceManifests: ComponentManifest[] = [\n defineComponent({\n id: 'base.primitives.Container',\n namespace: 'base.primitives',\n title: 'Container',\n props: {},\n slots: [{ name: 'children' }, { name: 'outlet' }],\n }),\n defineComponent({\n id: 'base.primitives.Stack',\n namespace: 'base.primitives',\n title: 'Stack',\n props: { gap: { type: 'number', context: 'prop', default: 4, form: { label: 'Gap' } } },\n slots: [{ name: 'children' }],\n }),\n defineComponent({\n id: 'base.primitives.Heading',\n namespace: 'base.primitives',\n title: 'Heading',\n props: {\n text: { type: 'text', context: 'prop', default: '', form: { label: 'Text' } },\n level: { type: 'number', context: 'prop', default: 2, form: { label: 'Level' } },\n },\n slots: [],\n }),\n defineComponent({\n id: 'base.primitives.Text',\n namespace: 'base.primitives',\n title: 'Text',\n props: { value: { type: 'text', context: 'prop', default: '', form: { label: 'Text' } } },\n slots: [],\n }),\n defineComponent({\n id: 'base.primitives.Repeater',\n namespace: 'base.primitives',\n title: 'Repeater',\n // EC-190 DD7: the iterated `items` value (an array) has no static field-def type;\n // it rides node.props undeclared. No editable static prop is exposed — keep `iterate`.\n props: {},\n slots: [{ name: 'item', required: true }],\n iterate: { itemsProp: 'items', itemSlot: 'item' },\n }),\n]\n\n/**\n * Routes that all bind to a renderable document (EC-187): `/` → the `page/home`\n * document (composition), `/blog/:slug` → a `post` document by slug. So the\n * export validates and every route renders. `r-post` carries a dynamic `:slug`\n * param to exercise param routing.\n */\nexport const referenceRoutes: RouteRecord[] = [\n { id: 'r-home', pattern: '/', locale: 'en', document: { collection: 'page', id: 'home' } },\n { id: 'r-home-de', pattern: '/', locale: 'de', document: { collection: 'page', id: 'home' } },\n { id: 'r-post', pattern: '/blog/:slug', locale: 'en', document: { collection: 'post', id: ':slug' } },\n]\n\nexport const referenceRedirects: RedirectRecord[] = [\n { id: 'rd-old-home', from: '/home', to: '/', permanent: true },\n]\n\n/** The full reference export input — deterministic. */\nexport const referenceInput: ExportInput = {\n projectName: 'Sample Project',\n slug: 'sample-project',\n graph: validSampleGraph,\n routes: referenceRoutes,\n redirects: referenceRedirects,\n collections: [...sampleCollections],\n manifests: referenceManifests,\n sources: sampleSources,\n localeConfig: sampleLocaleConfig,\n tokensCss: emitTokensCss(),\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/export-sync/generate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/export-sync/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAErE,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAE1F,qFAAqF;AACrF,SAAS,SAAS,CAAC,KAA2B;IAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AAC1E,CAAC;AAED;;;;;;;GAOG;AAEH,8EAA8E;AAC9E,oFAAoF;AACpF,8EAA8E;AAE9E,SAAS,YAAY,CAAC,KAAkB;IACtC,OAAO;QACL,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QAChE,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QACnE,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;QACzE,EAAE,IAAI,EAAE,0BAA0B,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;QAC7E,EAAE,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;QACrE,EAAE,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;KAC3E,CAAA;AACH,CAAC;AAED,8EAA8E;AAC9E,mFAAmF;AACnF,6FAA6F;AAC7F,qEAAqE;AACrE,8EAA8E;AAE9E,SAAS,YAAY,CAAC,KAAkB;IACtC,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS;SAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,iBAAiB,CAAC;SACrD,IAAI,EAAE,CAAA;IACT,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,IAAI,yBAAyB,CAAA;IAE5E,MAAM,QAAQ,GACZ,UAAU,CAAC,MAAM,KAAK,CAAC;QACrB,CAAC,CAAC,GAAG,eAAe,CAAC,iBAAiB,CAAC;;;;;;;;;;;;;CAa5C;QACK,CAAC,CAAC,GAAG,eAAe,CAAC,iBAAiB,CAAC;;;;;;;2DAOc,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;;;;;;;;;;;;;6DAa9B,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;EAC3F,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CAClD,CAAA;IACC,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAA;AAC9C,CAAC;AAED,8EAA8E;AAC9E,mEAAmE;AACnE,8EAA8E;AAE9E,SAAS,YAAY;IACnB,MAAM,QAAQ,GAAG,GAAG,eAAe,CAAC,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;CAyBvD,CAAA;IACC,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAA;AAC9C,CAAC;AAED,8EAA8E;AAC9E,+EAA+E;AAC/E,8EAA8E;AAE9E,SAAS,aAAa;IACpB,MAAM,QAAQ,GAAG,GAAG,eAAe,CAAC,mBAAmB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuEzD,CAAA;IACC,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAA;AAChD,CAAC;AAED,8EAA8E;AAC9E,2FAA2F;AAC3F,8EAA8E;AAE9E,SAAS,UAAU;IACjB,MAAM,QAAQ,GAAG,GAAG,eAAe,CAAC,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCrD,CAAA;IACC,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAA;AAC5C,CAAC;AAED,8EAA8E;AAC9E,kCAAkC;AAClC,8EAA8E;AAE9E,SAAS,UAAU;IACjB,MAAM,QAAQ,GAAG,GAAG,eAAe,CAAC,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;CAqBrD,CAAA;IACC,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAA;AAC5C,CAAC;AAED,8EAA8E;AAC9E,iCAAiC;AACjC,8EAA8E;AAE9E,SAAS,QAAQ,CAAC,KAAkB;IAClC,MAAM,MAAM,GAAkB;QAC5B,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC;;;;mCAIf,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC;;;;kBAIlD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC;;;;;CAK3D;KACE,CAAA;IAED,MAAM,QAAQ,GAAkB;QAC9B,IAAI,EAAE,0BAA0B;QAChC,QAAQ,EAAE,GAAG,eAAe,CAAC,0BAA0B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwC3D;KACE,CAAA;IAED,MAAM,YAAY,GAAkB;QAClC,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,GAAG,eAAe,CAAC,mBAAmB,CAAC;;;;;;;;;CASpD;KACE,CAAA;IAED,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAA;AACzC,CAAC;AAED,SAAS,UAAU,CAAC,KAAkB;IACpC,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE;EACZ,KAAK,CAAC,SAAS;;;CAGhB;KACE,CAAA;AACH,CAAC;AAED,8EAA8E;AAC9E,2FAA2F;AAC3F,2FAA2F;AAC3F,gFAAgF;AAChF,8EAA8E;AAE9E,SAAS,aAAa,CAAC,KAAkB;IACvC,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,IAAI,yBAAyB,CAAA;IAC5E,MAAM,oBAAoB,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,iBAAiB,CAAC,CAAA;IAEjG,MAAM,GAAG,GAAG;QACV,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,0FAA0F;YAC1F,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,YAAY;YACnB,KAAK,EAAE,YAAY;SACpB;QACD,YAAY,EAAE;YACZ,0EAA0E;YAC1E,iEAAiE;YACjE,iBAAiB,EAAE,aAAa;YAChC,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,SAAS;SACvB;KACF,CAAA;IAED,MAAM,UAAU,GAAG,qBAAqB,KAAK,CAAC,WAAW;;;;;;CAM1D,CAAA;IAEC,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,uCAAuC;QAChD,SAAS,EAAE,QAAQ;QACnB,cAAc,EAAE,cAAc;KAC/B,CAAA;IAED,MAAM,UAAU,GAAG,GAAG,eAAe,CAAC,iBAAiB,CAAC;;;;;;;CAOzD,CAAA;IAEC,MAAM,QAAQ,GAAG;QACf,eAAe,EAAE;YACf,MAAM,EAAE,QAAQ;YAChB,GAAG,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC;YACtC,MAAM,EAAE,QAAQ;YAChB,gBAAgB,EAAE,SAAS;YAC3B,GAAG,EAAE,UAAU;YACf,MAAM,EAAE,IAAI;YACZ,eAAe,EAAE,IAAI;YACrB,iBAAiB,EAAE,IAAI;YACvB,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;SAC5B;QACD,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,CAAC;KACpD,CAAA;IAED,MAAM,iBAAiB,GAAG,oBAAoB;QAC5C,CAAC,CAAC;;;;;;2DAMqD,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;;;;;;;;uEAQpB,yBAAyB;;;;;CAK/F;QACG,CAAC,CAAC;;;;;;CAML,CAAA;IAEC,MAAM,MAAM,GAAG,KAAK,KAAK,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;EAyBrC,iBAAiB;;;;;;;;;;;;;;CAclB,CAAA;IAEC,OAAO;QACL,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;QAC1D,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE;QAC9C,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE;QAC5D,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE;QACjD,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE;QAChE,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE;KACxC,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,KAAkB;IAC/C,OAAO,SAAS,CAAC;QACf,GAAG,QAAQ,CAAC,KAAK,CAAC;QAClB,UAAU,CAAC,KAAK,CAAC;QACjB,YAAY,CAAC,KAAK,CAAC;QACnB,YAAY,EAAE;QACd,aAAa,EAAE;QACf,UAAU,EAAE;QACZ,UAAU,EAAE;QACZ,GAAG,YAAY,CAAC,KAAK,CAAC;QACtB,GAAG,aAAa,CAAC,KAAK,CAAC;KACxB,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { namespaceOf } from '@elytracms/core/component-registry'\nimport { serializeProjectGraph } from '@elytracms/core/project-graph'\nimport type { ExportInput, GeneratedFile } from './core'\nimport { DEFAULT_COMPONENTS_IMPORT, generatedBanner, sortFiles, stableJson } from './core'\n\n/** Canonical graph JSON (validated by the serializer), pretty-printed for review. */\nfunction graphJson(graph: ExportInput['graph']): string {\n return JSON.stringify(JSON.parse(serializeProjectGraph(graph)), null, 2)\n}\n\n/**\n * Next.js App Router code generation (EC-101–109, ejected shape per EC-149). Each function emits\n * one readable file. The output is a standalone app that depends only on the published\n * `@elytracms/*` runtime packages (never builder-only code), reads its content from the JSON\n * snapshot generated alongside it (zero runtime dependency on the builder backend), and renders\n * the canonical graph through the runtime renderer. Project components are NOT generated — they\n * are real code in the host repo (vision AD-2) that the generated registry imports.\n */\n\n// ---------------------------------------------------------------------------\n// Content data (EC-101/104) — the canonical model serialized as JSON the app reads.\n// ---------------------------------------------------------------------------\n\nfunction contentFiles(input: ExportInput): GeneratedFile[] {\n return [\n { path: 'content/graph.json', contents: graphJson(input.graph) },\n { path: 'content/routes.json', contents: stableJson(input.routes) },\n { path: 'content/redirects.json', contents: stableJson(input.redirects) },\n { path: 'content/collections.json', contents: stableJson(input.collections) },\n { path: 'content/sources.json', contents: stableJson(input.sources) },\n { path: 'content/locales.json', contents: stableJson(input.localeConfig) },\n ]\n}\n\n// ---------------------------------------------------------------------------\n// Registry (EC-102/149) — wire component ids → implementations, namespace-correct.\n// Project components are real code in the host repo (vision AD-2): the registry IMPORTS them\n// from the configured components module instead of generating stubs.\n// ---------------------------------------------------------------------------\n\nfunction registryFile(input: ExportInput): GeneratedFile {\n const projectIds = input.manifests\n .map((m) => m.id)\n .filter((id) => namespaceOf(id) !== 'base.primitives')\n .sort()\n const componentsImport = input.componentsImport ?? DEFAULT_COMPONENTS_IMPORT\n\n const contents =\n projectIds.length === 0\n ? `${generatedBanner('lib/registry.ts')}\nimport { ComponentRegistry } from '@elytracms/core/component-registry'\nimport { basePrimitives } from '@elytracms/core/runtime-renderer'\nimport type { ComponentImplementations } from '@elytracms/core/runtime-renderer'\n\n// Platform primitives (base.primitives.*) ship with the runtime renderer.\n// This project uses only base primitives — no host components module is imported.\nconst base = basePrimitives()\n\n/** The ejected app's component registry. */\nexport const registry = new ComponentRegistry(base.manifests)\n\nexport const implementations: ComponentImplementations = base.implementations\n`\n : `${generatedBanner('lib/registry.ts')}\nimport { ComponentRegistry } from '@elytracms/core/component-registry'\nimport { basePrimitives } from '@elytracms/core/runtime-renderer'\nimport type { ComponentImplementations } from '@elytracms/core/runtime-renderer'\n// Your REAL components, from the host repo (configure with \\`builder eject --components <specifier>\\`).\n// The module must export \\`projectManifests\\` (ComponentManifest[]) and\n// \\`projectImplementations\\` (ComponentImplementations) — see README.md.\nimport { projectManifests, projectImplementations } from ${JSON.stringify(componentsImport)}\n\n// Platform primitives (base.primitives.*) ship with the runtime renderer.\nconst base = basePrimitives()\n\n/** The ejected app's component registry — base primitives + this project's components. */\nexport const registry = new ComponentRegistry([...base.manifests, ...projectManifests])\n\nexport const implementations: ComponentImplementations = {\n ...base.implementations,\n ...projectImplementations,\n}\n\n// Project components this graph references (expected from ${JSON.stringify(componentsImport)}):\n${projectIds.map((id) => `// - ${id}`).join('\\n')}\n`\n return { path: 'lib/registry.ts', contents }\n}\n\n// ---------------------------------------------------------------------------\n// Renderer (EC-103) — server-safe re-export, no builder-only deps.\n// ---------------------------------------------------------------------------\n\nfunction rendererFile(): GeneratedFile {\n const contents = `${generatedBanner('lib/renderer.ts')}\nimport { renderCompositionInLayout } from '@elytracms/core/runtime-renderer'\nimport type { ProjectGraph } from '@elytracms/core/project-graph'\nimport type { ReactNode } from 'react'\nimport { registry, implementations } from './registry'\nimport { resolveBinding } from './cms-client'\nimport type { RepeaterItem } from './cms-client'\n\n/**\n * Render a page-collection document's \\`body\\` composition into its \\`layoutId\\`\n * layout (EC-187), server-side. Bindings resolve through the CMS client\n * (published or draft, per request). No builder-only code is imported.\n */\nexport function renderPage(\n graph: ProjectGraph,\n body: unknown,\n layoutId: string | undefined,\n payloads: Record<string, unknown>,\n): ReactNode {\n return renderCompositionInLayout(graph, layoutId, body, {\n registry,\n implementations,\n resolveBinding: (ref, item?: RepeaterItem) => resolveBinding(payloads, ref, item),\n })\n}\n`\n return { path: 'lib/renderer.ts', contents }\n}\n\n// ---------------------------------------------------------------------------\n// CMS adapter client (EC-104) — provider-neutral content + binding resolution.\n// ---------------------------------------------------------------------------\n\nfunction cmsClientFile(): GeneratedFile {\n const contents = `${generatedBanner('lib/cms-client.ts')}\nimport { resolveBinding as resolve } from '@elytracms/core/data-binding'\nimport type { BindingReference, JsonValue } from '@elytracms/core/project-graph'\nimport { SourceRegistry } from '@elytracms/core/data-binding'\nimport sources from '../content/sources.json'\n\nexport interface RepeaterItem {\n item: unknown\n index: number\n}\n\n/**\n * The content/data adapter for the ejected app. Provider-neutral: by default it reads the\n * payloads snapshotted into content/sources.json at eject time (no builder backend needed),\n * but you can swap \\`fetchPayloads\\` to hit your live backend (Convex / REST / CMS) and choose\n * published vs draft via \\`mode\\`.\n */\nexport type ContentMode = 'published' | 'draft'\n\nconst registry = SourceRegistry.from(sources as never)\n\n/** Build the payload store for a request. Replace with live fetching as needed. */\nexport async function fetchPayloads(_mode: ContentMode = 'published'): Promise<Record<string, JsonValue>> {\n const payloads: Record<string, JsonValue> = {}\n for (const source of registry.list()) {\n if (source.sample !== undefined) payloads[source.id] = source.sample\n }\n return payloads\n}\n\n/**\n * The shape of a routed page-collection document (EC-187): \\`body\\` is the canvas\n * composition, \\`layoutId\\` selects the wrapping layout. Content collections that\n * are not pages are rendered by your own route components.\n */\nexport interface PageDocument {\n body: unknown\n layoutId?: string\n}\n\n/**\n * Fetch the routed \\`page\\`-collection document. STUB: wire this to your content\n * backend (Convex / REST / CMS) — return the page document for the resolved\n * route ref + params, or \\`null\\` for a 404. The CLI export ships the route table\n * and the layout graph; the page documents live in your CMS.\n */\nexport async function fetchPageDocument(\n _ref: { collection: string; id: string },\n _params: Record<string, string>,\n): Promise<PageDocument | null> {\n return null\n}\n\n/** Resolve a single binding against the request's payloads (used by the renderer). */\nexport function resolveBinding(\n payloads: Record<string, unknown>,\n ref: BindingReference,\n item?: RepeaterItem,\n): unknown {\n const resolution = resolve(ref, { payloads: payloads as Record<string, JsonValue>, registry }, item as never)\n switch (resolution.kind) {\n case 'value':\n return resolution.value\n case 'props':\n return resolution.props\n case 'condition':\n return resolution.pass\n default:\n return undefined\n }\n}\n`\n return { path: 'lib/cms-client.ts', contents }\n}\n\n// ---------------------------------------------------------------------------\n// Route resolver integration (EC-105) — App Router wiring with redirects/fallbacks/locale.\n// ---------------------------------------------------------------------------\n\nfunction routesFile(): GeneratedFile {\n const contents = `${generatedBanner('lib/routes.ts')}\nimport { createRouter } from '@elytracms/core/cms-core'\nimport type { ResolveResult } from '@elytracms/core/cms-core'\nimport routes from '../content/routes.json'\nimport redirects from '../content/redirects.json'\nimport locales from '../content/locales.json'\n\nconst config = locales as { default: string; locales: string[] }\nconst router = createRouter(routes as never, redirects as never, { defaultLocale: config.default })\n\n/**\n * Derive the request locale from a leading URL segment (the \\`/de/about\\` strategy) and return the\n * remaining path. Falls back to the default locale when no locale prefix is present (EC-105).\n */\nexport function splitLocale(url: string): { locale: string; path: string } {\n const segments = url.split('/').filter((s) => s.length > 0)\n const first = segments[0]\n if (first && first !== config.default && config.locales.includes(first)) {\n return { locale: first, path: '/' + segments.slice(1).join('/') }\n }\n return { locale: config.default, path: url }\n}\n\n/** Resolve a request URL to a page + params, honoring redirects, fallbacks and locale (EC-105). */\nexport function resolveRoute(url: string, locale?: string): ResolveResult {\n return router.resolveUrl(url, locale)\n}\n\n/** Follow a redirect chain to its terminus. */\nexport function resolveRedirect(from: string) {\n return router.followRedirects(from)\n}\n`\n return { path: 'lib/routes.ts', contents }\n}\n\n// ---------------------------------------------------------------------------\n// Image & asset adapter (EC-106).\n// ---------------------------------------------------------------------------\n\nfunction assetsFile(): GeneratedFile {\n const contents = `${generatedBanner('lib/assets.ts')}\n/**\n * Asset URL resolution + image optimization hook points (EC-106). Storage-adapter neutral:\n * point \\`ASSET_BASE_URL\\` at your CDN/storage, or replace \\`assetUrl\\` entirely.\n */\nconst ASSET_BASE_URL = process.env.NEXT_PUBLIC_ASSET_BASE_URL ?? ''\n\n/** Resolve an asset id/path to a fully-qualified URL. */\nexport function assetUrl(idOrPath: string): string {\n if (/^https?:\\\\/\\\\//.test(idOrPath)) return idOrPath\n const base = ASSET_BASE_URL.replace(/\\\\/$/, '')\n const path = idOrPath.replace(/^\\\\//, '')\n return base ? \\`\\${base}/\\${path}\\` : \\`/\\${path}\\`\n}\n\n/** A next/image loader hook — wire your provider's transform params here. */\nexport function imageLoader({ src, width, quality }: { src: string; width: number; quality?: number }): string {\n const url = assetUrl(src)\n const sep = url.includes('?') ? '&' : '?'\n return \\`\\${url}\\${sep}w=\\${width}&q=\\${quality ?? 75}\\`\n}\n`\n return { path: 'lib/assets.ts', contents }\n}\n\n// ---------------------------------------------------------------------------\n// App Router pages (EC-101/105).\n// ---------------------------------------------------------------------------\n\nfunction appFiles(input: ExportInput): GeneratedFile[] {\n const layout: GeneratedFile = {\n path: 'app/layout.tsx',\n contents: `${generatedBanner('app/layout.tsx')}\nimport type { ReactNode } from 'react'\nimport './globals.css'\n\nexport const metadata = { title: ${JSON.stringify(input.projectName)} }\n\nexport default function RootLayout({ children }: { children: ReactNode }) {\n return (\n <html lang={${JSON.stringify(input.localeConfig.default)}} className=\"dark\">\n <body>{children}</body>\n </html>\n )\n}\n`,\n }\n\n const catchAll: GeneratedFile = {\n path: 'app/[[...slug]]/page.tsx',\n contents: `${generatedBanner('app/[[...slug]]/page.tsx')}\nimport { notFound, redirect } from 'next/navigation'\nimport type { ProjectGraph } from '@elytracms/core/project-graph'\nimport graphData from '../../content/graph.json'\nimport { resolveRoute, splitLocale } from '../../lib/routes'\nimport { renderPage } from '../../lib/renderer'\nimport { fetchPayloads, fetchPageDocument } from '../../lib/cms-client'\n\nconst graph = graphData as unknown as ProjectGraph\n\n/**\n * The single catch-all route (EC-101/105, EC-187): derive the locale, resolve the URL through the\n * canonical route resolver (honoring redirects, fallbacks and locale) to a document ref, fetch the\n * matched \\`page\\`-collection document, and render its \\`body\\` composition into its \\`layoutId\\`\n * layout with the route's dynamic params available to bindings. A miss is a real 404.\n */\nexport default async function Page({ params }: { params: Promise<{ slug?: string[] }> }) {\n const { slug } = await params\n const url = '/' + (slug ?? []).join('/')\n const { locale, path } = splitLocale(url)\n\n const result = resolveRoute(path, locale)\n if (result.status === 'redirect' && result.redirectTarget) {\n redirect(result.redirectTarget)\n }\n if (result.status !== 'ok' || !result.documentRef) {\n notFound()\n }\n\n // Fetch the routed page document (its \\`body\\` is the composition, \\`layoutId\\` the layout).\n const doc = await fetchPageDocument(result.documentRef, result.dynamicParams)\n if (!doc) {\n notFound()\n }\n\n // Route params are exposed to bindings under the reserved \\`params\\` source (e.g. /params/slug).\n const payloads = { ...(await fetchPayloads('published')), params: result.dynamicParams }\n const layoutId = typeof doc.layoutId === 'string' ? doc.layoutId : undefined\n return <>{renderPage(graph, doc.body, layoutId, payloads)}</>\n}\n`,\n }\n\n const notFoundFile: GeneratedFile = {\n path: 'app/not-found.tsx',\n contents: `${generatedBanner('app/not-found.tsx')}\nexport default function NotFound() {\n return (\n <main style={{ padding: '4rem', fontFamily: 'system-ui' }}>\n <h1>404 — Not found</h1>\n <p>No route matched this URL.</p>\n </main>\n )\n}\n`,\n }\n\n return [layout, catchAll, notFoundFile]\n}\n\nfunction globalsCss(input: ExportInput): GeneratedFile {\n return {\n path: 'app/globals.css',\n contents: `/* Generated design tokens — from @elytracms/design-tokens. Edit tokens in the builder. */\n${input.tokensCss}\n:root { color-scheme: dark; }\nbody { margin: 0; background: var(--background); color: var(--foreground); }\n`,\n }\n}\n\n// ---------------------------------------------------------------------------\n// Scaffold (EC-107/108/109, eject shape per EC-149) — package.json, tsconfig, next.config,\n// vercel, env, README. The ejected app builds from its committed content snapshot: no pull\n// step, no builder credentials, zero runtime dependency on the builder backend.\n// ---------------------------------------------------------------------------\n\nfunction scaffoldFiles(input: ExportInput): GeneratedFile[] {\n const componentsImport = input.componentsImport ?? DEFAULT_COMPONENTS_IMPORT\n const hasProjectComponents = input.manifests.some((m) => namespaceOf(m.id) !== 'base.primitives')\n\n const pkg = {\n name: input.slug,\n version: '0.0.0',\n private: true,\n type: 'module',\n scripts: {\n // The app builds from its committed content snapshot — no builder access needed (EC-149).\n dev: 'next dev',\n build: 'next build',\n start: 'next start',\n },\n dependencies: {\n // EC-265: the renderer closure is one package now (subpath imports in the\n // generated code resolve through @elytracms/core's exports map).\n '@elytracms/core': 'workspace:*',\n next: '^15.0.0',\n react: '^19.0.0',\n 'react-dom': '^19.0.0',\n },\n }\n\n const envExample = `# Environment for ${input.projectName} (EC-107/149)\n# The ejected app has NO builder backend dependency: content is snapshotted into content/*.json.\n# Only configure what your own infrastructure needs.\n\n# Asset storage (EC-106) — base URL for asset/image resolution\nNEXT_PUBLIC_ASSET_BASE_URL=\n`\n\n const vercel = {\n $schema: 'https://openapi.vercel.sh/vercel.json',\n framework: 'nextjs',\n installCommand: 'pnpm install',\n }\n\n const nextConfig = `${generatedBanner('next.config.mjs')}\n/** @type {import('next').NextConfig} */\nconst nextConfig = {\n // Allow the components module to live outside the app directory (e.g. elsewhere in your repo).\n experimental: { externalDir: true },\n}\nexport default nextConfig\n`\n\n const tsconfig = {\n compilerOptions: {\n target: 'ES2022',\n lib: ['dom', 'dom.iterable', 'ES2022'],\n module: 'ESNext',\n moduleResolution: 'Bundler',\n jsx: 'preserve',\n strict: true,\n esModuleInterop: true,\n resolveJsonModule: true,\n noEmit: true,\n plugins: [{ name: 'next' }],\n },\n include: ['app', 'lib', 'content', 'next-env.d.ts'],\n }\n\n const componentsSection = hasProjectComponents\n ? `## Your components (the one thing eject does not generate)\n\nProject components are **real code in your repo** — they were never builder-generated. The\ngenerated \\`lib/registry.ts\\` imports them from:\n\n\\`\\`\\`ts\nimport { projectManifests, projectImplementations } from ${JSON.stringify(componentsImport)}\n\\`\\`\\`\n\nThat module is yours and must export:\n\n- \\`projectManifests: ComponentManifest[]\\` — the same manifests you push with \\`builder push\\`\n- \\`projectImplementations: ComponentImplementations\\` — component id → React implementation\n\nRelative specifiers resolve from \\`lib/registry.ts\\` (the default, \\`${DEFAULT_COMPONENTS_IMPORT}\\`,\nis a \\`components/\\` module at the app root); a bare specifier must be a dependency of this app.\nRe-run \\`builder eject --components <specifier>\\` to point the registry somewhere else.\n\\`next.config.mjs\\` sets \\`experimental.externalDir\\` so the module may live outside the app\ndirectory.\n`\n : `## Your components\n\nThis project uses only platform primitives (\\`base.primitives.*\\`), which ship with\n\\`@elytracms/runtime-renderer\\` — no host components module is imported. If you add project\ncomponents later, re-run \\`builder eject --components <specifier>\\` to wire in the module that\nexports \\`projectManifests\\` and \\`projectImplementations\\`.\n`\n\n const readme = `# ${input.projectName}\n\nEjected from **Elytra** (\\`builder eject\\`, \\`@elytracms/export-sync\\`). A standalone\nNext.js App Router app that renders the project's canonical graph — the exit guarantee: you can\nleave the platform anytime with a working app.\n\n**Zero builder dependency:** the canonical model (graph, routes, redirects, collections, sources,\nlocales) is snapshotted into \\`content/*.json\\` at eject time. Building and serving this app needs\nno builder backend and no network access to Elytra.\n\n## Structure (EC-109/149)\n\n| Path | What it is |\n| --- | --- |\n| \\`app/\\` | App Router: a single catch-all that resolves URLs via the route resolver |\n| \\`app/globals.css\\` | Design tokens (generated from \\`@elytracms/design-tokens\\`) |\n| \\`lib/registry.ts\\` | Component registry — base primitives + your components, imported from your repo |\n| \\`lib/renderer.ts\\` | Server-safe page renderer |\n| \\`lib/cms-client.ts\\` | Content/data adapter (reads the embedded snapshot by default) |\n| \\`lib/routes.ts\\` | Route resolver (redirects, fallbacks, locale) |\n| \\`lib/assets.ts\\` | Asset URL + image optimization hooks |\n| \\`content/*.json\\` | The snapshotted canonical model (graph, routes, schemas, sources) |\n\nNo builder-only runtime code is included. Every file is readable and yours to edit.\n\n${componentsSection}\n## Develop & deploy\n\n\\`\\`\\`bash\npnpm install\npnpm dev # or: pnpm build && pnpm start\n\\`\\`\\`\n\nTo refresh the snapshot from the builder before you leave for good, re-run \\`builder eject\\`:\nit validates first and refuses to write a broken app (missing components, broken bindings,\nroute conflicts, redirect loops all fail the eject).\n\nTo serve live content instead of the snapshot, replace \\`fetchPayloads\\` in \\`lib/cms-client.ts\\`\nwith your own backend fetch — the renderer and routing are backend-agnostic.\n`\n\n return [\n { path: 'package.json', contents: stableJson(pkg) + '\\n' },\n { path: '.env.example', contents: envExample },\n { path: 'vercel.json', contents: stableJson(vercel) + '\\n' },\n { path: 'next.config.mjs', contents: nextConfig },\n { path: 'tsconfig.json', contents: stableJson(tsconfig) + '\\n' },\n { path: 'README.md', contents: readme },\n ]\n}\n\n/**\n * Generate the full standalone Next.js App Router app for a project (EC-101–109, eject shape\n * per EC-149). Deterministic: the same input always yields the same sorted file set. No\n * component stubs are generated — project components are imported from the host repo.\n */\nexport function generateExport(input: ExportInput): GeneratedFile[] {\n return sortFiles([\n ...appFiles(input),\n globalsCss(input),\n registryFile(input),\n rendererFile(),\n cmsClientFile(),\n routesFile(),\n assetsFile(),\n ...contentFiles(input),\n ...scaffoldFiles(input),\n ])\n}\n"]}
|
|
@@ -1 +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"}
|
|
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","sourcesContent":["/**\n * @elytracms/export-sync — the `builder` CLI surfaces around the canonical project model.\n *\n * EC-147 (vision AD-2): `builder push` discovers component manifests in the host repo,\n * validates them, and syncs them up into builder registry persistence — with watch mode for\n * local dev and an all-or-nothing CI mode. This is the day-to-day workflow: the embedded\n * runtime renders the graph in the user's own app.\n *\n * EC-148 (vision AD-2/AD-4): `builder typegen` emits the per-collection delivery-shape +\n * accessor types (EC-142/EC-143 codegen) into the host repo as a committed, deterministic\n * module; `builder check` is the CI gate that verifies code and builder state agree —\n * manifest drift both ways, graph↔code component coverage, type drift, and the canonical\n * validation (route conflicts, broken bindings) surfaced through the CLI.\n *\n * EC-149 (vision AD-1): `builder eject` is the exit guarantee — a pure, deterministic\n * generation (brief §4.9, EC-101–113) of a standalone Next.js App Router app with the model\n * snapshotted in and the host repo's real components imported (never stubbed). The export-era\n * `pull`/`validate` surface remains for validation and drift checks; `pull` is deprecated.\n */\nexport const PACKAGE = '@elytracms/core/export-sync'\n\nexport * from './core'\nexport * from './validate'\nexport * from './generate'\nexport * from './sync'\nexport * from './eject'\nexport * from './cli'\nexport * from './fixtures'\nexport * from './manifest-host'\nexport * from './registry-sync-client'\nexport * from './builder-source'\nexport * from './push'\nexport * from './watch'\nexport * from './typegen'\nexport * from './check'\nexport * from './init'\n\n// EC-154: the workspace-config surface host repos use in `elytra.config.ts`.\n// Re-exported from `@elytracms/core/studio-core` so a host only needs the CLI package.\nexport {\n defineElytraConfig,\n elytraConfigInputSchema,\n extractWorkspaceConfigExport,\n resolveWorkspaceConfig,\n toProjectSettings,\n WORKSPACE_CONFIG_FILE,\n WORKSPACE_CONFIG_FILES,\n} from '@elytracms/core/studio-core'\nexport type {\n ElytraConfigInput,\n ResolvedWorkspaceProject,\n WorkspaceConfigIssue,\n WorkspaceConfigIssueCode,\n WorkspaceConfigResult,\n} from '@elytracms/core/studio-core'\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/export-sync/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/export-sync/init.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { collectionDefSchema } from '@elytracms/core/cms-core'\nimport type { CollectionDef } from '@elytracms/core/cms-core'\nimport type { OperationsClient } from '@elytracms/core/operations'\nimport {\n WORKSPACE_CONFIG_FILE,\n extractWorkspaceConfigExport,\n resolveWorkspaceConfig,\n toProjectSettings,\n} from '@elytracms/core/studio-core'\nimport type {\n ProjectSettings,\n ResolvedWorkspaceProject,\n WorkspaceConfigIssue,\n} from '@elytracms/core/studio-core'\nimport type { FileIO } from './sync'\n\n/**\n * `builder init` — code-first workspace provisioning (EC-154, vision AD-8).\n *\n * Two modes:\n *\n * - `builder init` (no flags): scaffold a starter `elytra.config.ts` in the\n * host repo when none exists. Idempotent — an existing config is never\n * overwritten.\n * - `builder init --project <slug>`: load + validate the host repo's\n * `elytra.config.ts` (same schema and structured issues as the studio),\n * find the entry, and provision the backend resources through the operations\n * layer. Project *identity & settings* are config-owned (EC-182, AD-11) — there\n * is no backend project record to create — so provisioning seeds the entry's\n * collection schema (`schema.save`) when it references a schema module. The\n * config-derived project id is the slug. Idempotent — a slug already provisioned\n * in this run is reported as already provisioned and left untouched.\n *\n * Like push/check, everything is injectable: a {@link WorkspaceConfigHost}\n * abstracts config/module loading (the real one in `node.ts` uses dynamic\n * `import()` like manifest discovery), and a {@link WorkspaceProvisioningClient}\n * abstracts the backend (the direct adapter wraps an `OperationsClient` —\n * in tests an in-memory one; a live deployment wires the same seam). No issue\n * is ever a raw throw: failures are structured {@link InitIssue}s and a\n * non-zero exit code.\n */\n\n// --- Seams -------------------------------------------------------------------\n\n/** Loads the host repo's workspace config + referenced schema modules. */\nexport interface WorkspaceConfigHost {\n /**\n * Locate and load the `elytra.config.*` module under `root`. Returns the\n * raw module namespace (the default export carries the config), or\n * `undefined` when no config file exists.\n */\n loadConfig(root: string): Promise<{ file: string; moduleExports: unknown } | undefined>\n /**\n * Load a collection-schema module referenced by a project entry\n * (`schema: { module: './src/schema' }`), relative to `root`. Returns the\n * raw module namespace; the collections are taken from its default export\n * (or a named `collections` export) and validated here.\n */\n loadSchemaModule(root: string, modulePath: string): Promise<unknown>\n}\n\n/** A backend provisioning failure, carried as data by the init flow. */\nexport class WorkspaceProvisioningError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'WorkspaceProvisioningError'\n }\n}\n\n/**\n * Transport between `init --project` and the builder backend: a direct in-process\n * adapter exists now; an HTTP adapter can implement the same interface against\n * builder endpoints later.\n */\nexport interface WorkspaceProvisioningClient {\n readonly transport: 'direct' | 'http'\n /** Find an existing project by slug (archived included), if any. */\n findProjectBySlug(slug: string): Promise<{ id: string; name: string } | undefined>\n /** Create the project with the config-derived settings; returns its id. */\n createProject(input: {\n name: string\n slug: string\n settings: ProjectSettings\n }): Promise<{ id: string }>\n /** Seed/replace the project's CMS collection schema. */\n saveSchema(projectId: string, collections: readonly CollectionDef[]): Promise<void>\n}\n\n/**\n * The direct adapter: schema seeding goes through the operations layer\n * (`schema.save`) so the CLI shares the exact validate → authorize → mutate →\n * event pipeline the studio uses. Project identity is config-owned (EC-182, AD-11)\n * — the slug *is* the project id, so there is no backend project record to create.\n * Provisioning is tracked per process for idempotency. Operation failures are\n * surfaced as {@link WorkspaceProvisioningError}s with the structured message intact.\n */\nexport function createDirectWorkspaceProvisioningClient(\n operations: OperationsClient,\n): WorkspaceProvisioningClient {\n const provisioned = new Map<string, { id: string; name: string }>()\n return {\n transport: 'direct',\n async findProjectBySlug(slug) {\n return provisioned.get(slug)\n },\n async createProject(input) {\n // Config-owned identity: the slug is the canonical project id.\n const record = { id: input.slug, name: input.name }\n provisioned.set(input.slug, record)\n return { id: record.id }\n },\n async saveSchema(projectId, collections) {\n const result = await operations.schema.save({ projectId, collections: [...collections] })\n if (!result.ok) throw new WorkspaceProvisioningError(result.error.message)\n },\n }\n}\n\n// --- Result shape ---------------------------------------------------------------\n\nexport type InitIssueCode =\n | 'config-missing'\n | 'config-invalid'\n | 'unknown-project'\n | 'schema-load-error'\n | 'invalid-collections'\n | 'provision-failed'\n | 'not-configured'\n\n/** A structured init failure (CLI output is built from these). */\nexport interface InitIssue {\n code: InitIssueCode\n severity: 'error'\n message: string\n /** Source file, when attributable (config file or schema module path). */\n file?: string\n /** Underlying structured config issues, when `code` is 'config-invalid'. */\n configIssues?: readonly WorkspaceConfigIssue[]\n}\n\nexport type InitAction =\n | 'scaffolded'\n | 'config-exists'\n | 'provisioned'\n | 'already-provisioned'\n | 'failed'\n\nexport interface InitResult {\n ok: boolean\n action: InitAction\n issues: InitIssue[]\n /** The backend project id, when provisioning ran (or the project already existed). */\n projectId?: string\n /** Collections seeded into the new project's schema, by id. */\n seededCollections?: string[]\n}\n\nexport interface InitOptions {\n /** Host-repo root the config (and schema modules) are resolved against. */\n root: string\n /** Slug of the configured project to provision; omitted = scaffold mode. */\n project?: string\n}\n\nexport interface InitDeps {\n host: WorkspaceConfigHost\n /** Required for `--project`; scaffold mode runs without a backend. */\n client?: WorkspaceProvisioningClient\n}\n\n// --- Scaffold -------------------------------------------------------------------\n\n/** Starter config written by `builder init` (kept minimal and self-documenting). */\nexport 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`\n\n// --- Run --------------------------------------------------------------------------\n\nfunction fail(io: FileIO, issues: InitIssue[]): InitResult {\n for (const issue of issues) {\n io.log(` error [${issue.code}] ${issue.message}`)\n for (const config of issue.configIssues ?? []) {\n const at = config.path.length > 0 ? ` at ${formatPath(config.path)}` : ''\n io.log(` ${config.severity} [${config.code}]${at}: ${config.message}`)\n }\n }\n return { ok: false, action: 'failed', issues }\n}\n\nfunction formatPath(path: ReadonlyArray<string | number>): string {\n return path.reduce<string>(\n (acc, part) => (typeof part === 'number' ? `${acc}[${part}]` : acc ? `${acc}.${part}` : part),\n '',\n )\n}\n\n/** Accept the schema module's default export or a named `collections` export. */\nfunction extractCollectionsCandidate(moduleExports: unknown): unknown {\n if (typeof moduleExports === 'object' && moduleExports !== null) {\n const record = moduleExports as Record<string, unknown>\n if (record.default !== undefined) return record.default\n if (record.collections !== undefined) return record.collections\n }\n return moduleExports\n}\n\nasync function provisionProject(\n deps: InitDeps,\n io: FileIO,\n options: InitOptions & { project: string },\n entry: ResolvedWorkspaceProject,\n configFile: string,\n): Promise<InitResult> {\n const client = deps.client\n if (!client) {\n return fail(io, [\n {\n code: 'not-configured',\n severity: 'error',\n message: 'init --project is not configured (no provisioning client wired).',\n },\n ])\n }\n\n // Load the referenced collection schema *before* creating anything, so a\n // broken schema module never leaves a half-provisioned project behind.\n let collections: CollectionDef[] | undefined\n if (typeof entry.schema === 'object') {\n const modulePath = entry.schema.module\n let moduleExports: unknown\n try {\n moduleExports = await deps.host.loadSchemaModule(options.root, modulePath)\n } catch (cause) {\n return fail(io, [\n {\n code: 'schema-load-error',\n severity: 'error',\n message: `Could not load the schema module “${modulePath}”: ${cause instanceof Error ? cause.message : String(cause)}`,\n file: modulePath,\n },\n ])\n }\n const parsed = z\n .array(collectionDefSchema)\n .safeParse(extractCollectionsCandidate(moduleExports))\n if (!parsed.success) {\n return fail(io, [\n {\n code: 'invalid-collections',\n severity: 'error',\n message: `The schema module “${modulePath}” must export an array of collection definitions (default or named \\`collections\\` export): ${parsed.error.issues[0]?.message ?? 'invalid shape'}`,\n file: modulePath,\n },\n ])\n }\n collections = parsed.data\n }\n\n try {\n const existing = await client.findProjectBySlug(entry.slug)\n if (existing) {\n io.log(\n `Project “${entry.slug}” is already provisioned (id ${existing.id}). Nothing to do — settings were not modified.`,\n )\n return { ok: true, action: 'already-provisioned', issues: [], projectId: existing.id }\n }\n\n const created = await client.createProject({\n name: entry.name,\n slug: entry.slug,\n settings: toProjectSettings(entry),\n })\n io.log(`Created project “${entry.name}” (${entry.slug}) — id ${created.id}.`)\n\n let seededCollections: string[] | undefined\n if (collections) {\n await client.saveSchema(created.id, collections)\n seededCollections = collections.map((c) => c.id)\n io.log(\n `Seeded collection schema from ${typeof entry.schema === 'object' ? entry.schema.module : configFile}: ${seededCollections.join(', ') || '(empty)'}.`,\n )\n }\n\n io.log(`Provisioned “${entry.slug}” from ${configFile}.`)\n return {\n ok: true,\n action: 'provisioned',\n issues: [],\n projectId: created.id,\n ...(seededCollections ? { seededCollections } : {}),\n }\n } catch (cause) {\n return fail(io, [\n {\n code: 'provision-failed',\n severity: 'error',\n message: cause instanceof Error ? cause.message : String(cause),\n },\n ])\n }\n}\n\n/**\n * Run `builder init`. Returns a structured result and never throws.\n * Scaffold mode and provisioning mode are both idempotent.\n */\nexport async function runInit(\n deps: InitDeps,\n io: FileIO,\n options: InitOptions,\n): Promise<InitResult> {\n const loaded = await deps.host.loadConfig(options.root)\n\n // --- Scaffold mode: `builder init` ---------------------------------------\n if (options.project === undefined) {\n if (loaded) {\n io.log(`Workspace config already exists at ${loaded.file}; nothing written.`)\n return { ok: true, action: 'config-exists', issues: [] }\n }\n io.write(WORKSPACE_CONFIG_FILE, STARTER_WORKSPACE_CONFIG)\n io.log(`Scaffolded ${WORKSPACE_CONFIG_FILE}. Edit it, then run: builder init --project <slug>`)\n return { ok: true, action: 'scaffolded', issues: [] }\n }\n\n // --- Provision mode: `builder init --project <slug>` ----------------------\n if (!loaded) {\n return fail(io, [\n {\n code: 'config-missing',\n severity: 'error',\n message: `No ${WORKSPACE_CONFIG_FILE} found under “${options.root}”. Run \\`builder init\\` to scaffold one.`,\n },\n ])\n }\n\n const extracted = extractWorkspaceConfigExport(loaded.moduleExports, loaded.file)\n if ('issue' in extracted) {\n return fail(io, [\n {\n code: 'config-invalid',\n severity: 'error',\n message: `${loaded.file} is not a valid workspace config.`,\n file: loaded.file,\n configIssues: [extracted.issue],\n },\n ])\n }\n\n const resolved = resolveWorkspaceConfig(extracted.value, { file: loaded.file })\n if (!resolved.ok) {\n return fail(io, [\n {\n code: 'config-invalid',\n severity: 'error',\n message: `${loaded.file} is not a valid workspace config (${resolved.issues.length} issue(s)).`,\n file: loaded.file,\n configIssues: resolved.issues,\n },\n ])\n }\n\n const entry = resolved.projects.find((project) => project.slug === options.project)\n if (!entry) {\n const known = resolved.projects.map((project) => project.slug).join(', ')\n return fail(io, [\n {\n code: 'unknown-project',\n severity: 'error',\n message: `No project with slug “${options.project}” in ${loaded.file}. Configured slugs: ${known}.`,\n file: loaded.file,\n },\n ])\n }\n\n return provisionProject(deps, io, { ...options, project: options.project }, entry, loaded.file)\n}\n"]}
|
|
@@ -1 +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"}
|
|
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","sourcesContent":["/**\n * Manifest discovery contract for the code → builder push (EC-147, vision AD-2).\n *\n * ## Discovery convention\n *\n * A component manifest module is any file whose name ends in `.manifest.ts` /\n * `.manifest.tsx` (or its compiled `.manifest.js` / `.manifest.mjs` form) anywhere\n * under the scan root, excluding `node_modules`, dot-directories, and common build\n * output directories. Every export of a manifest module must be a component manifest\n * (created with `defineComponent`) or an array of manifests — nothing else. That keeps\n * discovery deterministic: a stray export is a structured validation issue, never a\n * silent skip.\n *\n * Why this convention: manifests today are declared inline with `defineComponent` in\n * plain TS modules (see `@elytracms/core/starter-kits` `manifests.ts` and this package's\n * `fixtures.ts`); a filename suffix keeps that authoring style, colocates a manifest\n * next to its component (`hero.tsx` + `hero.manifest.ts`), mirrors the well-known\n * `*.stories.tsx` / `*.test.ts` ecosystem pattern, and is cheap to glob, grep, and\n * fs-watch.\n *\n * Discovery is injected behind {@link ManifestHost} so the push/watch logic is fully\n * testable offline (fake hosts in tests, Node fs + dynamic import in the real bin).\n * The real Node host lives in `@elytracms/core/export-sync/node` — kept out of the package\n * root so the barrel stays browser-safe (the studio bundles this package via\n * `@elytracms/core/plugins`).\n */\n\n/** File suffixes that mark a module as a component manifest module. */\nexport const MANIFEST_FILE_SUFFIXES = [\n '.manifest.ts',\n '.manifest.tsx',\n '.manifest.js',\n '.manifest.mjs',\n] as const\n\n/** Directories never scanned (or watched) for manifests. */\nexport const MANIFEST_IGNORED_DIRECTORIES: ReadonlySet<string> = new Set([\n 'node_modules',\n 'dist',\n 'build',\n 'out',\n 'coverage',\n])\n\n/** True when a path matches the manifest filename convention. */\nexport function isManifestFile(path: string): boolean {\n return MANIFEST_FILE_SUFFIXES.some((suffix) => path.endsWith(suffix))\n}\n\n/**\n * How the push reaches manifest modules in a host repo. `listManifestFiles` returns\n * root-relative POSIX paths (sorted, deterministic); `loadManifestCandidates` returns\n * the module's exported manifest candidates — validation happens in the push, so a\n * malformed export is a structured issue, never a crash.\n */\nexport interface ManifestHost {\n listManifestFiles(root: string): Promise<string[]> | string[]\n loadManifestCandidates(root: string, file: string): Promise<unknown[]> | unknown[]\n}\n\n/**\n * Flatten a manifest module's exports into candidate manifest values. Arrays are\n * flattened one level (e.g. `export const KIT_MANIFESTS = [...]`); duplicate references\n * (e.g. a default export re-exporting a named one) are deduped.\n */\nexport function extractManifestCandidates(moduleExports: unknown): unknown[] {\n if (typeof moduleExports !== 'object' || moduleExports === null) return []\n const seen = new Set<unknown>()\n const candidates: unknown[] = []\n const push = (value: unknown): void => {\n if (seen.has(value)) return\n seen.add(value)\n candidates.push(value)\n }\n for (const value of Object.values(moduleExports)) {\n if (Array.isArray(value)) {\n for (const item of value) push(item)\n } else {\n push(value)\n }\n }\n return candidates\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/export-sync/node.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/export-sync/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,SAAS,CAAA;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAEpE,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,4BAA4B,GAC7B,MAAM,iBAAiB,CAAA;AAIxB;;;;;;;GAOG;AAEH,SAAS,IAAI,CAAC,OAAe,EAAE,QAAgB,EAAE,GAAa;IAC5D,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7E,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAQ;QACxC,MAAM,OAAO,GAAG,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAA;QAC1E,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAI,4BAA4B,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAQ;YAC1D,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;QAC7B,CAAC;aAAM,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,iBAAiB,CAAC,IAAY;YAC5B,MAAM,GAAG,GAAa,EAAE,CAAA;YACxB,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;YACnB,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;QACnB,CAAC;QACD,KAAK,CAAC,sBAAsB,CAAC,IAAY,EAAE,IAAY;YACrD,gFAAgF;YAChF,MAAM,GAAG,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;YACrE,MAAM,aAAa,GAAY,MAAM,MAAM,CAAC,GAAG,CAAC,CAAA;YAChD,OAAO,yBAAyB,CAAC,aAAa,CAAC,CAAA;QACjD,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,6BAA6B;IAC3C,KAAK,UAAU,UAAU,CAAC,YAAoB;QAC5C,2EAA2E;QAC3E,MAAM,GAAG,GAAG,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;QACjE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;IACpB,CAAC;IACD,OAAO;QACL,KAAK,CAAC,UAAU,CAAC,IAAY;YAC3B,KAAK,MAAM,IAAI,IAAI,sBAAsB,EAAE,CAAC;gBAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;gBACjC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;oBAAE,SAAQ;gBACnC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAA;YAC5D,CAAC;YACD,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,gBAAgB,CAAC,IAAY,EAAE,UAAkB;YAC/C,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAA;QAC3C,CAAC;KACF,CAAA;AACH,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,KAAK,CAAC,IAAY,EAAE,OAAoC;YACtD,IAAI,WAAwB,CAAA;YAC5B,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBACzC,WAAW,GAAG,OAAO,CAAA;YACvB,CAAC,CAAC,CAAA;YACF,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE;gBAC1E,IAAI,QAAQ,KAAK,IAAI;oBAAE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACrF,CAAC,CAAC,CAAA;YACF,OAAO;gBACL,KAAK;oBACH,OAAO,CAAC,KAAK,EAAE,CAAA;oBACf,WAAW,EAAE,CAAA;gBACf,CAAC;gBACD,IAAI;aACL,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC","sourcesContent":["import { existsSync, readdirSync, watch as fsWatch } from 'node:fs'\nimport { join } from 'node:path'\nimport { pathToFileURL } from 'node:url'\nimport { WORKSPACE_CONFIG_FILES } from '@elytracms/core/studio-core'\nimport type { WorkspaceConfigHost } from './init'\nimport {\n extractManifestCandidates,\n isManifestFile,\n MANIFEST_IGNORED_DIRECTORIES,\n} from './manifest-host'\nimport type { ManifestHost } from './manifest-host'\nimport type { WatchDriver, WatchEvent } from './watch'\n\n/**\n * Node-only implementations for the manifest push (EC-147) and workspace init\n * (EC-154): the real filesystem {@link ManifestHost}, the `node:fs` watch\n * driver, and the dynamic-import {@link WorkspaceConfigHost}. Lives behind the\n * `@elytracms/core/export-sync/node` subpath — NOT re-exported from the package root —\n * because the studio bundles the root barrel via `@elytracms/core/plugins` and must stay\n * browser-safe.\n */\n\nfunction walk(rootAbs: string, relative: string, out: string[]): void {\n const entries = readdirSync(join(rootAbs, relative), { withFileTypes: true })\n for (const entry of entries) {\n if (entry.name.startsWith('.')) continue\n const relPath = relative === '' ? entry.name : `${relative}/${entry.name}`\n if (entry.isDirectory()) {\n if (MANIFEST_IGNORED_DIRECTORIES.has(entry.name)) continue\n walk(rootAbs, relPath, out)\n } else if (isManifestFile(entry.name)) {\n out.push(relPath)\n }\n }\n}\n\n/**\n * The real {@link ManifestHost}: recursive fs walk + dynamic `import()`. Loading a\n * `.manifest.ts` module requires a TypeScript-capable runtime (the CLI is expected to\n * run under `tsx` or Node type stripping in the host repo); compiled `.manifest.js` /\n * `.manifest.mjs` modules load under plain Node.\n */\nexport function createNodeManifestHost(): ManifestHost {\n return {\n listManifestFiles(root: string): string[] {\n const out: string[] = []\n walk(root, '', out)\n return out.sort()\n },\n async loadManifestCandidates(root: string, file: string): Promise<unknown[]> {\n // Cache-bust so watch mode re-imports edited modules instead of the stale copy.\n const url = `${pathToFileURL(join(root, file)).href}?t=${Date.now()}`\n const moduleExports: unknown = await import(url)\n return extractManifestCandidates(moduleExports)\n },\n }\n}\n\n/**\n * The real {@link WorkspaceConfigHost} (EC-154): probes the conventional\n * `elytra.config.*` names under the host-repo root and loads modules with\n * dynamic `import()`, exactly like manifest discovery. Loading the `.ts`\n * variants requires a TypeScript-capable runtime (`tsx` / Node type stripping);\n * compiled `.js`/`.mjs` configs load under plain Node.\n */\nexport function createNodeWorkspaceConfigHost(): WorkspaceConfigHost {\n async function loadModule(absolutePath: string): Promise<unknown> {\n // Cache-bust so repeated CLI runs in one process re-import edited modules.\n const url = `${pathToFileURL(absolutePath).href}?t=${Date.now()}`\n return import(url)\n }\n return {\n async loadConfig(root: string) {\n for (const file of WORKSPACE_CONFIG_FILES) {\n const absolute = join(root, file)\n if (!existsSync(absolute)) continue\n return { file, moduleExports: await loadModule(absolute) }\n }\n return undefined\n },\n loadSchemaModule(root: string, modulePath: string) {\n return loadModule(join(root, modulePath))\n },\n }\n}\n\n/** The real watch driver: `node:fs` recursive watch (no external watcher dependency). */\nexport function createFsWatchDriver(): WatchDriver {\n return {\n watch(root: string, onEvent: (event: WatchEvent) => void) {\n let resolveDone!: () => void\n const done = new Promise<void>((resolve) => {\n resolveDone = resolve\n })\n const watcher = fsWatch(root, { recursive: true }, (_eventType, filename) => {\n if (filename !== null) onEvent({ path: filename.toString().split('\\\\').join('/') })\n })\n return {\n close() {\n watcher.close()\n resolveDone()\n },\n done,\n }\n },\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/export-sync/push.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/export-sync/push.ts"],"names":[],"mappings":"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","sourcesContent":["import { ComponentRegistry, isPrimitive, namespaceOf } from '@elytracms/core/component-registry'\nimport type { ComponentManifest } from '@elytracms/core/component-registry'\nimport { assertPropFieldDef, fieldDefSchema, fieldValueValidator } from '@elytracms/core/cms-core'\nimport type { FieldDef } from '@elytracms/core/cms-core'\nimport { stableJson } from './core'\nimport type { ManifestHost } from './manifest-host'\n\n/**\n * The host-repo manifest discovery + validation pass (EC-147, vision AD-2).\n * Component manifests are code-owned (defined in TS next to the components), so\n * there is no longer a DB copy to push to: `builder push` is now a validate-only\n * command that discovers manifest modules in the host repo, validates them with\n * the component-registry validation (EC-011: invalid/duplicate ids) plus structural\n * checks, and reports any problems.\n *\n * Failure semantics mirror `runPull`: every problem is a structured {@link PushIssue},\n * never a throw. CI mode (`--ci`) fails the run (exit non-zero) on any issue. The\n * discovery here is shared with `builder check` (EC-148) so both see the exact same\n * local manifest set, validated the exact same way.\n */\n\nexport type PushIssueCode = 'load-error' | 'invalid-manifest' | 'duplicate-id' | 'invalid-id'\n\n/** A file-level, structured validation failure (CI output is built from these). */\nexport interface PushIssue {\n code: PushIssueCode\n severity: 'error'\n message: string\n /** Root-relative manifest module path, when the issue is attributable to a file. */\n file?: string\n componentId?: string\n}\n\nexport interface PushOptions {\n /** Host-repo scan root. */\n root: string\n /** Non-interactive mode: any issue fails the run (exit non-zero). */\n ci?: boolean\n}\n\nexport interface DiscoveredManifestFile {\n file: string\n ids: string[]\n}\n\nexport interface PushResult {\n files: DiscoveredManifestFile[]\n /** Component ids discovered and validated this run. */\n discovered: string[]\n issues: PushIssue[]\n ok: boolean\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\n/**\n * Structural validation of a single exported candidate (the manifest module contract:\n * every export must be a manifest). Returns human-readable problems; empty = valid.\n * Id well-formedness and cross-file duplicates are checked by `ComponentRegistry`\n * (EC-011) afterwards.\n */\nexport function validateManifestCandidate(value: unknown): string[] {\n if (!isRecord(value)) {\n return [\n 'Export is not a component manifest object (every export of a *.manifest.* module must be a manifest or an array of manifests).',\n ]\n }\n const problems: string[] = []\n const id = value.id\n if (typeof id !== 'string' || id.length === 0) {\n problems.push('Manifest is missing a string \"id\".')\n } else {\n if (typeof value.namespace !== 'string' || value.namespace !== namespaceOf(id)) {\n problems.push(\n `Manifest \"namespace\" (\"${String(value.namespace)}\") does not match the id's namespace (\"${namespaceOf(id)}\").`,\n )\n }\n if (isPrimitive(id)) {\n problems.push(\n `\"${id}\" is under base.primitives.* — platform primitives are platform-owned and cannot be declared in a host repo.`,\n )\n }\n }\n if (!isRecord(value.props)) {\n problems.push('Manifest \"props\" must be a record of prop field-defs.')\n } else {\n for (const [name, spec] of Object.entries(value.props)) {\n // EC-190: a prop is a `FieldDef` minus `name` (the record key IS the name).\n // It must parse as a field-def, its `default` must satisfy the field's own\n // value validator, and document-only attrs (`filterable`/`unique`) are flagged.\n if (!isRecord(spec)) {\n problems.push(`Prop \"${name}\" must be a field-def object.`)\n continue\n }\n const parsed = fieldDefSchema.safeParse({ ...spec, name })\n if (!parsed.success) {\n problems.push(`Prop \"${name}\" is not a valid field-def (expected a cms-core FieldDef shape).`)\n continue\n }\n const field = parsed.data as FieldDef\n for (const issue of assertPropFieldDef(field)) problems.push(issue.message)\n if (spec.default !== undefined && !fieldValueValidator(field)(spec.default)) {\n problems.push(`Default value for prop \"${name}\" does not satisfy its own field-def.`)\n }\n }\n }\n if (!Array.isArray(value.slots)) {\n problems.push('Manifest \"slots\" must be an array of slot specs.')\n } else {\n for (const slot of value.slots) {\n if (!isRecord(slot) || typeof slot.name !== 'string' || slot.name.length === 0) {\n problems.push('Every slot spec needs a non-empty string \"name\".')\n break\n }\n }\n }\n if (value.iterate !== undefined) {\n const iterate = value.iterate\n const slotNames = Array.isArray(value.slots)\n ? value.slots.filter(isRecord).map((s) => s.name)\n : []\n // EC-190 DD7: the iterated items value (an array) has NO static field-def type,\n // so `itemsProp` is no longer a *declared* prop — it rides node.props undeclared.\n // Only the item slot must resolve to an existing slot.\n if (\n !isRecord(iterate) ||\n typeof iterate.itemsProp !== 'string' ||\n iterate.itemsProp.length === 0 ||\n typeof iterate.itemSlot !== 'string' ||\n !slotNames.includes(iterate.itemSlot)\n ) {\n problems.push('\"iterate\" must name an items prop and reference an existing item slot.')\n }\n }\n return problems\n}\n\n/** The machine-parseable issue line format shared by `push` and `check` CI output. */\nexport function formatPushIssue(issue: PushIssue): string {\n const where = [issue.file, issue.componentId].filter(Boolean).join(' ')\n return ` error [${issue.code}]${where ? ` ${where}` : ''} — ${issue.message}`\n}\n\n/**\n * Everything `runPush` and `runCheck` (EC-148) know about the host repo's\n * component manifests: the conflict-free, structurally valid manifest set plus\n * any discovery/validation issues. Shared so push and the CI check see the exact\n * same local manifest set, validated the exact same way.\n */\nexport interface ManifestDiscovery {\n files: DiscoveredManifestFile[]\n /** id → the validated live manifest for every conflict-free, structurally valid module. */\n manifests: Map<string, ComponentManifest>\n /** id → stable JSON payload (deterministic change detection). */\n payloads: Map<string, string>\n /** Load + validation issues; non-empty means the local view is INCOMPLETE. */\n issues: PushIssue[]\n}\n\n/**\n * Discover, load, and validate the host repo's manifest modules (steps 1–3):\n * fs/module problems become `load-error`, structural problems `invalid-manifest`,\n * and EC-011 registry validation contributes `duplicate-id`/`invalid-id`. Never throws.\n */\nexport async function discoverManifests(\n host: ManifestHost,\n root: string,\n): Promise<ManifestDiscovery> {\n const issues: PushIssue[] = []\n const files: DiscoveredManifestFile[] = []\n /** id → file of first registration (for duplicate/file attribution). */\n const fileOf = new Map<string, string>()\n const valid: ComponentManifest[] = []\n\n // 1. Discover + load manifest modules; a failing module is a file-level issue.\n let fileList: string[] = []\n try {\n fileList = [...(await host.listManifestFiles(root))].sort()\n } catch (cause) {\n issues.push({\n code: 'load-error',\n severity: 'error',\n message: `Manifest discovery failed: ${cause instanceof Error ? cause.message : String(cause)}`,\n })\n }\n for (const file of fileList) {\n let candidates: unknown[]\n try {\n candidates = [...(await host.loadManifestCandidates(root, file))]\n } catch (cause) {\n issues.push({\n code: 'load-error',\n severity: 'error',\n file,\n message: `Manifest module failed to load: ${cause instanceof Error ? cause.message : String(cause)}`,\n })\n continue\n }\n const ids: string[] = []\n for (const candidate of candidates) {\n const problems = validateManifestCandidate(candidate)\n if (problems.length > 0) {\n const componentId =\n isRecord(candidate) && typeof candidate.id === 'string' ? candidate.id : undefined\n for (const message of problems) {\n issues.push({\n code: 'invalid-manifest',\n severity: 'error',\n file,\n ...(componentId ? { componentId } : {}),\n message,\n })\n }\n continue\n }\n // Structurally verified above; the manifest interface is satisfied.\n const manifest = candidate as ComponentManifest\n ids.push(manifest.id)\n if (!fileOf.has(manifest.id)) fileOf.set(manifest.id, file)\n valid.push(manifest)\n }\n files.push({ file, ids })\n }\n\n // 2. EC-011 registry validation over the structurally valid set: invalid ids and\n // duplicate ids come from the same ComponentRegistry that guards authoring.\n const registry = new ComponentRegistry(valid)\n const excluded = new Set<string>()\n for (const issue of registry.issues) {\n excluded.add(issue.componentId)\n const firstFile = fileOf.get(issue.componentId)\n issues.push({\n code: issue.code === 'duplicate-id' ? 'duplicate-id' : 'invalid-id',\n severity: 'error',\n ...(firstFile ? { file: firstFile } : {}),\n componentId: issue.componentId,\n message:\n issue.code === 'duplicate-id'\n ? `Duplicate component id \"${issue.componentId}\" across manifest modules (first declared in ${firstFile ?? 'unknown'}).`\n : issue.message,\n })\n }\n\n // 3. Collect the conflict-free manifests + deterministic payloads (change detection).\n const payloads = new Map<string, string>()\n const manifests = new Map<string, ComponentManifest>()\n for (const manifest of valid) {\n if (excluded.has(manifest.id) || manifests.has(manifest.id)) continue\n manifests.set(manifest.id, manifest)\n payloads.set(manifest.id, stableJson({ id: manifest.id, namespace: manifest.namespace }))\n }\n\n return { files, manifests, payloads, issues }\n}\n\n/** Run a push (discover + validate). Returns a structured result and never throws. */\nexport async function runPush(\n host: ManifestHost,\n io: { log(line: string): void },\n options: PushOptions,\n): Promise<PushResult> {\n const { files, manifests, issues } = await discoverManifests(host, options.root)\n\n io.log(\n `Push (${options.root}): ${manifests.size} manifest(s) in ${files.length} file(s)${issues.length ? ` — ${issues.length} issue(s)` : ''}.`,\n )\n for (const issue of issues) io.log(formatPushIssue(issue))\n\n const discovered = [...manifests.keys()].sort()\n if (issues.length > 0) {\n io.log(\n options.ci\n ? 'CI mode: validation failed.'\n : `Validated ${discovered.length} manifest(s) with ${issues.length} issue(s).`,\n )\n return { files, discovered, issues, ok: false }\n }\n\n io.log(`Validated ${discovered.length} manifest(s).`)\n return { files, discovered, issues, ok: true }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-sync-client.js","sourceRoot":"","sources":["../../src/export-sync/registry-sync-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registry-sync-client.js","sourceRoot":"","sources":["../../src/export-sync/registry-sync-client.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared CLI ↔ builder HTTP transport (EC-157). The `builder check` / `builder\n * typegen` snapshot endpoint is served by the builder's Convex deployment\n * (`convex/http.ts` + `convex/sync.ts`), authenticated with the EC-150 Bearer CLI\n * tokens. This module fixes the endpoint layout, the token header, the request\n * helper, and the structured error contract that the snapshot exchange uses.\n *\n * Component manifests are code-owned (defined in TS next to the components) and are\n * no longer mirrored in builder persistence — there is no manifest push/list/sync\n * client. What remains here is the shared snapshot transport.\n */\n\n/** Env var the CLI reads the sync token from when `--token` is not passed. */\nexport const SYNC_TOKEN_ENV = 'ELYTRA_SYNC_TOKEN'\n\n/** Header carrying the sync token: `Authorization: Bearer <token>`. */\nexport const REGISTRY_SYNC_TOKEN_HEADER = 'authorization'\n\n/** Resolve the sync token: explicit flag wins, then `ELYTRA_SYNC_TOKEN`. */\nexport function resolveSyncToken(\n flagValue: string | undefined,\n env: Record<string, string | undefined>,\n): string | undefined {\n return flagValue ?? env[SYNC_TOKEN_ENV]\n}\n\n/** Endpoint layout the builder implements (EC-157 — Convex HTTP action in `convex/sync.ts`). */\nexport function registrySyncEndpoints(\n baseUrl: string,\n projectId: string,\n): {\n snapshot: string\n} {\n const base = `${baseUrl.replace(/\\/$/, '')}/api/projects/${projectId}/registry-sync`\n return {\n snapshot: `${base}/snapshot`,\n }\n}\n\n/**\n * One structured problem inside a builder error response — mirrors the CLI's\n * issue granularity (per-item validation failures keep their component id).\n */\nexport interface RegistrySyncErrorIssue {\n code: string\n message: string\n componentId?: string\n}\n\n/**\n * The structured error body every builder sync endpoint returns on failure (EC-157):\n * auth failures and validation problems are data, never opaque 500s.\n */\nexport interface RegistrySyncErrorBody {\n error: {\n code: string\n message: string\n issues?: RegistrySyncErrorIssue[]\n }\n}\n\nfunction parseErrorBody(value: unknown): RegistrySyncErrorBody['error'] | undefined {\n if (typeof value !== 'object' || value === null) return undefined\n const error = (value as { error?: unknown }).error\n if (typeof error !== 'object' || error === null) return undefined\n const { code, message, issues } = error as Record<string, unknown>\n if (typeof code !== 'string' || typeof message !== 'string') return undefined\n return {\n code,\n message,\n ...(Array.isArray(issues)\n ? {\n issues: issues.filter(\n (issue): issue is RegistrySyncErrorIssue =>\n typeof issue === 'object' &&\n issue !== null &&\n typeof (issue as { code?: unknown }).code === 'string' &&\n typeof (issue as { message?: unknown }).message === 'string',\n ),\n }\n : {}),\n }\n}\n\n/** A failed CLI ↔ builder exchange — reported as a structured `transport` issue. */\nexport class RegistrySyncTransportError extends Error {\n /** HTTP status of the builder response, when one was received. */\n readonly status?: number\n /** Structured issues from the builder error body, when it sent any. */\n readonly issues?: RegistrySyncErrorIssue[]\n\n constructor(\n message: string,\n options: { status?: number; issues?: RegistrySyncErrorIssue[] } = {},\n ) {\n super(message)\n this.name = 'RegistrySyncTransportError'\n if (options.status !== undefined) this.status = options.status\n if (options.issues !== undefined) this.issues = options.issues\n }\n}\n\n/**\n * One authenticated JSON exchange with a builder sync endpoint. Used by the HTTP\n * builder source (`builder-source.ts`) to fetch the typegen/check snapshot. Non-OK\n * responses become {@link RegistrySyncTransportError}s carrying the builder's\n * structured error body (code, message, per-item issues) when one was returned.\n */\nexport async function registrySyncRequest<T>(\n fetchImpl: typeof fetch,\n url: string,\n method: 'GET' | 'POST',\n token: string | undefined,\n body?: unknown,\n): Promise<T> {\n const headers: Record<string, string> = { 'content-type': 'application/json' }\n if (token) headers[REGISTRY_SYNC_TOKEN_HEADER] = `Bearer ${token}`\n let response: Response\n try {\n response = await fetchImpl(url, {\n method,\n headers,\n ...(body === undefined ? {} : { body: JSON.stringify(body) }),\n })\n } catch (cause) {\n throw new RegistrySyncTransportError(\n `Builder unreachable at ${url}: ${cause instanceof Error ? cause.message : String(cause)}`,\n )\n }\n if (!response.ok) {\n const errorBody = parseErrorBody(await response.json().catch(() => undefined))\n const issueLines = (errorBody?.issues ?? [])\n .map((issue) => `[${issue.code}]${issue.componentId ? ` ${issue.componentId}` : ''} ${issue.message}`)\n .join('; ')\n throw new RegistrySyncTransportError(\n `Builder responded ${response.status} for ${method} ${url}${\n errorBody ? ` — ${errorBody.code}: ${errorBody.message}` : '.'\n }${issueLines ? ` (${issueLines})` : ''}`,\n {\n status: response.status,\n ...(errorBody?.issues ? { issues: errorBody.issues } : {}),\n },\n )\n }\n return (await response.json()) as T\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/export-sync/sync.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/export-sync/sync.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExportInput, ExportMode, GeneratedFile } from './core'\nimport { generateExport } from './generate'\nimport { isExportable, validateExport } from './validate'\nimport type { ExportIssue } from './validate'\n\n/**\n * Pull / sync / drift (EC-110–112). The CLI's job is provider-neutral: a {@link ExportSource}\n * yields the canonical model (from Convex in production, from a fixture offline); the pull\n * validates, generates, and writes — or, in validate/drift modes, only reports. CI runs this\n * before `next build` and fails on validation errors or drift.\n */\n\n/** Provider-neutral source of the canonical model (Convex adapter in production; fixture offline). */\nexport interface ExportSource {\n loadInput(mode: ExportMode): Promise<ExportInput> | ExportInput\n}\n\n/** Injected file IO so the pull is fully testable (in-memory in tests, fs in the real bin). */\nexport interface FileIO {\n read(path: string): string | undefined\n write(path: string, contents: string): void\n log(message: string): void\n}\n\nexport type DriftStatus = 'added' | 'changed' | 'unchanged'\n\nexport interface DriftEntry {\n path: string\n status: DriftStatus\n}\n\nexport interface PullOptions {\n mode: ExportMode\n /** Validate + report only; never write files. */\n validateOnly?: boolean\n /** Compute drift against the existing repo files; never write. */\n checkDrift?: boolean\n /** Treat any error-severity validation issue (or, in drift mode, any drift) as failure. */\n failOnError?: boolean\n}\n\nexport interface PullResult {\n mode: ExportMode\n issues: ExportIssue[]\n files: GeneratedFile[]\n drift: DriftEntry[]\n /** Paths actually written (empty in validate/drift modes). */\n wrote: string[]\n /** Overall success (respects failOnError). */\n ok: boolean\n}\n\nfunction computeDrift(files: GeneratedFile[], io: FileIO): DriftEntry[] {\n return files.map((file) => {\n const existing = io.read(file.path)\n const status: DriftStatus =\n existing === undefined ? 'added' : existing === file.contents ? 'unchanged' : 'changed'\n return { path: file.path, status }\n })\n}\n\n/**\n * Run a pull. Returns a structured result and never throws; validation issues are data. Writes\n * files only when not in validate/drift mode and (if failOnError) there are no error issues.\n */\nexport async function runPull(source: ExportSource, io: FileIO, options: PullOptions): Promise<PullResult> {\n const input = await source.loadInput(options.mode)\n const issues = validateExport(input)\n const exportable = isExportable(issues)\n const errorCount = issues.filter((i) => i.severity === 'error').length\n\n io.log(`Pull (${options.mode}): ${issues.length} validation issue(s)${errorCount ? ` — ${errorCount} error(s)` : ''}.`)\n\n // Validation gate: with --fail-on-error a broken graph never produces output (EC-111/112).\n if (options.failOnError && !exportable) {\n for (const issue of issues.filter((i) => i.severity === 'error')) io.log(` error [${issue.code}] ${issue.message}`)\n return { mode: options.mode, issues, files: [], drift: [], wrote: [], ok: false }\n }\n\n const files = generateExport(input)\n\n if (options.validateOnly) {\n return { mode: options.mode, issues, files, drift: [], wrote: [], ok: exportable }\n }\n\n const drift = computeDrift(files, io)\n if (options.checkDrift) {\n const changed = drift.filter((d) => d.status !== 'unchanged')\n for (const d of changed) io.log(` drift ${d.status}: ${d.path}`)\n io.log(`Drift: ${changed.length} of ${files.length} file(s) out of sync.`)\n const ok = (!options.failOnError || changed.length === 0) && exportable\n return { mode: options.mode, issues, files, drift, wrote: [], ok }\n }\n\n const wrote: string[] = []\n for (const file of files) {\n io.write(file.path, file.contents)\n wrote.push(file.path)\n }\n io.log(`Wrote ${wrote.length} file(s).`)\n return { mode: options.mode, issues, files, drift, wrote, ok: exportable }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typegen.js","sourceRoot":"","sources":["../../src/export-sync/typegen.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAItF;;;;;;;;;;GAUG;AAEH,iFAAiF;AACjF,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAA;AAE/D,kGAAkG;AAClG,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,kEAAkE,IAAI;;;2DAGpB,CAAA;AAC3D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,WAAqC,EACrC,OAAe,oBAAoB;IAEnC,MAAM,QAAQ,GAAG;QACf,aAAa,CAAC,IAAI,CAAC;QACnB,qBAAqB,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE;QAC5C,qBAAqB,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE;KAC7C,CAAA;IACD,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA;AACrC,CAAC;AAkBD,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAoB,EACpB,EAAU,EACV,OAAuB;IAEvB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,oBAAoB,CAAA;IAC/C,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;IAC1D,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAA;IACzC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IACvB,EAAE,CAAC,GAAG,CACJ,YAAY,OAAO,CAAC,IAAI,YAAY,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,MAAM,iBAAiB,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,GAAG,CACtH,CAAA;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;AACjE,CAAC"}
|
|
1
|
+
{"version":3,"file":"typegen.js","sourceRoot":"","sources":["../../src/export-sync/typegen.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAItF;;;;;;;;;;GAUG;AAEH,iFAAiF;AACjF,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAA;AAE/D,kGAAkG;AAClG,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,kEAAkE,IAAI;;;2DAGpB,CAAA;AAC3D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,WAAqC,EACrC,OAAe,oBAAoB;IAEnC,MAAM,QAAQ,GAAG;QACf,aAAa,CAAC,IAAI,CAAC;QACnB,qBAAqB,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE;QAC5C,qBAAqB,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE;KAC7C,CAAA;IACD,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA;AACrC,CAAC;AAkBD,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAoB,EACpB,EAAU,EACV,OAAuB;IAEvB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,oBAAoB,CAAA;IAC/C,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;IAC1D,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAA;IACzC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IACvB,EAAE,CAAC,GAAG,CACJ,YAAY,OAAO,CAAC,IAAI,YAAY,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,MAAM,iBAAiB,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,GAAG,CACtH,CAAA;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;AACjE,CAAC","sourcesContent":["import type { CollectionDef } from '@elytracms/core/cms-core'\nimport { generateAccessorTypes, generateDeliveryTypes } from '@elytracms/core/content'\nimport type { ExportMode } from './core'\nimport type { ExportSource, FileIO } from './sync'\n\n/**\n * `builder typegen` (EC-148, vision AD-4): emit the per-collection delivery-shape types\n * (EC-142) and accessor typings (EC-143) into the host repo as ONE committed, reviewable\n * TypeScript module — `article.author.name` just typechecks in the user's own app.\n *\n * Output convention: a single file, by default {@link DEFAULT_TYPEGEN_PATH} at the repo\n * root (override with `--out <path>`). One file keeps the commit/review/drift story\n * trivial — `builder check` byte-compares it against an in-memory regeneration, so the\n * file must be deterministic: the `@elytracms/core/content` codegen is used verbatim (sorted\n * collections, no timestamps), and the banner depends only on the output path.\n */\n\n/** Default output path for `builder typegen`, relative to the host repo root. */\nexport const DEFAULT_TYPEGEN_PATH = 'elytra-types.generated.ts'\n\n/** The namespaced banner the generated types module carries (cf. `generatedBanner` for eject). */\nexport function typegenBanner(path: string): string {\n return `/* Generated by \\`builder typegen\\` (@elytracms/export-sync) — ${path}.\n * Delivery-shape + accessor types for this project's collections (vision AD-4).\n * Do not edit by hand — re-run \\`builder typegen\\` after schema changes;\n * \\`builder check\\` fails CI while this file is stale. */`\n}\n\n/**\n * The full contents of the generated types module: banner + EC-142 delivery types +\n * EC-143 accessor types, verbatim from the `@elytracms/core/content` codegen. Deterministic:\n * byte-identical output for identical collection schemas and output path.\n */\nexport function generateTypesFile(\n collections: readonly CollectionDef[],\n path: string = DEFAULT_TYPEGEN_PATH,\n): string {\n const sections = [\n typegenBanner(path),\n generateDeliveryTypes(collections).trimEnd(),\n generateAccessorTypes(collections).trimEnd(),\n ]\n return `${sections.join('\\n\\n')}\\n`\n}\n\nexport interface TypegenOptions {\n /** Which content state's schemas to generate from (default flows from the CLI: published). */\n mode: ExportMode\n /** Output path for the generated module (default: {@link DEFAULT_TYPEGEN_PATH}). */\n out?: string\n}\n\nexport interface TypegenResult {\n mode: ExportMode\n out: string\n contents: string\n /** False when the file on disk was already byte-identical (nothing to commit). */\n changed: boolean\n ok: boolean\n}\n\n/** Run a typegen. Loads the collection schemas from the source and writes the module. */\nexport async function runTypegen(\n source: ExportSource,\n io: FileIO,\n options: TypegenOptions,\n): Promise<TypegenResult> {\n const out = options.out ?? DEFAULT_TYPEGEN_PATH\n const input = await source.loadInput(options.mode)\n const contents = generateTypesFile(input.collections, out)\n const changed = io.read(out) !== contents\n io.write(out, contents)\n io.log(\n `Typegen (${options.mode}): wrote ${out} — ${input.collections.length} collection(s)${changed ? '' : ', unchanged'}.`,\n )\n return { mode: options.mode, out, contents, changed, ok: true }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/export-sync/validate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/export-sync/validate.ts"],"names":[],"mappings":"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","sourcesContent":["import { ComponentRegistry } from '@elytracms/core/component-registry'\nimport { createRouter, isKnownLocale } from '@elytracms/core/cms-core'\nimport { parseDataSource } from '@elytracms/core/data-binding'\nimport { PROJECT_GRAPH_SCHEMA_VERSION, validateProjectGraph } from '@elytracms/core/project-graph'\nimport type { ExportInput } from './core'\n\n/**\n * Pre-build / pre-export validation (EC-111). Reuses the SAME canonical validators that guard\n * authoring — graph validation (missing components, invalid props, broken bindings, missing\n * slots), route conflicts, redirect loops — plus export-specific checks (schema version, unknown\n * locales). Returns structured issues; never throws. CI fails the build when any `error` exists.\n */\n\nexport type ExportIssueCode =\n | 'schema-version'\n | 'graph'\n | 'route'\n | 'redirect'\n | 'locale'\n | 'source'\n\nexport interface ExportIssue {\n code: ExportIssueCode\n severity: 'error' | 'warning'\n message: string\n /** Optional locator (node id, route id, etc.). */\n ref?: string\n}\n\n/** Validate an {@link ExportInput} prior to generation. */\nexport function validateExport(input: ExportInput): ExportIssue[] {\n const issues: ExportIssue[] = []\n\n // 1. Schema version compatibility (EC-111 \"incompatible schema versions\").\n if (input.graph.schemaVersion !== PROJECT_GRAPH_SCHEMA_VERSION) {\n issues.push({\n code: 'schema-version',\n severity: 'error',\n message: `Graph schema version ${input.graph.schemaVersion} is incompatible with the export toolchain (expects ${PROJECT_GRAPH_SCHEMA_VERSION}). Upgrade the project before exporting.`,\n })\n }\n\n // 2. Manifest registry issues — duplicate or non-namespaced component ids (EC-111 \"invalid manifests\").\n const registry = new ComponentRegistry(input.manifests)\n for (const issue of registry.issues) {\n issues.push({\n code: 'graph',\n severity: 'error',\n message: issue.message,\n ...(issue.componentId ? { ref: issue.componentId } : {}),\n })\n }\n\n // 3. Graph validation — missing components, invalid props, broken bindings, missing slots.\n // Build known-source ids defensively: a malformed source is a structured issue, never a throw.\n const knownSourceIds = new Set<string>()\n for (const source of input.sources) {\n const parsed = parseDataSource(source)\n if (parsed.success) {\n knownSourceIds.add(parsed.data.id)\n } else {\n issues.push({\n code: 'source',\n severity: 'error',\n message: `Data source is invalid and cannot be exported: ${parsed.error.issues[0]?.message ?? 'unknown error'}.`,\n })\n }\n }\n for (const issue of validateProjectGraph(input.graph, { components: registry.lookup, knownSourceIds })) {\n issues.push({\n code: 'graph',\n severity: issue.severity,\n message: issue.message,\n ...(issue.nodeId ? { ref: issue.nodeId } : {}),\n })\n }\n\n // 3. Route conflicts + redirect loops (the router surfaces both as structured issues).\n const router = createRouter(input.routes, input.redirects, { defaultLocale: input.localeConfig.default })\n for (const issue of router.issues) {\n issues.push({\n code: issue.code === 'redirect-loop' ? 'redirect' : 'route',\n severity: issue.severity === 'error' ? 'error' : 'warning',\n message: issue.message,\n })\n }\n\n // 4. Unknown locales on routes (EC-111 \"unsupported locales\").\n for (const route of input.routes) {\n if (route.locale && !isKnownLocale(input.localeConfig, route.locale)) {\n issues.push({\n code: 'locale',\n severity: 'error',\n message: `Route \"${route.id}\" targets locale \"${route.locale}\" which is not in the project's locale config.`,\n ref: route.id,\n })\n }\n }\n\n // 5. Every route must resolve to a RENDERABLE target (EC-101/105/111, reshaped\n // by EC-187). A route now maps a URL → a `document` ref (a `page`-collection\n // document rendered as a composition, or a content-collection document\n // rendered by a dev route component). A route with no `document`, or one\n // targeting an unknown collection, is flagged so a broken export fails CI\n // instead of 404ing silently.\n const collectionIds = new Set(input.collections.map((c) => c.id))\n for (const route of input.routes) {\n if (!route.document) {\n issues.push({\n code: 'route',\n severity: 'error',\n message: `Route \"${route.id}\" has no render target (a document ref).`,\n ref: route.id,\n })\n continue\n }\n if (!collectionIds.has(route.document.collection)) {\n issues.push({\n code: 'route',\n severity: 'error',\n message: `Route \"${route.id}\" targets unknown collection \"${route.document.collection}\".`,\n ref: route.id,\n })\n }\n }\n\n return issues\n}\n\n/** True when an export is safe to build (no error-severity issues). */\nexport function isExportable(issues: ExportIssue[]): boolean {\n return !issues.some((i) => i.severity === 'error')\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/export-sync/watch.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/export-sync/watch.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ManifestHost } from './manifest-host'\nimport { isManifestFile } from './manifest-host'\nimport { runPush } from './push'\nimport type { PushResult } from './push'\nimport type { FileIO } from './sync'\n\n/**\n * Watch mode for the manifest validation pass (EC-147): manifest edits in the host\n * repo are re-validated within seconds. Built on `node:fs` `watch` — no external\n * watcher dependency. The loop is factored into {@link createManifestWatcher}\n * (debounce, driven by injected events and an injected {@link Scheduler}) so tests\n * exercise it with fake events and a manual clock; `createFsWatchDriver` in\n * `@elytracms/core/export-sync/node` is the thin real-fs shell (node-only, kept out of the\n * browser-safe package root).\n *\n * Component manifests are code-owned, so each debounced flush re-runs a full\n * discovery + validation pass; there is no remote to sync to.\n */\n\n/** A raw filesystem event (path relative to the watch root). */\nexport interface WatchEvent {\n path: string\n}\n\n/** Injectable debounce clock; the default uses real timers. */\nexport interface Scheduler {\n /** Schedule `fn` after `delayMs`; returns a cancel function. */\n schedule(fn: () => void, delayMs: number): () => void\n}\n\nexport const timeoutScheduler: Scheduler = {\n schedule(fn, delayMs) {\n const timer = setTimeout(fn, delayMs)\n return () => clearTimeout(timer)\n },\n}\n\nexport interface ManifestWatcher {\n /** Feed a filesystem event; non-manifest paths are ignored, manifest paths debounce a pass. */\n handleEvent(event: WatchEvent): void\n /** Cancel any pending debounce and run a validation pass now (also the initial pass). */\n flush(): Promise<PushResult | undefined>\n /** True while a debounced pass is scheduled. */\n readonly pending: boolean\n close(): void\n}\n\nexport interface ManifestWatcherDeps {\n host: ManifestHost\n io: Pick<FileIO, 'log'>\n options: { root: string }\n /** Debounce window for bursts of fs events (default 150 ms). */\n debounceMs?: number\n scheduler?: Scheduler\n /** Observe each completed pass (tests, logging, studio toasts). */\n onPush?: (result: PushResult) => void\n}\n\n/** The testable watch loop: debounce, re-validate. */\nexport function createManifestWatcher(deps: ManifestWatcherDeps): ManifestWatcher {\n const scheduler = deps.scheduler ?? timeoutScheduler\n const debounceMs = deps.debounceMs ?? 150\n let cancel: (() => void) | undefined\n let closed = false\n /** Passes are serialized: a flush during an in-flight pass chains after it. */\n let inFlight: Promise<PushResult | undefined> = Promise.resolve(undefined)\n\n const runOnce = async (): Promise<PushResult> => {\n const result = await runPush(deps.host, deps.io, { root: deps.options.root })\n deps.onPush?.(result)\n return result\n }\n\n const flush = (): Promise<PushResult | undefined> => {\n cancel?.()\n cancel = undefined\n if (closed) return inFlight\n inFlight = inFlight.then(() => runOnce())\n return inFlight\n }\n\n return {\n handleEvent(event) {\n if (closed || !isManifestFile(event.path)) return\n cancel?.()\n cancel = scheduler.schedule(() => {\n cancel = undefined\n void flush()\n }, debounceMs)\n },\n flush,\n get pending() {\n return cancel !== undefined\n },\n close() {\n closed = true\n cancel?.()\n cancel = undefined\n },\n }\n}\n\n/** How watch mode receives fs events; `done` resolves when the watch ends. */\nexport interface WatchDriver {\n watch(root: string, onEvent: (event: WatchEvent) => void): { close(): void; done: Promise<void> }\n}\n\nexport interface RunWatchOptions {\n root: string\n debounceMs?: number\n scheduler?: Scheduler\n onPush?: (result: PushResult) => void\n}\n\n/**\n * Run watch mode: an initial full validation pass, then debounced incremental\n * passes until the driver's watch ends. Resolves when the watch is closed.\n */\nexport async function runWatch(\n host: ManifestHost,\n io: Pick<FileIO, 'log'>,\n driver: WatchDriver,\n options: RunWatchOptions,\n): Promise<void> {\n const watcher = createManifestWatcher({\n host,\n io,\n options: { root: options.root },\n ...(options.debounceMs !== undefined ? { debounceMs: options.debounceMs } : {}),\n ...(options.scheduler ? { scheduler: options.scheduler } : {}),\n ...(options.onPush ? { onPush: options.onPush } : {}),\n })\n await watcher.flush()\n const handle = driver.watch(options.root, (event) => watcher.handleEvent(event))\n io.log(`Watching ${options.root} for manifest changes (Ctrl+C to stop).`)\n await handle.done\n watcher.close()\n}\n"]}
|