@baseplate-dev/utils 0.1.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.
- package/LICENSE +390 -0
- package/README.md +3 -0
- package/dist/crypto/hash.d.ts +2 -0
- package/dist/crypto/hash.d.ts.map +1 -0
- package/dist/crypto/hash.js +14 -0
- package/dist/crypto/hash.js.map +1 -0
- package/dist/crypto/index.d.ts +2 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +2 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/errors/enhance-error-with-context.d.ts +9 -0
- package/dist/errors/enhance-error-with-context.d.ts.map +1 -0
- package/dist/errors/enhance-error-with-context.js +19 -0
- package/dist/errors/enhance-error-with-context.js.map +1 -0
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +2 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/events/index.d.ts +2 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +2 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/typed-event-emitter.d.ts +64 -0
- package/dist/events/typed-event-emitter.d.ts.map +1 -0
- package/dist/events/typed-event-emitter.js +128 -0
- package/dist/events/typed-event-emitter.js.map +1 -0
- package/dist/field-map/field-map.d.ts +118 -0
- package/dist/field-map/field-map.d.ts.map +1 -0
- package/dist/field-map/field-map.js +287 -0
- package/dist/field-map/field-map.js.map +1 -0
- package/dist/field-map/index.d.ts +2 -0
- package/dist/field-map/index.d.ts.map +1 -0
- package/dist/field-map/index.js +2 -0
- package/dist/field-map/index.js.map +1 -0
- package/dist/fs/dir-exists.d.ts +7 -0
- package/dist/fs/dir-exists.d.ts.map +1 -0
- package/dist/fs/dir-exists.js +12 -0
- package/dist/fs/dir-exists.js.map +1 -0
- package/dist/fs/ensure-dir.d.ts +6 -0
- package/dist/fs/ensure-dir.d.ts.map +1 -0
- package/dist/fs/ensure-dir.js +9 -0
- package/dist/fs/ensure-dir.js.map +1 -0
- package/dist/fs/file-exists.d.ts +7 -0
- package/dist/fs/file-exists.d.ts.map +1 -0
- package/dist/fs/file-exists.js +12 -0
- package/dist/fs/file-exists.js.map +1 -0
- package/dist/fs/find-nearest-package-json.d.ts +22 -0
- package/dist/fs/find-nearest-package-json.d.ts.map +1 -0
- package/dist/fs/find-nearest-package-json.js +34 -0
- package/dist/fs/find-nearest-package-json.js.map +1 -0
- package/dist/fs/handle-not-found-error.d.ts +9 -0
- package/dist/fs/handle-not-found-error.d.ts.map +1 -0
- package/dist/fs/handle-not-found-error.js +15 -0
- package/dist/fs/handle-not-found-error.js.map +1 -0
- package/dist/fs/index.d.ts +9 -0
- package/dist/fs/index.d.ts.map +1 -0
- package/dist/fs/index.js +9 -0
- package/dist/fs/index.js.map +1 -0
- package/dist/fs/read-json-with-schema.d.ts +10 -0
- package/dist/fs/read-json-with-schema.d.ts.map +1 -0
- package/dist/fs/read-json-with-schema.js +29 -0
- package/dist/fs/read-json-with-schema.js.map +1 -0
- package/dist/fs/write-json.d.ts +7 -0
- package/dist/fs/write-json.d.ts.map +1 -0
- package/dist/fs/write-json.js +10 -0
- package/dist/fs/write-json.js.map +1 -0
- package/dist/fs/write-stable-pretty-json.d.ts +10 -0
- package/dist/fs/write-stable-pretty-json.d.ts.map +1 -0
- package/dist/fs/write-stable-pretty-json.js +15 -0
- package/dist/fs/write-stable-pretty-json.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/json/index.d.ts +3 -0
- package/dist/json/index.d.ts.map +1 -0
- package/dist/json/index.js +3 -0
- package/dist/json/index.js.map +1 -0
- package/dist/json/stringify-pretty-compact.d.ts +11 -0
- package/dist/json/stringify-pretty-compact.d.ts.map +1 -0
- package/dist/json/stringify-pretty-compact.js +127 -0
- package/dist/json/stringify-pretty-compact.js.map +1 -0
- package/dist/json/stringify-pretty-stable.d.ts +10 -0
- package/dist/json/stringify-pretty-stable.d.ts.map +1 -0
- package/dist/json/stringify-pretty-stable.js +17 -0
- package/dist/json/stringify-pretty-stable.js.map +1 -0
- package/dist/maps/group-by.d.ts +13 -0
- package/dist/maps/group-by.d.ts.map +1 -0
- package/dist/maps/group-by.js +26 -0
- package/dist/maps/group-by.js.map +1 -0
- package/dist/maps/index.d.ts +5 -0
- package/dist/maps/index.d.ts.map +1 -0
- package/dist/maps/index.js +5 -0
- package/dist/maps/index.js.map +1 -0
- package/dist/maps/key-by.d.ts +14 -0
- package/dist/maps/key-by.d.ts.map +1 -0
- package/dist/maps/key-by.js +21 -0
- package/dist/maps/key-by.js.map +1 -0
- package/dist/maps/map-values-of-map.d.ts +12 -0
- package/dist/maps/map-values-of-map.d.ts.map +1 -0
- package/dist/maps/map-values-of-map.js +18 -0
- package/dist/maps/map-values-of-map.js.map +1 -0
- package/dist/maps/safe-merge-map.d.ts +33 -0
- package/dist/maps/safe-merge-map.d.ts.map +1 -0
- package/dist/maps/safe-merge-map.js +45 -0
- package/dist/maps/safe-merge-map.js.map +1 -0
- package/dist/node.d.ts +3 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +4 -0
- package/dist/node.js.map +1 -0
- package/dist/objects/index.d.ts +3 -0
- package/dist/objects/index.d.ts.map +1 -0
- package/dist/objects/index.js +3 -0
- package/dist/objects/index.js.map +1 -0
- package/dist/objects/safe-merge.d.ts +32 -0
- package/dist/objects/safe-merge.d.ts.map +1 -0
- package/dist/objects/safe-merge.js +46 -0
- package/dist/objects/safe-merge.js.map +1 -0
- package/dist/objects/sort-object-keys.d.ts +8 -0
- package/dist/objects/sort-object-keys.d.ts.map +1 -0
- package/dist/objects/sort-object-keys.js +10 -0
- package/dist/objects/sort-object-keys.js.map +1 -0
- package/dist/paths/get-common-path-prefix.d.ts +10 -0
- package/dist/paths/get-common-path-prefix.d.ts.map +1 -0
- package/dist/paths/get-common-path-prefix.js +34 -0
- package/dist/paths/get-common-path-prefix.js.map +1 -0
- package/dist/paths/index.d.ts +3 -0
- package/dist/paths/index.d.ts.map +1 -0
- package/dist/paths/index.js +3 -0
- package/dist/paths/index.js.map +1 -0
- package/dist/paths/posix-join.d.ts +9 -0
- package/dist/paths/posix-join.d.ts.map +1 -0
- package/dist/paths/posix-join.js +12 -0
- package/dist/paths/posix-join.js.map +1 -0
- package/dist/sets/difference.d.ts +9 -0
- package/dist/sets/difference.d.ts.map +1 -0
- package/dist/sets/difference.js +17 -0
- package/dist/sets/difference.js.map +1 -0
- package/dist/sets/index.d.ts +2 -0
- package/dist/sets/index.d.ts.map +1 -0
- package/dist/sets/index.js +2 -0
- package/dist/sets/index.js.map +1 -0
- package/dist/string/index.d.ts +3 -0
- package/dist/string/index.d.ts.map +1 -0
- package/dist/string/index.js +3 -0
- package/dist/string/index.js.map +1 -0
- package/dist/string/quot.d.ts +13 -0
- package/dist/string/quot.d.ts.map +1 -0
- package/dist/string/quot.js +17 -0
- package/dist/string/quot.js.map +1 -0
- package/dist/string/random-uid.d.ts +6 -0
- package/dist/string/random-uid.d.ts.map +1 -0
- package/dist/string/random-uid.js +16 -0
- package/dist/string/random-uid.js.map +1 -0
- package/dist/toposort/errors.d.ts +9 -0
- package/dist/toposort/errors.d.ts.map +1 -0
- package/dist/toposort/errors.js +17 -0
- package/dist/toposort/errors.js.map +1 -0
- package/dist/toposort/index.d.ts +4 -0
- package/dist/toposort/index.d.ts.map +1 -0
- package/dist/toposort/index.js +4 -0
- package/dist/toposort/index.js.map +1 -0
- package/dist/toposort/toposort-local.d.ts +25 -0
- package/dist/toposort/toposort-local.d.ts.map +1 -0
- package/dist/toposort/toposort-local.js +152 -0
- package/dist/toposort/toposort-local.js.map +1 -0
- package/dist/toposort/toposort.d.ts +30 -0
- package/dist/toposort/toposort.d.ts.map +1 -0
- package/dist/toposort/toposort.js +156 -0
- package/dist/toposort/toposort.js.map +1 -0
- package/dist/type-guards/index.d.ts +2 -0
- package/dist/type-guards/index.d.ts.map +1 -0
- package/dist/type-guards/index.js +2 -0
- package/dist/type-guards/index.js.map +1 -0
- package/dist/type-guards/not-empty.d.ts +5 -0
- package/dist/type-guards/not-empty.d.ts.map +1 -0
- package/dist/type-guards/not-empty.js +7 -0
- package/dist/type-guards/not-empty.js.map +1 -0
- package/dist/validators/case-validators.d.ts +36 -0
- package/dist/validators/case-validators.d.ts.map +1 -0
- package/dist/validators/case-validators.js +36 -0
- package/dist/validators/case-validators.js.map +1 -0
- package/dist/validators/index.d.ts +4 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/index.js +4 -0
- package/dist/validators/index.js.map +1 -0
- package/dist/validators/number-validators.d.ts +8 -0
- package/dist/validators/number-validators.d.ts.map +1 -0
- package/dist/validators/number-validators.js +12 -0
- package/dist/validators/number-validators.js.map +1 -0
- package/dist/validators/transform-with-dynamic-schema.d.ts +10 -0
- package/dist/validators/transform-with-dynamic-schema.d.ts.map +1 -0
- package/dist/validators/transform-with-dynamic-schema.js +33 -0
- package/dist/validators/transform-with-dynamic-schema.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Class providing typed event emitter functionality.
|
|
3
|
+
*
|
|
4
|
+
* @template T - Mapping of event names to payload types.
|
|
5
|
+
*/
|
|
6
|
+
export class TypedEventEmitter {
|
|
7
|
+
listenerMap = new Map();
|
|
8
|
+
/**
|
|
9
|
+
* Abort controller for the event emitter to terminate all async generator listeners.
|
|
10
|
+
*/
|
|
11
|
+
eventEmitterAbortController = new AbortController();
|
|
12
|
+
/**
|
|
13
|
+
* Registers a listener for an event.
|
|
14
|
+
*
|
|
15
|
+
* @template K - The event name.
|
|
16
|
+
* @param eventName - Name of the event.
|
|
17
|
+
* @param listener - Callback invoked with the event payload.
|
|
18
|
+
* @param options - Options for the listener.
|
|
19
|
+
* @returns Function to unregister the listener.
|
|
20
|
+
*/
|
|
21
|
+
on(eventName, listener, options) {
|
|
22
|
+
const { signal } = options ?? {};
|
|
23
|
+
const existingListeners = this.listenerMap.get(eventName) ?? [];
|
|
24
|
+
this.listenerMap.set(eventName, [
|
|
25
|
+
...existingListeners,
|
|
26
|
+
listener,
|
|
27
|
+
]);
|
|
28
|
+
// Returns a function that unregisters this listener.
|
|
29
|
+
const unregister = () => {
|
|
30
|
+
const updatedListeners = (this.listenerMap.get(eventName) ?? []).filter((l) => l !== listener);
|
|
31
|
+
if (updatedListeners.length > 0) {
|
|
32
|
+
this.listenerMap.set(eventName, updatedListeners);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
this.listenerMap.delete(eventName);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
signal?.addEventListener('abort', unregister, {
|
|
39
|
+
once: true,
|
|
40
|
+
});
|
|
41
|
+
return unregister;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Creates an async generator for an event.
|
|
45
|
+
*
|
|
46
|
+
* @template K - The event name.
|
|
47
|
+
* @param eventName - Name of the event.
|
|
48
|
+
* @param options - Additional options.
|
|
49
|
+
* @returns An async generator yielding event payloads.
|
|
50
|
+
*/
|
|
51
|
+
async *onAsync(eventName, options) {
|
|
52
|
+
// Create a queue to store events when consumer isn't ready
|
|
53
|
+
const queue = [];
|
|
54
|
+
let pendingNext;
|
|
55
|
+
let isDone = false;
|
|
56
|
+
// Return early if the signal is aborted
|
|
57
|
+
const eventEmitterAbortSignal = this.eventEmitterAbortController.signal;
|
|
58
|
+
if (options.signal?.aborted || eventEmitterAbortSignal.aborted)
|
|
59
|
+
return;
|
|
60
|
+
function abortHandler() {
|
|
61
|
+
isDone = true;
|
|
62
|
+
// trigger dummy event to unblock the consumer
|
|
63
|
+
pendingNext?.(undefined);
|
|
64
|
+
}
|
|
65
|
+
options.signal?.addEventListener('abort', abortHandler, { once: true });
|
|
66
|
+
eventEmitterAbortSignal.addEventListener('abort', abortHandler, {
|
|
67
|
+
once: true,
|
|
68
|
+
});
|
|
69
|
+
this.on(eventName, (payload) => {
|
|
70
|
+
if (pendingNext) {
|
|
71
|
+
pendingNext(payload);
|
|
72
|
+
pendingNext = undefined;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
queue.push(payload);
|
|
76
|
+
}
|
|
77
|
+
}, { signal: options.signal });
|
|
78
|
+
// Keep yielding events until done
|
|
79
|
+
while (!isDone) {
|
|
80
|
+
const payload = queue.shift() ??
|
|
81
|
+
(await new Promise((resolve) => {
|
|
82
|
+
pendingNext = resolve;
|
|
83
|
+
}));
|
|
84
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- false positive since isDone is set to true in the abort handler
|
|
85
|
+
if (isDone)
|
|
86
|
+
break;
|
|
87
|
+
yield payload;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Emits an event with the given payload.
|
|
92
|
+
*
|
|
93
|
+
* @template K - The event name.
|
|
94
|
+
* @param eventName - Name of the event.
|
|
95
|
+
* @param payload - Payload for the event.
|
|
96
|
+
*/
|
|
97
|
+
emit(eventName, payload) {
|
|
98
|
+
const listeners = this.listenerMap.get(eventName) ?? [];
|
|
99
|
+
for (const listener of listeners) {
|
|
100
|
+
listener(payload);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Removes all registered event listeners.
|
|
105
|
+
*
|
|
106
|
+
* Note: This is dangerous and should only be used in testing.
|
|
107
|
+
*/
|
|
108
|
+
clearListeners() {
|
|
109
|
+
this.listenerMap.clear();
|
|
110
|
+
this.eventEmitterAbortController.abort();
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Aborts the event emitter to terminate all async generator listeners.
|
|
114
|
+
*/
|
|
115
|
+
abortEventEmitter() {
|
|
116
|
+
this.eventEmitterAbortController.abort();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Creates a typed event emitter that supports event listening and emitting.
|
|
121
|
+
*
|
|
122
|
+
* @template T - Mapping of event names to payload types.
|
|
123
|
+
* @returns An emitter with `on`, `emit`, and `clear` methods.
|
|
124
|
+
*/
|
|
125
|
+
export function createTypedEventEmitter() {
|
|
126
|
+
return new TypedEventEmitter();
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=typed-event-emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-event-emitter.js","sourceRoot":"","sources":["../../src/events/typed-event-emitter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IACpB,WAAW,GAAG,IAAI,GAAG,EAA8C,CAAC;IAE5E;;OAEG;IACK,2BAA2B,GAAG,IAAI,eAAe,EAAE,CAAC;IAE5D;;;;;;;;OAQG;IACH,EAAE,CACA,SAAY,EACZ,QAAiC,EACjC,OAKC;QAED,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;QACjC,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAChE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE;YAC9B,GAAG,iBAAiB;YACpB,QAAyC;SAC1C,CAAC,CAAC;QAEH,qDAAqD;QACrD,MAAM,UAAU,GAAG,GAAS,EAAE;YAC5B,MAAM,gBAAgB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CACrE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CACtB,CAAC;YACF,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE;YAC5C,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,CAAC,OAAO,CACZ,SAAY,EACZ,OAAiC;QAEjC,2DAA2D;QAC3D,MAAM,KAAK,GAAW,EAAE,CAAC;QACzB,IAAI,WAAgD,CAAC;QACrD,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,wCAAwC;QACxC,MAAM,uBAAuB,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC;QACxE,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,IAAI,uBAAuB,CAAC,OAAO;YAAE,OAAO;QAEvE,SAAS,YAAY;YACnB,MAAM,GAAG,IAAI,CAAC;YACd,8CAA8C;YAC9C,WAAW,EAAE,CAAC,SAAiB,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE;YAC9D,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CACL,SAAS,EACT,CAAC,OAAO,EAAE,EAAE;YACV,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,CAAC,OAAO,CAAC,CAAC;gBACrB,WAAW,GAAG,SAAS,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,EACD,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAC3B,CAAC;QAEF,kCAAkC;QAClC,OAAO,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,OAAO,GACX,KAAK,CAAC,KAAK,EAAE;gBACb,CAAC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBACnC,WAAW,GAAG,OAAO,CAAC;gBACxB,CAAC,CAAC,CAAC,CAAC;YAEN,0IAA0I;YAC1I,IAAI,MAAM;gBAAE,MAAM;YAElB,MAAM,OAAO,CAAC;QAChB,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,IAAI,CAAoB,SAAY,EAAE,OAAa;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACxD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,cAAc;QACZ,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;IAED;;OAEG;IACO,iBAAiB;QACzB,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB;IAGrC,OAAO,IAAI,iBAAiB,EAAK,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
export type FieldContainerDynamicSourceGetter = () => string | undefined;
|
|
2
|
+
export interface FieldContainerOptions {
|
|
3
|
+
/**
|
|
4
|
+
* A function that returns the source of the value.
|
|
5
|
+
*
|
|
6
|
+
* @returns The source of the value, or undefined if the value is not set.
|
|
7
|
+
*/
|
|
8
|
+
getDynamicSource?: FieldContainerDynamicSourceGetter;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Base field container interface
|
|
12
|
+
*/
|
|
13
|
+
export interface FieldContainer<T> {
|
|
14
|
+
getValue(): T;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Field container for a single value that cannot be overridden once set
|
|
18
|
+
*/
|
|
19
|
+
export declare class ScalarContainer<T> implements FieldContainer<T> {
|
|
20
|
+
private _value;
|
|
21
|
+
protected readonly defaultValue: T;
|
|
22
|
+
protected isSet: boolean;
|
|
23
|
+
protected setBySource: string | undefined;
|
|
24
|
+
protected getDynamicSource: FieldContainerDynamicSourceGetter | undefined;
|
|
25
|
+
constructor(defaultValue: T, options?: FieldContainerOptions);
|
|
26
|
+
getValue(): T;
|
|
27
|
+
set(value: T, source?: string): void;
|
|
28
|
+
}
|
|
29
|
+
export declare class ArrayContainer<T> implements FieldContainer<T[]> {
|
|
30
|
+
private readonly _stripDuplicates;
|
|
31
|
+
private _value;
|
|
32
|
+
constructor(initialValue?: T[], options?: {
|
|
33
|
+
stripDuplicates?: boolean;
|
|
34
|
+
});
|
|
35
|
+
push(...items: T[]): void;
|
|
36
|
+
getValue(): T[];
|
|
37
|
+
}
|
|
38
|
+
export declare class ObjectContainer<T extends Record<string, unknown>> implements FieldContainer<T> {
|
|
39
|
+
private readonly map;
|
|
40
|
+
protected getDynamicSource: FieldContainerDynamicSourceGetter | undefined;
|
|
41
|
+
constructor(initialValue: T, options?: FieldContainerOptions);
|
|
42
|
+
set(key: keyof T, value: T[keyof T], source?: string): void;
|
|
43
|
+
merge(value: Partial<T>, source?: string): void;
|
|
44
|
+
getValue(): T;
|
|
45
|
+
}
|
|
46
|
+
export declare class MapContainer<K extends string | number | symbol, V> implements FieldContainer<Map<K, V>> {
|
|
47
|
+
private readonly _value;
|
|
48
|
+
protected getDynamicSource: FieldContainerDynamicSourceGetter | undefined;
|
|
49
|
+
constructor(initialValue?: Map<K, V>, options?: FieldContainerOptions);
|
|
50
|
+
set(key: K, value: V, source?: string): void;
|
|
51
|
+
merge(value: Map<K, V>, source?: string): void;
|
|
52
|
+
mergeObj(value: Record<K, V>, source?: string): void;
|
|
53
|
+
getValue(): Map<K, V>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Named field container
|
|
57
|
+
*
|
|
58
|
+
* This container stores objects that contains a name field that can be used for
|
|
59
|
+
* detecting duplicate names.
|
|
60
|
+
*/
|
|
61
|
+
export declare class NamedArrayFieldContainer<V extends {
|
|
62
|
+
name: string;
|
|
63
|
+
}> implements FieldContainer<V[]> {
|
|
64
|
+
private readonly _value;
|
|
65
|
+
protected getDynamicSource: FieldContainerDynamicSourceGetter | undefined;
|
|
66
|
+
constructor(initialValue?: V[], options?: FieldContainerOptions);
|
|
67
|
+
add(value: V, source?: string): void;
|
|
68
|
+
addMany(values: V[], source?: string): void;
|
|
69
|
+
getValue(): V[];
|
|
70
|
+
}
|
|
71
|
+
export declare class MapOfMapsContainer<K1 extends string | number | symbol, K2 extends string | number | symbol, V> implements FieldContainer<Map<K1, Map<K2, V>>> {
|
|
72
|
+
private readonly _value;
|
|
73
|
+
protected getDynamicSource: FieldContainerDynamicSourceGetter | undefined;
|
|
74
|
+
constructor(initialValue?: Map<K1, Map<K2, V>>, options?: FieldContainerOptions);
|
|
75
|
+
set(key1: K1, key2: K2, value: V, source?: string): void;
|
|
76
|
+
merge(key1: K1, value: Map<K2, V>, source?: string): void;
|
|
77
|
+
mergeObj(key1: K1, value: Record<K2, V>, source?: string): void;
|
|
78
|
+
getValue(): Map<K1, Map<K2, V>>;
|
|
79
|
+
}
|
|
80
|
+
type InferFieldContainer<T> = T extends FieldContainer<infer U> ? U : never;
|
|
81
|
+
export type FieldMapSchema = Record<string, FieldContainer<unknown>>;
|
|
82
|
+
export type FieldMapValues<S extends FieldMapSchema> = {
|
|
83
|
+
[K in keyof S]: InferFieldContainer<S[K]>;
|
|
84
|
+
};
|
|
85
|
+
export type FieldMap<S extends FieldMapSchema> = S & {
|
|
86
|
+
getValues(): FieldMapValues<S>;
|
|
87
|
+
};
|
|
88
|
+
export declare class FieldMapSchemaBuilder {
|
|
89
|
+
options?: FieldContainerOptions | undefined;
|
|
90
|
+
constructor(options?: FieldContainerOptions | undefined);
|
|
91
|
+
scalar<T>(): ScalarContainer<T | undefined>;
|
|
92
|
+
scalar<T>(defaultValue: T): ScalarContainer<T>;
|
|
93
|
+
string(): ScalarContainer<string | undefined>;
|
|
94
|
+
string(defaultValue: string): ScalarContainer<string>;
|
|
95
|
+
number(): ScalarContainer<number | undefined>;
|
|
96
|
+
number(defaultValue: number): ScalarContainer<number>;
|
|
97
|
+
boolean(): ScalarContainer<boolean | undefined>;
|
|
98
|
+
boolean(defaultValue: boolean): ScalarContainer<boolean>;
|
|
99
|
+
array<T>(initialValue?: T[], options?: {
|
|
100
|
+
stripDuplicates?: boolean;
|
|
101
|
+
}): ArrayContainer<T>;
|
|
102
|
+
object<T extends Record<string, unknown>>(defaultValue: T): ObjectContainer<T>;
|
|
103
|
+
map<K extends string | number | symbol, V>(initialValue?: Map<K, V>): MapContainer<K, V>;
|
|
104
|
+
mapFromObj<V>(initialValue?: Record<string, V>): MapContainer<string, V>;
|
|
105
|
+
namedArray<V extends {
|
|
106
|
+
name: string;
|
|
107
|
+
}>(initialValue?: V[]): NamedArrayFieldContainer<V>;
|
|
108
|
+
mapOfMaps<K1 extends string | number | symbol, K2 extends string | number | symbol, V>(initialValue?: Map<K1, Map<K2, V>>): MapOfMapsContainer<K1, K2, V>;
|
|
109
|
+
mapOfMapsFromObj<K2 extends string | number | symbol, V>(initialValue?: Record<string, Record<K2, V>>): MapOfMapsContainer<string, K2, V>;
|
|
110
|
+
}
|
|
111
|
+
export declare function createFieldMapSchemaBuilder<T extends FieldMapSchema>(schemaBuilder: (t: FieldMapSchemaBuilder) => T): (t: FieldMapSchemaBuilder) => T;
|
|
112
|
+
export type InferFieldMapSchemaFromBuilder<T extends (t: FieldMapSchemaBuilder) => FieldMapSchema> = T extends (t: FieldMapSchemaBuilder) => infer U ? U : never;
|
|
113
|
+
/**
|
|
114
|
+
* Creates a field map with type-safe field definitions
|
|
115
|
+
*/
|
|
116
|
+
export declare function createFieldMap<S extends FieldMapSchema>(schemaBuilder: (t: FieldMapSchemaBuilder) => S, options?: FieldContainerOptions): FieldMap<S>;
|
|
117
|
+
export {};
|
|
118
|
+
//# sourceMappingURL=field-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-map.d.ts","sourceRoot":"","sources":["../../src/field-map/field-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import { sortBy } from 'es-toolkit';
|
|
2
|
+
/**
|
|
3
|
+
* Field container for a single value that cannot be overridden once set
|
|
4
|
+
*/
|
|
5
|
+
export class ScalarContainer {
|
|
6
|
+
_value;
|
|
7
|
+
defaultValue;
|
|
8
|
+
isSet = false;
|
|
9
|
+
setBySource;
|
|
10
|
+
getDynamicSource;
|
|
11
|
+
constructor(defaultValue, options) {
|
|
12
|
+
this.defaultValue = defaultValue;
|
|
13
|
+
this.getDynamicSource = options?.getDynamicSource;
|
|
14
|
+
}
|
|
15
|
+
getValue() {
|
|
16
|
+
return this._value === undefined ? this.defaultValue : this._value;
|
|
17
|
+
}
|
|
18
|
+
set(value, source) {
|
|
19
|
+
if (this.isSet) {
|
|
20
|
+
throw new Error(`Value has already been set by ${this.setBySource} and cannot be overwritten by ${source}`);
|
|
21
|
+
}
|
|
22
|
+
this._value = value;
|
|
23
|
+
this.isSet = true;
|
|
24
|
+
this.setBySource = source ?? this.getDynamicSource?.() ?? 'unknown';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// Array field container
|
|
28
|
+
export class ArrayContainer {
|
|
29
|
+
_stripDuplicates;
|
|
30
|
+
_value;
|
|
31
|
+
constructor(initialValue, options) {
|
|
32
|
+
this._stripDuplicates = options?.stripDuplicates ?? false;
|
|
33
|
+
this._value = initialValue ?? [];
|
|
34
|
+
}
|
|
35
|
+
push(...items) {
|
|
36
|
+
let currentValue = this._value;
|
|
37
|
+
if (this._stripDuplicates) {
|
|
38
|
+
// Add items without duplicates
|
|
39
|
+
const set = new Set([...currentValue, ...items]);
|
|
40
|
+
currentValue = [...set];
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// Add all items
|
|
44
|
+
currentValue = [...currentValue, ...items];
|
|
45
|
+
}
|
|
46
|
+
this._value = currentValue;
|
|
47
|
+
}
|
|
48
|
+
getValue() {
|
|
49
|
+
return this._value;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export class ObjectContainer {
|
|
53
|
+
map;
|
|
54
|
+
getDynamicSource;
|
|
55
|
+
constructor(initialValue, options) {
|
|
56
|
+
this.getDynamicSource = options?.getDynamicSource;
|
|
57
|
+
this.map = new Map(Object.entries(initialValue).map(([key, value]) => [
|
|
58
|
+
key,
|
|
59
|
+
{ value, setBySource: this.getDynamicSource?.() },
|
|
60
|
+
]));
|
|
61
|
+
}
|
|
62
|
+
set(key, value, source) {
|
|
63
|
+
const existingValue = this.map.get(key);
|
|
64
|
+
if (existingValue?.setBySource) {
|
|
65
|
+
throw new Error(`Value for key ${key} has already been set by ${existingValue.setBySource} and cannot be overwritten by ${source}`);
|
|
66
|
+
}
|
|
67
|
+
this.map.set(key, {
|
|
68
|
+
value,
|
|
69
|
+
setBySource: source ?? this.getDynamicSource?.(),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
merge(value, source) {
|
|
73
|
+
const mergeSource = source ?? this.getDynamicSource?.();
|
|
74
|
+
for (const [key, val] of Object.entries(value)) {
|
|
75
|
+
this.set(key, val, mergeSource);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
getValue() {
|
|
79
|
+
return Object.fromEntries([...this.map.entries()].map(([key, value]) => [key, value.value]));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Map field container
|
|
83
|
+
export class MapContainer {
|
|
84
|
+
_value;
|
|
85
|
+
getDynamicSource;
|
|
86
|
+
constructor(initialValue, options) {
|
|
87
|
+
this.getDynamicSource = options?.getDynamicSource;
|
|
88
|
+
const initialMap = initialValue ?? new Map();
|
|
89
|
+
this._value = new Map([...initialMap.entries()].map(([key, value]) => [
|
|
90
|
+
key,
|
|
91
|
+
{ value, setBySource: this.getDynamicSource?.() },
|
|
92
|
+
]));
|
|
93
|
+
}
|
|
94
|
+
set(key, value, source) {
|
|
95
|
+
const existingValue = this._value.get(key);
|
|
96
|
+
if (existingValue?.setBySource) {
|
|
97
|
+
throw new Error(`Value for key ${key} has already been set by ${existingValue.setBySource} and cannot be overwritten by ${source}`);
|
|
98
|
+
}
|
|
99
|
+
this._value.set(key, {
|
|
100
|
+
value,
|
|
101
|
+
setBySource: source ?? this.getDynamicSource?.(),
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
merge(value, source) {
|
|
105
|
+
const mergeSource = source ?? this.getDynamicSource?.();
|
|
106
|
+
for (const [key, val] of value.entries()) {
|
|
107
|
+
this.set(key, val, mergeSource);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
mergeObj(value, source) {
|
|
111
|
+
const mergeSource = source ?? this.getDynamicSource?.();
|
|
112
|
+
for (const [key, val] of Object.entries(value)) {
|
|
113
|
+
this.set(key, val, mergeSource);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
getValue() {
|
|
117
|
+
return new Map([...this._value.entries()].map(([key, value]) => [key, value.value]));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Named field container
|
|
122
|
+
*
|
|
123
|
+
* This container stores objects that contains a name field that can be used for
|
|
124
|
+
* detecting duplicate names.
|
|
125
|
+
*/
|
|
126
|
+
export class NamedArrayFieldContainer {
|
|
127
|
+
_value;
|
|
128
|
+
getDynamicSource;
|
|
129
|
+
constructor(initialValue, options) {
|
|
130
|
+
this.getDynamicSource = options?.getDynamicSource;
|
|
131
|
+
const value = initialValue ?? [];
|
|
132
|
+
this._value = new Map(value.map((val) => [
|
|
133
|
+
val.name,
|
|
134
|
+
{ value: val, setBySource: this.getDynamicSource?.() },
|
|
135
|
+
]));
|
|
136
|
+
}
|
|
137
|
+
add(value, source) {
|
|
138
|
+
const existingValue = this._value.get(value.name);
|
|
139
|
+
if (existingValue?.setBySource) {
|
|
140
|
+
throw new Error(`Value for name ${value.name} has already been set by ${existingValue.setBySource} and cannot be overwritten by ${source}`);
|
|
141
|
+
}
|
|
142
|
+
this._value.set(value.name, {
|
|
143
|
+
value,
|
|
144
|
+
setBySource: source ?? this.getDynamicSource?.(),
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
addMany(values, source) {
|
|
148
|
+
for (const value of values) {
|
|
149
|
+
this.add(value, source);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
getValue() {
|
|
153
|
+
return sortBy([...this._value.values()].map((value) => value.value), [(v) => v.name]);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Map of maps field container
|
|
157
|
+
export class MapOfMapsContainer {
|
|
158
|
+
_value;
|
|
159
|
+
getDynamicSource;
|
|
160
|
+
constructor(initialValue, options) {
|
|
161
|
+
this.getDynamicSource = options?.getDynamicSource;
|
|
162
|
+
const initialMap = initialValue ?? new Map();
|
|
163
|
+
this._value = new Map([...initialMap.entries()].map(([key1, innerMap]) => [
|
|
164
|
+
key1,
|
|
165
|
+
{
|
|
166
|
+
value: new Map([...innerMap.entries()].map(([key2, value]) => [
|
|
167
|
+
key2,
|
|
168
|
+
{ value, setBySource: this.getDynamicSource?.() },
|
|
169
|
+
])),
|
|
170
|
+
setBySource: this.getDynamicSource?.(),
|
|
171
|
+
},
|
|
172
|
+
]));
|
|
173
|
+
}
|
|
174
|
+
set(key1, key2, value, source) {
|
|
175
|
+
const existingOuterValue = this._value.get(key1);
|
|
176
|
+
const sourceToUse = source ?? this.getDynamicSource?.() ?? 'unknown';
|
|
177
|
+
// If the outer key doesn't exist yet, create a new map for it
|
|
178
|
+
if (!existingOuterValue) {
|
|
179
|
+
const newInnerMap = new Map();
|
|
180
|
+
newInnerMap.set(key2, { value, setBySource: sourceToUse });
|
|
181
|
+
this._value.set(key1, {
|
|
182
|
+
value: newInnerMap,
|
|
183
|
+
setBySource: sourceToUse,
|
|
184
|
+
});
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
// Check if this specific key1+key2 combination has already been set
|
|
188
|
+
const existingInnerValue = existingOuterValue.value.get(key2);
|
|
189
|
+
if (existingInnerValue?.setBySource) {
|
|
190
|
+
throw new Error(`Value for keys ${key1}+${key2} has already been set by ${existingInnerValue.setBySource} and cannot be overwritten by ${sourceToUse}`);
|
|
191
|
+
}
|
|
192
|
+
// Add the new value to the existing inner map
|
|
193
|
+
existingOuterValue.value.set(key2, {
|
|
194
|
+
value,
|
|
195
|
+
setBySource: sourceToUse,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
merge(key1, value, source) {
|
|
199
|
+
const mergeSource = source ?? this.getDynamicSource?.() ?? 'unknown';
|
|
200
|
+
for (const [key2, val] of value.entries()) {
|
|
201
|
+
this.set(key1, key2, val, mergeSource);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
mergeObj(key1, value, source) {
|
|
205
|
+
const mergeSource = source ?? this.getDynamicSource?.() ?? 'unknown';
|
|
206
|
+
for (const [key2, val] of Object.entries(value)) {
|
|
207
|
+
this.set(key1, key2, val, mergeSource);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
getValue() {
|
|
211
|
+
return new Map([...this._value.entries()].map(([key1, outerValue]) => [
|
|
212
|
+
key1,
|
|
213
|
+
new Map([...outerValue.value.entries()].map(([key2, innerValue]) => [
|
|
214
|
+
key2,
|
|
215
|
+
innerValue.value,
|
|
216
|
+
])),
|
|
217
|
+
]));
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// Schema builder class
|
|
221
|
+
export class FieldMapSchemaBuilder {
|
|
222
|
+
options;
|
|
223
|
+
constructor(options) {
|
|
224
|
+
this.options = options;
|
|
225
|
+
}
|
|
226
|
+
scalar(defaultValue) {
|
|
227
|
+
return new ScalarContainer(defaultValue, this.options);
|
|
228
|
+
}
|
|
229
|
+
string(defaultValue) {
|
|
230
|
+
return new ScalarContainer(defaultValue, this.options);
|
|
231
|
+
}
|
|
232
|
+
number(defaultValue) {
|
|
233
|
+
return new ScalarContainer(defaultValue, this.options);
|
|
234
|
+
}
|
|
235
|
+
boolean(defaultValue) {
|
|
236
|
+
return new ScalarContainer(defaultValue, this.options);
|
|
237
|
+
}
|
|
238
|
+
array(initialValue, options) {
|
|
239
|
+
return new ArrayContainer(initialValue, options);
|
|
240
|
+
}
|
|
241
|
+
object(defaultValue) {
|
|
242
|
+
return new ObjectContainer(defaultValue, this.options);
|
|
243
|
+
}
|
|
244
|
+
map(initialValue) {
|
|
245
|
+
return new MapContainer(initialValue ?? new Map(), this.options);
|
|
246
|
+
}
|
|
247
|
+
mapFromObj(initialValue) {
|
|
248
|
+
return new MapContainer(new Map(Object.entries(initialValue ?? {})), this.options);
|
|
249
|
+
}
|
|
250
|
+
namedArray(initialValue) {
|
|
251
|
+
return new NamedArrayFieldContainer(initialValue, this.options);
|
|
252
|
+
}
|
|
253
|
+
mapOfMaps(initialValue) {
|
|
254
|
+
return new MapOfMapsContainer(initialValue ?? new Map(), this.options);
|
|
255
|
+
}
|
|
256
|
+
mapOfMapsFromObj(initialValue) {
|
|
257
|
+
const map = new Map();
|
|
258
|
+
if (initialValue) {
|
|
259
|
+
for (const [key1, innerObj] of Object.entries(initialValue)) {
|
|
260
|
+
map.set(key1, new Map(Object.entries(innerObj)));
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return new MapOfMapsContainer(map, this.options);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
export function createFieldMapSchemaBuilder(schemaBuilder) {
|
|
267
|
+
return schemaBuilder;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Creates a field map with type-safe field definitions
|
|
271
|
+
*/
|
|
272
|
+
export function createFieldMap(schemaBuilder, options) {
|
|
273
|
+
const schema = schemaBuilder(new FieldMapSchemaBuilder(options));
|
|
274
|
+
// Add getValues method
|
|
275
|
+
return {
|
|
276
|
+
...schema,
|
|
277
|
+
getValues: () => {
|
|
278
|
+
const values = {};
|
|
279
|
+
for (const key of Object.keys(schema)) {
|
|
280
|
+
const container = schema[key];
|
|
281
|
+
values[key] = container.getValue();
|
|
282
|
+
}
|
|
283
|
+
return values;
|
|
284
|
+
},
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
//# sourceMappingURL=field-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-map.js","sourceRoot":"","sources":["../../src/field-map/field-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/field-map/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/field-map/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dir-exists.d.ts","sourceRoot":"","sources":["../../src/fs/dir-exists.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAIlE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { stat } from 'node:fs/promises';
|
|
2
|
+
/**
|
|
3
|
+
* Checks if a directory exists
|
|
4
|
+
* @param filePath - The path to the directory
|
|
5
|
+
* @returns True if the directory exists, false otherwise
|
|
6
|
+
*/
|
|
7
|
+
export async function dirExists(filePath) {
|
|
8
|
+
return stat(filePath)
|
|
9
|
+
.then((file) => file.isDirectory())
|
|
10
|
+
.catch(() => false);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=dir-exists.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dir-exists.js","sourceRoot":"","sources":["../../src/fs/dir-exists.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB;IAC9C,OAAO,IAAI,CAAC,QAAQ,CAAC;SAClB,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;SAClC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensure-dir.d.ts","sourceRoot":"","sources":["../../src/fs/ensure-dir.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAsB,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { mkdir } from 'node:fs/promises';
|
|
2
|
+
/**
|
|
3
|
+
* Ensures a directory exists, creating it recursively if it doesn't
|
|
4
|
+
* @param directoryPath - The path to the directory
|
|
5
|
+
*/
|
|
6
|
+
export async function ensureDir(directoryPath) {
|
|
7
|
+
await mkdir(directoryPath, { recursive: true });
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=ensure-dir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensure-dir.js","sourceRoot":"","sources":["../../src/fs/ensure-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,aAAqB;IACnD,MAAM,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks if a file exists and is a file
|
|
3
|
+
* @param filePath - The path to the file
|
|
4
|
+
* @returns True if the file exists and is a file, false otherwise
|
|
5
|
+
*/
|
|
6
|
+
export declare function fileExists(filePath: string): Promise<boolean>;
|
|
7
|
+
//# sourceMappingURL=file-exists.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-exists.d.ts","sourceRoot":"","sources":["../../src/fs/file-exists.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAInE"}
|