@elytracms/studio 0.0.96 → 0.0.98

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.
Files changed (53) hide show
  1. package/convex/assets.ts +16 -2
  2. package/convex/cms.ts +153 -13
  3. package/convex/delivery-folded-drift.test.ts +104 -0
  4. package/convex/delivery.ts +24 -8
  5. package/convex/depth-codec-lookalike.test.ts +192 -0
  6. package/convex/fixture-accounts.test.ts +305 -0
  7. package/convex/fixtureAccounts.ts +298 -0
  8. package/convex/incarnation.test.ts +149 -0
  9. package/convex/ingest-attempt.test.ts +161 -0
  10. package/convex/ingest.test.ts +327 -9
  11. package/convex/ingest.ts +242 -24
  12. package/convex/prototype-key.test.ts +92 -0
  13. package/convex/receipt-races.test.ts +184 -0
  14. package/convex/records-zod-copy.test.ts +76 -0
  15. package/convex/records-zod-refinements.convex.test.ts +94 -0
  16. package/convex/schema.ts +20 -1
  17. package/convex/strict-delete.test.ts +129 -0
  18. package/dist/components/cms/cms-store.d.ts +6 -5
  19. package/dist/components/cms/cms-store.js +14 -34
  20. package/dist/components/cms/cms-store.js.map +1 -1
  21. package/dist/components/cms/field-control.d.ts +12 -1
  22. package/dist/components/cms/field-control.js +16 -1
  23. package/dist/components/cms/field-control.js.map +1 -1
  24. package/dist/components/cms/import-batch.d.ts +23 -0
  25. package/dist/components/cms/import-batch.js +43 -0
  26. package/dist/components/cms/import-batch.js.map +1 -0
  27. package/dist/components/cms/rich-text/editor.js +13 -10
  28. package/dist/components/cms/rich-text/editor.js.map +1 -1
  29. package/dist/components/cms/rich-text/value.d.ts +9 -0
  30. package/dist/components/cms/rich-text/value.js +13 -0
  31. package/dist/components/cms/rich-text/value.js.map +1 -1
  32. package/dist/components/cms/use-document-draft.d.ts +76 -4
  33. package/dist/components/cms/use-document-draft.js +94 -25
  34. package/dist/components/cms/use-document-draft.js.map +1 -1
  35. package/dist/components/records/record-lens.js.map +1 -1
  36. package/dist/lib/collection-view/collection-view-source.d.ts +5 -2
  37. package/dist/lib/collection-view/collection-view-source.js.map +1 -1
  38. package/dist/lib/engine-version.d.ts +1 -1
  39. package/dist/lib/engine-version.js +1 -1
  40. package/dist/lib/engine-version.js.map +1 -1
  41. package/dist/lib/i18n/messages.de.js +5 -0
  42. package/dist/lib/i18n/messages.de.js.map +1 -1
  43. package/dist/lib/i18n/messages.en.d.ts +5 -0
  44. package/dist/lib/i18n/messages.en.js +5 -0
  45. package/dist/lib/i18n/messages.en.js.map +1 -1
  46. package/dist/lib/operations/cms-persistence.d.ts +49 -5
  47. package/dist/lib/operations/cms-persistence.js +237 -47
  48. package/dist/lib/operations/cms-persistence.js.map +1 -1
  49. package/dist/lib/persistence/convex-adapter.js +27 -1
  50. package/dist/lib/persistence/convex-adapter.js.map +1 -1
  51. package/dist/lib/persona/labels.js +2 -0
  52. package/dist/lib/persona/labels.js.map +1 -1
  53. package/package.json +5 -3
@@ -399,6 +399,7 @@ declare const MESSAGES: {
399
399
  'cms.issue.invalid-collection-config': import("./types.js").SourceMessage;
400
400
  'cms.issue.invalid-field-config': import("./types.js").SourceMessage;
401
401
  'cms.issue.reserved-field-name': import("./types.js").SourceMessage;
402
+ 'cms.issue.prototype-key': import("./types.js").SourceMessage;
402
403
  'cms.issue.missing-required-field': import("./types.js").SourceMessage;
403
404
  'cms.issue.invalid-field-value': import("./types.js").SourceMessage;
404
405
  'cms.issue.invalid-field-value.warning': import("./types.js").SourceMessage;
@@ -426,6 +427,7 @@ declare const MESSAGES: {
426
427
  'cms.issue.unaddressable-url': import("./types.js").SourceMessage;
427
428
  'cms.issue.unknown-version': import("./types.js").SourceMessage;
428
429
  'cms.issue.invalid-stored-document': import("./types.js").SourceMessage;
430
+ 'cms.issue.props-not-judged': import("./types.js").SourceMessage;
429
431
  'cms.issueBody.missing-required-field': import("./types.js").SourceMessage;
430
432
  'cms.issueBody.missing-localized-value.default': import("./types.js").SourceMessage;
431
433
  'cms.issueBody.missing-localized-value.fallback': import("./types.js").SourceMessage;
@@ -491,6 +493,8 @@ declare const MESSAGES: {
491
493
  'cms.issueMessage.unfilledSlot': import("./types.js").SourceMessage;
492
494
  'cms.issueMessage.reservedFieldName': import("./types.js").SourceMessage;
493
495
  'cms.issueMessage.reservedFieldTypeOption': import("./types.js").SourceMessage;
496
+ 'cms.issueMessage.reservedPrototypeFieldName': import("./types.js").SourceMessage;
497
+ 'cms.issueMessage.prototypeKey': import("./types.js").SourceMessage;
494
498
  'cms.issueMessage.duplicateSelectOption': import("./types.js").SourceMessage;
495
499
  'cms.issueMessage.duplicateObjectField': import("./types.js").SourceMessage;
496
500
  'cms.issueMessage.assetCollectionSingleton': import("./types.js").SourceMessage;
@@ -1133,6 +1137,7 @@ declare const MESSAGES: {
1133
1137
  'builder.inspector.unset': import("./types.js").SourceMessage;
1134
1138
  'builder.inspector.unsetWithHint': import("./types.js").SourceMessage;
1135
1139
  'cms.issueMessage.nonCanonicalValue': import("./types.js").SourceMessage;
1140
+ 'cms.issueMessage.propsNotJudged': import("./types.js").SourceMessage;
1136
1141
  'cms.issueMessage.assetHoldsUrl': import("./types.js").SourceMessage;
1137
1142
  'cms.issueMessage.emptyAllow': import("./types.js").SourceMessage;
1138
1143
  'cms.issueMessage.unknownAllowComponent': import("./types.js").SourceMessage;
@@ -511,6 +511,7 @@ const MESSAGES = {
511
511
  'cms.issue.invalid-collection-config': msg('Invalid collection setup'),
512
512
  'cms.issue.invalid-field-config': msg('Invalid field setup'),
513
513
  'cms.issue.reserved-field-name': msg('Reserved field name'),
514
+ 'cms.issue.prototype-key': msg('Key cannot be stored'),
514
515
  'cms.issue.missing-required-field': msg('Missing required field'),
515
516
  'cms.issue.invalid-field-value': msg('Invalid value'),
516
517
  'cms.issue.invalid-field-value.warning': msg('Check this value', 'Title for a WARNING-severity invalid-field-value issue (EC-507). The value was accepted and stored — e.g. an implausible but legal date year — so "Invalid value" would contradict what the editor can see in the field.'),
@@ -538,6 +539,7 @@ const MESSAGES = {
538
539
  'cms.issue.unaddressable-url': msg('Unreachable URL'),
539
540
  'cms.issue.unknown-version': msg('Unknown version'),
540
541
  'cms.issue.invalid-stored-document': msg('Unreadable stored document', 'EC-585: a stored row the delivery snapshot shipped is not a valid document, so it is not delivered.'),
542
+ 'cms.issue.props-not-judged': msg('Component settings not checked', 'EC-662: a page was resolved without a component registry, so its component props were delivered unchecked.'),
541
543
  // EC-443 — issue-card BODY templates, only for codes whose full body derives
542
544
  // from `code` + `path`/`meta` (`issue-copy.ts`); every other code shows the
543
545
  // raw English core message (honest fallback).
@@ -628,6 +630,8 @@ const MESSAGES = {
628
630
  'cms.issueMessage.unfilledSlot': msg('The "{slot}" slot of "{collection}" has no document yet. Assign one so code that resolves "{slot}" finds it.'),
629
631
  'cms.issueMessage.reservedFieldName': msg('Field name "{field}" is reserved (the self-describing node discriminator): a field named "{field}" may only be a select whose options exclude the engine\'s node types (reference, asset, block, elytra/*), and this one is a "{kind}" field.', 'EC-654: {kind} is a field type identifier (text, object, …); the parenthesised list is code — keep it untranslated.'),
630
632
  'cms.issueMessage.reservedFieldTypeOption': msg('Select field "{field}" lists the option "{option}", an engine node type — a "{field}" of "{option}" would read as an engine node (reference, asset, block, elytra/*). Rename the option.', 'EC-654: {option} is the option value as declared; the parenthesised list is code — keep it untranslated.'),
633
+ 'cms.issueMessage.reservedPrototypeFieldName': msg('Field name “{field}” is reserved: no value can be stored under it (a JavaScript object and the Convex store do not keep the key, and every write refuses it). Rename the field.', 'EC-684: {field} is the literal __proto__ (never translate it).'),
634
+ 'cms.issueMessage.prototypeKey': msg('“{key}” cannot be used as a key: neither a JavaScript object nor the Convex store keeps it. Rename it.', 'EC-684: an own key in a value, or a path segment naming it, refused at a write or an import; {key} is the literal __proto__ (never translate it).'),
631
635
  'cms.issueMessage.duplicateSelectOption': msg('Duplicate select option "{option}" on field "{field}".'),
632
636
  'cms.issueMessage.duplicateObjectField': msg('Duplicate field "{field}" in object field "{parent}".'),
633
637
  'cms.issueMessage.assetCollectionSingleton': msg('Asset collection "{collection}" cannot be a singleton.'),
@@ -1386,6 +1390,7 @@ const MESSAGES = {
1386
1390
  'builder.inspector.unsetWithHint': msg('Not set (default: {hint})', '{hint} is the manifest default shown as a suggestion, e.g. "vertical" or "2".'),
1387
1391
  // EC-586 / EC-581 (wave-0092, zone A) — canonical values and the per-FieldType definition
1388
1392
  'cms.issueMessage.nonCanonicalValue': msg('Field "{field}" is stored in a non-canonical form for a "{type}" field — it was written past the write path that stores one form per field type. It still reads correctly; saving the document again stores the canonical form.'),
1393
+ 'cms.issueMessage.propsNotJudged': msg('The component props in field "{field}" were not judged: the page was resolved without a component registry, so they are delivered as stored and their issues are not reported.'),
1389
1394
  'cms.issueMessage.assetHoldsUrl': msg('Asset field "{field}" holds a URL — an asset value is a library asset, never a URL. Upload the image to the library and pick it, or put an external image’s address in the component’s URL prop (the Image’s “Image URL”).'),
1390
1395
  // EC-584 — the AllowList parse (config load / registration).
1391
1396
  'cms.issueMessage.emptyAllow': msg('Field "{field}" declares an empty "allow" — a list permits exactly the ids it names, so an empty one permits nothing. Omit "allow" for the type\'s default vocabulary, or list the component ids.'),