@sprucelabs/schema 28.1.4 → 28.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,32 @@
1
- declare const assertOptions: <Options extends Record<string, any>, Keys extends keyof Options = keyof Options>(options: Options, toCheck: Keys[], friendlyMessage?: string | undefined) => Options & Required<Pick<Options, Keys>>;
2
- export default assertOptions;
1
+ declare type ForceRequired<Options, Key extends Paths<Options>> = Required<Pick<Options, Extract<Key, keyof Options>>>;
2
+ export default function assertOptions<Options, Key extends Paths<Options> = Paths<Options>>(options: Options, toCheck: Key[], friendlyMessage?: string): Options & ForceRequired<Options, Key>;
3
+ declare type Join<K, P> = K extends string | number ? P extends string | number ? `${K}${'' extends P ? '' : '.'}${P}` : never : never;
4
+ declare type Prev = [
5
+ never,
6
+ 0,
7
+ 1,
8
+ 2,
9
+ 3,
10
+ 4,
11
+ 5,
12
+ 6,
13
+ 7,
14
+ 8,
15
+ 9,
16
+ 10,
17
+ 11,
18
+ 12,
19
+ 13,
20
+ 14,
21
+ 15,
22
+ 16,
23
+ 17,
24
+ 18,
25
+ 19,
26
+ 20,
27
+ ...0[]
28
+ ];
29
+ declare type Paths<T, D extends number = 10> = [D] extends [never] ? never : T extends object ? {
30
+ [K in keyof T]-?: K extends string | number ? `${K}` | Join<K, Paths<T[K], Prev[D]>> : never;
31
+ }[keyof T] : '';
32
+ export {};
@@ -1,8 +1,10 @@
1
+ import get from 'just-safe-get';
1
2
  import SpruceError from '../errors/SpruceError.js';
2
- const assertOptions = function (options, toCheck, friendlyMessage) {
3
+ //@ts-ignore
4
+ export default function assertOptions(options, toCheck, friendlyMessage) {
3
5
  const missing = [];
4
6
  for (const check of toCheck) {
5
- const value = options === null || options === void 0 ? void 0 : options[check];
7
+ const value = get(options !== null && options !== void 0 ? options : {}, check);
6
8
  //@ts-ignore
7
9
  if (value === null || typeof value === 'undefined') {
8
10
  missing.push(check);
@@ -16,5 +18,4 @@ const assertOptions = function (options, toCheck, friendlyMessage) {
16
18
  });
17
19
  }
18
20
  return options;
19
- };
20
- export default assertOptions;
21
+ }
@@ -1,2 +1,32 @@
1
- declare const assertOptions: <Options extends Record<string, any>, Keys extends keyof Options = keyof Options>(options: Options, toCheck: Keys[], friendlyMessage?: string | undefined) => Options & Required<Pick<Options, Keys>>;
2
- export default assertOptions;
1
+ declare type ForceRequired<Options, Key extends Paths<Options>> = Required<Pick<Options, Extract<Key, keyof Options>>>;
2
+ export default function assertOptions<Options, Key extends Paths<Options> = Paths<Options>>(options: Options, toCheck: Key[], friendlyMessage?: string): Options & ForceRequired<Options, Key>;
3
+ declare type Join<K, P> = K extends string | number ? P extends string | number ? `${K}${'' extends P ? '' : '.'}${P}` : never : never;
4
+ declare type Prev = [
5
+ never,
6
+ 0,
7
+ 1,
8
+ 2,
9
+ 3,
10
+ 4,
11
+ 5,
12
+ 6,
13
+ 7,
14
+ 8,
15
+ 9,
16
+ 10,
17
+ 11,
18
+ 12,
19
+ 13,
20
+ 14,
21
+ 15,
22
+ 16,
23
+ 17,
24
+ 18,
25
+ 19,
26
+ 20,
27
+ ...0[]
28
+ ];
29
+ declare type Paths<T, D extends number = 10> = [D] extends [never] ? never : T extends object ? {
30
+ [K in keyof T]-?: K extends string | number ? `${K}` | Join<K, Paths<T[K], Prev[D]>> : never;
31
+ }[keyof T] : '';
32
+ export {};
@@ -3,11 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ const just_safe_get_1 = __importDefault(require("just-safe-get"));
6
7
  const SpruceError_1 = __importDefault(require("../errors/SpruceError"));
7
- const assertOptions = function (options, toCheck, friendlyMessage) {
8
+ //@ts-ignore
9
+ function assertOptions(options, toCheck, friendlyMessage) {
8
10
  const missing = [];
9
11
  for (const check of toCheck) {
10
- const value = options === null || options === void 0 ? void 0 : options[check];
12
+ const value = (0, just_safe_get_1.default)(options !== null && options !== void 0 ? options : {}, check);
11
13
  //@ts-ignore
12
14
  if (value === null || typeof value === 'undefined') {
13
15
  missing.push(check);
@@ -21,5 +23,5 @@ const assertOptions = function (options, toCheck, friendlyMessage) {
21
23
  });
22
24
  }
23
25
  return options;
24
- };
26
+ }
25
27
  exports.default = assertOptions;
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "!build/__tests__",
9
9
  "esm"
10
10
  ],
11
- "version": "28.1.4",
11
+ "version": "28.2.1",
12
12
  "main": "./build/index.js",
13
13
  "types": "./build/index.d.ts",
14
14
  "module": "./build/esm/index.js",
@@ -69,7 +69,9 @@
69
69
  "@sprucelabs/error": "^5.0.454",
70
70
  "@sprucelabs/test": "^7.7.314",
71
71
  "email-validator": "^2.0.4",
72
- "lodash": "^4.17.21"
72
+ "just-safe-get": "^4.0.1",
73
+ "lodash": "^4.17.21",
74
+ "ts-toolbelt": "^9.6.0"
73
75
  },
74
76
  "devDependencies": {
75
77
  "@sprucelabs/esm-postbuild": "^1.0.424",
@@ -77,7 +79,7 @@
77
79
  "@sprucelabs/jest-sheets-reporter": "^1.3.29",
78
80
  "@sprucelabs/resolve-path-aliases": "^1.1.14",
79
81
  "@sprucelabs/semantic-release": "^4.0.8",
80
- "@sprucelabs/test-utils": "^3.0.544",
82
+ "@sprucelabs/test-utils": "^3.0.545",
81
83
  "@types/lodash": "^4.14.182",
82
84
  "chokidar-cli": "^3.0.0",
83
85
  "concurrently": "^7.2.0",