@the-focus-ai/artifacts 1.1.0 → 1.2.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/README.md +47 -0
- package/dist/src/cli.d.ts +2 -1
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +107 -4
- package/dist/src/cli.js.map +1 -1
- package/dist/src/diff.d.ts +16 -0
- package/dist/src/diff.d.ts.map +1 -0
- package/dist/src/diff.js +90 -0
- package/dist/src/diff.js.map +1 -0
- package/dist/src/doc-asset-collect.d.ts +29 -0
- package/dist/src/doc-asset-collect.d.ts.map +1 -0
- package/dist/src/doc-asset-collect.js +112 -0
- package/dist/src/doc-asset-collect.js.map +1 -0
- package/dist/src/doc-asset-rewrite.d.ts +6 -0
- package/dist/src/doc-asset-rewrite.d.ts.map +1 -0
- package/dist/src/doc-asset-rewrite.js +15 -0
- package/dist/src/doc-asset-rewrite.js.map +1 -0
- package/dist/src/front-matter.d.ts +36 -0
- package/dist/src/front-matter.d.ts.map +1 -0
- package/dist/src/front-matter.js +105 -0
- package/dist/src/front-matter.js.map +1 -0
- package/dist/src/http.d.ts +5 -0
- package/dist/src/http.d.ts.map +1 -1
- package/dist/src/http.js +62 -0
- package/dist/src/http.js.map +1 -1
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/living-doc.d.ts +184 -0
- package/dist/src/living-doc.d.ts.map +1 -0
- package/dist/src/living-doc.js +656 -0
- package/dist/src/living-doc.js.map +1 -0
- package/dist/src/remote-api.d.ts +38 -0
- package/dist/src/remote-api.d.ts.map +1 -1
- package/dist/src/remote-api.js +63 -0
- package/dist/src/remote-api.js.map +1 -1
- package/dist/src/storage/doc-asset-content.d.ts +55 -0
- package/dist/src/storage/doc-asset-content.d.ts.map +1 -0
- package/dist/src/storage/doc-asset-content.js +145 -0
- package/dist/src/storage/doc-asset-content.js.map +1 -0
- package/dist/src/storage/living-doc-metadata.d.ts +165 -0
- package/dist/src/storage/living-doc-metadata.d.ts.map +1 -0
- package/dist/src/storage/living-doc-metadata.js +416 -0
- package/dist/src/storage/living-doc-metadata.js.map +1 -0
- package/package.json +17 -2
package/README.md
CHANGED
|
@@ -31,6 +31,14 @@ See [docs/deploy.md](docs/deploy.md) for Vercel project, custom domain, pull-req
|
|
|
31
31
|
|
|
32
32
|
Use Artifacts when an agent has produced a local HTML file or static directory and needs to return a URL instead of attaching files or asking a human to set up hosting.
|
|
33
33
|
|
|
34
|
+
Install the agent skill (recommended for coding agents):
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npx skills add The-Focus-AI/artifacts.thefocus.ai --skill artifacts -g
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
The hosted skill is published at [https://artifacts.thefocus.ai/skill.md](https://artifacts.thefocus.ai/skill.md). The canonical in-repo copy lives at `skills/artifacts/SKILL.md` and must stay identical to `public/skill.md`.
|
|
41
|
+
|
|
34
42
|
Install/run the CLI through npm or the repo-local script:
|
|
35
43
|
|
|
36
44
|
```bash
|
|
@@ -92,3 +100,42 @@ pnpm artifacts logout
|
|
|
92
100
|
Packaging applies built-in safety rules before upload: obvious secret, dependency, cache, and hidden paths are excluded by default, except `.well-known/`; `.gitignore` is not read in v1; symlinks are rejected; and preflight fails before upload if any file exceeds 25 MB, total Artifact size exceeds 100 MB, or the Artifact has more than 1,000 files. Exclusion output is concise by default; add `--verbose` to print excluded paths.
|
|
93
101
|
|
|
94
102
|
`ARTIFACTS_PUBLIC_BASE_URL` defaults to `https://artifacts.thefocus.ai`; set it only when publishing against a Vercel Preview or another host that serves this app. Published Artifacts are served by the Vercel rewrite from `/a/{opaque}` and nested `/a/{opaque}/{path}` URLs to the API functions with `Cache-Control: no-store` and `X-Robots-Tag: noindex, nofollow` headers.
|
|
103
|
+
|
|
104
|
+
## Living Docs
|
|
105
|
+
|
|
106
|
+
A **Living Doc** is a collaborative Markdown document an agent publishes so a human can edit it and comment on it, then the agent pulls that feedback back to continue the work. Unlike a Publication (read-only, static), a Living Doc is mutable and two-party. See [docs/adr/0005-living-docs-agent-human-review-loop.md](docs/adr/0005-living-docs-agent-human-review-loop.md) for the design and [CONTEXT.md](CONTEXT.md) for the vocabulary.
|
|
107
|
+
|
|
108
|
+
Publishing a Living Doc returns two URLs: a read-only **View Link** (`/d/{opaque}`) and a capability **Review Link** (`/r/{review}`). Hand the Review Link to whoever should give feedback — no login required. The Review Link opens a WYSIWYG editor (Tiptap) where the Reviewer edits the rendered document directly; edits autosave continuously as Markdown. Selecting text pops up an inline Comment button, and pending agent Suggestions render in the document as tracked changes (strikethrough original, replacement alongside, accept/reject buttons), falling back to sidebar cards when a Suggestion's anchor spans multiple blocks.
|
|
109
|
+
|
|
110
|
+
**YAML front matter is part of the Living Doc.** `doc publish` uploads the file as-is (including a leading `---` … `---` block). Image rewrite and Doc Asset upload never strip front matter. Prefer a `title:` field there when the file has one; `--title` still overrides. The View Link renders the Markdown body only so fences are not shown as horizontal rules — the stored Markdown and `doc pull` output keep the front matter intact.
|
|
111
|
+
|
|
112
|
+
The agent drives the loop through `artifacts doc` subcommands, which print JSON:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
# Publish a Markdown file (front matter preserved); prints
|
|
116
|
+
# { opaqueId, reviewId, viewUrl, reviewUrl, title }
|
|
117
|
+
THEFOCUS_ARTIFACTS_TOKEN=tfai_pub_... \
|
|
118
|
+
fnox exec -- pnpm artifacts doc publish ./proposal.md --title "Proposal"
|
|
119
|
+
|
|
120
|
+
# Pull feedback. Cuts an immutable Version and prints the current Markdown,
|
|
121
|
+
# a diff versus the previous Version, and open reviewer Comments.
|
|
122
|
+
pnpm artifacts doc pull https://artifacts.thefocus.ai/d/Ab3xY9kQ
|
|
123
|
+
|
|
124
|
+
# Respond with span-anchored Suggestions and replies to Comments.
|
|
125
|
+
# Body JSON: { "suggestions": [{ "anchorQuote": "...", "replacement": "...",
|
|
126
|
+
# "note": "...", "anchorStart": 123 }],
|
|
127
|
+
# "replies": [{ "parentCommentId": "...", "body": "..." }] }
|
|
128
|
+
# anchorStart (optional) is the quote's character offset in the pulled
|
|
129
|
+
# Markdown; include it whenever the quoted text could appear more than once,
|
|
130
|
+
# since it decides which occurrence an accepted Suggestion replaces.
|
|
131
|
+
pnpm artifacts doc respond https://artifacts.thefocus.ai/d/Ab3xY9kQ --body feedback.json
|
|
132
|
+
cat feedback.json | pnpm artifacts doc respond https://artifacts.thefocus.ai/d/Ab3xY9kQ
|
|
133
|
+
|
|
134
|
+
# List your Living Docs
|
|
135
|
+
pnpm artifacts doc list
|
|
136
|
+
|
|
137
|
+
# Remove a Living Doc (disables both the View Link and the Review Link)
|
|
138
|
+
pnpm artifacts doc remove https://artifacts.thefocus.ai/d/Ab3xY9kQ --yes
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Suggestions are never applied automatically — the Reviewer accepts or rejects each one in the editor, and accepting applies the change to the live Markdown at the anchored quote (nearest `anchorStart` when it matches more than once). If the Reviewer has edited the quoted text away, the Suggestion stays pending so its replacement remains visible rather than being marked accepted without applying. Each `doc pull` advances the Version number so both sides can refer back to "as of Version 3." Because the review surface is reachable by anyone holding the Review Link, all inputs are size-capped server-side (2 MB for the Markdown, 64 KB for comments, suggestion text, and replies). Living Docs require `migrations/0005_create_living_docs.sql`.
|
package/dist/src/cli.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { type PublisherTokenStore } from "./auth.js";
|
|
3
3
|
import type { BrowserLoginResult } from "./login-flow.js";
|
|
4
4
|
import { type RemovePublicationResult } from "./publication.js";
|
|
5
|
-
import { type ArtifactApiClient } from "./remote-api.js";
|
|
5
|
+
import { type ArtifactApiClient, type LivingDocApiClient } from "./remote-api.js";
|
|
6
6
|
import { type PublicationMetadataStore } from "./storage/publication-metadata.js";
|
|
7
7
|
export interface CliDependencies {
|
|
8
8
|
env?: NodeJS.ProcessEnv;
|
|
@@ -11,6 +11,7 @@ export interface CliDependencies {
|
|
|
11
11
|
tokenStore?: PublisherTokenStore;
|
|
12
12
|
metadataStore?: PublicationMetadataStore;
|
|
13
13
|
apiClient?: ArtifactApiClient;
|
|
14
|
+
docApiClient?: LivingDocApiClient;
|
|
14
15
|
configDir?: string;
|
|
15
16
|
openBrowser?: (url: string) => Promise<void>;
|
|
16
17
|
stdin?: NodeJS.ReadStream;
|
package/dist/src/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAQA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,WAAW,CAAC;AAQnB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAOL,KAAK,uBAAuB,EAC7B,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAQA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,WAAW,CAAC;AAQnB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAOL,KAAK,uBAAuB,EAC7B,MAAM,kBAAkB,CAAC;AAS1B,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,mCAAmC,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC3C,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,aAAa,CAAC,EAAE,wBAAwB,CAAC;IACzC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CAClB,cAAc,EAAE,MAAM,KACnB,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACtC,cAAc,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC9C,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACnC;AAED,wBAAsB,MAAM,CAC1B,IAAI,EAAE,MAAM,EAAE,EACd,YAAY,GAAE,eAAoB,GACjC,OAAO,CAAC,MAAM,CAAC,CA0NjB"}
|
package/dist/src/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { realpathSync } from "node:fs";
|
|
3
|
-
import { realpath, writeFile, mkdir } from "node:fs/promises";
|
|
3
|
+
import { readFile, realpath, writeFile, mkdir } from "node:fs/promises";
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
import { createInterface } from "node:readline/promises";
|
|
6
6
|
import { fileURLToPath } from "node:url";
|
|
@@ -8,7 +8,8 @@ import { authenticatePublisherToken, createNeonPublisherTokenStore, } from "./au
|
|
|
8
8
|
import { clearLocalPublisherConfig, defaultConfigDir, FilePublicationStateStore, resolvePublisherToken, writeLocalPublisherConfig, } from "./local-config.js";
|
|
9
9
|
import { loginWithBrowserFlow, openDefaultBrowser } from "./login-flow.js";
|
|
10
10
|
import { absolutePublicationUrl, defaultPublicBaseUrl, publishArtifactFromEnvironment, publishArtifactSummary, removePublicationFromEnvironment, removePublicationSummary, } from "./publication.js";
|
|
11
|
-
import {
|
|
11
|
+
import { collectDocAssets, contentTypeForDocAssetPath, opaqueIdFromViewReference, readCollectedDocAsset, } from "./living-doc.js";
|
|
12
|
+
import { HttpArtifactApiClient, HttpLivingDocApiClient, } from "./remote-api.js";
|
|
12
13
|
export async function runCli(argv, dependencies = {}) {
|
|
13
14
|
const [command, firstArg, ...flags] = argv;
|
|
14
15
|
const options = parseFlags(command === "publish" ? flags : argv.slice(1));
|
|
@@ -170,6 +171,17 @@ export async function runCli(argv, dependencies = {}) {
|
|
|
170
171
|
})}\n`);
|
|
171
172
|
return 0;
|
|
172
173
|
}
|
|
174
|
+
if (command === "doc") {
|
|
175
|
+
return await runDocCommand(firstArg, flags[0], {
|
|
176
|
+
env,
|
|
177
|
+
configDir,
|
|
178
|
+
options,
|
|
179
|
+
stdout,
|
|
180
|
+
stderr,
|
|
181
|
+
stdin: dependencies.stdin ?? process.stdin,
|
|
182
|
+
docApiClient: dependencies.docApiClient,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
173
185
|
printUsage(stderr);
|
|
174
186
|
return 1;
|
|
175
187
|
}
|
|
@@ -178,6 +190,92 @@ export async function runCli(argv, dependencies = {}) {
|
|
|
178
190
|
return 1;
|
|
179
191
|
}
|
|
180
192
|
}
|
|
193
|
+
async function runDocCommand(subcommand, target, context) {
|
|
194
|
+
const { env, configDir, options, stdout } = context;
|
|
195
|
+
const token = await resolvePublisherToken({ env, configDir });
|
|
196
|
+
if (!token.token)
|
|
197
|
+
throw new Error("A valid Publisher Token is required");
|
|
198
|
+
const client = context.docApiClient ??
|
|
199
|
+
new HttpLivingDocApiClient(options["base-url"] ??
|
|
200
|
+
env.ARTIFACTS_PUBLIC_BASE_URL ??
|
|
201
|
+
defaultPublicBaseUrl);
|
|
202
|
+
if (subcommand === "publish") {
|
|
203
|
+
if (!target)
|
|
204
|
+
throw new Error("doc publish requires a Markdown file path.");
|
|
205
|
+
const markdownPath = await realpath(target);
|
|
206
|
+
const markdown = await readFile(markdownPath, "utf-8");
|
|
207
|
+
const force = options.force === "true";
|
|
208
|
+
const collected = await collectDocAssets({
|
|
209
|
+
markdown,
|
|
210
|
+
markdownPath,
|
|
211
|
+
force,
|
|
212
|
+
});
|
|
213
|
+
const bytesByAssetPath = new Map();
|
|
214
|
+
const assets = [];
|
|
215
|
+
for (const asset of collected.assets) {
|
|
216
|
+
let data = bytesByAssetPath.get(asset.assetPath);
|
|
217
|
+
if (!data) {
|
|
218
|
+
data = (await readCollectedDocAsset(asset)).toString("base64");
|
|
219
|
+
bytesByAssetPath.set(asset.assetPath, data);
|
|
220
|
+
}
|
|
221
|
+
assets.push({
|
|
222
|
+
relativeRef: asset.relativeRef,
|
|
223
|
+
assetPath: asset.assetPath,
|
|
224
|
+
data,
|
|
225
|
+
contentType: contentTypeForDocAssetPath(asset.assetPath),
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
const result = await client.publishDoc(token.token, markdown, {
|
|
229
|
+
title: options.title,
|
|
230
|
+
assets,
|
|
231
|
+
});
|
|
232
|
+
if (collected.missing.length > 0) {
|
|
233
|
+
context.stderr.write(`Warning: skipped missing Doc Assets (--force):\n${collected.missing
|
|
234
|
+
.map((path) => ` - ${path}`)
|
|
235
|
+
.join("\n")}\n`);
|
|
236
|
+
}
|
|
237
|
+
stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
238
|
+
return 0;
|
|
239
|
+
}
|
|
240
|
+
if (subcommand === "pull") {
|
|
241
|
+
if (!target)
|
|
242
|
+
throw new Error("doc pull requires a Living Doc View URL or id.");
|
|
243
|
+
const result = await client.pullDoc(token.token, opaqueIdFromViewReference(target));
|
|
244
|
+
stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
245
|
+
return 0;
|
|
246
|
+
}
|
|
247
|
+
if (subcommand === "respond") {
|
|
248
|
+
if (!target)
|
|
249
|
+
throw new Error("doc respond requires a Living Doc View URL or id.");
|
|
250
|
+
const raw = options.body
|
|
251
|
+
? await readFile(options.body, "utf-8")
|
|
252
|
+
: await readStdin(context.stdin);
|
|
253
|
+
const parsed = JSON.parse(raw || "{}");
|
|
254
|
+
const result = await client.respondDoc(token.token, opaqueIdFromViewReference(target), { suggestions: parsed.suggestions, replies: parsed.replies });
|
|
255
|
+
stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
256
|
+
return 0;
|
|
257
|
+
}
|
|
258
|
+
if (subcommand === "list") {
|
|
259
|
+
const result = await client.listDocs(token.token);
|
|
260
|
+
stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
261
|
+
return 0;
|
|
262
|
+
}
|
|
263
|
+
if (subcommand === "remove") {
|
|
264
|
+
if (!target)
|
|
265
|
+
throw new Error("doc remove requires a Living Doc View URL or id.");
|
|
266
|
+
if (!Object.hasOwn(options, "yes")) {
|
|
267
|
+
const confirmed = await confirmRemoval(target, context.stdin, stdout);
|
|
268
|
+
if (!confirmed) {
|
|
269
|
+
stdout.write("Removal cancelled.\n");
|
|
270
|
+
return 1;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
const result = await client.removeDoc(token.token, opaqueIdFromViewReference(target));
|
|
274
|
+
stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
275
|
+
return 0;
|
|
276
|
+
}
|
|
277
|
+
throw new Error("Usage: artifacts doc <publish <file.md>|pull <url>|respond <url>|list|remove <url>>");
|
|
278
|
+
}
|
|
181
279
|
async function publishWithDefaultApiClient(sourcePath, token, options) {
|
|
182
280
|
const stateStore = new FilePublicationStateStore(options.configDir);
|
|
183
281
|
const localSourcePath = await realpath(sourcePath);
|
|
@@ -272,13 +370,18 @@ function readStdin(stream) {
|
|
|
272
370
|
});
|
|
273
371
|
}
|
|
274
372
|
function printUsage(output) {
|
|
275
|
-
output.write("Usage: npx @the-focus-ai/artifacts <login|logout|whoami|publish|remove|list>\n" +
|
|
373
|
+
output.write("Usage: npx @the-focus-ai/artifacts <login|logout|whoami|publish|remove|list|doc>\n" +
|
|
276
374
|
" npx @the-focus-ai/artifacts login [--base-url https://artifacts.thefocus.ai]\n" +
|
|
277
375
|
' npx @the-focus-ai/artifacts publish <file.html|directory> [--entry-page index.html] [--title "My Report"] [--base-url https://artifacts.thefocus.ai] [--new] [--update <Publication URL>] [--verbose] [--open]\n' +
|
|
278
376
|
" npx @the-focus-ai/artifacts remove <Publication URL> [--yes] [--base-url https://artifacts.thefocus.ai]\n" +
|
|
279
377
|
" npx @the-focus-ai/artifacts list [--base-url https://artifacts.thefocus.ai]\n" +
|
|
280
378
|
" npx @the-focus-ai/artifacts whoami [--base-url https://artifacts.thefocus.ai]\n" +
|
|
281
|
-
" npx @the-focus-ai/artifacts logout\n"
|
|
379
|
+
" npx @the-focus-ai/artifacts logout\n" +
|
|
380
|
+
' npx @the-focus-ai/artifacts doc publish <file.md> [--title "My Doc"] [--force] [--base-url ...]\n' +
|
|
381
|
+
" npx @the-focus-ai/artifacts doc pull <Living Doc View URL or id> [--base-url ...]\n" +
|
|
382
|
+
" npx @the-focus-ai/artifacts doc respond <Living Doc View URL or id> [--body feedback.json] [--base-url ...]\n" +
|
|
383
|
+
" npx @the-focus-ai/artifacts doc list [--base-url ...]\n" +
|
|
384
|
+
" npx @the-focus-ai/artifacts doc remove <Living Doc View URL or id> [--yes] [--base-url ...]\n");
|
|
282
385
|
}
|
|
283
386
|
const isDirectRun = process.argv[1]
|
|
284
387
|
? fileURLToPath(import.meta.url) === realpathSync(process.argv[1])
|
package/dist/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type DiffOp = "context" | "add" | "remove";
|
|
2
|
+
export interface DiffLine {
|
|
3
|
+
op: DiffOp;
|
|
4
|
+
text: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Compute a line-oriented diff between two Markdown snapshots using a longest
|
|
8
|
+
* common subsequence. Kept dependency-free and small; it exists to show a
|
|
9
|
+
* Reviewer's changes between two Living Doc Versions, not to be a full patch
|
|
10
|
+
* format.
|
|
11
|
+
*/
|
|
12
|
+
export declare function diffLines(before: string, after: string): DiffLine[];
|
|
13
|
+
/** Render a diff as a unified-style text block ( `+`/`-`/` ` prefixes ). */
|
|
14
|
+
export declare function formatUnifiedDiff(before: string, after: string): string;
|
|
15
|
+
export declare function hasChanges(before: string, after: string): boolean;
|
|
16
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/diff.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;AAElD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,CAoCnE;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIvE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjE"}
|
package/dist/src/diff.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute a line-oriented diff between two Markdown snapshots using a longest
|
|
3
|
+
* common subsequence. Kept dependency-free and small; it exists to show a
|
|
4
|
+
* Reviewer's changes between two Living Doc Versions, not to be a full patch
|
|
5
|
+
* format.
|
|
6
|
+
*/
|
|
7
|
+
export function diffLines(before, after) {
|
|
8
|
+
const beforeLines = splitLines(before);
|
|
9
|
+
const afterLines = splitLines(after);
|
|
10
|
+
const lcs = longestCommonSubsequence(beforeLines, afterLines);
|
|
11
|
+
const result = [];
|
|
12
|
+
let beforeIndex = 0;
|
|
13
|
+
let afterIndex = 0;
|
|
14
|
+
for (const common of lcs) {
|
|
15
|
+
while (beforeIndex < beforeLines.length &&
|
|
16
|
+
beforeLines[beforeIndex] !== common) {
|
|
17
|
+
result.push({ op: "remove", text: beforeLines[beforeIndex] });
|
|
18
|
+
beforeIndex += 1;
|
|
19
|
+
}
|
|
20
|
+
while (afterIndex < afterLines.length &&
|
|
21
|
+
afterLines[afterIndex] !== common) {
|
|
22
|
+
result.push({ op: "add", text: afterLines[afterIndex] });
|
|
23
|
+
afterIndex += 1;
|
|
24
|
+
}
|
|
25
|
+
result.push({ op: "context", text: common });
|
|
26
|
+
beforeIndex += 1;
|
|
27
|
+
afterIndex += 1;
|
|
28
|
+
}
|
|
29
|
+
while (beforeIndex < beforeLines.length) {
|
|
30
|
+
result.push({ op: "remove", text: beforeLines[beforeIndex] });
|
|
31
|
+
beforeIndex += 1;
|
|
32
|
+
}
|
|
33
|
+
while (afterIndex < afterLines.length) {
|
|
34
|
+
result.push({ op: "add", text: afterLines[afterIndex] });
|
|
35
|
+
afterIndex += 1;
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
/** Render a diff as a unified-style text block ( `+`/`-`/` ` prefixes ). */
|
|
40
|
+
export function formatUnifiedDiff(before, after) {
|
|
41
|
+
return diffLines(before, after)
|
|
42
|
+
.map((line) => `${prefixFor(line.op)}${line.text}`)
|
|
43
|
+
.join("\n");
|
|
44
|
+
}
|
|
45
|
+
export function hasChanges(before, after) {
|
|
46
|
+
return before !== after;
|
|
47
|
+
}
|
|
48
|
+
function prefixFor(op) {
|
|
49
|
+
if (op === "add")
|
|
50
|
+
return "+";
|
|
51
|
+
if (op === "remove")
|
|
52
|
+
return "-";
|
|
53
|
+
return " ";
|
|
54
|
+
}
|
|
55
|
+
function splitLines(value) {
|
|
56
|
+
if (value === "")
|
|
57
|
+
return [];
|
|
58
|
+
return value.replace(/\r\n/g, "\n").split("\n");
|
|
59
|
+
}
|
|
60
|
+
function longestCommonSubsequence(a, b) {
|
|
61
|
+
const rows = a.length;
|
|
62
|
+
const cols = b.length;
|
|
63
|
+
const table = Array.from({ length: rows + 1 }, () => new Array(cols + 1).fill(0));
|
|
64
|
+
for (let i = rows - 1; i >= 0; i -= 1) {
|
|
65
|
+
for (let j = cols - 1; j >= 0; j -= 1) {
|
|
66
|
+
table[i][j] =
|
|
67
|
+
a[i] === b[j]
|
|
68
|
+
? table[i + 1][j + 1] + 1
|
|
69
|
+
: Math.max(table[i + 1][j], table[i][j + 1]);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const sequence = [];
|
|
73
|
+
let i = 0;
|
|
74
|
+
let j = 0;
|
|
75
|
+
while (i < rows && j < cols) {
|
|
76
|
+
if (a[i] === b[j]) {
|
|
77
|
+
sequence.push(a[i]);
|
|
78
|
+
i += 1;
|
|
79
|
+
j += 1;
|
|
80
|
+
}
|
|
81
|
+
else if (table[i + 1][j] >= table[i][j + 1]) {
|
|
82
|
+
i += 1;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
j += 1;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return sequence;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/diff.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,KAAa;IACrD,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,wBAAwB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAE9D,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,MAAM,IAAI,GAAG,EAAE,CAAC;QACzB,OACE,WAAW,GAAG,WAAW,CAAC,MAAM;YAChC,WAAW,CAAC,WAAW,CAAC,KAAK,MAAM,EACnC,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC9D,WAAW,IAAI,CAAC,CAAC;QACnB,CAAC;QACD,OACE,UAAU,GAAG,UAAU,CAAC,MAAM;YAC9B,UAAU,CAAC,UAAU,CAAC,KAAK,MAAM,EACjC,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACzD,UAAU,IAAI,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7C,WAAW,IAAI,CAAC,CAAC;QACjB,UAAU,IAAI,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,WAAW,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC9D,WAAW,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,UAAU,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACzD,UAAU,IAAI,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,KAAa;IAC7D,OAAO,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;SAC5B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;SAClD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,KAAa;IACtD,OAAO,MAAM,KAAK,KAAK,CAAC;AAC1B,CAAC;AAED,SAAS,SAAS,CAAC,EAAU;IAC3B,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO,GAAG,CAAC;IAC7B,IAAI,EAAE,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IAChC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAC5B,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,wBAAwB,CAAC,CAAW,EAAE,CAAW;IACxD,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,MAAM,KAAK,GAAe,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAC9D,IAAI,KAAK,CAAS,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACpC,CAAC;IACF,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACT,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACX,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;oBACzB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC,IAAI,CAAC,CAAC;YACP,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC9C,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,CAAC;YACN,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export declare const maxDocAssetFileBytes: number;
|
|
2
|
+
export declare const maxDocAssetTotalBytes: number;
|
|
3
|
+
export declare const maxDocAssetFileCount = 1000;
|
|
4
|
+
export interface CollectedDocAsset {
|
|
5
|
+
/** Exact path string from the Markdown image target. */
|
|
6
|
+
relativeRef: string;
|
|
7
|
+
absolutePath: string;
|
|
8
|
+
/** Hosted path under /d/{opaqueId}/… (no `..` segments). */
|
|
9
|
+
assetPath: string;
|
|
10
|
+
size: number;
|
|
11
|
+
}
|
|
12
|
+
export interface CollectDocAssetsResult {
|
|
13
|
+
assets: CollectedDocAsset[];
|
|
14
|
+
missing: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface CollectDocAssetsInput {
|
|
17
|
+
markdown: string;
|
|
18
|
+
markdownPath: string;
|
|
19
|
+
force?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Find relative Markdown image refs and resolve them on disk for Doc Asset upload.
|
|
23
|
+
*/
|
|
24
|
+
export declare function collectDocAssets(input: CollectDocAssetsInput): Promise<CollectDocAssetsResult>;
|
|
25
|
+
export declare function extractRelativeImageRefs(markdown: string): string[];
|
|
26
|
+
/** Encode a filesystem-relative path as a URL-safe assetPath (no `..`). */
|
|
27
|
+
export declare function toHostedAssetPath(markdownDir: string, absoluteFilePath: string): string;
|
|
28
|
+
export declare function readCollectedDocAsset(asset: CollectedDocAsset): Promise<Buffer>;
|
|
29
|
+
//# sourceMappingURL=doc-asset-collect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-asset-collect.d.ts","sourceRoot":"","sources":["../../src/doc-asset-collect.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,oBAAoB,QAAmB,CAAC;AACrD,eAAO,MAAM,qBAAqB,QAAoB,CAAC;AACvD,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAazC,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,sBAAsB,CAAC,CA6FjC;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CASnE;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAUR;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,MAAM,CAAC,CAEjB"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { lstat, readFile } from "node:fs/promises";
|
|
2
|
+
import { dirname, extname, isAbsolute, relative, resolve, sep, } from "node:path";
|
|
3
|
+
export const maxDocAssetFileBytes = 25 * 1024 * 1024;
|
|
4
|
+
export const maxDocAssetTotalBytes = 100 * 1024 * 1024;
|
|
5
|
+
export const maxDocAssetFileCount = 1000;
|
|
6
|
+
const imageExtensions = new Set([
|
|
7
|
+
".png",
|
|
8
|
+
".jpg",
|
|
9
|
+
".jpeg",
|
|
10
|
+
".gif",
|
|
11
|
+
".webp",
|
|
12
|
+
".svg",
|
|
13
|
+
]);
|
|
14
|
+
const markdownImageRefRe = /!\[[^\]]*]\(([^)\s]+)(?:\s+"[^"]*")?\)/g;
|
|
15
|
+
/**
|
|
16
|
+
* Find relative Markdown image refs and resolve them on disk for Doc Asset upload.
|
|
17
|
+
*/
|
|
18
|
+
export async function collectDocAssets(input) {
|
|
19
|
+
const markdownDir = dirname(resolve(input.markdownPath));
|
|
20
|
+
const refs = [...new Set(extractRelativeImageRefs(input.markdown))];
|
|
21
|
+
const assets = [];
|
|
22
|
+
const missing = [];
|
|
23
|
+
const seenAssetPaths = new Set();
|
|
24
|
+
for (const relativeRef of refs) {
|
|
25
|
+
if (isAbsolute(relativeRef) || /^[a-zA-Z]:[\\/]/.test(relativeRef)) {
|
|
26
|
+
throw new Error(`Doc Asset path must be relative (got absolute path: ${relativeRef})`);
|
|
27
|
+
}
|
|
28
|
+
const absolutePath = resolve(markdownDir, relativeRef);
|
|
29
|
+
let stats;
|
|
30
|
+
try {
|
|
31
|
+
stats = await lstat(absolutePath);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
missing.push(relativeRef);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (stats.isSymbolicLink()) {
|
|
38
|
+
throw new Error(`Doc Asset symlinks are not supported: ${relativeRef}`);
|
|
39
|
+
}
|
|
40
|
+
if (!stats.isFile()) {
|
|
41
|
+
missing.push(relativeRef);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const ext = extname(absolutePath).toLowerCase();
|
|
45
|
+
if (!imageExtensions.has(ext)) {
|
|
46
|
+
throw new Error(`Doc Asset must be an image file (got ${ext || "no extension"}): ${relativeRef}`);
|
|
47
|
+
}
|
|
48
|
+
if (stats.size > maxDocAssetFileBytes) {
|
|
49
|
+
throw new Error(`Doc Asset ${relativeRef} exceeds the 25 MB single-file limit.`);
|
|
50
|
+
}
|
|
51
|
+
const assetPath = toHostedAssetPath(markdownDir, absolutePath);
|
|
52
|
+
if (seenAssetPaths.has(assetPath)) {
|
|
53
|
+
// Same file via another ref — keep first mapping; rewrite handles both refs.
|
|
54
|
+
assets.push({
|
|
55
|
+
relativeRef,
|
|
56
|
+
absolutePath,
|
|
57
|
+
assetPath,
|
|
58
|
+
size: stats.size,
|
|
59
|
+
});
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
seenAssetPaths.add(assetPath);
|
|
63
|
+
assets.push({
|
|
64
|
+
relativeRef,
|
|
65
|
+
absolutePath,
|
|
66
|
+
assetPath,
|
|
67
|
+
size: stats.size,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
const uniqueFiles = new Map();
|
|
71
|
+
for (const asset of assets) {
|
|
72
|
+
uniqueFiles.set(asset.assetPath, asset);
|
|
73
|
+
}
|
|
74
|
+
if (uniqueFiles.size > maxDocAssetFileCount) {
|
|
75
|
+
throw new Error(`Living Doc has ${uniqueFiles.size} Doc Assets and exceeds the 1,000 file limit.`);
|
|
76
|
+
}
|
|
77
|
+
const totalSize = [...uniqueFiles.values()].reduce((sum, file) => sum + file.size, 0);
|
|
78
|
+
if (totalSize > maxDocAssetTotalBytes) {
|
|
79
|
+
throw new Error(`Living Doc Doc Assets total size exceeds the 100 MB total limit.`);
|
|
80
|
+
}
|
|
81
|
+
if (missing.length > 0 && !input.force) {
|
|
82
|
+
throw new Error(`Missing Doc Asset file(s):\n${missing.map((path) => ` - ${path}`).join("\n")}\nRe-run with --force to publish without them.`);
|
|
83
|
+
}
|
|
84
|
+
const present = assets.filter((asset) => !missing.includes(asset.relativeRef));
|
|
85
|
+
return { assets: present, missing };
|
|
86
|
+
}
|
|
87
|
+
export function extractRelativeImageRefs(markdown) {
|
|
88
|
+
const refs = [];
|
|
89
|
+
for (const match of markdown.matchAll(markdownImageRefRe)) {
|
|
90
|
+
const target = match[1]?.trim();
|
|
91
|
+
if (!target)
|
|
92
|
+
continue;
|
|
93
|
+
if (/^(https?:|data:|mailto:|#)/i.test(target))
|
|
94
|
+
continue;
|
|
95
|
+
refs.push(target);
|
|
96
|
+
}
|
|
97
|
+
return refs;
|
|
98
|
+
}
|
|
99
|
+
/** Encode a filesystem-relative path as a URL-safe assetPath (no `..`). */
|
|
100
|
+
export function toHostedAssetPath(markdownDir, absoluteFilePath) {
|
|
101
|
+
const rel = relative(markdownDir, absoluteFilePath);
|
|
102
|
+
const segments = rel.split(sep).filter((segment) => segment.length > 0);
|
|
103
|
+
const encoded = segments.map((segment) => segment === ".." ? "__parent__" : segment);
|
|
104
|
+
if (encoded.length === 0 || encoded.some((s) => s === ".")) {
|
|
105
|
+
throw new Error(`Could not derive Doc Asset path for ${absoluteFilePath}`);
|
|
106
|
+
}
|
|
107
|
+
return encoded.join("/");
|
|
108
|
+
}
|
|
109
|
+
export async function readCollectedDocAsset(asset) {
|
|
110
|
+
return readFile(asset.absolutePath);
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=doc-asset-collect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-asset-collect.js","sourceRoot":"","sources":["../../src/doc-asset-collect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rewrite Markdown image targets using an exact relativeRef → hosted URL map.
|
|
3
|
+
* Leaves http(s)/data/mailto/# targets alone (they never appear in the map).
|
|
4
|
+
*/
|
|
5
|
+
export declare function rewriteDocAssetMarkdown(markdown: string, refToHostedUrl: Map<string, string>): string;
|
|
6
|
+
//# sourceMappingURL=doc-asset-rewrite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-asset-rewrite.d.ts","sourceRoot":"","sources":["../../src/doc-asset-rewrite.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,MAAM,CAUR"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rewrite Markdown image targets using an exact relativeRef → hosted URL map.
|
|
3
|
+
* Leaves http(s)/data/mailto/# targets alone (they never appear in the map).
|
|
4
|
+
*/
|
|
5
|
+
export function rewriteDocAssetMarkdown(markdown, refToHostedUrl) {
|
|
6
|
+
if (refToHostedUrl.size === 0)
|
|
7
|
+
return markdown;
|
|
8
|
+
return markdown.replace(/(!\[[^\]]*]\()([^)\s]+)((?:\s+"[^"]*")?\))/g, (full, prefix, target, suffix) => {
|
|
9
|
+
const hosted = refToHostedUrl.get(target.trim());
|
|
10
|
+
if (!hosted)
|
|
11
|
+
return full;
|
|
12
|
+
return `${prefix}${hosted}${suffix}`;
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=doc-asset-rewrite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-asset-rewrite.js","sourceRoot":"","sources":["../../src/doc-asset-rewrite.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAgB,EAChB,cAAmC;IAEnC,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC/C,OAAO,QAAQ,CAAC,OAAO,CACrB,6CAA6C,EAC7C,CAAC,IAAI,EAAE,MAAc,EAAE,MAAc,EAAE,MAAc,EAAE,EAAE;QACvD,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;IACvC,CAAC,CACF,CAAC;AACJ,CAAC"}
|