@layerzerolabs/typescript-utils 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +159 -0
- package/.turbo/turbo-lint.log +4 -0
- package/dist/3OBHE7MG.js +6 -0
- package/dist/3OBHE7MG.js.map +1 -0
- package/dist/44IBECAR.cjs +8 -0
- package/dist/44IBECAR.cjs.map +1 -0
- package/dist/4RNWLMHM.js +45 -0
- package/dist/4RNWLMHM.js.map +1 -0
- package/dist/62A6WP5R.js +6 -0
- package/dist/62A6WP5R.js.map +1 -0
- package/dist/7MFOZW3L.js +6 -0
- package/dist/7MFOZW3L.js.map +1 -0
- package/dist/AMF2EES3.cjs +1332 -0
- package/dist/AMF2EES3.cjs.map +1 -0
- package/dist/ATSF4XM5.cjs +8 -0
- package/dist/ATSF4XM5.cjs.map +1 -0
- package/dist/AYCOZKHR.js +8435 -0
- package/dist/AYCOZKHR.js.map +1 -0
- package/dist/B77ZZJ5J.cjs +8 -0
- package/dist/B77ZZJ5J.cjs.map +1 -0
- package/dist/BLALMGVL.js +6 -0
- package/dist/BLALMGVL.js.map +1 -0
- package/dist/BPWNPHCG.cjs +8 -0
- package/dist/BPWNPHCG.cjs.map +1 -0
- package/dist/C2AO2CD6.js +6 -0
- package/dist/C2AO2CD6.js.map +1 -0
- package/dist/DXU6T5SS.js +6 -0
- package/dist/DXU6T5SS.js.map +1 -0
- package/dist/FPWOFXCL.js +6 -0
- package/dist/FPWOFXCL.js.map +1 -0
- package/dist/FQTDMGIM.cjs +8 -0
- package/dist/FQTDMGIM.cjs.map +1 -0
- package/dist/GHCFU27L.js +6 -0
- package/dist/GHCFU27L.js.map +1 -0
- package/dist/GKC44C4P.cjs +8 -0
- package/dist/GKC44C4P.cjs.map +1 -0
- package/dist/HKAX3PXE.cjs +8 -0
- package/dist/HKAX3PXE.cjs.map +1 -0
- package/dist/HVKBLL5V.js +6 -0
- package/dist/HVKBLL5V.js.map +1 -0
- package/dist/JRGCWPQC.cjs +8 -0
- package/dist/JRGCWPQC.cjs.map +1 -0
- package/dist/KGYIWVDZ.cjs +8 -0
- package/dist/KGYIWVDZ.cjs.map +1 -0
- package/dist/KLHW5WN3.cjs +8 -0
- package/dist/KLHW5WN3.cjs.map +1 -0
- package/dist/M2FMGCRF.cjs +8 -0
- package/dist/M2FMGCRF.cjs.map +1 -0
- package/dist/MNZ3MKHF.js +6 -0
- package/dist/MNZ3MKHF.js.map +1 -0
- package/dist/N3MJTAM7.js +6 -0
- package/dist/N3MJTAM7.js.map +1 -0
- package/dist/Q3ERQ4ME.cjs +8438 -0
- package/dist/Q3ERQ4ME.cjs.map +1 -0
- package/dist/Q3ZAC463.js +6 -0
- package/dist/Q3ZAC463.js.map +1 -0
- package/dist/Q74ZLWCL.cjs +8 -0
- package/dist/Q74ZLWCL.cjs.map +1 -0
- package/dist/TDMZOP4J.js +6 -0
- package/dist/TDMZOP4J.js.map +1 -0
- package/dist/TML6PHUW.js +6 -0
- package/dist/TML6PHUW.js.map +1 -0
- package/dist/U7VZULNU.cjs +51 -0
- package/dist/U7VZULNU.cjs.map +1 -0
- package/dist/VLOINXK2.cjs +8 -0
- package/dist/VLOINXK2.cjs.map +1 -0
- package/dist/XM743A75.js +1326 -0
- package/dist/XM743A75.js.map +1 -0
- package/dist/Y53SFKBY.cjs +8 -0
- package/dist/Y53SFKBY.cjs.map +1 -0
- package/dist/ZLF3Y44J.cjs +8 -0
- package/dist/ZLF3Y44J.cjs.map +1 -0
- package/dist/ZPWIEOJR.js +6 -0
- package/dist/ZPWIEOJR.js.map +1 -0
- package/dist/advancedRecord.cjs +7 -0
- package/dist/advancedRecord.cjs.map +1 -0
- package/dist/advancedRecord.d.ts +10 -0
- package/dist/advancedRecord.d.ts.map +1 -0
- package/dist/advancedRecord.js +4 -0
- package/dist/advancedRecord.js.map +1 -0
- package/dist/branded.cjs +7 -0
- package/dist/branded.cjs.map +1 -0
- package/dist/branded.d.ts +22 -0
- package/dist/branded.d.ts.map +1 -0
- package/dist/branded.js +4 -0
- package/dist/branded.js.map +1 -0
- package/dist/constructor.cjs +7 -0
- package/dist/constructor.cjs.map +1 -0
- package/dist/constructor.d.ts +4 -0
- package/dist/constructor.d.ts.map +1 -0
- package/dist/constructor.js +4 -0
- package/dist/constructor.js.map +1 -0
- package/dist/deep.cjs +7 -0
- package/dist/deep.cjs.map +1 -0
- package/dist/deep.d.ts +22 -0
- package/dist/deep.d.ts.map +1 -0
- package/dist/deep.js +4 -0
- package/dist/deep.js.map +1 -0
- package/dist/deep.test-d.cjs +15 -0
- package/dist/deep.test-d.cjs.map +1 -0
- package/dist/deep.test-d.d.ts +2 -0
- package/dist/deep.test-d.d.ts.map +1 -0
- package/dist/deep.test-d.js +13 -0
- package/dist/deep.test-d.js.map +1 -0
- package/dist/disallowedAny.cjs +7 -0
- package/dist/disallowedAny.cjs.map +1 -0
- package/dist/disallowedAny.d.ts +5 -0
- package/dist/disallowedAny.d.ts.map +1 -0
- package/dist/disallowedAny.js +4 -0
- package/dist/disallowedAny.js.map +1 -0
- package/dist/identity.cjs +7 -0
- package/dist/identity.cjs.map +1 -0
- package/dist/identity.d.ts +2 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +4 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.cjs +23 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/lastOf.cjs +7 -0
- package/dist/lastOf.cjs.map +1 -0
- package/dist/lastOf.d.ts +7 -0
- package/dist/lastOf.d.ts.map +1 -0
- package/dist/lastOf.js +4 -0
- package/dist/lastOf.js.map +1 -0
- package/dist/merge.cjs +7 -0
- package/dist/merge.cjs.map +1 -0
- package/dist/merge.d.ts +7 -0
- package/dist/merge.d.ts.map +1 -0
- package/dist/merge.js +4 -0
- package/dist/merge.js.map +1 -0
- package/dist/methodOf.cjs +7 -0
- package/dist/methodOf.cjs.map +1 -0
- package/dist/methodOf.d.ts +7 -0
- package/dist/methodOf.d.ts.map +1 -0
- package/dist/methodOf.js +4 -0
- package/dist/methodOf.js.map +1 -0
- package/dist/removeNever.cjs +7 -0
- package/dist/removeNever.cjs.map +1 -0
- package/dist/removeNever.d.ts +4 -0
- package/dist/removeNever.d.ts.map +1 -0
- package/dist/removeNever.js +4 -0
- package/dist/removeNever.js.map +1 -0
- package/dist/strings.cjs +7 -0
- package/dist/strings.cjs.map +1 -0
- package/dist/strings.d.ts +27 -0
- package/dist/strings.d.ts.map +1 -0
- package/dist/strings.js +4 -0
- package/dist/strings.js.map +1 -0
- package/dist/strings.test-d.cjs +21 -0
- package/dist/strings.test-d.cjs.map +1 -0
- package/dist/strings.test-d.d.ts +2 -0
- package/dist/strings.test-d.d.ts.map +1 -0
- package/dist/strings.test-d.js +19 -0
- package/dist/strings.test-d.js.map +1 -0
- package/dist/tuples.cjs +7 -0
- package/dist/tuples.cjs.map +1 -0
- package/dist/tuples.d.ts +11 -0
- package/dist/tuples.d.ts.map +1 -0
- package/dist/tuples.js +4 -0
- package/dist/tuples.js.map +1 -0
- package/dist/valueOf.cjs +7 -0
- package/dist/valueOf.cjs.map +1 -0
- package/dist/valueOf.d.ts +12 -0
- package/dist/valueOf.d.ts.map +1 -0
- package/dist/valueOf.js +4 -0
- package/dist/valueOf.js.map +1 -0
- package/dist/viem.cjs +7 -0
- package/dist/viem.cjs.map +1 -0
- package/dist/viem.d.ts +186 -0
- package/dist/viem.d.ts.map +1 -0
- package/dist/viem.js +4 -0
- package/dist/viem.js.map +1 -0
- package/dist/withRequired.cjs +7 -0
- package/dist/withRequired.cjs.map +1 -0
- package/dist/withRequired.d.ts +7 -0
- package/dist/withRequired.d.ts.map +1 -0
- package/dist/withRequired.js +4 -0
- package/dist/withRequired.js.map +1 -0
- package/package.json +32 -0
- package/src/advancedRecord.ts +20 -0
- package/src/branded.ts +19 -0
- package/src/constructor.ts +1 -0
- package/src/deep.test-d.ts +33 -0
- package/src/deep.ts +26 -0
- package/src/disallowedAny.ts +5 -0
- package/src/identity.ts +2 -0
- package/src/index.ts +15 -0
- package/src/lastOf.ts +15 -0
- package/src/merge.ts +13 -0
- package/src/methodOf.ts +7 -0
- package/src/removeNever.ts +3 -0
- package/src/strings.test-d.ts +32 -0
- package/src/strings.ts +42 -0
- package/src/tuples.ts +49 -0
- package/src/valueOf.ts +16 -0
- package/src/viem.ts +275 -0
- package/src/withRequired.ts +5 -0
- package/test/disallowedAny.test.ts +54 -0
- package/test/merge.test.ts +27 -0
- package/tsconfig.json +20 -0
- package/tsup.config.ts +8 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { describe, expectTypeOf, it } from 'vitest';
|
|
2
|
+
|
|
3
|
+
import type { DisallowedAny } from '../src/disallowedAny';
|
|
4
|
+
|
|
5
|
+
describe('DisallowedAny type utility', () => {
|
|
6
|
+
it('disallows bare any', () => {
|
|
7
|
+
type R = DisallowedAny<any>;
|
|
8
|
+
expectTypeOf<R>().toEqualTypeOf<never>();
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('passes through primitives', () => {
|
|
12
|
+
expectTypeOf<DisallowedAny<string>>().toEqualTypeOf<string>();
|
|
13
|
+
expectTypeOf<DisallowedAny<number>>().toEqualTypeOf<number>();
|
|
14
|
+
expectTypeOf<DisallowedAny<boolean>>().toEqualTypeOf<boolean>();
|
|
15
|
+
expectTypeOf<DisallowedAny<symbol>>().toEqualTypeOf<symbol>();
|
|
16
|
+
expectTypeOf<DisallowedAny<bigint>>().toEqualTypeOf<bigint>();
|
|
17
|
+
expectTypeOf<DisallowedAny<null>>().toEqualTypeOf<null>();
|
|
18
|
+
expectTypeOf<DisallowedAny<undefined>>().toEqualTypeOf<undefined>();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('does not treat unknown as any', () => {
|
|
22
|
+
expectTypeOf<DisallowedAny<unknown>>().toEqualTypeOf<unknown>();
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('disallows unions that include any (any absorbs the union)', () => {
|
|
26
|
+
type U1 = DisallowedAny<any | string>;
|
|
27
|
+
expectTypeOf<U1>().toEqualTypeOf<never>();
|
|
28
|
+
|
|
29
|
+
type U2 = DisallowedAny<string | number>;
|
|
30
|
+
expectTypeOf<U2>().toEqualTypeOf<string | number>();
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('disallows intersections that include any (any absorbs the intersection)', () => {
|
|
34
|
+
type I1 = DisallowedAny<any & { a: 1 }>;
|
|
35
|
+
expectTypeOf<I1>().toEqualTypeOf<never>();
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('works with generics: when T is any it becomes never; otherwise it passes through', () => {
|
|
39
|
+
type Wrap<T> = DisallowedAny<T>;
|
|
40
|
+
|
|
41
|
+
type G1 = Wrap<any>;
|
|
42
|
+
expectTypeOf<G1>().toEqualTypeOf<never>();
|
|
43
|
+
|
|
44
|
+
type G2 = Wrap<{ x: string }>; // non-any generic
|
|
45
|
+
expectTypeOf<G2>().toEqualTypeOf<{ x: string }>();
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('allows type constraints', () => {
|
|
49
|
+
const myFunc = <T extends number>(_: DisallowedAny<T>): void => {};
|
|
50
|
+
myFunc(5);
|
|
51
|
+
//@ts-expect-error
|
|
52
|
+
myFunc(5 as any);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { describe, expectTypeOf, it } from 'vitest';
|
|
2
|
+
|
|
3
|
+
import type { Merge } from '../src/merge';
|
|
4
|
+
|
|
5
|
+
describe('Merge type utility', () => {
|
|
6
|
+
it('should handle empty object edge cases correctly', () => {
|
|
7
|
+
// Test the main fix: empty objects should be handled properly
|
|
8
|
+
type EmptyLeftMerge = Merge<{}, { a: string; b: number }>;
|
|
9
|
+
expectTypeOf<EmptyLeftMerge>().toEqualTypeOf<{ a: string; b: number }>();
|
|
10
|
+
|
|
11
|
+
type EmptyRightMerge = Merge<{ a: string; b: number }, {}>;
|
|
12
|
+
expectTypeOf<EmptyRightMerge>().toEqualTypeOf<{ a: string; b: number }>();
|
|
13
|
+
|
|
14
|
+
type BothEmptyMerge = Merge<{}, {}>;
|
|
15
|
+
expectTypeOf<BothEmptyMerge>().toEqualTypeOf<{}>();
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('should merge types correctly for non-empty objects', () => {
|
|
19
|
+
// Basic functionality should still work
|
|
20
|
+
type BasicMerge = Merge<{ a: string }, { b: number }>;
|
|
21
|
+
expectTypeOf<BasicMerge>().toEqualTypeOf<{ a: string; b: number }>();
|
|
22
|
+
|
|
23
|
+
// Property override should work
|
|
24
|
+
type OverrideMerge = Merge<{ a: string; b: string }, { b: number; c: boolean }>;
|
|
25
|
+
expectTypeOf<OverrideMerge>().toEqualTypeOf<{ a: string; b: number; c: boolean }>();
|
|
26
|
+
});
|
|
27
|
+
});
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "@layerzerolabs/typescript-configuration/tsconfig.base.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"rootDir": "./src",
|
|
5
|
+
"outDir": "./dist",
|
|
6
|
+
"strictPropertyInitialization": false,
|
|
7
|
+
"noUnusedLocals": false,
|
|
8
|
+
"noUnusedParameters": false,
|
|
9
|
+
"jsx": "react-jsx"
|
|
10
|
+
},
|
|
11
|
+
"exclude": [
|
|
12
|
+
"node_modules",
|
|
13
|
+
"**/__mocks__/*",
|
|
14
|
+
"**/__tests__/*",
|
|
15
|
+
"**/*.spec.ts",
|
|
16
|
+
"**/*.test.ts",
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"include": ["src/**/*"]
|
|
20
|
+
}
|