@theerapat-s28/ts-structural-eng-tools 1.5.0 → 2.1.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/README.md +57 -6
- package/dist/core/constants/frame.constant.d.ts +19 -0
- package/dist/core/constants/frame.constant.js +23 -0
- package/dist/core/constants/frame.constant.js.map +1 -0
- package/dist/core/errors/frame-analysis.error.d.ts +36 -0
- package/dist/core/errors/frame-analysis.error.js +86 -0
- package/dist/core/errors/frame-analysis.error.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.js +13 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/types/section-properties.type.d.ts +13 -0
- package/dist/core/types/section-properties.type.js +3 -0
- package/dist/core/types/section-properties.type.js.map +1 -0
- package/dist/esm/core/constants/frame.constant.js +20 -0
- package/dist/esm/core/constants/frame.constant.js.map +1 -0
- package/dist/esm/core/constants/rc.constant.js +63 -0
- package/dist/esm/core/constants/rc.constant.js.map +1 -0
- package/dist/esm/core/errors/frame-analysis.error.js +82 -0
- package/dist/esm/core/errors/frame-analysis.error.js.map +1 -0
- package/dist/esm/core/errors/rc-design.error.js +64 -0
- package/dist/esm/core/errors/rc-design.error.js.map +1 -0
- package/dist/esm/core/index.js +9 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/core/types/output-message.type.js +2 -0
- package/dist/esm/core/types/output-message.type.js.map +1 -0
- package/dist/esm/core/types/plate-jacketing.type.js +18 -0
- package/dist/esm/core/types/plate-jacketing.type.js.map +1 -0
- package/dist/esm/core/types/rc-beam.type.js +11 -0
- package/dist/esm/core/types/rc-beam.type.js.map +1 -0
- package/dist/esm/core/types/section-properties.type.js +2 -0
- package/dist/esm/core/types/section-properties.type.js.map +1 -0
- package/dist/esm/core/types/unit.type.js +2 -0
- package/dist/esm/core/types/unit.type.js.map +1 -0
- package/dist/esm/fea/frame/area/area-geometry.js +132 -0
- package/dist/esm/fea/frame/area/area-geometry.js.map +1 -0
- package/dist/esm/fea/frame/area/distribute-area-loads.js +267 -0
- package/dist/esm/fea/frame/area/distribute-area-loads.js.map +1 -0
- package/dist/esm/fea/frame/area/edge-members.js +62 -0
- package/dist/esm/fea/frame/area/edge-members.js.map +1 -0
- package/dist/esm/fea/frame/elements/beam-3d-stiffness.js +84 -0
- package/dist/esm/fea/frame/elements/beam-3d-stiffness.js.map +1 -0
- package/dist/esm/fea/frame/elements/fixed-end-forces.js +88 -0
- package/dist/esm/fea/frame/elements/fixed-end-forces.js.map +1 -0
- package/dist/esm/fea/frame/elements/static-condensation.js +55 -0
- package/dist/esm/fea/frame/elements/static-condensation.js.map +1 -0
- package/dist/esm/fea/frame/index.js +7 -0
- package/dist/esm/fea/frame/index.js.map +1 -0
- package/dist/esm/fea/frame/post/demand-envelope.js +97 -0
- package/dist/esm/fea/frame/post/demand-envelope.js.map +1 -0
- package/dist/esm/fea/frame/post/envelope.js +59 -0
- package/dist/esm/fea/frame/post/envelope.js.map +1 -0
- package/dist/esm/fea/frame/post/member-diagram.js +375 -0
- package/dist/esm/fea/frame/post/member-diagram.js.map +1 -0
- package/dist/esm/fea/frame/post/present-state.js +106 -0
- package/dist/esm/fea/frame/post/present-state.js.map +1 -0
- package/dist/esm/fea/frame/solver/analyze-frame.js +131 -0
- package/dist/esm/fea/frame/solver/analyze-frame.js.map +1 -0
- package/dist/esm/fea/frame/solver/boundary-conditions.js +33 -0
- package/dist/esm/fea/frame/solver/boundary-conditions.js.map +1 -0
- package/dist/esm/fea/frame/solver/combinations.js +69 -0
- package/dist/esm/fea/frame/solver/combinations.js.map +1 -0
- package/dist/esm/fea/frame/solver/frame-system.js +122 -0
- package/dist/esm/fea/frame/solver/frame-system.js.map +1 -0
- package/dist/esm/fea/frame/solver/global-assembly.js +27 -0
- package/dist/esm/fea/frame/solver/global-assembly.js.map +1 -0
- package/dist/esm/fea/frame/solver/load-case-solver.js +133 -0
- package/dist/esm/fea/frame/solver/load-case-solver.js.map +1 -0
- package/dist/esm/fea/frame/transformation/coordinate-transform.js +71 -0
- package/dist/esm/fea/frame/transformation/coordinate-transform.js.map +1 -0
- package/dist/esm/fea/frame/types/model.type.js +2 -0
- package/dist/esm/fea/frame/types/model.type.js.map +1 -0
- package/dist/esm/fea/frame/types/results.type.js +2 -0
- package/dist/esm/fea/frame/types/results.type.js.map +1 -0
- package/dist/esm/fea/frame/validation/validate-model.js +389 -0
- package/dist/esm/fea/frame/validation/validate-model.js.map +1 -0
- package/dist/esm/fea/index.js +3 -0
- package/dist/esm/fea/index.js.map +1 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/rc/general.js +32 -0
- package/dist/esm/rc/general.js.map +1 -0
- package/dist/esm/rc/index.js +5 -0
- package/dist/esm/rc/index.js.map +1 -0
- package/dist/esm/rc/rc-bar-layout.js +89 -0
- package/dist/esm/rc/rc-bar-layout.js.map +1 -0
- package/dist/esm/rc/rc-beam-design.js +320 -0
- package/dist/esm/rc/rc-beam-design.js.map +1 -0
- package/dist/esm/rc/rc-section-properties.js +55 -0
- package/dist/esm/rc/rc-section-properties.js.map +1 -0
- package/dist/esm/strengthening/index.js +4 -0
- package/dist/esm/strengthening/index.js.map +1 -0
- package/dist/esm/strengthening/rc-beam-plate-interface-bolts.js +338 -0
- package/dist/esm/strengthening/rc-beam-plate-interface-bolts.js.map +1 -0
- package/dist/esm/strengthening/rc-beam-side-plate-shear.js +381 -0
- package/dist/esm/strengthening/rc-beam-side-plate-shear.js.map +1 -0
- package/dist/esm/strengthening/rc-beam-steel-plate-jacketing.js +90 -0
- package/dist/esm/strengthening/rc-beam-steel-plate-jacketing.js.map +1 -0
- package/dist/esm/utils/index.js +5 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/math.js +30 -0
- package/dist/esm/utils/math.js.map +1 -0
- package/dist/esm/utils/matrix.js +145 -0
- package/dist/esm/utils/matrix.js.map +1 -0
- package/dist/esm/utils/merge-warning.js +11 -0
- package/dist/esm/utils/merge-warning.js.map +1 -0
- package/dist/esm/utils/skyline.js +151 -0
- package/dist/esm/utils/skyline.js.map +1 -0
- package/dist/fea/frame/area/area-geometry.d.ts +56 -0
- package/dist/fea/frame/area/area-geometry.js +142 -0
- package/dist/fea/frame/area/area-geometry.js.map +1 -0
- package/dist/fea/frame/area/distribute-area-loads.d.ts +30 -0
- package/dist/fea/frame/area/distribute-area-loads.js +272 -0
- package/dist/fea/frame/area/distribute-area-loads.js.map +1 -0
- package/dist/fea/frame/area/edge-members.d.ts +25 -0
- package/dist/fea/frame/area/edge-members.js +67 -0
- package/dist/fea/frame/area/edge-members.js.map +1 -0
- package/dist/fea/frame/elements/beam-3d-stiffness.d.ts +29 -0
- package/dist/fea/frame/elements/beam-3d-stiffness.js +90 -0
- package/dist/fea/frame/elements/beam-3d-stiffness.js.map +1 -0
- package/dist/fea/frame/elements/fixed-end-forces.d.ts +36 -0
- package/dist/fea/frame/elements/fixed-end-forces.js +93 -0
- package/dist/fea/frame/elements/fixed-end-forces.js.map +1 -0
- package/dist/fea/frame/elements/static-condensation.d.ts +19 -0
- package/dist/fea/frame/elements/static-condensation.js +59 -0
- package/dist/fea/frame/elements/static-condensation.js.map +1 -0
- package/dist/fea/frame/index.d.ts +10 -0
- package/dist/fea/frame/index.js +18 -0
- package/dist/fea/frame/index.js.map +1 -0
- package/dist/fea/frame/post/demand-envelope.d.ts +36 -0
- package/dist/fea/frame/post/demand-envelope.js +101 -0
- package/dist/fea/frame/post/demand-envelope.js.map +1 -0
- package/dist/fea/frame/post/envelope.d.ts +8 -0
- package/dist/fea/frame/post/envelope.js +63 -0
- package/dist/fea/frame/post/envelope.js.map +1 -0
- package/dist/fea/frame/post/member-diagram.d.ts +26 -0
- package/dist/fea/frame/post/member-diagram.js +379 -0
- package/dist/fea/frame/post/member-diagram.js.map +1 -0
- package/dist/fea/frame/post/present-state.d.ts +19 -0
- package/dist/fea/frame/post/present-state.js +111 -0
- package/dist/fea/frame/post/present-state.js.map +1 -0
- package/dist/fea/frame/solver/analyze-frame.d.ts +70 -0
- package/dist/fea/frame/solver/analyze-frame.js +136 -0
- package/dist/fea/frame/solver/analyze-frame.js.map +1 -0
- package/dist/fea/frame/solver/boundary-conditions.d.ts +14 -0
- package/dist/fea/frame/solver/boundary-conditions.js +37 -0
- package/dist/fea/frame/solver/boundary-conditions.js.map +1 -0
- package/dist/fea/frame/solver/combinations.d.ts +11 -0
- package/dist/fea/frame/solver/combinations.js +73 -0
- package/dist/fea/frame/solver/combinations.js.map +1 -0
- package/dist/fea/frame/solver/frame-system.d.ts +42 -0
- package/dist/fea/frame/solver/frame-system.js +126 -0
- package/dist/fea/frame/solver/frame-system.js.map +1 -0
- package/dist/fea/frame/solver/global-assembly.d.ts +17 -0
- package/dist/fea/frame/solver/global-assembly.js +33 -0
- package/dist/fea/frame/solver/global-assembly.js.map +1 -0
- package/dist/fea/frame/solver/load-case-solver.d.ts +34 -0
- package/dist/fea/frame/solver/load-case-solver.js +138 -0
- package/dist/fea/frame/solver/load-case-solver.js.map +1 -0
- package/dist/fea/frame/transformation/coordinate-transform.d.ts +21 -0
- package/dist/fea/frame/transformation/coordinate-transform.js +76 -0
- package/dist/fea/frame/transformation/coordinate-transform.js.map +1 -0
- package/dist/fea/frame/types/model.type.d.ts +170 -0
- package/dist/fea/frame/types/model.type.js +3 -0
- package/dist/fea/frame/types/model.type.js.map +1 -0
- package/dist/fea/frame/types/results.type.d.ts +134 -0
- package/dist/fea/frame/types/results.type.js +3 -0
- package/dist/fea/frame/types/results.type.js.map +1 -0
- package/dist/fea/frame/validation/validate-model.d.ts +18 -0
- package/dist/fea/frame/validation/validate-model.js +395 -0
- package/dist/fea/frame/validation/validate-model.js.map +1 -0
- package/dist/fea/index.d.ts +1 -0
- package/dist/fea/index.js +19 -0
- package/dist/fea/index.js.map +1 -0
- package/dist/index.d.ts +8 -4
- package/dist/index.js +37 -1
- package/dist/index.js.map +1 -1
- package/dist/rc/index.d.ts +2 -0
- package/dist/rc/index.js +3 -1
- package/dist/rc/index.js.map +1 -1
- package/dist/rc/rc-section-properties.d.ts +35 -0
- package/dist/rc/rc-section-properties.js +59 -0
- package/dist/rc/rc-section-properties.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +19 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/matrix.d.ts +45 -0
- package/dist/utils/matrix.js +157 -0
- package/dist/utils/matrix.js.map +1 -0
- package/dist/utils/skyline.d.ts +49 -0
- package/dist/utils/skyline.js +161 -0
- package/dist/utils/skyline.js.map +1 -0
- package/package.json +28 -4
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.rectBeamToSectionProperties = void 0;
|
|
4
|
+
const frame_constant_1 = require("../core/constants/frame.constant");
|
|
5
|
+
const general_1 = require("./general");
|
|
6
|
+
/**
|
|
7
|
+
* Saint-Venant torsion constant of a solid rectangle:
|
|
8
|
+
* `J = a·t³·(1/3 − 0.21·(t/a)·(1 − t⁴/(12a⁴)))`, with a the longer and t the shorter side.
|
|
9
|
+
*/
|
|
10
|
+
const rectangleTorsionConstant = (b, h) => {
|
|
11
|
+
const a = Math.max(b, h);
|
|
12
|
+
const t = Math.min(b, h);
|
|
13
|
+
return a * t ** 3 * (1 / 3 - 0.21 * (t / a) * (1 - t ** 4 / (12 * a ** 4)));
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Converts a rectangular RC beam section into `SectionProperties` for frame analysis.
|
|
17
|
+
*
|
|
18
|
+
* Local 2 is taken along the depth `h` and local 3 along the width `b`, so
|
|
19
|
+
* `I33 = m·b·h³/12` (major axis) and `I22 = m·h·b³/12`, where m is the inertia modifier.
|
|
20
|
+
* The modifier is applied to the bending inertias only; A and J are gross values, and the
|
|
21
|
+
* unit weight (for self-weight) acts on the gross area.
|
|
22
|
+
*
|
|
23
|
+
* @param section - Rectangular RC section (uses `fc_`, `b` and `h`)
|
|
24
|
+
* @param options - Member type or explicit inertia modifier, Poisson's ratio
|
|
25
|
+
* @returns Object containing `sectionProperties`, `calculationDetails`, `unit`, and `warnings`
|
|
26
|
+
*/
|
|
27
|
+
const rectBeamToSectionProperties = (section, options = {}) => {
|
|
28
|
+
const warnings = [];
|
|
29
|
+
const member = options.member ?? "beam";
|
|
30
|
+
const modifier = options.inertiaModifier ??
|
|
31
|
+
(member === "beam" ? frame_constant_1.BEAM_INERTIA_MODIFIER : member === "column" ? frame_constant_1.COLUMN_INERTIA_MODIFIER : 1);
|
|
32
|
+
const nu = options.poissonRatio ?? frame_constant_1.CONCRETE_POISSON_RATIO;
|
|
33
|
+
const unitWeight = options.unitWeight ?? frame_constant_1.CONCRETE_UNIT_WEIGHT;
|
|
34
|
+
const { fc_, b, h } = section;
|
|
35
|
+
if (modifier === 1) {
|
|
36
|
+
warnings.push({
|
|
37
|
+
reference: "ACI318-19, 6.6.3.1.1",
|
|
38
|
+
message: "Gross-section inertia used; elastic analysis at factored load level should use the reduced moments of inertia (0.35Ig beams, 0.70Ig columns).",
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
const E = (0, general_1.concreteElasticModulus)(fc_);
|
|
42
|
+
const sectionProperties = {
|
|
43
|
+
E,
|
|
44
|
+
G: E / (2 * (1 + nu)),
|
|
45
|
+
A: b * h,
|
|
46
|
+
I22: (modifier * h * b ** 3) / 12,
|
|
47
|
+
I33: (modifier * b * h ** 3) / 12,
|
|
48
|
+
J: rectangleTorsionConstant(b, h),
|
|
49
|
+
unitWeight,
|
|
50
|
+
};
|
|
51
|
+
return {
|
|
52
|
+
sectionProperties,
|
|
53
|
+
calculationDetails: { inertiaModifier: modifier, poissonRatio: nu, unitWeight },
|
|
54
|
+
unit: "N, mm, MPa",
|
|
55
|
+
warnings,
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
exports.rectBeamToSectionProperties = rectBeamToSectionProperties;
|
|
59
|
+
//# sourceMappingURL=rc-section-properties.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rc-section-properties.js","sourceRoot":"","sources":["../../src/rc/rc-section-properties.ts"],"names":[],"mappings":";;;AAAA,uEAK4C;AAK5C,uCAAmD;AAanD;;;GAGG;AACH,MAAM,wBAAwB,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE;IAChE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC,CAAC;AAEF;;;;;;;;;;;GAWG;AACI,MAAM,2BAA2B,GAAG,CACzC,OAAiD,EACjD,UAAoC,EAAE,EACtC,EAAE;IACF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;IACxC,MAAM,QAAQ,GACZ,OAAO,CAAC,eAAe;QACvB,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,sCAAqB,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,wCAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClG,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,IAAI,uCAAsB,CAAC;IAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,qCAAoB,CAAC;IAC9D,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC;IAE9B,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC;YACZ,SAAS,EAAE,sBAAsB;YACjC,OAAO,EACL,+IAA+I;SAClJ,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,GAAG,IAAA,gCAAsB,EAAC,GAAG,CAAC,CAAC;IACtC,MAAM,iBAAiB,GAAsB;QAC3C,CAAC;QACD,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACrB,CAAC,EAAE,CAAC,GAAG,CAAC;QACR,GAAG,EAAE,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE;QACjC,GAAG,EAAE,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE;QACjC,CAAC,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC;QACjC,UAAU;KACX,CAAC;IAEF,OAAO;QACL,iBAAiB;QACjB,kBAAkB,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE;QAC/E,IAAI,EAAE,YAAY;QAClB,QAAQ;KACT,CAAC;AACJ,CAAC,CAAC;AAtCW,QAAA,2BAA2B,+BAsCtC"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,2 +1,6 @@
|
|
|
1
1
|
export { solveQuadratic, roundToDecimalPlaces } from "./math";
|
|
2
2
|
export { mergeWarnings } from "./merge-warning";
|
|
3
|
+
export type { Matrix } from "./matrix";
|
|
4
|
+
export { zeros, identity, transpose, matMul, matVec, choleskyFactor, choleskySolveFactored, choleskySolve, solveLinearSystem, } from "./matrix";
|
|
5
|
+
export type { SkylineMatrix } from "./skyline";
|
|
6
|
+
export { createSkyline, skylineAdd, skylineGet, skylineSize, skylineFactor, skylineSolve, reverseCuthillMcKee, } from "./skyline";
|
package/dist/utils/index.js
CHANGED
|
@@ -1,9 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.mergeWarnings = exports.roundToDecimalPlaces = exports.solveQuadratic = void 0;
|
|
3
|
+
exports.reverseCuthillMcKee = exports.skylineSolve = exports.skylineFactor = exports.skylineSize = exports.skylineGet = exports.skylineAdd = exports.createSkyline = exports.solveLinearSystem = exports.choleskySolve = exports.choleskySolveFactored = exports.choleskyFactor = exports.matVec = exports.matMul = exports.transpose = exports.identity = exports.zeros = exports.mergeWarnings = exports.roundToDecimalPlaces = exports.solveQuadratic = void 0;
|
|
4
4
|
var math_1 = require("./math");
|
|
5
5
|
Object.defineProperty(exports, "solveQuadratic", { enumerable: true, get: function () { return math_1.solveQuadratic; } });
|
|
6
6
|
Object.defineProperty(exports, "roundToDecimalPlaces", { enumerable: true, get: function () { return math_1.roundToDecimalPlaces; } });
|
|
7
7
|
var merge_warning_1 = require("./merge-warning");
|
|
8
8
|
Object.defineProperty(exports, "mergeWarnings", { enumerable: true, get: function () { return merge_warning_1.mergeWarnings; } });
|
|
9
|
+
var matrix_1 = require("./matrix");
|
|
10
|
+
Object.defineProperty(exports, "zeros", { enumerable: true, get: function () { return matrix_1.zeros; } });
|
|
11
|
+
Object.defineProperty(exports, "identity", { enumerable: true, get: function () { return matrix_1.identity; } });
|
|
12
|
+
Object.defineProperty(exports, "transpose", { enumerable: true, get: function () { return matrix_1.transpose; } });
|
|
13
|
+
Object.defineProperty(exports, "matMul", { enumerable: true, get: function () { return matrix_1.matMul; } });
|
|
14
|
+
Object.defineProperty(exports, "matVec", { enumerable: true, get: function () { return matrix_1.matVec; } });
|
|
15
|
+
Object.defineProperty(exports, "choleskyFactor", { enumerable: true, get: function () { return matrix_1.choleskyFactor; } });
|
|
16
|
+
Object.defineProperty(exports, "choleskySolveFactored", { enumerable: true, get: function () { return matrix_1.choleskySolveFactored; } });
|
|
17
|
+
Object.defineProperty(exports, "choleskySolve", { enumerable: true, get: function () { return matrix_1.choleskySolve; } });
|
|
18
|
+
Object.defineProperty(exports, "solveLinearSystem", { enumerable: true, get: function () { return matrix_1.solveLinearSystem; } });
|
|
19
|
+
var skyline_1 = require("./skyline");
|
|
20
|
+
Object.defineProperty(exports, "createSkyline", { enumerable: true, get: function () { return skyline_1.createSkyline; } });
|
|
21
|
+
Object.defineProperty(exports, "skylineAdd", { enumerable: true, get: function () { return skyline_1.skylineAdd; } });
|
|
22
|
+
Object.defineProperty(exports, "skylineGet", { enumerable: true, get: function () { return skyline_1.skylineGet; } });
|
|
23
|
+
Object.defineProperty(exports, "skylineSize", { enumerable: true, get: function () { return skyline_1.skylineSize; } });
|
|
24
|
+
Object.defineProperty(exports, "skylineFactor", { enumerable: true, get: function () { return skyline_1.skylineFactor; } });
|
|
25
|
+
Object.defineProperty(exports, "skylineSolve", { enumerable: true, get: function () { return skyline_1.skylineSolve; } });
|
|
26
|
+
Object.defineProperty(exports, "reverseCuthillMcKee", { enumerable: true, get: function () { return skyline_1.reverseCuthillMcKee; } });
|
|
9
27
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,+BAA8D;AAArD,sGAAA,cAAc,OAAA;AAAE,4GAAA,oBAAoB,OAAA;AAC7C,iDAAgD;AAAvC,8GAAA,aAAa,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,+BAA8D;AAArD,sGAAA,cAAc,OAAA;AAAE,4GAAA,oBAAoB,OAAA;AAC7C,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AAEtB,mCAUkB;AAThB,+FAAA,KAAK,OAAA;AACL,kGAAA,QAAQ,OAAA;AACR,mGAAA,SAAS,OAAA;AACT,gGAAA,MAAM,OAAA;AACN,gGAAA,MAAM,OAAA;AACN,wGAAA,cAAc,OAAA;AACd,+GAAA,qBAAqB,OAAA;AACrB,uGAAA,aAAa,OAAA;AACb,2GAAA,iBAAiB,OAAA;AAGnB,qCAQmB;AAPjB,wGAAA,aAAa,OAAA;AACb,qGAAA,UAAU,OAAA;AACV,qGAAA,UAAU,OAAA;AACV,sGAAA,WAAW,OAAA;AACX,wGAAA,aAAa,OAAA;AACb,uGAAA,YAAY,OAAA;AACZ,8GAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export type Matrix = number[][];
|
|
2
|
+
/** Returns an m×n zero matrix. */
|
|
3
|
+
export declare const zeros: (m: number, n: number) => Matrix;
|
|
4
|
+
/** Returns the n×n identity matrix. */
|
|
5
|
+
export declare const identity: (n: number) => Matrix;
|
|
6
|
+
/** Returns the transpose of a matrix. */
|
|
7
|
+
export declare const transpose: (A: Matrix) => Matrix;
|
|
8
|
+
/** Returns the product A·B of an m×n and an n×p matrix. */
|
|
9
|
+
export declare const matMul: (A: Matrix, B: Matrix) => Matrix;
|
|
10
|
+
/** Returns the product A·x of an m×n matrix and an n-vector. */
|
|
11
|
+
export declare const matVec: (A: Matrix, x: number[]) => number[];
|
|
12
|
+
/**
|
|
13
|
+
* Cholesky factorisation A = L·Lᵀ of a symmetric positive-definite matrix.
|
|
14
|
+
*
|
|
15
|
+
* @param A - Symmetric matrix (only the lower triangle is read)
|
|
16
|
+
* @param tolerance - A pivot at or below `tolerance` times its own diagonal term is treated as zero
|
|
17
|
+
* @returns The lower-triangular factor L, or `null` when A is not positive definite (singular or a mechanism)
|
|
18
|
+
*/
|
|
19
|
+
export declare const choleskyFactor: (A: Matrix, tolerance?: number) => Matrix | null;
|
|
20
|
+
/**
|
|
21
|
+
* Solves A·x = b from the Cholesky factor L of A (forward then back substitution), so one
|
|
22
|
+
* factorisation serves any number of right-hand sides.
|
|
23
|
+
*
|
|
24
|
+
* @param L - Lower-triangular factor from `choleskyFactor`
|
|
25
|
+
* @param b - Right-hand side
|
|
26
|
+
*/
|
|
27
|
+
export declare const choleskySolveFactored: (L: Matrix, b: number[]) => number[];
|
|
28
|
+
/**
|
|
29
|
+
* Solves A·x = b for a symmetric positive-definite A by Cholesky factorisation.
|
|
30
|
+
*
|
|
31
|
+
* @param A - Symmetric matrix (only the lower triangle is read)
|
|
32
|
+
* @param b - Right-hand side
|
|
33
|
+
* @param tolerance - A pivot at or below `tolerance` times its own diagonal term is treated as zero
|
|
34
|
+
* @returns The solution, or `null` when A is not positive definite (singular or a mechanism)
|
|
35
|
+
*/
|
|
36
|
+
export declare const choleskySolve: (A: Matrix, b: number[], tolerance?: number) => number[] | null;
|
|
37
|
+
/**
|
|
38
|
+
* Solves A·X = B for a general square A by Gaussian elimination with partial pivoting.
|
|
39
|
+
*
|
|
40
|
+
* @param A - n×n matrix
|
|
41
|
+
* @param B - n×p right-hand-side matrix
|
|
42
|
+
* @param tolerance - A pivot at or below `tolerance` times the largest entry of A is treated as zero
|
|
43
|
+
* @returns The n×p solution, or `null` when A is singular
|
|
44
|
+
*/
|
|
45
|
+
export declare const solveLinearSystem: (A: Matrix, B: Matrix, tolerance?: number) => Matrix | null;
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.solveLinearSystem = exports.choleskySolve = exports.choleskySolveFactored = exports.choleskyFactor = exports.matVec = exports.matMul = exports.transpose = exports.identity = exports.zeros = void 0;
|
|
4
|
+
/** Returns an m×n zero matrix. */
|
|
5
|
+
const zeros = (m, n) => Array.from({ length: m }, () => new Array(n).fill(0));
|
|
6
|
+
exports.zeros = zeros;
|
|
7
|
+
/** Returns the n×n identity matrix. */
|
|
8
|
+
const identity = (n) => {
|
|
9
|
+
const I = (0, exports.zeros)(n, n);
|
|
10
|
+
for (let i = 0; i < n; i++)
|
|
11
|
+
I[i][i] = 1;
|
|
12
|
+
return I;
|
|
13
|
+
};
|
|
14
|
+
exports.identity = identity;
|
|
15
|
+
/** Returns the transpose of a matrix. */
|
|
16
|
+
const transpose = (A) => {
|
|
17
|
+
const m = A.length;
|
|
18
|
+
const n = A[0].length;
|
|
19
|
+
const T = (0, exports.zeros)(n, m);
|
|
20
|
+
for (let i = 0; i < m; i++) {
|
|
21
|
+
for (let j = 0; j < n; j++)
|
|
22
|
+
T[j][i] = A[i][j];
|
|
23
|
+
}
|
|
24
|
+
return T;
|
|
25
|
+
};
|
|
26
|
+
exports.transpose = transpose;
|
|
27
|
+
/** Returns the product A·B of an m×n and an n×p matrix. */
|
|
28
|
+
const matMul = (A, B) => {
|
|
29
|
+
const m = A.length;
|
|
30
|
+
const n = B.length;
|
|
31
|
+
const p = B[0].length;
|
|
32
|
+
const C = (0, exports.zeros)(m, p);
|
|
33
|
+
for (let i = 0; i < m; i++) {
|
|
34
|
+
for (let k = 0; k < n; k++) {
|
|
35
|
+
const aik = A[i][k];
|
|
36
|
+
if (aik === 0)
|
|
37
|
+
continue;
|
|
38
|
+
for (let j = 0; j < p; j++)
|
|
39
|
+
C[i][j] += aik * B[k][j];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return C;
|
|
43
|
+
};
|
|
44
|
+
exports.matMul = matMul;
|
|
45
|
+
/** Returns the product A·x of an m×n matrix and an n-vector. */
|
|
46
|
+
const matVec = (A, x) => A.map((row) => row.reduce((sum, a, j) => sum + a * x[j], 0));
|
|
47
|
+
exports.matVec = matVec;
|
|
48
|
+
/**
|
|
49
|
+
* Cholesky factorisation A = L·Lᵀ of a symmetric positive-definite matrix.
|
|
50
|
+
*
|
|
51
|
+
* @param A - Symmetric matrix (only the lower triangle is read)
|
|
52
|
+
* @param tolerance - A pivot at or below `tolerance` times its own diagonal term is treated as zero
|
|
53
|
+
* @returns The lower-triangular factor L, or `null` when A is not positive definite (singular or a mechanism)
|
|
54
|
+
*/
|
|
55
|
+
const choleskyFactor = (A, tolerance = 1e-12) => {
|
|
56
|
+
const n = A.length;
|
|
57
|
+
const L = (0, exports.zeros)(n, n);
|
|
58
|
+
for (let i = 0; i < n; i++) {
|
|
59
|
+
for (let j = 0; j <= i; j++) {
|
|
60
|
+
let sum = A[i][j];
|
|
61
|
+
for (let k = 0; k < j; k++)
|
|
62
|
+
sum -= L[i][k] * L[j][k];
|
|
63
|
+
if (i === j) {
|
|
64
|
+
if (!(sum > tolerance * A[i][i]))
|
|
65
|
+
return null;
|
|
66
|
+
L[i][i] = Math.sqrt(sum);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
L[i][j] = sum / L[j][j];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return L;
|
|
74
|
+
};
|
|
75
|
+
exports.choleskyFactor = choleskyFactor;
|
|
76
|
+
/**
|
|
77
|
+
* Solves A·x = b from the Cholesky factor L of A (forward then back substitution), so one
|
|
78
|
+
* factorisation serves any number of right-hand sides.
|
|
79
|
+
*
|
|
80
|
+
* @param L - Lower-triangular factor from `choleskyFactor`
|
|
81
|
+
* @param b - Right-hand side
|
|
82
|
+
*/
|
|
83
|
+
const choleskySolveFactored = (L, b) => {
|
|
84
|
+
const n = L.length;
|
|
85
|
+
const y = new Array(n).fill(0);
|
|
86
|
+
for (let i = 0; i < n; i++) {
|
|
87
|
+
let sum = b[i];
|
|
88
|
+
for (let k = 0; k < i; k++)
|
|
89
|
+
sum -= L[i][k] * y[k];
|
|
90
|
+
y[i] = sum / L[i][i];
|
|
91
|
+
}
|
|
92
|
+
const x = new Array(n).fill(0);
|
|
93
|
+
for (let i = n - 1; i >= 0; i--) {
|
|
94
|
+
let sum = y[i];
|
|
95
|
+
for (let k = i + 1; k < n; k++)
|
|
96
|
+
sum -= L[k][i] * x[k];
|
|
97
|
+
x[i] = sum / L[i][i];
|
|
98
|
+
}
|
|
99
|
+
return x;
|
|
100
|
+
};
|
|
101
|
+
exports.choleskySolveFactored = choleskySolveFactored;
|
|
102
|
+
/**
|
|
103
|
+
* Solves A·x = b for a symmetric positive-definite A by Cholesky factorisation.
|
|
104
|
+
*
|
|
105
|
+
* @param A - Symmetric matrix (only the lower triangle is read)
|
|
106
|
+
* @param b - Right-hand side
|
|
107
|
+
* @param tolerance - A pivot at or below `tolerance` times its own diagonal term is treated as zero
|
|
108
|
+
* @returns The solution, or `null` when A is not positive definite (singular or a mechanism)
|
|
109
|
+
*/
|
|
110
|
+
const choleskySolve = (A, b, tolerance = 1e-12) => {
|
|
111
|
+
const L = (0, exports.choleskyFactor)(A, tolerance);
|
|
112
|
+
return L ? (0, exports.choleskySolveFactored)(L, b) : null;
|
|
113
|
+
};
|
|
114
|
+
exports.choleskySolve = choleskySolve;
|
|
115
|
+
/**
|
|
116
|
+
* Solves A·X = B for a general square A by Gaussian elimination with partial pivoting.
|
|
117
|
+
*
|
|
118
|
+
* @param A - n×n matrix
|
|
119
|
+
* @param B - n×p right-hand-side matrix
|
|
120
|
+
* @param tolerance - A pivot at or below `tolerance` times the largest entry of A is treated as zero
|
|
121
|
+
* @returns The n×p solution, or `null` when A is singular
|
|
122
|
+
*/
|
|
123
|
+
const solveLinearSystem = (A, B, tolerance = 1e-12) => {
|
|
124
|
+
const n = A.length;
|
|
125
|
+
const p = B[0].length;
|
|
126
|
+
const M = A.map((row, i) => [...row, ...B[i]]);
|
|
127
|
+
const scale = Math.max(...A.map((row) => Math.max(...row.map(Math.abs))));
|
|
128
|
+
for (let col = 0; col < n; col++) {
|
|
129
|
+
let pivot = col;
|
|
130
|
+
for (let r = col + 1; r < n; r++) {
|
|
131
|
+
if (Math.abs(M[r][col]) > Math.abs(M[pivot][col]))
|
|
132
|
+
pivot = r;
|
|
133
|
+
}
|
|
134
|
+
if (!(Math.abs(M[pivot][col]) > tolerance * scale))
|
|
135
|
+
return null;
|
|
136
|
+
[M[col], M[pivot]] = [M[pivot], M[col]];
|
|
137
|
+
for (let r = col + 1; r < n; r++) {
|
|
138
|
+
const factor = M[r][col] / M[col][col];
|
|
139
|
+
if (factor === 0)
|
|
140
|
+
continue;
|
|
141
|
+
for (let c = col; c < n + p; c++)
|
|
142
|
+
M[r][c] -= factor * M[col][c];
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const X = (0, exports.zeros)(n, p);
|
|
146
|
+
for (let c = 0; c < p; c++) {
|
|
147
|
+
for (let i = n - 1; i >= 0; i--) {
|
|
148
|
+
let sum = M[i][n + c];
|
|
149
|
+
for (let k = i + 1; k < n; k++)
|
|
150
|
+
sum -= M[i][k] * X[k][c];
|
|
151
|
+
X[i][c] = sum / M[i][i];
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return X;
|
|
155
|
+
};
|
|
156
|
+
exports.solveLinearSystem = solveLinearSystem;
|
|
157
|
+
//# sourceMappingURL=matrix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matrix.js","sourceRoot":"","sources":["../../src/utils/matrix.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Symmetric matrix in skyline (variable-band, column profile) storage: column `j` holds rows
|
|
3
|
+
* `first[j]` … `j` of the upper triangle, so memory follows the band of each column instead of
|
|
4
|
+
* n². Cholesky factorisation stays inside this profile.
|
|
5
|
+
*/
|
|
6
|
+
export interface SkylineMatrix {
|
|
7
|
+
n: number;
|
|
8
|
+
/** First stored row of each column. */
|
|
9
|
+
first: Int32Array;
|
|
10
|
+
/** `columns[j][i − first[j]]` = A[i][j] for `first[j] ≤ i ≤ j`. */
|
|
11
|
+
columns: Float64Array[];
|
|
12
|
+
}
|
|
13
|
+
/** Creates a zero skyline matrix with the given first row of each column (`first[j] ≤ j`). */
|
|
14
|
+
export declare const createSkyline: (first: ArrayLike<number>) => SkylineMatrix;
|
|
15
|
+
/** Adds `value` to A[i][j] (and so to A[j][i]); the entry must lie inside the profile. */
|
|
16
|
+
export declare const skylineAdd: (S: SkylineMatrix, i: number, j: number, value: number) => void;
|
|
17
|
+
/** Reads A[i][j] (0 outside the profile). */
|
|
18
|
+
export declare const skylineGet: (S: SkylineMatrix, i: number, j: number) => number;
|
|
19
|
+
/** Number of stored entries, a measure of memory and of factorisation work. */
|
|
20
|
+
export declare const skylineSize: (S: SkylineMatrix) => number;
|
|
21
|
+
/**
|
|
22
|
+
* Factorises a symmetric positive-definite skyline matrix in place as A = Uᵀ·U (U upper
|
|
23
|
+
* triangular, same profile).
|
|
24
|
+
*
|
|
25
|
+
* @param S - Matrix, overwritten by U
|
|
26
|
+
* @param tolerance - A pivot at or below `tolerance` times its own diagonal term is treated as zero
|
|
27
|
+
* @returns `{ ok: true }`, or `{ ok: false, failedPivot }` with the index of the first pivot that
|
|
28
|
+
* failed (A is singular or indefinite there — for a structure, a mechanism involving that DOF)
|
|
29
|
+
*/
|
|
30
|
+
export declare const skylineFactor: (S: SkylineMatrix, tolerance?: number) => {
|
|
31
|
+
ok: true;
|
|
32
|
+
} | {
|
|
33
|
+
ok: false;
|
|
34
|
+
failedPivot: number;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Solves A·x = b from the factor produced by `skylineFactor` (forward then back substitution).
|
|
38
|
+
* One factorisation serves any number of right-hand sides.
|
|
39
|
+
*/
|
|
40
|
+
export declare const skylineSolve: (U: SkylineMatrix, b: ArrayLike<number>) => number[];
|
|
41
|
+
/**
|
|
42
|
+
* Reverse Cuthill–McKee ordering of a graph, which keeps connected vertices close together and
|
|
43
|
+
* so narrows the band of the matrix built on it. Each connected component starts from a
|
|
44
|
+
* pseudo-peripheral vertex.
|
|
45
|
+
*
|
|
46
|
+
* @param adjacency - Neighbours of each vertex (undirected)
|
|
47
|
+
* @returns The vertices in their new order (`order[k]` = original index of the k-th vertex)
|
|
48
|
+
*/
|
|
49
|
+
export declare const reverseCuthillMcKee: (adjacency: number[][]) => number[];
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.reverseCuthillMcKee = exports.skylineSolve = exports.skylineFactor = exports.skylineSize = exports.skylineGet = exports.skylineAdd = exports.createSkyline = void 0;
|
|
4
|
+
/** Creates a zero skyline matrix with the given first row of each column (`first[j] ≤ j`). */
|
|
5
|
+
const createSkyline = (first) => {
|
|
6
|
+
const n = first.length;
|
|
7
|
+
const firstRows = Int32Array.from(first);
|
|
8
|
+
const columns = Array.from({ length: n }, (_, j) => new Float64Array(j - firstRows[j] + 1));
|
|
9
|
+
return { n, first: firstRows, columns };
|
|
10
|
+
};
|
|
11
|
+
exports.createSkyline = createSkyline;
|
|
12
|
+
/** Adds `value` to A[i][j] (and so to A[j][i]); the entry must lie inside the profile. */
|
|
13
|
+
const skylineAdd = (S, i, j, value) => {
|
|
14
|
+
const row = Math.min(i, j);
|
|
15
|
+
const col = Math.max(i, j);
|
|
16
|
+
const offset = row - S.first[col];
|
|
17
|
+
if (offset < 0)
|
|
18
|
+
throw new Error(`Skyline entry (${row}, ${col}) is outside the profile.`);
|
|
19
|
+
S.columns[col][offset] += value;
|
|
20
|
+
};
|
|
21
|
+
exports.skylineAdd = skylineAdd;
|
|
22
|
+
/** Reads A[i][j] (0 outside the profile). */
|
|
23
|
+
const skylineGet = (S, i, j) => {
|
|
24
|
+
const row = Math.min(i, j);
|
|
25
|
+
const col = Math.max(i, j);
|
|
26
|
+
const offset = row - S.first[col];
|
|
27
|
+
return offset < 0 ? 0 : S.columns[col][offset];
|
|
28
|
+
};
|
|
29
|
+
exports.skylineGet = skylineGet;
|
|
30
|
+
/** Number of stored entries, a measure of memory and of factorisation work. */
|
|
31
|
+
const skylineSize = (S) => S.columns.reduce((sum, column) => sum + column.length, 0);
|
|
32
|
+
exports.skylineSize = skylineSize;
|
|
33
|
+
/**
|
|
34
|
+
* Factorises a symmetric positive-definite skyline matrix in place as A = Uᵀ·U (U upper
|
|
35
|
+
* triangular, same profile).
|
|
36
|
+
*
|
|
37
|
+
* @param S - Matrix, overwritten by U
|
|
38
|
+
* @param tolerance - A pivot at or below `tolerance` times its own diagonal term is treated as zero
|
|
39
|
+
* @returns `{ ok: true }`, or `{ ok: false, failedPivot }` with the index of the first pivot that
|
|
40
|
+
* failed (A is singular or indefinite there — for a structure, a mechanism involving that DOF)
|
|
41
|
+
*/
|
|
42
|
+
const skylineFactor = (S, tolerance = 1e-12) => {
|
|
43
|
+
const { n, first, columns } = S;
|
|
44
|
+
for (let j = 0; j < n; j++) {
|
|
45
|
+
const colJ = columns[j];
|
|
46
|
+
const fj = first[j];
|
|
47
|
+
for (let i = fj; i < j; i++) {
|
|
48
|
+
const colI = columns[i];
|
|
49
|
+
const fi = first[i];
|
|
50
|
+
const k0 = Math.max(fi, fj);
|
|
51
|
+
let sum = colJ[i - fj];
|
|
52
|
+
for (let k = k0; k < i; k++)
|
|
53
|
+
sum -= colI[k - fi] * colJ[k - fj];
|
|
54
|
+
colJ[i - fj] = sum / colI[i - fi];
|
|
55
|
+
}
|
|
56
|
+
const diagonal = colJ[j - fj];
|
|
57
|
+
let sum = diagonal;
|
|
58
|
+
for (let k = fj; k < j; k++)
|
|
59
|
+
sum -= colJ[k - fj] * colJ[k - fj];
|
|
60
|
+
if (!(sum > tolerance * diagonal))
|
|
61
|
+
return { ok: false, failedPivot: j };
|
|
62
|
+
colJ[j - fj] = Math.sqrt(sum);
|
|
63
|
+
}
|
|
64
|
+
return { ok: true };
|
|
65
|
+
};
|
|
66
|
+
exports.skylineFactor = skylineFactor;
|
|
67
|
+
/**
|
|
68
|
+
* Solves A·x = b from the factor produced by `skylineFactor` (forward then back substitution).
|
|
69
|
+
* One factorisation serves any number of right-hand sides.
|
|
70
|
+
*/
|
|
71
|
+
const skylineSolve = (U, b) => {
|
|
72
|
+
const { n, first, columns } = U;
|
|
73
|
+
const y = Array.from(b);
|
|
74
|
+
// Uᵀ·y = b
|
|
75
|
+
for (let j = 0; j < n; j++) {
|
|
76
|
+
const col = columns[j];
|
|
77
|
+
const fj = first[j];
|
|
78
|
+
let sum = y[j];
|
|
79
|
+
for (let k = fj; k < j; k++)
|
|
80
|
+
sum -= col[k - fj] * y[k];
|
|
81
|
+
y[j] = sum / col[j - fj];
|
|
82
|
+
}
|
|
83
|
+
// U·x = y
|
|
84
|
+
for (let j = n - 1; j >= 0; j--) {
|
|
85
|
+
const col = columns[j];
|
|
86
|
+
const fj = first[j];
|
|
87
|
+
y[j] /= col[j - fj];
|
|
88
|
+
const xj = y[j];
|
|
89
|
+
for (let k = fj; k < j; k++)
|
|
90
|
+
y[k] -= col[k - fj] * xj;
|
|
91
|
+
}
|
|
92
|
+
return y;
|
|
93
|
+
};
|
|
94
|
+
exports.skylineSolve = skylineSolve;
|
|
95
|
+
/**
|
|
96
|
+
* Reverse Cuthill–McKee ordering of a graph, which keeps connected vertices close together and
|
|
97
|
+
* so narrows the band of the matrix built on it. Each connected component starts from a
|
|
98
|
+
* pseudo-peripheral vertex.
|
|
99
|
+
*
|
|
100
|
+
* @param adjacency - Neighbours of each vertex (undirected)
|
|
101
|
+
* @returns The vertices in their new order (`order[k]` = original index of the k-th vertex)
|
|
102
|
+
*/
|
|
103
|
+
const reverseCuthillMcKee = (adjacency) => {
|
|
104
|
+
const n = adjacency.length;
|
|
105
|
+
const degree = adjacency.map((neighbours) => neighbours.length);
|
|
106
|
+
const visited = new Uint8Array(n);
|
|
107
|
+
const order = [];
|
|
108
|
+
/** Breadth-first levels from `start`, within unvisited vertices. */
|
|
109
|
+
const levels = (start) => {
|
|
110
|
+
const level = new Int32Array(n).fill(-1);
|
|
111
|
+
level[start] = 0;
|
|
112
|
+
const queue = [start];
|
|
113
|
+
let last = start;
|
|
114
|
+
for (let q = 0; q < queue.length; q++) {
|
|
115
|
+
const v = queue[q];
|
|
116
|
+
for (const w of adjacency[v]) {
|
|
117
|
+
if (!visited[w] && level[w] < 0) {
|
|
118
|
+
level[w] = level[v] + 1;
|
|
119
|
+
queue.push(w);
|
|
120
|
+
if (level[w] > level[last] || (level[w] === level[last] && degree[w] < degree[last])) {
|
|
121
|
+
last = w;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return { depth: level[last], last };
|
|
127
|
+
};
|
|
128
|
+
const byDegree = Array.from({ length: n }, (_, i) => i).sort((a, b) => degree[a] - degree[b]);
|
|
129
|
+
for (const seed of byDegree) {
|
|
130
|
+
if (visited[seed])
|
|
131
|
+
continue;
|
|
132
|
+
// pseudo-peripheral start: move to the far end of the BFS until the depth stops growing
|
|
133
|
+
let start = seed;
|
|
134
|
+
let { depth, last } = levels(start);
|
|
135
|
+
for (let iteration = 0; iteration < 8; iteration++) {
|
|
136
|
+
const next = levels(last);
|
|
137
|
+
if (next.depth <= depth)
|
|
138
|
+
break;
|
|
139
|
+
start = last;
|
|
140
|
+
depth = next.depth;
|
|
141
|
+
last = next.last;
|
|
142
|
+
}
|
|
143
|
+
const component = [start];
|
|
144
|
+
visited[start] = 1;
|
|
145
|
+
for (let q = 0; q < component.length; q++) {
|
|
146
|
+
const neighbours = adjacency[component[q]]
|
|
147
|
+
.filter((w) => !visited[w])
|
|
148
|
+
.sort((a, b) => degree[a] - degree[b]);
|
|
149
|
+
for (const w of neighbours) {
|
|
150
|
+
if (!visited[w]) {
|
|
151
|
+
visited[w] = 1;
|
|
152
|
+
component.push(w);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
order.push(...component);
|
|
157
|
+
}
|
|
158
|
+
return order.reverse();
|
|
159
|
+
};
|
|
160
|
+
exports.reverseCuthillMcKee = reverseCuthillMcKee;
|
|
161
|
+
//# sourceMappingURL=skyline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skyline.js","sourceRoot":"","sources":["../../src/utils/skyline.ts"],"names":[],"mappings":";;;AAaA,8FAA8F;AACvF,MAAM,aAAa,GAAG,CAAC,KAAwB,EAAiB,EAAE;IACvE,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5F,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAC1C,CAAC,CAAC;AALW,QAAA,aAAa,iBAKxB;AAEF,0FAA0F;AACnF,MAAM,UAAU,GAAG,CAAC,CAAgB,EAAE,CAAS,EAAE,CAAS,EAAE,KAAa,EAAQ,EAAE;IACxF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,KAAK,GAAG,2BAA2B,CAAC,CAAC;IAC1F,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;AAClC,CAAC,CAAC;AANW,QAAA,UAAU,cAMrB;AAEF,6CAA6C;AACtC,MAAM,UAAU,GAAG,CAAC,CAAgB,EAAE,CAAS,EAAE,CAAS,EAAU,EAAE;IAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC,CAAC;AALW,QAAA,UAAU,cAKrB;AAEF,+EAA+E;AACxE,MAAM,WAAW,GAAG,CAAC,CAAgB,EAAU,EAAE,CACtD,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAD/C,QAAA,WAAW,eACoC;AAE5D;;;;;;;;GAQG;AACI,MAAM,aAAa,GAAG,CAC3B,CAAgB,EAChB,SAAS,GAAG,KAAK,EACkC,EAAE;IACrD,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5B,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YACvB,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAChE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9B,IAAI,GAAG,GAAG,QAAQ,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,CAAC,GAAG,GAAG,SAAS,GAAG,QAAQ,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QACxE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC,CAAC;AAvBW,QAAA,aAAa,iBAuBxB;AAEF;;;GAGG;AACI,MAAM,YAAY,GAAG,CAAC,CAAgB,EAAE,CAAoB,EAAY,EAAE;IAC/E,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,WAAW;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3B,CAAC;IACD,UAAU;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACpB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IACxD,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AApBW,QAAA,YAAY,gBAoBvB;AAEF;;;;;;;GAOG;AACI,MAAM,mBAAmB,GAAG,CAAC,SAAqB,EAAY,EAAE;IACrE,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;IAC3B,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,oEAAoE;IACpE,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACnB,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACxB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACd,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;wBACrF,IAAI,GAAG,CAAC,CAAC;oBACX,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IACtC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9F,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,IAAI,CAAC;YAAE,SAAS;QAC5B,wFAAwF;QACxF,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACpC,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;YACnD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK;gBAAE,MAAM;YAC/B,KAAK,GAAG,IAAI,CAAC;YACb,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACnB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;QAED,MAAM,SAAS,GAAa,CAAC,KAAK,CAAC,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;iBACvC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;iBAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;gBAC3B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACf,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;AACzB,CAAC,CAAC;AAzDW,QAAA,mBAAmB,uBAyD9B"}
|
package/package.json
CHANGED
|
@@ -1,28 +1,46 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theerapat-s28/ts-structural-eng-tools",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "2.1.0",
|
|
4
|
+
"description": "Headless structural analysis and design engine for TypeScript: 3D frame analysis (direct stiffness method), RC beam design per ACI 318-19 and strengthening methods",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
|
+
"module": "dist/esm/index.js",
|
|
8
|
+
"sideEffects": false,
|
|
7
9
|
"exports": {
|
|
8
10
|
".": {
|
|
9
11
|
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/esm/index.js",
|
|
13
|
+
"require": "./dist/index.js",
|
|
10
14
|
"default": "./dist/index.js"
|
|
11
15
|
},
|
|
12
16
|
"./rc": {
|
|
13
17
|
"types": "./dist/rc/index.d.ts",
|
|
18
|
+
"import": "./dist/esm/rc/index.js",
|
|
19
|
+
"require": "./dist/rc/index.js",
|
|
14
20
|
"default": "./dist/rc/index.js"
|
|
15
21
|
},
|
|
16
22
|
"./strengthening": {
|
|
17
23
|
"types": "./dist/strengthening/index.d.ts",
|
|
24
|
+
"import": "./dist/esm/strengthening/index.js",
|
|
25
|
+
"require": "./dist/strengthening/index.js",
|
|
18
26
|
"default": "./dist/strengthening/index.js"
|
|
19
27
|
},
|
|
28
|
+
"./fea": {
|
|
29
|
+
"types": "./dist/fea/index.d.ts",
|
|
30
|
+
"import": "./dist/esm/fea/index.js",
|
|
31
|
+
"require": "./dist/fea/index.js",
|
|
32
|
+
"default": "./dist/fea/index.js"
|
|
33
|
+
},
|
|
20
34
|
"./core": {
|
|
21
35
|
"types": "./dist/core/index.d.ts",
|
|
36
|
+
"import": "./dist/esm/core/index.js",
|
|
37
|
+
"require": "./dist/core/index.js",
|
|
22
38
|
"default": "./dist/core/index.js"
|
|
23
39
|
},
|
|
24
40
|
"./utils": {
|
|
25
41
|
"types": "./dist/utils/index.d.ts",
|
|
42
|
+
"import": "./dist/esm/utils/index.js",
|
|
43
|
+
"require": "./dist/utils/index.js",
|
|
26
44
|
"default": "./dist/utils/index.js"
|
|
27
45
|
}
|
|
28
46
|
},
|
|
@@ -33,6 +51,12 @@
|
|
|
33
51
|
],
|
|
34
52
|
"keywords": [
|
|
35
53
|
"structural-engineering",
|
|
54
|
+
"structural-analysis",
|
|
55
|
+
"analysis-engine",
|
|
56
|
+
"frame-analysis",
|
|
57
|
+
"finite-element",
|
|
58
|
+
"fea",
|
|
59
|
+
"direct-stiffness-method",
|
|
36
60
|
"beam-design",
|
|
37
61
|
"reinforced-concrete",
|
|
38
62
|
"ACI-318",
|
|
@@ -40,7 +64,7 @@
|
|
|
40
64
|
"steel-jacketing",
|
|
41
65
|
"typescript"
|
|
42
66
|
],
|
|
43
|
-
"author": "",
|
|
67
|
+
"author": "theerapat-s28",
|
|
44
68
|
"license": "ISC",
|
|
45
69
|
"homepage": "https://theerapat-s28.github.io/ts-structural-eng/",
|
|
46
70
|
"repository": {
|
|
@@ -67,7 +91,7 @@
|
|
|
67
91
|
},
|
|
68
92
|
"scripts": {
|
|
69
93
|
"dev": "ts-node -r tsconfig-paths/register examples/basic-usage.ts",
|
|
70
|
-
"build": "rm -rf dist && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
|
|
94
|
+
"build": "rm -rf dist && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && tsc -p tsconfig.esm.json && tsc-alias -p tsconfig.esm.json --resolve-full-paths && node -e \"require('fs').writeFileSync('dist/esm/package.json', JSON.stringify({ type: 'module' }))\"",
|
|
71
95
|
"lint": "eslint src/",
|
|
72
96
|
"lint:fix": "eslint src/ --fix",
|
|
73
97
|
"format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \"examples/**/*.ts\"",
|