@seedcli/config 0.1.7 → 0.1.10

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 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE9D,wBAAsB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrF,aAAa,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,EACtC,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GACjC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAoC5B;AAED,wBAAsB,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzF,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,CAAC,CAAC,CAYZ;AAED,wBAAgB,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAehG"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE9D,wBAAsB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrF,aAAa,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,EACtC,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GACjC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAsC5B;AAED,wBAAsB,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzF,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,CAAC,CAAC,CAyBZ;AAED,wBAAgB,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAgDhG"}
package/dist/config.js CHANGED
@@ -12,12 +12,14 @@ export async function load(nameOrOptions, opts) {
12
12
  packageJson: options.packageJson,
13
13
  rcFile: options.rcFile === true ? `.${options.name}rc` : options.rcFile,
14
14
  globalRc: options.globalRc,
15
+ envName: options.envName,
15
16
  });
16
17
  // Find the config file path from layers
18
+ // c12 stores the file path in `configFile`, while `source` is a source identifier
17
19
  let configFile;
18
20
  for (const layer of result.layers ?? []) {
19
- if (layer.source && typeof layer.source === "string") {
20
- configFile = layer.source;
21
+ if (layer.configFile && typeof layer.configFile === "string") {
22
+ configFile = layer.configFile;
21
23
  break;
22
24
  }
23
25
  }
@@ -36,15 +38,62 @@ export async function loadFile(filePath) {
36
38
  const file = Bun.file(filePath);
37
39
  const text = await file.text();
38
40
  if (filePath.endsWith(".json")) {
39
- return JSON.parse(text);
41
+ try {
42
+ return JSON.parse(text);
43
+ }
44
+ catch (err) {
45
+ throw new Error(`Failed to parse JSON config "${filePath}": ${err instanceof Error ? err.message : String(err)}`);
46
+ }
40
47
  }
41
48
  // For JS/TS config files, use dynamic import
42
- const mod = await import(filePath);
43
- const config = mod.default ?? mod;
44
- return config;
49
+ try {
50
+ const mod = await import(filePath);
51
+ const config = mod.default ?? mod;
52
+ return config;
53
+ }
54
+ catch (err) {
55
+ throw new Error(`Failed to load config file "${filePath}": ${err instanceof Error ? err.message : String(err)}`, { cause: err });
56
+ }
45
57
  }
46
58
  export function get(obj, path, defaultValue) {
47
- const keys = path.split(".");
59
+ if (path === "") {
60
+ return defaultValue;
61
+ }
62
+ // Support bracket notation for keys with dots: "foo[bar.baz].qux"
63
+ // Also support plain dot paths: "foo.bar.qux"
64
+ const keys = [];
65
+ let i = 0;
66
+ while (i < path.length) {
67
+ if (path[i] === "[") {
68
+ const end = path.indexOf("]", i + 1);
69
+ if (end === -1) {
70
+ keys.push(path.slice(i));
71
+ break;
72
+ }
73
+ keys.push(path.slice(i + 1, end));
74
+ i = end + 1;
75
+ if (path[i] === ".")
76
+ i++; // skip trailing dot after ]
77
+ }
78
+ else {
79
+ const dot = path.indexOf(".", i);
80
+ const bracket = path.indexOf("[", i);
81
+ let end;
82
+ if (dot === -1 && bracket === -1)
83
+ end = path.length;
84
+ else if (dot === -1)
85
+ end = bracket;
86
+ else if (bracket === -1)
87
+ end = dot;
88
+ else
89
+ end = Math.min(dot, bracket);
90
+ if (end > i)
91
+ keys.push(path.slice(i, end));
92
+ i = end;
93
+ if (path[i] === ".")
94
+ i++;
95
+ }
96
+ }
48
97
  let current = obj;
49
98
  for (const key of keys) {
50
99
  if (current === null || current === undefined) {
@@ -53,6 +102,10 @@ export function get(obj, path, defaultValue) {
53
102
  if (typeof current !== "object") {
54
103
  return defaultValue;
55
104
  }
105
+ // Guard against prototype pollution
106
+ if (key === "__proto__" || key === "constructor" || key === "prototype") {
107
+ return defaultValue;
108
+ }
56
109
  current = current[key];
57
110
  }
58
111
  return (current !== undefined ? current : defaultValue);
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAGjC,MAAM,CAAC,KAAK,UAAU,IAAI,CACzB,aAAsC,EACtC,IAAmC;IAEnC,MAAM,OAAO,GACZ,OAAO,aAAa,KAAK,QAAQ;QAChC,CAAC,CAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,aAAa,EAAqB;QACtD,CAAC,CAAC,aAAa,CAAC;IAElB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;QAC/B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,QAAQ,EAAE,OAAO,CAAC,QAAmC;QACrD,SAAS,EAAE,OAAO,CAAC,SAAoC;QACvD,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM;QACvE,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;KACxB,CAAC,CAAC;IAEH,wCAAwC;IACxC,kFAAkF;IAClF,IAAI,UAA8B,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,UAAU,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC9D,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YAC9B,MAAM;QACP,CAAC;IACF,CAAC;IAED,OAAO;QACN,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAM;QAClC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC7C,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAA4B;YACvD,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,aAAa,EAAE,KAAK,CAAC,aAAoD;SACzE,CAAC,CAAC;QACH,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;QAC/C,UAAU;KACV,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC7B,QAAgB;IAEhB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAE/B,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACd,gCAAgC,QAAQ,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAChG,CAAC;QACH,CAAC;IACF,CAAC;IAED,6CAA6C;IAC7C,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;QAClC,OAAO,MAAW,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACd,+BAA+B,QAAQ,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAC/F,EAAE,KAAK,EAAE,GAAG,EAAE,CACd,CAAC;IACH,CAAC;AACF,CAAC;AAED,MAAM,UAAU,GAAG,CAAc,GAA4B,EAAE,IAAY,EAAE,YAAgB;IAC5F,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QACjB,OAAO,YAAiB,CAAC;IAC1B,CAAC;IACD,kEAAkE;IAClE,8CAA8C;IAC9C,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACrC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gBAChB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,MAAM;YACP,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAClC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YACZ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,CAAC,EAAE,CAAC,CAAC,4BAA4B;QACvD,CAAC;aAAM,CAAC;YACP,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACrC,IAAI,GAAW,CAAC;YAChB,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC;gBAAE,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;iBAC/C,IAAI,GAAG,KAAK,CAAC,CAAC;gBAAE,GAAG,GAAG,OAAO,CAAC;iBAC9B,IAAI,OAAO,KAAK,CAAC,CAAC;gBAAE,GAAG,GAAG,GAAG,CAAC;;gBAC9B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAClC,IAAI,GAAG,GAAG,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC3C,CAAC,GAAG,GAAG,CAAC;YACR,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,CAAC,EAAE,CAAC;QAC1B,CAAC;IACF,CAAC;IAED,IAAI,OAAO,GAAY,GAAG,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/C,OAAO,YAAiB,CAAC;QAC1B,CAAC;QACD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,YAAiB,CAAC;QAC1B,CAAC;QACD,oCAAoC;QACpC,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,aAAa,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACzE,OAAO,YAAiB,CAAC;QAC1B,CAAC;QACD,OAAO,GAAI,OAAmC,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAM,CAAC;AAC9D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seedcli/config",
3
- "version": "0.1.7",
3
+ "version": "0.1.10",
4
4
  "description": "Configuration loading with c12 (supports .ts, .js, .json, .yaml)",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -29,7 +29,7 @@
29
29
  "exports": {
30
30
  ".": {
31
31
  "import": "./dist/index.js",
32
- "types": "./dist/index.d.ts"
32
+ "types": "./dist/index.js"
33
33
  }
34
34
  },
35
35
  "files": [