-
Notifications
You must be signed in to change notification settings - Fork 86
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
22 changed files
with
678 additions
and
224 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
import { ConnectDatum, IdOperator, connect } from "../../src/dag/create"; | ||
import { expectAssignable, expectNotAssignable, expectType } from "tsd"; | ||
|
||
import { Dag } from "../../src/dag"; | ||
|
||
// initial types | ||
interface Init { | ||
[0]: string; | ||
[1]: string; | ||
} | ||
|
||
const init = connect(); | ||
expectAssignable<(inp: Init[]) => Dag<ConnectDatum, Init>>(init); | ||
expectNotAssignable<(inp: unknown[]) => Dag<ConnectDatum, unknown>>(init); | ||
|
||
// subtypes are preserved | ||
interface Extra extends Init { | ||
extra: true; | ||
} | ||
declare const extraArray: Extra[]; | ||
expectType<Dag<ConnectDatum, Extra>>(init(extraArray)); | ||
|
||
// link data narrows appropriately | ||
interface MyTargetId extends IdOperator<{ target: string }> { | ||
target: true; | ||
} | ||
interface Intermediate { | ||
[0]: string; | ||
target: string; | ||
} | ||
declare const myTargetId: MyTargetId; | ||
const targetId = init.targetId(myTargetId); | ||
expectAssignable<(inp: Intermediate[]) => Dag<ConnectDatum, Intermediate>>( | ||
targetId | ||
); | ||
expectNotAssignable<(inp: Init[]) => Dag<ConnectDatum, Init>>(targetId); | ||
expectType<MyTargetId>(targetId.targetId()); | ||
|
||
interface MySourceId extends IdOperator<{ source: string }> { | ||
source: true; | ||
} | ||
interface Complex { | ||
source: string; | ||
target: string; | ||
} | ||
declare const mySourceId: MySourceId; | ||
const sourceId = targetId.sourceId(mySourceId); | ||
expectAssignable<(inp: Complex[]) => Dag<ConnectDatum, Complex>>(sourceId); | ||
expectNotAssignable<(inp: Intermediate[]) => Dag<ConnectDatum, Intermediate>>( | ||
sourceId | ||
); | ||
expectType<MyTargetId>(sourceId.targetId()); | ||
expectType<MySourceId>(sourceId.sourceId()); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
import { | ||
ChildrenDataOperator, | ||
ChildrenOperator, | ||
hierarchy | ||
} from "../../src/dag/create"; | ||
import { expectAssignable, expectNotAssignable, expectType } from "tsd"; | ||
|
||
import { Dag } from "../../src/dag"; | ||
|
||
// initial types | ||
interface Init { | ||
children?: readonly Init[] | undefined; | ||
} | ||
|
||
const init = hierarchy(); | ||
expectAssignable<(...inp: Init[]) => Dag<Init, undefined>>(init); | ||
expectNotAssignable<(...inp: unknown[]) => Dag<unknown, unknown>>(init); | ||
|
||
// data narrows appropriately | ||
interface MyChildrenData | ||
extends ChildrenDataOperator<{ node: true }, { link: true }> { | ||
myChildrenData: true; | ||
} | ||
declare const myChildrenData: MyChildrenData; | ||
const childrenData = init.childrenData(myChildrenData); | ||
expectAssignable< | ||
(...inp: { node: true }[]) => Dag<{ node: true }, { link: true }> | ||
>(childrenData); | ||
expectNotAssignable<(...inp: Init[]) => Dag<Init, undefined>>(childrenData); | ||
expectType<MyChildrenData>(childrenData.children().wrapped); | ||
expectType<MyChildrenData>(childrenData.childrenData()); | ||
|
||
interface MyChildren extends ChildrenOperator<{ id: string }> { | ||
myChildren: true; | ||
} | ||
declare const myChildren: MyChildren; | ||
const children = childrenData.children(myChildren); | ||
expectAssignable<(...inp: { id: string }[]) => Dag<{ id: string }, undefined>>( | ||
children | ||
); | ||
expectNotAssignable< | ||
(...inp: { node: true }[]) => Dag<{ node: true }, { link: true }> | ||
>(children); | ||
expectType<MyChildren>(children.children()); | ||
expectType<MyChildren>(children.childrenData().wrapped); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
import { | ||
IdOperator, | ||
ParentDataOperator, | ||
ParentIdsOperator, | ||
stratify | ||
} from "../../src/dag/create"; | ||
import { expectAssignable, expectNotAssignable, expectType } from "tsd"; | ||
|
||
import { Dag } from "../../src/dag"; | ||
|
||
// initial types | ||
interface Init { | ||
id: string; | ||
parentIds: string[]; | ||
} | ||
|
||
const init = stratify(); | ||
expectAssignable<(inp: Init[]) => Dag<Init, undefined>>(init); | ||
expectNotAssignable<(inp: unknown[]) => Dag<unknown, unknown>>(init); | ||
|
||
// subtypes are preserved | ||
interface Extra extends Init { | ||
extra: true; | ||
} | ||
declare const extraArray: Extra[]; | ||
expectType<Dag<Extra, undefined>>(init(extraArray)); | ||
|
||
// data narrows appropriately | ||
interface MyParentIds extends ParentIdsOperator<{ pids: string[] }> { | ||
myParentIds: true; | ||
} | ||
interface Pids { | ||
id: string; | ||
pids: string[]; | ||
} | ||
declare const myParentIds: MyParentIds; | ||
const parentIds = init.parentIds(myParentIds); | ||
expectAssignable<(inp: Pids[]) => Dag<Pids, undefined>>(parentIds); | ||
expectNotAssignable<(inp: Init[]) => Dag<Init, undefined>>(parentIds); | ||
expectType<MyParentIds>(parentIds.parentIds()); | ||
expectType<MyParentIds>(parentIds.parentData().wrapped); | ||
|
||
interface MyId extends IdOperator<{ myid: string }> { | ||
id: true; | ||
} | ||
interface Ids { | ||
myid: string; | ||
pids: string[]; | ||
} | ||
declare const myId: MyId; | ||
const id = parentIds.id(myId); | ||
expectAssignable<(inp: Ids[]) => Dag<Ids, undefined>>(id); | ||
expectNotAssignable<(inp: Pids[]) => Dag<Pids, undefined>>(id); | ||
expectType<MyParentIds>(id.parentIds()); | ||
expectType<MyParentIds>(id.parentData().wrapped); | ||
expectType<MyId>(id.id()); | ||
|
||
interface MyParentData | ||
extends ParentDataOperator<{ node: true }, { link: true }> { | ||
myParentData: true; | ||
} | ||
interface Data { | ||
myid: string; | ||
node: true; | ||
} | ||
declare const myParentData: MyParentData; | ||
const parentData = id.parentData(myParentData); | ||
expectAssignable<(inp: Data[]) => Dag<Data, { link: true }>>(parentData); | ||
expectNotAssignable<(inp: Ids[]) => Dag<Ids, undefined>>(parentData); | ||
expectType<MyParentData>(parentData.parentIds().wrapped); | ||
expectType<MyParentData>(parentData.parentData()); | ||
expectType<MyId>(parentData.id()); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
import { expectAssignable, expectNotAssignable, expectType } from "tsd"; | ||
|
||
import { SugiNode } from "../../../src/sugiyama/utils"; | ||
import { TwolayerOperator } from "../../../src/sugiyama/twolayer"; | ||
import { twoLayer } from "../../../src/sugiyama/decross/two-layer"; | ||
|
||
const init = twoLayer(); | ||
expectAssignable<(inp: SugiNode[][]) => void>(init); | ||
|
||
interface MyTwolayer extends TwolayerOperator<{ node: true }, { link: true }> { | ||
myTwoLayer: true; | ||
} | ||
declare const myTwolayer: MyTwolayer; | ||
const custom = init.order(myTwolayer); | ||
expectAssignable<(inp: SugiNode<{ node: true }, { link: true }>[][]) => void>( | ||
custom | ||
); | ||
expectNotAssignable<(inp: SugiNode[][]) => void>(custom); | ||
expectType<MyTwolayer>(custom.order()); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
import { GroupAccessor, RankAccessor } from "../../../src/sugiyama/layering"; | ||
import { expectAssignable, expectNotAssignable, expectType } from "tsd"; | ||
|
||
import { Dag } from "../../../src/dag"; | ||
import { simplex } from "../../../src/sugiyama/layering/simplex"; | ||
|
||
const init = simplex(); | ||
expectAssignable<(inp: Dag) => void>(init); | ||
|
||
interface MyRank extends RankAccessor<{ rank: number }, { link: true }> { | ||
myRank: true; | ||
} | ||
declare const myRank: MyRank; | ||
const rank = init.rank(myRank); | ||
expectAssignable<(inp: Dag<{ rank: number }, { link: true }>) => void>(rank); | ||
expectNotAssignable<(inp: Dag) => void>(rank); | ||
expectType<MyRank>(rank.rank()); | ||
|
||
interface MyGroup extends GroupAccessor<{ group: string }, { info: string }> { | ||
myGroup: true; | ||
} | ||
declare const myGroup: MyGroup; | ||
const group = rank.group(myGroup); | ||
expectAssignable< | ||
( | ||
inp: Dag<{ rank: number; group: string }, { link: true; info: string }> | ||
) => void | ||
>(group); | ||
expectNotAssignable<(inp: Dag<{ rank: number }, { link: true }>) => void>( | ||
group | ||
); | ||
expectType<MyRank>(group.rank()); | ||
expectType<MyGroup>(group.group()); |
Oops, something went wrong.