deep-guards 1.3.1 → 1.4.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.
@@ -3,6 +3,8 @@ import type { Guard } from "./types.js";
3
3
  export declare function isOptional<T>(guard: Guard<T>): Guard<T | undefined>;
4
4
  export declare function isNullable<T>(guard: Guard<T>): Guard<T | null | undefined>;
5
5
  export declare function isNonNullable<T extends NonNullable<unknown>>(value: T | null | undefined): value is T;
6
+ type Falsey = undefined | false | null | "" | 0n | 0;
7
+ export declare function isFalsey(value: unknown): value is Falsey;
6
8
  export declare function isNot<const N>(guard: Guard<N>): <const T>(value: T | N) => value is T;
7
9
  export declare function isOneOf<const T extends (string | number | boolean | symbol | null | undefined)[]>(...values: T): Guard<T[number]>;
8
10
  export declare function isUnionOf<T extends readonly unknown[]>(...guards: GuardSchemaOf<T>): Guard<T[number]>;
package/dist/compound.js CHANGED
@@ -14,6 +14,9 @@ export function isNullable(guard) {
14
14
  export function isNonNullable(value) {
15
15
  return value != null;
16
16
  }
17
+ export function isFalsey(value) {
18
+ return !value;
19
+ }
17
20
  export function isNot(guard) {
18
21
  if (typeof guard !== "function") {
19
22
  throw new TypeError(`isNot expects a guard parameter. Got instead: ${guard}`);
@@ -1 +1 @@
1
- {"version":3,"file":"compound.js","sourceRoot":"src/","sources":["compound.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compound.js","sourceRoot":"","sources":["../src/compound.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"src/","sources":["errors.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,IAAI,GAAG,YAAY,CAAC;CACrB;AAED,MAAM,UAAU,YAAY,CAC1B,KAAc,EACd,KAAe,EACf,IAAa;IAEb,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,UAAU,CAAC,IAAI,IAAI,aAAa,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,IAAI,GAAG,YAAY,CAAC;CACrB;AAED,MAAM,UAAU,YAAY,CAC1B,KAAc,EACd,KAAe,EACf,IAAa;IAEb,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,UAAU,CAAC,IAAI,IAAI,aAAa,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"src/","sources":["helpers.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAsB,GAAuB,EAAO,EAAE,CAC7E,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAS,CAAC,MAAM,CAC7C,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAQ,CACzC,CAAC;AAEJ,MAAM,UAAU,IAAI,CAClB,GAAM,EACN,GAAY;IAEZ,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IAC3B,gEAAgE;IAChE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IACpB,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAsB,GAAuB,EAAO,EAAE,CAC7E,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAS,CAAC,MAAM,CAC7C,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAQ,CACzC,CAAC;AAEJ,MAAM,UAAU,IAAI,CAClB,GAAM,EACN,GAAY;IAEZ,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IAC3B,gEAAgE;IAChE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IACpB,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"src/","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"macros.js","sourceRoot":"src/","sources":["macros.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAc7C,MAAM,UAAU,uBAAuB,CAIrC,KAAQ,EACR,KAAe,EACf,MAAiB,MAAM;IAEvB,MAAM,kBAAkB,GAAG,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAE9D,CAAC;IACF,OAAO,CAAC,KAAK,EAAqC,EAAE,CAClD,kBAAkB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AACzD,CAAC"}
1
+ {"version":3,"file":"macros.js","sourceRoot":"","sources":["../src/macros.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAc7C,MAAM,UAAU,uBAAuB,CAIrC,KAAQ,EACR,KAAe,EACf,MAAiB,MAAM;IAEvB,MAAM,kBAAkB,GAAG,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAE9D,CAAC;IACF,OAAO,CAAC,KAAK,EAAqC,EAAE,CAClD,kBAAkB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AACzD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"primitives.js","sourceRoot":"src/","sources":["primitives.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAmB,CAAC,MAAM,EAAqB,EAAE,CAAC,IAAI,CAAC;AAE7E,MAAM,CAAC,MAAM,MAAM,GAAgB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;AAE7D,MAAM,CAAC,MAAM,WAAW,GAAqB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;AAE5E,MAAM,CAAC,MAAM,QAAQ,GAAkB,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;AAE5E,MAAM,CAAC,MAAM,SAAS,GAAkB,CAAC,KAAK,EAAmB,EAAE,CACjE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAE1B,MAAM,CAAC,MAAM,QAAQ,GAAkB,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;AAE5E,MAAM,CAAC,MAAM,QAAQ,GAAkB,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;AAE5E,MAAM,CAAC,MAAM,SAAS,GAAmB,CAAC,KAAK,EAAE,EAAE,CACjD,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC;AAEpC,8DAA8D;AAC9D,MAAM,CAAC,MAAM,UAAU,GAAuC,CAC5D,KAAK,EAEiC,EAAE,CAAC,OAAO,KAAK,KAAK,UAAU,CAAC"}
1
+ {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../src/primitives.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAmB,CAAC,MAAM,EAAqB,EAAE,CAAC,IAAI,CAAC;AAE7E,MAAM,CAAC,MAAM,MAAM,GAAgB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;AAE7D,MAAM,CAAC,MAAM,WAAW,GAAqB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;AAE5E,MAAM,CAAC,MAAM,QAAQ,GAAkB,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;AAE5E,MAAM,CAAC,MAAM,SAAS,GAAkB,CAAC,KAAK,EAAmB,EAAE,CACjE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAE1B,MAAM,CAAC,MAAM,QAAQ,GAAkB,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;AAE5E,MAAM,CAAC,MAAM,QAAQ,GAAkB,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;AAE5E,MAAM,CAAC,MAAM,SAAS,GAAmB,CAAC,KAAK,EAAE,EAAE,CACjD,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC;AAEpC,8DAA8D;AAC9D,MAAM,CAAC,MAAM,UAAU,GAAuC,CAC5D,KAAK,EAEiC,EAAE,CAAC,OAAO,KAAK,KAAK,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"structures.js","sourceRoot":"src/","sources":["structures.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"structures.js","sourceRoot":"","sources":["../src/structures.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"src/","sources":["types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -2,40 +2,63 @@
2
2
  "author": "eniallator",
3
3
  "description": "Deep guarding package",
4
4
  "engines": {
5
- "node": ">=25.4.0"
5
+ "node": ">=18"
6
6
  },
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/eniallator/Deep-Guards.git"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/eniallator/Deep-Guards/issues"
13
+ },
14
+ "keywords": [
15
+ "validation",
16
+ "typescript",
17
+ "guarding",
18
+ "guards"
19
+ ],
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/index.d.ts",
23
+ "import": "./dist/index.js"
24
+ }
25
+ },
26
+ "files": [
27
+ "dist"
28
+ ],
29
+ "sideEffects": false,
7
30
  "license": "Apache-2.0",
8
31
  "main": "dist/index.js",
9
32
  "name": "deep-guards",
10
- "packageManager": "yarn@4.12.0",
33
+ "packageManager": "yarn@4.16.0",
11
34
  "type": "module",
12
35
  "types": "dist/index.d.ts",
13
36
  "homepage": "https://github.com/eniallator/Deep-Guards",
14
- "version": "1.3.1",
37
+ "version": "1.4.0",
15
38
  "scripts": {
16
39
  "test": "vitest run --passWithNoTests",
17
40
  "build": "tsc",
18
41
  "lint": "eslint ./src",
19
42
  "typecheck": "tsc --noEmit",
20
43
  "findissues": "yarn typecheck && yarn lint",
21
- "publish": "npm publish --tolerate-republish",
22
- "prepublish": "yarn typecheck && yarn lint && yarn build && yarn test",
23
- "bump-and-release": "powershell -ExecutionPolicy Bypass -File ./scripts/bump-and-release.ps1",
24
- "release": "powershell -ExecutionPolicy Bypass -File ./scripts/release.ps1"
44
+ "bump-and-release": "./scripts/bump-and-release.sh",
45
+ "release": "./scripts/release.sh",
46
+ "publint": "publint run",
47
+ "attw": "attw --pack .",
48
+ "check-output": "./scripts/check-output.sh",
49
+ "prepublish": "yarn typecheck && yarn lint && yarn build && yarn test && yarn publint && yarn check-output"
25
50
  },
26
51
  "devDependencies": {
27
- "@eslint/compat": "^2.0.2",
28
- "@eslint/js": "^9.39.2",
29
- "@stylistic/eslint-plugin": "^5.8.0",
30
- "@types/eslint__js": "^9.14.0",
31
- "@types/node": "^25.2.3",
32
- "@typescript-eslint/eslint-plugin": "^8.55.0",
33
- "@typescript-eslint/parser": "^8.55.0",
34
- "eslint": "^9.39.2",
35
- "eslint-plugin-eslint-comments": "^3.2.0",
36
- "eslint-plugin-import": "^2.32.0",
37
- "typescript": "^5.9.3",
38
- "typescript-eslint": "^8.55.0",
39
- "vitest": "^4.0.18"
52
+ "@arethetypeswrong/cli": "^0.18.3",
53
+ "@eslint/compat": "^2.1.0",
54
+ "@eslint/js": "^10.0.1",
55
+ "@stylistic/eslint-plugin": "^5.10.0",
56
+ "eslint": "^10.4.1",
57
+ "eslint-config-prettier": "^10.1.8",
58
+ "prettier": "^3.8.3",
59
+ "publint": "^0.3.21",
60
+ "typescript": "^6.0.3",
61
+ "typescript-eslint": "^8.60.1",
62
+ "vitest": "^4.1.8"
40
63
  }
41
- }
64
+ }
package/.yarn.yml DELETED
@@ -1,11 +0,0 @@
1
- nodeLinker: node-modules
2
-
3
- plugins:
4
- - path: .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs
5
- spec: "@yarnpkg/plugin-workspace-tools"
6
- - path: .yarn/plugins/@yarnpkg/plugin-typescript.cjs
7
- spec: "@yarnpkg/plugin-typescript"
8
- - path: .yarn/plugins/@yarnpkg/plugin-version.cjs
9
- spec: "@yarnpkg/plugin-version"
10
-
11
- yarnPath: .yarn/releases/yarn-3.8.2.cjs
package/.yarnrc.yml DELETED
@@ -1,5 +0,0 @@
1
- compressionLevel: mixed
2
-
3
- enableGlobalCache: false
4
-
5
- nodeLinker: node-modules
package/eslint.config.js DELETED
@@ -1,68 +0,0 @@
1
- import typescriptParser from "@typescript-eslint/parser";
2
- import jslint from "@eslint/js";
3
- import tslint from "typescript-eslint";
4
- import tsPlugin from "@typescript-eslint/eslint-plugin";
5
- import stylistic from "@stylistic/eslint-plugin";
6
-
7
- export default tslint.config(
8
- jslint.configs.recommended,
9
- stylistic.configs.customize({
10
- braceStyle: "1tbs",
11
- commaDangle: "only-multiline",
12
- indent: 2,
13
- semi: true,
14
- }),
15
- ...tslint.configs.recommended,
16
- ...tslint.configs.recommendedTypeChecked,
17
- ...tslint.configs.strictTypeChecked,
18
- {
19
- languageOptions: {
20
- parser: typescriptParser,
21
- parserOptions: { project: ["./tsconfig.json", "./tsconfig.test.json"] },
22
- },
23
-
24
- plugins: { tsPlugin },
25
-
26
- rules: {
27
- "@typescript-eslint/consistent-type-imports": "error",
28
- "@typescript-eslint/no-unnecessary-condition": "error",
29
- "@stylistic/arrow-parens": "off",
30
- "@stylistic/indent": "off",
31
- "@stylistic/indent-binary-ops": "off",
32
- "@stylistic/generator-star-spacing": "off",
33
- "@stylistic/quotes": "off",
34
- "@stylistic/quote-props": "off",
35
- "@stylistic/operator-linebreak": "off",
36
-
37
- // CORE
38
- // According to https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/indent.md
39
- // the default indentation rule can cause eslint to report erroneous style errors.
40
- indent: "off",
41
- "no-console": "off",
42
- eqeqeq: ["warn", "smart"],
43
- "require-yield": "off",
44
- "prettier/prettier": "off",
45
- // "eslint-comments/disable-enable-pair": ["warn", { allowWholeFile: true }],
46
- // TYPESCRIPT
47
- "@typescript-eslint/prefer-reduce-type-parameter": "off",
48
- // We use ts-ignore because we want to suppress type errors... don't warn us about it, please
49
- "@typescript-eslint/ban-ts-comment": "off",
50
- // We don't want to specify the return type everywhere as we get the type safety without it
51
- "@typescript-eslint/explicit-function-return-type": "off",
52
- // We don't want to have to specify accessibility modifiers on every method, but they are part of
53
- // the "recommended" config. This turns it off. Rational: https://github.com/typescript-eslint/typescript-eslint/issues/201
54
- "@typescript-eslint/explicit-member-accessibility": "off",
55
- "@typescript-eslint/restrict-template-expressions": "off",
56
- // Use prettier for indentation, not typescript-eslint:
57
- "@typescript-eslint/indent": "off",
58
- // We want to only warn about empty interfaces as they might just be placeholders for the future
59
- "@typescript-eslint/no-empty-interface": "off",
60
- "@typescript-eslint/no-empty-function": "warn",
61
- "@typescript-eslint/no-inferrable-types": "off",
62
- "@typescript-eslint/no-unused-vars": [
63
- "warn",
64
- { varsIgnorePattern: "^_", argsIgnorePattern: "^_" },
65
- ],
66
- },
67
- },
68
- );
@@ -1,2 +0,0 @@
1
- yarn version minor
2
- yarn release
@@ -1,10 +0,0 @@
1
- yarn prepublish
2
- yarn publish
3
-
4
- $VERSION=$(cat package.json | jq -r '.version')
5
-
6
- git add .
7
- git commit -m "Release $VERSION"
8
- git tag -a "$VERSION" -m "Release $VERSION"
9
- git push --no-verify
10
- git push --tags --no-verify
@@ -1,254 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
-
3
- import {
4
- isExact,
5
- isInstance,
6
- isIntersectionOf,
7
- isNonNullable,
8
- isNot,
9
- isNullable,
10
- isOneOf,
11
- isOptional,
12
- isUnionOf,
13
- } from "./compound.ts";
14
- import { isNumber, isString } from "./primitives.ts";
15
-
16
- describe("isOptional", () => {
17
- const guard = isOptional(isString);
18
-
19
- it("succeeds for the expected type or undefined", () => {
20
- expect(guard("foo")).toBe(true);
21
- expect(guard(undefined)).toBe(true);
22
- });
23
-
24
- it("fails for any other value", () => {
25
- expect(guard(null)).toBe(false);
26
- });
27
- });
28
-
29
- describe("isNullable", () => {
30
- const guard = isNullable(isString);
31
-
32
- it("succeeds for the expected type, null, or undefined", () => {
33
- expect(guard("foo")).toBe(true);
34
- expect(guard(null)).toBe(true);
35
- expect(guard(undefined)).toBe(true);
36
- });
37
-
38
- it("fails any other value", () => {
39
- expect(guard(1)).toBe(false);
40
- });
41
- });
42
-
43
- describe("isNonNullable", () => {
44
- it("succeeds for the expected type, null, or undefined", () => {
45
- expect(isNonNullable("foo")).toBe(true);
46
- expect(isNonNullable(1)).toBe(true);
47
- });
48
-
49
- it("fails any other value", () => {
50
- expect(isNonNullable(null)).toBe(false);
51
- expect(isNonNullable(undefined)).toBe(false);
52
- });
53
- });
54
-
55
- describe("isNot", () => {
56
- const guard = isNot(isString);
57
-
58
- it("succeeds for any other value", () => {
59
- expect(guard(1)).toBe(true);
60
- });
61
-
62
- it("fails for the isNot type", () => {
63
- expect(guard("foo")).toBe(false);
64
- });
65
- });
66
-
67
- describe("isOneOf", () => {
68
- const guard = isOneOf(1, "foo", true);
69
-
70
- it("succeeds for all of the values", () => {
71
- expect(guard(1)).toBe(true);
72
- expect(guard("foo")).toBe(true);
73
- expect(guard(true)).toBe(true);
74
- });
75
-
76
- expect(guard(2)).toBe(false);
77
- it("fails any other value", () => {
78
- expect(guard(null)).toBe(false);
79
- expect(guard("bar")).toBe(false);
80
- expect(guard(false)).toBe(false);
81
- });
82
- });
83
-
84
- describe("isUnionOf", () => {
85
- const guard = isUnionOf(isString, isNumber);
86
- it("succeeds for the union types", () => {
87
- expect(guard(1)).toBe(true);
88
- expect(guard("foo")).toBe(true);
89
- });
90
-
91
- it("fails for any other type", () => {
92
- expect(guard(true)).toBe(false);
93
- expect(guard(null)).toBe(false);
94
- });
95
- });
96
-
97
- describe("isIntersectionOf", () => {
98
- const guard = isIntersectionOf(isOneOf("foo", "bar", "baz"), isExact("foo"));
99
-
100
- it("succeeds for the intersection", () => {
101
- expect(guard("foo")).toBe(true);
102
- });
103
-
104
- it("fails for any other type", () => {
105
- expect(guard("bar")).toBe(false);
106
- expect(guard(1)).toBe(false);
107
- });
108
- });
109
-
110
- describe("isExact", () => {
111
- describe("deep", () => {
112
- const guard = isExact({ foo: "bar", hello: ["world", { key: "test" }] });
113
-
114
- it("succeeds for the exact value", () => {
115
- expect(guard({ foo: "bar", hello: ["world", { key: "test" }] })).toBe(
116
- true,
117
- );
118
- });
119
-
120
- it("fails for any other value", () => {
121
- expect(guard({ foo: "baz", hello: ["world", { key: "test" }] })).toBe(
122
- false,
123
- );
124
- expect(guard({ foo: "bar", hello: ["world", { key: "tester" }] })).toBe(
125
- false,
126
- );
127
- expect(guard(1)).toBe(false);
128
- });
129
- });
130
-
131
- describe("shallow", () => {
132
- const guard = isExact("foo");
133
-
134
- it("succeeds for the exact value", () => {
135
- expect(guard("foo")).toBe(true);
136
- });
137
-
138
- it("fails for any other value", () => {
139
- expect(guard("bar")).toBe(false);
140
- expect(guard(1)).toBe(false);
141
- });
142
- });
143
-
144
- describe("Date", () => {
145
- const date = new Date("2000-01-01");
146
- const guard = isExact(date);
147
-
148
- it("succeeds for the exact same date", () => {
149
- expect(guard(new Date("2000-01-01"))).toBe(true);
150
- });
151
-
152
- it("fails for different dates", () => {
153
- expect(guard(new Date("2000-01-02"))).toBe(false);
154
- expect(guard(date.getTime())).toBe(false);
155
- });
156
- });
157
-
158
- describe("RegExp", () => {
159
- const regex = /test/gi;
160
- const guard = isExact(regex);
161
-
162
- it("succeeds for the exact same regex", () => {
163
- expect(guard(/test/gi)).toBe(true);
164
- });
165
-
166
- it("fails for different regexes", () => {
167
- expect(guard(/test/i)).toBe(false);
168
- expect(guard(/test2/gi)).toBe(false);
169
- expect(guard("test")).toBe(false);
170
- });
171
- });
172
-
173
- describe("Error", () => {
174
- const error = new Error("test error");
175
- const guard = isExact(error);
176
-
177
- it("succeeds for the exact same error", () => {
178
- expect(guard(new Error("test error"))).toBe(true);
179
- });
180
-
181
- it("fails for different errors", () => {
182
- expect(guard(new Error("other error"))).toBe(false);
183
- expect(guard(new TypeError("test error"))).toBe(false);
184
- expect(guard("test error")).toBe(false);
185
- });
186
- });
187
-
188
- describe("Map", () => {
189
- const map = new Map([["key", "value"]]);
190
- const guard = isExact(map);
191
-
192
- it("succeeds for the exact same map", () => {
193
- expect(guard(new Map([["key", "value"]]))).toBe(true);
194
- });
195
-
196
- it("fails for different maps", () => {
197
- expect(guard(new Map([["key", "other"]]))).toBe(false);
198
- expect(guard(new Map([["other", "value"]]))).toBe(false);
199
- expect(guard(new Map())).toBe(false);
200
- expect(guard({})).toBe(false);
201
- });
202
- });
203
-
204
- describe("Set", () => {
205
- const set = new Set([1, 2, 3]);
206
- const guard = isExact(set);
207
-
208
- it("succeeds for the exact same set", () => {
209
- expect(guard(new Set([1, 2, 3]))).toBe(true);
210
- });
211
-
212
- it("fails for different sets", () => {
213
- expect(guard(new Set([1, 2]))).toBe(false);
214
- expect(guard(new Set([1, 2, 4]))).toBe(false);
215
- expect(guard([1, 2, 3])).toBe(false);
216
- });
217
- });
218
-
219
- describe("Typed Array", () => {
220
- const array = new Uint8Array([1, 2, 3]);
221
- const guard = isExact(array);
222
-
223
- it("succeeds for the exact same typed array", () => {
224
- expect(guard(new Uint8Array([1, 2, 3]))).toBe(true);
225
- });
226
-
227
- it("fails for different typed arrays", () => {
228
- expect(guard(new Uint8Array([1, 2]))).toBe(false);
229
- expect(guard(new Uint8Array([1, 2, 4]))).toBe(false);
230
- expect(guard(new Int8Array([1, 2, 3]))).toBe(false);
231
- expect(guard([1, 2, 3])).toBe(false);
232
- });
233
- });
234
- });
235
-
236
- describe("isInstance", () => {
237
- class Test {
238
- foo: string = "bar";
239
-
240
- constructor(foo: string) {
241
- this.foo = foo;
242
- }
243
- }
244
- const guard = isInstance(Test);
245
-
246
- it("succeeds for an instance", () => {
247
- expect(guard(new Test("baz"))).toBe(true);
248
- });
249
-
250
- it("fails for any other type", () => {
251
- expect(guard({})).toBe(false);
252
- expect(guard(null)).toBe(false);
253
- });
254
- });
package/src/compound.ts DELETED
@@ -1,196 +0,0 @@
1
- import { objectKeys } from "./helpers.js";
2
-
3
- import type { GuardSchemaOf, ObjectKey } from "./helpers.js";
4
- import type { Guard } from "./types.js";
5
-
6
- export function isOptional<T>(guard: Guard<T>): Guard<T | undefined> {
7
- if (typeof guard !== "function") {
8
- throw new TypeError(
9
- `isOptional expects a guard parameter. Got instead: ${guard}`,
10
- );
11
- }
12
-
13
- return (value): value is T | undefined => value === undefined || guard(value);
14
- }
15
-
16
- export function isNullable<T>(guard: Guard<T>): Guard<T | null | undefined> {
17
- if (typeof guard !== "function") {
18
- throw new TypeError(
19
- `isNullable expects a guard parameter. Got instead: ${guard}`,
20
- );
21
- }
22
-
23
- return (value: unknown): value is T | null | undefined =>
24
- value == null || guard(value);
25
- }
26
-
27
- export function isNonNullable<T extends NonNullable<unknown>>(
28
- value: T | null | undefined,
29
- ): value is T {
30
- return value != null;
31
- }
32
-
33
- export function isNot<const N>(guard: Guard<N>) {
34
- if (typeof guard !== "function") {
35
- throw new TypeError(
36
- `isNot expects a guard parameter. Got instead: ${guard}`,
37
- );
38
- }
39
-
40
- return <const T>(value: T | N): value is T => !guard(value);
41
- }
42
-
43
- export function isOneOf<
44
- const T extends (string | number | boolean | symbol | null | undefined)[],
45
- >(...values: T): Guard<T[number]> {
46
- const valueSet = new Set(values);
47
- return (value) => (valueSet.has as Guard<T[number]>)(value);
48
- }
49
-
50
- export function isUnionOf<T extends readonly unknown[]>(
51
- ...guards: GuardSchemaOf<T>
52
- ): Guard<T[number]> {
53
- if (guards.every((guard) => typeof guard !== "function")) {
54
- throw new TypeError(
55
- `isUnionOf expects N guard parameters. Got instead: ${guards}`,
56
- );
57
- }
58
-
59
- return (value): value is T => guards.some((guard) => guard(value));
60
- }
61
-
62
- type ArrayToIntersection<A extends readonly unknown[]> = A extends [
63
- infer T,
64
- ...infer R,
65
- ]
66
- ? T & ArrayToIntersection<R>
67
- : unknown;
68
-
69
- export function isIntersectionOf<T extends readonly unknown[]>(
70
- ...guards: GuardSchemaOf<T>
71
- ): Guard<ArrayToIntersection<T>> {
72
- if (guards.every((guard) => typeof guard !== "function")) {
73
- throw new TypeError(
74
- `isIntersectionOf expects N guard parameters. Got instead: ${guards}`,
75
- );
76
- }
77
-
78
- return (value): value is ArrayToIntersection<T> =>
79
- guards.every((guard) => guard(value));
80
- }
81
-
82
- export function isExact<const T>(expected: T): Guard<T> {
83
- // Primitive checks
84
- if (typeof expected !== "object" || expected === null) {
85
- // NaN check
86
- if (typeof expected === "number" && Number.isNaN(expected)) {
87
- return (value): value is T =>
88
- typeof value === "number" && Number.isNaN(value);
89
- }
90
- return (value): value is T => value === expected;
91
- }
92
-
93
- // Date checks
94
- if (expected instanceof Date) {
95
- return (value): value is T =>
96
- value instanceof Date && expected.getTime() === value.getTime();
97
- }
98
-
99
- // RegExp checks
100
- if (expected instanceof RegExp) {
101
- return (value): value is T =>
102
- value instanceof RegExp &&
103
- expected.source === value.source &&
104
- expected.flags === value.flags;
105
- }
106
-
107
- // Error checks
108
- if (expected instanceof Error) {
109
- return (value): value is T =>
110
- value instanceof Error &&
111
- expected.name === value.name &&
112
- expected.message === value.message;
113
- }
114
-
115
- // Map checks
116
- if (expected instanceof Map) {
117
- const guards = Array.from(
118
- expected
119
- .entries()
120
- .map(([k, v]) => [k, isExact(v)] as [string, Guard<unknown>]),
121
- );
122
-
123
- return (value): value is T =>
124
- value instanceof Map &&
125
- expected.size === value.size &&
126
- guards.every(([k, guard]) => value.has(k) && guard(value.get(k)));
127
- }
128
-
129
- // Set checks
130
- if (expected instanceof Set) {
131
- const guards = new Map(
132
- expected.values().map((v): [unknown, Guard<unknown>] => [v, isExact(v)]),
133
- );
134
-
135
- return (value): value is T =>
136
- value instanceof Set &&
137
- expected.size === value.size &&
138
- value.values().every((v) => guards.get(v)?.(v));
139
- }
140
-
141
- // Typed Array checks
142
- if (ArrayBuffer.isView(expected) && !(expected instanceof DataView)) {
143
- const guards = Array.from(expected as unknown as ArrayLike<number>).map(
144
- (v) => isExact(v),
145
- );
146
-
147
- return (value): value is T =>
148
- ArrayBuffer.isView(value) &&
149
- !(value instanceof DataView) &&
150
- expected.constructor === value.constructor &&
151
- (expected as unknown as ArrayLike<number>).length ===
152
- (value as unknown as ArrayLike<number>).length &&
153
- guards.every((guard, i) =>
154
- guard((value as unknown as ArrayLike<number>)[i]),
155
- );
156
- }
157
-
158
- // Array checks
159
- if (Array.isArray(expected)) {
160
- const guards = expected.map((v) => isExact(v));
161
-
162
- return (value): value is T =>
163
- Array.isArray(value) &&
164
- expected.length === value.length &&
165
- guards.every((guard, i) => guard(value[i]));
166
- }
167
-
168
- // Object checks
169
- const guards = objectKeys(expected).map(
170
- (k) => [k, isExact(expected[k])] as [ObjectKey, Guard<unknown>],
171
- );
172
-
173
- function objectEntriesChecks(value: object): value is T & object {
174
- const valueKeys = new Set(objectKeys(value) as ObjectKey[]);
175
- return (
176
- guards.length === valueKeys.size &&
177
- guards.every(
178
- ([k, guard]) =>
179
- valueKeys.has(k) && guard((value as Record<ObjectKey, unknown>)[k]),
180
- )
181
- );
182
- }
183
-
184
- return (value): value is T =>
185
- typeof value === "object" &&
186
- value != null &&
187
- !Array.isArray(value) &&
188
- objectEntriesChecks(value);
189
- }
190
-
191
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
192
- export function isInstance<C extends abstract new (...args: any) => unknown>(
193
- cls: C,
194
- ): Guard<InstanceType<C>> {
195
- return (value): value is InstanceType<C> => value instanceof cls;
196
- }
package/src/errors.ts DELETED
@@ -1,17 +0,0 @@
1
- import type { Guard } from "./types.js";
2
-
3
- export class GuardError extends Error {
4
- name = "GuardError";
5
- }
6
-
7
- export function guardOrThrow<T>(
8
- value: unknown,
9
- guard: Guard<T>,
10
- hint?: string,
11
- ): T {
12
- if (guard(value)) {
13
- return value;
14
- } else {
15
- throw new GuardError(hint ?? "Guard error");
16
- }
17
- }
package/src/helpers.ts DELETED
@@ -1,22 +0,0 @@
1
- import type { Guard } from "./types.js";
2
-
3
- export type GuardSchemaOf<O extends object> = {
4
- [K in keyof O]: Guard<O[K]>;
5
- };
6
-
7
- export type ObjectKey = string | number | symbol;
8
-
9
- export const objectKeys = <K extends ObjectKey>(obj: Record<K, unknown>): K[] =>
10
- (Object.getOwnPropertyNames(obj) as K[]).concat(
11
- Object.getOwnPropertySymbols(obj) as K[],
12
- );
13
-
14
- export function omit<O extends NonNullable<unknown>>(
15
- obj: O,
16
- key: keyof O,
17
- ): { [K in keyof O as K extends typeof key ? never : K]: O[K] } {
18
- const omitted = { ...obj };
19
- // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
20
- delete omitted[key];
21
- return omitted;
22
- }
package/src/index.ts DELETED
@@ -1,6 +0,0 @@
1
- export * from "./compound.js";
2
- export * from "./errors.js";
3
- export * from "./macros.js";
4
- export * from "./primitives.js";
5
- export * from "./structures.js";
6
- export * from "./types.js";
@@ -1,42 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
-
3
- import { isDiscriminatedObjectOf } from "./macros.ts";
4
- import { isString } from "./primitives.ts";
5
- import { isObjectOf } from "./structures.ts";
6
-
7
- describe("isDiscriminatedObjectOf", () => {
8
- describe("no key override", () => {
9
- const guard = isDiscriminatedObjectOf(
10
- "foo",
11
- isObjectOf({ bar: isString }, true),
12
- );
13
-
14
- it("succeeds for an object of the value", () => {
15
- expect(guard({ type: "foo", bar: "baz" })).toBe(true);
16
- });
17
-
18
- it("fails for any other value", () => {
19
- expect(guard({ type: "foo" })).toBe(false);
20
- expect(guard({ bar: "baz" })).toBe(false);
21
- expect(guard(1)).toBe(false);
22
- });
23
- });
24
-
25
- describe("overriding key", () => {
26
- const guard = isDiscriminatedObjectOf(
27
- "foo",
28
- isObjectOf({ bar: isString }, true),
29
- "test",
30
- );
31
-
32
- it("succeeds for an object of the value", () => {
33
- expect(guard({ test: "foo", bar: "baz" })).toBe(true);
34
- });
35
-
36
- it("fails for any other value", () => {
37
- expect(guard({ test: "foo" })).toBe(false);
38
- expect(guard({ bar: "baz" })).toBe(false);
39
- expect(guard(1)).toBe(false);
40
- });
41
- });
42
- });
package/src/macros.ts DELETED
@@ -1,30 +0,0 @@
1
- import { isExact } from "./compound.js";
2
- import { omit } from "./helpers.js";
3
- import { isObjectOf } from "./structures.js";
4
-
5
- import type { ObjectKey } from "./helpers.js";
6
- import type { Guard } from "./types.js";
7
-
8
- export function isDiscriminatedObjectOf<
9
- const T extends string,
10
- O extends object,
11
- >(value: T, guard: Guard<O>): Guard<{ type: T } & O>;
12
- export function isDiscriminatedObjectOf<
13
- const T extends string,
14
- O extends object,
15
- const K extends ObjectKey,
16
- >(value: T, guard: Guard<O>, key: K): Guard<{ [S in K]: T } & O>;
17
- export function isDiscriminatedObjectOf<
18
- const T extends string,
19
- O extends object,
20
- >(
21
- value: T,
22
- guard: Guard<O>,
23
- key: ObjectKey = "type",
24
- ): Guard<Record<ObjectKey, T> & O> {
25
- const discriminatorGuard = isObjectOf({ [key]: isExact(value) }) as Guard<
26
- Record<ObjectKey, T>
27
- >;
28
- return (value): value is Record<ObjectKey, T> & O =>
29
- discriminatorGuard(value) && guard(omit(value, key));
30
- }
@@ -1,94 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
-
3
- import {
4
- isBoolean,
5
- isFunction,
6
- isInteger,
7
- isNull,
8
- isNumber,
9
- isString,
10
- isUndefined,
11
- isUnknown,
12
- } from "./primitives.ts";
13
-
14
- describe("isUnknown", () => {
15
- it("succeeds for any value", () => {
16
- expect(isUnknown("unknown")).toBe(true);
17
- });
18
- });
19
-
20
- describe("isAnyFunction", () => {
21
- it("succeeds for a function", () => {
22
- // eslint-disable-next-line @typescript-eslint/no-empty-function
23
- expect(isFunction(() => {})).toBe(true);
24
- });
25
-
26
- it("fails for any other value", () => {
27
- expect(isFunction(1)).toBe(false);
28
- });
29
- });
30
-
31
- describe("isNull", () => {
32
- it("succeeds for null", () => {
33
- expect(isNull(null)).toBe(true);
34
- });
35
-
36
- it("fails for any other value", () => {
37
- expect(isNull(undefined)).toBe(false);
38
- });
39
- });
40
-
41
- describe("isUndefined", () => {
42
- it("succeeds for undefined", () => {
43
- expect(isUndefined(undefined)).toBe(true);
44
- });
45
-
46
- it("fails for any other value", () => {
47
- expect(isUndefined(null)).toBe(false);
48
- });
49
- });
50
-
51
- describe("isNumber", () => {
52
- it("succeeds for a number", () => {
53
- expect(isNumber(1.23)).toBe(true);
54
- });
55
-
56
- it("fails for any other type", () => {
57
- expect(isNumber("foo")).toBe(false);
58
- });
59
- });
60
-
61
- describe("isInteger", () => {
62
- it("succeeds for an integer", () => {
63
- expect(isInteger(1)).toBe(true);
64
- });
65
-
66
- it("fails for a non-integer", () => {
67
- expect(isInteger(1.23)).toBe(false);
68
- });
69
-
70
- it("fails for any other type", () => {
71
- expect(isInteger("foo")).toBe(false);
72
- });
73
- });
74
-
75
- describe("isString", () => {
76
- it("succeeds for a string", () => {
77
- expect(isString("Foo bar")).toBe(true);
78
- });
79
-
80
- it("fails for other types", () => {
81
- expect(isString(true)).toBe(false);
82
- });
83
- });
84
-
85
- describe("isBoolean", () => {
86
- it("succeeds for a boolean", () => {
87
- expect(isBoolean(true)).toBe(true);
88
- expect(isBoolean(false)).toBe(true);
89
- });
90
-
91
- it("fails for other types", () => {
92
- expect(isBoolean("foo")).toBe(false);
93
- });
94
- });
package/src/primitives.ts DELETED
@@ -1,25 +0,0 @@
1
- import type { Guard } from "./types.js";
2
-
3
- export const isUnknown: Guard<unknown> = (_value): _value is unknown => true;
4
-
5
- export const isNull: Guard<null> = (value) => value === null;
6
-
7
- export const isUndefined: Guard<undefined> = (value) => value === undefined;
8
-
9
- export const isNumber: Guard<number> = (value) => typeof value === "number";
10
-
11
- export const isInteger: Guard<number> = (value): value is number =>
12
- Number.isInteger(value);
13
-
14
- export const isString: Guard<string> = (value) => typeof value === "string";
15
-
16
- export const isSymbol: Guard<symbol> = (value) => typeof value === "symbol";
17
-
18
- export const isBoolean: Guard<boolean> = (value) =>
19
- value === true || value === false;
20
-
21
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
- export const isFunction: Guard<(...args: any[]) => unknown> = (
23
- value,
24
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
- ): value is (...args: any[]) => unknown => typeof value === "function";
@@ -1,172 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
-
3
- import { isBoolean, isNumber, isString, isSymbol } from "./primitives.ts";
4
- import {
5
- isAnyArray,
6
- isAnyRecord,
7
- isArrayOf,
8
- isObjectOf,
9
- isRecordOf,
10
- isTupleOf,
11
- } from "./structures.ts";
12
-
13
- describe("isAnyArray", () => {
14
- it("succeeds for an array", () => {
15
- expect(isAnyArray([])).toBe(true);
16
- expect(isAnyArray(["foo", 1, true, null])).toBe(true);
17
- });
18
-
19
- it("fails for any other value", () => {
20
- expect(isAnyArray({})).toBe(false);
21
- expect(isAnyArray(1)).toBe(false);
22
- });
23
- });
24
-
25
- describe("isAnyRecord", () => {
26
- it("succeeds for a record", () => {
27
- expect(isAnyRecord({})).toBe(true);
28
- expect(isAnyRecord({ foo: "bar", baz: 1 })).toBe(true);
29
- });
30
-
31
- it("fails for any other value", () => {
32
- expect(isAnyRecord([])).toBe(false);
33
- expect(isAnyRecord(1)).toBe(false);
34
- });
35
- });
36
-
37
- describe("isArrayOf", () => {
38
- const guard = isArrayOf(isString);
39
-
40
- it("succeeds for an array of the value", () => {
41
- expect(guard([])).toBe(true);
42
- expect(guard(["foo", "bar", "baz"])).toBe(true);
43
- });
44
-
45
- it("fails for any other value", () => {
46
- expect(guard([1, 2, 3])).toBe(false);
47
- expect(guard(["foo", "bar", null])).toBe(false);
48
- expect(guard(1)).toBe(false);
49
- });
50
- });
51
-
52
- describe("isTupleOf", () => {
53
- const guard = isTupleOf(isNumber, isString, isBoolean);
54
-
55
- it("succeeds for an array of the value", () => {
56
- expect(guard([1, "foo", true])).toBe(true);
57
- });
58
-
59
- it("fails for any other value", () => {
60
- expect(guard([1, "foo", true, null])).toBe(false);
61
- expect(guard([1, "foo"])).toBe(false);
62
- expect(guard(1)).toBe(false);
63
- });
64
- });
65
-
66
- describe("isObjectOf", () => {
67
- describe("leaky", () => {
68
- const barSymbol = Symbol("bar");
69
- const guard = isObjectOf({
70
- foo: isString,
71
- [barSymbol]: isNumber,
72
- baz: isObjectOf({
73
- qux: isSymbol,
74
- }),
75
- });
76
-
77
- it("succeeds for an object of the value", () => {
78
- expect(
79
- guard({
80
- foo: "hello",
81
- [barSymbol]: 1,
82
- baz: { qux: Symbol("world!") },
83
- quux: "this should not be checked",
84
- }),
85
- ).toBe(true);
86
- });
87
-
88
- it("fails for any other value", () => {
89
- expect(
90
- guard({
91
- foo: "hello",
92
- [barSymbol]: "FAIL",
93
- baz: { qux: Symbol("world!") },
94
- }),
95
- ).toBe(false);
96
- expect(guard(1)).toBe(false);
97
- });
98
- });
99
-
100
- describe("exact keys", () => {
101
- const barSymbol = Symbol("bar");
102
- const guard = isObjectOf(
103
- {
104
- foo: isString,
105
- [barSymbol]: isNumber,
106
- baz: isObjectOf({
107
- qux: isSymbol,
108
- }),
109
- },
110
- true,
111
- );
112
-
113
- it("succeeds for an object of the value", () => {
114
- expect(
115
- guard({
116
- foo: "hello",
117
- [barSymbol]: 1,
118
- baz: { qux: Symbol("world!") },
119
- }),
120
- ).toBe(true);
121
- });
122
-
123
- it("fails for any other value", () => {
124
- expect(
125
- guard({
126
- foo: "hello",
127
- [barSymbol]: 1,
128
- baz: { qux: Symbol("world!") },
129
- quux: "this should be checked",
130
- }),
131
- ).toBe(false);
132
- expect(
133
- guard({
134
- foo: "hello",
135
- [barSymbol]: "FAIL",
136
- baz: { qux: Symbol("world!") },
137
- }),
138
- ).toBe(false);
139
- expect(guard(1)).toBe(false);
140
- });
141
- });
142
- });
143
-
144
- describe("isRecordOf", () => {
145
- describe("with valueGuard", () => {
146
- const guard = isRecordOf(isString, isNumber);
147
-
148
- it("succeeds for a record of the key/value types", () => {
149
- expect(guard({})).toBe(true);
150
- expect(guard({ foo: 1, bar: 2 })).toBe(true);
151
- });
152
-
153
- it("fails for any other value", () => {
154
- expect(guard({ foo: "bar", baz: 1 })).toBe(false);
155
- expect(guard(1)).toBe(false);
156
- });
157
- });
158
-
159
- describe("without valueGuard", () => {
160
- const guard = isRecordOf(isString);
161
-
162
- it("succeeds for a record with the key type", () => {
163
- expect(guard({})).toBe(true);
164
- expect(guard({ foo: 1, bar: "baz" })).toBe(true);
165
- });
166
-
167
- it("fails for any other value", () => {
168
- expect(guard({ 1: "foo", [Symbol("bar")]: 1 })).toBe(false);
169
- expect(guard(1)).toBe(false);
170
- });
171
- });
172
- });
package/src/structures.ts DELETED
@@ -1,110 +0,0 @@
1
- import { objectKeys } from "./helpers.js";
2
-
3
- import type { GuardSchemaOf, ObjectKey } from "./helpers.js";
4
- import type { Guard } from "./types.js";
5
-
6
- export const isAnyArray: Guard<unknown[]> = (value) => Array.isArray(value);
7
-
8
- export const isAnyRecord: Guard<Record<ObjectKey, unknown>> = (
9
- value,
10
- ): value is Record<ObjectKey, unknown> =>
11
- value != null && typeof value === "object" && !Array.isArray(value);
12
-
13
- export function isArrayOf<T>(guard: Guard<T>): Guard<T[]> {
14
- if (typeof guard !== "function") {
15
- throw new TypeError(
16
- `isArrayOf expects a guard parameter. Got instead: ${guard}`,
17
- );
18
- }
19
-
20
- return (value): value is T[] => Array.isArray(value) && value.every(guard);
21
- }
22
-
23
- export function isTupleOf<T extends readonly unknown[]>(
24
- ...tupleGuards: GuardSchemaOf<T>
25
- ): Guard<T> {
26
- if (tupleGuards.some((guard) => typeof guard !== "function")) {
27
- throw new TypeError(
28
- `isTupleOf expects guard parameters. Got instead: ${JSON.stringify(
29
- tupleGuards,
30
- )}`,
31
- );
32
- }
33
-
34
- return (value): value is T =>
35
- Array.isArray(value) &&
36
- value.length === tupleGuards.length &&
37
- tupleGuards.every((guard, i) => guard(value[i]));
38
- }
39
-
40
- export function isRecordOf<K extends ObjectKey>(
41
- keyGuard: Guard<K>,
42
- ): Guard<Record<K, unknown>>;
43
- export function isRecordOf<K extends ObjectKey, V>(
44
- keyGuard: Guard<K>,
45
- valueGuard: Guard<V>,
46
- ): Guard<Record<K, V>>;
47
- export function isRecordOf<K extends ObjectKey, V>(
48
- keyGuard: Guard<K>,
49
- valueGuard?: Guard<V>,
50
- ): Guard<Record<K, V>> {
51
- if (typeof keyGuard !== "function") {
52
- throw new TypeError(
53
- `isRecordOf keyGuard expects a guard parameter. Got instead: ${keyGuard}`,
54
- );
55
- } else if (valueGuard != null && typeof valueGuard !== "function") {
56
- throw new TypeError(
57
- `isRecordOf valueGuard expects an optional guard parameter. Got instead: ${valueGuard}`,
58
- );
59
- }
60
-
61
- return (value): value is Record<K, V> =>
62
- value != null &&
63
- typeof value === "object" &&
64
- !Array.isArray(value) &&
65
- objectKeys(value).every(
66
- (key) => keyGuard(key) && (valueGuard?.(value[key]) ?? true),
67
- );
68
- }
69
-
70
- type IsObjectOfGuard<O extends object> = O extends unknown[]
71
- ? never
72
- : // eslint-disable-next-line @typescript-eslint/no-empty-object-type
73
- {} extends O
74
- ? never
75
- : Guard<O>;
76
-
77
- export function isObjectOf<O extends object>(
78
- schema: GuardSchemaOf<O>,
79
- exactKeys: boolean = false,
80
- ): IsObjectOfGuard<O> {
81
- const schemaUnknown: unknown = schema;
82
- if (schemaUnknown == null || typeof schemaUnknown !== "object") {
83
- throw new TypeError(
84
- `isObjectOf expects a guard schema object. Got instead: ${schemaUnknown}`,
85
- );
86
- }
87
-
88
- const schemaKeys = objectKeys(schema);
89
- if (
90
- Array.isArray(schema) ||
91
- schemaKeys.some((key) => typeof schema[key] !== "function")
92
- ) {
93
- throw new TypeError(
94
- `isObjectOf expects a guard schema object. Got instead ${JSON.stringify(
95
- schema,
96
- )}`,
97
- );
98
- } else if (schemaKeys.length === 0) {
99
- throw new Error("isObjectOf received an empty schema");
100
- }
101
-
102
- return ((value): value is O =>
103
- value != null &&
104
- typeof value === "object" &&
105
- !Array.isArray(value) &&
106
- (!exactKeys || schemaKeys.length === objectKeys(value).length) &&
107
- schemaKeys.every(
108
- (key) => key in value && schema[key]((value as O)[key]),
109
- )) as IsObjectOfGuard<O>;
110
- }
package/src/types.ts DELETED
@@ -1,4 +0,0 @@
1
- export type Guard<T> = (value: unknown) => value is T;
2
-
3
- export type TypeFromGuard<G extends Guard<unknown>> =
4
- G extends Guard<infer T> ? T : never;
@@ -1,24 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "allowJs": false,
4
- "allowSyntheticDefaultImports": true,
5
- "declaration": true,
6
- "downlevelIteration": true,
7
- "esModuleInterop": true,
8
- "forceConsistentCasingInFileNames": true,
9
- "isolatedModules": true,
10
- "lib": ["dom", "dom.iterable", "esnext"],
11
- "module": "esnext",
12
- "moduleResolution": "Bundler",
13
- "noErrorTruncation": true,
14
- "noFallthroughCasesInSwitch": true,
15
- "noUncheckedIndexedAccess": true,
16
- "resolveJsonModule": true,
17
- "rewriteRelativeImportExtensions": true,
18
- "skipLibCheck": true,
19
- "sourceMap": true,
20
- "strict": true,
21
- "target": "esnext",
22
- "types": ["node"]
23
- }
24
- }
package/tsconfig.json DELETED
@@ -1,9 +0,0 @@
1
- {
2
- "exclude": ["**/*.test.ts"],
3
- "extends": "./tsconfig.common.json",
4
- "include": ["src"],
5
- "compilerOptions": {
6
- "outDir": "dist",
7
- "sourceRoot": "src"
8
- }
9
- }
@@ -1,4 +0,0 @@
1
- {
2
- "extends": "./tsconfig.common.json",
3
- "include": ["**/*.test.ts"]
4
- }