@nightintelligence/cloudflare-workers-utils 0.35.0-patch2 → 0.35.0-patch3
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/dist/browser.mjs +2 -2
- package/dist/browser.mjs.map +1 -1
- package/dist/chunk-PAWJFY3S.mjs +6 -0
- package/dist/{chunk-6LYDFTTF.mjs.map → chunk-PAWJFY3S.mjs.map} +1 -1
- package/dist/compatibility-date.mjs +42 -2
- package/dist/compatibility-date.mjs.map +1 -1
- package/dist/compliance.mjs +2 -7
- package/dist/compliance.mjs.map +1 -1
- package/dist/docker-path.mjs +11 -3
- package/dist/docker-path.mjs.map +1 -1
- package/dist/errors.mjs +61 -2
- package/dist/errors.mjs.map +1 -1
- package/dist/fs-helpers.mjs +33 -2
- package/dist/fs-helpers.mjs.map +1 -1
- package/dist/global-wrangler-config-path.mjs +28 -3
- package/dist/global-wrangler-config-path.mjs.map +1 -1
- package/dist/index.mjs +54 -26124
- package/dist/index.mjs.map +1 -1
- package/dist/local-env.mjs +5 -80
- package/dist/local-env.mjs.map +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/prometheus-metrics.mjs +51 -2
- package/dist/prometheus-metrics.mjs.map +1 -1
- package/dist/test-helpers/index.mjs +7 -308
- package/dist/test-helpers/index.mjs.map +1 -1
- package/dist/zod-format.mjs +235 -2
- package/dist/zod-format.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-3D4BXUZX.mjs +0 -54
- package/dist/chunk-3D4BXUZX.mjs.map +0 -1
- package/dist/chunk-4RE36JUD.mjs +0 -3160
- package/dist/chunk-4RE36JUD.mjs.map +0 -1
- package/dist/chunk-6LYDFTTF.mjs +0 -40
- package/dist/chunk-CPLEE7LH.mjs +0 -64
- package/dist/chunk-CPLEE7LH.mjs.map +0 -1
- package/dist/chunk-G5FCNCLK.mjs +0 -47
- package/dist/chunk-G5FCNCLK.mjs.map +0 -1
- package/dist/chunk-IGC3TZGH.mjs +0 -157
- package/dist/chunk-IGC3TZGH.mjs.map +0 -1
- package/dist/chunk-NXPJWJ2B.mjs +0 -180
- package/dist/chunk-NXPJWJ2B.mjs.map +0 -1
- package/dist/chunk-OPAKTV2K.mjs +0 -75
- package/dist/chunk-OPAKTV2K.mjs.map +0 -1
- package/dist/chunk-VKFVZ67V.mjs +0 -35
- package/dist/chunk-VKFVZ67V.mjs.map +0 -1
- package/dist/chunk-W7DIL5J2.mjs +0 -267
- package/dist/chunk-W7DIL5J2.mjs.map +0 -1
- package/dist/chunk-ZLUHKBEC.mjs +0 -44
- package/dist/chunk-ZLUHKBEC.mjs.map +0 -1
- package/dist/chunk-ZQ2EZEOC.mjs +0 -477
- package/dist/chunk-ZQ2EZEOC.mjs.map +0 -1
- package/dist/open-OYMIZX6T.mjs +0 -609
- package/dist/open-OYMIZX6T.mjs.map +0 -1
package/dist/local-env.mjs
CHANGED
|
@@ -1,84 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { __name } from './chunk-PAWJFY3S.mjs';
|
|
2
2
|
import * as fs from 'node:fs/promises';
|
|
3
3
|
import * as path from 'node:path';
|
|
4
4
|
import { parse } from 'dotenv';
|
|
5
|
+
import { expand } from 'dotenv-expand';
|
|
5
6
|
|
|
6
|
-
// ../../node_modules/.pnpm/dotenv-expand@13.0.0/node_modules/dotenv-expand/lib/main.js
|
|
7
|
-
var require_main = __commonJS({
|
|
8
|
-
"../../node_modules/.pnpm/dotenv-expand@13.0.0/node_modules/dotenv-expand/lib/main.js"(exports$1, module) {
|
|
9
|
-
function _resolveEscapeSequences(value) {
|
|
10
|
-
return value.replace(/\\\$/g, "$");
|
|
11
|
-
}
|
|
12
|
-
__name(_resolveEscapeSequences, "_resolveEscapeSequences");
|
|
13
|
-
function expandValue(value, processEnv, runningParsed) {
|
|
14
|
-
const env = { ...runningParsed, ...processEnv };
|
|
15
|
-
const regex = /(?<!\\)\${([^{}]+)}|(?<!\\)\$([A-Za-z_][A-Za-z0-9_]*)/g;
|
|
16
|
-
let result = value;
|
|
17
|
-
let match;
|
|
18
|
-
const seen = /* @__PURE__ */ new Set();
|
|
19
|
-
while ((match = regex.exec(result)) !== null) {
|
|
20
|
-
seen.add(result);
|
|
21
|
-
const [template, bracedExpression, unbracedExpression] = match;
|
|
22
|
-
const expression = bracedExpression || unbracedExpression;
|
|
23
|
-
const opRegex = /(:\+|\+|:-|-)/;
|
|
24
|
-
const opMatch = expression.match(opRegex);
|
|
25
|
-
const splitter = opMatch ? opMatch[0] : null;
|
|
26
|
-
const r = expression.split(splitter);
|
|
27
|
-
let defaultValue;
|
|
28
|
-
let value2;
|
|
29
|
-
const key = r.shift();
|
|
30
|
-
if ([":+", "+"].includes(splitter)) {
|
|
31
|
-
defaultValue = env[key] ? r.join(splitter) : "";
|
|
32
|
-
value2 = null;
|
|
33
|
-
} else {
|
|
34
|
-
defaultValue = r.join(splitter);
|
|
35
|
-
value2 = env[key];
|
|
36
|
-
}
|
|
37
|
-
if (value2) {
|
|
38
|
-
if (seen.has(value2)) {
|
|
39
|
-
result = result.replace(template, defaultValue);
|
|
40
|
-
} else {
|
|
41
|
-
result = result.replace(template, value2);
|
|
42
|
-
}
|
|
43
|
-
} else {
|
|
44
|
-
result = result.replace(template, defaultValue);
|
|
45
|
-
}
|
|
46
|
-
if (result === runningParsed[key]) {
|
|
47
|
-
break;
|
|
48
|
-
}
|
|
49
|
-
regex.lastIndex = 0;
|
|
50
|
-
}
|
|
51
|
-
return result;
|
|
52
|
-
}
|
|
53
|
-
__name(expandValue, "expandValue");
|
|
54
|
-
function expand2(options) {
|
|
55
|
-
const runningParsed = {};
|
|
56
|
-
let processEnv = process.env;
|
|
57
|
-
if (options && options.processEnv != null) {
|
|
58
|
-
processEnv = options.processEnv;
|
|
59
|
-
}
|
|
60
|
-
for (const key in options.parsed) {
|
|
61
|
-
let value = options.parsed[key];
|
|
62
|
-
if (processEnv[key] && processEnv[key] !== value) {
|
|
63
|
-
value = processEnv[key];
|
|
64
|
-
} else {
|
|
65
|
-
value = expandValue(value, processEnv, runningParsed);
|
|
66
|
-
}
|
|
67
|
-
options.parsed[key] = _resolveEscapeSequences(value);
|
|
68
|
-
runningParsed[key] = _resolveEscapeSequences(value);
|
|
69
|
-
}
|
|
70
|
-
for (const processKey in options.parsed) {
|
|
71
|
-
processEnv[processKey] = options.parsed[processKey];
|
|
72
|
-
}
|
|
73
|
-
return options;
|
|
74
|
-
}
|
|
75
|
-
__name(expand2, "expand");
|
|
76
|
-
module.exports.expand = expand2;
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
// src/local-env.ts
|
|
81
|
-
var import_dotenv_expand = __toESM(require_main());
|
|
82
7
|
function getEnvPaths(envDir, mode) {
|
|
83
8
|
if (envDir === false) {
|
|
84
9
|
return [];
|
|
@@ -121,7 +46,7 @@ async function loadEnv(envDir, mode) {
|
|
|
121
46
|
}
|
|
122
47
|
}
|
|
123
48
|
const processEnv = copyProcessEnv();
|
|
124
|
-
|
|
49
|
+
expand({ parsed, processEnv: { ...processEnv } });
|
|
125
50
|
const values = { ...parsed };
|
|
126
51
|
const sources = { ...parsedSources };
|
|
127
52
|
for (const [key, value] of Object.entries(processEnv)) {
|
|
@@ -144,8 +69,8 @@ async function loadDevVars(envDir, mode) {
|
|
|
144
69
|
__name(loadDevVars, "loadDevVars");
|
|
145
70
|
async function tryParseFile(filePath, parse) {
|
|
146
71
|
try {
|
|
147
|
-
const
|
|
148
|
-
if (!
|
|
72
|
+
const stat = await fs.stat(filePath);
|
|
73
|
+
if (!stat.isFile() && !stat.isFIFO()) {
|
|
149
74
|
return;
|
|
150
75
|
}
|
|
151
76
|
return {
|
package/dist/local-env.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/dotenv-expand@13.0.0/node_modules/dotenv-expand/lib/main.js","../src/local-env.ts"],"names":["exports","value","expand","parseDotEnv","stat"],"mappings":"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","file":"local-env.mjs","sourcesContent":["'use strict'\n\nfunction _resolveEscapeSequences (value) {\n return value.replace(/\\\\\\$/g, '$')\n}\n\nfunction expandValue (value, processEnv, runningParsed) {\n const env = { ...runningParsed, ...processEnv } // process.env wins\n\n const regex = /(?<!\\\\)\\${([^{}]+)}|(?<!\\\\)\\$([A-Za-z_][A-Za-z0-9_]*)/g\n\n let result = value\n let match\n const seen = new Set() // self-referential checker\n\n while ((match = regex.exec(result)) !== null) {\n seen.add(result)\n\n const [template, bracedExpression, unbracedExpression] = match\n const expression = bracedExpression || unbracedExpression\n\n // match the operators `:+`, `+`, `:-`, and `-`\n const opRegex = /(:\\+|\\+|:-|-)/\n // find first match\n const opMatch = expression.match(opRegex)\n const splitter = opMatch ? opMatch[0] : null\n\n const r = expression.split(splitter)\n\n let defaultValue\n let value\n\n const key = r.shift()\n\n if ([':+', '+'].includes(splitter)) {\n defaultValue = env[key] ? r.join(splitter) : ''\n value = null\n } else {\n defaultValue = r.join(splitter)\n value = env[key]\n }\n\n if (value) {\n // self-referential check\n if (seen.has(value)) {\n result = result.replace(template, defaultValue)\n } else {\n result = result.replace(template, value)\n }\n } else {\n result = result.replace(template, defaultValue)\n }\n\n // if the result equaled what was in process.env and runningParsed then stop expanding\n if (result === runningParsed[key]) {\n break\n }\n\n regex.lastIndex = 0 // reset regex search position to re-evaluate after each replacement\n }\n\n return result\n}\n\nfunction expand (options) {\n // for use with progressive expansion\n const runningParsed = {}\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n // dotenv.config() ran before this so the assumption is process.env has already been set\n for (const key in options.parsed) {\n let value = options.parsed[key]\n\n // short-circuit scenario: process.env was already set prior to the file value\n if (processEnv[key] && processEnv[key] !== value) {\n value = processEnv[key]\n } else {\n value = expandValue(value, processEnv, runningParsed)\n }\n\n options.parsed[key] = _resolveEscapeSequences(value)\n\n // for use with progressive expansion\n runningParsed[key] = _resolveEscapeSequences(value)\n }\n\n for (const processKey in options.parsed) {\n processEnv[processKey] = options.parsed[processKey]\n }\n\n return options\n}\n\nmodule.exports.expand = expand\n","import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { parse as parseDotEnv } from \"dotenv\";\nimport { expand } from \"dotenv-expand\";\n\nexport type LocalEnvValueSource =\n\t| { type: \"file\"; path: string }\n\t| { type: \"process\" };\n\nexport interface LoadedEnv {\n\tvalues: Record<string, string>;\n\tsources: Record<string, LocalEnvValueSource>;\n}\n\ninterface ParsedFile {\n\tpath: string;\n\tvalues: Record<string, string>;\n}\n\n/**\n * Returns the local `.env` candidates in increasing precedence order.\n *\n * @param envDir The resolved environment directory. `false` disables file\n * loading, matching Vite's `envDir` convention.\n * @param mode The optional mode used for mode-specific files.\n * @returns Absolute candidate paths in load order.\n */\nexport function getEnvPaths(envDir: string | false, mode?: string): string[] {\n\tif (envDir === false) {\n\t\treturn [];\n\t}\n\n\tconst filenames = [\n\t\t\".env\",\n\t\t\".env.local\",\n\t\t...(mode === undefined ? [] : [`.env.${mode}`, `.env.${mode}.local`]),\n\t];\n\treturn filenames.map((filename) => path.resolve(envDir, filename));\n}\n\n/**\n * Returns the `.dev.vars` candidates in decreasing selection priority.\n *\n * @param envDir The resolved environment directory. `false` disables file\n * loading, matching Vite's `envDir` convention.\n * @param mode The optional mode used to select `.dev.vars.<mode>`.\n * @returns Absolute candidate paths in selection order.\n */\nexport function getDevVarsCandidatePaths(\n\tenvDir: string | false,\n\tmode?: string\n): string[] {\n\tif (envDir === false) {\n\t\treturn [];\n\t}\n\n\treturn [\n\t\t...(mode === undefined ? [] : [`.dev.vars.${mode}`]),\n\t\t\".dev.vars\",\n\t].map((filename) => path.resolve(envDir, filename));\n}\n\n/**\n * Loads local `.env` files using Vite-compatible file precedence and\n * Wrangler-compatible parsing and expansion.\n *\n * Expansion is progressive: references can use process values and values\n * declared earlier in the merged environment, but not values declared later.\n * Loading has no process-global side effects.\n *\n * @param envDir The resolved environment directory. `false` disables file\n * loading, matching Vite's `envDir` convention.\n * @param mode The optional mode used for mode-specific files.\n * @returns Resolved values and metadata describing their sources.\n */\nexport async function loadEnv(\n\tenvDir: string | false,\n\tmode?: string\n): Promise<LoadedEnv> {\n\tif (mode === \"local\") {\n\t\tthrow new Error(\n\t\t\t'\"local\" cannot be used as a mode name because it conflicts with the .local postfix for .env files.'\n\t\t);\n\t}\n\n\tconst candidateFiles = getEnvPaths(envDir, mode);\n\tconst parsed: Record<string, string> = {};\n\tconst parsedSources: Record<string, LocalEnvValueSource> = {};\n\n\tfor (const candidate of candidateFiles) {\n\t\tconst loaded = await tryParseFile(candidate, parseDotEnv);\n\t\tif (loaded === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tfor (const [key, value] of Object.entries(loaded.values)) {\n\t\t\tparsed[key] = value;\n\t\t\tparsedSources[key] = { type: \"file\", path: loaded.path };\n\t\t}\n\t}\n\n\tconst processEnv = copyProcessEnv();\n\texpand({ parsed, processEnv: { ...processEnv } });\n\n\tconst values = { ...parsed };\n\tconst sources = { ...parsedSources };\n\n\tfor (const [key, value] of Object.entries(processEnv)) {\n\t\tvalues[key] = value;\n\t\tsources[key] = { type: \"process\" };\n\t}\n\n\treturn { values, sources };\n}\n\n/**\n * Loads the first existing `.dev.vars` candidate without merging it with other\n * files or process-environment values.\n *\n * @param envDir The resolved environment directory. `false` disables file\n * loading, matching Vite's `envDir` convention.\n * @param mode The optional mode used to select `.dev.vars.<mode>`.\n * @returns The selected `.dev.vars` values, or `undefined` when no candidate exists.\n */\nexport async function loadDevVars(\n\tenvDir: string | false,\n\tmode?: string\n): Promise<Record<string, string> | undefined> {\n\tconst candidateFiles = getDevVarsCandidatePaths(envDir, mode);\n\tfor (const candidate of candidateFiles) {\n\t\tconst loaded = await tryParseFile(candidate, parseDotEnv);\n\t\tif (loaded === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn loaded.values;\n\t}\n}\n\nasync function tryParseFile(\n\tfilePath: string,\n\tparse: (contents: string) => Record<string, string>\n): Promise<ParsedFile | undefined> {\n\ttry {\n\t\tconst stat = await fs.stat(filePath);\n\t\tif (!stat.isFile() && !stat.isFIFO()) {\n\t\t\treturn;\n\t\t}\n\t\treturn {\n\t\t\tpath: filePath,\n\t\t\tvalues: parse(await fs.readFile(filePath, \"utf8\")),\n\t\t};\n\t} catch (error) {\n\t\tif (isMissingFileError(error)) {\n\t\t\treturn;\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nfunction isMissingFileError(error: unknown): boolean {\n\treturn (\n\t\terror instanceof Error &&\n\t\t\"code\" in error &&\n\t\t(error.code === \"ENOENT\" || error.code === \"ENOTDIR\")\n\t);\n}\n\nfunction copyProcessEnv(): Record<string, string> {\n\treturn Object.fromEntries(\n\t\tObject.entries(process.env).filter(\n\t\t\t(entry): entry is [string, string] => entry[1] !== undefined\n\t\t)\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/local-env.ts"],"names":["parseDotEnv"],"mappings":"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","file":"local-env.mjs","sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { parse as parseDotEnv } from \"dotenv\";\nimport { expand } from \"dotenv-expand\";\n\nexport type LocalEnvValueSource =\n\t| { type: \"file\"; path: string }\n\t| { type: \"process\" };\n\nexport interface LoadedEnv {\n\tvalues: Record<string, string>;\n\tsources: Record<string, LocalEnvValueSource>;\n}\n\ninterface ParsedFile {\n\tpath: string;\n\tvalues: Record<string, string>;\n}\n\n/**\n * Returns the local `.env` candidates in increasing precedence order.\n *\n * @param envDir The resolved environment directory. `false` disables file\n * loading, matching Vite's `envDir` convention.\n * @param mode The optional mode used for mode-specific files.\n * @returns Absolute candidate paths in load order.\n */\nexport function getEnvPaths(envDir: string | false, mode?: string): string[] {\n\tif (envDir === false) {\n\t\treturn [];\n\t}\n\n\tconst filenames = [\n\t\t\".env\",\n\t\t\".env.local\",\n\t\t...(mode === undefined ? [] : [`.env.${mode}`, `.env.${mode}.local`]),\n\t];\n\treturn filenames.map((filename) => path.resolve(envDir, filename));\n}\n\n/**\n * Returns the `.dev.vars` candidates in decreasing selection priority.\n *\n * @param envDir The resolved environment directory. `false` disables file\n * loading, matching Vite's `envDir` convention.\n * @param mode The optional mode used to select `.dev.vars.<mode>`.\n * @returns Absolute candidate paths in selection order.\n */\nexport function getDevVarsCandidatePaths(\n\tenvDir: string | false,\n\tmode?: string\n): string[] {\n\tif (envDir === false) {\n\t\treturn [];\n\t}\n\n\treturn [\n\t\t...(mode === undefined ? [] : [`.dev.vars.${mode}`]),\n\t\t\".dev.vars\",\n\t].map((filename) => path.resolve(envDir, filename));\n}\n\n/**\n * Loads local `.env` files using Vite-compatible file precedence and\n * Wrangler-compatible parsing and expansion.\n *\n * Expansion is progressive: references can use process values and values\n * declared earlier in the merged environment, but not values declared later.\n * Loading has no process-global side effects.\n *\n * @param envDir The resolved environment directory. `false` disables file\n * loading, matching Vite's `envDir` convention.\n * @param mode The optional mode used for mode-specific files.\n * @returns Resolved values and metadata describing their sources.\n */\nexport async function loadEnv(\n\tenvDir: string | false,\n\tmode?: string\n): Promise<LoadedEnv> {\n\tif (mode === \"local\") {\n\t\tthrow new Error(\n\t\t\t'\"local\" cannot be used as a mode name because it conflicts with the .local postfix for .env files.'\n\t\t);\n\t}\n\n\tconst candidateFiles = getEnvPaths(envDir, mode);\n\tconst parsed: Record<string, string> = {};\n\tconst parsedSources: Record<string, LocalEnvValueSource> = {};\n\n\tfor (const candidate of candidateFiles) {\n\t\tconst loaded = await tryParseFile(candidate, parseDotEnv);\n\t\tif (loaded === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tfor (const [key, value] of Object.entries(loaded.values)) {\n\t\t\tparsed[key] = value;\n\t\t\tparsedSources[key] = { type: \"file\", path: loaded.path };\n\t\t}\n\t}\n\n\tconst processEnv = copyProcessEnv();\n\texpand({ parsed, processEnv: { ...processEnv } });\n\n\tconst values = { ...parsed };\n\tconst sources = { ...parsedSources };\n\n\tfor (const [key, value] of Object.entries(processEnv)) {\n\t\tvalues[key] = value;\n\t\tsources[key] = { type: \"process\" };\n\t}\n\n\treturn { values, sources };\n}\n\n/**\n * Loads the first existing `.dev.vars` candidate without merging it with other\n * files or process-environment values.\n *\n * @param envDir The resolved environment directory. `false` disables file\n * loading, matching Vite's `envDir` convention.\n * @param mode The optional mode used to select `.dev.vars.<mode>`.\n * @returns The selected `.dev.vars` values, or `undefined` when no candidate exists.\n */\nexport async function loadDevVars(\n\tenvDir: string | false,\n\tmode?: string\n): Promise<Record<string, string> | undefined> {\n\tconst candidateFiles = getDevVarsCandidatePaths(envDir, mode);\n\tfor (const candidate of candidateFiles) {\n\t\tconst loaded = await tryParseFile(candidate, parseDotEnv);\n\t\tif (loaded === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn loaded.values;\n\t}\n}\n\nasync function tryParseFile(\n\tfilePath: string,\n\tparse: (contents: string) => Record<string, string>\n): Promise<ParsedFile | undefined> {\n\ttry {\n\t\tconst stat = await fs.stat(filePath);\n\t\tif (!stat.isFile() && !stat.isFIFO()) {\n\t\t\treturn;\n\t\t}\n\t\treturn {\n\t\t\tpath: filePath,\n\t\t\tvalues: parse(await fs.readFile(filePath, \"utf8\")),\n\t\t};\n\t} catch (error) {\n\t\tif (isMissingFileError(error)) {\n\t\t\treturn;\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nfunction isMissingFileError(error: unknown): boolean {\n\treturn (\n\t\terror instanceof Error &&\n\t\t\"code\" in error &&\n\t\t(error.code === \"ENOENT\" || error.code === \"ENOTDIR\")\n\t);\n}\n\nfunction copyProcessEnv(): Record<string, string> {\n\treturn Object.fromEntries(\n\t\tObject.entries(process.env).filter(\n\t\t\t(entry): entry is [string, string] => entry[1] !== undefined\n\t\t)\n\t);\n}\n"]}
|