@mcp-z/mcp-sheets 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +181 -0
- package/bin/server.js +5 -0
- package/dist/cjs/constants.d.cts +7 -0
- package/dist/cjs/constants.d.ts +7 -0
- package/dist/cjs/constants.js +18 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/index.d.cts +8 -0
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.js +314 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lib/create-store.d.cts +2 -0
- package/dist/cjs/lib/create-store.d.ts +2 -0
- package/dist/cjs/lib/create-store.js +166 -0
- package/dist/cjs/lib/create-store.js.map +1 -0
- package/dist/cjs/mcp/index.d.cts +3 -0
- package/dist/cjs/mcp/index.d.ts +3 -0
- package/dist/cjs/mcp/index.js +66 -0
- package/dist/cjs/mcp/index.js.map +1 -0
- package/dist/cjs/mcp/prompts/a1-notation.d.cts +19 -0
- package/dist/cjs/mcp/prompts/a1-notation.d.ts +19 -0
- package/dist/cjs/mcp/prompts/a1-notation.js +169 -0
- package/dist/cjs/mcp/prompts/a1-notation.js.map +1 -0
- package/dist/cjs/mcp/prompts/index.d.cts +1 -0
- package/dist/cjs/mcp/prompts/index.d.ts +1 -0
- package/dist/cjs/mcp/prompts/index.js +17 -0
- package/dist/cjs/mcp/prompts/index.js.map +1 -0
- package/dist/cjs/mcp/resources/index.d.cts +1 -0
- package/dist/cjs/mcp/resources/index.d.ts +1 -0
- package/dist/cjs/mcp/resources/index.js +17 -0
- package/dist/cjs/mcp/resources/index.js.map +1 -0
- package/dist/cjs/mcp/resources/spreadsheet.d.cts +2 -0
- package/dist/cjs/mcp/resources/spreadsheet.d.ts +2 -0
- package/dist/cjs/mcp/resources/spreadsheet.js +258 -0
- package/dist/cjs/mcp/resources/spreadsheet.js.map +1 -0
- package/dist/cjs/mcp/tools/cells-format.d.cts +144 -0
- package/dist/cjs/mcp/tools/cells-format.d.ts +144 -0
- package/dist/cjs/mcp/tools/cells-format.js +484 -0
- package/dist/cjs/mcp/tools/cells-format.js.map +1 -0
- package/dist/cjs/mcp/tools/chart-create.d.cts +94 -0
- package/dist/cjs/mcp/tools/chart-create.d.ts +94 -0
- package/dist/cjs/mcp/tools/chart-create.js +575 -0
- package/dist/cjs/mcp/tools/chart-create.js.map +1 -0
- package/dist/cjs/mcp/tools/columns-get.d.cts +55 -0
- package/dist/cjs/mcp/tools/columns-get.d.ts +55 -0
- package/dist/cjs/mcp/tools/columns-get.js +289 -0
- package/dist/cjs/mcp/tools/columns-get.js.map +1 -0
- package/dist/cjs/mcp/tools/columns-update.d.cts +86 -0
- package/dist/cjs/mcp/tools/columns-update.d.ts +86 -0
- package/dist/cjs/mcp/tools/columns-update.js +482 -0
- package/dist/cjs/mcp/tools/columns-update.js.map +1 -0
- package/dist/cjs/mcp/tools/csv-get-columns.d.cts +43 -0
- package/dist/cjs/mcp/tools/csv-get-columns.d.ts +43 -0
- package/dist/cjs/mcp/tools/csv-get-columns.js +386 -0
- package/dist/cjs/mcp/tools/csv-get-columns.js.map +1 -0
- package/dist/cjs/mcp/tools/dimensions-batch-update.d.cts +118 -0
- package/dist/cjs/mcp/tools/dimensions-batch-update.d.ts +118 -0
- package/dist/cjs/mcp/tools/dimensions-batch-update.js +504 -0
- package/dist/cjs/mcp/tools/dimensions-batch-update.js.map +1 -0
- package/dist/cjs/mcp/tools/dimensions-move.d.cts +86 -0
- package/dist/cjs/mcp/tools/dimensions-move.d.ts +86 -0
- package/dist/cjs/mcp/tools/dimensions-move.js +359 -0
- package/dist/cjs/mcp/tools/dimensions-move.js.map +1 -0
- package/dist/cjs/mcp/tools/index.d.cts +26 -0
- package/dist/cjs/mcp/tools/index.d.ts +26 -0
- package/dist/cjs/mcp/tools/index.js +122 -0
- package/dist/cjs/mcp/tools/index.js.map +1 -0
- package/dist/cjs/mcp/tools/lib/dimension-operations.d.cts +48 -0
- package/dist/cjs/mcp/tools/lib/dimension-operations.d.ts +48 -0
- package/dist/cjs/mcp/tools/lib/dimension-operations.js +177 -0
- package/dist/cjs/mcp/tools/lib/dimension-operations.js.map +1 -0
- package/dist/cjs/mcp/tools/rows-append.d.cts +58 -0
- package/dist/cjs/mcp/tools/rows-append.d.ts +58 -0
- package/dist/cjs/mcp/tools/rows-append.js +335 -0
- package/dist/cjs/mcp/tools/rows-append.js.map +1 -0
- package/dist/cjs/mcp/tools/rows-csv-append.d.cts +67 -0
- package/dist/cjs/mcp/tools/rows-csv-append.d.ts +67 -0
- package/dist/cjs/mcp/tools/rows-csv-append.js +859 -0
- package/dist/cjs/mcp/tools/rows-csv-append.js.map +1 -0
- package/dist/cjs/mcp/tools/rows-get.d.cts +56 -0
- package/dist/cjs/mcp/tools/rows-get.d.ts +56 -0
- package/dist/cjs/mcp/tools/rows-get.js +292 -0
- package/dist/cjs/mcp/tools/rows-get.js.map +1 -0
- package/dist/cjs/mcp/tools/sheet-copy-to.d.cts +68 -0
- package/dist/cjs/mcp/tools/sheet-copy-to.d.ts +68 -0
- package/dist/cjs/mcp/tools/sheet-copy-to.js +341 -0
- package/dist/cjs/mcp/tools/sheet-copy-to.js.map +1 -0
- package/dist/cjs/mcp/tools/sheet-copy.d.cts +80 -0
- package/dist/cjs/mcp/tools/sheet-copy.d.ts +80 -0
- package/dist/cjs/mcp/tools/sheet-copy.js +394 -0
- package/dist/cjs/mcp/tools/sheet-copy.js.map +1 -0
- package/dist/cjs/mcp/tools/sheet-create.d.cts +56 -0
- package/dist/cjs/mcp/tools/sheet-create.d.ts +56 -0
- package/dist/cjs/mcp/tools/sheet-create.js +283 -0
- package/dist/cjs/mcp/tools/sheet-create.js.map +1 -0
- package/dist/cjs/mcp/tools/sheet-delete.d.cts +62 -0
- package/dist/cjs/mcp/tools/sheet-delete.d.ts +62 -0
- package/dist/cjs/mcp/tools/sheet-delete.js +341 -0
- package/dist/cjs/mcp/tools/sheet-delete.js.map +1 -0
- package/dist/cjs/mcp/tools/sheet-find.d.cts +48 -0
- package/dist/cjs/mcp/tools/sheet-find.d.ts +48 -0
- package/dist/cjs/mcp/tools/sheet-find.js +261 -0
- package/dist/cjs/mcp/tools/sheet-find.js.map +1 -0
- package/dist/cjs/mcp/tools/sheet-rename.d.cts +60 -0
- package/dist/cjs/mcp/tools/sheet-rename.d.ts +60 -0
- package/dist/cjs/mcp/tools/sheet-rename.js +305 -0
- package/dist/cjs/mcp/tools/sheet-rename.js.map +1 -0
- package/dist/cjs/mcp/tools/spreadsheet-copy.d.cts +58 -0
- package/dist/cjs/mcp/tools/spreadsheet-copy.d.ts +58 -0
- package/dist/cjs/mcp/tools/spreadsheet-copy.js +319 -0
- package/dist/cjs/mcp/tools/spreadsheet-copy.js.map +1 -0
- package/dist/cjs/mcp/tools/spreadsheet-create.d.cts +52 -0
- package/dist/cjs/mcp/tools/spreadsheet-create.d.ts +52 -0
- package/dist/cjs/mcp/tools/spreadsheet-create.js +270 -0
- package/dist/cjs/mcp/tools/spreadsheet-create.js.map +1 -0
- package/dist/cjs/mcp/tools/spreadsheet-find.d.cts +58 -0
- package/dist/cjs/mcp/tools/spreadsheet-find.d.ts +58 -0
- package/dist/cjs/mcp/tools/spreadsheet-find.js +334 -0
- package/dist/cjs/mcp/tools/spreadsheet-find.js.map +1 -0
- package/dist/cjs/mcp/tools/spreadsheet-rename.d.cts +56 -0
- package/dist/cjs/mcp/tools/spreadsheet-rename.d.ts +56 -0
- package/dist/cjs/mcp/tools/spreadsheet-rename.js +289 -0
- package/dist/cjs/mcp/tools/spreadsheet-rename.js.map +1 -0
- package/dist/cjs/mcp/tools/validation-set.d.cts +144 -0
- package/dist/cjs/mcp/tools/validation-set.d.ts +144 -0
- package/dist/cjs/mcp/tools/validation-set.js +564 -0
- package/dist/cjs/mcp/tools/validation-set.js.map +1 -0
- package/dist/cjs/mcp/tools/values-batch-update.d.cts +102 -0
- package/dist/cjs/mcp/tools/values-batch-update.d.ts +102 -0
- package/dist/cjs/mcp/tools/values-batch-update.js +409 -0
- package/dist/cjs/mcp/tools/values-batch-update.js.map +1 -0
- package/dist/cjs/mcp/tools/values-clear.d.cts +56 -0
- package/dist/cjs/mcp/tools/values-clear.d.ts +56 -0
- package/dist/cjs/mcp/tools/values-clear.js +308 -0
- package/dist/cjs/mcp/tools/values-clear.js.map +1 -0
- package/dist/cjs/mcp/tools/values-csv-update.d.cts +75 -0
- package/dist/cjs/mcp/tools/values-csv-update.d.ts +75 -0
- package/dist/cjs/mcp/tools/values-csv-update.js +500 -0
- package/dist/cjs/mcp/tools/values-csv-update.js.map +1 -0
- package/dist/cjs/mcp/tools/values-replace.d.cts +68 -0
- package/dist/cjs/mcp/tools/values-replace.d.ts +68 -0
- package/dist/cjs/mcp/tools/values-replace.js +378 -0
- package/dist/cjs/mcp/tools/values-replace.js.map +1 -0
- package/dist/cjs/mcp/tools/values-search.d.cts +74 -0
- package/dist/cjs/mcp/tools/values-search.d.ts +74 -0
- package/dist/cjs/mcp/tools/values-search.js +470 -0
- package/dist/cjs/mcp/tools/values-search.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/schemas/index.d.cts +14 -0
- package/dist/cjs/schemas/index.d.ts +14 -0
- package/dist/cjs/schemas/index.js +64 -0
- package/dist/cjs/schemas/index.js.map +1 -0
- package/dist/cjs/setup/config.d.cts +44 -0
- package/dist/cjs/setup/config.d.ts +44 -0
- package/dist/cjs/setup/config.js +201 -0
- package/dist/cjs/setup/config.js.map +1 -0
- package/dist/cjs/setup/http.d.cts +8 -0
- package/dist/cjs/setup/http.d.ts +8 -0
- package/dist/cjs/setup/http.js +260 -0
- package/dist/cjs/setup/http.js.map +1 -0
- package/dist/cjs/setup/index.d.cts +5 -0
- package/dist/cjs/setup/index.d.ts +5 -0
- package/dist/cjs/setup/index.js +46 -0
- package/dist/cjs/setup/index.js.map +1 -0
- package/dist/cjs/setup/oauth-google.d.cts +54 -0
- package/dist/cjs/setup/oauth-google.d.ts +54 -0
- package/dist/cjs/setup/oauth-google.js +332 -0
- package/dist/cjs/setup/oauth-google.js.map +1 -0
- package/dist/cjs/setup/runtime.d.cts +10 -0
- package/dist/cjs/setup/runtime.d.ts +10 -0
- package/dist/cjs/setup/runtime.js +353 -0
- package/dist/cjs/setup/runtime.js.map +1 -0
- package/dist/cjs/setup/stdio.d.cts +7 -0
- package/dist/cjs/setup/stdio.d.ts +7 -0
- package/dist/cjs/setup/stdio.js +239 -0
- package/dist/cjs/setup/stdio.js.map +1 -0
- package/dist/cjs/spreadsheet/column-utilities.d.cts +1 -0
- package/dist/cjs/spreadsheet/column-utilities.d.ts +1 -0
- package/dist/cjs/spreadsheet/column-utilities.js +21 -0
- package/dist/cjs/spreadsheet/column-utilities.js.map +1 -0
- package/dist/cjs/spreadsheet/csv-streaming.d.cts +19 -0
- package/dist/cjs/spreadsheet/csv-streaming.d.ts +19 -0
- package/dist/cjs/spreadsheet/csv-streaming.js +188 -0
- package/dist/cjs/spreadsheet/csv-streaming.js.map +1 -0
- package/dist/cjs/spreadsheet/data-operations.d.cts +115 -0
- package/dist/cjs/spreadsheet/data-operations.d.ts +115 -0
- package/dist/cjs/spreadsheet/data-operations.js +1515 -0
- package/dist/cjs/spreadsheet/data-operations.js.map +1 -0
- package/dist/cjs/spreadsheet/deduplication-utils.d.cts +31 -0
- package/dist/cjs/spreadsheet/deduplication-utils.d.ts +31 -0
- package/dist/cjs/spreadsheet/deduplication-utils.js +65 -0
- package/dist/cjs/spreadsheet/deduplication-utils.js.map +1 -0
- package/dist/cjs/spreadsheet/range-operations.d.cts +184 -0
- package/dist/cjs/spreadsheet/range-operations.d.ts +184 -0
- package/dist/cjs/spreadsheet/range-operations.js +672 -0
- package/dist/cjs/spreadsheet/range-operations.js.map +1 -0
- package/dist/cjs/spreadsheet/sheet-operations.d.cts +30 -0
- package/dist/cjs/spreadsheet/sheet-operations.d.ts +30 -0
- package/dist/cjs/spreadsheet/sheet-operations.js +811 -0
- package/dist/cjs/spreadsheet/sheet-operations.js.map +1 -0
- package/dist/cjs/spreadsheet/spreadsheet-management.d.cts +21 -0
- package/dist/cjs/spreadsheet/spreadsheet-management.d.ts +21 -0
- package/dist/cjs/spreadsheet/spreadsheet-management.js +310 -0
- package/dist/cjs/spreadsheet/spreadsheet-management.js.map +1 -0
- package/dist/cjs/types.d.cts +53 -0
- package/dist/cjs/types.d.ts +53 -0
- package/dist/cjs/types.js +5 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/constants.d.ts +7 -0
- package/dist/esm/constants.js +7 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.js +34 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/create-store.d.ts +2 -0
- package/dist/esm/lib/create-store.js +6 -0
- package/dist/esm/lib/create-store.js.map +1 -0
- package/dist/esm/mcp/index.d.ts +3 -0
- package/dist/esm/mcp/index.js +6 -0
- package/dist/esm/mcp/index.js.map +1 -0
- package/dist/esm/mcp/prompts/a1-notation.d.ts +19 -0
- package/dist/esm/mcp/prompts/a1-notation.js +49 -0
- package/dist/esm/mcp/prompts/a1-notation.js.map +1 -0
- package/dist/esm/mcp/prompts/index.d.ts +1 -0
- package/dist/esm/mcp/prompts/index.js +1 -0
- package/dist/esm/mcp/prompts/index.js.map +1 -0
- package/dist/esm/mcp/resources/index.d.ts +1 -0
- package/dist/esm/mcp/resources/index.js +1 -0
- package/dist/esm/mcp/resources/index.js.map +1 -0
- package/dist/esm/mcp/resources/spreadsheet.d.ts +2 -0
- package/dist/esm/mcp/resources/spreadsheet.js +88 -0
- package/dist/esm/mcp/resources/spreadsheet.js.map +1 -0
- package/dist/esm/mcp/tools/cells-format.d.ts +144 -0
- package/dist/esm/mcp/tools/cells-format.js +288 -0
- package/dist/esm/mcp/tools/cells-format.js.map +1 -0
- package/dist/esm/mcp/tools/chart-create.d.ts +94 -0
- package/dist/esm/mcp/tools/chart-create.js +408 -0
- package/dist/esm/mcp/tools/chart-create.js.map +1 -0
- package/dist/esm/mcp/tools/columns-get.d.ts +55 -0
- package/dist/esm/mcp/tools/columns-get.js +113 -0
- package/dist/esm/mcp/tools/columns-get.js.map +1 -0
- package/dist/esm/mcp/tools/columns-update.d.ts +86 -0
- package/dist/esm/mcp/tools/columns-update.js +296 -0
- package/dist/esm/mcp/tools/columns-update.js.map +1 -0
- package/dist/esm/mcp/tools/csv-get-columns.d.ts +43 -0
- package/dist/esm/mcp/tools/csv-get-columns.js +95 -0
- package/dist/esm/mcp/tools/csv-get-columns.js.map +1 -0
- package/dist/esm/mcp/tools/dimensions-batch-update.d.ts +118 -0
- package/dist/esm/mcp/tools/dimensions-batch-update.js +321 -0
- package/dist/esm/mcp/tools/dimensions-batch-update.js.map +1 -0
- package/dist/esm/mcp/tools/dimensions-move.d.ts +86 -0
- package/dist/esm/mcp/tools/dimensions-move.js +183 -0
- package/dist/esm/mcp/tools/dimensions-move.js.map +1 -0
- package/dist/esm/mcp/tools/index.d.ts +26 -0
- package/dist/esm/mcp/tools/index.js +26 -0
- package/dist/esm/mcp/tools/index.js.map +1 -0
- package/dist/esm/mcp/tools/lib/dimension-operations.d.ts +48 -0
- package/dist/esm/mcp/tools/lib/dimension-operations.js +93 -0
- package/dist/esm/mcp/tools/lib/dimension-operations.js.map +1 -0
- package/dist/esm/mcp/tools/rows-append.d.ts +58 -0
- package/dist/esm/mcp/tools/rows-append.js +151 -0
- package/dist/esm/mcp/tools/rows-append.js.map +1 -0
- package/dist/esm/mcp/tools/rows-csv-append.d.ts +67 -0
- package/dist/esm/mcp/tools/rows-csv-append.js +342 -0
- package/dist/esm/mcp/tools/rows-csv-append.js.map +1 -0
- package/dist/esm/mcp/tools/rows-get.d.ts +56 -0
- package/dist/esm/mcp/tools/rows-get.js +116 -0
- package/dist/esm/mcp/tools/rows-get.js.map +1 -0
- package/dist/esm/mcp/tools/sheet-copy-to.d.ts +68 -0
- package/dist/esm/mcp/tools/sheet-copy-to.js +156 -0
- package/dist/esm/mcp/tools/sheet-copy-to.js.map +1 -0
- package/dist/esm/mcp/tools/sheet-copy.d.ts +80 -0
- package/dist/esm/mcp/tools/sheet-copy.js +177 -0
- package/dist/esm/mcp/tools/sheet-copy.js.map +1 -0
- package/dist/esm/mcp/tools/sheet-create.d.ts +56 -0
- package/dist/esm/mcp/tools/sheet-create.js +110 -0
- package/dist/esm/mcp/tools/sheet-create.js.map +1 -0
- package/dist/esm/mcp/tools/sheet-delete.d.ts +62 -0
- package/dist/esm/mcp/tools/sheet-delete.js +125 -0
- package/dist/esm/mcp/tools/sheet-delete.js.map +1 -0
- package/dist/esm/mcp/tools/sheet-find.d.ts +48 -0
- package/dist/esm/mcp/tools/sheet-find.js +90 -0
- package/dist/esm/mcp/tools/sheet-find.js.map +1 -0
- package/dist/esm/mcp/tools/sheet-rename.d.ts +60 -0
- package/dist/esm/mcp/tools/sheet-rename.js +128 -0
- package/dist/esm/mcp/tools/sheet-rename.js.map +1 -0
- package/dist/esm/mcp/tools/spreadsheet-copy.d.ts +58 -0
- package/dist/esm/mcp/tools/spreadsheet-copy.js +117 -0
- package/dist/esm/mcp/tools/spreadsheet-copy.js.map +1 -0
- package/dist/esm/mcp/tools/spreadsheet-create.d.ts +52 -0
- package/dist/esm/mcp/tools/spreadsheet-create.js +97 -0
- package/dist/esm/mcp/tools/spreadsheet-create.js.map +1 -0
- package/dist/esm/mcp/tools/spreadsheet-find.d.ts +58 -0
- package/dist/esm/mcp/tools/spreadsheet-find.js +113 -0
- package/dist/esm/mcp/tools/spreadsheet-find.js.map +1 -0
- package/dist/esm/mcp/tools/spreadsheet-rename.d.ts +56 -0
- package/dist/esm/mcp/tools/spreadsheet-rename.js +112 -0
- package/dist/esm/mcp/tools/spreadsheet-rename.js.map +1 -0
- package/dist/esm/mcp/tools/validation-set.d.ts +144 -0
- package/dist/esm/mcp/tools/validation-set.js +366 -0
- package/dist/esm/mcp/tools/validation-set.js.map +1 -0
- package/dist/esm/mcp/tools/values-batch-update.d.ts +102 -0
- package/dist/esm/mcp/tools/values-batch-update.js +224 -0
- package/dist/esm/mcp/tools/values-batch-update.js.map +1 -0
- package/dist/esm/mcp/tools/values-clear.d.ts +56 -0
- package/dist/esm/mcp/tools/values-clear.js +131 -0
- package/dist/esm/mcp/tools/values-clear.js.map +1 -0
- package/dist/esm/mcp/tools/values-csv-update.d.ts +75 -0
- package/dist/esm/mcp/tools/values-csv-update.js +202 -0
- package/dist/esm/mcp/tools/values-csv-update.js.map +1 -0
- package/dist/esm/mcp/tools/values-replace.d.ts +68 -0
- package/dist/esm/mcp/tools/values-replace.js +171 -0
- package/dist/esm/mcp/tools/values-replace.js.map +1 -0
- package/dist/esm/mcp/tools/values-search.d.ts +74 -0
- package/dist/esm/mcp/tools/values-search.js +229 -0
- package/dist/esm/mcp/tools/values-search.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/schemas/index.d.ts +14 -0
- package/dist/esm/schemas/index.js +35 -0
- package/dist/esm/schemas/index.js.map +1 -0
- package/dist/esm/setup/config.d.ts +44 -0
- package/dist/esm/setup/config.js +151 -0
- package/dist/esm/setup/config.js.map +1 -0
- package/dist/esm/setup/http.d.ts +8 -0
- package/dist/esm/setup/http.js +54 -0
- package/dist/esm/setup/http.js.map +1 -0
- package/dist/esm/setup/index.d.ts +5 -0
- package/dist/esm/setup/index.js +5 -0
- package/dist/esm/setup/index.js.map +1 -0
- package/dist/esm/setup/oauth-google.d.ts +54 -0
- package/dist/esm/setup/oauth-google.js +142 -0
- package/dist/esm/setup/oauth-google.js.map +1 -0
- package/dist/esm/setup/runtime.d.ts +10 -0
- package/dist/esm/setup/runtime.js +84 -0
- package/dist/esm/setup/runtime.js.map +1 -0
- package/dist/esm/setup/stdio.d.ts +7 -0
- package/dist/esm/setup/stdio.js +38 -0
- package/dist/esm/setup/stdio.js.map +1 -0
- package/dist/esm/spreadsheet/column-utilities.d.ts +1 -0
- package/dist/esm/spreadsheet/column-utilities.js +10 -0
- package/dist/esm/spreadsheet/column-utilities.js.map +1 -0
- package/dist/esm/spreadsheet/csv-streaming.d.ts +19 -0
- package/dist/esm/spreadsheet/csv-streaming.js +43 -0
- package/dist/esm/spreadsheet/csv-streaming.js.map +1 -0
- package/dist/esm/spreadsheet/data-operations.d.ts +115 -0
- package/dist/esm/spreadsheet/data-operations.js +712 -0
- package/dist/esm/spreadsheet/data-operations.js.map +1 -0
- package/dist/esm/spreadsheet/deduplication-utils.d.ts +31 -0
- package/dist/esm/spreadsheet/deduplication-utils.js +54 -0
- package/dist/esm/spreadsheet/deduplication-utils.js.map +1 -0
- package/dist/esm/spreadsheet/range-operations.d.ts +184 -0
- package/dist/esm/spreadsheet/range-operations.js +591 -0
- package/dist/esm/spreadsheet/range-operations.js.map +1 -0
- package/dist/esm/spreadsheet/sheet-operations.d.ts +30 -0
- package/dist/esm/spreadsheet/sheet-operations.js +359 -0
- package/dist/esm/spreadsheet/sheet-operations.js.map +1 -0
- package/dist/esm/spreadsheet/spreadsheet-management.d.ts +21 -0
- package/dist/esm/spreadsheet/spreadsheet-management.js +73 -0
- package/dist/esm/spreadsheet/spreadsheet-management.js.map +1 -0
- package/dist/esm/types.d.ts +53 -0
- package/dist/esm/types.js +1 -0
- package/dist/esm/types.js.map +1 -0
- package/package.json +108 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Streaming CSV parsing utilities for memory-efficient large file processing */
|
|
2
|
+
import { Readable } from 'stream';
|
|
3
|
+
/**
|
|
4
|
+
* Get readable stream from CSV URI
|
|
5
|
+
*
|
|
6
|
+
* Memory efficiency:
|
|
7
|
+
* - file:// URIs stream directly from disk
|
|
8
|
+
* - http:// URIs stream directly from response (no temp files!)
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const readStream = await getCsvReadStream(csvUri);
|
|
13
|
+
* const parser = readStream.pipe(parse({ columns: true }));
|
|
14
|
+
* for await (const record of parser) {
|
|
15
|
+
* // Process record
|
|
16
|
+
* }
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare function getCsvReadStream(csvUri: string): Promise<Readable>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Streaming CSV parsing utilities for memory-efficient large file processing */
|
|
2
|
+
import { Readable } from 'stream';
|
|
3
|
+
/**
|
|
4
|
+
* Get readable stream from CSV URI
|
|
5
|
+
*
|
|
6
|
+
* Memory efficiency:
|
|
7
|
+
* - file:// URIs stream directly from disk
|
|
8
|
+
* - http:// URIs stream directly from response (no temp files!)
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const readStream = await getCsvReadStream(csvUri);
|
|
13
|
+
* const parser = readStream.pipe(parse({ columns: true }));
|
|
14
|
+
* for await (const record of parser) {
|
|
15
|
+
* // Process record
|
|
16
|
+
* }
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare function getCsvReadStream(csvUri: string): Promise<Readable>;
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/** Streaming CSV parsing utilities for memory-efficient large file processing */ "use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "getCsvReadStream", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return getCsvReadStream;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
var _fs = require("fs");
|
|
12
|
+
var _path = require("path");
|
|
13
|
+
var _stream = require("stream");
|
|
14
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
15
|
+
try {
|
|
16
|
+
var info = gen[key](arg);
|
|
17
|
+
var value = info.value;
|
|
18
|
+
} catch (error) {
|
|
19
|
+
reject(error);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (info.done) {
|
|
23
|
+
resolve(value);
|
|
24
|
+
} else {
|
|
25
|
+
Promise.resolve(value).then(_next, _throw);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function _async_to_generator(fn) {
|
|
29
|
+
return function() {
|
|
30
|
+
var self = this, args = arguments;
|
|
31
|
+
return new Promise(function(resolve, reject) {
|
|
32
|
+
var gen = fn.apply(self, args);
|
|
33
|
+
function _next(value) {
|
|
34
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
35
|
+
}
|
|
36
|
+
function _throw(err) {
|
|
37
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
38
|
+
}
|
|
39
|
+
_next(undefined);
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function _ts_generator(thisArg, body) {
|
|
44
|
+
var f, y, t, _ = {
|
|
45
|
+
label: 0,
|
|
46
|
+
sent: function() {
|
|
47
|
+
if (t[0] & 1) throw t[1];
|
|
48
|
+
return t[1];
|
|
49
|
+
},
|
|
50
|
+
trys: [],
|
|
51
|
+
ops: []
|
|
52
|
+
}, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
|
|
53
|
+
return d(g, "next", {
|
|
54
|
+
value: verb(0)
|
|
55
|
+
}), d(g, "throw", {
|
|
56
|
+
value: verb(1)
|
|
57
|
+
}), d(g, "return", {
|
|
58
|
+
value: verb(2)
|
|
59
|
+
}), typeof Symbol === "function" && d(g, Symbol.iterator, {
|
|
60
|
+
value: function() {
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
}), g;
|
|
64
|
+
function verb(n) {
|
|
65
|
+
return function(v) {
|
|
66
|
+
return step([
|
|
67
|
+
n,
|
|
68
|
+
v
|
|
69
|
+
]);
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function step(op) {
|
|
73
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
74
|
+
while(g && (g = 0, op[0] && (_ = 0)), _)try {
|
|
75
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
76
|
+
if (y = 0, t) op = [
|
|
77
|
+
op[0] & 2,
|
|
78
|
+
t.value
|
|
79
|
+
];
|
|
80
|
+
switch(op[0]){
|
|
81
|
+
case 0:
|
|
82
|
+
case 1:
|
|
83
|
+
t = op;
|
|
84
|
+
break;
|
|
85
|
+
case 4:
|
|
86
|
+
_.label++;
|
|
87
|
+
return {
|
|
88
|
+
value: op[1],
|
|
89
|
+
done: false
|
|
90
|
+
};
|
|
91
|
+
case 5:
|
|
92
|
+
_.label++;
|
|
93
|
+
y = op[1];
|
|
94
|
+
op = [
|
|
95
|
+
0
|
|
96
|
+
];
|
|
97
|
+
continue;
|
|
98
|
+
case 7:
|
|
99
|
+
op = _.ops.pop();
|
|
100
|
+
_.trys.pop();
|
|
101
|
+
continue;
|
|
102
|
+
default:
|
|
103
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
104
|
+
_ = 0;
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
108
|
+
_.label = op[1];
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
112
|
+
_.label = t[1];
|
|
113
|
+
t = op;
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
if (t && _.label < t[2]) {
|
|
117
|
+
_.label = t[2];
|
|
118
|
+
_.ops.push(op);
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
if (t[2]) _.ops.pop();
|
|
122
|
+
_.trys.pop();
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
op = body.call(thisArg, _);
|
|
126
|
+
} catch (e) {
|
|
127
|
+
op = [
|
|
128
|
+
6,
|
|
129
|
+
e
|
|
130
|
+
];
|
|
131
|
+
y = 0;
|
|
132
|
+
} finally{
|
|
133
|
+
f = t = 0;
|
|
134
|
+
}
|
|
135
|
+
if (op[0] & 5) throw op[1];
|
|
136
|
+
return {
|
|
137
|
+
value: op[0] ? op[1] : void 0,
|
|
138
|
+
done: true
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
function getCsvReadStream(csvUri) {
|
|
143
|
+
return _async_to_generator(function() {
|
|
144
|
+
var filePath, resolvedPath, response;
|
|
145
|
+
return _ts_generator(this, function(_state) {
|
|
146
|
+
switch(_state.label){
|
|
147
|
+
case 0:
|
|
148
|
+
if (csvUri.startsWith('file://')) {
|
|
149
|
+
// Local file - stream directly from disk
|
|
150
|
+
filePath = csvUri.replace('file://', '');
|
|
151
|
+
resolvedPath = (0, _path.resolve)(filePath);
|
|
152
|
+
return [
|
|
153
|
+
2,
|
|
154
|
+
(0, _fs.createReadStream)(resolvedPath, {
|
|
155
|
+
encoding: 'utf-8'
|
|
156
|
+
})
|
|
157
|
+
];
|
|
158
|
+
}
|
|
159
|
+
if (!(csvUri.startsWith('http://') || csvUri.startsWith('https://'))) return [
|
|
160
|
+
3,
|
|
161
|
+
2
|
|
162
|
+
];
|
|
163
|
+
return [
|
|
164
|
+
4,
|
|
165
|
+
fetch(csvUri)
|
|
166
|
+
];
|
|
167
|
+
case 1:
|
|
168
|
+
response = _state.sent();
|
|
169
|
+
if (!response.ok) {
|
|
170
|
+
throw new Error("Failed to fetch CSV from ".concat(csvUri, ": ").concat(response.statusText));
|
|
171
|
+
}
|
|
172
|
+
if (!response.body) {
|
|
173
|
+
throw new Error("No response body from ".concat(csvUri));
|
|
174
|
+
}
|
|
175
|
+
// Convert web stream to Node.js stream
|
|
176
|
+
// response.body is ReadableStream<Uint8Array> from fetch API
|
|
177
|
+
// Cast to Node.js ReadableStream type for compatibility with Readable.fromWeb
|
|
178
|
+
return [
|
|
179
|
+
2,
|
|
180
|
+
_stream.Readable.fromWeb(response.body)
|
|
181
|
+
];
|
|
182
|
+
case 2:
|
|
183
|
+
throw new Error("Invalid CSV URI: ".concat(csvUri, ". Must start with file://, http://, or https://"));
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
})();
|
|
187
|
+
}
|
|
188
|
+
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/spreadsheet/csv-streaming.ts"],"sourcesContent":["/** Streaming CSV parsing utilities for memory-efficient large file processing */\n\nimport { createReadStream } from 'fs';\nimport { resolve } from 'path';\nimport { Readable } from 'stream';\nimport type { ReadableStream as NodeReadableStream } from 'stream/web';\n\n/**\n * Get readable stream from CSV URI\n *\n * Memory efficiency:\n * - file:// URIs stream directly from disk\n * - http:// URIs stream directly from response (no temp files!)\n *\n * @example\n * ```ts\n * const readStream = await getCsvReadStream(csvUri);\n * const parser = readStream.pipe(parse({ columns: true }));\n * for await (const record of parser) {\n * // Process record\n * }\n * ```\n */\nexport async function getCsvReadStream(csvUri: string): Promise<Readable> {\n if (csvUri.startsWith('file://')) {\n // Local file - stream directly from disk\n const filePath = csvUri.replace('file://', '');\n const resolvedPath = resolve(filePath);\n return createReadStream(resolvedPath, { encoding: 'utf-8' });\n }\n\n if (csvUri.startsWith('http://') || csvUri.startsWith('https://')) {\n // Remote file - stream directly from fetch response\n const response = await fetch(csvUri);\n if (!response.ok) {\n throw new Error(`Failed to fetch CSV from ${csvUri}: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error(`No response body from ${csvUri}`);\n }\n\n // Convert web stream to Node.js stream\n // response.body is ReadableStream<Uint8Array> from fetch API\n // Cast to Node.js ReadableStream type for compatibility with Readable.fromWeb\n return Readable.fromWeb(response.body as unknown as NodeReadableStream<Uint8Array>);\n }\n\n throw new Error(`Invalid CSV URI: ${csvUri}. Must start with file://, http://, or https://`);\n}\n"],"names":["getCsvReadStream","csvUri","filePath","resolvedPath","response","startsWith","replace","resolve","createReadStream","encoding","fetch","ok","Error","statusText","body","Readable","fromWeb"],"mappings":"AAAA,+EAA+E;;;;+BAuBzDA;;;eAAAA;;;kBArBW;oBACT;sBACC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBlB,SAAeA,iBAAiBC,MAAc;;YAG3CC,UACAC,cAMAC;;;;oBATR,IAAIH,OAAOI,UAAU,CAAC,YAAY;wBAChC,yCAAyC;wBACnCH,WAAWD,OAAOK,OAAO,CAAC,WAAW;wBACrCH,eAAeI,IAAAA,aAAO,EAACL;wBAC7B;;4BAAOM,IAAAA,oBAAgB,EAACL,cAAc;gCAAEM,UAAU;4BAAQ;;oBAC5D;yBAEIR,CAAAA,OAAOI,UAAU,CAAC,cAAcJ,OAAOI,UAAU,CAAC,WAAU,GAA5DJ;;;;oBAEe;;wBAAMS,MAAMT;;;oBAAvBG,WAAW;oBACjB,IAAI,CAACA,SAASO,EAAE,EAAE;wBAChB,MAAM,IAAIC,MAAM,AAAC,4BAAsCR,OAAXH,QAAO,MAAwB,OAApBG,SAASS,UAAU;oBAC5E;oBAEA,IAAI,CAACT,SAASU,IAAI,EAAE;wBAClB,MAAM,IAAIF,MAAM,AAAC,yBAA+B,OAAPX;oBAC3C;oBAEA,uCAAuC;oBACvC,6DAA6D;oBAC7D,8EAA8E;oBAC9E;;wBAAOc,gBAAQ,CAACC,OAAO,CAACZ,SAASU,IAAI;;;oBAGvC,MAAM,IAAIF,MAAM,AAAC,oBAA0B,OAAPX,QAAO;;;IAC7C"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import type { sheets_v4 } from 'googleapis';
|
|
2
|
+
import type { Logger } from '../types.js';
|
|
3
|
+
export type Cell = string | number | boolean | null | undefined;
|
|
4
|
+
export type Row = Cell[];
|
|
5
|
+
export interface ColumnMapping {
|
|
6
|
+
canonical: string;
|
|
7
|
+
sheet: string;
|
|
8
|
+
index: number;
|
|
9
|
+
}
|
|
10
|
+
export interface HeaderValidationResult {
|
|
11
|
+
valid: boolean;
|
|
12
|
+
missingColumns: string[];
|
|
13
|
+
extraColumns: string[];
|
|
14
|
+
mappings: ColumnMapping[];
|
|
15
|
+
}
|
|
16
|
+
export interface KeyGenerationStrategy {
|
|
17
|
+
keyColumns: string[];
|
|
18
|
+
useProviderIdLogic: boolean;
|
|
19
|
+
separator?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface DataPartition {
|
|
22
|
+
toAppend: Row[];
|
|
23
|
+
toUpdate: Array<{
|
|
24
|
+
row: Row;
|
|
25
|
+
existingRowIndex: number;
|
|
26
|
+
}>;
|
|
27
|
+
skippedKeys: string[];
|
|
28
|
+
}
|
|
29
|
+
export interface BatchOperationResult {
|
|
30
|
+
updatedRows: number;
|
|
31
|
+
inserted: string[];
|
|
32
|
+
rowsSkipped: number;
|
|
33
|
+
errors?: string[];
|
|
34
|
+
}
|
|
35
|
+
export interface UpsertOptions {
|
|
36
|
+
keyStrategy: KeyGenerationStrategy;
|
|
37
|
+
allowUpdates: boolean;
|
|
38
|
+
batchSize?: number;
|
|
39
|
+
valueInputOption?: 'RAW' | 'USER_ENTERED';
|
|
40
|
+
}
|
|
41
|
+
export declare function discoverHeader(sheets: sheets_v4.Sheets, spreadsheetId: string, sheetTitle: string): Promise<string[]>;
|
|
42
|
+
export declare function validateAndMapHeaders(sheetHeaders: string[], canonicalHeaders: string[], requiredColumns?: string[]): HeaderValidationResult;
|
|
43
|
+
/** Ensures consistent key generation across all functions */
|
|
44
|
+
export declare function generateRowKey(row: Row, header: string[], strategy: KeyGenerationStrategy): string;
|
|
45
|
+
export declare function validateRowKeys(rows: Row[], header: string[], strategy: KeyGenerationStrategy): {
|
|
46
|
+
valid: boolean;
|
|
47
|
+
duplicateKeys: string[];
|
|
48
|
+
keyMap: Map<string, number[]>;
|
|
49
|
+
};
|
|
50
|
+
export declare function appendRows(sheets: sheets_v4.Sheets, params: {
|
|
51
|
+
spreadsheetId: string;
|
|
52
|
+
sheetTitle: string;
|
|
53
|
+
rows?: unknown[];
|
|
54
|
+
keySet?: Set<string> | null;
|
|
55
|
+
keyColumns?: string[];
|
|
56
|
+
header?: string[];
|
|
57
|
+
logger: Logger;
|
|
58
|
+
}): Promise<{
|
|
59
|
+
updatedRows: number;
|
|
60
|
+
inserted: string[];
|
|
61
|
+
rowsSkipped?: number;
|
|
62
|
+
}>;
|
|
63
|
+
export declare function appendRows(sheets: sheets_v4.Sheets, params: {
|
|
64
|
+
spreadsheetId: string;
|
|
65
|
+
sheetRef: string;
|
|
66
|
+
rows?: unknown[];
|
|
67
|
+
keySet?: Set<string> | null;
|
|
68
|
+
keyColumns?: string[];
|
|
69
|
+
header?: string[];
|
|
70
|
+
logger: Logger;
|
|
71
|
+
}): Promise<{
|
|
72
|
+
updatedRows: number;
|
|
73
|
+
inserted: string[];
|
|
74
|
+
rowsSkipped?: number;
|
|
75
|
+
}>;
|
|
76
|
+
export declare function mapRowsToHeader({ rows, header, canonical }: {
|
|
77
|
+
rows?: Row[];
|
|
78
|
+
header?: string[];
|
|
79
|
+
canonical?: string[];
|
|
80
|
+
}): Row[];
|
|
81
|
+
export declare function snapshotHeaderAndKeys(sheets: sheets_v4.Sheets, spreadsheetId: string, sheetTitle: string, keyColumns?: string[], keyStrategy?: Partial<KeyGenerationStrategy>): Promise<{
|
|
82
|
+
header: string[];
|
|
83
|
+
keySet: Set<string>;
|
|
84
|
+
keyIndices: number[];
|
|
85
|
+
}>;
|
|
86
|
+
/** Tracks row positions for updates in addition to keys */
|
|
87
|
+
export declare function snapshotHeaderKeysAndPositions(sheets: sheets_v4.Sheets, spreadsheetId: string, sheetTitle: string, keyColumns?: string[], keyStrategy?: Partial<KeyGenerationStrategy>): Promise<{
|
|
88
|
+
header: string[];
|
|
89
|
+
keySet: Set<string>;
|
|
90
|
+
keyToRowMap: Map<string, number>;
|
|
91
|
+
keyIndices: number[];
|
|
92
|
+
}>;
|
|
93
|
+
/**
|
|
94
|
+
* Partitions data into updates vs appends based on existing keys with row position tracking
|
|
95
|
+
*/
|
|
96
|
+
export declare function partitionDataForUpsert(rows: Row[], header: string[], keyStrategy: KeyGenerationStrategy, existingKeys: Set<string>, allowUpdates?: boolean, keyToRowMap?: Map<string, number>): DataPartition;
|
|
97
|
+
/**
|
|
98
|
+
* Performs batch updates on existing rows using batchUpdate API
|
|
99
|
+
*/
|
|
100
|
+
export declare function performBatchUpdates(sheets: sheets_v4.Sheets, spreadsheetId: string, sheetTitle: string, updates: Array<{
|
|
101
|
+
row: Row;
|
|
102
|
+
existingRowIndex: number;
|
|
103
|
+
}>, header: string[], batchSize: number, valueInputOption: 'RAW' | 'USER_ENTERED'): Promise<{
|
|
104
|
+
updatedRows: number;
|
|
105
|
+
errors?: string[];
|
|
106
|
+
}>;
|
|
107
|
+
export declare function upsertByKey(sheets: sheets_v4.Sheets, { spreadsheetId, sheetTitle, sheetRef, rows, canonicalHeaders, options, logger, }: {
|
|
108
|
+
spreadsheetId: string;
|
|
109
|
+
sheetTitle?: string;
|
|
110
|
+
sheetRef?: string;
|
|
111
|
+
rows: Row[];
|
|
112
|
+
canonicalHeaders?: string[];
|
|
113
|
+
options: UpsertOptions;
|
|
114
|
+
logger: Logger;
|
|
115
|
+
}): Promise<BatchOperationResult>;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import type { sheets_v4 } from 'googleapis';
|
|
2
|
+
import type { Logger } from '../types.js';
|
|
3
|
+
export type Cell = string | number | boolean | null | undefined;
|
|
4
|
+
export type Row = Cell[];
|
|
5
|
+
export interface ColumnMapping {
|
|
6
|
+
canonical: string;
|
|
7
|
+
sheet: string;
|
|
8
|
+
index: number;
|
|
9
|
+
}
|
|
10
|
+
export interface HeaderValidationResult {
|
|
11
|
+
valid: boolean;
|
|
12
|
+
missingColumns: string[];
|
|
13
|
+
extraColumns: string[];
|
|
14
|
+
mappings: ColumnMapping[];
|
|
15
|
+
}
|
|
16
|
+
export interface KeyGenerationStrategy {
|
|
17
|
+
keyColumns: string[];
|
|
18
|
+
useProviderIdLogic: boolean;
|
|
19
|
+
separator?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface DataPartition {
|
|
22
|
+
toAppend: Row[];
|
|
23
|
+
toUpdate: Array<{
|
|
24
|
+
row: Row;
|
|
25
|
+
existingRowIndex: number;
|
|
26
|
+
}>;
|
|
27
|
+
skippedKeys: string[];
|
|
28
|
+
}
|
|
29
|
+
export interface BatchOperationResult {
|
|
30
|
+
updatedRows: number;
|
|
31
|
+
inserted: string[];
|
|
32
|
+
rowsSkipped: number;
|
|
33
|
+
errors?: string[];
|
|
34
|
+
}
|
|
35
|
+
export interface UpsertOptions {
|
|
36
|
+
keyStrategy: KeyGenerationStrategy;
|
|
37
|
+
allowUpdates: boolean;
|
|
38
|
+
batchSize?: number;
|
|
39
|
+
valueInputOption?: 'RAW' | 'USER_ENTERED';
|
|
40
|
+
}
|
|
41
|
+
export declare function discoverHeader(sheets: sheets_v4.Sheets, spreadsheetId: string, sheetTitle: string): Promise<string[]>;
|
|
42
|
+
export declare function validateAndMapHeaders(sheetHeaders: string[], canonicalHeaders: string[], requiredColumns?: string[]): HeaderValidationResult;
|
|
43
|
+
/** Ensures consistent key generation across all functions */
|
|
44
|
+
export declare function generateRowKey(row: Row, header: string[], strategy: KeyGenerationStrategy): string;
|
|
45
|
+
export declare function validateRowKeys(rows: Row[], header: string[], strategy: KeyGenerationStrategy): {
|
|
46
|
+
valid: boolean;
|
|
47
|
+
duplicateKeys: string[];
|
|
48
|
+
keyMap: Map<string, number[]>;
|
|
49
|
+
};
|
|
50
|
+
export declare function appendRows(sheets: sheets_v4.Sheets, params: {
|
|
51
|
+
spreadsheetId: string;
|
|
52
|
+
sheetTitle: string;
|
|
53
|
+
rows?: unknown[];
|
|
54
|
+
keySet?: Set<string> | null;
|
|
55
|
+
keyColumns?: string[];
|
|
56
|
+
header?: string[];
|
|
57
|
+
logger: Logger;
|
|
58
|
+
}): Promise<{
|
|
59
|
+
updatedRows: number;
|
|
60
|
+
inserted: string[];
|
|
61
|
+
rowsSkipped?: number;
|
|
62
|
+
}>;
|
|
63
|
+
export declare function appendRows(sheets: sheets_v4.Sheets, params: {
|
|
64
|
+
spreadsheetId: string;
|
|
65
|
+
sheetRef: string;
|
|
66
|
+
rows?: unknown[];
|
|
67
|
+
keySet?: Set<string> | null;
|
|
68
|
+
keyColumns?: string[];
|
|
69
|
+
header?: string[];
|
|
70
|
+
logger: Logger;
|
|
71
|
+
}): Promise<{
|
|
72
|
+
updatedRows: number;
|
|
73
|
+
inserted: string[];
|
|
74
|
+
rowsSkipped?: number;
|
|
75
|
+
}>;
|
|
76
|
+
export declare function mapRowsToHeader({ rows, header, canonical }: {
|
|
77
|
+
rows?: Row[];
|
|
78
|
+
header?: string[];
|
|
79
|
+
canonical?: string[];
|
|
80
|
+
}): Row[];
|
|
81
|
+
export declare function snapshotHeaderAndKeys(sheets: sheets_v4.Sheets, spreadsheetId: string, sheetTitle: string, keyColumns?: string[], keyStrategy?: Partial<KeyGenerationStrategy>): Promise<{
|
|
82
|
+
header: string[];
|
|
83
|
+
keySet: Set<string>;
|
|
84
|
+
keyIndices: number[];
|
|
85
|
+
}>;
|
|
86
|
+
/** Tracks row positions for updates in addition to keys */
|
|
87
|
+
export declare function snapshotHeaderKeysAndPositions(sheets: sheets_v4.Sheets, spreadsheetId: string, sheetTitle: string, keyColumns?: string[], keyStrategy?: Partial<KeyGenerationStrategy>): Promise<{
|
|
88
|
+
header: string[];
|
|
89
|
+
keySet: Set<string>;
|
|
90
|
+
keyToRowMap: Map<string, number>;
|
|
91
|
+
keyIndices: number[];
|
|
92
|
+
}>;
|
|
93
|
+
/**
|
|
94
|
+
* Partitions data into updates vs appends based on existing keys with row position tracking
|
|
95
|
+
*/
|
|
96
|
+
export declare function partitionDataForUpsert(rows: Row[], header: string[], keyStrategy: KeyGenerationStrategy, existingKeys: Set<string>, allowUpdates?: boolean, keyToRowMap?: Map<string, number>): DataPartition;
|
|
97
|
+
/**
|
|
98
|
+
* Performs batch updates on existing rows using batchUpdate API
|
|
99
|
+
*/
|
|
100
|
+
export declare function performBatchUpdates(sheets: sheets_v4.Sheets, spreadsheetId: string, sheetTitle: string, updates: Array<{
|
|
101
|
+
row: Row;
|
|
102
|
+
existingRowIndex: number;
|
|
103
|
+
}>, header: string[], batchSize: number, valueInputOption: 'RAW' | 'USER_ENTERED'): Promise<{
|
|
104
|
+
updatedRows: number;
|
|
105
|
+
errors?: string[];
|
|
106
|
+
}>;
|
|
107
|
+
export declare function upsertByKey(sheets: sheets_v4.Sheets, { spreadsheetId, sheetTitle, sheetRef, rows, canonicalHeaders, options, logger, }: {
|
|
108
|
+
spreadsheetId: string;
|
|
109
|
+
sheetTitle?: string;
|
|
110
|
+
sheetRef?: string;
|
|
111
|
+
rows: Row[];
|
|
112
|
+
canonicalHeaders?: string[];
|
|
113
|
+
options: UpsertOptions;
|
|
114
|
+
logger: Logger;
|
|
115
|
+
}): Promise<BatchOperationResult>;
|