@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,672 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Range Operations Utilities for Google Sheets
|
|
3
|
+
*
|
|
4
|
+
* This module provides comprehensive utilities for working with A1 notation,
|
|
5
|
+
* range parsing, batch operations, and range validation in Google Sheets.
|
|
6
|
+
*
|
|
7
|
+
* Key features:
|
|
8
|
+
* - A1 notation validation and parsing
|
|
9
|
+
* - Range manipulation and calculation utilities
|
|
10
|
+
* - Batch operation builders for Google Sheets API
|
|
11
|
+
* - Cell count and dimension calculations
|
|
12
|
+
* - Range conflict detection for batch operations
|
|
13
|
+
* - Google Sheets limits validation and enforcement
|
|
14
|
+
*/ "use strict";
|
|
15
|
+
Object.defineProperty(exports, "__esModule", {
|
|
16
|
+
value: true
|
|
17
|
+
});
|
|
18
|
+
function _export(target, all) {
|
|
19
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
_export(exports, {
|
|
25
|
+
get GOOGLE_SHEETS_LIMITS () {
|
|
26
|
+
return GOOGLE_SHEETS_LIMITS;
|
|
27
|
+
},
|
|
28
|
+
get buildValuesBatchUpdateRequest () {
|
|
29
|
+
return buildValuesBatchUpdateRequest;
|
|
30
|
+
},
|
|
31
|
+
get calculateRangeDimensions () {
|
|
32
|
+
return calculateRangeDimensions;
|
|
33
|
+
},
|
|
34
|
+
get calculateTotalCells () {
|
|
35
|
+
return calculateTotalCells;
|
|
36
|
+
},
|
|
37
|
+
get columnIndexToString () {
|
|
38
|
+
return columnIndexToString;
|
|
39
|
+
},
|
|
40
|
+
get columnStringToIndex () {
|
|
41
|
+
return columnStringToIndex;
|
|
42
|
+
},
|
|
43
|
+
get detectRangeConflicts () {
|
|
44
|
+
return detectRangeConflicts;
|
|
45
|
+
},
|
|
46
|
+
get expandRange () {
|
|
47
|
+
return expandRange;
|
|
48
|
+
},
|
|
49
|
+
get getRangeIntersection () {
|
|
50
|
+
return getRangeIntersection;
|
|
51
|
+
},
|
|
52
|
+
get isValidA1Notation () {
|
|
53
|
+
return isValidA1Notation;
|
|
54
|
+
},
|
|
55
|
+
get parseA1Notation () {
|
|
56
|
+
return parseA1Notation;
|
|
57
|
+
},
|
|
58
|
+
get parseCellReference () {
|
|
59
|
+
return parseCellReference;
|
|
60
|
+
},
|
|
61
|
+
get rangeReferenceToGridRange () {
|
|
62
|
+
return rangeReferenceToGridRange;
|
|
63
|
+
},
|
|
64
|
+
get rangeToA1Notation () {
|
|
65
|
+
return rangeToA1Notation;
|
|
66
|
+
},
|
|
67
|
+
get rangesOverlap () {
|
|
68
|
+
return rangesOverlap;
|
|
69
|
+
},
|
|
70
|
+
get splitRangeIntoChunks () {
|
|
71
|
+
return splitRangeIntoChunks;
|
|
72
|
+
},
|
|
73
|
+
get validateA1Notation () {
|
|
74
|
+
return validateA1Notation;
|
|
75
|
+
},
|
|
76
|
+
get validateBatchRanges () {
|
|
77
|
+
return validateBatchRanges;
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
var _columnutilities = require("./column-utilities.js");
|
|
81
|
+
function _array_like_to_array(arr, len) {
|
|
82
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
83
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
84
|
+
return arr2;
|
|
85
|
+
}
|
|
86
|
+
function _array_with_holes(arr) {
|
|
87
|
+
if (Array.isArray(arr)) return arr;
|
|
88
|
+
}
|
|
89
|
+
function _iterable_to_array_limit(arr, i) {
|
|
90
|
+
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
91
|
+
if (_i == null) return;
|
|
92
|
+
var _arr = [];
|
|
93
|
+
var _n = true;
|
|
94
|
+
var _d = false;
|
|
95
|
+
var _s, _e;
|
|
96
|
+
try {
|
|
97
|
+
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
|
|
98
|
+
_arr.push(_s.value);
|
|
99
|
+
if (i && _arr.length === i) break;
|
|
100
|
+
}
|
|
101
|
+
} catch (err) {
|
|
102
|
+
_d = true;
|
|
103
|
+
_e = err;
|
|
104
|
+
} finally{
|
|
105
|
+
try {
|
|
106
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
107
|
+
} finally{
|
|
108
|
+
if (_d) throw _e;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return _arr;
|
|
112
|
+
}
|
|
113
|
+
function _non_iterable_rest() {
|
|
114
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
115
|
+
}
|
|
116
|
+
function _sliced_to_array(arr, i) {
|
|
117
|
+
return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
|
|
118
|
+
}
|
|
119
|
+
function _unsupported_iterable_to_array(o, minLen) {
|
|
120
|
+
if (!o) return;
|
|
121
|
+
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
122
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
123
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
124
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
125
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
126
|
+
}
|
|
127
|
+
var GOOGLE_SHEETS_LIMITS = {
|
|
128
|
+
MAX_ROWS: 10000000,
|
|
129
|
+
MAX_COLUMNS: 18278,
|
|
130
|
+
MAX_CELLS: 10000000,
|
|
131
|
+
MAX_BATCH_REQUESTS: 1000,
|
|
132
|
+
MAX_DIMENSION_BATCH_REQUESTS: 100
|
|
133
|
+
};
|
|
134
|
+
function isValidA1Notation(notation) {
|
|
135
|
+
if (!notation || typeof notation !== 'string') {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
// Use the same regex pattern as in the schema
|
|
139
|
+
var a1Pattern = /^(?:[A-Z]{1,3}(?:[1-9]\d{0,6}|10000000)(?::[A-Z]{1,3}(?:[1-9]\d{0,6}|10000000))?|[A-Z]{1,3}:[A-Z]{1,3}|(?:[1-9]\d{0,6}|10000000):(?:[1-9]\d{0,6}|10000000))$/;
|
|
140
|
+
if (!a1Pattern.test(notation)) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
// Additional validation for Google Sheets limits
|
|
144
|
+
var parts = notation.split(':');
|
|
145
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
146
|
+
try {
|
|
147
|
+
for(var _iterator = parts[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
148
|
+
var part = _step.value;
|
|
149
|
+
// Check cell reference
|
|
150
|
+
var cellMatch = part.match(/^([A-Z]{1,3})([1-9]\d{0,6}|10000000)$/);
|
|
151
|
+
if (cellMatch && cellMatch[1] && cellMatch[2]) {
|
|
152
|
+
var _cellMatch = _sliced_to_array(cellMatch, 3), colStr = _cellMatch[1], rowStr = _cellMatch[2];
|
|
153
|
+
// Validate column
|
|
154
|
+
var colNum = columnStringToIndex(colStr);
|
|
155
|
+
if (colNum > GOOGLE_SHEETS_LIMITS.MAX_COLUMNS) {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
// Validate row
|
|
159
|
+
var rowNum = parseInt(rowStr, 10);
|
|
160
|
+
if (rowNum > GOOGLE_SHEETS_LIMITS.MAX_ROWS) {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Check column reference
|
|
165
|
+
var colMatch = part.match(/^([A-Z]{1,3})$/);
|
|
166
|
+
if (colMatch && colMatch[1]) {
|
|
167
|
+
var colNum1 = columnStringToIndex(colMatch[1]);
|
|
168
|
+
if (colNum1 > GOOGLE_SHEETS_LIMITS.MAX_COLUMNS) {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Check row reference
|
|
173
|
+
var rowMatch = part.match(/^([1-9]\d{0,6}|10000000)$/);
|
|
174
|
+
if (rowMatch && rowMatch[1]) {
|
|
175
|
+
var rowNum1 = parseInt(rowMatch[1], 10);
|
|
176
|
+
if (rowNum1 > GOOGLE_SHEETS_LIMITS.MAX_ROWS) {
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
} catch (err) {
|
|
182
|
+
_didIteratorError = true;
|
|
183
|
+
_iteratorError = err;
|
|
184
|
+
} finally{
|
|
185
|
+
try {
|
|
186
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
187
|
+
_iterator.return();
|
|
188
|
+
}
|
|
189
|
+
} finally{
|
|
190
|
+
if (_didIteratorError) {
|
|
191
|
+
throw _iteratorError;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
function validateA1Notation(notation) {
|
|
198
|
+
if (!isValidA1Notation(notation)) {
|
|
199
|
+
throw new Error('Invalid A1 notation: "'.concat(notation, '". Valid formats: A1, A1:B2, A:B, 1:2'));
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
function columnStringToIndex(colStr) {
|
|
203
|
+
var colNum = 0;
|
|
204
|
+
for(var i = 0; i < colStr.length; i++){
|
|
205
|
+
colNum = colNum * 26 + (colStr.charCodeAt(i) - 64);
|
|
206
|
+
}
|
|
207
|
+
return colNum;
|
|
208
|
+
}
|
|
209
|
+
function columnIndexToString(colIndex) {
|
|
210
|
+
return (0, _columnutilities.a1Col)(colIndex);
|
|
211
|
+
}
|
|
212
|
+
function parseCellReference(cellRef) {
|
|
213
|
+
var match = cellRef.match(/^([A-Z]{1,3})([1-9]\d{0,6}|10000000)$/);
|
|
214
|
+
if (!match || !match[1] || !match[2]) {
|
|
215
|
+
throw new Error("Invalid cell reference: ".concat(cellRef));
|
|
216
|
+
}
|
|
217
|
+
var _match = _sliced_to_array(match, 3), column = _match[1], rowStr = _match[2];
|
|
218
|
+
var row = parseInt(rowStr, 10);
|
|
219
|
+
var columnIndex = columnStringToIndex(column);
|
|
220
|
+
return {
|
|
221
|
+
column: column,
|
|
222
|
+
columnIndex: columnIndex,
|
|
223
|
+
row: row
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
function parseA1Notation(notation) {
|
|
227
|
+
validateA1Notation(notation);
|
|
228
|
+
var parts = notation.split(':');
|
|
229
|
+
if (parts.length === 1) {
|
|
230
|
+
var part = parts[0];
|
|
231
|
+
if (!part) {
|
|
232
|
+
throw new Error('Invalid A1 notation: empty part after split');
|
|
233
|
+
}
|
|
234
|
+
// Single cell reference (e.g., A1)
|
|
235
|
+
var cellMatch = part.match(/^([A-Z]{1,3})([1-9]\d{0,6}|10000000)$/);
|
|
236
|
+
if (cellMatch && cellMatch[1] && cellMatch[2]) {
|
|
237
|
+
var startCell = parseCellReference(part);
|
|
238
|
+
return {
|
|
239
|
+
type: 'cell',
|
|
240
|
+
startCell: startCell,
|
|
241
|
+
endCell: startCell
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
// Single column reference (e.g., A)
|
|
245
|
+
var colMatch = part.match(/^([A-Z]{1,3})$/);
|
|
246
|
+
if (colMatch && colMatch[1]) {
|
|
247
|
+
var column = colMatch[1];
|
|
248
|
+
var columnIndex = columnStringToIndex(column);
|
|
249
|
+
return {
|
|
250
|
+
type: 'column',
|
|
251
|
+
startColumn: column,
|
|
252
|
+
endColumn: column,
|
|
253
|
+
startColumnIndex: columnIndex,
|
|
254
|
+
endColumnIndex: columnIndex
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
// Single row reference (e.g., 1)
|
|
258
|
+
var rowMatch = part.match(/^([1-9]\d{0,6}|10000000)$/);
|
|
259
|
+
if (rowMatch && rowMatch[1]) {
|
|
260
|
+
var row = parseInt(rowMatch[1], 10);
|
|
261
|
+
return {
|
|
262
|
+
type: 'row',
|
|
263
|
+
startRow: row,
|
|
264
|
+
endRow: row
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
if (parts.length === 2 && parts[0] && parts[1]) {
|
|
269
|
+
var _parts = _sliced_to_array(parts, 2), start = _parts[0], end = _parts[1];
|
|
270
|
+
// Cell range (e.g., A1:B5)
|
|
271
|
+
var startCellMatch = start.match(/^([A-Z]{1,3})([1-9]\d{0,6}|10000000)$/);
|
|
272
|
+
var endCellMatch = end.match(/^([A-Z]{1,3})([1-9]\d{0,6}|10000000)$/);
|
|
273
|
+
if (startCellMatch && endCellMatch && startCellMatch[1] && startCellMatch[2] && endCellMatch[1] && endCellMatch[2]) {
|
|
274
|
+
var startCell1 = parseCellReference(start);
|
|
275
|
+
var endCell = parseCellReference(end);
|
|
276
|
+
return {
|
|
277
|
+
type: 'range',
|
|
278
|
+
startCell: startCell1,
|
|
279
|
+
endCell: endCell
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
// Column range (e.g., A:B)
|
|
283
|
+
var startColMatch = start.match(/^([A-Z]{1,3})$/);
|
|
284
|
+
var endColMatch = end.match(/^([A-Z]{1,3})$/);
|
|
285
|
+
if (startColMatch && endColMatch && startColMatch[1] && endColMatch[1]) {
|
|
286
|
+
var startColumn = startColMatch[1];
|
|
287
|
+
var endColumn = endColMatch[1];
|
|
288
|
+
var startColumnIndex = columnStringToIndex(startColumn);
|
|
289
|
+
var endColumnIndex = columnStringToIndex(endColumn);
|
|
290
|
+
return {
|
|
291
|
+
type: 'column',
|
|
292
|
+
startColumn: startColumn,
|
|
293
|
+
endColumn: endColumn,
|
|
294
|
+
startColumnIndex: startColumnIndex,
|
|
295
|
+
endColumnIndex: endColumnIndex
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
// Row range (e.g., 1:5)
|
|
299
|
+
var startRowMatch = start.match(/^([1-9]\d{0,6}|10000000)$/);
|
|
300
|
+
var endRowMatch = end.match(/^([1-9]\d{0,6}|10000000)$/);
|
|
301
|
+
if (startRowMatch && endRowMatch && startRowMatch[1] && endRowMatch[1]) {
|
|
302
|
+
var startRow = parseInt(startRowMatch[1], 10);
|
|
303
|
+
var endRow = parseInt(endRowMatch[1], 10);
|
|
304
|
+
return {
|
|
305
|
+
type: 'row',
|
|
306
|
+
startRow: startRow,
|
|
307
|
+
endRow: endRow
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
throw new Error("Unable to parse A1 notation: ".concat(notation));
|
|
312
|
+
}
|
|
313
|
+
function rangeToA1Notation(range) {
|
|
314
|
+
switch(range.type){
|
|
315
|
+
case 'cell':
|
|
316
|
+
if (!range.startCell) throw new Error('Invalid cell range: missing startCell');
|
|
317
|
+
return "".concat(range.startCell.column).concat(range.startCell.row);
|
|
318
|
+
case 'range':
|
|
319
|
+
if (!range.startCell || !range.endCell) throw new Error('Invalid range: missing start or end cell');
|
|
320
|
+
return "".concat(range.startCell.column).concat(range.startCell.row, ":").concat(range.endCell.column).concat(range.endCell.row);
|
|
321
|
+
case 'column':
|
|
322
|
+
if (!range.startColumn || !range.endColumn) throw new Error('Invalid column range: missing start or end column');
|
|
323
|
+
if (range.startColumn === range.endColumn) {
|
|
324
|
+
return range.startColumn;
|
|
325
|
+
}
|
|
326
|
+
return "".concat(range.startColumn, ":").concat(range.endColumn);
|
|
327
|
+
case 'row':
|
|
328
|
+
if (range.startRow === undefined || range.endRow === undefined) throw new Error('Invalid row range: missing start or end row');
|
|
329
|
+
if (range.startRow === range.endRow) {
|
|
330
|
+
return range.startRow.toString();
|
|
331
|
+
}
|
|
332
|
+
return "".concat(range.startRow, ":").concat(range.endRow);
|
|
333
|
+
default:
|
|
334
|
+
throw new Error("Unknown range type: ".concat(range.type));
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
function calculateRangeDimensions(notation) {
|
|
338
|
+
var range = parseA1Notation(notation);
|
|
339
|
+
switch(range.type){
|
|
340
|
+
case 'cell':
|
|
341
|
+
return {
|
|
342
|
+
rows: 1,
|
|
343
|
+
columns: 1,
|
|
344
|
+
cells: 1
|
|
345
|
+
};
|
|
346
|
+
case 'range':
|
|
347
|
+
{
|
|
348
|
+
if (!range.startCell || !range.endCell) throw new Error('Invalid range: missing cells');
|
|
349
|
+
var rows = range.endCell.row - range.startCell.row + 1;
|
|
350
|
+
var columns = range.endCell.columnIndex - range.startCell.columnIndex + 1;
|
|
351
|
+
return {
|
|
352
|
+
rows: rows,
|
|
353
|
+
columns: columns,
|
|
354
|
+
cells: rows * columns
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
case 'column':
|
|
358
|
+
{
|
|
359
|
+
if (range.startColumnIndex === undefined || range.endColumnIndex === undefined) {
|
|
360
|
+
throw new Error('Invalid column range: missing column indices');
|
|
361
|
+
}
|
|
362
|
+
var columnCount = range.endColumnIndex - range.startColumnIndex + 1;
|
|
363
|
+
return {
|
|
364
|
+
rows: GOOGLE_SHEETS_LIMITS.MAX_ROWS,
|
|
365
|
+
columns: columnCount,
|
|
366
|
+
cells: GOOGLE_SHEETS_LIMITS.MAX_ROWS * columnCount
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
case 'row':
|
|
370
|
+
{
|
|
371
|
+
if (range.startRow === undefined || range.endRow === undefined) {
|
|
372
|
+
throw new Error('Invalid row range: missing row numbers');
|
|
373
|
+
}
|
|
374
|
+
var rowCount = range.endRow - range.startRow + 1;
|
|
375
|
+
return {
|
|
376
|
+
rows: rowCount,
|
|
377
|
+
columns: GOOGLE_SHEETS_LIMITS.MAX_COLUMNS,
|
|
378
|
+
cells: rowCount * GOOGLE_SHEETS_LIMITS.MAX_COLUMNS
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
default:
|
|
382
|
+
throw new Error("Unknown range type: ".concat(range.type));
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
function calculateTotalCells(ranges) {
|
|
386
|
+
return ranges.reduce(function(total, range) {
|
|
387
|
+
var dimensions = calculateRangeDimensions(range);
|
|
388
|
+
return total + dimensions.cells;
|
|
389
|
+
}, 0);
|
|
390
|
+
}
|
|
391
|
+
function buildValuesBatchUpdateRequest(requests, sheetTitle) {
|
|
392
|
+
var options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
|
|
393
|
+
// Validate all ranges first
|
|
394
|
+
requests.forEach(function(req, index) {
|
|
395
|
+
try {
|
|
396
|
+
validateA1Notation(req.range);
|
|
397
|
+
} catch (error) {
|
|
398
|
+
throw new Error("Invalid range in request ".concat(index, ": ").concat(error));
|
|
399
|
+
}
|
|
400
|
+
});
|
|
401
|
+
// Calculate total cells for validation
|
|
402
|
+
var totalCells = calculateTotalCells(requests.map(function(r) {
|
|
403
|
+
return r.range;
|
|
404
|
+
}));
|
|
405
|
+
if (totalCells > GOOGLE_SHEETS_LIMITS.MAX_CELLS) {
|
|
406
|
+
throw new Error("Batch update exceeds maximum cells limit: ".concat(totalCells, " > ").concat(GOOGLE_SHEETS_LIMITS.MAX_CELLS));
|
|
407
|
+
}
|
|
408
|
+
// Build the request
|
|
409
|
+
var data = requests.map(function(req) {
|
|
410
|
+
return {
|
|
411
|
+
range: "".concat(sheetTitle, "!").concat(req.range),
|
|
412
|
+
values: req.values,
|
|
413
|
+
majorDimension: req.majorDimension || 'ROWS'
|
|
414
|
+
};
|
|
415
|
+
});
|
|
416
|
+
return {
|
|
417
|
+
valueInputOption: options.valueInputOption || 'USER_ENTERED',
|
|
418
|
+
data: data,
|
|
419
|
+
includeValuesInResponse: options.includeValuesInResponse || false,
|
|
420
|
+
responseDateTimeRenderOption: options.responseDateTimeRenderOption || 'FORMATTED_STRING',
|
|
421
|
+
responseValueRenderOption: options.responseValueRenderOption || 'FORMATTED_VALUE'
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
function rangesOverlap(range1, range2) {
|
|
425
|
+
try {
|
|
426
|
+
var parsed1 = parseA1Notation(range1);
|
|
427
|
+
var parsed2 = parseA1Notation(range2);
|
|
428
|
+
// Different types might still overlap, so we need to normalize to cell ranges
|
|
429
|
+
var normalized1 = normalizeRangeToBounds(parsed1);
|
|
430
|
+
var normalized2 = normalizeRangeToBounds(parsed2);
|
|
431
|
+
// Check for overlap
|
|
432
|
+
return !(normalized1.endRow < normalized2.startRow || normalized2.endRow < normalized1.startRow || normalized1.endCol < normalized2.startCol || normalized2.endCol < normalized1.startCol);
|
|
433
|
+
} catch (unused) {
|
|
434
|
+
// If we can't parse the ranges, assume no overlap
|
|
435
|
+
return false;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Normalizes a range to bounds for overlap checking
|
|
440
|
+
*/ function normalizeRangeToBounds(range) {
|
|
441
|
+
switch(range.type){
|
|
442
|
+
case 'cell':
|
|
443
|
+
if (!range.startCell) throw new Error('Invalid cell range');
|
|
444
|
+
return {
|
|
445
|
+
startRow: range.startCell.row,
|
|
446
|
+
endRow: range.startCell.row,
|
|
447
|
+
startCol: range.startCell.columnIndex,
|
|
448
|
+
endCol: range.startCell.columnIndex
|
|
449
|
+
};
|
|
450
|
+
case 'range':
|
|
451
|
+
if (!range.startCell || !range.endCell) throw new Error('Invalid range');
|
|
452
|
+
return {
|
|
453
|
+
startRow: range.startCell.row,
|
|
454
|
+
endRow: range.endCell.row,
|
|
455
|
+
startCol: range.startCell.columnIndex,
|
|
456
|
+
endCol: range.endCell.columnIndex
|
|
457
|
+
};
|
|
458
|
+
case 'column':
|
|
459
|
+
if (range.startColumnIndex === undefined || range.endColumnIndex === undefined) {
|
|
460
|
+
throw new Error('Invalid column range');
|
|
461
|
+
}
|
|
462
|
+
return {
|
|
463
|
+
startRow: 1,
|
|
464
|
+
endRow: GOOGLE_SHEETS_LIMITS.MAX_ROWS,
|
|
465
|
+
startCol: range.startColumnIndex,
|
|
466
|
+
endCol: range.endColumnIndex
|
|
467
|
+
};
|
|
468
|
+
case 'row':
|
|
469
|
+
if (range.startRow === undefined || range.endRow === undefined) {
|
|
470
|
+
throw new Error('Invalid row range');
|
|
471
|
+
}
|
|
472
|
+
return {
|
|
473
|
+
startRow: range.startRow,
|
|
474
|
+
endRow: range.endRow,
|
|
475
|
+
startCol: 1,
|
|
476
|
+
endCol: GOOGLE_SHEETS_LIMITS.MAX_COLUMNS
|
|
477
|
+
};
|
|
478
|
+
default:
|
|
479
|
+
throw new Error("Unknown range type: ".concat(range.type));
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
function detectRangeConflicts(ranges) {
|
|
483
|
+
var conflicts = [];
|
|
484
|
+
for(var i = 0; i < ranges.length; i++){
|
|
485
|
+
for(var j = i + 1; j < ranges.length; j++){
|
|
486
|
+
var range1 = ranges[i];
|
|
487
|
+
var range2 = ranges[j];
|
|
488
|
+
if (!range1 || !range2) continue;
|
|
489
|
+
if (rangesOverlap(range1, range2)) {
|
|
490
|
+
conflicts.push({
|
|
491
|
+
range1: range1,
|
|
492
|
+
range2: range2,
|
|
493
|
+
conflictType: 'overlap',
|
|
494
|
+
description: "Ranges ".concat(range1, " and ").concat(range2, " overlap")
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
return conflicts;
|
|
500
|
+
}
|
|
501
|
+
function validateBatchRanges(ranges) {
|
|
502
|
+
var errors = [];
|
|
503
|
+
var warnings = [];
|
|
504
|
+
var totalCells = 0;
|
|
505
|
+
// Validate each range
|
|
506
|
+
ranges.forEach(function(range, index) {
|
|
507
|
+
try {
|
|
508
|
+
validateA1Notation(range);
|
|
509
|
+
var dimensions = calculateRangeDimensions(range);
|
|
510
|
+
totalCells += dimensions.cells;
|
|
511
|
+
// Check for very large ranges that might cause performance issues
|
|
512
|
+
if (dimensions.cells > 1000000) {
|
|
513
|
+
warnings.push("Range ".concat(index + 1, " (").concat(range, ") affects ").concat(dimensions.cells.toLocaleString(), " cells, which may impact performance"));
|
|
514
|
+
}
|
|
515
|
+
} catch (error) {
|
|
516
|
+
errors.push("Range ".concat(index + 1, " (").concat(range, "): ").concat(error));
|
|
517
|
+
}
|
|
518
|
+
});
|
|
519
|
+
// Check batch size limits
|
|
520
|
+
if (ranges.length > GOOGLE_SHEETS_LIMITS.MAX_BATCH_REQUESTS) {
|
|
521
|
+
errors.push("Too many ranges: ".concat(ranges.length, " > ").concat(GOOGLE_SHEETS_LIMITS.MAX_BATCH_REQUESTS));
|
|
522
|
+
}
|
|
523
|
+
// Check total cells limit
|
|
524
|
+
if (totalCells > GOOGLE_SHEETS_LIMITS.MAX_CELLS) {
|
|
525
|
+
errors.push("Total cells exceed limit: ".concat(totalCells.toLocaleString(), " > ").concat(GOOGLE_SHEETS_LIMITS.MAX_CELLS.toLocaleString()));
|
|
526
|
+
}
|
|
527
|
+
// Check for conflicts
|
|
528
|
+
var conflicts = detectRangeConflicts(ranges);
|
|
529
|
+
conflicts.forEach(function(conflict) {
|
|
530
|
+
warnings.push(conflict.description);
|
|
531
|
+
});
|
|
532
|
+
return {
|
|
533
|
+
valid: errors.length === 0,
|
|
534
|
+
errors: errors,
|
|
535
|
+
warnings: warnings,
|
|
536
|
+
totalCells: totalCells
|
|
537
|
+
};
|
|
538
|
+
}
|
|
539
|
+
function expandRange(notation, expandRows, expandCols) {
|
|
540
|
+
var range = parseA1Notation(notation);
|
|
541
|
+
if (range.type === 'cell' && range.startCell) {
|
|
542
|
+
var newEndRow = Math.min(range.startCell.row + expandRows, GOOGLE_SHEETS_LIMITS.MAX_ROWS);
|
|
543
|
+
var newEndCol = Math.min(range.startCell.columnIndex + expandCols, GOOGLE_SHEETS_LIMITS.MAX_COLUMNS);
|
|
544
|
+
var newEndColStr = columnIndexToString(newEndCol);
|
|
545
|
+
if (expandRows === 0 && expandCols === 0) {
|
|
546
|
+
return notation;
|
|
547
|
+
}
|
|
548
|
+
return "".concat(range.startCell.column).concat(range.startCell.row, ":").concat(newEndColStr).concat(newEndRow);
|
|
549
|
+
}
|
|
550
|
+
if (range.type === 'range' && range.startCell && range.endCell) {
|
|
551
|
+
var newEndRow1 = Math.min(range.endCell.row + expandRows, GOOGLE_SHEETS_LIMITS.MAX_ROWS);
|
|
552
|
+
var newEndCol1 = Math.min(range.endCell.columnIndex + expandCols, GOOGLE_SHEETS_LIMITS.MAX_COLUMNS);
|
|
553
|
+
var newEndColStr1 = columnIndexToString(newEndCol1);
|
|
554
|
+
return "".concat(range.startCell.column).concat(range.startCell.row, ":").concat(newEndColStr1).concat(newEndRow1);
|
|
555
|
+
}
|
|
556
|
+
// For row and column ranges, expansion doesn't make sense in the same way
|
|
557
|
+
return notation;
|
|
558
|
+
}
|
|
559
|
+
function getRangeIntersection(range1, range2) {
|
|
560
|
+
try {
|
|
561
|
+
var parsed1 = parseA1Notation(range1);
|
|
562
|
+
var parsed2 = parseA1Notation(range2);
|
|
563
|
+
var bounds1 = normalizeRangeToBounds(parsed1);
|
|
564
|
+
var bounds2 = normalizeRangeToBounds(parsed2);
|
|
565
|
+
// Check if they overlap
|
|
566
|
+
if (!rangesOverlap(range1, range2)) {
|
|
567
|
+
return null;
|
|
568
|
+
}
|
|
569
|
+
// Calculate intersection bounds
|
|
570
|
+
var startRow = Math.max(bounds1.startRow, bounds2.startRow);
|
|
571
|
+
var endRow = Math.min(bounds1.endRow, bounds2.endRow);
|
|
572
|
+
var startCol = Math.max(bounds1.startCol, bounds2.startCol);
|
|
573
|
+
var endCol = Math.min(bounds1.endCol, bounds2.endCol);
|
|
574
|
+
var startColStr = columnIndexToString(startCol);
|
|
575
|
+
var endColStr = columnIndexToString(endCol);
|
|
576
|
+
if (startRow === endRow && startCol === endCol) {
|
|
577
|
+
return "".concat(startColStr).concat(startRow);
|
|
578
|
+
}
|
|
579
|
+
return "".concat(startColStr).concat(startRow, ":").concat(endColStr).concat(endRow);
|
|
580
|
+
} catch (unused) {
|
|
581
|
+
return null;
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
function splitRangeIntoChunks(notation) {
|
|
585
|
+
var maxCellsPerChunk = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 100000;
|
|
586
|
+
var range = parseA1Notation(notation);
|
|
587
|
+
var dimensions = calculateRangeDimensions(notation);
|
|
588
|
+
if (dimensions.cells <= maxCellsPerChunk) {
|
|
589
|
+
return [
|
|
590
|
+
notation
|
|
591
|
+
];
|
|
592
|
+
}
|
|
593
|
+
var chunks = [];
|
|
594
|
+
if (range.type === 'range' && range.startCell && range.endCell) {
|
|
595
|
+
var totalRows = range.endCell.row - range.startCell.row + 1;
|
|
596
|
+
var totalCols = range.endCell.columnIndex - range.startCell.columnIndex + 1;
|
|
597
|
+
// Calculate chunk size based on max cells
|
|
598
|
+
var cellsPerRow = totalCols;
|
|
599
|
+
var maxRowsPerChunk = Math.floor(maxCellsPerChunk / cellsPerRow);
|
|
600
|
+
if (maxRowsPerChunk >= 1) {
|
|
601
|
+
// Split by rows
|
|
602
|
+
for(var currentRow = range.startCell.row; currentRow <= range.endCell.row; currentRow += maxRowsPerChunk){
|
|
603
|
+
var chunkEndRow = Math.min(currentRow + maxRowsPerChunk - 1, range.endCell.row);
|
|
604
|
+
var chunkRange = "".concat(range.startCell.column).concat(currentRow, ":").concat(range.endCell.column).concat(chunkEndRow);
|
|
605
|
+
chunks.push(chunkRange);
|
|
606
|
+
}
|
|
607
|
+
} else {
|
|
608
|
+
// If even one row is too big, split by columns
|
|
609
|
+
var maxColsPerChunk = Math.floor(maxCellsPerChunk / totalRows);
|
|
610
|
+
for(var currentCol = range.startCell.columnIndex; currentCol <= range.endCell.columnIndex; currentCol += maxColsPerChunk){
|
|
611
|
+
var chunkEndCol = Math.min(currentCol + maxColsPerChunk - 1, range.endCell.columnIndex);
|
|
612
|
+
var startColStr = columnIndexToString(currentCol);
|
|
613
|
+
var endColStr = columnIndexToString(chunkEndCol);
|
|
614
|
+
var chunkRange1 = "".concat(startColStr).concat(range.startCell.row, ":").concat(endColStr).concat(range.endCell.row);
|
|
615
|
+
chunks.push(chunkRange1);
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
} else {
|
|
619
|
+
// For other range types, just return the original range
|
|
620
|
+
// (column and row ranges are already at their limits)
|
|
621
|
+
chunks.push(notation);
|
|
622
|
+
}
|
|
623
|
+
return chunks;
|
|
624
|
+
}
|
|
625
|
+
function rangeReferenceToGridRange(rangeRef, sheetId) {
|
|
626
|
+
if (rangeRef.type === 'cell' || rangeRef.type === 'range') {
|
|
627
|
+
// For cell and range types, extract from startCell/endCell
|
|
628
|
+
if (!rangeRef.startCell || !rangeRef.endCell) {
|
|
629
|
+
throw new Error("Invalid ".concat(rangeRef.type, " range: missing start or end cell"));
|
|
630
|
+
}
|
|
631
|
+
return {
|
|
632
|
+
sheetId: sheetId,
|
|
633
|
+
// Convert 1-based row to 0-based startRowIndex
|
|
634
|
+
startRowIndex: rangeRef.startCell.row - 1,
|
|
635
|
+
// endRowIndex is exclusive (so row 5 becomes endRowIndex 5)
|
|
636
|
+
endRowIndex: rangeRef.endCell.row,
|
|
637
|
+
// Convert 1-based column index to 0-based startColumnIndex
|
|
638
|
+
startColumnIndex: rangeRef.startCell.columnIndex - 1,
|
|
639
|
+
// endColumnIndex is exclusive
|
|
640
|
+
endColumnIndex: rangeRef.endCell.columnIndex
|
|
641
|
+
};
|
|
642
|
+
}
|
|
643
|
+
if (rangeRef.type === 'row') {
|
|
644
|
+
// For row types, use startRow/endRow and omit column indices for full row width
|
|
645
|
+
if (rangeRef.startRow === undefined || rangeRef.endRow === undefined) {
|
|
646
|
+
throw new Error('Invalid row range: missing start or end row');
|
|
647
|
+
}
|
|
648
|
+
return {
|
|
649
|
+
sheetId: sheetId,
|
|
650
|
+
// Convert 1-based row to 0-based startRowIndex
|
|
651
|
+
startRowIndex: rangeRef.startRow - 1,
|
|
652
|
+
// endRowIndex is exclusive
|
|
653
|
+
endRowIndex: rangeRef.endRow
|
|
654
|
+
};
|
|
655
|
+
}
|
|
656
|
+
if (rangeRef.type === 'column') {
|
|
657
|
+
// For column types, use startColumnIndex/endColumnIndex and omit row indices for full column height
|
|
658
|
+
if (rangeRef.startColumnIndex === undefined || rangeRef.endColumnIndex === undefined) {
|
|
659
|
+
throw new Error('Invalid column range: missing start or end column index');
|
|
660
|
+
}
|
|
661
|
+
return {
|
|
662
|
+
sheetId: sheetId,
|
|
663
|
+
// Omit startRowIndex and endRowIndex to apply to all rows
|
|
664
|
+
// Convert 1-based column index to 0-based startColumnIndex
|
|
665
|
+
startColumnIndex: rangeRef.startColumnIndex - 1,
|
|
666
|
+
// endColumnIndex is exclusive
|
|
667
|
+
endColumnIndex: rangeRef.endColumnIndex
|
|
668
|
+
};
|
|
669
|
+
}
|
|
670
|
+
throw new Error("Unknown range type: ".concat(rangeRef.type));
|
|
671
|
+
}
|
|
672
|
+
/* 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; }
|