@skmtc/core 0.0.360 → 0.0.362

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":"FunctionParameter.d.ts","sourceRoot":"","sources":["../../src/typescript/FunctionParameter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,cAAc,EACf,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,KAAK,UAAU,GAAG;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,UAAU,CAAC,gBAAgB,GAAG,cAAc,CAAC,CAAA;IAC7D,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,KAAK,mBAAmB,GACpB,aAAa,GACb,qBAAqB,GACrB,gBAAgB,CAAA;AAEpB,KAAK,aAAa,GAAG;IACnB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,qBAAqB,GAAG;IAC3B,IAAI,EAAE,cAAc,CAAA;IACpB,cAAc,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAA;IAC5C,QAAQ,EAAE,IAAI,CAAA;CACf,CAAA;AAED,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,UAAU,CAAC,eAAe,CAAC,CAAA;IAC3C,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,qBAAa,iBAAiB;IAC5B,UAAU,EAAE,mBAAmB,CAAA;gBAEnB,IAAI,EAAE,UAAU;IAyB5B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAelC,cAAc,IAAI,IAAI;IAYtB,SAAS,IAAI,MAAM;IAUnB,QAAQ,IAAI,MAAM;CAcnB"}
1
+ {"version":3,"file":"FunctionParameter.d.ts","sourceRoot":"","sources":["../../src/typescript/FunctionParameter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,cAAc,EACf,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAIhC,KAAK,UAAU,GAAG;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,UAAU,CAAC,gBAAgB,GAAG,cAAc,CAAC,CAAA;IAC7D,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,KAAK,mBAAmB,GACpB,aAAa,GACb,qBAAqB,GACrB,gBAAgB,CAAA;AAEpB,KAAK,aAAa,GAAG;IACnB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,qBAAqB,GAAG;IAC3B,IAAI,EAAE,cAAc,CAAA;IACpB,cAAc,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAA;IAC5C,QAAQ,EAAE,IAAI,CAAA;CACf,CAAA;AAED,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,UAAU,CAAC,eAAe,CAAC,CAAA;IAC3C,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,qBAAa,iBAAiB;IAC5B,UAAU,EAAE,mBAAmB,CAAA;gBAEnB,IAAI,EAAE,UAAU;IAyB5B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAelC,cAAc,IAAI,IAAI;IAYtB,SAAS,IAAI,MAAM;IAUnB,QAAQ,IAAI,MAAM;CAcnB"}
@@ -1,25 +1,29 @@
1
1
  import type { Stringable } from '../dsl/Stringable.js';
2
- type ConstructorOptions = {
3
- separator?: string;
4
- bookends?: 'square' | 'curly' | 'round' | 'angle' | 'none';
2
+ type BookendsType = '[]' | '{}' | '()' | '<>' | 'none';
3
+ type ConstructorOptions<Separator extends string = ', ', Bookends extends BookendsType = 'none'> = {
4
+ separator?: Separator;
5
+ bookends?: Bookends;
5
6
  };
6
- export declare class List {
7
- values: Stringable[];
8
- separator: string;
9
- bookends: 'square' | 'curly' | 'round' | 'angle' | 'none';
10
- constructor(values: (Stringable | undefined)[], { separator, bookends }?: ConstructorOptions);
7
+ type ExtractArrayItem<ArrayOf> = ArrayOf extends Array<infer Item> ? Item : never;
8
+ type ToFilteredKeyValueReturn<Value extends undefined | Stringable | Stringable[] | List> = Value extends undefined ? undefined : List<[string, Stringable | Stringable[] | List], ': ', 'none'>;
9
+ type ToConditionalReturn<Value extends Stringable, Condition extends boolean> = Condition extends true ? List<[Value], ', ', 'none'> : List<never[], ', ', 'none'>;
10
+ export declare class List<Values extends Stringable[] = Stringable[], Separator extends string = ', ', Bookends extends BookendsType = 'none'> {
11
+ values: ExtractArrayItem<Values>[];
12
+ separator: Separator;
13
+ bookends: Bookends;
14
+ constructor(values: (ExtractArrayItem<Values> | undefined)[], { separator, bookends }?: ConstructorOptions<Separator, Bookends>);
11
15
  toString(): string;
12
16
  /**
13
17
  * Create an empty List that will render as an empty string ''
14
18
  * @returns List
15
19
  */
16
- static toEmpty: () => List;
20
+ static toEmpty: () => List<never, ", ", "none">;
17
21
  /**
18
22
  * Create a List with a single value that will render as `value`
19
23
  * @param value
20
24
  * @returns List
21
25
  */
22
- static toSingle: (value: Stringable) => List;
26
+ static toSingle: (value: Stringable) => List<[Stringable], ", ", "none">;
23
27
  /**
24
28
  * If condition is true, return a List with a single value that will render as `value`.
25
29
  * Otherwise, return an empty List that will render as an empty string ''.
@@ -30,46 +34,52 @@ export declare class List {
30
34
  * @param condition
31
35
  * @returns List
32
36
  */
33
- static toConditional: (value: Stringable, condition: boolean) => List;
37
+ static toConditional: <Value extends Stringable, Condition extends boolean>(value: Value, condition: Condition) => ToConditionalReturn<List<[Value], ", ", "none">, Condition>;
34
38
  /**
35
39
  * Create a record with Stringable values. KeyValue pairs will be joined with `: ` as separator
36
40
  * and the resulting List will be wrapped with `{}`
37
41
  * @param record
38
42
  * @returns `record` with `Stringable` values
39
43
  */
40
- static toRecord: (record: Record<string, Stringable | Stringable[] | List>) => List;
44
+ static toRecord: (record: Record<string, Stringable | Stringable[] | List>) => List<Stringable[], ", ", "{}">;
41
45
  /**
42
46
  * Create a record with `undefined` or empty array or List values filtered out.
43
47
  * @param record
44
48
  * @returns `record` with `undefined` values filtered out
45
49
  */
46
- static toFilteredRecord: (record: Record<string, undefined | Stringable | Stringable[] | List>) => List;
50
+ static toFilteredRecord: (record: Record<string, undefined | Stringable | Stringable[] | List>) => List<Stringable[], ", ", "{}">;
47
51
  /**
48
52
  * Join `key` and `value` using `: ` as separator
49
53
  * @param key
50
54
  * @param value
51
55
  * @returns `key` and `value` joined with `: ` as separator
52
56
  */
53
- static toKeyValue: (key: string, value: Stringable) => List;
57
+ static toKeyValue: <Value extends Stringable | Stringable[] | List>(key: string, value: Value) => List<[string, Value], ": ", "none">;
54
58
  /**
55
59
  * Join `key` and `value` using `.` as separator
56
60
  * @param key
57
61
  * @param value
58
62
  * @returns `key` and `value` joined with `.` as separator
59
63
  */
60
- static toObjectKey: (key: string, value: Stringable) => List;
64
+ static toObjectKey: <Value extends Stringable>(key: string, value: Value) => List<[string, Value], ".", "none">;
61
65
  /**
62
66
  * Join `values` using `, ` as separator and wrap in `{` and `}`
63
67
  * @param values
64
68
  * @returns `values` joined with `, ` as separator and wrapped in `{` and `}`
65
69
  */
66
- static toObject: (values: (Stringable | undefined)[]) => List;
70
+ static toObject: (values: (Stringable | undefined)[]) => List<Stringable[], ", ", "{}">;
71
+ /**
72
+ * Join `values` using `, ` as separator and wrap in `[` and `]`
73
+ * @param values
74
+ * @returns `values` joined with `, ` as separator and wrapped in `{` and `}`
75
+ */
76
+ static toArray: (values: (Stringable | undefined)[]) => List<Stringable[], ", ", "[]">;
67
77
  /**
68
78
  * Create a List using the keys of a record
69
79
  * @param record
70
80
  * @returns List of record keys
71
81
  */
72
- static fromRecord: (record: Record<string, Stringable> | undefined) => List;
82
+ static fromRecord: (record: Record<string, Stringable> | undefined) => List<string[], ", ", "none">;
73
83
  /**
74
84
  * Create a keyValue pair if `value` is not undefined and is not an empty array or List.
75
85
  * Return `undefined` otherwise.
@@ -79,7 +89,7 @@ export declare class List {
79
89
  * @param value
80
90
  * @returns `key` and `value` joined with `: ` as separator if `value` is not undefined and is not an empty array or List. `undefined` otherwise.
81
91
  */
82
- static toFilteredKeyValue: (key: string, value: undefined | Stringable | Stringable[] | List) => List | undefined;
92
+ static toFilteredKeyValue: <Value extends undefined | Stringable | Stringable[] | List>(key: string, value: Value) => ToFilteredKeyValueReturn<Value>;
83
93
  /**
84
94
  * Check if `value` is not undefined and is not an empty array or List.
85
95
  * @param value
@@ -1 +1 @@
1
- {"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../../src/typescript/List.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGtD,KAAK,kBAAkB,GAAG;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAA;CAC3D,CAAA;AAED,qBAAa,IAAI;IACf,MAAM,EAAE,UAAU,EAAE,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAA;gBAEvD,MAAM,EAAE,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,EAClC,EAAE,SAAgB,EAAE,QAAiB,EAAE,GAAE,kBAAuB;IAQlE,QAAQ,IAAI,MAAM;IAYlB;;;OAGG;IACH,MAAM,CAAC,OAAO,aAA2C;IAEzD;;;;OAIG;IACH,MAAM,CAAC,QAAQ,UAAW,UAAU,UAEnC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,aAAa,UAAW,UAAU,aAAa,OAAO,UAE5D;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,WACL,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC,UAOzD;IAED;;;;OAIG;IACH,MAAM,CAAC,gBAAgB,WACb,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC,UAOrE;IAED;;;;;OAKG;IACH,MAAM,CAAC,UAAU,QAAS,MAAM,SAAS,UAAU,UAElD;IAED;;;;;OAKG;IACH,MAAM,CAAC,WAAW,QAAS,MAAM,SAAS,UAAU,UAEnD;IAED;;;;OAIG;IACH,MAAM,CAAC,QAAQ,WAAY,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,UAEpD;IAED;;;;OAIG;IACH,MAAM,CAAC,UAAU,WAAY,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,SAAS,UAElE;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,kBAAkB,QAClB,MAAM,SACJ,SAAS,GAAG,UAAU,GAAG,UAAU,EAAE,GAAG,IAAI,sBAGpD;IAED;;;;OAIG;IACH,MAAM,CAAC,QAAQ,UACN,SAAS,GAAG,UAAU,GAAG,UAAU,EAAE,GAAG,IAAI,KAClD,KAAK,IAAI,UAAU,GAAG,UAAU,EAAE,GAAG,IAAI,CAc3C;CACF"}
1
+ {"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../../src/typescript/List.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { match } from 'ts-pattern';
2
2
  export class List {
3
- constructor(values, { separator = ', ', bookends = 'none' } = {}) {
3
+ constructor(values, { separator, bookends } = {}) {
4
4
  Object.defineProperty(this, "values", {
5
5
  enumerable: true,
6
6
  configurable: true,
@@ -20,16 +20,16 @@ export class List {
20
20
  value: void 0
21
21
  });
22
22
  this.values = values.filter(value => value !== undefined);
23
- this.separator = separator;
24
- this.bookends = bookends;
23
+ this.separator = separator ?? ', ';
24
+ this.bookends = bookends ?? 'none';
25
25
  }
26
26
  toString() {
27
27
  const joined = this.values.join(this.separator);
28
28
  return match(this.bookends)
29
- .with('square', () => `[${joined}]`)
30
- .with('curly', () => `{${joined}}`)
31
- .with('round', () => `(${joined})`)
32
- .with('angle', () => `<${joined}>`)
29
+ .with('[]', () => `[${joined}]`)
30
+ .with('{}', () => `{${joined}}`)
31
+ .with('()', () => `(${joined})`)
32
+ .with('<>', () => `<${joined}>`)
33
33
  .with('none', () => joined)
34
34
  .exhaustive();
35
35
  }
@@ -42,7 +42,9 @@ Object.defineProperty(List, "toEmpty", {
42
42
  enumerable: true,
43
43
  configurable: true,
44
44
  writable: true,
45
- value: () => new List([], { bookends: 'none' })
45
+ value: () => {
46
+ return new List([], { bookends: 'none' });
47
+ }
46
48
  });
47
49
  /**
48
50
  * Create a List with a single value that will render as `value`
@@ -72,7 +74,8 @@ Object.defineProperty(List, "toConditional", {
72
74
  configurable: true,
73
75
  writable: true,
74
76
  value: (value, condition) => {
75
- return new List([condition ? value : undefined], { bookends: 'none' });
77
+ const out = new List([condition ? value : undefined], { bookends: 'none' });
78
+ return out;
76
79
  }
77
80
  });
78
81
  /**
@@ -133,7 +136,9 @@ Object.defineProperty(List, "toObjectKey", {
133
136
  configurable: true,
134
137
  writable: true,
135
138
  value: (key, value) => {
136
- return new List([key, value], { separator: '.' });
139
+ return new List([key, value], {
140
+ separator: '.'
141
+ });
137
142
  }
138
143
  });
139
144
  /**
@@ -146,7 +151,20 @@ Object.defineProperty(List, "toObject", {
146
151
  configurable: true,
147
152
  writable: true,
148
153
  value: (values) => {
149
- return new List(values, { bookends: 'curly' });
154
+ return new List(values, { bookends: '{}' });
155
+ }
156
+ });
157
+ /**
158
+ * Join `values` using `, ` as separator and wrap in `[` and `]`
159
+ * @param values
160
+ * @returns `values` joined with `, ` as separator and wrapped in `{` and `}`
161
+ */
162
+ Object.defineProperty(List, "toArray", {
163
+ enumerable: true,
164
+ configurable: true,
165
+ writable: true,
166
+ value: (values) => {
167
+ return new List(values, { bookends: '[]' });
150
168
  }
151
169
  });
152
170
  /**
@@ -176,7 +194,8 @@ Object.defineProperty(List, "toFilteredKeyValue", {
176
194
  configurable: true,
177
195
  writable: true,
178
196
  value: (key, value) => {
179
- return List.hasValue(value) ? List.toKeyValue(key, value) : undefined;
197
+ const out = List.hasValue(value) ? List.toKeyValue(key, value) : undefined;
198
+ return out;
180
199
  }
181
200
  });
182
201
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skmtc/core",
3
- "version": "0.0.360",
3
+ "version": "0.0.362",
4
4
  "main": "./script/mod.js",
5
5
  "module": "./esm/mod.js",
6
6
  "exports": {
@@ -1 +1 @@
1
- {"version":3,"file":"FunctionParameter.d.ts","sourceRoot":"","sources":["../../src/typescript/FunctionParameter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,cAAc,EACf,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,KAAK,UAAU,GAAG;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,UAAU,CAAC,gBAAgB,GAAG,cAAc,CAAC,CAAA;IAC7D,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,KAAK,mBAAmB,GACpB,aAAa,GACb,qBAAqB,GACrB,gBAAgB,CAAA;AAEpB,KAAK,aAAa,GAAG;IACnB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,qBAAqB,GAAG;IAC3B,IAAI,EAAE,cAAc,CAAA;IACpB,cAAc,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAA;IAC5C,QAAQ,EAAE,IAAI,CAAA;CACf,CAAA;AAED,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,UAAU,CAAC,eAAe,CAAC,CAAA;IAC3C,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,qBAAa,iBAAiB;IAC5B,UAAU,EAAE,mBAAmB,CAAA;gBAEnB,IAAI,EAAE,UAAU;IAyB5B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAelC,cAAc,IAAI,IAAI;IAYtB,SAAS,IAAI,MAAM;IAUnB,QAAQ,IAAI,MAAM;CAcnB"}
1
+ {"version":3,"file":"FunctionParameter.d.ts","sourceRoot":"","sources":["../../src/typescript/FunctionParameter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,cAAc,EACf,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAIhC,KAAK,UAAU,GAAG;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,UAAU,CAAC,gBAAgB,GAAG,cAAc,CAAC,CAAA;IAC7D,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,KAAK,mBAAmB,GACpB,aAAa,GACb,qBAAqB,GACrB,gBAAgB,CAAA;AAEpB,KAAK,aAAa,GAAG;IACnB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,qBAAqB,GAAG;IAC3B,IAAI,EAAE,cAAc,CAAA;IACpB,cAAc,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAA;IAC5C,QAAQ,EAAE,IAAI,CAAA;CACf,CAAA;AAED,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,UAAU,CAAC,eAAe,CAAC,CAAA;IAC3C,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,qBAAa,iBAAiB;IAC5B,UAAU,EAAE,mBAAmB,CAAA;gBAEnB,IAAI,EAAE,UAAU;IAyB5B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAelC,cAAc,IAAI,IAAI;IAYtB,SAAS,IAAI,MAAM;IAUnB,QAAQ,IAAI,MAAM;CAcnB"}
@@ -1,25 +1,29 @@
1
1
  import type { Stringable } from '../dsl/Stringable.js';
2
- type ConstructorOptions = {
3
- separator?: string;
4
- bookends?: 'square' | 'curly' | 'round' | 'angle' | 'none';
2
+ type BookendsType = '[]' | '{}' | '()' | '<>' | 'none';
3
+ type ConstructorOptions<Separator extends string = ', ', Bookends extends BookendsType = 'none'> = {
4
+ separator?: Separator;
5
+ bookends?: Bookends;
5
6
  };
6
- export declare class List {
7
- values: Stringable[];
8
- separator: string;
9
- bookends: 'square' | 'curly' | 'round' | 'angle' | 'none';
10
- constructor(values: (Stringable | undefined)[], { separator, bookends }?: ConstructorOptions);
7
+ type ExtractArrayItem<ArrayOf> = ArrayOf extends Array<infer Item> ? Item : never;
8
+ type ToFilteredKeyValueReturn<Value extends undefined | Stringable | Stringable[] | List> = Value extends undefined ? undefined : List<[string, Stringable | Stringable[] | List], ': ', 'none'>;
9
+ type ToConditionalReturn<Value extends Stringable, Condition extends boolean> = Condition extends true ? List<[Value], ', ', 'none'> : List<never[], ', ', 'none'>;
10
+ export declare class List<Values extends Stringable[] = Stringable[], Separator extends string = ', ', Bookends extends BookendsType = 'none'> {
11
+ values: ExtractArrayItem<Values>[];
12
+ separator: Separator;
13
+ bookends: Bookends;
14
+ constructor(values: (ExtractArrayItem<Values> | undefined)[], { separator, bookends }?: ConstructorOptions<Separator, Bookends>);
11
15
  toString(): string;
12
16
  /**
13
17
  * Create an empty List that will render as an empty string ''
14
18
  * @returns List
15
19
  */
16
- static toEmpty: () => List;
20
+ static toEmpty: () => List<never, ", ", "none">;
17
21
  /**
18
22
  * Create a List with a single value that will render as `value`
19
23
  * @param value
20
24
  * @returns List
21
25
  */
22
- static toSingle: (value: Stringable) => List;
26
+ static toSingle: (value: Stringable) => List<[Stringable], ", ", "none">;
23
27
  /**
24
28
  * If condition is true, return a List with a single value that will render as `value`.
25
29
  * Otherwise, return an empty List that will render as an empty string ''.
@@ -30,46 +34,52 @@ export declare class List {
30
34
  * @param condition
31
35
  * @returns List
32
36
  */
33
- static toConditional: (value: Stringable, condition: boolean) => List;
37
+ static toConditional: <Value extends Stringable, Condition extends boolean>(value: Value, condition: Condition) => ToConditionalReturn<List<[Value], ", ", "none">, Condition>;
34
38
  /**
35
39
  * Create a record with Stringable values. KeyValue pairs will be joined with `: ` as separator
36
40
  * and the resulting List will be wrapped with `{}`
37
41
  * @param record
38
42
  * @returns `record` with `Stringable` values
39
43
  */
40
- static toRecord: (record: Record<string, Stringable | Stringable[] | List>) => List;
44
+ static toRecord: (record: Record<string, Stringable | Stringable[] | List>) => List<Stringable[], ", ", "{}">;
41
45
  /**
42
46
  * Create a record with `undefined` or empty array or List values filtered out.
43
47
  * @param record
44
48
  * @returns `record` with `undefined` values filtered out
45
49
  */
46
- static toFilteredRecord: (record: Record<string, undefined | Stringable | Stringable[] | List>) => List;
50
+ static toFilteredRecord: (record: Record<string, undefined | Stringable | Stringable[] | List>) => List<Stringable[], ", ", "{}">;
47
51
  /**
48
52
  * Join `key` and `value` using `: ` as separator
49
53
  * @param key
50
54
  * @param value
51
55
  * @returns `key` and `value` joined with `: ` as separator
52
56
  */
53
- static toKeyValue: (key: string, value: Stringable) => List;
57
+ static toKeyValue: <Value extends Stringable | Stringable[] | List>(key: string, value: Value) => List<[string, Value], ": ", "none">;
54
58
  /**
55
59
  * Join `key` and `value` using `.` as separator
56
60
  * @param key
57
61
  * @param value
58
62
  * @returns `key` and `value` joined with `.` as separator
59
63
  */
60
- static toObjectKey: (key: string, value: Stringable) => List;
64
+ static toObjectKey: <Value extends Stringable>(key: string, value: Value) => List<[string, Value], ".", "none">;
61
65
  /**
62
66
  * Join `values` using `, ` as separator and wrap in `{` and `}`
63
67
  * @param values
64
68
  * @returns `values` joined with `, ` as separator and wrapped in `{` and `}`
65
69
  */
66
- static toObject: (values: (Stringable | undefined)[]) => List;
70
+ static toObject: (values: (Stringable | undefined)[]) => List<Stringable[], ", ", "{}">;
71
+ /**
72
+ * Join `values` using `, ` as separator and wrap in `[` and `]`
73
+ * @param values
74
+ * @returns `values` joined with `, ` as separator and wrapped in `{` and `}`
75
+ */
76
+ static toArray: (values: (Stringable | undefined)[]) => List<Stringable[], ", ", "[]">;
67
77
  /**
68
78
  * Create a List using the keys of a record
69
79
  * @param record
70
80
  * @returns List of record keys
71
81
  */
72
- static fromRecord: (record: Record<string, Stringable> | undefined) => List;
82
+ static fromRecord: (record: Record<string, Stringable> | undefined) => List<string[], ", ", "none">;
73
83
  /**
74
84
  * Create a keyValue pair if `value` is not undefined and is not an empty array or List.
75
85
  * Return `undefined` otherwise.
@@ -79,7 +89,7 @@ export declare class List {
79
89
  * @param value
80
90
  * @returns `key` and `value` joined with `: ` as separator if `value` is not undefined and is not an empty array or List. `undefined` otherwise.
81
91
  */
82
- static toFilteredKeyValue: (key: string, value: undefined | Stringable | Stringable[] | List) => List | undefined;
92
+ static toFilteredKeyValue: <Value extends undefined | Stringable | Stringable[] | List>(key: string, value: Value) => ToFilteredKeyValueReturn<Value>;
83
93
  /**
84
94
  * Check if `value` is not undefined and is not an empty array or List.
85
95
  * @param value
@@ -1 +1 @@
1
- {"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../../src/typescript/List.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGtD,KAAK,kBAAkB,GAAG;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAA;CAC3D,CAAA;AAED,qBAAa,IAAI;IACf,MAAM,EAAE,UAAU,EAAE,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAA;gBAEvD,MAAM,EAAE,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,EAClC,EAAE,SAAgB,EAAE,QAAiB,EAAE,GAAE,kBAAuB;IAQlE,QAAQ,IAAI,MAAM;IAYlB;;;OAGG;IACH,MAAM,CAAC,OAAO,aAA2C;IAEzD;;;;OAIG;IACH,MAAM,CAAC,QAAQ,UAAW,UAAU,UAEnC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,aAAa,UAAW,UAAU,aAAa,OAAO,UAE5D;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,WACL,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC,UAOzD;IAED;;;;OAIG;IACH,MAAM,CAAC,gBAAgB,WACb,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC,UAOrE;IAED;;;;;OAKG;IACH,MAAM,CAAC,UAAU,QAAS,MAAM,SAAS,UAAU,UAElD;IAED;;;;;OAKG;IACH,MAAM,CAAC,WAAW,QAAS,MAAM,SAAS,UAAU,UAEnD;IAED;;;;OAIG;IACH,MAAM,CAAC,QAAQ,WAAY,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,UAEpD;IAED;;;;OAIG;IACH,MAAM,CAAC,UAAU,WAAY,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,SAAS,UAElE;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,kBAAkB,QAClB,MAAM,SACJ,SAAS,GAAG,UAAU,GAAG,UAAU,EAAE,GAAG,IAAI,sBAGpD;IAED;;;;OAIG;IACH,MAAM,CAAC,QAAQ,UACN,SAAS,GAAG,UAAU,GAAG,UAAU,EAAE,GAAG,IAAI,KAClD,KAAK,IAAI,UAAU,GAAG,UAAU,EAAE,GAAG,IAAI,CAc3C;CACF"}
1
+ {"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../../src/typescript/List.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.List = void 0;
4
4
  const ts_pattern_1 = require("ts-pattern");
5
5
  class List {
6
- constructor(values, { separator = ', ', bookends = 'none' } = {}) {
6
+ constructor(values, { separator, bookends } = {}) {
7
7
  Object.defineProperty(this, "values", {
8
8
  enumerable: true,
9
9
  configurable: true,
@@ -23,16 +23,16 @@ class List {
23
23
  value: void 0
24
24
  });
25
25
  this.values = values.filter(value => value !== undefined);
26
- this.separator = separator;
27
- this.bookends = bookends;
26
+ this.separator = separator ?? ', ';
27
+ this.bookends = bookends ?? 'none';
28
28
  }
29
29
  toString() {
30
30
  const joined = this.values.join(this.separator);
31
31
  return (0, ts_pattern_1.match)(this.bookends)
32
- .with('square', () => `[${joined}]`)
33
- .with('curly', () => `{${joined}}`)
34
- .with('round', () => `(${joined})`)
35
- .with('angle', () => `<${joined}>`)
32
+ .with('[]', () => `[${joined}]`)
33
+ .with('{}', () => `{${joined}}`)
34
+ .with('()', () => `(${joined})`)
35
+ .with('<>', () => `<${joined}>`)
36
36
  .with('none', () => joined)
37
37
  .exhaustive();
38
38
  }
@@ -46,7 +46,9 @@ Object.defineProperty(List, "toEmpty", {
46
46
  enumerable: true,
47
47
  configurable: true,
48
48
  writable: true,
49
- value: () => new List([], { bookends: 'none' })
49
+ value: () => {
50
+ return new List([], { bookends: 'none' });
51
+ }
50
52
  });
51
53
  /**
52
54
  * Create a List with a single value that will render as `value`
@@ -76,7 +78,8 @@ Object.defineProperty(List, "toConditional", {
76
78
  configurable: true,
77
79
  writable: true,
78
80
  value: (value, condition) => {
79
- return new List([condition ? value : undefined], { bookends: 'none' });
81
+ const out = new List([condition ? value : undefined], { bookends: 'none' });
82
+ return out;
80
83
  }
81
84
  });
82
85
  /**
@@ -137,7 +140,9 @@ Object.defineProperty(List, "toObjectKey", {
137
140
  configurable: true,
138
141
  writable: true,
139
142
  value: (key, value) => {
140
- return new List([key, value], { separator: '.' });
143
+ return new List([key, value], {
144
+ separator: '.'
145
+ });
141
146
  }
142
147
  });
143
148
  /**
@@ -150,7 +155,20 @@ Object.defineProperty(List, "toObject", {
150
155
  configurable: true,
151
156
  writable: true,
152
157
  value: (values) => {
153
- return new List(values, { bookends: 'curly' });
158
+ return new List(values, { bookends: '{}' });
159
+ }
160
+ });
161
+ /**
162
+ * Join `values` using `, ` as separator and wrap in `[` and `]`
163
+ * @param values
164
+ * @returns `values` joined with `, ` as separator and wrapped in `{` and `}`
165
+ */
166
+ Object.defineProperty(List, "toArray", {
167
+ enumerable: true,
168
+ configurable: true,
169
+ writable: true,
170
+ value: (values) => {
171
+ return new List(values, { bookends: '[]' });
154
172
  }
155
173
  });
156
174
  /**
@@ -180,7 +198,8 @@ Object.defineProperty(List, "toFilteredKeyValue", {
180
198
  configurable: true,
181
199
  writable: true,
182
200
  value: (key, value) => {
183
- return List.hasValue(value) ? List.toKeyValue(key, value) : undefined;
201
+ const out = List.hasValue(value) ? List.toKeyValue(key, value) : undefined;
202
+ return out;
184
203
  }
185
204
  });
186
205
  /**