@elytracms/core 0.0.7 → 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 +2 -0
- package/dist/cms-core/index.js +2 -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 +10 -0
- package/dist/cms-core/issues.js +13 -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.d.ts +44 -0
- package/dist/cms-core/nesting-depth.js +50 -0
- package/dist/cms-core/nesting-depth.js.map +1 -0
- 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.d.ts +8 -0
- package/dist/cms-core/validate-document.js +35 -0
- 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.d.ts +14 -1
- package/dist/runtime-renderer/render.js +126 -126
- 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":"seed.js","sourceRoot":"","sources":["../../src/persistence/seed.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/persistence/seed.ts"],"names":[],"mappings":"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","sourcesContent":["import { validSampleGraph } from '@elytracms/core/project-graph'\nimport {\n documentKey,\n sampleDocuments,\n sampleFilterableCollections,\n samplePublishedKeys,\n selfTypeDocument,\n} from '@elytracms/core/cms-core'\nimport { createSequentialClock } from './core'\nimport { InMemoryPersistenceAdapter } from './adapter'\nimport type { PersistenceAdapter } from './adapter'\nimport type { ProjectRole } from './members'\n\n/** The sample project the seed attaches graph/registry/CMS/publishing to. */\nexport const SEED_PROJECT_ID = 'prj_aurora'\n\n/**\n * Deterministic dev users (EC-150). The ids are canonical here so the seeded\n * memberships and the builder's local auth adapter (which maps\n * `admin@example.com` etc. + fixed dev passwords onto these ids) stay aligned.\n * Live Convex deployments use Convex Auth `users` ids instead.\n */\nexport const DEV_USERS = {\n admin: { id: 'user_admin', email: 'admin@example.com', name: 'Ada Admin' },\n editor: { id: 'user_editor', email: 'editor@example.com', name: 'Edi Editor' },\n viewer: { id: 'user_viewer', email: 'viewer@example.com', name: 'Vio Viewer' },\n} as const\n\n/** Role each dev user gets on every sample project. */\nexport const DEV_USER_ROLES: ReadonlyArray<{ userId: string; role: ProjectRole }> = [\n { userId: DEV_USERS.admin.id, role: 'admin' },\n { userId: DEV_USERS.editor.id, role: 'editor' },\n { userId: DEV_USERS.viewer.id, role: 'viewer' },\n]\n\n/** A deterministic sample asset record seeded alongside the CMS content. */\nexport const SEED_ASSET = {\n id: 'asset_cover',\n filename: 'cover.jpg',\n contentType: 'image/jpeg',\n byteSize: 102400,\n width: 1200,\n height: 630,\n alt: 'Cover image',\n} as const\n\n/**\n * Populate an adapter with deterministic seed content (brief §10, EC-046):\n * a graph revision, the CMS schema + documents, a sample asset, and a preview\n * publish. Uses only the public repository API, so it works against any\n * {@link PersistenceAdapter} implementation (in-memory or Convex).\n */\nexport async function seedPersistence(adapter: PersistenceAdapter): Promise<void> {\n // Graph + revision — LAYOUTS-ONLY (EC-187, schemaVersion 2). The home page is\n // no longer a graph page; it is a `page`-collection document seeded below\n // (`samplePageHome` rides in `sampleDocuments`), rendered into `layout.main`.\n const revision = await adapter.graphs.saveGraph(SEED_PROJECT_ID, validSampleGraph, {\n label: 'Initial import',\n })\n\n // CMS schema + documents (localized variants ride along; publish-ness is the\n // version pointer pinned below, EC-224).\n // `sampleDocuments` includes the `page/home` document (EC-187) so a routed\n // page resolves to its body composition. The canonical `filterable`\n // declarations ride on the seeded schema (EC-169 fix-pack) so studio\n // filter/sort pickers and the delivery engine share one declaration set\n // without app-side overlays.\n await adapter.cms.saveSchema(SEED_PROJECT_ID, sampleFilterableCollections)\n // EC-224: the live row is the continuous DRAFT (the Sanity model). A doc in\n // `samplePublishedKeys` is published via the version POINTER — record a version\n // snapshot and pin it — not by a flat `state` flag (B-3c retires the field).\n // Resolution serves published via the pin; the live row stays a draft.\n const published = new Set(samplePublishedKeys)\n const collectionsById = new Map(sampleFilterableCollections.map((c) => [c.id, c]))\n for (const rawDocument of sampleDocuments) {\n // EC-277: seed self-typed content, exactly as the operations write lens does in\n // production (the seed's compositions hold no picked relation/asset props, so no\n // manifest lookup is needed here). The persistence store stays schema-agnostic.\n const collection = collectionsById.get(rawDocument.collection)\n const document = collection ? selfTypeDocument(rawDocument, collection) : rawDocument\n await adapter.cms.upsertDocument(SEED_PROJECT_ID, document)\n if (published.has(documentKey({ collection: document.collection, id: document.id }))) {\n const version = await adapter.cms.saveDocumentVersion(SEED_PROJECT_ID, document, {\n label: 'published',\n })\n await adapter.cms.publishDocumentVersion(\n SEED_PROJECT_ID,\n { collection: document.collection, id: document.id },\n version.version,\n )\n }\n }\n\n // Asset metadata.\n await adapter.assets.upsertAsset(SEED_PROJECT_ID, SEED_ASSET)\n\n // Publish the initial revision (the deployment's one environment).\n await adapter.publishing.publish(SEED_PROJECT_ID, {\n revisionId: revision.id,\n revision: revision.revision,\n })\n\n // Memberships (EC-150): every dev user gets their role on the seeded project,\n // so each role's studio experience is reproducible from fixtures.\n const projectIds = [SEED_PROJECT_ID]\n for (const projectId of projectIds) {\n for (const { userId, role } of DEV_USER_ROLES) {\n await adapter.members.setMember(projectId, userId, role)\n }\n }\n}\n\n/**\n * Build a fully-seeded in-memory adapter (brief §10, §11). The domains are\n * seeded deterministically. Reproducible across runs.\n */\nexport async function createSeededPersistenceAdapter(): Promise<InMemoryPersistenceAdapter> {\n const adapter = new InMemoryPersistenceAdapter({\n clock: createSequentialClock('2026-06-07T00:00:00.000Z'),\n })\n await seedPersistence(adapter)\n return adapter\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-maintaining-adapter.js","sourceRoot":"","sources":["../../src/persistence/self-maintaining-adapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"self-maintaining-adapter.js","sourceRoot":"","sources":["../../src/persistence/self-maintaining-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DocumentRef } from '@elytracms/core/cms-core'\nimport type { PersistenceAdapter } from './adapter'\nimport type { CmsRepository } from './cms'\nimport type { GraphRepository } from './graph'\nimport type { PublishingRepository } from './publishing'\nimport {\n reindexDocumentReferences,\n reindexGraphDraftReferences,\n reindexGraphPublishedReferences,\n} from './reference-indexing'\n\n/**\n * Self-maintaining reference index (EC-277, vision AD-6).\n *\n * The reference index is **maintained at the source, in the write path** — not by\n * a client-side event subscriber. Every writer is caught by construction: a write\n * recomputes the affected source's outbound references before it returns, so the\n * index can never drift behind the content, regardless of which code path issued\n * the write.\n *\n * {@link maintainReferenceIndex} wraps an in-process repository set (the in-memory\n * provider) so each document/graph/publishing write reindexes in the same call.\n * The Convex provider achieves the identical guarantee *server-side* — extraction\n * runs inside the mutation handler (`convex/cms.ts`, `convex/graphs.ts`,\n * `convex/publishing.ts`), so a raw `convex run` is caught too — and merely flags\n * {@link PersistenceAdapter.maintainsReferenceIndex} so the studio bootstrap does\n * not double-index via the `attachReferenceIndex` subscriber.\n *\n * Extraction is schema-free and manifest-free (self-describing content, AD-15), so\n * maintenance needs nothing but the stored value — which is exactly what lets it\n * live in the store rather than the client.\n */\n\n/** The write-bearing repositories whose mutations trigger a reindex. */\nexport interface MaintainableRepositories {\n cms: CmsRepository\n graphs: GraphRepository\n publishing: PublishingRepository\n}\n\n/**\n * Forward every method of a repository to `inner` (preserving `this`), overriding\n * only the named write methods. A `Proxy` keeps the non-overridden surface — reads\n * and the repository's own internal state — bound to the real instance.\n */\nfunction forwardRepository<T extends object>(inner: T, overrides: Partial<T>): T {\n const overrideMap = overrides as Record<PropertyKey, unknown>\n return new Proxy(inner, {\n get(target, prop) {\n if (Object.prototype.hasOwnProperty.call(overrideMap, prop)) return overrideMap[prop]\n const value = Reflect.get(target, prop, target)\n return typeof value === 'function'\n ? (value as (...args: unknown[]) => unknown).bind(target)\n : value\n },\n })\n}\n\n/**\n * Wrap a repository set so each write keeps the reference index current in-process.\n * `getAdapter` is read lazily on each write so the reindex routines (which need the\n * full adapter for cross-repository reads) resolve against the live, fully-built\n * adapter — letting the caller construct repositories and adapter in any order.\n * Idempotent reindexing (replace-all-for-source) means a redundant subscriber would\n * still converge, but the owning adapter should advertise\n * {@link PersistenceAdapter.maintainsReferenceIndex} so the subscriber stands down.\n */\nexport function maintainReferenceIndex(\n repos: MaintainableRepositories,\n getAdapter: () => PersistenceAdapter,\n): MaintainableRepositories {\n return {\n cms: forwardRepository(repos.cms, {\n upsertDocument: async (projectId, document) => {\n const record = await repos.cms.upsertDocument(projectId, document)\n await reindexDocumentReferences(getAdapter(), projectId, {\n collection: document.collection,\n id: document.id,\n })\n return record\n },\n deleteDocument: async (projectId, ref) => {\n await repos.cms.deleteDocument(projectId, ref)\n // The recompute of a now-missing document drops all of its entries.\n await reindexDocumentReferences(getAdapter(), projectId, ref)\n },\n publishDocumentVersion: async (projectId: string, ref: DocumentRef, version: number) => {\n const record = await repos.cms.publishDocumentVersion(projectId, ref, version)\n // The published variant now exists — recompute both variants of this doc.\n await reindexDocumentReferences(getAdapter(), projectId, ref)\n return record\n },\n unpublishDocument: async (projectId: string, ref: DocumentRef) => {\n const record = await repos.cms.unpublishDocument(projectId, ref)\n // The live pin is cleared — drop this doc's published entries.\n await reindexDocumentReferences(getAdapter(), projectId, ref)\n return record\n },\n }),\n graphs: forwardRepository(repos.graphs, {\n saveGraph: async (projectId, graph, options) => {\n const record = await repos.graphs.saveGraph(projectId, graph, options)\n await reindexGraphDraftReferences(getAdapter(), projectId)\n return record\n },\n }),\n publishing: forwardRepository(repos.publishing, {\n publish: async (projectId, input) => {\n const record = await repos.publishing.publish(projectId, input)\n await reindexGraphPublishedReferences(getAdapter(), projectId)\n return record\n },\n unpublish: async (projectId: string) => {\n const record = await repos.publishing.unpublish(projectId)\n await reindexGraphPublishedReferences(getAdapter(), projectId)\n return record\n },\n }),\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-storage.js","sourceRoot":"","sources":["../../src/plugins/asset-storage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"asset-storage.js","sourceRoot":"","sources":["../../src/plugins/asset-storage.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAyBH,0FAA0F;AAC1F,MAAM,OAAO,oBAAoB;IACd,MAAM,GAAG,IAAI,GAAG,EAA+B,CAAA;IACxD,UAAU,CAAoB;IAC7B,MAAM,GAAgC,EAAE,CAAA;IAEjD,YAAY,WAA0C,EAAE;QACtD,KAAK,MAAM,OAAO,IAAI,QAAQ;YAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IACxD,CAAC;IAED,QAAQ,CAAC,OAA4B;QACnC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,8BAA8B,OAAO,CAAC,IAAI,qCAAqC,EAAE,CAAC,CAAA;YACpJ,OAAM;QACR,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACtC,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAA;IACnE,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IAClC,CAAC;IAED,+EAA+E;IAC/E,GAAG,CAAC,IAAY;QACd,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAA;QACxC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,6EAA6E;IAC7E,MAAM;QACJ,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACvE,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA;IACzB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IACpB,IAAI,GAAG,QAAQ,CAAA;IACf,KAAK,GAAG,WAAW,CAAA;IACnB,WAAW,GAAG,iEAAiE,CAAA;IACvE,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAA;IAEtD,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,IAAgB;QACrC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAC3B,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IACD,GAAG,CAAC,GAAW;QACb,OAAO,mBAAmB,GAAG,EAAE,CAAA;IACjC,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,mBAAmB;IACrB,IAAI,GAAG,iBAAiB,CAAA;IACxB,KAAK,GAAG,cAAc,CAAA;IACtB,WAAW,GAAG,sEAAsE,CAAA;IAC5E,IAAI,CAAQ;IAE7B,YAAY,OAAe;QACzB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACxC,CAAC;IAED,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAA;IAC9F,CAAC;IACD,KAAK,CAAC,GAAG;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,GAAG,CAAC,GAAW;QACb,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAA;IACjD,CAAC;IACD,KAAK,CAAC,GAAG;QACP,OAAO,KAAK,CAAA;IACd,CAAC;IACD,KAAK,CAAC,MAAM;QACV,mCAAmC;IACrC,CAAC;CACF","sourcesContent":["/**\n * Asset-storage adapters (EC-133). The CMS stores asset *metadata* (filename, size, content type)\n * and points at bytes by an opaque storage key. A storage adapter owns where those bytes live —\n * in-memory, a CDN base URL, S3, Convex file storage, etc. This interface is structurally\n * compatible with `@elytracms/core/persistence`'s `BlobStorageAdapter`, so an adapter registered here can\n * back the asset repository directly. Selection is pluggable and configurable.\n */\n\n/** A pluggable asset-storage backend (EC-133). */\nexport interface AssetStorageAdapter {\n /** Backend kind, e.g. `memory`, `plugin.base-url`, `plugin.s3`. */\n kind: string\n title: string\n description?: string\n /** Persist bytes under a key. */\n put(key: string, data: Uint8Array, contentType?: string): Promise<void>\n /** Read bytes back (undefined when absent). */\n get(key: string): Promise<Uint8Array | undefined>\n /** A resolvable locator (URL) for the stored blob. */\n url(key: string): string\n has(key: string): Promise<boolean>\n delete(key: string): Promise<void>\n}\n\n/** A structured registration issue for the storage registry. */\nexport interface AssetStorageRegistryIssue {\n code: 'duplicate'\n message: string\n ref: string\n}\n\n/** Registry of asset-storage adapters keyed by kind, with a selectable active backend. */\nexport class AssetStorageRegistry {\n private readonly byKind = new Map<string, AssetStorageAdapter>()\n private activeKind: string | undefined\n readonly issues: AssetStorageRegistryIssue[] = []\n\n constructor(adapters: Iterable<AssetStorageAdapter> = []) {\n for (const adapter of adapters) this.register(adapter)\n }\n\n register(adapter: AssetStorageAdapter): void {\n if (this.byKind.has(adapter.kind)) {\n this.issues.push({ code: 'duplicate', ref: adapter.kind, message: `Duplicate storage adapter \"${adapter.kind}\" — keeping the first registration.` })\n return\n }\n this.byKind.set(adapter.kind, adapter)\n if (this.activeKind === undefined) this.activeKind = adapter.kind\n }\n\n has(kind: string): boolean {\n return this.byKind.has(kind)\n }\n\n get(kind: string): AssetStorageAdapter | undefined {\n return this.byKind.get(kind)\n }\n\n list(): AssetStorageAdapter[] {\n return [...this.byKind.values()]\n }\n\n /** Select the active backend (the one the asset repository writes through). */\n use(kind: string): boolean {\n if (!this.byKind.has(kind)) return false\n this.activeKind = kind\n return true\n }\n\n /** The active adapter (first registered, unless changed via {@link use}). */\n active(): AssetStorageAdapter | undefined {\n return this.activeKind ? this.byKind.get(this.activeKind) : undefined\n }\n\n get size(): number {\n return this.byKind.size\n }\n}\n\n/**\n * In-memory asset storage (the reference adapter for tests and local inspection). Bytes persist\n * for the lifetime of the instance.\n */\nexport class MemoryAssetStorage implements AssetStorageAdapter {\n readonly kind = 'memory'\n readonly title = 'In-memory'\n readonly description = 'Keeps bytes in process memory. For local development and tests.'\n private readonly blobs = new Map<string, Uint8Array>()\n\n async put(key: string, data: Uint8Array): Promise<void> {\n this.blobs.set(key, data)\n }\n async get(key: string): Promise<Uint8Array | undefined> {\n return this.blobs.get(key)\n }\n url(key: string): string {\n return `memory://assets/${key}`\n }\n async has(key: string): Promise<boolean> {\n return this.blobs.has(key)\n }\n async delete(key: string): Promise<void> {\n this.blobs.delete(key)\n }\n}\n\n/**\n * A read-through CDN/base-URL adapter (example, EC-133). Bytes are served from an external base\n * URL; this adapter resolves locators but does not own writes (uploads happen out of band). It\n * demonstrates that a \"new storage backend\" is just another implementation of the interface.\n */\nexport class BaseUrlAssetStorage implements AssetStorageAdapter {\n readonly kind = 'plugin.base-url'\n readonly title = 'CDN base URL'\n readonly description = 'Resolves asset URLs against a configured CDN/base URL. Read-through.'\n private readonly base: string\n\n constructor(baseUrl: string) {\n this.base = baseUrl.replace(/\\/$/, '')\n }\n\n async put(): Promise<void> {\n throw new Error('BaseUrlAssetStorage is read-through; upload bytes to the CDN out of band.')\n }\n async get(): Promise<Uint8Array | undefined> {\n return undefined\n }\n url(key: string): string {\n return `${this.base}/${key.replace(/^\\//, '')}`\n }\n async has(): Promise<boolean> {\n return false\n }\n async delete(): Promise<void> {\n /* no-op: the CDN owns lifecycle */\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-package.js","sourceRoot":"","sources":["../../src/plugins/component-package.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component-package.js","sourceRoot":"","sources":["../../src/plugins/component-package.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { ComponentRegistry, isPrimitive } from '@elytracms/core/component-registry'\nimport type { ComponentManifest } from '@elytracms/core/component-registry'\nimport { isValidComponentId } from '@elytracms/core/project-graph'\n\n/**\n * Component package conventions (EC-130). A distributable component package bundles a set of\n * component *manifests* (shape; real React implementations are wired in the consuming app/export —\n * brief §4.2 \"project-level components first\"). Conventions:\n *\n * - **Name**: npm-style (`@vendor/name` or `name`).\n * - **Version**: semver (`major.minor.patch`).\n * - **Vendor namespace**: a short slug (e.g. `acme`). Every component id MUST be\n * `project.<vendor>.<ComponentName>` — installed third-party components are project-level\n * components, scoped by vendor so they validate cleanly and never collide with platform\n * primitives (`base.primitives.*`) or another vendor.\n *\n * `validateComponentPackage` checks these conventions and the manifests (via the canonical\n * `ComponentRegistry`); `registerComponentPackage` registers a conforming package.\n */\n\n/** Reserved id prefixes a vendor package must never use. */\nexport const RESERVED_VENDORS = ['base', 'primitives', 'project'] as const\n\nexport const componentPackageMetaSchema = z.object({\n /** npm-style package name. */\n name: z.string().regex(/^(@[a-z0-9][a-z0-9-]*\\/)?[a-z0-9][a-z0-9-]*$/, 'must be an npm-style package name'),\n /** Semantic version. */\n version: z.string().regex(/^\\d+\\.\\d+\\.\\d+$/, 'must be semver (major.minor.patch)'),\n /** Vendor namespace slug — the `<vendor>` in `project.<vendor>.<Name>`. */\n vendor: z.string().regex(/^[a-z][a-z0-9]*$/, 'must be a lowercase alphanumeric slug'),\n description: z.string().optional(),\n author: z.string().optional(),\n homepage: z.string().url().optional(),\n})\nexport type ComponentPackageMeta = z.infer<typeof componentPackageMetaSchema>\n\n/** A distributable component package (EC-130). */\nexport interface ComponentPackage extends ComponentPackageMeta {\n manifests: ComponentManifest[]\n}\n\n/** A structured validation issue for a component package. */\nexport interface ComponentPackageIssue {\n code: 'meta' | 'reserved' | 'namespace' | 'invalid-id' | 'duplicate' | 'empty'\n severity: 'error' | 'warning'\n message: string\n ref?: string\n}\n\n/** The required component-id prefix for a vendor's package. */\nexport function vendorPrefix(vendor: string): string {\n return `project.${vendor}.`\n}\n\n/**\n * Validate a component package against the conventions (EC-130). Returns structured issues; never\n * throws. A package with any `error` must not be registered.\n */\nexport function validateComponentPackage(pkg: ComponentPackage): ComponentPackageIssue[] {\n const issues: ComponentPackageIssue[] = []\n\n const meta = componentPackageMetaSchema.safeParse(pkg)\n if (!meta.success) {\n for (const i of meta.error.issues) {\n issues.push({ code: 'meta', severity: 'error', message: `${i.path.join('.') || 'meta'}: ${i.message}` })\n }\n // Without valid meta we cannot derive the namespace; stop here.\n return issues\n }\n\n if ((RESERVED_VENDORS as readonly string[]).includes(pkg.vendor)) {\n issues.push({ code: 'reserved', severity: 'error', ref: pkg.vendor, message: `Vendor \"${pkg.vendor}\" is reserved.` })\n }\n\n if (pkg.manifests.length === 0) {\n issues.push({ code: 'empty', severity: 'warning', message: 'Component package declares no components.' })\n }\n\n const prefix = vendorPrefix(pkg.vendor)\n const seen = new Set<string>()\n for (const manifest of pkg.manifests) {\n if (isPrimitive(manifest.id)) {\n issues.push({ code: 'reserved', severity: 'error', ref: manifest.id, message: `\"${manifest.id}\" uses the reserved base.primitives namespace.` })\n continue\n }\n if (!manifest.id.startsWith(prefix)) {\n issues.push({ code: 'namespace', severity: 'error', ref: manifest.id, message: `\"${manifest.id}\" must be namespaced under \"${prefix}\".` })\n }\n if (!isValidComponentId(manifest.id)) {\n issues.push({ code: 'invalid-id', severity: 'error', ref: manifest.id, message: `\"${manifest.id}\" is not a valid component id.` })\n }\n if (seen.has(manifest.id)) {\n issues.push({ code: 'duplicate', severity: 'error', ref: manifest.id, message: `Duplicate component id \"${manifest.id}\".` })\n }\n seen.add(manifest.id)\n }\n\n return issues\n}\n\n/** True when a package validates with no errors. */\nexport function isComponentPackageValid(pkg: ComponentPackage): boolean {\n return !validateComponentPackage(pkg).some((i) => i.severity === 'error')\n}\n\n/**\n * Register a conforming component package into a registry (EC-130). Validates first; only registers\n * the manifests when there are no errors. Returns the validation issues either way.\n */\nexport function registerComponentPackage(registry: ComponentRegistry, pkg: ComponentPackage): ComponentPackageIssue[] {\n const issues = validateComponentPackage(pkg)\n if (!issues.some((i) => i.severity === 'error')) {\n for (const manifest of pkg.manifests) registry.register(manifest)\n }\n return issues\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-sources.js","sourceRoot":"","sources":["../../src/plugins/data-sources.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data-sources.js","sourceRoot":"","sources":["../../src/plugins/data-sources.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport type { BindingReference, JsonValue } from '@elytracms/core/project-graph'\nimport { resolveBinding } from '@elytracms/core/data-binding'\nimport type { BindingResolution, RepeaterItemContext } from '@elytracms/core/data-binding'\n\n/**\n * Data-source adapters (EC-132). The product ships three built-in source kinds (rest/cms/convex).\n * An adapter adds a *new* kind: a config schema and a `fetch` that returns a payload. Crucially the\n * adapter only produces a payload — resolution still flows through the SAME binding model\n * (`@elytracms/core/data-binding`'s `resolveBinding`), so REST, CMS, Convex, and plugin sources all use\n * identical path tokens, modes, and broken-binding issues (brief §4.6 \"data sources are uniform\").\n */\n\n/** The built-in source kinds an adapter must not shadow. */\nexport const BUILTIN_SOURCE_KINDS = ['rest', 'cms', 'convex'] as const\n\n/** A data-source adapter for a new source kind (EC-132). */\nexport interface DataSourceAdapter<C extends JsonValue = JsonValue> {\n /** Namespaced source kind, e.g. `plugin.graphql`. Must contain a dot; must not shadow a built-in. */\n kind: string\n title: string\n description?: string\n /** Validates a source's per-kind config. */\n configSchema: z.ZodType<C>\n /** Fetch the payload for a configured source. The result feeds the shared payload store. */\n fetch: (config: C, ctx?: { signal?: AbortSignal }) => Promise<JsonValue>\n /** A short human description of a configured source (for the source list). */\n describe?: (config: C) => string\n}\n\n/**\n * Define a data-source adapter with full type-checking of its `configSchema`/`fetch`/`describe`\n * against the config type `C`, then widen it to the registry's element type (the standard\n * heterogeneous-registry erasure).\n */\nexport function defineDataSourceAdapter<C extends JsonValue>(adapter: DataSourceAdapter<C>): DataSourceAdapter {\n return adapter as unknown as DataSourceAdapter\n}\n\n/** A source configured against an adapter kind (parallel to the built-in `DataSource` envelope). */\nexport interface PluggableSource {\n kind: string\n id: string\n label: string\n config: JsonValue\n}\n\n/** A structured registration issue for the adapter registry. */\nexport interface DataSourceRegistryIssue {\n code: 'reserved' | 'namespace' | 'duplicate'\n message: string\n ref: string\n}\n\n/** True when a source kind follows the namespace rules (dotted, not a built-in). */\nexport function isValidSourceKind(kind: string): boolean {\n if ((BUILTIN_SOURCE_KINDS as readonly string[]).includes(kind)) return false\n return /^[a-z][a-z0-9]*\\.[a-z][a-z0-9]*$/i.test(kind)\n}\n\n/** Registry of data-source adapters keyed by kind. */\nexport class DataSourceAdapterRegistry {\n private readonly byKind = new Map<string, DataSourceAdapter>()\n readonly issues: DataSourceRegistryIssue[] = []\n\n constructor(adapters: Iterable<DataSourceAdapter> = []) {\n for (const adapter of adapters) this.register(adapter)\n }\n\n register(adapter: DataSourceAdapter): void {\n if ((BUILTIN_SOURCE_KINDS as readonly string[]).includes(adapter.kind)) {\n this.issues.push({ code: 'reserved', ref: adapter.kind, message: `Source kind \"${adapter.kind}\" shadows a built-in kind.` })\n return\n }\n if (!isValidSourceKind(adapter.kind)) {\n this.issues.push({ code: 'namespace', ref: adapter.kind, message: `Source kind \"${adapter.kind}\" must be namespaced (e.g. \"plugin.graphql\").` })\n return\n }\n if (this.byKind.has(adapter.kind)) {\n this.issues.push({ code: 'duplicate', ref: adapter.kind, message: `Duplicate source kind \"${adapter.kind}\" — keeping the first registration.` })\n return\n }\n this.byKind.set(adapter.kind, adapter as DataSourceAdapter)\n }\n\n has(kind: string): boolean {\n return this.byKind.has(kind)\n }\n\n get(kind: string): DataSourceAdapter | undefined {\n return this.byKind.get(kind)\n }\n\n list(): DataSourceAdapter[] {\n return [...this.byKind.values()]\n }\n\n get size(): number {\n return this.byKind.size\n }\n\n /** Validate a source's config against its adapter. Returns issues; never throws. */\n validateConfig(source: PluggableSource): { code: string; message: string }[] {\n const adapter = this.byKind.get(source.kind)\n if (!adapter) return [{ code: 'unknown-source-kind', message: `No adapter registered for source kind \"${source.kind}\".` }]\n const parsed = adapter.configSchema.safeParse(source.config)\n if (parsed.success) return []\n return parsed.error.issues.map((i) => ({ code: 'invalid-config', message: `${i.path.join('.') || 'config'}: ${i.message}` }))\n }\n\n /**\n * Build a payload store by running each adapter source's `fetch` (EC-132). The output is keyed by\n * source id — exactly the shape `resolveBinding` consumes — so plugin sources slot into the\n * shared binding model with no special-casing. Unknown kinds and invalid configs are skipped.\n */\n async buildPayloads(\n sources: readonly PluggableSource[],\n ctx?: { signal?: AbortSignal },\n ): Promise<Record<string, JsonValue>> {\n const payloads: Record<string, JsonValue> = {}\n for (const source of sources) {\n const adapter = this.byKind.get(source.kind)\n if (!adapter) continue\n const parsed = adapter.configSchema.safeParse(source.config)\n if (!parsed.success) continue\n payloads[source.id] = await adapter.fetch(parsed.data, ctx)\n }\n return payloads\n }\n}\n\n/**\n * Resolve a binding against adapter-produced payloads using the shared binding model (EC-132).\n * This is the proof that a new source kind is a first-class citizen: the very same `resolveBinding`\n * that serves rest/cms/convex resolves a plugin source's payload too.\n */\nexport async function resolveViaAdapters(\n ref: BindingReference,\n sources: readonly PluggableSource[],\n registry: DataSourceAdapterRegistry,\n itemContext?: RepeaterItemContext,\n): Promise<BindingResolution> {\n const payloads = await registry.buildPayloads(sources)\n return resolveBinding(ref, { payloads }, itemContext)\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"examples.js","sourceRoot":"","sources":["../../src/plugins/examples.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"examples.js","sourceRoot":"","sources":["../../src/plugins/examples.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { defineComponent } from '@elytracms/core/component-registry'\nimport { jsonValueSchema } from '@elytracms/core/project-graph'\nimport type { JsonValue } from '@elytracms/core/project-graph'\nimport type { GeneratedFile } from '@elytracms/core/export-sync'\nimport { auroraMarketingKit, northwindDocsKit } from '@elytracms/core/starter-kits'\nimport { defineFieldType } from './field-types'\nimport type { FieldTypePlugin } from './field-types'\nimport { defineDataSourceAdapter } from './data-sources'\nimport type { DataSourceAdapter } from './data-sources'\nimport { MemoryAssetStorage } from './asset-storage'\nimport { jsonBundleTarget } from './export-targets'\nimport type { ComponentPackage } from './component-package'\nimport type { ProjectTemplate } from './templates'\nimport type { Plugin } from './plugin'\nimport { ExtensionRegistry } from './marketplace'\n\n/**\n * Reference example extensions (the \"example plugin/adapter\" deliverable across EC-130–137). Every\n * one is deterministic — no clocks, no randomness, no network in the defaults — so the studio and\n * tests can reproduce identical state from these fixtures.\n */\n\n// --- Field-type plugins (EC-131) --------------------------------------------\n\nconst HEX = /^#[0-9a-fA-F]{6}$/\nconst SLUG = /^[a-z0-9]+(?:-[a-z0-9]+)*$/\n\n/** A hex color field type. */\nexport const colorFieldType: FieldTypePlugin = defineFieldType<string>({\n kind: 'plugin.color',\n title: 'Color',\n description: 'A hex color value (#rrggbb).',\n schema: z.string().regex(HEX),\n defaultValue: '#5b8cff',\n control: { kind: 'color' },\n format: (value) => value.toUpperCase(),\n})\n\n/** An integer star-rating (0–5) field type. */\nexport const ratingFieldType: FieldTypePlugin = defineFieldType<number>({\n kind: 'plugin.rating',\n title: 'Rating',\n description: 'An integer star rating from 0 to 5.',\n schema: z.number().int().min(0).max(5),\n defaultValue: 0,\n control: { kind: 'number', placeholder: '0–5' },\n format: (value) => '★'.repeat(value) + '☆'.repeat(5 - value),\n})\n\n/** A URL-safe slug field type, with extra format validation. */\nexport const slugFieldType: FieldTypePlugin = defineFieldType<string>({\n kind: 'plugin.slug',\n title: 'Slug',\n description: 'A URL-safe lowercase slug.',\n schema: z.string().regex(SLUG),\n defaultValue: 'untitled',\n control: { kind: 'text', placeholder: 'my-post-slug' },\n validate: (value, ctx) => {\n if (typeof value !== 'string') return [{ code: 'type', message: 'Expected a string.' }]\n if (value.length === 0) return ctx.required ? [{ code: 'required', message: 'Slug is required.' }] : []\n return SLUG.test(value) ? [] : [{ code: 'format', message: 'Use lowercase letters, numbers, and dashes only.' }]\n },\n})\n\n// --- Data-source adapters (EC-132) ------------------------------------------\n\n/** A static inline-JSON source — the simplest possible adapter, fully deterministic. */\nexport const staticDataSourceAdapter: DataSourceAdapter = defineDataSourceAdapter<{ data: JsonValue }>({\n kind: 'plugin.static',\n title: 'Static JSON',\n description: 'Returns an inline JSON payload — handy for prototypes and fixtures.',\n configSchema: z.object({ data: jsonValueSchema }),\n fetch: async (config) => config.data,\n describe: () => 'inline JSON',\n})\n\n/** A transport function a GraphQL adapter calls (injected so the adapter stays testable). */\nexport type GraphqlTransport = (req: {\n endpoint: string\n query: string\n variables: Record<string, JsonValue>\n}) => Promise<JsonValue>\n\n/**\n * Build a GraphQL data-source adapter (example, EC-132). The network transport is injected, so the\n * adapter is deterministic in tests and provider-neutral in production. Its payload resolves\n * through the shared binding model like any built-in source.\n */\nexport function createGraphqlAdapter(transport: GraphqlTransport): DataSourceAdapter {\n return defineDataSourceAdapter<{ endpoint: string; query: string; variables?: Record<string, JsonValue> }>({\n kind: 'plugin.graphql',\n title: 'GraphQL',\n description: 'Queries a GraphQL endpoint; the response is the source payload.',\n configSchema: z.object({\n endpoint: z.string().url(),\n query: z.string().min(1),\n variables: z.record(z.string(), jsonValueSchema).optional(),\n }),\n fetch: async (config) => transport({ endpoint: config.endpoint, query: config.query, variables: config.variables ?? {} }),\n describe: (config) => config.endpoint,\n })\n}\n\n// --- Component package (EC-130) ---------------------------------------------\n\nconst acmeHero = defineComponent({\n id: 'project.acme.Hero',\n namespace: 'project',\n title: 'Acme Hero',\n category: 'marketing',\n props: {\n headline: { type: 'text', context: 'prop', default: 'Build faster with Acme', form: { label: 'Headline' } },\n subhead: { type: 'text', context: 'prop', default: 'Drop-in marketing blocks.', form: { label: 'Subhead', control: 'textarea' } },\n },\n slots: [{ name: 'children', label: 'Actions' }],\n})\n\nconst acmePricing = defineComponent({\n id: 'project.acme.PricingTable',\n namespace: 'project',\n title: 'Acme Pricing Table',\n category: 'marketing',\n props: {\n highlighted: { type: 'boolean', context: 'prop', default: false, form: { label: 'Highlighted' } },\n },\n slots: [{ name: 'children', label: 'Tiers' }],\n})\n\n/** A conforming component package under the `acme` vendor namespace (EC-130). */\nexport const acmeBlocksPackage: ComponentPackage = {\n name: '@acme/marketing-blocks',\n version: '1.2.0',\n vendor: 'acme',\n description: 'Marketing blocks (hero, pricing) by Acme.',\n author: 'Acme Inc.',\n manifests: [acmeHero, acmePricing],\n}\n\nconst labsSecret = defineComponent({\n id: 'project.labs.ExperimentBanner',\n namespace: 'project',\n title: 'Experiment Banner',\n category: 'internal',\n props: { flag: { type: 'text', context: 'prop', default: 'beta', form: { label: 'Flag' } } },\n slots: [],\n})\n\n/** A private component package (used by the private-registry example). */\nexport const labsInternalPackage: ComponentPackage = {\n name: '@labs/internal-blocks',\n version: '0.3.0',\n vendor: 'labs',\n description: 'Internal experiment blocks.',\n author: 'Acme Labs',\n manifests: [labsSecret],\n}\n\n// --- Project templates (EC-136) ---------------------------------------------\n\n/** A community marketing template wrapping the Aurora starter kit. */\nexport const auroraTemplate: ProjectTemplate = {\n id: 'tmpl.acme.aurora',\n name: 'Aurora Marketing (community)',\n version: '1.0.0',\n author: 'Acme Inc.',\n source: 'community',\n tags: ['marketing', 'landing'],\n kit: auroraMarketingKit,\n}\n\n/** A community docs template wrapping the Northwind starter kit. */\nexport const northwindTemplate: ProjectTemplate = {\n id: 'tmpl.acme.northwind',\n name: 'Northwind Docs (community)',\n version: '1.0.0',\n author: 'Acme Inc.',\n source: 'community',\n tags: ['docs', 'content'],\n kit: northwindDocsKit,\n}\n\n// --- Hooks (EC-135) ---------------------------------------------------------\n\n/** A hook that stamps a notice file onto an export's file set (demonstrates a transform hook). */\nfunction stampExportNotice(payload: unknown): unknown {\n if (!Array.isArray(payload)) return payload\n const files = payload as GeneratedFile[]\n return [...files, { path: 'ACME_NOTICE.txt', contents: 'Bundled with the Acme Extension Suite.' }]\n}\n\n// --- Composite plugin + marketplace (EC-137) --------------------------------\n\n/** A sampler plugin touching every extensibility surface. */\nexport const acmeSuitePlugin: Plugin = {\n id: 'plugin.acme.suite',\n name: 'Acme Extension Suite',\n version: '1.0.0',\n description: 'Marketing blocks, custom field types, a static data source, in-memory storage, a headless export target, templates, and an export hook.',\n author: 'Acme Inc.',\n components: acmeBlocksPackage,\n fieldTypes: [colorFieldType, ratingFieldType, slugFieldType],\n dataSources: [staticDataSourceAdapter],\n assetStorage: [new MemoryAssetStorage()],\n exportTargets: [jsonBundleTarget],\n templates: [auroraTemplate, northwindTemplate],\n hooks: [{ point: 'export:afterGenerate', id: 'acme.stamp', order: 10, handler: stampExportNotice }],\n}\n\n/** A single-surface plugin: just the color field type. */\nexport const colorFieldPlugin: Plugin = {\n id: 'plugin.color-field',\n name: 'Color Field',\n version: '1.0.0',\n description: 'Adds a hex color field type to the CMS.',\n author: 'Community',\n fieldTypes: [colorFieldType],\n}\n\n/** A private plugin available only behind the private registry token. */\nexport const labsInternalPlugin: Plugin = {\n id: 'plugin.labs.internal',\n name: 'Acme Labs Internal Blocks',\n version: '0.3.0',\n description: 'Experimental internal components — private.',\n author: 'Acme Labs',\n components: labsInternalPackage,\n}\n\n/** The public marketplace catalogue. */\nexport const publicMarketplace = new ExtensionRegistry(\n { id: 'elytra-public', label: 'Elytra Public Marketplace', mode: 'public' },\n [\n { id: 'plugin.acme.suite', kind: 'plugin', name: 'Acme Extension Suite', version: '1.0.0', description: acmeSuitePlugin.description, author: 'Acme Inc.', tags: ['marketing', 'fields', 'export'], plugin: acmeSuitePlugin },\n { id: 'plugin.color-field', kind: 'field-type', name: 'Color Field', version: '1.0.0', description: 'A hex color field type.', author: 'Community', tags: ['cms', 'field'], plugin: colorFieldPlugin },\n ],\n)\n\n/** The token granting access to the private registry. */\nexport const PRIVATE_REGISTRY_TOKEN = 'acme-internal-token'\n\n/** A private registry, gated behind {@link PRIVATE_REGISTRY_TOKEN}. */\nexport const privateMarketplace = new ExtensionRegistry(\n { id: 'acme-private', label: 'Acme Private Registry', mode: 'private', accessTokens: [PRIVATE_REGISTRY_TOKEN] },\n [\n { id: 'plugin.labs.internal', kind: 'component-package', name: 'Acme Labs Internal Blocks', version: '0.3.0', description: 'Internal experiment blocks.', author: 'Acme Labs', tags: ['internal'], plugin: labsInternalPlugin },\n ],\n)\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-targets.js","sourceRoot":"","sources":["../../src/plugins/export-targets.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"export-targets.js","sourceRoot":"","sources":["../../src/plugins/export-targets.ts"],"names":[],"mappings":"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","sourcesContent":["import { generateExport, generatedBanner, sortFiles, stableJson } from '@elytracms/core/export-sync'\nimport type { ExportInput, GeneratedFile } from '@elytracms/core/export-sync'\n\n/**\n * Export-target adapters (EC-134). Export is a pure function from the canonical model to a file set\n * (`@elytracms/core/export-sync`). A target adapter wraps one such function so the export pipeline can\n * target more than Next.js. Next.js App Router is the reference adapter; a headless JSON content\n * bundle is provided as a second target to prove the boundary is real.\n */\n\n/** An export-target adapter: a named, pure model → files generator (EC-134). */\nexport interface ExportTargetAdapter {\n /** Stable target id, e.g. `next-app-router`, `json-bundle`. */\n id: string\n title: string\n description?: string\n /** Pure: the same input always yields the same sorted file set. */\n generate: (input: ExportInput) => GeneratedFile[]\n}\n\n/**\n * The reference export target (EC-134): a native Next.js App Router app. Delegates to\n * `@elytracms/core/export-sync`'s deterministic generator — readable, diffable, ejectable output with no\n * builder-only runtime dependencies.\n */\nexport const nextAppRouterTarget: ExportTargetAdapter = {\n id: 'next-app-router',\n title: 'Next.js App Router',\n description: 'The reference target: a self-contained Next.js App Router app rendering the canonical graph.',\n generate: (input) => generateExport(input),\n}\n\n/**\n * A headless JSON content bundle target (example, EC-134). Emits just the canonical model as\n * stable JSON plus a manifest — for consumers that render the graph themselves (mobile, edge, a\n * custom runtime). Demonstrates a non-Next target on the same interface.\n */\nexport const jsonBundleTarget: ExportTargetAdapter = {\n id: 'json-bundle',\n title: 'Headless JSON bundle',\n description: 'Canonical model as stable JSON (graph, routes, collections, sources, locales) + a manifest.',\n generate: (input) =>\n sortFiles([\n { path: 'bundle/graph.json', contents: stableJson(input.graph) },\n { path: 'bundle/routes.json', contents: stableJson(input.routes) },\n { path: 'bundle/redirects.json', contents: stableJson(input.redirects) },\n { path: 'bundle/collections.json', contents: stableJson(input.collections) },\n { path: 'bundle/sources.json', contents: stableJson(input.sources) },\n { path: 'bundle/locales.json', contents: stableJson(input.localeConfig) },\n {\n path: 'bundle/manifest.json',\n contents: stableJson({\n name: input.projectName,\n slug: input.slug,\n target: 'json-bundle',\n layouts: input.graph.layouts.length,\n collections: input.collections.length,\n sources: input.sources.length,\n }),\n },\n {\n path: 'bundle/README.md',\n contents: `${generatedBanner('bundle/README.md')}\\n\\n# ${input.projectName} — headless content bundle\\n\\nThe canonical project model as stable JSON. Render it with the \\`@elytracms/runtime-renderer\\`, or any client that understands the graph format.\\n`,\n },\n ]),\n}\n\n/** A structured registration issue for the export-target registry. */\nexport interface ExportTargetRegistryIssue {\n code: 'duplicate'\n message: string\n ref: string\n}\n\n/** Registry of export-target adapters keyed by id. */\nexport class ExportTargetRegistry {\n private readonly byId = new Map<string, ExportTargetAdapter>()\n readonly issues: ExportTargetRegistryIssue[] = []\n\n constructor(targets: Iterable<ExportTargetAdapter> = []) {\n for (const target of targets) this.register(target)\n }\n\n register(target: ExportTargetAdapter): void {\n if (this.byId.has(target.id)) {\n this.issues.push({ code: 'duplicate', ref: target.id, message: `Duplicate export target \"${target.id}\" — keeping the first registration.` })\n return\n }\n this.byId.set(target.id, target)\n }\n\n has(id: string): boolean {\n return this.byId.has(id)\n }\n\n get(id: string): ExportTargetAdapter | undefined {\n return this.byId.get(id)\n }\n\n list(): ExportTargetAdapter[] {\n return [...this.byId.values()]\n }\n\n get size(): number {\n return this.byId.size\n }\n}\n\n/** A registry pre-seeded with the built-in targets (Next.js reference + JSON bundle). */\nexport function createExportTargetRegistry(): ExportTargetRegistry {\n return new ExportTargetRegistry([nextAppRouterTarget, jsonBundleTarget])\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-types.js","sourceRoot":"","sources":["../../src/plugins/field-types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"field-types.js","sourceRoot":"","sources":["../../src/plugins/field-types.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport type { JsonValue } from '@elytracms/core/project-graph'\n\n/**\n * Field-type plugins (EC-131). The CMS ships a provider-neutral catalogue of built-in field types\n * (text/number/boolean/date/select/richText/relation/asset). A field-type plugin adds a *new*\n * type: a value schema, a default, an editor control descriptor, and optional extra validation and\n * display formatting. Registration is namespaced (a plugin kind must contain a dot and must not\n * shadow a built-in), validation is first-class (issues, never throws), and rendering is driven by\n * a control descriptor the Builder/CMS editor maps to a named control.\n */\n\n/** The provider-neutral built-in field types a plugin must not shadow. */\nexport const BUILTIN_FIELD_TYPES = [\n 'text',\n 'number',\n 'boolean',\n 'date',\n 'select',\n 'richText',\n 'relation',\n 'asset',\n] as const\n\n/** A structured validation issue from a field-type plugin. Never thrown. */\nexport interface FieldTypeIssue {\n code: string\n message: string\n path?: string\n}\n\n/** Context passed to a field-type plugin's `validate`. */\nexport interface FieldTypeContext {\n /** Whether the field is required (a missing value is an error). */\n required: boolean\n /** The field's declarative constraints (min/max/pattern…) when relevant. */\n constraints?: Record<string, JsonValue>\n}\n\n/** How the Builder/CMS editor renders an input for a field-type plugin. */\nexport interface FieldControlSpec {\n /** A known control, or `custom` to defer to a registered component. */\n kind: 'text' | 'textarea' | 'number' | 'boolean' | 'select' | 'color' | 'json' | 'custom'\n /** For `custom`: the id of the control component to render. */\n component?: string\n placeholder?: string\n /** Static options for `select`-style controls. */\n options?: { label: string; value: JsonValue }[]\n}\n\n/** A field-type plugin (EC-131). */\nexport interface FieldTypePlugin<T extends JsonValue = JsonValue> {\n /** Namespaced field-type key, e.g. `plugin.color`. Must contain a dot; must not shadow a built-in. */\n kind: string\n title: string\n description?: string\n /** Validates a stored value of this type. */\n schema: z.ZodType<T>\n /** Default value for a new field of this type. */\n defaultValue: T\n /** Editor control descriptor. */\n control: FieldControlSpec\n /** Extra validation beyond the schema (range, format…). Returns issues; never throws. */\n validate?: (value: unknown, ctx: FieldTypeContext) => FieldTypeIssue[]\n /** Render a stored value to a short display string (table cells, previews). */\n format?: (value: T) => string\n}\n\n/**\n * Define a field-type plugin with full type-checking of its `defaultValue`/`validate`/`format`\n * against the value type `T`, then widen it to the registry's element type. The widening is the\n * standard heterogeneous-registry erasure: the registry holds plugins of many value types, which\n * the invariant generic would otherwise reject.\n */\nexport function defineFieldType<T extends JsonValue>(plugin: FieldTypePlugin<T>): FieldTypePlugin {\n return plugin as unknown as FieldTypePlugin\n}\n\n/** A structured registration/validation issue for the field-type registry. */\nexport interface FieldTypeRegistryIssue {\n code: 'reserved' | 'namespace' | 'duplicate'\n message: string\n ref: string\n}\n\n/** True when a field-type kind follows the namespace rules (dotted, not a built-in). */\nexport function isValidFieldTypeKind(kind: string): boolean {\n if ((BUILTIN_FIELD_TYPES as readonly string[]).includes(kind)) return false\n return /^[a-z][a-z0-9]*\\.[a-z][a-z0-9]*$/i.test(kind)\n}\n\n/** Registry of field-type plugins. Construction de-duplicates and validates; lookups are O(1). */\nexport class FieldTypeRegistry {\n private readonly byKind = new Map<string, FieldTypePlugin>()\n readonly issues: FieldTypeRegistryIssue[] = []\n\n constructor(plugins: Iterable<FieldTypePlugin> = []) {\n for (const plugin of plugins) this.register(plugin)\n }\n\n register(plugin: FieldTypePlugin): void {\n if ((BUILTIN_FIELD_TYPES as readonly string[]).includes(plugin.kind)) {\n this.issues.push({ code: 'reserved', ref: plugin.kind, message: `Field type \"${plugin.kind}\" shadows a built-in type.` })\n return\n }\n if (!isValidFieldTypeKind(plugin.kind)) {\n this.issues.push({ code: 'namespace', ref: plugin.kind, message: `Field type \"${plugin.kind}\" must be namespaced (e.g. \"plugin.color\").` })\n return\n }\n if (this.byKind.has(plugin.kind)) {\n this.issues.push({ code: 'duplicate', ref: plugin.kind, message: `Duplicate field type \"${plugin.kind}\" — keeping the first registration.` })\n return\n }\n this.byKind.set(plugin.kind, plugin as FieldTypePlugin)\n }\n\n has(kind: string): boolean {\n return this.byKind.has(kind)\n }\n\n get(kind: string): FieldTypePlugin | undefined {\n return this.byKind.get(kind)\n }\n\n list(): FieldTypePlugin[] {\n return [...this.byKind.values()]\n }\n\n get size(): number {\n return this.byKind.size\n }\n\n /**\n * Validate a value against a registered field type (EC-131): the value schema first, then the\n * plugin's extra `validate`. An unknown kind is itself an issue. Never throws.\n */\n validateValue(kind: string, value: unknown, ctx: FieldTypeContext = { required: false }): FieldTypeIssue[] {\n const plugin = this.byKind.get(kind)\n if (!plugin) return [{ code: 'unknown-field-type', message: `No field type registered for \"${kind}\".` }]\n if (value === undefined || value === null) {\n return ctx.required ? [{ code: 'required', message: `${plugin.title} is required.` }] : []\n }\n const parsed = plugin.schema.safeParse(value)\n if (!parsed.success) {\n return parsed.error.issues.map((i) => ({\n code: 'invalid-value',\n message: i.message,\n ...(i.path.length ? { path: i.path.join('.') } : {}),\n }))\n }\n return plugin.validate?.(value, ctx) ?? []\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/plugins/hooks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/plugins/hooks.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Hook system (EC-135). A deterministic, extensible lifecycle bus: plugins register handlers at\n * named points, and the host runs each point as a transform chain — every handler receives the\n * current payload and may return a replacement, threading the result to the next handler. Ordering\n * is fully deterministic: handlers run by ascending `order`, ties broken by registration sequence\n * (never insertion-hash or wall-clock), so a given set of plugins always produces the same result.\n */\n\n/**\n * A hook handler observes or transforms a payload. Returning a value replaces the threaded\n * payload for downstream handlers; returning `undefined`/`void` leaves it unchanged. Handlers may\n * be async — use {@link HookBus.runAsync} to await them.\n */\nexport type HookHandler<T> = (payload: T) => T | void | Promise<T | void>\n\n/** Well-known lifecycle points the studio and packages fire. Plugins may also define their own. */\nexport const HOOK_POINTS = [\n 'graph:beforeValidate',\n 'graph:afterValidate',\n 'document:beforeSave',\n 'document:afterSave',\n 'export:beforeGenerate',\n 'export:afterGenerate',\n 'plugin:installed',\n] as const\nexport type HookPoint = (typeof HOOK_POINTS)[number]\n\n/** Options when registering a handler. */\nexport interface HookOptions {\n /** Lower runs first. Defaults to `0`. */\n order?: number\n /** Optional stable id, for traceability and targeted removal. */\n id?: string\n /** The plugin that registered the handler (set by the host). */\n plugin?: string\n}\n\ninterface Tap {\n order: number\n seq: number\n handler: HookHandler<unknown>\n id?: string\n plugin?: string\n}\n\n/** A registered tap, as surfaced for inspection (e.g. the Extensions UI). */\nexport interface HookTapInfo {\n point: string\n order: number\n id?: string\n plugin?: string\n}\n\nconst isThenable = (v: unknown): v is Promise<unknown> =>\n typeof v === 'object' && v !== null && typeof (v as { then?: unknown }).then === 'function'\n\n/**\n * A deterministic hook bus. Synchronous (`run`) and async (`runAsync`) execution both thread the\n * payload through handlers ordered by `(order, registration-sequence)`. Never throws on an empty\n * point — running an unregistered point returns the payload unchanged.\n */\nexport class HookBus {\n private readonly taps = new Map<string, Tap[]>()\n private seq = 0\n\n /** Register a handler at a point. Returns an unsubscribe function. */\n on<T>(point: string, handler: HookHandler<T>, opts: HookOptions = {}): () => void {\n const list = this.taps.get(point) ?? []\n const tap: Tap = {\n order: opts.order ?? 0,\n seq: this.seq++,\n handler: handler as HookHandler<unknown>,\n ...(opts.id !== undefined ? { id: opts.id } : {}),\n ...(opts.plugin !== undefined ? { plugin: opts.plugin } : {}),\n }\n list.push(tap)\n this.taps.set(point, list)\n return () => {\n const arr = this.taps.get(point)\n if (arr) this.taps.set(point, arr.filter((t) => t !== tap))\n }\n }\n\n /** Handlers at a point in deterministic run order. */\n private ordered(point: string): Tap[] {\n return [...(this.taps.get(point) ?? [])].sort((a, b) => a.order - b.order || a.seq - b.seq)\n }\n\n /**\n * Run a point synchronously, threading `payload` through each handler. A handler that returns a\n * Promise is skipped for threading (use {@link runAsync} for async handlers) but still fires.\n */\n run<T>(point: string, payload: T): T {\n let current = payload\n for (const tap of this.ordered(point)) {\n const next = tap.handler(current as unknown)\n if (next !== undefined && !isThenable(next)) current = next as T\n }\n return current\n }\n\n /** Run a point asynchronously, awaiting each handler in deterministic order. */\n async runAsync<T>(point: string, payload: T): Promise<T> {\n let current = payload\n for (const tap of this.ordered(point)) {\n const next = await tap.handler(current as unknown)\n if (next !== undefined) current = next as T\n }\n return current\n }\n\n /** All points that have at least one handler, sorted. */\n points(): string[] {\n return [...this.taps.keys()].filter((p) => (this.taps.get(p)?.length ?? 0) > 0).sort()\n }\n\n /** Number of handlers registered at a point. */\n count(point: string): number {\n return this.taps.get(point)?.length ?? 0\n }\n\n /** Inspect registered taps at a point (deterministic order). */\n list(point: string): HookTapInfo[] {\n return this.ordered(point).map((t) => ({\n point,\n order: t.order,\n ...(t.id !== undefined ? { id: t.id } : {}),\n ...(t.plugin !== undefined ? { plugin: t.plugin } : {}),\n }))\n }\n\n /** Inspect every registered tap across all points (deterministic order). */\n all(): HookTapInfo[] {\n return this.points().flatMap((p) => this.list(p))\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,yBAAyB,CAAA;AAEhD,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,yBAAyB,CAAA;AAEhD,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA","sourcesContent":["/**\n * @elytracms/plugins — the extensibility layer (brief §4.10, §11, Phase 11). One coherent plugin\n * model over every extension surface:\n *\n * - Hook system (EC-135) — deterministic lifecycle bus.\n * - Field-type plugins (EC-131) — new CMS field types behind a validated interface.\n * - Data-source adapters (EC-132) — new source kinds that resolve through the shared binding model.\n * - Asset-storage adapters (EC-133) — pluggable blob backends.\n * - Export-target adapters (EC-134) — pluggable export pipelines; Next.js is the reference target.\n * - Component package conventions (EC-130) — namespaced, versioned, distributable components.\n * - Project templates (EC-136) — third-party seeds validated like first-party kits.\n * - Marketplace / private registry (EC-137) — publish + install, public and private.\n *\n * Everything is deterministic and validation-first: registration and install collect structured\n * issues rather than throwing, so broken extensions surface visibly instead of crashing.\n */\nexport const PACKAGE = '@elytracms/core/plugins'\n\nexport * from './hooks'\nexport * from './field-types'\nexport * from './data-sources'\nexport * from './asset-storage'\nexport * from './export-targets'\nexport * from './component-package'\nexport * from './templates'\nexport * from './plugin'\nexport * from './marketplace'\nexport * from './examples'\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/plugins/marketplace.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/plugins/marketplace.ts"],"names":[],"mappings":"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","sourcesContent":["import { PluginHost } from './plugin'\nimport type { Plugin, PluginIssue } from './plugin'\n\n/**\n * Marketplace / private registry (EC-137). A registry is a named catalogue of installable\n * extensions (each modelled uniformly as a {@link Plugin}, so a single field type and a full\n * bundle install the same way). Registries are `public` or `private`; private ones gate access\n * behind tokens. A {@link MarketplaceClient} federates several registries, searches the ones it can\n * access, and installs a listing into a {@link PluginHost} — the consume flow.\n */\n\n/** What a marketplace listing contributes (for filtering / badges). */\nexport type ExtensionKind =\n | 'plugin'\n | 'component-package'\n | 'field-type'\n | 'data-source'\n | 'asset-storage'\n | 'export-target'\n | 'template'\n\n/** A published, installable extension. */\nexport interface ExtensionListing {\n id: string\n kind: ExtensionKind\n name: string\n version: string\n description?: string\n author?: string\n tags?: string[]\n /** The installable bundle. Single-surface extensions are plugins with one populated field. */\n plugin: Plugin\n}\n\nexport interface RegistryConfig {\n id: string\n label: string\n mode: 'public' | 'private'\n /** For `private` registries: tokens that grant read/install access. */\n accessTokens?: readonly string[]\n}\n\n/** Derive the listing kind from a plugin's populated surfaces (a multi-surface plugin → 'plugin'). */\nexport function inferExtensionKind(plugin: Plugin): ExtensionKind {\n const surfaces: ExtensionKind[] = []\n if (plugin.components) surfaces.push('component-package')\n if (plugin.fieldTypes?.length) surfaces.push('field-type')\n if (plugin.dataSources?.length) surfaces.push('data-source')\n if (plugin.assetStorage?.length) surfaces.push('asset-storage')\n if (plugin.exportTargets?.length) surfaces.push('export-target')\n if (plugin.templates?.length) surfaces.push('template')\n return surfaces.length === 1 ? surfaces[0]! : 'plugin'\n}\n\nexport interface ListingFilter {\n kind?: ExtensionKind\n /** Case-insensitive substring over name / description / tags / author. */\n query?: string\n}\n\n/** A named catalogue of installable extensions (public or private). */\nexport class ExtensionRegistry {\n readonly id: string\n readonly label: string\n readonly mode: 'public' | 'private'\n private readonly accessTokens: ReadonlySet<string>\n private readonly listings = new Map<string, ExtensionListing>()\n\n constructor(config: RegistryConfig, listings: Iterable<ExtensionListing> = []) {\n this.id = config.id\n this.label = config.label\n this.mode = config.mode\n this.accessTokens = new Set(config.accessTokens ?? [])\n for (const listing of listings) this.publish(listing)\n }\n\n /** Publish (or replace) a listing. */\n publish(listing: ExtensionListing): void {\n this.listings.set(listing.id, listing)\n }\n\n /** Whether a caller with `token` may read/install from this registry. */\n canAccess(token?: string): boolean {\n if (this.mode === 'public') return true\n return token !== undefined && this.accessTokens.has(token)\n }\n\n get(id: string): ExtensionListing | undefined {\n return this.listings.get(id)\n }\n\n has(id: string): boolean {\n return this.listings.has(id)\n }\n\n list(filter: ListingFilter = {}): ExtensionListing[] {\n const q = filter.query?.toLowerCase()\n return [...this.listings.values()]\n .filter((l) => {\n if (filter.kind && l.kind !== filter.kind) return false\n if (q) {\n const hay = `${l.name} ${l.description ?? ''} ${(l.tags ?? []).join(' ')} ${l.author ?? ''}`.toLowerCase()\n if (!hay.includes(q)) return false\n }\n return true\n })\n .sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))\n }\n\n get size(): number {\n return this.listings.size\n }\n}\n\n/** The reason an install was blocked (distinct from validation failures). */\nexport type InstallBlockedReason = 'not-found' | 'access-denied'\n\nexport interface MarketplaceInstallResult {\n ok: boolean\n listingId: string\n /** The registry the listing was installed from, when found+accessible. */\n registryId?: string\n /** Why a non-ok install was blocked before validation, if applicable. */\n blocked?: InstallBlockedReason\n /** Validation/registration issues from the host install (when it ran). */\n issues: PluginIssue[]\n}\n\n/** A federated marketplace client over several registries, with per-registry credentials (EC-137). */\nexport class MarketplaceClient {\n private readonly registries: ExtensionRegistry[]\n private readonly credentials: Record<string, string>\n\n constructor(registries: ExtensionRegistry[], credentials: Record<string, string> = {}) {\n this.registries = registries\n this.credentials = credentials\n }\n\n /** The registries this client can access with its current credentials. */\n accessibleRegistries(): ExtensionRegistry[] {\n return this.registries.filter((r) => r.canAccess(this.credentials[r.id]))\n }\n\n /** Search across accessible registries (private ones the client lacks tokens for are excluded). */\n search(filter: ListingFilter = {}): { registryId: string; listing: ExtensionListing }[] {\n return this.accessibleRegistries().flatMap((r) => r.list(filter).map((listing) => ({ registryId: r.id, listing })))\n }\n\n /** Resolve a listing by id across accessible registries (first match wins). */\n find(listingId: string): { registry: ExtensionRegistry; listing: ExtensionListing } | undefined {\n for (const registry of this.accessibleRegistries()) {\n const listing = registry.get(listingId)\n if (listing) return { registry, listing }\n }\n return undefined\n }\n\n /**\n * Install a listing into a host (EC-137): locate it in an accessible registry (honoring\n * public/private access), then run `host.install`. A missing listing, or one only present in a\n * registry the client cannot access, is `blocked` — never a throw.\n */\n install(host: PluginHost, listingId: string): MarketplaceInstallResult {\n const found = this.find(listingId)\n if (!found) {\n // Distinguish \"exists but no access\" from \"does not exist anywhere\".\n const existsPrivately = this.registries.some((r) => r.has(listingId))\n return { ok: false, listingId, blocked: existsPrivately ? 'access-denied' : 'not-found', issues: [] }\n }\n const result = host.install(found.listing.plugin)\n return { ok: result.ok, listingId, registryId: found.registry.id, issues: result.issues }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugins/plugin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugins/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAEtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAiF9D,0FAA0F;AAC1F,MAAM,OAAO,UAAU;IACZ,UAAU,CAAmB;IAC7B,UAAU,GAAG,IAAI,iBAAiB,EAAE,CAAA;IACpC,WAAW,GAAG,IAAI,yBAAyB,EAAE,CAAA;IAC7C,YAAY,GAAG,IAAI,oBAAoB,EAAE,CAAA;IACzC,aAAa,GAAG,IAAI,oBAAoB,EAAE,CAAA;IAC1C,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAA;IAClC,KAAK,GAAG,IAAI,OAAO,EAAE,CAAA;IACb,SAAS,GAAsB,EAAE,CAAA;IAElD,YAAY,UAA6B,EAAE;QACzC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,iBAAiB,EAAE,CAAA;IACjE,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,MAAc;QACpB,MAAM,MAAM,GAAkB,EAAE,CAAA;QAChC,MAAM,WAAW,GAAmC;YAClD,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,aAAa,EAAE,CAAC;YAChB,SAAS,EAAE,CAAC;YACZ,KAAK,EAAE,CAAC;SACT,CAAA;QAED,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,wBAAwB,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;YAC9E,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;YACzI,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;gBAAE,WAAW,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAA;QACjH,CAAC;QAED,2FAA2F;QAC3F,2FAA2F;QAC3F,+EAA+E;QAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAA;QAC7C,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAA;YACnC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;YAC5B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,MAAM;gBAAE,WAAW,CAAC,UAAU,EAAE,CAAA;QAC7D,CAAC;QACD,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;QAE3F,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAA;QAC9C,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;YACpC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;YAC7B,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,MAAM;gBAAE,WAAW,CAAC,WAAW,EAAE,CAAA;QAC/D,CAAC;QACD,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;QAE7F,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAA;QACpD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAA;YACrC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YACnC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,MAAM;gBAAE,WAAW,CAAC,YAAY,EAAE,CAAA;QACjE,CAAC;QACD,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAA;QAEpG,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAA;QACpD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAA;YACtC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;YACnC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,MAAM;gBAAE,WAAW,CAAC,aAAa,EAAE,CAAA;QACnE,CAAC;QACD,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;QAErG,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAA;QAClD,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAA;YAClC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;YACjC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,MAAM;gBAAE,WAAW,CAAC,SAAS,EAAE,CAAA;QAC3D,CAAC;QACD,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAA;QAE9F,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;YAC7K,WAAW,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;QAED,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAA;QACtD,IAAI,EAAE,EAAE,CAAC;YACP,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAClB,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChF,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjE,WAAW;aACZ,CAAC,CAAA;YACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAA;QAC5C,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAA;IACvB,CAAC;IAED,0CAA0C;IAC1C,WAAW,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IAChD,CAAC;IAED,8DAA8D;IAC9D,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAA;IAC5B,CAAC;CACF;AAED,mGAAmG;AACnG,SAAS,kBAAkB,CACzB,MAAqB,EACrB,QAAgB,EAChB,OAA+B,EAC/B,SAAuD;IAEvD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IAC7G,CAAC;AACH,CAAC","sourcesContent":["import { ComponentRegistry } from '@elytracms/core/component-registry'\nimport { HookBus } from './hooks'\nimport type { HookHandler } from './hooks'\nimport { FieldTypeRegistry } from './field-types'\nimport type { FieldTypePlugin } from './field-types'\nimport { DataSourceAdapterRegistry } from './data-sources'\nimport type { DataSourceAdapter } from './data-sources'\nimport { AssetStorageRegistry } from './asset-storage'\nimport type { AssetStorageAdapter } from './asset-storage'\nimport { ExportTargetRegistry } from './export-targets'\nimport type { ExportTargetAdapter } from './export-targets'\nimport { TemplateRegistry } from './templates'\nimport type { ProjectTemplate } from './templates'\nimport { registerComponentPackage } from './component-package'\nimport type { ComponentPackage } from './component-package'\n\n/**\n * The plugin model + host (Phase 11). A {@link Plugin} bundles any subset of the extensibility\n * surfaces — a component package, field types, data-source/asset/export adapters, project\n * templates, and lifecycle hooks. The {@link PluginHost} composes one of every registry plus a\n * shared {@link HookBus}, and `install` wires a plugin's parts in, collecting structured issues\n * and firing the `plugin:installed` hook. This is the single coherent entry point the studio,\n * marketplace, and export pipeline extend through.\n */\n\n/** A lifecycle hook a plugin registers. */\nexport interface PluginHookRegistration {\n point: string\n handler: HookHandler<unknown>\n order?: number\n id?: string\n}\n\n/** A composable extension bundle (Phase 11). Every field is optional — a plugin can carry just one. */\nexport interface Plugin {\n id: string\n name: string\n version: string\n description?: string\n author?: string\n /** Distributable component package (EC-130). */\n components?: ComponentPackage\n /** Field-type plugins (EC-131). */\n fieldTypes?: FieldTypePlugin[]\n /** Data-source adapters (EC-132). */\n dataSources?: DataSourceAdapter[]\n /** Asset-storage adapters (EC-133). */\n assetStorage?: AssetStorageAdapter[]\n /** Export-target adapters (EC-134). */\n exportTargets?: ExportTargetAdapter[]\n /** Project templates (EC-136). */\n templates?: ProjectTemplate[]\n /** Lifecycle hooks (EC-135). */\n hooks?: PluginHookRegistration[]\n}\n\n/** A structured issue produced while installing a plugin. */\nexport interface PluginIssue {\n pluginId: string\n surface: 'components' | 'field-types' | 'data-sources' | 'asset-storage' | 'export-targets' | 'templates'\n severity: 'error' | 'warning'\n message: string\n ref?: string\n}\n\n/** The result of installing a plugin. */\nexport interface InstallResult {\n ok: boolean\n issues: PluginIssue[]\n}\n\n/** A summary of an installed plugin and what it contributed (for inspection / the Extensions UI). */\nexport interface InstalledPlugin {\n id: string\n name: string\n version: string\n description?: string\n author?: string\n contributes: {\n components: number\n fieldTypes: number\n dataSources: number\n assetStorage: number\n exportTargets: number\n templates: number\n hooks: number\n }\n}\n\nexport interface PluginHostOptions {\n /** Reuse an existing component registry (e.g. the studio's) instead of a fresh one. */\n components?: ComponentRegistry\n}\n\n/** The extensibility host: one registry per surface plus a shared hook bus (Phase 11). */\nexport class PluginHost {\n readonly components: ComponentRegistry\n readonly fieldTypes = new FieldTypeRegistry()\n readonly dataSources = new DataSourceAdapterRegistry()\n readonly assetStorage = new AssetStorageRegistry()\n readonly exportTargets = new ExportTargetRegistry()\n readonly templates = new TemplateRegistry()\n readonly hooks = new HookBus()\n private readonly installed: InstalledPlugin[] = []\n\n constructor(options: PluginHostOptions = {}) {\n this.components = options.components ?? new ComponentRegistry()\n }\n\n /**\n * Install a plugin: validate + register each surface, collecting structured issues. A surface\n * with errors is skipped (the rest still install). When no errors occur the plugin is recorded\n * and the `plugin:installed` hook fires. Never throws.\n */\n install(plugin: Plugin): InstallResult {\n const issues: PluginIssue[] = []\n const contributes: InstalledPlugin['contributes'] = {\n components: 0,\n fieldTypes: 0,\n dataSources: 0,\n assetStorage: 0,\n exportTargets: 0,\n templates: 0,\n hooks: 0,\n }\n\n if (plugin.components) {\n const pkgIssues = registerComponentPackage(this.components, plugin.components)\n for (const i of pkgIssues) {\n issues.push({ pluginId: plugin.id, surface: 'components', severity: i.severity, message: i.message, ...(i.ref ? { ref: i.ref } : {}) })\n }\n if (!pkgIssues.some((i) => i.severity === 'error')) contributes.components = plugin.components.manifests.length\n }\n\n // Registries accumulate their `issues` for the host's lifetime. Snapshot each one's length\n // before this install's registrations and forward ONLY the newly-appended slice, so issues\n // from earlier installs are never re-emitted or mis-attributed to this plugin.\n const ftStart = this.fieldTypes.issues.length\n for (const ft of plugin.fieldTypes ?? []) {\n const before = this.fieldTypes.size\n this.fieldTypes.register(ft)\n if (this.fieldTypes.size > before) contributes.fieldTypes++\n }\n pushRegistryIssues(issues, plugin.id, 'field-types', this.fieldTypes.issues.slice(ftStart))\n\n const dsStart = this.dataSources.issues.length\n for (const ds of plugin.dataSources ?? []) {\n const before = this.dataSources.size\n this.dataSources.register(ds)\n if (this.dataSources.size > before) contributes.dataSources++\n }\n pushRegistryIssues(issues, plugin.id, 'data-sources', this.dataSources.issues.slice(dsStart))\n\n const storageStart = this.assetStorage.issues.length\n for (const storage of plugin.assetStorage ?? []) {\n const before = this.assetStorage.size\n this.assetStorage.register(storage)\n if (this.assetStorage.size > before) contributes.assetStorage++\n }\n pushRegistryIssues(issues, plugin.id, 'asset-storage', this.assetStorage.issues.slice(storageStart))\n\n const targetStart = this.exportTargets.issues.length\n for (const target of plugin.exportTargets ?? []) {\n const before = this.exportTargets.size\n this.exportTargets.register(target)\n if (this.exportTargets.size > before) contributes.exportTargets++\n }\n pushRegistryIssues(issues, plugin.id, 'export-targets', this.exportTargets.issues.slice(targetStart))\n\n const templateStart = this.templates.issues.length\n for (const template of plugin.templates ?? []) {\n const before = this.templates.size\n this.templates.register(template)\n if (this.templates.size > before) contributes.templates++\n }\n pushRegistryIssues(issues, plugin.id, 'templates', this.templates.issues.slice(templateStart))\n\n for (const hook of plugin.hooks ?? []) {\n this.hooks.on(hook.point, hook.handler, { plugin: plugin.id, ...(hook.order !== undefined ? { order: hook.order } : {}), ...(hook.id !== undefined ? { id: hook.id } : {}) })\n contributes.hooks++\n }\n\n const ok = !issues.some((i) => i.severity === 'error')\n if (ok) {\n this.installed.push({\n id: plugin.id,\n name: plugin.name,\n version: plugin.version,\n ...(plugin.description !== undefined ? { description: plugin.description } : {}),\n ...(plugin.author !== undefined ? { author: plugin.author } : {}),\n contributes,\n })\n this.hooks.run('plugin:installed', plugin)\n }\n return { ok, issues }\n }\n\n /** True when a plugin id is installed. */\n isInstalled(id: string): boolean {\n return this.installed.some((p) => p.id === id)\n }\n\n /** Summaries of every installed plugin (in install order). */\n list(): InstalledPlugin[] {\n return [...this.installed]\n }\n}\n\n/** Append this install's newly-appended registry issues (the caller passes only the new slice). */\nfunction pushRegistryIssues(\n issues: PluginIssue[],\n pluginId: string,\n surface: PluginIssue['surface'],\n newIssues: readonly { message: string; ref?: string }[],\n): void {\n for (const i of newIssues) {\n issues.push({ pluginId, surface, severity: 'error', message: i.message, ...(i.ref ? { ref: i.ref } : {}) })\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/plugins/templates.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/plugins/templates.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { validateKit } from '@elytracms/core/starter-kits'\nimport type { StarterKit } from '@elytracms/core/starter-kits'\n\n/**\n * Project templates (EC-136). A project template is a third-party-authored, distributable seed: an\n * envelope (id/name/version/author/source/tags) wrapping a validated {@link StarterKit}. Templates\n * extend the starter-kit format (EC-114–121) with provenance + distribution metadata, and reuse\n * the canonical kit validation so an imported template is checked exactly like a first-party seed\n * (graph, manifests, CMS schemas, seed content) before it can create a project.\n */\n\n/** Where a template came from — drives trust UI and private/marketplace flows. */\nexport const templateSourceSchema = z.enum(['builtin', 'community', 'private'])\nexport type TemplateSource = z.infer<typeof templateSourceSchema>\n\nexport const templateMetaSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n version: z.string().regex(/^\\d+\\.\\d+\\.\\d+$/, 'must be semver (major.minor.patch)'),\n author: z.string().optional(),\n source: templateSourceSchema.default('community'),\n tags: z.array(z.string()).default([]),\n})\nexport type TemplateMeta = z.infer<typeof templateMetaSchema>\n\n/** A distributable project template (EC-136). */\nexport interface ProjectTemplate extends TemplateMeta {\n /** The seed this template instantiates. */\n kit: StarterKit\n}\n\n/** A structured validation issue for a project template. */\nexport interface TemplateIssue {\n code: 'meta' | 'kit'\n severity: 'error' | 'warning'\n message: string\n ref?: string\n}\n\n/**\n * Validate a project template before import (EC-136): the envelope, then the bundled kit via the\n * canonical `validateKit`. Returns structured issues; never throws. A template with any `error`\n * must not be imported.\n */\nexport function validateProjectTemplate(template: ProjectTemplate): TemplateIssue[] {\n const issues: TemplateIssue[] = []\n\n const meta = templateMetaSchema.safeParse(template)\n if (!meta.success) {\n for (const i of meta.error.issues) {\n issues.push({ code: 'meta', severity: 'error', message: `${i.path.join('.') || 'meta'}: ${i.message}` })\n }\n }\n\n for (const kitIssue of validateKit(template.kit)) {\n issues.push({ code: 'kit', severity: kitIssue.severity, message: kitIssue.message, ...(kitIssue.ref ? { ref: kitIssue.ref } : {}) })\n }\n\n return issues\n}\n\n/** True when a template validates with no errors. */\nexport function isProjectTemplateValid(template: ProjectTemplate): boolean {\n return !validateProjectTemplate(template).some((i) => i.severity === 'error')\n}\n\n/** A structured registration issue for the template registry. */\nexport interface TemplateRegistryIssue {\n code: 'duplicate' | 'invalid'\n message: string\n ref: string\n}\n\n/** Registry of project templates keyed by id; validates on registration. */\nexport class TemplateRegistry {\n private readonly byId = new Map<string, ProjectTemplate>()\n readonly issues: TemplateRegistryIssue[] = []\n\n constructor(templates: Iterable<ProjectTemplate> = []) {\n for (const template of templates) this.register(template)\n }\n\n register(template: ProjectTemplate): void {\n if (this.byId.has(template.id)) {\n this.issues.push({ code: 'duplicate', ref: template.id, message: `Duplicate template \"${template.id}\" — keeping the first registration.` })\n return\n }\n if (!isProjectTemplateValid(template)) {\n this.issues.push({ code: 'invalid', ref: template.id, message: `Template \"${template.id}\" failed validation and was not registered.` })\n return\n }\n this.byId.set(template.id, template)\n }\n\n has(id: string): boolean {\n return this.byId.has(id)\n }\n\n get(id: string): ProjectTemplate | undefined {\n return this.byId.get(id)\n }\n\n list(): ProjectTemplate[] {\n return [...this.byId.values()]\n }\n\n get size(): number {\n return this.byId.size\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/project-graph/binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAExC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAA;AAGnG,2EAA2E;AAC3E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,6DAA6D;IAC7D,QAAQ,EAAE,QAAQ;IAClB,kFAAkF;IAClF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,IAAI,EAAE,iBAAiB;CACxB,CAAC,CAAA;AAGF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC5C,QAAQ;IACR,QAAQ;IACR,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,KAAK;CACN,CAAC,CAAA;AAGF,iFAAiF;AACjF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,sBAAsB;IAC9B,QAAQ,EAAE,uBAAuB;IACjC,oFAAoF;IACpF,KAAK,EAAE,eAAe,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/project-graph/binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAExC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAA;AAGnG,2EAA2E;AAC3E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,6DAA6D;IAC7D,QAAQ,EAAE,QAAQ;IAClB,kFAAkF;IAClF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,IAAI,EAAE,iBAAiB;CACxB,CAAC,CAAA;AAGF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC5C,QAAQ;IACR,QAAQ;IACR,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,KAAK;CACN,CAAC,CAAA;AAGF,iFAAiF;AACjF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,sBAAsB;IAC9B,QAAQ,EAAE,uBAAuB;IACjC,oFAAoF;IACpF,KAAK,EAAE,eAAe,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAA","sourcesContent":["import { z } from 'zod'\nimport { idSchema } from './ids'\nimport { jsonValueSchema } from './json'\n\n/**\n * How a bound prop is applied. Shared by REST, CMS, and Convex sources (one uniform\n * binding model — see brief §4.6).\n * - `value` bind a primitive value\n * - `object` bind an object value\n * - `spread` spread an object's keys across the component's props\n * - `repeaterItem` resolve relative to the current repeater item context\n * - `condition` used as the source of a conditional render\n */\nexport const bindingModeSchema = z.enum(['value', 'object', 'spread', 'repeaterItem', 'condition'])\nexport type BindingMode = z.infer<typeof bindingModeSchema>\n\n/** A pointer from the graph into a data source via a stable path token. */\nexport const bindingReferenceSchema = z.object({\n /** Id of a data source (REST / CMS query / Convex query). */\n sourceId: idSchema,\n /** Stable path token (JSON Pointer / JSONPath) that survives UI label changes. */\n token: z.string().min(1),\n mode: bindingModeSchema,\n})\nexport type BindingReference = z.infer<typeof bindingReferenceSchema>\n\nexport const conditionOperatorSchema = z.enum([\n 'truthy',\n 'exists',\n 'eq',\n 'neq',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n])\nexport type ConditionOperator = z.infer<typeof conditionOperatorSchema>\n\n/** Gates whether a node renders. The left operand is resolved from a binding. */\nexport const conditionSchema = z.object({\n source: bindingReferenceSchema,\n operator: conditionOperatorSchema,\n /** Right-hand comparison value for binary operators (omitted for truthy/exists). */\n value: jsonValueSchema.optional(),\n})\nexport type Condition = z.infer<typeof conditionSchema>\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/project-graph/container.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/project-graph/container.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { DEFAULT_SLOT } from './ids'\nimport type { ComponentNode, PropValue } from './node'\nimport type { GraphPath, ValidationIssue } from './issues'\n\n/**\n * Canonical layout-container semantics (EC-161, vision §3.1 / AD-10).\n *\n * `Stack` and `Grid` are the two layout containers of the project graph. They are\n * ordinary `ComponentNode`s (componentId `base.primitives.Stack` / `base.primitives.Grid`)\n * — the registry renders them — but their *semantics* are owned here, by the graph:\n * direction, gap, alignment and columns are canonical graph values, normalization\n * (see `normalize.ts`) keeps them healthy, and malformed values surface as explicit\n * validation issues.\n *\n * Spacing values are stored as **token references** into the design-token spacing\n * scale (step names such as `'4'`), never raw CSS lengths. The scale below mirrors\n * `@elytracms/core/design-tokens` `spacingScale` (the graph package stays dependency-free,\n * so the names + CSS lengths are restated here as the canonical contract).\n */\n\n// ---------------------------------------------------------------------------\n// Container identity\n// ---------------------------------------------------------------------------\n\nexport const STACK_COMPONENT_ID = 'base.primitives.Stack'\nexport const GRID_COMPONENT_ID = 'base.primitives.Grid'\n\n/** The component ids the graph treats as layout containers (normalized, token-validated). */\nexport const LAYOUT_CONTAINER_COMPONENT_IDS: readonly string[] = [\n STACK_COMPONENT_ID,\n GRID_COMPONENT_ID,\n]\n\n/** True when a component id is a canonical layout container (`Stack`/`Grid`). */\nexport function isLayoutContainerId(componentId: string): boolean {\n return componentId === STACK_COMPONENT_ID || componentId === GRID_COMPONENT_ID\n}\n\n/** True when a node is a canonical layout container node. */\nexport function isLayoutContainerNode(node: ComponentNode): boolean {\n return isLayoutContainerId(node.componentId)\n}\n\n// ---------------------------------------------------------------------------\n// Token-bound values\n// ---------------------------------------------------------------------------\n\n/**\n * The spacing scale step names a container `gap` may reference. Mirrors the\n * `@elytracms/core/design-tokens` `spacingScale` step names — gap values are token\n * references, never CSS lengths (AD-10).\n */\nexport const SPACING_TOKEN_NAMES = ['px', '1', '2', '3', '4', '6', '8'] as const\nexport const spacingTokenNameSchema = z.enum(SPACING_TOKEN_NAMES)\nexport type SpacingTokenName = z.infer<typeof spacingTokenNameSchema>\n\n/** CSS length per spacing step — the resolution the renderer/export emit. */\nexport const SPACING_TOKEN_CSS: Record<SpacingTokenName, string> = {\n px: '1px',\n '1': '0.25rem',\n '2': '0.5rem',\n '3': '0.75rem',\n '4': '1rem',\n '6': '1.5rem',\n '8': '2rem',\n}\n\nexport function isSpacingTokenName(value: unknown): value is SpacingTokenName {\n return typeof value === 'string' && (SPACING_TOKEN_NAMES as readonly string[]).includes(value)\n}\n\n/** Resolve a spacing token name to its CSS length (undefined for unknown names). */\nexport function spacingTokenCss(name: string): string | undefined {\n return isSpacingTokenName(name) ? SPACING_TOKEN_CSS[name] : undefined\n}\n\n/**\n * Map a legacy numeric gap (pre-token graphs stored small integers, rendered as\n * `n * 4px`) onto the token scale. `0` means \"no gap\" (no token needed) and maps to\n * `null`; off-scale numbers return `undefined` (not representable as a token).\n */\nexport function spacingTokenFromLegacyGap(value: number): SpacingTokenName | null | undefined {\n if (!Number.isInteger(value) || value < 0) return undefined\n if (value === 0) return null\n const name = String(value)\n return isSpacingTokenName(name) ? name : undefined\n}\n\n/**\n * Responsive defaults (EC-163, vision §3.1 / AD-10): a `Grid`'s columns stack\n * vertically on phones **by default** — pages are responsive by construction,\n * not by editor diligence. The per-container override is an explicit opt-OUT\n * stored in the graph: `stackOnMobile: false` keeps the column tracks on\n * phones. Absence of the prop means the default (stack) — so the default\n * never needs to be written, and the override is always a visible, explicit\n * graph value.\n */\nexport const STACK_ON_MOBILE_PROP = 'stackOnMobile'\nexport const stackOnMobileSchema = z.boolean()\n\n/**\n * Whether a `Grid` node stacks its columns on mobile. `true` unless the node\n * carries the explicit static opt-out (`stackOnMobile: false`). Non-Grid nodes\n * never stack (the prop is Grid semantics). Bound or malformed values keep the\n * default — validation flags them; rendering degrades to the safe default.\n */\nexport function gridStacksOnMobile(node: ComponentNode): boolean {\n if (node.componentId !== GRID_COMPONENT_ID) return false\n const prop = node.props?.[STACK_ON_MOBILE_PROP]\n return !(prop?.kind === 'static' && prop.value === false)\n}\n\nexport const STACK_DIRECTIONS = ['vertical', 'horizontal'] as const\nexport const stackDirectionSchema = z.enum(STACK_DIRECTIONS)\nexport type StackDirection = z.infer<typeof stackDirectionSchema>\n\nexport const CONTAINER_ALIGNMENTS = ['start', 'center', 'end', 'stretch'] as const\nexport const containerAlignmentSchema = z.enum(CONTAINER_ALIGNMENTS)\nexport type ContainerAlignment = z.infer<typeof containerAlignmentSchema>\n\n/** Grid column-count bounds: a constrained count, validated at graph level. */\nexport const GRID_MIN_COLUMNS = 1\nexport const GRID_MAX_COLUMNS = 12\nexport const gridColumnsSchema = z.number().int().min(GRID_MIN_COLUMNS).max(GRID_MAX_COLUMNS)\n\n/**\n * A container gap as stored in the graph: a spacing token name (canonical) or a\n * legacy non-negative integer (accepted for backward compatibility; on-scale\n * integers are equivalent to their token, off-scale ones are flagged by validation).\n */\nexport const containerGapValueSchema = z.union([\n spacingTokenNameSchema,\n z.number().int().nonnegative(),\n])\nexport type ContainerGapValue = z.infer<typeof containerGapValueSchema>\n\n// ---------------------------------------------------------------------------\n// Node constructors (fixtures, gestures, tests)\n// ---------------------------------------------------------------------------\n\nexport interface StackContainerOptions {\n direction?: StackDirection\n gap?: SpacingTokenName\n align?: ContainerAlignment\n}\n\nexport interface GridContainerOptions {\n columns?: number\n gap?: SpacingTokenName\n align?: ContainerAlignment\n /** Explicit opt-out of the responsive default: `false` keeps columns on phones (EC-163). */\n stackOnMobile?: boolean\n}\n\nfunction staticProps(values: Record<string, unknown>): Record<string, PropValue> | undefined {\n const entries = Object.entries(values).filter(([, v]) => v !== undefined)\n if (entries.length === 0) return undefined\n return Object.fromEntries(\n entries.map(([name, value]) => [name, { kind: 'static', value } as PropValue]),\n )\n}\n\n/** Build a canonical `Stack` container node with token-bound props. */\nexport function stackContainerNode(\n id: string,\n options: StackContainerOptions,\n children: ComponentNode[],\n): ComponentNode {\n const props = staticProps({\n direction: options.direction,\n gap: options.gap,\n align: options.align,\n })\n return {\n id,\n componentId: STACK_COMPONENT_ID,\n ...(props ? { props } : {}),\n slots: { [DEFAULT_SLOT]: children },\n }\n}\n\n/** Build a canonical `Grid` container node with token-bound props. */\nexport function gridContainerNode(\n id: string,\n options: GridContainerOptions,\n children: ComponentNode[],\n): ComponentNode {\n const props = staticProps({\n columns: options.columns,\n gap: options.gap,\n align: options.align,\n stackOnMobile: options.stackOnMobile,\n })\n return {\n id,\n componentId: GRID_COMPONENT_ID,\n ...(props ? { props } : {}),\n slots: { [DEFAULT_SLOT]: children },\n }\n}\n\n// ---------------------------------------------------------------------------\n// Container validation (called from validate.ts for every Stack/Grid node)\n// ---------------------------------------------------------------------------\n\nfunction containerIssue(\n code: ValidationIssue['code'],\n severity: ValidationIssue['severity'],\n message: string,\n path: GraphPath,\n nodeId: string,\n meta?: ValidationIssue['meta'],\n): ValidationIssue {\n return { code, severity, message, path: [...path], nodeId, ...(meta ? { meta } : {}) }\n}\n\n/** The static value of a prop, or `undefined` when absent or bound (bindings resolve at runtime). */\nfunction staticValueOf(node: ComponentNode, name: string): unknown {\n const prop = node.props?.[name]\n return prop?.kind === 'static' ? prop.value : undefined\n}\n\nfunction hasStaticProp(node: ComponentNode, name: string): boolean {\n return node.props?.[name]?.kind === 'static'\n}\n\n/**\n * Collect validation issues for a layout container node's canonical props. Only\n * static values are checked — bound props resolve at runtime and degrade in the\n * renderer. Non-container nodes yield no issues.\n */\nexport function collectContainerIssues(node: ComponentNode, path: GraphPath): ValidationIssue[] {\n if (!isLayoutContainerNode(node)) return []\n const issues: ValidationIssue[] = []\n\n // gap — token name (canonical) or legacy non-negative integer on the scale.\n if (hasStaticProp(node, 'gap')) {\n const gap = staticValueOf(node, 'gap')\n const gapPath: GraphPath = [...path, 'props', 'gap']\n if (typeof gap === 'string') {\n if (!isSpacingTokenName(gap)) {\n issues.push(\n containerIssue(\n 'invalid-container-gap',\n 'error',\n `Container gap \"${gap}\" is not a spacing token (expected one of ${SPACING_TOKEN_NAMES.join(', ')}).`,\n gapPath,\n node.id,\n { gap },\n ),\n )\n }\n } else if (typeof gap === 'number') {\n const token = spacingTokenFromLegacyGap(gap)\n if (token === undefined) {\n issues.push(\n containerIssue(\n 'invalid-container-gap',\n gap >= 0 && Number.isInteger(gap) ? 'warning' : 'error',\n `Container gap ${gap} is not on the spacing token scale (${SPACING_TOKEN_NAMES.join(', ')}).`,\n gapPath,\n node.id,\n { gap },\n ),\n )\n }\n } else {\n issues.push(\n containerIssue(\n 'invalid-container-gap',\n 'error',\n `Container gap must be a spacing token name, got ${JSON.stringify(gap)}.`,\n gapPath,\n node.id,\n ),\n )\n }\n }\n\n // align — both containers share the alignment enum.\n if (hasStaticProp(node, 'align')) {\n const align = staticValueOf(node, 'align')\n if (!containerAlignmentSchema.safeParse(align).success) {\n issues.push(\n containerIssue(\n 'invalid-container-alignment',\n 'error',\n `Container alignment ${JSON.stringify(align)} is invalid (expected ${CONTAINER_ALIGNMENTS.join(', ')}).`,\n [...path, 'props', 'align'],\n node.id,\n ),\n )\n }\n }\n\n if (node.componentId === STACK_COMPONENT_ID && hasStaticProp(node, 'direction')) {\n const direction = staticValueOf(node, 'direction')\n if (!stackDirectionSchema.safeParse(direction).success) {\n issues.push(\n containerIssue(\n 'invalid-container-direction',\n 'error',\n `Stack direction ${JSON.stringify(direction)} is invalid (expected ${STACK_DIRECTIONS.join(' or ')}).`,\n [...path, 'props', 'direction'],\n node.id,\n ),\n )\n }\n }\n\n // stackOnMobile — Grid-only responsive override (EC-163): a boolean or nothing.\n if (node.componentId === GRID_COMPONENT_ID && hasStaticProp(node, STACK_ON_MOBILE_PROP)) {\n const value = staticValueOf(node, STACK_ON_MOBILE_PROP)\n if (!stackOnMobileSchema.safeParse(value).success) {\n issues.push(\n containerIssue(\n 'invalid-container-responsive',\n 'error',\n `Grid ${STACK_ON_MOBILE_PROP} must be true or false, got ${JSON.stringify(value)}.`,\n [...path, 'props', STACK_ON_MOBILE_PROP],\n node.id,\n ),\n )\n }\n }\n\n if (node.componentId === GRID_COMPONENT_ID && hasStaticProp(node, 'columns')) {\n const columns = staticValueOf(node, 'columns')\n if (!gridColumnsSchema.safeParse(columns).success) {\n issues.push(\n containerIssue(\n 'invalid-container-columns',\n 'error',\n `Grid column count ${JSON.stringify(columns)} is invalid (expected an integer between ${GRID_MIN_COLUMNS} and ${GRID_MAX_COLUMNS}).`,\n [...path, 'props', 'columns'],\n node.id,\n ),\n )\n }\n }\n\n return issues\n}\n"]}
|