An upper PAGE calling an IMAGE
+
diff --git a/src/build.ts b/src/build.ts
index 7e0af3ed3..8fbeb01a1 100644
--- a/src/build.ts
+++ b/src/build.ts
@@ -139,7 +139,7 @@ export async function build(
const sourcePath = join(root, specifier);
effects.output.write(`${faint("build")} ${sourcePath} ${faint("→")} `);
const contents = await bundleStyles({path: sourcePath, minify: true});
- const hash = createHash("sha256").update(contents).digest("hex").slice(0, 8);
+ const hash = createHash("sha256").update(contents).update(specifier).digest("hex").slice(0, 8);
const ext = extname(specifier);
const alias = `/${join("_import", dirname(specifier), `${basename(specifier, ext)}.${hash}${ext}`)}`;
aliases.set(resolveStylesheetPath(root, specifier), alias);
@@ -166,7 +166,7 @@ export async function build(
}
effects.output.write(`${faint("copy")} ${sourcePath} ${faint("→")} `);
const contents = await readFile(sourcePath);
- const hash = createHash("sha256").update(contents).digest("hex").slice(0, 8);
+ const hash = createHash("sha256").update(contents).update(file).digest("hex").slice(0, 8);
const ext = extname(file);
const alias = `/${join("_file", dirname(file), `${basename(file, ext)}.${hash}${ext}`)}`;
aliases.set(loaders.resolveFilePath(file), alias);
diff --git a/test/build-test.ts b/test/build-test.ts
index f71f7529c..e0c4436a4 100644
--- a/test/build-test.ts
+++ b/test/build-test.ts
@@ -31,7 +31,8 @@ describe("build", () => {
? it.only
: skip ||
(name.endsWith(".posix") && os.platform() === "win32") ||
- (name.endsWith(".win32") && os.platform() !== "win32")
+ (name.endsWith(".win32") && os.platform() !== "win32") ||
+ (name.endsWith(".darwin-public") && os.platform() !== "darwin")
? it.skip
: it)(`${inputRoot}/${name}`, async () => {
const actualDir = join(outputRoot, `${outname}-changed`);
diff --git a/test/input/build/case-sensitive.darwin-public/ImAgE.jpg b/test/input/build/case-sensitive.darwin-public/ImAgE.jpg
new file mode 120000
index 000000000..c36a4f406
--- /dev/null
+++ b/test/input/build/case-sensitive.darwin-public/ImAgE.jpg
@@ -0,0 +1 @@
+../../../../docs/horse.jpg
\ No newline at end of file
diff --git a/test/input/build/case-sensitive.darwin-public/PAGEUPPER.md b/test/input/build/case-sensitive.darwin-public/PAGEUPPER.md
new file mode 100644
index 000000000..a8f6ca039
--- /dev/null
+++ b/test/input/build/case-sensitive.darwin-public/PAGEUPPER.md
@@ -0,0 +1,7 @@
+---
+style: STYLE.css
+---
+
+# An upper PAGE calling an IMAGE
+
+
diff --git a/test/input/build/case-sensitive.darwin-public/StYlE.css b/test/input/build/case-sensitive.darwin-public/StYlE.css
new file mode 100644
index 000000000..8a17ef169
--- /dev/null
+++ b/test/input/build/case-sensitive.darwin-public/StYlE.css
@@ -0,0 +1,3 @@
+main {
+ border: solid 1px red;
+}
diff --git a/test/input/build/case-sensitive.darwin-public/pagelower.md b/test/input/build/case-sensitive.darwin-public/pagelower.md
new file mode 100644
index 000000000..b5b4a3438
--- /dev/null
+++ b/test/input/build/case-sensitive.darwin-public/pagelower.md
@@ -0,0 +1,7 @@
+---
+style: style.css
+---
+
+# A lower page calling an image
+
+
diff --git a/test/output/build/archives.posix/_file/dynamic-tar-gz/file.c93138d8.txt b/test/output/build/archives.posix/_file/dynamic-tar-gz/file.282d8294.txt
similarity index 100%
rename from test/output/build/archives.posix/_file/dynamic-tar-gz/file.c93138d8.txt
rename to test/output/build/archives.posix/_file/dynamic-tar-gz/file.282d8294.txt
diff --git a/test/output/build/archives.posix/_file/dynamic-tar/file.c93138d8.txt b/test/output/build/archives.posix/_file/dynamic-tar/file.81db32c1.txt
similarity index 100%
rename from test/output/build/archives.posix/_file/dynamic-tar/file.c93138d8.txt
rename to test/output/build/archives.posix/_file/dynamic-tar/file.81db32c1.txt
diff --git a/test/output/build/archives.posix/_file/dynamic/file.c93138d8.txt b/test/output/build/archives.posix/_file/dynamic/file.e6632719.txt
similarity index 100%
rename from test/output/build/archives.posix/_file/dynamic/file.c93138d8.txt
rename to test/output/build/archives.posix/_file/dynamic/file.e6632719.txt
diff --git a/test/output/build/archives.posix/_file/static-tar/file.c93138d8.txt b/test/output/build/archives.posix/_file/static-tar/file.4ee5ee70.txt
similarity index 100%
rename from test/output/build/archives.posix/_file/static-tar/file.c93138d8.txt
rename to test/output/build/archives.posix/_file/static-tar/file.4ee5ee70.txt
diff --git a/test/output/build/archives.posix/_file/static-tgz/file.c93138d8.txt b/test/output/build/archives.posix/_file/static-tgz/file.ded9d524.txt
similarity index 100%
rename from test/output/build/archives.posix/_file/static-tgz/file.c93138d8.txt
rename to test/output/build/archives.posix/_file/static-tgz/file.ded9d524.txt
diff --git a/test/output/build/archives.posix/_file/static/file.d9014c46.txt b/test/output/build/archives.posix/_file/static/file.cdefba74.txt
similarity index 100%
rename from test/output/build/archives.posix/_file/static/file.d9014c46.txt
rename to test/output/build/archives.posix/_file/static/file.cdefba74.txt
diff --git a/test/output/build/archives.posix/tar.html b/test/output/build/archives.posix/tar.html
index 1e6eefd35..4a853e96b 100644
--- a/test/output/build/archives.posix/tar.html
+++ b/test/output/build/archives.posix/tar.html
@@ -16,12 +16,12 @@
import {registerFile} from "./_observablehq/stdlib.js";
registerFile("./dynamic-tar-gz/does-not-exist.txt", {"name":"./dynamic-tar-gz/does-not-exist.txt","mimeType":"text/plain","path":"./dynamic-tar-gz/does-not-exist.txt"});
-registerFile("./dynamic-tar-gz/file.txt", {"name":"./dynamic-tar-gz/file.txt","mimeType":"text/plain","path":"./_file/dynamic-tar-gz/file.c93138d8.txt","lastModified":/* ts */1706742000000});
+registerFile("./dynamic-tar-gz/file.txt", {"name":"./dynamic-tar-gz/file.txt","mimeType":"text/plain","path":"./_file/dynamic-tar-gz/file.282d8294.txt","lastModified":/* ts */1706742000000});
registerFile("./dynamic-tar/does-not-exist.txt", {"name":"./dynamic-tar/does-not-exist.txt","mimeType":"text/plain","path":"./dynamic-tar/does-not-exist.txt"});
-registerFile("./dynamic-tar/file.txt", {"name":"./dynamic-tar/file.txt","mimeType":"text/plain","path":"./_file/dynamic-tar/file.c93138d8.txt","lastModified":/* ts */1706742000000});
+registerFile("./dynamic-tar/file.txt", {"name":"./dynamic-tar/file.txt","mimeType":"text/plain","path":"./_file/dynamic-tar/file.81db32c1.txt","lastModified":/* ts */1706742000000});
registerFile("./static-tar/does-not-exist.txt", {"name":"./static-tar/does-not-exist.txt","mimeType":"text/plain","path":"./static-tar/does-not-exist.txt"});
-registerFile("./static-tar/file.txt", {"name":"./static-tar/file.txt","mimeType":"text/plain","path":"./_file/static-tar/file.c93138d8.txt","lastModified":/* ts */1706742000000});
-registerFile("./static-tgz/file.txt", {"name":"./static-tgz/file.txt","mimeType":"text/plain","path":"./_file/static-tgz/file.c93138d8.txt","lastModified":/* ts */1706742000000});
+registerFile("./static-tar/file.txt", {"name":"./static-tar/file.txt","mimeType":"text/plain","path":"./_file/static-tar/file.4ee5ee70.txt","lastModified":/* ts */1706742000000});
+registerFile("./static-tgz/file.txt", {"name":"./static-tgz/file.txt","mimeType":"text/plain","path":"./_file/static-tgz/file.ded9d524.txt","lastModified":/* ts */1706742000000});
define({id: "d5134368", inputs: ["FileAttachment","display"], body: async (FileAttachment,display) => {
display(await(
diff --git a/test/output/build/archives.posix/zip.html b/test/output/build/archives.posix/zip.html
index cd0592fe5..c9514b2f7 100644
--- a/test/output/build/archives.posix/zip.html
+++ b/test/output/build/archives.posix/zip.html
@@ -15,9 +15,9 @@
import {define} from "./_observablehq/client.js";
import {registerFile} from "./_observablehq/stdlib.js";
-registerFile("./dynamic/file.txt", {"name":"./dynamic/file.txt","mimeType":"text/plain","path":"./_file/dynamic/file.c93138d8.txt","lastModified":/* ts */1706742000000});
+registerFile("./dynamic/file.txt", {"name":"./dynamic/file.txt","mimeType":"text/plain","path":"./_file/dynamic/file.e6632719.txt","lastModified":/* ts */1706742000000});
registerFile("./dynamic/not-found.txt", {"name":"./dynamic/not-found.txt","mimeType":"text/plain","path":"./dynamic/not-found.txt"});
-registerFile("./static/file.txt", {"name":"./static/file.txt","mimeType":"text/plain","path":"./_file/static/file.d9014c46.txt","lastModified":/* ts */1706742000000});
+registerFile("./static/file.txt", {"name":"./static/file.txt","mimeType":"text/plain","path":"./_file/static/file.cdefba74.txt","lastModified":/* ts */1706742000000});
registerFile("./static/not-found.txt", {"name":"./static/not-found.txt","mimeType":"text/plain","path":"./static/not-found.txt"});
define({id: "d3b9d0ee", inputs: ["FileAttachment","display"], body: async (FileAttachment,display) => {
diff --git a/test/output/build/archives.win32/_file/static-tar/file.c93138d8.txt b/test/output/build/archives.win32/_file/static-tar/file.4ee5ee70.txt
similarity index 100%
rename from test/output/build/archives.win32/_file/static-tar/file.c93138d8.txt
rename to test/output/build/archives.win32/_file/static-tar/file.4ee5ee70.txt
diff --git a/test/output/build/archives.win32/_file/static-tgz/file.c93138d8.txt b/test/output/build/archives.win32/_file/static-tgz/file.ded9d524.txt
similarity index 100%
rename from test/output/build/archives.win32/_file/static-tgz/file.c93138d8.txt
rename to test/output/build/archives.win32/_file/static-tgz/file.ded9d524.txt
diff --git a/test/output/build/archives.win32/_file/static/file.d9014c46.txt b/test/output/build/archives.win32/_file/static/file.cdefba74.txt
similarity index 100%
rename from test/output/build/archives.win32/_file/static/file.d9014c46.txt
rename to test/output/build/archives.win32/_file/static/file.cdefba74.txt
diff --git a/test/output/build/archives.win32/tar.html b/test/output/build/archives.win32/tar.html
index db3f76580..1f88678e1 100644
--- a/test/output/build/archives.win32/tar.html
+++ b/test/output/build/archives.win32/tar.html
@@ -16,8 +16,8 @@
import {registerFile} from "./_observablehq/stdlib.js";
registerFile("./static-tar/does-not-exist.txt", {"name":"./static-tar/does-not-exist.txt","mimeType":"text/plain","path":"./static-tar/does-not-exist.txt"});
-registerFile("./static-tar/file.txt", {"name":"./static-tar/file.txt","mimeType":"text/plain","path":"./_file/static-tar/file.c93138d8.txt","lastModified":/* ts */1706742000000});
-registerFile("./static-tgz/file.txt", {"name":"./static-tgz/file.txt","mimeType":"text/plain","path":"./_file/static-tgz/file.c93138d8.txt","lastModified":/* ts */1706742000000});
+registerFile("./static-tar/file.txt", {"name":"./static-tar/file.txt","mimeType":"text/plain","path":"./_file/static-tar/file.4ee5ee70.txt","lastModified":/* ts */1706742000000});
+registerFile("./static-tgz/file.txt", {"name":"./static-tgz/file.txt","mimeType":"text/plain","path":"./_file/static-tgz/file.ded9d524.txt","lastModified":/* ts */1706742000000});
define({id: "d5134368", inputs: ["FileAttachment","display"], body: async (FileAttachment,display) => {
display(await(
diff --git a/test/output/build/archives.win32/zip.html b/test/output/build/archives.win32/zip.html
index efdb52f6d..8e1401c1e 100644
--- a/test/output/build/archives.win32/zip.html
+++ b/test/output/build/archives.win32/zip.html
@@ -15,7 +15,7 @@
import {define} from "./_observablehq/client.js";
import {registerFile} from "./_observablehq/stdlib.js";
-registerFile("./static/file.txt", {"name":"./static/file.txt","mimeType":"text/plain","path":"./_file/static/file.d9014c46.txt","lastModified":/* ts */1706742000000});
+registerFile("./static/file.txt", {"name":"./static/file.txt","mimeType":"text/plain","path":"./_file/static/file.cdefba74.txt","lastModified":/* ts */1706742000000});
registerFile("./static/not-found.txt", {"name":"./static/not-found.txt","mimeType":"text/plain","path":"./static/not-found.txt"});
define({id: "d3b9d0ee", inputs: ["FileAttachment","display"], body: async (FileAttachment,display) => {
diff --git a/test/output/build/case-sensitive.darwin-public/PAGEUPPER.html b/test/output/build/case-sensitive.darwin-public/PAGEUPPER.html
new file mode 100644
index 000000000..b25aa666e
--- /dev/null
+++ b/test/output/build/case-sensitive.darwin-public/PAGEUPPER.html
@@ -0,0 +1,44 @@
+
+
+
+