Skip to content

Commit 4923b29

Browse files
committed
observablehq: protocol imports
1 parent 702214c commit 4923b29

File tree

4 files changed

+20
-25
lines changed

4 files changed

+20
-25
lines changed

src/client/inspect.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Inspector} from "./runtime.js";
1+
import {Inspector} from "observablehq:runtime";
22

33
export function inspect(value) {
44
const inspector = new Inspector(document.createElement("div"));

src/client/main.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1+
import {Runtime} from "observablehq:runtime";
2+
import {registerDatabase, registerFile} from "observablehq:stdlib";
3+
import {DatabaseClient, FileAttachment, Generators, Mutable, now, width} from "observablehq:stdlib";
14
import {inspect, inspectError} from "./inspect.js";
2-
import {Runtime} from "./runtime.js";
35
import * as recommendedLibraries from "./stdlib/recommendedLibraries.js";
46
import * as sampleDatasets from "./stdlib/sampleDatasets.js";
5-
import {registerDatabase, registerFile} from "./stdlib.js";
6-
import {DatabaseClient, FileAttachment, Generators, Mutable, now, width} from "./stdlib.js";
77

88
const library = {
99
now,

src/client/stdlib/recommendedLibraries.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ export const _ = () => import("npm:lodash").then((lodash) => lodash.default);
22
export const aq = () => import("npm:arquero");
33
export const Arrow = () => import("npm:apache-arrow");
44
export const d3 = () => import("npm:d3");
5-
export const dot = () => import("./dot.js").then((dot) => dot.default);
5+
export const dot = () => import("observablehq:stdlib/dot").then((dot) => dot.default);
66
export const htl = () => import("npm:htl");
77
export const html = () => import("npm:htl").then((htl) => htl.html);
88
export const svg = () => import("npm:htl").then((htl) => htl.svg);
9-
export const Inputs = () => import("./inputs.js");
10-
export const L = () => import("./leaflet.js");
11-
export const mermaid = () => import("./mermaid.js").then((mermaid) => mermaid.default);
9+
export const Inputs = () => import("observablehq:stdlib/inputs");
10+
export const L = () => import("observablehq:stdlib/leaflet");
11+
export const mermaid = () => import("observablehq:stdlib/mermaid").then((mermaid) => mermaid.default);
1212
export const Plot = () => import("npm:@observablehq/plot");
13-
export const SQLite = () => import("./sqlite.js").then((sqlite) => sqlite.default);
14-
export const tex = () => import("./tex.js").then((tex) => tex.default);
13+
export const SQLite = () => import("observablehq:stdlib/sqlite").then((sqlite) => sqlite.default);
14+
export const tex = () => import("observablehq:stdlib/tex").then((tex) => tex.default);
1515
export const topojson = () => import("npm:topojson-client");

src/rollup.ts

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,17 @@
11
import {dirname, join, relative} from "node:path";
22
import {cwd} from "node:process";
33
import {fileURLToPath} from "node:url";
4-
import {type AstNode, type OutputChunk, rollup} from "rollup";
4+
import type {AstNode, OutputChunk, ResolveIdResult} from "rollup";
5+
import {rollup} from "rollup";
56
import esbuild from "rollup-plugin-esbuild";
67

78
export async function rollupClient(clientPath = getClientPath(), {minify = false} = {}): Promise<string> {
89
const bundle = await rollup({
910
input: clientPath,
10-
external: [
11-
"./runtime.js", // npm:@observablehq/runtime
12-
"./stdlib.js", // npm:@observablehq/stdlib
13-
"./stdlib/dot.js", // npm:@observablehq/dot
14-
"./stdlib/inputs.js", // npm:@observablehq/inputs
15-
"./stdlib/leaflet.js", // npm:leaflet
16-
"./stdlib/mermaid.js", // npm:@observablehq/mermaid
17-
"./stdlib/sqlite.js", // npm:sql.js
18-
"./stdlib/tex.js", // npm:@observablehq/tex
19-
/^https:/
20-
],
11+
external: [/^https:/],
2112
plugins: [
2213
{
23-
name: "resolve-npm-import",
14+
name: "resolve-import",
2415
resolveId: resolveImport,
2516
resolveDynamicImport: resolveImport
2617
},
@@ -35,8 +26,12 @@ export async function rollupClient(clientPath = getClientPath(), {minify = false
3526
}
3627
}
3728

38-
function resolveImport(specifier: string | AstNode): {id: string} | null {
39-
return typeof specifier === "string" && specifier.startsWith("npm:")
29+
function resolveImport(specifier: string | AstNode): ResolveIdResult {
30+
return typeof specifier !== "string"
31+
? null
32+
: specifier.startsWith("observablehq:")
33+
? {id: `./${specifier.slice("observablehq:".length)}.js`, external: true}
34+
: specifier.startsWith("npm:")
4035
? {id: `https://cdn.jsdelivr.net/npm/${specifier.slice("npm:".length)}/+esm`}
4136
: null;
4237
}

0 commit comments

Comments
 (0)