configuru 0.6.2 → 1.1.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.
package/.eslintrc.js CHANGED
@@ -1 +1,9 @@
1
- module.exports = require('@ackee/styleguide-backend-config/eslint')
1
+ const config = require('@ackee/styleguide-backend-config/eslint')
2
+
3
+ module.exports = {
4
+ ...config,
5
+ rules: {
6
+ ...config.rules,
7
+ 'security/detect-non-literal-fs-filename': 0,
8
+ },
9
+ }
@@ -0,0 +1,47 @@
1
+ name: 🐛 Bug Report
2
+ description: File a bug report.
3
+ title: "🐛 "
4
+ labels: ["bug"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ ## 🐛 Bug
10
+ - type: textarea
11
+ id: bug_description
12
+ attributes:
13
+ label: What happened?
14
+ description: Describe the bug what you encountered.
15
+ validations:
16
+ required: true
17
+ - type: textarea
18
+ id: reproduction
19
+ attributes:
20
+ label: Reproduction steps
21
+ description: Please provide the steps to reproduce the bug.
22
+ value: |
23
+ -
24
+ -
25
+ -
26
+ validations:
27
+ required: true
28
+ - type: markdown
29
+ attributes:
30
+ value: |
31
+ ## 💡 Solution
32
+ - type: textarea
33
+ id: solution_description
34
+ attributes:
35
+ label: What would you like to happen?
36
+ description: Describe the solution you'd like.
37
+ validations:
38
+ required: true
39
+ - type: markdown
40
+ attributes:
41
+ value: |
42
+ ## 🔧 Environment
43
+ - type: textarea
44
+ id: context
45
+ attributes:
46
+ label: Additional context
47
+ description: Please provide any relevant information about your environment.
@@ -0,0 +1,41 @@
1
+ name: ✨ Feature Request
2
+ description: Request a new feature.
3
+ title: "✨ "
4
+ labels: ["enhancement"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ ## ⚠️ Problem
10
+ - type: textarea
11
+ id: related_problem
12
+ attributes:
13
+ label: Is your feature request related to a problem?
14
+ description: Please describe the problem you are facing.
15
+ validations:
16
+ required: true
17
+ - type: markdown
18
+ attributes:
19
+ value: |
20
+ ## 💡 Solution
21
+ - type: textarea
22
+ id: solution_description
23
+ attributes:
24
+ label: What feature would you like to see?
25
+ description: Describe the solution.
26
+ validations:
27
+ required: true
28
+ - type: textarea
29
+ id: alternative_solution
30
+ attributes:
31
+ label: What alternatives have you considered?
32
+ description: Describe any alternative features you've considered.
33
+ - type: markdown
34
+ attributes:
35
+ value: |
36
+ ## 🔧 Environment
37
+ - type: textarea
38
+ id: context
39
+ attributes:
40
+ label: Additional context
41
+ description: "Please provide any relevant information about your environment."
@@ -1,25 +1,5 @@
1
- ## Proposed changes
1
+ ### PR addresses:
2
2
 
3
- > Describe your changes in at least few sentences. If the it requires further details, feel free to add more elaborate description.
3
+ -
4
4
 
5
- ## Issue reference
6
-
7
- > Leave one line, update issue reference
8
-
9
- Fixes #?
10
- Related #?
11
-
12
- ## Types of changes
13
-
14
- > Tick all that applies or specify details
15
-
16
- - [ ] 🐛 Bugfix
17
- - [ ] ✨ New feature
18
- - [ ] 💥 Breaking change
19
- - [ ] 📝 Documentation
20
- - [ ] ♻️ Refactor
21
- - [ ] ✅ Tests
22
-
23
- ## Discussion
24
-
25
- > Need help or want to discuss a proposal that is not related to inline code comment?
5
+ Fixes #
@@ -12,7 +12,7 @@ jobs:
12
12
  lint:
13
13
  strategy:
14
14
  matrix:
15
- node-version: [14, 16]
15
+ node-version: [18, 20, 22]
16
16
  runs-on: ubuntu-latest
17
17
  steps:
18
18
  - name: Check out code
@@ -27,7 +27,7 @@ jobs:
27
27
  run: npm i --ignore-scripts
28
28
 
29
29
  - name: Run tests
30
- run: npm run cs:eslint:check
30
+ run: npm run lint:check
31
31
 
32
32
  - name: Run tests
33
- run: npm run cs:prettier:check
33
+ run: npm run prettier:check
@@ -11,7 +11,7 @@ jobs:
11
11
  build:
12
12
  strategy:
13
13
  matrix:
14
- version: [12, 14, 16, 18]
14
+ version: [18, 20, 22]
15
15
  runs-on: ubuntu-latest
16
16
  steps:
17
17
  - uses: actions/checkout@v3
@@ -28,7 +28,7 @@ jobs:
28
28
  - uses: actions/checkout@v3
29
29
  - uses: actions/setup-node@v3
30
30
  with:
31
- node-version: 16
31
+ node-version: 18
32
32
  registry-url: https://registry.npmjs.org/
33
33
  - run: npm i --ignore-scripts
34
34
  - run: npm run build
@@ -12,7 +12,7 @@ jobs:
12
12
  tests:
13
13
  strategy:
14
14
  matrix:
15
- node-version: [12, 14, 16, 18]
15
+ node-version: [18, 20, 22]
16
16
  runs-on: ubuntu-latest
17
17
  steps:
18
18
  - name: Check out code
@@ -28,6 +28,3 @@ jobs:
28
28
 
29
29
  - name: Run tests with coverage
30
30
  run: npm run test:coverage
31
-
32
- - name: Run codecov
33
- run: npm run test:codecov
package/README.md CHANGED
@@ -1,18 +1,13 @@
1
1
  <div align="center">
2
2
 
3
- <img src="https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/google/146/female-mechanic_1f469-200d-1f527.png" width=70 />
3
+ ![](logo.png)
4
4
 
5
- <h1>Configuru<img src="https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/google/146/gear_2699.png" width=30 /></h1>
6
-
7
- [![Build Status](https://flat.badgen.net/travis/AckeeCZ/configuru)](https://travis-ci.com/AckeeCZ/configuru)
8
- [![Npm](https://flat.badgen.net/npm/v/configuru)](https://www.npmjs.com/package/configuru)
9
- [![Coverage](https://flat.badgen.net/codecov/c/github/AckeeCZ/configuru)](https://codecov.io/gh/AckeeCZ/configuru)
10
- [![Vulnerabilities](https://flat.badgen.net/snyk/AckeeCZ/configuru)](https://snyk.io/test/github/AckeeCZ/configuru?targetFile=package.json)
11
- [![Dependency Status](https://flat.badgen.net/david/dep/AckeeCZ/configuru)](https://david-dm.org/AckeeCZ/configuru)
12
- [![Dev Dependency Status](https://flat.badgen.net/david/dep/AckeeCZ/configuru)](https://david-dm.org/AckeeCZ/configuru?type=dev)
5
+ <h1>Configuru</h1>
13
6
 
14
7
  Manage the configuration of your Nodejs application with multiple environments and custom preferences, utilizing Configuru in CI and development as well!
15
8
 
9
+ Improve the DX when managing the configuration files, get inline help and more with the [VS Code extension](https://github.com/AckeeCZ/configuru-extension).
10
+
16
11
  </div>
17
12
 
18
13
  ## Features
@@ -20,7 +15,7 @@ Manage the configuration of your Nodejs application with multiple environments a
20
15
  Configuru is a library for configuration management. Merge default project configuration with your user config, you can link yo your project. Atop of that, override your configuration with system environment variables.
21
16
 
22
17
  - :relieved: Tailored for multi-developer comfort
23
- - :sparkles: Cast and transforms inputs to correct type
18
+ - :sparkles: Cast and transforms inputs to the correct type
24
19
  - :blue_heart: Typescript friendly
25
20
  - :muscle: Designed for multi-environment apps
26
21
  - :see_no_evil: Anonymized configuration for logger
@@ -45,6 +40,8 @@ npm install configuru
45
40
 
46
41
  3. _(optional)_ As a developer (or environment), create a custom override file (e.g. `~/.env/my-project.jsonc`) and save the path in your `CFG_JSON_PATH`.
47
42
 
43
+ Tip: Use inline secrets like `CFG_JSON_PATH='{"mysecret":"Sssshhh..."}'` or load from GCP Secret Manager: `CFG_JSON_PATH=$(gcloud secrets versions access latest --project=myproject --secret=mysecret)`
44
+
48
45
  4. Create a configuration module (e.g. `config.ts`)
49
46
 
50
47
  ```typescript
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export { createLoader } from './lib/loader';
2
- export { values, safeValues } from './lib/polishers';
2
+ export { values, maskedValues } from './lib/polishers';
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.safeValues = exports.values = exports.createLoader = void 0;
3
+ exports.maskedValues = exports.values = exports.createLoader = void 0;
4
4
  var loader_1 = require("./lib/loader");
5
5
  Object.defineProperty(exports, "createLoader", { enumerable: true, get: function () { return loader_1.createLoader; } });
6
6
  var polishers_1 = require("./lib/polishers");
7
7
  Object.defineProperty(exports, "values", { enumerable: true, get: function () { return polishers_1.values; } });
8
- Object.defineProperty(exports, "safeValues", { enumerable: true, get: function () { return polishers_1.safeValues; } });
8
+ Object.defineProperty(exports, "maskedValues", { enumerable: true, get: function () { return polishers_1.maskedValues; } });
9
9
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAA2C;AAAlC,sGAAA,YAAY,OAAA;AACrB,6CAAoD;AAA3C,mGAAA,MAAM,OAAA;AAAE,uGAAA,UAAU,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAA2C;AAAlC,sGAAA,YAAY,OAAA;AACrB,6CAAsD;AAA7C,mGAAA,MAAM,OAAA;AAAE,yGAAA,YAAY,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/lib/helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAA0C;AAEnC,IAAM,SAAS,GAAG,UAAC,GAAQ,IAAK,OAAA,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,EAAjC,CAAiC,CAAA;AAA3D,QAAA,SAAS,aAAkD;AAEjE,IAAM,SAAS,GAAG,UAAC,CAAM;IAC9B,OAAA,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAA/C,CAA+C,CAAA;AADpC,QAAA,SAAS,aAC2B;AAC1C,IAAM,QAAQ,GAAG,UAAI,CAAI,IAAK,OAAA,CAAC,EAAD,CAAC,CAAA;AAAzB,QAAA,QAAQ,YAAiB;AAE/B,IAAM,QAAQ,GAAG,UAAC,CAAM;IAC7B,OAAA,OAAO,CAAC,KAAK,QAAQ;QACrB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,iBAAiB;AADvD,CACuD,CAAA;AAF5C,QAAA,QAAQ,YAEoC;AAE5C,QAAA,KAAK,GAAG;IACnB,KAAK,EAAE,UAAC,IAAY;QAClB,IAAM,MAAM,GAA4B,EAAE,CAAA;QAC1C,IAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAC7C,IAAI,MAAM,CAAC,MAAM,EAAE;YACjB,MAAM,IAAI,WAAW,CACnB,UAAG,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,0BAChD,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAChB,CACH,CAAA;SACF;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF,CAAA"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/lib/helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAA0C;AAEnC,IAAM,SAAS,GAAG,UAAC,GAAQ,IAAK,OAAA,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,EAAjC,CAAiC,CAAA;AAA3D,QAAA,SAAS,aAAkD;AAEjE,IAAM,SAAS,GAAG,UAAC,CAAM;IAC9B,OAAA,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAA/C,CAA+C,CAAA;AADpC,QAAA,SAAS,aAC2B;AAC1C,IAAM,QAAQ,GAAG,UAAI,CAAI,IAAK,OAAA,CAAC,EAAD,CAAC,CAAA;AAAzB,QAAA,QAAQ,YAAiB;AAE/B,IAAM,QAAQ,GAAG,UAAC,CAAM;IAC7B,OAAA,OAAO,CAAC,KAAK,QAAQ;QACrB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,iBAAiB;AADvD,CACuD,CAAA;AAF5C,QAAA,QAAQ,YAEoC;AAE5C,QAAA,KAAK,GAAG;IACnB,KAAK,EAAE,UAAC,IAAY;QAClB,IAAM,MAAM,GAA4B,EAAE,CAAA;QAC1C,IAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAC7C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,IAAI,WAAW,CACnB,UAAG,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,0BAChD,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAChB,CACH,CAAA;QACH,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF,CAAA"}
@@ -22,15 +22,15 @@ var defaultOpts = {
22
22
  var createAtomLoaderFactory = function (storage) {
23
23
  var load = function (transform, hidden, nullable) {
24
24
  return function (key) {
25
+ var value = storage[key];
25
26
  var safeTransform = function (x) {
26
27
  try {
27
28
  return transform(x);
28
29
  }
29
- catch (e) {
30
+ catch (_error) {
30
31
  throw new Error("Failed to transform value >".concat(String(value), "< from key >").concat(key, "<"));
31
32
  }
32
33
  };
33
- var value = storage[key];
34
34
  var missing = value === undefined || value === null;
35
35
  if (!nullable && missing) {
36
36
  throw new Error("Missing required value ".concat(key));
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/lib/loader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,qCAAqC;AACrC,qCAA+C;AAQ/C,IAAM,WAAW,GAAwB;IACvC,iBAAiB,EAAE,MAAM;IACzB,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;IACzC,OAAO,EAAE,SAAS;CACnB,CAAA;AAcM,IAAM,uBAAuB,GAAG,UAAC,OAAyB;IAC/D,IAAM,IAAI,GACR,UACE,SAAwB,EACxB,MAAe,EACf,QAAiB;QAEnB,OAAA,UAAC,GAAW;YACV,IAAM,aAAa,GAAG,UAAC,CAAM;gBAC3B,IAAI;oBACF,OAAO,SAAS,CAAC,CAAC,CAAC,CAAA;iBACpB;gBAAC,OAAO,CAAC,EAAE;oBACV,MAAM,IAAI,KAAK,CACb,qCAA8B,MAAM,CAAC,KAAK,CAAC,yBAAe,GAAG,MAAG,CACjE,CAAA;iBACF;YACH,CAAC,CAAA;YACD,IAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;YAC1B,IAAM,OAAO,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAA;YACrD,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAE;gBACxB,MAAM,IAAI,KAAK,CAAC,iCAA0B,GAAG,CAAE,CAAC,CAAA;aACjD;YACD,OAAO;gBACL,MAAM,QAAA;gBACN,QAAQ,UAAA;gBACR,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,aAAa,CAAC,KAAK,CAAS;gBACrD,gBAAgB,EAAE,IAAI;aACvB,CAAA;QACH,CAAC;IAtBD,CAsBC,CAAA;IACH,OAAO,UAAI,SAAwB;QACjC,OAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAW,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE;YACrD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAW,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE;gBAC5D,QAAQ,EAAE,IAAI,CAAU,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC;aAC/C,CAAC;YACF,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAU,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE;gBAC7D,MAAM,EAAE,IAAI,CAAU,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC;aAC7C,CAAC;SACH,CAAC;IAPF,CAOE,CAAA;AACN,CAAC,CAAA;AAvCY,QAAA,uBAAuB,2BAuCnC;AAEM,IAAM,YAAY,GAAG,UAAC,IAAuC;IAAvC,qBAAA,EAAA,kBAAuC;IAClE,IAAI,yBAAQ,WAAW,GAAK,IAAI,CAAE,CAAA;IAClC,IAAM,aAAa,GAAG,IAAA,6BAAmB,EAAC,IAAI,CAAC,CAAA;IAC/C,IAAM,UAAU,GAAG,IAAA,+BAAuB,EAAC,aAAa,CAAC,CAAA;IACzD,OAAO;QACL,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC;QAC1B,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC;QAC1B,IAAI,EAAE,UAAU,CAAC,mBAAS,CAAC;QAC3B,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5B,MAAM,EAAE,UAAI,EAAiB,IAAK,OAAA,UAAU,CAAC,EAAE,CAAC,EAAd,CAAc;KACjD,CAAA;AACH,CAAC,CAAA;AAXY,QAAA,YAAY,gBAWxB"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/lib/loader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,qCAAqC;AACrC,qCAA+C;AAQ/C,IAAM,WAAW,GAAwB;IACvC,iBAAiB,EAAE,MAAM;IACzB,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;IACzC,OAAO,EAAE,SAAS;CACnB,CAAA;AAcM,IAAM,uBAAuB,GAAG,UAAC,OAAyB;IAC/D,IAAM,IAAI,GACR,UACE,SAAwB,EACxB,MAAe,EACf,QAAiB;QAEnB,OAAA,UAAC,GAAW;YACV,IAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;YAC1B,IAAM,aAAa,GAAG,UAAC,CAAM;gBAC3B,IAAI,CAAC;oBACH,OAAO,SAAS,CAAC,CAAC,CAAC,CAAA;gBACrB,CAAC;gBAAC,OAAO,MAAM,EAAE,CAAC;oBAChB,MAAM,IAAI,KAAK,CACb,qCAA8B,MAAM,CAAC,KAAK,CAAC,yBAAe,GAAG,MAAG,CACjE,CAAA;gBACH,CAAC;YACH,CAAC,CAAA;YACD,IAAM,OAAO,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAA;YACrD,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,iCAA0B,GAAG,CAAE,CAAC,CAAA;YAClD,CAAC;YACD,OAAO;gBACL,MAAM,QAAA;gBACN,QAAQ,UAAA;gBACR,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,aAAa,CAAC,KAAK,CAAS;gBACrD,gBAAgB,EAAE,IAAI;aACvB,CAAA;QACH,CAAC;IAtBD,CAsBC,CAAA;IACH,OAAO,UAAI,SAAwB;QACjC,OAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAW,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE;YACrD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAW,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE;gBAC5D,QAAQ,EAAE,IAAI,CAAU,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC;aAC/C,CAAC;YACF,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAU,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE;gBAC7D,MAAM,EAAE,IAAI,CAAU,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC;aAC7C,CAAC;SACH,CAAC;IAPF,CAOE,CAAA;AACN,CAAC,CAAA;AAvCY,QAAA,uBAAuB,2BAuCnC;AAEM,IAAM,YAAY,GAAG,UAAC,IAAuC;IAAvC,qBAAA,EAAA,kBAAuC;IAClE,IAAI,yBAAQ,WAAW,GAAK,IAAI,CAAE,CAAA;IAClC,IAAM,aAAa,GAAG,IAAA,6BAAmB,EAAC,IAAI,CAAC,CAAA;IAC/C,IAAM,UAAU,GAAG,IAAA,+BAAuB,EAAC,aAAa,CAAC,CAAA;IACzD,OAAO;QACL,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC;QAC1B,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC;QAC1B,IAAI,EAAE,UAAU,CAAC,mBAAS,CAAC;QAC3B,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5B,MAAM,EAAE,UAAI,EAAiB,IAAK,OAAA,UAAU,CAAC,EAAE,CAAC,EAAd,CAAc;KACjD,CAAA;AACH,CAAC,CAAA;AAXY,QAAA,YAAY,gBAWxB"}
@@ -1,11 +1,11 @@
1
1
  import { LoadedValue } from './loader';
2
- declare type LoadedToValue<X> = X extends LoadedValue<any, any> ? X['value'] extends Record<any, any> ? Values<X['value']> : X['value'] : X;
3
- declare type Values<C> = C extends (...args: any[]) => any ? C : C extends Record<any, any> ? {
2
+ type LoadedToValue<X> = X extends LoadedValue<any, any> ? X['value'] extends Record<any, any> ? Values<X['value']> : X['value'] : X;
3
+ type Values<C> = C extends (...args: any[]) => any ? C : C extends Record<any, any> ? {
4
4
  [K in keyof C]: C[K] extends LoadedValue<any, any> ? LoadedToValue<C[K]> : Values<C[K]>;
5
5
  } : C;
6
- declare type AnonymousValues<C> = C extends (...args: any[]) => any ? C : C extends Record<any, any> ? {
6
+ type AnonymousValues<C> = C extends (...args: any[]) => any ? C : C extends Record<any, any> ? {
7
7
  [K in keyof C]: C[K] extends LoadedValue<any, any> ? string : AnonymousValues<C[K]>;
8
8
  } : C;
9
9
  export declare const values: <T extends Record<any, any>>(config: T) => Values<T>;
10
- export declare const safeValues: <T extends Record<any, any>>(config: T) => AnonymousValues<T>;
10
+ export declare const maskedValues: <T extends Record<any, any>>(config: T) => AnonymousValues<T>;
11
11
  export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.safeValues = exports.values = void 0;
3
+ exports.maskedValues = exports.values = void 0;
4
4
  var helpers_1 = require("./helpers");
5
5
  var isLoadedValue = function (x) {
6
6
  return Object.keys(x || {}).includes('__CONFIGURU_LEAF');
@@ -23,7 +23,7 @@ var mapConfig = function (fn) {
23
23
  };
24
24
  };
25
25
  exports.values = mapConfig(function (x) { return x.value; });
26
- exports.safeValues = mapConfig(function (x) {
26
+ exports.maskedValues = mapConfig(function (x) {
27
27
  return x.hidden ? (0, helpers_1.anonymize)(x.rawValue) : x.value;
28
28
  });
29
29
  //# sourceMappingURL=polishers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"polishers.js","sourceRoot":"","sources":["../../src/lib/polishers.ts"],"names":[],"mappings":";;;AAAA,qCAA+C;AA6B/C,IAAM,aAAa,GAAG,UAAC,CAAM;IAC3B,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AAAjD,CAAiD,CAAA;AAEnD,IAAM,SAAS,GACb,UAAC,EAAqC;IACtC,OAAA,UAAC,GAAQ;QACP,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE;YACtB,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;SAC9B;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACtB,OAAO,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAA;SAC9B;QACD,IAAI,IAAA,kBAAQ,EAAC,GAAG,CAAC,EAAE;YACjB,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAC,GAAQ,EAAE,GAAG;gBAC3C,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;gBAClC,OAAO,GAAG,CAAA;YACZ,CAAC,EAAE,EAAE,CAAC,CAAA;SACP;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;AAdD,CAcC,CAAA;AAEU,QAAA,MAAM,GAAG,SAAS,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,EAAP,CAAO,CAE9B,CAAA;AACD,QAAA,UAAU,GAAG,SAAS,CAAC,UAAA,CAAC;IACnC,OAAA,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAA,mBAAS,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;AAA1C,CAA0C,CACsB,CAAA"}
1
+ {"version":3,"file":"polishers.js","sourceRoot":"","sources":["../../src/lib/polishers.ts"],"names":[],"mappings":";;;AAAA,qCAA+C;AA6B/C,IAAM,aAAa,GAAG,UAAC,CAAM;IAC3B,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AAAjD,CAAiD,CAAA;AAEnD,IAAM,SAAS,GACb,UAAC,EAAqC;IACtC,OAAA,UAAC,GAAQ;QACP,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QAC/B,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAA;QAC/B,CAAC;QACD,IAAI,IAAA,kBAAQ,EAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAC,GAAQ,EAAE,GAAG;gBAC3C,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;gBAClC,OAAO,GAAG,CAAA;YACZ,CAAC,EAAE,EAAE,CAAC,CAAA;QACR,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;AAdD,CAcC,CAAA;AAEU,QAAA,MAAM,GAAG,SAAS,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,EAAP,CAAO,CAE9B,CAAA;AACD,QAAA,YAAY,GAAG,SAAS,CAAC,UAAA,CAAC;IACrC,OAAA,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAA,mBAAS,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;AAA1C,CAA0C,CACsB,CAAA"}
@@ -28,7 +28,7 @@ var fileExistsSync = function (path) {
28
28
  try {
29
29
  return (0, fs_1.statSync)(path).isFile();
30
30
  }
31
- catch (e) {
31
+ catch (_error) {
32
32
  return false;
33
33
  }
34
34
  };
@@ -41,6 +41,14 @@ var fromPairs = function (pairs) {
41
41
  };
42
42
  var uniq = function (xs) { return Array.from(new Set(xs)); };
43
43
  var keys = Object.keys;
44
+ var loadInline = function (secrets) {
45
+ try {
46
+ return helpers_1.JSONC.parse(secrets);
47
+ }
48
+ catch (_a) {
49
+ throw new Error('Invalid inline secrets');
50
+ }
51
+ };
44
52
  var loadFile = function (filePath) {
45
53
  if (!filePath)
46
54
  return {};
@@ -59,13 +67,23 @@ var loadFile = function (filePath) {
59
67
  try {
60
68
  return helpers_1.JSONC.parse((0, fs_1.readFileSync)(resolvedPath, 'utf-8'));
61
69
  }
62
- catch (error) {
70
+ catch (_error) {
63
71
  throw new Error("Invalid config file in ".concat((0, path_1.join)((0, path_1.resolve)('.'), resolvedPath)));
64
72
  }
65
73
  };
74
+ var isInlineSecret = function (secretsOrFilename) {
75
+ var _a;
76
+ return (_a = secretsOrFilename === null || secretsOrFilename === void 0 ? void 0 : secretsOrFilename.trim().startsWith('{')) !== null && _a !== void 0 ? _a : false;
77
+ };
78
+ var loadSecrets = function (secretsOrFilename) {
79
+ if (isInlineSecret(secretsOrFilename)) {
80
+ return loadInline(secretsOrFilename);
81
+ }
82
+ return loadFile(secretsOrFilename);
83
+ };
66
84
  var createConfigStorage = function (opts) {
67
- var defaultConfig = loadFile(opts.defaultConfigPath);
68
- var userConfig = loadFile(opts.userConfigPath);
85
+ var defaultConfig = loadSecrets(opts.defaultConfigPath);
86
+ var userConfig = loadSecrets(opts.userConfigPath);
69
87
  var envConfig = {};
70
88
  if (opts.envMode === 'default' || opts.envMode === 'merged') {
71
89
  var configKeys = __spreadArray(__spreadArray([], keys(defaultConfig), true), (opts.envMode === 'merged' ? keys(userConfig) : []), true);
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/lib/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/lib/storage.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* eslint-disable sonarjs/no-duplicate-string */
3
4
  var path_1 = require("path");
4
5
  var storage_1 = require("../lib/storage");
5
6
  describe('storage', function () {
@@ -58,5 +59,21 @@ describe('storage', function () {
58
59
  envMode: 'default',
59
60
  })).toMatchInlineSnapshot("\n Object {\n \"bar\": \"3\",\n \"baz\": 2,\n \"defaultConfig\": true,\n \"foo\": \"env\",\n \"quix\": false,\n \"userConfig\": true,\n }\n ");
60
61
  });
62
+ test('Default configuration can be inline', function () {
63
+ expect((0, storage_1.createConfigStorage)({
64
+ defaultConfigPath: JSON.stringify({
65
+ inlinesecret: 'secret',
66
+ }),
67
+ })).toMatchInlineSnapshot("\n Object {\n \"inlinesecret\": \"secret\",\n }\n ");
68
+ });
69
+ test('User configuration can be inline', function () {
70
+ expect((0, storage_1.createConfigStorage)({
71
+ defaultConfigPath: (0, path_1.resolve)(__dirname, './sandbox/default.json'),
72
+ userConfigPath: JSON.stringify({
73
+ bar: 'inline',
74
+ inlinesecret: 'secret',
75
+ }),
76
+ })).toMatchInlineSnapshot("\n Object {\n \"bar\": \"inline\",\n \"baz\": 2,\n \"defaultConfig\": true,\n \"foo\": \"default\",\n \"inlinesecret\": \"secret\",\n }\n ");
77
+ });
61
78
  });
62
79
  //# sourceMappingURL=storage.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.test.js","sourceRoot":"","sources":["../../src/test/storage.test.ts"],"names":[],"mappings":";;AAAA,6BAA8B;AAC9B,0CAAoD;AAEpD,QAAQ,CAAC,SAAS,EAAE;IAClB,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,CAAC,IAAA,6BAAmB,EAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,gCAAgC,EAAE;QACrC,MAAM,CAAC;YACL,OAAA,IAAA,6BAAmB,EAAC;gBAClB,iBAAiB,EAAE,IAAA,cAAO,EAAC,SAAS,EAAE,iBAAiB,CAAC;aACzD,CAAC;QAFF,CAEE,CACH,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACpB,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,6BAA6B,EAAE;QAClC,MAAM,CAAC;YACL,OAAA,IAAA,6BAAmB,EAAC;gBAClB,iBAAiB,EAAE,IAAA,cAAO,EAAC,SAAS,EAAE,mBAAmB,CAAC;aAC3D,CAAC;QAFF,CAEE,CACH,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACpB,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,wBAAwB,EAAE;QAC7B,IAAM,GAAG,GAAG,IAAA,6BAAmB,EAAC;YAC9B,iBAAiB,EAAE,IAAA,cAAO,EAAC,SAAS,EAAE,mBAAmB,CAAC;SAC3D,CAAC,CAAA;QACF,IAAM,OAAO,GAAG,IAAA,6BAAmB,EAAC;YAClC,iBAAiB,EAAE,IAAA,cAAO,EAAC,SAAS,EAAE,wBAAwB,CAAC;SAChE,CAAC,CAAA;QACF,IAAM,QAAQ,GAAG,IAAA,6BAAmB,EAAC;YACnC,iBAAiB,EAAE,IAAA,cAAO,EAAC,SAAS,EAAE,yBAAyB,CAAC;SACjE,CAAC,CAAA;QACF,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAClC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,SAAS,EAAE;QACd,MAAM,CACJ,IAAA,6BAAmB,EAAC;YAClB,iBAAiB,EAAE,IAAA,cAAO,EAAC,SAAS,EAAE,wBAAwB,CAAC;SAChE,CAAC,CACH,CAAC,qBAAqB,CAAC,oLAOnB,CAAC,CAAA;IACR,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,iBAAiB,EAAE;QACtB,MAAM,CACJ,IAAA,6BAAmB,EAAC;YAClB,iBAAiB,EAAE,IAAA,cAAO,EAAC,SAAS,EAAE,yBAAyB,CAAC;SACjE,CAAC,CACH,CAAC,qBAAqB,CAAC,oLAOnB,CAAC,CAAA;IACR,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,gBAAgB,EAAE;QACrB,MAAM,CACJ,IAAA,6BAAmB,EAAC;YAClB,iBAAiB,EAAE,IAAA,cAAO,EAAC,SAAS,EAAE,wBAAwB,CAAC;YAC/D,cAAc,EAAE,IAAA,cAAO,EAAC,SAAS,EAAE,qBAAqB,CAAC;SAC1D,CAAC,CACH,CAAC,qBAAqB,CAAC,sPASnB,CAAC,CAAA;IACR,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,sBAAsB,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAA;QACvB,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;QACrB,MAAM,CACJ,IAAA,6BAAmB,EAAC;YAClB,iBAAiB,EAAE,IAAA,cAAO,EAAC,SAAS,EAAE,wBAAwB,CAAC;YAC/D,cAAc,EAAE,IAAA,cAAO,EAAC,SAAS,EAAE,qBAAqB,CAAC;YACzD,OAAO,EAAE,SAAS;SACnB,CAAC,CACH,CAAC,qBAAqB,CAAC,6RASf,CAAC,CAAA;IACZ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"storage.test.js","sourceRoot":"","sources":["../../src/test/storage.test.ts"],"names":[],"mappings":"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"}
package/logo.png ADDED
Binary file
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "configuru",
3
3
  "description": "Manage the configuration of your Nodejs application with multiple environments and custom preferences, utilizing Configuru in CI and development as well!",
4
- "version": "0.6.2",
4
+ "version": "1.1.0",
5
5
  "author": "Jaroslav Šmolík <grissius@gmail.com>",
6
6
  "contributors": [
7
7
  "Jaroslav Šmolík <grissius@gmail.com>"
8
8
  ],
9
9
  "main": "./dist/index.js",
10
10
  "engines": {
11
- "node": ">=12"
11
+ "node": ">=18"
12
12
  },
13
13
  "repository": {
14
14
  "type": "git",
@@ -36,30 +36,26 @@
36
36
  "build": "tsc",
37
37
  "test": "jest",
38
38
  "test:coverage": "npm run test -- --collectCoverage",
39
- "test:codecov": "codecov",
40
- "cs:eslint:check": "eslint --ignore-path .gitignore '**/*.ts' -f codeframe",
41
- "cs:eslint:fix": "npm run cs:eslint:check -- --fix",
42
- "cs:prettier:check": "prettier --ignore-path .gitignore --check '**/*.{ts,js,json,md}'",
43
- "cs:prettier:fix": "npm run cs:prettier:check -- --write '**/*.{ts,js,json,md}'",
39
+ "lint:check": "eslint --ignore-path .gitignore '**/*.ts' -f codeframe",
40
+ "lint:fix": "npm run lint:check -- --fix",
41
+ "prettier:check": "prettier --ignore-path .gitignore --check '**/*.{ts,js,json,md}'",
42
+ "prettier:fix": "npm run prettier:check -- --write '**/*.{ts,js,json,md}'",
44
43
  "prepare": "husky install",
45
- "docs": "typedoc --options typedoc.json src/lib/*.ts",
46
- "check": "npm-check -i app -i errors -i config -i index & exit 0"
44
+ "docs": "typedoc --options typedoc.json src/lib/*.ts"
47
45
  },
48
46
  "dependencies": {
49
47
  "jsonc-parser": "^3.1.0"
50
48
  },
51
49
  "devDependencies": {
52
- "@ackee/styleguide-backend-config": "^0.3.2",
50
+ "@ackee/styleguide-backend-config": "^0.5.0",
53
51
  "@types/jest": "^28.1.4",
54
52
  "@types/node": "^18.0.3",
55
- "codecov": "^3.8.2",
56
53
  "husky": "^8.0.1",
57
54
  "jest": "^28.1.2",
58
55
  "lint-staged": "^13.0.3",
59
- "npm-check": "^5.9.2",
60
56
  "prettier": "^2.7.1",
61
57
  "ts-jest": "^28.0.5",
62
- "typedoc": "^0.23.7",
63
- "typescript": "^4.7.4"
58
+ "typedoc": "^0.25.4",
59
+ "typescript": "^5.4.5"
64
60
  }
65
61
  }
package/src/index.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export { createLoader } from './lib/loader'
2
- export { values, safeValues } from './lib/polishers'
2
+ export { values, maskedValues } from './lib/polishers'
package/src/lib/loader.ts CHANGED
@@ -33,16 +33,16 @@ export const createAtomLoaderFactory = (storage: Record<any, any>) => {
33
33
  nullable: boolean
34
34
  ) =>
35
35
  (key: string): LoadedValue<T, N> => {
36
+ const value = storage[key]
36
37
  const safeTransform = (x: any) => {
37
38
  try {
38
39
  return transform(x)
39
- } catch (e) {
40
+ } catch (_error) {
40
41
  throw new Error(
41
42
  `Failed to transform value >${String(value)}< from key >${key}<`
42
43
  )
43
44
  }
44
45
  }
45
- const value = storage[key]
46
46
  const missing = value === undefined || value === null
47
47
  if (!nullable && missing) {
48
48
  throw new Error(`Missing required value ${key}`)
@@ -51,6 +51,6 @@ const mapConfig =
51
51
  export const values = mapConfig(x => x.value) as <T extends Record<any, any>>(
52
52
  config: T
53
53
  ) => Values<T>
54
- export const safeValues = mapConfig(x =>
54
+ export const maskedValues = mapConfig(x =>
55
55
  x.hidden ? anonymize(x.rawValue) : x.value
56
56
  ) as <T extends Record<any, any>>(config: T) => AnonymousValues<T>
@@ -6,7 +6,7 @@ import { ConfigLoaderOptions } from './loader'
6
6
  const fileExistsSync = (path: string) => {
7
7
  try {
8
8
  return statSync(path).isFile()
9
- } catch (e) {
9
+ } catch (_error) {
10
10
  return false
11
11
  }
12
12
  }
@@ -15,6 +15,14 @@ const fromPairs = (pairs: Array<[keyof any, any]>) =>
15
15
  const uniq = <T>(xs: T[]) => Array.from(new Set(xs))
16
16
  const { keys } = Object
17
17
 
18
+ const loadInline = (secrets: string) => {
19
+ try {
20
+ return JSONC.parse(secrets)
21
+ } catch {
22
+ throw new Error('Invalid inline secrets')
23
+ }
24
+ }
25
+
18
26
  const loadFile = (filePath?: string) => {
19
27
  if (!filePath) return {}
20
28
  const { dir, name } = parse(filePath)
@@ -33,21 +41,34 @@ const loadFile = (filePath?: string) => {
33
41
  }
34
42
  try {
35
43
  return JSONC.parse(readFileSync(resolvedPath, 'utf-8'))
36
- } catch (error) {
44
+ } catch (_error) {
37
45
  throw new Error(
38
46
  `Invalid config file in ${join(resolve('.'), resolvedPath)}`
39
47
  )
40
48
  }
41
49
  }
42
50
 
51
+ const isInlineSecret = (
52
+ secretsOrFilename?: string
53
+ ): secretsOrFilename is string => {
54
+ return secretsOrFilename?.trim().startsWith('{') ?? false
55
+ }
56
+
57
+ const loadSecrets = (secretsOrFilename?: string) => {
58
+ if (isInlineSecret(secretsOrFilename)) {
59
+ return loadInline(secretsOrFilename)
60
+ }
61
+ return loadFile(secretsOrFilename)
62
+ }
63
+
43
64
  export const createConfigStorage = (
44
65
  opts: Pick<
45
66
  ConfigLoaderOptions,
46
67
  'defaultConfigPath' | 'userConfigPath' | 'envMode'
47
68
  >
48
69
  ): Record<any, any> => {
49
- const defaultConfig = loadFile(opts.defaultConfigPath)
50
- const userConfig = loadFile(opts.userConfigPath)
70
+ const defaultConfig = loadSecrets(opts.defaultConfigPath)
71
+ const userConfig = loadSecrets(opts.userConfigPath)
51
72
  let envConfig: any = {}
52
73
  if (opts.envMode === 'default' || opts.envMode === 'merged') {
53
74
  const configKeys = [
@@ -1,3 +1,4 @@
1
+ /* eslint-disable sonarjs/no-duplicate-string */
1
2
  import { resolve } from 'path'
2
3
  import { createConfigStorage } from '../lib/storage'
3
4
 
@@ -97,4 +98,36 @@ describe('storage', () => {
97
98
  }
98
99
  `)
99
100
  })
101
+ test('Default configuration can be inline', () => {
102
+ expect(
103
+ createConfigStorage({
104
+ defaultConfigPath: JSON.stringify({
105
+ inlinesecret: 'secret',
106
+ }),
107
+ })
108
+ ).toMatchInlineSnapshot(`
109
+ Object {
110
+ "inlinesecret": "secret",
111
+ }
112
+ `)
113
+ })
114
+ test('User configuration can be inline', () => {
115
+ expect(
116
+ createConfigStorage({
117
+ defaultConfigPath: resolve(__dirname, './sandbox/default.json'),
118
+ userConfigPath: JSON.stringify({
119
+ bar: 'inline',
120
+ inlinesecret: 'secret',
121
+ }),
122
+ })
123
+ ).toMatchInlineSnapshot(`
124
+ Object {
125
+ "bar": "inline",
126
+ "baz": 2,
127
+ "defaultConfig": true,
128
+ "foo": "default",
129
+ "inlinesecret": "secret",
130
+ }
131
+ `)
132
+ })
100
133
  })
@@ -18,7 +18,7 @@ const { configurable, static } = values(configSchema)
18
18
  `config.ts`
19
19
 
20
20
  ```typescript
21
- import { createLoader, values, safeValues } from 'configuru'
21
+ import { createLoader, values, maskedValues } from 'configuru'
22
22
  const loader = createLoader()
23
23
 
24
24
  // create `buildConfig` function, we will use two loaders
@@ -28,30 +28,30 @@ const configSchema = {
28
28
  }
29
29
 
30
30
  export default values(configSchema)
31
- export const safeConfig = safeValues(configSchema)
31
+ export const maskedConfig = maskedValues(configSchema)
32
32
  ```
33
33
 
34
34
  `foo.ts`
35
35
 
36
36
  ```typescript
37
- import config, { safeConfig } from './config'
37
+ import config, { maskedValues } from './config'
38
38
 
39
39
  // use in your app, never log
40
40
  config.apiKey // szvor4VYgS79z3QSBtmN0dJeyXbg1Xip
41
41
 
42
42
  // don't use, is truncated (or hidden for shorter vars) but okay-ish to log
43
- safeConfig.apiKey // szvor***g1Xip
43
+ maskedConfig.apiKey // [redacted]
44
44
  ```
45
45
 
46
46
  ### Options
47
47
 
48
48
  ```typescript
49
- import { createLoader } from 'configuru';
49
+ import { createLoader } from 'configuru'
50
50
  const loader = createLoader({
51
- defaultConfigPath: 'default-config'; // defaults to ".env"
52
- userConfigPath: process.env.USER_CONFIG; // defaults to process.env.CFG_JSON_PATH
53
- envMode?: 'all'; // defaults to "default"
54
- });
51
+ defaultConfigPath: 'default-config', // defaults to ".env"
52
+ userConfigPath: process.env.USER_CONFIG, // defaults to process.env.CFG_JSON_PATH
53
+ envMode: 'all', // defaults to "default"
54
+ })
55
55
  ```
56
56
 
57
57
  1. `defaultConfigPath`: Where to look for your default config JSON file (provide null to skip)
@@ -140,7 +140,7 @@ const schema = {
140
140
  })('HOSTS'),
141
141
  }
142
142
 
143
- console.log(safeValues(schema))
143
+ console.log(maskedValues(schema))
144
144
  // [
145
145
  // {
146
146
  // "host": "host1",
@@ -1,37 +0,0 @@
1
- ---
2
- name: Bug report
3
- about: Create a report to help us improve
4
- title: ''
5
- labels: bug
6
- assignees: ''
7
- ---
8
-
9
- **Describe the bug**
10
-
11
- > A clear and concise description of what the bug is.
12
-
13
- **To Reproduce**
14
-
15
- > Add code snippets, or minimal working example with repo
16
-
17
- **Expected behavior**
18
-
19
- > A clear and concise description of what you expected to happen.
20
-
21
- **Additional context**
22
-
23
- Configuru version: `x.y.z`
24
- Relevant environemnt variables / configuration files:
25
-
26
- ```
27
- CFG_JSON_PATH=~/.env/my-project.jsonc
28
- ```
29
-
30
- ```jsonc
31
- {
32
- // HTTP server
33
- "SERVER_PORT": 3000 // port the server will be listening on
34
- }
35
- ```
36
-
37
- > ⚠️ BEWARE OF SHARING CONFIDENT INFORMATION, BE SURE TO SUGGEST JUST A STRUCTURE OR SAFE VALUES
@@ -1,18 +0,0 @@
1
- ---
2
- name: Feature request
3
- about: Suggest an idea for this project
4
- title: ''
5
- labels: ''
6
- assignees: ''
7
- ---
8
-
9
- **Is your feature request related to a problem? Please describe.**
10
-
11
- > A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12
-
13
- **Describe the solution you'd like**
14
-
15
- > A clear and concise description of what you want to happen.
16
-
17
- **Additional context**
18
- Add any other context, alternatives, related issues etc.