@mark1russell7/highways 0.1.4 → 0.1.5

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/README.md CHANGED
@@ -80,7 +80,10 @@ A host layout can pack the boxes of a far view in a grid, with no gap between th
80
80
  - With the method `lines`, the lanes of a gap are the straight lines between the centers of the boxes that cross the gap.
81
81
  - `openGaps(items, gaps)` moves each box by the growth of each gap before it. The boxes keep their size, their order and their alignment, so a grid stays a grid.
82
82
  - `makeRoom(items, links, options)` gives the gaps and the open board. `maxGrowth` limits the growth of the board on each axis, as a share of its size.
83
+ - With `passes: 2`, `roomDemand` finds the lanes again on the open board and adds the growth that they need. `maxGrowth` limits the sum of the passes.
83
84
  - `roomLinks(graph)` gives the links of a graph, with the count of the edges of each pair.
85
+ - `gapLanes(items, links, options)` gives each link of a far view its own lane in each gap. The lanes are `spacing` apart, around the middle of the gap.
86
+ - The option `order` of `gapLanes` sets the lane order in a gap: `links` (the order of the list), `ends` (by the sides of the turns) or `crossings` (the default).
84
87
 
85
88
  The host layout still packs the boxes. These functions do not place a box. They only open the gaps between the boxes.
86
89
 
@@ -104,6 +107,68 @@ The benchmark measures the board `packedGridBoard`: 96 touching boxes and 132 li
104
107
 
105
108
  On the packed board, the links are short only because they go through the boxes. The method `routes` is the default, because it gives the fewest crossings for its area.
106
109
 
110
+ `sweepRoom` changes one knob at a time on the same board. `growthSettings`, `laneSettings` and `passSettings` give the settings of the benchmark.
111
+
112
+ | Knob | Setting | Area | Crossings | Mean detour | Worst detour | Lane routes through a box |
113
+ |---|---|---:|---:|---:|---:|---:|
114
+ | `maxGrowth` | 0.12 | 1.25 | 288 | 1.34 | 2.33 | 6 |
115
+ | `maxGrowth` | 0.25 | 1.46 | 284 | 1.32 | 2.14 | 2 |
116
+ | `maxGrowth` | 0.30 and more | 1.50 | 276 | 1.32 | 2.09 | 2 |
117
+ | Lane order | `links` | 1.50 | 585 | 1.34 | 2.30 | 2 |
118
+ | Lane order | `ends` | 1.50 | 551 | 1.33 | 2.19 | 2 |
119
+ | Lane order | `crossings` | 1.50 | 467 | 1.33 | 2.23 | 2 |
120
+ | Passes | 2 | 1.57 | 281 | 1.32 | 2.03 | 2 |
121
+ | Gutter | 12 | 1.58 | 282 | 1.32 | 2.03 | 2 |
122
+
123
+ The links of a gap without lanes share one line. Thus the crossings on that line do not count. With a lane for each link, the crossings show, and the order `crossings` removes 20% of them. The spacing changes the crossings less than 5%. The mean detour stays near 1.32 for each knob, because a link with legs parallel to the axes goes around the boxes.
124
+
125
+ ## Strategies
126
+
127
+ The steps of the pipeline that vary have strategies. Each step has one interface, so a consumer chooses a strategy by its name or adds its own.
128
+
129
+ | Step | Input | Output | Built-in strategies |
130
+ |---|---|---|---|
131
+ | `router` | `Graph` | `Result` | `straight`, `plugs`, `corners`, `corners-smooth`, `trunks`, `shared`, `shared-all`, `sections`, `sections-tree` |
132
+ | `curve` | `CurveInput`: the points, the normals of the plugs and the free space | `CurveSegment[]` | `straight`, `rounded`, `spline`, `arc` |
133
+ | `room` | `RoomInput`: the boxes and the links of a board | `Gap[]` | `routes`, `lines` |
134
+
135
+ A strategy has a `step`, a `name`, a `describe` text, its `defaults` and the method `run(input, options?)`. The type of the options comes from `defaults`. Each option that a call does not give gets its default value.
136
+
137
+ - `defineStrategy({ step, name, describe, defaults, run, maxNodes? })` makes a strategy. The function `run` gets each option.
138
+ - `createRegistry(strategies)` makes a registry. Two strategies with one step and one name are an error.
139
+ - `register(registry, ...strategies)` gives a new registry. It does not change the registry before it.
140
+ - `listStrategies(registry, step)` gives the strategies of a step, in order. `findStrategy` and `getStrategy` give one strategy by its name.
141
+ - `asRouter(strategy, options?)` gives a `Router`, and `routersOf(registry)` gives the routers of a registry.
142
+ - `STRATEGIES` is the registry of `BUILT_IN_STRATEGIES`. The records `routerStrategies`, `curveStrategies` and `roomStrategies` give each built-in strategy with its typed options.
143
+
144
+ A registry is data. No import changes it. The benchmark and the site take their lists from `STRATEGIES`, so a new built-in strategy gets its rows and its button with no other edit. A consumer makes its own registry:
145
+
146
+ ```ts
147
+ import { BUILT_IN_STRATEGIES, center, createRegistry, defineStrategy, FIXTURES, routersOf, runBenchmark } from "@mark1russell7/highways";
148
+
149
+ const elbow = defineStrategy({
150
+ step: "router",
151
+ name: "elbow",
152
+ describe: "Each edge goes along one axis, then along the other, from center to center.",
153
+ defaults: { turn: "x" as "x" | "y" },
154
+ run(graph, o) {
155
+ const box = new Map(graph.nodes.map((n) => [n.id, n.box]));
156
+ const routes = graph.edges.map((e) => {
157
+ const a = center(box.get(e.source.node)!);
158
+ const b = center(box.get(e.target.node)!);
159
+ return { edge: e.id, points: [a, o.turn === "x" ? { x: b.x, y: a.y } : { x: a.x, y: b.y }, b] };
160
+ });
161
+ return { routes };
162
+ },
163
+ });
164
+ const registry = createRegistry([...BUILT_IN_STRATEGIES, elbow]);
165
+ const rows = runBenchmark(routersOf(registry), FIXTURES.slice(0, 1)); // The rows include the router `elbow`.
166
+ ```
167
+
168
+ The built-in strategies give the same output as their functions. `curveStrategies.rounded.run({ points, space }, { radius: 8 })` gives the segments of `curveOf(points, { type: "rounded", space, radius: 8 })`. `benchCurveStrategies` and the fourth argument of `benchRoom` take a list of strategies.
169
+
170
+ The plugs and the zoom levels have one strategy each, so they have no step yet.
171
+
107
172
  ## License
108
173
 
109
174
  MIT
package/build/index.d.ts CHANGED
@@ -770,7 +770,7 @@ export declare function splitPoint(start: Point, targets: readonly Point[], spli
770
770
  * The edges outside the groups go as in the corner router.
771
771
  */
772
772
  export declare function trunksRouter(options: TrunksOptions): Router;
773
- /** The routers that the benchmark races. */
773
+ /** The built-in routers. The registry `STRATEGIES` holds the same routers as strategies, and the benchmark races the routers of the registry. */
774
774
  export declare const ROUTERS: readonly Router[];
775
775
  /** An item with a box: a node of a graph, an item of a level or a box of a host layout. */
776
776
  export interface Boxed {
@@ -830,6 +830,12 @@ export interface RoomOptions {
830
830
  readonly lanes?: "link" | "count";
831
831
  /** Two box edges nearer than this distance make one boundary of the sweep. The default is 0.5. */
832
832
  readonly snap?: number;
833
+ /**
834
+ * The number of passes of the demand. The default is 1.
835
+ * 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.
836
+ * The limit `maxGrowth` applies to the sum of the passes.
837
+ */
838
+ readonly passes?: number;
833
839
  }
834
840
  /** The demand of a board and the board with its gaps open. */
835
841
  export interface Room<T extends Boxed> {
@@ -856,6 +862,31 @@ export declare function roomDemand(items: readonly Boxed[], links: readonly Room
856
862
  export declare function makeRoom<T extends Boxed>(items: readonly T[], links: readonly RoomLink[], options?: RoomOptions): Room<T>;
857
863
  /** 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
864
  export declare function roomLinks(graph: Graph): RoomLink[];
865
+ /**
866
+ * The lane order of the pieces of the links in one gap.
867
+ *
868
+ * - `links`: the order of the list of links. This order reads nothing of the board.
869
+ * - `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.
870
+ * - `crossings`: the order with the fewest crossings between the pieces of the gap and the legs at their ends. A local search finds it.
871
+ */
872
+ export type LaneOrder = "links" | "ends" | "crossings";
873
+ /** The lane orders of `gapLanes`, in the order of the benchmark. */
874
+ export declare const LANE_ORDERS: readonly LaneOrder[];
875
+ /** The options of `gapLanes`. */
876
+ export interface GapLaneOptions {
877
+ /** The largest distance between two lanes. A narrow gap puts its lanes nearer. The default is 4. */
878
+ readonly spacing?: number;
879
+ /** The lane order in each gap. The default is `crossings`. */
880
+ readonly order?: LaneOrder;
881
+ /** Two box edges nearer than this distance make one boundary of the sweep, as in `boardGaps`. The default is 0.5. */
882
+ readonly snap?: number;
883
+ }
884
+ /**
885
+ * 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.
886
+ * A leg of a link moves across its gap only, so the link keeps its plugs and the axes of its legs.
887
+ * When a move puts a link through more boxes than before, the link keeps its points.
888
+ */
889
+ export declare function gapLanes(items: readonly Boxed[], links: readonly LevelLink[], options?: GapLaneOptions): LevelLink[];
859
890
  /** A broken hard rule. A correct router has none. */
860
891
  export interface Violation {
861
892
  readonly rule: "complete" | "ends-at-plugs" | "fixed-plugs" | "no-pass-through" | "counts-sum" | "link-ends" | "bundle-trunk" | "run-shared";
@@ -1035,11 +1066,114 @@ export declare function formatTable(rows: readonly BenchRow[]): string;
1035
1066
  * A router without such levels gets a dash in the columns of the levels.
1036
1067
  */
1037
1068
  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 {
1069
+ /** The input of a curve strategy: one polyline and the context of its route. */
1070
+ export interface CurveInput {
1071
+ /** These points are the polyline: a route of a router, a lane of `laneRoutes` or a link of a zoom level. */
1072
+ readonly points: readonly Point[];
1073
+ /** The curve leaves the first point along this outward normal of its plug, if the strategy reads it. */
1074
+ readonly startNormal?: Point;
1075
+ /** The curve comes into the last point against this outward normal of its plug, if the strategy reads it. */
1076
+ readonly endNormal?: Point;
1077
+ /** The boxes that the curve must not go through, from `curveSpace`. */
1078
+ readonly space?: CurveSpace;
1079
+ }
1080
+ /** The input of a room strategy: the boxes of a board and the links between them. */
1081
+ export interface RoomInput {
1082
+ readonly items: readonly Boxed[];
1083
+ readonly links: readonly RoomLink[];
1084
+ }
1085
+ /**
1086
+ * The steps that have strategies, with the fixed input and output type of each step.
1087
+ *
1088
+ * - `router`: a graph in, the routes (and the `levels`, `bundles` and `runs`) out.
1089
+ * - `curve`: a polyline in, the segments of a curve out.
1090
+ * - `room`: the boxes and links of a board in, the gaps of the board with their need out.
1091
+ */
1092
+ export interface StepTypes {
1093
+ readonly router: {
1094
+ readonly input: Graph;
1095
+ readonly output: Result;
1096
+ };
1097
+ readonly curve: {
1098
+ readonly input: CurveInput;
1099
+ readonly output: CurveSegment[];
1100
+ };
1101
+ readonly room: {
1102
+ readonly input: RoomInput;
1103
+ readonly output: Gap[];
1104
+ };
1105
+ }
1106
+ /** The name of a step that has strategies. */
1107
+ export type Step = keyof StepTypes;
1108
+ /** The input type of a step. */
1109
+ export type StepInput<S extends Step> = StepTypes[S]["input"];
1110
+ /** The output type of a step. */
1111
+ export type StepOutput<S extends Step> = StepTypes[S]["output"];
1112
+ /** The steps that have strategies, in the order of the pipeline. */
1113
+ export declare const STEPS: readonly Step[];
1114
+ /**
1115
+ * A strategy: one way to do one step, with a name and a description.
1116
+ * The same input and the same options must give the same output.
1117
+ */
1118
+ export interface Strategy<S extends Step = Step, O extends object = object> {
1119
+ /** The step of the strategy. It fixes the input and the output type. */
1120
+ readonly step: S;
1121
+ /** The name of the strategy. Each name is unique in its step of a registry. */
1122
+ readonly name: string;
1123
+ /** One or two sentences that tell what the strategy does. The site and the documents show them. */
1124
+ readonly describe: string;
1125
+ /** The values of the options when the caller gives no value. */
1126
+ readonly defaults: Readonly<O>;
1127
+ /** The benchmark skips an input with more nodes than this. Without it, the strategy takes each input. */
1128
+ readonly maxNodes?: number;
1129
+ /** This method does the step. Each option that `options` does not give gets its value from `defaults`. */
1130
+ run(input: StepInput<S>, options?: Partial<O>): StepOutput<S>;
1131
+ }
1132
+ /** A strategy of any step. A registry holds a list of these. */
1133
+ export type AnyStrategy = { [S in Step]: Strategy<S>; }[Step];
1134
+ /** The definition of a strategy, for `defineStrategy`. */
1135
+ export interface StrategyDefinition<S extends Step, O extends object> {
1136
+ readonly step: S;
1137
+ readonly name: string;
1138
+ readonly describe: string;
1139
+ /** These values are the options when the caller gives no value. Give `{}` for a strategy without options. */
1140
+ readonly defaults: O;
1141
+ readonly maxNodes?: number;
1142
+ /** This function does the step. It gets each option, from the caller or from `defaults`. */
1143
+ run(input: StepInput<S>, options: Readonly<O>): StepOutput<S>;
1144
+ }
1145
+ /**
1146
+ * This function makes a strategy from its definition. The strategy fills the missing options from `defaults`.
1147
+ * When the caller gives no option, the definition gets the `defaults` object itself.
1148
+ */
1149
+ export declare function defineStrategy<S extends Step, O extends object>(definition: StrategyDefinition<S, O>): Strategy<S, O>;
1150
+ /**
1151
+ * A registry: the strategies of each step, in order. A registry is data. No import changes it.
1152
+ * A consumer makes its own registry with `createRegistry`, and adds a strategy with `register`.
1153
+ */
1154
+ export type Registry = { readonly [S in Step]: readonly Strategy<S>[]; };
1155
+ /** 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. */
1156
+ export declare function createRegistry(strategies: readonly AnyStrategy[]): Registry;
1157
+ /** This function gives a new registry with the strategies of `registry` and then `strategies`. It does not change `registry`. */
1158
+ export declare function register(registry: Registry, ...strategies: readonly AnyStrategy[]): Registry;
1159
+ /** This function gives the strategies of one step of a registry, in order. */
1160
+ export declare function listStrategies<S extends Step>(registry: Registry, step: S): readonly Strategy<S>[];
1161
+ /** This function gives the strategy of one step with a name, or `undefined` when the registry has no such strategy. */
1162
+ export declare function findStrategy<S extends Step>(registry: Registry, step: S, name: string): Strategy<S> | undefined;
1163
+ /** This function gives the strategy of one step with a name. When the registry has no such strategy, the function throws an error. */
1164
+ export declare function getStrategy<S extends Step>(registry: Registry, step: S, name: string): Strategy<S>;
1165
+ /** This function gives a `Router` that runs a router strategy with the options. The router keeps the name and the `maxNodes` of the strategy. */
1166
+ export declare function asRouter<O extends object>(strategy: Strategy<"router", O>, options?: Partial<O>): Router;
1167
+ /** This function gives the router strategies of a registry as `Router` objects, in order. The benchmark races them. */
1168
+ export declare function routersOf(registry: Registry): Router[];
1169
+ /**
1170
+ * One row of the benchmark of the curves: one curve type on the routes of one router on one fixture.
1171
+ * The type `T` of the name of the curve is `CurveType` for `benchCurves`, and `string` for `benchCurveStrategies`.
1172
+ */
1173
+ export interface CurveBenchRow<T extends string = CurveType> {
1040
1174
  readonly router: string;
1041
1175
  readonly fixture: string;
1042
- readonly type: CurveType;
1176
+ readonly type: T;
1043
1177
  /** The number of routes. */
1044
1178
  readonly links: number;
1045
1179
  /** The number of polylines that go through a box that is not one of their ends (`measureLinks`). */
@@ -1066,8 +1200,13 @@ export interface CurveBenchOptions {
1066
1200
  * The type `spline` leaves each plug along the normal of the nearest side of its node.
1067
1201
  */
1068
1202
  export declare function benchCurves(router: Router, fixture: string, graph: Graph, options?: CurveBenchOptions): CurveBenchRow[];
1203
+ /**
1204
+ * This function does the work of `benchCurves` with a list of curve strategies, in place of the curve types.
1205
+ * The option `radius` goes to each strategy. A strategy without such an option does not read it.
1206
+ */
1207
+ export declare function benchCurveStrategies(router: Router, fixture: string, graph: Graph, curves: readonly Strategy<"curve">[], options?: CurveBenchOptions): CurveBenchRow<string>[];
1069
1208
  /** This function writes the rows of `benchCurves` as a Markdown table. */
1070
- export declare function formatCurves(rows: readonly CurveBenchRow[]): string;
1209
+ export declare function formatCurves(rows: readonly CurveBenchRow<string>[]): string;
1071
1210
  /** One row of the benchmark of the room: one state of a board, packed or open, and the measures of its links. */
1072
1211
  export interface RoomBenchRow {
1073
1212
  readonly fixture: string;
@@ -1093,15 +1232,83 @@ export interface RoomBenchRow {
1093
1232
  }
1094
1233
  /**
1095
1234
  * 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`.
1235
+ * With a lane order, each link of the far view gets its own lane in each gap (`gapLanes` at the lane width `spacing`).
1236
+ * Without it, the links of a gap share the lines of the level links.
1237
+ * The function also measures the lane routes of the router `sections` at the lane width `spacing`.
1097
1238
  */
1098
- export declare function measureBoard(graph: Graph, spacing: number): Omit<RoomBenchRow, "fixture" | "board" | "area" | "ms">;
1239
+ export declare function measureBoard(graph: Graph, spacing: number, order?: LaneOrder): Omit<RoomBenchRow, "fixture" | "board" | "area" | "ms">;
1099
1240
  /**
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`.
1241
+ * This function measures a packed board, the board with each gap open to the gutter only, and the board that each room strategy opens.
1242
+ * The options are the same for each strategy, except `method`. The default strategies are the methods `routes` and `lines` of `roomDemand`.
1102
1243
  */
1103
- export declare function benchRoom(fixture: string, graph: Graph, options?: RoomOptions): RoomBenchRow[];
1244
+ export declare function benchRoom(fixture: string, graph: Graph, options?: RoomOptions, methods?: readonly Strategy<"room">[]): RoomBenchRow[];
1245
+ /** One setting of a sweep of the room: the options of `makeRoom` and the lane order of the far view. */
1246
+ export interface RoomSetting {
1247
+ /** The name of the setting in the column `board`. */
1248
+ readonly name: string;
1249
+ readonly options: RoomOptions;
1250
+ /** The lane order of the far view. Without it, the links of a gap share the lines of the level links. */
1251
+ readonly lanes?: LaneOrder;
1252
+ }
1253
+ /**
1254
+ * This function measures the board that `makeRoom` opens with each setting, with the method `routes`.
1255
+ * 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`.
1256
+ */
1257
+ export declare function sweepRoom(fixture: string, graph: Graph, settings: readonly RoomSetting[], baseline?: RoomOptions): RoomBenchRow[];
1258
+ /** The values of `maxGrowth` of the sweep of ROOM-A. */
1259
+ export declare const GROWTH_SWEEP: readonly number[];
1260
+ /** This function gives the settings of ROOM-A: the area and the faults for each `maxGrowth`, at gutter 8 and spacing 4. */
1261
+ export declare function growthSettings(values?: readonly number[]): RoomSetting[];
1262
+ /**
1263
+ * This function gives the settings of ROOM-C: each lane order of the far view at each spacing, at gutter 8.
1264
+ * The order `shared` is the far view without lanes, as before ROOM-C.
1265
+ */
1266
+ export declare function laneSettings(spacings?: readonly number[], orders?: readonly LaneOrder[]): RoomSetting[];
1267
+ /** This function gives the settings of ROOM-D: each gutter with each number of passes, at spacing 4. */
1268
+ export declare function passSettings(gutters?: readonly number[], passes?: readonly number[]): RoomSetting[];
1104
1269
  /** This function writes the rows of `benchRoom` as a Markdown table. */
1105
1270
  export declare function formatRoom(rows: readonly RoomBenchRow[]): string;
1271
+ /** The options of a router strategy: the options of its router, without the name and the limit of the benchmark. */
1272
+ export type RouterPreset<O> = Omit<O, "name" | "maxNodes">;
1273
+ /** The built-in router strategies, in the order of the benchmark. They route as the routers of `ROUTERS`. */
1274
+ export declare const routerStrategies: {
1275
+ readonly straight: Strategy<"router", object>;
1276
+ readonly plugs: Strategy<"router", object>;
1277
+ readonly corners: Strategy<"router", RouterPreset<CornersOptions>>;
1278
+ readonly "corners-smooth": Strategy<"router", RouterPreset<CornersOptions>>;
1279
+ readonly trunks: Strategy<"router", RouterPreset<TrunksOptions>>;
1280
+ readonly shared: Strategy<"router", RouterPreset<SharedOptions>>;
1281
+ readonly "shared-all": Strategy<"router", RouterPreset<SharedOptions>>;
1282
+ readonly sections: Strategy<"router", RouterPreset<SectionsOptions>>;
1283
+ readonly "sections-tree": Strategy<"router", RouterPreset<SectionsOptions>>;
1284
+ };
1285
+ /** The options of the curve strategies `rounded` and `arc`. */
1286
+ export interface RadiusOptions {
1287
+ /** The radius of the corners. The default is 12. */
1288
+ readonly radius: number;
1289
+ }
1290
+ /** The options of the curve strategy `spline`. */
1291
+ export interface TensionOptions {
1292
+ /** The tension of the spline, from 0 (the spline) to 1 (the polyline). The default is 0. */
1293
+ readonly tension: number;
1294
+ }
1295
+ /** The built-in curve strategies, in the order of `CURVE_TYPES`. Each one gives the same segments as `curveOf` with its type. */
1296
+ export declare const curveStrategies: {
1297
+ readonly straight: Strategy<"curve", object>;
1298
+ readonly rounded: Strategy<"curve", RadiusOptions>;
1299
+ readonly spline: Strategy<"curve", TensionOptions>;
1300
+ readonly arc: Strategy<"curve", RadiusOptions>;
1301
+ };
1302
+ /** The options of a room strategy: the options of `roomDemand`, without the method. */
1303
+ export type RoomPreset = Omit<RoomOptions, "method">;
1304
+ /** The built-in room strategies: the methods of `roomDemand`. */
1305
+ export declare const roomStrategies: {
1306
+ readonly routes: Strategy<"room", RoomPreset>;
1307
+ readonly lines: Strategy<"room", RoomPreset>;
1308
+ };
1309
+ /** The built-in strategies of each step, in order. A consumer adds its own: `createRegistry([...BUILT_IN_STRATEGIES, mine])`. */
1310
+ export declare const BUILT_IN_STRATEGIES: readonly AnyStrategy[];
1311
+ /** The registry of the built-in strategies. The benchmark and the site take their lists from it. */
1312
+ export declare const STRATEGIES: Registry;
1106
1313
  export type { ArcOptions, CornersOptions, CurveSpace, RoundedOptions, SectionsOptions, SharedOptions, SplineOptions, TrunksOptions };
1107
1314
  //# 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/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/room/lanes.ts","../src/bench/properties.ts","../src/bench/quality.ts","../src/bench/links.ts","../src/bench/run.ts","../src/strategies/model.ts","../src/bench/curves.ts","../src/bench/room.ts","../src/strategies/builtins.ts"],"mappings":";iBACiB;WACN;WACA;;;iBAIM;WACN;WACA;WACA;WACA;;;wBAIK,KAAK,GAAG,OAAO,GAAG;;wBAOlB,OAAO,GAAG,MAAM;;wBAKhB,QAAQ,GAAG,KAAK,YAAY;;wBAK5B,eAAe,YAAY;;;;;wBAY3B,cAAc,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG;;;;;wBAY/C,eAAe,GAAG,OAAO,GAAG,OAAO,KAAK,KAAK;;wBAK7C,gBAAgB,GAAG,OAAO,GAAG,OAAO,YAAY,YAAY,YAAY,YAAY;;wBA2BpF,iBAAiB,GAAG,OAAO,GAAG;;wBAO9B,qBAAqB,GAAG,OAAO,GAAG,OAAO,GAAG;;wBAS5C,mBAAmB,GAAG,OAAO,GAAG,OAAO,KAAK;;;;;wBAiB5C,MAAM,YAAY,SAAS;;wBAgB3B,UAAU,YAAY,SAAS;;;;;wBAQ/B,gBAAgB,YAAY,SAAS;;;;;wBAgBrC,QAAQ,YAAY,SAAS,YAAY;;;;;;qBC1J5C,KAAK;;;EAUhB,YAAY;;EAyHZ,IAAI,MAAM,GAAG,GAAG;;EAKhB,WAAW,MAAM,GAAG,GAAG,OAAO,GAAG;;EAMjC,MAAM,GAAG,KAAK,QAAQ,MAAM;;EAK5B,aAAa,GAAG,OAAO,GAAG,OAAO,gBAAgB,QAAQ,MAAM;;;;;EAU/D,YAAY,GAAG,OAAO,GAAG,OAAO,gBAAgB,OAAO,MAAM;;;wBAM/C,cAAc,GAAG,OAAO,GAAG,QAAQ;;YCvKvC;;;;;iBAMK;WACN;;WAEA,KAAK;;WAEL,OAAO;;;iBAID;WACN;WACA,KAAK;WACL,iBAAiB;;;iBAIX;WACN;WACA;;;iBAIM;WACN;WACA,QAAQ;WACR,QAAQ;WACR,OAAO,SAAS;;;iBAIV;WACN,gBAAgB;WAChB,gBAAgB;;;iBAIV;WACN;WACA,iBAAiB;;;;;;iBAOX;WACN;WACA,gBAAgB;WAChB,gBAAgB;;;iBAIV;WACN;WACA,KAAK;WACL;;;iBAIM;WACN;WACA;WACA;WACA,iBAAiB;;;iBAIX;WACN,iBAAiB;WACjB,kBAAkB;WAClB,mBAAmB;;WAEnB,gBAAgB;;;;;;iBAOV;WACN;;WAEA;;WAEA;;WAEA;;WAEA,gBAAgB;;;;;;iBAOV;WACN;;WAEA;WACA,iBAAiB;;WAEjB;;;YAIC,aAAa,MAAM;;iBAGd;WACN;;WAEA;EACT,MAAM,OAAO,QAAQ;;;wBAIP,UAAU,GAAG,QAAQ,YAAY;;wBAOjC,eAAe,MAAM,MAAM,KAAK,MAAM;;wBC/HtC,IAAI;;;;;YAeR;;iBAGK;WACN;WACA,MAAM;WACN;;WAEA;WACA;;WAEA;;WAEA;;;qBAIE,mBAAmB;;;;;wBAqBhB,YAAY,MAAM,cAAc;;;;;iBCnD/B;WACN;;WAEA;;WAEA,YAAY;;;;;;wBA+BP,oBAAoB;;;;;;wBASpB,iBAAiB;;;;;;wBAuBjB,mBAAmB;;;;;;;;;wBAsCnB,mBAAmB;;qBAqBtB,gBAAgB;;iBClIZ;WACN,OAAO;WACP,QAAQ;;;qBAIN,aAAa,SAAS,OAAO,MAAM;;wBAQhC,YAAY,KAAK,KAAK,GAAG,QAAQ;;;;;wBAgBjC,WAAW,KAAK,KAAK,QAAQ,QAAQ;;;;;wBAYrC,YAAY,KAAK,KAAK,MAAM,MAAM,QAAQ,OAAO,iBAAY;;;;;wBAsB7D,UAAU,MAAM,MAAM,KAAK,KAAK,QAAQ,QAAQ;;iBCjE/C;;WAEN;;WAEA;;WAEA;;;;;;wBAOK,iBAAiB,eAAe;;;;;;;wBAchC,gBAAgB,IAAI,OAAO,QAAQ,OAAO,QAAQ,OAAO,UAAS,oBAAyB;;;;;wBAkC3F,aAAa,YAAY,SAAS,gBAAgB,iBAAY;;;;;;;;;YCtDlE;;qBAGC,sBAAsB;;iBAGlB;WACN;WACA,IAAI;;;iBAIE;WACN;WACA,IAAI;;;iBAIE;WACN;WACA,IAAI;WACJ,IAAI;WACJ,IAAI;;;;;;;iBAQE;WACN;WACA,QAAQ;WACR;WACA;WACA;WACA,IAAI;;;;;;YAOH,eAAe,cAAc,cAAc,eAAe;;wBAGtD,eAAe,iBAAiB,SAAS,eAAa;;;;;UC9CrD;;WAEN,gBAAgB;;WAEhB;;;;;EAKT,QAAQ,YAAY,SAAS,YAAY;;;;;;wBAO3B,WAAW,gBAAgB,OAAO,qBAAmB;;;;;;wBCfrD,YAAY,mBAAmB,gBAAgB,qBAAkB;;wBAkCjE,QAAQ,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,YAAY;;;;;wBAahE,UAAU,mBAAmB,gBAAgB;;wBCtD7C,cAAc,iBAAiB,UAAU;;UCCxC;;WAEN;;WAEA,QAAQ;;;;;;;;wBASH,aAAa,iBAAiB,SAAS,UAAS,iBAAsB;;UCbrE;;;;;WAKN;;WAEA,cAAc;;WAEd,YAAY;;WAEZ,QAAQ;;;;;;;;;;wBAWH,YAAY,iBAAiB,SAAS,UAAS,gBAAqB;;UCtBnE;;WAEN;;WAEA,QAAQ;;;;;;;;wBAYH,SAAS,iBAAiB,SAAS,UAAS,aAAkB;;iBCJ7D;WACN,MAAM;;WAEN;;WAEA;;WAEA,cAAc;;WAEd,YAAY;;WAEZ,QAAQ;;;;;;;wBAQH,QAAQ,iBAAiB,SAAS,SAAS,eAAe;;qBC/B7D;;;EAIX,YAAY,gBAAgB,QAAQ;;EAMpC,MAAM,GAAG,OAAO,GAAG,OAAO,aAAa,OAAO,YAAY;;;;;EAQ1D,IAAI,GAAG,OAAO,GAAG,OAAO,aAAa,OAAO,YAAY,QAAQ;;EAWhE,UAAU,YAAY,SAAS,aAAa,OAAO,YAAY;;EAM/D,MAAM,KAAK,KAAK,QAAQ,GAAG;;EAK3B,OAAO,GAAG,OAAO,aAAa,OAAO;;;iBAmBtB;WACN,OAAO;WACP;;;iBAIM;WACN,QAAQ;WACR;WACA;WACA;;;iBAIM;;WAEN;;WAEA;;;;;WAKA;;;;;WAKA;;;;;;;;qBASE;;WACF,QAAQ;;EA6BjB,YAAY,gBAAgB,QAAQ,WAAW,WAAW,SAAS;;MAgE/D;;EAOJ,QAAQ,GAAG;;EAkBX,eAAe,GAAG,OAAO,WAAW;;;;;;;EAmGpC,KAAK,MAAM,OAAO,IAAI,OAAO,QAAQ,WAAW,WAAW,sBAAsB,iBAAoB;;;;;EASrG,UAAU,eAAe,YAAY,aAAa,aAAa;;EAyJ/D,KAAK,YAAY,SAAS,qBAAiB;;;iBC1d5B;;WAEN;;WAEA;;WAEA;;;;;;qBAOE;;WACF,WAAW;WACX,SAAS;WACT;;EAIT,YAAY,gBAAgB,QAAQ,UAAS;;EAQ7C,IAAI,GAAG,OAAO;;EAKd,QAAQ,IAAI,MAAM,IAAI,MAAM,MAAM,YAAY,QAAQ;;EAgBtD,SAAS,IAAI,MAAM,IAAI,QAAQ;;EAM/B,OAAO,MAAM,OAAO,IAAI,OAAO;;;iBC1DhB;WACN;WACA,iBAAiB;;WAEjB;;WAEA;;;iBAIM;WACN;;WAEA;WACA;;;iBAIM;WACN;WACA,mBAAmB;;;iBAIb;WACN,mBAAmB;WACnB,gBAAgB;;;;;;wBAmBX,WAAW,QAAQ,SAAS;;wBAkD5B,WAAW,OAAO,cAAc,MAAM,OAAO;;;;;wBAgB7C,eAAe,YAAY,SAAS,YAAY;;iBAuB/C;;WAEN;;WAEA;;;;;;wBAOK,UAAU,OAAO,cAAc,SAAS,mBAAmB;;wBAK3D,OAAO;;;;;;;;;wBAYP,WAAW,QAAQ,SAAS,cAAc,MAAM,qBAAqB,mBAAmB,oBAA8B;;;;;;;wBA4CtH,WAAW,cAAc,SAAS,iBAAiB;;iBC9MlD;;WAEN;WACA;WACA,MAAM;;WAEN;WACA,mBAAmB;;;iBAIb;;WAEN;;WAEA;;;;;;wBAOK,cAAc,gBAAgB,QAAQ,UAAS,iBAAsB;;wBA0CrE,YAAY,MAAM,UAAU;;wBAW5B,UAAU,MAAM;;wBC3EhB,QAAQ,KAAK,KAAK,QAAQ,QAAQ;;;;;qBAerC,gBAAgB;;;;;qBCVhB,aAAa;;UCHT,uBAAuB;;WAE7B;;WAEA;;;;;;;wBAQK,cAAc,SAAS,iBAAiB;;UCZvC,sBAAsB;;WAE5B;;WAEA,OAAO;;WAEP;;WAEA;;;;;;;;wBAyCK,aAAa,SAAS,gBAAgB;;UC7CrC,wBAAwB,YAAY;;WAE1C;;;;;WAKA;;WAEA;;WAEA;;;;;;;;;;;;;wBAsBK,eAAe,SAAS,kBAAkB;;UCrCzC,sBAAsB;;WAE5B;;WAEA,MAAM;;WAEN;;WAEA;;WAEA;;;qBAIE,cAAc;;;;;wBASX,WAAW,gBAAgB,QAAQ,MAAM,WAAW,mBAAc,YAAY;;;;;wBAkB9E,UAAU,KAAK,OAAO,MAAM,OAAO;WAA8B;WAAuB,MAAM;;;;;;wBAgB9F,WAAW,OAAO,OAAO,kBAAkB,SAAS,eAAe,OAAO,GAAG,mBAAmB,eAAe;;;;;;wBAkB/G,aAAa,SAAS,gBAAgB;;qBCjEzC,kBAAkB;;iBCXd;WACN;WACA,KAAK;;;iBAIC;WACN;WACA;WACA;;;;;;iBAOM;WACN;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;;YAIC;;iBAGK;;WAEN;;WAEA;;;;;WAKA;;;;;;;WAOA,SAAS;;WAET,SAAS;;WAET;;WAEA;;;;;;WAMA;;;iBAIM,KAAK,UAAU;WACrB,eAAe;WACf,OAAO;;;;;;wBAiBF,UAAU,gBAAgB,SAAS,gBAA8B;;;;;;wBA0CjE,SAAS,UAAU,OAAO,gBAAgB,KAAK,eAAe,OAAO,gBAA8B;;;;;wBAkBnG,WAAW,gBAAgB,SAAS,gBAAgB,YAAY,UAAS,cAAmB;;wBA0B5F,SAAS,UAAU,OAAO,gBAAgB,KAAK,gBAAgB,YAAY,UAAS,cAAmB,KAAK;;wBAM5G,UAAU,OAAO,QAAQ;;;;;;;;YC9K7B;;qBAGC,sBAAsB;;iBAGlB;;WAEN;;WAEA,QAAQ;;WAER;;;;;;;wBAwBK,SAAS,gBAAgB,SAAS,gBAAgB,aAAa,UAAS,iBAAsB;;iBC3C7F;WACN;WASA;WACA;;;qBAIE;;;;;;;;;;wBAWG,gBAAgB,OAAO,OAAO,QAAQ,QAAQ,iBAAc;;iBCf3D;;WAEN;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;;qBAIE;;wBAQG,eAAe,OAAO,OAAO,QAAQ,SAAS;;;;;wBAqG9C,UAAU,KAAK,KAAK,IAAI,OAAO,MAAM;;;;;wBAoBrC,eAAe,0BAA0B,OAAO;;iBAsB/C;WACN;WACA;;WAEA;;;wBAIK,iBAAiB,QAAQ,QAAQ,OAAO,SAAS;;;;;iBC5LhD;;WAEN;;;;;WAKA;;;;;WAKA;;WAEA;;;;;WAKA;;;iBAIM,oBAAoB;WAC1B;;WAEA;;WAEA;;WAEA;;;iBAIM;;WAEN;;;qBAIE;;qBAEA;;qBAEA;;iBAGI;WACN;WACA;WACA,iBAAiB;;;;;;wBAOZ,YAAY,YAAY;;wBAaxB,eAAe,YAAY;;;;;wBAU3B,aAAa,OAAO,oBAAoB,MAAM,gBAAgB,gBAAgB,UAAS,mBAAwB;;wBA0C/G,mBAAmB,OAAO,OAAO,QAAQ,QAAQ,UAAS,mBAAwB;;wBAYlF,cAAc,gBAAgB;;wBAgB9B,aAAa,OAAO,OAAO,UAAS,mBAAwB;;;;;wBAe5D,mBAAmB,QAAQ,QAAQ,UAAS,mBAAwB;;wBAKpE,UAAU,eAAe,eAAe;;iBCzKvC;WACN;WACA;WACA;WACA;;WAEA;;WAEA;WACA;;WAEA,iBAAiB;WACjB,SAAS;;WAET,QAAQ;;WAER,sBAAsB;;;iBAIhB;;WAEN;;;wBAIK,aAAa,kBAAkB,UAAU,mBAAmB,eAAe,UAAS,eAAoB;;;;;wBAaxG,SAAS,YAAY;;wBAqBrB,SAAS,QAAQ,QAAQ,iBAAiB,OAAO,OAAO,kBAAa;;wBA8BrE,YAAY,eAAe;;;;;wBAe3B,aAAa,eAAe;;iBC5G3B;;WAEN,iBAAiB;;WAEjB,cAAc;;WAEd,YAAY;;WAEZ,QAAQ;;;iBAIF;WACN,gBAAgB;WAChB,gBAAgB;;;;;;;;;iBAUV;WACN;aAAmB,OAAO;aAAgB,QAAQ;;WAClD;aAAkB,OAAO;aAAqB,QAAQ;;WACtD;aAAiB,OAAO;aAAoB,QAAQ;;;;YAInD,aAAa;;YAGb,UAAU,UAAU,QAAQ,UAAU;;YAGtC,WAAW,UAAU,QAAQ,UAAU;;qBAGtC,gBAAgB;;;;;iBAMZ,SAAS,UAAU,OAAO,MAAM;;WAEtC,MAAM;;WAEN;;WAEA;;WAEA,UAAU,SAAS;;WAEnB;;EAET,IAAI,OAAO,UAAU,IAAI,UAAU,QAAQ,KAAK,WAAW;;;YAIjD,iBAAiB,KAAK,OAAO,SAAS,MAAK;;iBAGtC,mBAAmB,UAAU,MAAM;WACzC,MAAM;WACN;WACA;;WAEA,UAAU;WACV;;EAET,IAAI,OAAO,UAAU,IAAI,SAAS,SAAS,KAAK,WAAW;;;;;;wBAO7C,eAAe,UAAU,MAAM,kBAAkB,YAAY,mBAAmB,GAAG,KAAK,SAAS,GAAG;;;;;YAqBxG,uBAAuB,KAAK,gBAAgB,SAAS;;wBAGjD,eAAe,qBAAqB,gBAAgB;;wBAYpD,SAAS,UAAU,aAAa,qBAAqB,gBAAgB;;wBAKrE,eAAe,UAAU,MAAM,UAAU,UAAU,MAAM,aAAa,SAAS;;wBAK/E,aAAa,UAAU,MAAM,UAAU,UAAU,MAAM,GAAG,eAAe,SAAS;;wBAKlF,YAAY,UAAU,MAAM,UAAU,UAAU,MAAM,GAAG,eAAe,SAAS;;wBAOjF,SAAS,kBAAkB,UAAU,mBAAmB,IAAI,UAAU,QAAQ,KAAK;;wBASnF,UAAU,UAAU,WAAW;;;;;iBC3I9B,cAAc,mBAAmB;WACvC;WACA;WACA,MAAM;;WAEN;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;;iBAIM;;WAEN;;WAEA;;;;;;;wBAQK,YAAY,QAAQ,QAAQ,iBAAiB,OAAO,OAAO,UAAS,oBAAyB;;;;;wBAe7F,qBACd,QAAQ,QACR,iBACA,OAAO,OACP,iBAAiB,qBACjB,UAAS,oBACR;;wBAoDa,aAAa,eAAe;;iBCxG3B;WACN;;WAEA;;WAEA;;WAEA,QAAQ;;WAER;;WAEA;;WAEA;;;;;WAKA;;WAEA;;;;;;;;wBAwBK,aAAa,OAAO,OAAO,iBAAiB,QAAQ,YAAY,KAAK;;;;;wBAkCrE,UACd,iBACA,OAAO,OACP,UAAS,aACT,mBAAkB,qBACjB;;iBA0Bc;;WAEN;WACA,SAAS;;WAET,QAAQ;;;;;;wBAOH,UAAU,iBAAiB,OAAO,OAAO,mBAAmB,eAAe,WAAU,cAA0C;;qBAqBlI;;wBAGG,eAAe,6BAA2C;;;;;wBAQ1D,aAAa,8BAA4C,kBAAiB,cAA4B;;wBAQtG,aAAa,6BAA6C,6BAAqC;;wBAK/F,WAAW,eAAe;;YCtK9B,aAAa,KAAK,KAAK;;qBAmBtB;WACF,UAAU;WACV,OAAO;WACP,SAAS,mBAAmB,aAAa;WACzC,kBAAkB,mBAAmB,aAAa;WAClD,QAAQ,mBAAmB,aAAa;WACxC,QAAQ,mBAAmB,aAAa;WACxC,cAAc,mBAAmB,aAAa;WAC9C,UAAU,mBAAmB,aAAa;WAC1C,iBAAiB,mBAAmB,aAAa;;;iBA4D3C;;WAEN;;;iBAIM;;WAEN;;;qBAIE;WACF,UAAU;WACV,SAAS,kBAAkB;WAC3B,QAAQ,kBAAkB;WAC1B,KAAK,kBAAkB;;;YA2BtB,aAAa,KAAK;;qBAMjB;WACF,QAAQ,iBAAiB;WACzB,OAAO,iBAAiB;;;qBAOtB,8BAA8B;;qBAO9B,YAAY"}