ctxr-cli 0.22.0 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -2
- package/dist/commands/graph-diff.d.ts +33 -0
- package/dist/commands/graph-diff.d.ts.map +1 -0
- package/dist/commands/graph-diff.js +52 -0
- package/dist/commands/graph-diff.js.map +1 -0
- package/dist/commands/publish-check.d.ts +6 -0
- package/dist/commands/publish-check.d.ts.map +1 -1
- package/dist/commands/publish-check.js +78 -3
- package/dist/commands/publish-check.js.map +1 -1
- package/dist/commands/publish-gather.d.ts.map +1 -1
- package/dist/commands/publish-gather.js +4 -1
- package/dist/commands/publish-gather.js.map +1 -1
- package/dist/commands/publish-new.d.ts +5 -0
- package/dist/commands/publish-new.d.ts.map +1 -1
- package/dist/commands/publish-new.js +30 -10
- package/dist/commands/publish-new.js.map +1 -1
- package/dist/commands/publish-stamp.d.ts +32 -0
- package/dist/commands/publish-stamp.d.ts.map +1 -0
- package/dist/commands/publish-stamp.js +78 -0
- package/dist/commands/publish-stamp.js.map +1 -0
- package/dist/commands/publish-urls.d.ts +6 -0
- package/dist/commands/publish-urls.d.ts.map +1 -1
- package/dist/commands/publish-urls.js +10 -1
- package/dist/commands/publish-urls.js.map +1 -1
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +83 -5
- package/dist/commands/serve.js.map +1 -1
- package/dist/core/browse/diagram-assets.d.ts +15 -0
- package/dist/core/browse/diagram-assets.d.ts.map +1 -0
- package/dist/core/browse/diagram-assets.js +35 -0
- package/dist/core/browse/diagram-assets.js.map +1 -0
- package/dist/core/browse/page-url.d.ts +22 -0
- package/dist/core/browse/page-url.d.ts.map +1 -1
- package/dist/core/browse/page-url.js +31 -0
- package/dist/core/browse/page-url.js.map +1 -1
- package/dist/core/browse/render.d.ts +10 -1
- package/dist/core/browse/render.d.ts.map +1 -1
- package/dist/core/browse/render.js +23 -1
- package/dist/core/browse/render.js.map +1 -1
- package/dist/core/browse/templates.d.ts +4 -1
- package/dist/core/browse/templates.d.ts.map +1 -1
- package/dist/core/browse/templates.js +18 -2
- package/dist/core/browse/templates.js.map +1 -1
- package/dist/core/checks/organize-checks.d.ts +17 -0
- package/dist/core/checks/organize-checks.d.ts.map +1 -1
- package/dist/core/checks/organize-checks.js +116 -0
- package/dist/core/checks/organize-checks.js.map +1 -1
- package/dist/core/errors.d.ts +43 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +105 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/git/exec.d.ts +10 -0
- package/dist/core/git/exec.d.ts.map +1 -1
- package/dist/core/git/exec.js +52 -2
- package/dist/core/git/exec.js.map +1 -1
- package/dist/core/graph/diff-block.d.ts +6 -0
- package/dist/core/graph/diff-block.d.ts.map +1 -0
- package/dist/core/graph/diff-block.js +54 -0
- package/dist/core/graph/diff-block.js.map +1 -0
- package/dist/core/graph/diff-document.d.ts +37 -0
- package/dist/core/graph/diff-document.d.ts.map +1 -0
- package/dist/core/graph/diff-document.js +119 -0
- package/dist/core/graph/diff-document.js.map +1 -0
- package/dist/core/graph/diff.d.ts +123 -0
- package/dist/core/graph/diff.d.ts.map +1 -0
- package/dist/core/graph/diff.js +253 -0
- package/dist/core/graph/diff.js.map +1 -0
- package/dist/core/graph/tree.d.ts +24 -0
- package/dist/core/graph/tree.d.ts.map +1 -0
- package/dist/core/graph/tree.js +45 -0
- package/dist/core/graph/tree.js.map +1 -0
- package/dist/core/notes/list.d.ts +10 -0
- package/dist/core/notes/list.d.ts.map +1 -1
- package/dist/core/notes/list.js +35 -12
- package/dist/core/notes/list.js.map +1 -1
- package/dist/core/publish/filing.d.ts +12 -12
- package/dist/core/publish/filing.d.ts.map +1 -1
- package/dist/core/publish/filing.js +20 -18
- package/dist/core/publish/filing.js.map +1 -1
- package/dist/core/publish/lifespan.d.ts +37 -0
- package/dist/core/publish/lifespan.d.ts.map +1 -0
- package/dist/core/publish/lifespan.js +59 -0
- package/dist/core/publish/lifespan.js.map +1 -0
- package/dist/core/publish/represents.d.ts +72 -0
- package/dist/core/publish/represents.d.ts.map +1 -0
- package/dist/core/publish/represents.js +83 -0
- package/dist/core/publish/represents.js.map +1 -0
- package/dist/core/skills.js +1 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +34 -4
- package/dist/run.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -1
- package/templates/conventions/baseline-conventions.md +6 -0
- package/templates/graph/knowledge-changes/archived.md +1 -0
- package/templates/graph/knowledge-changes/bare-route.md +2 -0
- package/templates/graph/knowledge-changes/block.md +10 -0
- package/templates/graph/knowledge-changes/counts.md +1 -0
- package/templates/graph/knowledge-changes/dangling.md +1 -0
- package/templates/graph/knowledge-changes/empty.md +1 -0
- package/templates/graph/knowledge-changes/review.md +4 -0
- package/templates/serve/diagrams.mjs +136 -0
- package/templates/serve/shell.html +1 -1
- package/templates/serve/style.css +27 -0
- package/templates/skills/ctxr-organize-audit.md +19 -0
- package/templates/skills/ctxr-publish.md +100 -45
- package/templates/skills/ctxr-research.md +106 -53
- package/templates/skills/ctxr-submit.md +24 -15
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/core/graph/diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { StoreConfig } from '../../config/schema.js';
|
|
2
|
+
import { type GitRunner } from '../git/exec.js';
|
|
3
|
+
import { type Note } from '../notes/list.js';
|
|
4
|
+
/** A note read from a commit, with the blob it was read from, so two sides compare by object id rather than by text. */
|
|
5
|
+
export interface CommitNote extends Note {
|
|
6
|
+
blob: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The store root's path below the repository's top level, "/"-terminated, or
|
|
10
|
+
* "" when the store is the top level — the prefix every tree path carries and
|
|
11
|
+
* every reported path drops.
|
|
12
|
+
*/
|
|
13
|
+
export declare function storePrefix(git: GitRunner, storeRoot: string): Promise<string>;
|
|
14
|
+
/**
|
|
15
|
+
* review-the-knowledge-diff (D2): the notes a commit holds, enumerated by the
|
|
16
|
+
* same admission rule `listNotes` applies to the filesystem and read through
|
|
17
|
+
* git's object store, so neither side of a graph diff needs a checkout, and
|
|
18
|
+
* the working tree's uncommitted or untracked files never enter it.
|
|
19
|
+
*
|
|
20
|
+
* Paths are relative to the store root and sorted, matching `listNotes`.
|
|
21
|
+
* Writes nothing.
|
|
22
|
+
*/
|
|
23
|
+
export declare function listNotesAtCommit(git: GitRunner, storeRoot: string, commit: string, config: StoreConfig): Promise<CommitNote[]>;
|
|
24
|
+
//# sourceMappingURL=tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../src/core/graph/tree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAiB,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAG5D,wHAAwH;AACxH,MAAM,WAAW,UAAW,SAAQ,IAAI;IACtC,IAAI,EAAE,MAAM,CAAC;CACd;AAKD;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGpF;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAmBrI"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { readBlobs } from '../git/exec.js';
|
|
2
|
+
import { noteAdmission } from '../notes/list.js';
|
|
3
|
+
import { parseNoteText } from '../notes/parse.js';
|
|
4
|
+
/** A regular-file or executable blob; a symlink (`120000`) is skipped, as the filesystem walk's `isFile()` skips one. */
|
|
5
|
+
const FILE_MODES = new Set(['100644', '100755']);
|
|
6
|
+
/**
|
|
7
|
+
* The store root's path below the repository's top level, "/"-terminated, or
|
|
8
|
+
* "" when the store is the top level — the prefix every tree path carries and
|
|
9
|
+
* every reported path drops.
|
|
10
|
+
*/
|
|
11
|
+
export async function storePrefix(git, storeRoot) {
|
|
12
|
+
const { stdout } = await git.run(['rev-parse', '--show-prefix'], { cwd: storeRoot });
|
|
13
|
+
return stdout.replace(/\n$/, '');
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* review-the-knowledge-diff (D2): the notes a commit holds, enumerated by the
|
|
17
|
+
* same admission rule `listNotes` applies to the filesystem and read through
|
|
18
|
+
* git's object store, so neither side of a graph diff needs a checkout, and
|
|
19
|
+
* the working tree's uncommitted or untracked files never enter it.
|
|
20
|
+
*
|
|
21
|
+
* Paths are relative to the store root and sorted, matching `listNotes`.
|
|
22
|
+
* Writes nothing.
|
|
23
|
+
*/
|
|
24
|
+
export async function listNotesAtCommit(git, storeRoot, commit, config) {
|
|
25
|
+
const prefix = await storePrefix(git, storeRoot);
|
|
26
|
+
const pathspec = prefix === '' ? [] : ['--', prefix];
|
|
27
|
+
const { stdout } = await git.run(['ls-tree', '-r', '-z', '--full-tree', commit, ...pathspec], { cwd: storeRoot });
|
|
28
|
+
const admits = noteAdmission(config);
|
|
29
|
+
const admitted = [];
|
|
30
|
+
for (const record of stdout.split('\0')) {
|
|
31
|
+
if (record === '')
|
|
32
|
+
continue;
|
|
33
|
+
const tab = record.indexOf('\t');
|
|
34
|
+
const [mode, type, blob] = record.slice(0, tab).split(' ');
|
|
35
|
+
if (type !== 'blob' || !FILE_MODES.has(mode))
|
|
36
|
+
continue;
|
|
37
|
+
const relativePath = record.slice(tab + 1).slice(prefix.length);
|
|
38
|
+
if (admits(relativePath))
|
|
39
|
+
admitted.push({ path: relativePath, blob: blob });
|
|
40
|
+
}
|
|
41
|
+
admitted.sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));
|
|
42
|
+
const texts = await readBlobs(storeRoot, admitted.map((entry) => entry.blob));
|
|
43
|
+
return admitted.map((entry) => ({ ...parseNoteText(texts.get(entry.blob), entry.path), blob: entry.blob }));
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../../src/core/graph/tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,16 @@ export interface Note {
|
|
|
17
17
|
*/
|
|
18
18
|
export { isUnderAnyPrefix } from '../fs/prefix.js';
|
|
19
19
|
export declare function excludedPrefixesFor(config: StoreConfig): string[];
|
|
20
|
+
/**
|
|
21
|
+
* review-the-knowledge-diff (D2): the note-admission rule as one pure
|
|
22
|
+
* predicate over a store-relative, "/"-separated path, so the git-tree
|
|
23
|
+
* enumeration (`graph/tree.ts`) admits exactly what the filesystem walk does.
|
|
24
|
+
* Built once per enumeration: the exclusion list and the harness entry files
|
|
25
|
+
* are resolved here, not per path.
|
|
26
|
+
*/
|
|
27
|
+
export declare function noteAdmission(config: StoreConfig): (relativePath: string) => boolean;
|
|
28
|
+
/** The single-path form of `noteAdmission`, for a caller holding one path. */
|
|
29
|
+
export declare function admitsNotePath(relativePath: string, config: StoreConfig): boolean;
|
|
20
30
|
/**
|
|
21
31
|
* retain-captures-as-provenance: every markdown capture in the tier, which is
|
|
22
32
|
* exactly the set `listNotes` refuses to return — the capture root is a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/core/notes/list.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,+DAA+D;AAC/D,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,IAAI;IACnB,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACjD,IAAI,EAAE,MAAM,CAAC;CACd;AAmCD;;;;;GAKG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE,CAmBjE;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/core/notes/list.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,+DAA+D;AAC/D,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,IAAI;IACnB,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACjD,IAAI,EAAE,MAAM,CAAC;CACd;AAmCD;;;;;GAKG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE,CAmBjE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAEpF;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAEjF;AA8CD;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAM1F;AAED,wGAAwG;AACxG,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,GAAE,SAAc,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAQ9G"}
|
package/dist/core/notes/list.js
CHANGED
|
@@ -13,7 +13,7 @@ const ALWAYS_SKIP_DIRS = new Set(['.git', '.githooks', '.queue']);
|
|
|
13
13
|
* generates: the store root's own `AGENTS.md` (`agents-doc.ts` hardcodes
|
|
14
14
|
* `path.join(root, 'AGENTS.md')`, never a nested path). A same-named file
|
|
15
15
|
* anywhere else is ordinary content an operator happened to name AGENTS.md
|
|
16
|
-
* — the
|
|
16
|
+
* — the admission predicate below applies this root-only, the same way it treats a
|
|
17
17
|
* harness's own entry filename (`skipRootFiles`, right below).
|
|
18
18
|
*/
|
|
19
19
|
const ALWAYS_SKIP_FILES = new Set(['AGENTS.md']);
|
|
@@ -60,7 +60,34 @@ export function excludedPrefixesFor(config) {
|
|
|
60
60
|
config.organize.log_path ?? DEFAULT_LOG_PATH,
|
|
61
61
|
];
|
|
62
62
|
}
|
|
63
|
-
|
|
63
|
+
/**
|
|
64
|
+
* review-the-knowledge-diff (D2): the note-admission rule as one pure
|
|
65
|
+
* predicate over a store-relative, "/"-separated path, so the git-tree
|
|
66
|
+
* enumeration (`graph/tree.ts`) admits exactly what the filesystem walk does.
|
|
67
|
+
* Built once per enumeration: the exclusion list and the harness entry files
|
|
68
|
+
* are resolved here, not per path.
|
|
69
|
+
*/
|
|
70
|
+
export function noteAdmission(config) {
|
|
71
|
+
return pathAdmission(excludedPrefixesFor(config), harnessEntryFiles(config));
|
|
72
|
+
}
|
|
73
|
+
/** The single-path form of `noteAdmission`, for a caller holding one path. */
|
|
74
|
+
export function admitsNotePath(relativePath, config) {
|
|
75
|
+
return noteAdmission(config)(relativePath);
|
|
76
|
+
}
|
|
77
|
+
function pathAdmission(excludePrefixes, skipRootFiles) {
|
|
78
|
+
return (relativePath) => {
|
|
79
|
+
const segments = relativePath.split('/');
|
|
80
|
+
const name = segments[segments.length - 1];
|
|
81
|
+
if (!name.endsWith('.md'))
|
|
82
|
+
return false;
|
|
83
|
+
if (segments.slice(0, -1).some((segment) => ALWAYS_SKIP_DIRS.has(segment)))
|
|
84
|
+
return false;
|
|
85
|
+
if (segments.length === 1 && (ALWAYS_SKIP_FILES.has(name) || skipRootFiles.has(name)))
|
|
86
|
+
return false;
|
|
87
|
+
return !isUnderAnyPrefix(relativePath, excludePrefixes);
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
async function walk(dir, root, excludePrefixes, admits, results) {
|
|
64
91
|
let entries;
|
|
65
92
|
try {
|
|
66
93
|
entries = await readdir(dir, { withFileTypes: true });
|
|
@@ -74,19 +101,14 @@ async function walk(dir, root, excludePrefixes, skipRootFiles, results) {
|
|
|
74
101
|
const fullPath = path.join(dir, entry.name);
|
|
75
102
|
const relativePath = path.relative(root, fullPath).split(path.sep).join('/');
|
|
76
103
|
if (entry.isDirectory()) {
|
|
104
|
+
// Pruning only: `admits` would refuse every file beneath; this skips reading them.
|
|
77
105
|
if (ALWAYS_SKIP_DIRS.has(entry.name))
|
|
78
106
|
continue;
|
|
79
107
|
if (isUnderAnyPrefix(relativePath, excludePrefixes))
|
|
80
108
|
continue;
|
|
81
|
-
await walk(fullPath, root, excludePrefixes,
|
|
109
|
+
await walk(fullPath, root, excludePrefixes, admits, results);
|
|
82
110
|
}
|
|
83
|
-
else if (entry.isFile() &&
|
|
84
|
-
if (relativePath === entry.name && ALWAYS_SKIP_FILES.has(entry.name))
|
|
85
|
-
continue;
|
|
86
|
-
if (relativePath === entry.name && skipRootFiles.has(entry.name))
|
|
87
|
-
continue;
|
|
88
|
-
if (isUnderAnyPrefix(relativePath, excludePrefixes))
|
|
89
|
-
continue;
|
|
111
|
+
else if (entry.isFile() && admits(relativePath)) {
|
|
90
112
|
results.push(relativePath);
|
|
91
113
|
}
|
|
92
114
|
}
|
|
@@ -106,14 +128,15 @@ async function walk(dir, root, excludePrefixes, skipRootFiles, results) {
|
|
|
106
128
|
export async function listCaptures(storeRoot, config) {
|
|
107
129
|
const captureRoot = path.join(storeRoot, config.ingest.capture_root);
|
|
108
130
|
const relativePaths = [];
|
|
109
|
-
await walk(captureRoot, storeRoot, [], new Set(), relativePaths);
|
|
131
|
+
await walk(captureRoot, storeRoot, [], pathAdmission([], new Set()), relativePaths);
|
|
110
132
|
relativePaths.sort();
|
|
111
133
|
return Promise.all(relativePaths.map((relativePath) => parseNote(path.join(storeRoot, relativePath), relativePath)));
|
|
112
134
|
}
|
|
113
135
|
/** Every retrievable note in the store: everything under a .md path, minus every declared exclusion. */
|
|
114
136
|
export async function listNotes(storeRoot, config, query = {}) {
|
|
115
137
|
const relativePaths = [];
|
|
116
|
-
|
|
138
|
+
const excludePrefixes = excludedPrefixesFor(config);
|
|
139
|
+
await walk(storeRoot, storeRoot, excludePrefixes, pathAdmission(excludePrefixes, harnessEntryFiles(config)), relativePaths);
|
|
117
140
|
relativePaths.sort();
|
|
118
141
|
const scoped = query.underPrefix ? relativePaths.filter((p) => isUnderAnyPrefix(p, [query.underPrefix])) : relativePaths;
|
|
119
142
|
return Promise.all(scoped.map((relativePath) => parseNote(path.join(storeRoot, relativePath), relativePath)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/core/notes/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAcvC,wGAAwG;AACxG,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;AAElE;;;;;;;;;GASG;AACH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAEjD;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,MAAmB;IAC5C,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CACZ,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,CAAC;aAC7C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;aAC3B,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CACxD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,UAAU,mBAAmB,CAAC,MAAmB;IACrD,OAAO;QACL,GAAG,MAAM,CAAC,SAAS,CAAC,aAAa;QACjC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK;QACvB,MAAM,CAAC,OAAO,CAAC,cAAc;QAC7B,MAAM,CAAC,OAAO,CAAC,IAAI;QACnB,yFAAyF;QACzF,MAAM,CAAC,OAAO,CAAC,IAAI;QACnB,sFAAsF;QACtF,MAAM,CAAC,OAAO,CAAC,WAAW;QAC1B,MAAM,CAAC,OAAO,CAAC,aAAa;QAC5B,yEAAyE;QACzE,2EAA2E;QAC3E,yEAAyE;QACzE,gEAAgE;QAChE,MAAM,CAAC,SAAS,CAAC,IAAI;QACrB,2FAA2F;QAC3F,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,gBAAgB;KAC7C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI,CACjB,GAAW,EACX,IAAY,EACZ,eAAkC,EAClC,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/core/notes/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,13 @@ export interface Filing {
|
|
|
22
22
|
/** The segment naming the subject note, present only when D3 inserts one. */
|
|
23
23
|
subject_segment: string | null;
|
|
24
24
|
moves: FilingMove[];
|
|
25
|
+
/**
|
|
26
|
+
* Why no path derives, when `prefix` is null: no folder path names the
|
|
27
|
+
* subject (`store-root`), or the derived path's first segment is the one
|
|
28
|
+
* reserved for disposable pages (`reserved-segment`,
|
|
29
|
+
* two-kinds-of-published-page D2). Null whenever a path derives.
|
|
30
|
+
*/
|
|
31
|
+
no_path_reason: 'store-root' | 'reserved-segment' | null;
|
|
25
32
|
}
|
|
26
33
|
/**
|
|
27
34
|
* Re-exported from `core/slug.ts`, which owns the one normalization rule; the
|
|
@@ -30,18 +37,11 @@ export interface Filing {
|
|
|
30
37
|
*/
|
|
31
38
|
export { slugifyPath, slugifySegment };
|
|
32
39
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* just told the author to create.
|
|
39
|
-
*
|
|
40
|
-
* D3: the segment naming the subject note is inserted exactly when that subject
|
|
41
|
-
* already has a page, so a one-page subject stays shallow and a multi-page one
|
|
42
|
-
* collects; and when the folder path is empty, so a subject at the store root
|
|
43
|
-
* still yields a path one level deep and satisfies `checkPageLocation`'s floor
|
|
44
|
-
* by construction.
|
|
40
|
+
* two-kinds-of-published-page D2: the first segment under the publish path
|
|
41
|
+
* named `disposable` is reserved for disposable pages, and a store folder named
|
|
42
|
+
* "Disposable" slugifies to exactly it. A path derived into it is reported as no
|
|
43
|
+
* path at all, with the reservation as the reason — the existing "no path
|
|
44
|
+
* derives" outcome with a second reason, so gather still gates nothing.
|
|
45
45
|
*/
|
|
46
46
|
export declare function deriveFiling(storeRoot: string, publishPath: string, subject: FilingSubject): Promise<Filing>;
|
|
47
47
|
//# sourceMappingURL=filing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filing.d.ts","sourceRoot":"","sources":["../../../src/core/publish/filing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filing.d.ts","sourceRoot":"","sources":["../../../src/core/publish/filing.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIzD,8GAA8G;AAC9G,MAAM,WAAW,aAAa;IAC5B,+FAA+F;IAC/F,SAAS,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,oHAAoH;IACpH,UAAU,EAAE,aAAa,GAAG,WAAW,CAAC;CACzC;AAED,MAAM,WAAW,MAAM;IACrB,kHAAkH;IAClH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,oGAAoG;IACpG,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,uHAAuH;IACvH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,6EAA6E;IAC7E,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB;;;;;OAKG;IACH,cAAc,EAAE,YAAY,GAAG,kBAAkB,GAAG,IAAI,CAAC;CAC1D;AAED;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;AAsGvC;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAOlH"}
|
|
@@ -2,9 +2,9 @@ import { existsSync } from 'node:fs';
|
|
|
2
2
|
import { readFile, readdir } from 'node:fs/promises';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { PUBLISH_INDEX_FILE } from '../browse/routes.js';
|
|
5
|
-
import { extractLinkTargets } from '../graph/model.js';
|
|
6
|
-
import { parseNoteText } from '../notes/parse.js';
|
|
7
5
|
import { slugifyPath, slugifySegment } from '../slug.js';
|
|
6
|
+
import { DISPOSABLE_SEGMENT } from './lifespan.js';
|
|
7
|
+
import { readLeadLink } from './represents.js';
|
|
8
8
|
/**
|
|
9
9
|
* Re-exported from `core/slug.ts`, which owns the one normalization rule; the
|
|
10
10
|
* filing module was where it was first written and is still where most callers
|
|
@@ -47,10 +47,10 @@ async function readmeLeadsWithStem(absolutePageDirectory, stem) {
|
|
|
47
47
|
catch {
|
|
48
48
|
return false;
|
|
49
49
|
}
|
|
50
|
-
//
|
|
51
|
-
// `publish check`
|
|
52
|
-
//
|
|
53
|
-
return
|
|
50
|
+
// two-kinds-of-published-page D4: the one reading of a README's lead link,
|
|
51
|
+
// shared with `publish check`'s represented-note check so the two cannot
|
|
52
|
+
// diverge on whose page a page is.
|
|
53
|
+
return readLeadLink(raw, readmePath)?.target === stem;
|
|
54
54
|
}
|
|
55
55
|
async function pagesForNote(publishRoot, group, subjectSlug, noteStem) {
|
|
56
56
|
const subjectDirectory = group === '' ? subjectSlug : `${group}/${subjectSlug}`;
|
|
@@ -69,20 +69,22 @@ async function pagesForNote(publishRoot, group, subjectSlug, noteStem) {
|
|
|
69
69
|
return found;
|
|
70
70
|
}
|
|
71
71
|
/**
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* just told the author to create.
|
|
78
|
-
*
|
|
79
|
-
* D3: the segment naming the subject note is inserted exactly when that subject
|
|
80
|
-
* already has a page, so a one-page subject stays shallow and a multi-page one
|
|
81
|
-
* collects; and when the folder path is empty, so a subject at the store root
|
|
82
|
-
* still yields a path one level deep and satisfies `checkPageLocation`'s floor
|
|
83
|
-
* by construction.
|
|
72
|
+
* two-kinds-of-published-page D2: the first segment under the publish path
|
|
73
|
+
* named `disposable` is reserved for disposable pages, and a store folder named
|
|
74
|
+
* "Disposable" slugifies to exactly it. A path derived into it is reported as no
|
|
75
|
+
* path at all, with the reservation as the reason — the existing "no path
|
|
76
|
+
* derives" outcome with a second reason, so gather still gates nothing.
|
|
84
77
|
*/
|
|
85
78
|
export async function deriveFiling(storeRoot, publishPath, subject) {
|
|
79
|
+
const filing = await deriveUnreservedFiling(storeRoot, publishPath, subject);
|
|
80
|
+
if (filing.prefix === null)
|
|
81
|
+
return { ...filing, no_path_reason: 'store-root' };
|
|
82
|
+
if (filing.prefix.split('/')[0] === DISPOSABLE_SEGMENT) {
|
|
83
|
+
return { prefix: null, path: null, group: filing.group, subject_segment: null, moves: [], no_path_reason: 'reserved-segment' };
|
|
84
|
+
}
|
|
85
|
+
return { ...filing, no_path_reason: null };
|
|
86
|
+
}
|
|
87
|
+
async function deriveUnreservedFiling(storeRoot, publishPath, subject) {
|
|
86
88
|
const publishPrefix = publishPath.split(path.sep).join('/').replace(/\/+$/, '');
|
|
87
89
|
const publishRoot = path.join(storeRoot, ...publishPrefix.split('/'));
|
|
88
90
|
const group = slugifyPath(subject.directory);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filing.js","sourceRoot":"","sources":["../../../src/core/publish/filing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"filing.js","sourceRoot":"","sources":["../../../src/core/publish/filing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* two-kinds-of-published-page: a page's lifespan, read from where it is filed
|
|
3
|
+
* and from nothing else (design.md D3). A page whose folder's first segment
|
|
4
|
+
* under the configured publish path is `disposable` is disposable; every
|
|
5
|
+
* other page is permanent, so every page that predates this change is
|
|
6
|
+
* permanent without being touched.
|
|
7
|
+
*/
|
|
8
|
+
export type PageLifespan = 'permanent' | 'disposable';
|
|
9
|
+
/**
|
|
10
|
+
* D2: a fixed segment, not a config key — a key would have to be opt-in with
|
|
11
|
+
* no shipped default, which makes the feature off in every store. The plain
|
|
12
|
+
* word can collide with a store folder named "Disposable" (it slugifies to
|
|
13
|
+
* exactly this), so the name is RESERVED rather than unreachable: `publish new`
|
|
14
|
+
* refuses a slug spelled into it without `--disposable`, `publish gather`
|
|
15
|
+
* derives no filing path into it, and `publish check` reads anything filed
|
|
16
|
+
* there as disposable and fails its shape. `_disposable` would have made the
|
|
17
|
+
* collision structurally impossible, and lost on how it reads in a URL.
|
|
18
|
+
*/
|
|
19
|
+
export declare const DISPOSABLE_SEGMENT = "disposable";
|
|
20
|
+
/** D6: the window after which lint lists a disposable page as a removal candidate. A code constant, not config. */
|
|
21
|
+
export declare const DISPOSABLE_REVIEW_DAYS = 30;
|
|
22
|
+
/**
|
|
23
|
+
* The lifespan of a page (or any file under it), given its store-relative
|
|
24
|
+
* path. `null` when the path is not under the configured publish path — such
|
|
25
|
+
* a file is not a published page and has no lifespan.
|
|
26
|
+
*/
|
|
27
|
+
export declare function lifespanOf(relativePath: string, publishPath: string): PageLifespan | null;
|
|
28
|
+
/**
|
|
29
|
+
* The calendar date leading a disposable page's folder name, as `YYYY-MM-DD`,
|
|
30
|
+
* or `null` when the name carries none or the date is not a real one
|
|
31
|
+
* (`2026-13-45`, `2026-02-30`). Round-tripping through `Date.UTC` is what
|
|
32
|
+
* rejects a day the month does not have.
|
|
33
|
+
*/
|
|
34
|
+
export declare function parseDisposableDate(folderName: string): string | null;
|
|
35
|
+
/** Whole days from `date` to `today`, both `YYYY-MM-DD`. */
|
|
36
|
+
export declare function daysBetween(date: string, today: string): number;
|
|
37
|
+
//# sourceMappingURL=lifespan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifespan.d.ts","sourceRoot":"","sources":["../../../src/core/publish/lifespan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;AAEtD;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAE/C,mHAAmH;AACnH,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAMzC;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAMzF;AAKD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOrE;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/D"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* two-kinds-of-published-page: a page's lifespan, read from where it is filed
|
|
3
|
+
* and from nothing else (design.md D3). A page whose folder's first segment
|
|
4
|
+
* under the configured publish path is `disposable` is disposable; every
|
|
5
|
+
* other page is permanent, so every page that predates this change is
|
|
6
|
+
* permanent without being touched.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* D2: a fixed segment, not a config key — a key would have to be opt-in with
|
|
10
|
+
* no shipped default, which makes the feature off in every store. The plain
|
|
11
|
+
* word can collide with a store folder named "Disposable" (it slugifies to
|
|
12
|
+
* exactly this), so the name is RESERVED rather than unreachable: `publish new`
|
|
13
|
+
* refuses a slug spelled into it without `--disposable`, `publish gather`
|
|
14
|
+
* derives no filing path into it, and `publish check` reads anything filed
|
|
15
|
+
* there as disposable and fails its shape. `_disposable` would have made the
|
|
16
|
+
* collision structurally impossible, and lost on how it reads in a URL.
|
|
17
|
+
*/
|
|
18
|
+
export const DISPOSABLE_SEGMENT = 'disposable';
|
|
19
|
+
/** D6: the window after which lint lists a disposable page as a removal candidate. A code constant, not config. */
|
|
20
|
+
export const DISPOSABLE_REVIEW_DAYS = 30;
|
|
21
|
+
function normalizedPrefix(publishPath) {
|
|
22
|
+
return publishPath.replace(/\\/g, '/').replace(/\/+$/, '');
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The lifespan of a page (or any file under it), given its store-relative
|
|
26
|
+
* path. `null` when the path is not under the configured publish path — such
|
|
27
|
+
* a file is not a published page and has no lifespan.
|
|
28
|
+
*/
|
|
29
|
+
export function lifespanOf(relativePath, publishPath) {
|
|
30
|
+
const prefix = normalizedPrefix(publishPath);
|
|
31
|
+
const normalized = relativePath.replace(/\\/g, '/');
|
|
32
|
+
if (!normalized.startsWith(`${prefix}/`))
|
|
33
|
+
return null;
|
|
34
|
+
const firstSegment = normalized.slice(prefix.length + 1).split('/')[0];
|
|
35
|
+
return firstSegment === DISPOSABLE_SEGMENT ? 'disposable' : 'permanent';
|
|
36
|
+
}
|
|
37
|
+
/** The `YYYY-MM-DD-` lead a disposable page's folder name carries, stamped by `ctxr publish new --disposable`. */
|
|
38
|
+
const DISPOSABLE_DATE_RE = /^(\d{4})-(\d{2})-(\d{2})-./;
|
|
39
|
+
/**
|
|
40
|
+
* The calendar date leading a disposable page's folder name, as `YYYY-MM-DD`,
|
|
41
|
+
* or `null` when the name carries none or the date is not a real one
|
|
42
|
+
* (`2026-13-45`, `2026-02-30`). Round-tripping through `Date.UTC` is what
|
|
43
|
+
* rejects a day the month does not have.
|
|
44
|
+
*/
|
|
45
|
+
export function parseDisposableDate(folderName) {
|
|
46
|
+
const match = DISPOSABLE_DATE_RE.exec(folderName);
|
|
47
|
+
if (!match)
|
|
48
|
+
return null;
|
|
49
|
+
const [year, month, day] = [Number(match[1]), Number(match[2]), Number(match[3])];
|
|
50
|
+
const date = new Date(Date.UTC(year, month - 1, day));
|
|
51
|
+
if (date.getUTCFullYear() !== year || date.getUTCMonth() !== month - 1 || date.getUTCDate() !== day)
|
|
52
|
+
return null;
|
|
53
|
+
return `${match[1]}-${match[2]}-${match[3]}`;
|
|
54
|
+
}
|
|
55
|
+
/** Whole days from `date` to `today`, both `YYYY-MM-DD`. */
|
|
56
|
+
export function daysBetween(date, today) {
|
|
57
|
+
return Math.round((Date.parse(`${today}T00:00:00Z`) - Date.parse(`${date}T00:00:00Z`)) / 86_400_000);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=lifespan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifespan.js","sourceRoot":"","sources":["../../../src/core/publish/lifespan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,YAAY,CAAC;AAE/C,mHAAmH;AACnH,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAEzC,SAAS,gBAAgB,CAAC,WAAmB;IAC3C,OAAO,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,YAAoB,EAAE,WAAmB;IAClE,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,OAAO,YAAY,KAAK,kBAAkB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;AAC1E,CAAC;AAED,kHAAkH;AAClH,MAAM,kBAAkB,GAAG,4BAA4B,CAAC;AAExD;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACpD,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACtD,IAAI,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACjH,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,KAAa;IACrD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,YAAY,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;AACvG,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { Note } from '../notes/list.js';
|
|
2
|
+
/**
|
|
3
|
+
* two-kinds-of-published-page design.md D4: the note a permanent page
|
|
4
|
+
* represents is the FIRST wikilink in its README's body, frontmatter
|
|
5
|
+
* excluded. `filing.ts` reads the same link to decide whose page a page is,
|
|
6
|
+
* so the reading lives here once and both call it — a page `gather` counts as
|
|
7
|
+
* a subject's and a page `check` says represents that subject cannot disagree.
|
|
8
|
+
*/
|
|
9
|
+
export interface LeadLink {
|
|
10
|
+
/** The wikilink target as written: the stem before any `|alias` or `#heading`. */
|
|
11
|
+
target: string;
|
|
12
|
+
/** Zero-based index of the raw README line holding it, frontmatter lines counted. */
|
|
13
|
+
line: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Parsed rather than grepped so frontmatter is excluded, matching how the graph
|
|
17
|
+
* resolves a wikilink. `extractLinkTargets` reports occurrences in body order,
|
|
18
|
+
* so the first line that yields one holds the lead.
|
|
19
|
+
*/
|
|
20
|
+
export declare function readLeadLink(readmeRaw: string, readmePath: string): LeadLink | null;
|
|
21
|
+
export type RepresentedResolution = {
|
|
22
|
+
note: Note;
|
|
23
|
+
} | {
|
|
24
|
+
none: true;
|
|
25
|
+
} | {
|
|
26
|
+
ambiguous: string[];
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* By filename stem, through the one stem index every wikilink resolution in the
|
|
30
|
+
* system reads (`buildStemIndex`): exactly one note resolves, zero or two-plus
|
|
31
|
+
* do not. The candidates are named so the author can qualify the link.
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveRepresented(notes: readonly Note[], stem: string): RepresentedResolution;
|
|
34
|
+
export declare function readHashMarker(line: string): string | null;
|
|
35
|
+
/**
|
|
36
|
+
* D5: the marker is written once and never overwritten. A line that already
|
|
37
|
+
* carries one comes back unchanged — confirming a page against a changed note
|
|
38
|
+
* takes removing the marker by hand and stamping again.
|
|
39
|
+
*/
|
|
40
|
+
export declare function appendHashMarker(line: string, hash: string): string;
|
|
41
|
+
/** The represented note's hash — `contentHashOfBody`, imported and never re-spelled. */
|
|
42
|
+
export declare function representedNoteHash(note: Note): string;
|
|
43
|
+
export type Representation = {
|
|
44
|
+
status: 'no-link';
|
|
45
|
+
} | {
|
|
46
|
+
status: 'not-found';
|
|
47
|
+
target: string;
|
|
48
|
+
} | {
|
|
49
|
+
status: 'ambiguous';
|
|
50
|
+
target: string;
|
|
51
|
+
candidates: string[];
|
|
52
|
+
} | {
|
|
53
|
+
status: 'not-stamped';
|
|
54
|
+
note: string;
|
|
55
|
+
hash: string;
|
|
56
|
+
lead: LeadLink;
|
|
57
|
+
} | {
|
|
58
|
+
status: 'stale';
|
|
59
|
+
note: string;
|
|
60
|
+
hash: string;
|
|
61
|
+
recorded: string;
|
|
62
|
+
lead: LeadLink;
|
|
63
|
+
} | {
|
|
64
|
+
status: 'current';
|
|
65
|
+
note: string;
|
|
66
|
+
hash: string;
|
|
67
|
+
lead: LeadLink;
|
|
68
|
+
};
|
|
69
|
+
/** Where a permanent page stands against its note — one reading for `publish check`, `publish stamp` and lint. */
|
|
70
|
+
export declare function assessRepresentation(readmeRaw: string, readmePath: string, notes: readonly Note[]): Representation;
|
|
71
|
+
export declare function readReadme(readmeAbsolutePath: string): Promise<string | null>;
|
|
72
|
+
//# sourceMappingURL=represents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"represents.d.ts","sourceRoot":"","sources":["../../../src/core/publish/represents.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAG7C;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACvB,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CASnF;AAED,MAAM,MAAM,qBAAqB,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE9F;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAK9F;AAKD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAKnE;AAED,wFAAwF;AACxF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAEtD;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,GAC7D;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GACrE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GACjF;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEtE,kHAAkH;AAClH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,cAAc,CAWlH;AAED,wBAAsB,UAAU,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOnF"}
|