@happyvertical/smrt-products 0.37.2 → 0.37.4

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 (58) hide show
  1. package/dist/lib/chunks/ProductAssetCollection-TbeaVxzc.js +38 -0
  2. package/dist/lib/chunks/ProductAssetCollection-TbeaVxzc.js.map +1 -0
  3. package/dist/lib/chunks/ProductCollection-8QlfZ9ez.js +28 -0
  4. package/dist/lib/chunks/ProductCollection-8QlfZ9ez.js.map +1 -0
  5. package/dist/lib/chunks/Sku-B0w2dfHb.js +467 -0
  6. package/dist/lib/chunks/Sku-B0w2dfHb.js.map +1 -0
  7. package/dist/lib/chunks/__smrt-register__-DAo7IPPx.js +22 -0
  8. package/dist/lib/chunks/__smrt-register__-DAo7IPPx.js.map +1 -0
  9. package/dist/lib/chunks/collections-6PSqhUmZ.js +162 -0
  10. package/dist/lib/chunks/collections-6PSqhUmZ.js.map +1 -0
  11. package/dist/lib/chunks/components-C6VpNVcg.js +398 -0
  12. package/dist/lib/chunks/components-C6VpNVcg.js.map +1 -0
  13. package/dist/lib/chunks/decorate-C25O10I-.js +9 -0
  14. package/dist/lib/chunks/generated-CM3rwUcw.js +7 -0
  15. package/dist/lib/chunks/generated-CM3rwUcw.js.map +1 -0
  16. package/dist/lib/chunks/models-JPB-sld2.js +2 -0
  17. package/dist/lib/chunks/rolldown-runtime-D7D4PA-g.js +13 -0
  18. package/dist/lib/chunks/stores-CB0SI1c5.js +119 -0
  19. package/dist/lib/chunks/stores-CB0SI1c5.js.map +1 -0
  20. package/dist/lib/chunks/utils-BgTqlQoH.js +30 -0
  21. package/dist/lib/chunks/utils-BgTqlQoH.js.map +1 -0
  22. package/dist/lib/collections.js +4 -12
  23. package/dist/lib/components.js +2 -6
  24. package/dist/lib/generated.js +2 -5
  25. package/dist/lib/index.js +191 -216
  26. package/dist/lib/index.js.map +1 -1
  27. package/dist/lib/lib/i18n.js +82 -91
  28. package/dist/lib/lib/i18n.js.map +1 -1
  29. package/dist/lib/lib/mock-smrt-client.js +116 -129
  30. package/dist/lib/lib/mock-smrt-client.js.map +1 -1
  31. package/dist/lib/lib/stores/product-store.svelte.d.ts.map +1 -1
  32. package/dist/lib/manifest.json +2 -2
  33. package/dist/lib/models.js +3 -12
  34. package/dist/lib/smrt-knowledge.json +14 -14
  35. package/dist/lib/smrt-products.css +1 -0
  36. package/dist/lib/stores.js +2 -6
  37. package/dist/lib/utils.js +2 -27
  38. package/package.json +23 -23
  39. package/dist/lib/chunks/ProductAssetCollection-B93HdSlX.js +0 -64
  40. package/dist/lib/chunks/ProductAssetCollection-B93HdSlX.js.map +0 -1
  41. package/dist/lib/chunks/ProductForm-CU0UvKEF.js +0 -430
  42. package/dist/lib/chunks/ProductForm-CU0UvKEF.js.map +0 -1
  43. package/dist/lib/chunks/Sku-sl6xf1PR.js +0 -494
  44. package/dist/lib/chunks/Sku-sl6xf1PR.js.map +0 -1
  45. package/dist/lib/chunks/SkuCollection-f_a3k93c.js +0 -160
  46. package/dist/lib/chunks/SkuCollection-f_a3k93c.js.map +0 -1
  47. package/dist/lib/chunks/__smrt-register__-BIgFaVKn.js +0 -5
  48. package/dist/lib/chunks/__smrt-register__-BIgFaVKn.js.map +0 -1
  49. package/dist/lib/chunks/index-i3-ci1FB.js +0 -6
  50. package/dist/lib/chunks/index-i3-ci1FB.js.map +0 -1
  51. package/dist/lib/chunks/product-store.svelte-Dayd5n3W.js +0 -132
  52. package/dist/lib/chunks/product-store.svelte-Dayd5n3W.js.map +0 -1
  53. package/dist/lib/collections.js.map +0 -1
  54. package/dist/lib/components.js.map +0 -1
  55. package/dist/lib/generated.js.map +0 -1
  56. package/dist/lib/models.js.map +0 -1
  57. package/dist/lib/stores.js.map +0 -1
  58. package/dist/lib/utils.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"mock-smrt-client.js","sources":["../../../src/lib/mock-smrt-client.ts"],"sourcesContent":["/**\n * Mock SMRT Client - Temporary implementation for demo purposes\n *\n * This replaces the missing @smrt/client virtual module with a working implementation\n * that demonstrates the intended functionality.\n */\n\n// Re-use the canonical UI ProductData shape so the mock client, the stores,\n// and the components all agree on one type. The shape uses snake_case\n// timestamps (`created_at`/`updated_at`) to match the SMRT server payload.\nimport type { ProductData } from './types';\n\nexport type { ProductData } from './types';\n\nexport interface ApiResponse<T> {\n data: T;\n success: boolean;\n message?: string;\n}\n\n// Mock data store\nconst mockProducts: ProductData[] = [\n {\n id: '1',\n name: 'Demo Product',\n description: 'A sample product for demonstration',\n category: 'Electronics',\n manufacturer: 'Demo Corp',\n model: 'DM-100',\n price: 29.99,\n inStock: true,\n specifications: { weight: '1.2kg', color: 'Black' },\n tags: ['demo', 'sample'],\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n },\n {\n id: '2',\n name: 'Budget Item',\n description: 'An affordable option',\n category: 'Accessories',\n manufacturer: 'Budget Inc',\n model: 'BI-200',\n price: 19.99,\n inStock: false,\n specifications: { size: 'small' },\n tags: ['budget', 'affordable'],\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n },\n];\n\nclass MockApiClient {\n products = {\n async list(): Promise<ApiResponse<ProductData[]>> {\n // Simulate API delay\n await new Promise((resolve) => setTimeout(resolve, 500));\n\n return {\n data: [...mockProducts],\n success: true,\n message: 'Products retrieved successfully',\n };\n },\n\n async get(id: string): Promise<ApiResponse<ProductData>> {\n await new Promise((resolve) => setTimeout(resolve, 200));\n\n const product = mockProducts.find((p) => p.id === id);\n if (!product) {\n throw new Error(`Product with id ${id} not found`);\n }\n\n return {\n data: product,\n success: true,\n message: 'Product retrieved successfully',\n };\n },\n\n async create(\n productData: Partial<ProductData>,\n ): Promise<ApiResponse<ProductData>> {\n await new Promise((resolve) => setTimeout(resolve, 300));\n\n const newProduct: ProductData = {\n id: (mockProducts.length + 1).toString(),\n name: productData.name || 'Untitled Product',\n description: productData.description || '',\n category: productData.category || 'Uncategorized',\n manufacturer: productData.manufacturer || '',\n model: productData.model || '',\n price: productData.price || 0,\n inStock: productData.inStock ?? true,\n specifications: productData.specifications || {},\n tags: productData.tags || [],\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n };\n\n mockProducts.push(newProduct);\n\n return {\n data: newProduct,\n success: true,\n message: 'Product created successfully',\n };\n },\n\n async update(\n id: string,\n updates: Partial<ProductData>,\n ): Promise<ApiResponse<ProductData>> {\n await new Promise((resolve) => setTimeout(resolve, 300));\n\n const index = mockProducts.findIndex((p) => p.id === id);\n if (index === -1) {\n throw new Error(`Product with id ${id} not found`);\n }\n\n const updatedProduct = {\n ...mockProducts[index],\n ...updates,\n updated_at: new Date().toISOString(),\n };\n\n mockProducts[index] = updatedProduct;\n\n return {\n data: updatedProduct,\n success: true,\n message: 'Product updated successfully',\n };\n },\n\n async delete(id: string): Promise<ApiResponse<void>> {\n await new Promise((resolve) => setTimeout(resolve, 200));\n\n const index = mockProducts.findIndex((p) => p.id === id);\n if (index === -1) {\n throw new Error(`Product with id ${id} not found`);\n }\n\n mockProducts.splice(index, 1);\n\n return {\n data: undefined,\n success: true,\n message: 'Product deleted successfully',\n };\n },\n };\n\n categories = {\n async list(): Promise<ApiResponse<string[]>> {\n await new Promise((resolve) => setTimeout(resolve, 200));\n\n const categories = Array.from(\n new Set(\n mockProducts\n .map((p) => p.category)\n .filter((c): c is string => Boolean(c)),\n ),\n );\n\n return {\n data: categories,\n success: true,\n message: 'Categories retrieved successfully',\n };\n },\n };\n}\n\nexport function createClient(baseUrl = '/api/v1'): MockApiClient {\n return new MockApiClient();\n}\n\nexport default createClient;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mock-smrt-client.js","names":[],"sources":["../../../src/lib/mock-smrt-client.ts"],"sourcesContent":["/**\n * Mock SMRT Client - Temporary implementation for demo purposes\n *\n * This replaces the missing @smrt/client virtual module with a working implementation\n * that demonstrates the intended functionality.\n */\n\n// Re-use the canonical UI ProductData shape so the mock client, the stores,\n// and the components all agree on one type. The shape uses snake_case\n// timestamps (`created_at`/`updated_at`) to match the SMRT server payload.\nimport type { ProductData } from './types';\n\nexport type { ProductData } from './types';\n\nexport interface ApiResponse<T> {\n data: T;\n success: boolean;\n message?: string;\n}\n\n// Mock data store\nconst mockProducts: ProductData[] = [\n {\n id: '1',\n name: 'Demo Product',\n description: 'A sample product for demonstration',\n category: 'Electronics',\n manufacturer: 'Demo Corp',\n model: 'DM-100',\n price: 29.99,\n inStock: true,\n specifications: { weight: '1.2kg', color: 'Black' },\n tags: ['demo', 'sample'],\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n },\n {\n id: '2',\n name: 'Budget Item',\n description: 'An affordable option',\n category: 'Accessories',\n manufacturer: 'Budget Inc',\n model: 'BI-200',\n price: 19.99,\n inStock: false,\n specifications: { size: 'small' },\n tags: ['budget', 'affordable'],\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n },\n];\n\nclass MockApiClient {\n products = {\n async list(): Promise<ApiResponse<ProductData[]>> {\n // Simulate API delay\n await new Promise((resolve) => setTimeout(resolve, 500));\n\n return {\n data: [...mockProducts],\n success: true,\n message: 'Products retrieved successfully',\n };\n },\n\n async get(id: string): Promise<ApiResponse<ProductData>> {\n await new Promise((resolve) => setTimeout(resolve, 200));\n\n const product = mockProducts.find((p) => p.id === id);\n if (!product) {\n throw new Error(`Product with id ${id} not found`);\n }\n\n return {\n data: product,\n success: true,\n message: 'Product retrieved successfully',\n };\n },\n\n async create(\n productData: Partial<ProductData>,\n ): Promise<ApiResponse<ProductData>> {\n await new Promise((resolve) => setTimeout(resolve, 300));\n\n const newProduct: ProductData = {\n id: (mockProducts.length + 1).toString(),\n name: productData.name || 'Untitled Product',\n description: productData.description || '',\n category: productData.category || 'Uncategorized',\n manufacturer: productData.manufacturer || '',\n model: productData.model || '',\n price: productData.price || 0,\n inStock: productData.inStock ?? true,\n specifications: productData.specifications || {},\n tags: productData.tags || [],\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n };\n\n mockProducts.push(newProduct);\n\n return {\n data: newProduct,\n success: true,\n message: 'Product created successfully',\n };\n },\n\n async update(\n id: string,\n updates: Partial<ProductData>,\n ): Promise<ApiResponse<ProductData>> {\n await new Promise((resolve) => setTimeout(resolve, 300));\n\n const index = mockProducts.findIndex((p) => p.id === id);\n if (index === -1) {\n throw new Error(`Product with id ${id} not found`);\n }\n\n const updatedProduct = {\n ...mockProducts[index],\n ...updates,\n updated_at: new Date().toISOString(),\n };\n\n mockProducts[index] = updatedProduct;\n\n return {\n data: updatedProduct,\n success: true,\n message: 'Product updated successfully',\n };\n },\n\n async delete(id: string): Promise<ApiResponse<void>> {\n await new Promise((resolve) => setTimeout(resolve, 200));\n\n const index = mockProducts.findIndex((p) => p.id === id);\n if (index === -1) {\n throw new Error(`Product with id ${id} not found`);\n }\n\n mockProducts.splice(index, 1);\n\n return {\n data: undefined,\n success: true,\n message: 'Product deleted successfully',\n };\n },\n };\n\n categories = {\n async list(): Promise<ApiResponse<string[]>> {\n await new Promise((resolve) => setTimeout(resolve, 200));\n\n const categories = Array.from(\n new Set(\n mockProducts\n .map((p) => p.category)\n .filter((c): c is string => Boolean(c)),\n ),\n );\n\n return {\n data: categories,\n success: true,\n message: 'Categories retrieved successfully',\n };\n },\n };\n}\n\nexport function createClient(baseUrl = '/api/v1'): MockApiClient {\n return new MockApiClient();\n}\n\nexport default createClient;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"product-store.svelte.d.ts","sourceRoot":"","sources":["product-store.svelte.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AASrE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,IAAI,CAKT;IAEH,OAAO,CAAC,GAAG,CAA2B;IAGtC,IAAI,KAAK,kBAER;IACD,IAAI,OAAO,YAEV;IACD,IAAI,KAAK,kBAER;IACD,IAAI,eAAe,uBAElB;IAGD,IAAI,YAAY,WAEf;IAED,IAAI,UAAU,WAKb;IAED,IAAI,UAAU,2BAKb;IAGK,YAAY;IAiBZ,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC;IAmB/C,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC;IA2BvD,aAAa,CAAC,EAAE,EAAE,MAAM;IAqB9B,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIzC,UAAU;IAKV,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE;IAIjD,aAAa,IAAI,WAAW,EAAE;IAI9B,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE;CAS7C;AAGD,eAAO,MAAM,YAAY,mBAA0B,CAAC"}
1
+ {"version":3,"file":"product-store.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/stores/product-store.svelte.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AASrE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,IAAI,CAKT;IAEH,OAAO,CAAC,GAAG,CAA2B;IAGtC,IAAI,KAAK,kBAER;IACD,IAAI,OAAO,YAEV;IACD,IAAI,KAAK,kBAER;IACD,IAAI,eAAe,uBAElB;IAGD,IAAI,YAAY,WAEf;IAED,IAAI,UAAU,WAKb;IAED,IAAI,UAAU,2BAKb;IAGK,YAAY;IAiBZ,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC;IAmB/C,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC;IA2BvD,aAAa,CAAC,EAAE,EAAE,MAAM;IAqB9B,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIzC,UAAU;IAKV,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE;IAIjD,aAAa,IAAI,WAAW,EAAE;IAI9B,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE;CAS7C;AAGD,eAAO,MAAM,YAAY,mBAA0B,CAAC"}
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "version": "1.0.0",
3
- "timestamp": 1782873357414,
3
+ "timestamp": 1782943609744,
4
4
  "packageName": "@happyvertical/smrt-products",
5
- "packageVersion": "0.37.2",
5
+ "packageVersion": "0.37.4",
6
6
  "objects": {
7
7
  "@happyvertical/smrt-products:CategoryCollection": {
8
8
  "name": "categorycollection",
@@ -1,12 +1,3 @@
1
- import "./chunks/__smrt-register__-BIgFaVKn.js";
2
- import { C, M, P, a, b, c, S } from "./chunks/Sku-sl6xf1PR.js";
3
- export {
4
- C as Category,
5
- M as Material,
6
- P as Product,
7
- a as ProductAsset,
8
- b as ProductType,
9
- c as ProductVariant,
10
- S as Sku
11
- };
12
- //# sourceMappingURL=models.js.map
1
+ import { a as Product, i as Material, n as ProductVariant, o as ProductType, r as ProductAsset, s as Category, t as Sku } from "./chunks/Sku-B0w2dfHb.js";
2
+ import "./chunks/models-JPB-sld2.js";
3
+ export { Category, Material, Product, ProductAsset, ProductType, ProductVariant, Sku };
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "generatedAt": "2026-07-01T02:35:57.970Z",
3
+ "generatedAt": "2026-07-01T22:06:50.119Z",
4
4
  "packageName": "@happyvertical/smrt-products",
5
- "packageVersion": "0.37.2",
5
+ "packageVersion": "0.37.4",
6
6
  "sourceManifestPath": "dist/lib/manifest.json",
7
7
  "agentDocPath": "AGENTS.md",
8
8
  "sourceHashes": {
9
- "manifest": "f35a5c5dfff83938b9a8a4dc92fe5d6c241370978bcd4a6137c59e93ce02fc44",
10
- "packageJson": "ccf4be26302b2849a580055037a441ef5f97b0c1815647758a5cc681dd9f84bb",
9
+ "manifest": "abcc5658bde4684a510b8b402915d28736c33164f5e755528fc7aea517d2df83",
10
+ "packageJson": "01a3182ea3ce8a6d4f85e7a43af463e232769b4a896960c8f8ada92001a23d8e",
11
11
  "agents": "ede6063b72600b84908e1e32216fbbdd69d70d309f0b23c2add338ad080702d4"
12
12
  },
13
13
  "exports": [
@@ -32,21 +32,21 @@
32
32
  "@happyvertical/smrt-ui": "workspace:*",
33
33
  "@happyvertical/sql": "catalog:",
34
34
  "@happyvertical/utils": "catalog:",
35
- "cors": "^2.8.5",
35
+ "cors": "^2.8.6",
36
36
  "express": "^5.2.1",
37
37
  "@originjs/vite-plugin-federation": "^1.4.1",
38
- "@sveltejs/package": "^2.5.7",
39
- "@sveltejs/vite-plugin-svelte": "^6.2.4",
38
+ "@sveltejs/package": "^2.5.8",
39
+ "@sveltejs/vite-plugin-svelte": "^7.1.2",
40
40
  "@types/cors": "2.8.19",
41
- "@types/express": "^5.0.0",
42
- "@types/node": "25.0.9",
41
+ "@types/express": "^5.0.6",
42
+ "@types/node": "24.13.2",
43
43
  "@happyvertical/smrt-vitest": "workspace:*",
44
- "concurrently": "^9.2.1",
45
- "svelte": "^5.46.4",
46
- "svelte-check": "^4.3.5",
44
+ "concurrently": "^9.2.3",
45
+ "svelte": "^5.56.4",
46
+ "svelte-check": "^4.7.1",
47
47
  "typescript": "^5.9.3",
48
- "vite": "^7.3.6",
49
- "vitest": "^4.0.17"
48
+ "vite": "^8.1.2",
49
+ "vitest": "^4.1.9"
50
50
  },
51
51
  "smrtDependencies": [
52
52
  "@happyvertical/smrt-assets",
@@ -149,3 +149,4 @@
149
149
  padding-top: 1rem;
150
150
  border-top: 1px solid var(--smrt-color-outline-variant, #f3f4f6);
151
151
  }
152
+ /*$vite$:1*/
@@ -1,6 +1,2 @@
1
- import { P, p } from "./chunks/product-store.svelte-Dayd5n3W.js";
2
- export {
3
- P as ProductStoreClass,
4
- p as productStore
5
- };
6
- //# sourceMappingURL=stores.js.map
1
+ import { n as productStore, t as ProductStoreClass } from "./chunks/stores-CB0SI1c5.js";
2
+ export { ProductStoreClass, productStore };
package/dist/lib/utils.js CHANGED
@@ -1,27 +1,2 @@
1
- function formatPrice(price) {
2
- return new Intl.NumberFormat("en-US", {
3
- style: "currency",
4
- currency: "USD"
5
- }).format(price);
6
- }
7
- function formatDate(date) {
8
- const dateObj = typeof date === "string" ? new Date(date) : date;
9
- return new Intl.DateTimeFormat("en-US", {
10
- year: "numeric",
11
- month: "short",
12
- day: "numeric"
13
- }).format(dateObj);
14
- }
15
- function slugify(text) {
16
- return text.normalize("NFKD").replace(/[^\p{L}\p{N} ]+/gu, "").trim().toLowerCase().replace(/ +/g, "-").replace(/^-+|-+$/g, "");
17
- }
18
- function generateId() {
19
- return Math.random().toString(36).substr(2, 9);
20
- }
21
- export {
22
- formatDate,
23
- formatPrice,
24
- generateId,
25
- slugify
26
- };
27
- //# sourceMappingURL=utils.js.map
1
+ import { i as slugify, n as formatPrice, r as generateId, t as formatDate } from "./chunks/utils-BgTqlQoH.js";
2
+ export { formatDate, formatPrice, generateId, slugify };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-products",
3
- "version": "0.37.2",
3
+ "version": "0.37.4",
4
4
  "description": "SMRT products module: triple-purpose microservice template for standalone apps, federated modules, and NPM libraries",
5
5
  "author": "HappyVertical",
6
6
  "type": "module",
@@ -48,21 +48,21 @@
48
48
  "./manifest.json": "./dist/lib/manifest.json"
49
49
  },
50
50
  "dependencies": {
51
- "@happyvertical/ai": "^0.74.10",
52
- "@happyvertical/files": "^0.74.10",
53
- "@happyvertical/logger": "^0.74.10",
54
- "@happyvertical/sql": "^0.74.10",
55
- "@happyvertical/utils": "^0.74.10",
56
- "cors": "^2.8.5",
51
+ "@happyvertical/ai": "^0.74.11",
52
+ "@happyvertical/files": "^0.74.11",
53
+ "@happyvertical/logger": "^0.74.11",
54
+ "@happyvertical/sql": "^0.74.11",
55
+ "@happyvertical/utils": "^0.74.11",
56
+ "cors": "^2.8.6",
57
57
  "express": "^5.2.1",
58
- "@happyvertical/smrt-assets": "0.37.2",
59
- "@happyvertical/smrt-core": "0.37.2",
60
- "@happyvertical/smrt-scanner": "0.37.2",
61
- "@happyvertical/smrt-tenancy": "0.37.2",
62
- "@happyvertical/smrt-ui": "0.37.2"
58
+ "@happyvertical/smrt-assets": "0.37.4",
59
+ "@happyvertical/smrt-core": "0.37.4",
60
+ "@happyvertical/smrt-scanner": "0.37.4",
61
+ "@happyvertical/smrt-tenancy": "0.37.4",
62
+ "@happyvertical/smrt-ui": "0.37.4"
63
63
  },
64
64
  "peerDependencies": {
65
- "svelte": "^5.46.4"
65
+ "svelte": "^5.56.4"
66
66
  },
67
67
  "peerDependenciesMeta": {
68
68
  "svelte": {
@@ -71,18 +71,18 @@
71
71
  },
72
72
  "devDependencies": {
73
73
  "@originjs/vite-plugin-federation": "^1.4.1",
74
- "@sveltejs/package": "^2.5.7",
75
- "@sveltejs/vite-plugin-svelte": "^6.2.4",
74
+ "@sveltejs/package": "^2.5.8",
75
+ "@sveltejs/vite-plugin-svelte": "^7.1.2",
76
76
  "@types/cors": "2.8.19",
77
- "@types/express": "^5.0.0",
78
- "@types/node": "25.0.9",
79
- "concurrently": "^9.2.1",
80
- "svelte": "^5.46.4",
81
- "svelte-check": "^4.3.5",
77
+ "@types/express": "^5.0.6",
78
+ "@types/node": "24.13.2",
79
+ "concurrently": "^9.2.3",
80
+ "svelte": "^5.56.4",
81
+ "svelte-check": "^4.7.1",
82
82
  "typescript": "^5.9.3",
83
- "vite": "^7.3.6",
84
- "vitest": "^4.0.17",
85
- "@happyvertical/smrt-vitest": "0.37.2"
83
+ "vite": "^8.1.2",
84
+ "vitest": "^4.1.9",
85
+ "@happyvertical/smrt-vitest": "0.37.4"
86
86
  },
87
87
  "keywords": [
88
88
  "smrt",
@@ -1,64 +0,0 @@
1
- import { getOwnedAssetsFromCollection, addOwnedAssetFromCollection, removeOwnedAssetFromCollection } from "@happyvertical/smrt-assets";
2
- import { smrt, SmrtJunction } from "@happyvertical/smrt-core";
3
- import { a as ProductAsset } from "./Sku-sl6xf1PR.js";
4
- var __defProp = Object.defineProperty;
5
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7
- var __decorateClass = (decorators, target, key, kind) => {
8
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
9
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
10
- if (decorator = decorators[i])
11
- result = decorator(result) || result;
12
- return result;
13
- };
14
- var __publicField = (obj, key, value) => __defNormalProp(obj, key + "", value);
15
- let ProductAssetCollection = class extends SmrtJunction {
16
- leftField = "productId";
17
- rightField = "assetId";
18
- productCollectionPromise = null;
19
- async getProductCollection() {
20
- if (!this.productCollectionPromise) {
21
- const { ProductCollection } = await import("./SkuCollection-f_a3k93c.js").then((n) => n.b);
22
- this.productCollectionPromise = ProductCollection.create({ db: this.db });
23
- }
24
- return this.productCollectionPromise;
25
- }
26
- async getAssets(productId, relationship) {
27
- return getOwnedAssetsFromCollection(
28
- await this.getProductCollection(),
29
- productId,
30
- relationship
31
- );
32
- }
33
- async addAsset(productId, asset, relationship = "attachment", sortOrder = 0) {
34
- await addOwnedAssetFromCollection(
35
- await this.getProductCollection(),
36
- "Product",
37
- productId,
38
- asset,
39
- relationship,
40
- sortOrder
41
- );
42
- }
43
- async removeAsset(productId, assetId, relationship) {
44
- await removeOwnedAssetFromCollection(
45
- await this.getProductCollection(),
46
- "Product",
47
- productId,
48
- assetId,
49
- relationship
50
- );
51
- }
52
- };
53
- __publicField(ProductAssetCollection, "_itemClass", ProductAsset);
54
- ProductAssetCollection = __decorateClass([
55
- smrt({
56
- api: false,
57
- mcp: false,
58
- cli: false
59
- })
60
- ], ProductAssetCollection);
61
- export {
62
- ProductAssetCollection
63
- };
64
- //# sourceMappingURL=ProductAssetCollection-B93HdSlX.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProductAssetCollection-B93HdSlX.js","sources":["../../../src/lib/collections/ProductAssetCollection.ts"],"sourcesContent":["import type { Asset } from '@happyvertical/smrt-assets';\nimport {\n addOwnedAssetFromCollection,\n getOwnedAssetsFromCollection,\n removeOwnedAssetFromCollection,\n} from '@happyvertical/smrt-assets';\nimport type { SmrtCollectionOptions } from '@happyvertical/smrt-core';\nimport { SmrtJunction, smrt } from '@happyvertical/smrt-core';\nimport { ProductAsset } from '../models/ProductAsset';\nimport type { ProductCollection } from './ProductCollection';\n\nexport interface ProductAssetCollectionOptions extends SmrtCollectionOptions {}\n\n@smrt({\n api: false,\n mcp: false,\n cli: false,\n})\nexport class ProductAssetCollection extends SmrtJunction<ProductAsset> {\n static readonly _itemClass = ProductAsset;\n protected leftField = 'productId';\n protected rightField = 'assetId';\n\n private productCollectionPromise: Promise<ProductCollection> | null = null;\n\n private async getProductCollection(): Promise<ProductCollection> {\n if (!this.productCollectionPromise) {\n const { ProductCollection } = await import('./ProductCollection');\n this.productCollectionPromise = ProductCollection.create({ db: this.db });\n }\n\n return this.productCollectionPromise;\n }\n\n async getAssets(productId: string, relationship?: string): Promise<Asset[]> {\n return getOwnedAssetsFromCollection(\n await this.getProductCollection(),\n productId,\n relationship,\n );\n }\n\n async addAsset(\n productId: string,\n asset: Asset,\n relationship = 'attachment',\n sortOrder = 0,\n ): Promise<void> {\n await addOwnedAssetFromCollection(\n await this.getProductCollection(),\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 await this.getProductCollection(),\n 'Product',\n productId,\n assetId,\n relationship,\n );\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAkBO,IAAM,yBAAN,cAAqC,aAA2B;AAAA,EAE3D,YAAY;AAAA,EACZ,aAAa;AAAA,EAEf,2BAA8D;AAAA,EAEtE,MAAc,uBAAmD;AAC/D,QAAI,CAAC,KAAK,0BAA0B;AAClC,YAAM,EAAE,kBAAA,IAAsB,MAAM,OAAO,6BAAqB,EAAA,KAAA,OAAA,EAAA,CAAA;AAChE,WAAK,2BAA2B,kBAAkB,OAAO,EAAE,IAAI,KAAK,IAAI;AAAA,IAC1E;AAEA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,UAAU,WAAmB,cAAyC;AAC1E,WAAO;AAAA,MACL,MAAM,KAAK,qBAAA;AAAA,MACX;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,MAAM,SACJ,WACA,OACA,eAAe,cACf,YAAY,GACG;AACf,UAAM;AAAA,MACJ,MAAM,KAAK,qBAAA;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,MAAM,YACJ,WACA,SACA,cACe;AACf,UAAM;AAAA,MACJ,MAAM,KAAK,qBAAA;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACF;AApDE,cADW,wBACK,cAAa,YAAA;AADlB,yBAAN,gBAAA;AAAA,EALN,KAAK;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EAAA,CACN;AAAA,GACY,sBAAA;"}