diff --git a/package.json b/package.json index 46ee69a..7f46848 100644 --- a/package.json +++ b/package.json @@ -66,12 +66,14 @@ }, "devDependencies": { "@databricks/sql": "^1.14.0", + "@duckdb/duckdb-wasm": "1.33.1-dev114.0", "@duckdb/node-api": "1.3.2-alpha.26", "@eslint/js": "^9.39.4", "@google-cloud/bigquery": "^8.3.1", "@types/jsdom": "^21.1.7", "@types/markdown-it": "^14.1.2", "@types/sql.js": "^1.4.11", + "@uwdata/vgplot": "^0.35.0", "bun-types": "^1.3.14", "eslint": "^9.39.4", "exceljs": "^4.4.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d149ec3..c40213b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -75,6 +75,9 @@ importers: '@databricks/sql': specifier: ^1.14.0 version: 1.14.0 + '@duckdb/duckdb-wasm': + specifier: 1.33.1-dev114.0 + version: 1.33.1-dev114.0 '@duckdb/node-api': specifier: 1.3.2-alpha.26 version: 1.3.2-alpha.26 @@ -93,6 +96,9 @@ importers: '@types/sql.js': specifier: ^1.4.11 version: 1.4.11 + '@uwdata/vgplot': + specifier: ^0.35.0 + version: 0.35.0 bun-types: specifier: ^1.3.14 version: 1.3.14 @@ -411,6 +417,9 @@ packages: resolution: {integrity: sha512-zMmt+idrDRDtXuoMC7sXdr1AJh7Q8Vy6tKovbJ/PvA24zDBz2w8Z1FQApT39IMNL9SAz89IeRZJcMOzfxVelaQ==} engines: {node: '>=14.0.0'} + '@duckdb/duckdb-wasm@1.33.1-dev114.0': + resolution: {integrity: sha512-0sk+bv9iY7GuDQ0n0BlXBO6FucZ8PPVzGswOJh6kXoGuPe0SJRc49oyn+PNcz2JNE2XmD+Wi60fRUjTloHn6bw==} + '@duckdb/node-api@1.3.2-alpha.26': resolution: {integrity: sha512-2gLtgJaiguAuPbXuS4NCthbIfEHo72FIF9514FKxg7sYY0gGJP1DgCpvBKdisyhWtBkNJ+jjn2p2PmRqkgZabQ==} @@ -751,6 +760,10 @@ packages: resolution: {integrity: sha512-S9qfCrAMrL2J229FwMGbyzPskCMqvPkodkn4MJ2r012Bc4yqaNjl8HyT/dKY1zjOwsSrryFQoCiwvWxS8IeASg==} engines: {node: '>=14.5.0'} + '@observablehq/plot@0.6.19': + resolution: {integrity: sha512-8Tg8+doIBDKTG6gL9Px7Tws+Tuni+bwjhaJufAKR3V8HFi2dtGQf57fH0UKwOrMYgjmEdX2PP1E4LIi7gyhgYw==} + engines: {node: '>=12'} + '@observablehq/runtime@6.1.0': resolution: {integrity: sha512-nMlCk1m/UUBDVkQsmtt4NkiGWsj5IoP12VK5w2bOSKJIWkBpLzZNZzrFsRgj1NlraMF1t1ZADcXmFcyZ6XnBTw==} @@ -870,6 +883,9 @@ packages: '@smithy/core@3.24.4': resolution: {integrity: sha512-3UNRKEyQyAgVgM0LGlerCLm+ChZWZ1GPfde+jBEW6bm6bSBGU1p0EbblaUV3unbhwvidjLA5Zs3sOs7mnZwvAw==} engines: {node: '>=18.0.0'} + deprecated: |- + Deprecated due to a bug in custom logger data redaction. Upgrade to the latest version. If you used a custom logger with this + version, review your logs and rotate any credentials or other secrets. See https://github.com/aws/aws-sdk-js-v3/issues/8393. '@smithy/credential-provider-imds@4.3.4': resolution: {integrity: sha512-vKW0MEFRU4Y3MkVZUkpJm+g9qyPGLCXhc0YLggUdSdBB4g7IaSSsCE75P9rBXyWHrXY1UYSQUl8/DwsTR7QciA==} @@ -1026,6 +1042,9 @@ packages: peerDependencies: acorn: ^8.9.0 + '@swc/helpers@0.5.24': + resolution: {integrity: sha512-6tcXo4kA8HgGO7AVmawB57RYi/piBPYVHVcO6dXjX+SZw8GoHmi262sp4v2Ha2kNP9Cx84qei27yT+fjS1lxgg==} + '@techteamer/ocsp@1.0.1': resolution: {integrity: sha512-q4pW5wAC6Pc3JI8UePwE37CkLQ5gDGZMgjSX4MEEm4D4Di59auDQ8UNIDzC4gRnPNmmcwjpPxozq8p5pjiOmOw==} @@ -1041,9 +1060,15 @@ packages: '@types/command-line-args@5.2.0': resolution: {integrity: sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==} + '@types/command-line-args@5.2.3': + resolution: {integrity: sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==} + '@types/command-line-usage@5.0.2': resolution: {integrity: sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg==} + '@types/command-line-usage@5.0.4': + resolution: {integrity: sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==} + '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -1071,6 +1096,9 @@ packages: '@types/node@14.18.63': resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==} + '@types/node@20.19.43': + resolution: {integrity: sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==} + '@types/node@20.3.0': resolution: {integrity: sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ==} @@ -1152,6 +1180,32 @@ packages: resolution: {integrity: sha512-yURCknZhvywvQItHMMmFSo+fq5arCUIyz/CVk7jD89MSai7dkaX8ufjCWp3NttLojoTVbcE72ri+be/TnEbMHw==} engines: {node: '>=20.0.0'} + '@uwdata/flechette@2.8.0': + resolution: {integrity: sha512-9Tvvu06RmO3STsXGiNmAMy0hADyHTEDcM07MpoEG5a3NYKFhvVeOwum0fLuhdPWIf1CpJlpdlWgY7BKduxbpaQ==} + + '@uwdata/mosaic-core@0.35.0': + resolution: {integrity: sha512-lTcEio+6FwdPA/Z2nt6SBmvCkku9aNRxPSbgPIlMgHKfmQDyE0RYf0J4Xpd6wTNPN0cx9YIYHk378wKMpoTr8g==} + peerDependencies: + '@uwdata/mosaic-duckdb': ^0.35.0 + peerDependenciesMeta: + '@uwdata/mosaic-duckdb': + optional: true + + '@uwdata/mosaic-inputs@0.35.0': + resolution: {integrity: sha512-ZGTna0B+oeN8YMrMw6kcIZxvrUpkRyoY4F3N60G56I/w8HRi8orlpycpej10ESFgGAnSvO4SO4mQBPdy326Ljg==} + + '@uwdata/mosaic-plot@0.35.0': + resolution: {integrity: sha512-gBhcKqI/KOUAQCmjdTUltfgyGZFWqVJetZS2AEKdUpcnBz+gA4Gro4Lms1DUiCYtd4XcAYu4AlrbWkuU+sAyoQ==} + + '@uwdata/mosaic-sql@0.35.0': + resolution: {integrity: sha512-KDE3dt7bZu4fH5AvNzHe6lpiKvi2BFmSry8jQSwS419sxqAToE//rfFDmCmuhlNi3kcBNYQnytR0YaH6NEHvaA==} + + '@uwdata/vgplot@0.35.0': + resolution: {integrity: sha512-O89XWWyn6y8/wBVCDR0M0pXk1YwQuw0uKjfbRP4aPZjkXhyY9tzQabeADEo6SGgmpgDtEfOlnuL3ciGk2hv7lQ==} + + '@uwdata/wk-geojson@0.0.1': + resolution: {integrity: sha512-4RpnKbdrphwzP+BwgzuGRqA/s03oT1rzHAKdU43Ozn8J1BCTwS+2iAGQ7YQAnrCkCi213WtQ7VYaFjVtvZotPQ==} + '@vitest/expect@4.1.7': resolution: {integrity: sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w==} @@ -1214,6 +1268,10 @@ packages: resolution: {integrity: sha512-3gvCX0GDawWz6KFNC28p65U+zGh/LZ6ZNKWNu74N6CQlKzxeoWHpi4CgEQsgRSEMuyrIIXi1Ea2syja7dwcHvw==} hasBin: true + apache-arrow@17.0.0: + resolution: {integrity: sha512-X0p7auzdnGuhYMVKYINdQssS4EcKec9TCXyez/qtJt32DrIMGbzqiaMiQ0X6fQlQpw8Fl0Qygcv4dfRAr5Gu9Q==} + hasBin: true + archiver-utils@2.1.0: resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} engines: {node: '>= 6'} @@ -1300,6 +1358,9 @@ packages: bignumber.js@9.3.1: resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + binary-search-bounds@2.0.5: + resolution: {integrity: sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==} + binary@0.3.0: resolution: {integrity: sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==} @@ -1356,6 +1417,10 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1410,6 +1475,10 @@ packages: resolution: {integrity: sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==} engines: {node: '>=12.20.0'} + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + commander@9.5.0: resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} @@ -1447,6 +1516,133 @@ packages: cuint@0.2.2: resolution: {integrity: sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==} + d3-array@3.2.5: + resolution: {integrity: sha512-Th8qGXoBalmWsstpkuhmBuTsBQIFqYOJtjlBvNVvBfJ8E3uYusBUwUR8HU20U0qKKQkgCvKyR1YjiozWadk5QA==} + engines: {node: '>=12'} + + d3-axis@3.0.1: + resolution: {integrity: sha512-E5QCXfaf/uJZEHHiqoWRq+bQEm2PzoVFv2rDC7CZ3wwI0MjfMW3w83J3ubobG4IJj3lShAI5eiPJhOu/8wHofA==} + engines: {node: '>=12'} + + d3-brush@3.0.1: + resolution: {integrity: sha512-L5Glqa/Gb7LU3ndIOMtA5mDzlJ0aXKp5ELP2X09ctWF23jO7+faIUVDbmaIi+D6k3EemXFWn1F3lkfguExoVhA==} + engines: {node: '>=12'} + + d3-chord@3.0.2: + resolution: {integrity: sha512-cGmADo5M2PTi3ewJZ2lcE32eURd4JmHtQ5JwRIUcas5L1SXqufG9yPyjWp8fW0gRi7aZi9bgbZPFZO1eyZ+1CQ==} + engines: {node: '>=12'} + + d3-color@3.1.1: + resolution: {integrity: sha512-lfab8x0Bj0UO7SNsY8dZSbNIA6ipbkE3X0NG9nqjCu6CfCHZseuDnOSJY7hidKrjpP++i1M2qT+FlAdPKYRilA==} + engines: {node: '>=12'} + + d3-contour@4.0.3: + resolution: {integrity: sha512-5DYURc8KwXPOhSUBblU0P9rVcArsSPxPOxsfO0Eud0s28oU0sB2e80aRHRL9AZW3usT8ikFKyIHpHHLNWLdRVA==} + engines: {node: '>=12'} + + d3-delaunay@6.0.6: + resolution: {integrity: sha512-DMQIEvSJhZCB6pwedcXaAlQ+MeKU5LlM2XakKtc73b/VM+RBiI1SRXycOEOKg2jsKj4zZ9F0KGYG6nCGwwWu/g==} + engines: {node: '>=12'} + + d3-dispatch@3.0.2: + resolution: {integrity: sha512-sAzH4Y4nsLo8eSqw5jKiZt+LU2wZmL/qS+OkxQGjhwazB/D7TY34R/QK1eshfGr7cZEKymKZ/Haem7m+lu98Sg==} + engines: {node: '>=12'} + + d3-drag@3.0.1: + resolution: {integrity: sha512-OWeoayCq8J69hUIjvL+Mb6Q6Oaj/fyHV5XaXByEUAG+JUjIfTGDnk3qGpcXrD3VmQ3BSV96fcbM6fqq7C0tbPA==} + engines: {node: '>=12'} + + d3-dsv@3.0.2: + resolution: {integrity: sha512-FUnXhX7I4/AXyRCZzwfZTDGSq8PGZ4oR0tiCBqNGOZMsDrQ+6sIWNQnBzcCGhzJKZ6uCvCezTwflUqI209RRiQ==} + engines: {node: '>=12'} + hasBin: true + + d3-ease@3.0.2: + resolution: {integrity: sha512-B5znKqRmKROAN4oHWQ50W/qisVjA9GXh2WMsVKdFVp4DxWmcrOsweqgUOUVsv5th96kwaZlokU6SlV4J3gak1w==} + engines: {node: '>=12'} + + d3-fetch@3.0.2: + resolution: {integrity: sha512-1wGF62bgjMRbF6mqbD+6rRWBL2hwWVYQjFO2UP3Wm1nIAvJZKaQxXM5caVY7athoCa8wIq9lCf7g44lPWFk50g==} + engines: {node: '>=12'} + + d3-force@3.0.1: + resolution: {integrity: sha512-kAaaHLFebBYwgi5cYBXAI8vKrQFMCD2MEswj2QuPKKbdU1wYLc8WXtS7O8F/b6POCIe3gJjY6hkDstHi1yMETQ==} + engines: {node: '>=12'} + + d3-format@3.1.3: + resolution: {integrity: sha512-+F+/49swqmGuQJmSKnVMIDH/QkEFV5li9QRj0xm/KhyAUBv099O5PrvpQFxBp24PYph17Mnvt9mjKQV0ii0nMA==} + engines: {node: '>=12'} + + d3-geo@3.1.2: + resolution: {integrity: sha512-5R8ZgDQorIxmauv7R6gpE/ndz+Z0qAZssigq0aXFdvPHdY41RqtW02jrRUQAL724NdPABYXo1+gQEGBBr7uKNg==} + engines: {node: '>=12'} + + d3-hierarchy@3.1.3: + resolution: {integrity: sha512-GRajN5ZcnEwYFWqqdzhG1qJ3+fDg6WWzk47TJg7ePY7yvYAgRfD2r1mUx+wviBOWuCwamCUzjwMSdato43jbGA==} + engines: {node: '>=12'} + + d3-interpolate@3.0.2: + resolution: {integrity: sha512-IRzGU62DtxhvsnSTWMQIdnoZ6gA+BCWwBon1EJI6SjoN595799b6z/QRBzXfFhE8iupUPp3042yBNo0STPqnzQ==} + engines: {node: '>=12'} + + d3-path@3.1.1: + resolution: {integrity: sha512-jsbgV8zIT38ReB9O7X7gcLndTQRONSqNNd+oGIaTBdUug4r5jFmp0N6RY9R5GWbdUDucn0qoTGyfjapT4tDhcg==} + engines: {node: '>=12'} + + d3-polygon@3.0.2: + resolution: {integrity: sha512-WAUvPudGU1Dn4mDPfb6+JnnbeVEV53hG/BoT+bxts6AkZsOpTEiV1jHYX+2vtwCICNFG9Wxv8QS+eW1zE/Dwfg==} + engines: {node: '>=12'} + + d3-quadtree@3.0.2: + resolution: {integrity: sha512-9Lu9mqJKRbIk0d6mKDjpvPURaPdwHVK5CYbcdd0/4vBgz4ldz/7TIOse3kNERsByGNfld58KEco507AztJWyTQ==} + engines: {node: '>=12'} + + d3-random@3.0.2: + resolution: {integrity: sha512-PxJi9LNV+7mulaYO77nd+oGurXGL1fhedXjHnB3pWLUcqDnQtF4VASoqnQGHgoXLByVdv5QJ/2kfwkGn5HTS8g==} + engines: {node: '>=12'} + + d3-scale-chromatic@3.1.1: + resolution: {integrity: sha512-lA5gfN2yMvmChubmptnDiBfeGpHD7Yb1EbvCz0TZE0WHXhyR6W2allPuhKtzV5ILQRqeOdefF0qYtERReLUBDg==} + engines: {node: '>=12'} + + d3-scale@4.0.3: + resolution: {integrity: sha512-66cWobCNzcMvlfoaDHCxuIv9TBUWG1BLOWdv9kHHFuCr1JdqAWPvTmsaEYDD5NRMyWZ5+7u0GqiCDfMXMqh3hg==} + engines: {node: '>=12'} + + d3-selection@3.0.1: + resolution: {integrity: sha512-ODSf35vqCrlCfp7hrm0eZjvOosSXSYLjqvIlhMBV9q9VOx7EBJG6pc+uXBswEZNJgCGJ+qnKYcWutbZDIxe/Xg==} + engines: {node: '>=12'} + + d3-shape@3.2.1: + resolution: {integrity: sha512-dm2o+lbKdzg9tY7GEag/dB9hcbodLfwkE/DkvqbELJXaMz0yKzWWhZqhbI7CKubukA7HnRyz0avdtvi7EPxPvw==} + engines: {node: '>=12'} + + d3-time-format@4.1.1: + resolution: {integrity: sha512-22XaqjyCjpqgda20erhsOjGmC3vvYwTNYniKAd45W5UWLDF43moeOuV9qYpRqobIlsnK0UhnKZjUUJm3VgORUA==} + engines: {node: '>=12'} + + d3-time@3.1.1: + resolution: {integrity: sha512-Ze7rjrhMzdeulh0/hjcfFj7XLAHOfowtEMfsoG6DU866HPynQNW7Wfen6hzXcqKTv8XzxvF6Hzr5XD6bMHr2ug==} + engines: {node: '>=12'} + + d3-timer@3.0.2: + resolution: {integrity: sha512-1Il1aliroVSErrv5aulRBxAY+7+DnaoLIWGd1C6SsBTWDeobWiP/V69vwb8vT6abR1kKwaNe1196pmaQ1fK90A==} + engines: {node: '>=12'} + + d3-transition@3.0.2: + resolution: {integrity: sha512-RcjCsdFgyFoDB+QXLC5m60ZkTN0k9zH+ovoLlTdJnDS1AbfbcuowiM4pCKSTOclNibS4f4J4cbv2m7O7y8NTOQ==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + + d3-zoom@3.0.1: + resolution: {integrity: sha512-kfjD3BDQu/FOatpZ6JdMSyIoDwTxIpI29ySTI2J5ZlDaH1WbuJGQJ2Q9oJkWTEZEW98j6idezoomSD3Cn2zwiw==} + engines: {node: '>=12'} + + d3@7.9.2: + resolution: {integrity: sha512-ZKb/mONPVKzaO5UlcWcwN8bS4ezvQaYu+bsou+XgNABdGC800kwH651ADTbbTxMPHW13UlvbQafdmJQDk1w7Mg==} + engines: {node: '>=12'} + data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} @@ -1497,6 +1693,9 @@ packages: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} + delaunator@5.1.0: + resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -1588,6 +1787,7 @@ packages: eslint@9.39.4: resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true peerDependencies: jiti: '*' @@ -1705,6 +1905,9 @@ packages: flatbuffers@23.5.26: resolution: {integrity: sha512-vE+SI9vrJDwi1oETtTIFldC/o9GsVKRM+s6EL0nQgxXlYV1Vc4Tk30hj4xGICftInKQKj1F3up2n8UbIVobISQ==} + flatbuffers@24.12.23: + resolution: {integrity: sha512-dLVCAISd5mhls514keQzmEG6QHmUUsNuWsb4tFafIUwvvgDjXhtfAYSKOzt5SWOy+qByV5pbsDZ+Vb7HUOBEdA==} + flatted@3.4.2: resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} @@ -1878,6 +2081,13 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + + interval-tree-1d@1.0.4: + resolution: {integrity: sha512-wY8QJH+6wNI0uh4pDQzMvl+478Qh7Rl4qLmqiluxALlNvl+I+o5x38Pw3/z7mDPTPS1dQalZJXsmbvxx5gclhQ==} + ip-address@10.2.0: resolution: {integrity: sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==} engines: {node: '>= 12'} @@ -2271,6 +2481,10 @@ packages: resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} engines: {node: '>= 6'} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} @@ -2405,6 +2619,10 @@ packages: (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) + qs@6.17.1: + resolution: {integrity: sha512-jd3COkaKVgGUW+ZHyEHCG9bH7RoaaiWuMgzsIBjUMVjLAaWGWpoUAVwljVvBHxRu/2qEHnadLGZrkutYUBPQJA==} + engines: {node: '>=0.6'} + readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -2432,6 +2650,9 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + robust-predicates@3.0.3: + resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} + rolldown@1.0.2: resolution: {integrity: sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2444,6 +2665,9 @@ packages: resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} + rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -2481,6 +2705,22 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} + engines: {node: '>= 0.4'} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -2666,6 +2906,9 @@ packages: uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.24.6: resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} @@ -3468,6 +3711,11 @@ snapshots: - supports-color - utf-8-validate + '@duckdb/duckdb-wasm@1.33.1-dev114.0': + dependencies: + apache-arrow: 17.0.0 + qs: 6.17.1 + '@duckdb/node-api@1.3.2-alpha.26': dependencies: '@duckdb/node-bindings': 1.3.2-alpha.26 @@ -3776,6 +4024,12 @@ snapshots: acorn: 8.16.0 acorn-walk: 8.3.5 + '@observablehq/plot@0.6.19': + dependencies: + d3: 7.9.2 + interval-tree-1d: 1.0.4 + isoformat: 0.2.1 + '@observablehq/runtime@6.1.0': {} '@oxc-project/types@0.132.0': {} @@ -4045,6 +4299,8 @@ snapshots: dependencies: acorn: 8.16.0 + '@swc/helpers@0.5.24': {} + '@techteamer/ocsp@1.0.1': dependencies: asn1.js: 5.4.1 @@ -4067,8 +4323,12 @@ snapshots: '@types/command-line-args@5.2.0': {} + '@types/command-line-args@5.2.3': {} + '@types/command-line-usage@5.0.2': {} + '@types/command-line-usage@5.0.4': {} + '@types/deep-eql@4.0.2': {} '@types/emscripten@1.41.6': {} @@ -4094,6 +4354,10 @@ snapshots: '@types/node@14.18.63': {} + '@types/node@20.19.43': + dependencies: + undici-types: 6.21.0 + '@types/node@20.3.0': {} '@types/node@25.9.1': @@ -4210,6 +4474,46 @@ snapshots: transitivePeerDependencies: - supports-color + '@uwdata/flechette@2.8.0': + dependencies: + '@uwdata/wk-geojson': 0.0.1 + + '@uwdata/mosaic-core@0.35.0': + dependencies: + '@duckdb/duckdb-wasm': 1.33.1-dev114.0 + '@uwdata/flechette': 2.8.0 + '@uwdata/mosaic-sql': 0.35.0 + + '@uwdata/mosaic-inputs@0.35.0': + dependencies: + '@uwdata/mosaic-core': 0.35.0 + '@uwdata/mosaic-sql': 0.35.0 + transitivePeerDependencies: + - '@uwdata/mosaic-duckdb' + + '@uwdata/mosaic-plot@0.35.0': + dependencies: + '@observablehq/plot': 0.6.19 + '@uwdata/flechette': 2.8.0 + '@uwdata/mosaic-core': 0.35.0 + '@uwdata/mosaic-sql': 0.35.0 + d3: 7.9.2 + transitivePeerDependencies: + - '@uwdata/mosaic-duckdb' + + '@uwdata/mosaic-sql@0.35.0': {} + + '@uwdata/vgplot@0.35.0': + dependencies: + '@uwdata/mosaic-core': 0.35.0 + '@uwdata/mosaic-inputs': 0.35.0 + '@uwdata/mosaic-plot': 0.35.0 + '@uwdata/mosaic-sql': 0.35.0 + transitivePeerDependencies: + - '@uwdata/mosaic-duckdb' + + '@uwdata/wk-geojson@0.0.1': {} + '@vitest/expect@4.1.7': dependencies: '@standard-schema/spec': 1.1.0 @@ -4295,6 +4599,18 @@ snapshots: transitivePeerDependencies: - '@75lb/nature' + apache-arrow@17.0.0: + dependencies: + '@swc/helpers': 0.5.24 + '@types/command-line-args': 5.2.3 + '@types/command-line-usage': 5.0.4 + '@types/node': 20.19.43 + command-line-args: 5.2.1 + command-line-usage: 7.0.1 + flatbuffers: 24.12.23 + json-bignum: 0.0.3 + tslib: 2.8.1 + archiver-utils@2.1.0: dependencies: glob: 7.2.3 @@ -4393,6 +4709,8 @@ snapshots: bignumber.js@9.3.1: {} + binary-search-bounds@2.0.5: {} + binary@0.3.0: dependencies: buffers: 0.1.1 @@ -4451,6 +4769,11 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + callsites@3.1.0: {} chai@6.2.2: {} @@ -4509,6 +4832,8 @@ snapshots: transitivePeerDependencies: - '@75lb/nature' + commander@7.2.0: {} + commander@9.5.0: {} compress-commons@4.1.2: @@ -4545,6 +4870,159 @@ snapshots: cuint@0.2.2: optional: true + d3-array@3.2.5: + dependencies: + internmap: 2.0.3 + + d3-axis@3.0.1: {} + + d3-brush@3.0.1: + dependencies: + d3-dispatch: 3.0.2 + d3-drag: 3.0.1 + d3-interpolate: 3.0.2 + d3-selection: 3.0.1 + d3-transition: 3.0.2(d3-selection@3.0.1) + + d3-chord@3.0.2: + dependencies: + d3-path: 3.1.1 + + d3-color@3.1.1: {} + + d3-contour@4.0.3: + dependencies: + d3-array: 3.2.5 + + d3-delaunay@6.0.6: + dependencies: + delaunator: 5.1.0 + + d3-dispatch@3.0.2: {} + + d3-drag@3.0.1: + dependencies: + d3-dispatch: 3.0.2 + d3-selection: 3.0.1 + + d3-dsv@3.0.2: + dependencies: + commander: 7.2.0 + iconv-lite: 0.6.3 + rw: 1.3.3 + + d3-ease@3.0.2: {} + + d3-fetch@3.0.2: + dependencies: + d3-dsv: 3.0.2 + + d3-force@3.0.1: + dependencies: + d3-dispatch: 3.0.2 + d3-quadtree: 3.0.2 + d3-timer: 3.0.2 + + d3-format@3.1.3: {} + + d3-geo@3.1.2: + dependencies: + d3-array: 3.2.5 + + d3-hierarchy@3.1.3: {} + + d3-interpolate@3.0.2: + dependencies: + d3-color: 3.1.1 + + d3-path@3.1.1: {} + + d3-polygon@3.0.2: {} + + d3-quadtree@3.0.2: {} + + d3-random@3.0.2: {} + + d3-scale-chromatic@3.1.1: + dependencies: + d3-color: 3.1.1 + d3-interpolate: 3.0.2 + d3-scale: 4.0.3 + + d3-scale@4.0.3: + dependencies: + d3-array: 3.2.5 + d3-format: 3.1.3 + d3-interpolate: 3.0.2 + d3-time: 3.1.1 + d3-time-format: 4.1.1 + + d3-selection@3.0.1: {} + + d3-shape@3.2.1: + dependencies: + d3-path: 3.1.1 + + d3-time-format@4.1.1: + dependencies: + d3-time: 3.1.1 + + d3-time@3.1.1: + dependencies: + d3-array: 3.2.5 + + d3-timer@3.0.2: {} + + d3-transition@3.0.2(d3-selection@3.0.1): + dependencies: + d3-color: 3.1.1 + d3-dispatch: 3.0.2 + d3-ease: 3.0.2 + d3-interpolate: 3.0.2 + d3-selection: 3.0.1 + d3-timer: 3.0.2 + + d3-zoom@3.0.1: + dependencies: + d3-dispatch: 3.0.2 + d3-drag: 3.0.1 + d3-interpolate: 3.0.2 + d3-selection: 3.0.1 + d3-transition: 3.0.2(d3-selection@3.0.1) + + d3@7.9.2: + dependencies: + d3-array: 3.2.5 + d3-axis: 3.0.1 + d3-brush: 3.0.1 + d3-chord: 3.0.2 + d3-color: 3.1.1 + d3-contour: 4.0.3 + d3-delaunay: 6.0.6 + d3-dispatch: 3.0.2 + d3-drag: 3.0.1 + d3-dsv: 3.0.2 + d3-ease: 3.0.2 + d3-fetch: 3.0.2 + d3-force: 3.0.1 + d3-format: 3.1.3 + d3-geo: 3.1.2 + d3-hierarchy: 3.1.3 + d3-interpolate: 3.0.2 + d3-path: 3.1.1 + d3-polygon: 3.0.2 + d3-quadtree: 3.0.2 + d3-random: 3.0.2 + d3-scale: 4.0.3 + d3-scale-chromatic: 3.1.1 + d3-selection: 3.0.1 + d3-shape: 3.2.1 + d3-time: 3.1.1 + d3-time-format: 4.1.1 + d3-timer: 3.0.2 + d3-transition: 3.0.2(d3-selection@3.0.1) + d3-zoom: 3.0.1 + data-uri-to-buffer@4.0.1: {} data-uri-to-buffer@6.0.2: {} @@ -4581,6 +5059,10 @@ snapshots: escodegen: 2.1.0 esprima: 4.0.1 + delaunator@5.1.0: + dependencies: + robust-predicates: 3.0.3 + delayed-stream@1.0.0: {} detect-libc@2.1.2: {} @@ -4834,6 +5316,8 @@ snapshots: flatbuffers@23.5.26: {} + flatbuffers@24.12.23: {} + flatted@3.4.2: {} fn.name@1.1.0: {} @@ -5017,6 +5501,12 @@ snapshots: inherits@2.0.4: {} + internmap@2.0.3: {} + + interval-tree-1d@1.0.4: + dependencies: + binary-search-bounds: 2.0.5 + ip-address@10.2.0: {} is-docker@2.2.1: {} @@ -5363,6 +5853,8 @@ snapshots: object-hash@2.2.0: {} + object-inspect@1.13.4: {} + obug@2.1.1: {} oidc-token-hash@5.2.0: {} @@ -5500,6 +5992,11 @@ snapshots: q@1.5.1: {} + qs@6.17.1: + dependencies: + es-define-property: 1.0.1 + side-channel: 1.1.1 + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -5535,6 +6032,8 @@ snapshots: dependencies: glob: 7.2.3 + robust-predicates@3.0.3: {} + rolldown@1.0.2: dependencies: '@oxc-project/types': 0.132.0 @@ -5560,6 +6059,8 @@ snapshots: run-applescript@7.1.0: {} + rw@1.3.3: {} + safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} @@ -5586,6 +6087,34 @@ snapshots: shebang-regex@3.0.0: {} + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} simple-lru-cache@0.0.2: {} @@ -5796,6 +6325,8 @@ snapshots: uc.micro@2.1.0: {} + undici-types@6.21.0: {} + undici-types@7.24.6: {} unzipper@0.10.14: diff --git a/src/runtime/index.ts b/src/runtime/index.ts index 4edb709..735b2f0 100644 --- a/src/runtime/index.ts +++ b/src/runtime/index.ts @@ -5,6 +5,7 @@ import {define as _define} from "./define.js"; import type {observe} from "./display.js"; import {fileAttachments, fileDatabase} from "./stdlib/fileAttachment.js"; import {library} from "./stdlib/index.js"; +import {vg} from "./stdlib/vgplot.js"; export type {DefineState, Definition} from "./define.js"; export * from "./display.js"; @@ -33,6 +34,7 @@ export class NotebookRuntime { this.runtime = Object.assign(runtime, {fileAttachments, fileDatabase}); this.main = runtime.module(); this.main.builtin("db", ...fileDatabase()); + this.main.builtin("vg", ...vg()); } define(state: DefineState, definition: Definition, observer?: typeof observe): void { diff --git a/src/runtime/stdlib/recommendedLibraries.ts b/src/runtime/stdlib/recommendedLibraries.ts index 91e0d95..6c63884 100644 --- a/src/runtime/stdlib/recommendedLibraries.ts +++ b/src/runtime/stdlib/recommendedLibraries.ts @@ -22,5 +22,5 @@ export const SQLite = () => import("./sqlite.js").then((_) => _.default); export const SQLiteDatabaseClient = () => import("./sqlite.js").then((_) => _.SQLiteDatabaseClient); export const tex = () => import("./tex.js").then((_) => _.tex); export const topojson = () => import("https://esm.sh/topojson-client"); -// export const vg = () => import("observablehq:stdlib/vgplot").then((_) => _.default()); +export const vgplot = () => import("https://esm.sh/@uwdata/vgplot?deps=@duckdb/duckdb-wasm@1.32.0"); export const vl = () => import("./vega-lite.js").then((_) => _.vl); diff --git a/src/runtime/stdlib/vgplot.ts b/src/runtime/stdlib/vgplot.ts new file mode 100644 index 0000000..486934f --- /dev/null +++ b/src/runtime/stdlib/vgplot.ts @@ -0,0 +1,14 @@ +import type * as _vgplot from "@uwdata/vgplot"; +import type {AsyncDuckDB} from "@duckdb/duckdb-wasm"; + +export function vg() { + return [ + ["db", "vgplot"], + async (db: {_db: AsyncDuckDB}, vgplot: typeof _vgplot) => { + const coordinator = new vgplot.Coordinator(); + const api = vgplot.createAPIContext({coordinator}); + coordinator.databaseConnector(vgplot.wasmConnector({duckdb: db._db})); + return api; + } + ] as const; +} diff --git a/types/esm.d.ts b/types/esm.d.ts index 7e4b42e..12280e9 100644 --- a/types/esm.d.ts +++ b/types/esm.d.ts @@ -1,6 +1,7 @@ declare module "https://esm.sh/@duckdb/duckdb-wasm@1.32.0"; declare module "https://esm.sh/@observablehq/plot"; declare module "https://esm.sh/@uwdata/flechette"; +declare module "https://esm.sh/@uwdata/vgplot?deps=@duckdb/duckdb-wasm@1.32.0"; declare module "https://esm.sh/@viz-js/viz"; declare module "https://esm.sh/apache-arrow@17.0.0"; declare module "https://esm.sh/arquero";