@sixtyninecommerce/client 0.1.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 (130) hide show
  1. package/README.md +96 -0
  2. package/dist/client.d.ts +3 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +37 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/commerce/cart.d.ts +11 -0
  7. package/dist/commerce/cart.d.ts.map +1 -0
  8. package/dist/commerce/cart.js +51 -0
  9. package/dist/commerce/cart.js.map +1 -0
  10. package/dist/commerce/checkout.d.ts +13 -0
  11. package/dist/commerce/checkout.d.ts.map +1 -0
  12. package/dist/commerce/checkout.js +55 -0
  13. package/dist/commerce/checkout.js.map +1 -0
  14. package/dist/commerce/customer.d.ts +15 -0
  15. package/dist/commerce/customer.d.ts.map +1 -0
  16. package/dist/commerce/customer.js +45 -0
  17. package/dist/commerce/customer.js.map +1 -0
  18. package/dist/commerce/index.d.ts +4 -0
  19. package/dist/commerce/index.d.ts.map +1 -0
  20. package/dist/commerce/index.js +20 -0
  21. package/dist/commerce/index.js.map +1 -0
  22. package/dist/commerce/products.d.ts +11 -0
  23. package/dist/commerce/products.d.ts.map +1 -0
  24. package/dist/commerce/products.js +47 -0
  25. package/dist/commerce/products.js.map +1 -0
  26. package/dist/commerce/queries.d.ts +29 -0
  27. package/dist/commerce/queries.d.ts.map +1 -0
  28. package/dist/commerce/queries.js +444 -0
  29. package/dist/commerce/queries.js.map +1 -0
  30. package/dist/commerce/search.d.ts +6 -0
  31. package/dist/commerce/search.d.ts.map +1 -0
  32. package/dist/commerce/search.js +23 -0
  33. package/dist/commerce/search.js.map +1 -0
  34. package/dist/constants.d.ts +7 -0
  35. package/dist/constants.d.ts.map +1 -0
  36. package/dist/constants.js +7 -0
  37. package/dist/constants.js.map +1 -0
  38. package/dist/content/assets.d.ts +6 -0
  39. package/dist/content/assets.d.ts.map +1 -0
  40. package/dist/content/assets.js +17 -0
  41. package/dist/content/assets.js.map +1 -0
  42. package/dist/content/forms.d.ts +7 -0
  43. package/dist/content/forms.d.ts.map +1 -0
  44. package/dist/content/forms.js +20 -0
  45. package/dist/content/forms.js.map +1 -0
  46. package/dist/content/index.d.ts +4 -0
  47. package/dist/content/index.d.ts.map +1 -0
  48. package/dist/content/index.js +17 -0
  49. package/dist/content/index.js.map +1 -0
  50. package/dist/content/items.d.ts +6 -0
  51. package/dist/content/items.d.ts.map +1 -0
  52. package/dist/content/items.js +23 -0
  53. package/dist/content/items.js.map +1 -0
  54. package/dist/content/menus.d.ts +7 -0
  55. package/dist/content/menus.d.ts.map +1 -0
  56. package/dist/content/menus.js +60 -0
  57. package/dist/content/menus.js.map +1 -0
  58. package/dist/content/resolve.d.ts +6 -0
  59. package/dist/content/resolve.d.ts.map +1 -0
  60. package/dist/content/resolve.js +11 -0
  61. package/dist/content/resolve.js.map +1 -0
  62. package/dist/content/strings.d.ts +6 -0
  63. package/dist/content/strings.d.ts.map +1 -0
  64. package/dist/content/strings.js +11 -0
  65. package/dist/content/strings.js.map +1 -0
  66. package/dist/core/context.d.ts +3 -0
  67. package/dist/core/context.d.ts.map +1 -0
  68. package/dist/core/context.js +93 -0
  69. package/dist/core/context.js.map +1 -0
  70. package/dist/core/headers.d.ts +5 -0
  71. package/dist/core/headers.d.ts.map +1 -0
  72. package/dist/core/headers.js +23 -0
  73. package/dist/core/headers.js.map +1 -0
  74. package/dist/core/http.d.ts +9 -0
  75. package/dist/core/http.d.ts.map +1 -0
  76. package/dist/core/http.js +140 -0
  77. package/dist/core/http.js.map +1 -0
  78. package/dist/currency/exchange.d.ts +7 -0
  79. package/dist/currency/exchange.d.ts.map +1 -0
  80. package/dist/currency/exchange.js +18 -0
  81. package/dist/currency/exchange.js.map +1 -0
  82. package/dist/currency/index.d.ts +4 -0
  83. package/dist/currency/index.d.ts.map +1 -0
  84. package/dist/currency/index.js +5 -0
  85. package/dist/currency/index.js.map +1 -0
  86. package/dist/errors.d.ts +12 -0
  87. package/dist/errors.d.ts.map +1 -0
  88. package/dist/errors.js +21 -0
  89. package/dist/errors.js.map +1 -0
  90. package/dist/index.d.ts +5 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +4 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/media/index.d.ts +4 -0
  95. package/dist/media/index.d.ts.map +1 -0
  96. package/dist/media/index.js +12 -0
  97. package/dist/media/index.js.map +1 -0
  98. package/dist/media/urls.d.ts +31 -0
  99. package/dist/media/urls.d.ts.map +1 -0
  100. package/dist/media/urls.js +63 -0
  101. package/dist/media/urls.js.map +1 -0
  102. package/dist/navigation/index.d.ts +4 -0
  103. package/dist/navigation/index.d.ts.map +1 -0
  104. package/dist/navigation/index.js +5 -0
  105. package/dist/navigation/index.js.map +1 -0
  106. package/dist/navigation/routes.d.ts +8 -0
  107. package/dist/navigation/routes.d.ts.map +1 -0
  108. package/dist/navigation/routes.js +33 -0
  109. package/dist/navigation/routes.js.map +1 -0
  110. package/dist/pricing/format.d.ts +3 -0
  111. package/dist/pricing/format.d.ts.map +1 -0
  112. package/dist/pricing/format.js +13 -0
  113. package/dist/pricing/format.js.map +1 -0
  114. package/dist/pricing/index.d.ts +6 -0
  115. package/dist/pricing/index.d.ts.map +1 -0
  116. package/dist/pricing/index.js +41 -0
  117. package/dist/pricing/index.js.map +1 -0
  118. package/dist/pricing/tiers.d.ts +4 -0
  119. package/dist/pricing/tiers.d.ts.map +1 -0
  120. package/dist/pricing/tiers.js +31 -0
  121. package/dist/pricing/tiers.js.map +1 -0
  122. package/dist/pricing/validation.d.ts +10 -0
  123. package/dist/pricing/validation.d.ts.map +1 -0
  124. package/dist/pricing/validation.js +26 -0
  125. package/dist/pricing/validation.js.map +1 -0
  126. package/dist/types.d.ts +638 -0
  127. package/dist/types.d.ts.map +1 -0
  128. package/dist/types.js +2 -0
  129. package/dist/types.js.map +1 -0
  130. package/package.json +45 -0
@@ -0,0 +1,60 @@
1
+ function buildMenuTree(items) {
2
+ const byId = new Map();
3
+ const roots = [];
4
+ for (const item of items) {
5
+ byId.set(item.id, {
6
+ id: item.id,
7
+ parentId: item.parent_id,
8
+ itemType: item.item_type,
9
+ url: item.url,
10
+ targetId: item.target_id,
11
+ position: item.position,
12
+ openInNewTab: item.open_in_new_tab,
13
+ metadata: item.metadata,
14
+ translations: item.translations.map((t) => ({
15
+ languageCode: t.language_code,
16
+ label: t.label,
17
+ title: t.title,
18
+ })),
19
+ resolvedPath: item.resolvedPath,
20
+ children: [],
21
+ });
22
+ }
23
+ for (const item of items) {
24
+ const node = byId.get(item.id);
25
+ if (item.parent_id && byId.has(item.parent_id)) {
26
+ byId.get(item.parent_id).children.push(node);
27
+ }
28
+ else {
29
+ roots.push(node);
30
+ }
31
+ }
32
+ function sortByPosition(nodes) {
33
+ nodes.sort((a, b) => a.position - b.position);
34
+ for (const node of nodes) {
35
+ if (node.children.length > 0)
36
+ sortByPosition(node.children);
37
+ }
38
+ }
39
+ sortByPosition(roots);
40
+ return roots;
41
+ }
42
+ export function createMenuMethods(http) {
43
+ return {
44
+ async getMenus() {
45
+ const data = await http.cmsGet('/menus');
46
+ return data.data;
47
+ },
48
+ async getMenu(slugOrId) {
49
+ const isUuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(slugOrId);
50
+ const path = isUuid ? `/menus/${slugOrId}` : `/menus/by-slug/${slugOrId}`;
51
+ const data = await http.cmsGet(path);
52
+ const menu = data.data;
53
+ if (Array.isArray(menu.items)) {
54
+ menu.items = buildMenuTree(menu.items);
55
+ }
56
+ return menu;
57
+ },
58
+ };
59
+ }
60
+ //# sourceMappingURL=menus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menus.js","sourceRoot":"","sources":["../../src/content/menus.ts"],"names":[],"mappings":"AAgBA,SAAS,aAAa,CAAC,KAAoB;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoB,CAAC;IACzC,MAAM,KAAK,GAAe,EAAE,CAAC;IAE7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YAChB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,IAAI,CAAC,eAAe;YAClC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1C,YAAY,EAAE,CAAC,CAAC,aAAa;gBAC7B,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,KAAK,EAAE,CAAC,CAAC,KAAK;aACf,CAAC,CAAC;YACH,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,QAAQ,EAAE,EAAE;SACb,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC;QAChC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,SAAS,cAAc,CAAC,KAAiB;QACvC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;gBAAE,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,cAAc,CAAC,KAAK,CAAC,CAAC;IAEtB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAgB;IAChD,OAAO;QACL,KAAK,CAAC,QAAQ;YACZ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAmB,QAAQ,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,QAAgB;YAC5B,MAAM,MAAM,GAAG,iEAAiE,CAAC,IAAI,CACnF,QAAQ,CACT,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,QAAQ,EAAE,CAAC,CAAC,CAAC,kBAAkB,QAAQ,EAAE,CAAC;YAC1E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAoC,IAAI,CAAC,CAAC;YACxE,MAAM,IAAI,GAAG,IAAI,CAAC,IAA+B,CAAC;YAElD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,KAAsB,CAAC,CAAC;YAC1D,CAAC;YAED,OAAO,IAAuB,CAAC;QACjC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { HttpClient } from '../core/http.js';
2
+ import type { ResolvedContent } from '../types.js';
3
+ export declare function createResolveMethods(http: HttpClient): {
4
+ resolvePath(path: string, locale?: string): Promise<ResolvedContent>;
5
+ };
6
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/content/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU;sBAEzB,MAAM,WAAW,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;EAM7E"}
@@ -0,0 +1,11 @@
1
+ export function createResolveMethods(http) {
2
+ return {
3
+ async resolvePath(path, locale) {
4
+ const params = { path };
5
+ if (locale)
6
+ params.locale = locale;
7
+ return http.cmsGet('/resolve', params);
8
+ },
9
+ };
10
+ }
11
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/content/resolve.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,oBAAoB,CAAC,IAAgB;IACnD,OAAO;QACL,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,MAAe;YAC7C,MAAM,MAAM,GAA2B,EAAE,IAAI,EAAE,CAAC;YAChD,IAAI,MAAM;gBAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YACnC,OAAO,IAAI,CAAC,MAAM,CAAkB,UAAU,EAAE,MAAM,CAAC,CAAC;QAC1D,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { HttpClient } from '../core/http.js';
2
+ import type { ContentStrings } from '../types.js';
3
+ export declare function createStringMethods(http: HttpClient): {
4
+ getContentStrings(format?: "list" | "export"): Promise<ContentStrings>;
5
+ };
6
+ //# sourceMappingURL=strings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../../src/content/strings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU;+BAEf,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC;EAO/E"}
@@ -0,0 +1,11 @@
1
+ export function createStringMethods(http) {
2
+ return {
3
+ async getContentStrings(format) {
4
+ if (format === 'list') {
5
+ return http.cmsGet('/content-strings');
6
+ }
7
+ return http.cmsGet('/content-strings/export');
8
+ },
9
+ };
10
+ }
11
+ //# sourceMappingURL=strings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strings.js","sourceRoot":"","sources":["../../src/content/strings.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,mBAAmB,CAAC,IAAgB;IAClD,OAAO;QACL,KAAK,CAAC,iBAAiB,CAAC,MAA0B;YAChD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC,MAAM,CAAiB,kBAAkB,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,IAAI,CAAC,MAAM,CAAiB,yBAAyB,CAAC,CAAC;QAChE,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { StoreContext, StorefrontClientConfig } from '../types.js';
2
+ export declare function createStoreContext(config: StorefrontClientConfig): Promise<StoreContext>;
3
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAe,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErF,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CA6B9F"}
@@ -0,0 +1,93 @@
1
+ import { DEFAULT_CMS_URL, DEFAULT_PLUGINS_URL, DEFAULT_VENDURE_URL, INIT_TIMEOUT_MS, SHOP_API_PATH, } from '../constants.js';
2
+ import { StorefrontError } from '../errors.js';
3
+ export async function createStoreContext(config) {
4
+ if (!config.storeCode) {
5
+ throw new StorefrontError('storeCode is required', 'cms');
6
+ }
7
+ if (!config.cdnUrl) {
8
+ throw new StorefrontError('cdnUrl is required', 'cms');
9
+ }
10
+ const fetchFn = config.fetch ?? globalThis.fetch;
11
+ const cdnUrl = config.cdnUrl.replace(/\/+$/, '');
12
+ const vendureUrl = (config.vendureUrl ?? DEFAULT_VENDURE_URL).replace(/\/+$/, '');
13
+ const cmsUrl = (config.cmsUrl ?? DEFAULT_CMS_URL).replace(/\/+$/, '');
14
+ const pluginsUrl = (config.pluginsUrl ?? DEFAULT_PLUGINS_URL).replace(/\/+$/, '');
15
+ const channel = await resolveChannel(cmsUrl, config.storeCode, fetchFn);
16
+ const customFields = await fetchChannelCustomFields(vendureUrl, channel.token, fetchFn);
17
+ channel.customFields = customFields;
18
+ return {
19
+ channel,
20
+ cdnUrl,
21
+ vendureUrl,
22
+ cmsUrl,
23
+ pluginsUrl,
24
+ languageCode: config.defaultLanguageCode ?? channel.defaultLanguageCode,
25
+ currencyCode: channel.defaultCurrencyCode,
26
+ authToken: null,
27
+ fetch: fetchFn,
28
+ };
29
+ }
30
+ async function resolveChannel(cmsUrl, storeCode, fetchFn) {
31
+ const controller = new AbortController();
32
+ const timeoutId = setTimeout(() => controller.abort(), INIT_TIMEOUT_MS);
33
+ try {
34
+ const response = await fetchFn(`${cmsUrl}/channels/by-code/${encodeURIComponent(storeCode)}`, {
35
+ signal: controller.signal,
36
+ });
37
+ if (response.status === 404) {
38
+ throw new StorefrontError(`Store code "${storeCode}" not found. Check storeCode matches a channel code in the dashboard.`, 'cms', 404);
39
+ }
40
+ if (!response.ok) {
41
+ throw new StorefrontError(`CMS returned ${String(response.status)}: ${response.statusText}`, 'cms', response.status);
42
+ }
43
+ const json = (await response.json());
44
+ return {
45
+ id: json.data.id,
46
+ code: json.data.code,
47
+ token: json.data.token,
48
+ defaultLanguageCode: json.data.default_language_code,
49
+ defaultCurrencyCode: json.data.default_currency_code,
50
+ customFields: {},
51
+ };
52
+ }
53
+ catch (error) {
54
+ if (error instanceof StorefrontError)
55
+ throw error;
56
+ if (error.name === 'AbortError') {
57
+ throw new StorefrontError(`Timed out connecting to CMS at ${cmsUrl}. Is the service running?`, 'cms');
58
+ }
59
+ throw new StorefrontError(`Failed to resolve channel: ${error.message}`, 'cms');
60
+ }
61
+ finally {
62
+ clearTimeout(timeoutId);
63
+ }
64
+ }
65
+ async function fetchChannelCustomFields(vendureUrl, channelToken, fetchFn) {
66
+ const controller = new AbortController();
67
+ const timeoutId = setTimeout(() => controller.abort(), INIT_TIMEOUT_MS);
68
+ try {
69
+ const response = await fetchFn(`${vendureUrl}${SHOP_API_PATH}`, {
70
+ method: 'POST',
71
+ headers: {
72
+ 'Content-Type': 'application/json',
73
+ 'vendure-token': channelToken,
74
+ },
75
+ body: JSON.stringify({
76
+ query: `query { activeChannel { customFields } }`,
77
+ }),
78
+ signal: controller.signal,
79
+ });
80
+ if (!response.ok) {
81
+ return {};
82
+ }
83
+ const json = (await response.json());
84
+ return json.data?.activeChannel?.customFields ?? {};
85
+ }
86
+ catch {
87
+ return {};
88
+ }
89
+ finally {
90
+ clearTimeout(timeoutId);
91
+ }
92
+ }
93
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { StoreContext } from '../types.js';
2
+ export declare function buildVendureHeaders(ctx: StoreContext): Record<string, string>;
3
+ export declare function buildCmsHeaders(ctx: StoreContext): Record<string, string>;
4
+ export declare function buildPluginsHeaders(ctx: StoreContext): Record<string, string>;
5
+ //# sourceMappingURL=headers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/core/headers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAY7E;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEzE;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK7E"}
@@ -0,0 +1,23 @@
1
+ export function buildVendureHeaders(ctx) {
2
+ const headers = {
3
+ 'Content-Type': 'application/json',
4
+ 'vendure-token': ctx.channel.token,
5
+ };
6
+ if (ctx.languageCode) {
7
+ headers.languageCode = ctx.languageCode;
8
+ }
9
+ if (ctx.authToken) {
10
+ headers.Authorization = `Bearer ${ctx.authToken}`;
11
+ }
12
+ return headers;
13
+ }
14
+ export function buildCmsHeaders(ctx) {
15
+ return { 'x-channel-id': ctx.channel.id };
16
+ }
17
+ export function buildPluginsHeaders(ctx) {
18
+ return {
19
+ 'x-channel-id': ctx.channel.id,
20
+ 'vendure-token': ctx.channel.token,
21
+ };
22
+ }
23
+ //# sourceMappingURL=headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headers.js","sourceRoot":"","sources":["../../src/core/headers.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CAAC,GAAiB;IACnD,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK;KACnC,CAAC;IACF,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACrB,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC;IAC1C,CAAC;IACD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,OAAO,CAAC,aAAa,GAAG,UAAU,GAAG,CAAC,SAAS,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAiB;IAC/C,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAiB;IACnD,OAAO;QACL,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE;QAC9B,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK;KACnC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { StoreContext } from '../types.js';
2
+ export interface HttpClient {
3
+ graphql<T = unknown>(query: string, variables?: Record<string, unknown>): Promise<T>;
4
+ cmsGet<T = unknown>(path: string, params?: Record<string, string>): Promise<T>;
5
+ cmsPost<T = unknown>(path: string, body: unknown): Promise<T>;
6
+ pluginsGet<T = unknown>(path: string, params?: Record<string, string>): Promise<T>;
7
+ }
8
+ export declare function createHttpClient(ctx: StoreContext): HttpClient;
9
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/core/http.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,aAAa,CAAC;AAGjE,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9D,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACpF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,UAAU,CAuK9D"}
@@ -0,0 +1,140 @@
1
+ import { REQUEST_TIMEOUT_MS, SHOP_API_PATH } from '../constants.js';
2
+ import { StorefrontError } from '../errors.js';
3
+ import { buildCmsHeaders, buildPluginsHeaders, buildVendureHeaders } from './headers.js';
4
+ export function createHttpClient(ctx) {
5
+ async function graphql(query, variables) {
6
+ const headers = buildVendureHeaders(ctx);
7
+ const controller = new AbortController();
8
+ const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
9
+ try {
10
+ const response = await ctx.fetch(`${ctx.vendureUrl}${SHOP_API_PATH}`, {
11
+ method: 'POST',
12
+ headers,
13
+ body: JSON.stringify({ query, variables }),
14
+ signal: controller.signal,
15
+ });
16
+ if (!response.ok) {
17
+ throw new StorefrontError(`Vendure Shop API returned ${String(response.status)}: ${response.statusText}`, 'vendure', response.status);
18
+ }
19
+ const json = (await response.json());
20
+ if (json.errors?.length) {
21
+ const messages = json.errors.map((e) => e.message).join('; ');
22
+ throw new StorefrontError(`GraphQL error: ${messages}`, 'vendure');
23
+ }
24
+ return json.data;
25
+ }
26
+ catch (error) {
27
+ if (error instanceof StorefrontError)
28
+ throw error;
29
+ if (error.name === 'AbortError') {
30
+ throw new StorefrontError('Request timed out (15s)', 'vendure');
31
+ }
32
+ throw new StorefrontError(`Vendure request failed: ${error.message}`, 'vendure');
33
+ }
34
+ finally {
35
+ clearTimeout(timeoutId);
36
+ }
37
+ }
38
+ async function cmsGet(path, params) {
39
+ const url = new URL(`${ctx.cmsUrl}${path}`);
40
+ if (params) {
41
+ for (const [key, value] of Object.entries(params)) {
42
+ url.searchParams.set(key, value);
43
+ }
44
+ }
45
+ if (ctx.languageCode && !url.searchParams.has('locale')) {
46
+ url.searchParams.set('locale', ctx.languageCode);
47
+ }
48
+ const controller = new AbortController();
49
+ const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
50
+ try {
51
+ const response = await ctx.fetch(url.toString(), {
52
+ method: 'GET',
53
+ headers: buildCmsHeaders(ctx),
54
+ signal: controller.signal,
55
+ });
56
+ if (!response.ok) {
57
+ throw new StorefrontError(`CMS returned ${String(response.status)}: ${response.statusText}`, 'cms', response.status);
58
+ }
59
+ return (await response.json());
60
+ }
61
+ catch (error) {
62
+ if (error instanceof StorefrontError)
63
+ throw error;
64
+ if (error.name === 'AbortError') {
65
+ throw new StorefrontError('Request timed out (15s)', 'cms');
66
+ }
67
+ throw new StorefrontError(`CMS request failed: ${error.message}`, 'cms');
68
+ }
69
+ finally {
70
+ clearTimeout(timeoutId);
71
+ }
72
+ }
73
+ async function cmsPost(path, body) {
74
+ const controller = new AbortController();
75
+ const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
76
+ try {
77
+ const response = await ctx.fetch(`${ctx.cmsUrl}${path}`, {
78
+ method: 'POST',
79
+ headers: {
80
+ ...buildCmsHeaders(ctx),
81
+ 'Content-Type': 'application/json',
82
+ },
83
+ body: JSON.stringify(body),
84
+ signal: controller.signal,
85
+ });
86
+ if (!response.ok) {
87
+ throw new StorefrontError(`CMS returned ${String(response.status)}: ${response.statusText}`, 'cms', response.status);
88
+ }
89
+ return (await response.json());
90
+ }
91
+ catch (error) {
92
+ if (error instanceof StorefrontError)
93
+ throw error;
94
+ if (error.name === 'AbortError') {
95
+ throw new StorefrontError('Request timed out (15s)', 'cms');
96
+ }
97
+ throw new StorefrontError(`CMS request failed: ${error.message}`, 'cms');
98
+ }
99
+ finally {
100
+ clearTimeout(timeoutId);
101
+ }
102
+ }
103
+ async function pluginsGet(path, params) {
104
+ const url = new URL(`${ctx.pluginsUrl}${path}`);
105
+ if (params) {
106
+ for (const [key, value] of Object.entries(params)) {
107
+ url.searchParams.set(key, value);
108
+ }
109
+ }
110
+ if (ctx.languageCode && !url.searchParams.has('language_code')) {
111
+ url.searchParams.set('language_code', ctx.languageCode);
112
+ }
113
+ const controller = new AbortController();
114
+ const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
115
+ try {
116
+ const response = await ctx.fetch(url.toString(), {
117
+ method: 'GET',
118
+ headers: buildPluginsHeaders(ctx),
119
+ signal: controller.signal,
120
+ });
121
+ if (!response.ok) {
122
+ throw new StorefrontError(`Plugins returned ${String(response.status)}: ${response.statusText}`, 'plugins', response.status);
123
+ }
124
+ return (await response.json());
125
+ }
126
+ catch (error) {
127
+ if (error instanceof StorefrontError)
128
+ throw error;
129
+ if (error.name === 'AbortError') {
130
+ throw new StorefrontError('Request timed out (15s)', 'plugins');
131
+ }
132
+ throw new StorefrontError(`Plugins request failed: ${error.message}`, 'plugins');
133
+ }
134
+ finally {
135
+ clearTimeout(timeoutId);
136
+ }
137
+ }
138
+ return { graphql, cmsGet, cmsPost, pluginsGet };
139
+ }
140
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/core/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { HttpClient } from '../core/http.js';
2
+ import type { ConvertedAmount, ExchangeRate } from '../types.js';
3
+ export declare function createExchangeMethods(http: HttpClient): {
4
+ getExchangeRates(): Promise<ExchangeRate[]>;
5
+ convertCurrency(amount: string, fromCurrency: string, toCurrency: string): Promise<ConvertedAmount>;
6
+ };
7
+ //# sourceMappingURL=exchange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchange.d.ts","sourceRoot":"","sources":["../../src/currency/exchange.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEjE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU;wBAExB,OAAO,CAAC,YAAY,EAAE,CAAC;4BAMvC,MAAM,gBACA,MAAM,cACR,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC;EAS9B"}
@@ -0,0 +1,18 @@
1
+ import { CONVERT_CURRENCY, GET_EXCHANGE_RATES } from '../commerce/queries.js';
2
+ export function createExchangeMethods(http) {
3
+ return {
4
+ async getExchangeRates() {
5
+ const data = await http.graphql(GET_EXCHANGE_RATES);
6
+ return data.exchangeRates;
7
+ },
8
+ async convertCurrency(amount, fromCurrency, toCurrency) {
9
+ const data = await http.graphql(CONVERT_CURRENCY, {
10
+ amount,
11
+ from: fromCurrency,
12
+ to: toCurrency,
13
+ });
14
+ return data.convertCurrency;
15
+ },
16
+ };
17
+ }
18
+ //# sourceMappingURL=exchange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchange.js","sourceRoot":"","sources":["../../src/currency/exchange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAI9E,MAAM,UAAU,qBAAqB,CAAC,IAAgB;IACpD,OAAO;QACL,KAAK,CAAC,gBAAgB;YACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAoC,kBAAkB,CAAC,CAAC;YACvF,OAAO,IAAI,CAAC,aAAa,CAAC;QAC5B,CAAC;QAED,KAAK,CAAC,eAAe,CACnB,MAAc,EACd,YAAoB,EACpB,UAAkB;YAElB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAuC,gBAAgB,EAAE;gBACtF,MAAM;gBACN,IAAI,EAAE,YAAY;gBAClB,EAAE,EAAE,UAAU;aACf,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,eAAe,CAAC;QAC9B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { HttpClient } from '../core/http.js';
2
+ import type { CurrencyModule } from '../types.js';
3
+ export declare function createCurrencyModule(http: HttpClient): CurrencyModule;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/currency/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,CAErE"}
@@ -0,0 +1,5 @@
1
+ import { createExchangeMethods } from './exchange.js';
2
+ export function createCurrencyModule(http) {
3
+ return createExchangeMethods(http);
4
+ }
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/currency/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,MAAM,UAAU,oBAAoB,CAAC,IAAgB;IACnD,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,12 @@
1
+ export type ServiceName = 'vendure' | 'cms' | 'plugins';
2
+ export declare class StorefrontError extends Error {
3
+ readonly service: ServiceName;
4
+ readonly statusCode?: number | undefined;
5
+ readonly errorCode?: string | undefined;
6
+ constructor(message: string, service: ServiceName, statusCode?: number | undefined, errorCode?: string | undefined);
7
+ }
8
+ export declare class MutationError extends StorefrontError {
9
+ readonly fields?: Record<string, unknown> | undefined;
10
+ constructor(errorCode: string, message: string, fields?: Record<string, unknown> | undefined);
11
+ }
12
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,CAAC;AAExD,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,OAAO,EAAE,WAAW;aACpB,UAAU,CAAC,EAAE,MAAM;aACnB,SAAS,CAAC,EAAE,MAAM;gBAHlC,OAAO,EAAE,MAAM,EACC,OAAO,EAAE,WAAW,EACpB,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,SAAS,CAAC,EAAE,MAAM,YAAA;CAKrC;AAED,qBAAa,aAAc,SAAQ,eAAe;aAI9B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAFhD,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAKnD"}
package/dist/errors.js ADDED
@@ -0,0 +1,21 @@
1
+ export class StorefrontError extends Error {
2
+ service;
3
+ statusCode;
4
+ errorCode;
5
+ constructor(message, service, statusCode, errorCode) {
6
+ super(message);
7
+ this.service = service;
8
+ this.statusCode = statusCode;
9
+ this.errorCode = errorCode;
10
+ this.name = 'StorefrontError';
11
+ }
12
+ }
13
+ export class MutationError extends StorefrontError {
14
+ fields;
15
+ constructor(errorCode, message, fields) {
16
+ super(message, 'vendure', undefined, errorCode);
17
+ this.fields = fields;
18
+ this.name = 'MutationError';
19
+ }
20
+ }
21
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAGtB;IACA;IACA;IAJlB,YACE,OAAe,EACC,OAAoB,EACpB,UAAmB,EACnB,SAAkB;QAElC,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,YAAO,GAAP,OAAO,CAAa;QACpB,eAAU,GAAV,UAAU,CAAS;QACnB,cAAS,GAAT,SAAS,CAAS;QAGlC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,eAAe;IAI9B;IAHlB,YACE,SAAiB,EACjB,OAAe,EACC,MAAgC;QAEhD,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAFhC,WAAM,GAAN,MAAM,CAA0B;QAGhD,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export { createStorefrontClient } from './client.js';
2
+ export { DEFAULT_CMS_URL, DEFAULT_PLUGINS_URL, DEFAULT_VENDURE_URL, SHOP_API_PATH, } from './constants.js';
3
+ export { MutationError, StorefrontError } from './errors.js';
4
+ export type { AddressInput, Asset, AssetPresetSize, AssetPresets, AssetQueryOptions, Breadcrumb, ChannelInfo, Collection, CollectionDetail, CollectionListOptions, CommerceModule, ContentModule, ContentQueryOptions, ContentStrings, ConvertedAmount, CurrencyModule, Customer, CustomerAddress, CustomerInput, ExchangeRate, Facet, FacetValue, FormDefinition, FormField, FormSubmissionResult, MediaModule, Menu, MenuItem, NavigationModule, OptionGroup, Order, OrderAddress, OrderLine, OrderListOptions, OrderSummary, OrderValidationError, OrderValidationResult, PaginatedList, PaymentInput, PaymentMethod, PresetName, PriceDisplay, PriceTier, PricingModule, Product, ProductListOptions, ProductOption, ProductSummary, ProductVariant, RegisterInput, ResolvedContent, ResponsiveImageData, RouteEntry, RoutesResponse, SearchFacetValue, SearchInput, SearchResult, SearchResultItem, ShippingMethod, StoreContext, StorefrontClient, StorefrontClientConfig, TierTableEntry, VariantPriceData, } from './types.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,GACd,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE7D,YAAY,EACV,YAAY,EACZ,KAAK,EACL,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EAErB,cAAc,EAEd,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,eAAe,EAEf,cAAc,EACd,QAAQ,EACR,eAAe,EAEf,aAAa,EACb,YAAY,EACZ,KAAK,EACL,UAAU,EACV,cAAc,EACd,SAAS,EACT,oBAAoB,EAEpB,WAAW,EACX,IAAI,EACJ,QAAQ,EAER,gBAAgB,EAChB,WAAW,EAEX,KAAK,EACL,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EAErB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,UAAU,EACV,YAAY,EACZ,SAAS,EAET,aAAa,EACb,OAAO,EACP,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,cAAc,EACd,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,WAAW,EAEX,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { createStorefrontClient } from './client.js';
2
+ export { DEFAULT_CMS_URL, DEFAULT_PLUGINS_URL, DEFAULT_VENDURE_URL, SHOP_API_PATH, } from './constants.js';
3
+ export { MutationError, StorefrontError } from './errors.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,GACd,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { MediaModule, StoreContext } from '../types.js';
2
+ export { getPresetUrl, getResponsiveImageData, PRESETS } from './urls.js';
3
+ export declare function createMediaModule(ctx: StoreContext): MediaModule;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/media/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG7D,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,WAAW,CAQhE"}
@@ -0,0 +1,12 @@
1
+ import { getPresetUrl, getResponsiveImageData, makeAssetUrl } from './urls.js';
2
+ export { getPresetUrl, getResponsiveImageData, PRESETS } from './urls.js';
3
+ export function createMediaModule(ctx) {
4
+ return {
5
+ assetUrl(path) {
6
+ return makeAssetUrl(ctx.cdnUrl, path);
7
+ },
8
+ getPresetUrl,
9
+ getResponsiveImageData,
10
+ };
11
+ }
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/media/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,YAAY,EAAW,MAAM,WAAW,CAAC;AAExF,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1E,MAAM,UAAU,iBAAiB,CAAC,GAAiB;IACjD,OAAO;QACL,QAAQ,CAAC,IAAI;YACX,OAAO,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACxC,CAAC;QACD,YAAY;QACZ,sBAAsB;KACvB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { Asset, PresetName, ResponsiveImageData } from '../types.js';
2
+ export declare const PRESETS: {
3
+ readonly xxs: {
4
+ readonly width: 50;
5
+ readonly height: 50;
6
+ };
7
+ readonly xs: {
8
+ readonly width: 150;
9
+ readonly height: 150;
10
+ };
11
+ readonly s: {
12
+ readonly width: 300;
13
+ readonly height: 300;
14
+ };
15
+ readonly m: {
16
+ readonly width: 500;
17
+ readonly height: 500;
18
+ };
19
+ readonly l: {
20
+ readonly width: 800;
21
+ readonly height: 800;
22
+ };
23
+ readonly xl: {
24
+ readonly width: 1800;
25
+ readonly height: 1800;
26
+ };
27
+ };
28
+ export declare function makeAssetUrl(cdnUrl: string, path: string): string;
29
+ export declare function getPresetUrl(asset: Asset, preset: PresetName, format?: 'original' | 'webp'): string;
30
+ export declare function getResponsiveImageData(asset: Asset, presets?: PresetName[]): ResponsiveImageData;
31
+ //# sourceMappingURL=urls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urls.d.ts","sourceRoot":"","sources":["../../src/media/urls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE1E,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;CAOV,CAAC;AAQX,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIjE;AAMD,wBAAgB,YAAY,CAC1B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,UAAU,EAClB,MAAM,GAAE,UAAU,GAAG,MAAe,GACnC,MAAM,CAQR;AAMD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAyChG"}