@goodscript/core 0.13.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/README.md +46 -0
- package/dist/array-ext-gs.d.ts +62 -0
- package/dist/array-ext-gs.d.ts.map +1 -0
- package/dist/array-ext-gs.js +162 -0
- package/dist/array-ext-gs.js.map +1 -0
- package/dist/array-tools-gs.d.ts +62 -0
- package/dist/array-tools-gs.d.ts.map +1 -0
- package/dist/array-tools-gs.js +162 -0
- package/dist/array-tools-gs.js.map +1 -0
- package/dist/index-gs.d.ts +17 -0
- package/dist/index-gs.d.ts.map +1 -0
- package/dist/index-gs.js +17 -0
- package/dist/index-gs.js.map +1 -0
- package/dist/map-ext-gs.d.ts +46 -0
- package/dist/map-ext-gs.d.ts.map +1 -0
- package/dist/map-ext-gs.js +88 -0
- package/dist/map-ext-gs.js.map +1 -0
- package/dist/map-tools-gs.d.ts +46 -0
- package/dist/map-tools-gs.d.ts.map +1 -0
- package/dist/map-tools-gs.js +88 -0
- package/dist/map-tools-gs.js.map +1 -0
- package/dist/set-ext-gs.d.ts +50 -0
- package/dist/set-ext-gs.d.ts.map +1 -0
- package/dist/set-ext-gs.js +119 -0
- package/dist/set-ext-gs.js.map +1 -0
- package/dist/set-tools-gs.d.ts +50 -0
- package/dist/set-tools-gs.d.ts.map +1 -0
- package/dist/set-tools-gs.js +119 -0
- package/dist/set-tools-gs.js.map +1 -0
- package/dist/string-ext-gs.d.ts +78 -0
- package/dist/string-ext-gs.d.ts.map +1 -0
- package/dist/string-ext-gs.js +145 -0
- package/dist/string-ext-gs.js.map +1 -0
- package/dist/string-tools-gs.d.ts +78 -0
- package/dist/string-tools-gs.d.ts.map +1 -0
- package/dist/string-tools-gs.js +145 -0
- package/dist/string-tools-gs.js.map +1 -0
- package/package.json +45 -0
- package/src/array-tools-gs.ts +172 -0
- package/src/index-gs.ts +17 -0
- package/src/map-tools-gs.ts +96 -0
- package/src/set-tools-gs.ts +128 -0
- package/src/string-tools-gs.ts +166 -0
package/README.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# @goodscript/core
|
|
2
|
+
|
|
3
|
+
Core types and collections for GoodScript.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **ArrayTools**: Array utilities with dual error handling (throwing and try* variants)
|
|
8
|
+
- **MapTools**: Map utilities for safe key access and transformations
|
|
9
|
+
- **SetTools**: Set operations (union, intersection, difference, etc.)
|
|
10
|
+
- **StringTools**: String parsing utilities with dual error handling
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install @goodscript/core
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { ArrayTools, MapTools, SetTools, StringTools } from '@goodscript/core';
|
|
22
|
+
|
|
23
|
+
// ArrayTools - dual error handling pattern
|
|
24
|
+
const arr = [1, 2, 3];
|
|
25
|
+
ArrayTools.at(arr, 1); // 2
|
|
26
|
+
ArrayTools.tryAt(arr, 10); // null (safe)
|
|
27
|
+
ArrayTools.at(arr, 10); // throws Error
|
|
28
|
+
|
|
29
|
+
// MapTools
|
|
30
|
+
const map = new Map([['key', 'value']]);
|
|
31
|
+
MapTools.getOrDefault(map, 'missing', 'default'); // 'default'
|
|
32
|
+
|
|
33
|
+
// SetTools
|
|
34
|
+
const a = new Set([1, 2, 3]);
|
|
35
|
+
const b = new Set([2, 3, 4]);
|
|
36
|
+
SetTools.union(a, b); // Set {1, 2, 3, 4}
|
|
37
|
+
SetTools.intersection(a, b); // Set {2, 3}
|
|
38
|
+
|
|
39
|
+
// StringTools
|
|
40
|
+
StringTools.parseInt('123'); // 123
|
|
41
|
+
StringTools.tryParseInt('abc'); // null
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## License
|
|
45
|
+
|
|
46
|
+
MIT OR Apache-2.0
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Array utilities with dual error handling pattern.
|
|
3
|
+
*
|
|
4
|
+
* All fallible operations provide:
|
|
5
|
+
* - `operation()` - throws Error on failure
|
|
6
|
+
* - `tryOperation()` - returns null on failure
|
|
7
|
+
*/
|
|
8
|
+
export declare class ArrayExt {
|
|
9
|
+
/**
|
|
10
|
+
* Get element at index. Throws if index is out of bounds.
|
|
11
|
+
*/
|
|
12
|
+
static at<T>(arr: Array<T>, index: number): T;
|
|
13
|
+
/**
|
|
14
|
+
* Get element at index. Returns null if index is out of bounds.
|
|
15
|
+
*/
|
|
16
|
+
static tryAt<T>(arr: Array<T>, index: number): T | null;
|
|
17
|
+
/**
|
|
18
|
+
* Get first element. Throws if array is empty.
|
|
19
|
+
*/
|
|
20
|
+
static first<T>(arr: Array<T>): T;
|
|
21
|
+
/**
|
|
22
|
+
* Get first element. Returns null if array is empty.
|
|
23
|
+
*/
|
|
24
|
+
static tryFirst<T>(arr: Array<T>): T | null;
|
|
25
|
+
/**
|
|
26
|
+
* Get last element. Throws if array is empty.
|
|
27
|
+
*/
|
|
28
|
+
static last<T>(arr: Array<T>): T;
|
|
29
|
+
/**
|
|
30
|
+
* Get last element. Returns null if array is empty.
|
|
31
|
+
*/
|
|
32
|
+
static tryLast<T>(arr: Array<T>): T | null;
|
|
33
|
+
/**
|
|
34
|
+
* Split array into chunks of specified size.
|
|
35
|
+
* Last chunk may be smaller if array length is not evenly divisible.
|
|
36
|
+
*/
|
|
37
|
+
static chunk<T>(arr: Array<T>, size: number): Array<Array<T>>;
|
|
38
|
+
/**
|
|
39
|
+
* Zip two arrays together into array of tuples.
|
|
40
|
+
* Result length is minimum of input lengths.
|
|
41
|
+
*/
|
|
42
|
+
static zip<T, U>(a: Array<T>, b: Array<U>): Array<[T, U]>;
|
|
43
|
+
/**
|
|
44
|
+
* Create range of integers [start, end).
|
|
45
|
+
*/
|
|
46
|
+
static range(start: number, end: number, step?: number): Array<number>;
|
|
47
|
+
/**
|
|
48
|
+
* Flatten nested array one level deep.
|
|
49
|
+
*/
|
|
50
|
+
static flatten<T>(arr: Array<Array<T>>): Array<T>;
|
|
51
|
+
/**
|
|
52
|
+
* Remove duplicate values from array.
|
|
53
|
+
* Preserves first occurrence order.
|
|
54
|
+
*/
|
|
55
|
+
static unique<T>(arr: Array<T>): Array<T>;
|
|
56
|
+
/**
|
|
57
|
+
* Partition array into two arrays based on predicate.
|
|
58
|
+
* Returns [truthy, falsy] tuple.
|
|
59
|
+
*/
|
|
60
|
+
static partition<T>(arr: Array<T>, predicate: (item: T) => boolean): [Array<T>, Array<T>];
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=array-ext-gs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array-ext-gs.d.ts","sourceRoot":"","sources":["../src/array-ext-gs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,qBAAa,QAAQ;IACnB;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC;IAQ7C;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IASvD;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;IAQjC;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;IAO3C;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;IAQhC;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;IAO1C;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAY7D;;;OAGG;IACH,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IASzD;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,GAAG,KAAK,CAAC,MAAM,CAAC;IAqBzE;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAUjD;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAYzC;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;CAY1F"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Array utilities with dual error handling pattern.
|
|
3
|
+
*
|
|
4
|
+
* All fallible operations provide:
|
|
5
|
+
* - `operation()` - throws Error on failure
|
|
6
|
+
* - `tryOperation()` - returns null on failure
|
|
7
|
+
*/
|
|
8
|
+
export class ArrayExt {
|
|
9
|
+
/**
|
|
10
|
+
* Get element at index. Throws if index is out of bounds.
|
|
11
|
+
*/
|
|
12
|
+
static at(arr, index) {
|
|
13
|
+
const result = ArrayExt.tryAt(arr, index);
|
|
14
|
+
if (result === null) {
|
|
15
|
+
throw new Error(`Array index out of bounds: ${index} (length: ${arr.length})`);
|
|
16
|
+
}
|
|
17
|
+
return result;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get element at index. Returns null if index is out of bounds.
|
|
21
|
+
*/
|
|
22
|
+
static tryAt(arr, index) {
|
|
23
|
+
// Support negative indexing
|
|
24
|
+
const actualIndex = index < 0 ? arr.length + index : index;
|
|
25
|
+
if (actualIndex < 0 || actualIndex >= arr.length) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
return arr[actualIndex];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get first element. Throws if array is empty.
|
|
32
|
+
*/
|
|
33
|
+
static first(arr) {
|
|
34
|
+
const result = ArrayExt.tryFirst(arr);
|
|
35
|
+
if (result === null) {
|
|
36
|
+
throw new Error('Cannot get first element of empty array');
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get first element. Returns null if array is empty.
|
|
42
|
+
*/
|
|
43
|
+
static tryFirst(arr) {
|
|
44
|
+
if (arr.length === 0) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
return arr[0];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get last element. Throws if array is empty.
|
|
51
|
+
*/
|
|
52
|
+
static last(arr) {
|
|
53
|
+
const result = ArrayExt.tryLast(arr);
|
|
54
|
+
if (result === null) {
|
|
55
|
+
throw new Error('Cannot get last element of empty array');
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get last element. Returns null if array is empty.
|
|
61
|
+
*/
|
|
62
|
+
static tryLast(arr) {
|
|
63
|
+
if (arr.length === 0) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
return arr[arr.length - 1];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Split array into chunks of specified size.
|
|
70
|
+
* Last chunk may be smaller if array length is not evenly divisible.
|
|
71
|
+
*/
|
|
72
|
+
static chunk(arr, size) {
|
|
73
|
+
if (size <= 0) {
|
|
74
|
+
throw new Error(`Chunk size must be positive, got: ${size}`);
|
|
75
|
+
}
|
|
76
|
+
const result = [];
|
|
77
|
+
for (let i = 0; i < arr.length; i += size) {
|
|
78
|
+
result.push(arr.slice(i, i + size));
|
|
79
|
+
}
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Zip two arrays together into array of tuples.
|
|
84
|
+
* Result length is minimum of input lengths.
|
|
85
|
+
*/
|
|
86
|
+
static zip(a, b) {
|
|
87
|
+
const length = Math.min(a.length, b.length);
|
|
88
|
+
const result = [];
|
|
89
|
+
for (let i = 0; i < length; i++) {
|
|
90
|
+
result.push([a[i], b[i]]);
|
|
91
|
+
}
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Create range of integers [start, end).
|
|
96
|
+
*/
|
|
97
|
+
static range(start, end, step = 1) {
|
|
98
|
+
if (step === 0) {
|
|
99
|
+
throw new Error('Step cannot be zero');
|
|
100
|
+
}
|
|
101
|
+
if ((end - start) / step < 0) {
|
|
102
|
+
throw new Error('Invalid range: step direction does not match start/end');
|
|
103
|
+
}
|
|
104
|
+
const result = [];
|
|
105
|
+
if (step > 0) {
|
|
106
|
+
for (let i = start; i < end; i += step) {
|
|
107
|
+
result.push(i);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
for (let i = start; i > end; i += step) {
|
|
112
|
+
result.push(i);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Flatten nested array one level deep.
|
|
119
|
+
*/
|
|
120
|
+
static flatten(arr) {
|
|
121
|
+
const result = [];
|
|
122
|
+
for (const subArray of arr) {
|
|
123
|
+
for (const item of subArray) {
|
|
124
|
+
result.push(item);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return result;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Remove duplicate values from array.
|
|
131
|
+
* Preserves first occurrence order.
|
|
132
|
+
*/
|
|
133
|
+
static unique(arr) {
|
|
134
|
+
const seen = new Set();
|
|
135
|
+
const result = [];
|
|
136
|
+
for (const item of arr) {
|
|
137
|
+
if (!seen.has(item)) {
|
|
138
|
+
seen.add(item);
|
|
139
|
+
result.push(item);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Partition array into two arrays based on predicate.
|
|
146
|
+
* Returns [truthy, falsy] tuple.
|
|
147
|
+
*/
|
|
148
|
+
static partition(arr, predicate) {
|
|
149
|
+
const truthy = [];
|
|
150
|
+
const falsy = [];
|
|
151
|
+
for (const item of arr) {
|
|
152
|
+
if (predicate(item)) {
|
|
153
|
+
truthy.push(item);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
falsy.push(item);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return [truthy, falsy];
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=array-ext-gs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array-ext-gs.js","sourceRoot":"","sources":["../src/array-ext-gs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Array utilities with dual error handling pattern.
|
|
3
|
+
*
|
|
4
|
+
* All fallible operations provide:
|
|
5
|
+
* - `operation()` - throws Error on failure
|
|
6
|
+
* - `tryOperation()` - returns null on failure
|
|
7
|
+
*/
|
|
8
|
+
export declare class ArrayTools {
|
|
9
|
+
/**
|
|
10
|
+
* Get element at index. Throws if index is out of bounds.
|
|
11
|
+
*/
|
|
12
|
+
static at<T>(arr: Array<T>, index: number): T;
|
|
13
|
+
/**
|
|
14
|
+
* Get element at index. Returns null if index is out of bounds.
|
|
15
|
+
*/
|
|
16
|
+
static tryAt<T>(arr: Array<T>, index: number): T | null;
|
|
17
|
+
/**
|
|
18
|
+
* Get first element. Throws if array is empty.
|
|
19
|
+
*/
|
|
20
|
+
static first<T>(arr: Array<T>): T;
|
|
21
|
+
/**
|
|
22
|
+
* Get first element. Returns null if array is empty.
|
|
23
|
+
*/
|
|
24
|
+
static tryFirst<T>(arr: Array<T>): T | null;
|
|
25
|
+
/**
|
|
26
|
+
* Get last element. Throws if array is empty.
|
|
27
|
+
*/
|
|
28
|
+
static last<T>(arr: Array<T>): T;
|
|
29
|
+
/**
|
|
30
|
+
* Get last element. Returns null if array is empty.
|
|
31
|
+
*/
|
|
32
|
+
static tryLast<T>(arr: Array<T>): T | null;
|
|
33
|
+
/**
|
|
34
|
+
* Split array into chunks of specified size.
|
|
35
|
+
* Last chunk may be smaller if array length is not evenly divisible.
|
|
36
|
+
*/
|
|
37
|
+
static chunk<T>(arr: Array<T>, size: number): Array<Array<T>>;
|
|
38
|
+
/**
|
|
39
|
+
* Zip two arrays together into array of tuples.
|
|
40
|
+
* Result length is minimum of input lengths.
|
|
41
|
+
*/
|
|
42
|
+
static zip<T, U>(a: Array<T>, b: Array<U>): Array<[T, U]>;
|
|
43
|
+
/**
|
|
44
|
+
* Create range of integers [start, end).
|
|
45
|
+
*/
|
|
46
|
+
static range(start: number, end: number, step?: number): Array<number>;
|
|
47
|
+
/**
|
|
48
|
+
* Flatten nested array one level deep.
|
|
49
|
+
*/
|
|
50
|
+
static flatten<T>(arr: Array<Array<T>>): Array<T>;
|
|
51
|
+
/**
|
|
52
|
+
* Remove duplicate values from array.
|
|
53
|
+
* Preserves first occurrence order.
|
|
54
|
+
*/
|
|
55
|
+
static unique<T>(arr: Array<T>): Array<T>;
|
|
56
|
+
/**
|
|
57
|
+
* Partition array into two arrays based on predicate.
|
|
58
|
+
* Returns [truthy, falsy] tuple.
|
|
59
|
+
*/
|
|
60
|
+
static partition<T>(arr: Array<T>, predicate: (item: T) => boolean): [Array<T>, Array<T>];
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=array-tools-gs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array-tools-gs.d.ts","sourceRoot":"","sources":["../src/array-tools-gs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,qBAAa,UAAU;IACrB;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC;IAQ7C;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IASvD;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;IAQjC;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;IAO3C;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;IAQhC;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;IAO1C;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAY7D;;;OAGG;IACH,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IASzD;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,GAAG,KAAK,CAAC,MAAM,CAAC;IAqBzE;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAUjD;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAYzC;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;CAY1F"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Array utilities with dual error handling pattern.
|
|
3
|
+
*
|
|
4
|
+
* All fallible operations provide:
|
|
5
|
+
* - `operation()` - throws Error on failure
|
|
6
|
+
* - `tryOperation()` - returns null on failure
|
|
7
|
+
*/
|
|
8
|
+
export class ArrayTools {
|
|
9
|
+
/**
|
|
10
|
+
* Get element at index. Throws if index is out of bounds.
|
|
11
|
+
*/
|
|
12
|
+
static at(arr, index) {
|
|
13
|
+
const result = ArrayTools.tryAt(arr, index);
|
|
14
|
+
if (result === null) {
|
|
15
|
+
throw new Error(`Array index out of bounds: ${index} (length: ${arr.length})`);
|
|
16
|
+
}
|
|
17
|
+
return result;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get element at index. Returns null if index is out of bounds.
|
|
21
|
+
*/
|
|
22
|
+
static tryAt(arr, index) {
|
|
23
|
+
// Support negative indexing
|
|
24
|
+
const actualIndex = index < 0 ? arr.length + index : index;
|
|
25
|
+
if (actualIndex < 0 || actualIndex >= arr.length) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
return arr[actualIndex];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get first element. Throws if array is empty.
|
|
32
|
+
*/
|
|
33
|
+
static first(arr) {
|
|
34
|
+
const result = ArrayTools.tryFirst(arr);
|
|
35
|
+
if (result === null) {
|
|
36
|
+
throw new Error('Cannot get first element of empty array');
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get first element. Returns null if array is empty.
|
|
42
|
+
*/
|
|
43
|
+
static tryFirst(arr) {
|
|
44
|
+
if (arr.length === 0) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
return arr[0];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get last element. Throws if array is empty.
|
|
51
|
+
*/
|
|
52
|
+
static last(arr) {
|
|
53
|
+
const result = ArrayTools.tryLast(arr);
|
|
54
|
+
if (result === null) {
|
|
55
|
+
throw new Error('Cannot get last element of empty array');
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get last element. Returns null if array is empty.
|
|
61
|
+
*/
|
|
62
|
+
static tryLast(arr) {
|
|
63
|
+
if (arr.length === 0) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
return arr[arr.length - 1];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Split array into chunks of specified size.
|
|
70
|
+
* Last chunk may be smaller if array length is not evenly divisible.
|
|
71
|
+
*/
|
|
72
|
+
static chunk(arr, size) {
|
|
73
|
+
if (size <= 0) {
|
|
74
|
+
throw new Error(`Chunk size must be positive, got: ${size}`);
|
|
75
|
+
}
|
|
76
|
+
const result = [];
|
|
77
|
+
for (let i = 0; i < arr.length; i += size) {
|
|
78
|
+
result.push(arr.slice(i, i + size));
|
|
79
|
+
}
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Zip two arrays together into array of tuples.
|
|
84
|
+
* Result length is minimum of input lengths.
|
|
85
|
+
*/
|
|
86
|
+
static zip(a, b) {
|
|
87
|
+
const length = Math.min(a.length, b.length);
|
|
88
|
+
const result = [];
|
|
89
|
+
for (let i = 0; i < length; i++) {
|
|
90
|
+
result.push([a[i], b[i]]);
|
|
91
|
+
}
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Create range of integers [start, end).
|
|
96
|
+
*/
|
|
97
|
+
static range(start, end, step = 1) {
|
|
98
|
+
if (step === 0) {
|
|
99
|
+
throw new Error('Step cannot be zero');
|
|
100
|
+
}
|
|
101
|
+
if ((end - start) / step < 0) {
|
|
102
|
+
throw new Error('Invalid range: step direction does not match start/end');
|
|
103
|
+
}
|
|
104
|
+
const result = [];
|
|
105
|
+
if (step > 0) {
|
|
106
|
+
for (let i = start; i < end; i += step) {
|
|
107
|
+
result.push(i);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
for (let i = start; i > end; i += step) {
|
|
112
|
+
result.push(i);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Flatten nested array one level deep.
|
|
119
|
+
*/
|
|
120
|
+
static flatten(arr) {
|
|
121
|
+
const result = [];
|
|
122
|
+
for (const subArray of arr) {
|
|
123
|
+
for (const item of subArray) {
|
|
124
|
+
result.push(item);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return result;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Remove duplicate values from array.
|
|
131
|
+
* Preserves first occurrence order.
|
|
132
|
+
*/
|
|
133
|
+
static unique(arr) {
|
|
134
|
+
const seen = new Set();
|
|
135
|
+
const result = [];
|
|
136
|
+
for (const item of arr) {
|
|
137
|
+
if (!seen.has(item)) {
|
|
138
|
+
seen.add(item);
|
|
139
|
+
result.push(item);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Partition array into two arrays based on predicate.
|
|
146
|
+
* Returns [truthy, falsy] tuple.
|
|
147
|
+
*/
|
|
148
|
+
static partition(arr, predicate) {
|
|
149
|
+
const truthy = [];
|
|
150
|
+
const falsy = [];
|
|
151
|
+
for (const item of arr) {
|
|
152
|
+
if (predicate(item)) {
|
|
153
|
+
truthy.push(item);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
falsy.push(item);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return [truthy, falsy];
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=array-tools-gs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array-tools-gs.js","sourceRoot":"","sources":["../src/array-tools-gs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,OAAO,UAAU;IACrB;;OAEG;IACH,MAAM,CAAC,EAAE,CAAI,GAAa,EAAE,KAAa;QACvC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,aAAa,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAI,GAAa,EAAE,KAAa;QAC1C,4BAA4B;QAC5B,MAAM,WAAW,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAC3D,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,GAAG,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAI,GAAa;QAC3B,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAI,GAAa;QAC9B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,CAAI,GAAa;QAC1B,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAO,CAAI,GAAa;QAC7B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAI,GAAa,EAAE,IAAY;QACzC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAG,CAAO,CAAW,EAAE,CAAW;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,OAAe,CAAC;QACvD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACb,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAO,CAAI,GAAoB;QACpC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,QAAQ,IAAI,GAAG,EAAE,CAAC;YAC3B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAI,GAAa;QAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAK,CAAC;QAC1B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAI,GAAa,EAAE,SAA+B;QAChE,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;YACvB,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @goodscript/core - Core Types & Collections
|
|
3
|
+
*
|
|
4
|
+
* GoodScript standard library module providing utilities for:
|
|
5
|
+
* - Array operations with dual error handling
|
|
6
|
+
* - Map and Set utilities
|
|
7
|
+
* - String parsing with fallible operations
|
|
8
|
+
*
|
|
9
|
+
* All fallible operations follow the dual-API pattern:
|
|
10
|
+
* - `operation()` throws on error
|
|
11
|
+
* - `tryOperation()` returns null on error
|
|
12
|
+
*/
|
|
13
|
+
export { ArrayTools } from './array-tools-gs.js';
|
|
14
|
+
export { MapTools } from './map-tools-gs.js';
|
|
15
|
+
export { SetTools } from './set-tools-gs.js';
|
|
16
|
+
export { StringTools } from './string-tools-gs.js';
|
|
17
|
+
//# sourceMappingURL=index-gs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-gs.d.ts","sourceRoot":"","sources":["../src/index-gs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index-gs.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @goodscript/core - Core Types & Collections
|
|
3
|
+
*
|
|
4
|
+
* GoodScript standard library module providing utilities for:
|
|
5
|
+
* - Array operations with dual error handling
|
|
6
|
+
* - Map and Set utilities
|
|
7
|
+
* - String parsing with fallible operations
|
|
8
|
+
*
|
|
9
|
+
* All fallible operations follow the dual-API pattern:
|
|
10
|
+
* - `operation()` throws on error
|
|
11
|
+
* - `tryOperation()` returns null on error
|
|
12
|
+
*/
|
|
13
|
+
export { ArrayTools } from './array-tools-gs.js';
|
|
14
|
+
export { MapTools } from './map-tools-gs.js';
|
|
15
|
+
export { SetTools } from './set-tools-gs.js';
|
|
16
|
+
export { StringTools } from './string-tools-gs.js';
|
|
17
|
+
//# sourceMappingURL=index-gs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-gs.js","sourceRoot":"","sources":["../src/index-gs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map utilities with dual error handling pattern.
|
|
3
|
+
*/
|
|
4
|
+
export declare class MapExt {
|
|
5
|
+
/**
|
|
6
|
+
* Get value from map, or return default if key doesn't exist.
|
|
7
|
+
*/
|
|
8
|
+
static getOrDefault<K, V>(map: Map<K, V>, key: K, defaultValue: V): V;
|
|
9
|
+
/**
|
|
10
|
+
* Get value from map. Returns null if key doesn't exist.
|
|
11
|
+
*/
|
|
12
|
+
static tryGet<K, V>(map: Map<K, V>, key: K): V | null;
|
|
13
|
+
/**
|
|
14
|
+
* Get value from map. Throws if key doesn't exist.
|
|
15
|
+
*/
|
|
16
|
+
static get<K, V>(map: Map<K, V>, key: K): V;
|
|
17
|
+
/**
|
|
18
|
+
* Get all keys as array.
|
|
19
|
+
*/
|
|
20
|
+
static keys<K, V>(map: Map<K, V>): Array<K>;
|
|
21
|
+
/**
|
|
22
|
+
* Get all values as array.
|
|
23
|
+
*/
|
|
24
|
+
static values<K, V>(map: Map<K, V>): Array<V>;
|
|
25
|
+
/**
|
|
26
|
+
* Get all entries as array of tuples.
|
|
27
|
+
*/
|
|
28
|
+
static entries<K, V>(map: Map<K, V>): Array<[K, V]>;
|
|
29
|
+
/**
|
|
30
|
+
* Create new map from array of tuples.
|
|
31
|
+
*/
|
|
32
|
+
static fromEntries<K, V>(entries: Array<[K, V]>): Map<K, V>;
|
|
33
|
+
/**
|
|
34
|
+
* Map over map values, returning new map with same keys.
|
|
35
|
+
*/
|
|
36
|
+
static mapValues<K, V, U>(map: Map<K, V>, fn: (value: V, key: K) => U): Map<K, U>;
|
|
37
|
+
/**
|
|
38
|
+
* Filter map entries by predicate.
|
|
39
|
+
*/
|
|
40
|
+
static filter<K, V>(map: Map<K, V>, predicate: (value: V, key: K) => boolean): Map<K, V>;
|
|
41
|
+
/**
|
|
42
|
+
* Merge multiple maps. Later maps override earlier ones.
|
|
43
|
+
*/
|
|
44
|
+
static merge<K, V>(...maps: Array<Map<K, V>>): Map<K, V>;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=map-ext-gs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-ext-gs.d.ts","sourceRoot":"","sources":["../src/map-ext-gs.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,MAAM;IACjB;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC;IAKrE;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI;IAKrD;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;IAQ3C;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAI3C;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAI7C;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAInD;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAI3D;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAQjF;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAUxF;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;CASzD"}
|