@mark1russell7/highways 0.1.4 → 0.2.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/build/index.d.ts CHANGED
@@ -96,6 +96,8 @@ export interface Node {
96
96
  readonly id: string;
97
97
  readonly box: Box;
98
98
  readonly ports?: readonly Port[];
99
+ /** This data is free for the grouping rules of the nodes. The rule `keys` reads the string `data.group` by default. */
100
+ readonly data?: Readonly<Record<string, unknown>>;
99
101
  }
100
102
  /** One end of an edge: a node, and optionally one plug of that node. */
101
103
  export interface End {
@@ -652,7 +654,11 @@ export interface SectionOptions {
652
654
  readonly cap?: number;
653
655
  /** The tree stops at this depth. The default is 16. */
654
656
  readonly maxDepth?: number;
657
+ /** A cell shrinks to one quarter at most this many times without a split. Then it stops. The default is 32. */
658
+ readonly collapse?: number;
655
659
  }
660
+ /** The default values of `SectionOptions`. */
661
+ export declare const SECTION_DEFAULTS: Readonly<Required<SectionOptions>>;
656
662
  /**
657
663
  * This function makes the tree of sections of the nodes. A cell with more than `cap` nodes splits in four.
658
664
  * When the nodes of a cell are all in one quarter, the cell becomes that quarter and does not make a level.
@@ -662,6 +668,55 @@ export declare function buildSections(nodes: readonly Node[], options?: SectionO
662
668
  export declare function allSections(root: Section): Section[];
663
669
  /** This function gives the depth of the deepest section. */
664
670
  export declare function treeDepth(root: Section): number;
671
+ /**
672
+ * This function examines a tree of sections from a grouping rule. It throws an error when the tree is not valid for `count` nodes.
673
+ * In a valid tree, each node is in exactly one leaf. The children of a section split its nodes, and a child is one level deeper than its parent.
674
+ */
675
+ export declare function checkSections(root: Section, count: number): void;
676
+ /**
677
+ * This function gives the tree of sections of the grouping rule `quadtree`: the cells of a quadtree of the plane (`buildSections`).
678
+ * It is the default grouping rule of the router `sections`.
679
+ */
680
+ export declare function quadtreeGroups(graph: Graph, options?: SectionOptions): Section;
681
+ /** A key rule gives the key of the group of a node. A node without a key is a group alone. */
682
+ type NodeKey = (node: Node, index: number) => string | undefined;
683
+ /** The options of the grouping rule `keys`. */
684
+ interface KeyOptions {
685
+ /** This function gives the key of the group of each node. The default is `byDataGroup`. */
686
+ readonly key?: NodeKey;
687
+ /**
688
+ * With this value, a group with more nodes than its `cap` splits into the cells of a quadtree, as `buildSections` does.
689
+ * Without it, each group is one leaf. The default is no split.
690
+ */
691
+ readonly split?: SectionOptions;
692
+ }
693
+ /** This key rule gives the string `data.group` of the node, or `undefined` when the node has no such string. */
694
+ export declare const byDataGroup: NodeKey;
695
+ /**
696
+ * This function gives the tree of sections of the grouping rule `keys`. The root holds each node. Each child of the root holds the nodes of one key,
697
+ * in the order of their first node. The id of a group is `s:` and its key. A node without a key is a group alone, with the id `s#` and its index.
698
+ * Thus the far view of the router `sections` shows one item for each group.
699
+ */
700
+ export declare function keyedSections(nodes: readonly Node[], options?: KeyOptions): Section;
701
+ /** This function gives the tree of sections of the grouping rule `keys` for a graph. */
702
+ export declare function keyGroups(graph: Graph, options?: KeyOptions): Section;
703
+ /** This function gives the median width of the shown items of each level, in units of the plane. */
704
+ export declare function itemSizes(levels: readonly Level[]): number[];
705
+ /** The far-view thresholds of `pickLevel`, in pixels on the screen. */
706
+ export interface PickOptions {
707
+ /** When a node is at least this wide on the screen, the view shows each route. */
708
+ readonly routesAt: number;
709
+ /** A level is fine enough when its median item is at least this wide on the screen. */
710
+ readonly itemAt: number;
711
+ }
712
+ /** The default thresholds: a node of 22 pixels shows its routes, and a group of 120 pixels shows its parts. */
713
+ export declare const PICK: PickOptions;
714
+ /**
715
+ * This function picks the level that a camera shows at a scale, in pixels for each unit of the plane. The sizes come from `itemSizes`.
716
+ * The value `sizes.length` stands for the routes of each edge. The last level holds the nodes alone.
717
+ * Each threshold that `options` does not give gets its value from `PICK`.
718
+ */
719
+ export declare function pickLevel(sizes: readonly number[], scale: number, options?: Partial<PickOptions>): number;
665
720
  /** This function gives the point where the ray from the center of the box to `toward` leaves the box. */
666
721
  export declare function boxExit(box: Box, toward: Point): Point;
667
722
  /**
@@ -705,73 +760,16 @@ interface SharedOptions extends WayOptions {
705
760
  * The result gives each stretch as a run, with the order of its lanes.
706
761
  */
707
762
  export declare function sharedRouter(options: SharedOptions): Router;
708
- /** The options of the router with sections. */
709
- interface SectionsOptions extends WayOptions, SectionOptions {
710
- /** The name in the benchmark. */
711
- readonly name: string;
763
+ /** The options of the links of a level: the options of the ways, and two limits of the level links. */
764
+ interface LevelLinkOptions extends WayOptions {
712
765
  /**
713
- * The number of hubs on each side of the lowest common section that a way passes. A smaller number gives shorter ways
714
- * and fewer shared ways. Without it, a way passes each hub from its node up.
766
+ * The margin of the second corner graph. A gap between two boxes wider than approximately 1.5 times this margin lets a link through.
767
+ * The second graph uses the smaller of this value and `margin`. The default is 1.
715
768
  */
716
- readonly hubs?: number;
717
- /** A way through the hubs can be at most this many times as long as the line between its plugs. Else the edge goes directly. The default is 2. */
718
- readonly stretch?: number;
719
- /** The benchmark skips a fixture with more nodes. */
720
- readonly maxNodes?: number;
721
- }
722
- /**
723
- * This function makes a router with a tree of sections. Each section has a hub: the free corner nearest to the center of its nodes.
724
- * An edge goes from its node up the hubs of its sections to the lowest common section, across, and down to the other node.
725
- * Each way from hub to hub is found one time, so all the edges on it share its points.
726
- * The edges in one section of the lowest level go straight around the nodes.
727
- *
728
- * An edge skips a hub that takes it away from its target. A way that still goes out and back gives way to the direct way.
729
- *
730
- * The result gives one zoom level for each depth of the tree.
731
- * A link of a level goes from the boundary of one item to the boundary of the other, around the other items.
732
- */
733
- export declare function sectionsRouter(options: SectionsOptions): Router;
734
- /** The options of the trunk router. */
735
- interface TrunksOptions extends WayOptions {
736
- /** The name in the benchmark. */
737
- readonly name: string;
738
- /** The grouping rule. The edges from one plug with one key share a trunk. */
739
- readonly rule: GroupRule;
740
- /** The split point is at this share of the way to the center of the targets. The default is 0.5. */
741
- readonly split?: number;
742
- /** A group with fewer edges stays unbundled. The default is 2. */
743
- readonly minSize?: number;
744
- /** The benchmark skips a fixture with more nodes. */
745
- readonly maxNodes?: number;
769
+ readonly tightMargin?: number;
770
+ /** A plug stays at least this far from the corners of its side. The level links use the smaller of this value and `margin`. The default is 6. */
771
+ readonly plugInset?: number;
746
772
  }
747
- /** The rule that groups the edges by the collection of their target, in `data.collection`. */
748
- export declare const byCollection: GroupRule;
749
- /**
750
- * This function groups the edges by their source plug and their key. Each group keeps the order of the edges.
751
- * A group with fewer than `minSize` edges does not appear.
752
- */
753
- export declare function groupEdges(edges: readonly Edge[], rule: GroupRule, minSize?: number): Map<string, Edge[]>;
754
- /**
755
- * This function gives the lane order of the branches that leave the split point `from`, with the trunk along `dir`.
756
- * Lane 0 turns most to the left, in a frame with the y axis down. Thus two lanes do not cross at the split.
757
- */
758
- export declare function laneOrder(dir: Point, from: Point, branches: readonly {
759
- readonly edge: string;
760
- readonly next: Point;
761
- }[]): string[];
762
- /**
763
- * This function gives the split point of a bundle, on the line from `start` to the center of the targets.
764
- * The point is at `split` of the way, but at most half of the way to the nearest target. It moves back toward `start` out of the boxes.
765
- */
766
- export declare function splitPoint(start: Point, targets: readonly Point[], split: number, free: (p: Point) => boolean, step: number): Point;
767
- /**
768
- * This function makes a router that bundles the edges by a rule. The edges of a group share one plug and one trunk
769
- * to a split point. From there, each edge goes its own way. The router gives the bundles with their lane order.
770
- * The edges outside the groups go as in the corner router.
771
- */
772
- export declare function trunksRouter(options: TrunksOptions): Router;
773
- /** The routers that the benchmark races. */
774
- export declare const ROUTERS: readonly Router[];
775
773
  /** An item with a box: a node of a graph, an item of a level or a box of a host layout. */
776
774
  export interface Boxed {
777
775
  readonly id: string;
@@ -830,6 +828,12 @@ export interface RoomOptions {
830
828
  readonly lanes?: "link" | "count";
831
829
  /** Two box edges nearer than this distance make one boundary of the sweep. The default is 0.5. */
832
830
  readonly snap?: number;
831
+ /**
832
+ * The number of passes of the demand. The default is 1.
833
+ * Each pass after the first finds the lanes again on the board that the passes before it opened, and adds the growth that it needs.
834
+ * The limit `maxGrowth` applies to the sum of the passes.
835
+ */
836
+ readonly passes?: number;
833
837
  }
834
838
  /** The demand of a board and the board with its gaps open. */
835
839
  export interface Room<T extends Boxed> {
@@ -856,6 +860,232 @@ export declare function roomDemand(items: readonly Boxed[], links: readonly Room
856
860
  export declare function makeRoom<T extends Boxed>(items: readonly T[], links: readonly RoomLink[], options?: RoomOptions): Room<T>;
857
861
  /** This function gives the links between the nodes of a graph, with the count of the edges of each pair. A loop does not count. */
858
862
  export declare function roomLinks(graph: Graph): RoomLink[];
863
+ /** The input of a curve strategy: one polyline and the context of its route. */
864
+ export interface CurveInput {
865
+ /** These points are the polyline: a route of a router, a lane of `laneRoutes` or a link of a zoom level. */
866
+ readonly points: readonly Point[];
867
+ /** The curve leaves the first point along this outward normal of its plug, if the strategy reads it. */
868
+ readonly startNormal?: Point;
869
+ /** The curve comes into the last point against this outward normal of its plug, if the strategy reads it. */
870
+ readonly endNormal?: Point;
871
+ /** The boxes that the curve must not go through, from `curveSpace`. */
872
+ readonly space?: CurveSpace;
873
+ }
874
+ /** The input of a room strategy: the boxes of a board and the links between them. */
875
+ export interface RoomInput {
876
+ readonly items: readonly Boxed[];
877
+ readonly links: readonly RoomLink[];
878
+ }
879
+ /**
880
+ * The steps that have strategies, with the fixed input and output type of each step.
881
+ *
882
+ * - `group`: a graph in, the tree of sections out. The router `sections` makes its hubs and its zoom levels from this tree.
883
+ * - `router`: a graph in, the routes (and the `levels`, `bundles` and `runs`) out.
884
+ * - `curve`: a polyline in, the segments of a curve out.
885
+ * - `room`: the boxes and links of a board in, the gaps of the board with their need out.
886
+ */
887
+ export interface StepTypes {
888
+ readonly group: {
889
+ readonly input: Graph;
890
+ readonly output: Section;
891
+ };
892
+ readonly router: {
893
+ readonly input: Graph;
894
+ readonly output: Result;
895
+ };
896
+ readonly curve: {
897
+ readonly input: CurveInput;
898
+ readonly output: CurveSegment[];
899
+ };
900
+ readonly room: {
901
+ readonly input: RoomInput;
902
+ readonly output: Gap[];
903
+ };
904
+ }
905
+ /** The name of a step that has strategies. */
906
+ export type Step = keyof StepTypes;
907
+ /** The input type of a step. */
908
+ export type StepInput<S extends Step> = StepTypes[S]["input"];
909
+ /** The output type of a step. */
910
+ export type StepOutput<S extends Step> = StepTypes[S]["output"];
911
+ /** The steps that have strategies, in the order of the pipeline. */
912
+ export declare const STEPS: readonly Step[];
913
+ /**
914
+ * A strategy: one way to do one step, with a name and a description.
915
+ * The same input and the same options must give the same output.
916
+ */
917
+ export interface Strategy<S extends Step = Step, O extends object = object> {
918
+ /** The step of the strategy. It fixes the input and the output type. */
919
+ readonly step: S;
920
+ /** The name of the strategy. Each name is unique in its step of a registry. */
921
+ readonly name: string;
922
+ /** One or two sentences that tell what the strategy does. The site and the documents show them. */
923
+ readonly describe: string;
924
+ /** The values of the options when the caller gives no value. */
925
+ readonly defaults: Readonly<O>;
926
+ /** The benchmark skips an input with more nodes than this. Without it, the strategy takes each input. */
927
+ readonly maxNodes?: number;
928
+ /** This method does the step. Each option that `options` does not give gets its value from `defaults`. */
929
+ run(input: StepInput<S>, options?: Partial<O>): StepOutput<S>;
930
+ }
931
+ /** A strategy of any step. A registry holds a list of these. */
932
+ export type AnyStrategy = { [S in Step]: Strategy<S>; }[Step];
933
+ /** The definition of a strategy, for `defineStrategy`. */
934
+ export interface StrategyDefinition<S extends Step, O extends object> {
935
+ readonly step: S;
936
+ readonly name: string;
937
+ readonly describe: string;
938
+ /** These values are the options when the caller gives no value. Give `{}` for a strategy without options. */
939
+ readonly defaults: O;
940
+ readonly maxNodes?: number;
941
+ /** This function does the step. It gets each option, from the caller or from `defaults`. */
942
+ run(input: StepInput<S>, options: Readonly<O>): StepOutput<S>;
943
+ }
944
+ /**
945
+ * This function makes a strategy from its definition. The strategy fills the missing options from `defaults`.
946
+ * When the caller gives no option, the definition gets the `defaults` object itself.
947
+ */
948
+ export declare function defineStrategy<S extends Step, O extends object>(definition: StrategyDefinition<S, O>): Strategy<S, O>;
949
+ /**
950
+ * A registry: the strategies of each step, in order. A registry is data. No import changes it.
951
+ * A consumer makes its own registry with `createRegistry`, and adds a strategy with `register`.
952
+ * The list `group` is optional in the type, so a registry from version 0.1.5 stays a registry. `createRegistry` always gives it.
953
+ */
954
+ export type Registry = { readonly [S in Exclude<Step, "group">]: readonly Strategy<S>[]; } & {
955
+ readonly group?: readonly Strategy<"group">[];
956
+ };
957
+ /** This function makes a registry from a list of strategies. It keeps their order. Two strategies with one step and one name are an error. */
958
+ export declare function createRegistry(strategies: readonly AnyStrategy[]): Registry;
959
+ /** This function gives a new registry with the strategies of `registry` and then `strategies`. It does not change `registry`. */
960
+ export declare function register(registry: Registry, ...strategies: readonly AnyStrategy[]): Registry;
961
+ /** This function gives the strategies of one step of a registry, in order. */
962
+ export declare function listStrategies<S extends Step>(registry: Registry, step: S): readonly Strategy<S>[];
963
+ /** This function gives the strategy of one step with a name, or `undefined` when the registry has no such strategy. */
964
+ export declare function findStrategy<S extends Step>(registry: Registry, step: S, name: string): Strategy<S> | undefined;
965
+ /** This function gives the strategy of one step with a name. When the registry has no such strategy, the function throws an error. */
966
+ export declare function getStrategy<S extends Step>(registry: Registry, step: S, name: string): Strategy<S>;
967
+ /** This function gives a `Router` that runs a router strategy with the options. The router keeps the name and the `maxNodes` of the strategy. */
968
+ export declare function asRouter<O extends object>(strategy: Strategy<"router", O>, options?: Partial<O>): Router;
969
+ /** This function gives the router strategies of a registry as `Router` objects, in order. The benchmark races them. */
970
+ export declare function routersOf(registry: Registry): Router[];
971
+ /**
972
+ * The options of the router with sections. Each option has a default, and the defaults give the output of version 0.1.5.
973
+ * The options `cap`, `maxDepth` and `collapse` are the limits of the default grouping rule, the quadtree of `buildSections`.
974
+ * The options `tightMargin` and `plugInset` are the limits of the level links (`levelLinks`).
975
+ */
976
+ interface SectionsOptions extends LevelLinkOptions, SectionOptions {
977
+ /** The name in the benchmark. */
978
+ readonly name: string;
979
+ /**
980
+ * The number of hubs on each side of the lowest common section that a way passes. A smaller number gives shorter ways
981
+ * and fewer shared ways. Without it, a way passes each hub from its node up.
982
+ */
983
+ readonly hubs?: number;
984
+ /**
985
+ * The hub limit. A way through the hubs can be at most this many times as long as the line between its plugs, plus `stretchPad` margins.
986
+ * Else the edge goes directly. The default is 2. The value `Infinity` keeps each way through the hubs.
987
+ */
988
+ readonly stretch?: number;
989
+ /** A way through the hubs can be this many margins longer than `stretch` times the line between its plugs. The default is 4. */
990
+ readonly stretchPad?: number;
991
+ /**
992
+ * A way skips a hub that is more than this many units farther from the target than the nearest approach of the way before it.
993
+ * The default is 80, two times `BACKTRACK_MIN`. The value `Infinity` keeps each hub.
994
+ */
995
+ readonly hubSlack?: number;
996
+ /**
997
+ * The grouping rule: a strategy of the step `group` that makes the tree of sections. The hubs and the zoom levels come from this tree.
998
+ * Without it, the router uses the quadtree of `buildSections` with the options `cap`, `maxDepth` and `collapse`.
999
+ */
1000
+ readonly group?: Strategy<"group">;
1001
+ /** The options of the strategy `group`. The strategy gets its `defaults` for each option that this object does not give. */
1002
+ readonly groupOptions?: object;
1003
+ /**
1004
+ * The depths of the tree that get a zoom level with groups. The last level, with each node alone, always comes after them.
1005
+ * The default is each depth, from 0 to the depth of the deepest section.
1006
+ */
1007
+ readonly levels?: readonly number[];
1008
+ /** The benchmark skips a fixture with more nodes. */
1009
+ readonly maxNodes?: number;
1010
+ }
1011
+ /**
1012
+ * This function makes a router with a tree of sections. Each section has a hub: the free corner nearest to the center of its nodes.
1013
+ * An edge goes from its node up the hubs of its sections to the lowest common section, across, and down to the other node.
1014
+ * Each way from hub to hub is found one time, so all the edges on it share its points.
1015
+ * The edges in one section of the lowest level go straight around the nodes.
1016
+ *
1017
+ * An edge skips a hub that takes it away from its target. A way that still goes out and back gives way to the direct way.
1018
+ *
1019
+ * The result gives one zoom level for each depth of the tree.
1020
+ * A link of a level goes from the boundary of one item to the boundary of the other, around the other items.
1021
+ */
1022
+ export declare function sectionsRouter(options: SectionsOptions): Router;
1023
+ /** The options of the trunk router. */
1024
+ interface TrunksOptions extends WayOptions {
1025
+ /** The name in the benchmark. */
1026
+ readonly name: string;
1027
+ /** The grouping rule. The edges from one plug with one key share a trunk. */
1028
+ readonly rule: GroupRule;
1029
+ /** The split point is at this share of the way to the center of the targets. The default is 0.5. */
1030
+ readonly split?: number;
1031
+ /** A group with fewer edges stays unbundled. The default is 2. */
1032
+ readonly minSize?: number;
1033
+ /** The benchmark skips a fixture with more nodes. */
1034
+ readonly maxNodes?: number;
1035
+ }
1036
+ /** The rule that groups the edges by the collection of their target, in `data.collection`. */
1037
+ export declare const byCollection: GroupRule;
1038
+ /**
1039
+ * This function groups the edges by their source plug and their key. Each group keeps the order of the edges.
1040
+ * A group with fewer than `minSize` edges does not appear.
1041
+ */
1042
+ export declare function groupEdges(edges: readonly Edge[], rule: GroupRule, minSize?: number): Map<string, Edge[]>;
1043
+ /**
1044
+ * This function gives the lane order of the branches that leave the split point `from`, with the trunk along `dir`.
1045
+ * Lane 0 turns most to the left, in a frame with the y axis down. Thus two lanes do not cross at the split.
1046
+ */
1047
+ export declare function laneOrder(dir: Point, from: Point, branches: readonly {
1048
+ readonly edge: string;
1049
+ readonly next: Point;
1050
+ }[]): string[];
1051
+ /**
1052
+ * This function gives the split point of a bundle, on the line from `start` to the center of the targets.
1053
+ * The point is at `split` of the way, but at most half of the way to the nearest target. It moves back toward `start` out of the boxes.
1054
+ */
1055
+ export declare function splitPoint(start: Point, targets: readonly Point[], split: number, free: (p: Point) => boolean, step: number): Point;
1056
+ /**
1057
+ * This function makes a router that bundles the edges by a rule. The edges of a group share one plug and one trunk
1058
+ * to a split point. From there, each edge goes its own way. The router gives the bundles with their lane order.
1059
+ * The edges outside the groups go as in the corner router.
1060
+ */
1061
+ export declare function trunksRouter(options: TrunksOptions): Router;
1062
+ /** The built-in routers. The registry `STRATEGIES` holds the same routers as strategies, and the benchmark races the routers of the registry. */
1063
+ export declare const ROUTERS: readonly Router[];
1064
+ /**
1065
+ * The lane order of the pieces of the links in one gap.
1066
+ *
1067
+ * - `links`: the order of the list of links. This order reads nothing of the board.
1068
+ * - `ends`: the pieces that turn to the near side at their two ends come first. The pieces that turn to the far side come last.
1069
+ * - `crossings`: the order with the fewest crossings between the pieces of the gap and the legs at their ends. A local search finds it.
1070
+ */
1071
+ export type LaneOrder = "links" | "ends" | "crossings";
1072
+ /** The lane orders of `gapLanes`, in the order of the benchmark. */
1073
+ export declare const LANE_ORDERS: readonly LaneOrder[];
1074
+ /** The options of `gapLanes`. */
1075
+ export interface GapLaneOptions {
1076
+ /** The largest distance between two lanes. A narrow gap puts its lanes nearer. The default is 4. */
1077
+ readonly spacing?: number;
1078
+ /** The lane order in each gap. The default is `crossings`. */
1079
+ readonly order?: LaneOrder;
1080
+ /** Two box edges nearer than this distance make one boundary of the sweep, as in `boardGaps`. The default is 0.5. */
1081
+ readonly snap?: number;
1082
+ }
1083
+ /**
1084
+ * This function gives each link that runs along a gap its own lane in the gap. The lanes of a gap are `spacing` apart, around its middle line.
1085
+ * A leg of a link moves across its gap only, so the link keeps its plugs and the axes of its legs.
1086
+ * When a move puts a link through more boxes than before, the link keeps its points.
1087
+ */
1088
+ export declare function gapLanes(items: readonly Boxed[], links: readonly LevelLink[], options?: GapLaneOptions): LevelLink[];
859
1089
  /** A broken hard rule. A correct router has none. */
860
1090
  export interface Violation {
861
1091
  readonly rule: "complete" | "ends-at-plugs" | "fixed-plugs" | "no-pass-through" | "counts-sum" | "link-ends" | "bundle-trunk" | "run-shared";
@@ -1035,11 +1265,14 @@ export declare function formatTable(rows: readonly BenchRow[]): string;
1035
1265
  * A router without such levels gets a dash in the columns of the levels.
1036
1266
  */
1037
1267
  export declare function formatFaults(rows: readonly BenchRow[]): string;
1038
- /** One row of the benchmark of the curves: one curve type on the routes of one router on one fixture. */
1039
- export interface CurveBenchRow {
1268
+ /**
1269
+ * One row of the benchmark of the curves: one curve type on the routes of one router on one fixture.
1270
+ * The type `T` of the name of the curve is `CurveType` for `benchCurves`, and `string` for `benchCurveStrategies`.
1271
+ */
1272
+ export interface CurveBenchRow<T extends string = CurveType> {
1040
1273
  readonly router: string;
1041
1274
  readonly fixture: string;
1042
- readonly type: CurveType;
1275
+ readonly type: T;
1043
1276
  /** The number of routes. */
1044
1277
  readonly links: number;
1045
1278
  /** The number of polylines that go through a box that is not one of their ends (`measureLinks`). */
@@ -1066,8 +1299,13 @@ export interface CurveBenchOptions {
1066
1299
  * The type `spline` leaves each plug along the normal of the nearest side of its node.
1067
1300
  */
1068
1301
  export declare function benchCurves(router: Router, fixture: string, graph: Graph, options?: CurveBenchOptions): CurveBenchRow[];
1302
+ /**
1303
+ * This function does the work of `benchCurves` with a list of curve strategies, in place of the curve types.
1304
+ * The option `radius` goes to each strategy. A strategy without such an option does not read it.
1305
+ */
1306
+ export declare function benchCurveStrategies(router: Router, fixture: string, graph: Graph, curves: readonly Strategy<"curve">[], options?: CurveBenchOptions): CurveBenchRow<string>[];
1069
1307
  /** This function writes the rows of `benchCurves` as a Markdown table. */
1070
- export declare function formatCurves(rows: readonly CurveBenchRow[]): string;
1308
+ export declare function formatCurves(rows: readonly CurveBenchRow<string>[]): string;
1071
1309
  /** One row of the benchmark of the room: one state of a board, packed or open, and the measures of its links. */
1072
1310
  export interface RoomBenchRow {
1073
1311
  readonly fixture: string;
@@ -1093,15 +1331,141 @@ export interface RoomBenchRow {
1093
1331
  }
1094
1332
  /**
1095
1333
  * This function measures the links of one board. It measures the links of the far view, with each node of the graph as one item of a level.
1096
- * It also measures the lane routes of the router `sections` at the lane width `spacing`.
1334
+ * With a lane order, each link of the far view gets its own lane in each gap (`gapLanes` at the lane width `spacing`).
1335
+ * Without it, the links of a gap share the lines of the level links.
1336
+ * The function also measures the lane routes of the router `sections` at the lane width `spacing`.
1337
+ */
1338
+ export declare function measureBoard(graph: Graph, spacing: number, order?: LaneOrder): Omit<RoomBenchRow, "fixture" | "board" | "area" | "ms">;
1339
+ /**
1340
+ * This function measures a packed board, the board with each gap open to the gutter only, and the board that each room strategy opens.
1341
+ * The options are the same for each strategy, except `method`. The default strategies are the methods `routes` and `lines` of `roomDemand`.
1342
+ */
1343
+ export declare function benchRoom(fixture: string, graph: Graph, options?: RoomOptions, methods?: readonly Strategy<"room">[]): RoomBenchRow[];
1344
+ /** One setting of a sweep of the room: the options of `makeRoom` and the lane order of the far view. */
1345
+ export interface RoomSetting {
1346
+ /** The name of the setting in the column `board`. */
1347
+ readonly name: string;
1348
+ readonly options: RoomOptions;
1349
+ /** The lane order of the far view. Without it, the links of a gap share the lines of the level links. */
1350
+ readonly lanes?: LaneOrder;
1351
+ }
1352
+ /**
1353
+ * This function measures the board that `makeRoom` opens with each setting, with the method `routes`.
1354
+ * The first row is the fair baseline: the board with each gap open to the gutter of `baseline` only, measured at the spacing of `baseline`.
1097
1355
  */
1098
- export declare function measureBoard(graph: Graph, spacing: number): Omit<RoomBenchRow, "fixture" | "board" | "area" | "ms">;
1356
+ export declare function sweepRoom(fixture: string, graph: Graph, settings: readonly RoomSetting[], baseline?: RoomOptions): RoomBenchRow[];
1357
+ /** The values of `maxGrowth` of the sweep of ROOM-A. */
1358
+ export declare const GROWTH_SWEEP: readonly number[];
1359
+ /** This function gives the settings of ROOM-A: the area and the faults for each `maxGrowth`, at gutter 8 and spacing 4. */
1360
+ export declare function growthSettings(values?: readonly number[]): RoomSetting[];
1099
1361
  /**
1100
- * This function measures a packed board, the board with each gap open to the gutter only, and the board that `makeRoom` opens with each method.
1101
- * The options of `makeRoom` are the same for each method, except `method`.
1362
+ * This function gives the settings of ROOM-C: each lane order of the far view at each spacing, at gutter 8.
1363
+ * The order `shared` is the far view without lanes, as before ROOM-C.
1102
1364
  */
1103
- export declare function benchRoom(fixture: string, graph: Graph, options?: RoomOptions): RoomBenchRow[];
1365
+ export declare function laneSettings(spacings?: readonly number[], orders?: readonly LaneOrder[]): RoomSetting[];
1366
+ /** This function gives the settings of ROOM-D: each gutter with each number of passes, at spacing 4. */
1367
+ export declare function passSettings(gutters?: readonly number[], passes?: readonly number[]): RoomSetting[];
1104
1368
  /** This function writes the rows of `benchRoom` as a Markdown table. */
1105
1369
  export declare function formatRoom(rows: readonly RoomBenchRow[]): string;
1106
- export type { ArcOptions, CornersOptions, CurveSpace, RoundedOptions, SectionsOptions, SharedOptions, SplineOptions, TrunksOptions };
1370
+ /** The options of one setting of the router `sections`, without the name. */
1371
+ export type SectionsSettingOptions = Omit<SectionsOptions, "name" | "maxNodes">;
1372
+ /** One setting of a sweep of the router `sections`. */
1373
+ export interface SectionsSetting {
1374
+ /** The name of the setting in the column `setting`. */
1375
+ readonly name: string;
1376
+ readonly options: SectionsSettingOptions;
1377
+ }
1378
+ /** One row of a sweep of the router `sections`: one setting on one board, and the measures of its routes and of its zoom levels. */
1379
+ export interface SectionsBenchRow {
1380
+ readonly fixture: string;
1381
+ readonly setting: string;
1382
+ /** The faults of the routes of the edges (`measureRouteFaults`). */
1383
+ readonly faults: LinkFaults;
1384
+ /** The sum of the faults of the levels with groups (`measureLevelFaults` and `sumFaults`). */
1385
+ readonly levelFaults: LinkFaults;
1386
+ /** The sum of the overlaps of the levels with groups. */
1387
+ readonly overlaps: number;
1388
+ /** The number of routes that go through hubs: the routes that are not the same as the direct route of their edge. */
1389
+ readonly hubRoutes: number;
1390
+ /** The number of shared stretches of way of the result (`runs`). */
1391
+ readonly runs: number;
1392
+ /** The number of zoom levels, with the last level of single nodes. */
1393
+ readonly levels: number;
1394
+ /** The number of items of the far view: the first level with more than one item. */
1395
+ readonly farItems: number;
1396
+ /** The time of one route, in milliseconds. */
1397
+ readonly ms: number;
1398
+ }
1399
+ /**
1400
+ * This function measures the router `sections` on one board with each setting. The first row is the fair baseline: the defaults, with no option.
1401
+ * The direct routes come from the hub limit 0, so `hubRoutes` counts the routes that use the hubs.
1402
+ */
1403
+ export declare function sweepSections(fixture: string, graph: Graph, settings: readonly SectionsSetting[]): SectionsBenchRow[];
1404
+ /** The values of the hub limit (`stretch`) of the sweep of CUSTOM. The default is 2. */
1405
+ export declare const STRETCH_SWEEP: readonly number[];
1406
+ /** This function gives the settings of the sweep of the hub limit: one setting for each value of `stretch`. */
1407
+ export declare function stretchSettings(values?: readonly number[]): SectionsSetting[];
1408
+ /** The values of `hubSlack` of the sweep of CUSTOM. The default is 80. */
1409
+ export declare const SLACK_SWEEP: readonly number[];
1410
+ /** This function gives the settings of the sweep of the slack of the hubs: one setting for each value of `hubSlack`. */
1411
+ export declare function slackSettings(values?: readonly number[]): SectionsSetting[];
1412
+ /** The values of the section limit (`cap`) of the sweep of CUSTOM. The default is 8. */
1413
+ export declare const CAP_SWEEP: readonly number[];
1414
+ /** This function gives the settings of the sweep of the section limit: one setting for each value of `cap`. */
1415
+ export declare function capSettings(values?: readonly number[]): SectionsSetting[];
1416
+ /**
1417
+ * This function gives one setting for each grouping rule: the router `sections` with the strategy as its option `group`.
1418
+ * The map `options` gives the options of a strategy by its name.
1419
+ */
1420
+ export declare function groupSettings(strategies?: readonly Strategy<"group">[], options?: Readonly<Record<string, object>>): SectionsSetting[];
1421
+ /** This function writes the rows of `sweepSections` as a Markdown table. */
1422
+ export declare function formatSections(rows: readonly SectionsBenchRow[]): string;
1423
+ /** The options of a router strategy: the options of its router, without the name and the limit of the benchmark. */
1424
+ export type RouterPreset<O> = Omit<O, "name" | "maxNodes">;
1425
+ /** The built-in router strategies, in the order of the benchmark. They route as the routers of `ROUTERS`. */
1426
+ export declare const routerStrategies: {
1427
+ readonly straight: Strategy<"router", object>;
1428
+ readonly plugs: Strategy<"router", object>;
1429
+ readonly corners: Strategy<"router", RouterPreset<CornersOptions>>;
1430
+ readonly "corners-smooth": Strategy<"router", RouterPreset<CornersOptions>>;
1431
+ readonly trunks: Strategy<"router", RouterPreset<TrunksOptions>>;
1432
+ readonly shared: Strategy<"router", RouterPreset<SharedOptions>>;
1433
+ readonly "shared-all": Strategy<"router", RouterPreset<SharedOptions>>;
1434
+ readonly sections: Strategy<"router", RouterPreset<SectionsOptions>>;
1435
+ readonly "sections-tree": Strategy<"router", RouterPreset<SectionsOptions>>;
1436
+ };
1437
+ /** The options of the curve strategies `rounded` and `arc`. */
1438
+ export interface RadiusOptions {
1439
+ /** The radius of the corners. The default is 12. */
1440
+ readonly radius: number;
1441
+ }
1442
+ /** The options of the curve strategy `spline`. */
1443
+ export interface TensionOptions {
1444
+ /** The tension of the spline, from 0 (the spline) to 1 (the polyline). The default is 0. */
1445
+ readonly tension: number;
1446
+ }
1447
+ /** The built-in curve strategies, in the order of `CURVE_TYPES`. Each one gives the same segments as `curveOf` with its type. */
1448
+ export declare const curveStrategies: {
1449
+ readonly straight: Strategy<"curve", object>;
1450
+ readonly rounded: Strategy<"curve", RadiusOptions>;
1451
+ readonly spline: Strategy<"curve", TensionOptions>;
1452
+ readonly arc: Strategy<"curve", RadiusOptions>;
1453
+ };
1454
+ /** The options of a room strategy: the options of `roomDemand`, without the method. */
1455
+ export type RoomPreset = Omit<RoomOptions, "method">;
1456
+ /** The built-in room strategies: the methods of `roomDemand`. */
1457
+ export declare const roomStrategies: {
1458
+ readonly routes: Strategy<"room", RoomPreset>;
1459
+ readonly lines: Strategy<"room", RoomPreset>;
1460
+ };
1461
+ /** The built-in grouping rules: the strategies of the step `group`. The router `sections` makes its hubs and its zoom levels from their tree. */
1462
+ export declare const groupStrategies: {
1463
+ readonly quadtree: Strategy<"group", Required<SectionOptions>>;
1464
+ readonly keys: Strategy<"group", KeyOptions>;
1465
+ };
1466
+ /** The built-in strategies of each step, in order. A consumer adds its own: `createRegistry([...BUILT_IN_STRATEGIES, mine])`. */
1467
+ export declare const BUILT_IN_STRATEGIES: readonly AnyStrategy[];
1468
+ /** The registry of the built-in strategies. The benchmark and the site take their lists from it. */
1469
+ export declare const STRATEGIES: Registry;
1470
+ export type { ArcOptions, CornersOptions, CurveSpace, KeyOptions, NodeKey, RoundedOptions, SectionsOptions, SharedOptions, SplineOptions, TrunksOptions };
1107
1471
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/geom.ts","../src/grid.ts","../src/model.ts","../src/fixtures.ts","../src/cases.ts","../src/plugs.ts","../src/curves.ts","../src/curves/model.ts","../src/curves/space.ts","../src/curves/sample.ts","../src/curves/straight/index.ts","../src/curves/rounded/index.ts","../src/curves/spline/index.ts","../src/curves/arc/index.ts","../src/curves/index.ts","../src/visibility.ts","../src/ways.ts","../src/segments.ts","../src/sections.ts","../src/routers/straight.ts","../src/routers/plugs.ts","../src/routers/corners.ts","../src/routers/shared.ts","../src/routers/sections.ts","../src/routers/trunks.ts","../src/routers/index.ts","../src/room/index.ts","../src/bench/properties.ts","../src/bench/quality.ts","../src/bench/links.ts","../src/bench/run.ts","../src/bench/curves.ts","../src/bench/room.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/geom.ts","../src/grid.ts","../src/model.ts","../src/fixtures.ts","../src/cases.ts","../src/plugs.ts","../src/curves.ts","../src/curves/model.ts","../src/curves/space.ts","../src/curves/sample.ts","../src/curves/straight/index.ts","../src/curves/rounded/index.ts","../src/curves/spline/index.ts","../src/curves/arc/index.ts","../src/curves/index.ts","../src/visibility.ts","../src/ways.ts","../src/segments.ts","../src/sections.ts","../src/groups/quadtree/index.ts","../src/groups/keys/index.ts","../src/pick.ts","../src/routers/straight.ts","../src/routers/plugs.ts","../src/routers/corners.ts","../src/routers/shared.ts","../src/levels.ts","../src/room/index.ts","../src/strategies/model.ts","../src/routers/sections.ts","../src/routers/trunks.ts","../src/routers/index.ts","../src/room/lanes.ts","../src/bench/properties.ts","../src/bench/quality.ts","../src/bench/links.ts","../src/bench/run.ts","../src/bench/curves.ts","../src/bench/room.ts","../src/bench/sections.ts","../src/strategies/builtins.ts"],"mappings":"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"}