@cloudflare/pages-shared 0.0.0-ship-js
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/asset-server/handler.ts +625 -0
- package/asset-server/metadata.ts +67 -0
- package/asset-server/patchUrl.ts +22 -0
- package/asset-server/responses.ts +196 -0
- package/asset-server/rulesEngine.ts +82 -0
- package/dist/__tests__/asset-server/handler.test.d.ts +2 -0
- package/dist/__tests__/asset-server/handler.test.d.ts.map +1 -0
- package/dist/__tests__/asset-server/handler.test.js +430 -0
- package/dist/__tests__/asset-server/responses.test.d.ts +2 -0
- package/dist/__tests__/asset-server/responses.test.d.ts.map +1 -0
- package/dist/__tests__/asset-server/responses.test.js +22 -0
- package/dist/__tests__/asset-server/rulesEngine.test.d.ts +2 -0
- package/dist/__tests__/asset-server/rulesEngine.test.d.ts.map +1 -0
- package/dist/__tests__/asset-server/rulesEngine.test.js +70 -0
- package/dist/__tests__/jest.setup.d.ts +2 -0
- package/dist/__tests__/jest.setup.d.ts.map +1 -0
- package/dist/__tests__/jest.setup.js +7 -0
- package/dist/__tests__/metadata-generator/createMetadataObject.test.d.ts +2 -0
- package/dist/__tests__/metadata-generator/createMetadataObject.test.d.ts.map +1 -0
- package/dist/__tests__/metadata-generator/createMetadataObject.test.js +293 -0
- package/dist/__tests__/metadata-generator/parseHeaders.invalid.test.d.ts +2 -0
- package/dist/__tests__/metadata-generator/parseHeaders.invalid.test.d.ts.map +1 -0
- package/dist/__tests__/metadata-generator/parseHeaders.invalid.test.js +194 -0
- package/dist/__tests__/metadata-generator/parseHeaders.valid.test.d.ts +2 -0
- package/dist/__tests__/metadata-generator/parseHeaders.valid.test.d.ts.map +1 -0
- package/dist/__tests__/metadata-generator/parseHeaders.valid.test.js +132 -0
- package/dist/__tests__/metadata-generator/parseRedirects.invalid.test.d.ts +2 -0
- package/dist/__tests__/metadata-generator/parseRedirects.invalid.test.d.ts.map +1 -0
- package/dist/__tests__/metadata-generator/parseRedirects.invalid.test.js +243 -0
- package/dist/__tests__/metadata-generator/parseRedirects.valid.test.d.ts +2 -0
- package/dist/__tests__/metadata-generator/parseRedirects.valid.test.d.ts.map +1 -0
- package/dist/__tests__/metadata-generator/parseRedirects.valid.test.js +88 -0
- package/dist/asset-server/handler.d.ts +44 -0
- package/dist/asset-server/handler.d.ts.map +1 -0
- package/dist/asset-server/handler.js +420 -0
- package/dist/asset-server/metadata.d.ts +52 -0
- package/dist/asset-server/metadata.d.ts.map +1 -0
- package/dist/asset-server/metadata.js +3 -0
- package/dist/asset-server/patchUrl.d.ts +2 -0
- package/dist/asset-server/patchUrl.d.ts.map +1 -0
- package/dist/asset-server/patchUrl.js +19 -0
- package/dist/asset-server/responses.d.ts +45 -0
- package/dist/asset-server/responses.d.ts.map +1 -0
- package/dist/asset-server/responses.js +165 -0
- package/dist/asset-server/rulesEngine.d.ts +7 -0
- package/dist/asset-server/rulesEngine.d.ts.map +1 -0
- package/dist/asset-server/rulesEngine.js +68 -0
- package/dist/environment-polyfills/index.d.ts +3 -0
- package/dist/environment-polyfills/index.d.ts.map +1 -0
- package/dist/environment-polyfills/index.js +14 -0
- package/dist/environment-polyfills/miniflare-tre.d.ts +3 -0
- package/dist/environment-polyfills/miniflare-tre.d.ts.map +1 -0
- package/dist/environment-polyfills/miniflare-tre.js +35 -0
- package/dist/environment-polyfills/miniflare.d.ts +3 -0
- package/dist/environment-polyfills/miniflare.d.ts.map +1 -0
- package/dist/environment-polyfills/miniflare.js +35 -0
- package/dist/environment-polyfills/types.d.ts +34 -0
- package/dist/environment-polyfills/types.d.ts.map +1 -0
- package/dist/environment-polyfills/types.js +5 -0
- package/dist/metadata-generator/constants.d.ts +14 -0
- package/dist/metadata-generator/constants.d.ts.map +1 -0
- package/dist/metadata-generator/constants.js +16 -0
- package/dist/metadata-generator/createMetadataObject.d.ts +10 -0
- package/dist/metadata-generator/createMetadataObject.d.ts.map +1 -0
- package/dist/metadata-generator/createMetadataObject.js +105 -0
- package/dist/metadata-generator/parseHeaders.d.ts +3 -0
- package/dist/metadata-generator/parseHeaders.d.ts.map +1 -0
- package/dist/metadata-generator/parseHeaders.js +146 -0
- package/dist/metadata-generator/parseRedirects.d.ts +3 -0
- package/dist/metadata-generator/parseRedirects.d.ts.map +1 -0
- package/dist/metadata-generator/parseRedirects.js +100 -0
- package/dist/metadata-generator/types.d.ts +74 -0
- package/dist/metadata-generator/types.d.ts.map +1 -0
- package/dist/metadata-generator/types.js +3 -0
- package/dist/metadata-generator/validateURL.d.ts +3 -0
- package/dist/metadata-generator/validateURL.d.ts.map +1 -0
- package/dist/metadata-generator/validateURL.js +46 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/environment-polyfills/index.ts +14 -0
- package/environment-polyfills/miniflare-tre.ts +12 -0
- package/environment-polyfills/miniflare.ts +12 -0
- package/environment-polyfills/types.ts +42 -0
- package/metadata-generator/constants.ts +15 -0
- package/metadata-generator/createMetadataObject.ts +164 -0
- package/metadata-generator/parseHeaders.ts +168 -0
- package/metadata-generator/parseRedirects.ts +129 -0
- package/metadata-generator/types.ts +90 -0
- package/metadata-generator/validateURL.ts +57 -0
- package/package.json +63 -0
- package/tsconfig.json +13 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TemporaryRedirectResponse = exports.SeeOtherResponse = exports.InternalServerErrorResponse = exports.NotAcceptableResponse = exports.MethodNotAllowedResponse = exports.NotFoundResponse = exports.PermanentRedirectResponse = exports.NotModifiedResponse = exports.FoundResponse = exports.MovedPermanentlyResponse = exports.OkResponse = exports.stripLeadingDoubleSlashes = void 0;
|
|
4
|
+
function mergeHeaders(base, extra) {
|
|
5
|
+
base = new Headers(base ?? {});
|
|
6
|
+
extra = new Headers(extra ?? {});
|
|
7
|
+
return new Headers({
|
|
8
|
+
...Object.fromEntries(base.entries()),
|
|
9
|
+
...Object.fromEntries(extra.entries()),
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
function stripLeadingDoubleSlashes(location) {
|
|
13
|
+
return location.replace(/^(\/|%2F|%2f|%5C|%5c|\\)+(.*)/, "/$2");
|
|
14
|
+
}
|
|
15
|
+
exports.stripLeadingDoubleSlashes = stripLeadingDoubleSlashes;
|
|
16
|
+
class OkResponse extends Response {
|
|
17
|
+
constructor(...[body, init]) {
|
|
18
|
+
super(body, {
|
|
19
|
+
...init,
|
|
20
|
+
status: 200,
|
|
21
|
+
statusText: "OK",
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.OkResponse = OkResponse;
|
|
26
|
+
class MovedPermanentlyResponse extends Response {
|
|
27
|
+
constructor(location, init, { preventLeadingDoubleSlash = true, } = {
|
|
28
|
+
preventLeadingDoubleSlash: true,
|
|
29
|
+
}) {
|
|
30
|
+
location = preventLeadingDoubleSlash
|
|
31
|
+
? stripLeadingDoubleSlashes(location)
|
|
32
|
+
: location;
|
|
33
|
+
super(`Redirecting to ${location}`, {
|
|
34
|
+
...init,
|
|
35
|
+
status: 301,
|
|
36
|
+
statusText: "Moved Permanently",
|
|
37
|
+
headers: mergeHeaders(init?.headers, {
|
|
38
|
+
location,
|
|
39
|
+
}),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.MovedPermanentlyResponse = MovedPermanentlyResponse;
|
|
44
|
+
class FoundResponse extends Response {
|
|
45
|
+
constructor(location, init, { preventLeadingDoubleSlash = true, } = {
|
|
46
|
+
preventLeadingDoubleSlash: true,
|
|
47
|
+
}) {
|
|
48
|
+
location = preventLeadingDoubleSlash
|
|
49
|
+
? stripLeadingDoubleSlashes(location)
|
|
50
|
+
: location;
|
|
51
|
+
super(`Redirecting to ${location}`, {
|
|
52
|
+
...init,
|
|
53
|
+
status: 302,
|
|
54
|
+
statusText: "Found",
|
|
55
|
+
headers: mergeHeaders(init?.headers, {
|
|
56
|
+
location,
|
|
57
|
+
}),
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.FoundResponse = FoundResponse;
|
|
62
|
+
class NotModifiedResponse extends Response {
|
|
63
|
+
constructor(...[_body, _init]) {
|
|
64
|
+
super(undefined, {
|
|
65
|
+
status: 304,
|
|
66
|
+
statusText: "Not Modified",
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.NotModifiedResponse = NotModifiedResponse;
|
|
71
|
+
class PermanentRedirectResponse extends Response {
|
|
72
|
+
constructor(location, init, { preventLeadingDoubleSlash = true, } = {
|
|
73
|
+
preventLeadingDoubleSlash: true,
|
|
74
|
+
}) {
|
|
75
|
+
location = preventLeadingDoubleSlash
|
|
76
|
+
? stripLeadingDoubleSlashes(location)
|
|
77
|
+
: location;
|
|
78
|
+
super(undefined, {
|
|
79
|
+
...init,
|
|
80
|
+
status: 308,
|
|
81
|
+
statusText: "Permanent Redirect",
|
|
82
|
+
headers: mergeHeaders(init?.headers, {
|
|
83
|
+
location,
|
|
84
|
+
}),
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
exports.PermanentRedirectResponse = PermanentRedirectResponse;
|
|
89
|
+
class NotFoundResponse extends Response {
|
|
90
|
+
constructor(...[body, init]) {
|
|
91
|
+
super(body, {
|
|
92
|
+
...init,
|
|
93
|
+
status: 404,
|
|
94
|
+
statusText: "Not Found",
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.NotFoundResponse = NotFoundResponse;
|
|
99
|
+
class MethodNotAllowedResponse extends Response {
|
|
100
|
+
constructor(...[body, init]) {
|
|
101
|
+
super(body, {
|
|
102
|
+
...init,
|
|
103
|
+
status: 405,
|
|
104
|
+
statusText: "Method Not Allowed",
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.MethodNotAllowedResponse = MethodNotAllowedResponse;
|
|
109
|
+
class NotAcceptableResponse extends Response {
|
|
110
|
+
constructor(...[body, init]) {
|
|
111
|
+
super(body, {
|
|
112
|
+
...init,
|
|
113
|
+
status: 406,
|
|
114
|
+
statusText: "Not Acceptable",
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
exports.NotAcceptableResponse = NotAcceptableResponse;
|
|
119
|
+
class InternalServerErrorResponse extends Response {
|
|
120
|
+
constructor(err, init) {
|
|
121
|
+
let body = undefined;
|
|
122
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
123
|
+
if (globalThis.DEBUG) {
|
|
124
|
+
body = `${err.message}\n\n${err.stack}`;
|
|
125
|
+
}
|
|
126
|
+
super(body, {
|
|
127
|
+
...init,
|
|
128
|
+
status: 500,
|
|
129
|
+
statusText: "Internal Server Error",
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
exports.InternalServerErrorResponse = InternalServerErrorResponse;
|
|
134
|
+
class SeeOtherResponse extends Response {
|
|
135
|
+
constructor(location, init, { preventLeadingDoubleSlash = true, } = {
|
|
136
|
+
preventLeadingDoubleSlash: true,
|
|
137
|
+
}) {
|
|
138
|
+
location = preventLeadingDoubleSlash
|
|
139
|
+
? stripLeadingDoubleSlashes(location)
|
|
140
|
+
: location;
|
|
141
|
+
super(`Redirecting to ${location}`, {
|
|
142
|
+
...init,
|
|
143
|
+
status: 303,
|
|
144
|
+
statusText: "See Other",
|
|
145
|
+
headers: mergeHeaders(init?.headers, { location }),
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
exports.SeeOtherResponse = SeeOtherResponse;
|
|
150
|
+
class TemporaryRedirectResponse extends Response {
|
|
151
|
+
constructor(location, init, { preventLeadingDoubleSlash = true, } = {
|
|
152
|
+
preventLeadingDoubleSlash: true,
|
|
153
|
+
}) {
|
|
154
|
+
location = preventLeadingDoubleSlash
|
|
155
|
+
? stripLeadingDoubleSlashes(location)
|
|
156
|
+
: location;
|
|
157
|
+
super(`Redirecting to ${location}`, {
|
|
158
|
+
...init,
|
|
159
|
+
status: 307,
|
|
160
|
+
statusText: "Temporary Redirect",
|
|
161
|
+
headers: mergeHeaders(init?.headers, { location }),
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
exports.TemporaryRedirectResponse = TemporaryRedirectResponse;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare type Replacements = Record<string, string>;
|
|
2
|
+
export declare type Removals = string[];
|
|
3
|
+
export declare const replacer: (str: string, replacements: Replacements) => string;
|
|
4
|
+
export declare const generateRulesMatcher: <T>(rules?: Record<string, T> | undefined, replacerFn?: (match: T, replacements: Replacements) => T) => ({ request }: {
|
|
5
|
+
request: Request;
|
|
6
|
+
}) => T[];
|
|
7
|
+
//# sourceMappingURL=rulesEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rulesEngine.d.ts","sourceRoot":"","sources":["../../asset-server/rulesEngine.ts"],"names":[],"mappings":"AAcA,oBAAY,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAElD,oBAAY,QAAQ,GAAG,MAAM,EAAE,CAAC;AAEhC,eAAO,MAAM,QAAQ,QAAS,MAAM,gBAAgB,YAAY,WAK/D,CAAC;AAEF,eAAO,MAAM,oBAAoB,mFAEK,YAAY;aAyCjB,OAAO;SAavC,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateRulesMatcher = exports.replacer = void 0;
|
|
4
|
+
// Taken from https://stackoverflow.com/a/3561711
|
|
5
|
+
// which is everything from the tc39 proposal, plus the following two characters: ^/
|
|
6
|
+
// It's also everything included in the URLPattern escape (https://wicg.github.io/urlpattern/#escape-a-regexp-string), plus the following: -
|
|
7
|
+
// As the answer says, there's no downside to escaping these extra characters, so better safe than sorry
|
|
8
|
+
const ESCAPE_REGEX_CHARACTERS = /[-/\\^$*+?.()|[\]{}]/g;
|
|
9
|
+
const escapeRegex = (str) => {
|
|
10
|
+
return str.replace(ESCAPE_REGEX_CHARACTERS, "\\$&");
|
|
11
|
+
};
|
|
12
|
+
// Placeholder names must begin with a colon, be alphanumeric and optionally contain underscores.
|
|
13
|
+
// e.g. :place_123_holder
|
|
14
|
+
const HOST_PLACEHOLDER_REGEX = /(?<=^https:\\\/\\\/[^/]*?):([^\\]+)(?=\\)/g;
|
|
15
|
+
const PLACEHOLDER_REGEX = /:(\w+)/g;
|
|
16
|
+
const replacer = (str, replacements) => {
|
|
17
|
+
for (const [replacement, value] of Object.entries(replacements)) {
|
|
18
|
+
str = str.replaceAll(`:${replacement}`, value);
|
|
19
|
+
}
|
|
20
|
+
return str;
|
|
21
|
+
};
|
|
22
|
+
exports.replacer = replacer;
|
|
23
|
+
const generateRulesMatcher = (rules, replacerFn = (match) => match) => {
|
|
24
|
+
if (!rules)
|
|
25
|
+
return () => [];
|
|
26
|
+
const compiledRules = Object.entries(rules)
|
|
27
|
+
.map(([rule, match]) => {
|
|
28
|
+
const crossHost = rule.startsWith("https://");
|
|
29
|
+
// Create :splat capturer then escape.
|
|
30
|
+
rule = rule.split("*").map(escapeRegex).join("(?<splat>.*)");
|
|
31
|
+
// Create :placeholder capturers (already escaped).
|
|
32
|
+
// For placeholders in the host, we separate at forward slashes and periods.
|
|
33
|
+
// For placeholders in the path, we separate at forward slashes.
|
|
34
|
+
// This matches the behavior of URLPattern.
|
|
35
|
+
// e.g. https://:subdomain.domain/ -> https://(here).domain/
|
|
36
|
+
// e.g. /static/:file -> /static/(image.jpg)
|
|
37
|
+
// e.g. /blog/:post -> /blog/(an-exciting-post)
|
|
38
|
+
const host_matches = rule.matchAll(HOST_PLACEHOLDER_REGEX);
|
|
39
|
+
for (const host_match of host_matches) {
|
|
40
|
+
rule = rule.split(host_match[0]).join(`(?<${host_match[1]}>[^/.]+)`);
|
|
41
|
+
}
|
|
42
|
+
const path_matches = rule.matchAll(PLACEHOLDER_REGEX);
|
|
43
|
+
for (const path_match of path_matches) {
|
|
44
|
+
rule = rule.split(path_match[0]).join(`(?<${path_match[1]}>[^/]+)`);
|
|
45
|
+
}
|
|
46
|
+
// Wrap in line terminators to be safe.
|
|
47
|
+
rule = "^" + rule + "$";
|
|
48
|
+
try {
|
|
49
|
+
const regExp = new RegExp(rule);
|
|
50
|
+
return [{ crossHost, regExp }, match];
|
|
51
|
+
}
|
|
52
|
+
catch { }
|
|
53
|
+
})
|
|
54
|
+
.filter((value) => value !== undefined);
|
|
55
|
+
return ({ request }) => {
|
|
56
|
+
const { pathname, host } = new URL(request.url);
|
|
57
|
+
return compiledRules
|
|
58
|
+
.map(([{ crossHost, regExp }, match]) => {
|
|
59
|
+
const test = crossHost ? `https://${host}${pathname}` : pathname;
|
|
60
|
+
const result = regExp.exec(test);
|
|
61
|
+
if (result) {
|
|
62
|
+
return replacerFn(match, result.groups || {});
|
|
63
|
+
}
|
|
64
|
+
})
|
|
65
|
+
.filter((value) => value !== undefined);
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
exports.generateRulesMatcher = generateRulesMatcher;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../environment-polyfills/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AAE5D,eAAO,MAAM,QAAQ,gBACP,OAAO,MAAM,4BAA4B,EAAE,OAAO,CAAC,SAUhE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.polyfill = void 0;
|
|
4
|
+
const polyfill = (environment) => {
|
|
5
|
+
Object.entries(environment).map(([name, value]) => {
|
|
6
|
+
Object.defineProperty(globalThis, name, {
|
|
7
|
+
value,
|
|
8
|
+
configurable: true,
|
|
9
|
+
enumerable: true,
|
|
10
|
+
writable: true,
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
exports.polyfill = polyfill;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"miniflare-tre.d.ts","sourceRoot":"","sources":["../../environment-polyfills/miniflare-tre.ts"],"names":[],"mappings":";AAEA,wBASE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const _1 = require(".");
|
|
27
|
+
exports.default = async () => {
|
|
28
|
+
const mf = await Promise.resolve().then(() => __importStar(require("@miniflare/tre")));
|
|
29
|
+
(0, _1.polyfill)({
|
|
30
|
+
fetch: mf.fetch,
|
|
31
|
+
Headers: mf.Headers,
|
|
32
|
+
Request: mf.Request,
|
|
33
|
+
Response: mf.Response,
|
|
34
|
+
});
|
|
35
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"miniflare.d.ts","sourceRoot":"","sources":["../../environment-polyfills/miniflare.ts"],"names":[],"mappings":";AAEA,wBASE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const _1 = require(".");
|
|
27
|
+
exports.default = async () => {
|
|
28
|
+
const mf = await Promise.resolve().then(() => __importStar(require("@miniflare/core")));
|
|
29
|
+
(0, _1.polyfill)({
|
|
30
|
+
fetch: mf.fetch,
|
|
31
|
+
Headers: mf.Headers,
|
|
32
|
+
Request: mf.Request,
|
|
33
|
+
Response: mf.Response,
|
|
34
|
+
});
|
|
35
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Headers as MiniflareHeaders, Request as MiniflareRequest, Response as MiniflareResponse } from "@miniflare/core";
|
|
3
|
+
import { HTMLRewriter as MiniflareHTMLRewriter } from "@miniflare/html-rewriter";
|
|
4
|
+
import type { CacheInterface as MiniflareCacheInterface } from "@miniflare/cache";
|
|
5
|
+
import type { fetch as miniflareFetch } from "@miniflare/core";
|
|
6
|
+
import type { ReadableStream as SimilarReadableStream } from "stream/web";
|
|
7
|
+
declare global {
|
|
8
|
+
const fetch: typeof miniflareFetch;
|
|
9
|
+
class Headers extends MiniflareHeaders {
|
|
10
|
+
}
|
|
11
|
+
class Request extends MiniflareRequest {
|
|
12
|
+
}
|
|
13
|
+
class Response extends MiniflareResponse {
|
|
14
|
+
}
|
|
15
|
+
type CacheInterface = Omit<MiniflareCacheInterface, "match"> & {
|
|
16
|
+
match(...args: Parameters<MiniflareCacheInterface["match"]>): Promise<Response | undefined>;
|
|
17
|
+
};
|
|
18
|
+
class CacheStorage {
|
|
19
|
+
get default(): CacheInterface;
|
|
20
|
+
open(cacheName: string): Promise<CacheInterface>;
|
|
21
|
+
}
|
|
22
|
+
class HTMLRewriter extends MiniflareHTMLRewriter {
|
|
23
|
+
transform(response: Response): Response;
|
|
24
|
+
}
|
|
25
|
+
type ReadableStream = SimilarReadableStream;
|
|
26
|
+
}
|
|
27
|
+
export declare type PolyfilledRuntimeEnvironment = {
|
|
28
|
+
fetch: typeof fetch;
|
|
29
|
+
Headers: typeof Headers;
|
|
30
|
+
Request: typeof Request;
|
|
31
|
+
Response: typeof Response;
|
|
32
|
+
};
|
|
33
|
+
export { fetch, Headers, Request, Response };
|
|
34
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../environment-polyfills/types.ts"],"names":[],"mappings":";AAAA,OAAO,EACN,OAAO,IAAI,gBAAgB,EAC3B,OAAO,IAAI,gBAAgB,EAC3B,QAAQ,IAAI,iBAAiB,EAC7B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,KAAK,EAAE,cAAc,IAAI,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,KAAK,EAAE,KAAK,IAAI,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,IAAI,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE1E,OAAO,CAAC,MAAM,CAAC;IACd,MAAM,KAAK,EAAE,OAAO,cAAc,CAAC;IACnC,MAAM,OAAQ,SAAQ,gBAAgB;KAAG;IACzC,MAAM,OAAQ,SAAQ,gBAAgB;KAAG;IACzC,MAAM,QAAS,SAAQ,iBAAiB;KAAG;IAE3C,KAAK,cAAc,GAAG,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,GAAG;QAC9D,KAAK,CACJ,GAAG,IAAI,EAAE,UAAU,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,GACnD,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;KACjC,CAAC;IAEF,MAAM,YAAY;QACjB,IAAI,OAAO,IAAI,cAAc,CAAC;QAC9B,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;KAChD;IAED,MAAM,YAAa,SAAQ,qBAAqB;QAC/C,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ;KACvC;IAED,KAAK,cAAc,GAAG,qBAAqB,CAAC;CAC5C;AAED,oBAAY,4BAA4B,GAAG;IAC1C,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,OAAO,EAAE,OAAO,OAAO,CAAC;IACxB,OAAO,EAAE,OAAO,OAAO,CAAC;IACxB,QAAQ,EAAE,OAAO,QAAQ,CAAC;CAC1B,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const REDIRECTS_VERSION = 1;
|
|
2
|
+
export declare const HEADERS_VERSION = 2;
|
|
3
|
+
export declare const ANALYTICS_VERSION = 1;
|
|
4
|
+
export declare const ROUTES_JSON_VERSION = 1;
|
|
5
|
+
export declare const PERMITTED_STATUS_CODES: Set<number>;
|
|
6
|
+
export declare const HEADER_SEPARATOR = ":";
|
|
7
|
+
export declare const MAX_LINE_LENGTH = 2000;
|
|
8
|
+
export declare const MAX_HEADER_RULES = 100;
|
|
9
|
+
export declare const MAX_DYNAMIC_REDIRECT_RULES = 100;
|
|
10
|
+
export declare const MAX_STATIC_REDIRECT_RULES = 2000;
|
|
11
|
+
export declare const UNSET_OPERATOR = "! ";
|
|
12
|
+
export declare const SPLAT_REGEX: RegExp;
|
|
13
|
+
export declare const PLACEHOLDER_REGEX: RegExp;
|
|
14
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../metadata-generator/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,eAAO,MAAM,sBAAsB,aAAqC,CAAC;AACzE,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,eAAe,OAAO,CAAC;AACpC,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,eAAO,MAAM,WAAW,QAAQ,CAAC;AACjC,eAAO,MAAM,iBAAiB,QAAU,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PLACEHOLDER_REGEX = exports.SPLAT_REGEX = exports.UNSET_OPERATOR = exports.MAX_STATIC_REDIRECT_RULES = exports.MAX_DYNAMIC_REDIRECT_RULES = exports.MAX_HEADER_RULES = exports.MAX_LINE_LENGTH = exports.HEADER_SEPARATOR = exports.PERMITTED_STATUS_CODES = exports.ROUTES_JSON_VERSION = exports.ANALYTICS_VERSION = exports.HEADERS_VERSION = exports.REDIRECTS_VERSION = void 0;
|
|
4
|
+
exports.REDIRECTS_VERSION = 1;
|
|
5
|
+
exports.HEADERS_VERSION = 2;
|
|
6
|
+
exports.ANALYTICS_VERSION = 1;
|
|
7
|
+
exports.ROUTES_JSON_VERSION = 1;
|
|
8
|
+
exports.PERMITTED_STATUS_CODES = new Set([301, 302, 303, 307, 308]);
|
|
9
|
+
exports.HEADER_SEPARATOR = ":";
|
|
10
|
+
exports.MAX_LINE_LENGTH = 2000;
|
|
11
|
+
exports.MAX_HEADER_RULES = 100;
|
|
12
|
+
exports.MAX_DYNAMIC_REDIRECT_RULES = 100;
|
|
13
|
+
exports.MAX_STATIC_REDIRECT_RULES = 2000;
|
|
14
|
+
exports.UNSET_OPERATOR = "! ";
|
|
15
|
+
exports.SPLAT_REGEX = /\*/g;
|
|
16
|
+
exports.PLACEHOLDER_REGEX = /:\w+/g;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Metadata, ParsedRedirects, ParsedHeaders, Logger } from "./types";
|
|
2
|
+
export declare function createMetadataObject({ redirects, headers, webAnalyticsToken, deploymentId, failOpen, logger, }: {
|
|
3
|
+
redirects?: ParsedRedirects;
|
|
4
|
+
headers?: ParsedHeaders;
|
|
5
|
+
webAnalyticsToken?: string;
|
|
6
|
+
deploymentId?: string;
|
|
7
|
+
failOpen?: boolean;
|
|
8
|
+
logger?: Logger;
|
|
9
|
+
}): Metadata;
|
|
10
|
+
//# sourceMappingURL=createMetadataObject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createMetadataObject.d.ts","sourceRoot":"","sources":["../../metadata-generator/createMetadataObject.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACX,QAAQ,EAGR,eAAe,EACf,aAAa,EACb,MAAM,EACN,MAAM,SAAS,CAAC;AAEjB,wBAAgB,oBAAoB,CAAC,EACpC,SAAS,EACT,OAAO,EACP,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,MAAiC,GACjC,EAAE;IACF,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,QAAQ,CAQX"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMetadataObject = void 0;
|
|
4
|
+
const constants_1 = require("./constants");
|
|
5
|
+
function createMetadataObject({ redirects, headers, webAnalyticsToken, deploymentId, failOpen, logger = (_message) => { }, }) {
|
|
6
|
+
return {
|
|
7
|
+
...constructRedirects({ redirects, logger }),
|
|
8
|
+
...constructHeaders({ headers, logger }),
|
|
9
|
+
...constructWebAnalytics({ webAnalyticsToken, logger }),
|
|
10
|
+
deploymentId,
|
|
11
|
+
failOpen,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
exports.createMetadataObject = createMetadataObject;
|
|
15
|
+
function constructRedirects({ redirects, logger, }) {
|
|
16
|
+
if (!redirects)
|
|
17
|
+
return {};
|
|
18
|
+
const num_valid = redirects.rules.length;
|
|
19
|
+
const num_invalid = redirects.invalid.length;
|
|
20
|
+
logger(`Parsed ${num_valid} valid redirect rule${num_valid === 1 ? "" : "s"}.`);
|
|
21
|
+
if (num_invalid > 0) {
|
|
22
|
+
logger(`Found invalid redirect lines:`);
|
|
23
|
+
for (const { line, lineNumber, message } of redirects.invalid) {
|
|
24
|
+
if (line)
|
|
25
|
+
logger(` - ${lineNumber ? `#${lineNumber}: ` : ""}${line}`);
|
|
26
|
+
logger(` ${message}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/* Better to return no Redirects object at all than one with empty rules */
|
|
30
|
+
if (num_valid === 0) {
|
|
31
|
+
return {};
|
|
32
|
+
}
|
|
33
|
+
const staticRedirects = {};
|
|
34
|
+
const dynamicRedirects = {};
|
|
35
|
+
let canCreateStaticRule = true;
|
|
36
|
+
for (const rule of redirects.rules) {
|
|
37
|
+
if (!rule.from.match(constants_1.SPLAT_REGEX) && !rule.from.match(constants_1.PLACEHOLDER_REGEX)) {
|
|
38
|
+
if (canCreateStaticRule) {
|
|
39
|
+
staticRedirects[rule.from] = {
|
|
40
|
+
status: rule.status,
|
|
41
|
+
to: rule.to,
|
|
42
|
+
lineNumber: rule.lineNumber,
|
|
43
|
+
};
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
logger(`Info: the redirect rule ${rule.from} → ${rule.status} ${rule.to} could be made more performant by bringing it above any lines with splats or placeholders.`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
dynamicRedirects[rule.from] = { status: rule.status, to: rule.to };
|
|
51
|
+
canCreateStaticRule = false;
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
redirects: {
|
|
55
|
+
version: constants_1.REDIRECTS_VERSION,
|
|
56
|
+
staticRules: staticRedirects,
|
|
57
|
+
rules: dynamicRedirects,
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function constructHeaders({ headers, logger, }) {
|
|
62
|
+
if (!headers)
|
|
63
|
+
return {};
|
|
64
|
+
const num_valid = headers.rules.length;
|
|
65
|
+
const num_invalid = headers.invalid.length;
|
|
66
|
+
logger(`Parsed ${num_valid} valid header rule${num_valid === 1 ? "" : "s"}.`);
|
|
67
|
+
if (num_invalid > 0) {
|
|
68
|
+
logger(`Found invalid header lines:`);
|
|
69
|
+
for (const { line, lineNumber, message } of headers.invalid) {
|
|
70
|
+
if (line)
|
|
71
|
+
logger(` - ${lineNumber ? `#${lineNumber}: ` : ""} ${line}`);
|
|
72
|
+
logger(` ${message}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/* Better to return no Headers object at all than one with empty rules */
|
|
76
|
+
if (num_valid === 0) {
|
|
77
|
+
return {};
|
|
78
|
+
}
|
|
79
|
+
const rules = {};
|
|
80
|
+
for (const rule of headers.rules) {
|
|
81
|
+
rules[rule.path] = {};
|
|
82
|
+
if (Object.keys(rule.headers).length) {
|
|
83
|
+
rules[rule.path].set = rule.headers;
|
|
84
|
+
}
|
|
85
|
+
if (rule.unsetHeaders.length) {
|
|
86
|
+
rules[rule.path].unset = rule.unsetHeaders;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
headers: {
|
|
91
|
+
version: constants_1.HEADERS_VERSION,
|
|
92
|
+
rules,
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function constructWebAnalytics({ webAnalyticsToken, }) {
|
|
97
|
+
if (!webAnalyticsToken)
|
|
98
|
+
return {};
|
|
99
|
+
return {
|
|
100
|
+
analytics: {
|
|
101
|
+
version: constants_1.ANALYTICS_VERSION,
|
|
102
|
+
token: webAnalyticsToken,
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseHeaders.d.ts","sourceRoot":"","sources":["../../metadata-generator/parseHeaders.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAsB,aAAa,EAAe,MAAM,SAAS,CAAC;AAO9E,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAqJzD"}
|