hein 2.0.0-alpha.1 → 2.0.0-alpha.3
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/dist/_virtual/rolldown_runtime.cjs +34 -0
- package/dist/assert/deep-equal.cjs +40 -0
- package/dist/assert/deep-equal.cjs.map +1 -0
- package/dist/assert/deep-equal.d.cts +5 -0
- package/dist/assert/deep-equal.d.cts.map +1 -0
- package/dist/assert/deep-equal.d.ts +5 -0
- package/dist/assert/deep-equal.d.ts.map +1 -0
- package/dist/assert/deep-equal.js +36 -0
- package/dist/assert/deep-equal.js.map +1 -0
- package/dist/assert/deep-has-property.cjs +68 -0
- package/dist/assert/deep-has-property.cjs.map +1 -0
- package/dist/assert/deep-has-property.d.cts +22 -0
- package/dist/assert/deep-has-property.d.cts.map +1 -0
- package/dist/assert/deep-has-property.d.ts +22 -0
- package/dist/assert/deep-has-property.d.ts.map +1 -0
- package/dist/assert/deep-has-property.js +63 -0
- package/dist/assert/deep-has-property.js.map +1 -0
- package/dist/assert/ends-with.cjs +30 -0
- package/dist/assert/ends-with.cjs.map +1 -0
- package/dist/assert/ends-with.d.cts +13 -0
- package/dist/assert/ends-with.d.cts.map +1 -0
- package/dist/assert/ends-with.d.ts +13 -0
- package/dist/assert/ends-with.d.ts.map +1 -0
- package/dist/assert/ends-with.js +27 -0
- package/dist/assert/ends-with.js.map +1 -0
- package/dist/assert/equal.cjs +37 -0
- package/dist/assert/equal.cjs.map +1 -0
- package/dist/assert/equal.d.cts +11 -0
- package/dist/assert/equal.d.cts.map +1 -0
- package/dist/assert/equal.d.ts +11 -0
- package/dist/assert/equal.d.ts.map +1 -0
- package/dist/assert/equal.js +34 -0
- package/dist/assert/equal.js.map +1 -0
- package/dist/assert/greater-than-equal.cjs +32 -0
- package/dist/assert/greater-than-equal.cjs.map +1 -0
- package/dist/assert/greater-than-equal.d.cts +11 -0
- package/dist/assert/greater-than-equal.d.cts.map +1 -0
- package/dist/assert/greater-than-equal.d.ts +11 -0
- package/dist/assert/greater-than-equal.d.ts.map +1 -0
- package/dist/assert/greater-than-equal.js +29 -0
- package/dist/assert/greater-than-equal.js.map +1 -0
- package/dist/assert/greater-than.cjs +33 -0
- package/dist/assert/greater-than.cjs.map +1 -0
- package/dist/assert/greater-than.d.cts +11 -0
- package/dist/assert/greater-than.d.cts.map +1 -0
- package/dist/assert/greater-than.d.ts +11 -0
- package/dist/assert/greater-than.d.ts.map +1 -0
- package/dist/assert/greater-than.js +30 -0
- package/dist/assert/greater-than.js.map +1 -0
- package/dist/assert/has-keys.cjs +58 -0
- package/dist/assert/has-keys.cjs.map +1 -0
- package/dist/assert/has-keys.d.cts +16 -0
- package/dist/assert/has-keys.d.cts.map +1 -0
- package/dist/assert/has-keys.d.ts +16 -0
- package/dist/assert/has-keys.d.ts.map +1 -0
- package/dist/assert/has-keys.js +54 -0
- package/dist/assert/has-keys.js.map +1 -0
- package/dist/assert/has-members.cjs +67 -0
- package/dist/assert/has-members.cjs.map +1 -0
- package/dist/assert/has-members.d.cts +48 -0
- package/dist/assert/has-members.d.cts.map +1 -0
- package/dist/assert/has-members.d.ts +48 -0
- package/dist/assert/has-members.d.ts.map +1 -0
- package/dist/assert/has-members.js +64 -0
- package/dist/assert/has-members.js.map +1 -0
- package/dist/assert/has-property.cjs +61 -0
- package/dist/assert/has-property.cjs.map +1 -0
- package/dist/assert/has-property.d.cts +22 -0
- package/dist/assert/has-property.d.cts.map +1 -0
- package/dist/assert/has-property.d.ts +22 -0
- package/dist/assert/has-property.d.ts.map +1 -0
- package/dist/assert/has-property.js +58 -0
- package/dist/assert/has-property.js.map +1 -0
- package/dist/assert/has-size.cjs +122 -0
- package/dist/assert/has-size.cjs.map +1 -0
- package/dist/assert/has-size.d.cts +42 -0
- package/dist/assert/has-size.d.cts.map +1 -0
- package/dist/assert/has-size.d.ts +42 -0
- package/dist/assert/has-size.d.ts.map +1 -0
- package/dist/assert/has-size.js +118 -0
- package/dist/assert/has-size.js.map +1 -0
- package/dist/assert/in-ballpark.cjs +44 -0
- package/dist/assert/in-ballpark.cjs.map +1 -0
- package/dist/assert/in-ballpark.d.cts +16 -0
- package/dist/assert/in-ballpark.d.cts.map +1 -0
- package/dist/assert/in-ballpark.d.ts +16 -0
- package/dist/assert/in-ballpark.d.ts.map +1 -0
- package/dist/assert/in-ballpark.js +41 -0
- package/dist/assert/in-ballpark.js.map +1 -0
- package/dist/assert/includes.cjs +30 -0
- package/dist/assert/includes.cjs.map +1 -0
- package/dist/assert/includes.d.cts +24 -0
- package/dist/assert/includes.d.cts.map +1 -0
- package/dist/assert/includes.d.ts +24 -0
- package/dist/assert/includes.d.ts.map +1 -0
- package/dist/assert/includes.js +27 -0
- package/dist/assert/includes.js.map +1 -0
- package/dist/assert/instance-of.cjs +36 -0
- package/dist/assert/instance-of.cjs.map +1 -0
- package/dist/assert/instance-of.d.cts +16 -0
- package/dist/assert/instance-of.d.cts.map +1 -0
- package/dist/assert/instance-of.d.ts +16 -0
- package/dist/assert/instance-of.d.ts.map +1 -0
- package/dist/assert/instance-of.js +32 -0
- package/dist/assert/instance-of.js.map +1 -0
- package/dist/assert/is-after.cjs +29 -0
- package/dist/assert/is-after.cjs.map +1 -0
- package/dist/assert/is-after.d.cts +11 -0
- package/dist/assert/is-after.d.cts.map +1 -0
- package/dist/assert/is-after.d.ts +11 -0
- package/dist/assert/is-after.d.ts.map +1 -0
- package/dist/assert/is-after.js +26 -0
- package/dist/assert/is-after.js.map +1 -0
- package/dist/assert/is-before.cjs +29 -0
- package/dist/assert/is-before.cjs.map +1 -0
- package/dist/assert/is-before.d.cts +11 -0
- package/dist/assert/is-before.d.cts.map +1 -0
- package/dist/assert/is-before.d.ts +11 -0
- package/dist/assert/is-before.d.ts.map +1 -0
- package/dist/assert/is-before.js +26 -0
- package/dist/assert/is-before.js.map +1 -0
- package/dist/assert/is-between.cjs +47 -0
- package/dist/assert/is-between.cjs.map +1 -0
- package/dist/assert/is-between.d.cts +15 -0
- package/dist/assert/is-between.d.cts.map +1 -0
- package/dist/assert/is-between.d.ts +15 -0
- package/dist/assert/is-between.d.ts.map +1 -0
- package/dist/assert/is-between.js +44 -0
- package/dist/assert/is-between.js.map +1 -0
- package/dist/assert/is-empty.cjs +98 -0
- package/dist/assert/is-empty.cjs.map +1 -0
- package/dist/assert/is-empty.d.cts +31 -0
- package/dist/assert/is-empty.d.cts.map +1 -0
- package/dist/assert/is-empty.d.ts +31 -0
- package/dist/assert/is-empty.d.ts.map +1 -0
- package/dist/assert/is-empty.js +94 -0
- package/dist/assert/is-empty.js.map +1 -0
- package/dist/assert/is-type.cjs +34 -0
- package/dist/assert/is-type.cjs.map +1 -0
- package/dist/assert/is-type.d.cts +97 -0
- package/dist/assert/is-type.d.cts.map +1 -0
- package/dist/assert/is-type.d.ts +97 -0
- package/dist/assert/is-type.d.ts.map +1 -0
- package/dist/assert/is-type.js +31 -0
- package/dist/assert/is-type.js.map +1 -0
- package/dist/assert/less-than-equal.cjs +36 -0
- package/dist/assert/less-than-equal.cjs.map +1 -0
- package/dist/assert/less-than-equal.d.cts +11 -0
- package/dist/assert/less-than-equal.d.cts.map +1 -0
- package/dist/assert/less-than-equal.d.ts +11 -0
- package/dist/assert/less-than-equal.d.ts.map +1 -0
- package/dist/assert/less-than-equal.js +33 -0
- package/dist/assert/less-than-equal.js.map +1 -0
- package/dist/assert/less-than.cjs +34 -0
- package/dist/assert/less-than.cjs.map +1 -0
- package/dist/assert/less-than.d.cts +11 -0
- package/dist/assert/less-than.d.cts.map +1 -0
- package/dist/assert/less-than.d.ts +11 -0
- package/dist/assert/less-than.d.ts.map +1 -0
- package/dist/assert/less-than.js +31 -0
- package/dist/assert/less-than.js.map +1 -0
- package/dist/assert/match.cjs +31 -0
- package/dist/assert/match.cjs.map +1 -0
- package/dist/assert/match.d.cts +15 -0
- package/dist/assert/match.d.cts.map +1 -0
- package/dist/assert/match.d.ts +15 -0
- package/dist/assert/match.d.ts.map +1 -0
- package/dist/assert/match.js +28 -0
- package/dist/assert/match.js.map +1 -0
- package/dist/assert/rejects.cjs +49 -0
- package/dist/assert/rejects.cjs.map +1 -0
- package/dist/assert/rejects.d.cts +36 -0
- package/dist/assert/rejects.d.cts.map +1 -0
- package/dist/assert/rejects.d.ts +36 -0
- package/dist/assert/rejects.d.ts.map +1 -0
- package/dist/assert/rejects.js +46 -0
- package/dist/assert/rejects.js.map +1 -0
- package/dist/assert/round-to.cjs +54 -0
- package/dist/assert/round-to.cjs.map +1 -0
- package/dist/assert/round-to.d.cts +15 -0
- package/dist/assert/round-to.d.cts.map +1 -0
- package/dist/assert/round-to.d.ts +15 -0
- package/dist/assert/round-to.d.ts.map +1 -0
- package/dist/assert/round-to.js +51 -0
- package/dist/assert/round-to.js.map +1 -0
- package/dist/assert/starts-with.cjs +30 -0
- package/dist/assert/starts-with.cjs.map +1 -0
- package/dist/assert/starts-with.d.cts +14 -0
- package/dist/assert/starts-with.d.cts.map +1 -0
- package/dist/assert/starts-with.d.ts +14 -0
- package/dist/assert/starts-with.d.ts.map +1 -0
- package/dist/assert/starts-with.js +27 -0
- package/dist/assert/starts-with.js.map +1 -0
- package/dist/assert/throws.cjs +41 -0
- package/dist/assert/throws.cjs.map +1 -0
- package/dist/{throws-CYLYG7gu.d.cts → assert/throws.d.cts} +4 -11
- package/dist/assert/throws.d.cts.map +1 -0
- package/dist/{throws-BlzO4xvg.d.ts → assert/throws.d.ts} +3 -12
- package/dist/assert/throws.d.ts.map +1 -0
- package/dist/assert/throws.js +38 -0
- package/dist/assert/throws.js.map +1 -0
- package/dist/assert.cjs +143 -52
- package/dist/assert.cjs.map +1 -0
- package/dist/assert.d.cts +34 -3
- package/dist/assert.d.cts.map +1 -0
- package/dist/assert.d.ts +34 -3
- package/dist/assert.d.ts.map +1 -0
- package/dist/assert.js +87 -2
- package/dist/assert.js.map +1 -0
- package/dist/expect/after.cjs +15 -0
- package/dist/expect/after.cjs.map +1 -0
- package/dist/expect/after.js +16 -0
- package/dist/expect/after.js.map +1 -0
- package/dist/expect/ballpark.cjs +15 -0
- package/dist/expect/ballpark.cjs.map +1 -0
- package/dist/expect/ballpark.js +16 -0
- package/dist/expect/ballpark.js.map +1 -0
- package/dist/expect/before.cjs +15 -0
- package/dist/expect/before.cjs.map +1 -0
- package/dist/expect/before.js +16 -0
- package/dist/expect/before.js.map +1 -0
- package/dist/expect/between.cjs +15 -0
- package/dist/expect/between.cjs.map +1 -0
- package/dist/expect/between.js +16 -0
- package/dist/expect/between.js.map +1 -0
- package/dist/expect/empty.cjs +15 -0
- package/dist/expect/empty.cjs.map +1 -0
- package/dist/expect/empty.js +16 -0
- package/dist/expect/empty.js.map +1 -0
- package/dist/expect/end-with.cjs +15 -0
- package/dist/expect/end-with.cjs.map +1 -0
- package/dist/expect/end-with.js +16 -0
- package/dist/expect/end-with.js.map +1 -0
- package/dist/expect/eql.cjs +21 -0
- package/dist/expect/eql.cjs.map +1 -0
- package/dist/expect/eql.js +22 -0
- package/dist/expect/eql.js.map +1 -0
- package/dist/expect/equal-shorthand.cjs +34 -0
- package/dist/expect/equal-shorthand.cjs.map +1 -0
- package/dist/expect/equal-shorthand.js +33 -0
- package/dist/expect/equal-shorthand.js.map +1 -0
- package/dist/expect/equal.cjs +27 -0
- package/dist/expect/equal.cjs.map +1 -0
- package/dist/expect/equal.js +28 -0
- package/dist/expect/equal.js.map +1 -0
- package/dist/expect/excluding.cjs +19 -0
- package/dist/expect/excluding.cjs.map +1 -0
- package/dist/expect/excluding.js +18 -0
- package/dist/expect/excluding.js.map +1 -0
- package/dist/expect/greater-than-equal.cjs +25 -0
- package/dist/expect/greater-than-equal.cjs.map +1 -0
- package/dist/expect/greater-than-equal.js +26 -0
- package/dist/expect/greater-than-equal.js.map +1 -0
- package/dist/expect/greater-than.cjs +25 -0
- package/dist/expect/greater-than.cjs.map +1 -0
- package/dist/expect/greater-than.js +26 -0
- package/dist/expect/greater-than.js.map +1 -0
- package/dist/expect/has-property.cjs +20 -0
- package/dist/expect/has-property.cjs.map +1 -0
- package/dist/expect/has-property.js +21 -0
- package/dist/expect/has-property.js.map +1 -0
- package/dist/expect/include.cjs +21 -0
- package/dist/expect/include.cjs.map +1 -0
- package/dist/expect/include.js +22 -0
- package/dist/expect/include.js.map +1 -0
- package/dist/expect/instance-of-shorthand.cjs +24 -0
- package/dist/expect/instance-of-shorthand.cjs.map +1 -0
- package/dist/expect/instance-of-shorthand.js +25 -0
- package/dist/expect/instance-of-shorthand.js.map +1 -0
- package/dist/expect/instance-of.cjs +15 -0
- package/dist/expect/instance-of.cjs.map +1 -0
- package/dist/expect/instance-of.js +16 -0
- package/dist/expect/instance-of.js.map +1 -0
- package/dist/expect/keys.cjs +15 -0
- package/dist/expect/keys.cjs.map +1 -0
- package/dist/expect/keys.js +16 -0
- package/dist/expect/keys.js.map +1 -0
- package/dist/expect/length.cjs +21 -0
- package/dist/expect/length.cjs.map +1 -0
- package/dist/expect/length.js +22 -0
- package/dist/expect/length.js.map +1 -0
- package/dist/expect/less-than-equal.cjs +25 -0
- package/dist/expect/less-than-equal.cjs.map +1 -0
- package/dist/expect/less-than-equal.js +26 -0
- package/dist/expect/less-than-equal.js.map +1 -0
- package/dist/expect/less-than.cjs +25 -0
- package/dist/expect/less-than.cjs.map +1 -0
- package/dist/expect/less-than.js +26 -0
- package/dist/expect/less-than.js.map +1 -0
- package/dist/expect/match.cjs +15 -0
- package/dist/expect/match.cjs.map +1 -0
- package/dist/expect/match.js +16 -0
- package/dist/expect/match.js.map +1 -0
- package/dist/expect/members.cjs +41 -0
- package/dist/expect/members.cjs.map +1 -0
- package/dist/expect/members.js +42 -0
- package/dist/expect/members.js.map +1 -0
- package/dist/expect/reject.cjs +14 -0
- package/dist/expect/reject.cjs.map +1 -0
- package/dist/expect/reject.js +15 -0
- package/dist/expect/reject.js.map +1 -0
- package/dist/expect/round-to.cjs +15 -0
- package/dist/expect/round-to.cjs.map +1 -0
- package/dist/expect/round-to.js +16 -0
- package/dist/expect/round-to.js.map +1 -0
- package/dist/expect/start-with.cjs +15 -0
- package/dist/expect/start-with.cjs.map +1 -0
- package/dist/expect/start-with.js +16 -0
- package/dist/expect/start-with.js.map +1 -0
- package/dist/expect/throw.cjs +14 -0
- package/dist/expect/throw.cjs.map +1 -0
- package/dist/expect/throw.js +15 -0
- package/dist/expect/throw.js.map +1 -0
- package/dist/expect/type-shorthand.cjs +29 -0
- package/dist/expect/type-shorthand.cjs.map +1 -0
- package/dist/expect/type-shorthand.js +30 -0
- package/dist/expect/type-shorthand.js.map +1 -0
- package/dist/expect/type.cjs +15 -0
- package/dist/expect/type.cjs.map +1 -0
- package/dist/expect/type.js +16 -0
- package/dist/expect/type.js.map +1 -0
- package/dist/expect.cjs +144 -0
- package/dist/expect.cjs.map +1 -0
- package/dist/expect.d.cts +10 -0
- package/dist/expect.d.cts.map +1 -0
- package/dist/expect.d.ts +10 -0
- package/dist/expect.d.ts.map +1 -0
- package/dist/expect.js +141 -0
- package/dist/expect.js.map +1 -0
- package/dist/expect.types.d.cts +67 -3
- package/dist/expect.types.d.cts.map +1 -0
- package/dist/expect.types.d.ts +67 -3
- package/dist/expect.types.d.ts.map +1 -0
- package/dist/index.cjs +13 -582
- package/dist/index.d.cts +8 -15
- package/dist/index.d.ts +8 -15
- package/dist/index.js +8 -575
- package/dist/mixins.cjs +11 -0
- package/dist/mixins.cjs.map +1 -0
- package/dist/mixins.d.cts +28 -0
- package/dist/mixins.d.cts.map +1 -0
- package/dist/mixins.d.ts +28 -0
- package/dist/mixins.d.ts.map +1 -0
- package/dist/mixins.js +9 -0
- package/dist/mixins.js.map +1 -0
- package/dist/utils/chain.cjs +20 -0
- package/dist/utils/chain.cjs.map +1 -0
- package/dist/utils/chain.js +18 -0
- package/dist/utils/chain.js.map +1 -0
- package/dist/utils/fail.cjs +16 -0
- package/dist/utils/fail.cjs.map +1 -0
- package/dist/utils/fail.d.cts +9 -0
- package/dist/utils/fail.d.cts.map +1 -0
- package/dist/utils/fail.d.ts +9 -0
- package/dist/utils/fail.d.ts.map +1 -0
- package/dist/utils/fail.js +14 -0
- package/dist/utils/fail.js.map +1 -0
- package/dist/utils/get-size.cjs +17 -0
- package/dist/utils/get-size.cjs.map +1 -0
- package/dist/utils/get-size.js +15 -0
- package/dist/utils/get-size.js.map +1 -0
- package/dist/utils/get-type.cjs +12 -0
- package/dist/utils/get-type.cjs.map +1 -0
- package/dist/utils/get-type.d.cts +5 -0
- package/dist/utils/get-type.d.cts.map +1 -0
- package/dist/utils/get-type.d.ts +5 -0
- package/dist/utils/get-type.d.ts.map +1 -0
- package/dist/utils/get-type.js +11 -0
- package/dist/utils/get-type.js.map +1 -0
- package/dist/utils/match.cjs +118 -0
- package/dist/utils/match.cjs.map +1 -0
- package/dist/utils/match.d.cts +7 -0
- package/dist/utils/match.d.cts.map +1 -0
- package/dist/utils/match.d.ts +7 -0
- package/dist/utils/match.d.ts.map +1 -0
- package/dist/utils/match.js +114 -0
- package/dist/utils/match.js.map +1 -0
- package/dist/utils/process-error.cjs +86 -0
- package/dist/utils/process-error.cjs.map +1 -0
- package/dist/utils/process-error.d.cts +8 -0
- package/dist/utils/process-error.d.cts.map +1 -0
- package/dist/utils/process-error.d.ts +10 -0
- package/dist/utils/process-error.d.ts.map +1 -0
- package/dist/utils/process-error.js +85 -0
- package/dist/utils/process-error.js.map +1 -0
- package/dist/utils/validate-numeric-and-dates.cjs +20 -0
- package/dist/utils/validate-numeric-and-dates.cjs.map +1 -0
- package/dist/utils/validate-numeric-and-dates.js +18 -0
- package/dist/utils/validate-numeric-and-dates.js.map +1 -0
- package/dist/utils/xor.cjs +9 -0
- package/dist/utils/xor.cjs.map +1 -0
- package/dist/utils/xor.js +8 -0
- package/dist/utils/xor.js.map +1 -0
- package/package.json +1 -1
- package/dist/assert-ChQPKP5C.d.cts +0 -480
- package/dist/assert-ChQPKP5C.d.cts.map +0 -1
- package/dist/assert-CsN7srt-.d.ts +0 -478
- package/dist/assert-CsN7srt-.d.ts.map +0 -1
- package/dist/assert-DZjgWjOw.cjs +0 -1626
- package/dist/assert-DZjgWjOw.cjs.map +0 -1
- package/dist/assert-kFXp7i_B.js +0 -1260
- package/dist/assert-kFXp7i_B.js.map +0 -1
- package/dist/expect.types-CHYPdbCW.d.cts +0 -454
- package/dist/expect.types-CHYPdbCW.d.cts.map +0 -1
- package/dist/expect.types-nBq4Rg8e.d.ts +0 -454
- package/dist/expect.types-nBq4Rg8e.d.ts.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/throws-BlzO4xvg.d.ts.map +0 -1
- package/dist/throws-CYLYG7gu.d.cts.map +0 -1
- /package/dist/{chunk-CTAAG5j7.js → _virtual/rolldown_runtime.js} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assert-kFXp7i_B.js","names":["evaluationSymbol: unique symbol","match","match","allowedTypes: (ValueType | 'date')[]","match"],"sources":["../src/utils/xor.ts","../src/utils/match.ts","../src/assert/deep-equal.ts","../src/assert/equal.ts","../src/utils/get-type.ts","../src/utils/validate-numeric-and-dates.ts","../src/assert/greater-than.ts","../src/assert/greater-than-equal.ts","../src/assert/has-property.ts","../src/assert/has-size.ts","../src/assert/includes.ts","../src/assert/instance-of.ts","../src/assert/is-empty.ts","../src/assert/is-type.ts","../src/assert/less-than.ts","../src/assert/less-than-equal.ts","../src/assert/match.ts","../src/utils/process-error.ts","../src/assert/rejects.ts","../src/assert/throws.ts","../src/assert/deep-has-property.ts","../src/assert/starts-with.ts","../src/assert/ends-with.ts","../src/assert/is-before.ts","../src/assert/is-after.ts","../src/assert/is-between.ts","../src/assert/in-ballpark.ts","../src/assert/round-to.ts","../src/assert/has-members.ts","../src/assert/has-keys.ts","../src/assert.ts"],"sourcesContent":["export const xor = (a: boolean, b: boolean) => {\n return (a && !b) || (!a && b);\n};\n","import isObjectLike from 'lodash/isObjectLike.js';\nimport { xor } from './xor.js';\n\nconst evaluationSymbol: unique symbol = Symbol();\n\ninterface Evaluation {\n [evaluationSymbol]: true;\n (value: any): boolean;\n}\n\nexport const createEvaluation = (callback: (value: any) => boolean): any => {\n const evaluation = (value: any): boolean => {\n return callback(value);\n };\n evaluation[evaluationSymbol] = true;\n return evaluation as Evaluation;\n};\n\nexport const any = createEvaluation(() => true);\n\nexport const isEvaluation = (value: any): value is Evaluation => value && value[evaluationSymbol];\n\ninterface MatchOptions {\n mutate?: boolean;\n partial?: boolean;\n}\n\nexport const match = <T>(actual: T, expected: T, { mutate = false, partial = false }: MatchOptions = {}): boolean => {\n if (actual === expected) {\n return true;\n }\n if (isEvaluation(expected)) {\n return expected(actual);\n }\n\n if (actual == null || expected == null || (!isObjectLike(actual) && !isObjectLike(expected))) {\n return actual !== actual && expected !== expected;\n }\n let result = true;\n if (actual instanceof Map || expected instanceof Map) {\n if (!(actual instanceof Map && expected instanceof Map)) {\n return false;\n }\n if (actual.size !== expected.size && !partial) {\n result = false;\n }\n for (const [key, value] of expected.entries()) {\n if (!actual.has(key)) {\n result = false;\n continue;\n }\n const actualValue = actual.get(key);\n if (mutate && isEvaluation(value)) {\n expected.set(key, actualValue);\n result &&= value(actualValue);\n continue;\n }\n result = match(actualValue, value, { mutate, partial }) && result;\n continue;\n }\n return result;\n }\n if (actual instanceof WeakMap || expected instanceof WeakMap) {\n return false;\n }\n if (actual instanceof Set || expected instanceof Set) {\n if (!(actual instanceof Set && expected instanceof Set)) {\n return false;\n }\n if (actual.size !== expected.size && !partial) {\n return false;\n }\n return [...expected.values()].every((value) => {\n return actual.has(value);\n });\n }\n if (actual instanceof WeakSet || expected instanceof WeakSet) {\n return false;\n }\n if (actual instanceof Date || expected instanceof Date) {\n if (!(actual instanceof Date && expected instanceof Date)) {\n const date1 = new Date(actual as any);\n const date2 = new Date(expected as any);\n return date1.getTime() === date2.getTime();\n }\n if (actual.getTime() !== expected.getTime()) {\n return false;\n }\n return true;\n }\n if (xor(isObjectLike(actual), isObjectLike(expected))) {\n return false;\n }\n if (Array.isArray(actual) || Array.isArray(expected)) {\n if (!(Array.isArray(actual) && Array.isArray(expected))) {\n return false;\n }\n if (actual.length !== expected.length && !partial) {\n result = false;\n }\n if (partial && actual.length < expected.length) {\n result = false;\n }\n for (const [index, value] of actual.entries()) {\n if (index >= expected.length) {\n continue;\n }\n const expectedValue = expected[index];\n if (mutate && isEvaluation(expectedValue)) {\n const matchesEvaluation = expectedValue(value);\n if (matchesEvaluation) {\n expected[index] = value;\n }\n result &&= matchesEvaluation;\n continue;\n }\n result &&= match(value, expectedValue, { mutate, partial });\n continue;\n }\n return result;\n }\n if (Object.keys(actual).length !== Object.keys(expected).length && !partial) {\n result = false;\n }\n if (globalThis.Buffer && actual instanceof globalThis.Buffer && expected instanceof globalThis.Buffer) {\n return Buffer.compare(actual, expected) === 0;\n }\n for (const key in expected) {\n if (!(key in (actual as object))) {\n result &&= false;\n continue;\n }\n }\n for (const index in actual) {\n const expectedValue = expected[index];\n const actualValue = actual[index];\n if (!(index in (expected as object))) {\n if (partial) {\n continue;\n }\n result &&= false;\n continue;\n }\n if (isEvaluation(expectedValue)) {\n if (!expectedValue(actualValue)) {\n result &&= false;\n continue;\n }\n if (mutate) {\n expected[index] = actualValue;\n }\n continue;\n }\n if (!match(actual[index], expectedValue, { mutate, partial })) {\n result = false;\n }\n }\n return result;\n};\n","import cloneDeep from 'lodash/cloneDeep.js';\nimport { createAssertion } from 'hein-assertion-utils';\nimport { match } from '../utils/match.js';\n\nexport const [deepEqual, notDeepEqual] = createAssertion({\n messages: {\n notEql: 'Expected {{= it.actual }} to deep equal {{= it.expected }}',\n not: 'Expected {{= it.actual }} to not deep equal {{= it.expected }}'\n },\n test:\n (report) =>\n <T>(actual: T, expected: T, partialOrMessage: string | boolean = false, message?: string) => {\n const partial = typeof partialOrMessage === 'boolean' ? partialOrMessage : false;\n message = typeof partialOrMessage === 'string' ? partialOrMessage : message;\n if (typeof expected !== 'function') {\n // TODO: evaluations\n expected = cloneDeep(expected);\n }\n if (match(actual, expected, { mutate: true, partial })) {\n return report({ message, status: 'ok', expected, actual });\n }\n return report({ message, status: 'notok', messageId: 'notEql', expected, actual });\n }\n});\n","import { createAssertion } from 'hein-assertion-utils';\n\ninterface Equal {\n /**\n * check for === equality except here NaN is equal to NaN\n */\n <T>(actual: T, expected: T, message?: string): void;\n}\n\nexport const [equal, notEqual] = createAssertion({\n messages: {\n equal: 'Expected {{= it.actual }} to equal {{= it.expected }}',\n not: 'Expected {{= it.actual }} to not equal {{= it.expected }}'\n },\n test:\n (report): Equal =>\n <T>(a: T, b: T, message?: string) => {\n if (Number.isNaN(a) && Number.isNaN(b)) {\n return report({ status: 'ok', expected: b, actual: a, message });\n }\n if (a !== b) {\n return report({ status: 'notok', messageId: 'equal', actual: a, expected: b, message });\n }\n return report({ status: 'ok', expected: a, actual: b, message });\n }\n});\n","export type ValueType =\n | 'string'\n | 'number'\n | 'bigint'\n | 'boolean'\n | 'symbol'\n | 'undefined'\n | 'object'\n | 'function'\n | 'null'\n | 'NaN'\n | 'array';\n\nexport const getType = (value: any): ValueType => {\n if (value !== value) {\n return 'NaN';\n }\n if (Array.isArray(value)) {\n return 'array';\n }\n if (value === null) {\n return 'null';\n }\n return typeof value;\n};\n","import { AssertionError } from 'hein-assertion-utils';\nimport { type ValueType, getType } from './get-type.js';\n\nconst allowedTypes: (ValueType | 'date')[] = ['number', 'bigint', 'date'];\n\nexport const validateNumericsAndDates = (actual: any, expected: any) => {\n const actualType = actual instanceof Date ? 'date' : getType(actual);\n const expectedType = expected instanceof Date ? 'date' : getType(expected);\n if (!allowedTypes.includes(actualType) || !allowedTypes.includes(expectedType)) {\n throw new AssertionError(\n actualType,\n expectedType,\n `Expected arguments to be ${ allowedTypes.join('/') }, received ${ actualType }/${ expectedType }`\n );\n }\n};\n","import { createAssertion } from 'hein-assertion-utils';\nimport { validateNumericsAndDates } from '../utils/validate-numeric-and-dates.js';\n\ninterface GreaterThan {\n /**\n * check for >\n */\n <T extends number | bigint | Date>(actual: T, expected: T, message?: string): void;\n}\n\nexport const [greaterThan, notGreaterThan] = createAssertion({\n messages: {\n smaller: 'Expected {{= it.actual }} to be greater than {{= it.expected }}',\n not: 'Expected {{= it.actual }} to not be greater than {{= it.expected }}'\n },\n test:\n (report): GreaterThan =>\n (actual: any, expected: any) => {\n validateNumericsAndDates(actual, expected);\n if (actual > expected) {\n return report({ status: 'ok', messageId: 'not', expected, actual });\n }\n return report({ status: 'notok', messageId: 'smaller', actual, expected, noStringify: true });\n }\n});\n","import { createAssertion } from 'hein-assertion-utils';\nimport { validateNumericsAndDates } from '../utils/validate-numeric-and-dates.js';\n\ninterface GreaterThanEqual {\n /**\n * check for >=\n */\n <T extends number | bigint | Date>(actual: T, expected: T, message?: string): void;\n}\n\nexport const [greaterThanEqual, notGreaterThanEqual] = createAssertion({\n messages: {\n notGreaterThanEqual: 'Expected {{= it.actual }} to not be greater than or equal to {{= it.expected }}',\n not: 'Expected {{= it.actual }} to not be greater than or equal to {{= it.expected }}'\n },\n test:\n (report): GreaterThanEqual =>\n (a: any, b: any, message?: string) => {\n validateNumericsAndDates(a, b);\n if (a < b) {\n return report({ status: 'notok', messageId: 'notGreaterThanEqual', actual: a, expected: b, message });\n }\n return report({ status: 'ok', expected: a, actual: b });\n }\n});\n","import { createAssertion, stringify } from 'hein-assertion-utils';\n\ninterface HasProperty {\n /**\n * check if object has a property\n * @param object\n * @param property a property in the object.\n * @example hasProperty({a: 1}, 'a');\n */\n <T, K extends keyof T>(object: T, property: K): void;\n /**\n * check if object has a property with a specific value\n * @param object\n * @param property a property in the object.\n * @param value\n * @example hasProperty({a: 1}, 'a', 1);\n */\n <T, K extends keyof T>(object: T, property: K, value: T[K]): void;\n}\n\nexport const [hasProperty, notHasProperty] = createAssertion({\n messages: {\n noProperty: 'Expected {{= it.actual }} to have property {{= it.expected }}',\n wrongValue: 'Expected {{= it.obj }} to have property {{= it.expected }} with value {{= it.value }}',\n not: 'Expected {{= it.actual }} to not have property {{= it.expected }}',\n notWrongValue: 'Expected {{= it.obj }} to not have property {{= it.expected }} with value {{= it.value }}'\n },\n test:\n (report): HasProperty =>\n <T extends object, K extends keyof T>(...args: [actual: T, expected: K, value?: T[K]]) => {\n const [actual, expected, value] = args;\n const actualStringified = stringify(actual);\n if (expected in actual) {\n if (args.length === 3) {\n if (actual[expected] === value) {\n return report({\n status: 'ok',\n messageId: 'notWrongValue',\n expected,\n actual: actualStringified as any,\n data: { value, expected, obj: actual }\n });\n }\n return report({\n status: 'notok',\n messageId: 'wrongValue',\n expected,\n actual: actualStringified as any,\n data: { value, obj: actualStringified as any },\n noStringify: true\n });\n }\n return report({ status: 'ok', noStringify: true, expected, actual: actualStringified as any });\n }\n return report({\n status: 'notok',\n messageId: 'noProperty',\n expected,\n actual: actualStringified as any,\n noStringify: true\n });\n }\n});\n","import isPlainObject from 'lodash/isPlainObject.js';\nimport { createAssertion } from 'hein-assertion-utils';\n\ninterface HasSize {\n /**\n * check if array has a specific length\n * @param array\n * @param length\n * @example hasSize([1, 2, 3], 3);\n */\n (array: any[], length: number, message?: string): void;\n /**\n * check if object has a specific amount of keys\n * @param object\n * @param length\n * @example hasSize({a: 1, b: 2}, 2);\n */\n (object: Record<string, unknown>, length: number, message?: string): void;\n /**\n * check if Map has a specific amount of keys\n * @param map\n * @param length\n * @example hasSize(new Map([['a', 1], ['b', 2]]), 2);\n */\n (map: Map<unknown, unknown>, length: number, message?: string): void;\n /**\n * check if Set has a specific amount of members\n * @param set\n * @param length\n * @example hasSize(new Set([1, 2, 3]), 3);\n */\n (set: Set<unknown>, length: number, message?: string): void;\n /**\n * check if string has a specific length\n * @param string\n * @param length\n * @example hasSize('abc', 3);\n */\n (string: string, length: number, message?: string): void;\n}\n\nexport const [hasSize, notHasSize] = createAssertion({\n messages: {\n array: 'Expected array to have length of {{= it.expected }}',\n object: 'Expected object to have size of {{= it.expected }}',\n map: 'Expected Map to have size of {{= it.expected }}',\n set: 'Expected Set to have size of {{= it.expected }}',\n string: 'Expected string to have length of {{= it.expected }}',\n not: 'Expected array to not have length of {{= it.expected }}',\n notObject: 'Expected object to not have size of {{= it.expected }}',\n notMap: 'Expected Map to not have size of {{= it.expected }}',\n notSet: 'Expected Set to not have size of {{= it.expected }}',\n notString: 'Expected string to not have length of {{= it.expected }}',\n invalidValue: 'Expected {{= it.actual }} to be an array, object, Map, Set or string'\n },\n test:\n (report): HasSize =>\n <T>(actual: T, expected: number, message?: string) => {\n if (Array.isArray(actual)) {\n if (actual.length === expected) {\n return report({ message, status: 'ok', expected, actual: actual.length });\n }\n return report({ message, status: 'notok', messageId: 'array', expected, actual: actual.length });\n }\n if (isPlainObject(actual)) {\n if (Object.keys(actual).length === expected) {\n return report({\n message,\n status: 'ok',\n messageId: 'notObject',\n expected,\n actual: Object.keys(actual).length\n });\n }\n return report({\n message,\n status: 'notok',\n messageId: 'object',\n expected,\n actual: Object.keys(actual).length\n });\n }\n if (actual instanceof Map) {\n if (actual.size === expected) {\n return report({ message, status: 'ok', messageId: 'notMap', expected, actual: actual.size });\n }\n return report({ message, status: 'notok', messageId: 'map', expected, actual: actual.size });\n }\n if (actual instanceof Set) {\n if (actual.size === expected) {\n return report({ message, status: 'ok', messageId: 'notSet', expected, actual: actual.size });\n }\n return report({ message, status: 'notok', messageId: 'set', expected, actual: actual.size });\n }\n if (typeof actual === 'string') {\n if (actual.length === expected) {\n return report({ message, status: 'ok', messageId: 'notString', expected, actual: actual.length });\n }\n return report({ message, status: 'notok', messageId: 'string', expected, actual: actual.length });\n }\n report({ message, status: 'notok', messageId: 'invalidValue', actual: typeof actual, noStringify: true });\n report({ message, status: 'ok', messageId: 'invalidValue', actual: typeof actual, noStringify: true });\n }\n});\n","import { createAssertion } from 'hein-assertion-utils';\n\ninterface Includes {\n /**\n * check if array includes a specific element\n * @param array\n * @param element\n * @example includes([1, 2, 3], 2);\n * @example includes([1, 2, 3], 2, 3);\n */\n <T>(array: T[], ...elements: T[]): void;\n /**\n * check if string includes a specific string\n * @param string\n * @param element\n * @example includes('abc', 'b');\n * @example includes('abc', 'b', 'c');\n * @example includes('abc', 'bc');\n */\n (string: string, ...elements: string[]): void;\n}\n\nexport const [includes, notIncludes] = createAssertion({\n messages: {\n arrayMisses: 'Expected {{= it.actual }} to include {{= it.expected }}',\n not: 'Expected {{= it.actual }} to not include {{= it.expected }}'\n },\n test:\n (report): Includes =>\n (actual: string | any[], ...elements) => {\n for (const element of elements) {\n if (actual.includes(element)) {\n report({\n messageId: 'not',\n status: 'ok',\n actual,\n expected: element\n });\n } else {\n report({\n messageId: 'arrayMisses',\n status: 'notok',\n actual,\n expected: element\n });\n }\n }\n }\n});\n","import isObjectLike from 'lodash/isObjectLike.js';\nimport { AssertionError, createAssertion } from 'hein-assertion-utils';\nimport { getType } from '../utils/get-type.js';\nimport { type Constructor } from '../utils/process-error.js';\n\ninterface InstanceOf {\n /**\n * check if value is an instance of a constructor\n * @param value\n * @param constructor\n * @example instanceOf(new Error(), Error);\n */\n <T extends Constructor>(value: InstanceType<T>, constructor: T): void;\n}\n\nexport const [instanceOf, notInstanceOf] = createAssertion({\n messages: {\n notInstanceOf: 'Expected {{= it.actual }} to be an instance of {{= it.expected }}',\n not: 'Expected {{= it.actual }} to not be an instance of {{= it.expected }}'\n },\n test:\n (report): InstanceOf =>\n (actual: any, expected: Constructor) => {\n if (!isObjectLike(actual)) {\n throw new AssertionError(getType(actual), 'object', 'Expected value to be an object');\n }\n if (!(actual instanceof expected)) {\n return report({\n status: 'notok',\n messageId: 'notInstanceOf',\n expected: expected.name,\n actual: actual.constructor.name,\n noStringify: true\n });\n }\n return report({\n status: 'ok',\n expected: expected.name,\n actual: actual.constructor.name,\n messageId: 'not',\n noStringify: true\n });\n }\n});\n","import isPlainObject from 'lodash/isPlainObject.js';\nimport { createAssertion } from 'hein-assertion-utils';\n\ninterface IsEmpty {\n /**\n * check if array is empty\n * @param array\n * @example isEmpty([]);\n */\n <T>(array: T[], message?: string): void;\n /**\n * check if object is empty\n * @param object\n * @example isEmpty({});\n */\n (object: Record<string, unknown>, message?: string): void;\n /**\n * check if Map is empty\n * @param map\n * @example isEmpty(new Map());\n */\n <K, V>(map: Map<K, V>, message?: string): void;\n /**\n * check if Set is empty\n * @param set\n * @example isEmpty(new Set());\n */\n <T>(set: Set<T>, message?: string): void;\n}\n\nexport const [isEmpty, notIsEmpty] = createAssertion({\n messages: {\n array: 'Expected array to be empty',\n object: 'Expected object to be empty',\n map: 'Expected Map to be empty',\n set: 'Expected Set to be empty',\n not: 'Expected array to not be empty',\n notObject: 'Expected object to not be empty',\n notMap: 'Expected Map to not be empty',\n notSet: 'Expected Set to not be empty',\n invalidArgument: 'Expected {{= it.actual }} to be an array, object, Map, or Set'\n },\n test:\n (report): IsEmpty =>\n <T>(actual: T, message?: string) => {\n if (Array.isArray(actual)) {\n if (actual.length === 0) {\n return report({ message, status: 'ok', actual, expected: [] as any });\n }\n return report({ message, status: 'notok', messageId: 'array', actual, expected: [] as any });\n }\n if (isPlainObject(actual)) {\n if (Object.keys(actual).length === 0) {\n return report({ message, status: 'ok', messageId: 'notObject', actual });\n }\n return report({ message, status: 'notok', messageId: 'object', actual, expected: {} });\n }\n if (actual instanceof Map) {\n if (actual.size === 0) {\n return report({ message, status: 'ok', messageId: 'notMap', actual });\n }\n return report({ message, status: 'notok', messageId: 'map', actual, expected: new Map() });\n }\n if (actual instanceof Set) {\n if (actual.size === 0) {\n return report({ message, status: 'ok', messageId: 'notSet', actual });\n }\n return report({ message, status: 'notok', messageId: 'set', actual });\n }\n report({ message, status: 'notok', messageId: 'invalidArgument', actual });\n report({ message, status: 'ok', messageId: 'invalidArgument', actual });\n }\n});\n","import { createAssertion } from 'hein-assertion-utils';\nimport { type ValueType, getType } from '../utils/get-type.js';\n\ninterface IsType {\n /**\n * check if value is of a specific type, nulls, NaN and arrays are specially handled\n * @param value\n * @param expectedType\n * @example isType('foo', 'string');\n * @example isType(1, 'number');\n * @example isType(1n, 'bigint');\n * @example isType(true, 'boolean');\n * @example isType(Symbol('foo'), 'symbol');\n * @example isType(undefined, 'undefined');\n * @example isType({}, 'object');\n * @example isType(() => {}, 'function');\n * @example isType(null, 'null');\n * @example isType(NaN, 'NaN');\n * @example isType([], 'array');\n */\n (value: unknown, expectedType: ValueType): void;\n /**\n * check if value is of a specific type, nulls, NaN and arrays are specially handled\n * @param value\n * @param expectedType\n * @example isType('foo', 'string');\n */\n (value: string, expectedType: 'string'): void;\n /**\n * check if value is of a specific type, nulls, NaN and arrays are specially handled\n * @param value\n * @param expectedType\n * @example isType(1, 'number');\n * @example isType(NaN, 'NaN');\n */\n (value: number, expectedType: 'number' | 'NaN'): void;\n /**\n * check if value is of a specific type, nulls, NaN and arrays are specially handled\n * @param value\n * @param expectedType\n * @example isType(1n, 'bigint');\n */\n (value: bigint, expectedType: 'bigint'): void;\n /**\n * check if value is of a specific type, nulls, NaN and arrays are specially handled\n * @param value\n * @param expectedType\n * @example isType(true, 'boolean');\n */\n (value: boolean, expectedType: 'boolean'): void;\n /**\n * check if value is of a specific type, nulls, NaN and arrays are specially handled\n * @param value\n * @param expectedType\n * @example isType(Symbol('foo'), 'symbol');\n */\n (value: symbol, expectedType: 'symbol'): void;\n /**\n * check if value is of a specific type, nulls, NaN and arrays are specially handled\n * @param value\n * @param expectedType\n * @example isType(Symbol('foo'), 'symbol');\n */\n (value: undefined, expectedType: 'undefined'): void;\n /**\n * check if value is of a specific type, nulls, NaN and arrays are specially handled\n * @param value\n * @param expectedType\n * @example isType({}, 'object');\n */\n (value: object, expectedType: 'object'): void;\n /**\n * check if value is of a specific type, nulls, NaN and arrays are specially handled\n * @param value\n * @param expectedType\n * @example isType(() => {}, 'function');\n */\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n (value: Function, expectedType: 'function'): void;\n /**\n * check if value is of a specific type, nulls, NaN and arrays are specially handled\n * @param value\n * @param expectedType\n * @example isType(null, 'null');\n */\n (value: null, expectedType: 'null'): void;\n /**\n * check if value is of a specific type, nulls, NaN and arrays are specially handled\n * @param value\n * @param expectedType\n * @example isType([], 'array');\n */\n (value: any[], expectedType: 'array'): void;\n}\n\nexport const [isType, notIsType] = createAssertion({\n messages: {\n wrongType: 'Expected {{= it.actual }} to be a(n) {{= it.expected }}',\n not: `Expected {{= it.actual }} to not be a(n) {{= it.expected }}`\n },\n test:\n (report): IsType =>\n (value: any, expectedType: ValueType) => {\n const actualType = getType(value);\n if (actualType !== expectedType) {\n return report({\n status: 'notok',\n messageId: 'wrongType',\n actual: actualType,\n expected: expectedType,\n noStringify: true\n });\n }\n return report({\n status: 'ok',\n messageId: 'not',\n actual: actualType,\n expected: expectedType,\n noStringify: true\n });\n }\n});\n","import { createAssertion } from 'hein-assertion-utils';\nimport { validateNumericsAndDates } from '../utils/validate-numeric-and-dates.js';\n\ninterface LesserThan {\n /**\n * check for <\n */\n <T extends number | bigint | Date>(actual: T, expected: T, message?: string): void;\n}\n\nexport const [lessThan, notLessThan] = createAssertion({\n messages: {\n lesserThan: 'Expected {{= it.actual }} to be less than {{= it.expected }}',\n not: 'Expected {{= it.actual }} to not be less than {{= it.expected }}'\n },\n test:\n (report): LesserThan =>\n (actual: any, expected: any, message?: string) => {\n validateNumericsAndDates(actual, expected);\n if (actual >= expected) {\n return report({ status: 'notok', messageId: 'lesserThan', actual, expected, message });\n }\n return report({ status: 'ok', actual, expected, message, messageId: 'not' });\n }\n});\n","import { createAssertion } from 'hein-assertion-utils';\nimport { validateNumericsAndDates } from '../utils/validate-numeric-and-dates.js';\n\ninterface LessThanEqual {\n /**\n * check for <=\n */\n <T extends number | bigint | Date>(actual: T, expected: T, message?: string): void;\n}\n\nexport const [lessThanEqual, notLessThanEqual] = createAssertion({\n messages: {\n lesserThanEqual: 'Expected {{= it.actual }} to be less than or equal to {{= it.expected }}',\n not: 'Expected {{= it.actual }} to not be less than or equal to {{= it.expected }}'\n },\n test:\n (report): LessThanEqual =>\n (actual: any, expected: any, message?: string) => {\n validateNumericsAndDates(actual, expected);\n if (actual > expected) {\n return report({\n status: 'notok',\n messageId: 'lesserThanEqual',\n actual,\n expected,\n message,\n noStringify: true\n });\n }\n return report({ status: 'ok', actual, expected, message, messageId: 'not', noStringify: true });\n }\n});\n","import { createAssertion } from 'hein-assertion-utils';\n\ninterface IsMatch {\n /**\n * check if string matches regex\n * @param actual\n * @param regex\n * @example match('foo', /foo/);\n * @example notMatch('foo', /bar/);\n */\n (actual: string, regex: RegExp): void;\n}\n\nexport const [match, notMatch] = createAssertion({\n messages: {\n noMatch: 'Expected {{= it.actual }} to match {{= it.expected }}',\n not: 'Expected {{= it.actual }} to not match {{= it.expected }}'\n },\n test:\n (report): IsMatch =>\n (actual: string, regex: RegExp) => {\n if (!regex.test(actual)) {\n return report({\n messageId: 'noMatch',\n status: 'notok',\n actual,\n noStringify: true,\n expected: regex.toString()\n });\n }\n report({\n status: 'ok',\n actual,\n expected: regex.toString(),\n noStringify: true\n });\n }\n});\n","import { type Report } from 'hein-assertion-utils';\n\nexport interface Constructor<T = any> {\n new (...args: any[]): T;\n}\n\nexport type ErrorPredicate = (error: Error) => boolean;\n\nexport const isConstructor = (value: any): value is Constructor => {\n return typeof value === 'function' && value.prototype && value.prototype.isPrototypeOf;\n};\n\nexport const isErrorConstructor = (value: any): value is Constructor<Error> => {\n return isConstructor(value) && value.prototype instanceof Error;\n};\n\ntype ThrowsMessages =\n | 'invalidArgument'\n | 'nonError'\n | 'throws'\n | 'invalidConstructor'\n | 'predicate'\n | 'regex'\n | 'not'\n | 'notConstructor'\n | 'notPredicate'\n | 'notRegex';\n\nexport const processError = (report: Report<ThrowsMessages>, error: Error, narrowerOrMessage, message) => {\n message = (typeof narrowerOrMessage === 'string' ? narrowerOrMessage : message) ?? null;\n\n if (!(error instanceof Error)) {\n return report({\n noStringify: true,\n status: 'notok',\n messageId: 'nonError',\n actual: typeof error,\n expected: 'Error'\n });\n }\n if (narrowerOrMessage) {\n if (isConstructor(narrowerOrMessage)) {\n if (!(error instanceof narrowerOrMessage)) {\n return report({\n noStringify: true,\n status: 'notok',\n messageId: 'invalidConstructor',\n actual: error.name,\n expected: narrowerOrMessage.name,\n message\n });\n }\n return report({\n noStringify: true,\n status: 'ok',\n messageId: 'notConstructor',\n actual: error.name,\n expected: narrowerOrMessage.name,\n message\n });\n } else if (typeof narrowerOrMessage === 'function') {\n if (!(narrowerOrMessage as ErrorPredicate)(error)) {\n return report({\n noStringify: true,\n status: 'notok',\n messageId: 'predicate',\n actual: error,\n expected: null,\n message\n });\n }\n return report({\n noStringify: true,\n status: 'ok',\n messageId: 'notPredicate',\n actual: error,\n expected: null,\n message\n });\n } else if (typeof narrowerOrMessage === 'string') {\n return report({\n noStringify: true,\n status: 'ok',\n messageId: 'throws',\n actual: error,\n message: narrowerOrMessage\n });\n } else if (narrowerOrMessage instanceof RegExp) {\n if (!narrowerOrMessage.test(error.message)) {\n return report({\n noStringify: true,\n status: 'notok',\n messageId: 'regex',\n actual: error.message,\n expected: narrowerOrMessage.toString(),\n message\n });\n }\n return report({\n noStringify: true,\n status: 'ok',\n messageId: 'notRegex',\n actual: error.message,\n expected: narrowerOrMessage.toString(),\n message\n });\n }\n }\n return report({ noStringify: true, status: 'ok', actual: error, message });\n};\n","import { createAssertion } from 'hein-assertion-utils';\nimport { type Constructor, type ErrorPredicate, processError } from '../utils/process-error.js';\n\ninterface Rejects {\n /**\n * check if promise rejects\n * @param promise\n * @example rejects(Promise.reject());\n */\n (promise: Promise<any>, message?: string): Promise<void>;\n /**\n * check if promise rejects with an instance of constructor\n * @param promise\n * @param constructor - expected error constructor\n * @example rejects(Promise.reject(new Error()), Error);\n */\n (promise: Promise<any>, constructor: Constructor, message?: string): Promise<void>;\n /**\n * check if promise rejects with a specific error message\n * @param promise\n * @param regex - expected error message regex\n * @example rejects(Promise.reject(new Error('This is worrying)), /worrying/);\n */\n (promise: Promise<any>, constructor: RegExp, message?: string): Promise<void>;\n /**\n * check if promise rejects with and matches the predicate function\n * @param promise\n * @param predicate - predicate function that receives the error and returns boolean\n * @example rejects(Promise.reject(new Error('This is worrying')), (error) => error.message === 'This is worrying');));\n */\n (promise: Promise<any>, constructor: ErrorPredicate, message?: string): Promise<void>;\n}\n\nexport const [rejects, notRejects] = createAssertion({\n messages: {\n invalidArgument: 'Expected {{= it.actual }} to be a Promise',\n nonError: 'Expected Promise to reject with an instance of Error',\n throws: 'Expected Promise to reject',\n invalidConstructor: 'Expected Promise to reject with {{= it.expected }}',\n predicate: 'Expected {{= it.actual }} to match predicate function',\n regex: 'Expected Promise to reject with an error matching {{= it.expected }}',\n not: 'Expected Promise to not reject',\n notConstructor: 'Expected Promise to not reject with a {{= it.expected }}',\n notPredicate: 'Expected {{= it.actual }} to not match predicate function',\n notRegex: 'Expected Promise to not reject with an error matching {{= it.expected }}'\n },\n test:\n (report): Rejects =>\n async (promise: Promise<any>, narrowerOrMessage?, message?) => {\n // TODO: invalid argument in not case\n if (!promise || typeof promise.then !== 'function') {\n report({\n noStringify: true,\n status: 'notok',\n messageId: 'invalidArgument',\n actual: typeof promise,\n expected: 'Promise'\n });\n return;\n }\n try {\n await promise;\n } catch (error) {\n processError(report, error, narrowerOrMessage, message);\n return;\n }\n report({\n noStringify: true,\n status: 'notok',\n messageId: 'throws',\n message: typeof narrowerOrMessage === 'string' ? narrowerOrMessage : message\n });\n return;\n }\n});\n","import { AssertionError, createAssertion } from 'hein-assertion-utils';\nimport { getType } from '../utils/get-type.js';\nimport { type Constructor, type ErrorPredicate, processError } from '../utils/process-error.js';\n\nexport type ThrowsCallback = () => unknown;\n\ninterface Throw {\n /**\n * check if function throws an error\n * @param callback\n * @example throws(() => { throw new Error('foo'); });\n * @example throws(() => { throw new TypeError('foo'); }, TypeError);\n */\n (callback: ThrowsCallback, message?: string): void;\n /**\n * check if function throws an error matching the constructor\n * @param callback\n * @example throws(() => { throw new TypeError('foo'); }, TypeError);\n */\n (callback: ThrowsCallback, expectedError: Constructor, message?: string): void;\n /**\n * check if function throws an error matching the regex\n * @param callback\n * @example throws(() => { throw new Error('foo'); });\n * @example throws(() => { throw new TypeError('foo'); }, /foo/);\n */\n (callback: ThrowsCallback, expectedError: RegExp, message?: string): void;\n /**\n * check if function throws an error matching the predicate function\n * @param callback\n * @example throws(() => { throw new TypeError('foo'); }, (error) => error.message === 'foo');\n */\n (callback: ThrowsCallback, expectedError: ErrorPredicate, message?: string): void;\n}\n\nconst messages = {\n nonError: 'Expected function to throw an instance of Error',\n throws: 'Expected function to throw',\n invalidConstructor: 'Expected function to throw {{= it.expected }}',\n predicate: 'Expected {{= it.actual }} to match predicate function',\n regex: 'Expected function to throw an error matching {{= it.expected }}',\n not: 'Expected function to not throw',\n notConstructor: 'Expected function to not throw a {{= it.expected }}',\n notPredicate: 'Expected function to not throw an error matching the predicate',\n notRegex: 'Expected function to not throw an error matching {{= it.expected }}'\n};\n\nexport const [throws, notThrows] = createAssertion({\n messages: messages,\n test: (report) =>\n ((callback, narrowerOrMessage, message) => {\n const argumentType = getType(callback);\n if (argumentType !== 'function') {\n throw new AssertionError(argumentType, 'function', `Expected ${ argumentType } to be a function`);\n }\n try {\n callback();\n } catch (error) {\n return processError(report, error, narrowerOrMessage, message);\n }\n return report({\n noStringify: true,\n status: 'notok',\n messageId: 'throws',\n message: typeof narrowerOrMessage === 'string' ? narrowerOrMessage : message\n });\n }) as Throw\n});\n","import { createAssertion, stringify } from 'hein-assertion-utils';\nimport get from 'lodash/get.js';\nimport has from 'lodash/has.js';\n\ninterface DeepHasProperty {\n /**\n * check if object has a property\n * @param object\n * @param property a property in the object. Can be a path like 'a.b.c'\n * @example deepHasProperty([{a: {b: {c: 1}}}], '[0].a.b.c');\n */\n (object: any, property: string): void;\n /**\n * check if object has a property with a specific value\n * @param object\n * @param property a property in the object. Can be a path like 'a.b.c'\n * @param value\n * @example deepHasProperty([{a: {b: {c: 1}}}], '[0].a.b.c', 1);\n */\n (object: any, property: string, value: any): void;\n}\n\nexport const [deepHasProperty, deepNotHasProperty] = createAssertion({\n messages: {\n noProperty: 'Expected {{= it.actual }} to have property {{= it.expected }}',\n wrongValue: 'Expected {{= it.obj }} to have property {{= it.expected }} with value {{= it.value }}',\n not: 'Expected {{= it.actual }} to not have property {{= it.expected }}',\n notWrongValue: 'Expected {{= it.obj }} to not have property {{= it.expected }} with value {{= it.value }}'\n },\n test:\n (report): DeepHasProperty =>\n (...args: [actual: any, expected: string, value?: any]) => {\n const [actual, expected, value] = args;\n const actualStringified = stringify(actual);\n if (has(actual, expected)) {\n if (args.length === 3) {\n const actualValue = get(actual, expected);\n if (actualValue === value) {\n return report({\n status: 'ok',\n messageId: 'notWrongValue',\n expected: value,\n actual: actualValue,\n data: { value, expected, obj: actualStringified },\n noStringify: true\n });\n }\n return report({\n status: 'notok',\n messageId: 'wrongValue',\n expected: value,\n actual: actualValue,\n data: { value, expected, obj: actualStringified },\n noStringify: true\n });\n }\n return report({ status: 'ok', noStringify: true, expected, actual: actualStringified });\n }\n return report({\n status: 'notok',\n messageId: 'noProperty',\n expected,\n actual: actualStringified,\n noStringify: true\n });\n }\n});\n","import { createAssertion } from 'hein-assertion-utils';\n\ninterface StartsWith {\n /**\n * check if string starts with start\n * @param string\n * @param start\n * @example startsWith('foo', 'f');\n */\n (string: string, start: string): void;\n}\n\nexport const [startsWith, notStartsWith] = createAssertion({\n messages: {\n wrongStart: 'Expected {{= it.actual }} to start with {{= it.expected }}',\n not: 'Expected {{= it.actual }} to not start with {{= it.expected }}'\n },\n test:\n (report): StartsWith =>\n (actual: string, start: string) => {\n if (actual.startsWith(start)) {\n report({\n messageId: 'not',\n status: 'ok',\n actual,\n expected: start\n });\n } else {\n report({\n messageId: 'wrongStart',\n status: 'notok',\n actual,\n expected: start\n });\n }\n }\n});\n","import { createAssertion } from 'hein-assertion-utils';\n\n// TODO: add message\n\ninterface EndsWith {\n /**\n * check if string ends with a specific string\n * @param string\n * @param end\n */\n (string: string, end: string): void;\n}\n\nexport const [endsWith, notEndsWith] = createAssertion({\n messages: {\n wrongEnd: 'Expected {{= it.actual }} to end with {{= it.expected }}',\n not: 'Expected {{= it.actual }} to not end with {{= it.expected }}'\n },\n test:\n (report): EndsWith =>\n (actual: string, end: string) => {\n if (actual.endsWith(end)) {\n report({\n messageId: 'not',\n status: 'ok',\n actual,\n expected: end\n });\n } else {\n report({\n messageId: 'wrongEnd',\n status: 'notok',\n actual,\n expected: end\n });\n }\n }\n});\n","import { createAssertion } from 'hein-assertion-utils';\n\ninterface IsBefore {\n /**\n * check that date is before another date\n */\n <T extends Date>(actual: T, expected: T, message?: string): void;\n}\n\nexport const [isBefore, notBefore] = createAssertion({\n messages: {\n after: 'Expected {{= it.actual }} to be before {{= it.expected }}',\n not: 'Expected {{= it.actual }} to not be before {{= it.expected }}'\n },\n test:\n (report): IsBefore =>\n (actual: Date, expected: Date) => {\n if (actual >= expected) {\n return report({\n messageId: 'after',\n status: 'notok',\n actual,\n expected\n });\n }\n return report({\n status: 'ok',\n actual,\n expected\n });\n }\n});\n","import { createAssertion } from 'hein-assertion-utils';\n\ninterface IsAfter {\n /**\n * check that date is after another date\n */\n <T extends Date>(actual: T, expected: T): void;\n}\n\nexport const [isAfter, notAfter] = createAssertion({\n messages: {\n before: 'Expected {{= it.actual }} to be after {{= it.expected }}',\n not: 'Expected {{= it.actual }} to not be after {{= it.expected }}'\n },\n test:\n (report): IsAfter =>\n (actual: Date, expected: Date) => {\n if (actual <= expected) {\n return report({\n messageId: 'before',\n status: 'notok',\n actual,\n expected\n });\n }\n return report({\n status: 'ok',\n actual,\n expected\n });\n }\n});\n","import { createAssertion } from 'hein-assertion-utils';\n\ninterface IsBetweenOptions {\n inclusive?: boolean;\n}\n\ninterface IsBetween {\n /**\n * check that date is Between another date\n */\n <T extends Date>(actual: T, start: T, end: T, options?: IsBetweenOptions): void;\n <T extends number>(actual: T, start: T, end: T, options?: IsBetweenOptions): void;\n}\n\nexport const [isBetween, notBetween] = createAssertion({\n messages: {\n notBetween: 'Expected {{= it.actual }} to be between {{= it.lesser }} and {{= it.greater }}',\n not: 'Expected {{= it.actual }} to not be between {{= it.lesser }} and {{= it.greater }}'\n },\n test:\n (report): IsBetween =>\n <T extends Date | number>(actual: T, start: T, end: T, { inclusive = true }: IsBetweenOptions = {}) => {\n const [greater, lesser] = end > start ? [end, start] : [start, end];\n const inclusivelyBetween = actual <= greater && actual >= lesser;\n const exclusivelyBetween = actual < greater && actual > lesser;\n if (inclusive && !inclusivelyBetween) {\n return report({\n messageId: 'notBetween',\n status: 'notok',\n actual,\n data: { lesser, greater }\n });\n }\n if (!inclusive && !exclusivelyBetween) {\n return report({\n messageId: 'notBetween',\n status: 'notok',\n actual,\n data: { lesser, greater }\n });\n }\n return report({\n status: 'ok',\n actual,\n data: { lesser, greater }\n });\n }\n});\n","import { createAssertion } from 'hein-assertion-utils';\n\ninterface InBallpark {\n /**\n * check if a number is in ballpark of another number. See also roundTo\n * @param actual\n * @param expected\n * @param [allowedDifferenceMultiplier=0.1] - a number between 0 and 1 (exclusive). 0.1 (default) means 10% difference is allowed.\n * @example inBallpark(1, 1.1);\n * @example inBallpark(1, 1.1, 0.1);\n */\n (actual: number, expected: number, allowedDifferenceMultiplier?: number): void;\n}\n\nexport const [inBallpark, notInBallpark] = createAssertion({\n messages: {\n miss: 'Expected {{= it.actual }} to be in ballpark of {{= it.expected }}',\n not: 'Expected {{= it.actual }} to not be in ballpark of {{= it.expected }}',\n invalidMultiplier: 'Expected multiplier to be between 0 and 1'\n },\n test:\n (report): InBallpark =>\n (actual: number, expected: number, allowedDifference = 0.1) => {\n const absActual = Math.abs(actual);\n const absExpected = Math.abs(expected);\n if (allowedDifference <= 0 || allowedDifference >= 1) {\n report({ status: 'ok', messageId: 'invalidMultiplier', actual: allowedDifference });\n return report({ status: 'notok', messageId: 'invalidMultiplier', actual: allowedDifference });\n }\n if (\n absActual <= absExpected * (1 + allowedDifference) &&\n absActual >= absExpected * (1 - allowedDifference)\n ) {\n return report({ status: 'ok', expected, actual });\n }\n return report({ status: 'notok', messageId: 'miss', expected, actual });\n }\n});\n","import { createAssertion } from 'hein-assertion-utils';\n\ninterface RoundTo {\n /**\n * check if value rounds to target\n * @param actual\n * @param expected\n * @param [decimals=0] - number of decimals to round to, defaults to 0\n * @example roundTo(1.234, 1.23, 2);\n */\n (actual: number, expected: number, decimals?: number): void;\n}\n\nexport const [roundTo, notRoundTo] = createAssertion({\n messages: {\n miss: 'Expected {{= it.actual }} to round to {{= it.expected }}',\n tooManyDecimals:\n 'Invalid argument for target, decimals for target ({{= it.expected }}) cannot be less than rounding decimals ({{= it.decimals }})',\n not: 'Expected {{= it.actual }} to not round to {{= it.expected }}'\n },\n test:\n (report): RoundTo =>\n (actual: number, expected: number, decimals = 0) => {\n if (expected.toString().split('.')[1]?.length > decimals) {\n report({\n status: 'notok',\n messageId: 'tooManyDecimals',\n expected,\n actual,\n data: { decimals },\n noStringify: true\n });\n report({\n status: 'ok',\n messageId: 'tooManyDecimals',\n expected,\n actual,\n data: { decimals },\n noStringify: true\n });\n return true;\n }\n if (round(actual, decimals) === expected) {\n return report({ status: 'ok', expected, actual });\n }\n return report({ status: 'notok', messageId: 'miss', expected, actual });\n }\n});\n\nconst round = (value: number, decimals: number) => {\n const factor = 10 ** decimals;\n return Math.round(value * factor) / factor;\n};\n","import { createAssertion } from 'hein-assertion-utils';\nimport { match } from '../utils/match.js';\n\ninterface HasMembersOptions {\n /**\n * check for deep equality (ie {a: 1} === {a: 1})\n * @default false\n * @example\n * hasMembers([{ a: 1 }], [{ a: 1 }], { deep: true });\n */\n deep?: boolean;\n /**\n * use partial matching (ie {a: 1, b: 2} === {a: 1})\n * implies deep\n * @default false\n * @example\n * hasMembers([{ a: 1, b: 2 }], [{ a: 1 }], { partial: true });\n */\n partial?: boolean;\n /**\n * check that all the members in the first array are present in the second one\n * @default false\n * @example\n * hasMembers([1, 2], [2, 1], { same: true });\n * notHasMembers([1, 2], [1], { same: true});\n */\n same?: boolean;\n /**\n * check that the members in the first array are in the same order as the second one\n * @default false\n * @example\n * hasMembers([1, 2], [1, 2], { ordered: true });\n * notHasMembers([1, 2], [2, 1], { ordered: true });\n */\n ordered?: boolean;\n}\n\ninterface HasMembers {\n /**\n * check that the members in second array are present in the first one\n * @example\n * hasMembers([1], [1]);\n * hasMembers([1, 2], [2, 1]);\n * hasMembers([{ a: 1 }], [{ a: 1 }], { deep: true });\n */\n <T>(actual: T[], expected: T[], options?: HasMembersOptions, message?: string): void;\n}\n\nexport const [hasMembers, notHasMembers] = createAssertion({\n messages: {\n hasMembers: 'Expected {{= it.actual }} to have members {{= it.expected }}',\n same: 'Expected {{= it.actual }} to have same members as {{= it.expected }}',\n order: 'Expected {{= it.actual }} to have ordered members {{= it.expected }}',\n not: 'Expected {{= it.actual }} to not have members {{= it.expected }}',\n notSame: 'Expected {{= it.actual }} to not have same members as {{= it.expected }}'\n },\n test:\n (report): HasMembers =>\n <T>(\n actual: T[],\n expected: T[],\n { deep = false, partial = false, ordered = false, same = false }: HasMembersOptions = {},\n message?: string\n ) => {\n let lastIndex = -1;\n for (const item of expected) {\n if (deep || partial) {\n const actualIndex = actual.findIndex((actualItem, index) => {\n if (!ordered) {\n return match(actualItem, item, { partial });\n }\n if (lastIndex >= index) {\n return false;\n }\n return match(actualItem, item, { partial });\n });\n lastIndex = actualIndex;\n if (actualIndex === -1) {\n return report({\n status: 'notok',\n messageId: ordered ? 'order' : 'hasMembers',\n actual,\n expected,\n message\n });\n }\n } else {\n if (actual.includes(item)) {\n if (ordered && lastIndex >= actual.indexOf(item, lastIndex + 1)) {\n return report({ status: 'notok', messageId: 'order', actual, expected, message });\n }\n lastIndex = actual.indexOf(item, lastIndex + 1);\n } else {\n return report({ status: 'notok', messageId: 'hasMembers', actual, expected, message });\n }\n }\n }\n if (same && actual.length !== expected.length) {\n return report({ status: 'notok', messageId: 'same', actual, expected, message });\n }\n return report({ status: 'ok', messageId: same ? 'notSame' : 'not', actual, expected, message });\n }\n});\n","import { createAssertion } from 'hein-assertion-utils';\nimport castArray from 'lodash/castArray.js';\n\ninterface HasKeys {\n /**\n * check if object has keys\n * @param object\n * @param keys a key or array of keys in the object.\n * @example hasKeys({a: 1}, 'a');\n * @example hasKeys({a: 1, b: 2}, ['a', 'b']);\n */\n <T extends Record<string, any>, K extends keyof T>(object: T, keys: K[] | K, message?: string): void;\n <K, T extends Map<K, any>>(object: T, keys: K[] | K, message?: string): void;\n}\n\nexport const [hasKeys, notHasKeys] = createAssertion({\n messages: {\n noKey: 'Expected {{= it.object }} to have keys {{= it.expected }}',\n not: 'Expected {{= it.object }} to not have keys {{= it.expected }}'\n },\n test:\n (report): HasKeys =>\n (object, keys, message) => {\n const keysArray = castArray(keys);\n if (object instanceof Map) {\n for (const key of keysArray) {\n if (!object.has(key)) {\n report({\n status: 'notok',\n message,\n messageId: 'noKey',\n data: { object },\n actual: [...object.keys()],\n expected: keysArray\n });\n return;\n }\n }\n report({ status: 'ok', data: { object }, actual: [...object.keys()], expected: keysArray });\n return;\n }\n for (const key of keysArray) {\n if (!(key in object)) {\n report({\n status: 'notok',\n message,\n messageId: 'noKey',\n data: { object },\n actual: object,\n expected: keysArray\n });\n return;\n }\n }\n report({ status: 'ok', data: { object }, actual: Object.keys(object), expected: keysArray });\n }\n});\n","export { deepEqual, notDeepEqual } from './assert/deep-equal.js';\nexport { equal, notEqual } from './assert/equal.js';\nexport { greaterThan, notGreaterThan } from './assert/greater-than.js';\nexport { greaterThanEqual, notGreaterThanEqual } from './assert/greater-than-equal.js';\nexport { hasProperty, notHasProperty } from './assert/has-property.js';\nexport { hasSize, notHasSize } from './assert/has-size.js';\nexport { includes, notIncludes } from './assert/includes.js';\nexport { instanceOf, notInstanceOf } from './assert/instance-of.js';\nexport { isEmpty, notIsEmpty } from './assert/is-empty.js';\nexport { isType, notIsType } from './assert/is-type.js';\nexport { lessThan, notLessThan } from './assert/less-than.js';\nexport { lessThanEqual, notLessThanEqual } from './assert/less-than-equal.js';\nexport { match, notMatch } from './assert/match.js';\nexport { notRejects, rejects } from './assert/rejects.js';\nexport { notThrows, throws } from './assert/throws.js';\nexport { deepHasProperty, deepNotHasProperty } from './assert/deep-has-property.js';\nexport { startsWith, notStartsWith } from './assert/starts-with.js';\nexport { endsWith, notEndsWith } from './assert/ends-with.js';\nexport { isBefore, notBefore } from './assert/is-before.js';\nexport { isAfter, notAfter } from './assert/is-after.js';\nexport { isBetween, notBetween } from './assert/is-between.js';\nexport { inBallpark, notInBallpark } from './assert/in-ballpark.js';\nexport { roundTo, notRoundTo } from './assert/round-to.js';\nexport { hasMembers, notHasMembers } from './assert/has-members.js';\nexport { hasKeys, notHasKeys } from './assert/has-keys.js';\n\nexport const assert = () => {\n throw new Error('Not implemented');\n};\n"],"mappings":"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"}
|
|
@@ -1,454 +0,0 @@
|
|
|
1
|
-
import { Constructor, ErrorPredicate, ThrowsCallback, ValueType } from "./throws-CYLYG7gu.cjs";
|
|
2
|
-
|
|
3
|
-
//#region src/utils/fail.d.ts
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Throw an AssertionError
|
|
7
|
-
* @param {string} message - The message to pass to the AssertionError
|
|
8
|
-
*/
|
|
9
|
-
declare const fail: (message?: string) => never;
|
|
10
|
-
//#endregion
|
|
11
|
-
//#region src/utils/types.d.ts
|
|
12
|
-
type DeepPartial<T> = { [P in keyof T]?: T[P] | (T[P] extends Array<infer U> ? Array<DeepPartial<U>> : DeepPartial<T[P]>) };
|
|
13
|
-
//#endregion
|
|
14
|
-
//#region src/mixins.d.ts
|
|
15
|
-
interface State<T> {
|
|
16
|
-
inverted?: boolean;
|
|
17
|
-
value?: T;
|
|
18
|
-
getProperty?: (value: T) => any;
|
|
19
|
-
deep?: boolean;
|
|
20
|
-
same?: boolean;
|
|
21
|
-
ordered?: boolean;
|
|
22
|
-
partial?: boolean;
|
|
23
|
-
every?: boolean;
|
|
24
|
-
}
|
|
25
|
-
interface Property {
|
|
26
|
-
type: 'property';
|
|
27
|
-
value: (state: State<any>) => Partial<State<any>> | null;
|
|
28
|
-
}
|
|
29
|
-
type MethodCallback = (state: State<any>) => (...args: any[]) => void;
|
|
30
|
-
interface Method {
|
|
31
|
-
type: 'method';
|
|
32
|
-
value: MethodCallback;
|
|
33
|
-
}
|
|
34
|
-
interface Alias {
|
|
35
|
-
type: 'alias';
|
|
36
|
-
value: string;
|
|
37
|
-
}
|
|
38
|
-
declare const use: (plugins: Record<string, Property | Method | Alias>) => void;
|
|
39
|
-
//#endregion
|
|
40
|
-
//#region src/expect.types.d.ts
|
|
41
|
-
interface ValueExpect<T> {
|
|
42
|
-
to: this;
|
|
43
|
-
be: this;
|
|
44
|
-
a: this;
|
|
45
|
-
an: this;
|
|
46
|
-
not: this;
|
|
47
|
-
and: this;
|
|
48
|
-
have: this;
|
|
49
|
-
in: this;
|
|
50
|
-
of: this;
|
|
51
|
-
/**
|
|
52
|
-
* Use deep equality for object checks
|
|
53
|
-
*/
|
|
54
|
-
deep: this;
|
|
55
|
-
/**
|
|
56
|
-
* check for deep equality
|
|
57
|
-
*/
|
|
58
|
-
eql(value: T, message?: string): this;
|
|
59
|
-
partially: ValueExpect<DeepPartial<T>>;
|
|
60
|
-
/**
|
|
61
|
-
* check for === equality, NaN is considered equal to NaN
|
|
62
|
-
*/
|
|
63
|
-
equal(value: T, message?: string): this;
|
|
64
|
-
/**
|
|
65
|
-
* check for === equality, NaN is considered equal to NaN
|
|
66
|
-
*/
|
|
67
|
-
eq(value: T, message?: string): this;
|
|
68
|
-
/**
|
|
69
|
-
* check if value has a property
|
|
70
|
-
* @param property a property in the object. When combined with .deep. can be a path like 'a.b.c'
|
|
71
|
-
* @example expect({a: {b: {c: 1}}}).to.have.property('a.b.c');
|
|
72
|
-
* @example expect({a: {b: {c: 1}}}).to.have.deep.property('[0].a.b.c');
|
|
73
|
-
*/
|
|
74
|
-
property<K extends keyof T>(property: K): this;
|
|
75
|
-
/**
|
|
76
|
-
* check if value has a property
|
|
77
|
-
* @param property a property in the object. When combined with .deep. can be a path like 'a.b.c'
|
|
78
|
-
* @example expect({a: {b: {c: 1}}}).to.have.property('a.b.c');
|
|
79
|
-
* @example expect({a: {b: {c: 1}}}).to.have.deep.property('[0].a.b.c');
|
|
80
|
-
*/
|
|
81
|
-
property(property: string): this;
|
|
82
|
-
/**
|
|
83
|
-
* check if value has a property
|
|
84
|
-
* @param property a property in the object. When combined with .deep. can be a path like 'a.b.c'
|
|
85
|
-
* @param value
|
|
86
|
-
* @example expect({a: {b: {c: 1}}}).to.have.property('a.b.c');
|
|
87
|
-
* @example expect({a: {b: {c: 1}}}).to.have.deep.property('[0].a.b.c');
|
|
88
|
-
*/
|
|
89
|
-
property<K extends keyof T>(property: K, value?: any): this;
|
|
90
|
-
/**
|
|
91
|
-
* check if value has a property
|
|
92
|
-
* @param property a property in the object. When combined with .deep. can be a path like 'a.b.c'
|
|
93
|
-
* @param value
|
|
94
|
-
* @example expect({a: {b: {c: 1}}}).to.have.property('a.b.c');
|
|
95
|
-
* @example expect({a: {b: {c: 1}}}).to.have.deep.property('[0].a.b.c');
|
|
96
|
-
*/
|
|
97
|
-
property(property: string, value?: any): this;
|
|
98
|
-
/**
|
|
99
|
-
* check if instance of value
|
|
100
|
-
* @param constructor - The constructor function to check against
|
|
101
|
-
*/
|
|
102
|
-
instanceOf(constructor: Constructor): this;
|
|
103
|
-
/**
|
|
104
|
-
* check if value is null
|
|
105
|
-
*/
|
|
106
|
-
null(): this;
|
|
107
|
-
/**
|
|
108
|
-
* check if value is undefined
|
|
109
|
-
*/
|
|
110
|
-
undefined(): this;
|
|
111
|
-
/**
|
|
112
|
-
* check if value is of certain type
|
|
113
|
-
*/
|
|
114
|
-
type(type: ValueType): this;
|
|
115
|
-
}
|
|
116
|
-
type ArrayType<T, DT = never> = T extends (infer U)[] ? U : DT;
|
|
117
|
-
interface ArrayExpect<T> extends ValueExpect<T>, ObjectExpect<T> {
|
|
118
|
-
length: NumberExpect<number> & this;
|
|
119
|
-
array(): this;
|
|
120
|
-
every: GetExpectType<ArrayType<T>>;
|
|
121
|
-
/**
|
|
122
|
-
* check if array includes element(s)
|
|
123
|
-
*/
|
|
124
|
-
include(...elements: ArrayType<T>[]): this;
|
|
125
|
-
/**
|
|
126
|
-
* check if array includes element(s)
|
|
127
|
-
*/
|
|
128
|
-
contain(...elements: ArrayType<T>[]): this;
|
|
129
|
-
/**
|
|
130
|
-
* check for array length
|
|
131
|
-
*/
|
|
132
|
-
lengthOf(length: number, message?: string): this;
|
|
133
|
-
/**
|
|
134
|
-
* check that the members in second array are present in the first one
|
|
135
|
-
*/
|
|
136
|
-
members(value: ArrayType<T, any>[], message?: string): this;
|
|
137
|
-
same: ArrayExpect<T>;
|
|
138
|
-
ordered: ArrayExpect<T>;
|
|
139
|
-
/**
|
|
140
|
-
* Use partial matching for objects
|
|
141
|
-
* @example
|
|
142
|
-
* expect({ a: 1, b: 2 }).to.partially.eql({ a: 1 });
|
|
143
|
-
*/
|
|
144
|
-
partially: ArrayExpect<DeepPartial<T>>;
|
|
145
|
-
/**
|
|
146
|
-
* check if value is an array
|
|
147
|
-
*/
|
|
148
|
-
array(): this;
|
|
149
|
-
}
|
|
150
|
-
interface BigIntExpect<T = bigint> extends NumberExpect<T> {
|
|
151
|
-
/**
|
|
152
|
-
* check if value is a bigint
|
|
153
|
-
*/
|
|
154
|
-
bigint(): this;
|
|
155
|
-
}
|
|
156
|
-
interface BooleanExpect<T = boolean> extends ValueExpect<T> {
|
|
157
|
-
/**
|
|
158
|
-
* check if value is a boolean
|
|
159
|
-
*/
|
|
160
|
-
boolean(): this;
|
|
161
|
-
}
|
|
162
|
-
interface DateExpect<T = Date> extends ValueExpect<T>, ObjectExpect<T> {
|
|
163
|
-
/**
|
|
164
|
-
* check if date is after other date
|
|
165
|
-
* @param date
|
|
166
|
-
*/
|
|
167
|
-
after(date: Date): this;
|
|
168
|
-
/**
|
|
169
|
-
* check if date is before other date
|
|
170
|
-
* @param date
|
|
171
|
-
*/
|
|
172
|
-
before(date: Date): this;
|
|
173
|
-
/**
|
|
174
|
-
* check if date is between other dates
|
|
175
|
-
* @param start
|
|
176
|
-
* @param end
|
|
177
|
-
*/
|
|
178
|
-
between(start: Date, end: Date, inclusive?: boolean): this;
|
|
179
|
-
/**
|
|
180
|
-
* check if actual is greater than or equal to expected
|
|
181
|
-
*/
|
|
182
|
-
greaterThanOrEqual(value: T): this;
|
|
183
|
-
/**
|
|
184
|
-
* check if actual is greater than or equal to expected
|
|
185
|
-
*/
|
|
186
|
-
gte(value: T): this;
|
|
187
|
-
/**
|
|
188
|
-
* check if actual is greater than or equal to expected
|
|
189
|
-
*/
|
|
190
|
-
atLeast(value: T): this;
|
|
191
|
-
/**
|
|
192
|
-
* check if actual is greater than expected
|
|
193
|
-
*/
|
|
194
|
-
greaterThan(value: T): this;
|
|
195
|
-
/**
|
|
196
|
-
* check if actual is greater than expected
|
|
197
|
-
*/
|
|
198
|
-
gt(value: T): this;
|
|
199
|
-
/**
|
|
200
|
-
* check if actual is greater than expected
|
|
201
|
-
*/
|
|
202
|
-
above(value: T): this;
|
|
203
|
-
/**
|
|
204
|
-
* check if value is an instance of Date
|
|
205
|
-
*/
|
|
206
|
-
Date(): this;
|
|
207
|
-
/**
|
|
208
|
-
* check if actual is less than or equal to expected
|
|
209
|
-
*/
|
|
210
|
-
lessThanOrEqual(value: T): this;
|
|
211
|
-
/**
|
|
212
|
-
* check if actual is less than or equal to expected
|
|
213
|
-
*/
|
|
214
|
-
lte(value: T): this;
|
|
215
|
-
/**
|
|
216
|
-
* check if actual is less than or equal to expected
|
|
217
|
-
*/
|
|
218
|
-
atMost(value: T): this;
|
|
219
|
-
/**
|
|
220
|
-
* check if actual is less than expected
|
|
221
|
-
*/
|
|
222
|
-
lessThan(value: T): this;
|
|
223
|
-
/**
|
|
224
|
-
* check if actual is less than expected
|
|
225
|
-
*/
|
|
226
|
-
lt(value: T): this;
|
|
227
|
-
/**
|
|
228
|
-
* check if actual is less than expected
|
|
229
|
-
*/
|
|
230
|
-
below(value: T): this;
|
|
231
|
-
}
|
|
232
|
-
interface FunctionExpect<T> extends ValueExpect<T> {
|
|
233
|
-
/**
|
|
234
|
-
* check if function throws
|
|
235
|
-
* @param message
|
|
236
|
-
*/
|
|
237
|
-
throw(message?: string): this;
|
|
238
|
-
throw(matcher: RegExp | Constructor<Error> | ErrorPredicate, message?: string): this;
|
|
239
|
-
/**
|
|
240
|
-
* check if value is a function
|
|
241
|
-
*/
|
|
242
|
-
function(): this;
|
|
243
|
-
}
|
|
244
|
-
interface NumberExpect<T = number> extends ValueExpect<T> {
|
|
245
|
-
/**
|
|
246
|
-
* check if number close enough (default 10%)
|
|
247
|
-
* @param ballpark
|
|
248
|
-
* @param [multiplier=10] - a number between 0 and 1 (exclusive). 0.1 (default) means 10% difference is allowed.
|
|
249
|
-
*/
|
|
250
|
-
ballpark(ballpark: number, multiplier?: number): this;
|
|
251
|
-
/**
|
|
252
|
-
* check if number is between other numbers
|
|
253
|
-
* @param start
|
|
254
|
-
* @param end
|
|
255
|
-
* @param inclusive
|
|
256
|
-
*/
|
|
257
|
-
between(start: number, end: number, inclusive?: boolean): this;
|
|
258
|
-
/**
|
|
259
|
-
* check if actual is greater than or equal to expected
|
|
260
|
-
*/
|
|
261
|
-
greaterThanOrEqual(value: T): this;
|
|
262
|
-
/**
|
|
263
|
-
* check if actual is greater than or equal to expected
|
|
264
|
-
*/
|
|
265
|
-
gte(value: T): this;
|
|
266
|
-
/**
|
|
267
|
-
* check if actual is greater than or equal to expected
|
|
268
|
-
*/
|
|
269
|
-
atLeast(value: T): this;
|
|
270
|
-
/**
|
|
271
|
-
* check if actual is greater than expected
|
|
272
|
-
*/
|
|
273
|
-
greaterThan(value: T): this;
|
|
274
|
-
/**
|
|
275
|
-
* check if actual is greater than expected
|
|
276
|
-
*/
|
|
277
|
-
gt(value: T): this;
|
|
278
|
-
/**
|
|
279
|
-
* check if actual is greater than expected
|
|
280
|
-
*/
|
|
281
|
-
above(value: T): this;
|
|
282
|
-
/**
|
|
283
|
-
* check if actual is less than or equal to expected
|
|
284
|
-
*/
|
|
285
|
-
lessThanOrEqual(value: T): this;
|
|
286
|
-
/**
|
|
287
|
-
* check if actual is less than or equal to expected
|
|
288
|
-
*/
|
|
289
|
-
lte(value: T): this;
|
|
290
|
-
/**
|
|
291
|
-
* check if actual is less than or equal to expected
|
|
292
|
-
*/
|
|
293
|
-
atMost(value: T): this;
|
|
294
|
-
/**
|
|
295
|
-
* check if actual is less than expected
|
|
296
|
-
*/
|
|
297
|
-
lessThan(value: T): this;
|
|
298
|
-
/**
|
|
299
|
-
* check if actual is less than expected
|
|
300
|
-
*/
|
|
301
|
-
lt(value: T): this;
|
|
302
|
-
/**
|
|
303
|
-
* check if actual is less than expected
|
|
304
|
-
*/
|
|
305
|
-
below(value: T): this;
|
|
306
|
-
/**
|
|
307
|
-
* check if number close enough (default 10%)
|
|
308
|
-
* @param target
|
|
309
|
-
* @param decimal defaults to 0, can be negative if trying to round down to nearest 10, 100, etc
|
|
310
|
-
*/
|
|
311
|
-
roundTo(target: number, decimal?: number): this;
|
|
312
|
-
/**
|
|
313
|
-
* check if value is a number
|
|
314
|
-
*/
|
|
315
|
-
number(): this;
|
|
316
|
-
/**
|
|
317
|
-
* check if value is a NaN
|
|
318
|
-
*/
|
|
319
|
-
NaN(): this;
|
|
320
|
-
}
|
|
321
|
-
type InferMapKeys<T> = T extends Map<infer K, any> ? K : never;
|
|
322
|
-
interface MapExpect<T> extends ValueExpect<T> {
|
|
323
|
-
size: NumberExpect<number>;
|
|
324
|
-
/**
|
|
325
|
-
* check if Map is empty
|
|
326
|
-
*/
|
|
327
|
-
empty(message?: string): this;
|
|
328
|
-
/**
|
|
329
|
-
* check if value is an instance of Map
|
|
330
|
-
*/
|
|
331
|
-
Map(): this;
|
|
332
|
-
/**
|
|
333
|
-
* Check if value has keys
|
|
334
|
-
*/
|
|
335
|
-
keys<K extends InferMapKeys<T>>(keys: K[] | K): this;
|
|
336
|
-
/**
|
|
337
|
-
* check for Map to have a certain size
|
|
338
|
-
*/
|
|
339
|
-
sizeOf(size: number, message?: string): this;
|
|
340
|
-
}
|
|
341
|
-
interface ObjectExpect<T> extends ValueExpect<T> {
|
|
342
|
-
size: NumberExpect<number>;
|
|
343
|
-
/**
|
|
344
|
-
* check if object/array/Map/Set is empty
|
|
345
|
-
*/
|
|
346
|
-
empty(message?: string): this;
|
|
347
|
-
/**
|
|
348
|
-
* exclude keys from object to be compared further down the chain
|
|
349
|
-
* @param keys
|
|
350
|
-
*/
|
|
351
|
-
excluding<K extends keyof T>(...keys: K[]): ObjectExpect<Omit<T, K>>;
|
|
352
|
-
/**
|
|
353
|
-
* check if value is an instance of Map
|
|
354
|
-
*/
|
|
355
|
-
Map(): this;
|
|
356
|
-
/**
|
|
357
|
-
* check if value is an instance of Set
|
|
358
|
-
*/
|
|
359
|
-
Set(): this;
|
|
360
|
-
/**
|
|
361
|
-
* check if value is an instance of WeakMap
|
|
362
|
-
*/
|
|
363
|
-
WeakMap(): this;
|
|
364
|
-
/**
|
|
365
|
-
* check if value is an instance of WeakSet
|
|
366
|
-
*/
|
|
367
|
-
WeakSet(): this;
|
|
368
|
-
/**
|
|
369
|
-
* Check if value has keys
|
|
370
|
-
*/
|
|
371
|
-
keys<K extends keyof T>(keys: K[] | K): this;
|
|
372
|
-
/**
|
|
373
|
-
* check for object/array/Map/Set/string to have a certain size
|
|
374
|
-
*/
|
|
375
|
-
sizeOf(size: number, message?: string): this;
|
|
376
|
-
/**
|
|
377
|
-
* check if value is a plain object
|
|
378
|
-
*/
|
|
379
|
-
object(): this;
|
|
380
|
-
}
|
|
381
|
-
interface PromiseExpect<T> extends ValueExpect<T> {
|
|
382
|
-
/**
|
|
383
|
-
* check if promise rejects
|
|
384
|
-
* @param message
|
|
385
|
-
*/
|
|
386
|
-
reject(message?: string): Promise<void>;
|
|
387
|
-
reject(matcher: RegExp | Constructor<Error> | ErrorPredicate): Promise<void>;
|
|
388
|
-
}
|
|
389
|
-
interface StringExpect<T = string> extends ValueExpect<T> {
|
|
390
|
-
/**
|
|
391
|
-
* check if string ends with other string
|
|
392
|
-
* @param start
|
|
393
|
-
* @example endsWith('foo', 'o');
|
|
394
|
-
*/
|
|
395
|
-
endWith(end: string): this;
|
|
396
|
-
/**
|
|
397
|
-
* check if string includes substring(s)
|
|
398
|
-
*/
|
|
399
|
-
include(...substrings: string[]): this;
|
|
400
|
-
/**
|
|
401
|
-
* check if string includes substring(s)
|
|
402
|
-
*/
|
|
403
|
-
contain(...substrings: string[]): this;
|
|
404
|
-
/**
|
|
405
|
-
* check for string to have a certain size
|
|
406
|
-
*/
|
|
407
|
-
lengthOf(length: number, message?: string): this;
|
|
408
|
-
/**
|
|
409
|
-
* check if string matches regex
|
|
410
|
-
*/
|
|
411
|
-
match(regex: RegExp): this;
|
|
412
|
-
/**
|
|
413
|
-
* check if string starts with other string
|
|
414
|
-
* @param start
|
|
415
|
-
* @example startsWith('foo', 'f');
|
|
416
|
-
*/
|
|
417
|
-
startWith(start: string): this;
|
|
418
|
-
/**
|
|
419
|
-
* check if value is a string
|
|
420
|
-
*/
|
|
421
|
-
string(): this;
|
|
422
|
-
}
|
|
423
|
-
interface SymbolExpect<T> extends ValueExpect<T> {
|
|
424
|
-
/**
|
|
425
|
-
* check if value is a symbol
|
|
426
|
-
*/
|
|
427
|
-
symbol(): this;
|
|
428
|
-
}
|
|
429
|
-
declare const LooseSymbol: unique symbol;
|
|
430
|
-
interface Loose {
|
|
431
|
-
[LooseSymbol]: true;
|
|
432
|
-
}
|
|
433
|
-
type AllExpects<T> = ArrayExpect<T> & BigIntExpect<T> & BooleanExpect<T> & DateExpect<T> & FunctionExpect<T> & NumberExpect<T> & MapExpect<T> & ObjectExpect<T> & PromiseExpect<T> & StringExpect<T> & SymbolExpect<T> & ValueExpect<T>;
|
|
434
|
-
interface Expect {
|
|
435
|
-
<T extends Loose>(actual: T): AllExpects<T>;
|
|
436
|
-
<T extends ThrowsCallback>(actual: T): FunctionExpect<T>;
|
|
437
|
-
<T extends Promise<any>>(actual: T): PromiseExpect<T>;
|
|
438
|
-
<T extends any[]>(actual: T): ArrayExpect<T>;
|
|
439
|
-
<T extends Date>(actual: T): DateExpect<T>;
|
|
440
|
-
<T extends Map<any, any>>(actual: T): MapExpect<T>;
|
|
441
|
-
<T extends Record<string, any>>(actual: T): ObjectExpect<T>;
|
|
442
|
-
<T extends number>(actual: T): NumberExpect;
|
|
443
|
-
<T extends bigint>(actual: T): BigIntExpect;
|
|
444
|
-
<T extends boolean>(actual: T): BooleanExpect;
|
|
445
|
-
<T extends string>(actual: T): StringExpect;
|
|
446
|
-
<T extends symbol>(actual: T): SymbolExpect<T>;
|
|
447
|
-
<T>(actual: T): ValueExpect<T>;
|
|
448
|
-
fail: typeof fail;
|
|
449
|
-
}
|
|
450
|
-
type GetExpectType<T> = T extends number ? NumberExpect<T> : AllExpects<T>;
|
|
451
|
-
//# sourceMappingURL=expect.types.d.ts.map
|
|
452
|
-
//#endregion
|
|
453
|
-
export { Alias, ArrayExpect, BigIntExpect, BooleanExpect, DateExpect, Expect, FunctionExpect, Loose, MapExpect, Method, NumberExpect, ObjectExpect, PromiseExpect, Property, type State, StringExpect, SymbolExpect, ValueExpect, fail, use };
|
|
454
|
-
//# sourceMappingURL=expect.types-CHYPdbCW.d.cts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"expect.types-CHYPdbCW.d.cts","names":[],"sources":["../src/utils/fail.ts","../src/utils/types.ts","../src/mixins.ts","../src/expect.types.ts"],"sourcesContent":[],"mappings":"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"}
|