@env-spec/parser 0.0.0 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +191 -0
- package/dist/chunk-FWOHTEQS.mjs +492 -0
- package/dist/chunk-FWOHTEQS.mjs.map +1 -0
- package/dist/chunk-JU4IPIOA.js +507 -0
- package/dist/chunk-JU4IPIOA.js.map +1 -0
- package/dist/classes-BGrn6GBW.d.mts +185 -0
- package/dist/classes-BGrn6GBW.d.ts +185 -0
- package/dist/index.d.mts +35 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.js +3757 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +3703 -0
- package/dist/index.mjs.map +1 -0
- package/dist/simple-resolver.d.mts +12 -0
- package/dist/simple-resolver.d.ts +12 -0
- package/dist/simple-resolver.js +91 -0
- package/dist/simple-resolver.js.map +1 -0
- package/dist/simple-resolver.mjs +89 -0
- package/dist/simple-resolver.mjs.map +1 -0
- package/package.json +42 -4
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { __name, ParsedEnvSpecStaticValue, ParsedEnvSpecFunctionCall, ParsedEnvSpecKeyValuePair } from './chunk-FWOHTEQS.mjs';
|
|
2
|
+
import { execSync } from 'node:child_process';
|
|
3
|
+
|
|
4
|
+
function simpleResolver(parsedEnvFile, opts) {
|
|
5
|
+
const resolved = {};
|
|
6
|
+
function valueResolver(valOrFn) {
|
|
7
|
+
if (valOrFn instanceof ParsedEnvSpecStaticValue) return valOrFn.unescapedValue;
|
|
8
|
+
if (valOrFn instanceof ParsedEnvSpecFunctionCall) {
|
|
9
|
+
if (valOrFn.name === "ref") {
|
|
10
|
+
const args = valOrFn.simplifiedArgs;
|
|
11
|
+
if (Array.isArray(args)) {
|
|
12
|
+
const refKeyName = args[0];
|
|
13
|
+
return opts?.env?.[refKeyName] ?? resolved[refKeyName] ?? "";
|
|
14
|
+
} else {
|
|
15
|
+
throw new Error("Invalid `ref` args");
|
|
16
|
+
}
|
|
17
|
+
} else if (valOrFn.name === "concat") {
|
|
18
|
+
const args = valOrFn.data.args.values;
|
|
19
|
+
const resolvedArgs = args.map((i) => {
|
|
20
|
+
if (i instanceof ParsedEnvSpecStaticValue) {
|
|
21
|
+
return valueResolver(i);
|
|
22
|
+
} else if (i instanceof ParsedEnvSpecFunctionCall) {
|
|
23
|
+
return valueResolver(i);
|
|
24
|
+
} else {
|
|
25
|
+
throw new Error("Invalid concat args");
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
return resolvedArgs.join("");
|
|
29
|
+
} else if (valOrFn.name === "exec") {
|
|
30
|
+
const args = valOrFn.simplifiedArgs;
|
|
31
|
+
if (Array.isArray(args)) {
|
|
32
|
+
const cmdStr = args[0];
|
|
33
|
+
return execSync(
|
|
34
|
+
cmdStr,
|
|
35
|
+
{
|
|
36
|
+
env: { ...resolved, ...opts?.env }
|
|
37
|
+
}
|
|
38
|
+
).toString().trim();
|
|
39
|
+
} else {
|
|
40
|
+
throw new Error("Invalid `exec` args");
|
|
41
|
+
}
|
|
42
|
+
} else if (valOrFn.name === "fallback") {
|
|
43
|
+
const args = valOrFn.data.args.values;
|
|
44
|
+
for (const arg of args) {
|
|
45
|
+
if (arg instanceof ParsedEnvSpecKeyValuePair) {
|
|
46
|
+
throw new Error("Invalid `fallback` arg - should not be key-value pair");
|
|
47
|
+
}
|
|
48
|
+
const resolvedArg = valueResolver(arg);
|
|
49
|
+
if (resolvedArg !== void 0 && resolvedArg !== "") return resolvedArg;
|
|
50
|
+
}
|
|
51
|
+
return void 0;
|
|
52
|
+
} else if (valOrFn.name === "remap") {
|
|
53
|
+
const args = valOrFn.data.args.data.values;
|
|
54
|
+
if (!(args[0] instanceof ParsedEnvSpecStaticValue) && !(args[0] instanceof ParsedEnvSpecFunctionCall)) throw new Error("Expected first arg to be a static value or function call");
|
|
55
|
+
const val = valueResolver(args[0]);
|
|
56
|
+
for (const remapArg of args.slice(1)) {
|
|
57
|
+
if (!(remapArg instanceof ParsedEnvSpecKeyValuePair)) {
|
|
58
|
+
throw new Error("`remap` args after first should all be key-value pairs");
|
|
59
|
+
}
|
|
60
|
+
const remapVal = valueResolver(remapArg.value);
|
|
61
|
+
if (val === remapVal) return remapArg.key;
|
|
62
|
+
}
|
|
63
|
+
return val;
|
|
64
|
+
} else {
|
|
65
|
+
throw new Error(`Unknown function: ${valOrFn.name}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
__name(valueResolver, "valueResolver");
|
|
70
|
+
for (const item of parsedEnvFile.configItems) {
|
|
71
|
+
if (opts?.env[item.key]) {
|
|
72
|
+
resolved[item.key] = opts.env[item.key];
|
|
73
|
+
} else {
|
|
74
|
+
item.processExpansion();
|
|
75
|
+
const resolvedValue = valueResolver(item.expandedValue);
|
|
76
|
+
if (opts?.stringify) {
|
|
77
|
+
resolved[item.key] = resolvedValue === void 0 ? "" : String(resolvedValue);
|
|
78
|
+
} else {
|
|
79
|
+
resolved[item.key] = resolvedValue;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return resolved;
|
|
84
|
+
}
|
|
85
|
+
__name(simpleResolver, "simpleResolver");
|
|
86
|
+
|
|
87
|
+
export { simpleResolver };
|
|
88
|
+
//# sourceMappingURL=simple-resolver.mjs.map
|
|
89
|
+
//# sourceMappingURL=simple-resolver.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/simple-resolver.ts"],"names":[],"mappings":"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","file":"simple-resolver.mjs","sourcesContent":["import { execSync } from 'node:child_process';\nimport {\n ParsedEnvSpecFile, ParsedEnvSpecFunctionCall, ParsedEnvSpecKeyValuePair, ParsedEnvSpecStaticValue,\n} from './classes.js';\n\n/**\n * very simple resolver meant to be used for testing\n * not currently exposed as part of public API\n * */\nexport function simpleResolver(\n parsedEnvFile: ParsedEnvSpecFile,\n opts?: {\n env: Record<string, string>;\n stringify?: boolean;\n },\n) {\n const resolved = {} as Record<string, any>;\n\n function valueResolver(valOrFn: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall): string | undefined {\n if (valOrFn instanceof ParsedEnvSpecStaticValue) return valOrFn.unescapedValue;\n if (valOrFn instanceof ParsedEnvSpecFunctionCall) {\n if (valOrFn.name === 'ref') {\n const args = valOrFn.simplifiedArgs;\n if (Array.isArray(args)) {\n const refKeyName = args[0];\n // passed in env takes precedence over resolved env\n return opts?.env?.[refKeyName] ?? resolved[refKeyName] ?? '';\n } else {\n throw new Error('Invalid `ref` args');\n }\n } else if (valOrFn.name === 'concat') {\n const args = valOrFn.data.args.values;\n const resolvedArgs = args.map((i) => {\n if (i instanceof ParsedEnvSpecStaticValue) {\n return valueResolver(i);\n } else if (i instanceof ParsedEnvSpecFunctionCall) {\n return valueResolver(i);\n } else {\n throw new Error('Invalid concat args');\n }\n });\n return resolvedArgs.join('');\n } else if (valOrFn.name === 'exec') {\n const args = valOrFn.simplifiedArgs;\n if (Array.isArray(args)) {\n const cmdStr = args[0];\n return execSync(\n cmdStr,\n {\n env: { ...resolved, ...opts?.env },\n },\n ).toString().trim();\n } else {\n throw new Error('Invalid `exec` args');\n }\n } else if (valOrFn.name === 'fallback') {\n const args = valOrFn.data.args.values;\n for (const arg of args) {\n if (arg instanceof ParsedEnvSpecKeyValuePair) {\n throw new Error('Invalid `fallback` arg - should not be key-value pair');\n }\n const resolvedArg = valueResolver(arg);\n if (resolvedArg !== undefined && resolvedArg !== '') return resolvedArg;\n }\n return undefined;\n } else if (valOrFn.name === 'remap') {\n const args = valOrFn.data.args.data.values;\n if (\n !(args[0] instanceof ParsedEnvSpecStaticValue)\n && !(args[0] instanceof ParsedEnvSpecFunctionCall)\n ) throw new Error('Expected first arg to be a static value or function call');\n const val = valueResolver(args[0]);\n for (const remapArg of args.slice(1)) {\n if (!(remapArg instanceof ParsedEnvSpecKeyValuePair)) {\n throw new Error('`remap` args after first should all be key-value pairs');\n }\n const remapVal = valueResolver(remapArg.value);\n if (val === remapVal) return remapArg.key;\n }\n return val;\n } else {\n throw new Error(`Unknown function: ${valOrFn.name}`);\n }\n }\n }\n\n for (const item of parsedEnvFile.configItems) {\n // passed in env takes precedence, but is only set if the the key is present\n if (opts?.env[item.key]) {\n resolved[item.key] = opts.env[item.key];\n } else {\n item.processExpansion();\n const resolvedValue = valueResolver(item.expandedValue!);\n if (opts?.stringify) {\n resolved[item.key] = resolvedValue === undefined ? '' : String(resolvedValue);\n } else {\n resolved[item.key] = resolvedValue;\n }\n }\n }\n return resolved;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,13 +1,51 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@env-spec/parser",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "Parser for @env-spec enabled dotenv files",
|
|
4
5
|
"repository": {
|
|
5
6
|
"type": "git",
|
|
6
|
-
"url": "
|
|
7
|
+
"url": "https://github.com/dmno-dev/varlock.git",
|
|
7
8
|
"directory": "packages/env-spec-parser"
|
|
8
9
|
},
|
|
9
|
-
"
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"import": "./dist/index.mjs",
|
|
17
|
+
"require": "./dist/index.js"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"env-spec",
|
|
22
|
+
"dotenv",
|
|
23
|
+
"env",
|
|
24
|
+
"env vars",
|
|
25
|
+
"environment variables",
|
|
26
|
+
"validation",
|
|
27
|
+
"schema",
|
|
28
|
+
"config"
|
|
29
|
+
],
|
|
10
30
|
"author": "dmno-dev",
|
|
11
31
|
"license": "MIT",
|
|
12
|
-
"
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@types/node": "^22.15.32",
|
|
34
|
+
"ansis": "^4.1.0",
|
|
35
|
+
"npm-run-all": "^4.1.5",
|
|
36
|
+
"peggy": "^4.2.0",
|
|
37
|
+
"tsup": "^8.2.4",
|
|
38
|
+
"vitest": "^3.2.4"
|
|
39
|
+
},
|
|
40
|
+
"scripts": {
|
|
41
|
+
"dev": "run-p dev:grammar dev:ts",
|
|
42
|
+
"dev:grammar": "pnpm run build:grammar -w",
|
|
43
|
+
"dev:ts": "tsup --watch",
|
|
44
|
+
"build:grammar": "peggy -c peggy.config.cjs",
|
|
45
|
+
"build:lib": "tsup",
|
|
46
|
+
"build": "pnpm run build:grammar && pnpm run build:lib",
|
|
47
|
+
"test": "run-p \"build:grammar -w\" _test:watch",
|
|
48
|
+
"_test:watch": "vitest",
|
|
49
|
+
"test:ci": "pnpm build:grammar && vitest --run"
|
|
50
|
+
}
|
|
13
51
|
}
|