Skip to content

resolve jszip #238

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 21, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion bin/resolve-dependencies
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#!/usr/bin/env node

const fetch = require("node-fetch");
const extensionRe = /\.[^/]*$/;
const mains = ["unpkg", "jsdelivr", "browser", "main"];

(async () => {
console.log(`import dependency from "./dependency.js";`);
Expand Down Expand Up @@ -40,6 +42,10 @@ const fetch = require("node-fetch");
const package = await resolve("htl");
console.log(`export const htl = dependency("${package.name}", "${package.version}", "${package.export}");`);
}
{
const package = await resolve("jszip");
console.log(`export const jszip = dependency("${package.name}", "${package.version}", "dist/jszip.min.js");`);
}
{
const package = await resolve("[email protected]");
console.log(`export const marked = dependency("${package.name}", "${package.version}", "marked.min.js");`);
Expand Down Expand Up @@ -72,6 +78,17 @@ async function resolve(specifier) {
return {
name: package.name,
version: package.version,
export: (package.unpkg || package.jsdelivr || package.browser || package.main).replace(/^\.\//, "")
export: main(package)
Copy link
Member Author

@mbostock mbostock Aug 1, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a workaround for JSZip’s use of the nonstandard browser object for Browserify:

https://github.com/Stuk/jszip/blob/e5b3f0ddaa8182cd6ea253e97f678b9f36d0d8ac/package.json#L27-L30

I modeled this code after the same code from d3-require. Note that I just ended up hard-coding the main for JSZip (since I didn’t want to bother supporting Browserify-style entry parsing); this code is still needed so that the code doesn’t crash.

};
}

// https://github.com/d3/d3-require/blob/4056a786912e9335a86b41c2b1cdfa392bd14289/src/index.js#L20-L27
function main(meta) {
for (const key of mains) {
const value = meta[key];
if (typeof value === "string") {
return (extensionRe.test(value) ? value : `${value}.js`).replace(/^\.\//, "");
}
}
return "index.js";
}
1 change: 1 addition & 0 deletions src/dependencies.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export const highlight = dependency("@observablehq/highlight.js", "2.0.0", "high
export const katex = dependency("@observablehq/katex", "0.11.1", "dist/katex.min.js");
export const lodash = dependency("lodash", "4.17.21", "lodash.min.js");
export const htl = dependency("htl", "0.2.5", "dist/htl.min.js");
export const jszip = dependency("jszip", "3.7.0", "dist/jszip.min.js");
export const marked = dependency("marked", "0.3.12", "marked.min.js");
export const sql = dependency("sql.js", "1.5.0", "dist/sql-wasm.js");
export const vega = dependency("vega", "5.20.2", "build/vega.min.js");
Expand Down
5 changes: 2 additions & 3 deletions src/fileAttachment.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import {require as requireDefault} from "d3-require";
import {arrow, d3Dsv} from "./dependencies.js";
import {arrow, d3Dsv, jszip} from "./dependencies.js";
import {SQLiteDatabaseClient} from "./sqlite.js";
import jszip from "./zip.js";

async function remote_fetch(file) {
const response = await fetch(await file.url());
Expand Down Expand Up @@ -61,7 +60,7 @@ class AbstractFile {
return SQLiteDatabaseClient.open(remote_fetch(this));
}
async zip() {
const [JSZip, buffer] = await Promise.all([jszip(requireDefault), this.arrayBuffer()]);
const [JSZip, buffer] = await Promise.all([requireDefault(jszip.resolve()), this.arrayBuffer()]);
return new ZipArchive(await JSZip.loadAsync(buffer));
}
}
Expand Down
3 changes: 0 additions & 3 deletions src/zip.js

This file was deleted.