@cuppacue/cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +85 -0
- package/dist/ai/__tests__/generate.test.d.ts +2 -0
- package/dist/ai/__tests__/generate.test.d.ts.map +1 -0
- package/dist/ai/__tests__/generate.test.js +129 -0
- package/dist/ai/__tests__/generate.test.js.map +1 -0
- package/dist/ai/__tests__/images.test.d.ts +2 -0
- package/dist/ai/__tests__/images.test.d.ts.map +1 -0
- package/dist/ai/__tests__/images.test.js +186 -0
- package/dist/ai/__tests__/images.test.js.map +1 -0
- package/dist/ai/__tests__/prompt.test.d.ts +2 -0
- package/dist/ai/__tests__/prompt.test.d.ts.map +1 -0
- package/dist/ai/__tests__/prompt.test.js +98 -0
- package/dist/ai/__tests__/prompt.test.js.map +1 -0
- package/dist/ai/__tests__/refine.test.d.ts +2 -0
- package/dist/ai/__tests__/refine.test.d.ts.map +1 -0
- package/dist/ai/__tests__/refine.test.js +87 -0
- package/dist/ai/__tests__/refine.test.js.map +1 -0
- package/dist/ai/client.d.ts +4 -0
- package/dist/ai/client.d.ts.map +1 -0
- package/dist/ai/client.js +36 -0
- package/dist/ai/client.js.map +1 -0
- package/dist/ai/example.d.ts +6 -0
- package/dist/ai/example.d.ts.map +1 -0
- package/dist/ai/example.js +284 -0
- package/dist/ai/example.js.map +1 -0
- package/dist/ai/generate.d.ts +15 -0
- package/dist/ai/generate.d.ts.map +1 -0
- package/dist/ai/generate.js +120 -0
- package/dist/ai/generate.js.map +1 -0
- package/dist/ai/images.d.ts +8 -0
- package/dist/ai/images.d.ts.map +1 -0
- package/dist/ai/images.js +71 -0
- package/dist/ai/images.js.map +1 -0
- package/dist/ai/index.d.ts +7 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +7 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/prompt.d.ts +10 -0
- package/dist/ai/prompt.d.ts.map +1 -0
- package/dist/ai/prompt.js +119 -0
- package/dist/ai/prompt.js.map +1 -0
- package/dist/ai/refine.d.ts +6 -0
- package/dist/ai/refine.d.ts.map +1 -0
- package/dist/ai/refine.js +22 -0
- package/dist/ai/refine.js.map +1 -0
- package/dist/ai/schema.d.ts +5 -0
- package/dist/ai/schema.d.ts.map +1 -0
- package/dist/ai/schema.js +292 -0
- package/dist/ai/schema.js.map +1 -0
- package/dist/commands/__tests__/backstage.test.d.ts +2 -0
- package/dist/commands/__tests__/backstage.test.d.ts.map +1 -0
- package/dist/commands/__tests__/backstage.test.js +45 -0
- package/dist/commands/__tests__/backstage.test.js.map +1 -0
- package/dist/commands/__tests__/export.test.d.ts +2 -0
- package/dist/commands/__tests__/export.test.d.ts.map +1 -0
- package/dist/commands/__tests__/export.test.js +50 -0
- package/dist/commands/__tests__/export.test.js.map +1 -0
- package/dist/commands/ai.d.ts +2 -0
- package/dist/commands/ai.d.ts.map +1 -0
- package/dist/commands/ai.js +113 -0
- package/dist/commands/ai.js.map +1 -0
- package/dist/commands/build.d.ts +2 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +121 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/export-pdf.d.ts +9 -0
- package/dist/commands/export-pdf.d.ts.map +1 -0
- package/dist/commands/export-pdf.js +109 -0
- package/dist/commands/export-pdf.js.map +1 -0
- package/dist/commands/export.d.ts +2 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +147 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +54 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/preview.d.ts +2 -0
- package/dist/commands/preview.d.ts.map +1 -0
- package/dist/commands/preview.js +78 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/serve.d.ts +7 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +773 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/validate.d.ts +2 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +39 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/github/__tests__/fetcher.test.d.ts +2 -0
- package/dist/github/__tests__/fetcher.test.d.ts.map +1 -0
- package/dist/github/__tests__/fetcher.test.js +102 -0
- package/dist/github/__tests__/fetcher.test.js.map +1 -0
- package/dist/github/__tests__/rewrite-images.test.d.ts +2 -0
- package/dist/github/__tests__/rewrite-images.test.d.ts.map +1 -0
- package/dist/github/__tests__/rewrite-images.test.js +79 -0
- package/dist/github/__tests__/rewrite-images.test.js.map +1 -0
- package/dist/github/__tests__/url-parser.test.d.ts +2 -0
- package/dist/github/__tests__/url-parser.test.d.ts.map +1 -0
- package/dist/github/__tests__/url-parser.test.js +96 -0
- package/dist/github/__tests__/url-parser.test.js.map +1 -0
- package/dist/github/fetcher.d.ts +10 -0
- package/dist/github/fetcher.d.ts.map +1 -0
- package/dist/github/fetcher.js +53 -0
- package/dist/github/fetcher.js.map +1 -0
- package/dist/github/index.d.ts +5 -0
- package/dist/github/index.d.ts.map +1 -0
- package/dist/github/index.js +4 -0
- package/dist/github/index.js.map +1 -0
- package/dist/github/rewrite-images.d.ts +7 -0
- package/dist/github/rewrite-images.d.ts.map +1 -0
- package/dist/github/rewrite-images.js +26 -0
- package/dist/github/rewrite-images.js.map +1 -0
- package/dist/github/url-parser.d.ts +12 -0
- package/dist/github/url-parser.d.ts.map +1 -0
- package/dist/github/url-parser.js +60 -0
- package/dist/github/url-parser.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/markdown/__tests__/auto-slide.test.d.ts +2 -0
- package/dist/markdown/__tests__/auto-slide.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/auto-slide.test.js +325 -0
- package/dist/markdown/__tests__/auto-slide.test.js.map +1 -0
- package/dist/markdown/__tests__/compiler.test.d.ts +2 -0
- package/dist/markdown/__tests__/compiler.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/compiler.test.js +142 -0
- package/dist/markdown/__tests__/compiler.test.js.map +1 -0
- package/dist/markdown/__tests__/custom-parsers.test.d.ts +2 -0
- package/dist/markdown/__tests__/custom-parsers.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/custom-parsers.test.js +182 -0
- package/dist/markdown/__tests__/custom-parsers.test.js.map +1 -0
- package/dist/markdown/__tests__/frontmatter.test.d.ts +2 -0
- package/dist/markdown/__tests__/frontmatter.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/frontmatter.test.js +162 -0
- package/dist/markdown/__tests__/frontmatter.test.js.map +1 -0
- package/dist/markdown/__tests__/layout.test.d.ts +2 -0
- package/dist/markdown/__tests__/layout.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/layout.test.js +85 -0
- package/dist/markdown/__tests__/layout.test.js.map +1 -0
- package/dist/markdown/__tests__/parser.test.d.ts +2 -0
- package/dist/markdown/__tests__/parser.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/parser.test.js +646 -0
- package/dist/markdown/__tests__/parser.test.js.map +1 -0
- package/dist/markdown/__tests__/timesheet-gen.test.d.ts +2 -0
- package/dist/markdown/__tests__/timesheet-gen.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/timesheet-gen.test.js +90 -0
- package/dist/markdown/__tests__/timesheet-gen.test.js.map +1 -0
- package/dist/markdown/auto-slide.d.ts +16 -0
- package/dist/markdown/auto-slide.d.ts.map +1 -0
- package/dist/markdown/auto-slide.js +144 -0
- package/dist/markdown/auto-slide.js.map +1 -0
- package/dist/markdown/compiler.d.ts +12 -0
- package/dist/markdown/compiler.d.ts.map +1 -0
- package/dist/markdown/compiler.js +47 -0
- package/dist/markdown/compiler.js.map +1 -0
- package/dist/markdown/custom-parsers.d.ts +69 -0
- package/dist/markdown/custom-parsers.d.ts.map +1 -0
- package/dist/markdown/custom-parsers.js +227 -0
- package/dist/markdown/custom-parsers.js.map +1 -0
- package/dist/markdown/frontmatter.d.ts +33 -0
- package/dist/markdown/frontmatter.d.ts.map +1 -0
- package/dist/markdown/frontmatter.js +83 -0
- package/dist/markdown/frontmatter.js.map +1 -0
- package/dist/markdown/id.d.ts +4 -0
- package/dist/markdown/id.d.ts.map +1 -0
- package/dist/markdown/id.js +15 -0
- package/dist/markdown/id.js.map +1 -0
- package/dist/markdown/index.d.ts +8 -0
- package/dist/markdown/index.d.ts.map +1 -0
- package/dist/markdown/index.js +6 -0
- package/dist/markdown/index.js.map +1 -0
- package/dist/markdown/parser.d.ts +35 -0
- package/dist/markdown/parser.d.ts.map +1 -0
- package/dist/markdown/parser.js +605 -0
- package/dist/markdown/parser.js.map +1 -0
- package/dist/markdown/timesheet-gen.d.ts +6 -0
- package/dist/markdown/timesheet-gen.d.ts.map +1 -0
- package/dist/markdown/timesheet-gen.js +223 -0
- package/dist/markdown/timesheet-gen.js.map +1 -0
- package/dist/player/CuePlayer.d.ts +58 -0
- package/dist/player/CuePlayer.d.ts.map +1 -0
- package/dist/player/NavBar.d.ts +31 -0
- package/dist/player/NavBar.d.ts.map +1 -0
- package/dist/player/PresenterView.d.ts +25 -0
- package/dist/player/PresenterView.d.ts.map +1 -0
- package/dist/player/SlideOverview.d.ts +16 -0
- package/dist/player/SlideOverview.d.ts.map +1 -0
- package/dist/player/__mocks__/chart.d.ts +29 -0
- package/dist/player/__mocks__/chart.d.ts.map +1 -0
- package/dist/player/__mocks__/mermaid.d.ts +8 -0
- package/dist/player/__mocks__/mermaid.d.ts.map +1 -0
- package/dist/player/__tests__/animator.test.d.ts +2 -0
- package/dist/player/__tests__/animator.test.d.ts.map +1 -0
- package/dist/player/__tests__/layout.test.d.ts +2 -0
- package/dist/player/__tests__/layout.test.d.ts.map +1 -0
- package/dist/player/__tests__/overview.test.d.ts +2 -0
- package/dist/player/__tests__/overview.test.d.ts.map +1 -0
- package/dist/player/__tests__/timeline.test.d.ts +2 -0
- package/dist/player/__tests__/timeline.test.d.ts.map +1 -0
- package/dist/player/animator.d.ts +4 -0
- package/dist/player/animator.d.ts.map +1 -0
- package/dist/player/cuppacue-player.css +1 -0
- package/dist/player/cuppacue-player.js +3247 -0
- package/dist/player/index.d.ts +14 -0
- package/dist/player/index.d.ts.map +1 -0
- package/dist/player/loader.d.ts +3 -0
- package/dist/player/loader.d.ts.map +1 -0
- package/dist/player/main.d.ts +2 -0
- package/dist/player/main.d.ts.map +1 -0
- package/dist/player/navigator.d.ts +27 -0
- package/dist/player/navigator.d.ts.map +1 -0
- package/dist/player/renderer.d.ts +9 -0
- package/dist/player/renderer.d.ts.map +1 -0
- package/dist/player/renderers/cards.d.ts +3 -0
- package/dist/player/renderers/cards.d.ts.map +1 -0
- package/dist/player/renderers/chart.d.ts +3 -0
- package/dist/player/renderers/chart.d.ts.map +1 -0
- package/dist/player/renderers/icons.d.ts +6 -0
- package/dist/player/renderers/icons.d.ts.map +1 -0
- package/dist/player/renderers/mermaid.d.ts +3 -0
- package/dist/player/renderers/mermaid.d.ts.map +1 -0
- package/dist/player/renderers/stats.d.ts +3 -0
- package/dist/player/renderers/stats.d.ts.map +1 -0
- package/dist/player/renderers/terminal.d.ts +3 -0
- package/dist/player/renderers/terminal.d.ts.map +1 -0
- package/dist/player/themes/dark.d.ts +2 -0
- package/dist/player/themes/dark.d.ts.map +1 -0
- package/dist/player/themes/light.d.ts +2 -0
- package/dist/player/themes/light.d.ts.map +1 -0
- package/dist/player/timeline.d.ts +43 -0
- package/dist/player/timeline.d.ts.map +1 -0
- package/dist/serve.d.ts +2 -0
- package/dist/serve.d.ts.map +1 -0
- package/dist/serve.js +171 -0
- package/dist/serve.js.map +1 -0
- package/dist/templates/discover.d.ts +20 -0
- package/dist/templates/discover.d.ts.map +1 -0
- package/dist/templates/discover.js +86 -0
- package/dist/templates/discover.js.map +1 -0
- package/dist/templates/loader.d.ts +17 -0
- package/dist/templates/loader.d.ts.map +1 -0
- package/dist/templates/loader.js +40 -0
- package/dist/templates/loader.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAGA,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC5D"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { parseCupDirectory, parseCupFile } from "@cuppacue/format";
|
|
3
|
+
export async function validate(args) {
|
|
4
|
+
const input = args[0];
|
|
5
|
+
if (!input) {
|
|
6
|
+
console.error("Usage: cuppacue validate <directory|file.cup>");
|
|
7
|
+
process.exit(1);
|
|
8
|
+
}
|
|
9
|
+
const absPath = path.resolve(input);
|
|
10
|
+
const isCupFile = absPath.endsWith(".cup");
|
|
11
|
+
try {
|
|
12
|
+
const { cupFile, validation } = isCupFile
|
|
13
|
+
? await parseCupFile(absPath)
|
|
14
|
+
: await parseCupDirectory(absPath);
|
|
15
|
+
if (validation.valid) {
|
|
16
|
+
const sceneCount = cupFile.content.scenes.length;
|
|
17
|
+
const elementCount = cupFile.content.scenes.reduce((sum, s) => sum + s.elements.length, 0);
|
|
18
|
+
console.log(`\n Valid CuppaCue presentation`);
|
|
19
|
+
console.log(` ──────────────────────────`);
|
|
20
|
+
console.log(` Title: ${cupFile.manifest.title}`);
|
|
21
|
+
console.log(` Scenes: ${sceneCount}`);
|
|
22
|
+
console.log(` Elements: ${elementCount}`);
|
|
23
|
+
console.log(` Theme: ${cupFile.theme.name}\n`);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
console.error(`\n Invalid presentation (${validation.errors.length} errors):`);
|
|
27
|
+
for (const error of validation.errors) {
|
|
28
|
+
console.error(` ${error.path}: ${error.message}`);
|
|
29
|
+
}
|
|
30
|
+
console.log();
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
console.error(`Failed to read presentation: ${err}`);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEnE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAc;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,SAAS;YACvC,CAAC,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC;YAC7B,CAAC,CAAC,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAErC,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;YACjD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAChD,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,EACnC,CAAC,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,EAAE,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,eAAe,YAAY,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,6BAA6B,UAAU,CAAC,MAAM,CAAC,MAAM,WAAW,CAAC,CAAC;YAChF,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACtC,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACvD,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetcher.test.d.ts","sourceRoot":"","sources":["../../../src/github/__tests__/fetcher.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
2
|
+
import { fetchGitHubMarkdown } from "../fetcher.js";
|
|
3
|
+
function makeRef(overrides) {
|
|
4
|
+
return {
|
|
5
|
+
owner: "user",
|
|
6
|
+
repo: "repo",
|
|
7
|
+
branch: "main",
|
|
8
|
+
path: "README.md",
|
|
9
|
+
...overrides,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function mockFetchOk(text) {
|
|
13
|
+
return vi.fn().mockResolvedValue({
|
|
14
|
+
ok: true,
|
|
15
|
+
status: 200,
|
|
16
|
+
text: () => Promise.resolve(text),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function mockFetch404() {
|
|
20
|
+
return vi.fn().mockResolvedValue({
|
|
21
|
+
ok: false,
|
|
22
|
+
status: 404,
|
|
23
|
+
text: () => Promise.resolve("Not Found"),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
describe("fetchGitHubMarkdown", () => {
|
|
27
|
+
beforeEach(() => {
|
|
28
|
+
vi.restoreAllMocks();
|
|
29
|
+
});
|
|
30
|
+
it("fetches markdown for a known branch", async () => {
|
|
31
|
+
const mock = mockFetchOk("# Hello World");
|
|
32
|
+
vi.stubGlobal("fetch", mock);
|
|
33
|
+
const { markdown, resolvedRef } = await fetchGitHubMarkdown(makeRef());
|
|
34
|
+
expect(markdown).toBe("# Hello World");
|
|
35
|
+
expect(resolvedRef.branch).toBe("main");
|
|
36
|
+
expect(mock).toHaveBeenCalledTimes(1);
|
|
37
|
+
expect(mock.mock.calls[0][0]).toContain("/main/README.md");
|
|
38
|
+
});
|
|
39
|
+
it("resolves HEAD branch on first try", async () => {
|
|
40
|
+
const mock = mockFetchOk("# Resolved via HEAD");
|
|
41
|
+
vi.stubGlobal("fetch", mock);
|
|
42
|
+
const { markdown, resolvedRef } = await fetchGitHubMarkdown(makeRef({ branch: "HEAD" }));
|
|
43
|
+
expect(markdown).toBe("# Resolved via HEAD");
|
|
44
|
+
expect(resolvedRef.branch).toBe("HEAD");
|
|
45
|
+
expect(mock).toHaveBeenCalledTimes(1);
|
|
46
|
+
});
|
|
47
|
+
it("falls back to main when HEAD fails", async () => {
|
|
48
|
+
const mock = vi.fn()
|
|
49
|
+
.mockResolvedValueOnce({ ok: false, status: 404 }) // HEAD fails
|
|
50
|
+
.mockResolvedValueOnce({
|
|
51
|
+
ok: true,
|
|
52
|
+
status: 200,
|
|
53
|
+
text: () => Promise.resolve("# From main"),
|
|
54
|
+
});
|
|
55
|
+
vi.stubGlobal("fetch", mock);
|
|
56
|
+
const { markdown, resolvedRef } = await fetchGitHubMarkdown(makeRef({ branch: "HEAD" }));
|
|
57
|
+
expect(markdown).toBe("# From main");
|
|
58
|
+
expect(resolvedRef.branch).toBe("main");
|
|
59
|
+
expect(mock).toHaveBeenCalledTimes(2);
|
|
60
|
+
});
|
|
61
|
+
it("falls back to master when HEAD and main fail", async () => {
|
|
62
|
+
const mock = vi.fn()
|
|
63
|
+
.mockResolvedValueOnce({ ok: false, status: 404 }) // HEAD fails
|
|
64
|
+
.mockResolvedValueOnce({ ok: false, status: 404 }) // main fails
|
|
65
|
+
.mockResolvedValueOnce({
|
|
66
|
+
ok: true,
|
|
67
|
+
status: 200,
|
|
68
|
+
text: () => Promise.resolve("# From master"),
|
|
69
|
+
});
|
|
70
|
+
vi.stubGlobal("fetch", mock);
|
|
71
|
+
const { markdown, resolvedRef } = await fetchGitHubMarkdown(makeRef({ branch: "HEAD" }));
|
|
72
|
+
expect(markdown).toBe("# From master");
|
|
73
|
+
expect(resolvedRef.branch).toBe("master");
|
|
74
|
+
expect(mock).toHaveBeenCalledTimes(3);
|
|
75
|
+
});
|
|
76
|
+
it("throws when all branch attempts fail", async () => {
|
|
77
|
+
const mock = vi.fn().mockResolvedValue({ ok: false, status: 404 });
|
|
78
|
+
vi.stubGlobal("fetch", mock);
|
|
79
|
+
await expect(fetchGitHubMarkdown(makeRef({ branch: "HEAD" }))).rejects.toThrow("File not found");
|
|
80
|
+
expect(mock).toHaveBeenCalledTimes(3); // HEAD, main, master
|
|
81
|
+
});
|
|
82
|
+
it("throws clear error on 404 for known branch", async () => {
|
|
83
|
+
vi.stubGlobal("fetch", mockFetch404());
|
|
84
|
+
await expect(fetchGitHubMarkdown(makeRef({ branch: "main" }))).rejects.toThrow("File not found");
|
|
85
|
+
});
|
|
86
|
+
it("throws clear error on 403 rate limit", async () => {
|
|
87
|
+
vi.stubGlobal("fetch", vi.fn().mockResolvedValue({ ok: false, status: 403 }));
|
|
88
|
+
await expect(fetchGitHubMarkdown(makeRef())).rejects.toThrow("rate limit");
|
|
89
|
+
});
|
|
90
|
+
it("throws clear error on network failure", async () => {
|
|
91
|
+
vi.stubGlobal("fetch", vi.fn().mockRejectedValue(new Error("ENOTFOUND")));
|
|
92
|
+
await expect(fetchGitHubMarkdown(makeRef())).rejects.toThrow("Failed to connect");
|
|
93
|
+
});
|
|
94
|
+
it("includes User-Agent header", async () => {
|
|
95
|
+
const mock = mockFetchOk("# Content");
|
|
96
|
+
vi.stubGlobal("fetch", mock);
|
|
97
|
+
await fetchGitHubMarkdown(makeRef());
|
|
98
|
+
const headers = mock.mock.calls[0][1]?.headers;
|
|
99
|
+
expect(headers).toHaveProperty("User-Agent", "CuppaCue/0.1.0");
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=fetcher.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetcher.test.js","sourceRoot":"","sources":["../../../src/github/__tests__/fetcher.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rewrite-images.test.d.ts","sourceRoot":"","sources":["../../../src/github/__tests__/rewrite-images.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { rewriteImageUrls } from "../rewrite-images.js";
|
|
3
|
+
const REF_ROOT = {
|
|
4
|
+
owner: "user",
|
|
5
|
+
repo: "repo",
|
|
6
|
+
branch: "main",
|
|
7
|
+
path: "README.md",
|
|
8
|
+
};
|
|
9
|
+
const REF_SUBDIR = {
|
|
10
|
+
owner: "user",
|
|
11
|
+
repo: "repo",
|
|
12
|
+
branch: "main",
|
|
13
|
+
path: "docs/guide.md",
|
|
14
|
+
};
|
|
15
|
+
const BASE = "https://raw.githubusercontent.com/user/repo/main";
|
|
16
|
+
describe("rewriteImageUrls", () => {
|
|
17
|
+
// ── Relative paths from root README ─────────────────────
|
|
18
|
+
it("rewrites ./images/logo.png from root README", () => {
|
|
19
|
+
const md = "";
|
|
20
|
+
expect(rewriteImageUrls(md, REF_ROOT)).toBe(``);
|
|
21
|
+
});
|
|
22
|
+
it("rewrites bare relative path images/logo.png", () => {
|
|
23
|
+
const md = "";
|
|
24
|
+
expect(rewriteImageUrls(md, REF_ROOT)).toBe(``);
|
|
25
|
+
});
|
|
26
|
+
// ── Relative paths from subdirectory ────────────────────
|
|
27
|
+
it("rewrites ./images/logo.png from docs/guide.md", () => {
|
|
28
|
+
const md = "";
|
|
29
|
+
expect(rewriteImageUrls(md, REF_SUBDIR)).toBe(``);
|
|
30
|
+
});
|
|
31
|
+
it("rewrites parent traversal ../assets/img.png from docs/guide.md", () => {
|
|
32
|
+
const md = "";
|
|
33
|
+
expect(rewriteImageUrls(md, REF_SUBDIR)).toBe(``);
|
|
34
|
+
});
|
|
35
|
+
// ── Repo-root absolute paths ────────────────────────────
|
|
36
|
+
it("rewrites /images/logo.png as repo-root absolute", () => {
|
|
37
|
+
const md = "";
|
|
38
|
+
expect(rewriteImageUrls(md, REF_ROOT)).toBe(``);
|
|
39
|
+
});
|
|
40
|
+
// ── Already-absolute URLs unchanged ─────────────────────
|
|
41
|
+
it("leaves https:// URLs unchanged", () => {
|
|
42
|
+
const md = "";
|
|
43
|
+
expect(rewriteImageUrls(md, REF_ROOT)).toBe(md);
|
|
44
|
+
});
|
|
45
|
+
it("leaves protocol-relative URLs unchanged", () => {
|
|
46
|
+
const md = "";
|
|
47
|
+
expect(rewriteImageUrls(md, REF_ROOT)).toBe(md);
|
|
48
|
+
});
|
|
49
|
+
// ── HTML <img> tags ─────────────────────────────────────
|
|
50
|
+
it("rewrites HTML img src", () => {
|
|
51
|
+
const md = '<img src="./screenshot.png" alt="Screenshot">';
|
|
52
|
+
expect(rewriteImageUrls(md, REF_ROOT)).toBe(`<img src="${BASE}/screenshot.png" alt="Screenshot">`);
|
|
53
|
+
});
|
|
54
|
+
it("leaves absolute HTML img src unchanged", () => {
|
|
55
|
+
const md = '<img src="https://example.com/logo.png">';
|
|
56
|
+
expect(rewriteImageUrls(md, REF_ROOT)).toBe(md);
|
|
57
|
+
});
|
|
58
|
+
// ── Multiple images ─────────────────────────────────────
|
|
59
|
+
it("rewrites multiple images in one document", () => {
|
|
60
|
+
const md = `\n\nSome text\n\n`;
|
|
61
|
+
const result = rewriteImageUrls(md, REF_ROOT);
|
|
62
|
+
expect(result).toContain(`${BASE}/a.png`);
|
|
63
|
+
expect(result).toContain(`${BASE}/b.png`);
|
|
64
|
+
});
|
|
65
|
+
// ── Non-image links unchanged ───────────────────────────
|
|
66
|
+
it("does not rewrite non-image markdown links", () => {
|
|
67
|
+
const md = "[Click here](./docs/setup.md)";
|
|
68
|
+
expect(rewriteImageUrls(md, REF_ROOT)).toBe(md);
|
|
69
|
+
});
|
|
70
|
+
// ── Edge cases ──────────────────────────────────────────
|
|
71
|
+
it("handles empty markdown", () => {
|
|
72
|
+
expect(rewriteImageUrls("", REF_ROOT)).toBe("");
|
|
73
|
+
});
|
|
74
|
+
it("handles image with query string", () => {
|
|
75
|
+
const md = "";
|
|
76
|
+
expect(rewriteImageUrls(md, REF_ROOT)).toBe(``);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=rewrite-images.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rewrite-images.test.js","sourceRoot":"","sources":["../../../src/github/__tests__/rewrite-images.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-parser.test.d.ts","sourceRoot":"","sources":["../../../src/github/__tests__/url-parser.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { parseGitHubUrl } from "../url-parser.js";
|
|
3
|
+
describe("parseGitHubUrl", () => {
|
|
4
|
+
// ── Bare repo URLs ──────────────────────────────────────
|
|
5
|
+
it("parses bare repo URL → README.md, branch HEAD", () => {
|
|
6
|
+
const ref = parseGitHubUrl("https://github.com/user/repo");
|
|
7
|
+
expect(ref).toEqual({
|
|
8
|
+
owner: "user",
|
|
9
|
+
repo: "repo",
|
|
10
|
+
branch: "HEAD",
|
|
11
|
+
path: "README.md",
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
it("handles URL without protocol", () => {
|
|
15
|
+
const ref = parseGitHubUrl("github.com/user/repo");
|
|
16
|
+
expect(ref.owner).toBe("user");
|
|
17
|
+
expect(ref.repo).toBe("repo");
|
|
18
|
+
expect(ref.path).toBe("README.md");
|
|
19
|
+
});
|
|
20
|
+
// ── /blob/ URLs ─────────────────────────────────────────
|
|
21
|
+
it("parses /blob/ URL with branch and file path", () => {
|
|
22
|
+
const ref = parseGitHubUrl("https://github.com/user/repo/blob/main/docs/guide.md");
|
|
23
|
+
expect(ref).toEqual({
|
|
24
|
+
owner: "user",
|
|
25
|
+
repo: "repo",
|
|
26
|
+
branch: "main",
|
|
27
|
+
path: "docs/guide.md",
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
it("parses /blob/ URL with just a file in root", () => {
|
|
31
|
+
const ref = parseGitHubUrl("https://github.com/user/repo/blob/develop/README.md");
|
|
32
|
+
expect(ref).toEqual({
|
|
33
|
+
owner: "user",
|
|
34
|
+
repo: "repo",
|
|
35
|
+
branch: "develop",
|
|
36
|
+
path: "README.md",
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
it("parses /blob/ with deeply nested path", () => {
|
|
40
|
+
const ref = parseGitHubUrl("https://github.com/user/repo/blob/main/src/docs/api/reference.md");
|
|
41
|
+
expect(ref.path).toBe("src/docs/api/reference.md");
|
|
42
|
+
});
|
|
43
|
+
// ── /tree/ URLs ─────────────────────────────────────────
|
|
44
|
+
it("parses /tree/ URL with branch only → README.md", () => {
|
|
45
|
+
const ref = parseGitHubUrl("https://github.com/user/repo/tree/develop");
|
|
46
|
+
expect(ref).toEqual({
|
|
47
|
+
owner: "user",
|
|
48
|
+
repo: "repo",
|
|
49
|
+
branch: "develop",
|
|
50
|
+
path: "README.md",
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
it("parses /tree/ URL with subdirectory → subdir/README.md", () => {
|
|
54
|
+
const ref = parseGitHubUrl("https://github.com/user/repo/tree/main/docs");
|
|
55
|
+
expect(ref).toEqual({
|
|
56
|
+
owner: "user",
|
|
57
|
+
repo: "repo",
|
|
58
|
+
branch: "main",
|
|
59
|
+
path: "docs/README.md",
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
it("parses /tree/ with deeply nested directory", () => {
|
|
63
|
+
const ref = parseGitHubUrl("https://github.com/user/repo/tree/main/packages/core/docs");
|
|
64
|
+
expect(ref.path).toBe("packages/core/docs/README.md");
|
|
65
|
+
});
|
|
66
|
+
// ── raw.githubusercontent.com URLs ──────────────────────
|
|
67
|
+
it("parses raw.githubusercontent.com URL", () => {
|
|
68
|
+
const ref = parseGitHubUrl("https://raw.githubusercontent.com/user/repo/main/README.md");
|
|
69
|
+
expect(ref).toEqual({
|
|
70
|
+
owner: "user",
|
|
71
|
+
repo: "repo",
|
|
72
|
+
branch: "main",
|
|
73
|
+
path: "README.md",
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
it("parses raw URL with nested path", () => {
|
|
77
|
+
const ref = parseGitHubUrl("https://raw.githubusercontent.com/user/repo/v2/docs/guide.md");
|
|
78
|
+
expect(ref).toEqual({
|
|
79
|
+
owner: "user",
|
|
80
|
+
repo: "repo",
|
|
81
|
+
branch: "v2",
|
|
82
|
+
path: "docs/guide.md",
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
// ── Error cases ─────────────────────────────────────────
|
|
86
|
+
it("throws for non-GitHub host", () => {
|
|
87
|
+
expect(() => parseGitHubUrl("https://gitlab.com/user/repo")).toThrow("Not a GitHub URL");
|
|
88
|
+
});
|
|
89
|
+
it("throws for URL missing owner/repo", () => {
|
|
90
|
+
expect(() => parseGitHubUrl("https://github.com/user")).toThrow("could not extract owner");
|
|
91
|
+
});
|
|
92
|
+
it("throws for incomplete raw.githubusercontent.com URL", () => {
|
|
93
|
+
expect(() => parseGitHubUrl("https://raw.githubusercontent.com/user/repo")).toThrow("missing branch");
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=url-parser.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-parser.test.js","sourceRoot":"","sources":["../../../src/github/__tests__/url-parser.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { GitHubRef } from "./url-parser.js";
|
|
2
|
+
/**
|
|
3
|
+
* Fetch raw markdown content from GitHub.
|
|
4
|
+
* When branch is "HEAD" (unknown), tries HEAD → main → master.
|
|
5
|
+
*/
|
|
6
|
+
export declare function fetchGitHubMarkdown(ref: GitHubRef): Promise<{
|
|
7
|
+
markdown: string;
|
|
8
|
+
resolvedRef: GitHubRef;
|
|
9
|
+
}>;
|
|
10
|
+
//# sourceMappingURL=fetcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/github/fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAMjD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,SAAS,GACb,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,SAAS,CAAA;CAAE,CAAC,CA2BvD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
function rawUrl(ref) {
|
|
2
|
+
return `https://raw.githubusercontent.com/${ref.owner}/${ref.repo}/${ref.branch}/${ref.path}`;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Fetch raw markdown content from GitHub.
|
|
6
|
+
* When branch is "HEAD" (unknown), tries HEAD → main → master.
|
|
7
|
+
*/
|
|
8
|
+
export async function fetchGitHubMarkdown(ref) {
|
|
9
|
+
const headers = { "User-Agent": "CuppaCue/0.1.0" };
|
|
10
|
+
if (ref.branch !== "HEAD") {
|
|
11
|
+
// Branch is known — single fetch
|
|
12
|
+
const res = await fetchWithErrorHandling(rawUrl(ref), headers, ref);
|
|
13
|
+
return { markdown: await res.text(), resolvedRef: ref };
|
|
14
|
+
}
|
|
15
|
+
// Branch unknown — try HEAD, main, master in order
|
|
16
|
+
const branches = ["HEAD", "main", "master"];
|
|
17
|
+
for (const branch of branches) {
|
|
18
|
+
const candidate = { ...ref, branch };
|
|
19
|
+
try {
|
|
20
|
+
const res = await fetch(rawUrl(candidate), { headers });
|
|
21
|
+
if (res.ok) {
|
|
22
|
+
return { markdown: await res.text(), resolvedRef: candidate };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// Network error — continue to next candidate
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
throw new Error(`File not found: ${ref.path} in ${ref.owner}/${ref.repo}. ` +
|
|
30
|
+
`Check the URL and ensure the repository is public.`);
|
|
31
|
+
}
|
|
32
|
+
async function fetchWithErrorHandling(url, headers, ref) {
|
|
33
|
+
let res;
|
|
34
|
+
try {
|
|
35
|
+
res = await fetch(url, { headers });
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
throw new Error(`Failed to connect to GitHub. Check your internet connection.`);
|
|
39
|
+
}
|
|
40
|
+
if (res.ok)
|
|
41
|
+
return res;
|
|
42
|
+
if (res.status === 404) {
|
|
43
|
+
throw new Error(`File not found: ${ref.path} in ${ref.owner}/${ref.repo} (branch: ${ref.branch}). ` +
|
|
44
|
+
`Check the URL and ensure the repository is public.`);
|
|
45
|
+
}
|
|
46
|
+
if (res.status === 403) {
|
|
47
|
+
throw new Error(`GitHub rate limit exceeded. Try again in a few minutes, ` +
|
|
48
|
+
`or use a raw.githubusercontent.com URL directly.`);
|
|
49
|
+
}
|
|
50
|
+
throw new Error(`GitHub returned HTTP ${res.status}. ` +
|
|
51
|
+
`The repository may be private or the URL may be incorrect.`);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=fetcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../src/github/fetcher.ts"],"names":[],"mappings":"AAEA,SAAS,MAAM,CAAC,GAAc;IAC5B,OAAO,qCAAqC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;AAChG,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAAc;IAEd,MAAM,OAAO,GAAG,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC;IAEnD,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1B,iCAAiC;QACjC,MAAM,GAAG,GAAG,MAAM,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;IAC1D,CAAC;IAED,mDAAmD;IACnD,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5C,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YACxD,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;YAChE,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;QAC/C,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,mBAAmB,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,IAAI;QACzD,oDAAoD,CACvD,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,GAAW,EACX,OAA+B,EAC/B,GAAc;IAEd,IAAI,GAAa,CAAC;IAClB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,EAAE;QAAE,OAAO,GAAG,CAAC;IAEvB,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,mBAAmB,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,MAAM,KAAK;YACjF,oDAAoD,CACvD,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,0DAA0D;YACxD,kDAAkD,CACrD,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,KAAK,CACb,wBAAwB,GAAG,CAAC,MAAM,IAAI;QACpC,4DAA4D,CAC/D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/github/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/github/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { GitHubRef } from "./url-parser.js";
|
|
2
|
+
/**
|
|
3
|
+
* Rewrite relative image URLs in markdown to absolute raw.githubusercontent.com URLs.
|
|
4
|
+
* Must be called on raw markdown before compilation.
|
|
5
|
+
*/
|
|
6
|
+
export declare function rewriteImageUrls(markdown: string, ref: GitHubRef): string;
|
|
7
|
+
//# sourceMappingURL=rewrite-images.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rewrite-images.d.ts","sourceRoot":"","sources":["../../src/github/rewrite-images.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM,CA4BzE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { posix } from "node:path";
|
|
2
|
+
/**
|
|
3
|
+
* Rewrite relative image URLs in markdown to absolute raw.githubusercontent.com URLs.
|
|
4
|
+
* Must be called on raw markdown before compilation.
|
|
5
|
+
*/
|
|
6
|
+
export function rewriteImageUrls(markdown, ref) {
|
|
7
|
+
const dir = posix.dirname(ref.path); // e.g. "docs" from "docs/guide.md", "." from "README.md"
|
|
8
|
+
const base = `https://raw.githubusercontent.com/${ref.owner}/${ref.repo}/${ref.branch}`;
|
|
9
|
+
function resolveRelative(src) {
|
|
10
|
+
// Already absolute — leave unchanged
|
|
11
|
+
if (/^https?:\/\/|^\/\//.test(src))
|
|
12
|
+
return src;
|
|
13
|
+
// Repo-root absolute path
|
|
14
|
+
if (src.startsWith("/"))
|
|
15
|
+
return `${base}${src}`;
|
|
16
|
+
// Relative to file's directory
|
|
17
|
+
const resolved = posix.normalize(`${dir}/${src}`);
|
|
18
|
+
return `${base}/${resolved}`;
|
|
19
|
+
}
|
|
20
|
+
// Pass 1: Markdown images 
|
|
21
|
+
let result = markdown.replace(/!\[([^\]]*)\]\(([^)]+)\)/g, (_match, alt, src) => `})`);
|
|
22
|
+
// Pass 2: HTML <img src="...">
|
|
23
|
+
result = result.replace(/(<img\s[^>]*?)src="([^"]+)"/g, (_match, prefix, src) => `${prefix}src="${resolveRelative(src)}"`);
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=rewrite-images.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rewrite-images.js","sourceRoot":"","sources":["../../src/github/rewrite-images.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAGlC;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,GAAc;IAC/D,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,yDAAyD;IAC9F,MAAM,IAAI,GAAG,qCAAqC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;IAExF,SAAS,eAAe,CAAC,GAAW;QAClC,qCAAqC;QACrC,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;QAC/C,0BAA0B;QAC1B,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC;QAChD,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;QAClD,OAAO,GAAG,IAAI,IAAI,QAAQ,EAAE,CAAC;IAC/B,CAAC;IAED,sCAAsC;IACtC,IAAI,MAAM,GAAG,QAAQ,CAAC,OAAO,CAC3B,2BAA2B,EAC3B,CAAC,MAAM,EAAE,GAAW,EAAE,GAAW,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,eAAe,CAAC,GAAG,CAAC,GAAG,CAC3E,CAAC;IAEF,+BAA+B;IAC/B,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,8BAA8B,EAC9B,CAAC,MAAM,EAAE,MAAc,EAAE,GAAW,EAAE,EAAE,CACtC,GAAG,MAAM,QAAQ,eAAe,CAAC,GAAG,CAAC,GAAG,CAC3C,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface GitHubRef {
|
|
2
|
+
owner: string;
|
|
3
|
+
repo: string;
|
|
4
|
+
branch: string;
|
|
5
|
+
path: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Parse a GitHub URL into its component parts for raw content fetching.
|
|
9
|
+
* Supports github.com and raw.githubusercontent.com URLs.
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseGitHubUrl(input: string): GitHubRef;
|
|
12
|
+
//# sourceMappingURL=url-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-parser.d.ts","sourceRoot":"","sources":["../../src/github/url-parser.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAuEvD"}
|