cloudcommerce 0.20.0 → 0.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/package.json +1 -1
  3. package/packages/api/package.json +1 -1
  4. package/packages/apps/affilate-program/package.json +1 -1
  5. package/packages/apps/correios/package.json +1 -1
  6. package/packages/apps/custom-payment/package.json +1 -1
  7. package/packages/apps/custom-shipping/package.json +1 -1
  8. package/packages/apps/datafrete/package.json +1 -1
  9. package/packages/apps/discounts/package.json +1 -1
  10. package/packages/apps/emails/package.json +1 -1
  11. package/packages/apps/fb-conversions/package.json +1 -1
  12. package/packages/apps/flash-courier/package.json +1 -1
  13. package/packages/apps/frenet/package.json +1 -1
  14. package/packages/apps/galaxpay/package.json +1 -1
  15. package/packages/apps/google-analytics/package.json +1 -1
  16. package/packages/apps/jadlog/package.json +1 -1
  17. package/packages/apps/loyalty-points/package.json +1 -1
  18. package/packages/apps/melhor-envio/package.json +1 -1
  19. package/packages/apps/mercadopago/package.json +1 -1
  20. package/packages/apps/pagarme/package.json +1 -1
  21. package/packages/apps/paghiper/package.json +1 -1
  22. package/packages/apps/pix/package.json +1 -1
  23. package/packages/apps/tiny-erp/package.json +1 -1
  24. package/packages/apps/webhooks/package.json +1 -1
  25. package/packages/cli/package.json +1 -1
  26. package/packages/config/package.json +1 -1
  27. package/packages/emails/package.json +1 -1
  28. package/packages/events/package.json +1 -1
  29. package/packages/feeds/package.json +1 -1
  30. package/packages/firebase/package.json +1 -1
  31. package/packages/i18n/package.json +1 -1
  32. package/packages/modules/package.json +1 -1
  33. package/packages/passport/package.json +1 -1
  34. package/packages/ssr/lib/firebase/serve-storefront.js +17 -111
  35. package/packages/ssr/lib/firebase/serve-storefront.js.map +1 -1
  36. package/packages/ssr/package.json +1 -1
  37. package/packages/ssr/src/firebase/serve-storefront.ts +16 -121
  38. package/packages/storefront/dist/server/entry.mjs +1 -1
  39. package/packages/storefront/package.json +1 -1
  40. package/packages/types/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [0.20.1](https://github.com/ecomplus/cloud-commerce/compare/v0.20.0...v0.20.1) (2023-07-19)
6
+
7
+
8
+ ### Features
9
+
10
+ * **ssr:** Send 103 early hints when there is only one CSS file (UnoCSS bundle) :zap: ([327d829](https://github.com/ecomplus/cloud-commerce/commit/327d829a91d63b68708f25891a1ecc207612a916))
11
+
5
12
  ## [0.20.0](https://github.com/ecomplus/cloud-commerce/compare/v0.19.0...v0.20.0) (2023-07-19)
6
13
 
7
14
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cloudcommerce",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "Open fair-code headless commerce platform: API-first, microservices based, event driven and cloud native",
6
6
  "main": "packages/api/lib/index.js",
7
7
  "author": "E-Com Club Softwares para E-commerce <ti@e-com.club>",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/api",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce APIs client/adapter",
6
6
  "main": "lib/api.js",
7
7
  "types": "lib/api.d.ts",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-affilate-program",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app for simple affiliate program",
6
6
  "main": "lib/index.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-correios",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app for Correios shipping calculation",
6
6
  "main": "lib/correios.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-custom-payment",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app for simple custom payment methods",
6
6
  "main": "lib/index.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-custom-shipping",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app for custom shipping methods",
6
6
  "main": "lib/custom-shipping.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-datafrete",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app to integrate Datafrete shipping gateway ",
6
6
  "main": "lib/datafrete.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-discounts",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app for complex discount rules",
6
6
  "main": "lib/discounts.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-emails",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce default transactional email app",
6
6
  "main": "lib/index.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-fb-conversions",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app to send carts/orders to Facebook Conversions API",
6
6
  "main": "lib/index.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-flash-courier",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app to integrate Flash Courier",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-frenet",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app for Frenet shipping calculation",
6
6
  "main": "lib/frenet.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-galaxpay",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app to integrate Galax Pay for recurring payments",
6
6
  "main": "lib/galaxpay.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-google-analytics",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app to send carts/orders events to GA Measurement Protocol",
6
6
  "main": "lib/index.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-jadlog",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app for Jadlog shipping calculation",
6
6
  "main": "lib/index.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-loyalty-points",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app to handle simple loyalty points programs",
6
6
  "main": "lib/loyalty-points.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-melhor-envio",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app to integrate Melhor Envio",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-mercadopago",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app to integrate Mercado Pago",
6
6
  "main": "lib/mercadopago.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-pagarme",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app to integrate Pagar.me",
6
6
  "main": "lib/pagarme.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-paghiper",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app to integrate PagHiper",
6
6
  "main": "lib/paghiper.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-pix",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app to integrate Pix API (Bacen)",
6
6
  "main": "lib/pix.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-tiny-erp",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app for Tiny ERP",
6
6
  "main": "lib/tiny-erp.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-webhooks",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app for general order webhooks",
6
6
  "main": "lib/index.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/cli",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce CLI tools",
6
6
  "bin": {
7
7
  "cloudcommerce": "./bin/run.mjs"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/config",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce base config",
6
6
  "main": "lib/config.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/emails",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce email sender",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/events",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce app events",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/feeds",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce catalog feeds",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/firebase",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce on Firebase",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/i18n",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce i18n",
6
6
  "main": "lib/all.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/modules",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce modules API",
6
6
  "main": "lib/index.cjs",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/passport",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce customers authentication (passport) API",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -1,18 +1,20 @@
1
1
  import { join as joinPath } from 'node:path';
2
- import { readFile } from 'node:fs/promises';
3
- import { getFirestore, Timestamp } from 'firebase-admin/firestore';
2
+ import { readFile, readdir } from 'node:fs/promises';
4
3
  import logger from 'firebase-functions/logger';
5
4
 
6
- const {
7
- DEPLOY_RAND, STOREFRONT_BASE_DIR, SSR_CACHE_MAXAGE, SSR_CACHE_SWR, SSR_PROXY_DEBUG, SSR_PROXY_TIMEOUT,
8
- } = process.env;
9
- const cacheMaxAge = SSR_CACHE_MAXAGE ? Number(SSR_CACHE_MAXAGE) : 1000 * 60 * 2;
10
- const isCacheSWR = SSR_CACHE_SWR ? String(SSR_CACHE_SWR).toLowerCase() === 'true' : true;
11
- const lockedCacheKeys = [];
5
+ const { STOREFRONT_BASE_DIR, SSR_PROXY_DEBUG, SSR_PROXY_TIMEOUT } = process.env;
12
6
  const baseDir = STOREFRONT_BASE_DIR || process.cwd();
13
- const clientRoot = new URL(joinPath(baseDir, 'dist/client/'), import.meta.url);
14
7
  let imagesManifest;
15
8
  const builtImages = [];
9
+ let cssFilepath;
10
+ readdir(joinPath(baseDir, 'dist/client/_astro'))
11
+ .then((files) => {
12
+ const cssFiles = files.filter((file) => file.endsWith('.css'));
13
+ if (cssFiles.length === 1) {
14
+ [cssFilepath] = cssFiles;
15
+ }
16
+ })
17
+ .catch(logger.warn);
16
18
  const isProxyDebug = SSR_PROXY_DEBUG ? String(SSR_PROXY_DEBUG).toLowerCase() === 'true' : false;
17
19
  const proxyTimeout = SSR_PROXY_TIMEOUT ? Number(SSR_PROXY_TIMEOUT) : 3000;
18
20
  const proxy = async (req, res) => {
@@ -158,114 +160,17 @@ export default async (req, res) => {
158
160
  res.sendStatus(400);
159
161
  return;
160
162
  }
161
- const startedAt = Date.now();
162
- let ssrStartedAt;
163
- const cacheKey = (!req.path || req.path === '/')
164
- ? '__home'
165
- : req.path.slice(1).replace(/\//g, '_');
166
- let cacheRef;
167
- let status;
168
- let headers = {};
169
- const chunks = [];
170
- /*
171
- Check Response methods used by Astro Node.js integration:
172
- https://github.com/withastro/astro/blob/main/packages/integrations/node/src/nodeMiddleware.ts
173
- */
174
- const _writeHead = res.writeHead;
175
- /* eslint-disable prefer-rest-params */
176
- // @ts-ignore
177
- res.writeHead = function writeHead(_status, _headers) {
178
- status = _status;
179
- if (_headers) {
180
- if (status === 200) {
181
- const now = Date.now();
182
- _headers['X-Function-Took'] = String(now - startedAt);
183
- if (ssrStartedAt) {
184
- _headers['X-SSR-Took'] = String(now - ssrStartedAt);
185
- }
186
- }
187
- headers = _headers;
188
- }
189
- };
190
- const _write = res.write;
191
- // @ts-ignore
192
- res.write = function write(chunk) {
193
- chunks.push(chunk);
194
- };
195
- const _end = res.end;
196
- // @ts-ignore
197
- res.end = function end() {
198
- if (!res.headersSent) {
199
- _writeHead.apply(res, [status, headers]);
200
- chunks.forEach((chunk) => {
201
- _write.apply(res, [chunk, 'utf8']);
202
- });
203
- // @ts-ignore
204
- _end.apply(res, arguments);
205
- }
206
- if (!status) {
207
- status = res.statusCode;
208
- }
209
- if (cacheRef && status === 200) {
210
- cacheRef.set({
211
- headers,
212
- status,
213
- body: Buffer.concat(chunks).toString('utf8'),
214
- __deploy: DEPLOY_RAND,
215
- __timestamp: Timestamp.now(),
216
- }).catch(logger.warn);
217
- }
218
- for (let i = lockedCacheKeys.length - 1; i >= 0; i--) {
219
- if (lockedCacheKeys[i] === cacheKey) {
220
- lockedCacheKeys.splice(i, 1);
221
- }
222
- }
223
- };
224
- const isSWRLocked = lockedCacheKeys.includes(cacheKey);
225
- let gettingCacheDoc;
226
- if (req.query.__noCache === undefined && req.path.charAt(1) !== '~' && cacheMaxAge > 0) {
227
- gettingCacheDoc = (async () => {
228
- try {
229
- const firestore = getFirestore();
230
- cacheRef = firestore.doc(`ssrCache/${cacheKey}`);
231
- const cacheDoc = await cacheRef.get();
232
- if (!res.headersSent && cacheDoc.exists) {
233
- const {
234
- headers: cachedHeaders, status: cachedStatus = 200, body: cachedBody, __deploy, __timestamp,
235
- } = cacheDoc.data();
236
- const isFresh = (Timestamp.now().toMillis() - __timestamp.toMillis()) <= cacheMaxAge;
237
- if (__deploy !== DEPLOY_RAND) return;
238
- if (isFresh || isCacheSWR) {
239
- cachedHeaders['X-SWR-Date'] = (isFresh ? 'fresh ' : '')
240
- + __timestamp.toDate().toISOString();
241
- cachedHeaders['X-Function-Took'] = String(Date.now() - startedAt);
242
- Object.keys(cachedHeaders).forEach((headerName) => {
243
- res.set(headerName, cachedHeaders[headerName]);
244
- });
245
- _writeHead.apply(res, [cachedStatus, cachedHeaders]);
246
- _write.apply(res, [cachedBody, 'utf8']);
247
- _end.apply(res);
248
- }
249
- }
250
- } catch (err) {
251
- cacheRef = null;
252
- logger.warn(err);
253
- }
254
- })();
255
- }
256
- if (gettingCacheDoc && (!isCacheSWR || isSWRLocked)) {
257
- await gettingCacheDoc;
258
- if (res.headersSent) return;
259
- }
260
- if (isCacheSWR) {
261
- lockedCacheKeys.push(cacheKey);
163
+ if (cssFilepath) {
164
+ // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/103 :zap:
165
+ res.writeEarlyHints({
166
+ link: `</${cssFilepath}>; rel=preload; as=style`,
167
+ });
262
168
  }
263
169
  /*
264
170
  https://github.com/withastro/astro/blob/main/examples/ssr/server/server.mjs
265
171
  import { handler as renderStorefront } from '../dist/server/entry.mjs';
266
172
  global.$renderStorefront = renderStorefront;
267
173
  */
268
- ssrStartedAt = Date.now();
269
174
  global.$renderStorefront(req, res, async (err) => {
270
175
  if (err) {
271
176
  if (res.headersSent) {
@@ -279,6 +184,7 @@ export default async (req, res) => {
279
184
  fallback(err);
280
185
  return;
281
186
  }
187
+ const clientRoot = new URL(joinPath(baseDir, 'dist/client/'), import.meta.url);
282
188
  const local = new URL(`.${url}`, clientRoot);
283
189
  try {
284
190
  const data = await readFile(local);
@@ -1 +1 @@
1
- {"version":3,"file":"serve-storefront.js","sourceRoot":"","sources":["../../src/firebase/serve-storefront.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serve-storefront.js","sourceRoot":"","sources":["../../src/firebase/serve-storefront.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/ssr",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce storefront SSR",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -1,9 +1,6 @@
1
- import type { OutgoingHttpHeaders } from 'node:http';
2
1
  import type { Request, Response } from 'firebase-functions';
3
- import type { DocumentReference } from 'firebase-admin/firestore';
4
2
  import { join as joinPath } from 'node:path';
5
- import { readFile } from 'node:fs/promises';
6
- import { getFirestore, Timestamp } from 'firebase-admin/firestore';
3
+ import { readFile, readdir } from 'node:fs/promises';
7
4
  import logger from 'firebase-functions/logger';
8
5
 
9
6
  declare global {
@@ -16,27 +13,27 @@ declare global {
16
13
  }
17
14
 
18
15
  const {
19
- DEPLOY_RAND,
20
16
  STOREFRONT_BASE_DIR,
21
- SSR_CACHE_MAXAGE,
22
- SSR_CACHE_SWR,
23
17
  SSR_PROXY_DEBUG,
24
18
  SSR_PROXY_TIMEOUT,
25
19
  } = process.env;
26
20
 
27
- const cacheMaxAge = SSR_CACHE_MAXAGE ? Number(SSR_CACHE_MAXAGE) : 1000 * 60 * 2;
28
- const isCacheSWR = SSR_CACHE_SWR ? String(SSR_CACHE_SWR).toLowerCase() === 'true' : true;
29
- const lockedCacheKeys: string[] = [];
30
-
31
21
  const baseDir = STOREFRONT_BASE_DIR || process.cwd();
32
- const clientRoot = new URL(joinPath(baseDir, 'dist/client/'), import.meta.url);
33
22
  let imagesManifest: string;
34
23
  type BuiltImage = { filename: string, width: number, height: number };
35
24
  const builtImages: BuiltImage[] = [];
25
+ let cssFilepath: string | undefined;
26
+ readdir(joinPath(baseDir, 'dist/client/_astro'))
27
+ .then((files) => {
28
+ const cssFiles = files.filter((file) => file.endsWith('.css'));
29
+ if (cssFiles.length === 1) {
30
+ [cssFilepath] = cssFiles;
31
+ }
32
+ })
33
+ .catch(logger.warn);
36
34
 
37
35
  const isProxyDebug = SSR_PROXY_DEBUG ? String(SSR_PROXY_DEBUG).toLowerCase() === 'true' : false;
38
36
  const proxyTimeout = SSR_PROXY_TIMEOUT ? Number(SSR_PROXY_TIMEOUT) : 3000;
39
-
40
37
  const proxy = async (req: Request, res: Response) => {
41
38
  let proxyURL: URL | undefined;
42
39
  try {
@@ -186,113 +183,11 @@ export default async (req: Request, res: Response) => {
186
183
  return;
187
184
  }
188
185
 
189
- const startedAt = Date.now();
190
- let ssrStartedAt: number | undefined;
191
- const cacheKey = (!req.path || req.path === '/')
192
- ? '__home'
193
- : req.path.slice(1).replace(/\//g, '_');
194
- let cacheRef: DocumentReference<any> | undefined | null;
195
- let status: number;
196
- let headers: OutgoingHttpHeaders = {};
197
- const chunks: any[] = [];
198
-
199
- /*
200
- Check Response methods used by Astro Node.js integration:
201
- https://github.com/withastro/astro/blob/main/packages/integrations/node/src/nodeMiddleware.ts
202
- */
203
- const _writeHead = res.writeHead;
204
- /* eslint-disable prefer-rest-params */
205
- // @ts-ignore
206
- res.writeHead = function writeHead(_status: number, _headers: OutgoingHttpHeaders) {
207
- status = _status;
208
- if (_headers) {
209
- if (status === 200) {
210
- const now = Date.now();
211
- _headers['X-Function-Took'] = String(now - startedAt);
212
- if (ssrStartedAt) {
213
- _headers['X-SSR-Took'] = String(now - ssrStartedAt);
214
- }
215
- }
216
- headers = _headers;
217
- }
218
- };
219
- const _write = res.write;
220
- // @ts-ignore
221
- res.write = function write(chunk: any) {
222
- chunks.push(chunk);
223
- };
224
- const _end = res.end;
225
- // @ts-ignore
226
- res.end = function end() {
227
- if (!res.headersSent) {
228
- _writeHead.apply(res, [status, headers]);
229
- chunks.forEach((chunk) => {
230
- _write.apply(res, [chunk, 'utf8']);
231
- });
232
- // @ts-ignore
233
- _end.apply(res, arguments);
234
- }
235
- if (!status) {
236
- status = res.statusCode;
237
- }
238
- if (cacheRef && status === 200) {
239
- cacheRef.set({
240
- headers,
241
- status,
242
- body: Buffer.concat(chunks).toString('utf8'),
243
- __deploy: DEPLOY_RAND,
244
- __timestamp: Timestamp.now(),
245
- }).catch(logger.warn);
246
- }
247
- for (let i = lockedCacheKeys.length - 1; i >= 0; i--) {
248
- if (lockedCacheKeys[i] === cacheKey) {
249
- lockedCacheKeys.splice(i, 1);
250
- }
251
- }
252
- };
253
-
254
- const isSWRLocked = lockedCacheKeys.includes(cacheKey);
255
- let gettingCacheDoc: Promise<void> | undefined;
256
- if (req.query.__noCache === undefined && req.path.charAt(1) !== '~' && cacheMaxAge > 0) {
257
- gettingCacheDoc = (async () => {
258
- try {
259
- const firestore = getFirestore();
260
- cacheRef = firestore.doc(`ssrCache/${cacheKey}`);
261
- const cacheDoc = await cacheRef.get();
262
- if (!res.headersSent && cacheDoc.exists) {
263
- const {
264
- headers: cachedHeaders,
265
- status: cachedStatus = 200,
266
- body: cachedBody,
267
- __deploy,
268
- __timestamp,
269
- } = cacheDoc.data();
270
- const isFresh = (Timestamp.now().toMillis() - __timestamp.toMillis()) <= cacheMaxAge;
271
- if (__deploy !== DEPLOY_RAND) return;
272
- if (isFresh || isCacheSWR) {
273
- cachedHeaders['X-SWR-Date'] = (isFresh ? 'fresh ' : '')
274
- + __timestamp.toDate().toISOString();
275
- cachedHeaders['X-Function-Took'] = String(Date.now() - startedAt);
276
- Object.keys(cachedHeaders).forEach((headerName) => {
277
- res.set(headerName, cachedHeaders[headerName]);
278
- });
279
- _writeHead.apply(res, [cachedStatus, cachedHeaders]);
280
- _write.apply(res, [cachedBody, 'utf8']);
281
- _end.apply(res);
282
- }
283
- }
284
- } catch (err) {
285
- cacheRef = null;
286
- logger.warn(err);
287
- }
288
- })();
289
- }
290
- if (gettingCacheDoc && (!isCacheSWR || isSWRLocked)) {
291
- await gettingCacheDoc;
292
- if (res.headersSent) return;
293
- }
294
- if (isCacheSWR) {
295
- lockedCacheKeys.push(cacheKey);
186
+ if (cssFilepath) {
187
+ // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/103 :zap:
188
+ res.writeEarlyHints({
189
+ link: `</${cssFilepath}>; rel=preload; as=style`,
190
+ });
296
191
  }
297
192
 
298
193
  /*
@@ -300,7 +195,6 @@ export default async (req: Request, res: Response) => {
300
195
  import { handler as renderStorefront } from '../dist/server/entry.mjs';
301
196
  global.$renderStorefront = renderStorefront;
302
197
  */
303
- ssrStartedAt = Date.now();
304
198
  global.$renderStorefront(req, res, async (err: any) => {
305
199
  if (err) {
306
200
  if (res.headersSent) {
@@ -314,6 +208,7 @@ export default async (req: Request, res: Response) => {
314
208
  fallback(err);
315
209
  return;
316
210
  }
211
+ const clientRoot = new URL(joinPath(baseDir, 'dist/client/'), import.meta.url);
317
212
  const local = new URL(`.${url}`, clientRoot);
318
213
  try {
319
214
  const data = await readFile(local);
@@ -2830,7 +2830,7 @@ const _page2 = () => import('./chunks/fallback@_@astro.89538855.mjs');
2830
2830
  const _page3 = () => import('./chunks/index@_@astro.548cf7ad.mjs');
2831
2831
  const _page4 = () => import('./chunks/account@_@astro.89e4cf60.mjs');
2832
2832
  const _page5 = () => import('./chunks/_...9e22b578.mjs');const pageMap = new Map([["../../node_modules/.pnpm/@astrojs+image@0.17.2_astro@2.8.3_sharp@0.32.3/node_modules/@astrojs/image/dist/endpoint.js", _page0],["src/pages/index.astro", _page1],["src/pages/fallback.astro", _page2],["src/pages/app/index.astro", _page3],["src/pages/app/account.astro", _page4],["src/pages/[...slug].astro", _page5]]);
2833
- const _manifest = Object.assign(deserializeManifest({"adapterName":"@astrojs/node","routes":[{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"type":"endpoint","route":"/_image","pattern":"^\\/_image$","segments":[[{"content":"_image","dynamic":false,"spread":false}]],"params":[],"component":"../../node_modules/.pnpm/@astrojs+image@0.17.2_astro@2.8.3_sharp@0.32.3/node_modules/@astrojs/image/dist/endpoint.js","pathname":"/_image","prerender":false,"_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[{"type":"external","value":"/_astro/hoisted.9d9d7ac4.js"}],"styles":[{"type":"external","src":"/_astro/_...slug_.c2da43fb.css"}],"routeData":{"route":"/","type":"page","pattern":"^\\/$","segments":[],"params":[],"component":"src/pages/index.astro","pathname":"/","prerender":false,"_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[{"type":"external","value":"/_astro/hoisted.9d9d7ac4.js"}],"styles":[{"type":"external","src":"/_astro/_...slug_.c2da43fb.css"}],"routeData":{"route":"/fallback","type":"page","pattern":"^\\/fallback\\/?$","segments":[[{"content":"fallback","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/fallback.astro","pathname":"/fallback","prerender":false,"_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/app","type":"page","pattern":"^\\/app\\/?$","segments":[[{"content":"app","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/app/index.astro","pathname":"/app","prerender":false,"_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/app/account","type":"page","pattern":"^\\/app\\/account\\/?$","segments":[[{"content":"app","dynamic":false,"spread":false}],[{"content":"account","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/app/account.astro","pathname":"/app/account","prerender":false,"_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[{"type":"external","value":"/_astro/hoisted.9d9d7ac4.js"}],"styles":[{"type":"external","src":"/_astro/_...slug_.c2da43fb.css"}],"routeData":{"route":"/[...slug]","type":"page","pattern":"^(?:\\/(.*?))?\\/?$","segments":[[{"content":"...slug","dynamic":true,"spread":true}]],"params":["...slug"],"component":"src/pages/[...slug].astro","prerender":false,"_meta":{"trailingSlash":"ignore"}}}],"site":"https://ecom2-demo.web.app","base":"/","compressHTML":false,"markdown":{"drafts":false,"syntaxHighlight":"shiki","shikiConfig":{"langs":[],"theme":"github-dark","wrap":false},"remarkPlugins":[],"rehypePlugins":[],"remarkRehype":{},"gfm":true,"smartypants":true},"componentMetadata":[["/home/leo/code/ecomplus/cloud-commerce/packages/storefront/src/pages/[...slug].astro",{"propagation":"none","containsHead":true}],["/home/leo/code/ecomplus/cloud-commerce/packages/storefront/src/pages/fallback.astro",{"propagation":"none","containsHead":true}],["/home/leo/code/ecomplus/cloud-commerce/packages/storefront/src/pages/index.astro",{"propagation":"none","containsHead":true}]],"renderers":[],"clientDirectives":[["idle","(()=>{var i=t=>{let e=async()=>{await(await t())()};\"requestIdleCallback\"in window?window.requestIdleCallback(e):setTimeout(e,200)};(self.Astro||(self.Astro={})).idle=i;window.dispatchEvent(new Event(\"astro:idle\"));})();"],["load","(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event(\"astro:load\"));})();"],["media","(()=>{var s=(i,t)=>{let a=async()=>{await(await i())()};if(t.value){let e=matchMedia(t.value);e.matches?a():e.addEventListener(\"change\",a,{once:!0})}};(self.Astro||(self.Astro={})).media=s;window.dispatchEvent(new Event(\"astro:media\"));})();"],["only","(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).only=e;window.dispatchEvent(new Event(\"astro:only\"));})();"],["visible","(()=>{var r=(i,c,n)=>{let s=async()=>{await(await i())()},t=new IntersectionObserver(e=>{for(let o of e)if(o.isIntersecting){t.disconnect(),s();break}});for(let e of n.children)t.observe(e)};(self.Astro||(self.Astro={})).visible=r;window.dispatchEvent(new Event(\"astro:visible\"));})();"]],"entryModules":{"\u0000@astrojs-ssr-virtual-entry":"_@astrojs-ssr-virtual-entry.mjs","\u0000@astro-renderers":"renderers.mjs","\u0000empty-middleware":"_empty-middleware.mjs","/src/pages/app/account.astro":"chunks/pages/account.astro.f07cf19e.mjs","/src/pages/fallback.astro":"chunks/pages/fallback.astro.e2e8a0e4.mjs","\u0000@astro-page:../../node_modules/.pnpm/@astrojs+image@0.17.2_astro@2.8.3_sharp@0.32.3/node_modules/@astrojs/image/dist/endpoint@_@js":"chunks/endpoint@_@js.f880a152.mjs","\u0000@astro-page:src/pages/index@_@astro":"chunks/index@_@astro.56fdd6da.mjs","\u0000@astro-page:src/pages/fallback@_@astro":"chunks/fallback@_@astro.89538855.mjs","\u0000@astro-page:src/pages/app/index@_@astro":"chunks/index@_@astro.548cf7ad.mjs","\u0000@astro-page:src/pages/app/account@_@astro":"chunks/account@_@astro.89e4cf60.mjs","\u0000@astro-page:src/pages/[...slug]@_@astro":"chunks/_...9e22b578.mjs","~/components/PitchBar.vue":"_astro/PitchBar.ed85833a.js","@astrojs/vue/client.js":"_astro/client.8035a95a.js","~/components/ProductShelf.vue":"_astro/ProductShelf.9e290480.js","/home/leo/code/ecomplus/cloud-commerce/node_modules/workbox-window/build/workbox-window.prod.es5.mjs":"_astro/workbox-window.prod.es5.a7b12eab.js","~/components/HeroSlider.vue":"_astro/HeroSlider.eb156f18.js","/astro/hoisted.js?q=0":"_astro/hoisted.9d9d7ac4.js","~/components/ShopHeader.vue":"_astro/ShopHeader.0c884bbe.js","/home/leo/code/ecomplus/cloud-commerce/packages/storefront/src/lib/scripts/firebase-app.ts":"_astro/firebase-app.84207480.js","astro:scripts/before-hydration.js":""},"assets":["/_astro/_...slug_.c2da43fb.css","/manifest.webmanifest","/robots.txt","/sw.js","/workbox-5e0bf4e4.js","/_astro/Carousel.62c97a79.js","/_astro/HeroSlider.eb156f18.js","/_astro/PitchBar.ed85833a.js","/_astro/ProductShelf.9e290480.js","/_astro/ShopHeader.0c884bbe.js","/_astro/_plugin-vue_export-helper.4cb7dd76.js","/_astro/api.4984c5be.js","/_astro/client.8035a95a.js","/_astro/firebase-app.84207480.js","/_astro/hoisted.9d9d7ac4.js","/_astro/img.abbe849f.js","/_astro/index.b93f3d06.js","/_astro/preload-helper.cf010ec4.js","/_astro/session-utm.744b0db3.js","/_astro/workbox-window.prod.es5.a7b12eab.js","/assets/cms-preview.css","/assets/cms.css","/assets/cvv.png","/assets/img-placeholder.png","/assets/payments.png","/assets/ssl-safe.png","/img/icon.png","/img/large-icon.png","/img/uploads/banner2.webp","/img/uploads/ecom-icon.png","/img/uploads/headphone.webp","/img/uploads/logo.png","/img/uploads/og-image.png","/img/uploads/passion.webp","/img/uploads/rect8589.png","/img/uploads/rect859.png","/img/uploads/rect89.webp"]}), {
2833
+ const _manifest = Object.assign(deserializeManifest({"adapterName":"@astrojs/node","routes":[{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"type":"endpoint","route":"/_image","pattern":"^\\/_image$","segments":[[{"content":"_image","dynamic":false,"spread":false}]],"params":[],"component":"../../node_modules/.pnpm/@astrojs+image@0.17.2_astro@2.8.3_sharp@0.32.3/node_modules/@astrojs/image/dist/endpoint.js","pathname":"/_image","prerender":false,"_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[{"type":"external","value":"/_astro/hoisted.9d9d7ac4.js"}],"styles":[{"type":"external","src":"/_astro/_...slug_.c2da43fb.css"}],"routeData":{"route":"/","type":"page","pattern":"^\\/$","segments":[],"params":[],"component":"src/pages/index.astro","pathname":"/","prerender":false,"_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[{"type":"external","value":"/_astro/hoisted.9d9d7ac4.js"}],"styles":[{"type":"external","src":"/_astro/_...slug_.c2da43fb.css"}],"routeData":{"route":"/fallback","type":"page","pattern":"^\\/fallback\\/?$","segments":[[{"content":"fallback","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/fallback.astro","pathname":"/fallback","prerender":false,"_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/app","type":"page","pattern":"^\\/app\\/?$","segments":[[{"content":"app","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/app/index.astro","pathname":"/app","prerender":false,"_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[],"styles":[],"routeData":{"route":"/app/account","type":"page","pattern":"^\\/app\\/account\\/?$","segments":[[{"content":"app","dynamic":false,"spread":false}],[{"content":"account","dynamic":false,"spread":false}]],"params":[],"component":"src/pages/app/account.astro","pathname":"/app/account","prerender":false,"_meta":{"trailingSlash":"ignore"}}},{"file":"","links":[],"scripts":[{"type":"external","value":"/_astro/hoisted.9d9d7ac4.js"}],"styles":[{"type":"external","src":"/_astro/_...slug_.c2da43fb.css"}],"routeData":{"route":"/[...slug]","type":"page","pattern":"^(?:\\/(.*?))?\\/?$","segments":[[{"content":"...slug","dynamic":true,"spread":true}]],"params":["...slug"],"component":"src/pages/[...slug].astro","prerender":false,"_meta":{"trailingSlash":"ignore"}}}],"site":"https://ecom2-demo.web.app","base":"/","compressHTML":false,"markdown":{"drafts":false,"syntaxHighlight":"shiki","shikiConfig":{"langs":[],"theme":"github-dark","wrap":false},"remarkPlugins":[],"rehypePlugins":[],"remarkRehype":{},"gfm":true,"smartypants":true},"componentMetadata":[["/home/leo/code/ecomplus/cloud-commerce/packages/storefront/src/pages/[...slug].astro",{"propagation":"none","containsHead":true}],["/home/leo/code/ecomplus/cloud-commerce/packages/storefront/src/pages/fallback.astro",{"propagation":"none","containsHead":true}],["/home/leo/code/ecomplus/cloud-commerce/packages/storefront/src/pages/index.astro",{"propagation":"none","containsHead":true}]],"renderers":[],"clientDirectives":[["idle","(()=>{var i=t=>{let e=async()=>{await(await t())()};\"requestIdleCallback\"in window?window.requestIdleCallback(e):setTimeout(e,200)};(self.Astro||(self.Astro={})).idle=i;window.dispatchEvent(new Event(\"astro:idle\"));})();"],["load","(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event(\"astro:load\"));})();"],["media","(()=>{var s=(i,t)=>{let a=async()=>{await(await i())()};if(t.value){let e=matchMedia(t.value);e.matches?a():e.addEventListener(\"change\",a,{once:!0})}};(self.Astro||(self.Astro={})).media=s;window.dispatchEvent(new Event(\"astro:media\"));})();"],["only","(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).only=e;window.dispatchEvent(new Event(\"astro:only\"));})();"],["visible","(()=>{var r=(i,c,n)=>{let s=async()=>{await(await i())()},t=new IntersectionObserver(e=>{for(let o of e)if(o.isIntersecting){t.disconnect(),s();break}});for(let e of n.children)t.observe(e)};(self.Astro||(self.Astro={})).visible=r;window.dispatchEvent(new Event(\"astro:visible\"));})();"]],"entryModules":{"\u0000@astrojs-ssr-virtual-entry":"_@astrojs-ssr-virtual-entry.mjs","\u0000@astro-renderers":"renderers.mjs","\u0000empty-middleware":"_empty-middleware.mjs","/src/pages/app/account.astro":"chunks/pages/account.astro.f07cf19e.mjs","/src/pages/fallback.astro":"chunks/pages/fallback.astro.e2e8a0e4.mjs","\u0000@astro-page:../../node_modules/.pnpm/@astrojs+image@0.17.2_astro@2.8.3_sharp@0.32.3/node_modules/@astrojs/image/dist/endpoint@_@js":"chunks/endpoint@_@js.f880a152.mjs","\u0000@astro-page:src/pages/index@_@astro":"chunks/index@_@astro.56fdd6da.mjs","\u0000@astro-page:src/pages/fallback@_@astro":"chunks/fallback@_@astro.89538855.mjs","\u0000@astro-page:src/pages/app/index@_@astro":"chunks/index@_@astro.548cf7ad.mjs","\u0000@astro-page:src/pages/app/account@_@astro":"chunks/account@_@astro.89e4cf60.mjs","\u0000@astro-page:src/pages/[...slug]@_@astro":"chunks/_...9e22b578.mjs","~/components/PitchBar.vue":"_astro/PitchBar.ed85833a.js","~/components/HeroSlider.vue":"_astro/HeroSlider.eb156f18.js","~/components/ProductShelf.vue":"_astro/ProductShelf.9e290480.js","~/components/ShopHeader.vue":"_astro/ShopHeader.0c884bbe.js","@astrojs/vue/client.js":"_astro/client.8035a95a.js","/home/leo/code/ecomplus/cloud-commerce/node_modules/workbox-window/build/workbox-window.prod.es5.mjs":"_astro/workbox-window.prod.es5.a7b12eab.js","/astro/hoisted.js?q=0":"_astro/hoisted.9d9d7ac4.js","/home/leo/code/ecomplus/cloud-commerce/packages/storefront/src/lib/scripts/firebase-app.ts":"_astro/firebase-app.84207480.js","astro:scripts/before-hydration.js":""},"assets":["/_astro/_...slug_.c2da43fb.css","/manifest.webmanifest","/robots.txt","/sw.js","/workbox-5e0bf4e4.js","/_astro/Carousel.62c97a79.js","/_astro/HeroSlider.eb156f18.js","/_astro/PitchBar.ed85833a.js","/_astro/ProductShelf.9e290480.js","/_astro/ShopHeader.0c884bbe.js","/_astro/_plugin-vue_export-helper.4cb7dd76.js","/_astro/api.4984c5be.js","/_astro/client.8035a95a.js","/_astro/firebase-app.84207480.js","/_astro/hoisted.9d9d7ac4.js","/_astro/img.abbe849f.js","/_astro/index.b93f3d06.js","/_astro/preload-helper.cf010ec4.js","/_astro/session-utm.744b0db3.js","/_astro/workbox-window.prod.es5.a7b12eab.js","/assets/cms-preview.css","/assets/cms.css","/assets/cvv.png","/assets/img-placeholder.png","/assets/payments.png","/assets/ssl-safe.png","/img/icon.png","/img/large-icon.png","/img/uploads/banner2.webp","/img/uploads/ecom-icon.png","/img/uploads/headphone.webp","/img/uploads/logo.png","/img/uploads/og-image.png","/img/uploads/passion.webp","/img/uploads/rect8589.png","/img/uploads/rect859.png","/img/uploads/rect89.webp"]}), {
2834
2834
  pageMap,
2835
2835
  renderers,
2836
2836
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/storefront",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce storefront with Astro",
6
6
  "bin": {
7
7
  "storefront": "./scripts/build-prod.sh"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/types",
3
3
  "type": "module",
4
- "version": "0.20.0",
4
+ "version": "0.20.1",
5
5
  "description": "E-Com Plus Cloud Commerce reusable type definitions",
6
6
  "main": "index.ts",
7
7
  "repository": {