@shopify/hydrogen 0.11.0-experimental.1 → 0.11.1-experimental.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.
- package/CHANGELOG.md +504 -0
- package/dist/esnext/client.d.ts +1 -1
- package/dist/esnext/client.js +1 -1
- package/dist/esnext/components/AddToCartButton/AddToCartButton.client.d.ts +1 -1
- package/dist/esnext/components/AddToCartButton/AddToCartButton.client.js +11 -2
- package/dist/esnext/components/CartEstimatedCost/CartEstimatedCost.client.js +1 -1
- package/dist/esnext/components/CartLineImage/CartLineImage.client.js +2 -2
- package/dist/esnext/components/CartLinePrice/CartLinePrice.client.d.ts +1 -1
- package/dist/esnext/components/CartLinePrice/CartLinePrice.client.js +1 -1
- package/dist/esnext/components/CartProvider/CartProvider.client.d.ts +2 -2
- package/dist/esnext/components/CartProvider/CartProvider.client.js +1 -1
- package/dist/esnext/components/ExternalVideo/ExternalVideo.d.ts +1 -1
- package/dist/esnext/components/ExternalVideo/ExternalVideo.js +2 -2
- package/dist/esnext/components/Image/Image.d.ts +1 -1
- package/dist/esnext/components/Image/Image.js +9 -9
- package/dist/esnext/components/LocalizationProvider/LocalizationProvider.server.d.ts +13 -4
- package/dist/esnext/components/LocalizationProvider/LocalizationProvider.server.js +5 -3
- package/dist/esnext/components/MediaFile/MediaFile.d.ts +8 -6
- package/dist/esnext/components/MediaFile/MediaFile.js +6 -6
- package/dist/esnext/components/Metafield/Metafield.client.d.ts +1 -1
- package/dist/esnext/components/Metafield/Metafield.client.js +16 -16
- package/dist/esnext/components/ModelViewer/ModelViewer.client.d.ts +1 -1
- package/dist/esnext/components/ModelViewer/ModelViewer.client.js +1 -1
- package/dist/esnext/components/Money/Money.client.d.ts +1 -1
- package/dist/esnext/components/Money/Money.client.js +2 -2
- package/dist/esnext/components/ProductMetafield/ProductMetafield.client.d.ts +3 -1
- package/dist/esnext/components/ProductMetafield/ProductMetafield.client.js +21 -4
- package/dist/esnext/components/ProductPrice/ProductPrice.client.d.ts +5 -3
- package/dist/esnext/components/ProductPrice/ProductPrice.client.js +30 -9
- package/dist/esnext/components/ProductProvider/ProductOptionsProvider.client.d.ts +8 -0
- package/dist/esnext/components/ProductProvider/ProductOptionsProvider.client.js +12 -0
- package/dist/esnext/components/ProductProvider/ProductProvider.client.d.ts +8 -7
- package/dist/esnext/components/ProductProvider/ProductProvider.client.js +9 -35
- package/dist/esnext/components/ProductProvider/context.d.ts +10 -6
- package/dist/esnext/components/ProductProvider/context.js +1 -0
- package/dist/esnext/components/Seo/DefaultPageSeo.client.js +2 -2
- package/dist/esnext/components/Seo/DescriptionSeo.client.js +2 -2
- package/dist/esnext/components/Seo/HomePageSeo.client.js +2 -2
- package/dist/esnext/components/Seo/ImageSeo.client.js +2 -2
- package/dist/esnext/components/Seo/ProductSeo.client.js +5 -3
- package/dist/esnext/components/Seo/TitleSeo.client.js +2 -2
- package/dist/esnext/components/Seo/TwitterSeo.client.js +2 -2
- package/dist/esnext/components/Seo/types.d.ts +1 -1
- package/dist/esnext/components/UnitPrice/UnitPrice.client.d.ts +2 -2
- package/dist/esnext/components/UnitPrice/UnitPrice.client.js +3 -3
- package/dist/esnext/components/Video/Video.d.ts +1 -1
- package/dist/esnext/components/Video/Video.js +3 -3
- package/dist/esnext/components/index.d.ts +0 -8
- package/dist/esnext/components/index.js +0 -8
- package/dist/esnext/entry-client.js +1 -1
- package/dist/esnext/entry-server.d.ts +18 -2
- package/dist/esnext/entry-server.js +347 -329
- package/dist/esnext/foundation/Head/Head.client.d.ts +5 -0
- package/dist/esnext/foundation/Head/Head.client.js +10 -0
- package/dist/esnext/foundation/Head/index.d.ts +1 -0
- package/dist/esnext/foundation/Head/index.js +1 -0
- package/dist/esnext/foundation/ServerRequestProvider/ServerRequestProvider.d.ts +2 -1
- package/dist/esnext/foundation/ServerRequestProvider/ServerRequestProvider.js +43 -4
- package/dist/esnext/foundation/useQuery/hooks.d.ts +11 -3
- package/dist/esnext/foundation/useQuery/hooks.js +21 -5
- package/dist/esnext/framework/CachingStrategy/index.d.ts +10 -0
- package/dist/esnext/framework/CachingStrategy/index.js +96 -0
- package/dist/esnext/framework/Hydration/Html.js +5 -12
- package/dist/esnext/framework/Hydration/ServerComponentRequest.server.d.ts +20 -2
- package/dist/esnext/framework/Hydration/ServerComponentRequest.server.js +51 -2
- package/dist/esnext/framework/Hydration/ServerComponentResponse.server.d.ts +2 -2
- package/dist/esnext/framework/Hydration/ServerComponentResponse.server.js +2 -11
- package/dist/esnext/framework/cache/in-memory.js +6 -5
- package/dist/esnext/framework/cache.d.ts +3 -3
- package/dist/esnext/framework/cache.js +4 -18
- package/dist/esnext/framework/middleware.d.ts +7 -7
- package/dist/esnext/framework/middleware.js +15 -43
- package/dist/esnext/framework/plugin.js +14 -3
- package/dist/esnext/framework/plugins/vite-plugin-hydration-auto-import.d.ts +3 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydration-auto-import.js +38 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-client-middleware.d.ts +9 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-client-middleware.js +37 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-middleware.d.ts +2 -1
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-middleware.js +3 -1
- package/dist/esnext/framework/plugins/vite-plugin-platform-entry.d.ts +3 -0
- package/dist/esnext/framework/plugins/vite-plugin-platform-entry.js +70 -0
- package/dist/esnext/hooks/useProduct/useProduct.d.ts +150 -1
- package/dist/esnext/hooks/useProduct/useProduct.js +36 -3
- package/dist/esnext/hooks/useProductOptions/types.d.ts +1 -1
- package/dist/esnext/hooks/useProductOptions/useProductOptions.d.ts +1 -1
- package/dist/esnext/hooks/useProductOptions/useProductOptions.js +6 -6
- package/dist/esnext/hooks/useShopQuery/hooks.d.ts +11 -4
- package/dist/esnext/hooks/useShopQuery/hooks.js +6 -3
- package/dist/esnext/index.d.ts +2 -1
- package/dist/esnext/index.js +2 -1
- package/dist/esnext/platforms/node.d.ts +10 -0
- package/dist/esnext/platforms/node.js +38 -0
- package/dist/esnext/platforms/worker-event.d.ts +9 -0
- package/dist/esnext/platforms/worker-event.js +24 -0
- package/dist/esnext/streaming.server.d.ts +17 -7
- package/dist/esnext/streaming.server.js +44 -0
- package/dist/esnext/types.d.ts +25 -25
- package/dist/esnext/utilities/apiRoutes.d.ts +1 -2
- package/dist/esnext/utilities/apiRoutes.js +4 -3
- package/dist/esnext/utilities/bot-ua.d.ts +4 -0
- package/dist/esnext/utilities/bot-ua.js +54 -0
- package/dist/esnext/utilities/fetch.js +1 -26
- package/dist/esnext/utilities/log/index.d.ts +4 -1
- package/dist/esnext/utilities/log/index.js +4 -1
- package/dist/esnext/utilities/log/log-cache-api-status.d.ts +1 -0
- package/dist/esnext/utilities/log/log-cache-api-status.js +9 -0
- package/dist/esnext/utilities/log/log-cache-header.d.ts +10 -0
- package/dist/esnext/utilities/log/log-cache-header.js +30 -0
- package/dist/esnext/utilities/log/log-query-timeline.d.ts +12 -0
- package/dist/esnext/utilities/log/log-query-timeline.js +83 -0
- package/dist/esnext/utilities/log/log.d.ts +11 -8
- package/dist/esnext/utilities/log/log.js +24 -35
- package/dist/esnext/utilities/log/utils.d.ts +3 -0
- package/dist/esnext/utilities/log/utils.js +13 -0
- package/dist/esnext/utilities/template.d.ts +9 -0
- package/dist/esnext/utilities/template.js +23 -0
- package/dist/{worker/foundation/ShopifyProvider/types.js → esnext/utilities/web-api-polyfill.d.ts} +0 -0
- package/dist/esnext/utilities/web-api-polyfill.js +19 -0
- package/dist/esnext/version.d.ts +1 -1
- package/dist/esnext/version.js +1 -1
- package/dist/node/entry-server.d.ts +22 -0
- package/dist/node/entry-server.js +581 -0
- package/dist/node/foundation/ServerRequestProvider/ServerRequestProvider.d.ts +23 -0
- package/dist/node/foundation/ServerRequestProvider/ServerRequestProvider.js +132 -0
- package/dist/node/foundation/ServerRequestProvider/index.d.ts +1 -0
- package/dist/node/foundation/ServerRequestProvider/index.js +13 -0
- package/dist/node/foundation/ServerStateProvider/ServerStateProvider.client.d.ts +25 -0
- package/dist/node/foundation/ServerStateProvider/ServerStateProvider.client.js +68 -0
- package/dist/node/foundation/ServerStateProvider/index.d.ts +2 -0
- package/dist/node/foundation/ServerStateProvider/index.js +6 -0
- package/dist/node/framework/CachingStrategy/index.d.ts +10 -0
- package/dist/node/framework/CachingStrategy/index.js +108 -0
- package/dist/node/framework/Hydration/Html.js +5 -12
- package/dist/node/framework/Hydration/ServerComponentRequest.server.d.ts +20 -2
- package/dist/node/framework/Hydration/ServerComponentRequest.server.js +50 -1
- package/dist/node/framework/Hydration/ServerComponentResponse.server.d.ts +2 -2
- package/dist/node/framework/Hydration/ServerComponentResponse.server.js +2 -11
- package/dist/node/framework/cache/in-memory.js +6 -5
- package/dist/node/framework/cache.d.ts +3 -3
- package/dist/node/framework/cache.js +6 -20
- package/dist/node/framework/middleware.d.ts +7 -7
- package/dist/node/framework/middleware.js +14 -46
- package/dist/node/framework/plugin.js +33 -3
- package/dist/node/framework/plugins/vite-plugin-hydration-auto-import.d.ts +3 -0
- package/dist/node/framework/plugins/vite-plugin-hydration-auto-import.js +43 -0
- package/dist/node/framework/plugins/vite-plugin-hydrogen-client-middleware.d.ts +9 -0
- package/dist/node/framework/plugins/vite-plugin-hydrogen-client-middleware.js +39 -0
- package/dist/node/framework/plugins/vite-plugin-hydrogen-middleware.d.ts +2 -1
- package/dist/node/framework/plugins/vite-plugin-hydrogen-middleware.js +4 -1
- package/dist/node/framework/plugins/vite-plugin-platform-entry.d.ts +3 -0
- package/dist/node/framework/plugins/vite-plugin-platform-entry.js +75 -0
- package/dist/node/streaming.server.d.ts +21 -0
- package/dist/node/streaming.server.js +59 -0
- package/dist/node/types.d.ts +25 -25
- package/dist/node/utilities/apiRoutes.d.ts +1 -2
- package/dist/node/utilities/apiRoutes.js +4 -3
- package/dist/node/utilities/bot-ua.d.ts +4 -0
- package/dist/node/utilities/bot-ua.js +58 -0
- package/dist/node/utilities/defer.d.ts +6 -0
- package/dist/node/utilities/defer.js +18 -0
- package/dist/node/utilities/error.d.ts +1 -0
- package/dist/node/utilities/error.js +10 -0
- package/dist/node/utilities/log/index.d.ts +4 -0
- package/dist/node/utilities/log/index.js +18 -0
- package/dist/node/utilities/log/log-cache-api-status.d.ts +1 -0
- package/dist/node/utilities/log/log-cache-api-status.js +13 -0
- package/dist/node/utilities/log/log-cache-header.d.ts +10 -0
- package/dist/node/utilities/log/log-cache-header.js +35 -0
- package/dist/node/utilities/log/log-query-timeline.d.ts +12 -0
- package/dist/node/utilities/log/log-query-timeline.js +88 -0
- package/dist/node/utilities/log/log.d.ts +11 -8
- package/dist/node/utilities/log/log.js +27 -37
- package/dist/node/utilities/log/utils.d.ts +3 -0
- package/dist/node/utilities/log/utils.js +18 -0
- package/dist/node/utilities/template.d.ts +9 -0
- package/dist/node/utilities/template.js +27 -0
- package/dist/{worker/types.js → node/utilities/web-api-polyfill.d.ts} +0 -0
- package/dist/node/utilities/web-api-polyfill.js +43 -0
- package/package.json +20 -10
- package/web-polyfills.js +1 -0
- package/LICENSE.md +0 -7
- package/dist/esnext/components/CartLineAttributes/CartLineAttributes.client.d.ts +0 -22
- package/dist/esnext/components/CartLineAttributes/CartLineAttributes.client.js +0 -13
- package/dist/esnext/components/CartLineAttributes/index.d.ts +0 -1
- package/dist/esnext/components/CartLineAttributes/index.js +0 -1
- package/dist/esnext/components/CartLineSelectedOptions/CartLineSelectedOptions.client.d.ts +0 -21
- package/dist/esnext/components/CartLineSelectedOptions/CartLineSelectedOptions.client.js +0 -13
- package/dist/esnext/components/CartLineSelectedOptions/index.d.ts +0 -1
- package/dist/esnext/components/CartLineSelectedOptions/index.js +0 -1
- package/dist/esnext/components/SelectedVariantAddToCartButton/SelectedVariantAddToCartButton.client.d.ts +0 -11
- package/dist/esnext/components/SelectedVariantAddToCartButton/SelectedVariantAddToCartButton.client.js +0 -17
- package/dist/esnext/components/SelectedVariantAddToCartButton/index.d.ts +0 -1
- package/dist/esnext/components/SelectedVariantAddToCartButton/index.js +0 -1
- package/dist/esnext/components/SelectedVariantBuyNowButton/SelectedVariantBuyNowButton.d.ts +0 -9
- package/dist/esnext/components/SelectedVariantBuyNowButton/SelectedVariantBuyNowButton.js +0 -17
- package/dist/esnext/components/SelectedVariantBuyNowButton/index.d.ts +0 -1
- package/dist/esnext/components/SelectedVariantBuyNowButton/index.js +0 -1
- package/dist/esnext/components/SelectedVariantImage/SelectedVariantImage.client.d.ts +0 -10
- package/dist/esnext/components/SelectedVariantImage/SelectedVariantImage.client.js +0 -16
- package/dist/esnext/components/SelectedVariantImage/index.d.ts +0 -1
- package/dist/esnext/components/SelectedVariantImage/index.js +0 -1
- package/dist/esnext/components/SelectedVariantMetafield/SelectedVariantMetafield.client.d.ts +0 -15
- package/dist/esnext/components/SelectedVariantMetafield/SelectedVariantMetafield.client.js +0 -24
- package/dist/esnext/components/SelectedVariantMetafield/index.d.ts +0 -1
- package/dist/esnext/components/SelectedVariantMetafield/index.js +0 -1
- package/dist/esnext/components/SelectedVariantPrice/SelectedVariantPrice.client.d.ts +0 -12
- package/dist/esnext/components/SelectedVariantPrice/SelectedVariantPrice.client.js +0 -22
- package/dist/esnext/components/SelectedVariantPrice/index.d.ts +0 -1
- package/dist/esnext/components/SelectedVariantPrice/index.js +0 -1
- package/dist/esnext/components/SelectedVariantShopPayButton/SelectedVariantShopPayButton.client.d.ts +0 -8
- package/dist/esnext/components/SelectedVariantShopPayButton/SelectedVariantShopPayButton.client.js +0 -18
- package/dist/esnext/components/SelectedVariantShopPayButton/index.d.ts +0 -1
- package/dist/esnext/components/SelectedVariantShopPayButton/index.js +0 -1
- package/dist/esnext/components/SelectedVariantUnitPrice/SelectedVariantUnitPrice.client.d.ts +0 -7
- package/dist/esnext/components/SelectedVariantUnitPrice/SelectedVariantUnitPrice.client.js +0 -16
- package/dist/esnext/components/SelectedVariantUnitPrice/index.d.ts +0 -1
- package/dist/esnext/components/SelectedVariantUnitPrice/index.js +0 -1
- package/dist/esnext/foundation/Helmet/Helmet.client.d.ts +0 -10
- package/dist/esnext/foundation/Helmet/Helmet.client.js +0 -10
- package/dist/esnext/foundation/Helmet/index.d.ts +0 -1
- package/dist/esnext/foundation/Helmet/index.js +0 -1
- package/dist/esnext/handle-event.d.ts +0 -23
- package/dist/esnext/handle-event.js +0 -132
- package/dist/esnext/handle-worker-event.d.ts +0 -11
- package/dist/esnext/handle-worker-event.js +0 -14
- package/dist/node/foundation/Helmet/Helmet.client.d.ts +0 -10
- package/dist/node/foundation/Helmet/Helmet.client.js +0 -17
- package/dist/node/foundation/Helmet/index.d.ts +0 -1
- package/dist/node/foundation/Helmet/index.js +0 -5
- package/dist/node/foundation/ssr-interop.d.ts +0 -29
- package/dist/node/foundation/ssr-interop.js +0 -39
- package/dist/node/handle-event.d.ts +0 -23
- package/dist/node/handle-event.js +0 -135
- package/dist/worker/constants.d.ts +0 -1
- package/dist/worker/constants.js +0 -1
- package/dist/worker/foundation/Helmet/Helmet.client.d.ts +0 -10
- package/dist/worker/foundation/Helmet/Helmet.client.js +0 -10
- package/dist/worker/foundation/Helmet/index.d.ts +0 -1
- package/dist/worker/foundation/Helmet/index.js +0 -1
- package/dist/worker/foundation/ShopifyProvider/types.d.ts +0 -15
- package/dist/worker/foundation/ssr-interop.d.ts +0 -29
- package/dist/worker/foundation/ssr-interop.js +0 -35
- package/dist/worker/framework/Hydration/ServerComponentRequest.server.d.ts +0 -23
- package/dist/worker/framework/Hydration/ServerComponentRequest.server.js +0 -57
- package/dist/worker/framework/config.d.ts +0 -6
- package/dist/worker/framework/config.js +0 -6
- package/dist/worker/framework/runtime.d.ts +0 -13
- package/dist/worker/framework/runtime.js +0 -27
- package/dist/worker/graphql/types/types.d.ts +0 -5761
- package/dist/worker/graphql/types/types.js +0 -1436
- package/dist/worker/handle-event.d.ts +0 -23
- package/dist/worker/handle-event.js +0 -132
- package/dist/worker/handle-worker-event.d.ts +0 -11
- package/dist/worker/handle-worker-event.js +0 -14
- package/dist/worker/types.d.ts +0 -96
- package/dist/worker/utilities/apiRoutes.d.ts +0 -21
- package/dist/worker/utilities/apiRoutes.js +0 -87
- package/dist/worker/utilities/log/log.d.ts +0 -18
- package/dist/worker/utilities/log/log.js +0 -77
- package/dist/worker/utilities/matchPath.d.ts +0 -10
- package/dist/worker/utilities/matchPath.js +0 -54
- package/dist/worker/utilities/timing.d.ts +0 -7
- package/dist/worker/utilities/timing.js +0 -14
- package/worker.js +0 -1
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/// <reference types="@types/node" />
|
|
2
|
-
import { ServerResponse } from 'http';
|
|
3
|
-
import type { ServerComponentRequest } from './framework/Hydration/ServerComponentRequest.server';
|
|
4
|
-
import { RuntimeContext } from './framework/runtime';
|
|
5
|
-
interface HydrogenFetchEvent {
|
|
6
|
-
/**
|
|
7
|
-
* Hydrogen only cares about a single property, since we pass `request` as a separate option.
|
|
8
|
-
*/
|
|
9
|
-
waitUntil?: (callback: Promise<void>) => void;
|
|
10
|
-
}
|
|
11
|
-
export interface HandleEventOptions {
|
|
12
|
-
request: ServerComponentRequest;
|
|
13
|
-
entrypoint: any;
|
|
14
|
-
indexTemplate: string | ((url: string) => Promise<string>);
|
|
15
|
-
assetHandler?: (event: HydrogenFetchEvent, url: URL) => Promise<Response>;
|
|
16
|
-
cache?: Cache;
|
|
17
|
-
streamableResponse?: ServerResponse;
|
|
18
|
-
dev?: boolean;
|
|
19
|
-
context?: RuntimeContext;
|
|
20
|
-
nonce?: string;
|
|
21
|
-
}
|
|
22
|
-
export default function handleEvent(event: HydrogenFetchEvent, { request, entrypoint, indexTemplate, assetHandler, streamableResponse, dev, cache, context, nonce, }: HandleEventOptions): Promise<void | Response>;
|
|
23
|
-
export {};
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { setContext, setCache } from './framework/runtime';
|
|
2
|
-
import { setConfig } from './framework/config';
|
|
3
|
-
import { renderApiRoute } from './utilities/apiRoutes';
|
|
4
|
-
import { RSC_PATHNAME } from './constants';
|
|
5
|
-
export default async function handleEvent(event, { request, entrypoint, indexTemplate, assetHandler, streamableResponse, dev, cache, context, nonce, }) {
|
|
6
|
-
const url = new URL(request.url);
|
|
7
|
-
/**
|
|
8
|
-
* Inject the cache & context into the module loader so we can pull it out for subrequests.
|
|
9
|
-
*/
|
|
10
|
-
setCache(cache);
|
|
11
|
-
setContext(context);
|
|
12
|
-
setConfig({ dev });
|
|
13
|
-
const isReactHydrationRequest = url.pathname === RSC_PATHNAME;
|
|
14
|
-
const template = typeof indexTemplate === 'function'
|
|
15
|
-
? await indexTemplate(url.toString())
|
|
16
|
-
: indexTemplate;
|
|
17
|
-
/**
|
|
18
|
-
* If this is a request for an asset, and an asset handler is present, call it.
|
|
19
|
-
*/
|
|
20
|
-
if (/\.(png|jpe?g|gif|css|js|svg|ico|map)$/i.test(url.pathname) &&
|
|
21
|
-
assetHandler) {
|
|
22
|
-
return assetHandler(event, url);
|
|
23
|
-
}
|
|
24
|
-
const { render, hydrate, stream, getApiRoute, log } = entrypoint.default || entrypoint;
|
|
25
|
-
// @ts-ignore
|
|
26
|
-
if (dev && !(render && hydrate && stream && getApiRoute)) {
|
|
27
|
-
throw new Error(`entry-server.jsx could not be loaded. This likely occurred because of a Vite compilation error.\n` +
|
|
28
|
-
`Please check your server logs for more information.`);
|
|
29
|
-
}
|
|
30
|
-
if (!isReactHydrationRequest) {
|
|
31
|
-
const apiRoute = getApiRoute(url);
|
|
32
|
-
// The API Route might have a default export, making it also a server component
|
|
33
|
-
// If it does, only render the API route if the request method is GET
|
|
34
|
-
if (apiRoute &&
|
|
35
|
-
(!apiRoute.hasServerComponent || request.method !== 'GET')) {
|
|
36
|
-
return renderApiRoute(request, apiRoute, log);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
const isStreamable = !isBotUA(url, request.headers.get('user-agent')) &&
|
|
40
|
-
(!!streamableResponse || supportsReadableStream());
|
|
41
|
-
if (isReactHydrationRequest) {
|
|
42
|
-
return hydrate(url, {
|
|
43
|
-
request,
|
|
44
|
-
response: streamableResponse,
|
|
45
|
-
isStreamable,
|
|
46
|
-
dev,
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Stream back real-user responses, but for bots/etc,
|
|
51
|
-
* use `render` instead. This is because we need to inject <head>
|
|
52
|
-
* things for SEO reasons.
|
|
53
|
-
*/
|
|
54
|
-
if (isStreamable) {
|
|
55
|
-
return stream(url, {
|
|
56
|
-
request,
|
|
57
|
-
response: streamableResponse,
|
|
58
|
-
template,
|
|
59
|
-
nonce,
|
|
60
|
-
dev,
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
return render(url, {
|
|
64
|
-
request,
|
|
65
|
-
template,
|
|
66
|
-
nonce,
|
|
67
|
-
dev,
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Determines if the request is from a bot, using the URL and User Agent
|
|
72
|
-
*/
|
|
73
|
-
function isBotUA(url, userAgent) {
|
|
74
|
-
return (url.searchParams.has('_bot') || (!!userAgent && botUARegex.test(userAgent)));
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* An alphabetized list of User Agents of known bots, combined from lists found at:
|
|
78
|
-
* https://github.com/vercel/next.js/blob/d87dc2b5a0b3fdbc0f6806a47be72bad59564bd0/packages/next/server/utils.ts#L18-L22
|
|
79
|
-
* https://github.com/GoogleChrome/rendertron/blob/6f681688737846b28754fbfdf5db173846a826df/middleware/src/middleware.ts#L24-L41
|
|
80
|
-
*/
|
|
81
|
-
const botUserAgents = [
|
|
82
|
-
'AdsBot-Google',
|
|
83
|
-
'applebot',
|
|
84
|
-
'Baiduspider',
|
|
85
|
-
'baiduspider',
|
|
86
|
-
'bingbot',
|
|
87
|
-
'Bingbot',
|
|
88
|
-
'BingPreview',
|
|
89
|
-
'bitlybot',
|
|
90
|
-
'Discordbot',
|
|
91
|
-
'DuckDuckBot',
|
|
92
|
-
'Embedly',
|
|
93
|
-
'facebookcatalog',
|
|
94
|
-
'facebookexternalhit',
|
|
95
|
-
'Google-PageRenderer',
|
|
96
|
-
'Googlebot',
|
|
97
|
-
'googleweblight',
|
|
98
|
-
'ia_archive',
|
|
99
|
-
'LinkedInBot',
|
|
100
|
-
'Mediapartners-Google',
|
|
101
|
-
'outbrain',
|
|
102
|
-
'pinterest',
|
|
103
|
-
'quora link preview',
|
|
104
|
-
'redditbot',
|
|
105
|
-
'rogerbot',
|
|
106
|
-
'showyoubot',
|
|
107
|
-
'SkypeUriPreview',
|
|
108
|
-
'Slackbot',
|
|
109
|
-
'Slurp',
|
|
110
|
-
'sogou',
|
|
111
|
-
'Storebot-Google',
|
|
112
|
-
'TelegramBot',
|
|
113
|
-
'tumblr',
|
|
114
|
-
'Twitterbot',
|
|
115
|
-
'vkShare',
|
|
116
|
-
'W3C_Validator',
|
|
117
|
-
'WhatsApp',
|
|
118
|
-
'yandex',
|
|
119
|
-
];
|
|
120
|
-
/**
|
|
121
|
-
* Creates a regex based on the botUserAgents array
|
|
122
|
-
*/
|
|
123
|
-
const botUARegex = new RegExp(botUserAgents.join('|'), 'i');
|
|
124
|
-
function supportsReadableStream() {
|
|
125
|
-
try {
|
|
126
|
-
new ReadableStream();
|
|
127
|
-
return true;
|
|
128
|
-
}
|
|
129
|
-
catch (_) {
|
|
130
|
-
return false;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { HandleEventOptions } from './handle-event';
|
|
2
|
-
interface FetchEvent {
|
|
3
|
-
request: Request;
|
|
4
|
-
waitUntil?: (callback: Promise<void>) => void;
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* This is a wrapper around `handleEvent` that upgrades Request to ServerComponentRequest,
|
|
8
|
-
* so the rest of the application downstream has access to things like `request.cookies`, etc.
|
|
9
|
-
*/
|
|
10
|
-
export default function handleWorkerEvent(event: FetchEvent, options: HandleEventOptions): Promise<void | Response>;
|
|
11
|
-
export {};
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { ServerComponentRequest } from './framework/Hydration/ServerComponentRequest.server';
|
|
2
|
-
import handleEvent from './handle-event';
|
|
3
|
-
/**
|
|
4
|
-
* This is a wrapper around `handleEvent` that upgrades Request to ServerComponentRequest,
|
|
5
|
-
* so the rest of the application downstream has access to things like `request.cookies`, etc.
|
|
6
|
-
*/
|
|
7
|
-
export default async function handleWorkerEvent(event, options) {
|
|
8
|
-
const request = new ServerComponentRequest(event.request);
|
|
9
|
-
/**
|
|
10
|
-
* Note: We need to pass `request` as a separate option since Cloudflare (and other Worker
|
|
11
|
-
* runtimes, presumably) does not like when `event` is mutated.
|
|
12
|
-
*/
|
|
13
|
-
return handleEvent(event, { ...options, request });
|
|
14
|
-
}
|
package/dist/worker/types.d.ts
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
/// <reference types="@types/node" />
|
|
2
|
-
import { ServerResponse } from 'http';
|
|
3
|
-
import type { ServerComponentRequest } from './framework/Hydration/ServerComponentRequest.server';
|
|
4
|
-
import type { Metafield, Image, MediaContentType } from './graphql/types/types';
|
|
5
|
-
import { ApiRouteMatch } from './utilities/apiRoutes';
|
|
6
|
-
import { Logger } from './utilities/log/log';
|
|
7
|
-
export declare type Renderer = (url: URL, options: {
|
|
8
|
-
request: ServerComponentRequest;
|
|
9
|
-
template: string;
|
|
10
|
-
nonce?: string;
|
|
11
|
-
dev?: boolean;
|
|
12
|
-
}) => Promise<Response>;
|
|
13
|
-
export declare type Streamer = (url: URL, options: {
|
|
14
|
-
request: ServerComponentRequest;
|
|
15
|
-
response?: ServerResponse;
|
|
16
|
-
template: string;
|
|
17
|
-
nonce?: string;
|
|
18
|
-
dev?: boolean;
|
|
19
|
-
}) => void;
|
|
20
|
-
export declare type Hydrator = (url: URL, options: {
|
|
21
|
-
request: ServerComponentRequest;
|
|
22
|
-
response?: ServerResponse;
|
|
23
|
-
isStreamable: boolean;
|
|
24
|
-
dev?: boolean;
|
|
25
|
-
}) => void;
|
|
26
|
-
export declare type EntryServerHandler = {
|
|
27
|
-
render: Renderer;
|
|
28
|
-
stream: Streamer;
|
|
29
|
-
hydrate: Hydrator;
|
|
30
|
-
getApiRoute: (url: URL) => ApiRouteMatch | null;
|
|
31
|
-
log: Logger;
|
|
32
|
-
};
|
|
33
|
-
export declare type ShopifyConfig = {
|
|
34
|
-
defaultLocale?: string;
|
|
35
|
-
storeDomain: string;
|
|
36
|
-
storefrontToken: string;
|
|
37
|
-
storefrontApiVersion: string;
|
|
38
|
-
};
|
|
39
|
-
export declare type Hook = (params: {
|
|
40
|
-
url: URL;
|
|
41
|
-
} & Record<string, any>) => any | Promise<any>;
|
|
42
|
-
export declare type ImportGlobEagerOutput = Record<string, Record<'default' | 'api', any>>;
|
|
43
|
-
export declare type ServerHandlerConfig = {
|
|
44
|
-
pages?: ImportGlobEagerOutput;
|
|
45
|
-
shopifyConfig: ShopifyConfig;
|
|
46
|
-
};
|
|
47
|
-
export declare type ClientHandlerConfig = {
|
|
48
|
-
shopifyConfig: ShopifyConfig;
|
|
49
|
-
};
|
|
50
|
-
export declare type ServerHandler = (App: any, config: ServerHandlerConfig) => EntryServerHandler;
|
|
51
|
-
export declare type ClientHandler = (App: any, config: ClientHandlerConfig) => Promise<void>;
|
|
52
|
-
export interface GraphQLConnection<T> {
|
|
53
|
-
edges?: {
|
|
54
|
-
node: T;
|
|
55
|
-
}[];
|
|
56
|
-
}
|
|
57
|
-
export interface MediaImage {
|
|
58
|
-
__typename?: string;
|
|
59
|
-
id?: string;
|
|
60
|
-
mediaContentType?: MediaContentType;
|
|
61
|
-
image?: Pick<Image, 'altText' | 'url' | 'id' | 'width' | 'height'>;
|
|
62
|
-
}
|
|
63
|
-
interface ProductVariant {
|
|
64
|
-
__typename?: string;
|
|
65
|
-
}
|
|
66
|
-
interface Product {
|
|
67
|
-
__typename?: string;
|
|
68
|
-
}
|
|
69
|
-
export declare type RawMetafield = Omit<Partial<Metafield>, 'reference'> & {
|
|
70
|
-
reference?: MediaImage | ProductVariant | Product | null;
|
|
71
|
-
};
|
|
72
|
-
export declare type ParsedMetafield = Omit<Partial<Metafield>, 'value' | 'reference'> & {
|
|
73
|
-
value?: string | number | boolean | Record<any, string> | Date | Rating | Measurement;
|
|
74
|
-
reference?: MediaImage | ProductVariant | Product | null;
|
|
75
|
-
};
|
|
76
|
-
export interface Rating {
|
|
77
|
-
value: number;
|
|
78
|
-
scale_min: number;
|
|
79
|
-
scale_max: number;
|
|
80
|
-
}
|
|
81
|
-
export interface Measurement {
|
|
82
|
-
unit: string;
|
|
83
|
-
value: number;
|
|
84
|
-
}
|
|
85
|
-
export declare type QueryKey = string | readonly unknown[];
|
|
86
|
-
export interface CacheOptions {
|
|
87
|
-
private?: boolean;
|
|
88
|
-
maxAge?: number;
|
|
89
|
-
staleWhileRevalidate?: number;
|
|
90
|
-
noStore?: boolean;
|
|
91
|
-
}
|
|
92
|
-
export interface HydrogenVitePluginOptions {
|
|
93
|
-
devCache?: boolean;
|
|
94
|
-
purgeQueryCacheOnBuild?: boolean;
|
|
95
|
-
}
|
|
96
|
-
export {};
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { ImportGlobEagerOutput } from '../types';
|
|
2
|
-
import { Logger } from '../utilities/log/log';
|
|
3
|
-
declare type RouteParams = Record<string, string>;
|
|
4
|
-
declare type RequestOptions = {
|
|
5
|
-
params: RouteParams;
|
|
6
|
-
};
|
|
7
|
-
declare type ResourceGetter = (request: Request, requestOptions: RequestOptions) => Promise<Response | Object | String>;
|
|
8
|
-
interface HydrogenApiRoute {
|
|
9
|
-
path: string;
|
|
10
|
-
resource: ResourceGetter;
|
|
11
|
-
hasServerComponent: boolean;
|
|
12
|
-
}
|
|
13
|
-
export declare type ApiRouteMatch = {
|
|
14
|
-
resource: ResourceGetter;
|
|
15
|
-
hasServerComponent: boolean;
|
|
16
|
-
params: RouteParams;
|
|
17
|
-
};
|
|
18
|
-
export declare function getApiRoutesFromPages(pages: ImportGlobEagerOutput | undefined, topLevelPath?: string): Array<HydrogenApiRoute>;
|
|
19
|
-
export declare function getApiRouteFromURL(url: URL, routes: Array<HydrogenApiRoute>): ApiRouteMatch | null;
|
|
20
|
-
export declare function renderApiRoute(request: Request, route: ApiRouteMatch, log: Logger): Promise<Response>;
|
|
21
|
-
export {};
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { matchPath } from './matchPath';
|
|
2
|
-
import { logServerResponse } from '../utilities/log/log';
|
|
3
|
-
let memoizedRoutes = [];
|
|
4
|
-
let memoizedPages = {};
|
|
5
|
-
export function getApiRoutesFromPages(pages, topLevelPath = '*') {
|
|
6
|
-
if (!pages || memoizedPages === pages)
|
|
7
|
-
return memoizedRoutes;
|
|
8
|
-
const topLevelPrefix = topLevelPath.replace('*', '').replace(/\/$/, '');
|
|
9
|
-
const routes = Object.keys(pages)
|
|
10
|
-
.filter((key) => pages[key].api)
|
|
11
|
-
.map((key) => {
|
|
12
|
-
const path = key
|
|
13
|
-
.replace('./pages', '')
|
|
14
|
-
.replace(/\.server\.(t|j)sx?$/, '')
|
|
15
|
-
/**
|
|
16
|
-
* Replace /index with /
|
|
17
|
-
*/
|
|
18
|
-
.replace(/\/index$/i, '/')
|
|
19
|
-
/**
|
|
20
|
-
* Only lowercase the first letter. This allows the developer to use camelCase
|
|
21
|
-
* dynamic paths while ensuring their standard routes are normalized to lowercase.
|
|
22
|
-
*/
|
|
23
|
-
.replace(/\b[A-Z]/, (firstLetter) => firstLetter.toLowerCase())
|
|
24
|
-
/**
|
|
25
|
-
* Convert /[handle].jsx and /[...handle].jsx to /:handle.jsx for react-router-dom
|
|
26
|
-
*/
|
|
27
|
-
.replace(/\[(?:[.]{3})?(\w+?)\]/g, (_match, param) => `:${param}`);
|
|
28
|
-
/**
|
|
29
|
-
* Catch-all routes [...handle].jsx don't need an exact match
|
|
30
|
-
* https://reactrouter.com/core/api/Route/exact-bool
|
|
31
|
-
*/
|
|
32
|
-
const exact = !/\[(?:[.]{3})(\w+?)\]/.test(key);
|
|
33
|
-
return {
|
|
34
|
-
path: topLevelPrefix + path,
|
|
35
|
-
resource: pages[key].api,
|
|
36
|
-
hasServerComponent: !!pages[key].default,
|
|
37
|
-
exact,
|
|
38
|
-
};
|
|
39
|
-
});
|
|
40
|
-
memoizedRoutes = [
|
|
41
|
-
...routes.filter((route) => !route.path.includes(':')),
|
|
42
|
-
...routes.filter((route) => route.path.includes(':')),
|
|
43
|
-
];
|
|
44
|
-
memoizedPages = pages;
|
|
45
|
-
return memoizedRoutes;
|
|
46
|
-
}
|
|
47
|
-
export function getApiRouteFromURL(url, routes) {
|
|
48
|
-
let foundRoute, foundRouteDetails;
|
|
49
|
-
for (let i = 0; i < routes.length; i++) {
|
|
50
|
-
foundRouteDetails = matchPath(url.pathname, routes[i]);
|
|
51
|
-
if (foundRouteDetails) {
|
|
52
|
-
foundRoute = routes[i];
|
|
53
|
-
break;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
if (!foundRoute)
|
|
57
|
-
return null;
|
|
58
|
-
return {
|
|
59
|
-
resource: foundRoute.resource,
|
|
60
|
-
params: foundRouteDetails.params,
|
|
61
|
-
hasServerComponent: foundRoute.hasServerComponent,
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
export async function renderApiRoute(request, route, log) {
|
|
65
|
-
let response;
|
|
66
|
-
try {
|
|
67
|
-
response = await route.resource(request, { params: route.params });
|
|
68
|
-
if (!(response instanceof Response)) {
|
|
69
|
-
if (typeof response === 'string' || response instanceof String) {
|
|
70
|
-
response = new Response(response);
|
|
71
|
-
}
|
|
72
|
-
else if (typeof response === 'object') {
|
|
73
|
-
response = new Response(JSON.stringify(response), {
|
|
74
|
-
headers: {
|
|
75
|
-
'Content-Type': 'application/json',
|
|
76
|
-
},
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
catch (e) {
|
|
82
|
-
log.error(e);
|
|
83
|
-
response = new Response('Error processing: ' + request.url, { status: 500 });
|
|
84
|
-
}
|
|
85
|
-
logServerResponse('api', log, request, response.status);
|
|
86
|
-
return response;
|
|
87
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { ServerComponentRequest } from '../../framework/Hydration/ServerComponentRequest.server';
|
|
2
|
-
/** The `log` utility is a function that's used for logging debugging, warning, and error information about the application.
|
|
3
|
-
* Use this utility by importing `log` from `@shopify/hydrogen`, or by using a `log` prop passed to each page
|
|
4
|
-
* component. We recommend using the `log` prop passed to each page because it will associated your log to the
|
|
5
|
-
* current request in progress.
|
|
6
|
-
*/
|
|
7
|
-
export interface Logger {
|
|
8
|
-
trace: (...args: Array<any>) => void;
|
|
9
|
-
debug: (...args: Array<any>) => void;
|
|
10
|
-
warn: (...args: Array<any>) => void;
|
|
11
|
-
error: (...args: Array<any>) => void;
|
|
12
|
-
fatal: (...args: Array<any>) => void;
|
|
13
|
-
}
|
|
14
|
-
export declare function getLoggerFromContext(context: any): Logger;
|
|
15
|
-
export declare function setLogger(newLogger: Logger): void;
|
|
16
|
-
export declare function resetLogger(): void;
|
|
17
|
-
export declare const log: Logger;
|
|
18
|
-
export declare function logServerResponse(type: 'str' | 'rsc' | 'ssr' | 'api', log: Logger, request: ServerComponentRequest, responseStatus: number): void;
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { yellow, red, green, italic, lightBlue } from 'kolorist';
|
|
2
|
-
import { getTime } from '../timing';
|
|
3
|
-
const defaultLogger = {
|
|
4
|
-
trace(context, ...args) {
|
|
5
|
-
// Re-enable following line to show trace debugging information
|
|
6
|
-
// console.log(context.id, ...args);
|
|
7
|
-
},
|
|
8
|
-
debug(context, ...args) {
|
|
9
|
-
console.log(...args);
|
|
10
|
-
},
|
|
11
|
-
warn(context, ...args) {
|
|
12
|
-
console.warn(yellow('WARN: '), ...args);
|
|
13
|
-
},
|
|
14
|
-
error(context, ...args) {
|
|
15
|
-
console.error(red('ERROR: '), ...args);
|
|
16
|
-
},
|
|
17
|
-
fatal(context, ...args) {
|
|
18
|
-
console.error(red('FATAL: '), ...args);
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
let logger = defaultLogger;
|
|
22
|
-
export function getLoggerFromContext(context) {
|
|
23
|
-
return {
|
|
24
|
-
trace: (...args) => logger.trace(context, ...args),
|
|
25
|
-
debug: (...args) => logger.debug(context, ...args),
|
|
26
|
-
warn: (...args) => logger.warn(context, ...args),
|
|
27
|
-
error: (...args) => logger.error(context, ...args),
|
|
28
|
-
fatal: (...args) => logger.fatal(context, ...args),
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
export function setLogger(newLogger) {
|
|
32
|
-
logger = newLogger;
|
|
33
|
-
}
|
|
34
|
-
export function resetLogger() {
|
|
35
|
-
logger = defaultLogger;
|
|
36
|
-
}
|
|
37
|
-
export const log = {
|
|
38
|
-
trace(...args) {
|
|
39
|
-
return logger.trace({}, ...args);
|
|
40
|
-
},
|
|
41
|
-
debug(...args) {
|
|
42
|
-
return logger.debug({}, ...args);
|
|
43
|
-
},
|
|
44
|
-
warn(...args) {
|
|
45
|
-
return logger.warn({}, ...args);
|
|
46
|
-
},
|
|
47
|
-
error(...args) {
|
|
48
|
-
return logger.error({}, ...args);
|
|
49
|
-
},
|
|
50
|
-
fatal(...args) {
|
|
51
|
-
return logger.fatal({}, ...args);
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
const SERVER_RESPONSE_MAP = {
|
|
55
|
-
str: 'streaming SSR',
|
|
56
|
-
rsc: 'Server Components',
|
|
57
|
-
ssr: 'buffered SSR',
|
|
58
|
-
};
|
|
59
|
-
export function logServerResponse(type, log, request, responseStatus) {
|
|
60
|
-
const coloredResponseStatus = responseStatus >= 500
|
|
61
|
-
? red(responseStatus)
|
|
62
|
-
: responseStatus >= 400
|
|
63
|
-
? yellow(responseStatus)
|
|
64
|
-
: responseStatus >= 300
|
|
65
|
-
? lightBlue(responseStatus)
|
|
66
|
-
: green(responseStatus);
|
|
67
|
-
const fullType = SERVER_RESPONSE_MAP[type] || type;
|
|
68
|
-
const styledType = italic(pad(fullType, ' '));
|
|
69
|
-
const paddedTiming = pad((getTime() - request.time).toFixed(2) + ' ms', ' ');
|
|
70
|
-
const url = type === 'rsc'
|
|
71
|
-
? decodeURIComponent(request.url.substring(request.url.indexOf('=') + 1))
|
|
72
|
-
: request.url;
|
|
73
|
-
log.debug(`${request.method} ${styledType} ${coloredResponseStatus} ${paddedTiming} ${url}`);
|
|
74
|
-
}
|
|
75
|
-
function pad(str, _pad) {
|
|
76
|
-
return (str + _pad).substring(0, _pad.length);
|
|
77
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { TokensToRegexpOptions } from 'path-to-regexp';
|
|
2
|
-
interface MatchPathOptions extends TokensToRegexpOptions {
|
|
3
|
-
path?: string;
|
|
4
|
-
exact?: boolean;
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* Public API for matching a URL pathname to a path.
|
|
8
|
-
*/
|
|
9
|
-
export declare function matchPath(pathname: string, options?: MatchPathOptions): any;
|
|
10
|
-
export {};
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { pathToRegexp } from 'path-to-regexp';
|
|
2
|
-
// Modified from React Router v5
|
|
3
|
-
// https://github.com/remix-run/react-router/blob/v5/packages/react-router/modules/matchPath.js
|
|
4
|
-
const cache = {};
|
|
5
|
-
const cacheLimit = 10000;
|
|
6
|
-
let cacheCount = 0;
|
|
7
|
-
function compilePath(path, options) {
|
|
8
|
-
const cacheKey = `${options.end}${options.strict}${options.sensitive}`;
|
|
9
|
-
const pathCache = cache[cacheKey] || (cache[cacheKey] = {});
|
|
10
|
-
if (pathCache[path])
|
|
11
|
-
return pathCache[path];
|
|
12
|
-
const keys = [];
|
|
13
|
-
const regexp = pathToRegexp(path, keys, options);
|
|
14
|
-
const result = { regexp, keys };
|
|
15
|
-
if (cacheCount < cacheLimit) {
|
|
16
|
-
pathCache[path] = result;
|
|
17
|
-
cacheCount++;
|
|
18
|
-
}
|
|
19
|
-
return result;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Public API for matching a URL pathname to a path.
|
|
23
|
-
*/
|
|
24
|
-
export function matchPath(pathname, options = {}) {
|
|
25
|
-
const { path, exact = false, strict = false, sensitive = false } = options;
|
|
26
|
-
const paths = [].concat(path);
|
|
27
|
-
return paths.reduce((matched, path) => {
|
|
28
|
-
if (!path && path !== '')
|
|
29
|
-
return null;
|
|
30
|
-
if (matched)
|
|
31
|
-
return matched;
|
|
32
|
-
const { regexp, keys } = compilePath(path, {
|
|
33
|
-
end: exact,
|
|
34
|
-
strict,
|
|
35
|
-
sensitive,
|
|
36
|
-
});
|
|
37
|
-
const match = regexp.exec(pathname);
|
|
38
|
-
if (!match)
|
|
39
|
-
return null;
|
|
40
|
-
const [url, ...values] = match;
|
|
41
|
-
const isExact = pathname === url;
|
|
42
|
-
if (exact && !isExact)
|
|
43
|
-
return null;
|
|
44
|
-
return {
|
|
45
|
-
path,
|
|
46
|
-
url: path === '/' && url === '' ? '/' : url,
|
|
47
|
-
isExact,
|
|
48
|
-
params: keys.reduce((memo, key, index) => {
|
|
49
|
-
memo[key.name] = values[index];
|
|
50
|
-
return memo;
|
|
51
|
-
}, {}),
|
|
52
|
-
};
|
|
53
|
-
}, null);
|
|
54
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Not all environments have access to Performance.now(). This is to prevent
|
|
3
|
-
* timing side channel attacks.
|
|
4
|
-
*
|
|
5
|
-
* See: https://community.cloudflare.com/t/cloudflare-workers-how-do-i-measure-execution-time-of-my-method/69672
|
|
6
|
-
*/
|
|
7
|
-
export declare function getTime(): number;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Not all environments have access to Performance.now(). This is to prevent
|
|
3
|
-
* timing side channel attacks.
|
|
4
|
-
*
|
|
5
|
-
* See: https://community.cloudflare.com/t/cloudflare-workers-how-do-i-measure-execution-time-of-my-method/69672
|
|
6
|
-
*/
|
|
7
|
-
export function getTime() {
|
|
8
|
-
if (typeof performance !== 'undefined' && performance.now) {
|
|
9
|
-
return performance.now();
|
|
10
|
-
}
|
|
11
|
-
else {
|
|
12
|
-
return Date.now();
|
|
13
|
-
}
|
|
14
|
-
}
|
package/worker.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {default} from './dist/worker/handle-worker-event';
|