From c20d9941714447b753e912322635ca63ba04cd21 Mon Sep 17 00:00:00 2001 From: Doug Mealing Date: Sun, 5 Jul 2026 16:29:47 -0400 Subject: [PATCH] feat(docs-site): render a field's view.* subtypes + their attrs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Object pages now show each field's presentation view children (view.currency / view.badge / view.meter / view.duration / …) and their attributes — a per-field sub-row listing `view.` badges and `@attr=value` pairs (@variantMap and other object-valued attrs render as sorted `k: v` lists). The field builder consumes the view node + its ownAttrs, so they no longer surface as "not rendered by any page" in coverage. Attrs are read directly off each view node, so custom view subtypes (registered via extraProviders) render their attrs from a bare registration — no per-attr schema duplication needed in the consumer's provider. The acme fixture gains a view.currency field (Product.priceCents) exercising the new sub-row; golden regenerated. Determinism preserved (view attrs sorted). Co-Authored-By: Claude Opus 4.8 --- .../docs-site/src/builders/object-data.ts | 31 +++++++++++++++++-- .../docs-site/templates/object.html.mustache | 1 + .../test/fixture/golden/acme/ai/ItemView.html | 1 + .../fixture/golden/acme/ai/NpcPayload.html | 2 ++ .../fixture/golden/acme/ai/NpcResponse.html | 2 ++ .../fixture/golden/acme/ai/OrderLine.html | 2 ++ .../golden/acme/common/BaseEntity.html | 2 ++ .../fixture/golden/acme/shop/Customer.html | 1 + .../golden/acme/shop/CustomerFriend.html | 2 ++ .../golden/acme/shop/CustomerReferral.html | 2 ++ .../golden/acme/shop/LineItemView.html | 2 ++ .../test/fixture/golden/acme/shop/Order.html | 3 ++ .../golden/acme/shop/OrderProduct.html | 2 ++ .../fixture/golden/acme/shop/OrphanLog.html | 1 + .../fixture/golden/acme/shop/Product.html | 4 +++ .../test/fixture/golden/acme/shop/index.html | 2 +- .../fixture/golden/assets/search-index.json | 2 +- .../test/fixture/golden/coverage.html | 4 +-- .../fixture/input/acme/shop/meta.shop.yaml | 4 +++ 19 files changed, 64 insertions(+), 6 deletions(-) diff --git a/server/typescript/packages/docs-site/src/builders/object-data.ts b/server/typescript/packages/docs-site/src/builders/object-data.ts index 0d4914eac5..09001aec4b 100644 --- a/server/typescript/packages/docs-site/src/builders/object-data.ts +++ b/server/typescript/packages/docs-site/src/builders/object-data.ts @@ -27,7 +27,24 @@ function neighborAttrs(o: MetaData): { attrs: ErAttr[]; more: number } { } export interface EnumValue { value: string; deflt: boolean; desc: string; } -export interface FieldRow { name: string; type: string; isArray: boolean; required: boolean; badgesHtml: string; desc: string; enumValues: EnumValue[]; refHref?: string | undefined; refName?: string | undefined; inheritedFrom?: { name: string; href: string } | undefined; anchor: string; } +/** A field's presentation view child (e.g. view.currency / view.badge) + its + * attrs, both HTML-escaped in the builder (this render lib does not escape). */ +export interface ViewAttr { name: string; value: string; } +export interface ViewRow { subType: string; attrs: ViewAttr[]; } +export interface FieldRow { name: string; type: string; isArray: boolean; required: boolean; badgesHtml: string; desc: string; enumValues: EnumValue[]; views: ViewRow[]; refHref?: string | undefined; refName?: string | undefined; inheritedFrom?: { name: string; href: string } | undefined; anchor: string; } + +/** Render an attr value for display: an object (e.g. view.badge @variantMap) as + * ordered `k: v` pairs, an array as a comma list, else the scalar. */ +function fmtAttrValue(v: unknown): string { + if (v !== null && typeof v === "object" && !Array.isArray(v)) { + return Object.entries(v as Record) + .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)) + .map(([k, vv]) => `${k}: ${vv}`) + .join(", "); + } + if (Array.isArray(v)) return v.map(String).join(", "); + return String(v); +} export interface IndexRow { name: string; kind: string; fields: string; extra: string; unique: boolean; } export interface ValidatorRow { scope: "field" | "object"; subject: string; rule: string; // human-readable, HTML-escaped } @@ -88,8 +105,18 @@ function fieldRow(f: MetaData, ownerHref: string, g: LinkGraph, cov: CoverageTra })); } } + // presentation view children (view.currency / view.badge / view.meter / …) + their + // attrs — consumed + rendered so a field's render-semantics appear in the docs. + const views: ViewRow[] = []; + for (const v of f.childrenOfType("view")) { + cov.consumeNode(v); + const vAttrs = [...v.ownAttrs()] + .sort(([an], [bn]) => (an < bn ? -1 : an > bn ? 1 : 0)) + .map(([an, av]) => { cov.consumeAttr(v, an); return { name: esc(an), value: esc(fmtAttrValue(av)) }; }); + views.push({ subType: esc(v.subType), attrs: vAttrs }); + } const desc = esc(a("description") ?? ""); - return { name: f.name, type: f.subType, isArray: f.resolvedIsArray(), required, badgesHtml: bits.join(" "), desc, enumValues, refHref, refName, inheritedFrom: undefined, anchor: `f-${f.name}` }; + return { name: f.name, type: f.subType, isArray: f.resolvedIsArray(), required, badgesHtml: bits.join(" "), desc, enumValues, views, refHref, refName, inheritedFrom: undefined, anchor: `f-${f.name}` }; } // Neighborhood edge label: relationship edges show their name + (M:N) junction + onDelete; extends/others show via. diff --git a/server/typescript/packages/docs-site/templates/object.html.mustache b/server/typescript/packages/docs-site/templates/object.html.mustache index a5ac8f773e..36b10a7862 100644 --- a/server/typescript/packages/docs-site/templates/object.html.mustache +++ b/server/typescript/packages/docs-site/templates/object.html.mustache @@ -12,6 +12,7 @@
{{#ownFields}} {{#enumValues.length}}{{/enumValues.length}} +{{#views.length}}{{/views.length}} {{/ownFields}}
FieldTypeDescription
{{name}}{{#isArray}}[]{{/isArray}}{{type}}{{{badgesHtml}}}{{desc}}
{{#enumValues}}{{value}}{{#deflt}} ★{{/deflt}}{{/enumValues}}
{{#views}}view.{{subType}}{{#attrs}}@{{name}}={{value}}{{/attrs}}{{/views}}
{{#inheritedFields.length}}
Inherited fields ({{inheritedFields.length}})
diff --git a/server/typescript/packages/docs-site/test/fixture/golden/acme/ai/ItemView.html b/server/typescript/packages/docs-site/test/fixture/golden/acme/ai/ItemView.html index f077a741a7..506cf36bee 100644 --- a/server/typescript/packages/docs-site/test/fixture/golden/acme/ai/ItemView.html +++ b/server/typescript/packages/docs-site/test/fixture/golden/acme/ai/ItemView.html @@ -59,6 +59,7 @@

ItemView

+
FieldTypeDescription
labelstring
diff --git a/server/typescript/packages/docs-site/test/fixture/golden/acme/ai/NpcPayload.html b/server/typescript/packages/docs-site/test/fixture/golden/acme/ai/NpcPayload.html index 37b53c908c..d9280911ce 100644 --- a/server/typescript/packages/docs-site/test/fixture/golden/acme/ai/NpcPayload.html +++ b/server/typescript/packages/docs-site/test/fixture/golden/acme/ai/NpcPayload.html @@ -59,8 +59,10 @@

NpcPayload
+ +
FieldTypeDescription
npcNamestringrequired
items[]object⊃ ItemView
diff --git a/server/typescript/packages/docs-site/test/fixture/golden/acme/ai/NpcResponse.html b/server/typescript/packages/docs-site/test/fixture/golden/acme/ai/NpcResponse.html index d166a992cb..f6c549300d 100644 --- a/server/typescript/packages/docs-site/test/fixture/golden/acme/ai/NpcResponse.html +++ b/server/typescript/packages/docs-site/test/fixture/golden/acme/ai/NpcResponse.html @@ -59,8 +59,10 @@

NpcResponse
+ +
FieldTypeDescription
verdictstringverdict <b>tag</b> & "quote"
reasonstring@xmlText
diff --git a/server/typescript/packages/docs-site/test/fixture/golden/acme/ai/OrderLine.html b/server/typescript/packages/docs-site/test/fixture/golden/acme/ai/OrderLine.html index 1bb9c3f6d6..f9235356f9 100644 --- a/server/typescript/packages/docs-site/test/fixture/golden/acme/ai/OrderLine.html +++ b/server/typescript/packages/docs-site/test/fixture/golden/acme/ai/OrderLine.html @@ -59,8 +59,10 @@

OrderLine
+ +
FieldTypeDescription
orderIduuid
lineNoint
diff --git a/server/typescript/packages/docs-site/test/fixture/golden/acme/common/BaseEntity.html b/server/typescript/packages/docs-site/test/fixture/golden/acme/common/BaseEntity.html index 629f2ac8c2..144b65da0f 100644 --- a/server/typescript/packages/docs-site/test/fixture/golden/acme/common/BaseEntity.html +++ b/server/typescript/packages/docs-site/test/fixture/golden/acme/common/BaseEntity.html @@ -59,8 +59,10 @@

BaseEntity
+ +
FieldTypeDescription
idstringrequired ≤36 uuid
createdAttimestamp
diff --git a/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/Customer.html b/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/Customer.html index a894aeb61c..2c925193e1 100644 --- a/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/Customer.html +++ b/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/Customer.html @@ -59,6 +59,7 @@

Customer
+
FieldTypeDescription
emailstringrequired ≤120
Inherited fields (2)
diff --git a/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/CustomerFriend.html b/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/CustomerFriend.html index 71ea1bd2cc..8225bc6719 100644 --- a/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/CustomerFriend.html +++ b/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/CustomerFriend.html @@ -59,8 +59,10 @@

CustomerFriend

id ↑ BaseEntitystringrequired ≤36 uuid
createdAt ↑ BaseEntitytimestamp
+ +
FieldTypeDescription
friendAIdstring≤36
friendBIdstring≤36
Inherited fields (2)
diff --git a/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/CustomerReferral.html b/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/CustomerReferral.html index 624eed3705..aee633c5af 100644 --- a/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/CustomerReferral.html +++ b/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/CustomerReferral.html @@ -59,8 +59,10 @@

CustomerReferral

id ↑ BaseEntitystringrequired ≤36 uuid
createdAt ↑ BaseEntitytimestamp
+ +
FieldTypeDescription
referrerIdstring≤36
referredIdstring≤36
Inherited fields (2)
diff --git a/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/LineItemView.html b/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/LineItemView.html index 7ec6fe5f7e..ad44e52fab 100644 --- a/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/LineItemView.html +++ b/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/LineItemView.html @@ -59,8 +59,10 @@

LineItemView

id ↑ BaseEntitystringrequired ≤36 uuid
createdAt ↑ BaseEntitytimestamp
+ +
FieldTypeDescription
orderIdstring→ Order
customerNamestring
diff --git a/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/Order.html b/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/Order.html index 92bc669bf5..8a4cc1aa96 100644 --- a/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/Order.html +++ b/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/Order.html @@ -59,10 +59,13 @@

Order
+ + +
FieldTypeDescription
statusenumdefault OPEN enum
OPEN ★CLOSED
qtyintdefault 1 min=1 max=99
customerIdstring≤36
Inherited fields (2)
diff --git a/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/OrderProduct.html b/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/OrderProduct.html index b42e739d90..e5ab4d0bd3 100644 --- a/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/OrderProduct.html +++ b/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/OrderProduct.html @@ -59,8 +59,10 @@

OrderProduct

id ↑ BaseEntitystringrequired ≤36 uuid
createdAt ↑ BaseEntitytimestamp
+ +
FieldTypeDescription
orderIdstring≤36
productIdstring≤36
Inherited fields (2)
diff --git a/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/OrphanLog.html b/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/OrphanLog.html index c681c535ce..4fea0130e3 100644 --- a/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/OrphanLog.html +++ b/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/OrphanLog.html @@ -59,6 +59,7 @@

OrphanLog

id ↑ BaseEntitystringrequired ≤36 uuid
createdAt ↑ BaseEntitytimestamp
+
FieldTypeDescription
linestring
diff --git a/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/Product.html b/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/Product.html index 00e5a0f34f..4c1f67c3c2 100644 --- a/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/Product.html +++ b/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/Product.html @@ -59,6 +59,10 @@

Product
+ + + +
FieldTypeDescription
skustringrequired ≤40
priceCentsint
view.currency@decimals=2@locale=en-US
Inherited fields (2)
diff --git a/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/index.html b/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/index.html index 4c2ea3983a..221fb12031 100644 --- a/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/index.html +++ b/server/typescript/packages/docs-site/test/fixture/golden/acme/shop/index.html @@ -82,7 +82,7 @@

Fixture

Objects

id ↑ BaseEntitystringrequired ≤36 uuid
createdAt ↑ BaseEntitytimestamp
- +
NameKindTableFieldsExtends
Customerentitycustomers3BaseEntity
CustomerFriendentitycustomer_friends4BaseEntity
CustomerReferralentitycustomer_referrals4BaseEntity
LineItemViewprojectionv_line_item2
Orderentityorders5BaseEntity
OrderProductentityorder_products4BaseEntity
OrphanLogentity1
Productentityproducts3BaseEntity
Customerentitycustomers3BaseEntity
CustomerFriendentitycustomer_friends4BaseEntity
CustomerReferralentitycustomer_referrals4BaseEntity
LineItemViewprojectionv_line_item2
Orderentityorders5BaseEntity
OrderProductentityorder_products4BaseEntity
OrphanLogentity1
Productentityproducts4BaseEntity

Referenced by

diff --git a/server/typescript/packages/docs-site/test/fixture/golden/assets/search-index.json b/server/typescript/packages/docs-site/test/fixture/golden/assets/search-index.json index 6e8ac5a11d..81758ee4bc 100644 --- a/server/typescript/packages/docs-site/test/fixture/golden/assets/search-index.json +++ b/server/typescript/packages/docs-site/test/fixture/golden/assets/search-index.json @@ -1 +1 @@ -[{"t":"acme::ai::ItemView","h":"acme/ai/ItemView.html","k":"object"},{"t":"acme::ai::NpcPayload","h":"acme/ai/NpcPayload.html","k":"object"},{"t":"acme::ai::NpcResponse","h":"acme/ai/NpcResponse.html","k":"object"},{"t":"acme::ai::npcReview","h":"acme/ai/npcReview.html","k":"prompt"},{"t":"acme::ai::npcReviewOutput","h":"acme/ai/npcReviewOutput.html","k":"output"},{"t":"acme::ai::OrderLine","h":"acme/ai/OrderLine.html","k":"object"},{"t":"acme::ai::OrphanVO","h":"acme/ai/OrphanVO.html","k":"object"},{"t":"acme::common::BaseEntity","h":"acme/common/BaseEntity.html","k":"object"},{"t":"acme::shop::Customer","h":"acme/shop/Customer.html","k":"object"},{"t":"acme::shop::CustomerFriend","h":"acme/shop/CustomerFriend.html","k":"object"},{"t":"acme::shop::CustomerReferral","h":"acme/shop/CustomerReferral.html","k":"object"},{"t":"acme::shop::LineItemView","h":"acme/shop/LineItemView.html","k":"object"},{"t":"acme::shop::Order","h":"acme/shop/Order.html","k":"object"},{"t":"acme::shop::OrderProduct","h":"acme/shop/OrderProduct.html","k":"object"},{"t":"acme::shop::OrphanLog","h":"acme/shop/OrphanLog.html","k":"object"},{"t":"acme::shop::Product","h":"acme/shop/Product.html","k":"object"},{"t":"BaseEntity.createdAt","h":"acme/common/BaseEntity.html#f-createdAt","k":"field"},{"t":"BaseEntity.id","h":"acme/common/BaseEntity.html#f-id","k":"field"},{"t":"Customer.createdAt","h":"acme/shop/Customer.html#f-createdAt","k":"field"},{"t":"Customer.email","h":"acme/shop/Customer.html#f-email","k":"field"},{"t":"Customer.id","h":"acme/shop/Customer.html#f-id","k":"field"},{"t":"CustomerFriend.createdAt","h":"acme/shop/CustomerFriend.html#f-createdAt","k":"field"},{"t":"CustomerFriend.friendAId","h":"acme/shop/CustomerFriend.html#f-friendAId","k":"field"},{"t":"CustomerFriend.friendBId","h":"acme/shop/CustomerFriend.html#f-friendBId","k":"field"},{"t":"CustomerFriend.id","h":"acme/shop/CustomerFriend.html#f-id","k":"field"},{"t":"CustomerReferral.createdAt","h":"acme/shop/CustomerReferral.html#f-createdAt","k":"field"},{"t":"CustomerReferral.id","h":"acme/shop/CustomerReferral.html#f-id","k":"field"},{"t":"CustomerReferral.referredId","h":"acme/shop/CustomerReferral.html#f-referredId","k":"field"},{"t":"CustomerReferral.referrerId","h":"acme/shop/CustomerReferral.html#f-referrerId","k":"field"},{"t":"ItemView.label","h":"acme/ai/ItemView.html#f-label","k":"field"},{"t":"LineItemView.customerName","h":"acme/shop/LineItemView.html#f-customerName","k":"field"},{"t":"LineItemView.orderId","h":"acme/shop/LineItemView.html#f-orderId","k":"field"},{"t":"NpcPayload.items","h":"acme/ai/NpcPayload.html#f-items","k":"field"},{"t":"NpcPayload.npcName","h":"acme/ai/NpcPayload.html#f-npcName","k":"field"},{"t":"NpcResponse.reason","h":"acme/ai/NpcResponse.html#f-reason","k":"field"},{"t":"NpcResponse.verdict","h":"acme/ai/NpcResponse.html#f-verdict","k":"field"},{"t":"Order.createdAt","h":"acme/shop/Order.html#f-createdAt","k":"field"},{"t":"Order.customerId","h":"acme/shop/Order.html#f-customerId","k":"field"},{"t":"Order.id","h":"acme/shop/Order.html#f-id","k":"field"},{"t":"Order.qty","h":"acme/shop/Order.html#f-qty","k":"field"},{"t":"Order.status","h":"acme/shop/Order.html#f-status","k":"field"},{"t":"OrderLine.lineNo","h":"acme/ai/OrderLine.html#f-lineNo","k":"field"},{"t":"OrderLine.orderId","h":"acme/ai/OrderLine.html#f-orderId","k":"field"},{"t":"OrderProduct.createdAt","h":"acme/shop/OrderProduct.html#f-createdAt","k":"field"},{"t":"OrderProduct.id","h":"acme/shop/OrderProduct.html#f-id","k":"field"},{"t":"OrderProduct.orderId","h":"acme/shop/OrderProduct.html#f-orderId","k":"field"},{"t":"OrderProduct.productId","h":"acme/shop/OrderProduct.html#f-productId","k":"field"},{"t":"OrphanLog.line","h":"acme/shop/OrphanLog.html#f-line","k":"field"},{"t":"Product.createdAt","h":"acme/shop/Product.html#f-createdAt","k":"field"},{"t":"Product.id","h":"acme/shop/Product.html#f-id","k":"field"},{"t":"Product.sku","h":"acme/shop/Product.html#f-sku","k":"field"}] \ No newline at end of file +[{"t":"acme::ai::ItemView","h":"acme/ai/ItemView.html","k":"object"},{"t":"acme::ai::NpcPayload","h":"acme/ai/NpcPayload.html","k":"object"},{"t":"acme::ai::NpcResponse","h":"acme/ai/NpcResponse.html","k":"object"},{"t":"acme::ai::npcReview","h":"acme/ai/npcReview.html","k":"prompt"},{"t":"acme::ai::npcReviewOutput","h":"acme/ai/npcReviewOutput.html","k":"output"},{"t":"acme::ai::OrderLine","h":"acme/ai/OrderLine.html","k":"object"},{"t":"acme::ai::OrphanVO","h":"acme/ai/OrphanVO.html","k":"object"},{"t":"acme::common::BaseEntity","h":"acme/common/BaseEntity.html","k":"object"},{"t":"acme::shop::Customer","h":"acme/shop/Customer.html","k":"object"},{"t":"acme::shop::CustomerFriend","h":"acme/shop/CustomerFriend.html","k":"object"},{"t":"acme::shop::CustomerReferral","h":"acme/shop/CustomerReferral.html","k":"object"},{"t":"acme::shop::LineItemView","h":"acme/shop/LineItemView.html","k":"object"},{"t":"acme::shop::Order","h":"acme/shop/Order.html","k":"object"},{"t":"acme::shop::OrderProduct","h":"acme/shop/OrderProduct.html","k":"object"},{"t":"acme::shop::OrphanLog","h":"acme/shop/OrphanLog.html","k":"object"},{"t":"acme::shop::Product","h":"acme/shop/Product.html","k":"object"},{"t":"BaseEntity.createdAt","h":"acme/common/BaseEntity.html#f-createdAt","k":"field"},{"t":"BaseEntity.id","h":"acme/common/BaseEntity.html#f-id","k":"field"},{"t":"Customer.createdAt","h":"acme/shop/Customer.html#f-createdAt","k":"field"},{"t":"Customer.email","h":"acme/shop/Customer.html#f-email","k":"field"},{"t":"Customer.id","h":"acme/shop/Customer.html#f-id","k":"field"},{"t":"CustomerFriend.createdAt","h":"acme/shop/CustomerFriend.html#f-createdAt","k":"field"},{"t":"CustomerFriend.friendAId","h":"acme/shop/CustomerFriend.html#f-friendAId","k":"field"},{"t":"CustomerFriend.friendBId","h":"acme/shop/CustomerFriend.html#f-friendBId","k":"field"},{"t":"CustomerFriend.id","h":"acme/shop/CustomerFriend.html#f-id","k":"field"},{"t":"CustomerReferral.createdAt","h":"acme/shop/CustomerReferral.html#f-createdAt","k":"field"},{"t":"CustomerReferral.id","h":"acme/shop/CustomerReferral.html#f-id","k":"field"},{"t":"CustomerReferral.referredId","h":"acme/shop/CustomerReferral.html#f-referredId","k":"field"},{"t":"CustomerReferral.referrerId","h":"acme/shop/CustomerReferral.html#f-referrerId","k":"field"},{"t":"ItemView.label","h":"acme/ai/ItemView.html#f-label","k":"field"},{"t":"LineItemView.customerName","h":"acme/shop/LineItemView.html#f-customerName","k":"field"},{"t":"LineItemView.orderId","h":"acme/shop/LineItemView.html#f-orderId","k":"field"},{"t":"NpcPayload.items","h":"acme/ai/NpcPayload.html#f-items","k":"field"},{"t":"NpcPayload.npcName","h":"acme/ai/NpcPayload.html#f-npcName","k":"field"},{"t":"NpcResponse.reason","h":"acme/ai/NpcResponse.html#f-reason","k":"field"},{"t":"NpcResponse.verdict","h":"acme/ai/NpcResponse.html#f-verdict","k":"field"},{"t":"Order.createdAt","h":"acme/shop/Order.html#f-createdAt","k":"field"},{"t":"Order.customerId","h":"acme/shop/Order.html#f-customerId","k":"field"},{"t":"Order.id","h":"acme/shop/Order.html#f-id","k":"field"},{"t":"Order.qty","h":"acme/shop/Order.html#f-qty","k":"field"},{"t":"Order.status","h":"acme/shop/Order.html#f-status","k":"field"},{"t":"OrderLine.lineNo","h":"acme/ai/OrderLine.html#f-lineNo","k":"field"},{"t":"OrderLine.orderId","h":"acme/ai/OrderLine.html#f-orderId","k":"field"},{"t":"OrderProduct.createdAt","h":"acme/shop/OrderProduct.html#f-createdAt","k":"field"},{"t":"OrderProduct.id","h":"acme/shop/OrderProduct.html#f-id","k":"field"},{"t":"OrderProduct.orderId","h":"acme/shop/OrderProduct.html#f-orderId","k":"field"},{"t":"OrderProduct.productId","h":"acme/shop/OrderProduct.html#f-productId","k":"field"},{"t":"OrphanLog.line","h":"acme/shop/OrphanLog.html#f-line","k":"field"},{"t":"Product.createdAt","h":"acme/shop/Product.html#f-createdAt","k":"field"},{"t":"Product.id","h":"acme/shop/Product.html#f-id","k":"field"},{"t":"Product.priceCents","h":"acme/shop/Product.html#f-priceCents","k":"field"},{"t":"Product.sku","h":"acme/shop/Product.html#f-sku","k":"field"}] \ No newline at end of file diff --git a/server/typescript/packages/docs-site/test/fixture/golden/coverage.html b/server/typescript/packages/docs-site/test/fixture/golden/coverage.html index 7cee1431d5..87a5e1143f 100644 --- a/server/typescript/packages/docs-site/test/fixture/golden/coverage.html +++ b/server/typescript/packages/docs-site/test/fixture/golden/coverage.html @@ -50,12 +50,12 @@

Coverage

Node kinds

- +
KindCountRendered
field.enum2✓
field.int2✓
field.object1✓
field.string17✓
field.timestamp1✓
field.uuid1✓
identity.primary1✓
identity.reference8✓
index.lookup1✓
object.entity9✓
object.projection1✓
object.value4✓
origin.passthrough1✓
relationship.association4✓
source.rdb8✓
template.output1✓
template.prompt1✓
validator.comparison1✓
validator.numeric1✓
field.enum2✓
field.int3✓
field.object1✓
field.string17✓
field.timestamp1✓
field.uuid1✓
identity.primary1✓
identity.reference8✓
index.lookup1✓
object.entity9✓
object.projection1✓
object.value4✓
origin.passthrough1✓
relationship.association4✓
source.rdb8✓
template.output1✓
template.prompt1✓
validator.comparison1✓
validator.numeric1✓
view.currency1✓

Attributes

- +
AttributeCountRendered
field:@dbColumnType1✓
field:@default2✓
field:@description1✓
field:@maxLength10✓
field:@objectRef2✓
field:@required4✓
field:@storage1✗
field:@values1✓
field:@xmlText1✓
identity:@fields9✓
identity:@generation1✓
identity:@references8✓
index:@fields1✓
index:@orders1✓
index:@where1✓
object:@description1✓
origin:@from1✓
origin:@via1✓
relationship:@cardinality4✓
relationship:@objectRef4✓
relationship:@onDelete1✗
relationship:@sourceRefField1✗
relationship:@symmetric1✗
relationship:@through3✗
source:@kind1✓
source:@table8✓
template:@format2✓
template:@payloadRef2✓
template:@textRef2✓
validator:@left1✓
validator:@max1✓
validator:@min1✓
validator:@op1✓
validator:@right1✓
field:@dbColumnType1✓
field:@default2✓
field:@description1✓
field:@maxLength10✓
field:@objectRef2✓
field:@required4✓
field:@storage1✗
field:@values1✓
field:@xmlText1✓
identity:@fields9✓
identity:@generation1✓
identity:@references8✓
index:@fields1✓
index:@orders1✓
index:@where1✓
object:@description1✓
origin:@from1✓
origin:@via1✓
relationship:@cardinality4✓
relationship:@objectRef4✓
relationship:@onDelete1✗
relationship:@sourceRefField1✗
relationship:@symmetric1✗
relationship:@through3✗
source:@kind1✓
source:@table8✓
template:@format2✓
template:@payloadRef2✓
template:@textRef2✓
validator:@left1✓
validator:@max1✓
validator:@min1✓
validator:@op1✓
validator:@right1✓
view:@decimals1✓
view:@locale1✓

Anomalies

diff --git a/server/typescript/packages/docs-site/test/fixture/input/acme/shop/meta.shop.yaml b/server/typescript/packages/docs-site/test/fixture/input/acme/shop/meta.shop.yaml index c678c6f0af..46f4db3857 100644 --- a/server/typescript/packages/docs-site/test/fixture/input/acme/shop/meta.shop.yaml +++ b/server/typescript/packages/docs-site/test/fixture/input/acme/shop/meta.shop.yaml @@ -36,6 +36,10 @@ metadata: extends: acme::common::BaseEntity children: - field.string: { name: sku, required: true, maxLength: 40 } + - field.int: + name: priceCents + children: + - view.currency: { locale: en-US, decimals: 2 } - source.rdb: { table: products } - object.entity: name: OrderProduct