@happyvertical/smrt-products 0.30.0

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 (147) hide show
  1. package/AGENTS.md +122 -0
  2. package/CLAUDE.md +1 -0
  3. package/LICENSE +7 -0
  4. package/README.md +115 -0
  5. package/dist/lib/__smrt-register__.d.ts +2 -0
  6. package/dist/lib/__smrt-register__.d.ts.map +1 -0
  7. package/dist/lib/app/main.d.ts +6 -0
  8. package/dist/lib/app/main.d.ts.map +1 -0
  9. package/dist/lib/chunks/ProductAssetCollection-DFPXN43q.js +64 -0
  10. package/dist/lib/chunks/ProductAssetCollection-DFPXN43q.js.map +1 -0
  11. package/dist/lib/chunks/ProductForm-DHeb2L24.js +371 -0
  12. package/dist/lib/chunks/ProductForm-DHeb2L24.js.map +1 -0
  13. package/dist/lib/chunks/Sku-DUKtbYWT.js +511 -0
  14. package/dist/lib/chunks/Sku-DUKtbYWT.js.map +1 -0
  15. package/dist/lib/chunks/SkuCollection-C0tdkEdL.js +160 -0
  16. package/dist/lib/chunks/SkuCollection-C0tdkEdL.js.map +1 -0
  17. package/dist/lib/chunks/__smrt-register__-BIgFaVKn.js +5 -0
  18. package/dist/lib/chunks/__smrt-register__-BIgFaVKn.js.map +1 -0
  19. package/dist/lib/chunks/index-i3-ci1FB.js +6 -0
  20. package/dist/lib/chunks/index-i3-ci1FB.js.map +1 -0
  21. package/dist/lib/chunks/product-store.svelte-Dayd5n3W.js +132 -0
  22. package/dist/lib/chunks/product-store.svelte-Dayd5n3W.js.map +1 -0
  23. package/dist/lib/client.d.ts +9 -0
  24. package/dist/lib/client.d.ts.map +1 -0
  25. package/dist/lib/collections.d.ts +2 -0
  26. package/dist/lib/collections.d.ts.map +1 -0
  27. package/dist/lib/collections.js +12 -0
  28. package/dist/lib/collections.js.map +1 -0
  29. package/dist/lib/components.d.ts +2 -0
  30. package/dist/lib/components.d.ts.map +1 -0
  31. package/dist/lib/components.js +6 -0
  32. package/dist/lib/components.js.map +1 -0
  33. package/dist/lib/generated.d.ts +2 -0
  34. package/dist/lib/generated.d.ts.map +1 -0
  35. package/dist/lib/generated.js +5 -0
  36. package/dist/lib/generated.js.map +1 -0
  37. package/dist/lib/index.d.ts +14 -0
  38. package/dist/lib/index.d.ts.map +1 -0
  39. package/dist/lib/index.js +228 -0
  40. package/dist/lib/index.js.map +1 -0
  41. package/dist/lib/lib/collections/CategoryCollection.d.ts +20 -0
  42. package/dist/lib/lib/collections/CategoryCollection.d.ts.map +1 -0
  43. package/dist/lib/lib/collections/MaterialCollection.d.ts +20 -0
  44. package/dist/lib/lib/collections/MaterialCollection.d.ts.map +1 -0
  45. package/dist/lib/lib/collections/ProductAssetCollection.d.ts +16 -0
  46. package/dist/lib/lib/collections/ProductAssetCollection.d.ts.map +1 -0
  47. package/dist/lib/lib/collections/ProductCollection.d.ts +12 -0
  48. package/dist/lib/lib/collections/ProductCollection.d.ts.map +1 -0
  49. package/dist/lib/lib/collections/ProductVariantCollection.d.ts +10 -0
  50. package/dist/lib/lib/collections/ProductVariantCollection.d.ts.map +1 -0
  51. package/dist/lib/lib/collections/SkuCollection.d.ts +31 -0
  52. package/dist/lib/lib/collections/SkuCollection.d.ts.map +1 -0
  53. package/dist/lib/lib/collections/index.d.ts +7 -0
  54. package/dist/lib/lib/collections/index.d.ts.map +1 -0
  55. package/dist/lib/lib/components/ProductCard.svelte +173 -0
  56. package/dist/lib/lib/components/ProductCard.svelte.d.ts +10 -0
  57. package/dist/lib/lib/components/ProductCard.svelte.d.ts.map +1 -0
  58. package/dist/lib/lib/components/ProductForm.svelte +289 -0
  59. package/dist/lib/lib/components/ProductForm.svelte.d.ts +11 -0
  60. package/dist/lib/lib/components/ProductForm.svelte.d.ts.map +1 -0
  61. package/dist/lib/lib/components/TestComponent.svelte +25 -0
  62. package/dist/lib/lib/components/TestComponent.svelte.d.ts +7 -0
  63. package/dist/lib/lib/components/TestComponent.svelte.d.ts.map +1 -0
  64. package/dist/lib/lib/components/auto-generated/AutoForm.svelte +240 -0
  65. package/dist/lib/lib/components/auto-generated/AutoForm.svelte.d.ts +13 -0
  66. package/dist/lib/lib/components/auto-generated/AutoForm.svelte.d.ts.map +1 -0
  67. package/dist/lib/lib/components/auto-generated/FieldRenderer.svelte +205 -0
  68. package/dist/lib/lib/components/auto-generated/FieldRenderer.svelte.d.ts +14 -0
  69. package/dist/lib/lib/components/auto-generated/FieldRenderer.svelte.d.ts.map +1 -0
  70. package/dist/lib/lib/components/index.d.ts +12 -0
  71. package/dist/lib/lib/components/index.d.ts.map +1 -0
  72. package/dist/lib/lib/components/index.js +11 -0
  73. package/dist/lib/lib/features/CategoryManager.svelte +80 -0
  74. package/dist/lib/lib/features/CategoryManager.svelte.d.ts +7 -0
  75. package/dist/lib/lib/features/CategoryManager.svelte.d.ts.map +1 -0
  76. package/dist/lib/lib/features/ProductCatalog.svelte +299 -0
  77. package/dist/lib/lib/features/ProductCatalog.svelte.d.ts +8 -0
  78. package/dist/lib/lib/features/ProductCatalog.svelte.d.ts.map +1 -0
  79. package/dist/lib/lib/federation-entry.d.ts +11 -0
  80. package/dist/lib/lib/federation-entry.d.ts.map +1 -0
  81. package/dist/lib/lib/generated/index.d.ts +2 -0
  82. package/dist/lib/lib/generated/index.d.ts.map +1 -0
  83. package/dist/lib/lib/i18n.d.ts +79 -0
  84. package/dist/lib/lib/i18n.d.ts.map +1 -0
  85. package/dist/lib/lib/index.d.ts +20 -0
  86. package/dist/lib/lib/index.d.ts.map +1 -0
  87. package/dist/lib/lib/mock-smrt-client.d.ts +40 -0
  88. package/dist/lib/lib/mock-smrt-client.d.ts.map +1 -0
  89. package/dist/lib/lib/mock-smrt-client.js +129 -0
  90. package/dist/lib/lib/mock-smrt-client.js.map +1 -0
  91. package/dist/lib/lib/models/Category.d.ts +38 -0
  92. package/dist/lib/lib/models/Category.d.ts.map +1 -0
  93. package/dist/lib/lib/models/Material.d.ts +22 -0
  94. package/dist/lib/lib/models/Material.d.ts.map +1 -0
  95. package/dist/lib/lib/models/Product.d.ts +57 -0
  96. package/dist/lib/lib/models/Product.d.ts.map +1 -0
  97. package/dist/lib/lib/models/ProductAsset.d.ts +17 -0
  98. package/dist/lib/lib/models/ProductAsset.d.ts.map +1 -0
  99. package/dist/lib/lib/models/ProductVariant.d.ts +51 -0
  100. package/dist/lib/lib/models/ProductVariant.d.ts.map +1 -0
  101. package/dist/lib/lib/models/Sku.d.ts +79 -0
  102. package/dist/lib/lib/models/Sku.d.ts.map +1 -0
  103. package/dist/lib/lib/models/index.d.ts +15 -0
  104. package/dist/lib/lib/models/index.d.ts.map +1 -0
  105. package/dist/lib/lib/models/types.d.ts +41 -0
  106. package/dist/lib/lib/models/types.d.ts.map +1 -0
  107. package/dist/lib/lib/stores/index.d.ts +8 -0
  108. package/dist/lib/lib/stores/index.d.ts.map +1 -0
  109. package/dist/lib/lib/stores/index.js +7 -0
  110. package/dist/lib/lib/stores/product-store.client.svelte.d.ts +45 -0
  111. package/dist/lib/lib/stores/product-store.client.svelte.d.ts.map +1 -0
  112. package/dist/lib/lib/stores/product-store.client.svelte.js +147 -0
  113. package/dist/lib/lib/stores/product-store.svelte.d.ts +29 -0
  114. package/dist/lib/lib/stores/product-store.svelte.d.ts.map +1 -0
  115. package/dist/lib/lib/stores/product-store.svelte.js +144 -0
  116. package/dist/lib/lib/types.d.ts +43 -0
  117. package/dist/lib/lib/types.d.ts.map +1 -0
  118. package/dist/lib/lib/utils/index.d.ts +10 -0
  119. package/dist/lib/lib/utils/index.d.ts.map +1 -0
  120. package/dist/lib/main.d.ts +5 -0
  121. package/dist/lib/main.d.ts.map +1 -0
  122. package/dist/lib/manifest.json +3758 -0
  123. package/dist/lib/mcp.d.ts +14 -0
  124. package/dist/lib/mcp.d.ts.map +1 -0
  125. package/dist/lib/models.d.ts +2 -0
  126. package/dist/lib/models.d.ts.map +1 -0
  127. package/dist/lib/models.js +12 -0
  128. package/dist/lib/models.js.map +1 -0
  129. package/dist/lib/native-api-server.d.ts +7 -0
  130. package/dist/lib/native-api-server.d.ts.map +1 -0
  131. package/dist/lib/server.d.ts +11 -0
  132. package/dist/lib/server.d.ts.map +1 -0
  133. package/dist/lib/simple-api-server.d.ts +7 -0
  134. package/dist/lib/simple-api-server.d.ts.map +1 -0
  135. package/dist/lib/simple-server.d.ts +6 -0
  136. package/dist/lib/simple-server.d.ts.map +1 -0
  137. package/dist/lib/smrt-knowledge.json +1584 -0
  138. package/dist/lib/smrt-products.css +233 -0
  139. package/dist/lib/stores.d.ts +2 -0
  140. package/dist/lib/stores.d.ts.map +1 -0
  141. package/dist/lib/stores.js +6 -0
  142. package/dist/lib/stores.js.map +1 -0
  143. package/dist/lib/utils.d.ts +2 -0
  144. package/dist/lib/utils.d.ts.map +1 -0
  145. package/dist/lib/utils.js +27 -0
  146. package/dist/lib/utils.js.map +1 -0
  147. package/package.json +127 -0
@@ -0,0 +1,160 @@
1
+ import { SmrtCollection } from "@happyvertical/smrt-core";
2
+ import { C as Category, P as Product, M as Material, c as ProductVariant, S as Sku } from "./Sku-DUKtbYWT.js";
3
+ import { getOwnedAssetsFromCollection, addOwnedAssetFromCollection, removeOwnedAssetFromCollection } from "@happyvertical/smrt-assets";
4
+ class CategoryCollection extends SmrtCollection {
5
+ static _itemClass = Category;
6
+ /**
7
+ * Return every top-level category. `parentId` on `Category` is typed
8
+ * `string | undefined`; SMRT serializes undefined string fields as `''`
9
+ * rather than `NULL`, so a category created without an explicit
10
+ * `parentId` lands in the DB with `parent_id = ''`, not `parent_id IS NULL`.
11
+ *
12
+ * We accept both shapes — historical data, migrations, and direct DB
13
+ * imports can produce either — so consumers don't have to normalize
14
+ * `parentId` on write to be discoverable as a root. SQL's `IN` operator
15
+ * does NOT match `NULL` (NULL is not equal to anything, including itself
16
+ * inside an IN list), so the empty-string and NULL cases must run as
17
+ * separate queries and merge.
18
+ */
19
+ async getRootCategories() {
20
+ const [emptyParents, nullParents] = await Promise.all([
21
+ this.list({ where: { parentId: "" } }),
22
+ this.list({ where: { parentId: null } })
23
+ ]);
24
+ if (emptyParents.length === 0) return nullParents;
25
+ if (nullParents.length === 0) return emptyParents;
26
+ const seen = /* @__PURE__ */ new Set();
27
+ const merged = [];
28
+ for (const row of [...emptyParents, ...nullParents]) {
29
+ const id = row.id ?? "";
30
+ if (!id || seen.has(id)) continue;
31
+ seen.add(id);
32
+ merged.push(row);
33
+ }
34
+ return merged;
35
+ }
36
+ }
37
+ class ProductCollection extends SmrtCollection {
38
+ static _itemClass = Product;
39
+ async findByManufacturer(manufacturer) {
40
+ return this.list({ where: { manufacturer } });
41
+ }
42
+ async findInStock() {
43
+ return this.list({ where: { inStock: true } });
44
+ }
45
+ async getAssets(productId, relationship) {
46
+ return getOwnedAssetsFromCollection(this, productId, relationship);
47
+ }
48
+ async addAsset(productId, asset, relationship = "attachment", sortOrder = 0) {
49
+ await addOwnedAssetFromCollection(
50
+ this,
51
+ "Product",
52
+ productId,
53
+ asset,
54
+ relationship,
55
+ sortOrder
56
+ );
57
+ }
58
+ async removeAsset(productId, assetId, relationship) {
59
+ await removeOwnedAssetFromCollection(
60
+ this,
61
+ "Product",
62
+ productId,
63
+ assetId,
64
+ relationship
65
+ );
66
+ }
67
+ }
68
+ const ProductCollection$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
69
+ __proto__: null,
70
+ ProductCollection
71
+ }, Symbol.toStringTag, { value: "Module" }));
72
+ class MaterialCollection extends ProductCollection {
73
+ static _itemClass = Material;
74
+ /**
75
+ * Find every {@link Material} with the given kind.
76
+ *
77
+ * `materialKind` is an `@meta()` field — it lives inside the shared
78
+ * `_meta_data` JSON column on `products`, not as its own SQL column.
79
+ * That means a naive `list({ where: { materialKind } })` would generate
80
+ * a WHERE on a non-existent column. We list every Material STI row and
81
+ * filter the hydrated instances in JS.
82
+ *
83
+ * For very large catalogs, consumers should add a generated column or
84
+ * an expression index over the JSON path and override this helper.
85
+ */
86
+ async findByKind(materialKind) {
87
+ const items = await this.list({});
88
+ return items.filter((m) => m.materialKind === materialKind);
89
+ }
90
+ }
91
+ class ProductVariantCollection extends SmrtCollection {
92
+ static _itemClass = ProductVariant;
93
+ /** Every axis declaration for a given product, in display order. */
94
+ async findForProduct(productId) {
95
+ return this.list({
96
+ where: { productId },
97
+ orderBy: "sortOrder ASC"
98
+ });
99
+ }
100
+ /** The axis declaration for a `(productId, axisName)` pair, or null. */
101
+ async findAxis(productId, axisName) {
102
+ const matches = await this.list({
103
+ where: { productId, axisName },
104
+ limit: 1
105
+ });
106
+ return matches[0] ?? null;
107
+ }
108
+ }
109
+ class SkuCollection extends SmrtCollection {
110
+ static _itemClass = Sku;
111
+ /**
112
+ * Look up a SKU by its tenant-scoped `code` (UPC, internal part
113
+ * number, etc.). Returns `null` when no row matches.
114
+ */
115
+ async findByCode(code) {
116
+ const matches = await this.list({ where: { code }, limit: 1 });
117
+ return matches[0] ?? null;
118
+ }
119
+ /**
120
+ * Look up a SKU by its scannable barcode. Returns `null` when no row
121
+ * matches; pass `''` to skip the query early.
122
+ */
123
+ async findByBarcode(barcode) {
124
+ if (!barcode) return null;
125
+ const matches = await this.list({ where: { barcode }, limit: 1 });
126
+ return matches[0] ?? null;
127
+ }
128
+ /**
129
+ * Find every SKU pointing at the given `Product` id (or any Product
130
+ * STI subtype id — `Material` upstream, vertical subtypes defined in
131
+ * templates). Useful for listing the SKUs that back a single product
132
+ * card.
133
+ */
134
+ async findByProduct(productId) {
135
+ return this.list({ where: { productId }, orderBy: "code ASC" });
136
+ }
137
+ /**
138
+ * Find every SKU that is a component of the given parent SKU (for
139
+ * bundles / kits). Returns an empty array when the parent has no
140
+ * children.
141
+ */
142
+ async findByParent(parentSkuId) {
143
+ return this.list({ where: { parentSkuId }, orderBy: "code ASC" });
144
+ }
145
+ /** Find every active SKU, optionally narrowed by parent product id. */
146
+ async findActive(productId) {
147
+ const where = { active: true };
148
+ if (productId) where.productId = productId;
149
+ return this.list({ where, orderBy: "code ASC" });
150
+ }
151
+ }
152
+ export {
153
+ CategoryCollection as C,
154
+ MaterialCollection as M,
155
+ ProductCollection as P,
156
+ SkuCollection as S,
157
+ ProductVariantCollection as a,
158
+ ProductCollection$1 as b
159
+ };
160
+ //# sourceMappingURL=SkuCollection-C0tdkEdL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkuCollection-C0tdkEdL.js","sources":["../../../src/lib/collections/CategoryCollection.ts","../../../src/lib/collections/ProductCollection.ts","../../../src/lib/collections/MaterialCollection.ts","../../../src/lib/collections/ProductVariantCollection.ts","../../../src/lib/collections/SkuCollection.ts"],"sourcesContent":["/**\n * CategoryCollection — Collection manager for {@link Category} objects.\n */\n\nimport { SmrtCollection } from '@happyvertical/smrt-core';\nimport { Category } from '../models/Category';\n\nexport class CategoryCollection extends SmrtCollection<Category> {\n static readonly _itemClass = Category;\n\n /**\n * Return every top-level category. `parentId` on `Category` is typed\n * `string | undefined`; SMRT serializes undefined string fields as `''`\n * rather than `NULL`, so a category created without an explicit\n * `parentId` lands in the DB with `parent_id = ''`, not `parent_id IS NULL`.\n *\n * We accept both shapes — historical data, migrations, and direct DB\n * imports can produce either — so consumers don't have to normalize\n * `parentId` on write to be discoverable as a root. SQL's `IN` operator\n * does NOT match `NULL` (NULL is not equal to anything, including itself\n * inside an IN list), so the empty-string and NULL cases must run as\n * separate queries and merge.\n */\n async getRootCategories(): Promise<Category[]> {\n const [emptyParents, nullParents] = await Promise.all([\n this.list({ where: { parentId: '' } }),\n this.list({ where: { parentId: null } }),\n ]);\n\n if (emptyParents.length === 0) return nullParents;\n if (nullParents.length === 0) return emptyParents;\n\n // De-dupe by id in case a row somehow shows up in both lists.\n const seen = new Set<string>();\n const merged: Category[] = [];\n for (const row of [...emptyParents, ...nullParents]) {\n const id = row.id ?? '';\n if (!id || seen.has(id)) continue;\n seen.add(id);\n merged.push(row);\n }\n return merged;\n }\n}\n","import type { Asset } from '@happyvertical/smrt-assets';\nimport {\n addOwnedAssetFromCollection,\n getOwnedAssetsFromCollection,\n removeOwnedAssetFromCollection,\n} from '@happyvertical/smrt-assets';\nimport { SmrtCollection } from '@happyvertical/smrt-core';\nimport { Product } from '../models/Product';\n\nexport class ProductCollection extends SmrtCollection<Product> {\n static readonly _itemClass = Product;\n\n async findByManufacturer(manufacturer: string): Promise<Product[]> {\n return this.list({ where: { manufacturer } });\n }\n\n async findInStock(): Promise<Product[]> {\n return this.list({ where: { inStock: true } });\n }\n\n async getAssets(productId: string, relationship?: string): Promise<Asset[]> {\n return getOwnedAssetsFromCollection(this, productId, relationship);\n }\n\n async addAsset(\n productId: string,\n asset: Asset,\n relationship = 'attachment',\n sortOrder = 0,\n ): Promise<void> {\n await addOwnedAssetFromCollection(\n this,\n 'Product',\n productId,\n asset,\n relationship,\n sortOrder,\n );\n }\n\n async removeAsset(\n productId: string,\n assetId: string,\n relationship?: string,\n ): Promise<void> {\n await removeOwnedAssetFromCollection(\n this,\n 'Product',\n productId,\n assetId,\n relationship,\n );\n }\n}\n","/**\n * MaterialCollection — Collection manager for {@link Material} objects.\n *\n * STI framework auto-filters by `_meta_type` to return only Material rows\n * from the shared `products` table.\n */\n\nimport { Material } from '../models/Material';\nimport type { MaterialKind } from '../models/types';\nimport { ProductCollection } from './ProductCollection';\n\nexport class MaterialCollection extends ProductCollection {\n static override readonly _itemClass = Material;\n\n /**\n * Find every {@link Material} with the given kind.\n *\n * `materialKind` is an `@meta()` field — it lives inside the shared\n * `_meta_data` JSON column on `products`, not as its own SQL column.\n * That means a naive `list({ where: { materialKind } })` would generate\n * a WHERE on a non-existent column. We list every Material STI row and\n * filter the hydrated instances in JS.\n *\n * For very large catalogs, consumers should add a generated column or\n * an expression index over the JSON path and override this helper.\n */\n async findByKind(materialKind: MaterialKind): Promise<Material[]> {\n const items = (await this.list({})) as Material[];\n return items.filter((m) => m.materialKind === materialKind);\n }\n}\n","/**\n * ProductVariantCollection — read helpers for {@link ProductVariant} rows.\n *\n * {@link ProductVariant} is a standalone model (not a Product STI subtype),\n * so this collection drives its own table (`product_variants`). Helper\n * methods cover the two common query patterns: \"what axes does this\n * product vary along?\" and \"tell me about the size axis specifically.\"\n */\n\nimport { SmrtCollection } from '@happyvertical/smrt-core';\nimport { ProductVariant } from '../models/ProductVariant';\n\nexport class ProductVariantCollection extends SmrtCollection<ProductVariant> {\n static readonly _itemClass = ProductVariant;\n\n /** Every axis declaration for a given product, in display order. */\n async findForProduct(productId: string): Promise<ProductVariant[]> {\n return this.list({\n where: { productId },\n orderBy: 'sortOrder ASC',\n });\n }\n\n /** The axis declaration for a `(productId, axisName)` pair, or null. */\n async findAxis(\n productId: string,\n axisName: string,\n ): Promise<ProductVariant | null> {\n const matches = await this.list({\n where: { productId, axisName },\n limit: 1,\n });\n return matches[0] ?? null;\n }\n}\n","/**\n * SkuCollection — query helpers for {@link Sku} rows.\n *\n * @packageDocumentation\n */\n\nimport { SmrtCollection } from '@happyvertical/smrt-core';\nimport { Sku } from '../models/Sku';\n\nexport class SkuCollection extends SmrtCollection<Sku> {\n static readonly _itemClass = Sku;\n\n /**\n * Look up a SKU by its tenant-scoped `code` (UPC, internal part\n * number, etc.). Returns `null` when no row matches.\n */\n async findByCode(code: string): Promise<Sku | null> {\n const matches = await this.list({ where: { code }, limit: 1 });\n return matches[0] ?? null;\n }\n\n /**\n * Look up a SKU by its scannable barcode. Returns `null` when no row\n * matches; pass `''` to skip the query early.\n */\n async findByBarcode(barcode: string): Promise<Sku | null> {\n if (!barcode) return null;\n const matches = await this.list({ where: { barcode }, limit: 1 });\n return matches[0] ?? null;\n }\n\n /**\n * Find every SKU pointing at the given `Product` id (or any Product\n * STI subtype id — `Material` upstream, vertical subtypes defined in\n * templates). Useful for listing the SKUs that back a single product\n * card.\n */\n async findByProduct(productId: string): Promise<Sku[]> {\n return this.list({ where: { productId }, orderBy: 'code ASC' });\n }\n\n /**\n * Find every SKU that is a component of the given parent SKU (for\n * bundles / kits). Returns an empty array when the parent has no\n * children.\n */\n async findByParent(parentSkuId: string): Promise<Sku[]> {\n return this.list({ where: { parentSkuId }, orderBy: 'code ASC' });\n }\n\n /** Find every active SKU, optionally narrowed by parent product id. */\n async findActive(productId?: string): Promise<Sku[]> {\n const where: Record<string, unknown> = { active: true };\n if (productId) where.productId = productId;\n return this.list({ where, orderBy: 'code ASC' });\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { ObjectRegistry } from "@happyvertical/smrt-core";
2
+ ObjectRegistry.registerPackageManifest(
3
+ new URL("./manifest.json", import.meta.url)
4
+ );
5
+ //# sourceMappingURL=__smrt-register__-BIgFaVKn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"__smrt-register__-BIgFaVKn.js","sources":["../../../src/__smrt-register__.ts"],"sourcesContent":["/**\n * Self-registers this package's build-time manifest before any @smrt() decorator\n * in the package fires. Fixes issue #1132: in consumer runtimes (tsx, SvelteKit\n * SSR, plain `vite dev`) the decorator's synchronous manifest lookup previously\n * missed because no step populated the global manifest cache — classes got\n * registered with zero fields and `save()` / `toJSON()` silently dropped every\n * declared property.\n *\n * Import this module as the first statement in `src/index.ts` so its top-level\n * side effect runs ahead of any class module's @smrt() decorator.\n *\n * Silent no-op in dev/test, where the vitest plugin already populates manifests\n * via a different path. Only needs to succeed in the published dist output.\n *\n * @see https://github.com/happyvertical/smrt/issues/1132\n */\nimport { ObjectRegistry } from '@happyvertical/smrt-core';\n\n// `new URL('./manifest.json', import.meta.url)` resolves at runtime to the\n// manifest sitting next to this module's compiled output. Vite warns at build\n// time that it cannot pre-resolve the URL; that is the intended behavior —\n// the URL must resolve to dist/manifest.json at runtime, not be inlined.\nObjectRegistry.registerPackageManifest(\n new URL('./manifest.json', import.meta.url),\n);\n"],"names":[],"mappings":";AAsBA,eAAe;AAAA,EACb,IAAA,IAAA,mBAAA,YAAA,GAAA;AACF;"}
@@ -0,0 +1,6 @@
1
+ import "./__smrt-register__-BIgFaVKn.js";
2
+ const autoGeneratedComponents = {};
3
+ export {
4
+ autoGeneratedComponents as a
5
+ };
6
+ //# sourceMappingURL=index-i3-ci1FB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-i3-ci1FB.js","sources":["../../../src/lib/generated/index.ts"],"sourcesContent":["/**\n * Auto-generated SMRT Components\n *\n * This file is automatically generated by the SMRT Vite plugin.\n * It exports UI components that are auto-generated from @smrt() decorated classes.\n *\n * DO NOT EDIT THIS FILE MANUALLY - it will be overwritten.\n */\n\n// Self-register this package's manifest for consumers that import via this\n// subpath without the main entry. See src/__smrt-register__.ts (issue #1132).\nimport '../../__smrt-register__.js';\n\n// Auto-generated components will be exported here by the SMRT Vite plugin\n// Examples:\n// export { default as SmrtProductForm } from './SmrtProductForm.svelte';\n// export { default as SmrtProductTable } from './SmrtProductTable.svelte';\n// export { default as SmrtCategoryForm } from './SmrtCategoryForm.svelte';\n\n// For now, export an empty object to prevent import errors\nexport const autoGeneratedComponents = {};\n"],"names":[],"mappings":";AAoBO,MAAM,0BAA0B,CAAA;"}
@@ -0,0 +1,132 @@
1
+ import * as $ from "svelte/internal/client";
2
+ import { createClient } from "../lib/mock-smrt-client.js";
3
+ class ProductStoreClass {
4
+ #data = $.state($.proxy({
5
+ items: [],
6
+ loading: false,
7
+ error: null,
8
+ selectedProduct: null
9
+ }));
10
+ get data() {
11
+ return $.get(this.#data);
12
+ }
13
+ set data(value) {
14
+ $.set(this.#data, value, true);
15
+ }
16
+ api = createClient("/api/v1");
17
+ get items() {
18
+ return this.data.items;
19
+ }
20
+ get loading() {
21
+ return this.data.loading;
22
+ }
23
+ get error() {
24
+ return this.data.error;
25
+ }
26
+ get selectedProduct() {
27
+ return this.data.selectedProduct;
28
+ }
29
+ // Derived state
30
+ get inStockCount() {
31
+ return this.data.items.filter((p) => p.inStock).length;
32
+ }
33
+ get totalValue() {
34
+ return this.data.items.reduce((sum, product) => sum + (product.price || 0), 0);
35
+ }
36
+ get categories() {
37
+ const categorySet = new Set(this.data.items.map((p) => p.category).filter(Boolean));
38
+ return Array.from(categorySet);
39
+ }
40
+ // Actions
41
+ async loadProducts() {
42
+ this.data.loading = true;
43
+ this.data.error = null;
44
+ try {
45
+ const response = await this.api.products.list();
46
+ if (response.data) {
47
+ this.data.items = response.data;
48
+ }
49
+ } catch (err) {
50
+ this.data.error = err instanceof Error ? err.message : "Failed to load products";
51
+ } finally {
52
+ this.data.loading = false;
53
+ }
54
+ }
55
+ async createProduct(productData) {
56
+ this.data.loading = true;
57
+ this.data.error = null;
58
+ try {
59
+ const response = await this.api.products.create(productData);
60
+ if (response.data) {
61
+ this.data.items.push(response.data);
62
+ }
63
+ return response;
64
+ } catch (err) {
65
+ this.data.error = err instanceof Error ? err.message : "Failed to create product";
66
+ throw err;
67
+ } finally {
68
+ this.data.loading = false;
69
+ }
70
+ }
71
+ async updateProduct(id, updates) {
72
+ this.data.loading = true;
73
+ this.data.error = null;
74
+ try {
75
+ const response = await this.api.products.update(id, updates);
76
+ if (response.data) {
77
+ const index = this.data.items.findIndex((p) => p.id === id);
78
+ if (index !== -1) {
79
+ this.data.items[index] = response.data;
80
+ }
81
+ if (this.data.selectedProduct?.id === id) {
82
+ this.data.selectedProduct = response.data;
83
+ }
84
+ }
85
+ return response;
86
+ } catch (err) {
87
+ this.data.error = err instanceof Error ? err.message : "Failed to update product";
88
+ throw err;
89
+ } finally {
90
+ this.data.loading = false;
91
+ }
92
+ }
93
+ async deleteProduct(id) {
94
+ this.data.loading = true;
95
+ this.data.error = null;
96
+ try {
97
+ await this.api.products.delete(id);
98
+ this.data.items = this.data.items.filter((p) => p.id !== id);
99
+ if (this.data.selectedProduct?.id === id) {
100
+ this.data.selectedProduct = null;
101
+ }
102
+ } catch (err) {
103
+ this.data.error = err instanceof Error ? err.message : "Failed to delete product";
104
+ throw err;
105
+ } finally {
106
+ this.data.loading = false;
107
+ }
108
+ }
109
+ selectProduct(product) {
110
+ this.data.selectedProduct = product;
111
+ }
112
+ clearError() {
113
+ this.data.error = null;
114
+ }
115
+ // Filter methods (return derived arrays, don't mutate state)
116
+ filterByCategory(category) {
117
+ return this.data.items.filter((p) => p.category === category);
118
+ }
119
+ filterInStock() {
120
+ return this.data.items.filter((p) => p.inStock);
121
+ }
122
+ searchProducts(query) {
123
+ const lowercaseQuery = query.toLowerCase();
124
+ return this.data.items.filter((product) => product.name?.toLowerCase().includes(lowercaseQuery) || product.description?.toLowerCase().includes(lowercaseQuery) || product.tags?.some((tag) => tag.toLowerCase().includes(lowercaseQuery)));
125
+ }
126
+ }
127
+ const productStore = new ProductStoreClass();
128
+ export {
129
+ ProductStoreClass as P,
130
+ productStore as p
131
+ };
132
+ //# sourceMappingURL=product-store.svelte-Dayd5n3W.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-store.svelte-Dayd5n3W.js","sources":["../../../src/lib/stores/product-store.svelte.ts"],"sourcesContent":["/**\n * Product Store - Svelte 5 Runes State Management\n *\n * Reactive store for managing product state with SMRT auto-generated client.\n * Uses Svelte 5 runes for reactive state management.\n */\n\nimport { createClient, type ProductData } from '../mock-smrt-client';\n\ninterface ProductStore {\n items: ProductData[];\n loading: boolean;\n error: string | null;\n selectedProduct: ProductData | null;\n}\n\nexport class ProductStoreClass {\n private data = $state<ProductStore>({\n items: [],\n loading: false,\n error: null,\n selectedProduct: null,\n });\n\n private api = createClient('/api/v1');\n\n // Reactive getters\n get items() {\n return this.data.items;\n }\n get loading() {\n return this.data.loading;\n }\n get error() {\n return this.data.error;\n }\n get selectedProduct() {\n return this.data.selectedProduct;\n }\n\n // Derived state\n get inStockCount() {\n return this.data.items.filter((p) => p.inStock).length;\n }\n\n get totalValue() {\n return this.data.items.reduce(\n (sum, product) => sum + (product.price || 0),\n 0,\n );\n }\n\n get categories() {\n const categorySet = new Set(\n this.data.items.map((p) => p.category).filter(Boolean),\n );\n return Array.from(categorySet);\n }\n\n // Actions\n async loadProducts() {\n this.data.loading = true;\n this.data.error = null;\n\n try {\n const response = await this.api.products.list();\n if (response.data) {\n this.data.items = response.data;\n }\n } catch (err) {\n this.data.error =\n err instanceof Error ? err.message : 'Failed to load products';\n } finally {\n this.data.loading = false;\n }\n }\n\n async createProduct(productData: Partial<ProductData>) {\n this.data.loading = true;\n this.data.error = null;\n\n try {\n const response = await this.api.products.create(productData);\n if (response.data) {\n this.data.items.push(response.data);\n }\n return response;\n } catch (err) {\n this.data.error =\n err instanceof Error ? err.message : 'Failed to create product';\n throw err;\n } finally {\n this.data.loading = false;\n }\n }\n\n async updateProduct(id: string, updates: Partial<ProductData>) {\n this.data.loading = true;\n this.data.error = null;\n\n try {\n const response = await this.api.products.update(id, updates);\n if (response.data) {\n const index = this.data.items.findIndex((p) => p.id === id);\n if (index !== -1) {\n this.data.items[index] = response.data;\n }\n\n // Update selected product if it's the one being updated\n if (this.data.selectedProduct?.id === id) {\n this.data.selectedProduct = response.data;\n }\n }\n return response;\n } catch (err) {\n this.data.error =\n err instanceof Error ? err.message : 'Failed to update product';\n throw err;\n } finally {\n this.data.loading = false;\n }\n }\n\n async deleteProduct(id: string) {\n this.data.loading = true;\n this.data.error = null;\n\n try {\n await this.api.products.delete(id);\n this.data.items = this.data.items.filter((p) => p.id !== id);\n\n // Clear selection if deleted product was selected\n if (this.data.selectedProduct?.id === id) {\n this.data.selectedProduct = null;\n }\n } catch (err) {\n this.data.error =\n err instanceof Error ? err.message : 'Failed to delete product';\n throw err;\n } finally {\n this.data.loading = false;\n }\n }\n\n selectProduct(product: ProductData | null) {\n this.data.selectedProduct = product;\n }\n\n clearError() {\n this.data.error = null;\n }\n\n // Filter methods (return derived arrays, don't mutate state)\n filterByCategory(category: string): ProductData[] {\n return this.data.items.filter((p) => p.category === category);\n }\n\n filterInStock(): ProductData[] {\n return this.data.items.filter((p) => p.inStock);\n }\n\n searchProducts(query: string): ProductData[] {\n const lowercaseQuery = query.toLowerCase();\n return this.data.items.filter(\n (product) =>\n product.name?.toLowerCase().includes(lowercaseQuery) ||\n product.description?.toLowerCase().includes(lowercaseQuery) ||\n product.tags?.some((tag) => tag.toLowerCase().includes(lowercaseQuery)),\n );\n }\n}\n\n// Export singleton instance\nexport const productStore = new ProductStoreClass();\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * SMRT Template Client
3
+ *
4
+ * Demonstrates auto-generated TypeScript client from SMRT objects.
5
+ * No manual client code needed - everything is generated from @smrt() decorated classes.
6
+ */
7
+ declare function demonstrateClient(): Promise<void>;
8
+ export { demonstrateClient };
9
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,iBAAe,iBAAiB,kBA8D/B;AAOD,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './lib/collections/index';
2
+ //# sourceMappingURL=collections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/collections.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import "./chunks/__smrt-register__-BIgFaVKn.js";
2
+ import { C, M, P, a, S } from "./chunks/SkuCollection-C0tdkEdL.js";
3
+ import { ProductAssetCollection } from "./chunks/ProductAssetCollection-DFPXN43q.js";
4
+ export {
5
+ C as CategoryCollection,
6
+ M as MaterialCollection,
7
+ ProductAssetCollection,
8
+ P as ProductCollection,
9
+ a as ProductVariantCollection,
10
+ S as SkuCollection
11
+ };
12
+ //# sourceMappingURL=collections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -0,0 +1,2 @@
1
+ export * from './lib/components/index';
2
+ //# sourceMappingURL=components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/components.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { P, a } from "./chunks/ProductForm-DHeb2L24.js";
2
+ export {
3
+ P as ProductCard,
4
+ a as ProductForm
5
+ };
6
+ //# sourceMappingURL=components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,2 @@
1
+ export * from './lib/generated/index';
2
+ //# sourceMappingURL=generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated.d.ts","sourceRoot":"","sources":["../../src/generated.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { a } from "./chunks/index-i3-ci1FB.js";
2
+ export {
3
+ a as autoGeneratedComponents
4
+ };
5
+ //# sourceMappingURL=generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,14 @@
1
+ export { demonstrateClient } from './client';
2
+ export * from './lib/index';
3
+ export { generateMCPServer } from './mcp';
4
+ export { startServer } from './server';
5
+ /**
6
+ * Start all services for demonstration (legacy function)
7
+ */
8
+ export declare function startAll(): Promise<{
9
+ server: {
10
+ shutdown: () => Promise<void>;
11
+ };
12
+ mcp: void;
13
+ }>;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,wBAAwB,CAAC;AAEhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC;;GAEG;AACH,wBAAsB,QAAQ;;;;;GA4B7B"}