@su-record/vibe 4.2.35 → 4.2.36
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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/dist/cli/common.js +4 -1
- package/dist/cli/common.js.map +1 -1
- package/dist/cli/heldout.js +10 -4
- package/dist/cli/heldout.js.map +1 -1
- package/dist/cli/human.js +8 -4
- package/dist/cli/human.js.map +1 -1
- package/dist/cli/internal.js +37 -24
- package/dist/cli/internal.js.map +1 -1
- package/dist/cli/ledger.js +67 -0
- package/dist/cli/ledger.js.map +1 -0
- package/dist/cli/map.js +5 -3
- package/dist/cli/map.js.map +1 -1
- package/dist/cli/memory.js +104 -74
- package/dist/cli/memory.js.map +1 -1
- package/dist/cli/risks.js +20 -3
- package/dist/cli/risks.js.map +1 -1
- package/dist/cli/session.js +4 -2
- package/dist/cli/session.js.map +1 -1
- package/dist/cli/setup.js +44 -13
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/work.js +73 -21
- package/dist/cli/work.js.map +1 -1
- package/dist/cli.js +18 -6
- package/dist/cli.js.map +1 -1
- package/dist/core/analyze.js +21 -7
- package/dist/core/analyze.js.map +1 -1
- package/dist/core/artifact-paths.js +14 -3
- package/dist/core/artifact-paths.js.map +1 -1
- package/dist/core/capabilities.js +69 -15
- package/dist/core/capabilities.js.map +1 -1
- package/dist/core/check-authorization.js +37 -0
- package/dist/core/check-authorization.js.map +1 -0
- package/dist/core/check-process.js +12 -4
- package/dist/core/check-process.js.map +1 -1
- package/dist/core/check-report.js +66 -0
- package/dist/core/check-report.js.map +1 -0
- package/dist/core/check.js +59 -71
- package/dist/core/check.js.map +1 -1
- package/dist/core/checks/changed.js +20 -6
- package/dist/core/checks/changed.js.map +1 -1
- package/dist/core/checks/eval.js +35 -10
- package/dist/core/checks/eval.js.map +1 -1
- package/dist/core/checks/file.js +26 -23
- package/dist/core/checks/file.js.map +1 -1
- package/dist/core/checks/fileRules.js +42 -16
- package/dist/core/checks/fileRules.js.map +1 -1
- package/dist/core/checks/http.js +35 -34
- package/dist/core/checks/http.js.map +1 -1
- package/dist/core/checks/packs.js +1 -1
- package/dist/core/checks/packs.js.map +1 -1
- package/dist/core/checks/review.js +75 -40
- package/dist/core/checks/review.js.map +1 -1
- package/dist/core/checks/run.js +5 -2
- package/dist/core/checks/run.js.map +1 -1
- package/dist/core/checks/schema.js +25 -0
- package/dist/core/checks/schema.js.map +1 -0
- package/dist/core/checks/source.js +11 -6
- package/dist/core/checks/source.js.map +1 -1
- package/dist/core/config.js +9 -2
- package/dist/core/config.js.map +1 -1
- package/dist/core/consent.js +24 -16
- package/dist/core/consent.js.map +1 -1
- package/dist/core/context-notes.js +15 -7
- package/dist/core/context-notes.js.map +1 -1
- package/dist/core/context.js +24 -12
- package/dist/core/context.js.map +1 -1
- package/dist/core/conventions.js +22 -9
- package/dist/core/conventions.js.map +1 -1
- package/dist/core/docs/cfb.js +81 -45
- package/dist/core/docs/cfb.js.map +1 -1
- package/dist/core/docs/html.js +14 -3
- package/dist/core/docs/html.js.map +1 -1
- package/dist/core/docs/hwp.js +44 -22
- package/dist/core/docs/hwp.js.map +1 -1
- package/dist/core/docs/office.js +20 -10
- package/dist/core/docs/office.js.map +1 -1
- package/dist/core/docs/pdf.js +10 -4
- package/dist/core/docs/pdf.js.map +1 -1
- package/dist/core/docs/read.js +32 -24
- package/dist/core/docs/read.js.map +1 -1
- package/dist/core/docs/zip.js +32 -15
- package/dist/core/docs/zip.js.map +1 -1
- package/dist/core/evidence.js +17 -7
- package/dist/core/evidence.js.map +1 -1
- package/dist/core/failure-message.js +35 -13
- package/dist/core/failure-message.js.map +1 -1
- package/dist/core/failure.js +49 -14
- package/dist/core/failure.js.map +1 -1
- package/dist/core/github.js +3 -1
- package/dist/core/github.js.map +1 -1
- package/dist/core/handoff.js +20 -7
- package/dist/core/handoff.js.map +1 -1
- package/dist/core/heldout-run.js +6 -3
- package/dist/core/heldout-run.js.map +1 -1
- package/dist/core/heldout.js +24 -13
- package/dist/core/heldout.js.map +1 -1
- package/dist/core/inbox.js +3 -1
- package/dist/core/inbox.js.map +1 -1
- package/dist/core/inputs.js +6 -3
- package/dist/core/inputs.js.map +1 -1
- package/dist/core/inspect.js +61 -20
- package/dist/core/inspect.js.map +1 -1
- package/dist/core/intent.js +35 -13
- package/dist/core/intent.js.map +1 -1
- package/dist/core/knowledge-find.js +31 -12
- package/dist/core/knowledge-find.js.map +1 -1
- package/dist/core/knowledge.js +22 -12
- package/dist/core/knowledge.js.map +1 -1
- package/dist/core/lang.js +5 -2
- package/dist/core/lang.js.map +1 -1
- package/dist/core/ledger.js +44 -20
- package/dist/core/ledger.js.map +1 -1
- package/dist/core/locations.js +12 -0
- package/dist/core/locations.js.map +1 -0
- package/dist/core/map/imports.js +20 -9
- package/dist/core/map/imports.js.map +1 -1
- package/dist/core/map/index.js +28 -13
- package/dist/core/map/index.js.map +1 -1
- package/dist/core/map/symbols.js +27 -12
- package/dist/core/map/symbols.js.map +1 -1
- package/dist/core/output-capture.js +7 -4
- package/dist/core/output-capture.js.map +1 -1
- package/dist/core/paths.js +2 -1
- package/dist/core/paths.js.map +1 -1
- package/dist/core/performance.js +43 -17
- package/dist/core/performance.js.map +1 -1
- package/dist/core/profile.js +6 -3
- package/dist/core/profile.js.map +1 -1
- package/dist/core/reader.js +32 -16
- package/dist/core/reader.js.map +1 -1
- package/dist/core/readerSession.js +34 -14
- package/dist/core/readerSession.js.map +1 -1
- package/dist/core/recent.js +20 -6
- package/dist/core/recent.js.map +1 -1
- package/dist/core/regress.js +21 -12
- package/dist/core/regress.js.map +1 -1
- package/dist/core/repair.js +22 -4
- package/dist/core/repair.js.map +1 -1
- package/dist/core/research-queries.js +85 -0
- package/dist/core/research-queries.js.map +1 -0
- package/dist/core/research.js +89 -88
- package/dist/core/research.js.map +1 -1
- package/dist/core/results.js +15 -6
- package/dist/core/results.js.map +1 -1
- package/dist/core/risk-signals.js +53 -15
- package/dist/core/risk-signals.js.map +1 -1
- package/dist/core/run-id.js +10 -6
- package/dist/core/run-id.js.map +1 -1
- package/dist/core/scenarios.js +91 -60
- package/dist/core/scenarios.js.map +1 -1
- package/dist/core/session.js +3 -2
- package/dist/core/session.js.map +1 -1
- package/dist/core/size.js +28 -8
- package/dist/core/size.js.map +1 -1
- package/dist/core/skills.js +66 -28
- package/dist/core/skills.js.map +1 -1
- package/dist/core/skillsmp.js +26 -12
- package/dist/core/skillsmp.js.map +1 -1
- package/dist/core/source-basis.js +21 -9
- package/dist/core/source-basis.js.map +1 -1
- package/dist/core/status.js +26 -13
- package/dist/core/status.js.map +1 -1
- package/dist/core/table.js +8 -1
- package/dist/core/table.js.map +1 -1
- package/dist/core/tokens.js +20 -10
- package/dist/core/tokens.js.map +1 -1
- package/dist/core/tree.js +26 -16
- package/dist/core/tree.js.map +1 -1
- package/dist/core/verification-plan.js +24 -8
- package/dist/core/verification-plan.js.map +1 -1
- package/dist/core/verification.js +14 -7
- package/dist/core/verification.js.map +1 -1
- package/dist/core/view.js +93 -44
- package/dist/core/view.js.map +1 -1
- package/dist/install/global.js +37 -18
- package/dist/install/global.js.map +1 -1
- package/dist/install/hooks.js +17 -8
- package/dist/install/hooks.js.map +1 -1
- package/dist/install/manifest.js +11 -0
- package/dist/install/manifest.js.map +1 -0
- package/dist/install/mcpb.js +52 -23
- package/dist/install/mcpb.js.map +1 -1
- package/dist/install/plugin.js +73 -33
- package/dist/install/plugin.js.map +1 -1
- package/dist/install/project.js +8 -7
- package/dist/install/project.js.map +1 -1
- package/dist/install/register.js +83 -48
- package/dist/install/register.js.map +1 -1
- package/dist/install/tree.js +27 -11
- package/dist/install/tree.js.map +1 -1
- package/dist/install/update.js +46 -20
- package/dist/install/update.js.map +1 -1
- package/hooks/code-map.cjs +22 -9
- package/hooks/journal.cjs +18 -16
- package/hooks/knowledge-auto.cjs +55 -21
- package/hooks/knowledge-journal.cjs +47 -20
- package/hooks/knowledge-projects.cjs +50 -21
- package/hooks/knowledge-recall.cjs +16 -6
- package/hooks/knowledge-upkeep.cjs +22 -5
- package/hooks/locations.cjs +35 -0
- package/hooks/notify.js +52 -24
- package/hooks/obsidian.cjs +17 -7
- package/hooks/private-store.cjs +25 -10
- package/hooks/retest.cjs +39 -16
- package/hooks/session-context.cjs +30 -13
- package/hooks/session-files.cjs +44 -21
- package/hooks/session-repair.cjs +26 -11
- package/hooks/session-state.cjs +78 -38
- package/hooks/session.js +19 -8
- package/hooks/slice-command.cjs +38 -17
- package/hooks/slice-guard.cjs +20 -6
- package/hooks/slice-store.cjs +25 -12
- package/mcpb/server/index.js +40 -12
- package/package.json +1 -1
package/dist/core/conventions.js
CHANGED
|
@@ -4,9 +4,20 @@ import { readLedger } from './ledger.js';
|
|
|
4
4
|
import { vibePath } from './paths.js';
|
|
5
5
|
import { listRegressions } from './regress.js';
|
|
6
6
|
import { ensureDir, readJson, readText, writeAtomic } from './store.js';
|
|
7
|
-
const LINT_FILES = [
|
|
8
|
-
|
|
7
|
+
const LINT_FILES = [
|
|
8
|
+
'.eslintrc.json', '.eslintrc.js', '.eslintrc.cjs', '.eslintrc.yml', '.eslintrc.yaml', '.eslintrc',
|
|
9
|
+
'eslint.config.js', 'eslint.config.mjs', 'eslint.config.cjs', 'eslint.config.ts',
|
|
10
|
+
];
|
|
11
|
+
const FORMAT_FILES = [
|
|
12
|
+
'.prettierrc', '.prettierrc.json', '.prettierrc.js', '.prettierrc.cjs', '.prettierrc.yml', '.prettierrc.yaml',
|
|
13
|
+
'prettier.config.js', 'biome.json', '.editorconfig', 'rustfmt.toml', '.golangci.yml', '.golangci.yaml',
|
|
14
|
+
];
|
|
9
15
|
const TS_FLAGS = ['strict', 'noUncheckedIndexedAccess', 'noImplicitReturns', 'noFallthroughCasesInSwitch', 'exactOptionalPropertyTypes'];
|
|
16
|
+
const PACKAGE_SCRIPTS = ['test', 'lint', 'build'];
|
|
17
|
+
const AGENT_DOCS = ['AGENTS.md', 'CLAUDE.md'];
|
|
18
|
+
/** A review line must recur in this many `check` runs to count as a convention. */
|
|
19
|
+
const MIN_REVIEW_RUNS = 2;
|
|
20
|
+
const REGRESSIONS_DIR = '.vibe/regressions';
|
|
10
21
|
function existingFiles(root, names) {
|
|
11
22
|
return names.filter((n) => fs.existsSync(path.join(root, n)));
|
|
12
23
|
}
|
|
@@ -19,8 +30,9 @@ function lintLines(root) {
|
|
|
19
30
|
if (fs.existsSync(path.join(root, 'ruff.toml')))
|
|
20
31
|
out.push({ text: 'Python lint config present (ruff.toml)', source: 'ruff.toml' });
|
|
21
32
|
const pyproject = readText(path.join(root, 'pyproject.toml'));
|
|
22
|
-
if (pyproject && /\[tool\.(ruff|black)\]/.test(pyproject))
|
|
33
|
+
if (pyproject && /\[tool\.(ruff|black)\]/.test(pyproject)) {
|
|
23
34
|
out.push({ text: 'Python lint/format config in pyproject.toml ([tool.ruff]/[tool.black])', source: 'pyproject.toml' });
|
|
35
|
+
}
|
|
24
36
|
return out;
|
|
25
37
|
}
|
|
26
38
|
function tsconfigLines(root) {
|
|
@@ -56,7 +68,7 @@ function scriptLines(root) {
|
|
|
56
68
|
const pkg = readJson(path.join(root, 'package.json'));
|
|
57
69
|
const scripts = pkg?.scripts ?? {};
|
|
58
70
|
const out = [];
|
|
59
|
-
for (const key of
|
|
71
|
+
for (const key of PACKAGE_SCRIPTS) {
|
|
60
72
|
const cmd = scripts[key];
|
|
61
73
|
if (cmd)
|
|
62
74
|
out.push({ text: `package.json script ${key}: "${cmd}"`, source: 'package.json' });
|
|
@@ -65,7 +77,7 @@ function scriptLines(root) {
|
|
|
65
77
|
}
|
|
66
78
|
function headingLines(root) {
|
|
67
79
|
const out = [];
|
|
68
|
-
for (const name of
|
|
80
|
+
for (const name of AGENT_DOCS) {
|
|
69
81
|
const text = readText(path.join(root, name));
|
|
70
82
|
const heading = text?.split('\n').find((l) => l.trim().startsWith('#'));
|
|
71
83
|
if (heading)
|
|
@@ -100,11 +112,11 @@ function reviewLines(root) {
|
|
|
100
112
|
}
|
|
101
113
|
return byLine;
|
|
102
114
|
}
|
|
103
|
-
/** A REJECT reason or a KEEP line that recurs across
|
|
115
|
+
/** A REJECT reason or a KEEP line that recurs across several `check` runs — the review is telling us something twice. */
|
|
104
116
|
function recurringReviewLines(root) {
|
|
105
117
|
const out = [];
|
|
106
118
|
for (const [line, { kind, runs }] of reviewLines(root)) {
|
|
107
|
-
if (runs.size <
|
|
119
|
+
if (runs.size < MIN_REVIEW_RUNS)
|
|
108
120
|
continue;
|
|
109
121
|
const label = kind === 'keep' ? 'KEEP line' : 'REJECT reason';
|
|
110
122
|
out.push({ text: `recurring ${label}: ${line}`, source: `check ${[...runs].sort().join(', ')}` });
|
|
@@ -114,7 +126,7 @@ function recurringReviewLines(root) {
|
|
|
114
126
|
function regressionLines(root) {
|
|
115
127
|
return listRegressions(root).map((r) => {
|
|
116
128
|
const title = /^\[regression\]\s*(.+?)\s*—\s*source/.exec(r.then)?.[1] ?? r.then;
|
|
117
|
-
return { text: `regression: ${title}`, source:
|
|
129
|
+
return { text: `regression: ${title}`, source: `${REGRESSIONS_DIR}/${r.id}.yaml` };
|
|
118
130
|
});
|
|
119
131
|
}
|
|
120
132
|
function decisionLines(root) {
|
|
@@ -126,8 +138,9 @@ function decisionLines(root) {
|
|
|
126
138
|
export function learnConventions(root) {
|
|
127
139
|
return [...recurringReviewLines(root), ...regressionLines(root), ...decisionLines(root)];
|
|
128
140
|
}
|
|
141
|
+
export const CONVENTIONS_FILE = 'conventions.md';
|
|
129
142
|
export function conventionsPath(root) {
|
|
130
|
-
return vibePath(root, 'knowledge',
|
|
143
|
+
return vibePath(root, 'knowledge', CONVENTIONS_FILE);
|
|
131
144
|
}
|
|
132
145
|
function formatLine(l) {
|
|
133
146
|
return `- ${l.text} — source: ${l.source}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conventions.js","sourceRoot":"","sources":["../../src/core/conventions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAYxE,MAAM,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"conventions.js","sourceRoot":"","sources":["../../src/core/conventions.ts"],"names":[],"mappings":"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"}
|
package/dist/core/docs/cfb.js
CHANGED
|
@@ -2,71 +2,107 @@
|
|
|
2
2
|
* OLE2 Compound File Binary — the container of .hwp (and old .doc/.xls). Just enough to read
|
|
3
3
|
* named streams: header, FAT chain, directory entries, mini stream for small streams.
|
|
4
4
|
*/
|
|
5
|
-
const
|
|
6
|
-
const
|
|
5
|
+
const SIGNATURE = Buffer.from([0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1]);
|
|
6
|
+
const END_OF_CHAIN = 0xfffffffe;
|
|
7
|
+
/** Header field offsets (MS-CFB 2.2). */
|
|
8
|
+
const SECTOR_SHIFT_AT = 30;
|
|
9
|
+
const MINI_SECTOR_SHIFT_AT = 32;
|
|
10
|
+
const DIR_START_AT = 48;
|
|
11
|
+
const MINI_CUTOFF_AT = 56;
|
|
12
|
+
const MINI_FAT_START_AT = 60;
|
|
13
|
+
const MINI_FAT_COUNT_AT = 64;
|
|
14
|
+
const DIFAT_START_AT = 68;
|
|
15
|
+
const DIFAT_IN_HEADER_AT = 76;
|
|
16
|
+
const DIFAT_IN_HEADER_COUNT = 109;
|
|
17
|
+
const UINT32_BYTES = 4;
|
|
18
|
+
/** Directory entry layout: 128 bytes each. */
|
|
19
|
+
const DIR_ENTRY_BYTES = 128;
|
|
20
|
+
const ENTRY_NAME_LEN_AT = 64;
|
|
21
|
+
const ENTRY_TYPE_AT = 66;
|
|
22
|
+
const ENTRY_START_AT = 116;
|
|
23
|
+
const ENTRY_SIZE_AT = 120;
|
|
24
|
+
const ENTRY_TYPE_STREAM = 2;
|
|
25
|
+
const ENTRY_TYPE_ROOT = 5;
|
|
26
|
+
/** The sector index 0 starts after the one-sector header. */
|
|
27
|
+
const HEADER_SECTORS = 1;
|
|
28
|
+
/** A name length counts the UTF-16 terminator. */
|
|
29
|
+
const NAME_TERMINATOR_BYTES = 2;
|
|
7
30
|
function chain(fat, start, max) {
|
|
8
31
|
const out = [];
|
|
9
32
|
let s = start;
|
|
10
|
-
while (s <
|
|
33
|
+
while (s < END_OF_CHAIN && s < fat.length && out.length <= max) {
|
|
11
34
|
out.push(s);
|
|
12
35
|
s = fat[s];
|
|
13
36
|
}
|
|
14
37
|
return out;
|
|
15
38
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const s = buf.readUInt32LE(76 + i * 4);
|
|
30
|
-
if (s < ENDOFCHAIN)
|
|
31
|
-
fatSectors.push(s);
|
|
39
|
+
function uint32Table(buf) {
|
|
40
|
+
const table = new Uint32Array(buf.length / UINT32_BYTES);
|
|
41
|
+
for (let i = 0; i < table.length; i += 1)
|
|
42
|
+
table[i] = buf.readUInt32LE(i * UINT32_BYTES);
|
|
43
|
+
return table;
|
|
44
|
+
}
|
|
45
|
+
/** The sector numbers of the FAT: those listed in the header, then those in the DIFAT sector chain. */
|
|
46
|
+
function fatSectorList(buf, sector, sectorSize) {
|
|
47
|
+
const out = [];
|
|
48
|
+
for (let i = 0; i < DIFAT_IN_HEADER_COUNT; i += 1) {
|
|
49
|
+
const s = buf.readUInt32LE(DIFAT_IN_HEADER_AT + i * UINT32_BYTES);
|
|
50
|
+
if (s < END_OF_CHAIN)
|
|
51
|
+
out.push(s);
|
|
32
52
|
}
|
|
33
|
-
let difat =
|
|
34
|
-
while (difat <
|
|
53
|
+
let difat = buf.readUInt32LE(DIFAT_START_AT);
|
|
54
|
+
while (difat < END_OF_CHAIN) {
|
|
35
55
|
const d = sector(difat);
|
|
36
|
-
for (let i = 0; i < sectorSize /
|
|
37
|
-
const s = d.readUInt32LE(i *
|
|
38
|
-
if (s <
|
|
39
|
-
|
|
56
|
+
for (let i = 0; i < sectorSize / UINT32_BYTES - 1; i += 1) {
|
|
57
|
+
const s = d.readUInt32LE(i * UINT32_BYTES);
|
|
58
|
+
if (s < END_OF_CHAIN)
|
|
59
|
+
out.push(s);
|
|
40
60
|
}
|
|
41
|
-
difat = d.readUInt32LE(sectorSize -
|
|
61
|
+
difat = d.readUInt32LE(sectorSize - UINT32_BYTES);
|
|
42
62
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
fatView[i] = fatBuf.readUInt32LE(i * 4);
|
|
47
|
-
const readChain = (start, size) => Buffer.concat(chain(fatView, start, buf.length / sectorSize).map(sector)).subarray(0, size);
|
|
48
|
-
const dirBuf = readChain(dirStart, Number.MAX_SAFE_INTEGER);
|
|
63
|
+
return out;
|
|
64
|
+
}
|
|
65
|
+
function directoryEntries(dirBuf) {
|
|
49
66
|
const entries = [];
|
|
50
|
-
for (let off = 0; off +
|
|
51
|
-
const nameLen = dirBuf.readUInt16LE(off +
|
|
67
|
+
for (let off = 0; off + DIR_ENTRY_BYTES <= dirBuf.length; off += DIR_ENTRY_BYTES) {
|
|
68
|
+
const nameLen = dirBuf.readUInt16LE(off + ENTRY_NAME_LEN_AT);
|
|
52
69
|
if (nameLen === 0)
|
|
53
70
|
continue;
|
|
54
|
-
entries.push({
|
|
71
|
+
entries.push({
|
|
72
|
+
name: dirBuf.subarray(off, off + nameLen - NAME_TERMINATOR_BYTES).toString('utf16le'),
|
|
73
|
+
type: dirBuf[off + ENTRY_TYPE_AT],
|
|
74
|
+
start: dirBuf.readUInt32LE(off + ENTRY_START_AT),
|
|
75
|
+
size: dirBuf.readUInt32LE(off + ENTRY_SIZE_AT),
|
|
76
|
+
});
|
|
55
77
|
}
|
|
56
|
-
|
|
78
|
+
return entries;
|
|
79
|
+
}
|
|
80
|
+
export function readCfb(buf) {
|
|
81
|
+
if (!buf.subarray(0, SIGNATURE.length).equals(SIGNATURE))
|
|
82
|
+
throw new Error('not an OLE compound file');
|
|
83
|
+
const sectorSize = 1 << buf.readUInt16LE(SECTOR_SHIFT_AT);
|
|
84
|
+
const miniSize = 1 << buf.readUInt16LE(MINI_SECTOR_SHIFT_AT);
|
|
85
|
+
const miniCutoff = buf.readUInt32LE(MINI_CUTOFF_AT);
|
|
86
|
+
const miniFatStart = buf.readUInt32LE(MINI_FAT_START_AT);
|
|
87
|
+
const miniFatCount = buf.readUInt32LE(MINI_FAT_COUNT_AT);
|
|
88
|
+
const sector = (n) => buf.subarray((n + HEADER_SECTORS) * sectorSize, (n + HEADER_SECTORS + 1) * sectorSize);
|
|
89
|
+
const fat = uint32Table(Buffer.concat(fatSectorList(buf, sector, sectorSize).map(sector)));
|
|
90
|
+
const readChain = (start, size) => {
|
|
91
|
+
return Buffer.concat(chain(fat, start, buf.length / sectorSize).map(sector)).subarray(0, size);
|
|
92
|
+
};
|
|
93
|
+
const entries = directoryEntries(readChain(buf.readUInt32LE(DIR_START_AT), Number.MAX_SAFE_INTEGER));
|
|
94
|
+
const rootEntry = entries.find((e) => e.type === ENTRY_TYPE_ROOT);
|
|
57
95
|
const miniStream = rootEntry ? readChain(rootEntry.start, rootEntry.size) : Buffer.alloc(0);
|
|
58
|
-
const
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
96
|
+
const miniFat = uint32Table(miniFatCount > 0 ? readChain(miniFatStart, miniFatCount * sectorSize) : Buffer.alloc(0));
|
|
97
|
+
const readMini = (e) => {
|
|
98
|
+
const sectors = chain(miniFat, e.start, miniStream.length / miniSize);
|
|
99
|
+
return Buffer.concat(sectors.map((s) => miniStream.subarray(s * miniSize, (s + 1) * miniSize))).subarray(0, e.size);
|
|
100
|
+
};
|
|
62
101
|
const out = new Map();
|
|
63
102
|
for (const e of entries) {
|
|
64
|
-
if (e.type !==
|
|
103
|
+
if (e.type !== ENTRY_TYPE_STREAM)
|
|
65
104
|
continue;
|
|
66
|
-
|
|
67
|
-
out.set(e.name, Buffer.concat(chain(miniFat, e.start, miniStream.length / miniSize).map((s) => miniStream.subarray(s * miniSize, (s + 1) * miniSize))).subarray(0, e.size));
|
|
68
|
-
else
|
|
69
|
-
out.set(e.name, readChain(e.start, e.size));
|
|
105
|
+
out.set(e.name, e.size < miniCutoff ? readMini(e) : readChain(e.start, e.size));
|
|
70
106
|
}
|
|
71
107
|
return out;
|
|
72
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cfb.js","sourceRoot":"","sources":["../../../src/core/docs/cfb.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,
|
|
1
|
+
{"version":3,"file":"cfb.js","sourceRoot":"","sources":["../../../src/core/docs/cfb.ts"],"names":[],"mappings":"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"}
|
package/dist/core/docs/html.js
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
import { decodeEntities } from './xml.js';
|
|
2
|
+
const DROPPED_ELEMENTS = /<(script|style|noscript|svg)\b[\s\S]*?<\/\1>/gi;
|
|
3
|
+
const COMMENTS = /<!--[\s\S]*?-->/g;
|
|
4
|
+
const CELL_END = /<\/(td|th)>/gi;
|
|
5
|
+
const BLOCK_END = /<\/(tr|p|div|li|h[1-6]|section|article|header|footer|blockquote|pre|table)>/gi;
|
|
6
|
+
const LINE_BREAK = /<br\s*\/?>/gi;
|
|
7
|
+
const CELL_SEPARATOR = ' | ';
|
|
2
8
|
/** HTML as content: scripts and styles dropped, block tags become line breaks, tables become rows of ` | `. */
|
|
3
9
|
export function htmlText(html) {
|
|
4
|
-
let s = html.replace(
|
|
5
|
-
s = s.replace(
|
|
10
|
+
let s = html.replace(DROPPED_ELEMENTS, '').replace(COMMENTS, '');
|
|
11
|
+
s = s.replace(CELL_END, CELL_SEPARATOR).replace(BLOCK_END, '\n').replace(LINE_BREAK, '\n');
|
|
6
12
|
s = s.replace(/<li\b[^>]*>/gi, '- ').replace(/<[^>]+>/g, '');
|
|
7
|
-
return decodeEntities(s)
|
|
13
|
+
return decodeEntities(s)
|
|
14
|
+
.split('\n')
|
|
15
|
+
.map((l) => l.replace(/\s+/g, ' ').replace(/ \| $/, '').trim())
|
|
16
|
+
.filter((l, i, all) => l || (i > 0 && all[i - 1]))
|
|
17
|
+
.join('\n')
|
|
18
|
+
.trim();
|
|
8
19
|
}
|
|
9
20
|
//# sourceMappingURL=html.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../../src/core/docs/html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,+GAA+G;AAC/G,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../../src/core/docs/html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,gBAAgB,GAAG,gDAAgD,CAAC;AAC1E,MAAM,QAAQ,GAAG,kBAAkB,CAAC;AACpC,MAAM,QAAQ,GAAG,eAAe,CAAC;AACjC,MAAM,SAAS,GAAG,+EAA+E,CAAC;AAClG,MAAM,UAAU,GAAG,cAAc,CAAC;AAClC,MAAM,cAAc,GAAG,KAAK,CAAC;AAE7B,+GAA+G;AAC/G,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACjE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC3F,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC7D,OAAO,cAAc,CAAC,CAAC,CAAC;SACrB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;SAC9D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACjD,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE,CAAC;AACZ,CAAC"}
|
package/dist/core/docs/hwp.js
CHANGED
|
@@ -7,9 +7,13 @@ import { readCfb } from './cfb.js';
|
|
|
7
7
|
* file whose BodyText/Section streams are raw-deflated records; paragraph text (tag 67) is UTF-16
|
|
8
8
|
* with control characters — inline controls take 8 bytes, 13 ends a paragraph, 10 breaks a line.
|
|
9
9
|
*/
|
|
10
|
+
const HWPX_SECTION = /^Contents\/section\d+\.xml$/;
|
|
11
|
+
const HWP_SECTION = /^BodyText\/Section\d+$/;
|
|
12
|
+
const HWP_SIGNATURE = 'HWP Document File';
|
|
13
|
+
const FILE_HEADER_STREAM = 'FileHeader';
|
|
10
14
|
export function readHwpx(buf) {
|
|
11
15
|
const zip = readZip(buf);
|
|
12
|
-
const sections = [...zip.keys()].filter((k) =>
|
|
16
|
+
const sections = [...zip.keys()].filter((k) => HWPX_SECTION.test(k)).sort((a, b) => Number(/\d+/.exec(a)[0]) - Number(/\d+/.exec(b)[0]));
|
|
13
17
|
const out = [];
|
|
14
18
|
for (const file of sections) {
|
|
15
19
|
const xml = zip.get(file).toString('utf-8');
|
|
@@ -21,46 +25,64 @@ export function readHwpx(buf) {
|
|
|
21
25
|
}
|
|
22
26
|
return out;
|
|
23
27
|
}
|
|
28
|
+
/** Record tag of paragraph text. */
|
|
24
29
|
const PARA_TEXT = 67;
|
|
30
|
+
/** Control characters inside paragraph text (UTF-16 code units). */
|
|
31
|
+
const CHAR_TAB = 9;
|
|
32
|
+
const CHAR_LINE_BREAK = 10;
|
|
33
|
+
const CHAR_PARA_END = 13;
|
|
34
|
+
const FIRST_PRINTABLE = 32;
|
|
35
|
+
const UNIT_BYTES = 2;
|
|
36
|
+
/** An extended or inline control is the control unit plus seven more units. */
|
|
37
|
+
const CONTROL_BYTES = 16;
|
|
38
|
+
/** Record header: 10-bit tag, 12-bit size from bit 20; size 0xfff means a 32-bit size follows. */
|
|
39
|
+
const RECORD_HEADER_BYTES = 4;
|
|
40
|
+
const TAG_MASK = 0x3ff;
|
|
41
|
+
const SIZE_SHIFT = 20;
|
|
42
|
+
const SIZE_ESCAPE = 0xfff;
|
|
43
|
+
/** FileHeader: flags at byte 36; bit 0 compressed, bit 1 password. */
|
|
44
|
+
const FLAGS_AT = 36;
|
|
45
|
+
const FLAG_COMPRESSED = 0x1;
|
|
46
|
+
const FLAG_PASSWORD = 0x2;
|
|
25
47
|
const EXTENDED = new Set([1, 2, 3, 11, 12, 13, 14, 15, 16, 17, 18, 21, 22, 23]);
|
|
26
48
|
const INLINE = new Set([4, 5, 6, 7, 8, 9, 19, 20]);
|
|
27
49
|
function paragraphText(data) {
|
|
28
50
|
let text = '';
|
|
29
51
|
for (let i = 0; i + 1 < data.length;) {
|
|
30
52
|
const code = data.readUInt16LE(i);
|
|
31
|
-
if (code ===
|
|
53
|
+
if (code === CHAR_PARA_END)
|
|
32
54
|
break;
|
|
33
|
-
if (code ===
|
|
55
|
+
if (code === CHAR_LINE_BREAK) {
|
|
34
56
|
text += '\n';
|
|
35
|
-
i +=
|
|
57
|
+
i += UNIT_BYTES;
|
|
36
58
|
}
|
|
37
|
-
else if (code ===
|
|
59
|
+
else if (code === CHAR_TAB) {
|
|
38
60
|
text += '\t';
|
|
39
|
-
i +=
|
|
61
|
+
i += UNIT_BYTES;
|
|
40
62
|
}
|
|
41
63
|
else if (EXTENDED.has(code) || INLINE.has(code)) {
|
|
42
|
-
i +=
|
|
64
|
+
i += CONTROL_BYTES;
|
|
43
65
|
}
|
|
44
|
-
else if (code <
|
|
45
|
-
i +=
|
|
66
|
+
else if (code < FIRST_PRINTABLE) {
|
|
67
|
+
i += UNIT_BYTES;
|
|
46
68
|
}
|
|
47
69
|
else {
|
|
48
70
|
text += String.fromCharCode(code);
|
|
49
|
-
i +=
|
|
71
|
+
i += UNIT_BYTES;
|
|
50
72
|
}
|
|
51
73
|
}
|
|
52
74
|
return text;
|
|
53
75
|
}
|
|
54
76
|
function sectionParagraphs(raw) {
|
|
55
77
|
const out = [];
|
|
56
|
-
for (let p = 0; p +
|
|
78
|
+
for (let p = 0; p + RECORD_HEADER_BYTES <= raw.length;) {
|
|
57
79
|
const head = raw.readUInt32LE(p);
|
|
58
|
-
const tag = head &
|
|
59
|
-
let size = head >>>
|
|
60
|
-
p +=
|
|
61
|
-
if (size ===
|
|
80
|
+
const tag = head & TAG_MASK;
|
|
81
|
+
let size = head >>> SIZE_SHIFT;
|
|
82
|
+
p += RECORD_HEADER_BYTES;
|
|
83
|
+
if (size === SIZE_ESCAPE) {
|
|
62
84
|
size = raw.readUInt32LE(p);
|
|
63
|
-
p +=
|
|
85
|
+
p += RECORD_HEADER_BYTES;
|
|
64
86
|
}
|
|
65
87
|
if (tag === PARA_TEXT) {
|
|
66
88
|
const text = paragraphText(raw.subarray(p, p + size)).trim();
|
|
@@ -73,14 +95,14 @@ function sectionParagraphs(raw) {
|
|
|
73
95
|
}
|
|
74
96
|
export function readHwp(buf) {
|
|
75
97
|
const streams = readCfb(buf);
|
|
76
|
-
const header = streams.get(
|
|
77
|
-
if (!header || !header.subarray(0,
|
|
98
|
+
const header = streams.get(FILE_HEADER_STREAM);
|
|
99
|
+
if (!header || !header.subarray(0, HWP_SIGNATURE.length).toString('latin1').startsWith(HWP_SIGNATURE))
|
|
78
100
|
throw new Error('not an HWP 5 file');
|
|
79
|
-
const flags = header.readUInt32LE(
|
|
80
|
-
if (flags &
|
|
101
|
+
const flags = header.readUInt32LE(FLAGS_AT);
|
|
102
|
+
if (flags & FLAG_PASSWORD)
|
|
81
103
|
throw new Error('the document is password-protected');
|
|
82
|
-
const compressed = (flags &
|
|
83
|
-
const names = [...streams.keys()].filter((k) =>
|
|
104
|
+
const compressed = (flags & FLAG_COMPRESSED) !== 0;
|
|
105
|
+
const names = [...streams.keys()].filter((k) => HWP_SECTION.test(k)).sort((a, b) => Number(/\d+$/.exec(a)[0]) - Number(/\d+$/.exec(b)[0]));
|
|
84
106
|
const out = [];
|
|
85
107
|
for (const name of names) {
|
|
86
108
|
const raw = compressed ? zlib.inflateRawSync(streams.get(name)) : streams.get(name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hwp.js","sourceRoot":"","sources":["../../../src/core/docs/hwp.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,QAAQ,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"hwp.js","sourceRoot":"","sources":["../../../src/core/docs/hwp.ts"],"names":[],"mappings":"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"}
|
package/dist/core/docs/office.js
CHANGED
|
@@ -1,18 +1,27 @@
|
|
|
1
1
|
import { readZip } from './zip.js';
|
|
2
2
|
import { attr, bodies, decodeEntities, elements, textOf } from './xml.js';
|
|
3
|
+
const SHARED_STRINGS_FILE = 'xl/sharedStrings.xml';
|
|
4
|
+
const WORKBOOK_FILE = 'xl/workbook.xml';
|
|
5
|
+
const WORKBOOK_RELS_FILE = 'xl/_rels/workbook.xml.rels';
|
|
6
|
+
const DOCX_BODY_FILE = 'word/document.xml';
|
|
7
|
+
const PPTX_SLIDE_FILE = /^ppt\/slides\/slide(\d+)\.xml$/;
|
|
8
|
+
const DEFAULT_SHEET_NAME = 'Sheet';
|
|
9
|
+
const ALPHABET_SIZE = 26;
|
|
10
|
+
/** Char code of 'A' minus one, so column A is 1. */
|
|
11
|
+
const COLUMN_CODE_BASE = 64;
|
|
3
12
|
function colIndex(ref) {
|
|
4
13
|
let n = 0;
|
|
5
14
|
for (const ch of ref.replace(/\d+/g, ''))
|
|
6
|
-
n = n *
|
|
15
|
+
n = n * ALPHABET_SIZE + (ch.charCodeAt(0) - COLUMN_CODE_BASE);
|
|
7
16
|
return n - 1;
|
|
8
17
|
}
|
|
9
18
|
function sharedStrings(zip) {
|
|
10
|
-
const xml = zip.get(
|
|
19
|
+
const xml = zip.get(SHARED_STRINGS_FILE)?.toString('utf-8') ?? '';
|
|
11
20
|
return bodies(xml, 'si').map((si) => textOf(si, 't'));
|
|
12
21
|
}
|
|
13
22
|
function sheetFiles(zip) {
|
|
14
|
-
const workbook = zip.get(
|
|
15
|
-
const rels = zip.get(
|
|
23
|
+
const workbook = zip.get(WORKBOOK_FILE)?.toString('utf-8') ?? '';
|
|
24
|
+
const rels = zip.get(WORKBOOK_RELS_FILE)?.toString('utf-8') ?? '';
|
|
16
25
|
const targets = new Map();
|
|
17
26
|
for (const r of elements(rels, 'Relationship')) {
|
|
18
27
|
const id = attr(r.attrs, 'Id');
|
|
@@ -22,7 +31,7 @@ function sheetFiles(zip) {
|
|
|
22
31
|
}
|
|
23
32
|
return elements(workbook, 'sheet').map((s) => {
|
|
24
33
|
const rid = attr(s.attrs, 'r:id') ?? '';
|
|
25
|
-
return { name: attr(s.attrs, 'name') ??
|
|
34
|
+
return { name: attr(s.attrs, 'name') ?? DEFAULT_SHEET_NAME, file: targets.get(rid) ?? '' };
|
|
26
35
|
}).filter((s) => s.file);
|
|
27
36
|
}
|
|
28
37
|
function cellValue(attrs, body, strings) {
|
|
@@ -62,20 +71,18 @@ export function readXlsx(buf) {
|
|
|
62
71
|
});
|
|
63
72
|
}
|
|
64
73
|
export function readDocx(buf) {
|
|
65
|
-
const xml = readZip(buf).get(
|
|
74
|
+
const xml = readZip(buf).get(DOCX_BODY_FILE)?.toString('utf-8') ?? '';
|
|
66
75
|
const body = bodies(xml, 'w:body')[0] ?? xml;
|
|
67
76
|
const blocks = [];
|
|
68
77
|
// top-level tables and paragraphs in document order: split on table boundaries
|
|
69
78
|
const re = /<w:tbl>[\s\S]*?<\/w:tbl>|<w:p(?:\s[^>]*)?(?:\/>|>[\s\S]*?<\/w:p>)/g;
|
|
70
|
-
let depth = 0;
|
|
71
79
|
for (const m of body.matchAll(re)) {
|
|
72
80
|
const chunk = m[0];
|
|
73
81
|
if (chunk.startsWith('<w:tbl>')) {
|
|
74
82
|
const rows = bodies(chunk, 'w:tr').map((tr) => bodies(tr, 'w:tc').map((tc) => textOf(tc, 'w:t').trim()));
|
|
75
83
|
blocks.push({ kind: 'table', text: rows.map((r) => r.join(' | ')).join('\n'), rows });
|
|
76
|
-
depth = 0;
|
|
77
84
|
}
|
|
78
|
-
else
|
|
85
|
+
else {
|
|
79
86
|
const text = textOf(chunk, 'w:t').trim();
|
|
80
87
|
if (text)
|
|
81
88
|
blocks.push({ kind: 'paragraph', text });
|
|
@@ -85,7 +92,10 @@ export function readDocx(buf) {
|
|
|
85
92
|
}
|
|
86
93
|
export function readPptx(buf) {
|
|
87
94
|
const zip = readZip(buf);
|
|
88
|
-
const slides = [...zip.keys()]
|
|
95
|
+
const slides = [...zip.keys()]
|
|
96
|
+
.map((k) => PPTX_SLIDE_FILE.exec(k))
|
|
97
|
+
.filter((m) => m !== null)
|
|
98
|
+
.sort((a, b) => Number(a[1]) - Number(b[1]));
|
|
89
99
|
return slides.map((m) => {
|
|
90
100
|
const xml = zip.get(m[0])?.toString('utf-8') ?? '';
|
|
91
101
|
const paragraphs = bodies(xml, 'a:p').map((p) => textOf(p, 'a:t').trim()).filter(Boolean);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"office.js","sourceRoot":"","sources":["../../../src/core/docs/office.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAW1E,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QAAE,CAAC,GAAG,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"office.js","sourceRoot":"","sources":["../../../src/core/docs/office.ts"],"names":[],"mappings":"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"}
|