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",