From 0c38cdabd950bb121898cde6a50020bd8fd1bdd2 Mon Sep 17 00:00:00 2001 From: ArnabChatterjee20k Date: Wed, 1 Apr 2026 09:48:17 +0530 Subject: [PATCH 1/9] feat: add bigint column type support and update dependencies --- package.json | 2 +- pnpm-lock.yaml | 41 ++----- src/lib/helpers/types.ts | 1 + .../table-[table]/columns/+page.svelte | 2 +- .../table-[table]/columns/bigint.svelte | 115 ++++++++++++++++++ .../table-[table]/columns/store.ts | 12 ++ .../rows/columns/types/string.svelte | 4 + .../table-[table]/spreadsheet.svelte | 1 + 8 files changed, 146 insertions(+), 32 deletions(-) create mode 100644 src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte diff --git a/package.json b/package.json index 588c697938..00d7fcb007 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ }, "dependencies": { "@ai-sdk/svelte": "^1.1.24", - "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@d223f36", + "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@863d3e9", "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@bfe7ce3", "@appwrite.io/pink-legacy": "^1.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 12bb24e686..2c7e9ddf21 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: ^1.1.24 version: 1.1.24(svelte@5.55.0)(zod@3.25.76) '@appwrite.io/console': - specifier: https://pkg.vc/-/@appwrite/@appwrite.io/console@83fd10c - version: https://pkg.vc/-/@appwrite/@appwrite.io/console@83fd10c + specifier: https://pkg.vc/-/@appwrite/@appwrite.io/console@863d3e9 + version: https://pkg.vc/-/@appwrite/@appwrite.io/console@863d3e9 '@appwrite.io/pink-icons': specifier: 0.25.0 version: 0.25.0 @@ -75,8 +75,8 @@ importers: specifier: ^5.1.7 version: 5.1.7 nanotar: - specifier: ^0.1.1 - version: 0.1.1 + specifier: ^0.3.0 + version: 0.3.0 pretty-bytes: specifier: ^6.1.1 version: 6.1.1 @@ -281,9 +281,9 @@ packages: '@analytics/type-utils@0.6.4': resolution: {integrity: sha512-Ou1gQxFakOWLcPnbFVsrPb8g1wLLUZYYJXDPjHkG07+5mustGs5yqACx42UAu4A6NszNN6Z5gGxhyH45zPWRxw==} - '@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@83fd10c': - resolution: {integrity: sha512-Mlq0dfJrcqUNFt+QUmrieHrJSScOUniigt1PL5Xum7QEDgT8Z/mMhG/xUcVfZqXtlF5gS4Sq7n72EB6P/3+kmQ==, tarball: https://pkg.vc/-/@appwrite/@appwrite.io/console@83fd10c} - version: 7.0.0 + '@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@863d3e9': + resolution: {integrity: sha512-BJ9wrAI8frqAp9fN89RtJGn0r+RplWJ669s8AoW4JstYsnSe+ewhjBlLZWpFmIMfepz5agCE6G+4g7LXOfqdYg==, tarball: https://pkg.vc/-/@appwrite/@appwrite.io/console@863d3e9} + version: 8.0.0 '@appwrite.io/pink-icons-svelte@2.0.0-RC.1': resolution: {integrity: sha512-iLFlV55hj8mGuAbmxJGenxN5RaZMmVT4GJb9dv/MP1xBAtYibFq7JvBcxm18qV2KU8c31Rntf+Ub4GL7HwqTYg==} @@ -935,42 +935,36 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.6': resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.6': resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.6': resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.6': resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.6': resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - libc: [musl] '@parcel/watcher-win32-arm64@2.5.6': resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} @@ -1045,79 +1039,66 @@ packages: resolution: {integrity: sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g==} cpu: [arm] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.60.0': resolution: {integrity: sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ==} cpu: [arm] os: [linux] - libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.60.0': resolution: {integrity: sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A==} cpu: [arm64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.60.0': resolution: {integrity: sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ==} cpu: [arm64] os: [linux] - libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.60.0': resolution: {integrity: sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw==} cpu: [loong64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.60.0': resolution: {integrity: sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog==} cpu: [loong64] os: [linux] - libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.60.0': resolution: {integrity: sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ==} cpu: [ppc64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.60.0': resolution: {integrity: sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg==} cpu: [ppc64] os: [linux] - libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.60.0': resolution: {integrity: sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA==} cpu: [riscv64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.60.0': resolution: {integrity: sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ==} cpu: [riscv64] os: [linux] - libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.60.0': resolution: {integrity: sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ==} cpu: [s390x] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.60.0': resolution: {integrity: sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==} cpu: [x64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-musl@4.60.0': resolution: {integrity: sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw==} cpu: [x64] os: [linux] - libc: [musl] '@rollup/rollup-openbsd-x64@4.60.0': resolution: {integrity: sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw==} @@ -2675,8 +2656,8 @@ packages: engines: {node: ^18 || >=20} hasBin: true - nanotar@0.1.1: - resolution: {integrity: sha512-AiJsGsSF3O0havL1BydvI4+wR76sKT+okKRwWIaK96cZUnXqH0uNBOsHlbwZq3+m2BR1VKqHDVudl3gO4mYjpQ==} + nanotar@0.3.0: + resolution: {integrity: sha512-Kv2JYYiCzt16Kt5QwAc9BFG89xfPNBx+oQL4GQXD9nLqPkZBiNaqaCWtwnbk/q7UVsTYevvM1b0UF8zmEI4pCg==} natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -3631,7 +3612,7 @@ snapshots: '@analytics/type-utils@0.6.4': {} - '@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@83fd10c': + '@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@863d3e9': dependencies: json-bigint: 1.0.0 @@ -6160,7 +6141,7 @@ snapshots: nanoid@5.1.7: {} - nanotar@0.1.1: {} + nanotar@0.3.0: {} natural-compare@1.4.0: {} diff --git a/src/lib/helpers/types.ts b/src/lib/helpers/types.ts index 07dcd7c85b..544b1ca39a 100644 --- a/src/lib/helpers/types.ts +++ b/src/lib/helpers/types.ts @@ -34,6 +34,7 @@ const columnTypes = [ 'text', 'mediumtext', 'longtext', + 'bigint', 'integer', 'double', 'boolean', diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/+page.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/+page.svelte index 5b4075bc8a..743e320164 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/+page.svelte @@ -198,7 +198,7 @@ ) { const stringColumn = column as Models.ColumnString; return { display: `Size: ${stringColumn.size}` }; - } else if (column.type === 'integer' || column.type === 'double') { + } else if (column.type === 'bigint' || column.type === 'integer' || column.type === 'double') { const numbersColumn = column as Models.ColumnInteger | Models.ColumnFloat; const { min, max } = numbersColumn; diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte new file mode 100644 index 0000000000..c6b26dc614 --- /dev/null +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte @@ -0,0 +1,115 @@ + + + + + + + + + + + + + diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/store.ts b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/store.ts index dc8ee80f86..f648661435 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/store.ts +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/store.ts @@ -4,6 +4,7 @@ import Boolean, { submitBoolean, updateBoolean } from './boolean.svelte'; import Email, { submitEmail, updateEmail } from './email.svelte'; import Enum, { submitEnum, updateEnum } from './enum.svelte'; import Float, { submitFloat, updateFloat } from './float.svelte'; +import BigInt, { submitBigInt, updateBigInt } from './bigint.svelte'; import Integer, { submitInteger, updateInteger } from './integer.svelte'; import Ip, { submitIp, updateIp } from './ip.svelte'; import String, { submitString, updateString } from './string.svelte'; @@ -41,6 +42,7 @@ export type Option = { | 'Mediumtext' | 'Longtext' | 'Varchar' + | 'BigInt' | 'Integer' | 'Float' | 'Boolean' @@ -62,6 +64,7 @@ export type Option = { | 'mediumtext' | 'longtext' | 'varchar' + | 'bigint' | 'integer' | 'double' | 'boolean' @@ -125,6 +128,15 @@ export const columnOptions: Option[] = [ update: updateVarchar, icon: IconText }, + { + name: 'BigInt', + sentenceName: 'bigint', + component: BigInt, + type: 'bigint', + create: submitBigInt, + update: updateBigInt, + icon: IconHashtag + }, { name: 'Integer', sentenceName: 'integer', diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/string.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/string.svelte index fbfa549ae9..ceaee2a963 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/string.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/string.svelte @@ -24,6 +24,7 @@ | Models.ColumnText | Models.ColumnMediumtext | Models.ColumnLongtext + | Models.ColumnBigint | Models.ColumnInteger | Models.ColumnFloat | Models.ColumnBoolean @@ -51,6 +52,7 @@ if (!trimmed) return null; switch (column.type) { + case 'bigint': case 'integer': { const int = parseInt(trimmed, 10); return isNaN(int) ? null : int; @@ -122,6 +124,7 @@ const getPlaceholder = () => { if (!array) { switch (column.type) { + case 'bigint': case 'integer': return 'Enter integer'; case 'double': @@ -134,6 +137,7 @@ } } else { switch (column.type) { + case 'bigint': case 'integer': return 'Enter integers separated by commas'; case 'double': diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/spreadsheet.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/spreadsheet.svelte index e5c5c76d33..7fee9b9fbf 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/spreadsheet.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/spreadsheet.svelte @@ -332,6 +332,7 @@ switch (type) { case 'string': return IconText; + case 'bigint': case 'double': case 'integer': return IconHashtag; From 272f2e9332305b7b7a66fd613264b527d35847eb Mon Sep 17 00:00:00 2001 From: ArnabChatterjee20k Date: Wed, 1 Apr 2026 11:08:06 +0530 Subject: [PATCH 2/9] feat: enhance bigint column support and improve input handling - Updated bigint column type handling in the database table columns. - Refactored input components to use InputText for bigint values with validation. - Improved parsing and error handling for bigint inputs in string representation. - Adjusted type definitions to include bigint in various contexts. --- .../table-[table]/columns/+page.svelte | 11 +- .../table-[table]/columns/bigint.svelte | 150 +++++++++++++----- .../rows/columns/types/string.svelte | 35 +++- 3 files changed, 148 insertions(+), 48 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/+page.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/+page.svelte index 743e320164..feb0a4dff0 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/+page.svelte @@ -198,8 +198,15 @@ ) { const stringColumn = column as Models.ColumnString; return { display: `Size: ${stringColumn.size}` }; - } else if (column.type === 'bigint' || column.type === 'integer' || column.type === 'double') { - const numbersColumn = column as Models.ColumnInteger | Models.ColumnFloat; + } else if ( + column.type === 'bigint' || + column.type === 'integer' || + column.type === 'double' + ) { + const numbersColumn = column as + | Models.ColumnBigint + | Models.ColumnInteger + | Models.ColumnFloat; const { min, max } = numbersColumn; const isMinBigInt = typeof min === 'bigint'; diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte index c6b26dc614..885cd56332 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte @@ -1,4 +1,4 @@ - - - - diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/string.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/string.svelte index ceaee2a963..80629f6d95 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/string.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/string.svelte @@ -15,7 +15,16 @@ }: { id: string; label: string; - value: string | number | boolean | string[] | number[] | boolean[] | null; + value: + | string + | number + | bigint + | boolean + | string[] + | number[] + | bigint[] + | boolean[] + | null; array?: boolean; limited?: boolean; column: @@ -47,12 +56,26 @@ let stringValue = $state(''); - function parseValue(str: string | null): number | boolean | string | null { + function safeStringify(v: unknown): string { + // Note: `JSON.stringify` throws on `bigint` values unless a replacer is used. + return JSON.stringify(v, (_key, value) => + typeof value === 'bigint' ? value.toString() : value + ); + } + + function parseValue(str: string | null): number | bigint | boolean | string | null { const trimmed = str?.trim() ?? null; if (!trimmed) return null; switch (column.type) { - case 'bigint': + case 'bigint': { + try { + return BigInt(trimmed); + } catch { + return null; + } + } + case 'integer': { const int = parseInt(trimmed, 10); return isNaN(int) ? null : int; @@ -97,8 +120,8 @@ .split(',') .map((item) => parseValue(item)) .filter((item) => item !== null); - if (JSON.stringify(newArray) !== JSON.stringify(value)) { - value = newArray as string[] | number[] | boolean[]; + if (safeStringify(newArray) !== safeStringify(value)) { + value = newArray as string[] | number[] | bigint[] | boolean[]; } } else { let parsedValue = parseValue(stringValue); @@ -115,7 +138,7 @@ } } - if (JSON.stringify(parsedValue) !== JSON.stringify(value)) { + if (safeStringify(parsedValue) !== safeStringify(value)) { value = parsedValue; } } From 528c6575fa112fb3af57881e8168dc95568c3bb4 Mon Sep 17 00:00:00 2001 From: ArnabChatterjee20k Date: Wed, 1 Apr 2026 11:34:21 +0530 Subject: [PATCH 3/9] feat: extend bigint support in database table components - Added bigint type to the Columns type definition. - Updated bigint input handling in the bigint.svelte component, replacing InputText with InputNumber for better user experience. - Enhanced data binding and validation for bigint values, including min, max, and default settings. - Adjusted column value handling in various components to accommodate bigint type. --- .../table-[table]/columns/bigint.svelte | 134 +++++------------- .../table-[table]/rows/columns/column.svelte | 4 +- .../rows/columns/types/string.svelte | 35 +---- .../table-[table]/store.ts | 1 + 4 files changed, 48 insertions(+), 126 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte index 885cd56332..2fef4ad447 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte @@ -42,7 +42,8 @@ - - - diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/column.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/column.svelte index 9be533a7c1..72960b7ce2 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/column.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/column.svelte @@ -16,7 +16,7 @@ export let label: string; export let array: boolean | undefined = undefined; export let optionalText: string | undefined = undefined; - export let value: string | number | boolean | null | string[]; + export let value: string | number | bigint | boolean | null | string[] | number[] | bigint[] | boolean[]; export let editing = false; export let limited = false; export let column: @@ -24,6 +24,7 @@ | Models.ColumnEmail | Models.ColumnEnum | Models.ColumnFloat + | Models.ColumnBigint | Models.ColumnInteger | Models.ColumnIp | Models.ColumnString @@ -43,6 +44,7 @@ text: String, mediumtext: String, longtext: String, + bigint: Integer, integer: Integer, double: Integer, boolean: Boolean, diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/string.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/string.svelte index 80629f6d95..ceaee2a963 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/string.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/string.svelte @@ -15,16 +15,7 @@ }: { id: string; label: string; - value: - | string - | number - | bigint - | boolean - | string[] - | number[] - | bigint[] - | boolean[] - | null; + value: string | number | boolean | string[] | number[] | boolean[] | null; array?: boolean; limited?: boolean; column: @@ -56,26 +47,12 @@ let stringValue = $state(''); - function safeStringify(v: unknown): string { - // Note: `JSON.stringify` throws on `bigint` values unless a replacer is used. - return JSON.stringify(v, (_key, value) => - typeof value === 'bigint' ? value.toString() : value - ); - } - - function parseValue(str: string | null): number | bigint | boolean | string | null { + function parseValue(str: string | null): number | boolean | string | null { const trimmed = str?.trim() ?? null; if (!trimmed) return null; switch (column.type) { - case 'bigint': { - try { - return BigInt(trimmed); - } catch { - return null; - } - } - + case 'bigint': case 'integer': { const int = parseInt(trimmed, 10); return isNaN(int) ? null : int; @@ -120,8 +97,8 @@ .split(',') .map((item) => parseValue(item)) .filter((item) => item !== null); - if (safeStringify(newArray) !== safeStringify(value)) { - value = newArray as string[] | number[] | bigint[] | boolean[]; + if (JSON.stringify(newArray) !== JSON.stringify(value)) { + value = newArray as string[] | number[] | boolean[]; } } else { let parsedValue = parseValue(stringValue); @@ -138,7 +115,7 @@ } } - if (safeStringify(parsedValue) !== safeStringify(value)) { + if (JSON.stringify(parsedValue) !== JSON.stringify(value)) { value = parsedValue; } } diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/store.ts b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/store.ts index 9d701180e7..1307bab88d 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/store.ts +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/store.ts @@ -11,6 +11,7 @@ export type Columns = | Models.ColumnEmail | Models.ColumnEnum | Models.ColumnFloat + | Models.ColumnBigint | Models.ColumnInteger | Models.ColumnIp | Models.ColumnString From 501fdbbe27572ae22b50189d733c93ab9c97359e Mon Sep 17 00:00:00 2001 From: ArnabChatterjee20k Date: Wed, 1 Apr 2026 17:44:52 +0530 Subject: [PATCH 4/9] updated bun lock --- bun.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bun.lock b/bun.lock index dd34a80e7d..7459e14338 100644 --- a/bun.lock +++ b/bun.lock @@ -6,7 +6,7 @@ "name": "@appwrite/console", "dependencies": { "@ai-sdk/svelte": "^1.1.24", - "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@d223f36", + "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@863d3e9", "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@bfe7ce3", "@appwrite.io/pink-legacy": "^1.0.3", @@ -113,15 +113,15 @@ "@analytics/type-utils": ["@analytics/type-utils@0.6.4", "", {}, "sha512-Ou1gQxFakOWLcPnbFVsrPb8g1wLLUZYYJXDPjHkG07+5mustGs5yqACx42UAu4A6NszNN6Z5gGxhyH45zPWRxw=="], - "@appwrite.io/console": ["@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@d223f36", { "dependencies": { "json-bigint": "1.0.0" } }], + "@appwrite.io/console": ["@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@863d3e9", { "dependencies": { "json-bigint": "1.0.0" } }, "sha512-BJ9wrAI8frqAp9fN89RtJGn0r+RplWJ669s8AoW4JstYsnSe+ewhjBlLZWpFmIMfepz5agCE6G+4g7LXOfqdYg=="], "@appwrite.io/pink-icons": ["@appwrite.io/pink-icons@0.25.0", "", {}, "sha512-0O3i2oEuh5mWvjO80i+X6rbzrWLJ1m5wmv2/M3a1p2PyBJsFxN8xQMTEmTn3Wl/D26SsM7SpzbdW6gmfgoVU9Q=="], - "@appwrite.io/pink-icons-svelte": ["@appwrite.io/pink-icons-svelte@https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@bfe7ce3", { "peerDependencies": { "svelte": "^4.0.0" } }], + "@appwrite.io/pink-icons-svelte": ["@appwrite.io/pink-icons-svelte@https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@bfe7ce3", { "peerDependencies": { "svelte": "^4.0.0" } }, "sha512-2HYl/CC2OlfZIR7LzbLXuSPBn0iNkjbnxpaeGCkZ7UNZ/hFeSeeWjDJqTBMdZ8+X95uuZqHx62XPTiE/svuSXQ=="], "@appwrite.io/pink-legacy": ["@appwrite.io/pink-legacy@1.0.3", "", { "dependencies": { "@appwrite.io/pink-icons": "1.0.0", "the-new-css-reset": "^1.11.2" } }, "sha512-GGde5fmPhs+s6/3aFeMPc/kKADG/gTFkYQSy6oBN8pK0y0XNCLrZZgBv+EBbdhwdtqVEWXa0X85Mv9w7jcIlwQ=="], - "@appwrite.io/pink-svelte": ["@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@bfe7ce3", { "dependencies": { "@appwrite.io/pink-icons-svelte": "2.0.0-RC.1", "@floating-ui/dom": "^1.6.13", "@melt-ui/pp": "^0.3.2", "@melt-ui/svelte": "^0.86.6", "@tanstack/svelte-virtual": "^3.13.10", "ansicolor": "^2.0.3", "d3": "^7.9.0", "fuse.js": "^7.1.0", "pretty-bytes": "^6.1.1", "shiki": "^1.18.0", "svelte-motion": "^0.12.2", "svelte-sonner": "^0.3.28" }, "peerDependencies": { "svelte": "^4.0.0" } }], + "@appwrite.io/pink-svelte": ["@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@bfe7ce3", { "dependencies": { "@appwrite.io/pink-icons-svelte": "2.0.0-RC.1", "@floating-ui/dom": "^1.6.13", "@melt-ui/pp": "^0.3.2", "@melt-ui/svelte": "^0.86.6", "@tanstack/svelte-virtual": "^3.13.10", "ansicolor": "^2.0.3", "d3": "^7.9.0", "fuse.js": "^7.1.0", "pretty-bytes": "^6.1.1", "shiki": "^1.18.0", "svelte-motion": "^0.12.2", "svelte-sonner": "^0.3.28" }, "peerDependencies": { "svelte": "^4.0.0" } }, "sha512-kOC6T1uhmggl02Wmu++WUBpVh1SqzwlRDpR4xw79Sl8Cy1RJju55IkeVl6doKcNYQyPl6kJItgxFwF1MhkB1DQ=="], "@asamuzakjp/css-color": ["@asamuzakjp/css-color@3.2.0", "", { "dependencies": { "@csstools/css-calc": "^2.1.3", "@csstools/css-color-parser": "^3.0.9", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "lru-cache": "^10.4.3" } }, "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw=="], From a6eb30db476d957a7e4737a5eb40676d93e998ac Mon Sep 17 00:00:00 2001 From: ArnabChatterjee20k Date: Wed, 1 Apr 2026 17:58:58 +0530 Subject: [PATCH 5/9] linting --- .../table-[table]/rows/columns/column.svelte | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/column.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/column.svelte index 72960b7ce2..37947fefe3 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/column.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/column.svelte @@ -16,7 +16,16 @@ export let label: string; export let array: boolean | undefined = undefined; export let optionalText: string | undefined = undefined; - export let value: string | number | bigint | boolean | null | string[] | number[] | bigint[] | boolean[]; + export let value: + | string + | number + | bigint + | boolean + | null + | string[] + | number[] + | bigint[] + | boolean[]; export let editing = false; export let limited = false; export let column: From f484ce860236c699f6b4e1a8bbe51f6f2d6fded7 Mon Sep 17 00:00:00 2001 From: ArnabChatterjee20k Date: Thu, 9 Apr 2026 14:50:15 +0530 Subject: [PATCH 6/9] feat: implement bigint support across various components and enhance payload handling --- src/lib/helpers/faker.ts | 4 ++ .../table-[table]/+layout.svelte | 6 +-- .../table-[table]/columns/bigint.svelte | 10 ++++- .../table-[table]/rows/create.svelte | 6 +-- .../table-[table]/rows/edit.svelte | 7 +++- .../table-[table]/rows/editRelated.svelte | 19 +++++++-- .../table-[table]/rows/store.ts | 41 +++++++++++++++++++ .../table-[table]/spreadsheet.svelte | 5 ++- 8 files changed, 84 insertions(+), 14 deletions(-) diff --git a/src/lib/helpers/faker.ts b/src/lib/helpers/faker.ts index cd937ac808..f05b11dc64 100644 --- a/src/lib/helpers/faker.ts +++ b/src/lib/helpers/faker.ts @@ -243,6 +243,10 @@ function generateSingleValue(field: Field): string | number | boolean | NestedNu return faker.number.int({ min, max }); } + case 'bigint': { + return faker.number.bigInt().toString(); + } + case 'double': { const floatAttr = field as Models.ColumnFloat; const min = isWithinSafeRange(floatAttr.min) ? floatAttr.min : 0; diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+layout.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+layout.svelte index cd99973a92..585ef8634b 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+layout.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+layout.svelte @@ -64,7 +64,7 @@ import { addNotification } from '$lib/stores/notifications'; import { hash } from '$lib/helpers/string'; import { preferences } from '$lib/stores/preferences'; - import { buildRowUrl, isRelationship } from './rows/store'; + import { buildRowUrl, isRelationship, buildPayload } from './rows/store'; import { chunks } from '$lib/helpers/array'; import { Submit, trackEvent } from '$lib/actions/analytics'; @@ -346,7 +346,7 @@ databaseId: page.params.database, tableId: page.params.table, rowId: row.$id, - data: row + data: buildPayload(columns, row as Record) }) ) ); @@ -358,7 +358,7 @@ await tablesSDK.createRows({ databaseId: page.params.database, tableId: page.params.table, - rows + rows: rows.map((row) => buildPayload(columns, row as Record)) }); } diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte index 2fef4ad447..f59b947229 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte @@ -2,6 +2,12 @@ import { page } from '$app/state'; import { sdk } from '$lib/stores/sdk'; import type { Models } from '@appwrite.io/console'; + + function normalizeBigInt(value) { + if (value === undefined) return undefined; + if (value === null) return null; + return BigInt(value); + } export async function submitBigInt( databaseId: string, @@ -16,7 +22,7 @@ required: data.required, min: data.min, max: data.max, - xdefault: data.default, + xdefault: normalizeBigInt(data.default), array: data.array }); } @@ -32,7 +38,7 @@ tableId, key: originalKey, required: data.required, - xdefault: data.default, + xdefault: normalizeBigInt(data.default), min: data.min, max: data.max, newKey: data.key !== originalKey ? data.key : undefined diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/create.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/create.svelte index 62eb13dd6f..40ed21595b 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/create.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/create.svelte @@ -14,7 +14,7 @@ import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; import { tick } from 'svelte'; - import { isRelationship, isRelationshipToMany } from './store'; + import { isRelationship, isRelationshipToMany, buildPayload } from './store'; import { hash } from '$lib/helpers/string'; type CreateRow = { @@ -70,7 +70,7 @@ function prepareRowPayload(createRowObject: CreateRow): object { const { row, columns } = createRowObject; - const payload = structuredClone(row); + const payload = structuredClone(row) as Record; for (const column of columns) { if (isRelationship(column) && !isRelationshipToMany(column)) { @@ -87,7 +87,7 @@ } } - return payload; + return buildPayload(columns, payload); } async function create(): Promise { diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/edit.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/edit.svelte index 418b8a6c14..a440ba96f4 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/edit.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/edit.svelte @@ -14,7 +14,8 @@ buildWildcardColumnsQuery, isRelationship, isRelationshipToMany, - isSpatialType + isSpatialType, + buildPayload } from './store'; import { Layout, Skeleton } from '@appwrite.io/pink-svelte'; import { deepClone } from '$lib/helpers/object'; @@ -142,11 +143,13 @@ if (!row || !work) return; try { + const payload = buildPayload(table.fields, $work as Record); + await sdk.forProject(page.params.region, page.params.project).tablesDB.updateRow({ databaseId: table.databaseId, tableId: table.$id, rowId: row.$id, - data: $work, + data: payload, permissions: $work.$permissions }); diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/editRelated.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/editRelated.svelte index 1b3c83eb97..f3819fa065 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/editRelated.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/editRelated.svelte @@ -10,7 +10,12 @@ import { invalidate } from '$app/navigation'; import { type Columns, PROHIBITED_ROW_KEYS } from '../store'; import ColumnItem from './columns/columnItem.svelte'; - import { buildWildcardColumnsQuery, isRelationship, isRelationshipToMany } from './store'; + import { + buildWildcardColumnsQuery, + isRelationship, + isRelationshipToMany, + buildPayload + } from './store'; import { Accordion, Layout, Skeleton } from '@appwrite.io/pink-svelte'; import { deepClone } from '$lib/helpers/object'; import { preferences } from '$lib/stores/preferences'; @@ -258,11 +263,15 @@ const work = workData.get(rowId); const workValue = get(work); + const payload = buildPayload( + relatedTable.fields, + workValue as Record + ); await sdk.forProject(page.params.region, page.params.project).tablesDB.updateRow({ databaseId, tableId: relatedTable.$id, rowId: rowId, - data: workValue, + data: payload, permissions: workValue.$permissions }); @@ -276,13 +285,17 @@ if (!work) return; const workValue = get(work); + const payload = buildPayload( + relatedTable.fields, + workValue as Record + ); return sdk .forProject(page.params.region, page.params.project) .tablesDB.updateRow({ databaseId, tableId: relatedTable.$id, rowId: row.$id, - data: workValue, + data: payload, permissions: workValue.$permissions }); }); diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/store.ts b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/store.ts index 1a65e7873a..94017945d3 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/store.ts +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/store.ts @@ -52,6 +52,47 @@ export function isSpatialType( return spatialTypes.includes(field.type.toLowerCase()); } +function castBigIntValue(value: unknown): unknown { + if (value === null || value === undefined || value === '') { + return value; + } + + if (typeof value === 'bigint') { + return value; + } + + try { + console.log({ value }); + return BigInt(value as string | number | boolean); + } catch { + return value; + } +} + +export function buildPayload( + fields: Field[] | undefined, + row: Record +): Record { + const payload = structuredClone(row); + + for (const field of fields ?? []) { + if (field.type !== 'bigint') { + continue; + } + + const value = payload[field.key]; + + if (field.array && Array.isArray(value)) { + payload[field.key] = value.map((item) => castBigIntValue(item)); + continue; + } + + payload[field.key] = castBigIntValue(value); + } + + return payload; +} + /** * Returns select queries for all main and related fields in an `Entity`. */ diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/spreadsheet.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/spreadsheet.svelte index 7fee9b9fbf..6b9992c165 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/spreadsheet.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/spreadsheet.svelte @@ -17,6 +17,7 @@ buildWildcardColumnsQuery, isRelationship, isRelationshipToMany, + buildPayload, isSpatialType, isTextType } from './rows/store'; @@ -645,11 +646,13 @@ async function updateRowContents(row: Models.Row) { try { + const payload = buildPayload(table.fields, row as Record); + await sdk.forProject(page.params.region, page.params.project).tablesDB.updateRow({ databaseId, tableId: table.$id, rowId: row.$id, - data: row, + data: payload, permissions: row.$permissions }); From d5689d4693529f47eda3a39cd4721fd534e0fab8 Mon Sep 17 00:00:00 2001 From: ArnabChatterjee20k Date: Thu, 9 Apr 2026 14:50:34 +0530 Subject: [PATCH 7/9] linting --- .../database-[database]/table-[table]/columns/bigint.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte index f59b947229..57d60dc5e2 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/bigint.svelte @@ -2,7 +2,7 @@ import { page } from '$app/state'; import { sdk } from '$lib/stores/sdk'; import type { Models } from '@appwrite.io/console'; - + function normalizeBigInt(value) { if (value === undefined) return undefined; if (value === null) return null; From 9374df048edf55a80e77825343b531f3600a1e76 Mon Sep 17 00:00:00 2001 From: ArnabChatterjee20k Date: Thu, 9 Apr 2026 14:56:32 +0530 Subject: [PATCH 8/9] updated --- bun.lock | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/bun.lock b/bun.lock index 143df2bed0..eff43b53ba 100644 --- a/bun.lock +++ b/bun.lock @@ -1,11 +1,12 @@ { "lockfileVersion": 1, + "configVersion": 0, "workspaces": { "": { "name": "@appwrite/console", "dependencies": { "@ai-sdk/svelte": "^1.1.24", - "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@67539a6", + "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@ef672a3", "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@bfe7ce3", "@appwrite.io/pink-legacy": "^1.0.3", @@ -24,7 +25,6 @@ "deep-equal": "^2.2.3", "echarts": "^5.6.0", "flatted": "^3.4.2", - "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@67539a6", "ignore": "^6.0.2", "nanoid": "^5.1.7", "nanotar": "^0.3.0", @@ -113,7 +113,7 @@ "@analytics/type-utils": ["@analytics/type-utils@0.6.4", "", {}, "sha512-Ou1gQxFakOWLcPnbFVsrPb8g1wLLUZYYJXDPjHkG07+5mustGs5yqACx42UAu4A6NszNN6Z5gGxhyH45zPWRxw=="], - "@appwrite.io/console": ["@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@67539a6", { "dependencies": { "json-bigint": "1.0.0" } }], + "@appwrite.io/console": ["@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@ef672a3", { "dependencies": { "json-bigint": "1.0.0" } }, "sha512-p56fUkb4Vj+MeTJAiVayKr6/qH6kYpsDbqNqb8YiVhu9x+aInxH8Vo44iDiYg/KYlTAgwFSOXLrq2ZEPaVrXIw=="], "@appwrite.io/pink-icons": ["@appwrite.io/pink-icons@0.25.0", "", {}, "sha512-0O3i2oEuh5mWvjO80i+X6rbzrWLJ1m5wmv2/M3a1p2PyBJsFxN8xQMTEmTn3Wl/D26SsM7SpzbdW6gmfgoVU9Q=="], @@ -121,7 +121,7 @@ "@appwrite.io/pink-legacy": ["@appwrite.io/pink-legacy@1.0.3", "", { "dependencies": { "@appwrite.io/pink-icons": "1.0.0", "the-new-css-reset": "^1.11.2" } }, "sha512-GGde5fmPhs+s6/3aFeMPc/kKADG/gTFkYQSy6oBN8pK0y0XNCLrZZgBv+EBbdhwdtqVEWXa0X85Mv9w7jcIlwQ=="], - "@appwrite.io/pink-svelte": ["@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@8dcaa17", { "dependencies": { "@appwrite.io/pink-icons-svelte": "2.0.0-RC.1", "@floating-ui/dom": "^1.6.13", "@melt-ui/pp": "^0.3.2", "@melt-ui/svelte": "^0.86.6", "@tanstack/svelte-virtual": "^3.13.10", "ansicolor": "^2.0.3", "d3": "^7.9.0", "fuse.js": "^7.1.0", "pretty-bytes": "^6.1.1", "shiki": "^1.18.0", "svelte-motion": "^0.12.2", "svelte-sonner": "^0.3.28" }, "peerDependencies": { "svelte": "^4.0.0" } }], + "@appwrite.io/pink-svelte": ["@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@8dcaa17", { "dependencies": { "@appwrite.io/pink-icons-svelte": "2.0.0-RC.1", "@floating-ui/dom": "^1.6.13", "@melt-ui/pp": "^0.3.2", "@melt-ui/svelte": "^0.86.6", "@tanstack/svelte-virtual": "^3.13.10", "ansicolor": "^2.0.3", "d3": "^7.9.0", "fuse.js": "^7.1.0", "pretty-bytes": "^6.1.1", "shiki": "^1.18.0", "svelte-motion": "^0.12.2", "svelte-sonner": "^0.3.28" }, "peerDependencies": { "svelte": "^4.0.0" } }, "sha512-rw3zXN7/cUciCnhj0FR8M0H5Db+LYYMaKtPxvOAIMxNTBmStzU8kTw6grqIvdtFu9vybIsjKtIwm9QLHpNDBjA=="], "@asamuzakjp/css-color": ["@asamuzakjp/css-color@3.2.0", "", { "dependencies": { "@csstools/css-calc": "^2.1.3", "@csstools/css-color-parser": "^3.0.9", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "lru-cache": "^10.4.3" } }, "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw=="], diff --git a/package.json b/package.json index 74c0c79488..c33ff5ef67 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ }, "dependencies": { "@ai-sdk/svelte": "^1.1.24", - "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@67539a6", + "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@ef672a3", "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@bfe7ce3", "@appwrite.io/pink-legacy": "^1.0.3", From 2d0defe5f9299fc9fef23797f359f77e035f1715 Mon Sep 17 00:00:00 2001 From: ArnabChatterjee20k Date: Thu, 9 Apr 2026 17:14:18 +0530 Subject: [PATCH 9/9] updated the type --- .../table-[table]/+layout.svelte | 4 +-- .../table-[table]/rows/edit.svelte | 2 +- .../table-[table]/rows/editRelated.svelte | 10 ++----- .../table-[table]/rows/store.ts | 29 +++++++++---------- .../table-[table]/spreadsheet.svelte | 2 +- 5 files changed, 19 insertions(+), 28 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+layout.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+layout.svelte index 9492c22cd9..16a088f97c 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+layout.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+layout.svelte @@ -346,7 +346,7 @@ databaseId: page.params.database, tableId: page.params.table, rowId: row.$id, - data: buildPayload(columns, row as Record) + data: buildPayload(columns, row) }) ) ); @@ -358,7 +358,7 @@ await tablesSDK.createRows({ databaseId: page.params.database, tableId: page.params.table, - rows: rows.map((row) => buildPayload(columns, row as Record)) + rows: rows.map((row) => buildPayload(columns, row)) }); } diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/edit.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/edit.svelte index a440ba96f4..58a723129b 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/edit.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/edit.svelte @@ -143,7 +143,7 @@ if (!row || !work) return; try { - const payload = buildPayload(table.fields, $work as Record); + const payload = buildPayload(table.fields, $work); await sdk.forProject(page.params.region, page.params.project).tablesDB.updateRow({ databaseId: table.databaseId, diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/editRelated.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/editRelated.svelte index af0afde359..67a0ce0b09 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/editRelated.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/editRelated.svelte @@ -258,10 +258,7 @@ const work = workData.get(rowId); const workValue = get(work); - const payload = buildPayload( - relatedTable.fields, - workValue as Record - ); + const payload = buildPayload(relatedTable.fields, workValue); await sdk.forProject(page.params.region, page.params.project).tablesDB.updateRow({ databaseId, tableId: relatedTable.$id, @@ -280,10 +277,7 @@ if (!work) return; const workValue = get(work); - const payload = buildPayload( - relatedTable.fields, - workValue as Record - ); + const payload = buildPayload(relatedTable.fields, workValue); return sdk .forProject(page.params.region, page.params.project) .tablesDB.updateRow({ diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/store.ts b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/store.ts index 94017945d3..b38649c3a4 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/store.ts +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/store.ts @@ -4,6 +4,12 @@ import type { Attributes, Columns } from '../store'; import { type Models, Query } from '@appwrite.io/console'; import type { Entity, Field } from '$database/(entity)'; +type RowPrimitive = string | number | bigint | boolean | null | undefined; +interface RowObject { + [key: string]: RowValue; +} +type RowValue = RowPrimitive | RowValue[] | RowObject; + export function isRelationshipToMany(field: Field) { if (!field) return false; if (!isRelationship(field)) return false; @@ -52,28 +58,19 @@ export function isSpatialType( return spatialTypes.includes(field.type.toLowerCase()); } -function castBigIntValue(value: unknown): unknown { +function castBigIntValue(value: RowValue): RowValue { if (value === null || value === undefined || value === '') { return value; } - if (typeof value === 'bigint') { - return value; - } - - try { - console.log({ value }); - return BigInt(value as string | number | boolean); - } catch { - return value; - } + return String(value); } -export function buildPayload( +export function buildPayload>( fields: Field[] | undefined, - row: Record -): Record { - const payload = structuredClone(row); + row: T +): T { + const payload = structuredClone(row) as Record; for (const field of fields ?? []) { if (field.type !== 'bigint') { @@ -90,7 +87,7 @@ export function buildPayload( payload[field.key] = castBigIntValue(value); } - return payload; + return payload as T; } /** diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/spreadsheet.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/spreadsheet.svelte index 6b9992c165..36eae918f9 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/spreadsheet.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/spreadsheet.svelte @@ -646,7 +646,7 @@ async function updateRowContents(row: Models.Row) { try { - const payload = buildPayload(table.fields, row as Record); + const payload = buildPayload(table.fields, row); await sdk.forProject(page.params.region, page.params.project).tablesDB.updateRow({ databaseId,