type-fns 1.13.0 → 1.15.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.
@@ -0,0 +1 @@
1
+ export declare const isKeyOf: <T extends Record<string, any>>(obj: T, key: PropertyKey) => key is keyof T;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isKeyOf = void 0;
4
+ const isKeyOf = (obj, key) => {
5
+ return key in obj;
6
+ };
7
+ exports.isKeyOf = isKeyOf;
8
+ //# sourceMappingURL=isKeyOf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isKeyOf.js","sourceRoot":"","sources":["../../src/checks/isKeyOf.ts"],"names":[],"mappings":";;;AAAO,MAAM,OAAO,GAAG,CACrB,GAAM,EACN,GAAgB,EACA,EAAE;IAClB,OAAO,GAAG,IAAI,GAAG,CAAC;AACpB,CAAC,CAAC;AALW,QAAA,OAAO,WAKlB"}
package/dist/index.d.ts CHANGED
@@ -14,3 +14,5 @@ export * from './companions/omit';
14
14
  export * from './companions/pick';
15
15
  export * from './types/Literalize';
16
16
  export * from './wrappers/withAssure';
17
+ export * from './checks/isKeyOf';
18
+ export * from './types/PickAny';
package/dist/index.js CHANGED
@@ -30,4 +30,6 @@ __exportStar(require("./companions/omit"), exports);
30
30
  __exportStar(require("./companions/pick"), exports);
31
31
  __exportStar(require("./types/Literalize"), exports);
32
32
  __exportStar(require("./wrappers/withAssure"), exports);
33
+ __exportStar(require("./checks/isKeyOf"), exports);
34
+ __exportStar(require("./types/PickAny"), exports);
33
35
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,mDAAiC;AACjC,uDAAqC;AACrC,qDAAmC;AACnC,oDAAkC;AAClC,qDAAmC;AACnC,uDAAqC;AACrC,sDAAoC;AACpC,kDAAgC;AAChC,qDAAmC;AACnC,0DAAwC;AACxC,oDAAkC;AAClC,oDAAkC;AAClC,oDAAkC;AAClC,qDAAmC;AACnC,wDAAsC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,mDAAiC;AACjC,uDAAqC;AACrC,qDAAmC;AACnC,oDAAkC;AAClC,qDAAmC;AACnC,uDAAqC;AACrC,sDAAoC;AACpC,kDAAgC;AAChC,qDAAmC;AACnC,0DAAwC;AACxC,oDAAkC;AAClC,oDAAkC;AAClC,oDAAkC;AAClC,qDAAmC;AACnC,wDAAsC;AACtC,mDAAiC;AACjC,kDAAgC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * creates a type which requires specifying at least one, or more, key of an object
3
+ *
4
+ * ref:
5
+ * - https://stackoverflow.com/a/49725198/3068233
6
+ */
7
+ export type PickAny<TObj, TKeys extends keyof TObj = keyof TObj> = Pick<TObj, Exclude<keyof TObj, TKeys>> & {
8
+ [K in TKeys]-?: Required<Pick<TObj, K>> & Partial<Pick<TObj, Exclude<TKeys, K>>>;
9
+ }[TKeys];
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=PickAny.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PickAny.js","sourceRoot":"","sources":["../../src/types/PickAny.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ describe('PickAny', () => {
13
+ it('should constrain type correctly', () => __awaiter(void 0, void 0, void 0, function* () {
14
+ const findFlowers = (input) => __awaiter(void 0, void 0, void 0, function* () {
15
+ // ...
16
+ });
17
+ // you can find by color
18
+ yield findFlowers({
19
+ color: {
20
+ petals: 'white',
21
+ },
22
+ });
23
+ // you can find by size
24
+ yield findFlowers({
25
+ size: {
26
+ choice: 'LARGE',
27
+ },
28
+ });
29
+ // you can find by both
30
+ yield findFlowers({
31
+ color: {
32
+ petals: 'white',
33
+ },
34
+ size: {
35
+ choice: 'LARGE',
36
+ },
37
+ });
38
+ // you can't find by neither
39
+ yield findFlowers({
40
+ // @ts-expect-error - cant be neither
41
+ size: {},
42
+ });
43
+ }));
44
+ });
45
+ //# sourceMappingURL=PickAny.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PickAny.test.js","sourceRoot":"","sources":["../../src/types/PickAny.test.ts"],"names":[],"mappings":";;;;;;;;;;;AAEA,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,iCAAiC,EAAE,GAAS,EAAE;QAC/C,MAAM,WAAW,GAAG,CAClB,KAOE,EACF,EAAE;YACF,MAAM;QACR,CAAC,CAAA,CAAC;QAEF,wBAAwB;QACxB,MAAM,WAAW,CAAC;YAChB,KAAK,EAAE;gBACL,MAAM,EAAE,OAAO;aAChB;SACF,CAAC,CAAC;QAEH,uBAAuB;QACvB,MAAM,WAAW,CAAC;YAChB,IAAI,EAAE;gBACJ,MAAM,EAAE,OAAO;aAChB;SACF,CAAC,CAAC;QAEH,uBAAuB;QACvB,MAAM,WAAW,CAAC;YAChB,KAAK,EAAE;gBACL,MAAM,EAAE,OAAO;aAChB;YACD,IAAI,EAAE;gBACJ,MAAM,EAAE,OAAO;aAChB;SACF,CAAC,CAAC;QAEH,4BAA4B;QAC5B,MAAM,WAAW,CAAC;YAChB,qCAAqC;YACrC,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;IACL,CAAC,CAAA,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -27,12 +27,18 @@ describe('PickOne', () => {
27
27
  },
28
28
  });
29
29
  // you can't find by both
30
- // await findWrench({
31
- // size: {
32
- // metric: { millimeters: 16 },
33
- // imperial: { inches: '5/16' },
34
- // },
35
- // });
30
+ yield findWrench({
31
+ // @ts-expect-error - cant be both
32
+ size: {
33
+ metric: { millimeters: 16 },
34
+ imperial: { inches: '5/16' },
35
+ },
36
+ });
37
+ // you can't find by neither
38
+ yield findWrench({
39
+ // @ts-expect-error - cant be neither
40
+ size: {},
41
+ });
36
42
  }));
37
43
  });
38
44
  //# sourceMappingURL=PickOne.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PickOne.test.js","sourceRoot":"","sources":["../../src/types/PickOne.test.ts"],"names":[],"mappings":";;;;;;;;;;;AAEA,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,iCAAiC,EAAE,GAAS,EAAE;QAC/C,MAAM,UAAU,GAAG,KAehB,EAAE,4CAfqB,EAezB;YACC,MAAM;QACR,CAAC,CAAA,CAAC;QAEF,yBAAyB;QACzB,MAAM,UAAU,CAAC;YACf,IAAI,EAAE;gBACJ,MAAM,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;aAC5B;SACF,CAAC,CAAC;QAEH,2BAA2B;QAC3B,MAAM,UAAU,CAAC;YACf,IAAI,EAAE;gBACJ,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;aAC7B;SACF,CAAC,CAAC;QAEH,yBAAyB;QACzB,qBAAqB;QACrB,YAAY;QACZ,mCAAmC;QACnC,oCAAoC;QACpC,OAAO;QACP,MAAM;IACR,CAAC,CAAA,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"PickOne.test.js","sourceRoot":"","sources":["../../src/types/PickOne.test.ts"],"names":[],"mappings":";;;;;;;;;;;AAEA,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,iCAAiC,EAAE,GAAS,EAAE;QAC/C,MAAM,UAAU,GAAG,KAehB,EAAE,4CAfqB,EAezB;YACC,MAAM;QACR,CAAC,CAAA,CAAC;QAEF,yBAAyB;QACzB,MAAM,UAAU,CAAC;YACf,IAAI,EAAE;gBACJ,MAAM,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;aAC5B;SACF,CAAC,CAAC;QAEH,2BAA2B;QAC3B,MAAM,UAAU,CAAC;YACf,IAAI,EAAE;gBACJ,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;aAC7B;SACF,CAAC,CAAC;QAEH,yBAAyB;QACzB,MAAM,UAAU,CAAC;YACf,kCAAkC;YAClC,IAAI,EAAE;gBACJ,MAAM,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;gBAC3B,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;aAC7B;SACF,CAAC,CAAC;QAEH,4BAA4B;QAC5B,MAAM,UAAU,CAAC;YACf,qCAAqC;YACrC,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;IACL,CAAC,CAAA,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "type-fns",
3
3
  "author": "ehmpathy",
4
4
  "description": "A set of types, type checks, and type guards for simpler, safer, and easier to read code.",
5
- "version": "1.13.0",
5
+ "version": "1.15.0",
6
6
  "repository": "ehmpathy/type-fns",
7
7
  "homepage": "https://github.com/ehmpathy/type-fns",
8
8
  "keywords": [