ts-data-forge 3.3.0 → 3.3.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/README.md +37 -13
- package/dist/array/impl/array-utils-creation.d.mts +116 -0
- package/dist/array/impl/array-utils-creation.d.mts.map +1 -0
- package/dist/array/impl/array-utils-creation.mjs +110 -0
- package/dist/array/impl/array-utils-creation.mjs.map +1 -0
- package/dist/array/impl/array-utils-element-access.d.mts +61 -0
- package/dist/array/impl/array-utils-element-access.d.mts.map +1 -0
- package/dist/array/impl/array-utils-element-access.mjs +66 -0
- package/dist/array/impl/array-utils-element-access.mjs.map +1 -0
- package/dist/array/impl/array-utils-iterators.d.mts +59 -0
- package/dist/array/impl/array-utils-iterators.d.mts.map +1 -0
- package/dist/array/impl/array-utils-iterators.mjs +104 -0
- package/dist/array/impl/array-utils-iterators.mjs.map +1 -0
- package/dist/array/impl/array-utils-modification.d.mts +154 -0
- package/dist/array/impl/array-utils-modification.d.mts.map +1 -0
- package/dist/array/impl/array-utils-modification.mjs +139 -0
- package/dist/array/impl/array-utils-modification.mjs.map +1 -0
- package/dist/array/impl/array-utils-reducing-value.d.mts +214 -0
- package/dist/array/impl/array-utils-reducing-value.d.mts.map +1 -0
- package/dist/array/impl/array-utils-reducing-value.mjs +160 -0
- package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -0
- package/dist/array/impl/array-utils-search.d.mts +179 -0
- package/dist/array/impl/array-utils-search.d.mts.map +1 -0
- package/dist/array/impl/array-utils-search.mjs +153 -0
- package/dist/array/impl/array-utils-search.mjs.map +1 -0
- package/dist/array/impl/array-utils-set-op.d.mts +100 -0
- package/dist/array/impl/array-utils-set-op.d.mts.map +1 -0
- package/dist/array/impl/array-utils-set-op.mjs +137 -0
- package/dist/array/impl/array-utils-set-op.mjs.map +1 -0
- package/dist/array/impl/array-utils-size.d.mts +24 -0
- package/dist/array/impl/array-utils-size.d.mts.map +1 -0
- package/dist/array/impl/array-utils-size.mjs +28 -0
- package/dist/array/impl/array-utils-size.mjs.map +1 -0
- package/dist/array/impl/array-utils-slice-clamped.d.mts +18 -0
- package/dist/array/impl/array-utils-slice-clamped.d.mts.map +1 -0
- package/dist/array/impl/array-utils-slice-clamped.mjs +49 -0
- package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -0
- package/dist/array/impl/array-utils-slicing.d.mts +120 -0
- package/dist/array/impl/array-utils-slicing.d.mts.map +1 -0
- package/dist/array/impl/array-utils-slicing.mjs +140 -0
- package/dist/array/impl/array-utils-slicing.mjs.map +1 -0
- package/dist/array/impl/array-utils-transformation.d.mts +348 -0
- package/dist/array/impl/array-utils-transformation.d.mts.map +1 -0
- package/dist/array/impl/array-utils-transformation.mjs +331 -0
- package/dist/array/impl/array-utils-transformation.mjs.map +1 -0
- package/dist/array/impl/array-utils-validation.d.mts +149 -0
- package/dist/array/impl/array-utils-validation.d.mts.map +1 -0
- package/dist/array/impl/array-utils-validation.mjs +166 -0
- package/dist/array/impl/array-utils-validation.mjs.map +1 -0
- package/dist/array/impl/index.d.mts +13 -0
- package/dist/array/impl/index.d.mts.map +1 -0
- package/dist/array/impl/index.mjs +13 -0
- package/dist/array/impl/index.mjs.map +1 -0
- package/dist/array/index.d.mts +1 -1
- package/dist/array/index.d.mts.map +1 -1
- package/dist/array/index.mjs +2 -1
- package/dist/array/index.mjs.map +1 -1
- package/dist/collections/imap-mapped.d.mts +83 -253
- package/dist/collections/imap-mapped.d.mts.map +1 -1
- package/dist/collections/imap-mapped.mjs +33 -164
- package/dist/collections/imap-mapped.mjs.map +1 -1
- package/dist/collections/imap.d.mts +436 -163
- package/dist/collections/imap.d.mts.map +1 -1
- package/dist/collections/imap.mjs +74 -94
- package/dist/collections/imap.mjs.map +1 -1
- package/dist/collections/iset-mapped.d.mts +828 -345
- package/dist/collections/iset-mapped.d.mts.map +1 -1
- package/dist/collections/iset-mapped.mjs +200 -242
- package/dist/collections/iset-mapped.mjs.map +1 -1
- package/dist/collections/iset.d.mts +397 -205
- package/dist/collections/iset.d.mts.map +1 -1
- package/dist/collections/iset.mjs +102 -184
- package/dist/collections/iset.mjs.map +1 -1
- package/dist/collections/queue.d.mts +155 -135
- package/dist/collections/queue.d.mts.map +1 -1
- package/dist/collections/queue.mjs +55 -156
- package/dist/collections/queue.mjs.map +1 -1
- package/dist/collections/stack.d.mts +154 -154
- package/dist/collections/stack.d.mts.map +1 -1
- package/dist/collections/stack.mjs +54 -203
- package/dist/collections/stack.mjs.map +1 -1
- package/dist/entry-point.d.mts +1 -0
- package/dist/entry-point.d.mts.map +1 -1
- package/dist/entry-point.mjs +2 -1
- package/dist/entry-point.mjs.map +1 -1
- package/dist/expect-type.d.mts +43 -172
- package/dist/expect-type.d.mts.map +1 -1
- package/dist/expect-type.mjs +43 -172
- package/dist/expect-type.mjs.map +1 -1
- package/dist/functional/match.d.mts +35 -140
- package/dist/functional/match.d.mts.map +1 -1
- package/dist/functional/match.mjs.map +1 -1
- package/dist/functional/optional.d.mts +282 -160
- package/dist/functional/optional.d.mts.map +1 -1
- package/dist/functional/optional.mjs +131 -71
- package/dist/functional/optional.mjs.map +1 -1
- package/dist/functional/pipe.d.mts +59 -113
- package/dist/functional/pipe.d.mts.map +1 -1
- package/dist/functional/pipe.mjs.map +1 -1
- package/dist/functional/result.d.mts +433 -332
- package/dist/functional/result.d.mts.map +1 -1
- package/dist/functional/result.mjs +233 -239
- package/dist/functional/result.mjs.map +1 -1
- package/dist/globals.d.mts +12 -5
- package/dist/guard/has-key.d.mts +23 -74
- package/dist/guard/has-key.d.mts.map +1 -1
- package/dist/guard/has-key.mjs +23 -74
- package/dist/guard/has-key.mjs.map +1 -1
- package/dist/guard/is-non-empty-string.d.mts +20 -87
- package/dist/guard/is-non-empty-string.d.mts.map +1 -1
- package/dist/guard/is-non-empty-string.mjs +20 -87
- package/dist/guard/is-non-empty-string.mjs.map +1 -1
- package/dist/guard/is-non-null-object.d.mts +14 -84
- package/dist/guard/is-non-null-object.d.mts.map +1 -1
- package/dist/guard/is-non-null-object.mjs +14 -84
- package/dist/guard/is-non-null-object.mjs.map +1 -1
- package/dist/guard/is-primitive.d.mts +13 -126
- package/dist/guard/is-primitive.d.mts.map +1 -1
- package/dist/guard/is-primitive.mjs +13 -126
- package/dist/guard/is-primitive.mjs.map +1 -1
- package/dist/guard/is-record.d.mts +21 -132
- package/dist/guard/is-record.d.mts.map +1 -1
- package/dist/guard/is-record.mjs +21 -132
- package/dist/guard/is-record.mjs.map +1 -1
- package/dist/guard/is-type.d.mts +201 -238
- package/dist/guard/is-type.d.mts.map +1 -1
- package/dist/guard/is-type.mjs +201 -238
- package/dist/guard/is-type.mjs.map +1 -1
- package/dist/guard/key-is-in.d.mts +22 -139
- package/dist/guard/key-is-in.d.mts.map +1 -1
- package/dist/guard/key-is-in.mjs +22 -139
- package/dist/guard/key-is-in.mjs.map +1 -1
- package/dist/index.d.mts +0 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +0 -1
- package/dist/index.mjs.map +1 -1
- package/dist/iterator/range.d.mts +29 -62
- package/dist/iterator/range.d.mts.map +1 -1
- package/dist/iterator/range.mjs.map +1 -1
- package/dist/json/json.d.mts +191 -121
- package/dist/json/json.d.mts.map +1 -1
- package/dist/json/json.mjs +238 -136
- package/dist/json/json.mjs.map +1 -1
- package/dist/number/branded-types/finite-number.d.mts +24 -156
- package/dist/number/branded-types/finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/finite-number.mjs +27 -159
- package/dist/number/branded-types/finite-number.mjs.map +1 -1
- package/dist/number/branded-types/int.d.mts +122 -120
- package/dist/number/branded-types/int.d.mts.map +1 -1
- package/dist/number/branded-types/int.mjs +122 -120
- package/dist/number/branded-types/int.mjs.map +1 -1
- package/dist/number/branded-types/int16.d.mts +22 -30
- package/dist/number/branded-types/int16.d.mts.map +1 -1
- package/dist/number/branded-types/int16.mjs +22 -30
- package/dist/number/branded-types/int16.mjs.map +1 -1
- package/dist/number/branded-types/int32.d.mts +22 -31
- package/dist/number/branded-types/int32.d.mts.map +1 -1
- package/dist/number/branded-types/int32.mjs +22 -31
- package/dist/number/branded-types/int32.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-finite-number.d.mts +28 -36
- package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-finite-number.mjs +31 -39
- package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int16.d.mts +24 -34
- package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-int16.mjs +24 -34
- package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int32.d.mts +26 -35
- package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-int32.mjs +26 -35
- package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-finite-number.d.mts +22 -37
- package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-finite-number.mjs +25 -40
- package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int.d.mts +15 -30
- package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int.mjs +15 -30
- package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int16.d.mts +27 -35
- package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int16.mjs +27 -35
- package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int32.d.mts +29 -36
- package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int32.mjs +29 -36
- package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.d.mts +37 -38
- package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.mjs +39 -40
- package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint16.d.mts +24 -35
- package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-uint16.mjs +24 -35
- package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint32.d.mts +24 -35
- package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-uint32.mjs +24 -35
- package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
- package/dist/number/branded-types/positive-finite-number.d.mts +26 -40
- package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/positive-finite-number.mjs +29 -43
- package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/positive-int.d.mts +133 -123
- package/dist/number/branded-types/positive-int.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int.mjs +133 -123
- package/dist/number/branded-types/positive-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-int16.d.mts +24 -35
- package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int16.mjs +24 -35
- package/dist/number/branded-types/positive-int16.mjs.map +1 -1
- package/dist/number/branded-types/positive-int32.d.mts +24 -35
- package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int32.mjs +24 -35
- package/dist/number/branded-types/positive-int32.mjs.map +1 -1
- package/dist/number/branded-types/positive-safe-int.d.mts +159 -33
- package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/positive-safe-int.mjs +160 -34
- package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint16.d.mts +24 -35
- package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
- package/dist/number/branded-types/positive-uint16.mjs +24 -35
- package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint32.d.mts +26 -36
- package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
- package/dist/number/branded-types/positive-uint32.mjs +26 -36
- package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
- package/dist/number/branded-types/safe-int.d.mts +140 -99
- package/dist/number/branded-types/safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/safe-int.mjs +142 -101
- package/dist/number/branded-types/safe-int.mjs.map +1 -1
- package/dist/number/branded-types/safe-uint.d.mts +24 -33
- package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
- package/dist/number/branded-types/safe-uint.mjs +25 -34
- package/dist/number/branded-types/safe-uint.mjs.map +1 -1
- package/dist/number/branded-types/uint.d.mts +121 -30
- package/dist/number/branded-types/uint.d.mts.map +1 -1
- package/dist/number/branded-types/uint.mjs +121 -30
- package/dist/number/branded-types/uint.mjs.map +1 -1
- package/dist/number/branded-types/uint16.d.mts +26 -34
- package/dist/number/branded-types/uint16.d.mts.map +1 -1
- package/dist/number/branded-types/uint16.mjs +26 -34
- package/dist/number/branded-types/uint16.mjs.map +1 -1
- package/dist/number/branded-types/uint32.d.mts +26 -68
- package/dist/number/branded-types/uint32.d.mts.map +1 -1
- package/dist/number/branded-types/uint32.mjs +26 -68
- package/dist/number/branded-types/uint32.mjs.map +1 -1
- package/dist/number/enum/int8.d.mts +37 -101
- package/dist/number/enum/int8.d.mts.map +1 -1
- package/dist/number/enum/int8.mjs +39 -170
- package/dist/number/enum/int8.mjs.map +1 -1
- package/dist/number/enum/uint8.d.mts +45 -55
- package/dist/number/enum/uint8.d.mts.map +1 -1
- package/dist/number/enum/uint8.mjs +46 -155
- package/dist/number/enum/uint8.mjs.map +1 -1
- package/dist/number/num.d.mts +145 -206
- package/dist/number/num.d.mts.map +1 -1
- package/dist/number/num.mjs +143 -199
- package/dist/number/num.mjs.map +1 -1
- package/dist/number/refined-number-utils.d.mts +97 -21
- package/dist/number/refined-number-utils.d.mts.map +1 -1
- package/dist/number/refined-number-utils.mjs +91 -20
- package/dist/number/refined-number-utils.mjs.map +1 -1
- package/dist/object/object.d.mts +126 -208
- package/dist/object/object.d.mts.map +1 -1
- package/dist/object/object.mjs +68 -102
- package/dist/object/object.mjs.map +1 -1
- package/dist/others/cast-mutable.d.mts +12 -88
- package/dist/others/cast-mutable.d.mts.map +1 -1
- package/dist/others/cast-mutable.mjs +13 -89
- package/dist/others/cast-mutable.mjs.map +1 -1
- package/dist/others/cast-readonly.d.mts +12 -168
- package/dist/others/cast-readonly.d.mts.map +1 -1
- package/dist/others/cast-readonly.mjs +13 -169
- package/dist/others/cast-readonly.mjs.map +1 -1
- package/dist/others/if-then.d.mts +6 -83
- package/dist/others/if-then.d.mts.map +1 -1
- package/dist/others/if-then.mjs +6 -83
- package/dist/others/if-then.mjs.map +1 -1
- package/dist/others/map-nullable.d.mts +12 -136
- package/dist/others/map-nullable.d.mts.map +1 -1
- package/dist/others/map-nullable.mjs.map +1 -1
- package/dist/others/memoize-function.d.mts +14 -157
- package/dist/others/memoize-function.d.mts.map +1 -1
- package/dist/others/memoize-function.mjs +14 -157
- package/dist/others/memoize-function.mjs.map +1 -1
- package/dist/others/tuple.d.mts +33 -151
- package/dist/others/tuple.d.mts.map +1 -1
- package/dist/others/tuple.mjs +33 -151
- package/dist/others/tuple.mjs.map +1 -1
- package/dist/others/unknown-to-string.d.mts +11 -125
- package/dist/others/unknown-to-string.d.mts.map +1 -1
- package/dist/others/unknown-to-string.mjs +12 -126
- package/dist/others/unknown-to-string.mjs.map +1 -1
- package/dist/promise/promise.d.mts +33 -20
- package/dist/promise/promise.d.mts.map +1 -1
- package/dist/promise/promise.mjs +34 -21
- package/dist/promise/promise.mjs.map +1 -1
- package/package.json +47 -39
- package/src/array/impl/array-utils-creation.mts +192 -0
- package/src/array/{array-utils-creation.test.mts → impl/array-utils-creation.test.mts} +121 -72
- package/src/array/impl/array-utils-element-access.mts +115 -0
- package/src/array/impl/array-utils-element-access.test.mts +151 -0
- package/src/array/impl/array-utils-iterators.mts +79 -0
- package/src/array/impl/array-utils-iterators.test.mts +98 -0
- package/src/array/impl/array-utils-modification.mts +434 -0
- package/src/array/{array-utils-modification.test.mts → impl/array-utils-modification.test.mts} +41 -28
- package/src/array/{array-utils-overload-type-error.test.mts → impl/array-utils-overload-type-error.test.mts} +33 -33
- package/src/array/impl/array-utils-reducing-value.mts +551 -0
- package/src/array/{array-utils-reducing-value.test.mts → impl/array-utils-reducing-value.test.mts} +45 -50
- package/src/array/impl/array-utils-search.mts +509 -0
- package/src/array/impl/array-utils-search.test.mts +346 -0
- package/src/array/impl/array-utils-set-op.mts +166 -0
- package/src/array/{array-utils-set-op.test.mts → impl/array-utils-set-op.test.mts} +42 -35
- package/src/array/impl/array-utils-size.mts +30 -0
- package/src/array/impl/array-utils-size.test.mts +9 -0
- package/src/array/impl/array-utils-slice-clamped.mts +51 -0
- package/src/array/{array-utils-slice-clamped.test.mts → impl/array-utils-slice-clamped.test.mts} +12 -12
- package/src/array/impl/array-utils-slicing.mts +275 -0
- package/src/array/impl/array-utils-slicing.test.mts +158 -0
- package/src/array/impl/array-utils-transformation.mts +746 -0
- package/src/array/{array-utils-transformation.test.mts → impl/array-utils-transformation.test.mts} +662 -889
- package/src/array/impl/array-utils-validation.mts +241 -0
- package/src/array/{array-utils-validation.test.mts → impl/array-utils-validation.test.mts} +194 -107
- package/src/array/{array.test.mts → impl/array.test.mts} +2 -2
- package/src/array/impl/index.mts +12 -0
- package/src/array/index.mts +1 -1
- package/src/collections/imap-mapped.mts +99 -265
- package/src/collections/imap.mts +477 -174
- package/src/collections/imap.test.mts +12 -19
- package/src/collections/iset-mapped.mts +892 -358
- package/src/collections/iset.mts +429 -213
- package/src/collections/queue.mts +174 -200
- package/src/collections/stack.mts +172 -245
- package/src/collections/stack.test.mts +9 -1
- package/src/entry-point.mts +1 -0
- package/src/expect-type.mts +43 -172
- package/src/functional/match.mts +35 -145
- package/src/functional/optional.mts +285 -163
- package/src/functional/optional.test.mts +4 -1
- package/src/functional/pipe.mts +60 -113
- package/src/functional/result.mts +452 -351
- package/src/functional/result.test.mts +9 -2
- package/src/globals.d.mts +12 -5
- package/src/guard/has-key.mts +23 -74
- package/src/guard/is-non-empty-string.mts +20 -87
- package/src/guard/is-non-null-object.mts +14 -84
- package/src/guard/is-non-null-object.test.mts +1 -1
- package/src/guard/is-primitive.mts +13 -126
- package/src/guard/is-primitive.test.mts +1 -1
- package/src/guard/is-record.mts +21 -132
- package/src/guard/is-type.mts +201 -238
- package/src/guard/is-type.test.mts +7 -7
- package/src/guard/key-is-in.mts +22 -139
- package/src/index.mts +0 -1
- package/src/iterator/range.mts +29 -62
- package/src/json/json.mts +202 -134
- package/src/json/json.test.mts +1 -3
- package/src/number/branded-types/finite-number.mts +27 -159
- package/src/number/branded-types/int.mts +122 -120
- package/src/number/branded-types/int16.mts +22 -30
- package/src/number/branded-types/int16.test.mts +24 -24
- package/src/number/branded-types/int32.mts +22 -31
- package/src/number/branded-types/int32.test.mts +39 -39
- package/src/number/branded-types/non-negative-finite-number.mts +31 -39
- package/src/number/branded-types/non-negative-int16.mts +24 -34
- package/src/number/branded-types/non-negative-int16.test.mts +16 -16
- package/src/number/branded-types/non-negative-int32.mts +26 -35
- package/src/number/branded-types/non-negative-int32.test.mts +30 -30
- package/src/number/branded-types/non-zero-finite-number.mts +25 -40
- package/src/number/branded-types/non-zero-int.mts +15 -30
- package/src/number/branded-types/non-zero-int16.mts +27 -35
- package/src/number/branded-types/non-zero-int16.test.mts +26 -26
- package/src/number/branded-types/non-zero-int32.mts +29 -36
- package/src/number/branded-types/non-zero-int32.test.mts +45 -42
- package/src/number/branded-types/non-zero-safe-int.mts +39 -40
- package/src/number/branded-types/non-zero-uint16.mts +24 -35
- package/src/number/branded-types/non-zero-uint16.test.mts +16 -16
- package/src/number/branded-types/non-zero-uint32.mts +24 -35
- package/src/number/branded-types/non-zero-uint32.test.mts +28 -28
- package/src/number/branded-types/positive-finite-number.mts +29 -43
- package/src/number/branded-types/positive-int.mts +134 -124
- package/src/number/branded-types/positive-int16.mts +24 -35
- package/src/number/branded-types/positive-int16.test.mts +14 -14
- package/src/number/branded-types/positive-int32.mts +24 -35
- package/src/number/branded-types/positive-int32.test.mts +26 -26
- package/src/number/branded-types/positive-safe-int.mts +160 -34
- package/src/number/branded-types/positive-uint16.mts +24 -35
- package/src/number/branded-types/positive-uint16.test.mts +16 -16
- package/src/number/branded-types/positive-uint32.mts +26 -36
- package/src/number/branded-types/positive-uint32.test.mts +31 -28
- package/src/number/branded-types/safe-int.mts +142 -101
- package/src/number/branded-types/safe-uint.mts +25 -34
- package/src/number/branded-types/uint.mts +121 -30
- package/src/number/branded-types/uint16.mts +26 -34
- package/src/number/branded-types/uint16.test.mts +16 -16
- package/src/number/branded-types/uint32.mts +26 -68
- package/src/number/branded-types/uint32.test.mts +28 -28
- package/src/number/enum/int8.mts +39 -170
- package/src/number/enum/uint8.mts +46 -155
- package/src/number/num.mts +157 -212
- package/src/number/num.test.mts +4 -4
- package/src/number/refined-number-utils.mts +109 -26
- package/src/object/object.mts +130 -212
- package/src/object/object.test.mts +29 -0
- package/src/others/cast-mutable.mts +13 -89
- package/src/others/cast-mutable.test.mts +80 -0
- package/src/others/cast-readonly.mts +13 -169
- package/src/others/if-then.mts +6 -83
- package/src/others/map-nullable.mts +12 -136
- package/src/others/map-nullable.test.mts +6 -6
- package/src/others/memoize-function.mts +14 -157
- package/src/others/tuple.mts +33 -151
- package/src/others/unknown-to-string.mts +12 -126
- package/src/others/unknown-to-string.test.mts +13 -1
- package/src/promise/promise.mts +34 -21
- package/src/promise/promise.test.mts +43 -0
- package/dist/array/array-utils.d.mts +0 -2956
- package/dist/array/array-utils.d.mts.map +0 -1
- package/dist/array/array-utils.mjs +0 -1838
- package/dist/array/array-utils.mjs.map +0 -1
- package/src/array/array-utils-search.test.mts +0 -169
- package/src/array/array-utils-slicing.test.mts +0 -274
- package/src/array/array-utils.mts +0 -4834
|
@@ -1,24 +1,29 @@
|
|
|
1
1
|
import { Optional } from '../functional/index.mjs';
|
|
2
2
|
/**
|
|
3
|
-
* Interface for a high-performance queue with FIFO (First-In, First-Out)
|
|
3
|
+
* Interface for a high-performance queue with FIFO (First-In, First-Out)
|
|
4
|
+
* behavior.
|
|
4
5
|
*
|
|
5
|
-
* This interface defines a mutable queue data structure where elements are
|
|
6
|
-
* and removed from the front, maintaining the order in which
|
|
7
|
-
* uses a circular buffer for optimal
|
|
8
|
-
* and dequeue
|
|
6
|
+
* This interface defines a mutable queue data structure where elements are
|
|
7
|
+
* added to the back and removed from the front, maintaining the order in which
|
|
8
|
+
* they were added. The implementation uses a circular buffer for optimal
|
|
9
|
+
* performance, providing O(1) operations for both enqueue and dequeue
|
|
10
|
+
* operations.
|
|
9
11
|
*
|
|
10
12
|
* **FIFO Behavior:**
|
|
13
|
+
*
|
|
11
14
|
* - **enqueue**: Adds elements to the back of the queue
|
|
12
15
|
* - **dequeue**: Removes and returns elements from the front of the queue
|
|
13
16
|
* - Elements are processed in the exact order they were added
|
|
14
17
|
*
|
|
15
18
|
* **Performance Characteristics:**
|
|
16
|
-
*
|
|
17
|
-
* -
|
|
18
|
-
* -
|
|
19
|
+
*
|
|
20
|
+
* - Enqueue: O(1) amortized (O(n) when buffer needs resizing)
|
|
21
|
+
* - Dequeue: O(1) always
|
|
22
|
+
* - Size/isEmpty: O(1) always
|
|
19
23
|
* - Memory efficient with automatic garbage collection of removed elements
|
|
20
24
|
*
|
|
21
25
|
* **Use Cases:**
|
|
26
|
+
*
|
|
22
27
|
* - Task scheduling and job queues
|
|
23
28
|
* - Breadth-first search algorithms
|
|
24
29
|
* - Event processing systems
|
|
@@ -26,64 +31,137 @@ import { Optional } from '../functional/index.mjs';
|
|
|
26
31
|
* - Buffer management for streaming data
|
|
27
32
|
*
|
|
28
33
|
* @template T The type of elements stored in the queue.
|
|
29
|
-
*
|
|
30
|
-
* @example
|
|
31
|
-
* ```typescript
|
|
32
|
-
* import { createQueue, Queue } from './queue';
|
|
33
|
-
*
|
|
34
|
-
* // Example 1: Basic FIFO operations
|
|
35
|
-
* const messageQueue: Queue<string> = createQueue<string>();
|
|
36
|
-
*
|
|
37
|
-
* messageQueue.enqueue("first message"); // Add to back
|
|
38
|
-
* messageQueue.enqueue("second message"); // Add to back
|
|
39
|
-
* messageQueue.enqueue("third message"); // Add to back
|
|
40
|
-
*
|
|
41
|
-
* console.log(messageQueue.size); // Output: 3
|
|
42
|
-
*
|
|
43
|
-
* // Process messages in FIFO order
|
|
44
|
-
* console.log(messageQueue.dequeue().unwrap()); // "first message" (first in, first out)
|
|
45
|
-
* console.log(messageQueue.dequeue().unwrap()); // "second message"
|
|
46
|
-
* console.log(messageQueue.size); // Output: 1
|
|
47
|
-
*
|
|
48
|
-
* // Example 2: Task processing system
|
|
49
|
-
* type Task = { id: number; priority: string; action: () => void };
|
|
50
|
-
* const taskQueue: Queue<Task> = createQueue<Task>();
|
|
51
|
-
*
|
|
52
|
-
* taskQueue.enqueue({ id: 1, priority: "high", action: () => console.log("Task 1") });
|
|
53
|
-
* taskQueue.enqueue({ id: 2, priority: "low", action: () => console.log("Task 2") });
|
|
54
|
-
*
|
|
55
|
-
* // Process tasks in order
|
|
56
|
-
* while (!taskQueue.isEmpty) {
|
|
57
|
-
* const task = taskQueue.dequeue().unwrap();
|
|
58
|
-
* console.log(`Processing task ${task.id} with ${task.priority} priority`);
|
|
59
|
-
* task.action();
|
|
60
|
-
* }
|
|
61
|
-
* ```
|
|
62
34
|
*/
|
|
63
35
|
export type Queue<T> = Readonly<{
|
|
64
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Checks if the queue is empty.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
*
|
|
41
|
+
* ```ts
|
|
42
|
+
* const queue = createQueue<number>();
|
|
43
|
+
*
|
|
44
|
+
* assert.ok(queue.isEmpty);
|
|
45
|
+
* assert(queue.size === 0);
|
|
46
|
+
*
|
|
47
|
+
* queue.enqueue(1);
|
|
48
|
+
* queue.enqueue(2);
|
|
49
|
+
*
|
|
50
|
+
* assert.notOk(queue.isEmpty);
|
|
51
|
+
* assert(queue.size === 2);
|
|
52
|
+
* assert.deepStrictEqual(queue.dequeue(), Optional.some(1));
|
|
53
|
+
* assert.deepStrictEqual(queue.dequeue(), Optional.some(2));
|
|
54
|
+
* assert.deepStrictEqual(queue.dequeue(), Optional.none);
|
|
55
|
+
*
|
|
56
|
+
* const seededQueue = createQueue(['first', 'second']);
|
|
57
|
+
*
|
|
58
|
+
* assert(seededQueue.size === 2);
|
|
59
|
+
* assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('first'));
|
|
60
|
+
* assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('second'));
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
65
63
|
isEmpty: boolean;
|
|
66
|
-
/**
|
|
64
|
+
/**
|
|
65
|
+
* The number of elements in the queue.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
*
|
|
69
|
+
* ```ts
|
|
70
|
+
* const queue = createQueue<number>();
|
|
71
|
+
*
|
|
72
|
+
* assert.ok(queue.isEmpty);
|
|
73
|
+
* assert(queue.size === 0);
|
|
74
|
+
*
|
|
75
|
+
* queue.enqueue(1);
|
|
76
|
+
* queue.enqueue(2);
|
|
77
|
+
*
|
|
78
|
+
* assert.notOk(queue.isEmpty);
|
|
79
|
+
* assert(queue.size === 2);
|
|
80
|
+
* assert.deepStrictEqual(queue.dequeue(), Optional.some(1));
|
|
81
|
+
* assert.deepStrictEqual(queue.dequeue(), Optional.some(2));
|
|
82
|
+
* assert.deepStrictEqual(queue.dequeue(), Optional.none);
|
|
83
|
+
*
|
|
84
|
+
* const seededQueue = createQueue(['first', 'second']);
|
|
85
|
+
*
|
|
86
|
+
* assert(seededQueue.size === 2);
|
|
87
|
+
* assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('first'));
|
|
88
|
+
* assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('second'));
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
67
91
|
size: SizeType.Arr;
|
|
68
92
|
/**
|
|
69
93
|
* Removes and returns the element at the front of the queue.
|
|
70
|
-
*
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
*
|
|
97
|
+
* ```ts
|
|
98
|
+
* const queue = createQueue<number>();
|
|
99
|
+
*
|
|
100
|
+
* assert.ok(queue.isEmpty);
|
|
101
|
+
* assert(queue.size === 0);
|
|
102
|
+
*
|
|
103
|
+
* queue.enqueue(1);
|
|
104
|
+
* queue.enqueue(2);
|
|
105
|
+
*
|
|
106
|
+
* assert.notOk(queue.isEmpty);
|
|
107
|
+
* assert(queue.size === 2);
|
|
108
|
+
* assert.deepStrictEqual(queue.dequeue(), Optional.some(1));
|
|
109
|
+
* assert.deepStrictEqual(queue.dequeue(), Optional.some(2));
|
|
110
|
+
* assert.deepStrictEqual(queue.dequeue(), Optional.none);
|
|
111
|
+
*
|
|
112
|
+
* const seededQueue = createQueue(['first', 'second']);
|
|
113
|
+
*
|
|
114
|
+
* assert(seededQueue.size === 2);
|
|
115
|
+
* assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('first'));
|
|
116
|
+
* assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('second'));
|
|
117
|
+
* ```
|
|
118
|
+
*
|
|
119
|
+
* @returns The element at the front of the queue, or `Optional.none` if the
|
|
120
|
+
* queue is empty.
|
|
71
121
|
*/
|
|
72
122
|
dequeue: () => Optional<T>;
|
|
73
123
|
/**
|
|
74
124
|
* Adds an element to the back of the queue.
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
*
|
|
128
|
+
* ```ts
|
|
129
|
+
* const queue = createQueue<number>();
|
|
130
|
+
*
|
|
131
|
+
* assert.ok(queue.isEmpty);
|
|
132
|
+
* assert(queue.size === 0);
|
|
133
|
+
*
|
|
134
|
+
* queue.enqueue(1);
|
|
135
|
+
* queue.enqueue(2);
|
|
136
|
+
*
|
|
137
|
+
* assert.notOk(queue.isEmpty);
|
|
138
|
+
* assert(queue.size === 2);
|
|
139
|
+
* assert.deepStrictEqual(queue.dequeue(), Optional.some(1));
|
|
140
|
+
* assert.deepStrictEqual(queue.dequeue(), Optional.some(2));
|
|
141
|
+
* assert.deepStrictEqual(queue.dequeue(), Optional.none);
|
|
142
|
+
*
|
|
143
|
+
* const seededQueue = createQueue(['first', 'second']);
|
|
144
|
+
*
|
|
145
|
+
* assert(seededQueue.size === 2);
|
|
146
|
+
* assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('first'));
|
|
147
|
+
* assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('second'));
|
|
148
|
+
* ```
|
|
149
|
+
*
|
|
75
150
|
* @param value The element to add.
|
|
76
151
|
*/
|
|
77
152
|
enqueue: (value: T) => void;
|
|
78
153
|
}>;
|
|
79
154
|
/**
|
|
80
|
-
* Creates a new Queue instance with FIFO (First-In, First-Out) behavior using a
|
|
155
|
+
* Creates a new Queue instance with FIFO (First-In, First-Out) behavior using a
|
|
156
|
+
* high-performance circular buffer.
|
|
81
157
|
*
|
|
82
|
-
* This factory function creates an optimized queue implementation that
|
|
83
|
-
* characteristics for both enqueue and dequeue
|
|
84
|
-
*
|
|
158
|
+
* This factory function creates an optimized queue implementation that
|
|
159
|
+
* maintains excellent performance characteristics for both enqueue and dequeue
|
|
160
|
+
* operations. The underlying circular buffer automatically resizes to
|
|
161
|
+
* accommodate growing workloads while providing predictable O(1) operations.
|
|
85
162
|
*
|
|
86
163
|
* **Implementation Features:**
|
|
164
|
+
*
|
|
87
165
|
* - **O(1) enqueue operations** (amortized - occasionally O(n) when resizing)
|
|
88
166
|
* - **O(1) dequeue operations** (always)
|
|
89
167
|
* - **Automatic buffer resizing** - starts at 8 elements, doubles when full
|
|
@@ -91,100 +169,42 @@ export type Queue<T> = Readonly<{
|
|
|
91
169
|
* - **Circular buffer design** - eliminates need for array shifting operations
|
|
92
170
|
*
|
|
93
171
|
* **Performance Benefits:**
|
|
172
|
+
*
|
|
94
173
|
* - No array copying during normal operations
|
|
95
174
|
* - Minimal memory allocation overhead
|
|
96
175
|
* - Predictable performance under high load
|
|
97
176
|
* - Efficient memory usage with automatic cleanup
|
|
98
177
|
*
|
|
99
|
-
* @template T The type of elements stored in the queue.
|
|
100
|
-
* @param initialValues Optional array of initial elements to populate the queue.
|
|
101
|
-
* Elements will be dequeued in the same order they appear in the array.
|
|
102
|
-
* If provided, the initial buffer capacity will be at least twice the array length.
|
|
103
|
-
* @returns A new Queue instance optimized for high-performance FIFO operations.
|
|
104
|
-
*
|
|
105
178
|
* @example
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
* // Example 2: High-throughput event processing
|
|
128
|
-
* type Event = { timestamp: number; type: string; data: any };
|
|
129
|
-
* const eventQueue = createQueue<Event>();
|
|
130
|
-
*
|
|
131
|
-
* // Simulate high-volume event ingestion
|
|
132
|
-
* for (const i of range(10000)) {
|
|
133
|
-
* eventQueue.enqueue({
|
|
134
|
-
* timestamp: Date.now(),
|
|
135
|
-
* type: `event-${i % 5}`,
|
|
136
|
-
* data: { value: i }
|
|
137
|
-
* }); // Each enqueue is O(1) amortized
|
|
138
|
-
* }
|
|
139
|
-
*
|
|
140
|
-
* // Process events efficiently
|
|
141
|
-
* let processedCount = 0;
|
|
142
|
-
* while (!eventQueue.isEmpty) {
|
|
143
|
-
* const event = eventQueue.dequeue().unwrap(); // O(1)
|
|
144
|
-
* // Process event...
|
|
145
|
-
* processedCount++;
|
|
146
|
-
* }
|
|
147
|
-
* console.log(`Processed ${processedCount} events`); // 10000
|
|
148
|
-
*
|
|
149
|
-
* // Example 3: Queue with pre-populated data
|
|
150
|
-
* const priorityTasks = createQueue<string>([
|
|
151
|
-
* "Initialize system",
|
|
152
|
-
* "Load configuration",
|
|
153
|
-
* "Start services",
|
|
154
|
-
* "Begin processing"
|
|
155
|
-
* ]);
|
|
156
|
-
*
|
|
157
|
-
* console.log(priorityTasks.size); // Output: 4
|
|
158
|
-
*
|
|
159
|
-
* // Execute tasks in initialization order
|
|
160
|
-
* while (!priorityTasks.isEmpty) {
|
|
161
|
-
* const task = priorityTasks.dequeue().unwrap();
|
|
162
|
-
* console.log(`Executing: ${task}`);
|
|
163
|
-
* }
|
|
164
|
-
*
|
|
165
|
-
* // Example 4: Producer-Consumer pattern
|
|
166
|
-
* const workQueue = createQueue<() => Promise<void>>();
|
|
167
|
-
*
|
|
168
|
-
* // Producer: Add work items
|
|
169
|
-
* const addWork = (workFn: () => Promise<void>) => {
|
|
170
|
-
* workQueue.enqueue(workFn);
|
|
171
|
-
* };
|
|
172
|
-
*
|
|
173
|
-
* // Consumer: Process work items
|
|
174
|
-
* const processWork = async () => {
|
|
175
|
-
* while (!workQueue.isEmpty) {
|
|
176
|
-
* const workItem = workQueue.dequeue().unwrap();
|
|
177
|
-
* await workItem();
|
|
178
|
-
* }
|
|
179
|
-
* };
|
|
180
|
-
*
|
|
181
|
-
* // Add some work
|
|
182
|
-
* addWork(async () => console.log("Work item 1"));
|
|
183
|
-
* addWork(async () => console.log("Work item 2"));
|
|
184
|
-
*
|
|
185
|
-
* // Process the work
|
|
186
|
-
* await processWork();
|
|
179
|
+
*
|
|
180
|
+
* ```ts
|
|
181
|
+
* const queue = createQueue<number>();
|
|
182
|
+
*
|
|
183
|
+
* assert.ok(queue.isEmpty);
|
|
184
|
+
* assert(queue.size === 0);
|
|
185
|
+
*
|
|
186
|
+
* queue.enqueue(1);
|
|
187
|
+
* queue.enqueue(2);
|
|
188
|
+
*
|
|
189
|
+
* assert.notOk(queue.isEmpty);
|
|
190
|
+
* assert(queue.size === 2);
|
|
191
|
+
* assert.deepStrictEqual(queue.dequeue(), Optional.some(1));
|
|
192
|
+
* assert.deepStrictEqual(queue.dequeue(), Optional.some(2));
|
|
193
|
+
* assert.deepStrictEqual(queue.dequeue(), Optional.none);
|
|
194
|
+
*
|
|
195
|
+
* const seededQueue = createQueue(['first', 'second']);
|
|
196
|
+
*
|
|
197
|
+
* assert(seededQueue.size === 2);
|
|
198
|
+
* assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('first'));
|
|
199
|
+
* assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('second'));
|
|
187
200
|
* ```
|
|
201
|
+
*
|
|
202
|
+
* @template T The type of elements stored in the queue.
|
|
203
|
+
* @param initialValues Optional array of initial elements to populate the
|
|
204
|
+
* queue. Elements will be dequeued in the same order they appear in the
|
|
205
|
+
* array. If provided, the initial buffer capacity will be at least twice the
|
|
206
|
+
* array length.
|
|
207
|
+
* @returns A new Queue instance optimized for high-performance FIFO operations.
|
|
188
208
|
*/
|
|
189
209
|
export declare const createQueue: <T>(initialValues?: readonly T[]) => Queue<T>;
|
|
190
210
|
//# sourceMappingURL=queue.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.mts","sourceRoot":"","sources":["../../src/collections/queue.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAInD
|
|
1
|
+
{"version":3,"file":"queue.d.mts","sourceRoot":"","sources":["../../src/collections/queue.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAInD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC;IAEnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,OAAO,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;CAC7B,CAAC,CAAC;AAuJH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAAG,gBAAgB,SAAS,CAAC,EAAE,KAAG,KAAK,CAAC,CAAC,CACpC,CAAC"}
|
|
@@ -33,12 +33,14 @@ import '../number/num.mjs';
|
|
|
33
33
|
import '../number/refined-number-utils.mjs';
|
|
34
34
|
|
|
35
35
|
/**
|
|
36
|
-
* Class implementation for a queue with FIFO (First-In, First-Out) behavior
|
|
37
|
-
* This implementation provides O(1) enqueue and
|
|
38
|
-
*
|
|
36
|
+
* Class implementation for a queue with FIFO (First-In, First-Out) behavior
|
|
37
|
+
* using a circular buffer. This implementation provides O(1) enqueue and
|
|
38
|
+
* dequeue operations by using a fixed-size buffer with head and tail pointers
|
|
39
|
+
* that wrap around when they reach the buffer boundary.
|
|
39
40
|
*
|
|
40
|
-
* The circular buffer automatically resizes when it becomes full, ensuring that
|
|
41
|
-
* can grow to accommodate any number of elements while maintaining
|
|
41
|
+
* The circular buffer automatically resizes when it becomes full, ensuring that
|
|
42
|
+
* the queue can grow to accommodate any number of elements while maintaining
|
|
43
|
+
* efficient operations.
|
|
42
44
|
*
|
|
43
45
|
* @template T The type of elements in the queue.
|
|
44
46
|
* @implements Queue
|
|
@@ -58,6 +60,7 @@ class QueueClass {
|
|
|
58
60
|
static #INITIAL_CAPACITY = 8;
|
|
59
61
|
/**
|
|
60
62
|
* Constructs a new QueueClass instance.
|
|
63
|
+
*
|
|
61
64
|
* @param initialValues Optional initial values to populate the queue.
|
|
62
65
|
*/
|
|
63
66
|
constructor(initialValues = []) {
|
|
@@ -83,40 +86,16 @@ class QueueClass {
|
|
|
83
86
|
/**
|
|
84
87
|
* Removes and returns the element at the front of the queue (FIFO).
|
|
85
88
|
*
|
|
86
|
-
* This operation removes the element that was added earliest (first-in) and
|
|
87
|
-
* If the queue is empty, returns `Optional.none`. The operation
|
|
88
|
-
* and does not require any array shifting or
|
|
89
|
-
*
|
|
90
|
-
* **Time Complexity:** O(1) - constant time operation
|
|
91
|
-
* **Space Complexity:** O(1) - no additional memory allocation
|
|
92
|
-
*
|
|
93
|
-
* @returns An Optional containing the removed element, or `Optional.none` if the queue is empty.
|
|
94
|
-
*
|
|
95
|
-
* @example
|
|
96
|
-
* ```typescript
|
|
97
|
-
* const queue = createQueue<string>();
|
|
89
|
+
* This operation removes the element that was added earliest (first-in) and
|
|
90
|
+
* returns it. If the queue is empty, returns `Optional.none`. The operation
|
|
91
|
+
* is guaranteed to be O(1) and does not require any array shifting or
|
|
92
|
+
* copying.
|
|
98
93
|
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
* queue.enqueue("second");
|
|
102
|
-
* queue.enqueue("third");
|
|
94
|
+
* **Time Complexity:** O(1) - constant time operation **Space Complexity:**
|
|
95
|
+
* O(1) - no additional memory allocation
|
|
103
96
|
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
* if (first.isSome) {
|
|
107
|
-
* console.log(first.value); // "first"
|
|
108
|
-
* }
|
|
109
|
-
*
|
|
110
|
-
* const second = queue.dequeue().unwrap(); // "second"
|
|
111
|
-
* console.log(queue.size); // 1
|
|
112
|
-
*
|
|
113
|
-
* // Safe handling of empty queue
|
|
114
|
-
* const emptyQueue = createQueue<number>();
|
|
115
|
-
* const result = emptyQueue.dequeue();
|
|
116
|
-
* if (result.isNone) {
|
|
117
|
-
* console.log("Queue is empty");
|
|
118
|
-
* }
|
|
119
|
-
* ```
|
|
97
|
+
* @returns An Optional containing the removed element, or `Optional.none` if
|
|
98
|
+
* the queue is empty.
|
|
120
99
|
*/
|
|
121
100
|
dequeue() {
|
|
122
101
|
if (this.isEmpty) {
|
|
@@ -132,44 +111,19 @@ class QueueClass {
|
|
|
132
111
|
/**
|
|
133
112
|
* Adds an element to the back of the queue (FIFO).
|
|
134
113
|
*
|
|
135
|
-
* This operation adds the element to the end of the queue, where it will be
|
|
136
|
-
* to be dequeued (first-in, first-out ordering). The operation is
|
|
137
|
-
* meaning it's O(1) for most operations with occasional O(n)
|
|
114
|
+
* This operation adds the element to the end of the queue, where it will be
|
|
115
|
+
* the last to be dequeued (first-in, first-out ordering). The operation is
|
|
116
|
+
* amortized O(1), meaning it's O(1) for most operations with occasional O(n)
|
|
117
|
+
* when the buffer needs resizing.
|
|
138
118
|
*
|
|
139
|
-
* **Time Complexity:** O(1) amortized - O(n) only when buffer resize is
|
|
140
|
-
* **Space Complexity:** O(1) - constant additional memory per element
|
|
119
|
+
* **Time Complexity:** O(1) amortized - O(n) only when buffer resize is
|
|
120
|
+
* needed **Space Complexity:** O(1) - constant additional memory per element
|
|
141
121
|
*
|
|
142
|
-
* **Buffer Resizing:** When the internal buffer becomes full, it
|
|
143
|
-
* in size and reorganizes elements to maintain the
|
|
122
|
+
* **Buffer Resizing:** When the internal buffer becomes full, it
|
|
123
|
+
* automatically doubles in size and reorganizes elements to maintain the
|
|
124
|
+
* circular buffer structure.
|
|
144
125
|
*
|
|
145
126
|
* @param value The element to add to the back of the queue.
|
|
146
|
-
*
|
|
147
|
-
* @example
|
|
148
|
-
* ```typescript
|
|
149
|
-
* const taskQueue = createQueue<string>();
|
|
150
|
-
*
|
|
151
|
-
* // Add tasks in order of arrival
|
|
152
|
-
* taskQueue.enqueue("Process order #1001"); // O(1)
|
|
153
|
-
* taskQueue.enqueue("Send notification"); // O(1)
|
|
154
|
-
* taskQueue.enqueue("Update inventory"); // O(1)
|
|
155
|
-
*
|
|
156
|
-
* console.log(taskQueue.size); // 3
|
|
157
|
-
*
|
|
158
|
-
* // Tasks will be processed in the order they were added
|
|
159
|
-
* while (!taskQueue.isEmpty) {
|
|
160
|
-
* const task = taskQueue.dequeue().unwrap();
|
|
161
|
-
* console.log(`Executing: ${task}`);
|
|
162
|
-
* }
|
|
163
|
-
*
|
|
164
|
-
* // High-volume enqueueing (demonstrates amortized O(1) performance)
|
|
165
|
-
* const dataQueue = createQueue<number>();
|
|
166
|
-
*
|
|
167
|
-
* for (const i of range(1000000)) {
|
|
168
|
-
* dataQueue.enqueue(i); // Each operation is O(1) amortized
|
|
169
|
-
* }
|
|
170
|
-
*
|
|
171
|
-
* console.log(dataQueue.size); // 1000000
|
|
172
|
-
* ```
|
|
173
127
|
*/
|
|
174
128
|
enqueue(value) {
|
|
175
129
|
// Resize if buffer is full
|
|
@@ -200,13 +154,16 @@ class QueueClass {
|
|
|
200
154
|
}
|
|
201
155
|
}
|
|
202
156
|
/**
|
|
203
|
-
* Creates a new Queue instance with FIFO (First-In, First-Out) behavior using a
|
|
157
|
+
* Creates a new Queue instance with FIFO (First-In, First-Out) behavior using a
|
|
158
|
+
* high-performance circular buffer.
|
|
204
159
|
*
|
|
205
|
-
* This factory function creates an optimized queue implementation that
|
|
206
|
-
* characteristics for both enqueue and dequeue
|
|
207
|
-
*
|
|
160
|
+
* This factory function creates an optimized queue implementation that
|
|
161
|
+
* maintains excellent performance characteristics for both enqueue and dequeue
|
|
162
|
+
* operations. The underlying circular buffer automatically resizes to
|
|
163
|
+
* accommodate growing workloads while providing predictable O(1) operations.
|
|
208
164
|
*
|
|
209
165
|
* **Implementation Features:**
|
|
166
|
+
*
|
|
210
167
|
* - **O(1) enqueue operations** (amortized - occasionally O(n) when resizing)
|
|
211
168
|
* - **O(1) dequeue operations** (always)
|
|
212
169
|
* - **Automatic buffer resizing** - starts at 8 elements, doubles when full
|
|
@@ -214,100 +171,42 @@ class QueueClass {
|
|
|
214
171
|
* - **Circular buffer design** - eliminates need for array shifting operations
|
|
215
172
|
*
|
|
216
173
|
* **Performance Benefits:**
|
|
174
|
+
*
|
|
217
175
|
* - No array copying during normal operations
|
|
218
176
|
* - Minimal memory allocation overhead
|
|
219
177
|
* - Predictable performance under high load
|
|
220
178
|
* - Efficient memory usage with automatic cleanup
|
|
221
179
|
*
|
|
222
|
-
* @template T The type of elements stored in the queue.
|
|
223
|
-
* @param initialValues Optional array of initial elements to populate the queue.
|
|
224
|
-
* Elements will be dequeued in the same order they appear in the array.
|
|
225
|
-
* If provided, the initial buffer capacity will be at least twice the array length.
|
|
226
|
-
* @returns A new Queue instance optimized for high-performance FIFO operations.
|
|
227
|
-
*
|
|
228
180
|
* @example
|
|
229
|
-
* ```typescript
|
|
230
|
-
* import { createQueue } from './queue';
|
|
231
|
-
*
|
|
232
|
-
* // Example 1: Basic FIFO workflow
|
|
233
|
-
* const requestQueue = createQueue<string>();
|
|
234
|
-
*
|
|
235
|
-
* // Add requests to the queue
|
|
236
|
-
* requestQueue.enqueue("GET /api/users"); // O(1)
|
|
237
|
-
* requestQueue.enqueue("POST /api/orders"); // O(1)
|
|
238
|
-
* requestQueue.enqueue("DELETE /api/cache"); // O(1)
|
|
239
|
-
*
|
|
240
|
-
* // Process requests in order
|
|
241
|
-
* while (!requestQueue.isEmpty) {
|
|
242
|
-
* const request = requestQueue.dequeue().unwrap(); // O(1)
|
|
243
|
-
* console.log(`Processing: ${request}`);
|
|
244
|
-
* }
|
|
245
|
-
* // Output:
|
|
246
|
-
* // Processing: GET /api/users
|
|
247
|
-
* // Processing: POST /api/orders
|
|
248
|
-
* // Processing: DELETE /api/cache
|
|
249
|
-
*
|
|
250
|
-
* // Example 2: High-throughput event processing
|
|
251
|
-
* type Event = { timestamp: number; type: string; data: any };
|
|
252
|
-
* const eventQueue = createQueue<Event>();
|
|
253
181
|
*
|
|
254
|
-
*
|
|
255
|
-
*
|
|
256
|
-
* eventQueue.enqueue({
|
|
257
|
-
* timestamp: Date.now(),
|
|
258
|
-
* type: `event-${i % 5}`,
|
|
259
|
-
* data: { value: i }
|
|
260
|
-
* }); // Each enqueue is O(1) amortized
|
|
261
|
-
* }
|
|
182
|
+
* ```ts
|
|
183
|
+
* const queue = createQueue<number>();
|
|
262
184
|
*
|
|
263
|
-
*
|
|
264
|
-
*
|
|
265
|
-
* while (!eventQueue.isEmpty) {
|
|
266
|
-
* const event = eventQueue.dequeue().unwrap(); // O(1)
|
|
267
|
-
* // Process event...
|
|
268
|
-
* processedCount++;
|
|
269
|
-
* }
|
|
270
|
-
* console.log(`Processed ${processedCount} events`); // 10000
|
|
185
|
+
* assert.ok(queue.isEmpty);
|
|
186
|
+
* assert(queue.size === 0);
|
|
271
187
|
*
|
|
272
|
-
*
|
|
273
|
-
*
|
|
274
|
-
* "Initialize system",
|
|
275
|
-
* "Load configuration",
|
|
276
|
-
* "Start services",
|
|
277
|
-
* "Begin processing"
|
|
278
|
-
* ]);
|
|
188
|
+
* queue.enqueue(1);
|
|
189
|
+
* queue.enqueue(2);
|
|
279
190
|
*
|
|
280
|
-
*
|
|
191
|
+
* assert.notOk(queue.isEmpty);
|
|
192
|
+
* assert(queue.size === 2);
|
|
193
|
+
* assert.deepStrictEqual(queue.dequeue(), Optional.some(1));
|
|
194
|
+
* assert.deepStrictEqual(queue.dequeue(), Optional.some(2));
|
|
195
|
+
* assert.deepStrictEqual(queue.dequeue(), Optional.none);
|
|
281
196
|
*
|
|
282
|
-
*
|
|
283
|
-
* while (!priorityTasks.isEmpty) {
|
|
284
|
-
* const task = priorityTasks.dequeue().unwrap();
|
|
285
|
-
* console.log(`Executing: ${task}`);
|
|
286
|
-
* }
|
|
197
|
+
* const seededQueue = createQueue(['first', 'second']);
|
|
287
198
|
*
|
|
288
|
-
*
|
|
289
|
-
*
|
|
290
|
-
*
|
|
291
|
-
* // Producer: Add work items
|
|
292
|
-
* const addWork = (workFn: () => Promise<void>) => {
|
|
293
|
-
* workQueue.enqueue(workFn);
|
|
294
|
-
* };
|
|
295
|
-
*
|
|
296
|
-
* // Consumer: Process work items
|
|
297
|
-
* const processWork = async () => {
|
|
298
|
-
* while (!workQueue.isEmpty) {
|
|
299
|
-
* const workItem = workQueue.dequeue().unwrap();
|
|
300
|
-
* await workItem();
|
|
301
|
-
* }
|
|
302
|
-
* };
|
|
303
|
-
*
|
|
304
|
-
* // Add some work
|
|
305
|
-
* addWork(async () => console.log("Work item 1"));
|
|
306
|
-
* addWork(async () => console.log("Work item 2"));
|
|
307
|
-
*
|
|
308
|
-
* // Process the work
|
|
309
|
-
* await processWork();
|
|
199
|
+
* assert(seededQueue.size === 2);
|
|
200
|
+
* assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('first'));
|
|
201
|
+
* assert.deepStrictEqual(seededQueue.dequeue(), Optional.some('second'));
|
|
310
202
|
* ```
|
|
203
|
+
*
|
|
204
|
+
* @template T The type of elements stored in the queue.
|
|
205
|
+
* @param initialValues Optional array of initial elements to populate the
|
|
206
|
+
* queue. Elements will be dequeued in the same order they appear in the
|
|
207
|
+
* array. If provided, the initial buffer capacity will be at least twice the
|
|
208
|
+
* array length.
|
|
209
|
+
* @returns A new Queue instance optimized for high-performance FIFO operations.
|
|
311
210
|
*/
|
|
312
211
|
const createQueue = (initialValues) => new QueueClass(initialValues);
|
|
313
212
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.mjs","sources":["../../src/collections/queue.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"queue.mjs","sources":["../../src/collections/queue.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|