@unified-product-graph/core 0.23.0 → 0.23.1
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/README.md +1 -1
- package/dist/index.cjs +19 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +29 -21
- package/dist/index.d.ts +29 -21
- package/dist/index.js +19 -10
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/spec/examples/cms-field-guide.upg +24 -24
package/package.json
CHANGED
|
@@ -30,15 +30,15 @@
|
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
32
|
"axis_a_value_ref": "val-git-based",
|
|
33
|
-
"axis_b_value_ref": "val-
|
|
33
|
+
"axis_b_value_ref": "val-structured-text",
|
|
34
34
|
"rationale_kind": "opportunity",
|
|
35
|
-
"rationale_md": "No technical reason, only adoption inertia. Watching brief: anyone shipping a starter that drops .md into
|
|
35
|
+
"rationale_md": "No technical reason, only adoption inertia. Watching brief: anyone shipping a starter that drops .md into Structured Text JSON could change the row."
|
|
36
36
|
},
|
|
37
37
|
{
|
|
38
38
|
"axis_a_value_ref": "val-monolithic",
|
|
39
|
-
"axis_b_value_ref": "val-
|
|
39
|
+
"axis_b_value_ref": "val-structured-text",
|
|
40
40
|
"rationale_kind": "ideological",
|
|
41
|
-
"rationale_md": "Monolithic CMSs treat content as page-bound HTML.
|
|
41
|
+
"rationale_md": "Monolithic CMSs treat content as page-bound HTML. Structured Text's structured-block model contradicts the page-as-unit assumption that monolithic vendors compete on."
|
|
42
42
|
}
|
|
43
43
|
]
|
|
44
44
|
}
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"parent_id": "axis-architecture",
|
|
74
74
|
"properties": {
|
|
75
75
|
"rationale": "Composable extends headless with three load-bearing commitments. Remove any one and you have headless, not composable.",
|
|
76
|
-
"exemplars": ["
|
|
76
|
+
"exemplars": ["Nimbus", "Larch", "Prism"],
|
|
77
77
|
"commitments": [
|
|
78
78
|
{
|
|
79
79
|
"name": "Typed content graph",
|
|
@@ -89,8 +89,8 @@
|
|
|
89
89
|
}
|
|
90
90
|
],
|
|
91
91
|
"capabilities": [
|
|
92
|
-
{ "surface": "delivery", "bullets": ["
|
|
93
|
-
{ "surface": "extensibility", "bullets": ["Custom input components", "
|
|
92
|
+
{ "surface": "delivery", "bullets": ["NQL projection-first queries", "Generated GraphQL", "REST patch-based mutations", "Live Sync API push subscriptions", "Asset CDN with URL transforms", "Edge-cached reads"] },
|
|
93
|
+
{ "surface": "extensibility", "bullets": ["Custom input components", "editor plugins", "Action hooks", "Reference filters"] },
|
|
94
94
|
{ "surface": "collaboration", "bullets": ["CRDT multiplayer", "Presence", "Inline comments", "Workflow states"] },
|
|
95
95
|
{ "surface": "preview", "bullets": ["Visual editing overlays", "Click-to-edit deep links", "Branch-aware preview"] },
|
|
96
96
|
{ "surface": "localization", "bullets": ["Document-level translations", "Field-level translations", "Releases (scheduled atomic publishes)"] },
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
"parent_id": "axis-architecture",
|
|
107
107
|
"properties": {
|
|
108
108
|
"rationale": "Headless without the composable extensions: APIs over content but no typed graph guarantee, often without real-time, often with hosted-only editor.",
|
|
109
|
-
"exemplars": ["Contentstack", "Storyblok", "
|
|
109
|
+
"exemplars": ["Contentstack", "Storyblok", "Forge"],
|
|
110
110
|
"commitments": [
|
|
111
111
|
{ "name": "API-only delivery", "description": "No coupled rendering layer; consumers pull content via REST/GraphQL." },
|
|
112
112
|
{ "name": "Hosted editor", "description": "Studio is the vendor's SaaS surface, not an embeddable library." }
|
|
@@ -181,25 +181,25 @@
|
|
|
181
181
|
"parent_id": "axis-editing",
|
|
182
182
|
"properties": {
|
|
183
183
|
"rationale": "Trades preview fidelity for structure guarantees. The form is the source of truth; preview is downstream.",
|
|
184
|
-
"exemplars": ["
|
|
184
|
+
"exemplars": ["Forge", "Larch classic"]
|
|
185
185
|
}
|
|
186
186
|
},
|
|
187
187
|
{
|
|
188
|
-
"id": "val-
|
|
188
|
+
"id": "val-structured-text",
|
|
189
189
|
"type": "classification_value",
|
|
190
|
-
"title": "Structured Content +
|
|
190
|
+
"title": "Structured Content + Structured Text",
|
|
191
191
|
"description": "Long-form content as a typed array of typed blocks; rich text without HTML.",
|
|
192
192
|
"parent_id": "axis-editing",
|
|
193
193
|
"properties": {
|
|
194
|
-
"rationale": "
|
|
195
|
-
"exemplars": ["
|
|
194
|
+
"rationale": "Nimbus's signature shape: long-form authoring without surrendering type guarantees. Each paragraph/heading/quote is a typed block; embedded references are first-class.",
|
|
195
|
+
"exemplars": ["Nimbus Studio"],
|
|
196
196
|
"commitments": [
|
|
197
197
|
{ "name": "Typed blocks", "description": "Every paragraph, heading, list, quote is a typed JSON block with stable schema." },
|
|
198
198
|
{ "name": "References as blocks", "description": "Embedded entities (images, products, callouts) are typed references, not HTML." }
|
|
199
199
|
],
|
|
200
200
|
"capabilities": [
|
|
201
201
|
{ "surface": "extensibility", "bullets": ["Custom block types", "Custom marks", "Custom annotations"] },
|
|
202
|
-
{ "surface": "preview", "bullets": ["Schema-aware
|
|
202
|
+
{ "surface": "preview", "bullets": ["Schema-aware Structured Text renderer per platform"] }
|
|
203
203
|
]
|
|
204
204
|
}
|
|
205
205
|
},
|
|
@@ -216,22 +216,22 @@
|
|
|
216
216
|
},
|
|
217
217
|
|
|
218
218
|
{
|
|
219
|
-
"id": "competitor-
|
|
219
|
+
"id": "competitor-nimbus",
|
|
220
220
|
"type": "competitor",
|
|
221
|
-
"title": "
|
|
222
|
-
"description": "The reference implementation of composable +
|
|
221
|
+
"title": "Nimbus",
|
|
222
|
+
"description": "The reference implementation of composable + Structured Text editing.",
|
|
223
223
|
"properties": {
|
|
224
224
|
"positioning": "Composable content platform with embeddable studio and real-time backend.",
|
|
225
225
|
"pricing_model": "Usage-based + per-seat",
|
|
226
|
-
"website": "https://
|
|
226
|
+
"website": "https://nimbus.example",
|
|
227
227
|
"strengths": [
|
|
228
|
-
"Typed content graph with
|
|
228
|
+
"Typed content graph with NQL query language",
|
|
229
229
|
"Real-time CRDT collaboration out of the box",
|
|
230
230
|
"Embeddable studio, owned inside the team's repo"
|
|
231
231
|
],
|
|
232
232
|
"weaknesses": [
|
|
233
233
|
"Steeper learning curve than form-based headless CMSs",
|
|
234
|
-
"
|
|
234
|
+
"Structured Text renderers must be authored per output platform"
|
|
235
235
|
]
|
|
236
236
|
}
|
|
237
237
|
},
|
|
@@ -276,15 +276,15 @@
|
|
|
276
276
|
{ "id": "e-v-wysiwyg", "type": "classification_axis_includes_classification_value", "source": "axis-editing", "target": "val-wysiwyg" },
|
|
277
277
|
{ "id": "e-v-block", "type": "classification_axis_includes_classification_value", "source": "axis-editing", "target": "val-block" },
|
|
278
278
|
{ "id": "e-v-form", "type": "classification_axis_includes_classification_value", "source": "axis-editing", "target": "val-form" },
|
|
279
|
-
{ "id": "e-v-pt", "type": "classification_axis_includes_classification_value", "source": "axis-editing", "target": "val-
|
|
279
|
+
{ "id": "e-v-pt", "type": "classification_axis_includes_classification_value", "source": "axis-editing", "target": "val-structured-text" },
|
|
280
280
|
{ "id": "e-v-builder", "type": "classification_axis_includes_classification_value", "source": "axis-editing", "target": "val-visual-builder" },
|
|
281
281
|
|
|
282
|
-
{ "id": "e-
|
|
283
|
-
{ "id": "e-
|
|
282
|
+
{ "id": "e-nimbus-composable", "type": "competitor_classified_as_classification_value", "source": "competitor-nimbus", "target": "val-composable" },
|
|
283
|
+
{ "id": "e-nimbus-pt", "type": "competitor_classified_as_classification_value", "source": "competitor-nimbus", "target": "val-structured-text" },
|
|
284
284
|
{ "id": "e-wp-monolithic", "type": "competitor_classified_as_classification_value", "source": "competitor-wordpress", "target": "val-monolithic" },
|
|
285
285
|
{ "id": "e-wp-wysiwyg", "type": "competitor_classified_as_classification_value", "source": "competitor-wordpress", "target": "val-wysiwyg" },
|
|
286
286
|
|
|
287
287
|
{ "id": "e-anti-fit-composable", "type": "persona_anti_fit_for_classification_value", "source": "persona-small-marketing-team", "target": "val-composable" },
|
|
288
|
-
{ "id": "e-anti-fit-pt", "type": "persona_anti_fit_for_classification_value", "source": "persona-small-marketing-team", "target": "val-
|
|
288
|
+
{ "id": "e-anti-fit-pt", "type": "persona_anti_fit_for_classification_value", "source": "persona-small-marketing-team", "target": "val-structured-text" }
|
|
289
289
|
]
|
|
290
290
|
}
|