@cloudflare/pages-plugin-static-forms
Advanced tools
| # @cloudflare/pages-plugin-static-forms | ||
| ## 1.0.2 | ||
| ### Patch Changes | ||
| - 6089299: maintenance: Build Plugins with newer `--outdir` option, actually build the APIs of Plugins, and update `package.json`s to be more complete. | ||
| - 9bff7b9: fix: Only modify forms with the `data-static-form-name` property |
| // _middleware.ts | ||
| var onRequestPost = async ({ | ||
| request, | ||
| next, | ||
| pluginArgs | ||
| }) => { | ||
| let formData, name; | ||
| try { | ||
| formData = await request.formData(); | ||
| name = formData.get("static-form-name").toString(); | ||
| } catch { | ||
| } | ||
| if (name) { | ||
| formData.delete("static-form-name"); | ||
| return pluginArgs.respondWith({ formData, name }); | ||
| } | ||
| return next(); | ||
| }; | ||
| var onRequestGet = async ({ next }) => { | ||
| const response = await next(); | ||
| return new HTMLRewriter().on("form[data-static-form-name]", { | ||
| element(form) { | ||
| const formName = form.getAttribute("data-static-form-name"); | ||
| form.setAttribute("method", "POST"); | ||
| form.removeAttribute("action"); | ||
| form.append( | ||
| `<input type="hidden" name="static-form-name" value="${formName}" />`, | ||
| { html: true } | ||
| ); | ||
| } | ||
| }).transform(response); | ||
| }; | ||
| // ../.wrangler/tmp/pages-GJxkJb/functionsRoutes-0.19939727007927477.mjs | ||
| var routes = [ | ||
| { | ||
| routePath: "/", | ||
| mountPath: "/", | ||
| method: "GET", | ||
| middlewares: [onRequestGet], | ||
| modules: [] | ||
| }, | ||
| { | ||
| routePath: "/", | ||
| mountPath: "/", | ||
| method: "POST", | ||
| middlewares: [onRequestPost], | ||
| modules: [] | ||
| } | ||
| ]; | ||
| // ../../../node_modules/path-to-regexp/dist.es2015/index.js | ||
| function lexer(str) { | ||
| var tokens = []; | ||
| var i = 0; | ||
| while (i < str.length) { | ||
| var char = str[i]; | ||
| if (char === "*" || char === "+" || char === "?") { | ||
| tokens.push({ type: "MODIFIER", index: i, value: str[i++] }); | ||
| continue; | ||
| } | ||
| if (char === "\\") { | ||
| tokens.push({ type: "ESCAPED_CHAR", index: i++, value: str[i++] }); | ||
| continue; | ||
| } | ||
| if (char === "{") { | ||
| tokens.push({ type: "OPEN", index: i, value: str[i++] }); | ||
| continue; | ||
| } | ||
| if (char === "}") { | ||
| tokens.push({ type: "CLOSE", index: i, value: str[i++] }); | ||
| continue; | ||
| } | ||
| if (char === ":") { | ||
| var name = ""; | ||
| var j = i + 1; | ||
| while (j < str.length) { | ||
| var code = str.charCodeAt(j); | ||
| if ( | ||
| // `0-9` | ||
| code >= 48 && code <= 57 || // `A-Z` | ||
| code >= 65 && code <= 90 || // `a-z` | ||
| code >= 97 && code <= 122 || // `_` | ||
| code === 95 | ||
| ) { | ||
| name += str[j++]; | ||
| continue; | ||
| } | ||
| break; | ||
| } | ||
| if (!name) | ||
| throw new TypeError("Missing parameter name at ".concat(i)); | ||
| tokens.push({ type: "NAME", index: i, value: name }); | ||
| i = j; | ||
| continue; | ||
| } | ||
| if (char === "(") { | ||
| var count = 1; | ||
| var pattern = ""; | ||
| var j = i + 1; | ||
| if (str[j] === "?") { | ||
| throw new TypeError('Pattern cannot start with "?" at '.concat(j)); | ||
| } | ||
| while (j < str.length) { | ||
| if (str[j] === "\\") { | ||
| pattern += str[j++] + str[j++]; | ||
| continue; | ||
| } | ||
| if (str[j] === ")") { | ||
| count--; | ||
| if (count === 0) { | ||
| j++; | ||
| break; | ||
| } | ||
| } else if (str[j] === "(") { | ||
| count++; | ||
| if (str[j + 1] !== "?") { | ||
| throw new TypeError("Capturing groups are not allowed at ".concat(j)); | ||
| } | ||
| } | ||
| pattern += str[j++]; | ||
| } | ||
| if (count) | ||
| throw new TypeError("Unbalanced pattern at ".concat(i)); | ||
| if (!pattern) | ||
| throw new TypeError("Missing pattern at ".concat(i)); | ||
| tokens.push({ type: "PATTERN", index: i, value: pattern }); | ||
| i = j; | ||
| continue; | ||
| } | ||
| tokens.push({ type: "CHAR", index: i, value: str[i++] }); | ||
| } | ||
| tokens.push({ type: "END", index: i, value: "" }); | ||
| return tokens; | ||
| } | ||
| function parse(str, options) { | ||
| if (options === void 0) { | ||
| options = {}; | ||
| } | ||
| var tokens = lexer(str); | ||
| var _a = options.prefixes, prefixes = _a === void 0 ? "./" : _a; | ||
| var defaultPattern = "[^".concat(escapeString(options.delimiter || "/#?"), "]+?"); | ||
| var result = []; | ||
| var key = 0; | ||
| var i = 0; | ||
| var path = ""; | ||
| var tryConsume = function(type) { | ||
| if (i < tokens.length && tokens[i].type === type) | ||
| return tokens[i++].value; | ||
| }; | ||
| var mustConsume = function(type) { | ||
| var value2 = tryConsume(type); | ||
| if (value2 !== void 0) | ||
| return value2; | ||
| var _a2 = tokens[i], nextType = _a2.type, index = _a2.index; | ||
| throw new TypeError("Unexpected ".concat(nextType, " at ").concat(index, ", expected ").concat(type)); | ||
| }; | ||
| var consumeText = function() { | ||
| var result2 = ""; | ||
| var value2; | ||
| while (value2 = tryConsume("CHAR") || tryConsume("ESCAPED_CHAR")) { | ||
| result2 += value2; | ||
| } | ||
| return result2; | ||
| }; | ||
| while (i < tokens.length) { | ||
| var char = tryConsume("CHAR"); | ||
| var name = tryConsume("NAME"); | ||
| var pattern = tryConsume("PATTERN"); | ||
| if (name || pattern) { | ||
| var prefix = char || ""; | ||
| if (prefixes.indexOf(prefix) === -1) { | ||
| path += prefix; | ||
| prefix = ""; | ||
| } | ||
| if (path) { | ||
| result.push(path); | ||
| path = ""; | ||
| } | ||
| result.push({ | ||
| name: name || key++, | ||
| prefix, | ||
| suffix: "", | ||
| pattern: pattern || defaultPattern, | ||
| modifier: tryConsume("MODIFIER") || "" | ||
| }); | ||
| continue; | ||
| } | ||
| var value = char || tryConsume("ESCAPED_CHAR"); | ||
| if (value) { | ||
| path += value; | ||
| continue; | ||
| } | ||
| if (path) { | ||
| result.push(path); | ||
| path = ""; | ||
| } | ||
| var open = tryConsume("OPEN"); | ||
| if (open) { | ||
| var prefix = consumeText(); | ||
| var name_1 = tryConsume("NAME") || ""; | ||
| var pattern_1 = tryConsume("PATTERN") || ""; | ||
| var suffix = consumeText(); | ||
| mustConsume("CLOSE"); | ||
| result.push({ | ||
| name: name_1 || (pattern_1 ? key++ : ""), | ||
| pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1, | ||
| prefix, | ||
| suffix, | ||
| modifier: tryConsume("MODIFIER") || "" | ||
| }); | ||
| continue; | ||
| } | ||
| mustConsume("END"); | ||
| } | ||
| return result; | ||
| } | ||
| function match(str, options) { | ||
| var keys = []; | ||
| var re = pathToRegexp(str, keys, options); | ||
| return regexpToFunction(re, keys, options); | ||
| } | ||
| function regexpToFunction(re, keys, options) { | ||
| if (options === void 0) { | ||
| options = {}; | ||
| } | ||
| var _a = options.decode, decode = _a === void 0 ? function(x) { | ||
| return x; | ||
| } : _a; | ||
| return function(pathname) { | ||
| var m = re.exec(pathname); | ||
| if (!m) | ||
| return false; | ||
| var path = m[0], index = m.index; | ||
| var params = /* @__PURE__ */ Object.create(null); | ||
| var _loop_1 = function(i2) { | ||
| if (m[i2] === void 0) | ||
| return "continue"; | ||
| var key = keys[i2 - 1]; | ||
| if (key.modifier === "*" || key.modifier === "+") { | ||
| params[key.name] = m[i2].split(key.prefix + key.suffix).map(function(value) { | ||
| return decode(value, key); | ||
| }); | ||
| } else { | ||
| params[key.name] = decode(m[i2], key); | ||
| } | ||
| }; | ||
| for (var i = 1; i < m.length; i++) { | ||
| _loop_1(i); | ||
| } | ||
| return { path, index, params }; | ||
| }; | ||
| } | ||
| function escapeString(str) { | ||
| return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1"); | ||
| } | ||
| function flags(options) { | ||
| return options && options.sensitive ? "" : "i"; | ||
| } | ||
| function regexpToRegexp(path, keys) { | ||
| if (!keys) | ||
| return path; | ||
| var groupsRegex = /\((?:\?<(.*?)>)?(?!\?)/g; | ||
| var index = 0; | ||
| var execResult = groupsRegex.exec(path.source); | ||
| while (execResult) { | ||
| keys.push({ | ||
| // Use parenthesized substring match if available, index otherwise | ||
| name: execResult[1] || index++, | ||
| prefix: "", | ||
| suffix: "", | ||
| modifier: "", | ||
| pattern: "" | ||
| }); | ||
| execResult = groupsRegex.exec(path.source); | ||
| } | ||
| return path; | ||
| } | ||
| function arrayToRegexp(paths, keys, options) { | ||
| var parts = paths.map(function(path) { | ||
| return pathToRegexp(path, keys, options).source; | ||
| }); | ||
| return new RegExp("(?:".concat(parts.join("|"), ")"), flags(options)); | ||
| } | ||
| function stringToRegexp(path, keys, options) { | ||
| return tokensToRegexp(parse(path, options), keys, options); | ||
| } | ||
| function tokensToRegexp(tokens, keys, options) { | ||
| if (options === void 0) { | ||
| options = {}; | ||
| } | ||
| var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function(x) { | ||
| return x; | ||
| } : _d, _e = options.delimiter, delimiter = _e === void 0 ? "/#?" : _e, _f = options.endsWith, endsWith = _f === void 0 ? "" : _f; | ||
| var endsWithRe = "[".concat(escapeString(endsWith), "]|$"); | ||
| var delimiterRe = "[".concat(escapeString(delimiter), "]"); | ||
| var route = start ? "^" : ""; | ||
| for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) { | ||
| var token = tokens_1[_i]; | ||
| if (typeof token === "string") { | ||
| route += escapeString(encode(token)); | ||
| } else { | ||
| var prefix = escapeString(encode(token.prefix)); | ||
| var suffix = escapeString(encode(token.suffix)); | ||
| if (token.pattern) { | ||
| if (keys) | ||
| keys.push(token); | ||
| if (prefix || suffix) { | ||
| if (token.modifier === "+" || token.modifier === "*") { | ||
| var mod = token.modifier === "*" ? "?" : ""; | ||
| route += "(?:".concat(prefix, "((?:").concat(token.pattern, ")(?:").concat(suffix).concat(prefix, "(?:").concat(token.pattern, "))*)").concat(suffix, ")").concat(mod); | ||
| } else { | ||
| route += "(?:".concat(prefix, "(").concat(token.pattern, ")").concat(suffix, ")").concat(token.modifier); | ||
| } | ||
| } else { | ||
| if (token.modifier === "+" || token.modifier === "*") { | ||
| route += "((?:".concat(token.pattern, ")").concat(token.modifier, ")"); | ||
| } else { | ||
| route += "(".concat(token.pattern, ")").concat(token.modifier); | ||
| } | ||
| } | ||
| } else { | ||
| route += "(?:".concat(prefix).concat(suffix, ")").concat(token.modifier); | ||
| } | ||
| } | ||
| } | ||
| if (end) { | ||
| if (!strict) | ||
| route += "".concat(delimiterRe, "?"); | ||
| route += !options.endsWith ? "$" : "(?=".concat(endsWithRe, ")"); | ||
| } else { | ||
| var endToken = tokens[tokens.length - 1]; | ||
| var isEndDelimited = typeof endToken === "string" ? delimiterRe.indexOf(endToken[endToken.length - 1]) > -1 : endToken === void 0; | ||
| if (!strict) { | ||
| route += "(?:".concat(delimiterRe, "(?=").concat(endsWithRe, "))?"); | ||
| } | ||
| if (!isEndDelimited) { | ||
| route += "(?=".concat(delimiterRe, "|").concat(endsWithRe, ")"); | ||
| } | ||
| } | ||
| return new RegExp(route, flags(options)); | ||
| } | ||
| function pathToRegexp(path, keys, options) { | ||
| if (path instanceof RegExp) | ||
| return regexpToRegexp(path, keys); | ||
| if (Array.isArray(path)) | ||
| return arrayToRegexp(path, keys, options); | ||
| return stringToRegexp(path, keys, options); | ||
| } | ||
| // ../../../node_modules/wrangler/templates/pages-template-plugin.ts | ||
| var escapeRegex = /[.+?^${}()|[\]\\]/g; | ||
| function* executeRequest(request, relativePathname) { | ||
| for (const route of [...routes].reverse()) { | ||
| if (route.method && route.method !== request.method) { | ||
| continue; | ||
| } | ||
| const routeMatcher = match(route.routePath.replace(escapeRegex, "\\$&"), { | ||
| end: false | ||
| }); | ||
| const mountMatcher = match(route.mountPath.replace(escapeRegex, "\\$&"), { | ||
| end: false | ||
| }); | ||
| const matchResult = routeMatcher(relativePathname); | ||
| const mountMatchResult = mountMatcher(relativePathname); | ||
| if (matchResult && mountMatchResult) { | ||
| for (const handler of route.middlewares.flat()) { | ||
| yield { | ||
| handler, | ||
| params: matchResult.params, | ||
| path: mountMatchResult.path | ||
| }; | ||
| } | ||
| } | ||
| } | ||
| for (const route of routes) { | ||
| if (route.method && route.method !== request.method) { | ||
| continue; | ||
| } | ||
| const routeMatcher = match(route.routePath.replace(escapeRegex, "\\$&"), { | ||
| end: true | ||
| }); | ||
| const mountMatcher = match(route.mountPath.replace(escapeRegex, "\\$&"), { | ||
| end: false | ||
| }); | ||
| const matchResult = routeMatcher(relativePathname); | ||
| const mountMatchResult = mountMatcher(relativePathname); | ||
| if (matchResult && mountMatchResult && route.modules.length) { | ||
| for (const handler of route.modules.flat()) { | ||
| yield { | ||
| handler, | ||
| params: matchResult.params, | ||
| path: matchResult.path | ||
| }; | ||
| } | ||
| break; | ||
| } | ||
| } | ||
| } | ||
| function pages_template_plugin_default(pluginArgs) { | ||
| const onRequest = async (workerContext) => { | ||
| let { request } = workerContext; | ||
| const { env, next } = workerContext; | ||
| let { data } = workerContext; | ||
| const url = new URL(request.url); | ||
| const relativePathname = `/${url.pathname.replace(workerContext.functionPath, "") || ""}`.replace(/^\/\//, "/"); | ||
| const handlerIterator = executeRequest(request, relativePathname); | ||
| const pluginNext = async (input, init) => { | ||
| if (input !== void 0) { | ||
| let url2 = input; | ||
| if (typeof input === "string") { | ||
| url2 = new URL(input, request.url).toString(); | ||
| } | ||
| request = new Request(url2, init); | ||
| } | ||
| const result = handlerIterator.next(); | ||
| if (result.done === false) { | ||
| const { handler, params, path } = result.value; | ||
| const context = { | ||
| request: new Request(request.clone()), | ||
| functionPath: workerContext.functionPath + path, | ||
| next: pluginNext, | ||
| params, | ||
| get data() { | ||
| return data; | ||
| }, | ||
| set data(value) { | ||
| if (typeof value !== "object" || value === null) { | ||
| throw new Error("context.data must be an object"); | ||
| } | ||
| data = value; | ||
| }, | ||
| pluginArgs, | ||
| env, | ||
| waitUntil: workerContext.waitUntil.bind(workerContext), | ||
| passThroughOnException: workerContext.passThroughOnException.bind(workerContext) | ||
| }; | ||
| const response = await handler(context); | ||
| return cloneResponse(response); | ||
| } else { | ||
| return next(request); | ||
| } | ||
| }; | ||
| return pluginNext(); | ||
| }; | ||
| return onRequest; | ||
| } | ||
| var cloneResponse = (response) => ( | ||
| // https://fetch.spec.whatwg.org/#null-body-status | ||
| new Response( | ||
| [101, 204, 205, 304].includes(response.status) ? null : response.body, | ||
| response | ||
| ) | ||
| ); | ||
| export { | ||
| pages_template_plugin_default as default | ||
| }; | ||
| //# sourceMappingURL=index.js.map |
| { | ||
| "version": 3, | ||
| "sources": ["../../functions/_middleware.ts", "../../.wrangler/tmp/pages-GJxkJb/functionsRoutes-0.19939727007927477.mjs", "../../../../node_modules/path-to-regexp/src/index.ts", "../../../../node_modules/wrangler/templates/pages-template-plugin.ts"], | ||
| "sourceRoot": "/home/runner/work/pages-plugins/pages-plugins/packages/static-forms/dist/functions", | ||
| "sourcesContent": ["import { PluginArgs } from \"@cloudflare/pages-plugin-static-forms\";\n\ntype StaticFormPagesPluginFunction<\n Env = unknown,\n Params extends string = any,\n Data extends Record<string, unknown> = Record<string, unknown>,\n> = PagesPluginFunction<Env, Params, Data, PluginArgs>;\n\nexport const onRequestPost: StaticFormPagesPluginFunction = async ({\n request,\n next,\n pluginArgs,\n}) => {\n let formData: FormData, name: string;\n try {\n formData = await request.formData();\n name = formData.get(\"static-form-name\").toString();\n } catch {}\n\n if (name) {\n formData.delete(\"static-form-name\");\n return pluginArgs.respondWith({ formData, name });\n }\n\n return next();\n};\n\nexport const onRequestGet: StaticFormPagesPluginFunction = async ({ next }) => {\n const response = await next();\n\n return new HTMLRewriter()\n .on(\"form[data-static-form-name]\", {\n element(form) {\n const formName = form.getAttribute(\"data-static-form-name\");\n form.setAttribute(\"method\", \"POST\");\n form.removeAttribute(\"action\");\n form.append(\n `<input type=\"hidden\" name=\"static-form-name\" value=\"${formName}\" />`,\n { html: true },\n );\n },\n })\n .transform(response);\n};\n", "import { onRequestGet as ___middleware_ts_onRequestGet } from \"/home/runner/work/pages-plugins/pages-plugins/packages/static-forms/functions/_middleware.ts\"\nimport { onRequestPost as ___middleware_ts_onRequestPost } from \"/home/runner/work/pages-plugins/pages-plugins/packages/static-forms/functions/_middleware.ts\"\n\nexport const routes = [\n {\n routePath: \"/\",\n mountPath: \"/\",\n method: \"GET\",\n middlewares: [___middleware_ts_onRequestGet],\n modules: [],\n },\n {\n routePath: \"/\",\n mountPath: \"/\",\n method: \"POST\",\n middlewares: [___middleware_ts_onRequestPost],\n modules: [],\n },\n ]", "/**\n * Tokenizer results.\n */\ninterface LexToken {\n type:\n | \"OPEN\"\n | \"CLOSE\"\n | \"PATTERN\"\n | \"NAME\"\n | \"CHAR\"\n | \"ESCAPED_CHAR\"\n | \"MODIFIER\"\n | \"END\";\n index: number;\n value: string;\n}\n\n/**\n * Tokenize input string.\n */\nfunction lexer(str: string): LexToken[] {\n const tokens: LexToken[] = [];\n let i = 0;\n\n while (i < str.length) {\n const char = str[i];\n\n if (char === \"*\" || char === \"+\" || char === \"?\") {\n tokens.push({ type: \"MODIFIER\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \"\\\\\") {\n tokens.push({ type: \"ESCAPED_CHAR\", index: i++, value: str[i++] });\n continue;\n }\n\n if (char === \"{\") {\n tokens.push({ type: \"OPEN\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \"}\") {\n tokens.push({ type: \"CLOSE\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \":\") {\n let name = \"\";\n let j = i + 1;\n\n while (j < str.length) {\n const code = str.charCodeAt(j);\n\n if (\n // `0-9`\n (code >= 48 && code <= 57) ||\n // `A-Z`\n (code >= 65 && code <= 90) ||\n // `a-z`\n (code >= 97 && code <= 122) ||\n // `_`\n code === 95\n ) {\n name += str[j++];\n continue;\n }\n\n break;\n }\n\n if (!name) throw new TypeError(`Missing parameter name at ${i}`);\n\n tokens.push({ type: \"NAME\", index: i, value: name });\n i = j;\n continue;\n }\n\n if (char === \"(\") {\n let count = 1;\n let pattern = \"\";\n let j = i + 1;\n\n if (str[j] === \"?\") {\n throw new TypeError(`Pattern cannot start with \"?\" at ${j}`);\n }\n\n while (j < str.length) {\n if (str[j] === \"\\\\\") {\n pattern += str[j++] + str[j++];\n continue;\n }\n\n if (str[j] === \")\") {\n count--;\n if (count === 0) {\n j++;\n break;\n }\n } else if (str[j] === \"(\") {\n count++;\n if (str[j + 1] !== \"?\") {\n throw new TypeError(`Capturing groups are not allowed at ${j}`);\n }\n }\n\n pattern += str[j++];\n }\n\n if (count) throw new TypeError(`Unbalanced pattern at ${i}`);\n if (!pattern) throw new TypeError(`Missing pattern at ${i}`);\n\n tokens.push({ type: \"PATTERN\", index: i, value: pattern });\n i = j;\n continue;\n }\n\n tokens.push({ type: \"CHAR\", index: i, value: str[i++] });\n }\n\n tokens.push({ type: \"END\", index: i, value: \"\" });\n\n return tokens;\n}\n\nexport interface ParseOptions {\n /**\n * Set the default delimiter for repeat parameters. (default: `'/'`)\n */\n delimiter?: string;\n /**\n * List of characters to automatically consider prefixes when parsing.\n */\n prefixes?: string;\n}\n\n/**\n * Parse a string for the raw tokens.\n */\nexport function parse(str: string, options: ParseOptions = {}): Token[] {\n const tokens = lexer(str);\n const { prefixes = \"./\" } = options;\n const defaultPattern = `[^${escapeString(options.delimiter || \"/#?\")}]+?`;\n const result: Token[] = [];\n let key = 0;\n let i = 0;\n let path = \"\";\n\n const tryConsume = (type: LexToken[\"type\"]): string | undefined => {\n if (i < tokens.length && tokens[i].type === type) return tokens[i++].value;\n };\n\n const mustConsume = (type: LexToken[\"type\"]): string => {\n const value = tryConsume(type);\n if (value !== undefined) return value;\n const { type: nextType, index } = tokens[i];\n throw new TypeError(`Unexpected ${nextType} at ${index}, expected ${type}`);\n };\n\n const consumeText = (): string => {\n let result = \"\";\n let value: string | undefined;\n while ((value = tryConsume(\"CHAR\") || tryConsume(\"ESCAPED_CHAR\"))) {\n result += value;\n }\n return result;\n };\n\n while (i < tokens.length) {\n const char = tryConsume(\"CHAR\");\n const name = tryConsume(\"NAME\");\n const pattern = tryConsume(\"PATTERN\");\n\n if (name || pattern) {\n let prefix = char || \"\";\n\n if (prefixes.indexOf(prefix) === -1) {\n path += prefix;\n prefix = \"\";\n }\n\n if (path) {\n result.push(path);\n path = \"\";\n }\n\n result.push({\n name: name || key++,\n prefix,\n suffix: \"\",\n pattern: pattern || defaultPattern,\n modifier: tryConsume(\"MODIFIER\") || \"\",\n });\n continue;\n }\n\n const value = char || tryConsume(\"ESCAPED_CHAR\");\n if (value) {\n path += value;\n continue;\n }\n\n if (path) {\n result.push(path);\n path = \"\";\n }\n\n const open = tryConsume(\"OPEN\");\n if (open) {\n const prefix = consumeText();\n const name = tryConsume(\"NAME\") || \"\";\n const pattern = tryConsume(\"PATTERN\") || \"\";\n const suffix = consumeText();\n\n mustConsume(\"CLOSE\");\n\n result.push({\n name: name || (pattern ? key++ : \"\"),\n pattern: name && !pattern ? defaultPattern : pattern,\n prefix,\n suffix,\n modifier: tryConsume(\"MODIFIER\") || \"\",\n });\n continue;\n }\n\n mustConsume(\"END\");\n }\n\n return result;\n}\n\nexport interface TokensToFunctionOptions {\n /**\n * When `true` the regexp will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * Function for encoding input strings for output.\n */\n encode?: (value: string, token: Key) => string;\n /**\n * When `false` the function can produce an invalid (unmatched) path. (default: `true`)\n */\n validate?: boolean;\n}\n\n/**\n * Compile a string to a template function for the path.\n */\nexport function compile<P extends object = object>(\n str: string,\n options?: ParseOptions & TokensToFunctionOptions\n) {\n return tokensToFunction<P>(parse(str, options), options);\n}\n\nexport type PathFunction<P extends object = object> = (data?: P) => string;\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nexport function tokensToFunction<P extends object = object>(\n tokens: Token[],\n options: TokensToFunctionOptions = {}\n): PathFunction<P> {\n const reFlags = flags(options);\n const { encode = (x: string) => x, validate = true } = options;\n\n // Compile all the tokens into regexps.\n const matches = tokens.map((token) => {\n if (typeof token === \"object\") {\n return new RegExp(`^(?:${token.pattern})$`, reFlags);\n }\n });\n\n return (data: Record<string, any> | null | undefined) => {\n let path = \"\";\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (typeof token === \"string\") {\n path += token;\n continue;\n }\n\n const value = data ? data[token.name] : undefined;\n const optional = token.modifier === \"?\" || token.modifier === \"*\";\n const repeat = token.modifier === \"*\" || token.modifier === \"+\";\n\n if (Array.isArray(value)) {\n if (!repeat) {\n throw new TypeError(\n `Expected \"${token.name}\" to not repeat, but got an array`\n );\n }\n\n if (value.length === 0) {\n if (optional) continue;\n\n throw new TypeError(`Expected \"${token.name}\" to not be empty`);\n }\n\n for (let j = 0; j < value.length; j++) {\n const segment = encode(value[j], token);\n\n if (validate && !(matches[i] as RegExp).test(segment)) {\n throw new TypeError(\n `Expected all \"${token.name}\" to match \"${token.pattern}\", but got \"${segment}\"`\n );\n }\n\n path += token.prefix + segment + token.suffix;\n }\n\n continue;\n }\n\n if (typeof value === \"string\" || typeof value === \"number\") {\n const segment = encode(String(value), token);\n\n if (validate && !(matches[i] as RegExp).test(segment)) {\n throw new TypeError(\n `Expected \"${token.name}\" to match \"${token.pattern}\", but got \"${segment}\"`\n );\n }\n\n path += token.prefix + segment + token.suffix;\n continue;\n }\n\n if (optional) continue;\n\n const typeOfMessage = repeat ? \"an array\" : \"a string\";\n throw new TypeError(`Expected \"${token.name}\" to be ${typeOfMessage}`);\n }\n\n return path;\n };\n}\n\nexport interface RegexpToFunctionOptions {\n /**\n * Function for decoding strings for params.\n */\n decode?: (value: string, token: Key) => string;\n}\n\n/**\n * A match result contains data about the path match.\n */\nexport interface MatchResult<P extends object = object> {\n path: string;\n index: number;\n params: P;\n}\n\n/**\n * A match is either `false` (no match) or a match result.\n */\nexport type Match<P extends object = object> = false | MatchResult<P>;\n\n/**\n * The match function takes a string and returns whether it matched the path.\n */\nexport type MatchFunction<P extends object = object> = (\n path: string\n) => Match<P>;\n\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nexport function match<P extends object = object>(\n str: Path,\n options?: ParseOptions & TokensToRegexpOptions & RegexpToFunctionOptions\n) {\n const keys: Key[] = [];\n const re = pathToRegexp(str, keys, options);\n return regexpToFunction<P>(re, keys, options);\n}\n\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nexport function regexpToFunction<P extends object = object>(\n re: RegExp,\n keys: Key[],\n options: RegexpToFunctionOptions = {}\n): MatchFunction<P> {\n const { decode = (x: string) => x } = options;\n\n return function (pathname: string) {\n const m = re.exec(pathname);\n if (!m) return false;\n\n const { 0: path, index } = m;\n const params = Object.create(null);\n\n for (let i = 1; i < m.length; i++) {\n if (m[i] === undefined) continue;\n\n const key = keys[i - 1];\n\n if (key.modifier === \"*\" || key.modifier === \"+\") {\n params[key.name] = m[i].split(key.prefix + key.suffix).map((value) => {\n return decode(value, key);\n });\n } else {\n params[key.name] = decode(m[i], key);\n }\n }\n\n return { path, index, params };\n };\n}\n\n/**\n * Escape a regular expression string.\n */\nfunction escapeString(str: string) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n}\n\n/**\n * Get the flags for a regexp from the options.\n */\nfunction flags(options?: { sensitive?: boolean }) {\n return options && options.sensitive ? \"\" : \"i\";\n}\n\n/**\n * Metadata about a key.\n */\nexport interface Key {\n name: string | number;\n prefix: string;\n suffix: string;\n pattern: string;\n modifier: string;\n}\n\n/**\n * A token is a string (nothing special) or key metadata (capture group).\n */\nexport type Token = string | Key;\n\n/**\n * Pull out keys from a regexp.\n */\nfunction regexpToRegexp(path: RegExp, keys?: Key[]): RegExp {\n if (!keys) return path;\n\n const groupsRegex = /\\((?:\\?<(.*?)>)?(?!\\?)/g;\n\n let index = 0;\n let execResult = groupsRegex.exec(path.source);\n while (execResult) {\n keys.push({\n // Use parenthesized substring match if available, index otherwise\n name: execResult[1] || index++,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\",\n });\n execResult = groupsRegex.exec(path.source);\n }\n\n return path;\n}\n\n/**\n * Transform an array into a regexp.\n */\nfunction arrayToRegexp(\n paths: Array<string | RegExp>,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n): RegExp {\n const parts = paths.map((path) => pathToRegexp(path, keys, options).source);\n return new RegExp(`(?:${parts.join(\"|\")})`, flags(options));\n}\n\n/**\n * Create a path regexp from string input.\n */\nfunction stringToRegexp(\n path: string,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n) {\n return tokensToRegexp(parse(path, options), keys, options);\n}\n\nexport interface TokensToRegexpOptions {\n /**\n * When `true` the regexp will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * When `true` the regexp won't allow an optional trailing delimiter to match. (default: `false`)\n */\n strict?: boolean;\n /**\n * When `true` the regexp will match to the end of the string. (default: `true`)\n */\n end?: boolean;\n /**\n * When `true` the regexp will match from the beginning of the string. (default: `true`)\n */\n start?: boolean;\n /**\n * Sets the final character for non-ending optimistic matches. (default: `/`)\n */\n delimiter?: string;\n /**\n * List of characters that can also be \"end\" characters.\n */\n endsWith?: string;\n /**\n * Encode path tokens for use in the `RegExp`.\n */\n encode?: (value: string) => string;\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n */\nexport function tokensToRegexp(\n tokens: Token[],\n keys?: Key[],\n options: TokensToRegexpOptions = {}\n) {\n const {\n strict = false,\n start = true,\n end = true,\n encode = (x: string) => x,\n delimiter = \"/#?\",\n endsWith = \"\",\n } = options;\n const endsWithRe = `[${escapeString(endsWith)}]|$`;\n const delimiterRe = `[${escapeString(delimiter)}]`;\n let route = start ? \"^\" : \"\";\n\n // Iterate over the tokens and create our regexp string.\n for (const token of tokens) {\n if (typeof token === \"string\") {\n route += escapeString(encode(token));\n } else {\n const prefix = escapeString(encode(token.prefix));\n const suffix = escapeString(encode(token.suffix));\n\n if (token.pattern) {\n if (keys) keys.push(token);\n\n if (prefix || suffix) {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n const mod = token.modifier === \"*\" ? \"?\" : \"\";\n route += `(?:${prefix}((?:${token.pattern})(?:${suffix}${prefix}(?:${token.pattern}))*)${suffix})${mod}`;\n } else {\n route += `(?:${prefix}(${token.pattern})${suffix})${token.modifier}`;\n }\n } else {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n route += `((?:${token.pattern})${token.modifier})`;\n } else {\n route += `(${token.pattern})${token.modifier}`;\n }\n }\n } else {\n route += `(?:${prefix}${suffix})${token.modifier}`;\n }\n }\n }\n\n if (end) {\n if (!strict) route += `${delimiterRe}?`;\n\n route += !options.endsWith ? \"$\" : `(?=${endsWithRe})`;\n } else {\n const endToken = tokens[tokens.length - 1];\n const isEndDelimited =\n typeof endToken === \"string\"\n ? delimiterRe.indexOf(endToken[endToken.length - 1]) > -1\n : endToken === undefined;\n\n if (!strict) {\n route += `(?:${delimiterRe}(?=${endsWithRe}))?`;\n }\n\n if (!isEndDelimited) {\n route += `(?=${delimiterRe}|${endsWithRe})`;\n }\n }\n\n return new RegExp(route, flags(options));\n}\n\n/**\n * Supported `path-to-regexp` input types.\n */\nexport type Path = string | RegExp | Array<string | RegExp>;\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n */\nexport function pathToRegexp(\n path: Path,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n) {\n if (path instanceof RegExp) return regexpToRegexp(path, keys);\n if (Array.isArray(path)) return arrayToRegexp(path, keys, options);\n return stringToRegexp(path, keys, options);\n}\n", "import { match } from \"path-to-regexp\";\n\n//note: this explicitly does not include the * character, as pages requires this\nconst escapeRegex = /[.+?^${}()|[\\]\\\\]/g;\n\ntype HTTPMethod =\n\t| \"HEAD\"\n\t| \"OPTIONS\"\n\t| \"GET\"\n\t| \"POST\"\n\t| \"PUT\"\n\t| \"PATCH\"\n\t| \"DELETE\";\n\n/* TODO: Grab these from @cloudflare/workers-types instead */\ntype Params<P extends string = string> = Record<P, string | string[]>;\n\ntype EventContext<Env, P extends string, Data> = {\n\trequest: Request;\n\tfunctionPath: string;\n\twaitUntil: (promise: Promise<unknown>) => void;\n\tpassThroughOnException: () => void;\n\tnext: (input?: Request | string, init?: RequestInit) => Promise<Response>;\n\tenv: Env & { ASSETS: { fetch: typeof fetch } };\n\tparams: Params<P>;\n\tdata: Data;\n};\n\ntype EventPluginContext<Env, P extends string, Data, PluginArgs> = {\n\trequest: Request;\n\tfunctionPath: string;\n\twaitUntil: (promise: Promise<unknown>) => void;\n\tpassThroughOnException: () => void;\n\tnext: (input?: Request | string, init?: RequestInit) => Promise<Response>;\n\tenv: Env & { ASSETS: { fetch: typeof fetch } };\n\tparams: Params<P>;\n\tdata: Data;\n\tpluginArgs: PluginArgs;\n};\n\ndeclare type PagesFunction<\n\tEnv = unknown,\n\tP extends string = string,\n\tData extends Record<string, unknown> = Record<string, unknown>\n> = (context: EventContext<Env, P, Data>) => Response | Promise<Response>;\n\ndeclare type PagesPluginFunction<\n\tEnv = unknown,\n\tP extends string = string,\n\tData extends Record<string, unknown> = Record<string, unknown>,\n\tPluginArgs = unknown\n> = (\n\tcontext: EventPluginContext<Env, P, Data, PluginArgs>\n) => Response | Promise<Response>;\n/* end @cloudflare/workers-types */\n\ntype RouteHandler = {\n\troutePath: string;\n\tmountPath: string;\n\tmethod?: HTTPMethod;\n\tmodules: PagesFunction[];\n\tmiddlewares: PagesFunction[];\n};\n\n// inject `routes` via ESBuild\ndeclare const routes: RouteHandler[];\n\nfunction* executeRequest(request: Request, relativePathname: string) {\n\t// First, iterate through the routes (backwards) and execute \"middlewares\" on partial route matches\n\tfor (const route of [...routes].reverse()) {\n\t\tif (route.method && route.method !== request.method) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// replaces with \"\\\\$&\", this prepends a backslash to the matched string, e.g. \"[\" becomes \"\\[\"\n\t\tconst routeMatcher = match(route.routePath.replace(escapeRegex, \"\\\\$&\"), {\n\t\t\tend: false,\n\t\t});\n\t\tconst mountMatcher = match(route.mountPath.replace(escapeRegex, \"\\\\$&\"), {\n\t\t\tend: false,\n\t\t});\n\t\tconst matchResult = routeMatcher(relativePathname);\n\t\tconst mountMatchResult = mountMatcher(relativePathname);\n\t\tif (matchResult && mountMatchResult) {\n\t\t\tfor (const handler of route.middlewares.flat()) {\n\t\t\t\tyield {\n\t\t\t\t\thandler,\n\t\t\t\t\tparams: matchResult.params as Params,\n\t\t\t\t\tpath: mountMatchResult.path,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\t// Then look for the first exact route match and execute its \"modules\"\n\tfor (const route of routes) {\n\t\tif (route.method && route.method !== request.method) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst routeMatcher = match(route.routePath.replace(escapeRegex, \"\\\\$&\"), {\n\t\t\tend: true,\n\t\t});\n\t\tconst mountMatcher = match(route.mountPath.replace(escapeRegex, \"\\\\$&\"), {\n\t\t\tend: false,\n\t\t});\n\t\tconst matchResult = routeMatcher(relativePathname);\n\t\tconst mountMatchResult = mountMatcher(relativePathname);\n\t\tif (matchResult && mountMatchResult && route.modules.length) {\n\t\t\tfor (const handler of route.modules.flat()) {\n\t\t\t\tyield {\n\t\t\t\t\thandler,\n\t\t\t\t\tparams: matchResult.params as Params,\n\t\t\t\t\tpath: matchResult.path,\n\t\t\t\t};\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\nexport default function (pluginArgs: unknown) {\n\tconst onRequest: PagesPluginFunction = async (workerContext) => {\n\t\tlet { request } = workerContext;\n\t\tconst { env, next } = workerContext;\n\t\tlet { data } = workerContext;\n\n\t\tconst url = new URL(request.url);\n\t\t// TODO: Replace this with something actually legible.\n\t\tconst relativePathname = `/${\n\t\t\turl.pathname.replace(workerContext.functionPath, \"\") || \"\"\n\t\t}`.replace(/^\\/\\//, \"/\");\n\n\t\tconst handlerIterator = executeRequest(request, relativePathname);\n\t\tconst pluginNext = async (input?: RequestInfo, init?: RequestInit) => {\n\t\t\tif (input !== undefined) {\n\t\t\t\tlet url = input;\n\t\t\t\tif (typeof input === \"string\") {\n\t\t\t\t\turl = new URL(input, request.url).toString();\n\t\t\t\t}\n\t\t\t\trequest = new Request(url, init);\n\t\t\t}\n\n\t\t\tconst result = handlerIterator.next();\n\t\t\t// Note we can't use `!result.done` because this doesn't narrow to the correct type\n\t\t\tif (result.done === false) {\n\t\t\t\tconst { handler, params, path } = result.value;\n\t\t\t\tconst context = {\n\t\t\t\t\trequest: new Request(request.clone()),\n\t\t\t\t\tfunctionPath: workerContext.functionPath + path,\n\t\t\t\t\tnext: pluginNext,\n\t\t\t\t\tparams,\n\t\t\t\t\tget data() {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t},\n\t\t\t\t\tset data(value) {\n\t\t\t\t\t\tif (typeof value !== \"object\" || value === null) {\n\t\t\t\t\t\t\tthrow new Error(\"context.data must be an object\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// user has overriden context.data, so we need to merge it with the existing data\n\t\t\t\t\t\tdata = value;\n\t\t\t\t\t},\n\t\t\t\t\tpluginArgs,\n\t\t\t\t\tenv,\n\t\t\t\t\twaitUntil: workerContext.waitUntil.bind(workerContext),\n\t\t\t\t\tpassThroughOnException:\n\t\t\t\t\t\tworkerContext.passThroughOnException.bind(workerContext),\n\t\t\t\t};\n\n\t\t\t\tconst response = await handler(context);\n\n\t\t\t\treturn cloneResponse(response);\n\t\t\t} else {\n\t\t\t\treturn next(request);\n\t\t\t}\n\t\t};\n\n\t\treturn pluginNext();\n\t};\n\n\treturn onRequest;\n}\n\n// This makes a Response mutable\nconst cloneResponse = (response: Response) =>\n\t// https://fetch.spec.whatwg.org/#null-body-status\n\tnew Response(\n\t\t[101, 204, 205, 304].includes(response.status) ? null : response.body,\n\t\tresponse\n\t);\n"], | ||
| "mappings": "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", | ||
| "names": ["value", "_a", "result", "i", "url"] | ||
| } |
+29
-7
| { | ||
| "name": "@cloudflare/pages-plugin-static-forms", | ||
| "version": "1.0.1", | ||
| "main": "index.js", | ||
| "types": "index.d.ts", | ||
| "version": "1.0.2", | ||
| "homepage": "https://developers.cloudflare.com/pages/platform/functions/plugins/static-forms/", | ||
| "bugs": { | ||
| "url": "https://github.com/cloudflare/pages-plugins/issues" | ||
| }, | ||
| "repository": { | ||
| "type": "git", | ||
| "url": "git+https://github.com/cloudflare/pages-plugins.git", | ||
| "directory": "./packages/static-forms" | ||
| }, | ||
| "type": "module", | ||
| "exports": { | ||
| ".": { | ||
| "types": "./index.d.ts", | ||
| "default": "./dist/functions/index.js" | ||
| } | ||
| }, | ||
| "main": "./dist/functions/index.js", | ||
| "types": "./index.d.ts", | ||
| "files": [ | ||
| "index.js", | ||
| "index.d.ts", | ||
| "tsconfig.json" | ||
| "./CHANGELOG.md", | ||
| "./index.d.ts", | ||
| "./dist/" | ||
| ], | ||
| "scripts": { | ||
| "build": "npx wrangler pages functions build --plugin --outfile index.js" | ||
| "build": "npm run build:functions", | ||
| "build:functions": "npx wrangler pages functions build --plugin --outdir=./dist/functions --sourcemap", | ||
| "prepack": "npm run build" | ||
| }, | ||
| "volta": { | ||
| "node": "20.11.0", | ||
| "npm": "10.2.4" | ||
| } | ||
| } |
-430
| // _middleware.ts | ||
| var onRequestPost = async ({ | ||
| request, | ||
| next, | ||
| pluginArgs | ||
| }) => { | ||
| let formData, name; | ||
| try { | ||
| formData = await request.formData(); | ||
| name = formData.get("static-form-name").toString(); | ||
| } catch { | ||
| } | ||
| if (name) { | ||
| formData.delete("static-form-name"); | ||
| return pluginArgs.respondWith({ formData, name }); | ||
| } | ||
| return next(); | ||
| }; | ||
| var onRequestGet = async ({ next }) => { | ||
| const response = await next(); | ||
| return new HTMLRewriter().on("form", { | ||
| element(form) { | ||
| const formName = form.getAttribute("data-static-form-name"); | ||
| form.setAttribute("method", "POST"); | ||
| form.removeAttribute("action"); | ||
| form.append( | ||
| `<input type="hidden" name="static-form-name" value="${formName}" />`, | ||
| { html: true } | ||
| ); | ||
| } | ||
| }).transform(response); | ||
| }; | ||
| // ../../../../../../../var/folders/dr/3c4srmxd26sdx440rq2m50380000gp/T/functionsRoutes-0.6543852041508254.mjs | ||
| var routes = [ | ||
| { | ||
| routePath: "/", | ||
| mountPath: "/", | ||
| method: "GET", | ||
| middlewares: [onRequestGet], | ||
| modules: [] | ||
| }, | ||
| { | ||
| routePath: "/", | ||
| mountPath: "/", | ||
| method: "POST", | ||
| middlewares: [onRequestPost], | ||
| modules: [] | ||
| } | ||
| ]; | ||
| // ../../../node_modules/path-to-regexp/dist.es2015/index.js | ||
| function lexer(str) { | ||
| var tokens = []; | ||
| var i = 0; | ||
| while (i < str.length) { | ||
| var char = str[i]; | ||
| if (char === "*" || char === "+" || char === "?") { | ||
| tokens.push({ type: "MODIFIER", index: i, value: str[i++] }); | ||
| continue; | ||
| } | ||
| if (char === "\\") { | ||
| tokens.push({ type: "ESCAPED_CHAR", index: i++, value: str[i++] }); | ||
| continue; | ||
| } | ||
| if (char === "{") { | ||
| tokens.push({ type: "OPEN", index: i, value: str[i++] }); | ||
| continue; | ||
| } | ||
| if (char === "}") { | ||
| tokens.push({ type: "CLOSE", index: i, value: str[i++] }); | ||
| continue; | ||
| } | ||
| if (char === ":") { | ||
| var name = ""; | ||
| var j = i + 1; | ||
| while (j < str.length) { | ||
| var code = str.charCodeAt(j); | ||
| if (code >= 48 && code <= 57 || code >= 65 && code <= 90 || code >= 97 && code <= 122 || code === 95) { | ||
| name += str[j++]; | ||
| continue; | ||
| } | ||
| break; | ||
| } | ||
| if (!name) | ||
| throw new TypeError("Missing parameter name at " + i); | ||
| tokens.push({ type: "NAME", index: i, value: name }); | ||
| i = j; | ||
| continue; | ||
| } | ||
| if (char === "(") { | ||
| var count = 1; | ||
| var pattern = ""; | ||
| var j = i + 1; | ||
| if (str[j] === "?") { | ||
| throw new TypeError('Pattern cannot start with "?" at ' + j); | ||
| } | ||
| while (j < str.length) { | ||
| if (str[j] === "\\") { | ||
| pattern += str[j++] + str[j++]; | ||
| continue; | ||
| } | ||
| if (str[j] === ")") { | ||
| count--; | ||
| if (count === 0) { | ||
| j++; | ||
| break; | ||
| } | ||
| } else if (str[j] === "(") { | ||
| count++; | ||
| if (str[j + 1] !== "?") { | ||
| throw new TypeError("Capturing groups are not allowed at " + j); | ||
| } | ||
| } | ||
| pattern += str[j++]; | ||
| } | ||
| if (count) | ||
| throw new TypeError("Unbalanced pattern at " + i); | ||
| if (!pattern) | ||
| throw new TypeError("Missing pattern at " + i); | ||
| tokens.push({ type: "PATTERN", index: i, value: pattern }); | ||
| i = j; | ||
| continue; | ||
| } | ||
| tokens.push({ type: "CHAR", index: i, value: str[i++] }); | ||
| } | ||
| tokens.push({ type: "END", index: i, value: "" }); | ||
| return tokens; | ||
| } | ||
| function parse(str, options) { | ||
| if (options === void 0) { | ||
| options = {}; | ||
| } | ||
| var tokens = lexer(str); | ||
| var _a = options.prefixes, prefixes = _a === void 0 ? "./" : _a; | ||
| var defaultPattern = "[^" + escapeString(options.delimiter || "/#?") + "]+?"; | ||
| var result = []; | ||
| var key = 0; | ||
| var i = 0; | ||
| var path = ""; | ||
| var tryConsume = function(type) { | ||
| if (i < tokens.length && tokens[i].type === type) | ||
| return tokens[i++].value; | ||
| }; | ||
| var mustConsume = function(type) { | ||
| var value2 = tryConsume(type); | ||
| if (value2 !== void 0) | ||
| return value2; | ||
| var _a2 = tokens[i], nextType = _a2.type, index = _a2.index; | ||
| throw new TypeError("Unexpected " + nextType + " at " + index + ", expected " + type); | ||
| }; | ||
| var consumeText = function() { | ||
| var result2 = ""; | ||
| var value2; | ||
| while (value2 = tryConsume("CHAR") || tryConsume("ESCAPED_CHAR")) { | ||
| result2 += value2; | ||
| } | ||
| return result2; | ||
| }; | ||
| while (i < tokens.length) { | ||
| var char = tryConsume("CHAR"); | ||
| var name = tryConsume("NAME"); | ||
| var pattern = tryConsume("PATTERN"); | ||
| if (name || pattern) { | ||
| var prefix = char || ""; | ||
| if (prefixes.indexOf(prefix) === -1) { | ||
| path += prefix; | ||
| prefix = ""; | ||
| } | ||
| if (path) { | ||
| result.push(path); | ||
| path = ""; | ||
| } | ||
| result.push({ | ||
| name: name || key++, | ||
| prefix, | ||
| suffix: "", | ||
| pattern: pattern || defaultPattern, | ||
| modifier: tryConsume("MODIFIER") || "" | ||
| }); | ||
| continue; | ||
| } | ||
| var value = char || tryConsume("ESCAPED_CHAR"); | ||
| if (value) { | ||
| path += value; | ||
| continue; | ||
| } | ||
| if (path) { | ||
| result.push(path); | ||
| path = ""; | ||
| } | ||
| var open = tryConsume("OPEN"); | ||
| if (open) { | ||
| var prefix = consumeText(); | ||
| var name_1 = tryConsume("NAME") || ""; | ||
| var pattern_1 = tryConsume("PATTERN") || ""; | ||
| var suffix = consumeText(); | ||
| mustConsume("CLOSE"); | ||
| result.push({ | ||
| name: name_1 || (pattern_1 ? key++ : ""), | ||
| pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1, | ||
| prefix, | ||
| suffix, | ||
| modifier: tryConsume("MODIFIER") || "" | ||
| }); | ||
| continue; | ||
| } | ||
| mustConsume("END"); | ||
| } | ||
| return result; | ||
| } | ||
| function match(str, options) { | ||
| var keys = []; | ||
| var re = pathToRegexp(str, keys, options); | ||
| return regexpToFunction(re, keys, options); | ||
| } | ||
| function regexpToFunction(re, keys, options) { | ||
| if (options === void 0) { | ||
| options = {}; | ||
| } | ||
| var _a = options.decode, decode = _a === void 0 ? function(x) { | ||
| return x; | ||
| } : _a; | ||
| return function(pathname) { | ||
| var m = re.exec(pathname); | ||
| if (!m) | ||
| return false; | ||
| var path = m[0], index = m.index; | ||
| var params = /* @__PURE__ */ Object.create(null); | ||
| var _loop_1 = function(i2) { | ||
| if (m[i2] === void 0) | ||
| return "continue"; | ||
| var key = keys[i2 - 1]; | ||
| if (key.modifier === "*" || key.modifier === "+") { | ||
| params[key.name] = m[i2].split(key.prefix + key.suffix).map(function(value) { | ||
| return decode(value, key); | ||
| }); | ||
| } else { | ||
| params[key.name] = decode(m[i2], key); | ||
| } | ||
| }; | ||
| for (var i = 1; i < m.length; i++) { | ||
| _loop_1(i); | ||
| } | ||
| return { path, index, params }; | ||
| }; | ||
| } | ||
| function escapeString(str) { | ||
| return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1"); | ||
| } | ||
| function flags(options) { | ||
| return options && options.sensitive ? "" : "i"; | ||
| } | ||
| function regexpToRegexp(path, keys) { | ||
| if (!keys) | ||
| return path; | ||
| var groupsRegex = /\((?:\?<(.*?)>)?(?!\?)/g; | ||
| var index = 0; | ||
| var execResult = groupsRegex.exec(path.source); | ||
| while (execResult) { | ||
| keys.push({ | ||
| name: execResult[1] || index++, | ||
| prefix: "", | ||
| suffix: "", | ||
| modifier: "", | ||
| pattern: "" | ||
| }); | ||
| execResult = groupsRegex.exec(path.source); | ||
| } | ||
| return path; | ||
| } | ||
| function arrayToRegexp(paths, keys, options) { | ||
| var parts = paths.map(function(path) { | ||
| return pathToRegexp(path, keys, options).source; | ||
| }); | ||
| return new RegExp("(?:" + parts.join("|") + ")", flags(options)); | ||
| } | ||
| function stringToRegexp(path, keys, options) { | ||
| return tokensToRegexp(parse(path, options), keys, options); | ||
| } | ||
| function tokensToRegexp(tokens, keys, options) { | ||
| if (options === void 0) { | ||
| options = {}; | ||
| } | ||
| var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function(x) { | ||
| return x; | ||
| } : _d; | ||
| var endsWith = "[" + escapeString(options.endsWith || "") + "]|$"; | ||
| var delimiter = "[" + escapeString(options.delimiter || "/#?") + "]"; | ||
| var route = start ? "^" : ""; | ||
| for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) { | ||
| var token = tokens_1[_i]; | ||
| if (typeof token === "string") { | ||
| route += escapeString(encode(token)); | ||
| } else { | ||
| var prefix = escapeString(encode(token.prefix)); | ||
| var suffix = escapeString(encode(token.suffix)); | ||
| if (token.pattern) { | ||
| if (keys) | ||
| keys.push(token); | ||
| if (prefix || suffix) { | ||
| if (token.modifier === "+" || token.modifier === "*") { | ||
| var mod = token.modifier === "*" ? "?" : ""; | ||
| route += "(?:" + prefix + "((?:" + token.pattern + ")(?:" + suffix + prefix + "(?:" + token.pattern + "))*)" + suffix + ")" + mod; | ||
| } else { | ||
| route += "(?:" + prefix + "(" + token.pattern + ")" + suffix + ")" + token.modifier; | ||
| } | ||
| } else { | ||
| route += "(" + token.pattern + ")" + token.modifier; | ||
| } | ||
| } else { | ||
| route += "(?:" + prefix + suffix + ")" + token.modifier; | ||
| } | ||
| } | ||
| } | ||
| if (end) { | ||
| if (!strict) | ||
| route += delimiter + "?"; | ||
| route += !options.endsWith ? "$" : "(?=" + endsWith + ")"; | ||
| } else { | ||
| var endToken = tokens[tokens.length - 1]; | ||
| var isEndDelimited = typeof endToken === "string" ? delimiter.indexOf(endToken[endToken.length - 1]) > -1 : endToken === void 0; | ||
| if (!strict) { | ||
| route += "(?:" + delimiter + "(?=" + endsWith + "))?"; | ||
| } | ||
| if (!isEndDelimited) { | ||
| route += "(?=" + delimiter + "|" + endsWith + ")"; | ||
| } | ||
| } | ||
| return new RegExp(route, flags(options)); | ||
| } | ||
| function pathToRegexp(path, keys, options) { | ||
| if (path instanceof RegExp) | ||
| return regexpToRegexp(path, keys); | ||
| if (Array.isArray(path)) | ||
| return arrayToRegexp(path, keys, options); | ||
| return stringToRegexp(path, keys, options); | ||
| } | ||
| // ../../../node_modules/wrangler/templates/pages-template-plugin.ts | ||
| var escapeRegex = /[.+?^${}()|[\]\\]/g; | ||
| function* executeRequest(request, relativePathname) { | ||
| for (const route of [...routes].reverse()) { | ||
| if (route.method && route.method !== request.method) { | ||
| continue; | ||
| } | ||
| const routeMatcher = match(route.routePath.replace(escapeRegex, "\\$&"), { | ||
| end: false | ||
| }); | ||
| const mountMatcher = match(route.mountPath.replace(escapeRegex, "\\$&"), { | ||
| end: false | ||
| }); | ||
| const matchResult = routeMatcher(relativePathname); | ||
| const mountMatchResult = mountMatcher(relativePathname); | ||
| if (matchResult && mountMatchResult) { | ||
| for (const handler of route.middlewares.flat()) { | ||
| yield { | ||
| handler, | ||
| params: matchResult.params, | ||
| path: mountMatchResult.path | ||
| }; | ||
| } | ||
| } | ||
| } | ||
| for (const route of routes) { | ||
| if (route.method && route.method !== request.method) { | ||
| continue; | ||
| } | ||
| const routeMatcher = match(route.routePath.replace(escapeRegex, "\\$&"), { | ||
| end: true | ||
| }); | ||
| const mountMatcher = match(route.mountPath.replace(escapeRegex, "\\$&"), { | ||
| end: false | ||
| }); | ||
| const matchResult = routeMatcher(relativePathname); | ||
| const mountMatchResult = mountMatcher(relativePathname); | ||
| if (matchResult && mountMatchResult && route.modules.length) { | ||
| for (const handler of route.modules.flat()) { | ||
| yield { | ||
| handler, | ||
| params: matchResult.params, | ||
| path: matchResult.path | ||
| }; | ||
| } | ||
| break; | ||
| } | ||
| } | ||
| } | ||
| function pages_template_plugin_default(pluginArgs) { | ||
| const onRequest = async (workerContext) => { | ||
| let { request } = workerContext; | ||
| const { env, next, data } = workerContext; | ||
| const url = new URL(request.url); | ||
| const relativePathname = `/${url.pathname.replace(workerContext.functionPath, "") || ""}`.replace(/^\/\//, "/"); | ||
| const handlerIterator = executeRequest(request, relativePathname); | ||
| const pluginNext = async (input, init) => { | ||
| if (input !== void 0) { | ||
| request = new Request(input, init); | ||
| } | ||
| const result = handlerIterator.next(); | ||
| if (result.done === false) { | ||
| const { handler, params, path } = result.value; | ||
| const context = { | ||
| request, | ||
| functionPath: workerContext.functionPath + path, | ||
| next: pluginNext, | ||
| params, | ||
| data, | ||
| pluginArgs, | ||
| env, | ||
| waitUntil: workerContext.waitUntil.bind(workerContext), | ||
| passThroughOnException: workerContext.passThroughOnException.bind(workerContext) | ||
| }; | ||
| const response = await handler(context); | ||
| return cloneResponse(response); | ||
| } else { | ||
| return next(); | ||
| } | ||
| }; | ||
| return pluginNext(); | ||
| }; | ||
| return onRequest; | ||
| } | ||
| var cloneResponse = (response) => new Response( | ||
| [101, 204, 205, 304].includes(response.status) ? null : response.body, | ||
| response | ||
| ); | ||
| export { | ||
| pages_template_plugin_default as default | ||
| }; |
| { | ||
| "compilerOptions": { | ||
| "target": "ES2020", | ||
| "module": "CommonJS", | ||
| "lib": ["ES2020"], | ||
| "types": ["@cloudflare/workers-types"] | ||
| } | ||
| } |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
No website
QualityPackage does not have a website.
Found 1 instance in 1 package
50245
264.94%6
20%465
4.49%1
-50%0
-100%0
-100%Yes
NaN1
Infinity%