@env-spec/parser 0.0.6 → 0.0.8

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.
@@ -1,4 +1,4 @@
1
- import { P as ParsedEnvSpecFile } from './classes-0XkzWf10.mjs';
1
+ import { P as ParsedEnvSpecFile } from './classes-Gq5ZJ7ej.mjs';
2
2
 
3
3
  /**
4
4
  * very simple resolver meant to be used for testing
@@ -1,4 +1,4 @@
1
- import { P as ParsedEnvSpecFile } from './classes-0XkzWf10.js';
1
+ import { P as ParsedEnvSpecFile } from './classes-Gq5ZJ7ej.js';
2
2
 
3
3
  /**
4
4
  * very simple resolver meant to be used for testing
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkQIAK725N_js = require('./chunk-QIAK725N.js');
3
+ var chunkJWF7I3Y2_js = require('./chunk-JWF7I3Y2.js');
4
4
  var child_process = require('child_process');
5
5
 
6
6
  function simpleResolver(parsedEnvFile, opts) {
7
7
  const resolved = {};
8
8
  function valueResolver(valOrFn) {
9
- if (valOrFn instanceof chunkQIAK725N_js.ParsedEnvSpecStaticValue) return valOrFn.unescapedValue;
10
- if (valOrFn instanceof chunkQIAK725N_js.ParsedEnvSpecFunctionCall) {
9
+ if (valOrFn instanceof chunkJWF7I3Y2_js.ParsedEnvSpecStaticValue) return valOrFn.unescapedValue;
10
+ if (valOrFn instanceof chunkJWF7I3Y2_js.ParsedEnvSpecFunctionCall) {
11
11
  if (valOrFn.name === "ref") {
12
12
  const args = valOrFn.simplifiedArgs;
13
13
  if (Array.isArray(args)) {
@@ -19,9 +19,9 @@ function simpleResolver(parsedEnvFile, opts) {
19
19
  } else if (valOrFn.name === "concat") {
20
20
  const args = valOrFn.data.args.values;
21
21
  const resolvedArgs = args.map((i) => {
22
- if (i instanceof chunkQIAK725N_js.ParsedEnvSpecStaticValue) {
22
+ if (i instanceof chunkJWF7I3Y2_js.ParsedEnvSpecStaticValue) {
23
23
  return valueResolver(i);
24
- } else if (i instanceof chunkQIAK725N_js.ParsedEnvSpecFunctionCall) {
24
+ } else if (i instanceof chunkJWF7I3Y2_js.ParsedEnvSpecFunctionCall) {
25
25
  return valueResolver(i);
26
26
  } else {
27
27
  throw new Error("Invalid concat args");
@@ -44,7 +44,7 @@ function simpleResolver(parsedEnvFile, opts) {
44
44
  } else if (valOrFn.name === "fallback") {
45
45
  const args = valOrFn.data.args.values;
46
46
  for (const arg of args) {
47
- if (arg instanceof chunkQIAK725N_js.ParsedEnvSpecKeyValuePair) {
47
+ if (arg instanceof chunkJWF7I3Y2_js.ParsedEnvSpecKeyValuePair) {
48
48
  throw new Error("Invalid `fallback` arg - should not be key-value pair");
49
49
  }
50
50
  const resolvedArg = valueResolver(arg);
@@ -53,10 +53,10 @@ function simpleResolver(parsedEnvFile, opts) {
53
53
  return void 0;
54
54
  } else if (valOrFn.name === "remap") {
55
55
  const args = valOrFn.data.args.data.values;
56
- if (!(args[0] instanceof chunkQIAK725N_js.ParsedEnvSpecStaticValue) && !(args[0] instanceof chunkQIAK725N_js.ParsedEnvSpecFunctionCall)) throw new Error("Expected first arg to be a static value or function call");
56
+ if (!(args[0] instanceof chunkJWF7I3Y2_js.ParsedEnvSpecStaticValue) && !(args[0] instanceof chunkJWF7I3Y2_js.ParsedEnvSpecFunctionCall)) throw new Error("Expected first arg to be a static value or function call");
57
57
  const val = valueResolver(args[0]);
58
58
  for (const remapArg of args.slice(1)) {
59
- if (!(remapArg instanceof chunkQIAK725N_js.ParsedEnvSpecKeyValuePair)) {
59
+ if (!(remapArg instanceof chunkJWF7I3Y2_js.ParsedEnvSpecKeyValuePair)) {
60
60
  throw new Error("`remap` args after first should all be key-value pairs");
61
61
  }
62
62
  const remapVal = valueResolver(remapArg.value);
@@ -68,13 +68,12 @@ function simpleResolver(parsedEnvFile, opts) {
68
68
  }
69
69
  }
70
70
  }
71
- chunkQIAK725N_js.__name(valueResolver, "valueResolver");
71
+ chunkJWF7I3Y2_js.__name(valueResolver, "valueResolver");
72
72
  for (const item of parsedEnvFile.configItems) {
73
73
  if (opts?.env[item.key]) {
74
74
  resolved[item.key] = opts.env[item.key];
75
75
  } else {
76
- item.processExpansion();
77
- const resolvedValue = valueResolver(item.expandedValue);
76
+ const resolvedValue = item.value ? valueResolver(item.value) : void 0;
78
77
  if (opts?.stringify) {
79
78
  resolved[item.key] = resolvedValue === void 0 ? "" : String(resolvedValue);
80
79
  } else {
@@ -84,7 +83,7 @@ function simpleResolver(parsedEnvFile, opts) {
84
83
  }
85
84
  return resolved;
86
85
  }
87
- chunkQIAK725N_js.__name(simpleResolver, "simpleResolver");
86
+ chunkJWF7I3Y2_js.__name(simpleResolver, "simpleResolver");
88
87
 
89
88
  exports.simpleResolver = simpleResolver;
90
89
  //# sourceMappingURL=simple-resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/simple-resolver.ts"],"names":["ParsedEnvSpecStaticValue","ParsedEnvSpecFunctionCall","execSync","ParsedEnvSpecKeyValuePair","__name"],"mappings":"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","file":"simple-resolver.js","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"]}
1
+ {"version":3,"sources":["../src/simple-resolver.ts"],"names":["ParsedEnvSpecStaticValue","ParsedEnvSpecFunctionCall","execSync","ParsedEnvSpecKeyValuePair","__name"],"mappings":"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","file":"simple-resolver.js","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 const resolvedValue = item.value ? valueResolver(item.value) : undefined;\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"]}
@@ -1,4 +1,4 @@
1
- import { __name, ParsedEnvSpecStaticValue, ParsedEnvSpecFunctionCall, ParsedEnvSpecKeyValuePair } from './chunk-TP5IOHGP.mjs';
1
+ import { __name, ParsedEnvSpecStaticValue, ParsedEnvSpecFunctionCall, ParsedEnvSpecKeyValuePair } from './chunk-FDDTJES3.mjs';
2
2
  import { execSync } from 'child_process';
3
3
 
4
4
  function simpleResolver(parsedEnvFile, opts) {
@@ -71,8 +71,7 @@ function simpleResolver(parsedEnvFile, opts) {
71
71
  if (opts?.env[item.key]) {
72
72
  resolved[item.key] = opts.env[item.key];
73
73
  } else {
74
- item.processExpansion();
75
- const resolvedValue = valueResolver(item.expandedValue);
74
+ const resolvedValue = item.value ? valueResolver(item.value) : void 0;
76
75
  if (opts?.stringify) {
77
76
  resolved[item.key] = resolvedValue === void 0 ? "" : String(resolvedValue);
78
77
  } else {
@@ -1 +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"]}
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 const resolvedValue = item.value ? valueResolver(item.value) : undefined;\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,6 +1,6 @@
1
1
  {
2
2
  "name": "@env-spec/parser",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
4
4
  "description": "Parser for @env-spec enabled dotenv files",
5
5
  "repository": {
6
6
  "type": "git",
@@ -31,12 +31,12 @@
31
31
  "author": "dmno-dev",
32
32
  "license": "MIT",
33
33
  "devDependencies": {
34
- "@types/node": "^24.3.0",
35
- "ansis": "^4.1.0",
34
+ "@types/node": "24.9.2",
35
+ "ansis": "^4.2.0",
36
36
  "npm-run-all": "^4.1.5",
37
37
  "peggy": "^5.0.6",
38
38
  "tsup": "^8.5.0",
39
- "vitest": "^3.2.4"
39
+ "vitest": "^4.0.6"
40
40
  },
41
41
  "scripts": {
42
42
  "dev": "run-p dev:grammar dev:ts",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/helpers.ts","../src/classes.ts","../src/expand.ts"],"names":[],"mappings":"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","file":"chunk-QIAK725N.js","sourcesContent":["const VALID_NUMBER_REGEX = /^(0|([1-9][0-9]*))?(\\.[0-9]+)?$/;\nexport function autoCoerce(valStr) {\n if (valStr === 'true') return true;\n if (valStr === 'false') return false;\n if (valStr === 'undefined') return undefined;\n // not handling `null` because its a JS specific thing... we'll try to avoid it altogether\n\n // special check to avoid weird number coercion like `01`, `1e10`\n if (VALID_NUMBER_REGEX.test(valStr)) return Number(valStr);\n return valStr;\n}\n","import { expand } from './expand';\nimport { autoCoerce } from './helpers';\n\nexport class ParsedEnvSpecDivider {\n constructor(public data: {\n contents: string;\n leadingSpace?: string;\n _location?: any;\n }) {}\n\n toString() {\n return `#${this.data.leadingSpace || ''}${this.data.contents}`;\n }\n}\n\nexport class ParsedEnvSpecStaticValue {\n value: any;\n\n constructor(public data: {\n rawValue: any;\n quote?: '\"' | \"'\" | '`' | undefined;\n isImplicit?: boolean;\n _location?: any;\n }) {\n if (!data.quote) {\n // unquoted strings will get trimmed (leading/trailing spaces)\n if (typeof data.rawValue === 'string') {\n const trimmed = data.rawValue.trim();\n // trimmed empty string without quotes gets treated as undefined\n if (trimmed === '') this.value = undefined;\n else this.value = autoCoerce(trimmed);\n } else {\n this.value = autoCoerce(data.rawValue);\n }\n } else {\n const quoteChar = data.quote.substring(0, 1);\n this.value = data.rawValue\n .slice(data.quote.length, -1 * data.quote.length)\n .replaceAll(`\\\\${quoteChar}`, quoteChar);\n }\n }\n\n get unescapedValue() {\n if (typeof this.value !== 'string') return this.value;\n let unescaped = this.value;\n // replace escaped \"$\" (if not in single quotes)\n if (this.data.quote !== \"'\") {\n unescaped = unescaped.replaceAll('\\\\$', '$');\n }\n // replace escaped newlines (if not double quotes or backticks)\n if (this.data.quote === '\"' || this.data.quote === '`') {\n unescaped = unescaped.replaceAll('\\\\n', '\\n');\n }\n return unescaped;\n }\n\n toString() {\n // TODO: smarter logic to preserve the original value\n // for example with this logic, we may see 123.0 -> 123\n let strVal = String(this.value);\n if (this.data.quote) {\n strVal = strVal.replaceAll(this.data.quote, `\\\\${this.data.quote}`);\n }\n return `${this.data.quote || ''}${strVal}${this.data.quote || ''}`;\n }\n}\n\nexport class ParsedEnvSpecKeyValuePair {\n constructor(public data: {\n key: string;\n\n val: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall;\n }) {}\n\n get key() {\n return this.data.key;\n }\n\n get value() {\n return this.data.val;\n }\n\n toString() {\n return `${this.key}=${this.data.val.toString()}`;\n }\n}\nexport class ParsedEnvSpecFunctionArgs {\n constructor(public data: {\n\n values: Array<ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecKeyValuePair>;\n _location?: any;\n }) {}\n\n get values() {\n return this.data.values;\n }\n\n get simplifiedValues(): Array<any> | Record<string, any> {\n if (this.data.values.length === 0) return [];\n const vals = this.data.values;\n if (vals.every((i) => i instanceof ParsedEnvSpecStaticValue)) {\n return vals.map((val) => val.value);\n } else if (vals.every((i) => i instanceof ParsedEnvSpecKeyValuePair)) {\n const obj = {} as Record<string, any>;\n vals.forEach((val) => {\n if (val.value instanceof ParsedEnvSpecStaticValue) {\n obj[val.key] = val.value.value;\n }\n });\n return obj;\n } else {\n throw new Error('Invalid function args');\n }\n }\n\n toString() {\n let s = '(';\n s += this.data.values.map((val) => val.toString()).join(', ');\n s += ')';\n return s;\n }\n}\n\nexport class ParsedEnvSpecFunctionCall {\n constructor(public data: {\n name: string;\n args: ParsedEnvSpecFunctionArgs;\n _location?: any;\n }) {}\n\n get name() {\n return this.data.name;\n }\n get simplifiedArgs() {\n return this.data.args.simplifiedValues;\n }\n\n toString() {\n // args will include the `()`\n return this.data.name + this.data.args.toString();\n }\n}\n\n\nexport class ParsedEnvSpecDecorator {\n constructor(public data: {\n name: string;\n valueOrFnArgs: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs | undefined;\n _location?: any;\n }) {\n }\n\n get name() {\n return this.data.name;\n }\n\n get bareFnArgs() {\n if (this.data.valueOrFnArgs && this.data.valueOrFnArgs instanceof ParsedEnvSpecFunctionArgs) {\n return this.data.valueOrFnArgs;\n }\n }\n\n get value() {\n // bare decorator is equivalent to `@decorator=true`\n // `@required` === `@required=true`\n if (!this.data.valueOrFnArgs) {\n return new ParsedEnvSpecStaticValue({ rawValue: true, isImplicit: true });\n } else if (!(this.data.valueOrFnArgs instanceof ParsedEnvSpecFunctionArgs)) {\n return this.data.valueOrFnArgs;\n }\n }\n get simplifiedValue() {\n if (this.value instanceof ParsedEnvSpecStaticValue) {\n return this.value.value;\n }\n }\n\n toString() {\n let s = `@${this.name}`;\n if (!this.data.valueOrFnArgs) return s; // bare decorator, ex: `@required`\n // bare fn call looks like `@import(asdf)` so no `=`\n if (!(this.data.valueOrFnArgs instanceof ParsedEnvSpecFunctionArgs)) s += '=';\n // let the value stringify itself\n s += this.data.valueOrFnArgs.toString();\n return s;\n }\n}\n\n\nexport class ParsedEnvSpecComment {\n constructor(public data: {\n contents: string;\n leadingSpace?: string;\n _location?: any;\n }) {}\n\n get contents() {\n return this.data.contents;\n }\n\n toString() {\n return `#${this.data.leadingSpace || ''}${this.data.contents}`;\n }\n}\nexport class ParsedEnvSpecDecoratorComment {\n constructor(public data: {\n decorators: Array<ParsedEnvSpecDecorator>;\n leadingSpace?: string;\n postComment?: any;\n _location?: any;\n }) {}\n\n get decorators() {\n return this.data.decorators;\n }\n\n get postComment() {\n return this.data.postComment;\n }\n\n toString() {\n let s = '#';\n s += this.data.leadingSpace || '';\n s += this.data.decorators.map((d) => d.toString()).join(' ');\n if (this.data.postComment) s += ` ${this.data.postComment.toString()}`;\n return s;\n }\n}\n\nexport type ParsedEnvSpecDecoratorValue = (\n ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs\n);\n\nfunction getDecoratorsObject(\n comments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment | undefined>,\n) {\n const decObj = {} as Record<string, ParsedEnvSpecDecorator>;\n comments.forEach((comment) => {\n if (comment instanceof ParsedEnvSpecDecoratorComment) {\n comment.decorators.forEach((decorator) => {\n decObj[decorator.name] = decorator;\n });\n }\n });\n return decObj;\n}\n\nfunction getDecoratorsArray(\n comments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment | undefined>,\n) {\n const decArr = [] as Array<ParsedEnvSpecDecorator>;\n comments.forEach((comment) => {\n if (comment instanceof ParsedEnvSpecDecoratorComment) {\n decArr.push(...comment.decorators);\n }\n });\n return decArr;\n}\n\nexport class ParsedEnvSpecCommentBlock {\n constructor(public data: {\n comments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment>;\n divider: ParsedEnvSpecDivider | null;\n _location?: any;\n }) {}\n\n get comments() {\n return this.data.comments;\n }\n\n get divider() {\n return this.data.divider || undefined;\n }\n\n get decoratorsObject() {\n return getDecoratorsObject(this.data.comments);\n }\n get decoratorsArray() {\n return getDecoratorsArray(this.data.comments);\n }\n\n toString() {\n return [\n ...this.data.comments.map((comment) => comment.toString()),\n ...this.data.divider ? [this.data.divider.toString()] : [],\n ].join('\\n');\n }\n}\n\nexport class ParsedEnvSpecBlankLine {\n constructor(public data: {\n _location?: any;\n }) {}\n\n toString() {\n return '';\n }\n}\n\n\nexport class ParsedEnvSpecConfigItem {\n expandedValue: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | undefined;\n\n constructor(public data: {\n key: string;\n value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | undefined;\n preComments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment>;\n postComment: ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment | undefined;\n _location?: any;\n }) {}\n\n get key() {\n return this.data.key;\n }\n get value() {\n // no value is equivalent to `undefined`\n // `ITEM=` === `ITEM=undefined`\n if (!this.data.value) {\n return new ParsedEnvSpecStaticValue({ rawValue: undefined, isImplicit: true });\n }\n return this.data.value;\n }\n\n get decoratorsObject() {\n return getDecoratorsObject([...this.data.preComments, this.data.postComment]);\n }\n\n get description() {\n const regularComments = this.data.preComments.filter((comment) => (comment instanceof ParsedEnvSpecComment));\n return regularComments.map((comment) => comment.contents).join('\\n');\n }\n\n processExpansion(_opts?: {}) {\n if (this.data.value) {\n const expanded = expand(this.data.value);\n if (expanded instanceof ParsedEnvSpecKeyValuePair) throw new Error('Nested key-value pair found in config item');\n this.expandedValue = expanded;\n } else {\n this.expandedValue = undefined;\n }\n }\n\n private get resolverDef() {\n if (!this.data.value) {\n return {\n type: 'static' as const,\n value: undefined,\n };\n } else if (this.data.value instanceof ParsedEnvSpecStaticValue) {\n return {\n type: 'static' as const,\n value: this.data.value.value,\n };\n } else if (this.data.value instanceof ParsedEnvSpecFunctionCall) {\n return {\n type: 'function' as const,\n functionName: this.data.value.name,\n functionArgs: this.data.value.simplifiedArgs,\n };\n } else {\n throw new Error('Unknown value resolver type');\n }\n }\n\n toString() {\n let s = '';\n for (const comment of this.data.preComments) s += `${comment.toString()}\\n`;\n s += `${this.key}=`;\n if (this.data.value) s += `${this.data.value.toString()}`;\n if (this.data.postComment) s += ` ${this.data.postComment.toString()}`;\n return s;\n }\n}\n\n// these are the 4 types that can be at the root level\ntype ParsedEnvSpecFileNode = ParsedEnvSpecCommentBlock\n | ParsedEnvSpecDivider\n | ParsedEnvSpecConfigItem\n | ParsedEnvSpecBlankLine;\n\n\nexport class ParsedEnvSpecFile {\n contents: Array<ParsedEnvSpecFileNode>;\n constructor(_contents: Array<ParsedEnvSpecFileNode>) {\n this.contents = _contents;\n }\n\n get configItems() {\n return this.contents.filter((item) => item instanceof ParsedEnvSpecConfigItem);\n }\n get header() {\n // header is a comment block at the the start of the file that ends with a divider\n // it may be preceeded by blank lines only\n for (const item of this.contents) {\n if (item instanceof ParsedEnvSpecCommentBlock && item.divider) {\n return item;\n } else if (!(item instanceof ParsedEnvSpecBlankLine)) {\n return;\n }\n }\n }\n get decoratorsObject() {\n return this.header?.decoratorsObject ?? {};\n }\n get decoratorsArray() {\n return this.header?.decoratorsArray ?? [];\n }\n\n toString() {\n return this.contents.map((item) => item.toString()).join('\\n');\n }\n /**\n * simple helper to convert an object in a basic case\n * mostly useful for comparison with other env parsers\n * */\n toSimpleObj() {\n const obj = {} as Record<string, any>;\n for (const item of this.contents) {\n if (item instanceof ParsedEnvSpecConfigItem) {\n if (item.value instanceof ParsedEnvSpecStaticValue) {\n obj[item.key] = item.value.value ?? '';\n }\n }\n }\n return obj;\n }\n}\n","import {\n ParsedEnvSpecFunctionArgs, ParsedEnvSpecFunctionCall, ParsedEnvSpecKeyValuePair, ParsedEnvSpecStaticValue,\n} from './classes';\n\n// const EXPAND_VAR_REGEX_WITH_SIMPLE = /\\$({([a-zA-Z_][a-zA-Z0-9_.]*)}|([a-zA-Z_][a-zA-Z0-9_]*))/g;\nconst EXPAND_VAR_BRACKETED_REGEX = /(?<!\\\\)\\${([a-zA-Z_][a-zA-Z0-9_.]*)((:?-)([^}]+))?}/g;\nconst EXPAND_VAR_SIMPLE_REGEX = /(?<!\\\\)\\$([a-zA-Z_][a-zA-Z0-9_]*)/g;\nconst EXPAND_EXEC_REGEX = /\\$\\(([^)]+)\\)/g;\n\n\ntype ParsedEnvSpecValueNode = ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecKeyValuePair;\n\nfunction expandExecs(staticVal: ParsedEnvSpecStaticValue, _opts?: {}) {\n if (typeof staticVal.value !== 'string') return staticVal;\n const quote = staticVal.data.quote;\n const quoteStr = quote ?? '';\n // single quoted strings are not expanded!\n if (quote === \"'\") return staticVal;\n\n const execMatches = Array.from(staticVal.value.matchAll(EXPAND_EXEC_REGEX));\n\n // if no matches - we just return the original value\n if (execMatches.length === 0) return staticVal;\n\n // otherwise, we expand the transform each match into `exec` fn calls\n // and return a concat with everything together\n let lastIndex = 0;\n const parts = [] as Array<ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall>;\n for (const match of execMatches) {\n // extract text before exec -- ex: `pretext-$(exec command)`\n if (lastIndex < match.index) {\n const preText = staticVal.value.slice(lastIndex, match.index);\n parts.push(new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${preText}${quoteStr}`, quote }));\n }\n\n // extract exec command\n const shellCmd = match[1];\n parts.push(new ParsedEnvSpecFunctionCall({\n name: 'exec',\n args: new ParsedEnvSpecFunctionArgs({\n values: [new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${shellCmd}${quoteStr}`, quote })],\n }),\n }));\n lastIndex = match.index + match[0].length;\n }\n // extract any remaining text after the last exec\n if (lastIndex < staticVal.value.length) {\n const postText = staticVal.value.slice(lastIndex);\n parts.push(new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${postText}${quoteStr}`, quote }));\n }\n\n // if there's only one part, we can just return it (ex: `VAR=$(whoami)`)\n if (parts.length === 1) return parts[0];\n // otherwise we concat all the parts together\n return new ParsedEnvSpecFunctionCall({\n name: 'concat',\n args: new ParsedEnvSpecFunctionArgs({\n values: parts,\n }),\n });\n}\n\nfunction expandRefs(staticVal: ParsedEnvSpecStaticValue, mode: 'simple' | 'bracketed') {\n if (typeof staticVal.value !== 'string') return staticVal;\n const quote = staticVal.data.quote;\n const quoteStr = quote ?? '';\n if (quote === \"'\") return staticVal;\n\n const varMatches = Array.from(staticVal.value.matchAll(mode === 'simple' ? EXPAND_VAR_SIMPLE_REGEX : EXPAND_VAR_BRACKETED_REGEX));\n if (varMatches.length === 0) return staticVal;\n\n let lastIndex = 0;\n const parts = [] as Array<any>;\n for (const match of varMatches) {\n // extract text before exec\n if (lastIndex < match.index) {\n const preText = staticVal.value.slice(lastIndex, match.index);\n parts.push(new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${preText}${quoteStr}`, quote }));\n }\n\n // extract var\n const varName = match[1];\n let defaultOperator: string | undefined; // ex: \":-\" or \"-\"\n let defaultVal: string | undefined; // currently not doing any fancy parsing on this, will just be a string\n if (mode === 'bracketed') {\n // TODO: do we want to support different behaviour based on the operator?\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n defaultOperator = match[3];\n defaultVal = match[4];\n }\n const refFnCall = new ParsedEnvSpecFunctionCall({\n name: 'ref',\n args: new ParsedEnvSpecFunctionArgs({\n values: [new ParsedEnvSpecStaticValue({ rawValue: varName })],\n }),\n });\n if (defaultVal) {\n parts.push(new ParsedEnvSpecFunctionCall({\n name: 'fallback',\n args: new ParsedEnvSpecFunctionArgs({\n values: [refFnCall, new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${defaultVal}${quoteStr}`, quote })],\n }),\n }));\n } else {\n parts.push(refFnCall);\n }\n lastIndex = match.index + match[0].length;\n }\n if (lastIndex < staticVal.value.length) {\n const postText = staticVal.value.slice(lastIndex);\n parts.push(new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${postText}${quoteStr}`, quote }));\n }\n\n // if only a single part, just return it (ex: `VAR=${OTHERVAR}`)\n if (parts.length === 1) return parts[0];\n // otherwise, concat all the parts together\n return new ParsedEnvSpecFunctionCall({\n name: 'concat',\n args: new ParsedEnvSpecFunctionArgs({\n values: parts,\n }),\n });\n}\n\n/**\n * helper used by expansion to recursively expand values\n * */\nfunction expandHelper(\n val: ParsedEnvSpecValueNode,\n expandStaticFn: (staticVal: ParsedEnvSpecStaticValue) => ParsedEnvSpecValueNode,\n): ParsedEnvSpecValueNode {\n // if function call, expand each arg\n if (val instanceof ParsedEnvSpecFunctionCall) {\n const fnName = val.name;\n // expand each arg, and then flatten unnecessery nested concat fns\n const newConcatArgs = [] as Array<ParsedEnvSpecValueNode>;\n val.data.args.values.forEach((v) => {\n const expandedArg = expandHelper(v, expandStaticFn);\n // special case for concat so we flatten unnecessery nested concat fns\n if (\n fnName === 'concat'\n && expandedArg instanceof ParsedEnvSpecFunctionCall\n && expandedArg.name === 'concat'\n ) {\n newConcatArgs.push(...expandedArg.data.args.values);\n } else {\n newConcatArgs.push(expandedArg);\n }\n });\n\n return new ParsedEnvSpecFunctionCall({\n name: fnName,\n args: new ParsedEnvSpecFunctionArgs({\n values: newConcatArgs,\n }),\n });\n // if key-value pair, expand value\n } else if (val instanceof ParsedEnvSpecKeyValuePair) {\n const expandedVal = expandHelper(val.value, expandStaticFn);\n if (expandedVal instanceof ParsedEnvSpecKeyValuePair) throw new Error('Nested key-value pair found in concat');\n return new ParsedEnvSpecKeyValuePair({\n key: val.key,\n val: expandedVal,\n });\n } else if (val instanceof ParsedEnvSpecStaticValue) {\n // here we actually do the expansion on string values\n\n // skip expansion if value is number/boolean/etc\n if (typeof val.value !== 'string') return val;\n // skip expansion on single-quoted strings\n if (val.data.quote === \"'\") return val;\n\n return expandStaticFn(val);\n }\n throw new Error('Unknown value type');\n}\n\n/**\n * takes in a value node and runs expansion (execs, refs) according to options\n * returns a new value node with all expansions applied\n * */\nexport function expand(\n val: ParsedEnvSpecValueNode,\n // TODO: add options to enable/disable specific expansion types and handling\n _opts?: {},\n): ParsedEnvSpecValueNode {\n // TODO: add options\n let expandedVal = val;\n expandedVal = expandHelper(expandedVal, (v) => expandExecs(v));\n expandedVal = expandHelper(expandedVal, (v) => expandRefs(v, 'simple'));\n expandedVal = expandHelper(expandedVal, (v) => expandRefs(v, 'bracketed'));\n return expandedVal;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/helpers.ts","../src/classes.ts","../src/expand.ts"],"names":[],"mappings":"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","file":"chunk-TP5IOHGP.mjs","sourcesContent":["const VALID_NUMBER_REGEX = /^(0|([1-9][0-9]*))?(\\.[0-9]+)?$/;\nexport function autoCoerce(valStr) {\n if (valStr === 'true') return true;\n if (valStr === 'false') return false;\n if (valStr === 'undefined') return undefined;\n // not handling `null` because its a JS specific thing... we'll try to avoid it altogether\n\n // special check to avoid weird number coercion like `01`, `1e10`\n if (VALID_NUMBER_REGEX.test(valStr)) return Number(valStr);\n return valStr;\n}\n","import { expand } from './expand';\nimport { autoCoerce } from './helpers';\n\nexport class ParsedEnvSpecDivider {\n constructor(public data: {\n contents: string;\n leadingSpace?: string;\n _location?: any;\n }) {}\n\n toString() {\n return `#${this.data.leadingSpace || ''}${this.data.contents}`;\n }\n}\n\nexport class ParsedEnvSpecStaticValue {\n value: any;\n\n constructor(public data: {\n rawValue: any;\n quote?: '\"' | \"'\" | '`' | undefined;\n isImplicit?: boolean;\n _location?: any;\n }) {\n if (!data.quote) {\n // unquoted strings will get trimmed (leading/trailing spaces)\n if (typeof data.rawValue === 'string') {\n const trimmed = data.rawValue.trim();\n // trimmed empty string without quotes gets treated as undefined\n if (trimmed === '') this.value = undefined;\n else this.value = autoCoerce(trimmed);\n } else {\n this.value = autoCoerce(data.rawValue);\n }\n } else {\n const quoteChar = data.quote.substring(0, 1);\n this.value = data.rawValue\n .slice(data.quote.length, -1 * data.quote.length)\n .replaceAll(`\\\\${quoteChar}`, quoteChar);\n }\n }\n\n get unescapedValue() {\n if (typeof this.value !== 'string') return this.value;\n let unescaped = this.value;\n // replace escaped \"$\" (if not in single quotes)\n if (this.data.quote !== \"'\") {\n unescaped = unescaped.replaceAll('\\\\$', '$');\n }\n // replace escaped newlines (if not double quotes or backticks)\n if (this.data.quote === '\"' || this.data.quote === '`') {\n unescaped = unescaped.replaceAll('\\\\n', '\\n');\n }\n return unescaped;\n }\n\n toString() {\n // TODO: smarter logic to preserve the original value\n // for example with this logic, we may see 123.0 -> 123\n let strVal = String(this.value);\n if (this.data.quote) {\n strVal = strVal.replaceAll(this.data.quote, `\\\\${this.data.quote}`);\n }\n return `${this.data.quote || ''}${strVal}${this.data.quote || ''}`;\n }\n}\n\nexport class ParsedEnvSpecKeyValuePair {\n constructor(public data: {\n key: string;\n\n val: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall;\n }) {}\n\n get key() {\n return this.data.key;\n }\n\n get value() {\n return this.data.val;\n }\n\n toString() {\n return `${this.key}=${this.data.val.toString()}`;\n }\n}\nexport class ParsedEnvSpecFunctionArgs {\n constructor(public data: {\n\n values: Array<ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecKeyValuePair>;\n _location?: any;\n }) {}\n\n get values() {\n return this.data.values;\n }\n\n get simplifiedValues(): Array<any> | Record<string, any> {\n if (this.data.values.length === 0) return [];\n const vals = this.data.values;\n if (vals.every((i) => i instanceof ParsedEnvSpecStaticValue)) {\n return vals.map((val) => val.value);\n } else if (vals.every((i) => i instanceof ParsedEnvSpecKeyValuePair)) {\n const obj = {} as Record<string, any>;\n vals.forEach((val) => {\n if (val.value instanceof ParsedEnvSpecStaticValue) {\n obj[val.key] = val.value.value;\n }\n });\n return obj;\n } else {\n throw new Error('Invalid function args');\n }\n }\n\n toString() {\n let s = '(';\n s += this.data.values.map((val) => val.toString()).join(', ');\n s += ')';\n return s;\n }\n}\n\nexport class ParsedEnvSpecFunctionCall {\n constructor(public data: {\n name: string;\n args: ParsedEnvSpecFunctionArgs;\n _location?: any;\n }) {}\n\n get name() {\n return this.data.name;\n }\n get simplifiedArgs() {\n return this.data.args.simplifiedValues;\n }\n\n toString() {\n // args will include the `()`\n return this.data.name + this.data.args.toString();\n }\n}\n\n\nexport class ParsedEnvSpecDecorator {\n constructor(public data: {\n name: string;\n valueOrFnArgs: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs | undefined;\n _location?: any;\n }) {\n }\n\n get name() {\n return this.data.name;\n }\n\n get bareFnArgs() {\n if (this.data.valueOrFnArgs && this.data.valueOrFnArgs instanceof ParsedEnvSpecFunctionArgs) {\n return this.data.valueOrFnArgs;\n }\n }\n\n get value() {\n // bare decorator is equivalent to `@decorator=true`\n // `@required` === `@required=true`\n if (!this.data.valueOrFnArgs) {\n return new ParsedEnvSpecStaticValue({ rawValue: true, isImplicit: true });\n } else if (!(this.data.valueOrFnArgs instanceof ParsedEnvSpecFunctionArgs)) {\n return this.data.valueOrFnArgs;\n }\n }\n get simplifiedValue() {\n if (this.value instanceof ParsedEnvSpecStaticValue) {\n return this.value.value;\n }\n }\n\n toString() {\n let s = `@${this.name}`;\n if (!this.data.valueOrFnArgs) return s; // bare decorator, ex: `@required`\n // bare fn call looks like `@import(asdf)` so no `=`\n if (!(this.data.valueOrFnArgs instanceof ParsedEnvSpecFunctionArgs)) s += '=';\n // let the value stringify itself\n s += this.data.valueOrFnArgs.toString();\n return s;\n }\n}\n\n\nexport class ParsedEnvSpecComment {\n constructor(public data: {\n contents: string;\n leadingSpace?: string;\n _location?: any;\n }) {}\n\n get contents() {\n return this.data.contents;\n }\n\n toString() {\n return `#${this.data.leadingSpace || ''}${this.data.contents}`;\n }\n}\nexport class ParsedEnvSpecDecoratorComment {\n constructor(public data: {\n decorators: Array<ParsedEnvSpecDecorator>;\n leadingSpace?: string;\n postComment?: any;\n _location?: any;\n }) {}\n\n get decorators() {\n return this.data.decorators;\n }\n\n get postComment() {\n return this.data.postComment;\n }\n\n toString() {\n let s = '#';\n s += this.data.leadingSpace || '';\n s += this.data.decorators.map((d) => d.toString()).join(' ');\n if (this.data.postComment) s += ` ${this.data.postComment.toString()}`;\n return s;\n }\n}\n\nexport type ParsedEnvSpecDecoratorValue = (\n ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs\n);\n\nfunction getDecoratorsObject(\n comments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment | undefined>,\n) {\n const decObj = {} as Record<string, ParsedEnvSpecDecorator>;\n comments.forEach((comment) => {\n if (comment instanceof ParsedEnvSpecDecoratorComment) {\n comment.decorators.forEach((decorator) => {\n decObj[decorator.name] = decorator;\n });\n }\n });\n return decObj;\n}\n\nfunction getDecoratorsArray(\n comments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment | undefined>,\n) {\n const decArr = [] as Array<ParsedEnvSpecDecorator>;\n comments.forEach((comment) => {\n if (comment instanceof ParsedEnvSpecDecoratorComment) {\n decArr.push(...comment.decorators);\n }\n });\n return decArr;\n}\n\nexport class ParsedEnvSpecCommentBlock {\n constructor(public data: {\n comments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment>;\n divider: ParsedEnvSpecDivider | null;\n _location?: any;\n }) {}\n\n get comments() {\n return this.data.comments;\n }\n\n get divider() {\n return this.data.divider || undefined;\n }\n\n get decoratorsObject() {\n return getDecoratorsObject(this.data.comments);\n }\n get decoratorsArray() {\n return getDecoratorsArray(this.data.comments);\n }\n\n toString() {\n return [\n ...this.data.comments.map((comment) => comment.toString()),\n ...this.data.divider ? [this.data.divider.toString()] : [],\n ].join('\\n');\n }\n}\n\nexport class ParsedEnvSpecBlankLine {\n constructor(public data: {\n _location?: any;\n }) {}\n\n toString() {\n return '';\n }\n}\n\n\nexport class ParsedEnvSpecConfigItem {\n expandedValue: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | undefined;\n\n constructor(public data: {\n key: string;\n value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | undefined;\n preComments: Array<ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment>;\n postComment: ParsedEnvSpecDecoratorComment | ParsedEnvSpecComment | undefined;\n _location?: any;\n }) {}\n\n get key() {\n return this.data.key;\n }\n get value() {\n // no value is equivalent to `undefined`\n // `ITEM=` === `ITEM=undefined`\n if (!this.data.value) {\n return new ParsedEnvSpecStaticValue({ rawValue: undefined, isImplicit: true });\n }\n return this.data.value;\n }\n\n get decoratorsObject() {\n return getDecoratorsObject([...this.data.preComments, this.data.postComment]);\n }\n\n get description() {\n const regularComments = this.data.preComments.filter((comment) => (comment instanceof ParsedEnvSpecComment));\n return regularComments.map((comment) => comment.contents).join('\\n');\n }\n\n processExpansion(_opts?: {}) {\n if (this.data.value) {\n const expanded = expand(this.data.value);\n if (expanded instanceof ParsedEnvSpecKeyValuePair) throw new Error('Nested key-value pair found in config item');\n this.expandedValue = expanded;\n } else {\n this.expandedValue = undefined;\n }\n }\n\n private get resolverDef() {\n if (!this.data.value) {\n return {\n type: 'static' as const,\n value: undefined,\n };\n } else if (this.data.value instanceof ParsedEnvSpecStaticValue) {\n return {\n type: 'static' as const,\n value: this.data.value.value,\n };\n } else if (this.data.value instanceof ParsedEnvSpecFunctionCall) {\n return {\n type: 'function' as const,\n functionName: this.data.value.name,\n functionArgs: this.data.value.simplifiedArgs,\n };\n } else {\n throw new Error('Unknown value resolver type');\n }\n }\n\n toString() {\n let s = '';\n for (const comment of this.data.preComments) s += `${comment.toString()}\\n`;\n s += `${this.key}=`;\n if (this.data.value) s += `${this.data.value.toString()}`;\n if (this.data.postComment) s += ` ${this.data.postComment.toString()}`;\n return s;\n }\n}\n\n// these are the 4 types that can be at the root level\ntype ParsedEnvSpecFileNode = ParsedEnvSpecCommentBlock\n | ParsedEnvSpecDivider\n | ParsedEnvSpecConfigItem\n | ParsedEnvSpecBlankLine;\n\n\nexport class ParsedEnvSpecFile {\n contents: Array<ParsedEnvSpecFileNode>;\n constructor(_contents: Array<ParsedEnvSpecFileNode>) {\n this.contents = _contents;\n }\n\n get configItems() {\n return this.contents.filter((item) => item instanceof ParsedEnvSpecConfigItem);\n }\n get header() {\n // header is a comment block at the the start of the file that ends with a divider\n // it may be preceeded by blank lines only\n for (const item of this.contents) {\n if (item instanceof ParsedEnvSpecCommentBlock && item.divider) {\n return item;\n } else if (!(item instanceof ParsedEnvSpecBlankLine)) {\n return;\n }\n }\n }\n get decoratorsObject() {\n return this.header?.decoratorsObject ?? {};\n }\n get decoratorsArray() {\n return this.header?.decoratorsArray ?? [];\n }\n\n toString() {\n return this.contents.map((item) => item.toString()).join('\\n');\n }\n /**\n * simple helper to convert an object in a basic case\n * mostly useful for comparison with other env parsers\n * */\n toSimpleObj() {\n const obj = {} as Record<string, any>;\n for (const item of this.contents) {\n if (item instanceof ParsedEnvSpecConfigItem) {\n if (item.value instanceof ParsedEnvSpecStaticValue) {\n obj[item.key] = item.value.value ?? '';\n }\n }\n }\n return obj;\n }\n}\n","import {\n ParsedEnvSpecFunctionArgs, ParsedEnvSpecFunctionCall, ParsedEnvSpecKeyValuePair, ParsedEnvSpecStaticValue,\n} from './classes';\n\n// const EXPAND_VAR_REGEX_WITH_SIMPLE = /\\$({([a-zA-Z_][a-zA-Z0-9_.]*)}|([a-zA-Z_][a-zA-Z0-9_]*))/g;\nconst EXPAND_VAR_BRACKETED_REGEX = /(?<!\\\\)\\${([a-zA-Z_][a-zA-Z0-9_.]*)((:?-)([^}]+))?}/g;\nconst EXPAND_VAR_SIMPLE_REGEX = /(?<!\\\\)\\$([a-zA-Z_][a-zA-Z0-9_]*)/g;\nconst EXPAND_EXEC_REGEX = /\\$\\(([^)]+)\\)/g;\n\n\ntype ParsedEnvSpecValueNode = ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecKeyValuePair;\n\nfunction expandExecs(staticVal: ParsedEnvSpecStaticValue, _opts?: {}) {\n if (typeof staticVal.value !== 'string') return staticVal;\n const quote = staticVal.data.quote;\n const quoteStr = quote ?? '';\n // single quoted strings are not expanded!\n if (quote === \"'\") return staticVal;\n\n const execMatches = Array.from(staticVal.value.matchAll(EXPAND_EXEC_REGEX));\n\n // if no matches - we just return the original value\n if (execMatches.length === 0) return staticVal;\n\n // otherwise, we expand the transform each match into `exec` fn calls\n // and return a concat with everything together\n let lastIndex = 0;\n const parts = [] as Array<ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall>;\n for (const match of execMatches) {\n // extract text before exec -- ex: `pretext-$(exec command)`\n if (lastIndex < match.index) {\n const preText = staticVal.value.slice(lastIndex, match.index);\n parts.push(new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${preText}${quoteStr}`, quote }));\n }\n\n // extract exec command\n const shellCmd = match[1];\n parts.push(new ParsedEnvSpecFunctionCall({\n name: 'exec',\n args: new ParsedEnvSpecFunctionArgs({\n values: [new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${shellCmd}${quoteStr}`, quote })],\n }),\n }));\n lastIndex = match.index + match[0].length;\n }\n // extract any remaining text after the last exec\n if (lastIndex < staticVal.value.length) {\n const postText = staticVal.value.slice(lastIndex);\n parts.push(new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${postText}${quoteStr}`, quote }));\n }\n\n // if there's only one part, we can just return it (ex: `VAR=$(whoami)`)\n if (parts.length === 1) return parts[0];\n // otherwise we concat all the parts together\n return new ParsedEnvSpecFunctionCall({\n name: 'concat',\n args: new ParsedEnvSpecFunctionArgs({\n values: parts,\n }),\n });\n}\n\nfunction expandRefs(staticVal: ParsedEnvSpecStaticValue, mode: 'simple' | 'bracketed') {\n if (typeof staticVal.value !== 'string') return staticVal;\n const quote = staticVal.data.quote;\n const quoteStr = quote ?? '';\n if (quote === \"'\") return staticVal;\n\n const varMatches = Array.from(staticVal.value.matchAll(mode === 'simple' ? EXPAND_VAR_SIMPLE_REGEX : EXPAND_VAR_BRACKETED_REGEX));\n if (varMatches.length === 0) return staticVal;\n\n let lastIndex = 0;\n const parts = [] as Array<any>;\n for (const match of varMatches) {\n // extract text before exec\n if (lastIndex < match.index) {\n const preText = staticVal.value.slice(lastIndex, match.index);\n parts.push(new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${preText}${quoteStr}`, quote }));\n }\n\n // extract var\n const varName = match[1];\n let defaultOperator: string | undefined; // ex: \":-\" or \"-\"\n let defaultVal: string | undefined; // currently not doing any fancy parsing on this, will just be a string\n if (mode === 'bracketed') {\n // TODO: do we want to support different behaviour based on the operator?\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n defaultOperator = match[3];\n defaultVal = match[4];\n }\n const refFnCall = new ParsedEnvSpecFunctionCall({\n name: 'ref',\n args: new ParsedEnvSpecFunctionArgs({\n values: [new ParsedEnvSpecStaticValue({ rawValue: varName })],\n }),\n });\n if (defaultVal) {\n parts.push(new ParsedEnvSpecFunctionCall({\n name: 'fallback',\n args: new ParsedEnvSpecFunctionArgs({\n values: [refFnCall, new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${defaultVal}${quoteStr}`, quote })],\n }),\n }));\n } else {\n parts.push(refFnCall);\n }\n lastIndex = match.index + match[0].length;\n }\n if (lastIndex < staticVal.value.length) {\n const postText = staticVal.value.slice(lastIndex);\n parts.push(new ParsedEnvSpecStaticValue({ rawValue: `${quoteStr}${postText}${quoteStr}`, quote }));\n }\n\n // if only a single part, just return it (ex: `VAR=${OTHERVAR}`)\n if (parts.length === 1) return parts[0];\n // otherwise, concat all the parts together\n return new ParsedEnvSpecFunctionCall({\n name: 'concat',\n args: new ParsedEnvSpecFunctionArgs({\n values: parts,\n }),\n });\n}\n\n/**\n * helper used by expansion to recursively expand values\n * */\nfunction expandHelper(\n val: ParsedEnvSpecValueNode,\n expandStaticFn: (staticVal: ParsedEnvSpecStaticValue) => ParsedEnvSpecValueNode,\n): ParsedEnvSpecValueNode {\n // if function call, expand each arg\n if (val instanceof ParsedEnvSpecFunctionCall) {\n const fnName = val.name;\n // expand each arg, and then flatten unnecessery nested concat fns\n const newConcatArgs = [] as Array<ParsedEnvSpecValueNode>;\n val.data.args.values.forEach((v) => {\n const expandedArg = expandHelper(v, expandStaticFn);\n // special case for concat so we flatten unnecessery nested concat fns\n if (\n fnName === 'concat'\n && expandedArg instanceof ParsedEnvSpecFunctionCall\n && expandedArg.name === 'concat'\n ) {\n newConcatArgs.push(...expandedArg.data.args.values);\n } else {\n newConcatArgs.push(expandedArg);\n }\n });\n\n return new ParsedEnvSpecFunctionCall({\n name: fnName,\n args: new ParsedEnvSpecFunctionArgs({\n values: newConcatArgs,\n }),\n });\n // if key-value pair, expand value\n } else if (val instanceof ParsedEnvSpecKeyValuePair) {\n const expandedVal = expandHelper(val.value, expandStaticFn);\n if (expandedVal instanceof ParsedEnvSpecKeyValuePair) throw new Error('Nested key-value pair found in concat');\n return new ParsedEnvSpecKeyValuePair({\n key: val.key,\n val: expandedVal,\n });\n } else if (val instanceof ParsedEnvSpecStaticValue) {\n // here we actually do the expansion on string values\n\n // skip expansion if value is number/boolean/etc\n if (typeof val.value !== 'string') return val;\n // skip expansion on single-quoted strings\n if (val.data.quote === \"'\") return val;\n\n return expandStaticFn(val);\n }\n throw new Error('Unknown value type');\n}\n\n/**\n * takes in a value node and runs expansion (execs, refs) according to options\n * returns a new value node with all expansions applied\n * */\nexport function expand(\n val: ParsedEnvSpecValueNode,\n // TODO: add options to enable/disable specific expansion types and handling\n _opts?: {},\n): ParsedEnvSpecValueNode {\n // TODO: add options\n let expandedVal = val;\n expandedVal = expandHelper(expandedVal, (v) => expandExecs(v));\n expandedVal = expandHelper(expandedVal, (v) => expandRefs(v, 'simple'));\n expandedVal = expandHelper(expandedVal, (v) => expandRefs(v, 'bracketed'));\n return expandedVal;\n}\n"]}