paperlint 10.3.0 → 10.4.1
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/workflows/ci.yml +15 -4
- package/README.md +1 -0
- package/dist/CLAUDE.md.spec.d.ts.map +1 -1
- package/dist/CLAUDE.md.spec.js +6 -3
- package/dist/CLAUDE.md.spec.js.map +1 -1
- package/dist/adapters/git/index.d.ts +10 -0
- package/dist/adapters/git/index.d.ts.map +1 -0
- package/dist/adapters/git/index.js +151 -0
- package/dist/adapters/git/index.js.map +1 -0
- package/dist/adapters/latex/captions.d.ts +9 -0
- package/dist/adapters/latex/captions.d.ts.map +1 -0
- package/dist/adapters/latex/captions.js +40 -0
- package/dist/adapters/latex/captions.js.map +1 -0
- package/dist/adapters/latex/index.d.ts +1 -0
- package/dist/adapters/latex/index.d.ts.map +1 -1
- package/dist/adapters/latex/index.js +1 -0
- package/dist/adapters/latex/index.js.map +1 -1
- package/dist/adapters/latex/parse.d.ts.map +1 -1
- package/dist/adapters/latex/parse.js +6 -0
- package/dist/adapters/latex/parse.js.map +1 -1
- package/dist/adapters/memory/index.d.ts +6 -0
- package/dist/adapters/memory/index.d.ts.map +1 -1
- package/dist/adapters/memory/index.js +8 -0
- package/dist/adapters/memory/index.js.map +1 -1
- package/dist/adapters/node/index.d.ts +1 -0
- package/dist/adapters/node/index.d.ts.map +1 -1
- package/dist/adapters/node/index.js +1 -0
- package/dist/adapters/node/index.js.map +1 -1
- package/dist/adapters/node/list-entries.io.d.ts +3 -0
- package/dist/adapters/node/list-entries.io.d.ts.map +1 -0
- package/dist/adapters/node/list-entries.io.js +26 -0
- package/dist/adapters/node/list-entries.io.js.map +1 -0
- package/dist/adapters/study-registry/index.d.ts +70 -10
- package/dist/adapters/study-registry/index.d.ts.map +1 -1
- package/dist/adapters/study-registry/index.js +84 -10
- package/dist/adapters/study-registry/index.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +33 -3
- package/dist/cli.js.map +1 -1
- package/dist/domain/decide-first.d.ts +110 -0
- package/dist/domain/decide-first.d.ts.map +1 -0
- package/dist/domain/decide-first.js +108 -0
- package/dist/domain/decide-first.js.map +1 -0
- package/dist/domain/index-columns.d.ts +45 -0
- package/dist/domain/index-columns.d.ts.map +1 -0
- package/dist/domain/index-columns.js +64 -0
- package/dist/domain/index-columns.js.map +1 -0
- package/dist/domain/study-mode.d.ts +37 -0
- package/dist/domain/study-mode.d.ts.map +1 -0
- package/dist/domain/study-mode.js +45 -0
- package/dist/domain/study-mode.js.map +1 -0
- package/dist/domain/study-registry.d.ts +116 -12
- package/dist/domain/study-registry.d.ts.map +1 -1
- package/dist/domain/study-registry.js +164 -44
- package/dist/domain/study-registry.js.map +1 -1
- package/dist/outputs-before-decision-rule.d.ts +17 -0
- package/dist/outputs-before-decision-rule.d.ts.map +1 -0
- package/dist/outputs-before-decision-rule.js +94 -0
- package/dist/outputs-before-decision-rule.js.map +1 -0
- package/dist/ports/git-history.d.ts +44 -0
- package/dist/ports/git-history.d.ts.map +1 -0
- package/dist/ports/git-history.js +2 -0
- package/dist/ports/git-history.js.map +1 -0
- package/dist/ports/list-entries.d.ts +20 -0
- package/dist/ports/list-entries.d.ts.map +1 -0
- package/dist/ports/list-entries.js +2 -0
- package/dist/ports/list-entries.js.map +1 -0
- package/dist/ports/study-deps.d.ts +14 -0
- package/dist/ports/study-deps.d.ts.map +1 -0
- package/dist/ports/study-deps.js +2 -0
- package/dist/ports/study-deps.js.map +1 -0
- package/dist/ports/study-folder.d.ts +43 -0
- package/dist/ports/study-folder.d.ts.map +1 -0
- package/dist/ports/study-folder.js +2 -0
- package/dist/ports/study-folder.js.map +1 -0
- package/dist/ports/study-registry-codec.d.ts +6 -3
- package/dist/ports/study-registry-codec.d.ts.map +1 -1
- package/dist/presets.d.ts +1 -2
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +1 -2
- package/dist/presets.js.map +1 -1
- package/dist/studies.d.ts +4 -0
- package/dist/studies.d.ts.map +1 -1
- package/dist/studies.js +52 -21
- package/dist/studies.js.map +1 -1
- package/dist/study-folder.d.ts +14 -0
- package/dist/study-folder.d.ts.map +1 -0
- package/dist/study-folder.js +123 -0
- package/dist/study-folder.js.map +1 -0
- package/dist/study-gate.d.ts +14 -0
- package/dist/study-gate.d.ts.map +1 -0
- package/dist/study-gate.js +132 -0
- package/dist/study-gate.js.map +1 -0
- package/dist/study-index-input.d.ts +5 -0
- package/dist/study-index-input.d.ts.map +1 -0
- package/dist/study-index-input.js +18 -0
- package/dist/study-index-input.js.map +1 -0
- package/dist/study-modes.d.ts +56 -0
- package/dist/study-modes.d.ts.map +1 -0
- package/dist/study-modes.js +59 -0
- package/dist/study-modes.js.map +1 -0
- package/dist/study-registry-rule.d.ts +13 -1
- package/dist/study-registry-rule.d.ts.map +1 -1
- package/dist/study-registry-rule.js +33 -21
- package/dist/study-registry-rule.js.map +1 -1
- package/dist/study-run.d.ts +19 -0
- package/dist/study-run.d.ts.map +1 -0
- package/dist/study-run.js +9 -0
- package/dist/study-run.js.map +1 -0
- package/docs/design/study-modes.md +265 -0
- package/docs/design/study-registry.md +6 -0
- package/docs/e2e.md +8 -4
- package/docs/layout.md +22 -19
- package/docs/rules/repro/outputs-before-decision.md +122 -0
- package/docs/rules/repro/study-registered.md +49 -15
- package/docs/rules/tex/heading-case.md +1 -1
- package/docs/rules.md +54 -53
- package/docs/testing.md +1 -0
- package/eslint.config.mjs +36 -24
- package/package.json +2 -1
- package/scripts/check.ts +6 -0
- package/skills/camera-ready/SKILL.md +6 -1
- package/skills/camera-ready/SKILL.md.spec.ts +5 -0
- package/skills/draft-paper/SKILL.md +11 -3
- package/skills/draft-paper/SKILL.md.spec.ts +10 -2
- package/skills/grade-paper-writing/SKILL.md +4 -2
- package/skills/grade-paper-writing/SKILL.md.spec.ts +3 -1
- package/skills/grade-paper-writing/__snapshots__/prose-lint.test.ts.snap +16 -3
- package/skills/grade-paper-writing/prose-lint.mjs +127 -95
- package/skills/grade-paper-writing/prose-lint.test.ts +119 -10
- package/skills/harden-paper/SKILL.md +12 -2
- package/skills/harden-paper/SKILL.md.spec.ts +11 -1
- package/skills/osf-artifact-upload/SKILL.md +7 -1
- package/skills/osf-artifact-upload/SKILL.md.spec.ts +6 -0
- package/skills/pc-panel-review/SKILL.md +10 -3
- package/skills/pc-panel-review/SKILL.md.spec.ts +9 -2
- package/skills/tighten-paper/SKILL.md +5 -1
- package/skills/tighten-paper/SKILL.md.spec.ts +4 -0
- package/src/CLAUDE.md +7 -4
- package/src/CLAUDE.md.spec.ts +6 -3
- package/src/adapters/git/history.test.ts +121 -0
- package/src/adapters/git/index.test.ts +268 -0
- package/src/adapters/git/index.ts +227 -0
- package/src/adapters/latex/captions.test.ts +57 -0
- package/src/adapters/latex/captions.ts +56 -0
- package/src/adapters/latex/index.ts +1 -0
- package/src/adapters/latex/parse.ts +7 -0
- package/src/adapters/memory/index.test.ts +15 -1
- package/src/adapters/memory/index.ts +13 -0
- package/src/adapters/node/index.ts +1 -0
- package/src/adapters/node/list-entries.io.ts +27 -0
- package/src/adapters/node/list-entries.test.ts +61 -0
- package/src/adapters/study-registry/index.test.ts +12 -9
- package/src/adapters/study-registry/index.ts +130 -24
- package/src/adapters/study-registry/mode.test.ts +162 -0
- package/src/cli.ts +47 -3
- package/src/domain/decide-first.test.ts +291 -0
- package/src/domain/decide-first.ts +258 -0
- package/src/domain/index-columns.test.ts +261 -0
- package/src/domain/index-columns.ts +107 -0
- package/src/domain/study-measurements.test.ts +16 -8
- package/src/domain/study-mode.test.ts +55 -0
- package/src/domain/study-mode.ts +78 -0
- package/src/domain/study-registry.test.ts +72 -37
- package/src/domain/study-registry.ts +281 -50
- package/src/new-paper.test.ts +5 -1
- package/src/outputs-before-decision-rule.test.ts +251 -0
- package/src/outputs-before-decision-rule.ts +133 -0
- package/src/ports/git-history.ts +44 -0
- package/src/ports/list-entries.ts +21 -0
- package/src/ports/study-deps.ts +14 -0
- package/src/ports/study-folder.ts +38 -0
- package/src/ports/study-registry-codec.ts +10 -3
- package/src/presets.ts +1 -2
- package/src/rule-cases.test.ts +78 -3
- package/src/studies-index-modes.test.ts +129 -0
- package/src/studies.test.ts +35 -11
- package/src/studies.ts +96 -26
- package/src/study-folder.test.ts +237 -0
- package/src/study-folder.ts +176 -0
- package/src/study-gate.test.ts +467 -0
- package/src/study-gate.ts +234 -0
- package/src/study-index-input.ts +31 -0
- package/src/study-modes.ts +107 -0
- package/src/study-registry-rule.test.ts +285 -11
- package/src/study-registry-rule.ts +64 -35
- package/src/study-run.ts +21 -0
package/.github/workflows/ci.yml
CHANGED
|
@@ -28,9 +28,12 @@
|
|
|
28
28
|
# what took the job from `timeout-minutes: 20` to 10. Re-measure when the counts move again; do not
|
|
29
29
|
# cite the table above without re-running it.
|
|
30
30
|
#
|
|
31
|
-
#
|
|
32
|
-
#
|
|
33
|
-
#
|
|
31
|
+
# MEASURED 2026-10-16 on GitHub's runner, not locally: `gates` on main took 9m38s (run 38854596880),
|
|
32
|
+
# 6m43s of it `npm test, under coverage`; a branch adding a 16-second step was cancelled by the
|
|
33
|
+
# 10-minute bond (run 38909690302). The ~3-minute estimate this bond was set against no longer holds,
|
|
34
|
+
# so `timeout-minutes: 15` is ~1.5× the measured job — a bond against a hang, not a budget the suite
|
|
35
|
+
# lives inside. `npm ci` carries its OWN bond because a job-level bond cannot tell "the registry hung"
|
|
36
|
+
# from "the suite is slow" and so hands a hang the whole job.
|
|
34
37
|
name: ci
|
|
35
38
|
|
|
36
39
|
on:
|
|
@@ -66,7 +69,7 @@ jobs:
|
|
|
66
69
|
# there is no pull_request object, and a bare `.draft` would be missing and kill every check there.
|
|
67
70
|
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
|
|
68
71
|
runs-on: ubuntu-latest
|
|
69
|
-
timeout-minutes:
|
|
72
|
+
timeout-minutes: 15
|
|
70
73
|
steps:
|
|
71
74
|
- uses: actions/checkout@v7
|
|
72
75
|
|
|
@@ -188,6 +191,14 @@ jobs:
|
|
|
188
191
|
run: npm run test:e2e:install
|
|
189
192
|
timeout-minutes: 10
|
|
190
193
|
|
|
194
|
+
# A study decided before its run, through the real binary in a real git repository
|
|
195
|
+
# (test/e2e/studies/): `studies gate`, `repro/outputs-before-decision`, and the commits
|
|
196
|
+
# `studies index` writes. git is on the runner image; `CI` is set, so a missing git FAILS the
|
|
197
|
+
# run (test/e2e/need.ts). 16 s on the runner (run 38909690302), 10 s locally.
|
|
198
|
+
- name: npm run test:e2e:studies
|
|
199
|
+
run: npm run test:e2e:studies
|
|
200
|
+
timeout-minutes: 5
|
|
201
|
+
|
|
191
202
|
# ── BUILDING THE PAPER WITH REAL pdflatex, ON LINUX AND macOS ──────────────────────────────────
|
|
192
203
|
#
|
|
193
204
|
# 🔴 ONE JOB, TWO OPERATING SYSTEMS. TeX Live comes from `paperlint toolchain` — the same command a user
|
package/README.md
CHANGED
|
@@ -162,6 +162,7 @@ Each stage's skills, what it writes and what checks it, drawn as one flow, with
|
|
|
162
162
|
| `npx paperlint submission update <paper>` | checks a new PDF/abstract against the portal; `--save` sends it for real |
|
|
163
163
|
| `npx paperlint studies new <paper> "<title>"` | registers a study: the next id in `repro/studies.json`, its folder, the index |
|
|
164
164
|
| `npx paperlint studies index <paper>` | regenerates the index of the studies in `repro/README.md` |
|
|
165
|
+
| `npx paperlint studies gate <paper> <id>` | exits 0 only once the study's decision is committed: run it before the study |
|
|
165
166
|
| `npx paperlint --help` | every command and flag |
|
|
166
167
|
|
|
167
168
|
## 🧠 Skills
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CLAUDE.md.spec.d.ts","sourceRoot":"","sources":["../src/CLAUDE.md.spec.ts"],"names":[],"mappings":";AAGA,
|
|
1
|
+
{"version":3,"file":"CLAUDE.md.spec.d.ts","sourceRoot":"","sources":["../src/CLAUDE.md.spec.ts"],"names":[],"mappings":";AAGA,wBAuEG"}
|
package/dist/CLAUDE.md.spec.js
CHANGED
|
@@ -16,12 +16,15 @@ test — a parser for banal's JSON is pure and is still banal's.
|
|
|
16
16
|
|
|
17
17
|
| element | where | holds | may import |
|
|
18
18
|
| --------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
|
|
19
|
-
| \`domain\` | \`src/domain/\` | values and decisions in the paper's vocabulary | \`domain\`;
|
|
20
|
-
| \`port\` | \`src/ports/\` | interfaces **shaped by what the inside needs**, never by what a tool does (Graça: "created to fit the Application Core needs and not simply mimic the tools APIs") | \`domain\`, \`port\`; the same
|
|
21
|
-
| \`app\` | \`src/*.ts\` | use cases over ports; **no I/O defaults** — a use case without its deps does not compile | \`domain\`, \`port\`, \`app\`, the package's \`.mjs\`;
|
|
19
|
+
| \`domain\` | \`src/domain/\` | values and decisions in the paper's vocabulary | \`domain\`; any package or Node built-in that is no tool package (\`TOOL_PACKAGES\`) and no effect |
|
|
20
|
+
| \`port\` | \`src/ports/\` | interfaces **shaped by what the inside needs**, never by what a tool does (Graça: "created to fit the Application Core needs and not simply mimic the tools APIs") | \`domain\`, \`port\`; the same as the domain |
|
|
21
|
+
| \`app\` | \`src/*.ts\` | use cases over ports; **no I/O defaults** — a use case without its deps does not compile | \`domain\`, \`port\`, \`app\`, the package's \`.mjs\`; the same externals as the domain |
|
|
22
22
|
| \`adapter\` | \`src/adapters/<tool>/\` | everything that knows \`<tool>\` exists, pure parsers included; used through its \`index.ts\` | \`domain\`, \`port\`, its own folder, its tool's packages, the package's \`.mjs\`. **Never** \`app\`, **never** another adapter |
|
|
23
23
|
| \`root\` | \`src/cli.ts\` | reads \`process.*\`, builds adapters, wires ports | anything |
|
|
24
24
|
|
|
25
|
+
A package that exists because of one external tool goes in \`TOOL_PACKAGES\` (\`eslint.config.mjs\`), in the same PR that
|
|
26
|
+
adds its adapter; a pure utility library (\`remeda\`, \`zod\`, \`ts-essentials\`) needs nothing, and effects are axis B's.
|
|
27
|
+
|
|
25
28
|
Folders are ELEMENTS of \`eslint-plugin-boundaries\`, single files are CATEGORIES (\`root\`, \`app\`,
|
|
26
29
|
\`test\`, \`io\`): v7 matches element patterns as folders. Everyone — tests included — reaches an
|
|
27
30
|
adapter through its \`index.ts\`; the files inside one adapter import each other freely.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CLAUDE.md.spec.js","sourceRoot":"","sources":["../src/CLAUDE.md.spec.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErE,eAAe,eAAe,CAAC;IAC7B,QAAQ,EAAE;QACR,QAAQ,EAAE,KAAK,CAAA;;eAEJ;QAEX,oBAAoB,EAAE,KAAK,CAAA;oCACK,IAAI,CAAC,4BAA4B,CAAC
|
|
1
|
+
{"version":3,"file":"CLAUDE.md.spec.js","sourceRoot":"","sources":["../src/CLAUDE.md.spec.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErE,eAAe,eAAe,CAAC;IAC7B,QAAQ,EAAE;QACR,QAAQ,EAAE,KAAK,CAAA;;eAEJ;QAEX,oBAAoB,EAAE,KAAK,CAAA;oCACK,IAAI,CAAC,4BAA4B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCpE,IAAI,CAAC,gCAAgC,CAAC;;;;;;;;;;;;;+CAaO;QAE3C,sBAAsB,EAAE,KAAK,CAAA,oEAAoE,IAAI,CAAC,yBAAyB,CAAC;;8DAEtE,IAAI,CAAC,oBAAoB,CAAC,IAAI;KACzF;IACD,KAAK,EAAE;QACL,MAAM,EAAE,OAAO,CACb,gCAAgC,EAChC,yEAAyE,EACzE,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB;QACD,gBAAgB,EAAE,OAAO,CACvB,8BAA8B,EAC9B,oEAAoE,EACpE,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB;KACF;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CommitAt, GitHistory, GitOrder } from "../../ports/git-history.ts";
|
|
2
|
+
import type { RunProcess } from "../../ports/process.ts";
|
|
3
|
+
/**
|
|
4
|
+
* The first commit of each path in `git log --reverse --format=%x01%H%x09%cI --name-only` output:
|
|
5
|
+
* a line starting with \x01 opens a commit, the lines after it name its files.
|
|
6
|
+
*/
|
|
7
|
+
export declare const firstCommitsOf: (log: string) => ReadonlyMap<string, CommitAt>;
|
|
8
|
+
/** The committed state of files. */
|
|
9
|
+
export declare function gitHistory(run: RunProcess, env: Readonly<Record<string, string>>): GitHistory & GitOrder;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/git/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,QAAQ,EAGR,UAAU,EACV,QAAQ,EAGT,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAe,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAoDtE;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,KAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,CAWtC,CAAC;AAEpC,oCAAoC;AACpC,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACpC,UAAU,GAAG,QAAQ,CAoBvB"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
const TIMEOUT_MS = 60_000;
|
|
2
|
+
/** git's stdout, or why it gave none; `allowed` lists the exit statuses that are answers. */
|
|
3
|
+
const stdoutOf = (x, allowed = [0]) => {
|
|
4
|
+
switch (x.kind) {
|
|
5
|
+
case "exited":
|
|
6
|
+
return allowed.includes(x.status)
|
|
7
|
+
? { out: x.stdout, status: x.status }
|
|
8
|
+
: { why: x.stderr.trim() || `git exited ${String(x.status)}` };
|
|
9
|
+
case "not-found":
|
|
10
|
+
return { why: "git is not installed" };
|
|
11
|
+
case "spawn-failed":
|
|
12
|
+
return { why: x.message };
|
|
13
|
+
case "signalled":
|
|
14
|
+
case "timed-out":
|
|
15
|
+
return { why: `git did not finish (${x.kind})` };
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
/** git, run through `run` in `cwd` with `env` as its whole environment. */
|
|
19
|
+
const gitIn = (run, env) => (cwd, args, allowed) => stdoutOf(run.run({
|
|
20
|
+
file: "git",
|
|
21
|
+
args: ["-c", "core.quotepath=false", ...args],
|
|
22
|
+
env,
|
|
23
|
+
timeoutMs: TIMEOUT_MS,
|
|
24
|
+
cwd,
|
|
25
|
+
maxOutputBytes: 64 * 1024 * 1024,
|
|
26
|
+
}), allowed);
|
|
27
|
+
/** `<sha>\t<date>` as a commit. */
|
|
28
|
+
const commitAt = (line) => {
|
|
29
|
+
const parts = line.split("\t");
|
|
30
|
+
return { commit: nth(parts, 0), date: nth(parts, 1) };
|
|
31
|
+
};
|
|
32
|
+
/** The `i`th of `parts`, "" when there are fewer. */
|
|
33
|
+
const nth = (parts, i) => parts.slice(i, i + 1).join("");
|
|
34
|
+
/**
|
|
35
|
+
* The first commit of each path in `git log --reverse --format=%x01%H%x09%cI --name-only` output:
|
|
36
|
+
* a line starting with \x01 opens a commit, the lines after it name its files.
|
|
37
|
+
*/
|
|
38
|
+
export const firstCommitsOf = (log) => log
|
|
39
|
+
.split("\x01")
|
|
40
|
+
.slice(1)
|
|
41
|
+
.reduce((seen, block) => {
|
|
42
|
+
const lines = block.split("\n");
|
|
43
|
+
const at = commitAt(nth(lines, 0));
|
|
44
|
+
const names = lines.slice(1);
|
|
45
|
+
return names
|
|
46
|
+
.filter((n) => n !== "" && !seen.has(n))
|
|
47
|
+
.reduce((m, n) => new Map([...m, [n, at]]), seen);
|
|
48
|
+
}, new Map());
|
|
49
|
+
/** The committed state of files. */
|
|
50
|
+
export function gitHistory(run, env) {
|
|
51
|
+
const git = gitIn(run, env);
|
|
52
|
+
return {
|
|
53
|
+
committed: (paper, file) => {
|
|
54
|
+
const log = git(paper, ["log", "-1", "--format=%H%x09%cI", "--", file]);
|
|
55
|
+
if ("why" in log)
|
|
56
|
+
return { kind: "unknown", why: log.why };
|
|
57
|
+
const { commit, date } = commitAt(log.out.trim());
|
|
58
|
+
if (commit === "")
|
|
59
|
+
return { kind: "not-committed" };
|
|
60
|
+
// `git log -1` names a deleting commit too, and a deleted file leaves a clean status.
|
|
61
|
+
const head = inHead(git, paper, file);
|
|
62
|
+
if ("why" in head)
|
|
63
|
+
return { kind: "unknown", why: head.why };
|
|
64
|
+
if (!head.present)
|
|
65
|
+
return { kind: "deleted", commit };
|
|
66
|
+
const status = git(paper, ["status", "--porcelain=v1", "--", file]);
|
|
67
|
+
if ("why" in status)
|
|
68
|
+
return { kind: "unknown", why: status.why };
|
|
69
|
+
return status.out.trim() === ""
|
|
70
|
+
? { kind: "committed", commit, date }
|
|
71
|
+
: { kind: "changed", commit };
|
|
72
|
+
},
|
|
73
|
+
order: (studyDir, decision) => orderIn(git, studyDir, decision),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/** Whether `file` is in HEAD's tree (`git ls-tree`, which takes an absolute path in the worktree). */
|
|
77
|
+
const inHead = (git, cwd, file) => {
|
|
78
|
+
const t = git(cwd, ["ls-tree", "--name-only", "HEAD", "--", file]);
|
|
79
|
+
return "why" in t ? t : { present: t.out.trim() !== "" };
|
|
80
|
+
};
|
|
81
|
+
/** The decision's first commit (null: never committed), and whether HEAD's tree still holds it. */
|
|
82
|
+
const decisionIn = (git, studyDir, decision) => {
|
|
83
|
+
const d = git(studyDir, ["log", "--format=%H%x09%cI", "--", decision]);
|
|
84
|
+
if ("why" in d)
|
|
85
|
+
return d;
|
|
86
|
+
const lines = d.out.trim().split("\n");
|
|
87
|
+
const first = commitAt(nth(lines, lines.length - 1));
|
|
88
|
+
if (first.commit === "")
|
|
89
|
+
return { at: null, deleted: false };
|
|
90
|
+
const head = inHead(git, studyDir, decision);
|
|
91
|
+
return "why" in head ? head : { at: first, deleted: !head.present };
|
|
92
|
+
};
|
|
93
|
+
/** The order facts of the study in `studyDir`, decided by `decision`. */
|
|
94
|
+
function orderIn(git, studyDir, decision) {
|
|
95
|
+
const shallow = git(studyDir, ["rev-parse", "--is-shallow-repository"]);
|
|
96
|
+
if ("why" in shallow)
|
|
97
|
+
return { kind: "unknown", why: shallow.why };
|
|
98
|
+
if (shallow.out.trim() === "true")
|
|
99
|
+
return { kind: "shallow" };
|
|
100
|
+
const d = decisionIn(git, studyDir, decision);
|
|
101
|
+
if ("why" in d)
|
|
102
|
+
return { kind: "unknown", why: d.why };
|
|
103
|
+
const files = git(studyDir, [
|
|
104
|
+
"log",
|
|
105
|
+
"--reverse",
|
|
106
|
+
"--format=%x01%H%x09%cI",
|
|
107
|
+
"--name-only",
|
|
108
|
+
"--relative",
|
|
109
|
+
"--",
|
|
110
|
+
".",
|
|
111
|
+
]);
|
|
112
|
+
if ("why" in files)
|
|
113
|
+
return { kind: "unknown", why: files.why };
|
|
114
|
+
const ordered = ordersOf(git, studyDir, d.at, firstCommitsOf(files.out));
|
|
115
|
+
return "why" in ordered
|
|
116
|
+
? { kind: "unknown", why: ordered.why }
|
|
117
|
+
: {
|
|
118
|
+
kind: "read",
|
|
119
|
+
decision: d.at,
|
|
120
|
+
decisionDeleted: d.deleted,
|
|
121
|
+
files: ordered.files,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
const isFailed = (a) => "why" in a;
|
|
125
|
+
const isOrdered = (a) => "order" in a;
|
|
126
|
+
/** The order of `commit` against `decision`'s first commit. */
|
|
127
|
+
const answerFor = (git, cwd, decision, commit) => {
|
|
128
|
+
if (decision === null)
|
|
129
|
+
return { commit, order: "not-after" };
|
|
130
|
+
if (commit === decision.commit)
|
|
131
|
+
return { commit, order: "same" };
|
|
132
|
+
const a = git(cwd, ["merge-base", "--is-ancestor", decision.commit, commit], [0, 1]);
|
|
133
|
+
if ("why" in a)
|
|
134
|
+
return { commit, why: a.why };
|
|
135
|
+
return { commit, order: a.status === 0 ? "after" : "not-after" };
|
|
136
|
+
};
|
|
137
|
+
/** Each file's first commit with its order against `decision`'s; git asked once per distinct commit. */
|
|
138
|
+
function ordersOf(git, cwd, decision, firsts) {
|
|
139
|
+
const answers = [...new Set([...firsts.values()].map((c) => c.commit))].map((c) => answerFor(git, cwd, decision, c));
|
|
140
|
+
const failed = answers.find(isFailed);
|
|
141
|
+
if (failed !== undefined)
|
|
142
|
+
return { why: failed.why };
|
|
143
|
+
return {
|
|
144
|
+
files: answers
|
|
145
|
+
.filter(isOrdered)
|
|
146
|
+
.flatMap(({ commit, order }) => [...firsts]
|
|
147
|
+
.filter(([, c]) => c.commit === commit)
|
|
148
|
+
.map(([path, c]) => ({ path, ...c, order }))),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/git/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ParsedTex } from "./parse.ts";
|
|
2
|
+
/**
|
|
3
|
+
* The text of every `\caption` in document order: its last mandatory argument, whatever optional
|
|
4
|
+
* argument (`\caption[Short]{…}`), star or whitespace comes before it. What a reader never sees is
|
|
5
|
+
* pruned (`isUnrendered`: comments, code), and so is a macro definition's body, where the caption
|
|
6
|
+
* is written but not set. A caption with no word in it is left out.
|
|
7
|
+
*/
|
|
8
|
+
export declare function captionsOf(t: ParsedTex): readonly string[];
|
|
9
|
+
//# sourceMappingURL=captions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"captions.d.ts","sourceRoot":"","sources":["../../../src/adapters/latex/captions.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA0B5C;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,MAAM,EAAE,CAW1D"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** The captions of a document: the text a reader sees under a figure or a table. */
|
|
2
|
+
import { isDefined } from "remeda";
|
|
3
|
+
import { isDefinition, isUnrendered } from "./hidden.js";
|
|
4
|
+
import { collapse, isNode, mandatory, textOf, visited, } from "./nodes.js";
|
|
5
|
+
const isCaption = (n) => n.type === "macro" && n.content === "caption";
|
|
6
|
+
/** Math a reader sees as symbols: it counts as one word, and says nothing else. */
|
|
7
|
+
const MATH_NODES = new Set([
|
|
8
|
+
"inlinemath",
|
|
9
|
+
"displaymath",
|
|
10
|
+
"mathenv",
|
|
11
|
+
]);
|
|
12
|
+
const MATH_WORD = "math";
|
|
13
|
+
/** The escapes of a character LaTeX sets for itself: `\%` is a percent sign the reader sees. */
|
|
14
|
+
const ESCAPED = new Set(["%", "&", "#", "$", "_"]);
|
|
15
|
+
/** What a reader sees of a caption's nodes: its words, its escapes, and one word for each formula. */
|
|
16
|
+
const captionText = (nodes) => nodes
|
|
17
|
+
.map((n) => {
|
|
18
|
+
if (MATH_NODES.has(n.type))
|
|
19
|
+
return MATH_WORD;
|
|
20
|
+
if (n.type === "macro" && ESCAPED.has(n.content))
|
|
21
|
+
return n.content;
|
|
22
|
+
return n.type === "group" ? captionText(n.content) : textOf([n]);
|
|
23
|
+
})
|
|
24
|
+
.join("");
|
|
25
|
+
/**
|
|
26
|
+
* The text of every `\caption` in document order: its last mandatory argument, whatever optional
|
|
27
|
+
* argument (`\caption[Short]{…}`), star or whitespace comes before it. What a reader never sees is
|
|
28
|
+
* pruned (`isUnrendered`: comments, code), and so is a macro definition's body, where the caption
|
|
29
|
+
* is written but not set. A caption with no word in it is left out.
|
|
30
|
+
*/
|
|
31
|
+
export function captionsOf(t) {
|
|
32
|
+
return visited(t.root, (v, parent) => isUnrendered(v, parent) || isDefinition(v))
|
|
33
|
+
.filter(isNode)
|
|
34
|
+
.filter(isCaption)
|
|
35
|
+
.map((m) => mandatory(m).at(-1))
|
|
36
|
+
.filter(isDefined)
|
|
37
|
+
.map((a) => collapse(captionText(a.content)).trim())
|
|
38
|
+
.filter((text) => text !== "");
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=captions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"captions.js","sourceRoot":"","sources":["../../../src/adapters/latex/captions.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,MAAM,EACN,OAAO,GAGR,MAAM,YAAY,CAAC;AAGpB,MAAM,SAAS,GAAG,CAAC,CAAO,EAAc,EAAE,CACxC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC;AAEhD,mFAAmF;AACnF,MAAM,UAAU,GAA8B,IAAI,GAAG,CAAe;IAClE,YAAY;IACZ,aAAa;IACb,SAAS;CACV,CAAC,CAAC;AACH,MAAM,SAAS,GAAG,MAAM,CAAC;AAEzB,gGAAgG;AAChG,MAAM,OAAO,GAAwB,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAExE,sGAAsG;AACtG,MAAM,WAAW,GAAG,CAAC,KAAsB,EAAU,EAAE,CACrD,KAAK;KACF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;IACT,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7C,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,CAAC,OAAO,CAAC;IACnE,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC,CAAC;KACD,IAAI,CAAC,EAAE,CAAC,CAAC;AAEd;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,CAAY;IACrC,OAAO,OAAO,CACZ,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAC1D;SACE,MAAM,CAAC,MAAM,CAAC;SACd,MAAM,CAAC,SAAS,CAAC;SACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/B,MAAM,CAAC,SAAS,CAAC;SACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACnD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -24,6 +24,7 @@ import type { LatexReader } from "../../ports/latex.ts";
|
|
|
24
24
|
export { documentClassOf, parseTemplate, replaceDocumentClass, } from "./document-class.ts";
|
|
25
25
|
export { collapse, inPlace, macroPlace, mandatory, optional, placeOf, textOf, } from "./nodes.ts";
|
|
26
26
|
export { documentBodyOf, includesOf } from "./includes.ts";
|
|
27
|
+
export { captionsOf } from "./captions.ts";
|
|
27
28
|
export { headingsOf } from "./headings.ts";
|
|
28
29
|
export { outlineOf } from "./outline.ts";
|
|
29
30
|
export { parseLatex, type ParsedTex } from "./parse.ts";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/latex/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAexD,OAAO,EACL,eAAe,EACf,aAAa,EACb,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,QAAQ,EACR,OAAO,EACP,UAAU,EACV,SAAS,EACT,QAAQ,EACR,OAAO,EACP,MAAM,GACP,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,mFAAmF;AACnF,eAAO,MAAM,WAAW,EAAE,WAazB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/latex/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAexD,OAAO,EACL,eAAe,EACf,aAAa,EACb,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,QAAQ,EACR,OAAO,EACP,UAAU,EACV,SAAS,EACT,QAAQ,EACR,OAAO,EACP,MAAM,GACP,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,mFAAmF;AACnF,eAAO,MAAM,WAAW,EAAE,WAazB,CAAC"}
|
|
@@ -10,6 +10,7 @@ import { filecontentsOf } from "./filecontents.js";
|
|
|
10
10
|
export { documentClassOf, parseTemplate, replaceDocumentClass, } from "./document-class.js";
|
|
11
11
|
export { collapse, inPlace, macroPlace, mandatory, optional, placeOf, textOf, } from "./nodes.js";
|
|
12
12
|
export { documentBodyOf, includesOf } from "./includes.js";
|
|
13
|
+
export { captionsOf } from "./captions.js";
|
|
13
14
|
export { headingsOf } from "./headings.js";
|
|
14
15
|
export { outlineOf } from "./outline.js";
|
|
15
16
|
export { parseLatex } from "./parse.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/latex/index.ts"],"names":[],"mappings":"AAuBA,OAAO,EACL,eAAe,EACf,aAAa,EACb,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EACL,eAAe,EACf,aAAa,EACb,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,QAAQ,EACR,OAAO,EACP,UAAU,EACV,SAAS,EACT,QAAQ,EACR,OAAO,EACP,MAAM,GACP,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAkB,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,mFAAmF;AACnF,MAAM,CAAC,MAAM,WAAW,GAAgB;IACtC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACxD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5C,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9C,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACpD,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9C,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACpD,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9C,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACtD,QAAQ,EAAE,aAAa;IACvB,iBAAiB,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IAC7E,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5D,YAAY,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CACzE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/latex/index.ts"],"names":[],"mappings":"AAuBA,OAAO,EACL,eAAe,EACf,aAAa,EACb,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EACL,eAAe,EACf,aAAa,EACb,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,QAAQ,EACR,OAAO,EACP,UAAU,EACV,SAAS,EACT,QAAQ,EACR,OAAO,EACP,MAAM,GACP,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAkB,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,mFAAmF;AACnF,MAAM,CAAC,MAAM,WAAW,GAAgB;IACtC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACxD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5C,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9C,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACpD,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9C,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACpD,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9C,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACtD,QAAQ,EAAE,aAAa;IACvB,iBAAiB,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IAC7E,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5D,YAAY,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CACzE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/adapters/latex/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAW/D,oGAAoG;AACpG,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAgB9C,CAAC;AAEH,yFAAyF;AACzF,eAAO,MAAM,cAAc,EAAE,QAAQ,CACnC,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA2B9C,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAGnD,CAAC;
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/adapters/latex/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAW/D,oGAAoG;AACpG,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAgB9C,CAAC;AAEH,yFAAyF;AACzF,eAAO,MAAM,cAAc,EAAE,QAAQ,CACnC,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA2B9C,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAGnD,CAAC;AAoBH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAWhD,CAAC;AAOH,QAAA,MAAM,MAAM,eAAsB,CAAC;AAEnC,0GAA0G;AAC1G,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;IACxB,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;CACzB;AAgDD,kGAAkG;AAClG,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAejD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAOzD"}
|
|
@@ -64,6 +64,11 @@ const DECLARATION_SIGNATURES = Object.fromEntries([
|
|
|
64
64
|
// The layout commands `format/layout-override` reads: a spacing factor, geometry's key list.
|
|
65
65
|
...signed(["linespread", "geometry", "newgeometry"], "m"),
|
|
66
66
|
]);
|
|
67
|
+
/**
|
|
68
|
+
* `\caption` takes a star, an optional short caption and the text (`\caption*[Short]{Text}`). unified-latex
|
|
69
|
+
* signs it `o m`, so a starred caption came back with its star as the text and the text as a group beside it.
|
|
70
|
+
*/
|
|
71
|
+
const CAPTION_SIGNATURES = Object.fromEntries(signed(["caption"], "s o m"));
|
|
67
72
|
/**
|
|
68
73
|
* Macros that define other macros or environments. A heading in a body is no section where it is
|
|
69
74
|
* written, so the outline skips these; the rendered text reads a body as written, since nothing here
|
|
@@ -92,6 +97,7 @@ const parser = once(() => getParser({
|
|
|
92
97
|
...LINK_SIGNATURES,
|
|
93
98
|
...DECLARATION_SIGNATURES,
|
|
94
99
|
...DEF_SIGNATURES,
|
|
100
|
+
...CAPTION_SIGNATURES,
|
|
95
101
|
},
|
|
96
102
|
}));
|
|
97
103
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/adapters/latex/parse.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/adapters/latex/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Download } from "../../ports/download.ts";
|
|
2
2
|
import type { Files } from "../../ports/files.ts";
|
|
3
3
|
import type { ListDir } from "../../ports/talk-media.ts";
|
|
4
|
+
import type { ListEntries } from "../../ports/list-entries.ts";
|
|
4
5
|
import type { Command, ProcessExit, RunProcess } from "../../ports/process.ts";
|
|
5
6
|
import type { Workspace } from "../../ports/workspace.ts";
|
|
6
7
|
export interface ScriptedProcess extends RunProcess {
|
|
@@ -16,6 +17,11 @@ export interface MemoryFiles extends Files {
|
|
|
16
17
|
export declare function memoryFiles(initial?: Readonly<Record<string, string | Uint8Array>>): MemoryFiles;
|
|
17
18
|
/** `ListDir` over `memoryFiles`: the names directly under a directory, none when it holds no file. */
|
|
18
19
|
export declare const memoryListDir: (files: MemoryFiles) => ListDir;
|
|
20
|
+
/**
|
|
21
|
+
* `ListEntries` over `memoryFiles`: each name directly under a directory, a file when it is one, else a
|
|
22
|
+
* directory. Memory holds no links: the walk's refusal to follow one is the node adapter's to show.
|
|
23
|
+
*/
|
|
24
|
+
export declare const memoryListEntries: (files: MemoryFiles) => ListEntries;
|
|
19
25
|
export interface MemoryWorkspace extends Workspace {
|
|
20
26
|
/** Every file written into a scratch directory, in order. */
|
|
21
27
|
readonly written: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/memory/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,KAAK,EAAwB,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGhF,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;CAC3B;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,WAAW,GAClC,eAAe,CASjB;AAED,kDAAkD;AAClD,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,EAAE,eAAU,KAAG,WAKtD,CAAC;AAEH,MAAM,WAAW,WAAY,SAAQ,KAAK;IACxC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACvC;AAED,wBAAgB,WAAW,CACzB,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAAM,GAC1D,WAAW,CAYb;AAED,sGAAsG;AACtG,eAAO,MAAM,aAAa,GACvB,OAAO,WAAW,KAAG,OAYrB,CAAC;AAEJ,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;KAChC,EAAE,CAAC;IACJ,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,EAAE,CAAC,UAAU,GAAG,OAAO,CAAC,EAAE,CAAC;CAC1C;AAED,wBAAgB,eAAe,CAAC,GAAG,SAAa,GAAG,eAAe,CAyBjE;AAED,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,uGAAuG;AACvG,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACtD,aAAa,CAUf;AAED,4FAA4F;AAC5F,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,IAAI,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,WAAW,CAQxE"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/memory/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,KAAK,EAAwB,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGhF,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;CAC3B;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,WAAW,GAClC,eAAe,CASjB;AAED,kDAAkD;AAClD,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,EAAE,eAAU,KAAG,WAKtD,CAAC;AAEH,MAAM,WAAW,WAAY,SAAQ,KAAK;IACxC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACvC;AAED,wBAAgB,WAAW,CACzB,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAAM,GAC1D,WAAW,CAYb;AAED,sGAAsG;AACtG,eAAO,MAAM,aAAa,GACvB,OAAO,WAAW,KAAG,OAYrB,CAAC;AAEJ;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC3B,OAAO,WAAW,KAAG,WAKjB,CAAC;AAER,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;KAChC,EAAE,CAAC;IACJ,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,EAAE,CAAC,UAAU,GAAG,OAAO,CAAC,EAAE,CAAC;CAC1C;AAED,wBAAgB,eAAe,CAAC,GAAG,SAAa,GAAG,eAAe,CAyBjE;AAED,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,uGAAuG;AACvG,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACtD,aAAa,CAUf;AAED,4FAA4F;AAC5F,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,IAAI,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,WAAW,CAQxE"}
|
|
@@ -41,6 +41,14 @@ export const memoryListDir = (files) => (dir) => [
|
|
|
41
41
|
.split("/", 1)
|
|
42
42
|
.join(""))),
|
|
43
43
|
];
|
|
44
|
+
/**
|
|
45
|
+
* `ListEntries` over `memoryFiles`: each name directly under a directory, a file when it is one, else a
|
|
46
|
+
* directory. Memory holds no links: the walk's refusal to follow one is the node adapter's to show.
|
|
47
|
+
*/
|
|
48
|
+
export const memoryListEntries = (files) => (dir) => memoryListDir(files)(dir).map((name) => ({
|
|
49
|
+
name,
|
|
50
|
+
kind: files.isFile(absolutePath(`${dir}/${name}`)) ? "file" : "dir",
|
|
51
|
+
}));
|
|
44
52
|
export function memoryWorkspace(dir = "/scratch") {
|
|
45
53
|
const written = [];
|
|
46
54
|
const ended = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/memory/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/memory/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,4 +23,5 @@ export { nodeFiles } from "./files.io.ts";
|
|
|
23
23
|
export { spawnProcess, type SpawnSync } from "./process.io.ts";
|
|
24
24
|
export { hostDirs } from "./host.io.ts";
|
|
25
25
|
export { nodeListDir } from "./list-dir.io.ts";
|
|
26
|
+
export { nodeListEntries } from "./list-entries.io.ts";
|
|
26
27
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/node/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG/D,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;CAC5B;AAED,8CAA8C;AAC9C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAM7D;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/node/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG/D,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;CAC5B;AAED,8CAA8C;AAC9C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAM7D;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -12,4 +12,5 @@ export { nodeFiles } from "./files.io.js";
|
|
|
12
12
|
export { spawnProcess } from "./process.io.js";
|
|
13
13
|
export { hostDirs } from "./host.io.js";
|
|
14
14
|
export { nodeListDir } from "./list-dir.io.js";
|
|
15
|
+
export { nodeListEntries } from "./list-entries.io.js";
|
|
15
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/node/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAkB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAgBjD,MAAM,UAAU,YAAY,CAAC,CAAqB;IAChD,OAAO;QACL,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1B,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAkB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/node/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAkB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAgBjD,MAAM,UAAU,YAAY,CAAC,CAAqB;IAChD,OAAO;QACL,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1B,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAkB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-entries.io.d.ts","sourceRoot":"","sources":["../../../src/adapters/node/list-entries.io.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAY,WAAW,EAAE,MAAM,6BAA6B,CAAC;AASzE,eAAO,MAAM,eAAe,EAAE,WAa7B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** `ListEntries` over `node:fs`: `readdir` with its file types, which `lstat` each entry, never following a link. */
|
|
2
|
+
import { readdirSync } from "node:fs";
|
|
3
|
+
import { codeOf } from "../../domain/text.js";
|
|
4
|
+
/** What a directory entry is, its link never followed. */
|
|
5
|
+
const kindOf = (d) => {
|
|
6
|
+
if (d.isSymbolicLink())
|
|
7
|
+
return "symlink";
|
|
8
|
+
if (d.isDirectory())
|
|
9
|
+
return "dir";
|
|
10
|
+
return d.isFile() ? "file" : "other";
|
|
11
|
+
};
|
|
12
|
+
export const nodeListEntries = (dir) => {
|
|
13
|
+
try {
|
|
14
|
+
return readdirSync(dir, { withFileTypes: true }).map((d) => ({
|
|
15
|
+
name: d.name,
|
|
16
|
+
kind: kindOf(d),
|
|
17
|
+
}));
|
|
18
|
+
}
|
|
19
|
+
catch (e) {
|
|
20
|
+
const code = codeOf(e);
|
|
21
|
+
if (code === "ENOENT" || code === "ENOTDIR")
|
|
22
|
+
return [];
|
|
23
|
+
throw e;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=list-entries.io.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-entries.io.js","sourceRoot":"","sources":["../../../src/adapters/node/list-entries.io.ts"],"names":[],"mappings":"AAAA,qHAAqH;AACrH,OAAO,EAAE,WAAW,EAAe,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,0DAA0D;AAC1D,MAAM,MAAM,GAAG,CAAC,CAAmB,EAAoB,EAAE;IACvD,IAAI,CAAC,CAAC,cAAc,EAAE;QAAE,OAAO,SAAS,CAAC;IACzC,IAAI,CAAC,CAAC,WAAW,EAAE;QAAE,OAAO,KAAK,CAAC;IAClC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAgB,CAC1C,GAAiB,EACI,EAAE;IACvB,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3D,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;SAChB,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACvD,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC,CAAC"}
|