@reicek/neataptic-ts 0.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/.github/ISSUE_TEMPLATE/bug_report.md +33 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +27 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +28 -0
- package/.github/workflows/ci.yml +41 -0
- package/.github/workflows/deploy-pages.yml +29 -0
- package/.github/workflows/manual_release_pipeline.yml +62 -0
- package/.github/workflows/publish.yml +85 -0
- package/.github/workflows/release_dispatch.yml +38 -0
- package/.travis.yml +5 -0
- package/CONTRIBUTING.md +92 -0
- package/LICENSE +24 -0
- package/ONNX_EXPORT.md +87 -0
- package/README.md +1173 -0
- package/RELEASE.md +54 -0
- package/dist-docs/package.json +1 -0
- package/dist-docs/scripts/generate-docs.d.ts +2 -0
- package/dist-docs/scripts/generate-docs.d.ts.map +1 -0
- package/dist-docs/scripts/generate-docs.js +536 -0
- package/dist-docs/scripts/generate-docs.js.map +1 -0
- package/dist-docs/scripts/render-docs-html.d.ts +2 -0
- package/dist-docs/scripts/render-docs-html.d.ts.map +1 -0
- package/dist-docs/scripts/render-docs-html.js +148 -0
- package/dist-docs/scripts/render-docs-html.js.map +1 -0
- package/docs/FOLDERS.md +14 -0
- package/docs/README.md +1173 -0
- package/docs/architecture/README.md +1391 -0
- package/docs/architecture/index.html +938 -0
- package/docs/architecture/network/README.md +1210 -0
- package/docs/architecture/network/index.html +908 -0
- package/docs/assets/ascii-maze.bundle.js +16542 -0
- package/docs/assets/ascii-maze.bundle.js.map +7 -0
- package/docs/index.html +1419 -0
- package/docs/methods/README.md +670 -0
- package/docs/methods/index.html +477 -0
- package/docs/multithreading/README.md +274 -0
- package/docs/multithreading/index.html +215 -0
- package/docs/multithreading/workers/README.md +23 -0
- package/docs/multithreading/workers/browser/README.md +39 -0
- package/docs/multithreading/workers/browser/index.html +70 -0
- package/docs/multithreading/workers/index.html +57 -0
- package/docs/multithreading/workers/node/README.md +33 -0
- package/docs/multithreading/workers/node/index.html +66 -0
- package/docs/neat/README.md +1284 -0
- package/docs/neat/index.html +906 -0
- package/docs/src/README.md +2659 -0
- package/docs/src/index.html +1579 -0
- package/jest.config.ts +32 -0
- package/package.json +99 -0
- package/plans/HyperMorphoNEAT.md +293 -0
- package/plans/ONNX_EXPORT_PLAN.md +46 -0
- package/scripts/generate-docs.ts +486 -0
- package/scripts/render-docs-html.ts +138 -0
- package/scripts/types.d.ts +2 -0
- package/src/README.md +2659 -0
- package/src/architecture/README.md +1391 -0
- package/src/architecture/activationArrayPool.ts +135 -0
- package/src/architecture/architect.ts +635 -0
- package/src/architecture/connection.ts +148 -0
- package/src/architecture/group.ts +406 -0
- package/src/architecture/layer.ts +804 -0
- package/src/architecture/network/README.md +1210 -0
- package/src/architecture/network/network.activate.ts +223 -0
- package/src/architecture/network/network.connect.ts +157 -0
- package/src/architecture/network/network.deterministic.ts +167 -0
- package/src/architecture/network/network.evolve.ts +426 -0
- package/src/architecture/network/network.gating.ts +186 -0
- package/src/architecture/network/network.genetic.ts +247 -0
- package/src/architecture/network/network.mutate.ts +624 -0
- package/src/architecture/network/network.onnx.ts +463 -0
- package/src/architecture/network/network.prune.ts +216 -0
- package/src/architecture/network/network.remove.ts +96 -0
- package/src/architecture/network/network.serialize.ts +309 -0
- package/src/architecture/network/network.slab.ts +262 -0
- package/src/architecture/network/network.standalone.ts +246 -0
- package/src/architecture/network/network.stats.ts +59 -0
- package/src/architecture/network/network.topology.ts +86 -0
- package/src/architecture/network/network.training.ts +1278 -0
- package/src/architecture/network.ts +1302 -0
- package/src/architecture/node.ts +1288 -0
- package/src/architecture/onnx.ts +3 -0
- package/src/config.ts +83 -0
- package/src/methods/README.md +670 -0
- package/src/methods/activation.ts +372 -0
- package/src/methods/connection.ts +31 -0
- package/src/methods/cost.ts +347 -0
- package/src/methods/crossover.ts +63 -0
- package/src/methods/gating.ts +43 -0
- package/src/methods/methods.ts +8 -0
- package/src/methods/mutation.ts +300 -0
- package/src/methods/rate.ts +257 -0
- package/src/methods/selection.ts +65 -0
- package/src/multithreading/README.md +274 -0
- package/src/multithreading/multi.ts +339 -0
- package/src/multithreading/workers/README.md +23 -0
- package/src/multithreading/workers/browser/README.md +39 -0
- package/src/multithreading/workers/browser/testworker.ts +99 -0
- package/src/multithreading/workers/node/README.md +33 -0
- package/src/multithreading/workers/node/testworker.ts +72 -0
- package/src/multithreading/workers/node/worker.ts +70 -0
- package/src/multithreading/workers/workers.ts +22 -0
- package/src/neat/README.md +1284 -0
- package/src/neat/neat.adaptive.ts +544 -0
- package/src/neat/neat.compat.ts +164 -0
- package/src/neat/neat.constants.ts +20 -0
- package/src/neat/neat.diversity.ts +217 -0
- package/src/neat/neat.evaluate.ts +328 -0
- package/src/neat/neat.evolve.ts +1026 -0
- package/src/neat/neat.export.ts +249 -0
- package/src/neat/neat.helpers.ts +235 -0
- package/src/neat/neat.lineage.ts +220 -0
- package/src/neat/neat.multiobjective.ts +260 -0
- package/src/neat/neat.mutation.ts +718 -0
- package/src/neat/neat.objectives.ts +157 -0
- package/src/neat/neat.pruning.ts +190 -0
- package/src/neat/neat.selection.ts +269 -0
- package/src/neat/neat.speciation.ts +460 -0
- package/src/neat/neat.species.ts +151 -0
- package/src/neat/neat.telemetry.exports.ts +469 -0
- package/src/neat/neat.telemetry.ts +933 -0
- package/src/neat/neat.types.ts +275 -0
- package/src/neat.ts +1042 -0
- package/src/neataptic.ts +10 -0
- package/test/architecture/activationArrayPool.capacity.test.ts +19 -0
- package/test/architecture/activationArrayPool.test.ts +46 -0
- package/test/architecture/connection.test.ts +290 -0
- package/test/architecture/group.test.ts +950 -0
- package/test/architecture/layer.test.ts +1535 -0
- package/test/architecture/network.pruning.test.ts +65 -0
- package/test/architecture/node.test.ts +1602 -0
- package/test/examples/asciiMaze/asciiMaze.e2e.test.ts +499 -0
- package/test/examples/asciiMaze/asciiMaze.ts +41 -0
- package/test/examples/asciiMaze/browser-entry.ts +164 -0
- package/test/examples/asciiMaze/browserLogger.ts +221 -0
- package/test/examples/asciiMaze/browserTerminalUtility.ts +48 -0
- package/test/examples/asciiMaze/colors.ts +119 -0
- package/test/examples/asciiMaze/dashboardManager.ts +968 -0
- package/test/examples/asciiMaze/evolutionEngine.ts +1248 -0
- package/test/examples/asciiMaze/fitness.ts +136 -0
- package/test/examples/asciiMaze/index.html +128 -0
- package/test/examples/asciiMaze/index.ts +26 -0
- package/test/examples/asciiMaze/interfaces.ts +235 -0
- package/test/examples/asciiMaze/mazeMovement.ts +996 -0
- package/test/examples/asciiMaze/mazeUtils.ts +278 -0
- package/test/examples/asciiMaze/mazeVision.ts +402 -0
- package/test/examples/asciiMaze/mazeVisualization.ts +585 -0
- package/test/examples/asciiMaze/mazes.ts +245 -0
- package/test/examples/asciiMaze/networkRefinement.ts +76 -0
- package/test/examples/asciiMaze/networkVisualization.ts +901 -0
- package/test/examples/asciiMaze/terminalUtility.ts +73 -0
- package/test/methods/activation.test.ts +1142 -0
- package/test/methods/connection.test.ts +146 -0
- package/test/methods/cost.test.ts +1123 -0
- package/test/methods/crossover.test.ts +202 -0
- package/test/methods/gating.test.ts +144 -0
- package/test/methods/mutation.test.ts +451 -0
- package/test/methods/optimizers.advanced.test.ts +80 -0
- package/test/methods/optimizers.behavior.test.ts +105 -0
- package/test/methods/optimizers.formula.test.ts +89 -0
- package/test/methods/rate.cosineWarmRestarts.test.ts +44 -0
- package/test/methods/rate.linearWarmupDecay.test.ts +41 -0
- package/test/methods/rate.reduceOnPlateau.test.ts +45 -0
- package/test/methods/rate.test.ts +684 -0
- package/test/methods/selection.test.ts +245 -0
- package/test/multithreading/activations.functions.test.ts +54 -0
- package/test/multithreading/multi.test.ts +290 -0
- package/test/multithreading/worker.node.process.test.ts +39 -0
- package/test/multithreading/workers.coverage.test.ts +36 -0
- package/test/multithreading/workers.dynamic.import.test.ts +8 -0
- package/test/neat/neat.adaptive.complexityBudget.test.ts +34 -0
- package/test/neat/neat.adaptive.criterion.complexity.test.ts +50 -0
- package/test/neat/neat.adaptive.mutation.strategy.test.ts +37 -0
- package/test/neat/neat.adaptive.operator.decay.test.ts +31 -0
- package/test/neat/neat.adaptive.phasedComplexity.test.ts +25 -0
- package/test/neat/neat.adaptive.pruning.test.ts +25 -0
- package/test/neat/neat.adaptive.targetSpecies.test.ts +43 -0
- package/test/neat/neat.additional.coverage.test.ts +126 -0
- package/test/neat/neat.advanced.enhancements.test.ts +85 -0
- package/test/neat/neat.advanced.test.ts +589 -0
- package/test/neat/neat.diversity.autocompat.test.ts +47 -0
- package/test/neat/neat.diversity.metrics.test.ts +21 -0
- package/test/neat/neat.diversity.stats.test.ts +44 -0
- package/test/neat/neat.enhancements.test.ts +79 -0
- package/test/neat/neat.entropy.ancestorAdaptive.test.ts +133 -0
- package/test/neat/neat.entropy.compat.csv.test.ts +108 -0
- package/test/neat/neat.evolution.pruning.test.ts +39 -0
- package/test/neat/neat.fastmode.autotune.test.ts +42 -0
- package/test/neat/neat.innovation.test.ts +134 -0
- package/test/neat/neat.lineage.antibreeding.test.ts +35 -0
- package/test/neat/neat.lineage.entropy.test.ts +56 -0
- package/test/neat/neat.lineage.inbreeding.test.ts +49 -0
- package/test/neat/neat.lineage.pressure.test.ts +29 -0
- package/test/neat/neat.multiobjective.adaptive.test.ts +57 -0
- package/test/neat/neat.multiobjective.dynamic.schedule.test.ts +46 -0
- package/test/neat/neat.multiobjective.dynamic.test.ts +31 -0
- package/test/neat/neat.multiobjective.fastsort.delegation.test.ts +51 -0
- package/test/neat/neat.multiobjective.prune.test.ts +39 -0
- package/test/neat/neat.multiobjective.test.ts +21 -0
- package/test/neat/neat.mutation.undefined.pool.test.ts +24 -0
- package/test/neat/neat.objective.events.test.ts +26 -0
- package/test/neat/neat.objective.importance.test.ts +21 -0
- package/test/neat/neat.objective.lifetimes.test.ts +33 -0
- package/test/neat/neat.offspring.allocation.test.ts +22 -0
- package/test/neat/neat.operator.bandit.test.ts +17 -0
- package/test/neat/neat.operator.phases.test.ts +38 -0
- package/test/neat/neat.pruneInactive.behavior.test.ts +54 -0
- package/test/neat/neat.reenable.adaptation.test.ts +18 -0
- package/test/neat/neat.rng.state.test.ts +22 -0
- package/test/neat/neat.spawn.add.test.ts +123 -0
- package/test/neat/neat.speciation.test.ts +96 -0
- package/test/neat/neat.species.allocation.telemetry.test.ts +26 -0
- package/test/neat/neat.species.history.csv.test.ts +24 -0
- package/test/neat/neat.telemetry.advanced.test.ts +226 -0
- package/test/neat/neat.telemetry.csv.lineage.test.ts +19 -0
- package/test/neat/neat.telemetry.parity.test.ts +42 -0
- package/test/neat/neat.telemetry.stream.test.ts +19 -0
- package/test/neat/neat.telemetry.test.ts +16 -0
- package/test/neat/neat.test.ts +422 -0
- package/test/neat/neat.utilities.test.ts +44 -0
- package/test/network/__suppress_console.ts +9 -0
- package/test/network/acyclic.topoorder.test.ts +17 -0
- package/test/network/checkpoint.metricshook.test.ts +36 -0
- package/test/network/error.handling.test.ts +581 -0
- package/test/network/evolution.test.ts +285 -0
- package/test/network/genetic.test.ts +208 -0
- package/test/network/learning.capability.test.ts +244 -0
- package/test/network/mutation.effects.test.ts +492 -0
- package/test/network/network.activate.test.ts +115 -0
- package/test/network/network.activateBatch.test.ts +30 -0
- package/test/network/network.deterministic.test.ts +64 -0
- package/test/network/network.evolve.branches.test.ts +75 -0
- package/test/network/network.evolve.multithread.branches.test.ts +83 -0
- package/test/network/network.evolve.test.ts +100 -0
- package/test/network/network.gating.removal.test.ts +93 -0
- package/test/network/network.mutate.additional.test.ts +145 -0
- package/test/network/network.mutate.edgecases.test.ts +101 -0
- package/test/network/network.mutate.test.ts +101 -0
- package/test/network/network.prune.earlyexit.test.ts +38 -0
- package/test/network/network.remove.errors.test.ts +45 -0
- package/test/network/network.slab.fallbacks.test.ts +22 -0
- package/test/network/network.stats.test.ts +45 -0
- package/test/network/network.training.advanced.test.ts +149 -0
- package/test/network/network.training.basic.test.ts +228 -0
- package/test/network/network.training.helpers.test.ts +183 -0
- package/test/network/onnx.export.test.ts +310 -0
- package/test/network/onnx.import.test.ts +129 -0
- package/test/network/pruning.topology.test.ts +282 -0
- package/test/network/regularization.determinism.test.ts +83 -0
- package/test/network/regularization.dropconnect.test.ts +17 -0
- package/test/network/regularization.dropconnect.validation.test.ts +18 -0
- package/test/network/regularization.stochasticdepth.test.ts +27 -0
- package/test/network/regularization.test.ts +843 -0
- package/test/network/regularization.weightnoise.test.ts +30 -0
- package/test/network/setupTests.ts +2 -0
- package/test/network/standalone.test.ts +332 -0
- package/test/network/structure.serialization.test.ts +660 -0
- package/test/training/training.determinism.mixed-precision.test.ts +134 -0
- package/test/training/training.earlystopping.test.ts +91 -0
- package/test/training/training.edge-cases.test.ts +91 -0
- package/test/training/training.extensions.test.ts +47 -0
- package/test/training/training.gradient.features.test.ts +110 -0
- package/test/training/training.gradient.refinements.test.ts +170 -0
- package/test/training/training.gradient.separate-bias.test.ts +41 -0
- package/test/training/training.optimizer.test.ts +48 -0
- package/test/training/training.plateau.smoothing.test.ts +58 -0
- package/test/training/training.smoothing.types.test.ts +174 -0
- package/test/training/training.train.options.coverage.test.ts +52 -0
- package/test/utils/console-helper.ts +76 -0
- package/test/utils/jest-setup.ts +60 -0
- package/test/utils/test-helpers.ts +175 -0
- package/tsconfig.docs.json +12 -0
- package/tsconfig.json +21 -0
- package/webpack.config.js +49 -0
package/RELEASE.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Releasing NeatapticTS
|
|
2
|
+
|
|
3
|
+
This repository provides a small release flow using a dedicated manual pipeline and release-triggered publishers.
|
|
4
|
+
|
|
5
|
+
Primary workflow used for releases
|
|
6
|
+
|
|
7
|
+
- Manual release pipeline (Actions → "Manual release pipeline") — preferred manual entrypoint.
|
|
8
|
+
- Inputs:
|
|
9
|
+
- `level`: `patch` | `minor` | `major` (default: `patch`)
|
|
10
|
+
- `branch`: branch to release from (default: `release`)
|
|
11
|
+
- What it does:
|
|
12
|
+
1. Checks out the specified branch.
|
|
13
|
+
2. Runs `npm version <level>` which updates `package.json`, creates a commit and a tag.
|
|
14
|
+
3. Pushes the commit and tag to the remote.
|
|
15
|
+
4. Exits; the repository `release` event (tag/release published) will trigger the publishing workflows.
|
|
16
|
+
|
|
17
|
+
Release-triggered workflows
|
|
18
|
+
|
|
19
|
+
- `publish.yml` (trigger: `release: published`) — builds and publishes packages to:
|
|
20
|
+
- npmjs.org (uses `NPM_TOKEN` secret)
|
|
21
|
+
- GitHub Packages (scoped package: `@reicek/neataptic-ts`)
|
|
22
|
+
|
|
23
|
+
- `deploy-pages.yml` (trigger: `release: published`) — runs `npm run docs` and publishes `docs/` to the `gh-pages` branch.
|
|
24
|
+
|
|
25
|
+
Required repository secrets
|
|
26
|
+
|
|
27
|
+
- `NPM_TOKEN` — npm auth token with publish rights (add at Settings → Secrets → Actions).
|
|
28
|
+
- `GITHUB_TOKEN` — automatically provided to Actions (no manual setup required) and used for GitHub Packages and Pages deploy.
|
|
29
|
+
|
|
30
|
+
How to publish a new release (recommended)
|
|
31
|
+
|
|
32
|
+
1. Ensure your release branch (default `release`) contains the changes you want to publish.
|
|
33
|
+
2. Go to the repository Actions tab, choose "Manual release pipeline" and click "Run workflow".
|
|
34
|
+
3. Select `level` (patch/minor/major) and `branch` (e.g., `release`), then run.
|
|
35
|
+
4. The workflow will create a tag and push it. After the tag is pushed, GitHub will fire the `release` event and the `publish` and `deploy-pages` workflows will run automatically.
|
|
36
|
+
|
|
37
|
+
Verification after release
|
|
38
|
+
|
|
39
|
+
- npm: check https://www.npmjs.com/package/@reicek/neataptic-ts for the published version.
|
|
40
|
+
- GitHub Packages: check the Packages tab on the repository.
|
|
41
|
+
- Docs: check https://reicek.github.io/NeatapticTS/ after the `gh-pages` deploy completes.
|
|
42
|
+
|
|
43
|
+
Troubleshooting & notes
|
|
44
|
+
|
|
45
|
+
- Branch protection: if the chosen branch has protection rules that prevent the Actions bot from pushing commits/tags, the manual pipeline may fail to push. In that case you can:
|
|
46
|
+
- Temporarily allow Actions to push, or
|
|
47
|
+
- Use a PAT (personal access token) stored as a secret and update the workflow to use it for pushing, or
|
|
48
|
+
- Create the tag locally and push it from your machine.
|
|
49
|
+
|
|
50
|
+
- Avoid duplicate publishers: the manual pipeline intentionally only bumps/tags/pushes and does not publish directly — the `publish` and `deploy-pages` workflows run on the `release` event and perform the actual publishing steps once.
|
|
51
|
+
|
|
52
|
+
- If you'd like a single workflow to perform bump+publish+deploy in one run (instead of splitting by event), tell me and I can convert the manual pipeline to do everything and remove the release-triggered workflows.
|
|
53
|
+
|
|
54
|
+
If you want I can also add automatic changelog generation (from commits) and include the generated release notes in the GitHub Release body.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-docs.d.ts","sourceRoot":"","sources":["../../scripts/generate-docs.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
45
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
/*
|
|
49
|
+
* Generates per-folder README.md aggregating exported symbols' JSDoc.
|
|
50
|
+
* - Copies root README.md into docs/ (manual content retained)
|
|
51
|
+
* - Skips generating README for src root (leave top-level README manual)
|
|
52
|
+
* Usage: npm run docs:folders
|
|
53
|
+
*/
|
|
54
|
+
const ts_morph_1 = require("ts-morph");
|
|
55
|
+
const fast_glob_1 = __importDefault(require("fast-glob"));
|
|
56
|
+
const path = __importStar(require("path"));
|
|
57
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
58
|
+
const SRC_DIR = path.resolve('src');
|
|
59
|
+
const DOCS_DIR = path.resolve('docs');
|
|
60
|
+
const ROOT_README_SRC = path.resolve('README.md');
|
|
61
|
+
const ROOT_README_DEST = path.join(DOCS_DIR, 'README.md');
|
|
62
|
+
const project = new ts_morph_1.Project({
|
|
63
|
+
tsConfigFilePath: path.resolve('tsconfig.json'),
|
|
64
|
+
skipAddingFilesFromTsConfig: true
|
|
65
|
+
});
|
|
66
|
+
function main() {
|
|
67
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
68
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1;
|
|
69
|
+
yield fs_extra_1.default.ensureDir(DOCS_DIR);
|
|
70
|
+
// Copy root README (manual) into docs
|
|
71
|
+
if (yield fs_extra_1.default.pathExists(ROOT_README_SRC)) {
|
|
72
|
+
yield fs_extra_1.default.copyFile(ROOT_README_SRC, ROOT_README_DEST);
|
|
73
|
+
}
|
|
74
|
+
const filePaths = yield (0, fast_glob_1.default)(['**/*.ts'], { cwd: SRC_DIR, absolute: true, ignore: ['**/*.d.ts'] });
|
|
75
|
+
for (const p of filePaths) {
|
|
76
|
+
if (/\.test\.ts$/i.test(p))
|
|
77
|
+
continue; // skip test specification files
|
|
78
|
+
project.addSourceFileAtPath(p);
|
|
79
|
+
}
|
|
80
|
+
const all = project.getSourceFiles();
|
|
81
|
+
const sourceFiles = all.filter((sf) => {
|
|
82
|
+
const fp = sf.getFilePath();
|
|
83
|
+
return !fp.endsWith('.d.ts') && !/node_modules/.test(fp);
|
|
84
|
+
});
|
|
85
|
+
console.log(`[docs] Loaded ${sourceFiles.length} source files (raw: ${all.length})`);
|
|
86
|
+
const dirMap = new Map();
|
|
87
|
+
for (const sf of sourceFiles) {
|
|
88
|
+
const exported = sf.getExportedDeclarations();
|
|
89
|
+
// capture file-level/module JSDoc if present
|
|
90
|
+
const fileJsDocs = ((_b = (_a = sf).getJsDocs) === null || _b === void 0 ? void 0 : _b.call(_a)) || [];
|
|
91
|
+
const fileDocPrimary = fileJsDocs[0];
|
|
92
|
+
const fileDocDesc = (_d = (_c = fileDocPrimary === null || fileDocPrimary === void 0 ? void 0 : fileDocPrimary.getDescription) === null || _c === void 0 ? void 0 : _c.call(fileDocPrimary)) === null || _d === void 0 ? void 0 : _d.trim();
|
|
93
|
+
// ensure fileMap exists early so we can add file-level doc
|
|
94
|
+
const dir = path.dirname(sf.getFilePath());
|
|
95
|
+
let fileMap = dirMap.get(dir);
|
|
96
|
+
if (!fileMap) {
|
|
97
|
+
fileMap = new Map();
|
|
98
|
+
dirMap.set(dir, fileMap);
|
|
99
|
+
}
|
|
100
|
+
if (fileDocDesc) {
|
|
101
|
+
const fileSummarySymbol = {
|
|
102
|
+
kind: 'File',
|
|
103
|
+
name: '__file_summary__',
|
|
104
|
+
filePath: sf.getFilePath(),
|
|
105
|
+
jsdoc: { description: fileDocDesc }
|
|
106
|
+
};
|
|
107
|
+
const arr0 = fileMap.get(sf.getFilePath()) || [];
|
|
108
|
+
arr0.push(fileSummarySymbol);
|
|
109
|
+
fileMap.set(sf.getFilePath(), arr0);
|
|
110
|
+
console.log(`[docs] Added file summary for ${sf.getBaseName()}`);
|
|
111
|
+
}
|
|
112
|
+
if (exported.size) {
|
|
113
|
+
console.log(`[docs] ${sf.getBaseName()} exports: ${exported.size}`);
|
|
114
|
+
for (const [, decls] of exported) {
|
|
115
|
+
for (const decl of decls) {
|
|
116
|
+
const sym = decl.getSymbol();
|
|
117
|
+
if (!sym)
|
|
118
|
+
continue;
|
|
119
|
+
const rendered = renderSymbol(sym, decl.getKindName(), sf.getFilePath());
|
|
120
|
+
if (rendered) {
|
|
121
|
+
const arr = fileMap.get(sf.getFilePath()) || [];
|
|
122
|
+
arr.push(rendered);
|
|
123
|
+
fileMap.set(sf.getFilePath(), arr);
|
|
124
|
+
}
|
|
125
|
+
// special-case: exported variable with object literal initializer (e.g. Activation = { ... })
|
|
126
|
+
try {
|
|
127
|
+
if (decl.getKindName && decl.getKindName() === 'VariableDeclaration') {
|
|
128
|
+
const init = (_f = (_e = decl).getInitializer) === null || _f === void 0 ? void 0 : _f.call(_e);
|
|
129
|
+
if (init && init.getKindName && init.getKindName() === 'ObjectLiteralExpression') {
|
|
130
|
+
const props = ((_g = init.getProperties) === null || _g === void 0 ? void 0 : _g.call(init)) || [];
|
|
131
|
+
for (const p of props) {
|
|
132
|
+
const propName = ((_h = p.getName) === null || _h === void 0 ? void 0 : _h.call(p)) || (p.getSymbol && ((_k = (_j = p.getSymbol()) === null || _j === void 0 ? void 0 : _j.getName) === null || _k === void 0 ? void 0 : _k.call(_j)));
|
|
133
|
+
const renderedProp = renderDeclaration(p, String(propName), ((_l = p.getKindName) === null || _l === void 0 ? void 0 : _l.call(p)) || 'Property', sf.getFilePath(), sym.getName());
|
|
134
|
+
if (renderedProp) {
|
|
135
|
+
const arr2 = fileMap.get(sf.getFilePath()) || [];
|
|
136
|
+
arr2.push(renderedProp);
|
|
137
|
+
fileMap.set(sf.getFilePath(), arr2);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch (e) { /* ignore introspection errors */ }
|
|
144
|
+
// special-case: exported class -> include members
|
|
145
|
+
try {
|
|
146
|
+
if (decl.getKindName && decl.getKindName() === 'ClassDeclaration') {
|
|
147
|
+
const members = ((_o = (_m = decl).getMembers) === null || _o === void 0 ? void 0 : _o.call(_m)) || [];
|
|
148
|
+
for (const m of members) {
|
|
149
|
+
const memberName = (_p = m.getName) === null || _p === void 0 ? void 0 : _p.call(m);
|
|
150
|
+
if (!memberName)
|
|
151
|
+
continue;
|
|
152
|
+
const renderedMember = renderDeclaration(m, String(memberName), ((_q = m.getKindName) === null || _q === void 0 ? void 0 : _q.call(m)) || 'ClassMember', sf.getFilePath(), sym.getName());
|
|
153
|
+
if (renderedMember) {
|
|
154
|
+
const arr3 = fileMap.get(sf.getFilePath()) || [];
|
|
155
|
+
arr3.push(renderedMember);
|
|
156
|
+
fileMap.set(sf.getFilePath(), arr3);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch (e) { /* ignore */ }
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// Additionally capture top-level, non-exported declarations if they have JSDoc
|
|
166
|
+
try {
|
|
167
|
+
const stmts = ((_s = (_r = sf).getStatements) === null || _s === void 0 ? void 0 : _s.call(_r)) || [];
|
|
168
|
+
for (const st of stmts) {
|
|
169
|
+
const decls = (st.getDeclarations && st.getDeclarations()) || [st];
|
|
170
|
+
for (const d of decls) {
|
|
171
|
+
const jsdocs = ((_u = (_t = d).getJsDocs) === null || _u === void 0 ? void 0 : _u.call(_t)) || [];
|
|
172
|
+
const hasExport = (d.getSymbol && ((_x = (_w = (_v = d.getSymbol()) === null || _v === void 0 ? void 0 : _v.getDeclarations) === null || _w === void 0 ? void 0 : _w.call(_v)) === null || _x === void 0 ? void 0 : _x.some((x) => x.isExported && x.isExported()))) || false;
|
|
173
|
+
if (!jsdocs.length)
|
|
174
|
+
continue; // only include documented non-exported declarations
|
|
175
|
+
// skip if already added via exported processing
|
|
176
|
+
const name = ((_y = d.getName) === null || _y === void 0 ? void 0 : _y.call(d)) || (d.getSymbol && ((_0 = (_z = d.getSymbol()) === null || _z === void 0 ? void 0 : _z.getName) === null || _0 === void 0 ? void 0 : _0.call(_z)));
|
|
177
|
+
if (!name)
|
|
178
|
+
continue;
|
|
179
|
+
const already = (fileMap.get(sf.getFilePath()) || []).some(s => s.name === name || s.name === `${name}` || s.name === `${name}`);
|
|
180
|
+
if (already)
|
|
181
|
+
continue;
|
|
182
|
+
const rendered = renderDeclaration(d, String(name), ((_1 = d.getKindName) === null || _1 === void 0 ? void 0 : _1.call(d)) || 'Declaration', sf.getFilePath());
|
|
183
|
+
if (rendered) {
|
|
184
|
+
const arr4 = fileMap.get(sf.getFilePath()) || [];
|
|
185
|
+
arr4.push(rendered);
|
|
186
|
+
fileMap.set(sf.getFilePath(), arr4);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
catch (e) { /* ignore */ }
|
|
192
|
+
}
|
|
193
|
+
for (const [dir, fileMap] of dirMap) {
|
|
194
|
+
// Tidy & deduplicate symbols per file before rendering
|
|
195
|
+
for (const [filePath, symbols] of fileMap) {
|
|
196
|
+
const seen = new Map();
|
|
197
|
+
const deduped = [];
|
|
198
|
+
for (const s of symbols) {
|
|
199
|
+
// normalize name
|
|
200
|
+
const normName = normalizeName(s, filePath);
|
|
201
|
+
const key = `${s.parent || ''}::${normName}::${s.signature || ''}`;
|
|
202
|
+
const existing = seen.get(key);
|
|
203
|
+
if (existing) {
|
|
204
|
+
// merge jsdoc fields conservatively
|
|
205
|
+
existing.jsdoc.description = existing.jsdoc.description || s.jsdoc.description;
|
|
206
|
+
existing.jsdoc.summary = existing.jsdoc.summary || s.jsdoc.summary;
|
|
207
|
+
existing.jsdoc.deprecated = existing.jsdoc.deprecated || s.jsdoc.deprecated;
|
|
208
|
+
if (s.jsdoc.params) {
|
|
209
|
+
existing.jsdoc.params = (existing.jsdoc.params || []).slice();
|
|
210
|
+
for (const p of s.jsdoc.params) {
|
|
211
|
+
if (!existing.jsdoc.params.some(ep => ep.name === p.name))
|
|
212
|
+
existing.jsdoc.params.push(p);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (!existing.signature && s.signature)
|
|
216
|
+
existing.signature = s.signature;
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
const clone = Object.assign(Object.assign({}, s), { name: normName, jsdoc: Object.assign(Object.assign({}, s.jsdoc), { params: s.jsdoc.params ? s.jsdoc.params.slice() : undefined }) });
|
|
220
|
+
seen.set(key, clone);
|
|
221
|
+
deduped.push(clone);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
fileMap.set(filePath, deduped);
|
|
225
|
+
}
|
|
226
|
+
const relDir = path.relative(SRC_DIR, dir); // '' means src root
|
|
227
|
+
if (relDir.startsWith('..'))
|
|
228
|
+
continue; // outside src
|
|
229
|
+
const outDir = relDir === '' ? path.join(DOCS_DIR, 'src') : path.join(DOCS_DIR, relDir);
|
|
230
|
+
yield fs_extra_1.default.ensureDir(outDir);
|
|
231
|
+
const outFile = path.join(outDir, 'README.md');
|
|
232
|
+
const md = buildDirectoryReadme(relDir, fileMap);
|
|
233
|
+
yield writeIfChanged(outFile, md);
|
|
234
|
+
// Also emit directly into the src folder tree so GitHub shows it inline when browsing code.
|
|
235
|
+
const srcTargetDir = path.join(SRC_DIR, relDir);
|
|
236
|
+
const srcReadme = path.join(srcTargetDir, 'README.md');
|
|
237
|
+
yield emitSourceReadme(srcReadme, md);
|
|
238
|
+
}
|
|
239
|
+
const rootNode = { name: 'src', path: 'src', children: new Map(), fileCount: 0 };
|
|
240
|
+
const relDirs = [...dirMap.keys()].map(d => path.relative(SRC_DIR, d)).filter(d => !d.startsWith('..'));
|
|
241
|
+
for (const rel of relDirs) {
|
|
242
|
+
const clean = rel === '' ? 'src' : rel.replace(/\\/g, '/');
|
|
243
|
+
const parts = clean.split('/');
|
|
244
|
+
let node = rootNode;
|
|
245
|
+
let acc = '';
|
|
246
|
+
for (const part of parts) {
|
|
247
|
+
acc = acc ? `${acc}/${part}` : part;
|
|
248
|
+
if (!node.children.has(part)) {
|
|
249
|
+
node.children.set(part, { name: part, path: acc, children: new Map() });
|
|
250
|
+
}
|
|
251
|
+
node = node.children.get(part);
|
|
252
|
+
}
|
|
253
|
+
// attach file count if available
|
|
254
|
+
const abs = path.join(SRC_DIR, rel === '' ? '' : rel);
|
|
255
|
+
const fm = dirMap.get(abs);
|
|
256
|
+
if (fm)
|
|
257
|
+
node.fileCount = fm.size;
|
|
258
|
+
}
|
|
259
|
+
const lines = ['# Docs Index', '', 'Auto-generated index of source folders (click to open folder README).', ''];
|
|
260
|
+
function renderNode(n, level) {
|
|
261
|
+
const indent = ' '.repeat(Math.max(0, level));
|
|
262
|
+
const label = (n.path === 'src' && level === 0) ? 'src (root)' : n.name;
|
|
263
|
+
const link = `${n.path}/README.md`;
|
|
264
|
+
const count = n.fileCount ? ` — ${n.fileCount} file${n.fileCount > 1 ? 's' : ''}` : '';
|
|
265
|
+
lines.push(`${indent}- [${label}](${link})${count}`);
|
|
266
|
+
const childNames = [...n.children.keys()].sort();
|
|
267
|
+
for (const k of childNames)
|
|
268
|
+
renderNode(n.children.get(k), level + 1);
|
|
269
|
+
}
|
|
270
|
+
// Render top-level root and its children (skip a duplicate 'src' nesting)
|
|
271
|
+
renderNode(rootNode, 0);
|
|
272
|
+
yield fs_extra_1.default.writeFile(path.join(DOCS_DIR, 'FOLDERS.md'), lines.join('\n') + '\n', 'utf8');
|
|
273
|
+
console.log('Per-folder README generation complete.');
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
function renderSymbol(sym, fallbackKind, filePath) {
|
|
277
|
+
var _a, _b, _c;
|
|
278
|
+
const decl = sym.getDeclarations()[0];
|
|
279
|
+
if (!decl)
|
|
280
|
+
return null;
|
|
281
|
+
const kind = decl.getKindName();
|
|
282
|
+
const allow = /ClassDeclaration|FunctionDeclaration|InterfaceDeclaration|EnumDeclaration|TypeAliasDeclaration|VariableDeclaration/;
|
|
283
|
+
if (!allow.test(kind))
|
|
284
|
+
return null;
|
|
285
|
+
// ts-morph Declaration with JSDoc support; cast to any to access getJsDocs generically
|
|
286
|
+
const jsDocs = ((_b = (_a = decl).getJsDocs) === null || _b === void 0 ? void 0 : _b.call(_a)) || [];
|
|
287
|
+
if (jsDocs.some((j) => j.getTags().some((t) => t.getTagName() === 'internal')))
|
|
288
|
+
return null;
|
|
289
|
+
const primary = jsDocs[0];
|
|
290
|
+
const fullDesc = primary === null || primary === void 0 ? void 0 : primary.getDescription().trim();
|
|
291
|
+
const summary = (_c = fullDesc === null || fullDesc === void 0 ? void 0 : fullDesc.split(/\r?\n\r?\n/)[0]) === null || _c === void 0 ? void 0 : _c.trim();
|
|
292
|
+
const tags = (primary === null || primary === void 0 ? void 0 : primary.getTags()) || [];
|
|
293
|
+
const paramsTags = tags.filter(t => t.getTagName() === 'param');
|
|
294
|
+
const returnsTag = tags.find(t => t.getTagName() === 'returns' || t.getTagName() === 'return');
|
|
295
|
+
const deprecatedTag = tags.find(t => t.getTagName() === 'deprecated');
|
|
296
|
+
let signature;
|
|
297
|
+
try {
|
|
298
|
+
const sig = decl.getType().getCallSignatures()[0];
|
|
299
|
+
if (sig) {
|
|
300
|
+
const params = sig.getParameters().map((p) => {
|
|
301
|
+
const decls = p.getDeclarations();
|
|
302
|
+
const t = p.getTypeAtLocation(decls[0] || decl).getText();
|
|
303
|
+
return `${p.getName()}: ${t}`;
|
|
304
|
+
}).join(', ');
|
|
305
|
+
const ret = sig.getReturnType().getText();
|
|
306
|
+
signature = `(${params}) => ${ret}`;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
catch ( /* ignore */_d) { /* ignore */ }
|
|
310
|
+
const params = paramsTags.map(t => {
|
|
311
|
+
const text = t.getText();
|
|
312
|
+
const match = text.match(/@param\s+(\w+)/);
|
|
313
|
+
const name = (match === null || match === void 0 ? void 0 : match[1]) || '';
|
|
314
|
+
const raw = t.getComment();
|
|
315
|
+
const doc = Array.isArray(raw) ? raw.map(r => r.getText ? r.getText() : String(r)).join(' ').trim() : (raw || undefined);
|
|
316
|
+
return { name, doc };
|
|
317
|
+
});
|
|
318
|
+
return {
|
|
319
|
+
kind: fallbackKind || kind,
|
|
320
|
+
name: sym.getName(),
|
|
321
|
+
parent: undefined,
|
|
322
|
+
filePath,
|
|
323
|
+
signature,
|
|
324
|
+
jsdoc: {
|
|
325
|
+
summary,
|
|
326
|
+
description: fullDesc,
|
|
327
|
+
params: params.length ? params : undefined,
|
|
328
|
+
returns: (() => { const r = returnsTag === null || returnsTag === void 0 ? void 0 : returnsTag.getComment(); return typeof r === 'string' ? r.trim() : undefined; })(),
|
|
329
|
+
deprecated: (() => { const r = deprecatedTag === null || deprecatedTag === void 0 ? void 0 : deprecatedTag.getComment(); return typeof r === 'string' ? r.trim() : undefined; })()
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
// Render a declaration-like object (node) which may not have a symbol
|
|
334
|
+
function renderDeclaration(decl, forcedName, forcedKind, filePath, parentName) {
|
|
335
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
336
|
+
if (!decl)
|
|
337
|
+
return null;
|
|
338
|
+
try {
|
|
339
|
+
const kind = forcedKind || ((_a = decl.getKindName) === null || _a === void 0 ? void 0 : _a.call(decl)) || ((_b = decl.getKind) === null || _b === void 0 ? void 0 : _b.call(decl)) || 'Declaration';
|
|
340
|
+
const name = forcedName || ((_c = decl.getName) === null || _c === void 0 ? void 0 : _c.call(decl)) || (decl.getSymbol && ((_e = (_d = decl.getSymbol()) === null || _d === void 0 ? void 0 : _d.getName) === null || _e === void 0 ? void 0 : _e.call(_d))) || (parentName ? `${parentName}.${forcedName}` : '');
|
|
341
|
+
const jsDocs = ((_f = decl.getJsDocs) === null || _f === void 0 ? void 0 : _f.call(decl)) || [];
|
|
342
|
+
if (!jsDocs.length)
|
|
343
|
+
return null;
|
|
344
|
+
if (jsDocs.some((j) => j.getTags().some((t) => t.getTagName() === 'internal')))
|
|
345
|
+
return null;
|
|
346
|
+
const primary = jsDocs[0];
|
|
347
|
+
const fullDesc = (_h = (_g = primary === null || primary === void 0 ? void 0 : primary.getDescription) === null || _g === void 0 ? void 0 : _g.call(primary)) === null || _h === void 0 ? void 0 : _h.trim();
|
|
348
|
+
const summary = (_j = fullDesc === null || fullDesc === void 0 ? void 0 : fullDesc.split(/\r?\n\r?\n/)[0]) === null || _j === void 0 ? void 0 : _j.trim();
|
|
349
|
+
const tags = (primary === null || primary === void 0 ? void 0 : primary.getTags()) || [];
|
|
350
|
+
const paramsTags = tags.filter(t => t.getTagName() === 'param');
|
|
351
|
+
const returnsTag = tags.find(t => t.getTagName() === 'returns' || t.getTagName() === 'return');
|
|
352
|
+
const deprecatedTag = tags.find(t => t.getTagName() === 'deprecated');
|
|
353
|
+
let signature;
|
|
354
|
+
try {
|
|
355
|
+
const type = ((_k = decl.getType) === null || _k === void 0 ? void 0 : _k.call(decl)) || (decl.getSymbol && ((_m = (_l = decl.getSymbol()) === null || _l === void 0 ? void 0 : _l.getType) === null || _m === void 0 ? void 0 : _m.call(_l)));
|
|
356
|
+
const sig = (_o = type === null || type === void 0 ? void 0 : type.getCallSignatures) === null || _o === void 0 ? void 0 : _o.call(type)[0];
|
|
357
|
+
if (sig) {
|
|
358
|
+
const params = sig.getParameters().map((p) => {
|
|
359
|
+
const decls = p.getDeclarations();
|
|
360
|
+
const t = p.getTypeAtLocation(decls[0] || decl).getText();
|
|
361
|
+
return `${p.getName()}: ${t}`;
|
|
362
|
+
}).join(', ');
|
|
363
|
+
const ret = sig.getReturnType().getText();
|
|
364
|
+
signature = `(${params}) => ${ret}`;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
catch ( /* ignore */_p) { /* ignore */ }
|
|
368
|
+
const params = paramsTags.map(t => {
|
|
369
|
+
var _a, _b;
|
|
370
|
+
const text = ((_a = t.getText) === null || _a === void 0 ? void 0 : _a.call(t)) || '';
|
|
371
|
+
const match = text.match(/@param\s+(\w+)/);
|
|
372
|
+
const name = (match === null || match === void 0 ? void 0 : match[1]) || '';
|
|
373
|
+
const raw = (_b = t.getComment) === null || _b === void 0 ? void 0 : _b.call(t);
|
|
374
|
+
const doc = Array.isArray(raw) ? raw.map(r => r.getText ? r.getText() : String(r)).join(' ').trim() : (raw || undefined);
|
|
375
|
+
return { name, doc };
|
|
376
|
+
});
|
|
377
|
+
return {
|
|
378
|
+
kind,
|
|
379
|
+
name,
|
|
380
|
+
parent: parentName || undefined,
|
|
381
|
+
filePath: filePath || '',
|
|
382
|
+
signature,
|
|
383
|
+
jsdoc: {
|
|
384
|
+
summary,
|
|
385
|
+
description: fullDesc,
|
|
386
|
+
params: params.length ? params : undefined,
|
|
387
|
+
returns: (() => { var _a; const r = (_a = returnsTag === null || returnsTag === void 0 ? void 0 : returnsTag.getComment) === null || _a === void 0 ? void 0 : _a.call(returnsTag); return typeof r === 'string' ? r.trim() : undefined; })(),
|
|
388
|
+
deprecated: (() => { var _a; const r = (_a = deprecatedTag === null || deprecatedTag === void 0 ? void 0 : deprecatedTag.getComment) === null || _a === void 0 ? void 0 : _a.call(deprecatedTag); return typeof r === 'string' ? r.trim() : undefined; })()
|
|
389
|
+
}
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
catch (e) {
|
|
393
|
+
return null;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
// Normalize a symbol name: prefer meaningful names over 'default', fallback to file basename
|
|
397
|
+
function normalizeName(s, filePath) {
|
|
398
|
+
let name = (s.name || '').toString();
|
|
399
|
+
if (!name || name === 'default' || name === '__file_summary__') {
|
|
400
|
+
// try to derive from file path or signature
|
|
401
|
+
const base = path.basename(filePath || '', '.ts');
|
|
402
|
+
if (s.kind === 'File' || name === '__file_summary__')
|
|
403
|
+
return base;
|
|
404
|
+
// if parent exists, qualify with parent
|
|
405
|
+
if (s.parent)
|
|
406
|
+
return `${s.parent}.${base}`;
|
|
407
|
+
// try to extract from signature
|
|
408
|
+
if (s.signature)
|
|
409
|
+
return `${base}${s.signature.split(')')[0]})`;
|
|
410
|
+
return base;
|
|
411
|
+
}
|
|
412
|
+
// strip trailing redundant '()' or 'function ' prefixes
|
|
413
|
+
name = name.replace(/^function\s+/, '').replace(/\(\)$/, '');
|
|
414
|
+
return name;
|
|
415
|
+
}
|
|
416
|
+
function buildDirectoryReadme(relDir, fileMap) {
|
|
417
|
+
var _a, _b, _c;
|
|
418
|
+
const title = relDir.replace(/\\/g, '/');
|
|
419
|
+
const lines = [
|
|
420
|
+
`# ${title}`,
|
|
421
|
+
''
|
|
422
|
+
];
|
|
423
|
+
const filesSorted = [...fileMap.keys()].sort();
|
|
424
|
+
for (const file of filesSorted) {
|
|
425
|
+
const relFile = path.relative(SRC_DIR, file).replace(/\\/g, '/');
|
|
426
|
+
lines.push(`## ${relFile}`, '');
|
|
427
|
+
const symbols = fileMap.get(file).slice().sort((a, b) => (a.parent || a.name).localeCompare(b.parent || b.name) || a.name.localeCompare(b.name));
|
|
428
|
+
// extract file summary if present
|
|
429
|
+
const fileSummaryIdx = symbols.findIndex(s => s.name === '__file_summary__' && s.kind === 'File');
|
|
430
|
+
if (fileSummaryIdx >= 0) {
|
|
431
|
+
const fsym = symbols.splice(fileSummaryIdx, 1)[0];
|
|
432
|
+
if (fsym.jsdoc.description)
|
|
433
|
+
lines.push(fsym.jsdoc.description, '');
|
|
434
|
+
}
|
|
435
|
+
// Group by parent: top-level (no parent) and parent groups
|
|
436
|
+
const topLevel = symbols.filter(s => !s.parent);
|
|
437
|
+
const byParent = new Map();
|
|
438
|
+
for (const s of symbols.filter(s => s.parent)) {
|
|
439
|
+
const arr = byParent.get(s.parent) || [];
|
|
440
|
+
arr.push(s);
|
|
441
|
+
byParent.set(s.parent, arr);
|
|
442
|
+
}
|
|
443
|
+
// render top-level symbols
|
|
444
|
+
for (const s of topLevel) {
|
|
445
|
+
lines.push(`### ${s.name}`);
|
|
446
|
+
if (s.signature)
|
|
447
|
+
lines.push('', '`' + s.signature + '`');
|
|
448
|
+
if (s.jsdoc.description)
|
|
449
|
+
lines.push('', s.jsdoc.description);
|
|
450
|
+
if (s.jsdoc.deprecated)
|
|
451
|
+
lines.push('', `**Deprecated:** ${s.jsdoc.deprecated}`);
|
|
452
|
+
if ((_a = s.jsdoc.params) === null || _a === void 0 ? void 0 : _a.length) {
|
|
453
|
+
lines.push('', 'Parameters:');
|
|
454
|
+
for (const p of s.jsdoc.params)
|
|
455
|
+
lines.push(`- \`${p.name}\`${p.doc ? ' - ' + p.doc : ''}`);
|
|
456
|
+
}
|
|
457
|
+
if (s.jsdoc.returns)
|
|
458
|
+
lines.push('', `Returns: ${s.jsdoc.returns}`);
|
|
459
|
+
lines.push('');
|
|
460
|
+
// if this top-level has grouped children (byParent keyed by this name), render them nested
|
|
461
|
+
const children = byParent.get(s.name);
|
|
462
|
+
if (children) {
|
|
463
|
+
children.sort((a, b) => a.name.localeCompare(b.name));
|
|
464
|
+
for (const c of children) {
|
|
465
|
+
lines.push(`#### ${c.name}`);
|
|
466
|
+
if (c.signature)
|
|
467
|
+
lines.push('', '`' + c.signature + '`');
|
|
468
|
+
if (c.jsdoc.description)
|
|
469
|
+
lines.push('', c.jsdoc.description);
|
|
470
|
+
if (c.jsdoc.deprecated)
|
|
471
|
+
lines.push('', `**Deprecated:** ${c.jsdoc.deprecated}`);
|
|
472
|
+
if ((_b = c.jsdoc.params) === null || _b === void 0 ? void 0 : _b.length) {
|
|
473
|
+
lines.push('', 'Parameters:');
|
|
474
|
+
for (const p of c.jsdoc.params)
|
|
475
|
+
lines.push(`- \`${p.name}\`${p.doc ? ' - ' + p.doc : ''}`);
|
|
476
|
+
}
|
|
477
|
+
if (c.jsdoc.returns)
|
|
478
|
+
lines.push('', `Returns: ${c.jsdoc.returns}`);
|
|
479
|
+
lines.push('');
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
// Render any parent groups that didn't have a top-level parent symbol (e.g., object literal properties grouped under exported var)
|
|
484
|
+
for (const [parentName, group] of byParent) {
|
|
485
|
+
if (topLevel.some(t => t.name === parentName))
|
|
486
|
+
continue; // already rendered under its parent item
|
|
487
|
+
lines.push(`### ${parentName}`, '');
|
|
488
|
+
group.sort((a, b) => a.name.localeCompare(b.name));
|
|
489
|
+
for (const c of group) {
|
|
490
|
+
lines.push(`#### ${c.name}`);
|
|
491
|
+
if (c.signature)
|
|
492
|
+
lines.push('', '`' + c.signature + '`');
|
|
493
|
+
if (c.jsdoc.description)
|
|
494
|
+
lines.push('', c.jsdoc.description);
|
|
495
|
+
if (c.jsdoc.deprecated)
|
|
496
|
+
lines.push('', `**Deprecated:** ${c.jsdoc.deprecated}`);
|
|
497
|
+
if ((_c = c.jsdoc.params) === null || _c === void 0 ? void 0 : _c.length) {
|
|
498
|
+
lines.push('', 'Parameters:');
|
|
499
|
+
for (const p of c.jsdoc.params)
|
|
500
|
+
lines.push(`- \`${p.name}\`${p.doc ? ' - ' + p.doc : ''}`);
|
|
501
|
+
}
|
|
502
|
+
if (c.jsdoc.returns)
|
|
503
|
+
lines.push('', `Returns: ${c.jsdoc.returns}`);
|
|
504
|
+
lines.push('');
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
return lines.join('\n').trim() + '\n';
|
|
509
|
+
}
|
|
510
|
+
function writeIfChanged(file, content) {
|
|
511
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
512
|
+
if (yield fs_extra_1.default.pathExists(file)) {
|
|
513
|
+
const prev = yield fs_extra_1.default.readFile(file, 'utf8');
|
|
514
|
+
if (prev === content)
|
|
515
|
+
return;
|
|
516
|
+
}
|
|
517
|
+
yield fs_extra_1.default.writeFile(file, content, 'utf8');
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
// Write README into src folders, but avoid overwriting a manual README unless previously generated.
|
|
521
|
+
function emitSourceReadme(file, content) {
|
|
522
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
523
|
+
// Always overwrite to keep docs in sync (educational repo preference: no banner / frictionless reading)
|
|
524
|
+
if (yield fs_extra_1.default.pathExists(file)) {
|
|
525
|
+
const prev = yield fs_extra_1.default.readFile(file, 'utf8');
|
|
526
|
+
if (prev === content)
|
|
527
|
+
return;
|
|
528
|
+
}
|
|
529
|
+
yield fs_extra_1.default.writeFile(file, content, 'utf8');
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
main().catch(e => {
|
|
533
|
+
console.error(e);
|
|
534
|
+
process.exit(1);
|
|
535
|
+
});
|
|
536
|
+
//# sourceMappingURL=generate-docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-docs.js","sourceRoot":"","sources":["../../scripts/generate-docs.ts"],"names":[],"mappings":"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"}
|