Skip to content
This repository was archived by the owner on Dec 30, 2023. It is now read-only.

Commit e38a9b4

Browse files
authored
refactor(object): ♻️ Major reorganization (#112)
1 parent 263dd08 commit e38a9b4

File tree

22 files changed

+183
-85
lines changed

22 files changed

+183
-85
lines changed

.changeset/friendly-horses-film.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@terminal-nerds/snippets-object": minor
3+
---
4+
5+
♻️ Major reorganization

packages/object/README.md

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,14 @@
2626

2727
| Name | Size |
2828
| ------------------------------------------ | ----------------------------------------------------- |
29-
| [`@terminal-nerds/snippets-object/keys`] | ![keys size gzip badge] ![keys size brotli badge] |
30-
| [`@terminal-nerds/snippets-object/schema`] | ![schema size gzip badge] ![schema size brotli badge] |
29+
| [`@terminal-nerds/snippets-object/misc`] | ![misc size gzip badge] ![misc size brotli badge] |
3130
| [`@terminal-nerds/snippets-object/schema`] | ![schema size gzip badge] ![schema size brotli badge] |
3231

3332
<!-- prettier-ignore-start -->
3433
<!-- MODULES LINKS -->
35-
[`@terminal-nerds/snippets-object/keys`]: https://github.com/terminal-nerds/snippets/blob/main/packages/object/source/keys/keys.ts
36-
[keys size gzip badge]: https://badgen.net/badgesize/gzip/file-object/unpkg.com/@terminal-nerds/snippets-object/dist/keys/keys.js?label=gzip
37-
[keys size brotli badge]: https://badgen.net/badgesize/brotli/file-object/unpkg.com/@terminal-nerds/snippets-object/dist/keys/keys.js?label=brotli
38-
39-
[`@terminal-nerds/snippets-object/merge`]: https://github.com/terminal-nerds/snippets/blob/main/packages/object/source/merge/merge.ts
40-
[merge size gzip badge]: https://badgen.net/badgesize/gzip/file-object/unpkg.com/@terminal-nerds/snippets-object/dist/merge/merge.js?label=gzip
41-
[merge size brotli badge]: https://badgen.net/badgesize/brotli/file-object/unpkg.com/@terminal-nerds/snippets-object/dist/merge/merge.js?label=brotli
34+
[`@terminal-nerds/snippets-object/misc`]: https://github.com/terminal-nerds/snippets/blob/main/packages/object/source/misc/misc.ts
35+
[misc size gzip badge]: https://badgen.net/badgesize/gzip/file-object/unpkg.com/@terminal-nerds/snippets-object/dist/misc/misc.js?label=gzip
36+
[misc size brotli badge]: https://badgen.net/badgesize/brotli/file-object/unpkg.com/@terminal-nerds/snippets-object/dist/misc/misc.js?label=brotli
4237

4338
[`@terminal-nerds/snippets-object/schema`]: https://github.com/terminal-nerds/snippets/blob/main/packages/object/source/schema/schema.ts
4439
[schema size gzip badge]: https://badgen.net/badgesize/gzip/file-object/unpkg.com/@terminal-nerds/snippets-object/dist/schema/schema.js?label=gzip

packages/object/package.json

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,18 @@
3232
"require": "./dist/main.cjs"
3333
},
3434
"./*": {
35-
"types": "./dist/*/*.d.ts",
36-
"import": "./dist/*/*.js",
37-
"require": "./dist/*/*.cjs"
35+
"types": [
36+
"./dist/*.d.ts",
37+
"./dist/*/index.d.ts"
38+
],
39+
"import": [
40+
"./dist/*.js",
41+
"./dist/*/index.js"
42+
],
43+
"require": [
44+
"./dist/*.cjs",
45+
"./dist/*/index.cjs"
46+
]
3847
}
3948
},
4049
"files": [

packages/object/source/keys/keys.ts

Lines changed: 0 additions & 28 deletions
This file was deleted.

packages/object/source/main.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
/* MODULES */
2-
export * from "./keys/keys.ts";
3-
export * from "./merge/merge.ts";
4-
export * from "./schema/schema.ts";
2+
export * from "./misc/index.ts";
3+
export * from "./schema/index.ts";

packages/object/source/misc/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export * from "./sub/merge.ts";
2+
export * from "./sub/omit.ts";
3+
export * from "./sub/pick.ts";
4+
export * from "./sub/rename.ts";

packages/object/source/merge/merge.test.ts renamed to packages/object/source/misc/sub/merge.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { returns, throws } from "@terminal-nerds/snippets-test/unit";
33
import { describe, it } from "vitest";
44
import { ZodError } from "zod";
55

6-
import { mergeDeepObjects } from "./merge.ts";
6+
import { mergeObjects } from "./merge.ts";
77

88
const SAMPLE_OBJECT1 = { a: [1] } as const;
99
const SAMPLE_OBJECT2 = { a: [2, 3], b: false } as const;
@@ -12,12 +12,12 @@ const SAMPLE_OBJECT3 = { a: [4, 5], b: true, c: "terminal nerds" } as const;
1212
describe(`deepMergeObjects(objects)`, () => {
1313
it(throws(ZodError).on(`invalid object values`).samples(SAMPLE_PRIMITIVES), ({ expect }) => {
1414
// @ts-expect-error Testing
15-
expect(() => mergeDeepObjects(SAMPLE_PRIMITIVES)).toThrowError(ZodError);
15+
expect(() => mergeObjects(SAMPLE_PRIMITIVES)).toThrowError(ZodError);
1616
});
1717

1818
const expected = { a: [1, 2, 3, 4, 5], b: true, c: "terminal nerds" } as const;
1919

2020
it(returns(expected).on(`sample objects`), ({ expect }) => {
21-
expect(mergeDeepObjects([SAMPLE_OBJECT1, SAMPLE_OBJECT2, SAMPLE_OBJECT3])).toEqual(expected);
21+
expect(mergeObjects([SAMPLE_OBJECT1, SAMPLE_OBJECT2, SAMPLE_OBJECT3])).toEqual(expected);
2222
});
2323
});

packages/object/source/merge/merge.ts renamed to packages/object/source/misc/sub/merge.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { OBJECT_SCHEMA } from "@terminal-nerds/snippets-type/non-primitive";
22
import { deepmerge } from "deepmerge-ts";
33
import { z } from "zod";
44

5-
export function mergeDeepObjects(objects: ReadonlyArray<object>): object {
5+
export function mergeObjects(objects: ReadonlyArray<object>): object {
66
z.array(OBJECT_SCHEMA).parse(objects);
77

88
return deepmerge(...objects) as object;
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { SAMPLE_PRIMITIVES } from "@terminal-nerds/snippets-test/sample";
2+
import { returns, throws } from "@terminal-nerds/snippets-test/unit";
3+
import { describe, it } from "vitest";
4+
import { ZodError } from "zod";
5+
6+
import { omitObjectEntries } from "./omit.ts";
7+
8+
describe("omitObjectEntries(object, keys)", () => {
9+
it(throws(ZodError).on(`invalid object values`).samples(SAMPLE_PRIMITIVES), ({ expect }) => {
10+
// @ts-expect-error Testing
11+
expect(() => omitObjectEntries(SAMPLE_PRIMITIVES)).toThrowError(ZodError);
12+
});
13+
14+
it(
15+
returns({ b: 2 })
16+
.on(`sample object`)
17+
.with({ keys: ["a"] }),
18+
({ expect }) => {
19+
expect(omitObjectEntries({ a: 1, b: 2 }, ["a"])).toEqual({ b: 2 });
20+
},
21+
);
22+
});
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { validateObject } from "../../schema/sub/native.ts";
2+
3+
export function omitObjectEntries<const O extends object, K extends keyof O>(object: O, keys: K[]): Omit<O, K> {
4+
validateObject(object);
5+
6+
const keysSet = new Set(keys);
7+
8+
return Object.fromEntries(
9+
(Object.entries(object) as Array<[K, O[K]]>).filter(([key]) => !keysSet.has(key)),
10+
) as unknown as Omit<O, K>;
11+
}

0 commit comments

Comments
 (0)