@willcgage/module-schematic 0.106.0 → 0.107.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +44 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +52 -1
- package/dist/index.d.ts +52 -1
- package/dist/index.js +41 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1703,6 +1703,33 @@ var FAST_TRACKS_N_ME55_CROSSOVERS = [
|
|
|
1703
1703
|
};
|
|
1704
1704
|
});
|
|
1705
1705
|
var DEFAULT_FLEX_PART_ID = "atlas-c55-n-flex";
|
|
1706
|
+
var GENERIC_TURNOUT_FROG_NUMBERS = [4, 5, 6, 7, 8, 10];
|
|
1707
|
+
function genericTurnoutPart(frogNumber, library = ATLAS_CODE55_N) {
|
|
1708
|
+
const derived = "derived";
|
|
1709
|
+
const lead = leadInchesForSize(frogNumber, library);
|
|
1710
|
+
const past = pastFrogInchesForSize(frogNumber, library);
|
|
1711
|
+
const why = `Interpolated across the measured parts by frog number \u2014 a stand-in, not a reading. No points offset: it is not a function of the frog number (the measured #5, #7 and #10 read 1.75\u2033, 0.625\u2033 and 0.5625\u2033), so this part begins AT the points, as a hand-laid turnout does.`;
|
|
1712
|
+
return {
|
|
1713
|
+
id: `generic-turnout-${frogNumber}`,
|
|
1714
|
+
manufacturer: "Generic",
|
|
1715
|
+
line: "N scale",
|
|
1716
|
+
scale: "N",
|
|
1717
|
+
name: `#${frogNumber} Turnout (make unknown)`,
|
|
1718
|
+
kind: "turnout",
|
|
1719
|
+
frogNumber,
|
|
1720
|
+
provisional: true,
|
|
1721
|
+
pointsOffset: { inches: 0, source: derived, note: why },
|
|
1722
|
+
lead: { inches: lead, source: derived, note: why },
|
|
1723
|
+
frogOffset: { inches: lead, source: derived, note: why },
|
|
1724
|
+
overallLength: { inches: lead + past, source: derived, note: why }
|
|
1725
|
+
};
|
|
1726
|
+
}
|
|
1727
|
+
var GENERIC_TURNOUTS = GENERIC_TURNOUT_FROG_NUMBERS.map(
|
|
1728
|
+
(n) => genericTurnoutPart(n)
|
|
1729
|
+
);
|
|
1730
|
+
function provisionalParts(library = BUILT_IN_TRACK_PARTS) {
|
|
1731
|
+
return library.filter((p) => p.provisional);
|
|
1732
|
+
}
|
|
1706
1733
|
var GENERIC_END_OF_TRACK = [
|
|
1707
1734
|
{
|
|
1708
1735
|
id: "generic-bumper",
|
|
@@ -1718,7 +1745,11 @@ var BUILT_IN_TRACK_PARTS = [
|
|
|
1718
1745
|
...FAST_TRACKS_N_ME55,
|
|
1719
1746
|
...FAST_TRACKS_N_ME55_CROSSOVERS,
|
|
1720
1747
|
...FLEX_TRACK_PARTS,
|
|
1721
|
-
...GENERIC_END_OF_TRACK
|
|
1748
|
+
...GENERIC_END_OF_TRACK,
|
|
1749
|
+
// ⚠️ LAST, AND PROVISIONAL. These are stand-ins, not products; every path that
|
|
1750
|
+
// resolves a turnout automatically filters them out, and every picker that
|
|
1751
|
+
// offers them must say what they are.
|
|
1752
|
+
...GENERIC_TURNOUTS
|
|
1722
1753
|
];
|
|
1723
1754
|
function flexParts(library = BUILT_IN_TRACK_PARTS) {
|
|
1724
1755
|
return library.filter((p) => p.kind === "flex");
|
|
@@ -1846,7 +1877,9 @@ function partExtentForSize(size, library = BUILT_IN_TRACK_PARTS) {
|
|
|
1846
1877
|
return part && part.frogNumber === size ? partExtent(part) : null;
|
|
1847
1878
|
}
|
|
1848
1879
|
function turnoutPartForSize(size, library = BUILT_IN_TRACK_PARTS) {
|
|
1849
|
-
const turnouts = library.filter(
|
|
1880
|
+
const turnouts = library.filter(
|
|
1881
|
+
(p) => p.kind === "turnout" && p.frogNumber != null && !p.provisional
|
|
1882
|
+
);
|
|
1850
1883
|
if (!turnouts.length) return null;
|
|
1851
1884
|
const dist = (p) => Math.abs(p.frogNumber - size);
|
|
1852
1885
|
return turnouts.reduce((best, p) => {
|
|
@@ -1859,12 +1892,12 @@ function turnoutPartForSize(size, library = BUILT_IN_TRACK_PARTS) {
|
|
|
1859
1892
|
}
|
|
1860
1893
|
function measuredLeadPoints(library) {
|
|
1861
1894
|
return library.filter(
|
|
1862
|
-
(p) => p.kind === "turnout" && p.frogNumber != null && p.lead?.source === "measured"
|
|
1895
|
+
(p) => p.kind === "turnout" && p.frogNumber != null && p.lead?.source === "measured" && !p.provisional
|
|
1863
1896
|
).map((p) => ({ n: p.frogNumber, lead: p.lead.inches })).sort((a, b) => a.n - b.n);
|
|
1864
1897
|
}
|
|
1865
1898
|
function leadInchesForSize(size, library = BUILT_IN_TRACK_PARTS) {
|
|
1866
1899
|
const exact = library.find(
|
|
1867
|
-
(p) => p.kind === "turnout" && p.frogNumber === size && p.lead != null
|
|
1900
|
+
(p) => p.kind === "turnout" && p.frogNumber === size && p.lead != null && !p.provisional
|
|
1868
1901
|
);
|
|
1869
1902
|
if (exact) return exact.lead.inches;
|
|
1870
1903
|
const pts = measuredLeadPoints(library);
|
|
@@ -3165,7 +3198,9 @@ function deriveGraphDoc(doc, library = BUILT_IN_TRACK_PARTS) {
|
|
|
3165
3198
|
return { doc: out.doc, warnings: out.warnings };
|
|
3166
3199
|
}
|
|
3167
3200
|
function placeableTurnoutParts(library, kind) {
|
|
3168
|
-
return library.filter(
|
|
3201
|
+
return library.filter(
|
|
3202
|
+
(p) => kind.includes(p.kind) && !p.provisional && partGeometryGap(p) == null
|
|
3203
|
+
);
|
|
3169
3204
|
}
|
|
3170
3205
|
function moduleConversionReport(doc, library = BUILT_IN_TRACK_PARTS) {
|
|
3171
3206
|
if (doc.graph?.pieces?.length) {
|
|
@@ -4278,6 +4313,8 @@ exports.FREEMO_MAIN_MIN_RADIUS_INCHES = FREEMO_MAIN_MIN_RADIUS_INCHES;
|
|
|
4278
4313
|
exports.FREEMO_REVERSE_CURVE_STRAIGHT_INCHES = FREEMO_REVERSE_CURVE_STRAIGHT_INCHES;
|
|
4279
4314
|
exports.FREEMO_TRACK_SPACING_INCHES = FREEMO_TRACK_SPACING_INCHES;
|
|
4280
4315
|
exports.GENERIC_END_OF_TRACK = GENERIC_END_OF_TRACK;
|
|
4316
|
+
exports.GENERIC_TURNOUTS = GENERIC_TURNOUTS;
|
|
4317
|
+
exports.GENERIC_TURNOUT_FROG_NUMBERS = GENERIC_TURNOUT_FROG_NUMBERS;
|
|
4281
4318
|
exports.JOINT_SNAP_INCHES = JOINT_SNAP_INCHES;
|
|
4282
4319
|
exports.MAIN2_TRACK_ID = MAIN2_TRACK_ID;
|
|
4283
4320
|
exports.MAIN_TRACK_ID = MAIN_TRACK_ID;
|
|
@@ -4324,6 +4361,7 @@ exports.flexUsage = flexUsage;
|
|
|
4324
4361
|
exports.frogCasting = frogCasting;
|
|
4325
4362
|
exports.frogNumberFromName = frogNumberFromName;
|
|
4326
4363
|
exports.fromSectionRelative = fromSectionRelative;
|
|
4364
|
+
exports.genericTurnoutPart = genericTurnoutPart;
|
|
4327
4365
|
exports.geometryTurnDegrees = geometryTurnDegrees;
|
|
4328
4366
|
exports.graphToDoc = graphToDoc;
|
|
4329
4367
|
exports.hasNoFarEndplate = hasNoFarEndplate;
|
|
@@ -4359,6 +4397,7 @@ exports.pieceRoutePaths = pieceRoutePaths;
|
|
|
4359
4397
|
exports.placedJoints = placedJoints;
|
|
4360
4398
|
exports.poseNeedsManual = poseNeedsManual;
|
|
4361
4399
|
exports.poseOverridesFromDoc = poseOverridesFromDoc;
|
|
4400
|
+
exports.provisionalParts = provisionalParts;
|
|
4362
4401
|
exports.remapPos = remapPos;
|
|
4363
4402
|
exports.resizeFlexPiece = resizeFlexPiece;
|
|
4364
4403
|
exports.resolveGraphAnchor = resolveGraphAnchor;
|