From 42ff37cc2c4616c768b3a23597db88195596584c Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Wed, 2 Jun 2021 12:08:38 -0700 Subject: [PATCH] arrow --- bin/resolve-dependencies | 4 ++++ src/dependencies.js | 1 + src/fileAttachment.js | 6 +++++- src/library.js | 3 ++- test/index-test.js | 1 + 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/bin/resolve-dependencies b/bin/resolve-dependencies index 130d0716..d55fc12a 100755 --- a/bin/resolve-dependencies +++ b/bin/resolve-dependencies @@ -60,6 +60,10 @@ const fetch = require("node-fetch"); const package = await resolve("vega-lite-api"); console.log(`export const vegaliteApi = dependency("${package.name}", "${package.version}", "${package.export}");`); } + { + const package = await resolve("apache-arrow@4"); + console.log(`export const arrow = dependency("${package.name}", "${package.version}", "${package.export}");`); + } })(); async function resolve(specifier) { diff --git a/src/dependencies.js b/src/dependencies.js index 7ee82291..a2af6070 100644 --- a/src/dependencies.js +++ b/src/dependencies.js @@ -13,3 +13,4 @@ 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"); export const vegalite = dependency("vega-lite", "5.1.0", "build/vega-lite.min.js"); export const vegaliteApi = dependency("vega-lite-api", "5.0.0", "build/vega-lite-api.min.js"); +export const arrow = dependency("apache-arrow", "4.0.1", "Arrow.es2015.min.js"); diff --git a/src/fileAttachment.js b/src/fileAttachment.js index 70ace731..f234ba03 100644 --- a/src/fileAttachment.js +++ b/src/fileAttachment.js @@ -1,5 +1,5 @@ import {require as requireDefault} from "d3-require"; -import {d3Dsv} from "./dependencies.js"; +import {arrow, d3Dsv} from "./dependencies.js"; import {SQLiteDatabaseClient} from "./sqlite.js"; import jszip from "./zip.js"; @@ -53,6 +53,10 @@ class AbstractFile { i.src = url; }); } + async arrow() { + const [Arrow, response] = await Promise.all([requireDefault(arrow.resolve()), remote_fetch(this)]); + return Arrow.Table.from(response); + } async sqlite() { return SQLiteDatabaseClient.open(remote_fetch(this)); } diff --git a/src/library.js b/src/library.js index d872126b..1b6608bd 100644 --- a/src/library.js +++ b/src/library.js @@ -15,12 +15,13 @@ import svg from "./svg.js"; import tex from "./tex.js"; import vegalite from "./vegalite.js"; import width from "./width.js"; -import {d3, graphviz, htl, inputs, lodash, plot} from "./dependencies.js"; +import {arrow, d3, graphviz, htl, inputs, lodash, plot} from "./dependencies.js"; export default Object.assign(function Library(resolver) { const require = requirer(resolver); Object.defineProperties(this, properties({ FileAttachment: () => NoFileAttachments, + Arrow: () => require(arrow.resolve()), Inputs: () => require(inputs.resolve()), Mutable: () => Mutable, Plot: () => require(plot.resolve()), diff --git a/test/index-test.js b/test/index-test.js index 1ca0deb3..d0f8bb0c 100644 --- a/test/index-test.js +++ b/test/index-test.js @@ -3,6 +3,7 @@ import {Library} from "../src/index.js"; test("new Library returns a library with the expected keys", async t => { t.deepEqual(Object.keys(new Library()).sort(), [ + "Arrow", "DOM", "FileAttachment", "Files",