vest-utils 1.5.0 → 2.0.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.
Files changed (157) hide show
  1. package/README.md +7 -2
  2. package/dist/chunk-CLMFDpHK.mjs +18 -0
  3. package/dist/exports/minifyObject.cjs +114 -0
  4. package/dist/exports/minifyObject.cjs.map +1 -0
  5. package/dist/exports/minifyObject.mjs +113 -0
  6. package/dist/exports/minifyObject.mjs.map +1 -0
  7. package/dist/exports/standardSchemaSpec.cjs +0 -0
  8. package/dist/exports/standardSchemaSpec.mjs +1 -0
  9. package/dist/isEmpty-BBxAFjjm.mjs +103 -0
  10. package/dist/isEmpty-BBxAFjjm.mjs.map +1 -0
  11. package/dist/isEmpty-BuEa-96Q.cjs +235 -0
  12. package/dist/isEmpty-BuEa-96Q.cjs.map +1 -0
  13. package/dist/vest-utils.cjs +510 -0
  14. package/dist/vest-utils.cjs.map +1 -0
  15. package/dist/vest-utils.mjs +421 -0
  16. package/dist/vest-utils.mjs.map +1 -0
  17. package/minifyObject/package.json +12 -8
  18. package/package.json +43 -58
  19. package/src/Brand.ts +9 -0
  20. package/src/IO.ts +2 -0
  21. package/src/Predicates.ts +13 -0
  22. package/src/Result.ts +121 -0
  23. package/src/SimpleStateMachine.ts +157 -0
  24. package/src/StringObject.ts +6 -0
  25. package/src/__tests__/Architecture.test.ts +69 -0
  26. package/src/__tests__/Predicates.test.ts +118 -0
  27. package/src/__tests__/Result.test.ts +284 -0
  28. package/src/__tests__/SimpleStateMachine.test.ts +425 -0
  29. package/src/__tests__/StringObject.test.ts +18 -0
  30. package/src/__tests__/asArray.test.ts +14 -0
  31. package/src/__tests__/bindNot.test.ts +39 -0
  32. package/src/__tests__/bus.test.ts +135 -0
  33. package/src/__tests__/cache.test.ts +139 -0
  34. package/src/__tests__/callEach.test.ts +20 -0
  35. package/src/__tests__/defaultTo.test.ts +52 -0
  36. package/src/__tests__/deferThrow.test.ts +26 -0
  37. package/src/__tests__/either.test.ts +17 -0
  38. package/src/__tests__/freezeAssign.test.ts +24 -0
  39. package/src/__tests__/greaterThan.test.ts +68 -0
  40. package/src/__tests__/invariant.test.ts +47 -0
  41. package/src/__tests__/isArray.test.ts +16 -0
  42. package/src/__tests__/isBoolean.test.ts +16 -0
  43. package/src/__tests__/isEmpty.test.ts +55 -0
  44. package/src/__tests__/isEmptySet.test.ts +22 -0
  45. package/src/__tests__/isNull.test.ts +26 -0
  46. package/src/__tests__/isNumeric.test.ts +27 -0
  47. package/src/__tests__/isPositive.test.ts +38 -0
  48. package/src/__tests__/isPromise.test.ts +17 -0
  49. package/src/__tests__/isString.test.ts +13 -0
  50. package/src/__tests__/isUndefined.test.ts +27 -0
  51. package/src/__tests__/isUnsafeKey.test.ts +22 -0
  52. package/src/__tests__/lengthEquals.test.ts +58 -0
  53. package/src/__tests__/longerThan.test.ts +58 -0
  54. package/src/__tests__/mapFirst.test.ts +31 -0
  55. package/src/__tests__/nonnullish.test.ts +25 -0
  56. package/src/__tests__/noop.test.ts +12 -0
  57. package/src/__tests__/numberEquals.test.ts +67 -0
  58. package/src/__tests__/optionalFunctionValue.test.ts +29 -0
  59. package/src/__tests__/seq.test.ts +29 -0
  60. package/src/__tests__/text.test.ts +41 -0
  61. package/src/__tests__/tinyState.test.ts +68 -0
  62. package/src/__tests__/toNumber.test.ts +39 -0
  63. package/src/__tests__/vest-utils.test.ts +13 -0
  64. package/src/__tests__/withCatch.test.ts +17 -0
  65. package/src/__tests__/withResolvers.test.ts +45 -0
  66. package/src/asArray.ts +3 -0
  67. package/src/assign.ts +1 -0
  68. package/src/bindNot.ts +3 -0
  69. package/src/bus.ts +52 -0
  70. package/src/cache.ts +68 -0
  71. package/src/callEach.ts +5 -0
  72. package/src/defaultTo.ts +9 -0
  73. package/src/deferThrow.ts +7 -0
  74. package/src/dynamicValue.ts +9 -0
  75. package/src/either.ts +3 -0
  76. package/src/exports/__tests__/minifyObject.security.test.ts +65 -0
  77. package/src/exports/__tests__/minifyObject.test.ts +281 -0
  78. package/src/exports/minifyObject.ts +198 -0
  79. package/src/exports/standardSchemaSpec.ts +70 -0
  80. package/src/freezeAssign.ts +5 -0
  81. package/src/globals.d.ts +3 -0
  82. package/src/greaterThan.ts +8 -0
  83. package/src/hasOwnProperty.ts +9 -0
  84. package/src/invariant.ts +19 -0
  85. package/src/isArrayValue.ts +11 -0
  86. package/src/isBooleanValue.ts +3 -0
  87. package/src/isEmpty.ts +18 -0
  88. package/src/isEmptySet.ts +15 -0
  89. package/src/isFunction.ts +5 -0
  90. package/src/isNull.ts +7 -0
  91. package/src/isNullish.ts +10 -0
  92. package/src/isNumeric.ts +11 -0
  93. package/src/isPositive.ts +5 -0
  94. package/src/isPromise.ts +5 -0
  95. package/src/isStringValue.ts +3 -0
  96. package/src/isUndefined.ts +7 -0
  97. package/src/isUnsafeKey.ts +3 -0
  98. package/src/lengthEquals.ts +11 -0
  99. package/src/longerThan.ts +8 -0
  100. package/src/mapFirst.ts +25 -0
  101. package/src/nonnullish.ts +9 -0
  102. package/src/noop.ts +1 -0
  103. package/src/numberEquals.ts +11 -0
  104. package/src/seq.ts +16 -0
  105. package/src/text.ts +20 -0
  106. package/src/tinyState.ts +28 -0
  107. package/src/toNumber.ts +11 -0
  108. package/src/utilityTypes.ts +25 -0
  109. package/src/valueIsObject.ts +5 -0
  110. package/src/vest-utils.ts +73 -0
  111. package/src/withCatch.ts +11 -0
  112. package/src/withResolvers.ts +33 -0
  113. package/standardSchemaSpec/package.json +14 -0
  114. package/types/{minifyObject.d.ts → exports/minifyObject.d.cts} +4 -2
  115. package/types/exports/minifyObject.d.cts.map +1 -0
  116. package/types/exports/minifyObject.d.mts +7 -0
  117. package/types/exports/minifyObject.d.mts.map +1 -0
  118. package/types/exports/standardSchemaSpec.d.cts +59 -0
  119. package/types/exports/standardSchemaSpec.d.cts.map +1 -0
  120. package/types/exports/standardSchemaSpec.d.mts +59 -0
  121. package/types/exports/standardSchemaSpec.d.mts.map +1 -0
  122. package/types/vest-utils.d.cts +296 -0
  123. package/types/vest-utils.d.cts.map +1 -0
  124. package/types/vest-utils.d.mts +295 -0
  125. package/types/vest-utils.d.mts.map +1 -0
  126. package/types/vest-utils.d.ts +245 -143
  127. package/vitest.config.ts +9 -45
  128. package/dist/cjs/minifyObject.development.js +0 -217
  129. package/dist/cjs/minifyObject.development.js.map +0 -1
  130. package/dist/cjs/minifyObject.js +0 -6
  131. package/dist/cjs/minifyObject.production.js +0 -2
  132. package/dist/cjs/minifyObject.production.js.map +0 -1
  133. package/dist/cjs/package.json +0 -1
  134. package/dist/cjs/vest-utils.development.js +0 -378
  135. package/dist/cjs/vest-utils.development.js.map +0 -1
  136. package/dist/cjs/vest-utils.js +0 -6
  137. package/dist/cjs/vest-utils.production.js +0 -2
  138. package/dist/cjs/vest-utils.production.js.map +0 -1
  139. package/dist/es/minifyObject.development.js +0 -214
  140. package/dist/es/minifyObject.development.js.map +0 -1
  141. package/dist/es/minifyObject.production.js +0 -2
  142. package/dist/es/minifyObject.production.js.map +0 -1
  143. package/dist/es/package.json +0 -1
  144. package/dist/es/vest-utils.development.js +0 -330
  145. package/dist/es/vest-utils.development.js.map +0 -1
  146. package/dist/es/vest-utils.production.js +0 -2
  147. package/dist/es/vest-utils.production.js.map +0 -1
  148. package/dist/umd/minifyObject.development.js +0 -223
  149. package/dist/umd/minifyObject.development.js.map +0 -1
  150. package/dist/umd/minifyObject.production.js +0 -2
  151. package/dist/umd/minifyObject.production.js.map +0 -1
  152. package/dist/umd/vest-utils.development.js +0 -384
  153. package/dist/umd/vest-utils.development.js.map +0 -1
  154. package/dist/umd/vest-utils.production.js +0 -2
  155. package/dist/umd/vest-utils.production.js.map +0 -1
  156. package/types/minifyObject.d.ts.map +0 -1
  157. package/types/vest-utils.d.ts.map +0 -1
@@ -0,0 +1,421 @@
1
+ import { t as __export } from "./chunk-CLMFDpHK.mjs";
2
+ import { S as isFunction, _ as numberEquals, a as isObject, b as isNumeric, c as hasOwnProperty, d as isNotUndefined, f as isUndefined, g as lengthNotEquals, h as lengthEquals, i as isNotArray, l as isNotNullish, m as isNull, n as isNotEmpty, o as isUnsafeKey, p as isNotNull, r as isArray, s as isStringValue, t as isEmpty, u as isNullish, v as numberNotEquals, x as bindNot, y as isNotNumeric } from "./isEmpty-BBxAFjjm.mjs";
3
+
4
+ //#region src/noop.ts
5
+ function noop() {}
6
+
7
+ //#endregion
8
+ //#region src/withResolvers.ts
9
+ function withResolvers() {
10
+ if (isFunction(Promise.withResolvers)) return Promise.withResolvers();
11
+ let resolve = noop, reject = noop;
12
+ return {
13
+ promise: new Promise((res, rej) => {
14
+ resolve = res;
15
+ reject = rej;
16
+ }),
17
+ resolve,
18
+ reject
19
+ };
20
+ }
21
+
22
+ //#endregion
23
+ //#region src/greaterThan.ts
24
+ function greaterThan(value, gt) {
25
+ return isNumeric(value) && isNumeric(gt) && Number(value) > Number(gt);
26
+ }
27
+
28
+ //#endregion
29
+ //#region src/longerThan.ts
30
+ function longerThan(value, arg1) {
31
+ return greaterThan(value.length, arg1);
32
+ }
33
+
34
+ //#endregion
35
+ //#region src/cache.ts
36
+ /**
37
+ * Creates a cache function
38
+ */
39
+ function createCache(maxSize = 1) {
40
+ const cacheStorage = [];
41
+ const cache = (deps, cacheAction) => {
42
+ const cacheHit = cache.get(deps);
43
+ if (cacheHit) return cacheHit[1];
44
+ const result = dynamicValue(cacheAction);
45
+ cacheStorage.unshift([deps.concat(), result]);
46
+ trimToSize();
47
+ return result;
48
+ };
49
+ cache.invalidate = (deps) => {
50
+ const index = findIndex(deps);
51
+ if (index > -1) cacheStorage.splice(index, 1);
52
+ };
53
+ cache.get = (deps) => cacheStorage[findIndex(deps)] || null;
54
+ cache.set = (deps, value) => {
55
+ const index = findIndex(deps);
56
+ if (index > -1) cacheStorage[index] = [deps, value];
57
+ else cacheStorage.unshift([deps, value]);
58
+ trimToSize();
59
+ };
60
+ return cache;
61
+ function trimToSize() {
62
+ if (longerThan(cacheStorage, maxSize)) cacheStorage.length = maxSize;
63
+ }
64
+ function findIndex(deps) {
65
+ return cacheStorage.findIndex(([cachedDeps]) => lengthEquals(deps, cachedDeps.length) && deps.every((dep, i) => dep === cachedDeps[i]));
66
+ }
67
+ }
68
+
69
+ //#endregion
70
+ //#region src/asArray.ts
71
+ function asArray(possibleArg) {
72
+ return [].concat(possibleArg);
73
+ }
74
+
75
+ //#endregion
76
+ //#region src/callEach.ts
77
+ function callEach(arr) {
78
+ return arr.forEach((fn) => fn());
79
+ }
80
+
81
+ //#endregion
82
+ //#region src/isPromise.ts
83
+ function isPromise(value) {
84
+ return !!value && isFunction(value.then);
85
+ }
86
+
87
+ //#endregion
88
+ //#region src/dynamicValue.ts
89
+ function dynamicValue(value, ...args) {
90
+ return isFunction(value) ? value(...args) : value;
91
+ }
92
+
93
+ //#endregion
94
+ //#region src/assign.ts
95
+ var assign_default = Object.assign;
96
+
97
+ //#endregion
98
+ //#region src/defaultTo.ts
99
+ function defaultTo(value, defaultValue) {
100
+ return dynamicValue(value) ?? dynamicValue(defaultValue);
101
+ }
102
+
103
+ //#endregion
104
+ //#region src/invariant.ts
105
+ function invariant(condition, message) {
106
+ if (condition) return;
107
+ throw message instanceof String ? message.valueOf() : new Error(message ? dynamicValue(message) : message);
108
+ }
109
+
110
+ //#endregion
111
+ //#region src/either.ts
112
+ function either(a, b) {
113
+ return !!a !== !!b;
114
+ }
115
+
116
+ //#endregion
117
+ //#region src/isBooleanValue.ts
118
+ function isBoolean(value) {
119
+ return !!value === value;
120
+ }
121
+
122
+ //#endregion
123
+ //#region src/deferThrow.ts
124
+ function deferThrow(message) {
125
+ setTimeout(() => {
126
+ throw new Error(message);
127
+ }, 0);
128
+ }
129
+
130
+ //#endregion
131
+ //#region src/bus.ts
132
+ var bus_exports = /* @__PURE__ */ __export({ createBus: () => createBus });
133
+ const EVENT_WILDCARD = "*";
134
+ function createBus() {
135
+ const listeners = {};
136
+ return {
137
+ emit(event, payload) {
138
+ getListeners(event).concat(getListeners(EVENT_WILDCARD)).forEach((handler) => {
139
+ handler(payload);
140
+ });
141
+ },
142
+ on(event, handler) {
143
+ listeners[event] = getListeners(event).concat(handler);
144
+ return { off() {
145
+ listeners[event] = getListeners(event).filter((h) => h !== handler);
146
+ } };
147
+ }
148
+ };
149
+ function getListeners(event) {
150
+ return listeners[event] || [];
151
+ }
152
+ }
153
+
154
+ //#endregion
155
+ //#region src/seq.ts
156
+ const seq = genSeq();
157
+ var seq_default = seq;
158
+ function genSeq(namespace) {
159
+ return ((n) => () => `${namespace ? namespace + "_" : ""}${n++}`)(0);
160
+ }
161
+
162
+ //#endregion
163
+ //#region src/mapFirst.ts
164
+ function mapFirst(array, callback) {
165
+ let broke = false;
166
+ let breakoutValue = null;
167
+ for (let i = 0; i < array.length; i++) {
168
+ callback(array[i], breakout, i);
169
+ if (broke) return breakoutValue;
170
+ }
171
+ function breakout(conditional, value) {
172
+ if (conditional) {
173
+ broke = true;
174
+ breakoutValue = value;
175
+ }
176
+ }
177
+ }
178
+
179
+ //#endregion
180
+ //#region src/isEmptySet.ts
181
+ /**
182
+ * Checks if a given set is empty.
183
+ * @param value value to check
184
+ */
185
+ function isEmptySet(value) {
186
+ return value.size === 0;
187
+ }
188
+ /**
189
+ * Checks if a given set is NOT empty.
190
+ * @param value value to check
191
+ */
192
+ function isNotEmptySet(value) {
193
+ return value.size > 0;
194
+ }
195
+
196
+ //#endregion
197
+ //#region src/isPositive.ts
198
+ function isPositive(value) {
199
+ return greaterThan(value, 0);
200
+ }
201
+
202
+ //#endregion
203
+ //#region src/text.ts
204
+ const regexp = /{([^}]*)}/g;
205
+ function text(str, ...substitutions) {
206
+ const first = substitutions[0];
207
+ if (isObject(first)) return str.replace(regexp, (placeholder, key) => {
208
+ return `${first[key] ?? placeholder}`;
209
+ });
210
+ const subs = [...substitutions];
211
+ return str.replace(regexp, (placeholder) => {
212
+ return `${isEmpty(subs) ? placeholder : subs.shift()}`;
213
+ });
214
+ }
215
+
216
+ //#endregion
217
+ //#region src/Result.ts
218
+ function ok(value) {
219
+ return {
220
+ chain(fn) {
221
+ return fn(value);
222
+ },
223
+ map(fn) {
224
+ return ok(fn(value));
225
+ },
226
+ mapError(_fn) {
227
+ return this;
228
+ },
229
+ match(handlers) {
230
+ return handlers.ok(value);
231
+ },
232
+ type: "ok",
233
+ unwrap() {
234
+ return value;
235
+ },
236
+ unwrapOr(_defaultValue) {
237
+ return value;
238
+ },
239
+ value
240
+ };
241
+ }
242
+ function err(error) {
243
+ return {
244
+ chain(_fn) {
245
+ return this;
246
+ },
247
+ error,
248
+ map(_fn) {
249
+ return this;
250
+ },
251
+ mapError(fn) {
252
+ return err(fn(error));
253
+ },
254
+ match(handlers) {
255
+ return handlers.err(error);
256
+ },
257
+ type: "err",
258
+ unwrap() {
259
+ throw error instanceof Error ? error : new Error(String(error));
260
+ },
261
+ unwrapOr(defaultValue) {
262
+ return defaultValue;
263
+ }
264
+ };
265
+ }
266
+ const makeResult = {
267
+ Ok: ok,
268
+ Err: err
269
+ };
270
+ const hasResultType = (candidate) => candidate.type === "ok" || candidate.type === "err";
271
+ const hasResultShape = (candidate) => "value" in candidate || "error" in candidate;
272
+ function isResult(value) {
273
+ if (!isObject(value)) return false;
274
+ const candidate = value;
275
+ if (!hasResultShape(candidate)) return false;
276
+ return hasResultType(candidate);
277
+ }
278
+ function isSuccess(value) {
279
+ return value.type === "ok";
280
+ }
281
+ function isFailure(value) {
282
+ return value.type === "err";
283
+ }
284
+ /**
285
+ * Unwraps a Result.
286
+ * If the Result is Success, it returns the value.
287
+ * If the Result is Failure, it throws the error.
288
+ */
289
+ function unwrap(result) {
290
+ if (isFailure(result)) throw result.error instanceof Error ? result.error : new Error(String(result.error));
291
+ return result.value;
292
+ }
293
+
294
+ //#endregion
295
+ //#region src/SimpleStateMachine.ts
296
+ const STATE_WILD_CARD = "*";
297
+ function StateMachine(machine) {
298
+ const typedMachine = machine;
299
+ let state = typedMachine.initial;
300
+ return {
301
+ getState,
302
+ initial,
303
+ staticTransition,
304
+ transition
305
+ };
306
+ function getState() {
307
+ return state;
308
+ }
309
+ function initial() {
310
+ return machine.initial;
311
+ }
312
+ function transition(action, payload) {
313
+ const result = calculateNextState(typedMachine, state, action, payload);
314
+ if (isFailure(result)) return makeResult.Err(result.error);
315
+ state = result.value;
316
+ return makeResult.Ok(void 0);
317
+ }
318
+ function staticTransition(from, action, payload) {
319
+ const transitionTo = getTransitionTarget(typedMachine, from, action);
320
+ const target = Array.isArray(transitionTo) ? evaluateConditionalTarget(transitionTo, from, payload) : transitionTo;
321
+ return !target || target === from ? from : target;
322
+ }
323
+ }
324
+ function getTransitionTarget(machine, from, action) {
325
+ return machine.states[from]?.[action] ?? machine.states[STATE_WILD_CARD]?.[action];
326
+ }
327
+ function evaluateConditionalTarget(target, from, payload) {
328
+ const [nextState, conditional] = target;
329
+ return conditional(payload) ? nextState : from;
330
+ }
331
+ function calculateNextState(machine, from, action, payload) {
332
+ const transitionTo = getTransitionTarget(machine, from, action);
333
+ if (!transitionTo) return makeResult.Err(`Invalid transition: "${action}" from state "${from}"`);
334
+ if (Array.isArray(transitionTo)) {
335
+ const [candidateState, conditional] = transitionTo;
336
+ if (!conditional(payload)) return makeResult.Err(`Invalid transition: "${action}" from state "${from}" (conditional failed)`);
337
+ return makeResult.Ok(candidateState);
338
+ }
339
+ return makeResult.Ok(transitionTo);
340
+ }
341
+
342
+ //#endregion
343
+ //#region src/nonnullish.ts
344
+ function nonnullish(value, error) {
345
+ invariant(!isNullish(value), error);
346
+ return value;
347
+ }
348
+
349
+ //#endregion
350
+ //#region src/tinyState.ts
351
+ var tinyState_exports = /* @__PURE__ */ __export({ createTinyState: () => createTinyState });
352
+ function createTinyState(initialValue) {
353
+ let value;
354
+ resetValue();
355
+ return () => [
356
+ value,
357
+ setValue,
358
+ resetValue
359
+ ];
360
+ function setValue(nextValue) {
361
+ value = dynamicValue(nextValue, value);
362
+ }
363
+ function resetValue() {
364
+ setValue(dynamicValue(initialValue));
365
+ }
366
+ }
367
+
368
+ //#endregion
369
+ //#region src/StringObject.ts
370
+ function StringObject(value) {
371
+ return new String(dynamicValue(value));
372
+ }
373
+
374
+ //#endregion
375
+ //#region src/Predicates.ts
376
+ var Predicates_exports = /* @__PURE__ */ __export({
377
+ all: () => all,
378
+ any: () => any
379
+ });
380
+ function all(...p) {
381
+ return (value) => isEmpty(p) ? false : p.every((predicate) => dynamicValue(predicate, value));
382
+ }
383
+ function any(...p) {
384
+ return (value) => isEmpty(p) ? false : p.some((predicate) => dynamicValue(predicate, value));
385
+ }
386
+
387
+ //#endregion
388
+ //#region src/freezeAssign.ts
389
+ function freezeAssign(...args) {
390
+ return Object.freeze(assign_default(...args));
391
+ }
392
+
393
+ //#endregion
394
+ //#region src/withCatch.ts
395
+ function withCatch(cb) {
396
+ return () => {
397
+ try {
398
+ return cb();
399
+ } catch (error) {
400
+ return error;
401
+ }
402
+ };
403
+ }
404
+
405
+ //#endregion
406
+ //#region src/Brand.ts
407
+ function makeBrand(value) {
408
+ return value;
409
+ }
410
+
411
+ //#endregion
412
+ //#region src/toNumber.ts
413
+ function toNumber(value) {
414
+ const num = Number(value);
415
+ if (Number.isNaN(num)) return makeResult.Err(`Value "${value}" is not a number`);
416
+ return makeResult.Ok(num);
417
+ }
418
+
419
+ //#endregion
420
+ export { Predicates_exports as Predicates, StateMachine, StringObject, asArray, assign_default as assign, bindNot, bus_exports as bus, createCache as cache, callEach, defaultTo, deferThrow, dynamicValue, either, freezeAssign, genSeq, greaterThan, hasOwnProperty, invariant, isArray, isBoolean, isEmpty, isEmptySet, isFailure, isFunction, isNotArray, isNotEmpty, isNotEmptySet, isNotNull, isNotNullish, isNotNumeric, isNotUndefined, isNull, isNullish, isNumeric, isObject, isPositive, isPromise, isResult, isStringValue, isSuccess, isUndefined, isUnsafeKey, lengthEquals, lengthNotEquals, longerThan, makeBrand, makeResult, mapFirst, nonnullish, noop, numberEquals, numberNotEquals, seq_default as seq, text, tinyState_exports as tinyState, toNumber, unwrap, withCatch, withResolvers };
421
+ //# sourceMappingURL=vest-utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vest-utils.mjs","names":["resolve: (value: T | PromiseLike<T>) => void","reject: (reason?: any) => void","cacheStorage: Array<[unknown[], T]>","value: S","assign"],"sources":["../src/noop.ts","../src/withResolvers.ts","../src/greaterThan.ts","../src/longerThan.ts","../src/cache.ts","../src/asArray.ts","../src/callEach.ts","../src/isPromise.ts","../src/dynamicValue.ts","../src/assign.ts","../src/defaultTo.ts","../src/invariant.ts","../src/either.ts","../src/isBooleanValue.ts","../src/deferThrow.ts","../src/bus.ts","../src/seq.ts","../src/mapFirst.ts","../src/isEmptySet.ts","../src/isPositive.ts","../src/text.ts","../src/Result.ts","../src/SimpleStateMachine.ts","../src/nonnullish.ts","../src/tinyState.ts","../src/StringObject.ts","../src/Predicates.ts","../src/freezeAssign.ts","../src/withCatch.ts","../src/Brand.ts","../src/toNumber.ts"],"sourcesContent":["export function noop() {}\n","import isFunction from './isFunction';\nimport { noop } from './noop';\n\n// Type declaration for Promise.withResolvers (ES2024 feature)\ndeclare global {\n interface PromiseConstructor {\n withResolvers<T>(): {\n promise: Promise<T>;\n resolve: (value: T | PromiseLike<T>) => void;\n reject: (reason?: any) => void;\n };\n }\n}\n\nexport function withResolvers<T>() {\n if (isFunction(Promise.withResolvers)) {\n return Promise.withResolvers<T>();\n }\n\n let resolve: (value: T | PromiseLike<T>) => void = noop,\n reject: (reason?: any) => void = noop;\n\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n return {\n promise,\n resolve,\n reject,\n };\n}\n","import { isNumeric } from './isNumeric';\n\nexport function greaterThan(\n value: number | string,\n gt: number | string,\n): boolean {\n return isNumeric(value) && isNumeric(gt) && Number(value) > Number(gt);\n}\n","import { greaterThan } from './greaterThan';\n\nexport function longerThan(\n value: string | unknown[],\n arg1: string | number,\n): boolean {\n return greaterThan(value.length, arg1);\n}\n","import { lengthEquals } from './lengthEquals';\nimport { longerThan } from './longerThan';\nimport { DynamicValue, Nullable } from './utilityTypes';\nimport { dynamicValue } from './vest-utils';\n\n/**\n * Creates a cache function\n */\nexport default function createCache<T = unknown>(maxSize = 1): CacheApi<T> {\n const cacheStorage: Array<[unknown[], T]> = [];\n\n const cache = (deps: unknown[], cacheAction: DynamicValue<T>): T => {\n const cacheHit = cache.get(deps);\n // cache hit is not null\n if (cacheHit) return cacheHit[1];\n\n const result = dynamicValue(cacheAction);\n cacheStorage.unshift([deps.concat(), result]);\n\n trimToSize();\n\n return result;\n };\n\n // invalidate an item in the cache by its dependencies\n cache.invalidate = (deps: any[]): void => {\n const index = findIndex(deps);\n if (index > -1) cacheStorage.splice(index, 1);\n };\n\n // Retrieves an item from the cache.\n cache.get = (deps: unknown[]): Nullable<[unknown[], T]> =>\n cacheStorage[findIndex(deps)] || null;\n\n // sets a value to the cache by its dependencies, updating if a hit is found.\n cache.set = (deps: unknown[], value: T): void => {\n const index = findIndex(deps);\n if (index > -1) {\n cacheStorage[index] = [deps, value];\n } else {\n cacheStorage.unshift([deps, value]);\n }\n trimToSize();\n };\n\n return cache;\n\n function trimToSize() {\n if (longerThan(cacheStorage, maxSize)) {\n cacheStorage.length = maxSize;\n }\n }\n\n function findIndex(deps: unknown[]): number {\n return cacheStorage.findIndex(\n ([cachedDeps]) =>\n lengthEquals(deps, cachedDeps.length) &&\n deps.every((dep, i) => dep === cachedDeps[i]),\n );\n }\n}\n\nexport type CacheApi<T = unknown> = {\n (deps: unknown[], cacheAction: DynamicValue<T>): T;\n get(deps: unknown[]): Nullable<[unknown[], T]>;\n set(deps: unknown[], value: T): void;\n invalidate(item: any): void;\n};\n","export default function asArray<T>(possibleArg: T | T[]): T[] {\n return ([] as T[]).concat(possibleArg);\n}\n","import type { CB } from './utilityTypes';\n\nexport default function callEach(arr: CB[]): void {\n return arr.forEach(fn => fn());\n}\n","import isFunction from './isFunction';\n\nexport default function isPromise(value: any): value is Promise<unknown> {\n return !!value && isFunction(value.then);\n}\n","import isFunction from './isFunction';\nimport { DynamicValue } from './utilityTypes';\n\nexport default function dynamicValue<T>(\n value: DynamicValue<T>,\n ...args: unknown[]\n): T {\n return isFunction(value) ? value(...args) : value;\n}\n","export default Object.assign;\n","import dynamicValue from './dynamicValue';\nimport { DynamicValue, Nullish } from './utilityTypes';\n\nexport default function defaultTo<T>(\n value: DynamicValue<Nullish<T>>,\n defaultValue: DynamicValue<T>,\n): T {\n return dynamicValue(value) ?? dynamicValue(defaultValue);\n}\n","import dynamicValue from './dynamicValue';\nimport type { Stringable } from './utilityTypes';\n\nexport default function invariant(\n condition: any,\n\n message?: String | Stringable,\n): asserts condition {\n if (condition) {\n return;\n }\n\n // If message is a string object (rather than string literal)\n // Throw the value directly as a string\n // Alternatively, throw an error with the message\n throw message instanceof String\n ? message.valueOf()\n : new Error(message ? dynamicValue(message) : message);\n}\n","export default function either(a: unknown, b: unknown): boolean {\n return !!a !== !!b;\n}\n","export default function isBoolean(value: unknown): value is boolean {\n return !!value === value;\n}\n","export default function deferThrow(message?: string): void {\n setTimeout(() => {\n throw new Error(message);\n }, 0);\n}\n\nexport type TDeferThrow = typeof deferThrow;\n","import type { CB } from './utilityTypes';\n\nconst EVENT_WILDCARD = '*';\ntype TEventsWildcard = typeof EVENT_WILDCARD;\n\nexport function createBus<\n TEvents extends Record<string, any> = Record<string, any>,\n>(): BusType<TEvents> {\n const listeners = {} as Record<keyof TEvents | TEventsWildcard, CB[]>;\n\n return {\n emit(event: keyof TEvents | TEventsWildcard, payload?: any) {\n getListeners(event)\n .concat(getListeners(EVENT_WILDCARD))\n .forEach(handler => {\n handler(payload);\n });\n },\n\n on(event: keyof TEvents | TEventsWildcard, handler: CB): OnReturn {\n listeners[event] = getListeners(event).concat(handler);\n\n return {\n off() {\n listeners[event] = getListeners(event).filter(h => h !== handler);\n },\n };\n },\n };\n\n function getListeners(event: keyof TEvents | TEventsWildcard): CB[] {\n return listeners[event] || [];\n }\n}\n\ntype OnReturn = { off: CB<void> };\n\nexport type BusType<TEvents extends Record<string, any>> = {\n on<T extends keyof TEvents>(\n event: T,\n handler: (payload: TEvents[T]) => void,\n ): OnReturn;\n on(event: TEventsWildcard, handler: (payload: any) => void): OnReturn;\n\n emit<T extends keyof TEvents>(\n event: T,\n ...args: TEvents[T] extends void\n ? [payload?: TEvents[T]]\n : [payload: TEvents[T]]\n ): void;\n emit(event: TEventsWildcard, payload?: any): void;\n};\n","/**\n * @returns a unique numeric id.\n */\n\nimport { CB } from './utilityTypes';\n\nconst seq = genSeq();\n\nexport default seq;\n\nexport function genSeq(namespace?: string): CB<string> {\n return (\n (n: number) => () =>\n `${namespace ? namespace + '_' : ''}${n++}`\n )(0);\n}\n","export default function mapFirst<T>(\n array: T[],\n callback: (\n item: T,\n breakout: (conditional: boolean, value: unknown) => void,\n index: number,\n ) => unknown,\n): any {\n let broke = false;\n let breakoutValue = null;\n for (let i = 0; i < array.length; i++) {\n callback(array[i], breakout, i);\n\n if (broke) {\n return breakoutValue;\n }\n }\n\n function breakout(conditional: boolean, value: unknown) {\n if (conditional) {\n broke = true;\n breakoutValue = value;\n }\n }\n}\n","/**\n * Checks if a given set is empty.\n * @param value value to check\n */\nexport function isEmptySet(value: Set<unknown>): boolean {\n return value.size === 0;\n}\n\n/**\n * Checks if a given set is NOT empty.\n * @param value value to check\n */\nexport function isNotEmptySet(value: Set<unknown>): boolean {\n return value.size > 0;\n}\n","import { greaterThan } from './greaterThan';\n\nexport function isPositive(value: number | string): boolean {\n return greaterThan(value, 0);\n}\n","import { isEmpty } from './isEmpty';\nimport { isObject } from './valueIsObject';\n\nconst regexp = /{([^}]*)}/g;\n\nexport function text(str: string, ...substitutions: Array<unknown>): string {\n const first = substitutions[0];\n\n if (isObject(first)) {\n return str.replace(regexp, (placeholder, key: string) => {\n return `${first[key] ?? placeholder}`;\n });\n }\n\n const subs = [...substitutions];\n\n return str.replace(regexp, placeholder => {\n return `${isEmpty(subs) ? placeholder : subs.shift()}`;\n });\n}\n","import { isObject } from './valueIsObject';\n\nexport type Result<T, E = unknown> = Success<T, E> | Failure<T, E>;\n\ntype Success<T, E> = {\n chain<U, E2 = E>(fn: (value: T) => Result<U, E2>): Result<U, E | E2>;\n map<U>(fn: (value: T) => U): Result<U, E>;\n mapError<E2>(fn: (error: E) => E2): Result<T, E2>;\n match<U>(handlers: { ok: (value: T) => U; err: (error: E) => U }): U;\n readonly type: 'ok';\n unwrap(): T;\n unwrapOr(defaultValue: T): T;\n readonly value: T;\n};\n\nexport type Failure<T, E> = {\n chain<U, E2 = E>(fn: (value: T) => Result<U, E2>): Result<U, E | E2>;\n readonly error: E;\n map<U>(fn: (value: T) => U): Result<U, E>;\n mapError<E2>(fn: (error: E) => E2): Result<T, E2>;\n match<U>(handlers: { ok: (value: T) => U; err: (error: E) => U }): U;\n readonly type: 'err';\n unwrap(): T;\n unwrapOr(defaultValue: T): T;\n};\n\nfunction ok<T, E = unknown>(value: T): Success<T, E> {\n return {\n chain<U, E2 = E>(fn: (inner: T) => Result<U, E2>) {\n return fn(value) as Result<U, E | E2>;\n },\n map<U>(fn: (inner: T) => U) {\n return ok<U, E>(fn(value));\n },\n mapError<E2>(_fn: (error: E) => E2) {\n return this as unknown as Success<T, E2>;\n },\n match<U>(handlers: { ok: (val: T) => U; err: (err: E) => U }) {\n return handlers.ok(value);\n },\n type: 'ok',\n unwrap() {\n return value;\n },\n unwrapOr(_defaultValue: T) {\n return value;\n },\n value,\n };\n}\n\nfunction err<T = never, E = unknown>(error: E): Failure<T, E> {\n return {\n chain<U, E2 = E>(_fn: (inner: T) => Result<U, E2>) {\n return this as unknown as Failure<U, E | E2>;\n },\n error,\n map<U>(_fn: (inner: T) => U) {\n return this as unknown as Failure<U, E>;\n },\n mapError<E2>(fn: (inner: E) => E2) {\n return err<T, E2>(fn(error));\n },\n match<U>(handlers: { ok: (val: T) => U; err: (err: E) => U }) {\n return handlers.err(error);\n },\n type: 'err',\n unwrap() {\n throw error instanceof Error ? error : new Error(String(error));\n },\n unwrapOr(defaultValue: T) {\n return defaultValue;\n },\n };\n}\n\nexport const makeResult = { Ok: ok, Err: err } as const;\n\nconst hasResultType = (candidate: { type?: unknown }): boolean =>\n candidate.type === 'ok' || candidate.type === 'err';\n\nconst hasResultShape = (candidate: Record<string, unknown>): boolean =>\n 'value' in candidate || 'error' in candidate;\n\nexport function isResult(value: unknown): value is Result<unknown, unknown> {\n if (!isObject(value)) {\n return false;\n }\n\n const candidate = value as { type?: unknown } & Record<string, unknown>;\n\n if (!hasResultShape(candidate)) {\n return false;\n }\n\n return hasResultType(candidate);\n}\n\nexport function isSuccess<T, E>(value: Result<T, E>): value is Success<T, E> {\n return value.type === 'ok';\n}\n\nexport function isFailure<T, E>(value: Result<T, E>): value is Failure<T, E> {\n return value.type === 'err';\n}\n\n/**\n * Unwraps a Result.\n * If the Result is Success, it returns the value.\n * If the Result is Failure, it throws the error.\n */\nexport function unwrap<T>(result: Result<T, any>): T {\n if (isFailure(result)) {\n // Ensure we always throw an Error object for better stack traces\n throw result.error instanceof Error\n ? result.error\n : new Error(String(result.error));\n }\n\n return result.value;\n}\n","import { isFailure, makeResult, Result } from './Result';\nimport { CB } from './utilityTypes';\n\nconst STATE_WILD_CARD = '*';\ntype TStateWildCard = typeof STATE_WILD_CARD;\n\ntype TransitionTarget<S extends string> = S | [S, CB<boolean, [payload?: any]>];\ntype StatesMap<S extends string = string, A extends string = string> = Record<\n S | TStateWildCard,\n Partial<Record<A, TransitionTarget<S>>>\n>;\n\nexport type TStateMachine<\n S extends string = string,\n A extends string = string,\n> = {\n initial: S;\n states: Partial<StatesMap<S, A>>;\n};\n\nexport type TStateMachineApi<\n S extends string = string,\n A extends string = string,\n> = {\n getState: CB<S>;\n initial: CB<S>;\n staticTransition: (from: S, action: A, payload?: any) => S;\n transition: (action: A, payload?: any) => Result<void, string>;\n};\n\ntype TransitionValue<V> = V extends [infer T, any]\n ? T extends string\n ? T\n : never\n : V extends string\n ? V\n : never;\n\ntype Values<T> = T[keyof T];\n\ntype StateConfigs<M extends { states: Record<string, any> }> = Values<\n M['states']\n>;\n\ntype ActionFromConfig<M extends { states: Record<string, any> }> =\n StateConfigs<M> extends infer SC\n ? SC extends any\n ? Extract<keyof SC, string>\n : never\n : never;\n\ntype TargetStatesFromConfig<M extends { states: Record<string, any> }> =\n StateConfigs<M> extends infer SC\n ? SC extends any\n ? TransitionValue<Values<SC>>\n : never\n : never;\n\ntype StateFromConfig<\n M extends { initial: string; states: Record<string, any> },\n> =\n | M['initial']\n | Extract<keyof M['states'], string>\n | TargetStatesFromConfig<M>;\n\nexport function StateMachine<\n M extends { initial: string; states: Record<string, any> },\n>(machine: M): TStateMachineApi<StateFromConfig<M>, ActionFromConfig<M>> {\n type SMState = StateFromConfig<M>;\n type SMAction = ActionFromConfig<M>;\n\n const typedMachine = machine as TStateMachine<SMState, SMAction>;\n\n let state = typedMachine.initial;\n\n const api = { getState, initial, staticTransition, transition };\n\n return api;\n\n function getState(): SMState {\n return state;\n }\n\n function initial(): SMState {\n return machine.initial;\n }\n\n function transition(action: SMAction, payload?: any): Result<void, string> {\n const result = calculateNextState(typedMachine, state, action, payload);\n\n if (isFailure(result)) {\n return makeResult.Err(result.error);\n }\n\n state = result.value;\n return makeResult.Ok(undefined);\n }\n\n function staticTransition(\n from: SMState,\n action: SMAction,\n payload?: any,\n ): SMState {\n const transitionTo = getTransitionTarget(typedMachine, from, action);\n const target = Array.isArray(transitionTo)\n ? evaluateConditionalTarget(transitionTo, from, payload)\n : transitionTo;\n\n return !target || target === from ? from : (target as SMState);\n }\n}\n\nfunction getTransitionTarget<S extends string, A extends string>(\n machine: TStateMachine<S, A>,\n from: S,\n action: A,\n): TransitionTarget<S> | undefined {\n return (\n machine.states[from]?.[action] ?? machine.states[STATE_WILD_CARD]?.[action]\n );\n}\n\nfunction evaluateConditionalTarget<S extends string>(\n target: [S, CB<boolean, [payload?: any]>],\n from: S,\n payload?: any,\n): S {\n const [nextState, conditional] = target;\n return conditional(payload) ? nextState : from;\n}\n\nfunction calculateNextState<S extends string, A extends string>(\n machine: TStateMachine<S, A>,\n from: S,\n action: A,\n payload?: any,\n): Result<S, string> {\n const transitionTo = getTransitionTarget(machine, from, action);\n\n if (!transitionTo) {\n return makeResult.Err(\n `Invalid transition: \"${action}\" from state \"${from}\"`,\n );\n }\n\n if (Array.isArray(transitionTo)) {\n const [candidateState, conditional] = transitionTo;\n if (!conditional(payload)) {\n return makeResult.Err(\n `Invalid transition: \"${action}\" from state \"${from}\" (conditional failed)`,\n );\n }\n return makeResult.Ok(candidateState);\n }\n\n return makeResult.Ok(transitionTo as S);\n}\n","import invariant from './invariant';\nimport { isNullish } from './isNullish';\nimport { Nullish } from './utilityTypes';\n\nexport function nonnullish<T>(value: Nullish<T>, error?: string): T {\n invariant(!isNullish(value), error);\n\n return value;\n}\n","import dynamicValue from './dynamicValue';\nimport { DynamicValue } from './utilityTypes';\n\nexport function createTinyState<S>(\n initialValue: SetValueInput<S>,\n): TinyState<S> {\n let value: S;\n\n resetValue();\n\n return () => [value, setValue, resetValue];\n\n function setValue(nextValue: SetValueInput<S>) {\n value = dynamicValue(nextValue, value);\n }\n\n function resetValue() {\n setValue(dynamicValue(initialValue));\n }\n}\n\nexport type TinyState<S> = () => [\n value: S,\n setValue: (next: SetValueInput<S>) => void,\n resetValue: () => void,\n];\n\ntype SetValueInput<S> = DynamicValue<S, [prev: S]>;\n","import dynamicValue from './dynamicValue';\nimport type { Stringable } from './utilityTypes';\n\nexport function StringObject(value?: Stringable): String {\n return new String(dynamicValue(value));\n}\n","import dynamicValue from './dynamicValue';\nimport { isEmpty } from './isEmpty';\nimport { Predicate } from './utilityTypes';\n\nexport function all<T = any>(...p: Predicate<T>[]): (value: T) => boolean {\n return (value: T) =>\n isEmpty(p) ? false : p.every(predicate => dynamicValue(predicate, value));\n}\n\nexport function any<T = any>(...p: Predicate<T>[]): (value: T) => boolean {\n return (value: T) =>\n isEmpty(p) ? false : p.some(predicate => dynamicValue(predicate, value));\n}\n","import assign from './assign';\n\nexport function freezeAssign<T extends object>(...args: Partial<T>[]): T {\n return Object.freeze(assign(...(args as [Partial<T>])));\n}\n","import { CB } from './utilityTypes';\n\nexport function withCatch<T>(cb: CB<T>): () => T | unknown {\n return () => {\n try {\n return cb();\n } catch (error) {\n return error;\n }\n };\n}\n","// Utility for creating opaque branded types to avoid primitive mixing\n// Brand is represented as an intersection type with a unique symbol index\n// This pattern prevents accidental assignment between different domain primitives\n\nexport type Brand<T, B> = T & { readonly __brand: B };\n\nexport function makeBrand<T extends Brand<any, any>>(value: unknown): T {\n return value as T;\n}\n","import { makeResult, Result } from './Result';\n\nexport function toNumber(value: any): Result<number, string> {\n const num = Number(value);\n\n if (Number.isNaN(num)) {\n return makeResult.Err(`Value \"${value}\" is not a number`);\n }\n\n return makeResult.Ok(num);\n}\n"],"mappings":"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"}
@@ -1,10 +1,14 @@
1
1
  {
2
- "main": "../dist/cjs/minifyObject.js",
3
- "module": "../dist/es/minifyObject.production.js",
4
- "unpkg": "../dist/umd/minifyObject.production.js",
5
- "jsdelivr": "../dist/umd/minifyObject.production.js",
6
- "name": "minifyObject",
7
- "types": "../types/minifyObject.d.ts",
8
- "license": "MIT",
9
- "private": true
2
+ "exports": {
3
+ ".": {
4
+ "default": "../dist/exports/minifyObject.mjs",
5
+ "import": "../dist/exports/minifyObject.mjs",
6
+ "require": "../dist/exports/minifyObject.cjs",
7
+ "types": "../types/exports/minifyObject.d.mts"
8
+ }
9
+ },
10
+ "main": "../dist/exports/minifyObject.cjs",
11
+ "module": "../dist/exports/minifyObject.mjs",
12
+ "type": "module",
13
+ "types": "../types/exports/minifyObject.d.mts"
10
14
  }
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.5.0",
2
+ "version": "2.0.1",
3
3
  "name": "vest-utils",
4
4
  "author": "ealush",
5
5
  "scripts": {
@@ -7,73 +7,58 @@
7
7
  "build": "vx build",
8
8
  "release": "vx release"
9
9
  },
10
- "main": "./dist/cjs/vest-utils.js",
11
- "module": "./dist/es/vest-utils.production.js",
12
- "unpkg": "./dist/umd/vest-utils.production.js",
13
- "jsdelivr": "./dist/umd/vest-utils.production.js",
14
- "types": "./types/vest-utils.d.ts",
10
+ "main": "./dist/vest-utils.cjs",
11
+ "module": "./dist/vest-utils.mjs",
12
+ "unpkg": "./dist/vest-utils.mjs",
13
+ "jsdelivr": "./dist/vest-utils.mjs",
14
+ "types": "./types/vest-utils.d.cts",
15
15
  "repository": {
16
16
  "type": "git",
17
- "url": "https://github.com/ealush/vest.git",
17
+ "url": "git+https://github.com/ealush/vest.git",
18
18
  "directory": "packages/vest-utils"
19
19
  },
20
20
  "bugs": {
21
21
  "url": "https://github.com/ealush/vest.git/issues"
22
22
  },
23
+ "license": "MIT",
23
24
  "exports": {
24
- "./minifyObject": {
25
- "production": {
26
- "types": "./types/minifyObject.d.ts",
27
- "browser": "./dist/es/minifyObject.production.js",
28
- "umd": "./dist/umd/minifyObject.production.js",
29
- "import": "./dist/es/minifyObject.production.js",
30
- "require": "./dist/cjs/minifyObject.production.js",
31
- "node": "./dist/cjs/minifyObject.production.js",
32
- "module": "./dist/es/minifyObject.production.js",
33
- "default": "./dist/cjs/minifyObject.production.js"
34
- },
35
- "development": {
36
- "types": "./types/minifyObject.d.ts",
37
- "browser": "./dist/es/minifyObject.development.js",
38
- "umd": "./dist/umd/minifyObject.development.js",
39
- "import": "./dist/es/minifyObject.development.js",
40
- "require": "./dist/cjs/minifyObject.development.js",
41
- "node": "./dist/cjs/minifyObject.development.js",
42
- "module": "./dist/es/minifyObject.development.js",
43
- "default": "./dist/cjs/minifyObject.development.js"
44
- },
45
- "types": "./types/minifyObject.d.ts",
46
- "browser": "./dist/es/minifyObject.production.js",
47
- "umd": "./dist/umd/minifyObject.production.js",
48
- "import": "./dist/es/minifyObject.production.js",
49
- "require": "./dist/cjs/minifyObject.production.js",
50
- "node": "./dist/cjs/minifyObject.production.js",
51
- "module": "./dist/es/minifyObject.production.js",
52
- "default": "./dist/cjs/minifyObject.production.js"
25
+ "./exports/minifyObject": {
26
+ "types": "./types/exports/minifyObject.d.cts",
27
+ "require": "./dist/exports/minifyObject.cjs",
28
+ "import": "./dist/exports/minifyObject.mjs"
29
+ },
30
+ "./exports/standardSchemaSpec": {
31
+ "types": "./types/exports/standardSchemaSpec.d.cts",
32
+ "require": "./dist/exports/standardSchemaSpec.cjs",
33
+ "import": "./dist/exports/standardSchemaSpec.mjs"
34
+ },
35
+ "./vest-utils": {
36
+ "types": "./types/vest-utils.d.cts",
37
+ "require": "./dist/vest-utils.cjs",
38
+ "import": "./dist/vest-utils.mjs"
39
+ },
40
+ "./*": {
41
+ "types": "./types/vest-utils.d.cts",
42
+ "default": "./*"
53
43
  },
54
44
  ".": {
55
- "development": {
56
- "types": "./types/vest-utils.d.ts",
57
- "browser": "./dist/es/vest-utils.development.js",
58
- "umd": "./dist/umd/vest-utils.development.js",
59
- "import": "./dist/es/vest-utils.development.js",
60
- "require": "./dist/cjs/vest-utils.development.js",
61
- "node": "./dist/cjs/vest-utils.development.js",
62
- "module": "./dist/es/vest-utils.development.js",
63
- "default": "./dist/cjs/vest-utils.development.js"
64
- },
65
- "types": "./types/vest-utils.d.ts",
66
- "browser": "./dist/es/vest-utils.production.js",
67
- "umd": "./dist/umd/vest-utils.production.js",
68
- "import": "./dist/es/vest-utils.production.js",
69
- "require": "./dist/cjs/vest-utils.production.js",
70
- "node": "./dist/cjs/vest-utils.production.js",
71
- "module": "./dist/es/vest-utils.production.js",
72
- "default": "./dist/cjs/vest-utils.production.js"
45
+ "types": "./types/vest-utils.d.cts",
46
+ "require": "./dist/vest-utils.cjs",
47
+ "import": "./dist/vest-utils.mjs"
73
48
  },
74
49
  "./package.json": "./package.json",
75
- "./*": "./*"
76
- },
77
- "vxAllowResolve": [],
78
- "license": "MIT"
50
+ "./minifyObject": {
51
+ "types": "./types/exports/minifyObject.d.cts",
52
+ "require": "./dist/exports/minifyObject.cjs",
53
+ "import": "./dist/exports/minifyObject.mjs"
54
+ },
55
+ "./standardSchemaSpec": {
56
+ "types": "./types/exports/standardSchemaSpec.d.cts",
57
+ "require": "./dist/exports/standardSchemaSpec.cjs",
58
+ "import": "./dist/exports/standardSchemaSpec.mjs"
59
+ },
60
+ "./vest-utils.d.ts": "./types/vest-utils.d.ts",
61
+ "./types/*": "./types/*",
62
+ "./dist/*": "./dist/*"
63
+ }
79
64
  }
package/src/Brand.ts ADDED
@@ -0,0 +1,9 @@
1
+ // Utility for creating opaque branded types to avoid primitive mixing
2
+ // Brand is represented as an intersection type with a unique symbol index
3
+ // This pattern prevents accidental assignment between different domain primitives
4
+
5
+ export type Brand<T, B> = T & { readonly __brand: B };
6
+
7
+ export function makeBrand<T extends Brand<any, any>>(value: unknown): T {
8
+ return value as T;
9
+ }
package/src/IO.ts ADDED
@@ -0,0 +1,2 @@
1
+ // IO represents a deferred computation. Executing the function performs the effect.
2
+ export type IO<T> = () => T;
@@ -0,0 +1,13 @@
1
+ import dynamicValue from './dynamicValue';
2
+ import { isEmpty } from './isEmpty';
3
+ import { Predicate } from './utilityTypes';
4
+
5
+ export function all<T = any>(...p: Predicate<T>[]): (value: T) => boolean {
6
+ return (value: T) =>
7
+ isEmpty(p) ? false : p.every(predicate => dynamicValue(predicate, value));
8
+ }
9
+
10
+ export function any<T = any>(...p: Predicate<T>[]): (value: T) => boolean {
11
+ return (value: T) =>
12
+ isEmpty(p) ? false : p.some(predicate => dynamicValue(predicate, value));
13
+ }