@reicek/neataptic-ts 0.1.25 → 0.1.26
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/.github/copilot-instructions.md +11 -0
- package/.github/skills/trace-analyzer-extension/SKILL.md +3 -3
- package/.github/skills/trace-analyzer-extension/assets/extension-checklist.md +1 -1
- package/.github/skills/trace-analyzer-extension/references/analyzer-extension-workflow.md +1 -1
- package/.github/skills/trace-audit-reporting/SKILL.md +3 -3
- package/.github/skills/trace-audit-reporting/references/trace-analysis-workflow.md +1 -1
- package/package.json +19 -13
- package/plans/Flappy_Bird_Folder_Documentation_Pass.md +4 -4
- package/plans/README.md +24 -0
- package/plans/Roadmap.md +62 -40
- package/plans/analyze-trace-solid-split.plans.md +66 -0
- package/plans/architecture-solid-split.plans.md +9 -15
- package/plans/asciiMaze-typescript-repair.plans.md +1 -1
- package/plans/generate-docs-solid-split.plans.md +87 -0
- package/plans/methods-docs.plans.md +25 -1
- package/plans/methods-solid-split.plans.md +14 -14
- package/plans/neat-docs.plans.md +9 -1
- package/plans/neat-test-surface-repair.plans.md +1 -1
- package/plans/render-docs-html-solid-split.plans.md +68 -0
- package/plans/src-no-explicit-any-cleanup.plans.md +1 -1
- package/plans/utils-docs.plans.md +6 -1
- package/scripts/analyze-trace/analyze-trace.analysis.ts +479 -0
- package/scripts/analyze-trace/analyze-trace.constants.ts +35 -0
- package/scripts/analyze-trace/analyze-trace.io.ts +69 -0
- package/scripts/analyze-trace/analyze-trace.report.ts +100 -0
- package/scripts/analyze-trace/analyze-trace.shared.ts +116 -0
- package/scripts/analyze-trace/analyze-trace.ts +45 -0
- package/scripts/analyze-trace/analyze-trace.types.ts +72 -0
- package/scripts/assets/theme.css +80 -23
- package/scripts/copy-examples.ts +239 -0
- package/scripts/export-onnx.ts +223 -0
- package/scripts/generate-bench-tables.ts +378 -37
- package/scripts/generate-docs/generate-docs.constants.ts +107 -0
- package/scripts/generate-docs/generate-docs.order.ts +355 -0
- package/scripts/generate-docs/generate-docs.state.ts +31 -0
- package/scripts/generate-docs/generate-docs.targets.ts +165 -0
- package/scripts/generate-docs/generate-docs.ts +63 -0
- package/scripts/generate-docs/generate-docs.types.ts +112 -0
- package/scripts/generate-docs/output/generate-docs.output.folder-index.utils.ts +167 -0
- package/scripts/generate-docs/output/generate-docs.output.ordering.utils.ts +353 -0
- package/scripts/generate-docs/output/generate-docs.output.readme.utils.ts +420 -0
- package/scripts/generate-docs/output/generate-docs.output.ts +123 -0
- package/scripts/generate-docs/output/generate-docs.output.warnings.utils.ts +219 -0
- package/scripts/generate-docs/symbols/generate-docs.symbols.collection.utils.ts +365 -0
- package/scripts/generate-docs/symbols/generate-docs.symbols.jsdoc.utils.ts +373 -0
- package/scripts/generate-docs/symbols/generate-docs.symbols.normalize.utils.ts +155 -0
- package/scripts/generate-docs/symbols/generate-docs.symbols.render.utils.ts +149 -0
- package/scripts/generate-docs/symbols/generate-docs.symbols.signature.utils.ts +289 -0
- package/scripts/generate-docs/symbols/generate-docs.symbols.ts +11 -0
- package/scripts/mermaid-cli.mjs +102 -22
- package/scripts/mermaid-cli.ts +736 -0
- package/scripts/render-docs-html/render-docs-html.assets.ts +54 -0
- package/scripts/render-docs-html/render-docs-html.mermaid.ts +245 -0
- package/scripts/{render-docs-html.sidebar.ts → render-docs-html/render-docs-html.navigation.ts} +141 -144
- package/scripts/render-docs-html/render-docs-html.pages.ts +333 -0
- package/scripts/render-docs-html/render-docs-html.shared.ts +333 -0
- package/scripts/render-docs-html/render-docs-html.types.ts +42 -0
- package/scripts/render-docs-html.ts +23 -587
- package/scripts/run-docs.ts +238 -0
- package/scripts/write-dist-docs-pkg.ts +40 -0
- package/src/README.md +75 -75
- package/src/architecture/connection/README.md +5 -5
- package/src/architecture/layer/README.md +508 -508
- package/src/architecture/network/README.md +1458 -1458
- package/src/architecture/network/activate/README.md +694 -694
- package/src/architecture/network/bootstrap/README.md +77 -77
- package/src/architecture/network/connect/README.md +74 -74
- package/src/architecture/network/deterministic/README.md +135 -135
- package/src/architecture/network/evolve/README.md +364 -364
- package/src/architecture/network/gating/README.md +130 -130
- package/src/architecture/network/genetic/README.md +399 -399
- package/src/architecture/network/mutate/README.md +897 -897
- package/src/architecture/network/onnx/README.md +720 -720
- package/src/architecture/network/onnx/export/README.md +728 -728
- package/src/architecture/network/onnx/export/layers/README.md +450 -450
- package/src/architecture/network/onnx/import/README.md +618 -618
- package/src/architecture/network/onnx/schema/README.md +32 -32
- package/src/architecture/network/prune/README.md +245 -245
- package/src/architecture/network/remove/README.md +135 -135
- package/src/architecture/network/runtime/README.md +106 -106
- package/src/architecture/network/serialize/README.md +542 -542
- package/src/architecture/network/slab/README.md +608 -608
- package/src/architecture/network/standalone/README.md +212 -212
- package/src/architecture/network/stats/README.md +84 -84
- package/src/architecture/network/topology/README.md +465 -465
- package/src/architecture/network/training/README.md +200 -200
- package/src/architecture/node/README.md +5 -5
- package/src/architecture/nodePool/README.md +14 -14
- package/src/methods/README.md +99 -99
- package/src/methods/activation/README.md +189 -189
- package/src/methods/cost/README.md +131 -131
- package/src/methods/rate/README.md +86 -86
- package/src/multithreading/README.md +77 -77
- package/src/multithreading/workers/browser/README.md +8 -8
- package/src/multithreading/workers/node/README.md +8 -8
- package/src/neat/README.md +148 -148
- package/src/neat/adaptive/README.md +120 -120
- package/src/neat/adaptive/acceptance/README.md +40 -40
- package/src/neat/adaptive/complexity/README.md +137 -137
- package/src/neat/adaptive/core/README.md +197 -197
- package/src/neat/adaptive/lineage/README.md +90 -90
- package/src/neat/adaptive/mutation/README.md +284 -284
- package/src/neat/compat/README.md +43 -43
- package/src/neat/compat/core/README.md +90 -90
- package/src/neat/diversity/README.md +35 -35
- package/src/neat/diversity/core/README.md +88 -88
- package/src/neat/evaluate/README.md +85 -85
- package/src/neat/evaluate/auto-distance/README.md +75 -75
- package/src/neat/evaluate/entropy-compat/README.md +37 -37
- package/src/neat/evaluate/entropy-sharing/README.md +43 -43
- package/src/neat/evaluate/fitness/README.md +23 -23
- package/src/neat/evaluate/novelty/README.md +120 -120
- package/src/neat/evaluate/objectives/README.md +17 -17
- package/src/neat/evaluate/shared/README.md +94 -94
- package/src/neat/evolve/README.md +96 -96
- package/src/neat/evolve/adaptive/README.md +60 -60
- package/src/neat/evolve/objectives/README.md +63 -63
- package/src/neat/evolve/offspring/README.md +56 -56
- package/src/neat/evolve/population/README.md +171 -171
- package/src/neat/evolve/runtime/README.md +79 -79
- package/src/neat/evolve/speciation/README.md +74 -74
- package/src/neat/evolve/warnings/README.md +10 -10
- package/src/neat/export/README.md +114 -114
- package/src/neat/helpers/README.md +50 -50
- package/src/neat/init/README.md +9 -9
- package/src/neat/lineage/core/README.md +101 -101
- package/src/neat/multiobjective/category/README.md +74 -74
- package/src/neat/multiobjective/crowding/README.md +272 -272
- package/src/neat/multiobjective/dominance/README.md +171 -171
- package/src/neat/multiobjective/fronts/README.md +68 -68
- package/src/neat/multiobjective/metrics/README.md +43 -43
- package/src/neat/multiobjective/objectives/README.md +31 -31
- package/src/neat/multiobjective/shared/README.md +27 -27
- package/src/neat/mutation/README.md +97 -97
- package/src/neat/mutation/add-conn/README.md +115 -115
- package/src/neat/mutation/add-node/README.md +126 -126
- package/src/neat/mutation/flow/README.md +149 -149
- package/src/neat/mutation/repair/README.md +185 -185
- package/src/neat/mutation/select/README.md +117 -117
- package/src/neat/mutation/shared/README.md +32 -32
- package/src/neat/objectives/README.md +25 -25
- package/src/neat/objectives/core/README.md +67 -67
- package/src/neat/pruning/README.md +40 -40
- package/src/neat/pruning/core/README.md +171 -171
- package/src/neat/pruning/facade/README.md +32 -32
- package/src/neat/rng/README.md +104 -104
- package/src/neat/rng/core/README.md +137 -137
- package/src/neat/rng/facade/README.md +50 -50
- package/src/neat/selection/README.md +111 -111
- package/src/neat/selection/core/README.md +227 -227
- package/src/neat/selection/facade/README.md +61 -61
- package/src/neat/shared/README.md +163 -163
- package/src/neat/speciation/README.md +31 -31
- package/src/neat/speciation/threshold/README.md +35 -35
- package/src/neat/species/README.md +25 -25
- package/src/neat/species/core/README.md +20 -20
- package/src/neat/species/core/shared/README.md +18 -18
- package/src/neat/species/history/context/README.md +22 -22
- package/src/neat/telemetry/accessors/README.md +58 -58
- package/src/neat/telemetry/exports/README.md +233 -233
- package/src/neat/telemetry/facade/README.md +252 -252
- package/src/neat/telemetry/facade/archive/README.md +57 -57
- package/src/neat/telemetry/facade/buffer/README.md +43 -43
- package/src/neat/telemetry/facade/lineage/README.md +12 -12
- package/src/neat/telemetry/facade/objectives/README.md +44 -44
- package/src/neat/telemetry/facade/runtime/README.md +26 -26
- package/src/neat/telemetry/facade/species/README.md +27 -27
- package/src/neat/telemetry/metrics/README.md +696 -696
- package/src/neat/telemetry/recorder/README.md +57 -57
- package/src/neat/telemetry/types/README.md +32 -32
- package/src/neat/topology-intent/README.md +75 -75
- package/src/utils/README.md +193 -193
- package/test/examples/asciiMaze/browser-entry/README.md +92 -92
- package/test/examples/asciiMaze/dashboardManager/README.md +109 -109
- package/test/examples/asciiMaze/dashboardManager/telemetry/README.md +28 -28
- package/test/examples/asciiMaze/evolutionEngine/README.md +1527 -1527
- package/test/examples/asciiMaze/mazeMovement/README.md +105 -105
- package/test/examples/asciiMaze/mazeMovement/finalization/README.md +16 -16
- package/test/examples/asciiMaze/mazeMovement/policy/README.md +57 -57
- package/test/examples/asciiMaze/mazeMovement/runtime/README.md +52 -52
- package/test/examples/asciiMaze/mazeMovement/shaping/README.md +46 -46
- package/test/examples/flappy_bird/browser-entry/README.md +508 -508
- package/test/examples/flappy_bird/browser-entry/host/README.md +101 -101
- package/test/examples/flappy_bird/browser-entry/host/resize/README.md +144 -144
- package/test/examples/flappy_bird/browser-entry/network-view/README.md +194 -194
- package/test/examples/flappy_bird/browser-entry/playback/README.md +278 -278
- package/test/examples/flappy_bird/browser-entry/playback/background/README.md +129 -129
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/README.md +502 -502
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/README.md +139 -139
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/README.md +10 -10
- package/test/examples/flappy_bird/browser-entry/playback/trail/README.md +43 -43
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/README.md +30 -30
- package/test/examples/flappy_bird/browser-entry/runtime/README.md +59 -59
- package/test/examples/flappy_bird/browser-entry/visualization/README.md +276 -276
- package/test/examples/flappy_bird/browser-entry/worker-channel/README.md +16 -16
- package/test/examples/flappy_bird/constants/README.md +1070 -1070
- package/test/examples/flappy_bird/environment/README.md +22 -22
- package/test/examples/flappy_bird/evaluation/README.md +32 -32
- package/test/examples/flappy_bird/evaluation/rollout/README.md +141 -141
- package/test/examples/flappy_bird/flappy-evolution-worker/README.md +425 -425
- package/test/examples/flappy_bird/simulation-shared/README.md +170 -170
- package/test/examples/flappy_bird/simulation-shared/observation/README.md +109 -109
- package/test/examples/flappy_bird/trainer/README.md +325 -325
- package/test/examples/flappy_bird/trainer/evaluation/README.md +74 -74
- package/scripts/analyze-trace.ts +0 -590
- package/scripts/copy-examples.mjs +0 -114
- package/scripts/export-onnx.mjs +0 -86
- package/scripts/generate-bench-tables.mjs +0 -182
- package/scripts/generate-docs.ts +0 -2900
- package/scripts/write-dist-docs-pkg.mjs +0 -16
package/scripts/export-onnx.mjs
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Minimal CLI to export a JSON ONNX model from a serialized Network state.
|
|
3
|
-
* Usage (Node >=20):
|
|
4
|
-
* node scripts/export-onnx.mjs --in network.json --out model.onnx.json [--metadata] [--batch] [--legacy] [--partial] [--mixed]
|
|
5
|
-
*
|
|
6
|
-
* This is a lightweight helper; for production pipelines integrate directly with the API.
|
|
7
|
-
*/
|
|
8
|
-
import fs from 'fs';
|
|
9
|
-
import path from 'path';
|
|
10
|
-
import { fileURLToPath, pathToFileURL } from 'url';
|
|
11
|
-
|
|
12
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
13
|
-
const __dirname = path.dirname(__filename);
|
|
14
|
-
|
|
15
|
-
const args = process.argv.slice(2);
|
|
16
|
-
const arg = (name, def) => {
|
|
17
|
-
const idx = args.indexOf(name);
|
|
18
|
-
return idx >= 0 ? args[idx + 1] : def;
|
|
19
|
-
};
|
|
20
|
-
const flag = (name) => args.includes(name);
|
|
21
|
-
|
|
22
|
-
if (flag('--help') || flag('-h')) {
|
|
23
|
-
console.log(
|
|
24
|
-
`Usage: node scripts/export-onnx.mjs --in network.json --out model.onnx.json [--metadata] [--batch] [--legacy] [--partial] [--mixed]\n`,
|
|
25
|
-
);
|
|
26
|
-
process.exit(0);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const inputFile = arg('--in');
|
|
30
|
-
const outputFile = arg('--out');
|
|
31
|
-
if (!inputFile || !outputFile) {
|
|
32
|
-
console.error('Error: --in and --out are required.');
|
|
33
|
-
process.exit(1);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const includeMetadata = flag('--metadata');
|
|
37
|
-
const batchDimension = flag('--batch');
|
|
38
|
-
const legacyNodeOrdering = flag('--legacy');
|
|
39
|
-
const allowPartialConnectivity = flag('--partial');
|
|
40
|
-
const allowMixedActivations = flag('--mixed');
|
|
41
|
-
|
|
42
|
-
// Dynamic import of built library (dist) in ESM context
|
|
43
|
-
async function loadDist() {
|
|
44
|
-
// Use pathToFileURL to avoid Windows path issues
|
|
45
|
-
const onnxMod = await import(
|
|
46
|
-
pathToFileURL(path.resolve('dist', 'architecture', 'onnx.js')).href
|
|
47
|
-
).catch(async () => {
|
|
48
|
-
// Fallback to network/network.onnx if direct path changed
|
|
49
|
-
return import(
|
|
50
|
-
pathToFileURL(
|
|
51
|
-
path.resolve('dist', 'architecture', 'network', 'network.onnx.js'),
|
|
52
|
-
).href
|
|
53
|
-
);
|
|
54
|
-
});
|
|
55
|
-
// network default export
|
|
56
|
-
const netMod = await import(
|
|
57
|
-
pathToFileURL(path.resolve('dist', 'architecture', 'network.js')).href
|
|
58
|
-
);
|
|
59
|
-
const Network = netMod.default;
|
|
60
|
-
const { exportToONNX, importFromONNX } = onnxMod; // importFromONNX unused but re-exported for completeness
|
|
61
|
-
return { Network, exportToONNX, importFromONNX };
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
(async () => {
|
|
65
|
-
try {
|
|
66
|
-
const { Network, exportToONNX } = await loadDist();
|
|
67
|
-
const raw = JSON.parse(fs.readFileSync(path.resolve(inputFile), 'utf8'));
|
|
68
|
-
const net = Network.fromJSON(raw);
|
|
69
|
-
const onnx = exportToONNX(net, {
|
|
70
|
-
includeMetadata,
|
|
71
|
-
batchDimension,
|
|
72
|
-
legacyNodeOrdering,
|
|
73
|
-
allowPartialConnectivity,
|
|
74
|
-
allowMixedActivations,
|
|
75
|
-
});
|
|
76
|
-
fs.writeFileSync(
|
|
77
|
-
path.resolve(outputFile),
|
|
78
|
-
JSON.stringify(onnx, null, 2),
|
|
79
|
-
'utf8',
|
|
80
|
-
);
|
|
81
|
-
console.log(`ONNX JSON written to ${outputFile}`);
|
|
82
|
-
} catch (err) {
|
|
83
|
-
console.error('Export failed:', err.message || err);
|
|
84
|
-
process.exit(1);
|
|
85
|
-
}
|
|
86
|
-
})();
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* generate-bench-tables.mjs (ESM version)
|
|
3
|
-
* Emits markdown tables derived from test/benchmarks/benchmark.results.json.
|
|
4
|
-
*/
|
|
5
|
-
import fs from 'fs';
|
|
6
|
-
import path from 'path';
|
|
7
|
-
|
|
8
|
-
function cell(v, w) {
|
|
9
|
-
const s = String(v ?? '');
|
|
10
|
-
return s.length >= w ? s.slice(0, w) : s + ' '.repeat(w - s.length);
|
|
11
|
-
}
|
|
12
|
-
function fmtNum(n, digits = 4) {
|
|
13
|
-
if (typeof n !== 'number' || !isFinite(n)) return '';
|
|
14
|
-
return n.toFixed(digits).replace(/0+$/, '').replace(/\.$/, '');
|
|
15
|
-
}
|
|
16
|
-
function loadArtifact() {
|
|
17
|
-
const file = path.resolve('test/benchmarks/benchmark.results.json');
|
|
18
|
-
if (!fs.existsSync(file)) {
|
|
19
|
-
console.error('[bench:tables] Artifact not found:', file);
|
|
20
|
-
return null;
|
|
21
|
-
}
|
|
22
|
-
try {
|
|
23
|
-
return JSON.parse(fs.readFileSync(file, 'utf8'));
|
|
24
|
-
} catch (e) {
|
|
25
|
-
console.error('[bench:tables] Parse error', e);
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
function normalizeAggregated(artifact) {
|
|
30
|
-
const raw = artifact.aggregated;
|
|
31
|
-
if (Array.isArray(raw)) {
|
|
32
|
-
const out = { src: {}, dist: {} };
|
|
33
|
-
for (const entry of raw) {
|
|
34
|
-
const mode = entry.mode;
|
|
35
|
-
const sizeKey = String(entry.size);
|
|
36
|
-
out[mode] = out[mode] || {};
|
|
37
|
-
out[mode][sizeKey] = out[mode][sizeKey] || {}; // scenario bucket
|
|
38
|
-
out[mode][sizeKey].all = out[mode][sizeKey].all || {};
|
|
39
|
-
const metrics = [
|
|
40
|
-
'buildMs',
|
|
41
|
-
'fwdAvgMs',
|
|
42
|
-
'bytesPerConn',
|
|
43
|
-
'heapUsed',
|
|
44
|
-
'rss',
|
|
45
|
-
];
|
|
46
|
-
out[mode][sizeKey].all = out[mode][sizeKey].all || {};
|
|
47
|
-
for (const m of metrics) {
|
|
48
|
-
const meanKey = m + 'Mean';
|
|
49
|
-
if (meanKey in entry) {
|
|
50
|
-
out[mode][sizeKey].all[m] = { mean: entry[meanKey] };
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return out;
|
|
55
|
-
}
|
|
56
|
-
return raw || { src: {}, dist: {} };
|
|
57
|
-
}
|
|
58
|
-
function buildVariantDeltaTable(artifact) {
|
|
59
|
-
const agg = normalizeAggregated(artifact);
|
|
60
|
-
const sizes = new Set(Object.keys(agg.src || {}));
|
|
61
|
-
const ordered = Array.from(sizes).sort((a, b) => parseInt(a) - parseInt(b));
|
|
62
|
-
const rows = [];
|
|
63
|
-
rows.push(
|
|
64
|
-
'Size Metric Src Mean Dist Mean Δ Abs Δ % Flag Result',
|
|
65
|
-
);
|
|
66
|
-
rows.push(
|
|
67
|
-
'------ ----------------- ------------- ------------- ------------- ---------- ------------- ------------------------------------------------------------',
|
|
68
|
-
);
|
|
69
|
-
const metrics = ['buildMs', 'fwdAvgMs', 'bytesPerConn'];
|
|
70
|
-
for (const size of ordered) {
|
|
71
|
-
for (const metric of metrics) {
|
|
72
|
-
const srcAgg = agg.src?.[size]?.all?.[metric];
|
|
73
|
-
const distAgg = agg.dist?.[size]?.all?.[metric];
|
|
74
|
-
const sMean = srcAgg?.mean;
|
|
75
|
-
const dMean = distAgg?.mean;
|
|
76
|
-
let dAbs, dPct;
|
|
77
|
-
if (typeof sMean === 'number' && typeof dMean === 'number') {
|
|
78
|
-
dAbs = dMean - sMean;
|
|
79
|
-
dPct = sMean === 0 ? undefined : (dAbs / sMean) * 100;
|
|
80
|
-
}
|
|
81
|
-
const threshold = metric === 'bytesPerConn' ? 3 : 5;
|
|
82
|
-
const flag =
|
|
83
|
-
typeof dPct === 'number'
|
|
84
|
-
? Math.abs(dPct) > threshold
|
|
85
|
-
? '(REG)'
|
|
86
|
-
: 'OK'
|
|
87
|
-
: '';
|
|
88
|
-
const note =
|
|
89
|
-
metric === 'bytesPerConn'
|
|
90
|
-
? flag === '(REG)'
|
|
91
|
-
? 'Dist bytes divergence'
|
|
92
|
-
: 'Parity'
|
|
93
|
-
: flag === '(REG)'
|
|
94
|
-
? `Dist ${dAbs > 0 ? 'slower' : 'faster'} ${metric}`
|
|
95
|
-
: 'Parity';
|
|
96
|
-
rows.push(
|
|
97
|
-
cell(size, 6) +
|
|
98
|
-
' ' +
|
|
99
|
-
cell(metric + 'Mean', 17) +
|
|
100
|
-
' ' +
|
|
101
|
-
cell(typeof sMean === 'number' ? fmtNum(sMean, 4) : '', 13) +
|
|
102
|
-
' ' +
|
|
103
|
-
cell(typeof dMean === 'number' ? fmtNum(dMean, 4) : '', 13) +
|
|
104
|
-
' ' +
|
|
105
|
-
cell(
|
|
106
|
-
typeof dAbs === 'number'
|
|
107
|
-
? (dAbs >= 0 ? '+' : '') + fmtNum(dAbs, 4)
|
|
108
|
-
: '',
|
|
109
|
-
13,
|
|
110
|
-
) +
|
|
111
|
-
' ' +
|
|
112
|
-
cell(
|
|
113
|
-
typeof dPct === 'number'
|
|
114
|
-
? (dPct >= 0 ? '+' : '') + fmtNum(dPct, 2)
|
|
115
|
-
: '',
|
|
116
|
-
10,
|
|
117
|
-
) +
|
|
118
|
-
' ' +
|
|
119
|
-
cell(flag, 13) +
|
|
120
|
-
' ' +
|
|
121
|
-
note,
|
|
122
|
-
);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
return rows.join('\n');
|
|
126
|
-
}
|
|
127
|
-
function buildHeapTable(artifact) {
|
|
128
|
-
const agg = normalizeAggregated(artifact);
|
|
129
|
-
const sizes = new Set(Object.keys(agg.src || {}));
|
|
130
|
-
const ordered = Array.from(sizes).sort((a, b) => parseInt(a) - parseInt(b));
|
|
131
|
-
const rows = [];
|
|
132
|
-
rows.push(
|
|
133
|
-
'Size Metric Src Bytes Dist Bytes Src MB Dist MB Δ Bytes Δ % Note',
|
|
134
|
-
);
|
|
135
|
-
rows.push(
|
|
136
|
-
'------ -------------- ------------ ------------ --------- --------- ----------- ------- -------------------------------------------------',
|
|
137
|
-
);
|
|
138
|
-
for (const size of ordered) {
|
|
139
|
-
for (const metric of ['heapUsed', 'rss']) {
|
|
140
|
-
const s = agg.src?.[size]?.all?.[metric]?.mean;
|
|
141
|
-
const d = agg.dist?.[size]?.all?.[metric]?.mean;
|
|
142
|
-
if (typeof s !== 'number' || typeof d !== 'number') continue;
|
|
143
|
-
const dBytes = d - s;
|
|
144
|
-
const dPct = s === 0 ? 0 : (dBytes / s) * 100;
|
|
145
|
-
rows.push(
|
|
146
|
-
cell(size, 6) +
|
|
147
|
-
' ' +
|
|
148
|
-
cell(metric + 'Mean', 14) +
|
|
149
|
-
' ' +
|
|
150
|
-
cell(s, 12) +
|
|
151
|
-
' ' +
|
|
152
|
-
cell(d, 12) +
|
|
153
|
-
' ' +
|
|
154
|
-
cell((s / 1048576).toFixed(1), 9) +
|
|
155
|
-
' ' +
|
|
156
|
-
cell((d / 1048576).toFixed(1), 9) +
|
|
157
|
-
' ' +
|
|
158
|
-
cell((dBytes >= 0 ? '+' : '') + dBytes, 11) +
|
|
159
|
-
' ' +
|
|
160
|
-
cell((dPct >= 0 ? '+' : '') + dPct.toFixed(2), 7) +
|
|
161
|
-
' ' +
|
|
162
|
-
'Informational',
|
|
163
|
-
);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return rows.join('\n');
|
|
167
|
-
}
|
|
168
|
-
function main() {
|
|
169
|
-
const artifact = loadArtifact();
|
|
170
|
-
if (!artifact) process.exit(1);
|
|
171
|
-
const out = [
|
|
172
|
-
'```',
|
|
173
|
-
buildVariantDeltaTable(artifact),
|
|
174
|
-
'```',
|
|
175
|
-
'',
|
|
176
|
-
'```',
|
|
177
|
-
buildHeapTable(artifact),
|
|
178
|
-
'```',
|
|
179
|
-
].join('\n');
|
|
180
|
-
console.log(out);
|
|
181
|
-
}
|
|
182
|
-
main();
|