@balena/env-parsing 1.1.12 → 1.2.0-build-arrayVar-0de419ef04855ae2aeb5ed4fa66f81f4dafcc6e0-1

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,3 +1,15 @@
1
+ - commits:
2
+ - subject: Add the arrayVar helper
3
+ hash: 0de419ef04855ae2aeb5ed4fa66f81f4dafcc6e0
4
+ body: ""
5
+ footer:
6
+ Change-type: minor
7
+ change-type: minor
8
+ author: Thodoris Greasidis
9
+ nested: []
10
+ version: 1.2.0
11
+ title: ""
12
+ date: 2024-09-11T11:45:39.393Z
1
13
  - commits:
2
14
  - subject: Add lint-staged and pre-commit script
3
15
  hash: 3937c571923d66e605c2938f42871d32c03b26f7
@@ -26,7 +38,7 @@
26
38
  nested: []
27
39
  version: 1.1.12
28
40
  title: ""
29
- date: 2024-04-09T02:15:05.308Z
41
+ date: 2024-04-09T02:21:56.121Z
30
42
  - commits:
31
43
  - subject: Update type import
32
44
  hash: 048e9954236aed01865141c3860e79a0400798d7
package/CHANGELOG.md CHANGED
@@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file
4
4
  automatically by Versionist. DO NOT EDIT THIS FILE MANUALLY!
5
5
  This project adheres to [Semantic Versioning](http://semver.org/).
6
6
 
7
+ ## 1.2.0 - 2024-09-11
8
+
9
+ * Add the arrayVar helper [Thodoris Greasidis]
10
+
7
11
  ## 1.1.12 - 2024-04-09
8
12
 
9
13
  * Add lint-staged and pre-commit script [Josh Bowling]
package/build/index.d.ts CHANGED
@@ -41,6 +41,14 @@ export declare function intVar<R>(varName: string | string[], defaultValue: R):
41
41
  */
42
42
  export declare function boolVar(varName: string | string[]): boolean;
43
43
  export declare function boolVar<R>(varName: string | string[], defaultValue: R): boolean | R;
44
+ /**
45
+ * Splits an env var using the provided delimiter (defaults to ',') into an array of individual string values.
46
+ * Optionally accepts an array of allowed values for the array.
47
+ */
48
+ export declare const arrayVar: <S extends string>(name: string, { delimiter, allowedValues, }?: {
49
+ delimiter?: string | RegExp;
50
+ allowedValues?: S[];
51
+ }) => S[] | undefined;
44
52
  export type HostPort = {
45
53
  host: string;
46
54
  port: number;
package/build/index.js CHANGED
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.trustProxyVar = exports.hostPortsVar = exports.boolVar = exports.intVar = exports.checkInt = exports.optionalVar = exports.requiredVar = exports.DAYS = exports.HOURS = exports.MINUTES = exports.SECONDS = exports.SECONDS_PER_HOUR = void 0;
3
+ exports.trustProxyVar = exports.hostPortsVar = exports.arrayVar = exports.checkInt = exports.requiredVar = exports.DAYS = exports.HOURS = exports.MINUTES = exports.SECONDS = exports.SECONDS_PER_HOUR = void 0;
4
+ exports.optionalVar = optionalVar;
5
+ exports.intVar = intVar;
6
+ exports.boolVar = boolVar;
4
7
  exports.SECONDS_PER_HOUR = 60 * 60;
5
8
  /**
6
9
  * In milliseconds
@@ -47,7 +50,6 @@ function optionalVar(varName, defaultValue) {
47
50
  }
48
51
  return defaultValue;
49
52
  }
50
- exports.optionalVar = optionalVar;
51
53
  /**
52
54
  * Checks that a string is a valid int and returns the number if so
53
55
  */
@@ -80,7 +82,6 @@ function intVar(varName, defaultValue) {
80
82
  }
81
83
  return i;
82
84
  }
83
- exports.intVar = intVar;
84
85
  function boolVar(varName, defaultValue) {
85
86
  if (arguments.length === 1) {
86
87
  (0, exports.requiredVar)(varName);
@@ -97,7 +98,23 @@ function boolVar(varName, defaultValue) {
97
98
  }
98
99
  throw new Error(`Invalid value for boolean var '${varName}', got '${s}', expected 'true' or 'false'`);
99
100
  }
100
- exports.boolVar = boolVar;
101
+ /**
102
+ * Splits an env var using the provided delimiter (defaults to ',') into an array of individual string values.
103
+ * Optionally accepts an array of allowed values for the array.
104
+ */
105
+ const arrayVar = (name, { delimiter = ',', allowedValues, } = {}) => {
106
+ const rawValue = optionalVar(name);
107
+ if (rawValue == null) {
108
+ return rawValue;
109
+ }
110
+ const items = rawValue.split(delimiter);
111
+ const allowedValueSet = allowedValues != null ? new Set(allowedValues) : null;
112
+ if (allowedValueSet != null && items.some((v) => !allowedValueSet.has(v))) {
113
+ throw new Error(`'${name}' must be a '${delimiter.toString()}' delimited string with one or more of the allowed values: ${[...allowedValueSet].toString()}`);
114
+ }
115
+ return items;
116
+ };
117
+ exports.arrayVar = arrayVar;
101
118
  /**
102
119
  * Splits an env var in the format of `${host1}:${port1}, ${host2}:${port2}, ...`
103
120
  * into an array of individual host/port pairings
@@ -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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@balena/env-parsing",
3
- "version": "1.1.12",
3
+ "version": "1.2.0-build-arrayVar-0de419ef04855ae2aeb5ed4fa66f81f4dafcc6e0-1",
4
4
  "description": "A collection of utilities to simplify/standardize env var parsing",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -47,6 +47,6 @@
47
47
  ]
48
48
  },
49
49
  "versionist": {
50
- "publishedAt": "2024-04-09T02:15:05.370Z"
50
+ "publishedAt": "2024-09-11T11:45:39.454Z"
51
51
  }
52
52
  }
package/src/index.ts CHANGED
@@ -141,6 +141,36 @@ export function boolVar<R>(
141
141
  );
142
142
  }
143
143
 
144
+ /**
145
+ * Splits an env var using the provided delimiter (defaults to ',') into an array of individual string values.
146
+ * Optionally accepts an array of allowed values for the array.
147
+ */
148
+ export const arrayVar = <S extends string>(
149
+ name: string,
150
+ {
151
+ delimiter = ',',
152
+ allowedValues,
153
+ }: {
154
+ delimiter?: string | RegExp;
155
+ allowedValues?: S[];
156
+ } = {},
157
+ ): S[] | undefined => {
158
+ const rawValue = optionalVar(name);
159
+ if (rawValue == null) {
160
+ return rawValue;
161
+ }
162
+ const items = rawValue.split(delimiter);
163
+
164
+ const allowedValueSet =
165
+ allowedValues != null ? new Set<string>(allowedValues) : null;
166
+ if (allowedValueSet != null && items.some((v) => !allowedValueSet.has(v))) {
167
+ throw new Error(
168
+ `'${name}' must be a '${delimiter.toString()}' delimited string with one or more of the allowed values: ${[...allowedValueSet].toString()}`,
169
+ );
170
+ }
171
+ return items as S[];
172
+ };
173
+
144
174
  export type HostPort = { host: string; port: number };
145
175
  /**
146
176
  * Splits an env var in the format of `${host1}:${port1}, ${host2}:${port2}, ...`
package/test/index.ts CHANGED
@@ -7,6 +7,7 @@ import {
7
7
  requiredVar,
8
8
  hostPortsVar,
9
9
  trustProxyVar,
10
+ arrayVar,
10
11
  } from '../src';
11
12
  import type { HostPort } from '../src';
12
13
 
@@ -118,6 +119,40 @@ for (const [testType, varTest] of varTests) {
118
119
  });
119
120
  });
120
121
 
122
+ describe('arrayVar', () => {
123
+ if (typeof varTest !== 'string') {
124
+ return;
125
+ }
126
+ it('should return undefined array when the env var is missing', () => {
127
+ expect(arrayVar(varTest)).to.be.undefined;
128
+ });
129
+ it('should return an array of one item when there is no delimiter in the string', () => {
130
+ setVar('value1');
131
+ expect(arrayVar(varTest)).to.deep.equal(['value1']);
132
+ });
133
+ it('should return an array of two items when the default delimiter is part of the string', () => {
134
+ setVar('value1,value2,value3');
135
+ expect(arrayVar(varTest)).to.deep.equal(['value1', 'value2', 'value3']);
136
+ });
137
+ it('should include leading & trailing whitespaces in the array values', () => {
138
+ setVar(', value1 , value2 ');
139
+ expect(arrayVar(varTest)).to.deep.equal(['', ' value1 ', ' value2 ']);
140
+ });
141
+ it('should return an array of two items when the provided delimiter is part of the string', () => {
142
+ setVar('val,ue1;val,ue2;val,ue3');
143
+ expect(arrayVar(varTest, { delimiter: ';' })).to.deep.equal([
144
+ 'val,ue1',
145
+ 'val,ue2',
146
+ 'val,ue3',
147
+ ]);
148
+ });
149
+ it('should throw when the array includes items that are not part of the allowed values', () => {
150
+ setVar('value1,value2,value3');
151
+ expect(() => arrayVar(varTest, { allowedValues: ['value1', 'value2'] }))
152
+ .to.throw;
153
+ });
154
+ });
155
+
121
156
  describe('splitHostPort', () => {
122
157
  const defaultValue: HostPort[] = [];
123
158
  it('should throw when the env var is missing', () => {