diff --git a/components/FilterDialog.tsx b/components/FilterDialog.tsx index d63b2d6..43e91db 100644 --- a/components/FilterDialog.tsx +++ b/components/FilterDialog.tsx @@ -74,7 +74,13 @@ export default function FilterDialog({ const actualExtract = originalField ? originalField[1] : dateExtract; if (actualExtract) { - query = `SELECT DISTINCT REPLACE(CAST(EXTRACT(${actualExtract} FROM CAST("${actualField}" AS DATE)) AS VARCHAR), '"', '') as value FROM '${table}' WHERE "${actualField}" IS NOT NULL ORDER BY value`; + if (actualExtract === "MONTH") { + query = `SELECT DISTINCT LPAD(CAST(EXTRACT(${actualExtract} FROM CAST("${actualField}" AS DATE)) AS VARCHAR), 2, '0') as value FROM '${table}' WHERE "${actualField}" IS NOT NULL ORDER BY value`; + } else if (actualExtract === "QUARTER") { + query = `SELECT DISTINCT 'Q' || CAST(EXTRACT(${actualExtract} FROM CAST("${actualField}" AS DATE)) AS VARCHAR) as value FROM '${table}' WHERE "${actualField}" IS NOT NULL ORDER BY value`; + } else { + query = `SELECT DISTINCT CAST(EXTRACT(${actualExtract} FROM CAST("${actualField}" AS DATE)) AS VARCHAR) as value FROM '${table}' WHERE "${actualField}" IS NOT NULL ORDER BY value`; + } } else { query = `SELECT DISTINCT REPLACE("${actualField}", '"', '') as value FROM '${table}' WHERE "${actualField}" IS NOT NULL ORDER BY value`; } @@ -130,10 +136,17 @@ export default function FilterDialog({ }; const handleSubmit = () => { - addFilter(table, field, selectedValues, dateExtract); + // Extract the original field name if it's already a date-extracted field + const originalField = field.match(/^(YEAR|MONTH|QUARTER)\((.*?)\)$/); + const actualField = originalField ? originalField[2] : field; + const actualExtract = originalField + ? (originalField[1] as "YEAR" | "MONTH" | "QUARTER") + : dateExtract; + + addFilter(table, actualField, selectedValues, actualExtract); toast({ title: "Filter Applied", - description: `Successfully applied filter for ${field}`, + description: `Successfully applied filter for ${actualField}`, }); }; diff --git a/components/Main.tsx b/components/Main.tsx index a0dfc4c..2c3635b 100644 --- a/components/Main.tsx +++ b/components/Main.tsx @@ -101,11 +101,15 @@ export default function Main() { field: (typeof rows)[0] | (typeof columns)[0] ) => { if (field.dateExtract) { - // Extract the original field name by removing the dateExtract prefix const originalField = field.name .replace(`${field.dateExtract}(`, "") .replace(")", ""); - return `CAST(EXTRACT(${field.dateExtract} FROM CAST("${originalField}" AS DATE)) AS VARCHAR) AS "${field.name}"`; + const extractExpr = `EXTRACT(${field.dateExtract} FROM CAST("${originalField}" AS DATE))`; + return field.dateExtract === "MONTH" + ? `LPAD(CAST(${extractExpr} AS VARCHAR), 2, '0') AS "${field.name}"` + : field.dateExtract === "QUARTER" + ? `CONCAT('Q', CAST(${extractExpr} AS VARCHAR)) AS "${field.name}"` + : `CAST(${extractExpr} AS VARCHAR) AS "${field.name}"`; } return `CAST("${field.name}" AS ${ getTypeForColumn(queryFields, field.table, field.name) === "Utf8" @@ -118,7 +122,6 @@ export default function Main() { field: (typeof rows)[0] | (typeof columns)[0] ) => { if (field.dateExtract) { - // Extract the original field name by removing the dateExtract prefix const originalField = field.name .replace(`${field.dateExtract}(`, "") .replace(")", ""); @@ -158,9 +161,14 @@ export default function Main() { const originalField = filter.field .replace(`${filter.dateExtract}(`, "") .replace(")", ""); - return `CAST(EXTRACT(${ - filter.dateExtract - } FROM CAST("${originalField}" AS DATE)) AS VARCHAR) IN (${filter.values + const extractExpr = `EXTRACT(${filter.dateExtract} FROM CAST("${originalField}" AS DATE))`; + const filterExpr = + filter.dateExtract === "MONTH" + ? `LPAD(CAST(${extractExpr} AS VARCHAR), 2, '0')` + : filter.dateExtract === "QUARTER" + ? `CONCAT('Q', CAST(${extractExpr} AS VARCHAR))` + : `CAST(${extractExpr} AS VARCHAR)`; + return `${filterExpr} IN (${filter.values .map((value) => `'${value}'`) .join(", ")})`; } @@ -185,11 +193,15 @@ export default function Main() { const originalField = field.name .replace(`${field.dateExtract}(`, "") .replace(")", ""); - return `CAST(EXTRACT(${ - field.dateExtract - } FROM CAST(TABLE${files.findIndex( + const tablePrefix = `TABLE${files.findIndex( (file) => file.name === field.table - )}."${originalField}" AS DATE)) AS VARCHAR) AS "${field.name}"`; + )}`; + const extractExpr = `EXTRACT(${field.dateExtract} FROM CAST(${tablePrefix}."${originalField}" AS DATE))`; + return field.dateExtract === "MONTH" + ? `LPAD(CAST(${extractExpr} AS VARCHAR), 2, '0') AS "${field.name}"` + : field.dateExtract === "QUARTER" + ? `CONCAT('Q', CAST(${extractExpr} AS VARCHAR)) AS "${field.name}"` + : `CAST(${extractExpr} AS VARCHAR) AS "${field.name}"`; } return `CAST(TABLE${files.findIndex( (file) => file.name === field.table @@ -292,21 +304,29 @@ export default function Main() { filters.length > 0 ? `WHERE ${filters .map((filter) => { + const tablePrefix = `TABLE${files.findIndex( + (file) => file.name === filter.table + )}`; if (filter.dateExtract) { + // Extract original field name from the date extract expression const originalField = filter.field .replace(`${filter.dateExtract}(`, "") .replace(")", ""); - return `CAST(EXTRACT(${ - filter.dateExtract - } FROM CAST(TABLE${files.findIndex( - (file) => file.name === filter.table - )}."${originalField}" AS DATE)) AS VARCHAR) IN (${filter.values + const extractExpr = `EXTRACT(${filter.dateExtract} FROM CAST(${tablePrefix}."${originalField}" AS DATE))`; + const filterExpr = + filter.dateExtract === "MONTH" + ? `LPAD(CAST(${extractExpr} AS VARCHAR), 2, '0')` + : filter.dateExtract === "QUARTER" + ? `CONCAT('Q', CAST(${extractExpr} AS VARCHAR))` + : `CAST(${extractExpr} AS VARCHAR)`; + return `${filterExpr} IN (${filter.values .map((value) => `'${value}'`) .join(", ")})`; } - return `TABLE${files.findIndex( - (file) => file.name === filter.table - )}."${filter.field}" IN (${filter.values + // For non-date fields, use the original field name + return `${tablePrefix}."${ + filter.field + }" IN (${filter.values .map((value) => `'${value}'`) .join(", ")})`; }) @@ -321,7 +341,7 @@ export default function Main() { }; const rawQuery = generateQuery(); - return rawQuery ? format(rawQuery, { language: "sqlite" }) : null; + return rawQuery ? format(rawQuery, { language: "duckdb" }) : null; })(); const handleRunQuery = async () => { @@ -363,7 +383,7 @@ export default function Main() { try { const excelBytes = pyodide.FS.readFile("/excel_output.xlsx"); - const blob = new Blob([excelBytes], { + const blob = new Blob([Buffer.from(excelBytes)], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", }); const url = URL.createObjectURL(blob); diff --git a/components/pivotfields/PivotFilters.tsx b/components/pivotfields/PivotFilters.tsx index 22031da..738d565 100644 --- a/components/pivotfields/PivotFilters.tsx +++ b/components/pivotfields/PivotFilters.tsx @@ -29,7 +29,11 @@ export default function PivotFilters() {
{filter.field}
- + =21.0.0" @@ -650,10 +666,29 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz", + "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", - "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz", + "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==", "cpu": [ "ia32" ], @@ -670,9 +705,9 @@ } }, "node_modules/@img/sharp-win32-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", - "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz", + "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==", "cpu": [ "x64" ], @@ -754,9 +789,9 @@ } }, "node_modules/@next/env": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.4.tgz", - "integrity": "sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==", + "version": "15.3.2", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.2.tgz", + "integrity": "sha512-xURk++7P7qR9JG1jJtLzPzf0qEvqCN0A/T3DXf8IPMKo9/6FfjxtEffRJIIew/bIL4T3C2jLLqBor8B/zVlx6g==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { @@ -770,9 +805,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.4.tgz", - "integrity": "sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==", + "version": "15.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.2.tgz", + "integrity": "sha512-2DR6kY/OGcokbnCsjHpNeQblqCZ85/1j6njYSkzRdpLn5At7OkSdmk7WyAmB9G0k25+VgqVZ/u356OSoQZ3z0g==", "cpu": [ "arm64" ], @@ -786,9 +821,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.4.tgz", - "integrity": "sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==", + "version": "15.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.2.tgz", + "integrity": "sha512-ro/fdqaZWL6k1S/5CLv1I0DaZfDVJkWNaUU3un8Lg6m0YENWlDulmIWzV96Iou2wEYyEsZq51mwV8+XQXqMp3w==", "cpu": [ "x64" ], @@ -802,9 +837,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.4.tgz", - "integrity": "sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==", + "version": "15.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.2.tgz", + "integrity": "sha512-covwwtZYhlbRWK2HlYX9835qXum4xYZ3E2Mra1mdQ+0ICGoMiw1+nVAn4d9Bo7R3JqSmK1grMq/va+0cdh7bJA==", "cpu": [ "arm64" ], @@ -818,9 +853,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.4.tgz", - "integrity": "sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==", + "version": "15.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.2.tgz", + "integrity": "sha512-KQkMEillvlW5Qk5mtGA/3Yz0/tzpNlSw6/3/ttsV1lNtMuOHcGii3zVeXZyi4EJmmLDKYcTcByV2wVsOhDt/zg==", "cpu": [ "arm64" ], @@ -834,9 +869,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.4.tgz", - "integrity": "sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==", + "version": "15.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.2.tgz", + "integrity": "sha512-uRBo6THWei0chz+Y5j37qzx+BtoDRFIkDzZjlpCItBRXyMPIg079eIkOCl3aqr2tkxL4HFyJ4GHDes7W8HuAUg==", "cpu": [ "x64" ], @@ -850,9 +885,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.4.tgz", - "integrity": "sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==", + "version": "15.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.2.tgz", + "integrity": "sha512-+uxFlPuCNx/T9PdMClOqeE8USKzj8tVz37KflT3Kdbx/LOlZBRI2yxuIcmx1mPNK8DwSOMNCr4ureSet7eyC0w==", "cpu": [ "x64" ], @@ -866,9 +901,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.4.tgz", - "integrity": "sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==", + "version": "15.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.2.tgz", + "integrity": "sha512-LLTKmaI5cfD8dVzh5Vt7+OMo+AIOClEdIU/TSKbXXT2iScUTSxOGoBhfuv+FU8R9MLmrkIL1e2fBMkEEjYAtPQ==", "cpu": [ "arm64" ], @@ -882,9 +917,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.4.tgz", - "integrity": "sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==", + "version": "15.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.2.tgz", + "integrity": "sha512-aW5B8wOPioJ4mBdMDXkt5f3j8pUr9W8AnlX0Df35uRWNT1Y6RIybxjnSUe+PhM+M1bwgyY8PHLmXZC6zT1o5tA==", "cpu": [ "x64" ], @@ -3137,9 +3172,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", "license": "Apache-2.0", "optional": true, "engines": { @@ -3184,9 +3219,9 @@ } }, "node_modules/duckdb-wasm-kit": { - "version": "0.1.38", - "resolved": "https://registry.npmjs.org/duckdb-wasm-kit/-/duckdb-wasm-kit-0.1.38.tgz", - "integrity": "sha512-g2gzqEoQp3Oh/cwlMKA3JqaxMkw9uLV2CBAAp0ixv/U/UxPAAMFWWbE/7ShAxzieb7d7qlcMm0gSfzbKGO3aMw==", + "version": "0.1.39", + "resolved": "https://registry.npmjs.org/duckdb-wasm-kit/-/duckdb-wasm-kit-0.1.39.tgz", + "integrity": "sha512-NeMNKVV642Vc1BszC795p7sIyuD6ntkdjXHh21cgW+wnT9G6qWjv+KjMu0uMz/Y8oXv6q/I8T4JYnZ8wanbFzQ==", "license": "MIT", "dependencies": { "react-async-hook": "^4.0.0" @@ -3194,7 +3229,7 @@ "peerDependencies": { "@duckdb/duckdb-wasm": "*", "apache-arrow": ">=15.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": ">=16.8" } }, "node_modules/dunder-proto": { @@ -4124,18 +4159,6 @@ "node": ">=6" } }, - "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/get-symbol-description": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", @@ -5232,12 +5255,12 @@ "license": "MIT" }, "node_modules/next": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/next/-/next-15.2.4.tgz", - "integrity": "sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==", + "version": "15.3.2", + "resolved": "https://registry.npmjs.org/next/-/next-15.3.2.tgz", + "integrity": "sha512-CA3BatMyHkxZ48sgOCLdVHjFU36N7TF1HhqAHLFOkV6buwZnvMI84Cug8xD56B9mCuKrqXnLn94417GrZ/jjCQ==", "license": "MIT", "dependencies": { - "@next/env": "15.2.4", + "@next/env": "15.3.2", "@swc/counter": "0.1.3", "@swc/helpers": "0.5.15", "busboy": "1.6.0", @@ -5252,15 +5275,15 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.2.4", - "@next/swc-darwin-x64": "15.2.4", - "@next/swc-linux-arm64-gnu": "15.2.4", - "@next/swc-linux-arm64-musl": "15.2.4", - "@next/swc-linux-x64-gnu": "15.2.4", - "@next/swc-linux-x64-musl": "15.2.4", - "@next/swc-win32-arm64-msvc": "15.2.4", - "@next/swc-win32-x64-msvc": "15.2.4", - "sharp": "^0.33.5" + "@next/swc-darwin-arm64": "15.3.2", + "@next/swc-darwin-x64": "15.3.2", + "@next/swc-linux-arm64-gnu": "15.3.2", + "@next/swc-linux-arm64-musl": "15.3.2", + "@next/swc-linux-x64-gnu": "15.3.2", + "@next/swc-linux-x64-musl": "15.3.2", + "@next/swc-win32-arm64-msvc": "15.3.2", + "@next/swc-win32-x64-msvc": "15.3.2", + "sharp": "^0.34.1" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -5781,9 +5804,9 @@ } }, "node_modules/pyodide": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/pyodide/-/pyodide-0.27.4.tgz", - "integrity": "sha512-2y3ySHCBmyzYDUlB939SaU3n7RxYQxwnGHgdakW/CPrNFX2L9fC+4nfJWQJH8a0ruQa8bBZSKCImMt/cq15RiQ==", + "version": "0.27.6", + "resolved": "https://registry.npmjs.org/pyodide/-/pyodide-0.27.6.tgz", + "integrity": "sha512-ahiSHHs6iFKl2f8aO1wALINAlMNDLAtb44xCI87GQyH2tLDk8F8VWip3u1ZNIyglGSCYAOSFzWKwS1f9gBFVdg==", "license": "Apache-2.0", "dependencies": { "ws": "^8.5.0" @@ -6134,9 +6157,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "devOptional": true, "license": "ISC", "bin": { @@ -6181,16 +6204,16 @@ } }, "node_modules/sharp": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", - "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.2.tgz", + "integrity": "sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==", "hasInstallScript": true, "license": "Apache-2.0", "optional": true, "dependencies": { "color": "^4.2.3", - "detect-libc": "^2.0.3", - "semver": "^7.6.3" + "detect-libc": "^2.0.4", + "semver": "^7.7.2" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -6199,25 +6222,27 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.33.5", - "@img/sharp-darwin-x64": "0.33.5", - "@img/sharp-libvips-darwin-arm64": "1.0.4", - "@img/sharp-libvips-darwin-x64": "1.0.4", - "@img/sharp-libvips-linux-arm": "1.0.5", - "@img/sharp-libvips-linux-arm64": "1.0.4", - "@img/sharp-libvips-linux-s390x": "1.0.4", - "@img/sharp-libvips-linux-x64": "1.0.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", - "@img/sharp-libvips-linuxmusl-x64": "1.0.4", - "@img/sharp-linux-arm": "0.33.5", - "@img/sharp-linux-arm64": "0.33.5", - "@img/sharp-linux-s390x": "0.33.5", - "@img/sharp-linux-x64": "0.33.5", - "@img/sharp-linuxmusl-arm64": "0.33.5", - "@img/sharp-linuxmusl-x64": "0.33.5", - "@img/sharp-wasm32": "0.33.5", - "@img/sharp-win32-ia32": "0.33.5", - "@img/sharp-win32-x64": "0.33.5" + "@img/sharp-darwin-arm64": "0.34.2", + "@img/sharp-darwin-x64": "0.34.2", + "@img/sharp-libvips-darwin-arm64": "1.1.0", + "@img/sharp-libvips-darwin-x64": "1.1.0", + "@img/sharp-libvips-linux-arm": "1.1.0", + "@img/sharp-libvips-linux-arm64": "1.1.0", + "@img/sharp-libvips-linux-ppc64": "1.1.0", + "@img/sharp-libvips-linux-s390x": "1.1.0", + "@img/sharp-libvips-linux-x64": "1.1.0", + "@img/sharp-libvips-linuxmusl-arm64": "1.1.0", + "@img/sharp-libvips-linuxmusl-x64": "1.1.0", + "@img/sharp-linux-arm": "0.34.2", + "@img/sharp-linux-arm64": "0.34.2", + "@img/sharp-linux-s390x": "0.34.2", + "@img/sharp-linux-x64": "0.34.2", + "@img/sharp-linuxmusl-arm64": "0.34.2", + "@img/sharp-linuxmusl-x64": "0.34.2", + "@img/sharp-wasm32": "0.34.2", + "@img/sharp-win32-arm64": "0.34.2", + "@img/sharp-win32-ia32": "0.34.2", + "@img/sharp-win32-x64": "0.34.2" } }, "node_modules/shebang-command": { @@ -6349,13 +6374,12 @@ } }, "node_modules/sql-formatter": { - "version": "15.4.10", - "resolved": "https://registry.npmjs.org/sql-formatter/-/sql-formatter-15.4.10.tgz", - "integrity": "sha512-zQfiuxU1F/C7TNu+880BdL+fuvJTd1Kj8R0wv48dfZ27NR3z1PWvQFkH8ai/HrIy+NyvXCaZBkJHp/EeZFXSOA==", + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/sql-formatter/-/sql-formatter-15.6.2.tgz", + "integrity": "sha512-ZjqOfJGuB97UeHzTJoTbadlM0h9ynehtSTHNUbGfXR4HZ4rCIoD2oIW91W+A5oE76k8hl0Uz5GD8Sx3Pt9Xa3w==", "license": "MIT", "dependencies": { "argparse": "^2.0.1", - "get-stdin": "=8.0.0", "nearley": "^2.20.1" }, "bin": { @@ -7313,9 +7337,9 @@ } }, "node_modules/zustand": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.2.tgz", - "integrity": "sha512-8qNdnJVJlHlrKXi50LDqqUNmUbuBjoKLrYQBnoChIbVph7vni+sY+YpvdjXG9YLd/Bxr6scMcR+rm5H3aSqPaw==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.5.tgz", + "integrity": "sha512-mILtRfKW9xM47hqxGIxCv12gXusoY/xTSHBYApXozR0HmQv299whhBeeAcRy+KrPPybzosvJBCOmVjq6x12fCg==", "license": "MIT", "engines": { "node": ">=12.20.0" diff --git a/package.json b/package.json index ce9d113..333df95 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "lint": "next lint" }, "dependencies": { - "@duckdb/duckdb-wasm": "^1.29.0", + "@duckdb/duckdb-wasm": "^1.29.1-dev132.0", "@radix-ui/react-accordion": "^1.2.2", "@radix-ui/react-checkbox": "^1.1.3", "@radix-ui/react-collapsible": "^1.1.3", @@ -22,17 +22,17 @@ "apache-arrow": "^18.1.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "duckdb-wasm-kit": "^0.1.38", + "duckdb-wasm-kit": "^0.1.39", "lucide-react": "^0.468.0", - "next": "^15.2.4", - "pyodide": "^0.27.4", + "next": "^15.3.2", + "pyodide": "^0.27.6", "react": "^19.1.0", "react-dom": "^19.1.0", "react-icons": "^5.5.0", - "sql-formatter": "^15.4.10", + "sql-formatter": "^15.6.2", "tailwind-merge": "^2.5.5", "tailwindcss-animate": "^1.0.7", - "zustand": "^5.0.2" + "zustand": "^5.0.5" }, "devDependencies": { "@eslint/eslintrc": "^3",