@demiurgejs/core 0.1.1 → 0.2.0-beta.2
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/README.md +5 -0
- package/bin/demiurge.mjs +51 -0
- package/dist/adapter/testing.d.ts +33 -0
- package/dist/adapter/testing.d.ts.map +1 -0
- package/dist/adapter/testing.js +251 -0
- package/dist/adapter/testing.js.map +1 -0
- package/dist/browser/file-router.d.ts.map +1 -1
- package/dist/chunks/document-shell-D1xo6cEA.js +35 -0
- package/dist/chunks/document-shell-D1xo6cEA.js.map +1 -0
- package/dist/chunks/image-codec-BGTx_t5K.js +141 -0
- package/dist/chunks/image-codec-BGTx_t5K.js.map +1 -0
- package/dist/chunks/images-B9MqcjSA.js +339 -0
- package/dist/chunks/images-B9MqcjSA.js.map +1 -0
- package/dist/chunks/request-metadata-D5NrT8ks.js +642 -0
- package/dist/chunks/request-metadata-D5NrT8ks.js.map +1 -0
- package/dist/chunks/streaming-BQ1bykDo.js +469 -0
- package/dist/chunks/streaming-BQ1bykDo.js.map +1 -0
- package/dist/chunks/{testing-DR3eQAvY.js → testing-B_iMFYz_.js} +2376 -1927
- package/dist/chunks/testing-B_iMFYz_.js.map +1 -0
- package/dist/cli.d.ts +42 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +173 -0
- package/dist/cli.js.map +1 -0
- package/dist/document/deferred-scripts.d.ts +11 -0
- package/dist/document/deferred-scripts.d.ts.map +1 -0
- package/dist/document/index.d.ts +4 -2
- package/dist/document/index.d.ts.map +1 -1
- package/dist/document/render.d.ts +1 -1
- package/dist/document/render.d.ts.map +1 -1
- package/dist/document/scripts.d.ts +34 -1
- package/dist/document/scripts.d.ts.map +1 -1
- package/dist/edge/assets.d.ts +14 -0
- package/dist/edge/assets.d.ts.map +1 -0
- package/dist/edge/index.d.ts +19 -0
- package/dist/edge/index.d.ts.map +1 -0
- package/dist/edge/index.js +286 -0
- package/dist/edge/index.js.map +1 -0
- package/dist/edge/stores.d.ts +8 -0
- package/dist/edge/stores.d.ts.map +1 -0
- package/dist/edge/streaming.d.ts +7 -0
- package/dist/edge/streaming.d.ts.map +1 -0
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +894 -1043
- package/dist/index.js.map +1 -1
- package/dist/internal/testing.js +12 -11
- package/dist/internal/testing.js.map +1 -1
- package/dist/kv/index.d.ts +3 -0
- package/dist/kv/index.d.ts.map +1 -0
- package/dist/kv/index.js +103 -0
- package/dist/kv/index.js.map +1 -0
- package/dist/kv/store.d.ts +28 -0
- package/dist/kv/store.d.ts.map +1 -0
- package/dist/node/font.d.ts +5 -0
- package/dist/node/font.d.ts.map +1 -0
- package/dist/node/image.d.ts +15 -0
- package/dist/node/image.d.ts.map +1 -0
- package/dist/node/index.d.ts +4 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +25 -23
- package/dist/node/index.js.map +1 -1
- package/dist/node/streaming.d.ts +2 -0
- package/dist/node/streaming.d.ts.map +1 -1
- package/dist/platform/analytics.d.ts +58 -5
- package/dist/platform/analytics.d.ts.map +1 -1
- package/dist/platform/font-assets.d.ts +19 -0
- package/dist/platform/font-assets.d.ts.map +1 -0
- package/dist/platform/fonts.d.ts +14 -4
- package/dist/platform/fonts.d.ts.map +1 -1
- package/dist/platform/image-codec.d.ts +15 -0
- package/dist/platform/image-codec.d.ts.map +1 -0
- package/dist/platform/image-url.d.ts +17 -0
- package/dist/platform/image-url.d.ts.map +1 -0
- package/dist/platform/image.d.ts +8 -0
- package/dist/platform/image.d.ts.map +1 -0
- package/dist/platform/images.d.ts +15 -0
- package/dist/platform/images.d.ts.map +1 -1
- package/dist/platform/index.d.ts +8 -5
- package/dist/platform/index.d.ts.map +1 -1
- package/dist/redis/index.d.ts +3 -0
- package/dist/redis/index.d.ts.map +1 -0
- package/dist/redis/index.js +171 -0
- package/dist/redis/index.js.map +1 -0
- package/dist/redis/store.d.ts +8 -0
- package/dist/redis/store.d.ts.map +1 -0
- package/dist/route/action.d.ts +11 -11
- package/dist/route/action.d.ts.map +1 -1
- package/dist/route/index.d.ts +2 -1
- package/dist/route/index.d.ts.map +1 -1
- package/dist/route/middleware.d.ts +7 -0
- package/dist/route/middleware.d.ts.map +1 -0
- package/dist/route/page.d.ts +2 -2
- package/dist/route/page.d.ts.map +1 -1
- package/dist/route/response.d.ts +19 -19
- package/dist/route/response.d.ts.map +1 -1
- package/dist/route/types.d.ts +55 -31
- package/dist/route/types.d.ts.map +1 -1
- package/dist/route/webhook.d.ts +1 -1
- package/dist/router/manifest.d.ts +1 -0
- package/dist/router/manifest.d.ts.map +1 -1
- package/dist/routing/generate.d.ts +2 -0
- package/dist/routing/generate.d.ts.map +1 -1
- package/dist/routing/index.d.ts +1 -1
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/types.d.ts +2 -0
- package/dist/routing/types.d.ts.map +1 -1
- package/dist/security/cors.d.ts.map +1 -1
- package/dist/security/index.d.ts +4 -2
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/policy.d.ts +5 -1
- package/dist/security/policy.d.ts.map +1 -1
- package/dist/security/types.d.ts +34 -13
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/verification.d.ts +8 -0
- package/dist/security/verification.d.ts.map +1 -0
- package/dist/server/document-shell.d.ts +12 -0
- package/dist/server/document-shell.d.ts.map +1 -0
- package/dist/server/errors.d.ts.map +1 -1
- package/dist/server/not-found.d.ts.map +1 -1
- package/dist/server/render-tree.d.ts +6 -1
- package/dist/server/render-tree.d.ts.map +1 -1
- package/dist/server/request-handler.d.ts +4 -1
- package/dist/server/request-handler.d.ts.map +1 -1
- package/dist/server/ssr.d.ts +1 -0
- package/dist/server/ssr.d.ts.map +1 -1
- package/dist/static/images.d.ts +13 -0
- package/dist/static/images.d.ts.map +1 -0
- package/dist/static/index.d.ts +18 -0
- package/dist/static/index.d.ts.map +1 -1
- package/dist/static/index.js +677 -129
- package/dist/static/index.js.map +1 -1
- package/dist/static/preview.d.ts +8 -0
- package/dist/static/preview.d.ts.map +1 -0
- package/dist/static/vercel.d.ts +34 -0
- package/dist/static/vercel.d.ts.map +1 -0
- package/dist/vite/index.d.ts +3 -2
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +782 -329
- package/dist/vite/index.js.map +1 -1
- package/dist/vite/plugin.d.ts +20 -0
- package/dist/vite/plugin.d.ts.map +1 -1
- package/dist/vite/policy-verification.d.ts +10 -0
- package/dist/vite/policy-verification.d.ts.map +1 -0
- package/package.json +38 -2
- package/dist/chunks/index-BnX9Qxbm.js +0 -44
- package/dist/chunks/index-BnX9Qxbm.js.map +0 -1
- package/dist/chunks/ssr-BJejKlkZ.js +0 -275
- package/dist/chunks/ssr-BJejKlkZ.js.map +0 -1
- package/dist/chunks/streaming-DN1DnbRE.js +0 -343
- package/dist/chunks/streaming-DN1DnbRE.js.map +0 -1
- package/dist/chunks/testing-DR3eQAvY.js.map +0 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type FontContribution } from "./fonts";
|
|
2
|
+
export type FontAssetFetch = (input: string, init?: {
|
|
3
|
+
signal?: AbortSignal;
|
|
4
|
+
}) => Promise<Response>;
|
|
5
|
+
export type FontAssetOptions = {
|
|
6
|
+
basePath?: string;
|
|
7
|
+
cacheDir?: string;
|
|
8
|
+
fetch?: FontAssetFetch;
|
|
9
|
+
fonts?: FontContribution;
|
|
10
|
+
root: string;
|
|
11
|
+
};
|
|
12
|
+
export type FontAsset = {
|
|
13
|
+
body: Uint8Array;
|
|
14
|
+
contentType: string;
|
|
15
|
+
file: string;
|
|
16
|
+
url: string;
|
|
17
|
+
};
|
|
18
|
+
export declare function resolveFontAssets(options: FontAssetOptions): Promise<FontAsset[]>;
|
|
19
|
+
//# sourceMappingURL=font-assets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"font-assets.d.ts","sourceRoot":"","sources":["../../src/platform/font-assets.ts"],"names":[],"mappings":"AAGA,OAAO,EAOL,KAAK,gBAAgB,EAEtB,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,cAAc,GAAG,CAC3B,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KAC5B,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEvB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,KAAK,CAAC,EAAE,gBAAgB,CAAC;IAEzB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IAEpB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAOF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,SAAS,EAAE,CAAC,CAqDtB"}
|
package/dist/platform/fonts.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { LinkTag } from "../document";
|
|
2
2
|
export type FontStyle = "normal" | "italic" | "oblique";
|
|
3
|
+
export type FontFormat = "otf" | "ttf" | "woff" | "woff2";
|
|
3
4
|
export type FontDefinition = {
|
|
4
5
|
display: "auto" | "block" | "fallback" | "optional" | "swap";
|
|
5
6
|
family: string;
|
|
6
7
|
kind: "font";
|
|
8
|
+
selfHost: boolean;
|
|
7
9
|
source: "google" | "local";
|
|
8
|
-
src
|
|
10
|
+
src: string;
|
|
9
11
|
style: FontStyle;
|
|
10
12
|
weight: number | `${number} ${number}`;
|
|
11
13
|
};
|
|
@@ -20,16 +22,24 @@ export type GoogleFontOptions = {
|
|
|
20
22
|
display?: FontDefinition["display"];
|
|
21
23
|
family: string;
|
|
22
24
|
selfHost?: boolean;
|
|
23
|
-
src
|
|
25
|
+
src: string;
|
|
24
26
|
style?: FontStyle;
|
|
25
27
|
weight?: FontDefinition["weight"];
|
|
26
28
|
};
|
|
27
29
|
export type FontContribution = readonly FontDefinition[];
|
|
30
|
+
export declare const defaultFontPath = "/_demiurge/font";
|
|
28
31
|
export declare const font: {
|
|
29
32
|
google(options: GoogleFontOptions): FontDefinition;
|
|
30
33
|
local(options: LocalFontOptions): FontDefinition;
|
|
31
34
|
};
|
|
32
35
|
export declare function defineFonts(fonts: FontContribution): FontContribution;
|
|
33
|
-
export declare function
|
|
34
|
-
export declare function
|
|
36
|
+
export declare function fontAssetFileName(definition: FontDefinition): string;
|
|
37
|
+
export declare function fontAssetUrl(definition: FontDefinition, basePath?: string): string;
|
|
38
|
+
export declare function fontStylesheetUrl(basePath?: string): string;
|
|
39
|
+
export declare function fontMediaType(file: string): string;
|
|
40
|
+
export declare function fontFormat(file: string): FontFormat;
|
|
41
|
+
export declare function fontLinks(fonts: FontContribution, basePath?: string): LinkTag[];
|
|
42
|
+
export declare function fontPreloadLinks(fonts: FontContribution, basePath?: string): LinkTag[];
|
|
43
|
+
export declare function renderFontFaceCss(fonts: FontContribution, basePath?: string): string;
|
|
44
|
+
export declare function fontSources(fonts: FontContribution): string[];
|
|
35
45
|
//# sourceMappingURL=fonts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../src/platform/fonts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../src/platform/fonts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAExD,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IAIb,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,SAAS,cAAc,EAAE,CAAC;AAIzD,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAuBjD,eAAO,MAAM,IAAI;oBAIC,iBAAiB,GAAG,cAAc;mBAwBnC,gBAAgB,GAAG,cAAc;CA0BjD,CAAC;AAEF,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,CAErE;AAID,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,cAAc,UAK3D;AAED,wBAAgB,YAAY,CAC1B,UAAU,EAAE,cAAc,EAC1B,QAAQ,GAAE,MAAwB,UAKnC;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,GAAE,MAAwB,UAEnE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,UAEzC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAcnD;AAID,wBAAgB,SAAS,CACvB,KAAK,EAAE,gBAAgB,EACvB,QAAQ,GAAE,MAAwB,GACjC,OAAO,EAAE,CAaX;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,gBAAgB,EACvB,QAAQ,GAAE,MAAwB,GACjC,OAAO,EAAE,CAUX;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,gBAAgB,EACvB,QAAQ,GAAE,MAAwB,UAmBnC;AAID,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAU7D"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ImageFormat } from "./images";
|
|
2
|
+
import { type ImageVariantDescriptor } from "./image-url";
|
|
3
|
+
export type EncodedImage = {
|
|
4
|
+
body: Uint8Array;
|
|
5
|
+
contentType: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function imageContentType(format: Exclude<ImageFormat, "auto">): string;
|
|
8
|
+
export declare function negotiateImageFormat(descriptor: ImageVariantDescriptor, accept: string | null): Exclude<ImageFormat, "auto">;
|
|
9
|
+
export declare function sourceFormat(src: string): Exclude<ImageFormat, "auto">;
|
|
10
|
+
export declare function transformImage(source: Uint8Array, options: {
|
|
11
|
+
format: Exclude<ImageFormat, "auto">;
|
|
12
|
+
quality?: number;
|
|
13
|
+
width: number;
|
|
14
|
+
}): Promise<EncodedImage>;
|
|
15
|
+
//# sourceMappingURL=image-codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-codec.d.ts","sourceRoot":"","sources":["../../src/platform/image-codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAwB,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAEhF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AA2BF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,UAEpE;AAID,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,sBAAsB,EAClC,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAgB9B;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAgBtE;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE;IACP,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,GACA,OAAO,CAAC,YAAY,CAAC,CAYvB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ImageFormat } from "./images";
|
|
2
|
+
export type ImageSourceKind = "local" | "remote";
|
|
3
|
+
export type ImageVariantDescriptor = {
|
|
4
|
+
format: ImageFormat;
|
|
5
|
+
quality?: number;
|
|
6
|
+
sourceKind: ImageSourceKind;
|
|
7
|
+
src: string;
|
|
8
|
+
width: number;
|
|
9
|
+
};
|
|
10
|
+
export declare const defaultImageOptimizerPath = "/_demiurge/image";
|
|
11
|
+
export declare function createImageOptimizerUrl(descriptor: ImageVariantDescriptor, optimizerPath: string): string;
|
|
12
|
+
export declare function createImageVariantPath(descriptor: ImageVariantDescriptor, optimizerPath: string): string;
|
|
13
|
+
export declare function parseImageVariantPath(pathname: string, optimizerPath: string): ImageVariantDescriptor | undefined;
|
|
14
|
+
export declare function resolveVariantExtension(descriptor: ImageVariantDescriptor): string;
|
|
15
|
+
export declare function imageSourceExtension(src: string): string | undefined;
|
|
16
|
+
export declare function collectImageVariantPaths(html: string, optimizerPath: string): string[];
|
|
17
|
+
//# sourceMappingURL=image-url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-url.d.ts","sourceRoot":"","sources":["../../src/platform/image-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,CAAC;AAIjD,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,eAAe,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,yBAAyB,qBAAqB,CAAC;AAmB5D,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,sBAAsB,EAClC,aAAa,EAAE,MAAM,UAgBtB;AAKD,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,sBAAsB,EAClC,aAAa,EAAE,MAAM,UAetB;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GACpB,sBAAsB,GAAG,SAAS,CA0BpC;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,sBAAsB,UAczE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,sBAO/C;AAKD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,YAO3E"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ImagePolicy, type ImageTransformOptions } from "./images";
|
|
2
|
+
export type ImageProps = ImageTransformOptions & {
|
|
3
|
+
className?: string;
|
|
4
|
+
id?: string;
|
|
5
|
+
policy?: ImagePolicy;
|
|
6
|
+
};
|
|
7
|
+
export declare function Image({ className, id, policy, ...options }: ImageProps): import("react").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=image.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/platform/image.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC3B,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,UAAU,GAAG,qBAAqB,GAAG;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAMF,wBAAgB,KAAK,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,EAAE,UAAU,+BAkBtE"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { type ImageVariantDescriptor } from "./image-url";
|
|
2
|
+
export type ImageLoader = "optimizer" | "static";
|
|
1
3
|
export type ImageFormat = "auto" | "avif" | "webp" | "jpeg" | "png";
|
|
2
4
|
export type RemoteImagePattern = {
|
|
3
5
|
hostname: string;
|
|
@@ -6,6 +8,7 @@ export type RemoteImagePattern = {
|
|
|
6
8
|
protocol?: "http:" | "https:";
|
|
7
9
|
};
|
|
8
10
|
export type ImagePolicy = {
|
|
11
|
+
loader?: ImageLoader;
|
|
9
12
|
local?: boolean;
|
|
10
13
|
optimizerPath?: string;
|
|
11
14
|
remote?: readonly (string | RemoteImagePattern)[];
|
|
@@ -46,4 +49,16 @@ export type ImageTransformPlan = {
|
|
|
46
49
|
export declare function defineImages(policy: ImagePolicy): ImagePolicy;
|
|
47
50
|
export declare function isAllowedImageSource(src: string, policy?: ImagePolicy): boolean;
|
|
48
51
|
export declare function planImageTransform(options: ImageTransformOptions, policy?: ImagePolicy): ImageTransformPlan;
|
|
52
|
+
export type ImageRequestRejection = {
|
|
53
|
+
reason: string;
|
|
54
|
+
status: 400 | 403;
|
|
55
|
+
};
|
|
56
|
+
export type ImageRequestResult = {
|
|
57
|
+
descriptor: ImageVariantDescriptor;
|
|
58
|
+
ok: true;
|
|
59
|
+
} | {
|
|
60
|
+
ok: false;
|
|
61
|
+
rejection: ImageRequestRejection;
|
|
62
|
+
};
|
|
63
|
+
export declare function parseImageOptimizerRequest(url: URL, policy?: ImagePolicy): ImageRequestResult;
|
|
49
64
|
//# sourceMappingURL=images.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../src/platform/images.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAEpE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,kBAAkB,CAAC,EAAE,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QACN,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;QACzB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;
|
|
1
|
+
{"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../src/platform/images.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,sBAAsB,EAC5B,MAAM,aAAa,CAAC;AAIrB,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEjD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAEpE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,kBAAkB,CAAC,EAAE,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QACN,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;QACzB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAE7D;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,WAAgB,WAEzE;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,GAAE,WAAgB,GACvB,kBAAkB,CAmDpB;AAmGD,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B;IAAE,UAAU,EAAE,sBAAsB,CAAC;IAAC,EAAE,EAAE,IAAI,CAAA;CAAE,GAChD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,qBAAqB,CAAA;CAAE,CAAC;AAYpD,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,GAAG,EACR,MAAM,GAAE,WAAgB,GACvB,kBAAkB,CA6CpB"}
|
package/dist/platform/index.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
export { defineImages, isAllowedImageSource, planImageTransform, } from "./images";
|
|
2
|
-
export type { ImageFormat, ImagePolicy, ImageTransformOptions, ImageTransformPlan, ImageVariant, RemoteImagePattern, } from "./images";
|
|
3
|
-
export {
|
|
4
|
-
export type {
|
|
1
|
+
export { defineImages, isAllowedImageSource, parseImageOptimizerRequest, planImageTransform, } from "./images";
|
|
2
|
+
export type { ImageFormat, ImageLoader, ImagePolicy, ImageRequestRejection, ImageRequestResult, ImageTransformOptions, ImageTransformPlan, ImageVariant, RemoteImagePattern, } from "./images";
|
|
3
|
+
export { Image } from "./image";
|
|
4
|
+
export type { ImageProps } from "./image";
|
|
5
|
+
export type { ImageVariantDescriptor } from "./image-url";
|
|
6
|
+
export { defaultFontPath, defineFonts, font, fontAssetFileName, fontAssetUrl, fontLinks, fontMediaType, fontPreloadLinks, fontSources, fontStylesheetUrl, renderFontFaceCss, } from "./fonts";
|
|
7
|
+
export type { FontContribution, FontDefinition, FontFormat, FontStyle, GoogleFontOptions, LocalFontOptions, } from "./fonts";
|
|
5
8
|
export { analytics } from "./analytics";
|
|
6
|
-
export type { AnalyticsConsent, PlausibleAnalytics, PlausibleAnalyticsOptions, } from "./analytics";
|
|
9
|
+
export type { AnalyticsConsent, AnalyticsIntegration, AnalyticsProvider, OpenTelemetryAnalytics, OpenTelemetryAnalyticsOptions, PlausibleAnalytics, PlausibleAnalyticsOptions, SentryAnalytics, SentryAnalyticsOptions, } from "./analytics";
|
|
7
10
|
export { defineInstrumentation } from "./observability";
|
|
8
11
|
export type { Instrumentation, InstrumentationEvent, InstrumentationHandler, InstrumentationOptions, ObservabilityValue, RequestSignal, ServerStartSignal, TraceSignal, WebVitalName, WebVitalSignal, } from "./observability";
|
|
9
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/platform/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/platform/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,WAAW,EACX,IAAI,EACJ,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,6BAA6B,EAC7B,kBAAkB,EAClB,yBAAyB,EACzB,eAAe,EACf,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/redis/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAChD,YAAY,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
const o = "demiurge:cache:", g = `
|
|
2
|
+
local old = redis.call("GET", KEYS[1])
|
|
3
|
+
if old then
|
|
4
|
+
local oldTags = cjson.decode(old).tags
|
|
5
|
+
for i = 1, #oldTags do
|
|
6
|
+
redis.call("SREM", ARGV[3] .. oldTags[i], ARGV[4])
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
redis.call("SET", KEYS[1], ARGV[1])
|
|
10
|
+
if ARGV[2] ~= "" then
|
|
11
|
+
redis.call("PEXPIREAT", KEYS[1], ARGV[2])
|
|
12
|
+
end
|
|
13
|
+
local newTags = cjson.decode(ARGV[1]).tags
|
|
14
|
+
for i = 1, #newTags do
|
|
15
|
+
redis.call("SADD", ARGV[3] .. newTags[i], ARGV[4])
|
|
16
|
+
end
|
|
17
|
+
redis.call("DEL", KEYS[2])
|
|
18
|
+
return 1
|
|
19
|
+
`, f = `
|
|
20
|
+
local old = redis.call("GET", KEYS[1])
|
|
21
|
+
redis.call("DEL", KEYS[2])
|
|
22
|
+
if not old then
|
|
23
|
+
return 0
|
|
24
|
+
end
|
|
25
|
+
local oldTags = cjson.decode(old).tags
|
|
26
|
+
for i = 1, #oldTags do
|
|
27
|
+
redis.call("SREM", ARGV[1] .. oldTags[i], ARGV[2])
|
|
28
|
+
end
|
|
29
|
+
redis.call("DEL", KEYS[1])
|
|
30
|
+
return 1
|
|
31
|
+
`, u = `
|
|
32
|
+
local tags = cjson.decode(ARGV[1])
|
|
33
|
+
local seen = {}
|
|
34
|
+
local deleted = 0
|
|
35
|
+
for i = 1, #tags do
|
|
36
|
+
local tagSetKey = ARGV[2] .. tags[i]
|
|
37
|
+
local members = redis.call("SMEMBERS", tagSetKey)
|
|
38
|
+
for j = 1, #members do
|
|
39
|
+
local rawKey = members[j]
|
|
40
|
+
if not seen[rawKey] then
|
|
41
|
+
seen[rawKey] = true
|
|
42
|
+
local entryKey = ARGV[3] .. rawKey
|
|
43
|
+
local old = redis.call("GET", entryKey)
|
|
44
|
+
if old then
|
|
45
|
+
local oldTags = cjson.decode(old).tags
|
|
46
|
+
for t = 1, #oldTags do
|
|
47
|
+
redis.call("SREM", ARGV[2] .. oldTags[t], rawKey)
|
|
48
|
+
end
|
|
49
|
+
redis.call("DEL", entryKey)
|
|
50
|
+
redis.call("DEL", ARGV[4] .. rawKey)
|
|
51
|
+
deleted = deleted + 1
|
|
52
|
+
else
|
|
53
|
+
redis.call("SREM", tagSetKey, rawKey)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
redis.call("DEL", tagSetKey)
|
|
58
|
+
end
|
|
59
|
+
return deleted
|
|
60
|
+
`, R = `
|
|
61
|
+
local owner = redis.call("GET", KEYS[2])
|
|
62
|
+
if not owner or owner ~= ARGV[1] then
|
|
63
|
+
return 0
|
|
64
|
+
end
|
|
65
|
+
local old = redis.call("GET", KEYS[1])
|
|
66
|
+
if old then
|
|
67
|
+
local oldTags = cjson.decode(old).tags
|
|
68
|
+
for i = 1, #oldTags do
|
|
69
|
+
redis.call("SREM", ARGV[4] .. oldTags[i], ARGV[5])
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
redis.call("SET", KEYS[1], ARGV[2])
|
|
73
|
+
if ARGV[3] ~= "" then
|
|
74
|
+
redis.call("PEXPIREAT", KEYS[1], ARGV[3])
|
|
75
|
+
end
|
|
76
|
+
local newTags = cjson.decode(ARGV[2]).tags
|
|
77
|
+
for i = 1, #newTags do
|
|
78
|
+
redis.call("SADD", ARGV[4] .. newTags[i], ARGV[5])
|
|
79
|
+
end
|
|
80
|
+
redis.call("DEL", KEYS[2])
|
|
81
|
+
return 1
|
|
82
|
+
`, h = `
|
|
83
|
+
local owner = redis.call("GET", KEYS[1])
|
|
84
|
+
if owner == ARGV[1] then
|
|
85
|
+
redis.call("DEL", KEYS[1])
|
|
86
|
+
end
|
|
87
|
+
return 0
|
|
88
|
+
`;
|
|
89
|
+
function S(r) {
|
|
90
|
+
const a = r;
|
|
91
|
+
return a.demiurgeCacheSet || r.defineCommand("demiurgeCacheSet", { lua: g, numberOfKeys: 2 }), a.demiurgeCacheDelete || r.defineCommand("demiurgeCacheDelete", {
|
|
92
|
+
lua: f,
|
|
93
|
+
numberOfKeys: 2
|
|
94
|
+
}), a.demiurgeCacheInvalidateTags || r.defineCommand("demiurgeCacheInvalidateTags", {
|
|
95
|
+
lua: u,
|
|
96
|
+
numberOfKeys: 0
|
|
97
|
+
}), a.demiurgeCachePublishRefresh || r.defineCommand("demiurgeCachePublishRefresh", {
|
|
98
|
+
lua: R,
|
|
99
|
+
numberOfKeys: 2
|
|
100
|
+
}), a.demiurgeCacheReleaseRefreshLease || r.defineCommand("demiurgeCacheReleaseRefreshLease", {
|
|
101
|
+
lua: h,
|
|
102
|
+
numberOfKeys: 1
|
|
103
|
+
}), a;
|
|
104
|
+
}
|
|
105
|
+
function m(r) {
|
|
106
|
+
if (!r.client || typeof r.client.defineCommand != "function")
|
|
107
|
+
throw new Error(
|
|
108
|
+
"Demiurge Redis cache store requires an ioredis client. Pass a connected ioredis Redis instance as `client`."
|
|
109
|
+
);
|
|
110
|
+
const a = S(r.client), t = r.keyPrefix ?? o, d = `${t}entry:`, i = `${t}tag:`, s = `${t}lease:`;
|
|
111
|
+
return {
|
|
112
|
+
async acquireRefreshLease(e, l, n) {
|
|
113
|
+
return await a.call(
|
|
114
|
+
"SET",
|
|
115
|
+
s + e,
|
|
116
|
+
l,
|
|
117
|
+
"NX",
|
|
118
|
+
"PXAT",
|
|
119
|
+
String(n)
|
|
120
|
+
) === "OK";
|
|
121
|
+
},
|
|
122
|
+
async delete(e) {
|
|
123
|
+
return await a.demiurgeCacheDelete(
|
|
124
|
+
d + e,
|
|
125
|
+
s + e,
|
|
126
|
+
i,
|
|
127
|
+
e
|
|
128
|
+
) === 1;
|
|
129
|
+
},
|
|
130
|
+
async get(e) {
|
|
131
|
+
const l = await a.get(d + e);
|
|
132
|
+
return l ? JSON.parse(l) : void 0;
|
|
133
|
+
},
|
|
134
|
+
async invalidateTags(e) {
|
|
135
|
+
return e.length === 0 ? 0 : await a.demiurgeCacheInvalidateTags(
|
|
136
|
+
JSON.stringify(e),
|
|
137
|
+
i,
|
|
138
|
+
d,
|
|
139
|
+
s
|
|
140
|
+
);
|
|
141
|
+
},
|
|
142
|
+
async publishRefresh(e, l, n) {
|
|
143
|
+
return await a.demiurgeCachePublishRefresh(
|
|
144
|
+
d + e,
|
|
145
|
+
s + e,
|
|
146
|
+
l,
|
|
147
|
+
JSON.stringify(n),
|
|
148
|
+
n.staleUntil === null ? "" : String(n.staleUntil),
|
|
149
|
+
i,
|
|
150
|
+
e
|
|
151
|
+
) === 1;
|
|
152
|
+
},
|
|
153
|
+
async releaseRefreshLease(e, l) {
|
|
154
|
+
await a.demiurgeCacheReleaseRefreshLease(s + e, l);
|
|
155
|
+
},
|
|
156
|
+
async set(e, l) {
|
|
157
|
+
await a.demiurgeCacheSet(
|
|
158
|
+
d + e,
|
|
159
|
+
s + e,
|
|
160
|
+
JSON.stringify(l),
|
|
161
|
+
l.staleUntil === null ? "" : String(l.staleUntil),
|
|
162
|
+
i,
|
|
163
|
+
e
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
export {
|
|
169
|
+
m as createRedisCacheStore
|
|
170
|
+
};
|
|
171
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/redis/store.ts"],"sourcesContent":["import type { Redis } from \"ioredis\";\nimport type { CacheStore, CacheStoreEntry } from \"../data/cache\";\n\nexport type RedisCacheStoreOptions = {\n // Every consumer of one Redis database shares one keyspace. This prefix\n // scopes the store's entry, tag, and lease keys away from an application's\n // other Redis use. Two Demiurge deployments that share a database still\n // need distinct prefixes, the same way they need distinct cache namespaces.\n keyPrefix?: string;\n // The store issues commands on a client the application already\n // constructed and connected. Connection options, TLS, Sentinel, and retry\n // policy are the application's decision, not this store's.\n client: Redis;\n};\n\nconst defaultKeyPrefix = \"demiurge:cache:\";\n\n// Tag sets hold the raw, unprefixed cache key as each member, never the\n// prefixed entry key. invalidateTags() only knows a tag's members. It\n// rebuilds both the entry key and the lease key by applying their prefixes.\n// Every script below adds and removes the same raw-key member, so the two\n// stay in agreement.\n\n// KEYS[1] entry key, KEYS[2] lease key.\n// ARGV[1] entry JSON, ARGV[2] staleUntil epoch ms or \"\".\n// ARGV[3] tag key prefix, ARGV[4] raw key.\nconst setScript = `\nlocal old = redis.call(\"GET\", KEYS[1])\nif old then\n local oldTags = cjson.decode(old).tags\n for i = 1, #oldTags do\n redis.call(\"SREM\", ARGV[3] .. oldTags[i], ARGV[4])\n end\nend\nredis.call(\"SET\", KEYS[1], ARGV[1])\nif ARGV[2] ~= \"\" then\n redis.call(\"PEXPIREAT\", KEYS[1], ARGV[2])\nend\nlocal newTags = cjson.decode(ARGV[1]).tags\nfor i = 1, #newTags do\n redis.call(\"SADD\", ARGV[3] .. newTags[i], ARGV[4])\nend\nredis.call(\"DEL\", KEYS[2])\nreturn 1\n`;\n\n// KEYS[1] entry key, KEYS[2] lease key.\n// ARGV[1] tag key prefix, ARGV[2] raw key.\nconst deleteScript = `\nlocal old = redis.call(\"GET\", KEYS[1])\nredis.call(\"DEL\", KEYS[2])\nif not old then\n return 0\nend\nlocal oldTags = cjson.decode(old).tags\nfor i = 1, #oldTags do\n redis.call(\"SREM\", ARGV[1] .. oldTags[i], ARGV[2])\nend\nredis.call(\"DEL\", KEYS[1])\nreturn 1\n`;\n\n// No declared KEYS. Tags name a variable number of sets, so the script reads\n// their redis keys from ARGV instead.\n// ARGV[1] tags JSON array, ARGV[2] tag key prefix, ARGV[3] entry key prefix,\n// ARGV[4] lease key prefix\nconst invalidateTagsScript = `\nlocal tags = cjson.decode(ARGV[1])\nlocal seen = {}\nlocal deleted = 0\nfor i = 1, #tags do\n local tagSetKey = ARGV[2] .. tags[i]\n local members = redis.call(\"SMEMBERS\", tagSetKey)\n for j = 1, #members do\n local rawKey = members[j]\n if not seen[rawKey] then\n seen[rawKey] = true\n local entryKey = ARGV[3] .. rawKey\n local old = redis.call(\"GET\", entryKey)\n if old then\n local oldTags = cjson.decode(old).tags\n for t = 1, #oldTags do\n redis.call(\"SREM\", ARGV[2] .. oldTags[t], rawKey)\n end\n redis.call(\"DEL\", entryKey)\n redis.call(\"DEL\", ARGV[4] .. rawKey)\n deleted = deleted + 1\n else\n redis.call(\"SREM\", tagSetKey, rawKey)\n end\n end\n end\n redis.call(\"DEL\", tagSetKey)\nend\nreturn deleted\n`;\n\n// KEYS[1] entry key, KEYS[2] lease key.\n// ARGV[1] token, ARGV[2] entry JSON, ARGV[3] staleUntil epoch ms or \"\".\n// ARGV[4] tag key prefix, ARGV[5] raw key.\nconst publishRefreshScript = `\nlocal owner = redis.call(\"GET\", KEYS[2])\nif not owner or owner ~= ARGV[1] then\n return 0\nend\nlocal old = redis.call(\"GET\", KEYS[1])\nif old then\n local oldTags = cjson.decode(old).tags\n for i = 1, #oldTags do\n redis.call(\"SREM\", ARGV[4] .. oldTags[i], ARGV[5])\n end\nend\nredis.call(\"SET\", KEYS[1], ARGV[2])\nif ARGV[3] ~= \"\" then\n redis.call(\"PEXPIREAT\", KEYS[1], ARGV[3])\nend\nlocal newTags = cjson.decode(ARGV[2]).tags\nfor i = 1, #newTags do\n redis.call(\"SADD\", ARGV[4] .. newTags[i], ARGV[5])\nend\nredis.call(\"DEL\", KEYS[2])\nreturn 1\n`;\n\n// KEYS[1] lease key, ARGV[1] token\nconst releaseRefreshLeaseScript = `\nlocal owner = redis.call(\"GET\", KEYS[1])\nif owner == ARGV[1] then\n redis.call(\"DEL\", KEYS[1])\nend\nreturn 0\n`;\n\ntype RedisCacheCommands = {\n demiurgeCacheSet: (\n entryKey: string,\n leaseKey: string,\n entryJson: string,\n staleUntil: string,\n tagPrefix: string,\n rawKey: string,\n ) => Promise<number>;\n demiurgeCacheDelete: (\n entryKey: string,\n leaseKey: string,\n tagPrefix: string,\n rawKey: string,\n ) => Promise<number>;\n demiurgeCacheInvalidateTags: (\n tagsJson: string,\n tagPrefix: string,\n entryPrefix: string,\n leasePrefix: string,\n ) => Promise<number>;\n demiurgeCachePublishRefresh: (\n entryKey: string,\n leaseKey: string,\n token: string,\n entryJson: string,\n staleUntil: string,\n tagPrefix: string,\n rawKey: string,\n ) => Promise<number>;\n demiurgeCacheReleaseRefreshLease: (\n leaseKey: string,\n token: string,\n ) => Promise<number>;\n};\n\n// The application already owns one ioredis client. Attaching the store's\n// commands is idempotent, so building several stores on the same client, or\n// rebuilding one after a reconnect, never redefines a command twice.\nfunction commands(client: Redis): Redis & RedisCacheCommands {\n const withCommands = client as Redis & Partial<RedisCacheCommands>;\n\n if (!withCommands.demiurgeCacheSet) {\n client.defineCommand(\"demiurgeCacheSet\", { lua: setScript, numberOfKeys: 2 });\n }\n\n if (!withCommands.demiurgeCacheDelete) {\n client.defineCommand(\"demiurgeCacheDelete\", {\n lua: deleteScript,\n numberOfKeys: 2,\n });\n }\n\n if (!withCommands.demiurgeCacheInvalidateTags) {\n client.defineCommand(\"demiurgeCacheInvalidateTags\", {\n lua: invalidateTagsScript,\n numberOfKeys: 0,\n });\n }\n\n if (!withCommands.demiurgeCachePublishRefresh) {\n client.defineCommand(\"demiurgeCachePublishRefresh\", {\n lua: publishRefreshScript,\n numberOfKeys: 2,\n });\n }\n\n if (!withCommands.demiurgeCacheReleaseRefreshLease) {\n client.defineCommand(\"demiurgeCacheReleaseRefreshLease\", {\n lua: releaseRefreshLeaseScript,\n numberOfKeys: 1,\n });\n }\n\n return withCommands as Redis & RedisCacheCommands;\n}\n\n// Redis holds the entry, its tag memberships, and its refresh lease as\n// independent keys. Every process talking to the same database must see\n// these three stay coordinated. Each write path therefore runs as one Lua\n// script rather than several round trips a concurrent writer could\n// interleave with.\nexport function createRedisCacheStore(\n options: RedisCacheStoreOptions,\n): CacheStore {\n if (!options.client || typeof options.client.defineCommand !== \"function\") {\n throw new Error(\n \"Demiurge Redis cache store requires an ioredis client. Pass a connected ioredis Redis instance as `client`.\",\n );\n }\n\n const client = commands(options.client);\n const prefix = options.keyPrefix ?? defaultKeyPrefix;\n const entryPrefix = `${prefix}entry:`;\n const tagPrefix = `${prefix}tag:`;\n const leasePrefix = `${prefix}lease:`;\n\n return {\n async acquireRefreshLease(key, token, expiresAt) {\n // ioredis's typed SET overloads do not cover every flag order the\n // Redis SET command accepts, so this issues the raw command instead.\n const result = await client.call(\n \"SET\",\n leasePrefix + key,\n token,\n \"NX\",\n \"PXAT\",\n String(expiresAt),\n );\n\n return result === \"OK\";\n },\n async delete(key) {\n const deleted = await client.demiurgeCacheDelete(\n entryPrefix + key,\n leasePrefix + key,\n tagPrefix,\n key,\n );\n\n return deleted === 1;\n },\n async get(key) {\n const raw = await client.get(entryPrefix + key);\n return raw ? (JSON.parse(raw) as CacheStoreEntry) : undefined;\n },\n async invalidateTags(tags) {\n if (tags.length === 0) {\n return 0;\n }\n\n return await client.demiurgeCacheInvalidateTags(\n JSON.stringify(tags),\n tagPrefix,\n entryPrefix,\n leasePrefix,\n );\n },\n async publishRefresh(key, token, entry) {\n const result = await client.demiurgeCachePublishRefresh(\n entryPrefix + key,\n leasePrefix + key,\n token,\n JSON.stringify(entry),\n entry.staleUntil === null ? \"\" : String(entry.staleUntil),\n tagPrefix,\n key,\n );\n\n return result === 1;\n },\n async releaseRefreshLease(key, token) {\n await client.demiurgeCacheReleaseRefreshLease(leasePrefix + key, token);\n },\n async set(key, entry) {\n await client.demiurgeCacheSet(\n entryPrefix + key,\n leasePrefix + key,\n JSON.stringify(entry),\n entry.staleUntil === null ? \"\" : String(entry.staleUntil),\n tagPrefix,\n key,\n );\n },\n };\n}\n"],"names":["defaultKeyPrefix","setScript","deleteScript","invalidateTagsScript","publishRefreshScript","releaseRefreshLeaseScript","commands","client","withCommands","createRedisCacheStore","options","prefix","entryPrefix","tagPrefix","leasePrefix","key","token","expiresAt","raw","tags","entry"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Redis } from "ioredis";
|
|
2
|
+
import type { CacheStore } from "../data/cache";
|
|
3
|
+
export type RedisCacheStoreOptions = {
|
|
4
|
+
keyPrefix?: string;
|
|
5
|
+
client: Redis;
|
|
6
|
+
};
|
|
7
|
+
export declare function createRedisCacheStore(options: RedisCacheStoreOptions): CacheStore;
|
|
8
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/redis/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,eAAe,CAAC;AAEjE,MAAM,MAAM,sBAAsB,GAAG;IAKnC,SAAS,CAAC,EAAE,MAAM,CAAC;IAInB,MAAM,EAAE,KAAK,CAAC;CACf,CAAC;AA0MF,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,sBAAsB,GAC9B,UAAU,CAiFZ"}
|
package/dist/route/action.d.ts
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import type { CacheDuration, CacheKey, IdempotencyStore } from "../data";
|
|
2
2
|
import type { CorsPolicy, RouteSecurityPolicy } from "../security";
|
|
3
|
-
import type { HttpRouteContext, MaybePromise, ResponseCapability, ServerTimingInput } from "./types";
|
|
4
|
-
export type ActionInput<TInput
|
|
5
|
-
export type ActionContext<TInput
|
|
3
|
+
import type { HttpRouteContext, MaybePromise, ResponseCapability, RouteRequestContextFor, ServerTimingInput } from "./types";
|
|
4
|
+
export type ActionInput<TInput, TPath extends string = string, TValues extends object = RouteRequestContextFor<TPath>> = (context: HttpRouteContext<TPath, TValues>) => MaybePromise<TInput>;
|
|
5
|
+
export type ActionContext<TInput, TPath extends string = string, TValues extends object = RouteRequestContextFor<TPath>> = HttpRouteContext<TPath, TValues> & {
|
|
6
6
|
input: TInput;
|
|
7
7
|
};
|
|
8
|
-
export type ActionIdempotency<TInput
|
|
9
|
-
key: CacheKey | ((context: ActionContext<TInput>) => CacheKey);
|
|
8
|
+
export type ActionIdempotency<TInput, TPath extends string = string, TValues extends object = RouteRequestContextFor<TPath>> = {
|
|
9
|
+
key: CacheKey | ((context: ActionContext<TInput, TPath, TValues>) => CacheKey);
|
|
10
10
|
store: IdempotencyStore;
|
|
11
11
|
ttl?: CacheDuration;
|
|
12
12
|
};
|
|
13
|
-
export type ActionOptions<TInput
|
|
13
|
+
export type ActionOptions<TInput, TPath extends string = string, TValues extends object = RouteRequestContextFor<TPath>> = {
|
|
14
14
|
cors?: CorsPolicy;
|
|
15
|
-
handler: (context: ActionContext<TInput>) => MaybePromise<Response | ResponseCapability
|
|
16
|
-
idempotency?: ActionIdempotency<TInput>;
|
|
17
|
-
input?: ActionInput<TInput>;
|
|
15
|
+
handler: (context: ActionContext<TInput, TPath, TValues>) => MaybePromise<Response | ResponseCapability<TPath, TValues>>;
|
|
16
|
+
idempotency?: ActionIdempotency<TInput, TPath, TValues>;
|
|
17
|
+
input?: ActionInput<TInput, TPath, TValues>;
|
|
18
18
|
security?: RouteSecurityPolicy;
|
|
19
19
|
timing?: ServerTimingInput;
|
|
20
20
|
};
|
|
21
|
-
export declare function action<TInput = undefined
|
|
21
|
+
export declare function action<TInput = undefined, TPath extends string = string, TValues extends object = RouteRequestContextFor<TPath>>(options: ActionOptions<TInput, TPath, TValues>): {
|
|
22
22
|
cors: CorsPolicy | undefined;
|
|
23
23
|
kind: "response";
|
|
24
|
-
response: import("./types").RouteValue<Response>;
|
|
24
|
+
response: import("./types").RouteValue<Response, TPath, TValues>;
|
|
25
25
|
security: RouteSecurityPolicy | undefined;
|
|
26
26
|
timing: any[] | undefined;
|
|
27
27
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../src/route/action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,gBAAgB,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EACV,UAAU,EACV,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../src/route/action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,gBAAgB,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EACV,UAAU,EACV,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,WAAW,CACrB,MAAM,EACN,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,IACpD,CACF,OAAO,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,KACtC,YAAY,CAAC,MAAM,CAAC,CAAC;AAE1B,MAAM,MAAM,aAAa,CACvB,MAAM,EACN,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,IACpD,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG;IACrC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAC3B,MAAM,EACN,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,IACpD;IACF,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC/E,KAAK,EAAE,gBAAgB,CAAC;IACxB,GAAG,CAAC,EAAE,aAAa,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,CACvB,MAAM,EACN,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,IACpD;IACF,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,CACP,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAC3C,YAAY,CAAC,QAAQ,GAAG,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACjE,WAAW,CAAC,EAAE,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACxD,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5C,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,wBAAgB,MAAM,CACpB,MAAM,GAAG,SAAS,EAClB,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAEtD,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC;;;;;;EAqC/C;AAED,eAAO,MAAM,WAAW;0BACM,gBAAgB;sBAGpB,gBAAgB;sBAGhB,gBAAgB;CAGzC,CAAC"}
|
package/dist/route/index.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export { action, actionInput, } from "./action";
|
|
2
2
|
export { page } from "./page";
|
|
3
|
+
export { defineMiddleware } from "./middleware";
|
|
3
4
|
export { HTTP_ERROR_STATUSES, HttpError, httpError, isHttpError, } from "./http-error";
|
|
4
5
|
export { html, json, jsonl, notFound, redirect, response, serverTiming, sse, stream, text, toResponse, } from "./response";
|
|
5
6
|
export { webhook } from "./webhook";
|
|
6
7
|
export type { ActionContext, ActionIdempotency, ActionInput, ActionOptions, } from "./action";
|
|
7
8
|
export type { HttpErrorDetails, HttpErrorInit, HttpErrorStatus, } from "./http-error";
|
|
8
9
|
export type { WebhookHmacAlgorithm, WebhookHmacContext, WebhookHmacEncoding, WebhookHmacOptions, } from "./webhook";
|
|
9
|
-
export type { HtmlCapability, HttpRouteContext, HttpMethod, JsonCapability, JsonLinesCapability, JsonLinesSource, LayoutProps, MaybePromise, NotFoundCapability, NotFoundProps, PageDataContext, PageDataFunction, PageCapability, PageOptions, PageRenderMode, PageRenderOptions, PathVars, RawResponseCapability, RedirectCapability, ResponseOptions, ResponseCapability, RouteCapability, RouteContext, RouteErrorProps, RouteImporter, RouteDefaultComponent, RouteMiddleware, RouteMiddlewareNext, RouteModule, RoutePolicy, RouteProps, RouteValue, ServerTimingInput, ServerTimingMetric, ServerSentEvent, ServerSentEventSource, ServerSentEventsCapability, StaticPath, StaticPathsContext, StaticPathsFunction, StreamCapability, StreamChunk, StreamSource, TextCapability, } from "./types";
|
|
10
|
+
export type { HtmlCapability, HttpRouteContext, HttpMethod, JsonCapability, JsonLinesCapability, JsonLinesSource, LayoutProps, MaybePromise, NotFoundCapability, NotFoundProps, PageDataContext, PageDataFunction, PageCapability, PageOptions, PageRenderMode, PageRenderOptions, PathVars, RawResponseCapability, RedirectCapability, ResponseOptions, ResponseCapability, RouteCapability, RouteContext, RouteErrorProps, RouteImporter, RouteDefaultComponent, RouteMiddleware, RouteMiddlewareNext, MiddlewareContextContribution, MiddlewareContextOf, RouteRequestContextFor, RouteRequestContexts, RequestContext, RouteModule, RoutePolicy, RouteProps, RouteValue, ServerTimingInput, ServerTimingMetric, ServerSentEvent, ServerSentEventSource, ServerSentEventsCapability, StaticPath, StaticPathsContext, StaticPathsFunction, StreamCapability, StreamChunk, StreamSource, TextCapability, } from "./types";
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/route/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,SAAS,EACT,WAAW,GACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,GAAG,EACH,MAAM,EACN,IAAI,EACJ,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,aAAa,GACd,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,QAAQ,EACR,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/route/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,SAAS,EACT,WAAW,GACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,GAAG,EACH,MAAM,EACN,IAAI,EACJ,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,aAAa,GACd,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,QAAQ,EACR,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,6BAA6B,EAC7B,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,WAAW,EACX,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { HttpRouteContext, MaybePromise, MiddlewareContextContribution, RouteMiddleware, RouteMiddlewareNext } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Declares the request-context values that a middleware can read and write.
|
|
4
|
+
* The framework passes one carrier to every inherited middleware in a request.
|
|
5
|
+
*/
|
|
6
|
+
export declare function defineMiddleware<TValues extends object>(middleware: (context: HttpRouteContext<string, TValues>, next: RouteMiddlewareNext) => MaybePromise<Response>): RouteMiddleware<string, TValues> & MiddlewareContextContribution<TValues>;
|
|
7
|
+
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/route/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,6BAA6B,EAC7B,eAAe,EACf,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,SAAS,MAAM,EACrD,UAAU,EAAE,CACV,OAAO,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,IAAI,EAAE,mBAAmB,KACtB,YAAY,CAAC,QAAQ,CAAC,GAC1B,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAG3E"}
|
package/dist/route/page.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ComponentType } from "react";
|
|
2
|
-
import type { PageCapability, PageOptions, RouteProps } from "./types";
|
|
2
|
+
import type { PageCapability, PageOptions, RouteProps, RouteRequestContextFor } from "./types";
|
|
3
3
|
export declare function page<const TPath extends string = string>(options: ComponentType<RouteProps<TPath>>): PageCapability<TPath>;
|
|
4
|
-
export declare function page<const TPath extends string = string, TData = undefined
|
|
4
|
+
export declare function page<const TPath extends string = string, TData = undefined, TValues extends object = RouteRequestContextFor<TPath>>(options: PageOptions<TPath, TData, TValues>): PageCapability<TPath, TData, TValues>;
|
|
5
5
|
//# sourceMappingURL=page.d.ts.map
|
package/dist/route/page.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/route/page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/route/page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,UAAU,EACV,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAEjB,wBAAgB,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,EACtD,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GACxC,cAAc,CAAC,KAAK,CAAC,CAAC;AACzB,wBAAgB,IAAI,CAClB,KAAK,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,EACnC,KAAK,GAAG,SAAS,EACjB,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAEtD,OAAO,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,GAC1C,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC"}
|