@ascribed/astro 0.1.1 → 0.1.2-next.4
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 +6 -2
- package/dist/attributes.d.ts +17 -0
- package/dist/attributes.js +93 -5
- package/dist/attributes.js.map +1 -1
- package/dist/dev.d.ts +24 -1
- package/dist/dev.js +69 -9
- package/dist/dev.js.map +1 -1
- package/dist/index.d.ts +13 -0
- package/dist/index.js +84 -9
- package/dist/index.js.map +1 -1
- package/dist/rehype.d.ts +1 -1
- package/dist/rehype.js +19 -5
- package/dist/rehype.js.map +1 -1
- package/dist/review/devfile.d.ts +21 -0
- package/dist/review/devfile.js +39 -0
- package/dist/review/devfile.js.map +1 -0
- package/dist/review/diff.d.ts +21 -0
- package/dist/review/diff.js +47 -0
- package/dist/review/diff.js.map +1 -0
- package/dist/review/github.d.ts +19 -0
- package/dist/review/github.js +73 -0
- package/dist/review/github.js.map +1 -0
- package/dist/review/protocol.d.ts +98 -0
- package/dist/review/protocol.js +14 -0
- package/dist/review/protocol.js.map +1 -0
- package/dist/review/routes.d.ts +13 -0
- package/dist/review/routes.js +92 -0
- package/dist/review/routes.js.map +1 -0
- package/dist/review/server.d.ts +100 -0
- package/dist/review/server.js +336 -0
- package/dist/review/server.js.map +1 -0
- package/dist/run.d.ts +14 -1
- package/dist/run.js +19 -3
- package/dist/run.js.map +1 -1
- package/dist/satteri.d.ts +1 -1
- package/dist/satteri.js +22 -5
- package/dist/satteri.js.map +1 -1
- package/dist/toolbar/app.d.ts +2 -0
- package/dist/toolbar/app.js +951 -0
- package/dist/toolbar/app.js.map +1 -0
- package/dist/toolbar/page.d.ts +40 -0
- package/dist/toolbar/page.js +120 -0
- package/dist/toolbar/page.js.map +1 -0
- package/dist/toolbar/style.d.ts +1 -0
- package/dist/toolbar/style.js +250 -0
- package/dist/toolbar/style.js.map +1 -0
- package/dist/toolbar/text.d.ts +49 -0
- package/dist/toolbar/text.js +114 -0
- package/dist/toolbar/text.js.map +1 -0
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -39,7 +39,7 @@ import Elements from "@ascribed/astro/Elements.astro";
|
|
|
39
39
|
<head><Elements /></head>
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
The [Astro guide](https://
|
|
42
|
+
The [Astro guide](https://ascribed-dev.com/guides/astro/) walks through a site: `ascribe.toml`, the collection, the route, the layout, the options, what `astro dev` does, and [review in the site preview](https://ascribed-dev.com/guides/astro/#review-in-the-site-preview). [Review](https://ascribed-dev.com/guides/review/) walks through reviewing a pull request on your site.
|
|
43
43
|
|
|
44
44
|
## Options
|
|
45
45
|
|
|
@@ -48,6 +48,8 @@ The [Astro guide](https://github.com/ascribed-dev/ascribe/blob/main/docs/astro.m
|
|
|
48
48
|
| `build` | The build whose site output is the collection: a build name in `ascribe.toml`. Required. |
|
|
49
49
|
| `project` | The directory holding `ascribe.toml`, relative to the Astro root. By default, the root. |
|
|
50
50
|
| `binary` | The `ascribe` binary, relative to the Astro root. By default, `ASCRIBE_BIN`, then the binary `@ascribed/cli` installed. |
|
|
51
|
+
| `anchors` | Source anchors (`ascribe build --anchors`), for review: `"dev"` in `astro dev` only, `true` always. By default, `false`, though `review` turns them on in `astro dev`. |
|
|
52
|
+
| `review` | The **Ascribe review** app in `astro dev`'s toolbar: a pull request's changes and comments on the real page. `false` leaves it out. By default, `true`. Never in `astro build`. |
|
|
51
53
|
|
|
52
54
|
## Development
|
|
53
55
|
|
|
@@ -56,9 +58,11 @@ The [Astro guide](https://github.com/ascribed-dev/ascribe/blob/main/docs/astro.m
|
|
|
56
58
|
| `src/index.ts` | The integration |
|
|
57
59
|
| `src/content.ts` | `ascribeCollection`, for `content.config.ts` |
|
|
58
60
|
| `src/Elements.astro` | Loads `@ascribed/elements` (stylesheet and script) |
|
|
59
|
-
| `src/attributes.ts` | The attribute-marker rules, on a hast tree |
|
|
61
|
+
| `src/attributes.ts` | The attribute-marker and source-anchor rules, on a hast tree |
|
|
60
62
|
| `src/rehype.ts`, `src/satteri.ts` | The rules applied in each of Astro's Markdown processors |
|
|
61
63
|
| `src/project.ts`, `src/binary.ts`, `src/run.ts`, `src/files.ts`, `src/dev.ts` | `ascribe.toml`, the binary, running it, serving files, dev rebuilds |
|
|
64
|
+
| `src/review/` | Review in the site preview, on the dev server's side: `ascribe diff`, the pull request (through `@ascribed/review/github` and `gh`), the routes, `.ascribe/dev.json`, and the toolbar channel's requests (`server.ts`, `protocol.ts`) |
|
|
65
|
+
| `src/toolbar/` | The **Ascribe review** toolbar app, in the page: the panel, and the `@ascribed/review` overlay on the page's blocks |
|
|
62
66
|
|
|
63
67
|
The site imports `schema` from the generated file by path, so the output directory and the build name appear there as well as in `ascribe.toml` and the integration's options. That's deliberate: Vite compiles the TypeScript file where it is, so the site keeps the schema's exact inferred types, which a virtual module re-exporting it would hide.
|
|
64
68
|
|
package/dist/attributes.d.ts
CHANGED
|
@@ -33,3 +33,20 @@ export declare function findEdits(root: HastNode): Edit[];
|
|
|
33
33
|
* (`class` is `className`) and a value of the shape that property has.
|
|
34
34
|
*/
|
|
35
35
|
export declare function toProperty([name, value]: Attribute): [string, string | string[]];
|
|
36
|
+
/** What applying one source anchor (site-render contract §7) changes. */
|
|
37
|
+
export interface AnchorEdit {
|
|
38
|
+
/** The anchor comment, and the whitespace-only text directly after it, which are removed. */
|
|
39
|
+
remove: HastNode[];
|
|
40
|
+
/** Elements that get attributes: the block, and a list's items. Empty when the anchor applies to nothing. */
|
|
41
|
+
targets: {
|
|
42
|
+
node: HastNode;
|
|
43
|
+
attributes: Attribute[];
|
|
44
|
+
}[];
|
|
45
|
+
/** Raw HTML whose first tag gets the anchor's attributes: the node and its new text. */
|
|
46
|
+
replace?: {
|
|
47
|
+
node: HastNode;
|
|
48
|
+
value: string;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/** Finds every source anchor comment in `root`, and what it applies to. */
|
|
52
|
+
export declare function findAnchors(root: HastNode): AnchorEdit[];
|
package/dist/attributes.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
// The site output's attribute marker (`<ascribe-attributes>`)
|
|
2
|
-
// applied on a hast tree.
|
|
1
|
+
// The site output's attribute marker (`<ascribe-attributes>`) and source
|
|
2
|
+
// anchors (`<!--ascribe-anchor …-->`), found and applied on a hast tree.
|
|
3
3
|
//
|
|
4
4
|
// Both markdown processors Astro 7.3 can run hand a user plugin the same tree
|
|
5
5
|
// at the same point: after markdown became hast, before Astro's own image and
|
|
6
6
|
// heading-id passes. A marker is then two adjacent `raw` nodes (an open tag and
|
|
7
7
|
// a close tag), and the elements it applies to are `<h1>`–`<h6>` and `<img>`.
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
8
|
+
// An anchor comment is a `raw` node beside the block it names. So the rules
|
|
9
|
+
// live here once, as pure functions from a tree to a list of edits, and each
|
|
10
|
+
// processor's adapter applies the edits with its own means (`rehype.ts`
|
|
11
|
+
// mutates the tree, `satteri.ts` queues commands).
|
|
11
12
|
import { find, html } from "property-information";
|
|
12
13
|
const OPEN = /^<ascribe-attributes((?: [a-z][a-z0-9-]*="[^"\r\n]*")*)>$/;
|
|
13
14
|
const CLOSE = "</ascribe-attributes>";
|
|
@@ -111,4 +112,91 @@ export function toProperty([name, value]) {
|
|
|
111
112
|
return [info.property, value.split(/\s*,\s*/)];
|
|
112
113
|
return [info.property, value];
|
|
113
114
|
}
|
|
115
|
+
const ANCHOR = /^<!--ascribe-anchor((?: [a-z][a-z0-9-]*="[^"\r\n]*")+)-->\s*$/;
|
|
116
|
+
/** Finds every source anchor comment in `root`, and what it applies to. */
|
|
117
|
+
export function findAnchors(root) {
|
|
118
|
+
const edits = [];
|
|
119
|
+
visitParents(root, (parent) => {
|
|
120
|
+
const children = parent.children ?? [];
|
|
121
|
+
for (let i = 0; i < children.length; i++) {
|
|
122
|
+
const node = children[i];
|
|
123
|
+
if (node?.type !== "raw" || node.value === undefined)
|
|
124
|
+
continue;
|
|
125
|
+
const anchor = parseAnchor(node.value);
|
|
126
|
+
if (anchor === undefined)
|
|
127
|
+
continue;
|
|
128
|
+
const edit = { remove: [node], targets: [] };
|
|
129
|
+
let next = i + 1;
|
|
130
|
+
const after = children[next];
|
|
131
|
+
if (after?.type === "text" && after.value?.trim() === "") {
|
|
132
|
+
edit.remove.push(after);
|
|
133
|
+
next++;
|
|
134
|
+
}
|
|
135
|
+
const target = children[next];
|
|
136
|
+
if (target?.type === "element" && target.tagName?.toLowerCase() === anchor.tag) {
|
|
137
|
+
edit.targets.push({
|
|
138
|
+
node: target,
|
|
139
|
+
attributes: anchorAttributes(anchor.source, anchor.via),
|
|
140
|
+
});
|
|
141
|
+
if ((anchor.tag === "ul" || anchor.tag === "ol") && anchor.items.length > 0) {
|
|
142
|
+
const items = (target.children ?? []).filter((child) => child.type === "element" && child.tagName === "li");
|
|
143
|
+
const path = anchor.source.slice(0, anchor.source.lastIndexOf(":"));
|
|
144
|
+
if (items.length === anchor.items.length) {
|
|
145
|
+
items.forEach((item, n) => edit.targets.push({
|
|
146
|
+
node: item,
|
|
147
|
+
attributes: anchorAttributes(`${path}:${anchor.items[n]}`, anchor.via),
|
|
148
|
+
}));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
else if (target?.type === "raw" && target.value !== undefined) {
|
|
153
|
+
const value = intoFirstTag(target.value, anchor);
|
|
154
|
+
if (value !== undefined)
|
|
155
|
+
edit.replace = { node: target, value };
|
|
156
|
+
}
|
|
157
|
+
edits.push(edit);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
return edits;
|
|
161
|
+
}
|
|
162
|
+
function parseAnchor(text) {
|
|
163
|
+
const match = ANCHOR.exec(text);
|
|
164
|
+
if (match === null)
|
|
165
|
+
return undefined;
|
|
166
|
+
const attributes = new Map();
|
|
167
|
+
for (const [, name, value] of (match[1] ?? "").matchAll(ATTRIBUTE)) {
|
|
168
|
+
if (name !== undefined && value !== undefined)
|
|
169
|
+
attributes.set(name, decode(value));
|
|
170
|
+
}
|
|
171
|
+
const tag = attributes.get("tag");
|
|
172
|
+
const source = attributes.get("source");
|
|
173
|
+
if (tag === undefined || source === undefined)
|
|
174
|
+
return undefined;
|
|
175
|
+
const via = attributes.get("via");
|
|
176
|
+
return {
|
|
177
|
+
tag: tag.toLowerCase(),
|
|
178
|
+
source,
|
|
179
|
+
via: via === "" ? undefined : via,
|
|
180
|
+
items: (attributes.get("items") ?? "").split(/\s+/).filter((s) => s !== ""),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
function anchorAttributes(source, via) {
|
|
184
|
+
const attributes = [["data-ascribe-source", source]];
|
|
185
|
+
if (via !== undefined)
|
|
186
|
+
attributes.push(["data-ascribe-via", via]);
|
|
187
|
+
return attributes;
|
|
188
|
+
}
|
|
189
|
+
/** Raw HTML with the anchor's attributes after the name of its first tag, when that tag opens the element the anchor names. */
|
|
190
|
+
function intoFirstTag(html, anchor) {
|
|
191
|
+
const open = /^<([A-Za-z][A-Za-z0-9-]*)(?=[\s>/])/.exec(html);
|
|
192
|
+
if (open?.[1] === undefined || open[1].toLowerCase() !== anchor.tag)
|
|
193
|
+
return undefined;
|
|
194
|
+
const written = anchorAttributes(anchor.source, anchor.via)
|
|
195
|
+
.map(([name, value]) => ` ${name}="${encode(value)}"`)
|
|
196
|
+
.join("");
|
|
197
|
+
return html.slice(0, open[0].length) + written + html.slice(open[0].length);
|
|
198
|
+
}
|
|
199
|
+
function encode(value) {
|
|
200
|
+
return value.replace(/[&<>"]/g, (ch) => ch === "&" ? "&" : ch === "<" ? "<" : ch === ">" ? ">" : """);
|
|
201
|
+
}
|
|
114
202
|
//# sourceMappingURL=attributes.js.map
|
package/dist/attributes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attributes.js","sourceRoot":"","sources":["../src/attributes.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,
|
|
1
|
+
{"version":3,"file":"attributes.js","sourceRoot":"","sources":["../src/attributes.ts"],"names":[],"mappings":"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"}
|
package/dist/dev.d.ts
CHANGED
|
@@ -8,6 +8,25 @@ type ServerOptions = Parameters<NonNullable<AstroIntegration["hooks"]["astro:ser
|
|
|
8
8
|
* successful build writes one.
|
|
9
9
|
*/
|
|
10
10
|
export declare function outsideAssets(project: ProjectInfo, build: string): string[];
|
|
11
|
+
/**
|
|
12
|
+
* Each watched file's size and modification time, as last seen. A watcher
|
|
13
|
+
* can report an edit late, after a build already read it: macOS delivers
|
|
14
|
+
* edits made just before the dev server started some seconds after it
|
|
15
|
+
* started. An event that changes neither is no edit, and rebuilding for it
|
|
16
|
+
* would reload the page under the reader.
|
|
17
|
+
*/
|
|
18
|
+
export declare class SeenFiles {
|
|
19
|
+
private readonly stamps;
|
|
20
|
+
/** Records the files under `paths` (files or folders) as they are now. */
|
|
21
|
+
prime(paths: readonly string[]): void;
|
|
22
|
+
/** Whether `file` differs from when it was last seen (or wasn't seen), and records it. */
|
|
23
|
+
changed(file: string): boolean;
|
|
24
|
+
}
|
|
25
|
+
/** What `watchDev` gives back. */
|
|
26
|
+
export interface DevBuilds {
|
|
27
|
+
/** Runs `task` in turn with the compiler runs, never during one. */
|
|
28
|
+
inTurn(task: () => Promise<void>): Promise<void>;
|
|
29
|
+
}
|
|
11
30
|
/** Watch source files, serialize compiler runs, and refresh Astro after successful output. */
|
|
12
31
|
export declare function watchDev(options: {
|
|
13
32
|
server: ServerOptions["server"];
|
|
@@ -21,5 +40,9 @@ export declare function watchDev(options: {
|
|
|
21
40
|
};
|
|
22
41
|
build: string;
|
|
23
42
|
rebuild: () => Promise<void>;
|
|
24
|
-
|
|
43
|
+
/** Called after each successful rebuild, before Astro reloads the page. */
|
|
44
|
+
onBuilt?: () => void;
|
|
45
|
+
/** The sources as the first build read them. */
|
|
46
|
+
seen?: SeenFiles;
|
|
47
|
+
}): DevBuilds;
|
|
25
48
|
export {};
|
package/dist/dev.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { readFileSync } from "node:fs";
|
|
1
|
+
import { readdirSync, readFileSync, statSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { consumerMismatches, readProject } from "./project.js";
|
|
4
4
|
/**
|
|
@@ -28,6 +28,54 @@ export function outsideAssets(project, build) {
|
|
|
28
28
|
}
|
|
29
29
|
return [...assets].sort();
|
|
30
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Each watched file's size and modification time, as last seen. A watcher
|
|
33
|
+
* can report an edit late, after a build already read it: macOS delivers
|
|
34
|
+
* edits made just before the dev server started some seconds after it
|
|
35
|
+
* started. An event that changes neither is no edit, and rebuilding for it
|
|
36
|
+
* would reload the page under the reader.
|
|
37
|
+
*/
|
|
38
|
+
export class SeenFiles {
|
|
39
|
+
stamps = new Map();
|
|
40
|
+
/** Records the files under `paths` (files or folders) as they are now. */
|
|
41
|
+
prime(paths) {
|
|
42
|
+
for (const at of paths) {
|
|
43
|
+
let entries;
|
|
44
|
+
try {
|
|
45
|
+
entries = statSync(at).isDirectory()
|
|
46
|
+
? readdirSync(at, { recursive: true, encoding: "utf8" }).map((f) => path.join(at, f))
|
|
47
|
+
: [at];
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
for (const file of entries) {
|
|
53
|
+
const stamp = stampOf(file);
|
|
54
|
+
if (stamp !== undefined && !this.stamps.has(file))
|
|
55
|
+
this.stamps.set(file, stamp);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/** Whether `file` differs from when it was last seen (or wasn't seen), and records it. */
|
|
60
|
+
changed(file) {
|
|
61
|
+
const stamp = stampOf(file);
|
|
62
|
+
const before = this.stamps.get(file);
|
|
63
|
+
if (stamp === undefined)
|
|
64
|
+
this.stamps.delete(file);
|
|
65
|
+
else
|
|
66
|
+
this.stamps.set(file, stamp);
|
|
67
|
+
return stamp === undefined || stamp !== before;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function stampOf(file) {
|
|
71
|
+
try {
|
|
72
|
+
const stat = statSync(file);
|
|
73
|
+
return stat.isFile() ? `${stat.size}:${stat.mtimeMs}` : undefined;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
31
79
|
/** Watch source files, serialize compiler runs, and refresh Astro after successful output. */
|
|
32
80
|
export function watchDev(options) {
|
|
33
81
|
const { server, refreshContent, logger, rebuild } = options;
|
|
@@ -38,10 +86,12 @@ export function watchDev(options) {
|
|
|
38
86
|
let running = false;
|
|
39
87
|
let failed = false;
|
|
40
88
|
let assets = new Set();
|
|
89
|
+
const seen = options.seen ?? new SeenFiles();
|
|
41
90
|
const watchAssets = () => {
|
|
42
91
|
assets = new Set(outsideAssets(project, options.build));
|
|
43
92
|
if (assets.size > 0)
|
|
44
93
|
server.watcher.add([...assets]);
|
|
94
|
+
seen.prime([...assets]);
|
|
45
95
|
};
|
|
46
96
|
const drain = async () => {
|
|
47
97
|
running = true;
|
|
@@ -59,6 +109,7 @@ export function watchDev(options) {
|
|
|
59
109
|
}
|
|
60
110
|
}
|
|
61
111
|
if (!failed) {
|
|
112
|
+
options.onBuilt?.();
|
|
62
113
|
try {
|
|
63
114
|
const reloaded = readProject(project.dir);
|
|
64
115
|
if (reloaded.siteRoot(options.build) !== previousSiteRoot) {
|
|
@@ -91,22 +142,24 @@ export function watchDev(options) {
|
|
|
91
142
|
}, 50);
|
|
92
143
|
};
|
|
93
144
|
const onChange = (event, file) => {
|
|
145
|
+
if (!["add", "change", "unlink"].includes(event))
|
|
146
|
+
return;
|
|
94
147
|
const absolute = path.resolve(file);
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
148
|
+
const source = absolute === project.configPath ||
|
|
149
|
+
assets.has(absolute) ||
|
|
150
|
+
(absolute.startsWith(project.contentRoot + path.sep) &&
|
|
151
|
+
!absolute.startsWith(project.outputRoot + path.sep));
|
|
152
|
+
if (!source)
|
|
99
153
|
return;
|
|
100
|
-
|
|
101
|
-
if (
|
|
102
|
-
!absolute.startsWith(project.contentRoot + path.sep) ||
|
|
103
|
-
absolute.startsWith(project.outputRoot + path.sep))
|
|
154
|
+
// A late report of an edit the last build already had.
|
|
155
|
+
if (event !== "unlink" && !seen.changed(absolute))
|
|
104
156
|
return;
|
|
105
157
|
dirty = true;
|
|
106
158
|
schedule();
|
|
107
159
|
};
|
|
108
160
|
server.watcher.add(project.contentRoot);
|
|
109
161
|
server.watcher.add(project.configPath);
|
|
162
|
+
seen.prime([project.contentRoot, project.configPath]);
|
|
110
163
|
watchAssets();
|
|
111
164
|
server.watcher.on("all", onChange);
|
|
112
165
|
server.httpServer?.once("close", () => {
|
|
@@ -131,5 +184,12 @@ export function watchDev(options) {
|
|
|
131
184
|
next();
|
|
132
185
|
});
|
|
133
186
|
});
|
|
187
|
+
return {
|
|
188
|
+
inTurn: (task) => {
|
|
189
|
+
const run = pending.then(task);
|
|
190
|
+
pending = run.catch(() => undefined);
|
|
191
|
+
return run;
|
|
192
|
+
},
|
|
193
|
+
};
|
|
134
194
|
}
|
|
135
195
|
//# sourceMappingURL=dev.js.map
|
package/dist/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -12,6 +12,19 @@ export interface AscribeOptions {
|
|
|
12
12
|
* the platform binary installed with `@ascribed/cli`.
|
|
13
13
|
*/
|
|
14
14
|
binary?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Mark each block of the site output with the source lines it came from
|
|
17
|
+
* (source anchors), for review: `"dev"` in `astro dev` only, `true` always.
|
|
18
|
+
* Default: `false`, though `review` has them in `astro dev`.
|
|
19
|
+
*/
|
|
20
|
+
anchors?: boolean | "dev";
|
|
21
|
+
/**
|
|
22
|
+
* Review in the site preview: an **Ascribe review** app in `astro dev`'s
|
|
23
|
+
* toolbar, which marks the page's changes and shows the pull request's
|
|
24
|
+
* comments, with source anchors in `astro dev`. Default `true`; `false`
|
|
25
|
+
* removes the app. `astro build` never has it.
|
|
26
|
+
*/
|
|
27
|
+
review?: boolean;
|
|
15
28
|
}
|
|
16
29
|
/** Runs `ascribe build`, checks the site's routing, adds the markdown plugin, and serves published files. */
|
|
17
30
|
export default function ascribe(options: AscribeOptions): AstroIntegration;
|
package/dist/index.js
CHANGED
|
@@ -19,26 +19,39 @@
|
|
|
19
19
|
import path from "node:path";
|
|
20
20
|
import { fileURLToPath } from "node:url";
|
|
21
21
|
import { findBinary } from "./binary.js";
|
|
22
|
-
import { watchDev } from "./dev.js";
|
|
22
|
+
import { SeenFiles, watchDev } from "./dev.js";
|
|
23
23
|
import { copyPublishedFiles, filesMiddleware } from "./files.js";
|
|
24
24
|
import { consumerMismatches, readProject } from "./project.js";
|
|
25
25
|
import rehypeAscribeAttributes from "./rehype.js";
|
|
26
|
-
import {
|
|
26
|
+
import { removeDevFile, siteUrl, writeDevFile } from "./review/devfile.js";
|
|
27
|
+
import { runDiff } from "./review/diff.js";
|
|
28
|
+
import { APP_ID } from "./review/protocol.js";
|
|
29
|
+
import { readRoutes } from "./review/routes.js";
|
|
30
|
+
import { channelProblem, ReviewServer } from "./review/server.js";
|
|
31
|
+
import { anchorsFor, reviewFor, runBuild } from "./run.js";
|
|
27
32
|
import { satteriAscribeAttributes } from "./satteri.js";
|
|
28
33
|
export { default as rehypeAscribeAttributes } from "./rehype.js";
|
|
29
34
|
export { satteriAscribeAttributes } from "./satteri.js";
|
|
30
35
|
/** The virtual module `content.ts` reads the resolved site output root from. */
|
|
31
36
|
const SITE_MODULE = "virtual:ascribe/site";
|
|
37
|
+
/** The toolbar app's icon: a speech bubble over a page. */
|
|
38
|
+
const ICON = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M6 3h8l4 4v6"/><path d="M14 3v4h4"/><path d="M6 3v15"/><path d="M11 14h10v6h-6l-3 2v-2h-1z"/></svg>';
|
|
32
39
|
/** Runs `ascribe build`, checks the site's routing, adds the markdown plugin, and serves published files. */
|
|
33
40
|
export default function ascribe(options) {
|
|
34
41
|
let siteRoot = "";
|
|
35
42
|
let devProject;
|
|
36
43
|
let devConfig;
|
|
37
44
|
let rebuild;
|
|
45
|
+
/** The dev server's sources as its first build read them. */
|
|
46
|
+
const seen = new SeenFiles();
|
|
47
|
+
let binary;
|
|
48
|
+
let reviewing = false;
|
|
49
|
+
let devHttps = false;
|
|
50
|
+
let review;
|
|
38
51
|
return {
|
|
39
52
|
name: "@ascribed/astro",
|
|
40
53
|
hooks: {
|
|
41
|
-
"astro:config:setup": async ({ config, command, logger, updateConfig }) => {
|
|
54
|
+
"astro:config:setup": async ({ config, command, logger, updateConfig, addDevToolbarApp }) => {
|
|
42
55
|
const root = fileURLToPath(config.root);
|
|
43
56
|
const project = readProject(path.resolve(root, options.project ?? "."));
|
|
44
57
|
// An unknown build is `ascribe build`'s to report: it knows the implicit `site` build.
|
|
@@ -70,21 +83,37 @@ export default function ascribe(options) {
|
|
|
70
83
|
trailingSlash: config.trailingSlash,
|
|
71
84
|
site: config.site,
|
|
72
85
|
};
|
|
86
|
+
reviewing = reviewFor(options.review, command);
|
|
87
|
+
if (reviewing) {
|
|
88
|
+
addDevToolbarApp({
|
|
89
|
+
id: APP_ID,
|
|
90
|
+
name: "Ascribe review",
|
|
91
|
+
icon: ICON,
|
|
92
|
+
entrypoint: new URL("./toolbar/app.js", import.meta.url),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
73
95
|
if (command !== "preview") {
|
|
74
|
-
const
|
|
96
|
+
const found = findBinary({ binary: options.binary, root });
|
|
97
|
+
binary = found;
|
|
75
98
|
rebuild = async () => {
|
|
76
|
-
logger.info(`running ${path.basename(
|
|
99
|
+
logger.info(`running ${path.basename(found)} build for "${options.build}"`);
|
|
77
100
|
const result = await runBuild({
|
|
78
|
-
binary,
|
|
101
|
+
binary: found,
|
|
79
102
|
configPath: project.configPath,
|
|
80
103
|
build: options.build,
|
|
81
104
|
cwd: project.dir,
|
|
105
|
+
anchors: anchorsFor(options.anchors, command, reviewing),
|
|
106
|
+
// While review is on, the JSON output says which page is at each route.
|
|
107
|
+
outputs: review?.active ? ["site", "json"] : ["site"],
|
|
82
108
|
});
|
|
83
109
|
if (result.diagnostics !== "")
|
|
84
110
|
logger.warn(result.diagnostics);
|
|
85
111
|
if (result.summary !== "")
|
|
86
112
|
logger.info(result.summary);
|
|
87
113
|
};
|
|
114
|
+
// The sources as the first build reads them: the watcher may report their edits late.
|
|
115
|
+
if (command === "dev")
|
|
116
|
+
seen.prime([project.contentRoot, project.configPath]);
|
|
88
117
|
await rebuild();
|
|
89
118
|
if (command === "dev")
|
|
90
119
|
devProject = project;
|
|
@@ -112,21 +141,67 @@ export default function ascribe(options) {
|
|
|
112
141
|
},
|
|
113
142
|
});
|
|
114
143
|
},
|
|
115
|
-
"astro:server:setup": ({ server, refreshContent, logger }) => {
|
|
144
|
+
"astro:server:setup": ({ server, refreshContent, logger, toolbar }) => {
|
|
116
145
|
if (devProject && rebuild && devConfig) {
|
|
117
146
|
if (!refreshContent)
|
|
118
147
|
throw new Error("@ascribed/astro: this Astro version does not support refreshContent.");
|
|
119
|
-
|
|
148
|
+
const project = devProject;
|
|
149
|
+
devHttps = Boolean(server.config.server.https);
|
|
150
|
+
const builds = watchDev({
|
|
120
151
|
server,
|
|
152
|
+
seen,
|
|
121
153
|
refreshContent: () => refreshContent({}),
|
|
122
154
|
logger,
|
|
123
|
-
project
|
|
155
|
+
project,
|
|
124
156
|
astro: devConfig,
|
|
125
157
|
build: options.build,
|
|
126
158
|
rebuild,
|
|
159
|
+
onBuilt: () => review?.rebuilt(),
|
|
127
160
|
});
|
|
161
|
+
if (reviewing && binary !== undefined) {
|
|
162
|
+
const found = binary;
|
|
163
|
+
const run = { binary: found, configPath: project.configPath, cwd: project.dir };
|
|
164
|
+
const jsonRoot = path.join(path.dirname(siteRoot), "json");
|
|
165
|
+
review = new ReviewServer({
|
|
166
|
+
channel: toolbar,
|
|
167
|
+
logger,
|
|
168
|
+
build: options.build,
|
|
169
|
+
contentRoot: project.contentRoot,
|
|
170
|
+
channelProblem: channelProblem(server.config),
|
|
171
|
+
diff: (base) => runDiff({ ...run, build: options.build, base }),
|
|
172
|
+
connect: async () => (await import("./review/github.js")).connect(project.dir),
|
|
173
|
+
writeRoutes: () => builds.inTurn(async () => {
|
|
174
|
+
await runBuild({ ...run, build: options.build, outputs: ["json"] });
|
|
175
|
+
}),
|
|
176
|
+
readRoutes: () => readRoutes(jsonRoot),
|
|
177
|
+
});
|
|
178
|
+
}
|
|
128
179
|
}
|
|
129
180
|
},
|
|
181
|
+
"astro:server:start": ({ address, logger }) => {
|
|
182
|
+
review?.listening(address.address);
|
|
183
|
+
if (!devProject || !devConfig)
|
|
184
|
+
return;
|
|
185
|
+
const dir = devProject.dir;
|
|
186
|
+
try {
|
|
187
|
+
writeDevFile(dir, {
|
|
188
|
+
url: siteUrl(address, { https: devHttps, base: devConfig.base }),
|
|
189
|
+
build: options.build,
|
|
190
|
+
pid: process.pid,
|
|
191
|
+
});
|
|
192
|
+
// Vite exits on a signal before `astro:server:done` runs.
|
|
193
|
+
process.once("exit", () => removeDevFile(dir, process.pid));
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
logger.warn(`couldn't write .ascribe/dev.json, which the editor's Open Site Preview reads: ${error instanceof Error ? error.message : String(error)}`);
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
"astro:server:done": () => {
|
|
200
|
+
review?.dispose();
|
|
201
|
+
review = undefined;
|
|
202
|
+
if (devProject)
|
|
203
|
+
removeDevFile(devProject.dir, process.pid);
|
|
204
|
+
},
|
|
130
205
|
"astro:build:done": async ({ dir, logger }) => {
|
|
131
206
|
if (await copyPublishedFiles(siteRoot, dir))
|
|
132
207
|
logger.info("copied _ascribe/files/");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,SAAS;AACT,EAAE;AACF,wBAAwB;AACxB,2CAA2C;AAC3C,kCAAkC;AAClC,oFAAoF;AACpF,kDAAkD;AAClD,QAAQ;AACR,EAAE;AACF,6BAA6B;AAC7B,sDAAsD;AACtD,iEAAiE;AACjE,6EAA6E;AAC7E,0FAA0F;AAC1F,EAAE;AACF,yBAAyB;AACzB,6EAA6E;AAC7E,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/rehype.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { Root } from "hast";
|
|
2
|
-
/** Applies the site output's attribute markers (`ascribe-attributes`). */
|
|
2
|
+
/** Applies the site output's attribute markers (`ascribe-attributes`) and source anchors. */
|
|
3
3
|
export default function rehypeAscribeAttributes(): (tree: Root) => void;
|