@notross/dotenv-config 0.0.1 → 2.0.0

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.
@@ -0,0 +1,15 @@
1
+ import { EnvCollection, EnvVars } from './types';
2
+ declare class State {
3
+ vars: EnvVars;
4
+ collections: EnvCollection;
5
+ subcollections: EnvCollection;
6
+ env: (prefix?: string) => EnvCollection | EnvVars;
7
+ constructor();
8
+ private get;
9
+ private findPrefix;
10
+ }
11
+ export declare const client: State;
12
+ export declare const env: () => EnvCollection;
13
+ export declare const getEnv: (prefix: string) => EnvVars;
14
+ export {};
15
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAGhD,cAAM,KAAK;IACF,IAAI,EAAE,OAAO,CAAK;IAClB,WAAW,EAAE,aAAa,CAAK;IAC/B,cAAc,EAAE,aAAa,CAAK;IAClC,GAAG,YAOW,MAAM,KAAG,aAAa,GAAG,OAAO,CAPrB;;IAOhC,OAAO,CAAC,GAAG;IAQX,OAAO,CAAC,UAAU;CAMnB;AAED,eAAO,MAAM,MAAM,OAAc,CAAA;AACjC,eAAO,MAAM,GAAG,QAAyB,aAAa,CAAA;AACtD,eAAO,MAAM,MAAM,GAAI,QAAQ,MAAM,KAA2B,OAAO,CAAA"}
package/cjs/client.js ADDED
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getEnv = exports.env = exports.client = void 0;
4
+ const dotenv_1 = require("dotenv");
5
+ const utils_1 = require("./utils");
6
+ class State {
7
+ vars = {};
8
+ collections = {};
9
+ subcollections = {};
10
+ env = this.get.bind(this);
11
+ constructor() {
12
+ (0, dotenv_1.config)({ processEnv: this.vars });
13
+ this.collections = (0, utils_1.autoPrefix)(this.vars);
14
+ }
15
+ get(prefix) {
16
+ if (prefix) {
17
+ return this.findPrefix(prefix);
18
+ }
19
+ else {
20
+ return this.collections;
21
+ }
22
+ }
23
+ findPrefix(prefix) {
24
+ prefix = prefix.endsWith('_') ? prefix : prefix + '_';
25
+ const filtered = (0, utils_1.filterByPrefix)(this.vars, prefix);
26
+ const paramaterized = (0, utils_1.injectParams)(filtered);
27
+ return paramaterized;
28
+ }
29
+ }
30
+ exports.client = new State();
31
+ const env = () => exports.client.env();
32
+ exports.env = env;
33
+ const getEnv = (prefix) => exports.client.env(prefix);
34
+ exports.getEnv = getEnv;
35
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAE/B,mCAAkE;AAElE,MAAM,KAAK;IACF,IAAI,GAAY,EAAE,CAAA;IAClB,WAAW,GAAkB,EAAE,CAAA;IAC/B,cAAc,GAAkB,EAAE,CAAA;IAClC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEhC;QACE,IAAA,eAAM,EAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QACjC,IAAI,CAAC,WAAW,GAAG,IAAA,kBAAU,EAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;IAEO,GAAG,CAAC,MAAe;QACzB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAY,CAAA;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,WAA4B,CAAA;QAC1C,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,MAAc;QAC/B,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAA;QACrD,MAAM,QAAQ,GAAG,IAAA,sBAAc,EAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAClD,MAAM,aAAa,GAAG,IAAA,oBAAY,EAAC,QAAQ,CAAC,CAAA;QAC5C,OAAO,aAAa,CAAA;IACtB,CAAC;CACF;AAEY,QAAA,MAAM,GAAG,IAAI,KAAK,EAAE,CAAA;AAC1B,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,cAAM,CAAC,GAAG,EAAmB,CAAA;AAAzC,QAAA,GAAG,OAAsC;AAC/C,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,cAAM,CAAC,GAAG,CAAC,MAAM,CAAY,CAAA;AAA1D,QAAA,MAAM,UAAoD"}
package/cjs/index.d.ts CHANGED
@@ -1,8 +1,7 @@
1
- type BuildEnvOptions = {
2
- filename?: string;
3
- prefix?: string;
4
- };
5
- declare function buildEnv({ filename, prefix, }: BuildEnvOptions): Record<string, string>;
1
+ import { BuildEnvOptions, EnvCollection, EnvVars } from './types';
2
+ import { client, env, getEnv } from './client';
3
+ declare function autoEnv(): EnvCollection;
4
+ declare function buildEnv({ filename, prefix, }: BuildEnvOptions): EnvVars;
6
5
  export default buildEnv;
7
- export { buildEnv };
6
+ export { autoEnv, buildEnv, client, env, getEnv };
8
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,KAAK,eAAe,GAAG;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,iBAAS,QAAQ,CAAC,EAChB,QAAQ,EACR,MAAM,GACP,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU1C;AAqED,eAAe,QAAQ,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE/C,iBAAS,OAAO,IAAI,aAAa,CAIhC;AAED,iBAAS,QAAQ,CAAC,EAChB,QAAQ,EACR,MAAM,GACP,EAAE,eAAe,GAAG,OAAO,CAU3B;AAED,eAAe,QAAQ,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC"}
package/cjs/index.js CHANGED
@@ -3,9 +3,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getEnv = exports.env = exports.client = void 0;
7
+ exports.autoEnv = autoEnv;
6
8
  exports.buildEnv = buildEnv;
7
9
  const path_1 = __importDefault(require("path"));
8
10
  const dotenv_1 = require("dotenv");
11
+ const utils_1 = require("./utils");
12
+ const client_1 = require("./client");
13
+ Object.defineProperty(exports, "client", { enumerable: true, get: function () { return client_1.client; } });
14
+ Object.defineProperty(exports, "env", { enumerable: true, get: function () { return client_1.env; } });
15
+ Object.defineProperty(exports, "getEnv", { enumerable: true, get: function () { return client_1.getEnv; } });
16
+ function autoEnv() {
17
+ const vars = {};
18
+ (0, dotenv_1.config)({ processEnv: vars });
19
+ return (0, utils_1.autoPrefix)(vars);
20
+ }
21
+ ;
9
22
  function buildEnv({ filename, prefix, }) {
10
23
  const envVars = {};
11
24
  const filepath = filename && path_1.default.resolve(process.cwd(), filename);
@@ -13,49 +26,9 @@ function buildEnv({ filename, prefix, }) {
13
26
  ...(filepath ? { path: filepath } : {}),
14
27
  processEnv: envVars,
15
28
  });
16
- const filtered = filterByPrefix(envVars, prefix);
17
- const paramaterized = injectParams(filtered);
29
+ const filtered = (0, utils_1.filterByPrefix)(envVars, prefix);
30
+ const paramaterized = (0, utils_1.injectParams)(filtered);
18
31
  return paramaterized;
19
32
  }
20
- function rekey(key, prefix = '') {
21
- const trim = prefix.length;
22
- key = key.substring(trim);
23
- return key.toLowerCase().split('_')
24
- .reduce((acc, str, i) => {
25
- if (i === 0)
26
- return str;
27
- return acc + str.substring(0, 1).toUpperCase() + str.substring(1);
28
- }, '');
29
- }
30
- function filterByPrefix(env, prefix) {
31
- return Object.entries(env)
32
- .filter(([key]) => prefix ? key.startsWith(prefix) : true).reduce((acc, [key, value]) => ({
33
- ...acc,
34
- [rekey(key, prefix)]: value,
35
- }), {});
36
- }
37
- function findParameters([key, value]) {
38
- const params = Array.from(value.matchAll(/{{([^}]+)}}/g))
39
- .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
40
- return {
41
- key,
42
- value,
43
- ...(Object.keys(params).length ? { params } : {}),
44
- };
45
- }
46
- function injectParams(env) {
47
- const values = Object.entries(env).map(findParameters);
48
- return values.reduce((acc, { key, value, params }) => {
49
- if (!params) {
50
- return acc;
51
- }
52
- const valueWithParams = Object.entries(params)
53
- .reduce((paramAcc, [pkey, pval]) => {
54
- const injection = env[pval];
55
- return paramAcc.replace(pkey, injection);
56
- }, value);
57
- return { ...acc, [key]: valueWithParams };
58
- }, env);
59
- }
60
33
  exports.default = buildEnv;
61
34
  //# sourceMappingURL=index.js.map
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;AA4BS,0BAAO;AAAE,4BAAQ;AA5B1B,gDAAwB;AACxB,mCAAgC;AAEhC,mCAAmE;AACnE,qCAA+C;AAwBnB,uFAxBnB,eAAM,OAwBmB;AAAE,oFAxBnB,YAAG,OAwBmB;AAAE,uFAxBnB,eAAM,OAwBmB;AAtB/C,SAAS,OAAO;IACd,MAAM,IAAI,GAAY,EAAE,CAAC;IACzB,IAAA,eAAM,EAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7B,OAAO,IAAA,kBAAU,EAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAAA,CAAC;AAEF,SAAS,QAAQ,CAAC,EAChB,QAAQ,EACR,MAAM,GACU;IAChB,MAAM,OAAO,GAAY,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,QAAQ,IAAI,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IACnE,IAAA,eAAM,EAAC;QACL,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,UAAU,EAAE,OAAO;KACpB,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAA,sBAAc,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,IAAA,oBAAY,EAAC,QAAQ,CAAC,CAAC;IAC7C,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,kBAAe,QAAQ,CAAC"}
package/cjs/state.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ import { EnvCollection, EnvVars } from './types';
2
+ declare class State {
3
+ vars: EnvVars;
4
+ collections: EnvCollection;
5
+ subcollections: EnvCollection;
6
+ env: (prefix?: string) => EnvCollection | EnvVars;
7
+ constructor();
8
+ private get;
9
+ private findPrefix;
10
+ }
11
+ export declare const client: State;
12
+ export declare const env: State;
13
+ export {};
14
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAGhD,cAAM,KAAK;IACF,IAAI,EAAE,OAAO,CAAK;IAClB,WAAW,EAAE,aAAa,CAAK;IAC/B,cAAc,EAAE,aAAa,CAAK;IAClC,GAAG,YAOW,MAAM,KAAG,aAAa,GAAG,OAAO,CAPrB;;IAOhC,OAAO,CAAC,GAAG;IAQX,OAAO,CAAC,UAAU;CAMnB;AAED,eAAO,MAAM,MAAM,OAAc,CAAA;AACjC,eAAO,MAAM,GAAG,OAAS,CAAA"}
package/cjs/state.js ADDED
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.env = exports.client = void 0;
4
+ const dotenv_1 = require("dotenv");
5
+ const utils_1 = require("./utils");
6
+ class State {
7
+ vars = {};
8
+ collections = {};
9
+ subcollections = {};
10
+ env = this.get.bind(this);
11
+ constructor() {
12
+ (0, dotenv_1.config)({ processEnv: this.vars });
13
+ this.collections = (0, utils_1.autoPrefix)(this.vars);
14
+ }
15
+ get(prefix) {
16
+ if (prefix) {
17
+ return this.findPrefix(prefix);
18
+ }
19
+ else {
20
+ return this.collections;
21
+ }
22
+ }
23
+ findPrefix(prefix) {
24
+ prefix = prefix.endsWith('_') ? prefix : prefix + '_';
25
+ const filtered = (0, utils_1.filterByPrefix)(this.vars, prefix);
26
+ const paramaterized = (0, utils_1.injectParams)(filtered);
27
+ return paramaterized;
28
+ }
29
+ }
30
+ exports.client = new State();
31
+ exports.env = exports.client;
32
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/state.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAE/B,mCAAkE;AAElE,MAAM,KAAK;IACF,IAAI,GAAY,EAAE,CAAA;IAClB,WAAW,GAAkB,EAAE,CAAA;IAC/B,cAAc,GAAkB,EAAE,CAAA;IAClC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEhC;QACE,IAAA,eAAM,EAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QACjC,IAAI,CAAC,WAAW,GAAG,IAAA,kBAAU,EAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;IAEO,GAAG,CAAC,MAAe;QACzB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QAChC,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,WAAW,CAAA;QACzB,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,MAAc;QAC/B,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAA;QACrD,MAAM,QAAQ,GAAG,IAAA,sBAAc,EAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAClD,MAAM,aAAa,GAAG,IAAA,oBAAY,EAAC,QAAQ,CAAC,CAAA;QAC5C,OAAO,aAAa,CAAA;IACtB,CAAC;CACF;AAEY,QAAA,MAAM,GAAG,IAAI,KAAK,EAAE,CAAA;AACpB,QAAA,GAAG,GAAG,cAAM,CAAA"}
package/cjs/types.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export type BuildEnvOptions = {
2
+ filename?: string;
3
+ prefix?: string;
4
+ };
5
+ export type EnvVars = Record<string, string>;
6
+ export type EnvCollection = Record<string, EnvVars>;
7
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7C,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC"}
package/cjs/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
package/cjs/utils.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import { EnvCollection, EnvVars } from './types';
2
+ export declare function autoPrefix(vars: EnvVars): EnvCollection;
3
+ export declare function filterByPrefix(env: EnvVars, prefix?: string): EnvVars;
4
+ export declare function injectParams(env: Record<string, string>): Record<string, string>;
5
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEjD,wBAAgB,UAAU,CACxB,IAAI,EAAE,OAAO,GACZ,aAAa,CAWf;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAQT;AAkCD,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBxB"}
package/cjs/utils.js ADDED
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.autoPrefix = autoPrefix;
4
+ exports.filterByPrefix = filterByPrefix;
5
+ exports.injectParams = injectParams;
6
+ function autoPrefix(vars) {
7
+ return Array(...new Set(Object.keys(vars).map((k) => k.split('_').shift()))).reduce((acc, prefix) => ({
8
+ ...acc,
9
+ [prefix.toLowerCase()]: injectParams(filterByPrefix(vars, `${prefix}_`)),
10
+ }), {});
11
+ }
12
+ function filterByPrefix(env, prefix) {
13
+ return Object.entries(env)
14
+ .filter(([key]) => prefix ? key.startsWith(prefix) : true).reduce((acc, [key, value]) => ({
15
+ ...acc,
16
+ [rekey(key, prefix)]: value,
17
+ }), {});
18
+ }
19
+ function rekey(key, prefix = '') {
20
+ const trim = prefix.length;
21
+ key = key.substring(trim);
22
+ return key.toLowerCase().split('_')
23
+ .reduce((acc, str, i) => {
24
+ if (i === 0)
25
+ return str;
26
+ return acc + str.substring(0, 1).toUpperCase() + str.substring(1);
27
+ }, '');
28
+ }
29
+ function findParameters([key, value]) {
30
+ const params = Array.from(value.matchAll(/{{([^}]+)}}/g))
31
+ .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
32
+ return {
33
+ key,
34
+ value,
35
+ ...(Object.keys(params).length ? { params } : {}),
36
+ };
37
+ }
38
+ function injectParams(env) {
39
+ const values = Object.entries(env).map(findParameters);
40
+ return values.reduce((acc, { key, value, params }) => {
41
+ if (!params) {
42
+ return acc;
43
+ }
44
+ const valueWithParams = Object.entries(params)
45
+ .reduce((paramAcc, [pkey, pval]) => {
46
+ const injection = env[pval];
47
+ return paramAcc.replace(pkey, injection);
48
+ }, value);
49
+ return { ...acc, [key]: valueWithParams };
50
+ }, env);
51
+ }
52
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
package/esm/client.js ADDED
@@ -0,0 +1,30 @@
1
+ import { config } from 'dotenv';
2
+ import { autoPrefix, filterByPrefix, injectParams } from './utils';
3
+ class State {
4
+ vars = {};
5
+ collections = {};
6
+ subcollections = {};
7
+ env = this.get.bind(this);
8
+ constructor() {
9
+ config({ processEnv: this.vars });
10
+ this.collections = autoPrefix(this.vars);
11
+ }
12
+ get(prefix) {
13
+ if (prefix) {
14
+ return this.findPrefix(prefix);
15
+ }
16
+ else {
17
+ return this.collections;
18
+ }
19
+ }
20
+ findPrefix(prefix) {
21
+ prefix = prefix.endsWith('_') ? prefix : prefix + '_';
22
+ const filtered = filterByPrefix(this.vars, prefix);
23
+ const paramaterized = injectParams(filtered);
24
+ return paramaterized;
25
+ }
26
+ }
27
+ export const client = new State();
28
+ export const env = () => client.env();
29
+ export const getEnv = (prefix) => client.env(prefix);
30
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAElE,MAAM,KAAK;IACF,IAAI,GAAY,EAAE,CAAA;IAClB,WAAW,GAAkB,EAAE,CAAA;IAC/B,cAAc,GAAkB,EAAE,CAAA;IAClC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEhC;QACE,MAAM,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QACjC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;IAEO,GAAG,CAAC,MAAe;QACzB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAY,CAAA;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,WAA4B,CAAA;QAC1C,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,MAAc;QAC/B,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAA;QACrD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAClD,MAAM,aAAa,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;QAC5C,OAAO,aAAa,CAAA;IACtB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAA;AACjC,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAmB,CAAA;AACtD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAY,CAAA"}
package/esm/index.js CHANGED
@@ -1,5 +1,13 @@
1
1
  import path from 'path';
2
2
  import { config } from 'dotenv';
3
+ import { autoPrefix, filterByPrefix, injectParams } from './utils';
4
+ import { client, env, getEnv } from './client';
5
+ function autoEnv() {
6
+ const vars = {};
7
+ config({ processEnv: vars });
8
+ return autoPrefix(vars);
9
+ }
10
+ ;
3
11
  function buildEnv({ filename, prefix, }) {
4
12
  const envVars = {};
5
13
  const filepath = filename && path.resolve(process.cwd(), filename);
@@ -11,46 +19,6 @@ function buildEnv({ filename, prefix, }) {
11
19
  const paramaterized = injectParams(filtered);
12
20
  return paramaterized;
13
21
  }
14
- function rekey(key, prefix = '') {
15
- const trim = prefix.length;
16
- key = key.substring(trim);
17
- return key.toLowerCase().split('_')
18
- .reduce((acc, str, i) => {
19
- if (i === 0)
20
- return str;
21
- return acc + str.substring(0, 1).toUpperCase() + str.substring(1);
22
- }, '');
23
- }
24
- function filterByPrefix(env, prefix) {
25
- return Object.entries(env)
26
- .filter(([key]) => prefix ? key.startsWith(prefix) : true).reduce((acc, [key, value]) => ({
27
- ...acc,
28
- [rekey(key, prefix)]: value,
29
- }), {});
30
- }
31
- function findParameters([key, value]) {
32
- const params = Array.from(value.matchAll(/{{([^}]+)}}/g))
33
- .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
34
- return {
35
- key,
36
- value,
37
- ...(Object.keys(params).length ? { params } : {}),
38
- };
39
- }
40
- function injectParams(env) {
41
- const values = Object.entries(env).map(findParameters);
42
- return values.reduce((acc, { key, value, params }) => {
43
- if (!params) {
44
- return acc;
45
- }
46
- const valueWithParams = Object.entries(params)
47
- .reduce((paramAcc, [pkey, pval]) => {
48
- const injection = env[pval];
49
- return paramAcc.replace(pkey, injection);
50
- }, value);
51
- return { ...acc, [key]: valueWithParams };
52
- }, env);
53
- }
54
22
  export default buildEnv;
55
- export { buildEnv };
23
+ export { autoEnv, buildEnv, client, env, getEnv };
56
24
  //# sourceMappingURL=index.js.map
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE/C,SAAS,OAAO;IACd,MAAM,IAAI,GAAY,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7B,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAAA,CAAC;AAEF,SAAS,QAAQ,CAAC,EAChB,QAAQ,EACR,MAAM,GACU;IAChB,MAAM,OAAO,GAAY,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IACnE,MAAM,CAAC;QACL,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,UAAU,EAAE,OAAO;KACpB,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC7C,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,eAAe,QAAQ,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC"}
package/esm/state.js ADDED
@@ -0,0 +1,29 @@
1
+ import { config } from 'dotenv';
2
+ import { autoPrefix, filterByPrefix, injectParams } from './utils';
3
+ class State {
4
+ vars = {};
5
+ collections = {};
6
+ subcollections = {};
7
+ env = this.get.bind(this);
8
+ constructor() {
9
+ config({ processEnv: this.vars });
10
+ this.collections = autoPrefix(this.vars);
11
+ }
12
+ get(prefix) {
13
+ if (prefix) {
14
+ return this.findPrefix(prefix);
15
+ }
16
+ else {
17
+ return this.collections;
18
+ }
19
+ }
20
+ findPrefix(prefix) {
21
+ prefix = prefix.endsWith('_') ? prefix : prefix + '_';
22
+ const filtered = filterByPrefix(this.vars, prefix);
23
+ const paramaterized = injectParams(filtered);
24
+ return paramaterized;
25
+ }
26
+ }
27
+ export const client = new State();
28
+ export const env = client;
29
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAElE,MAAM,KAAK;IACF,IAAI,GAAY,EAAE,CAAA;IAClB,WAAW,GAAkB,EAAE,CAAA;IAC/B,cAAc,GAAkB,EAAE,CAAA;IAClC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEhC;QACE,MAAM,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QACjC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;IAEO,GAAG,CAAC,MAAe;QACzB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QAChC,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,WAAW,CAAA;QACzB,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,MAAc;QAC/B,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAA;QACrD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAClD,MAAM,aAAa,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;QAC5C,OAAO,aAAa,CAAA;IACtB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAA;AACjC,MAAM,CAAC,MAAM,GAAG,GAAG,MAAM,CAAA"}
package/esm/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
package/esm/utils.js ADDED
@@ -0,0 +1,47 @@
1
+ export function autoPrefix(vars) {
2
+ return Array(...new Set(Object.keys(vars).map((k) => k.split('_').shift()))).reduce((acc, prefix) => ({
3
+ ...acc,
4
+ [prefix.toLowerCase()]: injectParams(filterByPrefix(vars, `${prefix}_`)),
5
+ }), {});
6
+ }
7
+ export function filterByPrefix(env, prefix) {
8
+ return Object.entries(env)
9
+ .filter(([key]) => prefix ? key.startsWith(prefix) : true).reduce((acc, [key, value]) => ({
10
+ ...acc,
11
+ [rekey(key, prefix)]: value,
12
+ }), {});
13
+ }
14
+ function rekey(key, prefix = '') {
15
+ const trim = prefix.length;
16
+ key = key.substring(trim);
17
+ return key.toLowerCase().split('_')
18
+ .reduce((acc, str, i) => {
19
+ if (i === 0)
20
+ return str;
21
+ return acc + str.substring(0, 1).toUpperCase() + str.substring(1);
22
+ }, '');
23
+ }
24
+ function findParameters([key, value]) {
25
+ const params = Array.from(value.matchAll(/{{([^}]+)}}/g))
26
+ .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
27
+ return {
28
+ key,
29
+ value,
30
+ ...(Object.keys(params).length ? { params } : {}),
31
+ };
32
+ }
33
+ export function injectParams(env) {
34
+ const values = Object.entries(env).map(findParameters);
35
+ return values.reduce((acc, { key, value, params }) => {
36
+ if (!params) {
37
+ return acc;
38
+ }
39
+ const valueWithParams = Object.entries(params)
40
+ .reduce((paramAcc, [pkey, pval]) => {
41
+ const injection = env[pval];
42
+ return paramAcc.replace(pkey, injection);
43
+ }, value);
44
+ return { ...acc, [key]: valueWithParams };
45
+ }, env);
46
+ }
47
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@notross/dotenv-config",
3
- "version": "0.0.1",
3
+ "version": "2.0.0",
4
4
  "main": "./cjs/index.js",
5
5
  "module": "./esm/index.js",
6
6
  "types": "./cjs/index.d.ts",