Skip to content

Commit

Permalink
[patch] fix recursive SelectionSet in partial properties
Browse files Browse the repository at this point in the history
  • Loading branch information
electrovir committed Jul 6, 2024
1 parent 4b64603 commit 78993c8
Show file tree
Hide file tree
Showing 14 changed files with 98 additions and 61 deletions.
60 changes: 30 additions & 30 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "augment-vir",
"version": "29.1.8",
"version": "29.1.9",
"private": true,
"homepage": "https://github.com/electrovir/augment-vir",
"bugs": {
Expand Down
6 changes: 3 additions & 3 deletions packages/browser-testing/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@augment-vir/browser-testing",
"version": "29.1.8",
"version": "29.1.9",
"homepage": "https://github.com/electrovir/augment-vir/tree/main/packages/common",
"bugs": {
"url": "https://github.com/electrovir/augment-vir/issues"
Expand All @@ -23,8 +23,8 @@
"test:coverage": "npm test"
},
"dependencies": {
"@augment-vir/common": "^29.1.8",
"@augment-vir/testing": "^29.1.8",
"@augment-vir/common": "^29.1.9",
"@augment-vir/testing": "^29.1.9",
"@open-wc/testing": "^4.0.0",
"@types/mocha": "^10.0.7",
"@web/test-runner-commands": "^0.9.0",
Expand Down
6 changes: 3 additions & 3 deletions packages/browser/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@augment-vir/browser",
"version": "29.1.8",
"version": "29.1.9",
"homepage": "https://github.com/electrovir/augment-vir/tree/main/packages/browser",
"bugs": {
"url": "https://github.com/electrovir/augment-vir/issues"
Expand All @@ -24,12 +24,12 @@
"test:watch": "web-test-runner --color --config configs/web-test-runner.config.mjs --watch"
},
"dependencies": {
"@augment-vir/common": "^29.1.8",
"@augment-vir/common": "^29.1.9",
"html-spec-tags": "^2.2.0",
"run-time-assertions": "^1.5.1"
},
"devDependencies": {
"@augment-vir/browser-testing": "^29.1.8",
"@augment-vir/browser-testing": "^29.1.9",
"@open-wc/testing": "^4.0.0",
"@types/chai": "^4.3.16",
"@types/mocha": "^10.0.7",
Expand Down
6 changes: 3 additions & 3 deletions packages/chai/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@augment-vir/chai",
"version": "29.1.8",
"version": "29.1.9",
"homepage": "https://github.com/electrovir/augment-vir/tree/main/packages/common",
"bugs": {
"url": "https://github.com/electrovir/augment-vir/issues"
Expand All @@ -23,8 +23,8 @@
"test:coverage": "npm test"
},
"dependencies": {
"@augment-vir/common": "^29.1.8",
"@augment-vir/testing": "^29.1.8",
"@augment-vir/common": "^29.1.9",
"@augment-vir/testing": "^29.1.9",
"type-fest": "^4.20.1"
},
"devDependencies": {
Expand Down
8 changes: 4 additions & 4 deletions packages/common-tests/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@augment-vir/common-tests",
"version": "29.1.8",
"version": "29.1.9",
"private": true,
"homepage": "https://github.com/electrovir/augment-vir/tree/main/packages/common-tests",
"bugs": {
Expand All @@ -22,9 +22,9 @@
"test:types": "tsc --noEmit"
},
"devDependencies": {
"@augment-vir/chai": "^29.1.8",
"@augment-vir/common": "^29.1.8",
"@augment-vir/node-js": "^29.1.8",
"@augment-vir/chai": "^29.1.9",
"@augment-vir/common": "^29.1.9",
"@augment-vir/node-js": "^29.1.9",
"@electrovir/nyc": "^15.1.0-fix0",
"@istanbuljs/nyc-config-typescript": "^1.0.2",
"@types/chai": "^4.3.16",
Expand Down
33 changes: 33 additions & 0 deletions packages/common-tests/src/tests/object/selection-set.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import {itCases} from '@augment-vir/chai';
import {
AnyObject,
GenericSelectionSet,
PartialAndUndefined,
PickCollapsedSelection,
PickSelection,
SelectionSet,
Expand Down Expand Up @@ -364,6 +365,16 @@ describe('SelectionSet', () => {
}>();
});

it('allows selecting into potentially undefined properties', () => {
const test: SelectionSet<PartialAndUndefined<{top: {mid: {low: string[]}}}>> = {
top: {
mid: {
low: true,
},
},
};
});

it('combines unions', () => {
assertTypeOf<
SelectionSet<{
Expand Down Expand Up @@ -439,6 +450,28 @@ describe('PickSelection', () => {
};
}>();
});

it('allows selecting into potentially undefined properties', () => {
assertTypeOf<
PickSelection<
PartialAndUndefined<{top: {mid: {low: string[]}}}>,
{
top: {
mid: {
low: true;
};
};
}
>
>().toEqualTypeOf<{
top:
| undefined
| {
mid: {low: string[]};
};
}>();
});

it('selects through arrays', () => {
assertTypeOf<
PickSelection<
Expand Down
2 changes: 1 addition & 1 deletion packages/common/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@augment-vir/common",
"version": "29.1.8",
"version": "29.1.9",
"homepage": "https://github.com/electrovir/augment-vir/tree/main/packages/common",
"bugs": {
"url": "https://github.com/electrovir/augment-vir/issues"
Expand Down
8 changes: 6 additions & 2 deletions packages/common/src/augments/object/selection-set.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,15 +82,19 @@ export type SelectionSet<
IsAny<Full> extends true
? any
: Depth extends TsTooMuchRecursion
? ['Error: recursive object depth is too deep.']
? boolean
: Full extends ReadonlyArray<infer FullChild extends AnyObject>
? SelectionSet<FullChild, TsRecurse<Depth>>
: Partial<{
[Key in keyof Full]: IsNever<
Exclude<Full[Key], SelectionTypesToPreserve>
> extends true
? boolean
: boolean | UnionToIntersection<SelectionSet<Full[Key], TsRecurse<Depth>>>;
:
| UnionToIntersection<
SelectionSet<NonNullable<Required<Full>[Key]>, TsRecurse<Depth>>
>
| boolean;
}>;

export function selectFrom<
Expand Down
6 changes: 3 additions & 3 deletions packages/docker/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@augment-vir/docker",
"version": "29.1.8",
"version": "29.1.9",
"homepage": "https://github.com/electrovir/augment-vir/tree/main/packages/docker",
"bugs": {
"url": "https://github.com/electrovir/augment-vir/issues"
Expand All @@ -22,8 +22,8 @@
"test:coverage": "npm test"
},
"dependencies": {
"@augment-vir/common": "^29.1.8",
"@augment-vir/node-js": "^29.1.8"
"@augment-vir/common": "^29.1.9",
"@augment-vir/node-js": "^29.1.9"
},
"devDependencies": {
"typescript": "5.5.2"
Expand Down
6 changes: 3 additions & 3 deletions packages/node-js/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@augment-vir/node-js",
"version": "29.1.8",
"version": "29.1.9",
"homepage": "https://github.com/electrovir/augment-vir/tree/main/packages/node-js",
"bugs": {
"url": "https://github.com/electrovir/augment-vir/issues"
Expand All @@ -22,7 +22,7 @@
"test:coverage": "npm test coverage"
},
"dependencies": {
"@augment-vir/common": "^29.1.8",
"@augment-vir/common": "^29.1.9",
"ansi-colors": "^4.1.3",
"axios": "^1.7.2",
"fs-extra": "^11.2.0",
Expand All @@ -31,7 +31,7 @@
"type-fest": "^4.20.1"
},
"devDependencies": {
"@augment-vir/chai": "^29.1.8",
"@augment-vir/chai": "^29.1.9",
"@electrovir/nyc": "^15.1.0-fix0",
"@istanbuljs/nyc-config-typescript": "^1.0.2",
"@types/chai": "^4.3.16",
Expand Down
Loading

0 comments on commit 78993c8

Please sign in to comment.