@frogbotai/piece-google-sheets 0.22.0 → 0.23.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/dist/rows.js ADDED
@@ -0,0 +1,449 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { parse } from 'csv-parse/sync';
3
+ import { z } from 'zod';
4
+ import { batch, batchOutput, cells, columnIndex, mapRows, readInput, readRows, readValues, requestOptions, rowNumber, rowOutput, rowValues, sheetInput, sheetRange, updatedRow, updateOutput, valueInputOption, worksheet, } from './shared.js';
5
+ const writeInput = sheetInput.extend({ values: rowValues, valueInputOption });
6
+ const writeOutput = z.object({ row: rowNumber, updates: updateOutput });
7
+ async function appendValues(args) {
8
+ const sheet = await worksheet(args);
9
+ const { data } = await args.client.sheets.spreadsheets.values.append({
10
+ spreadsheetId: args.input.spreadsheetId,
11
+ range: sheetRange(sheet.title, 'A:A'),
12
+ valueInputOption: args.input.valueInputOption,
13
+ requestBody: { majorDimension: 'ROWS', values: [cells(args.input.values)] },
14
+ }, requestOptions(args.req));
15
+ return { row: updatedRow(data.updates?.updatedRange), updates: data.updates ?? {} };
16
+ }
17
+ export const appendRow = {
18
+ slug: 'appendRow',
19
+ description: 'Append a row using ordered values or column-letter keys.',
20
+ input: writeInput,
21
+ output: writeOutput,
22
+ idempotent: false,
23
+ run: appendValues,
24
+ };
25
+ const insertInput = writeInput.extend({
26
+ afterRow: z.number().int().nonnegative().max(9_999_999).default(1),
27
+ });
28
+ export const insertRow = {
29
+ slug: 'insertRow',
30
+ description: 'Insert a row after a specified row, defaulting to just below the header.',
31
+ input: insertInput,
32
+ output: writeOutput,
33
+ idempotent: false,
34
+ async run(args) {
35
+ const sheet = await worksheet(args);
36
+ const row = args.input.afterRow + 1;
37
+ await batch(args, [
38
+ {
39
+ insertDimension: {
40
+ range: {
41
+ sheetId: args.input.sheetId,
42
+ dimension: 'ROWS',
43
+ startIndex: row - 1,
44
+ endIndex: row,
45
+ },
46
+ inheritFromBefore: row > 1,
47
+ },
48
+ },
49
+ ]);
50
+ const { data } = await args.client.sheets.spreadsheets.values.update({
51
+ spreadsheetId: args.input.spreadsheetId,
52
+ range: sheetRange(sheet.title, `${row}:${row}`),
53
+ valueInputOption: args.input.valueInputOption,
54
+ requestBody: { majorDimension: 'ROWS', values: [cells(args.input.values)] },
55
+ }, requestOptions(args.req));
56
+ return { row, updates: data };
57
+ },
58
+ };
59
+ const updateInput = writeInput.extend({ row: rowNumber });
60
+ export const updateRow = {
61
+ slug: 'updateRow',
62
+ description: 'Update a row; empty and null values leave existing cells unchanged.',
63
+ input: updateInput,
64
+ output: writeOutput,
65
+ idempotent: true,
66
+ async run(args) {
67
+ const sheet = await worksheet(args);
68
+ const { data } = await args.client.sheets.spreadsheets.values.update({
69
+ spreadsheetId: args.input.spreadsheetId,
70
+ range: sheetRange(sheet.title, `${args.input.row}:${args.input.row}`),
71
+ valueInputOption: args.input.valueInputOption,
72
+ requestBody: { majorDimension: 'ROWS', values: [cells(args.input.values, true)] },
73
+ }, requestOptions(args.req));
74
+ return { row: args.input.row, updates: data };
75
+ },
76
+ };
77
+ const updatesInput = sheetInput.extend({
78
+ rows: z.array(z.object({ row: rowNumber.optional(), values: rowValues })),
79
+ valueInputOption,
80
+ });
81
+ const updatesOutput = z
82
+ .object({
83
+ spreadsheetId: z.string().nullish(),
84
+ totalUpdatedRows: z.number().nullish(),
85
+ totalUpdatedCells: z.number().nullish(),
86
+ responses: z.array(updateOutput).nullish(),
87
+ })
88
+ .passthrough();
89
+ export const updateRows = {
90
+ slug: 'updateRows',
91
+ description: 'Batch-update rows, skipping entries without a row number and leaving empty cells unchanged.',
92
+ input: updatesInput,
93
+ output: updatesOutput,
94
+ idempotent: true,
95
+ async run(args) {
96
+ const rows = args.input.rows.filter((row) => row.row != null);
97
+ if (!rows.length)
98
+ return { totalUpdatedRows: 0, totalUpdatedCells: 0, responses: [] };
99
+ const sheet = await worksheet(args);
100
+ return (await args.client.sheets.spreadsheets.values.batchUpdate({
101
+ spreadsheetId: args.input.spreadsheetId,
102
+ requestBody: {
103
+ valueInputOption: args.input.valueInputOption,
104
+ data: rows.map((row) => ({
105
+ range: sheetRange(sheet.title, `${row.row}:${row.row}`),
106
+ majorDimension: 'ROWS',
107
+ values: [cells(row.values, true)],
108
+ })),
109
+ },
110
+ }, requestOptions(args.req))).data;
111
+ },
112
+ };
113
+ const appendRowsInput = sheetInput.extend({
114
+ data: z.discriminatedUnion('format', [
115
+ z.object({ format: z.literal('columns'), rows: z.array(rowValues) }),
116
+ z.object({ format: z.literal('json'), rows: z.array(z.record(z.string(), z.json())) }),
117
+ z.object({ format: z.literal('csv'), text: z.string() }),
118
+ ]),
119
+ headerRow: rowNumber.default(1),
120
+ overwrite: z.boolean().default(false),
121
+ duplicateColumn: z
122
+ .string()
123
+ .regex(/^[A-Z]{1,3}$/)
124
+ .optional(),
125
+ valueInputOption,
126
+ });
127
+ export const appendRows = {
128
+ slug: 'appendRows',
129
+ description: 'Append CSV, JSON, or column-keyed rows; optionally overwrite data or exclude keys already in the worksheet.',
130
+ input: appendRowsInput,
131
+ output: z.object({
132
+ insertedRows: z.number().int().nonnegative(),
133
+ updates: updateOutput.or(updatesOutput),
134
+ clearedRanges: z.array(z.string()).optional(),
135
+ }),
136
+ idempotent: false,
137
+ async run(args) {
138
+ const { input, client, req } = args;
139
+ const sheet = await worksheet(args);
140
+ const headerRange = sheetRange(sheet.title, `${input.headerRow}:${input.headerRow}`);
141
+ const headers = ((await readValues({ ...args, spreadsheetId: input.spreadsheetId, range: headerRange }))[0] ??
142
+ []).map(String);
143
+ let rows;
144
+ if (input.data.format === 'columns')
145
+ rows = input.data.rows.map((row) => cells(row));
146
+ else if (input.data.format === 'csv') {
147
+ if (!headers.length)
148
+ throw new Error('CSV import requires a populated worksheet header row.');
149
+ const records = parse(input.data.text, {
150
+ columns: true,
151
+ bom: true,
152
+ skip_empty_lines: true,
153
+ });
154
+ rows = records.map((record) => {
155
+ const normalized = Object.fromEntries(Object.entries(record).map(([key, value]) => [key.trim().toLowerCase(), value]));
156
+ return headers.map((header) => normalized[header.trim().toLowerCase()] ?? '');
157
+ });
158
+ }
159
+ else {
160
+ const records = input.data.rows;
161
+ const additions = [...new Set(records.flatMap(Object.keys))].filter((key) => !headers.includes(key));
162
+ headers.push(...additions);
163
+ if (additions.length) {
164
+ await client.sheets.spreadsheets.values.update({
165
+ spreadsheetId: input.spreadsheetId,
166
+ range: headerRange,
167
+ valueInputOption: 'USER_ENTERED',
168
+ requestBody: { values: [headers] },
169
+ }, requestOptions(req));
170
+ }
171
+ rows = records.map((record) => cells(headers.map((header) => record[header] ?? '')));
172
+ }
173
+ if (input.overwrite) {
174
+ const start = input.headerRow + 1;
175
+ const updates = rows.length
176
+ ? (await client.sheets.spreadsheets.values.batchUpdate({
177
+ spreadsheetId: input.spreadsheetId,
178
+ requestBody: {
179
+ valueInputOption: input.valueInputOption,
180
+ data: [
181
+ {
182
+ range: sheetRange(sheet.title, `A${start}`),
183
+ majorDimension: 'ROWS',
184
+ values: rows,
185
+ },
186
+ ],
187
+ },
188
+ }, requestOptions(req))).data
189
+ : { totalUpdatedRows: 0 };
190
+ const end = sheet.gridProperties?.rowCount ?? start + rows.length;
191
+ const clearedRanges = start + rows.length <= end
192
+ ? ((await client.sheets.spreadsheets.values.batchClear({
193
+ spreadsheetId: input.spreadsheetId,
194
+ requestBody: {
195
+ ranges: [sheetRange(sheet.title, `${start + rows.length}:${end}`)],
196
+ },
197
+ }, requestOptions(req))).data.clearedRanges ?? [])
198
+ : [];
199
+ return { insertedRows: rows.length, updates, clearedRanges };
200
+ }
201
+ if (input.duplicateColumn) {
202
+ const index = columnIndex(input.duplicateColumn);
203
+ const existing = await readValues({
204
+ ...args,
205
+ spreadsheetId: input.spreadsheetId,
206
+ range: sheetRange(sheet.title),
207
+ });
208
+ const keys = new Set(existing
209
+ .filter((row) => index < Math.max(headers.length, row.length))
210
+ .map((row) => String(row[index] ?? '')
211
+ .trim()
212
+ .toLowerCase()));
213
+ rows = rows.filter((row, rowIndex) => {
214
+ const original = input.data.format === 'columns' ? input.data.rows[rowIndex] : undefined;
215
+ const value = original
216
+ ? Array.isArray(original)
217
+ ? original[index]
218
+ : original[input.duplicateColumn]
219
+ : row[index];
220
+ return value == null || !keys.has(String(value).trim().toLowerCase());
221
+ });
222
+ }
223
+ if (!rows.length)
224
+ return { insertedRows: 0, updates: {} };
225
+ const { data } = await client.sheets.spreadsheets.values.append({
226
+ spreadsheetId: input.spreadsheetId,
227
+ range: sheetRange(sheet.title, 'A:A'),
228
+ valueInputOption: input.valueInputOption,
229
+ requestBody: { majorDimension: 'ROWS', values: rows },
230
+ }, requestOptions(req));
231
+ return { insertedRows: rows.length, updates: data.updates ?? {} };
232
+ },
233
+ };
234
+ const deleteInput = sheetInput.extend({ row: rowNumber });
235
+ export const deleteRow = {
236
+ slug: 'deleteRow',
237
+ description: 'Delete a row and shift following rows upward.',
238
+ input: deleteInput,
239
+ output: batchOutput,
240
+ idempotent: false,
241
+ run: (args) => batch(args, [
242
+ {
243
+ deleteDimension: {
244
+ range: {
245
+ sheetId: args.input.sheetId,
246
+ dimension: 'ROWS',
247
+ startIndex: args.input.row - 1,
248
+ endIndex: args.input.row,
249
+ },
250
+ },
251
+ },
252
+ ]),
253
+ };
254
+ const rowSelection = z.discriminatedUnion('mode', [
255
+ z
256
+ .object({ mode: z.literal('range'), startRow: rowNumber, endRow: rowNumber.optional() })
257
+ .refine((value) => value.endRow == null || value.endRow >= value.startRow, 'End row must not precede start row.'),
258
+ z.object({ mode: z.literal('list'), rows: z.array(rowNumber).min(1) }),
259
+ ]);
260
+ const deleteRowsInput = sheetInput.extend({ selection: rowSelection });
261
+ export const deleteRows = {
262
+ slug: 'deleteRows',
263
+ description: 'Delete a row range or distinct row numbers in descending order.',
264
+ input: deleteRowsInput,
265
+ output: z.object({
266
+ deletedRanges: z.array(z.object({ startRow: rowNumber, endRow: rowNumber })),
267
+ result: batchOutput,
268
+ }),
269
+ idempotent: false,
270
+ async run(args) {
271
+ const selection = args.input.selection;
272
+ const ranges = selection.mode === 'range'
273
+ ? [{ startRow: selection.startRow, endRow: selection.endRow ?? selection.startRow }]
274
+ : [...new Set(selection.rows)]
275
+ .sort((a, b) => b - a)
276
+ .map((row) => ({ startRow: row, endRow: row }));
277
+ return {
278
+ deletedRanges: ranges,
279
+ result: await batch(args, ranges.map(({ startRow, endRow }) => ({
280
+ deleteDimension: {
281
+ range: {
282
+ sheetId: args.input.sheetId,
283
+ dimension: 'ROWS',
284
+ startIndex: startRow - 1,
285
+ endIndex: endRow,
286
+ },
287
+ },
288
+ }))),
289
+ };
290
+ },
291
+ };
292
+ const searchInput = readInput.extend({
293
+ column: z
294
+ .string()
295
+ .regex(/^[A-Z]{1,3}$/)
296
+ .default('A'),
297
+ searchValue: z.string().default(''),
298
+ exactMatch: z.boolean().default(false),
299
+ startRow: rowNumber.default(1),
300
+ limit: rowNumber.default(1),
301
+ });
302
+ async function searchRows(args) {
303
+ const rows = await readRows({ ...args, input: { ...args.input, useHeaderNames: false } }, args.input.startRow);
304
+ const { input } = args;
305
+ const matches = rows
306
+ .filter(({ values }) => input.searchValue === '' ||
307
+ (input.exactMatch
308
+ ? values[input.column] === input.searchValue
309
+ : values[input.column]?.toLowerCase().includes(input.searchValue.toLowerCase())))
310
+ .slice(0, input.limit);
311
+ if (!input.useHeaderNames || !matches.length)
312
+ return matches;
313
+ const sheet = await worksheet(args);
314
+ const headers = (await readValues({
315
+ ...args,
316
+ spreadsheetId: input.spreadsheetId,
317
+ range: sheetRange(sheet.title, `${input.headerRow}:${input.headerRow}`),
318
+ }))[0] ?? [];
319
+ return matches.map((row) => mapRows({
320
+ values: [Object.values(row.values)],
321
+ startRow: row.row,
322
+ headers,
323
+ useHeaderNames: true,
324
+ })[0]);
325
+ }
326
+ export const findRows = {
327
+ slug: 'findRows',
328
+ description: 'Find rows by exact case-sensitive equality or case-insensitive substring, preserving physical row numbers.',
329
+ input: searchInput,
330
+ output: z.array(rowOutput),
331
+ idempotent: true,
332
+ run: searchRows,
333
+ };
334
+ const findOrCreateInput = searchInput.extend({ values: rowValues, valueInputOption });
335
+ export const findOrCreateRow = {
336
+ slug: 'findOrCreateRow',
337
+ description: 'Return the first matching row, or append supplied values when no row matches.',
338
+ input: findOrCreateInput,
339
+ output: rowOutput.extend({ found: z.boolean(), created: z.boolean() }),
340
+ idempotent: false,
341
+ async run(args) {
342
+ const [found] = await searchRows({ ...args, input: { ...args.input, limit: 1 } });
343
+ if (found)
344
+ return { ...found, found: true, created: false };
345
+ const result = await appendValues(args);
346
+ let headers = [];
347
+ if (args.input.useHeaderNames) {
348
+ const sheet = await worksheet(args);
349
+ headers =
350
+ (await readValues({
351
+ ...args,
352
+ spreadsheetId: args.input.spreadsheetId,
353
+ range: sheetRange(sheet.title, `${args.input.headerRow}:${args.input.headerRow}`),
354
+ }))[0] ?? [];
355
+ }
356
+ return {
357
+ ...mapRows({
358
+ values: [cells(args.input.values)],
359
+ startRow: result.row,
360
+ headers,
361
+ useHeaderNames: args.input.useHeaderNames,
362
+ })[0],
363
+ found: false,
364
+ created: true,
365
+ };
366
+ },
367
+ };
368
+ const getRowInput = readInput.extend({ row: rowNumber });
369
+ export const getRow = {
370
+ slug: 'getRow',
371
+ description: 'Read one physical row, returning found=false when it is beyond the populated range.',
372
+ input: getRowInput,
373
+ output: z.union([
374
+ rowOutput.extend({ found: z.literal(true) }),
375
+ z.object({ found: z.literal(false), row: z.null() }),
376
+ ]),
377
+ idempotent: true,
378
+ async run(args) {
379
+ const [row] = await readRows(args, args.input.row, args.input.row);
380
+ return row ? { found: true, ...row } : { found: false, row: null };
381
+ },
382
+ };
383
+ const getRowsInput = readInput.extend({ skipHeaders: z.boolean().default(false) });
384
+ export const getRows = {
385
+ slug: 'getRows',
386
+ description: 'Read all populated rows, optionally skipping the header and preceding rows.',
387
+ input: getRowsInput,
388
+ output: z.array(rowOutput),
389
+ idempotent: true,
390
+ run: (args) => readRows(args, args.input.skipHeaders ? args.input.headerRow + 1 : 1),
391
+ };
392
+ const nextInput = readInput.extend({
393
+ startRow: rowNumber.default(1),
394
+ batchSize: rowNumber.default(1),
395
+ memoryKey: z.string().min(1).default('row_number'),
396
+ });
397
+ export const getNextRows = {
398
+ slug: 'getNextRows',
399
+ description: 'Read and persist the next batch under an owner-, instance-, and worksheet-scoped memory key.',
400
+ input: nextInput,
401
+ output: z.array(rowOutput),
402
+ idempotent: false,
403
+ async run(args) {
404
+ const { req, input } = args;
405
+ requestOptions(req);
406
+ const owner = req.user ? [req.user.collection, req.user.id] : ['developer'];
407
+ if (req.user && (!req.user.collection || req.user.id == null)) {
408
+ throw new Error('A persistent Sheets cursor requires an identifiable owner.');
409
+ }
410
+ let instanceSlug;
411
+ for (const instance of req.frogbot.config.pieces.instances) {
412
+ if (instance.piece !== 'google-sheets')
413
+ continue;
414
+ const client = await instance.client({ req }).catch(() => undefined);
415
+ if (client === args.client) {
416
+ instanceSlug = instance.slug;
417
+ break;
418
+ }
419
+ }
420
+ if (!instanceSlug) {
421
+ throw new Error('Register the Google Sheets piece instance in your configuration before using a persistent cursor.');
422
+ }
423
+ const key = `pieces:google-sheets:cursor:${createHash('sha256')
424
+ .update(JSON.stringify([owner, instanceSlug, input.spreadsheetId, input.sheetId, input.memoryKey]))
425
+ .digest('hex')}`;
426
+ return req.frogbot.kv.lock(`${key}:lock`, 30_000, async ({ signal: lease }) => {
427
+ const signal = req.signal ? AbortSignal.any([req.signal, lease]) : lease;
428
+ signal.throwIfAborted();
429
+ const stored = await req.frogbot.kv.get(key);
430
+ const start = stored == null ? input.startRow : z.number().int().positive().max(10_000_001).parse(stored);
431
+ const lockedArgs = {
432
+ ...args,
433
+ req: new Proxy(req, {
434
+ get: (target, property) => property === 'signal' ? signal : Reflect.get(target, property),
435
+ }),
436
+ };
437
+ let rows = await readRows(lockedArgs, start, start + input.batchSize - 1);
438
+ if (rows.length < input.batchSize) {
439
+ rows = (await readRows(lockedArgs, start)).slice(0, input.batchSize);
440
+ }
441
+ signal.throwIfAborted();
442
+ if (rows.length)
443
+ await req.frogbot.kv.set(key, start + rows.length);
444
+ signal.throwIfAborted();
445
+ return rows;
446
+ });
447
+ },
448
+ };
449
+ //# sourceMappingURL=rows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rows.js","sourceRoot":"","sources":["../src/rows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import type { FrogbotRequest } from 'frogbot';
2
+ import type { PieceRunArgs } from 'frogbot/pieces';
3
+ import type { sheets_v4 } from 'googleapis';
4
+ import { z } from 'zod';
5
+ import type { GoogleSheetsClient } from './client.js';
6
+ export type SheetsArgs<T> = PieceRunArgs<T, object, GoogleSheetsClient>;
7
+ export declare const rowNumber: z.ZodNumber;
8
+ export declare const sheetInput: z.ZodObject<{
9
+ spreadsheetId: z.ZodString;
10
+ sheetId: z.ZodNumber;
11
+ }, z.core.$strip>;
12
+ export declare const cell: z.ZodJSONSchema;
13
+ export declare const rowValues: z.ZodUnion<readonly [z.ZodArray<z.ZodJSONSchema>, z.ZodRecord<z.ZodString, z.ZodJSONSchema>]>;
14
+ export declare const valueInputOption: z.ZodDefault<z.ZodEnum<{
15
+ RAW: "RAW";
16
+ USER_ENTERED: "USER_ENTERED";
17
+ }>>;
18
+ export declare const readInput: z.ZodObject<{
19
+ spreadsheetId: z.ZodString;
20
+ sheetId: z.ZodNumber;
21
+ headerRow: z.ZodDefault<z.ZodNumber>;
22
+ useHeaderNames: z.ZodDefault<z.ZodBoolean>;
23
+ }, z.core.$strip>;
24
+ export declare const rowOutput: z.ZodObject<{
25
+ row: z.ZodNumber;
26
+ values: z.ZodRecord<z.ZodString, z.ZodString>;
27
+ }, z.core.$strip>;
28
+ export declare const updateOutput: z.ZodObject<{
29
+ spreadsheetId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
30
+ updatedRange: z.ZodOptional<z.ZodNullable<z.ZodString>>;
31
+ updatedRows: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
32
+ updatedColumns: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
33
+ updatedCells: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
34
+ }, z.core.$loose>;
35
+ export declare const batchOutput: z.ZodObject<{
36
+ spreadsheetId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
37
+ replies: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodJSONSchema>>>;
38
+ }, z.core.$loose>;
39
+ export declare const worksheetOutput: z.ZodObject<{
40
+ sheetId: z.ZodNumber;
41
+ title: z.ZodString;
42
+ index: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
43
+ gridProperties: z.ZodOptional<z.ZodNullable<z.ZodObject<{
44
+ rowCount: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
45
+ columnCount: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
46
+ }, z.core.$loose>>>;
47
+ }, z.core.$loose>;
48
+ export declare function requestOptions(req: Pick<FrogbotRequest, 'signal'>): {
49
+ signal: AbortSignal | undefined;
50
+ redirect: "error";
51
+ maxRedirects: number;
52
+ retry: boolean;
53
+ };
54
+ export declare function columnLabel(index: number): string;
55
+ export declare function columnIndex(label: string): number;
56
+ export declare function sheetRange(title: string, range?: string): string;
57
+ export declare function worksheet({ client, req, input }: SheetsArgs<z.output<typeof sheetInput>>): Promise<sheets_v4.Schema$SheetProperties>;
58
+ export declare function readValues({ client, req, spreadsheetId, range, }: {
59
+ client: GoogleSheetsClient;
60
+ req: Pick<FrogbotRequest, 'signal'>;
61
+ spreadsheetId: string;
62
+ range: string;
63
+ }): Promise<any[][]>;
64
+ export declare function mapRows({ values, startRow, headers, useHeaderNames, }: {
65
+ values: unknown[][];
66
+ startRow: number;
67
+ headers: unknown[];
68
+ useHeaderNames: boolean;
69
+ }): {
70
+ row: number;
71
+ values: {
72
+ [k: string]: string;
73
+ };
74
+ }[];
75
+ export declare function readRows(args: SheetsArgs<z.output<typeof readInput>>, startRow?: number, endRow?: number): Promise<{
76
+ row: number;
77
+ values: {
78
+ [k: string]: string;
79
+ };
80
+ }[]>;
81
+ export declare function cells(values: z.output<typeof rowValues>, updating?: boolean): (string | number | boolean | null)[];
82
+ export declare function updatedRow(range: string | null | undefined): number;
83
+ export declare function batch(args: SheetsArgs<{
84
+ spreadsheetId: string;
85
+ }>, requests: sheets_v4.Schema$Request[]): Promise<sheets_v4.Schema$BatchUpdateSpreadsheetResponse>;
86
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC;AACxE,eAAO,MAAM,SAAS,aAA8C,CAAC;AACrE,eAAO,MAAM,UAAU;;;iBAGrB,CAAC;AACH,eAAO,MAAM,IAAI,iBAAW,CAAC;AAC7B,eAAO,MAAM,SAAS,+FAGpB,CAAC;AACH,eAAO,MAAM,gBAAgB;;;GAA0D,CAAC;AACxF,eAAO,MAAM,SAAS;;;;;iBAGpB,CAAC;AACH,eAAO,MAAM,SAAS;;;iBAAyE,CAAC;AAChG,eAAO,MAAM,YAAY;;;;;;iBAQT,CAAC;AACjB,eAAO,MAAM,WAAW;;;iBAER,CAAC;AACjB,eAAO,MAAM,eAAe;;;;;;;;iBAUZ,CAAC;AAEjB,wBAAgB,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;;;;;EAQjE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASjD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,UAEvD;AAED,wBAAsB,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC,6CAc9F;AAED,wBAAsB,UAAU,CAAC,EAC/B,MAAM,EACN,GAAG,EACH,aAAa,EACb,KAAK,GACN,EAAE;IACD,MAAM,EAAE,kBAAkB,CAAC;IAC3B,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf,oBAKA;AAED,wBAAgB,OAAO,CAAC,EACtB,MAAM,EACN,QAAQ,EACR,OAAO,EACP,cAAc,GACf,EAAE;IACD,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;CACzB;;;;;IAUA;AAED,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,SAAS,CAAC,CAAC,EAC5C,QAAQ,SAAI,EACZ,MAAM,CAAC,EAAE,MAAM;;;;;KAqBhB;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,SAAS,CAAC,EAAE,QAAQ,UAAQ,wCAgBzE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,UAI1D;AAED,wBAAsB,KAAK,CACzB,IAAI,EAAE,UAAU,CAAC;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,EAC3C,QAAQ,EAAE,SAAS,CAAC,cAAc,EAAE,4DAQrC"}