type-fns 1.14.0 → 1.16.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/dist/checks/hasMetadata.d.ts +13 -0
- package/dist/checks/hasMetadata.js.map +1 -1
- package/dist/checks/hasMetadata.test.js +11 -0
- package/dist/checks/hasMetadata.test.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types/PickAny.d.ts +9 -0
- package/dist/types/PickAny.js +3 -0
- package/dist/types/PickAny.js.map +1 -0
- package/dist/types/PickAny.test.d.ts +1 -0
- package/dist/types/PickAny.test.js +45 -0
- package/dist/types/PickAny.test.js.map +1 -0
- package/dist/types/PickOne.test.js +12 -6
- package/dist/types/PickOne.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -25,6 +25,19 @@ type TypicalMetadataKeys = typeof typicalMetadataKeys[number];
|
|
|
25
25
|
*/
|
|
26
26
|
export type HasMetadata<T extends Record<string, any>, MetadataKeys = TypicalMetadataKeys> = T & Required<Pick<T, keyof T & // that are on the object
|
|
27
27
|
MetadataKeys>>;
|
|
28
|
+
/**
|
|
29
|
+
* asserts that any optional metadata keys of the object will now be omitted
|
|
30
|
+
*
|
|
31
|
+
* by default, the following keys are considered to be metadata:
|
|
32
|
+
* - `id`
|
|
33
|
+
* - `uuid`
|
|
34
|
+
* - `createdAt`
|
|
35
|
+
* - `updatedAt`
|
|
36
|
+
* - `deletedAt`
|
|
37
|
+
* - `effectiveAt`
|
|
38
|
+
*/
|
|
39
|
+
export type OmitMetadata<T extends Record<string, any>, MetadataKeys = TypicalMetadataKeys> = Omit<T, keyof T & // that are on the object
|
|
40
|
+
MetadataKeys>;
|
|
28
41
|
/**
|
|
29
42
|
* for an object of type T, asserts that the object HasMetadata<T, K> for all listed metadata keys K
|
|
30
43
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hasMetadata.js","sourceRoot":"","sources":["../../src/checks/hasMetadata.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAM,mBAAmB,GAAG;IAC1B,IAAI;IACJ,MAAM;IACN,WAAW;IACX,WAAW;IACX,WAAW;IACX,aAAa;CACL,CAAC;
|
|
1
|
+
{"version":3,"file":"hasMetadata.js","sourceRoot":"","sources":["../../src/checks/hasMetadata.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAM,mBAAmB,GAAG;IAC1B,IAAI;IACJ,MAAM;IACN,WAAW;IACX,WAAW;IACX,WAAW;IACX,aAAa;CACL,CAAC;AA2DX;;;;;;;;;;;;GAYG;AACI,MAAM,WAAW,GAAG,CAIzB,GAAM,EACN,OAAuB,mBAA4C,EACvB,EAAE,CAC9C,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC;AAPjC,QAAA,WAAW,eAOsB"}
|
|
@@ -7,6 +7,17 @@ describe('HasMetadata', () => {
|
|
|
7
7
|
expect(pot.id.toFixed).toBeDefined(); // no type errors
|
|
8
8
|
});
|
|
9
9
|
});
|
|
10
|
+
describe('OmitMetadata', () => {
|
|
11
|
+
it('should prevent specifying a metadata property of a type', () => {
|
|
12
|
+
// @ts-expect-error - should not be able to set id
|
|
13
|
+
const pot = { id: 123, age: 72 };
|
|
14
|
+
});
|
|
15
|
+
it('should prevent accessing a metadata property of a type', () => {
|
|
16
|
+
const pot = { age: 72 };
|
|
17
|
+
// @ts-expect-error - should not be able to get id
|
|
18
|
+
expect(pot.id).not.toBeDefined();
|
|
19
|
+
});
|
|
20
|
+
});
|
|
10
21
|
describe('hasMetadata', () => {
|
|
11
22
|
it('should enable accessing an optional metadata property of a type', () => {
|
|
12
23
|
const pot = { id: 123, age: 72 };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hasMetadata.test.js","sourceRoot":"","sources":["../../src/checks/hasMetadata.test.ts"],"names":[],"mappings":";;AAAA,0BAAiC;AAGjC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QAEzE,MAAM,GAAG,GAA2B,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QACzD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,iBAAiB;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QAEzE,MAAM,GAAG,GAAc,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,IAAA,eAAW,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACvE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"hasMetadata.test.js","sourceRoot":"","sources":["../../src/checks/hasMetadata.test.ts"],"names":[],"mappings":";;AAAA,0BAAiC;AAGjC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QAEzE,MAAM,GAAG,GAA2B,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QACzD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,iBAAiB;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QAGjE,kDAAkD;QAClD,MAAM,GAAG,GAA4B,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IAC5D,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAGhE,MAAM,GAAG,GAA4B,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAEjD,kDAAkD;QAClD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QAEzE,MAAM,GAAG,GAAc,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,IAAA,eAAW,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACvE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -31,4 +31,5 @@ __exportStar(require("./companions/pick"), exports);
|
|
|
31
31
|
__exportStar(require("./types/Literalize"), exports);
|
|
32
32
|
__exportStar(require("./wrappers/withAssure"), exports);
|
|
33
33
|
__exportStar(require("./checks/isKeyOf"), exports);
|
|
34
|
+
__exportStar(require("./types/PickAny"), exports);
|
|
34
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;AACtC,mDAAiC"}
|
|
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 @@
|
|
|
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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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,
|
|
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.
|
|
5
|
+
"version": "1.16.0",
|
|
6
6
|
"repository": "ehmpathy/type-fns",
|
|
7
7
|
"homepage": "https://github.com/ehmpathy/type-fns",
|
|
8
8
|
"keywords": [
|