google-spreadsheet 5.0.1 → 5.0.2
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/index.cjs +93 -2473
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -615
- package/dist/index.d.ts +1 -615
- package/dist/index.js +48 -2432
- package/dist/index.js.map +1 -1
- package/package.json +5 -4
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/.pnpm/ky@1.8.2/node_modules/ky/source/errors/HTTPError.ts","../node_modules/.pnpm/ky@1.8.2/node_modules/ky/source/errors/TimeoutError.ts","../node_modules/.pnpm/ky@1.8.2/node_modules/ky/source/core/constants.ts","../node_modules/.pnpm/ky@1.8.2/node_modules/ky/source/utils/body.ts","../node_modules/.pnpm/ky@1.8.2/node_modules/ky/source/utils/is.ts","../node_modules/.pnpm/ky@1.8.2/node_modules/ky/source/utils/merge.ts","../node_modules/.pnpm/ky@1.8.2/node_modules/ky/source/utils/normalize.ts","../node_modules/.pnpm/ky@1.8.2/node_modules/ky/source/utils/timeout.ts","../node_modules/.pnpm/ky@1.8.2/node_modules/ky/source/utils/delay.ts","../node_modules/.pnpm/ky@1.8.2/node_modules/ky/source/utils/options.ts","../node_modules/.pnpm/ky@1.8.2/node_modules/ky/source/core/Ky.ts","../node_modules/.pnpm/ky@1.8.2/node_modules/ky/source/index.ts","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/predicate/isLength.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/predicate/isArrayLike.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/array/compact.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/array/compact.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/array/flatten.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/function/identity.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/_internal/isUnsafeProperty.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/_internal/isDeepKey.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/_internal/toKey.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/util/toPath.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/object/get.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/object/property.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/predicate/isObject.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/predicate/isPrimitive.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/util/eq.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/predicate/isMatchWith.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/predicate/isMatch.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/_internal/getSymbols.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/_internal/getTag.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/_internal/tags.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/predicate/isTypedArray.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/object/cloneDeepWith.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/object/cloneDeep.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/predicate/matches.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/object/cloneDeepWith.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/object/cloneDeep.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/_internal/isIndex.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/predicate/isArguments.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/object/has.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/predicate/matchesProperty.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/util/iteratee.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/predicate/isObjectLike.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/predicate/isSymbol.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/util/toNumber.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/util/toFinite.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/util/toInteger.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/math/range.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/array/forEach.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/_internal/isIterateeCall.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/predicate/isString.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/array/filter.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/array/find.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/array/flatten.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/array/map.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/array/groupBy.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/array/groupBy.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/array/reduce.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/array/keyBy.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/_internal/compareValues.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/_internal/isKey.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/array/orderBy.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/object/unset.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/predicate/isArray.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/object/values.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/predicate/isNil.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/array/some.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/array/sortBy.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/function/identity.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/_internal/assignValue.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/object/updateWith.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/object/set.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/predicate/isPlainObject.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/predicate/isEqualWith.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/function/noop.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/predicate/isEqual.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/predicate/isBuffer.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/_internal/isPrototype.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/predicate/isTypedArray.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/util/times.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/object/keys.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/object/keysIn.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/object/omit.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/_internal/getSymbolsIn.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/object/pickBy.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/predicate/isBoolean.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/predicate/isFinite.mjs","../node_modules/.pnpm/es-toolkit@1.39.8/node_modules/es-toolkit/dist/compat/predicate/isInteger.mjs","../src/lib/utils.ts","../src/lib/GoogleSpreadsheetRow.ts","../src/lib/GoogleSpreadsheetCellErrorValue.ts","../src/lib/GoogleSpreadsheetCell.ts","../src/lib/GoogleSpreadsheetWorksheet.ts","../src/lib/GoogleSpreadsheet.ts"],"names":["property","ky","compact","arr","isObject","source","isEqual","keys","matches","cloneDeepWith","cloneDeep","result","length","values","flatten","groupBy","iteratee","identity","isTypedArray","range","filter"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {NormalizedOptions} from '../types/options.js';\nimport type {KyRequest} from '../types/request.js';\nimport type {KyResponse} from '../types/response.js';\n\nexport class HTTPError<T = unknown> extends Error {\n\tpublic response: KyResponse<T>;\n\tpublic request: KyRequest;\n\tpublic options: NormalizedOptions;\n\n\tconstructor(response: Response, request: Request, options: NormalizedOptions) {\n\t\tconst code = (response.status || response.status === 0) ? response.status : '';\n\t\tconst title = response.statusText || '';\n\t\tconst status = `${code} ${title}`.trim();\n\t\tconst reason = status ? `status code ${status}` : 'an unknown error';\n\n\t\tsuper(`Request failed with ${reason}: ${request.method} ${request.url}`);\n\n\t\tthis.name = 'HTTPError';\n\t\tthis.response = response;\n\t\tthis.request = request;\n\t\tthis.options = options;\n\t}\n}\n","import type {KyRequest} from '../types/request.js';\n\nexport class TimeoutError extends Error {\n\tpublic request: KyRequest;\n\n\tconstructor(request: Request) {\n\t\tsuper(`Request timed out: ${request.method} ${request.url}`);\n\t\tthis.name = 'TimeoutError';\n\t\tthis.request = request;\n\t}\n}\n","import type {Expect, Equal} from '@type-challenges/utils';\nimport {type HttpMethod, type KyOptionsRegistry} from '../types/options.js';\nimport {type RequestInitRegistry} from '../types/request.js';\n\nexport const supportsRequestStreams = (() => {\n\tlet duplexAccessed = false;\n\tlet hasContentType = false;\n\tconst supportsReadableStream = typeof globalThis.ReadableStream === 'function';\n\tconst supportsRequest = typeof globalThis.Request === 'function';\n\n\tif (supportsReadableStream && supportsRequest) {\n\t\ttry {\n\t\t\thasContentType = new globalThis.Request('https://empty.invalid', {\n\t\t\t\tbody: new globalThis.ReadableStream(),\n\t\t\t\tmethod: 'POST',\n\t\t\t\t// @ts-expect-error - Types are outdated.\n\t\t\t\tget duplex() {\n\t\t\t\t\tduplexAccessed = true;\n\t\t\t\t\treturn 'half';\n\t\t\t\t},\n\t\t\t}).headers.has('Content-Type');\n\t\t} catch (error) {\n\t\t\t// QQBrowser on iOS throws \"unsupported BodyInit type\" error (see issue #581)\n\t\t\tif (error instanceof Error && error.message === 'unsupported BodyInit type') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\treturn duplexAccessed && !hasContentType;\n})();\n\nexport const supportsAbortController = typeof globalThis.AbortController === 'function';\nexport const supportsAbortSignal = typeof globalThis.AbortSignal === 'function' && typeof globalThis.AbortSignal.any === 'function';\nexport const supportsResponseStreams = typeof globalThis.ReadableStream === 'function';\nexport const supportsFormData = typeof globalThis.FormData === 'function';\n\nexport const requestMethods = ['get', 'post', 'put', 'patch', 'head', 'delete'] as const;\n\nconst validate = <T extends Array<true>>() => undefined as unknown as T;\nvalidate<[\n\tExpect<Equal<typeof requestMethods[number], HttpMethod>>,\n]>();\n\nexport const responseTypes = {\n\tjson: 'application/json',\n\ttext: 'text/*',\n\tformData: 'multipart/form-data',\n\tarrayBuffer: '*/*',\n\tblob: '*/*',\n} as const;\n\n// The maximum value of a 32bit int (see issue #117)\nexport const maxSafeTimeout = 2_147_483_647;\n\n// Size in bytes of a typical form boundary, used to help estimate upload size\nexport const usualFormBoundarySize = new TextEncoder().encode('------WebKitFormBoundaryaxpyiPgbbPti10Rw').length;\n\nexport const stop = Symbol('stop');\n\nexport const kyOptionKeys: KyOptionsRegistry = {\n\tjson: true,\n\tparseJson: true,\n\tstringifyJson: true,\n\tsearchParams: true,\n\tprefixUrl: true,\n\tretry: true,\n\ttimeout: true,\n\thooks: true,\n\tthrowHttpErrors: true,\n\tonDownloadProgress: true,\n\tonUploadProgress: true,\n\tfetch: true,\n};\n\nexport const requestOptionsRegistry: RequestInitRegistry = {\n\tmethod: true,\n\theaders: true,\n\tbody: true,\n\tmode: true,\n\tcredentials: true,\n\tcache: true,\n\tredirect: true,\n\treferrer: true,\n\treferrerPolicy: true,\n\tintegrity: true,\n\tkeepalive: true,\n\tsignal: true,\n\twindow: true,\n\tdispatcher: true,\n\tduplex: true,\n\tpriority: true,\n};\n","import type {Options} from '../types/options.js';\nimport {usualFormBoundarySize} from '../core/constants.js';\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const getBodySize = (body?: BodyInit | null): number => {\n\tif (!body) {\n\t\treturn 0;\n\t}\n\n\tif (body instanceof FormData) {\n\t\t// This is an approximation, as FormData size calculation is not straightforward\n\t\tlet size = 0;\n\n\t\tfor (const [key, value] of body) {\n\t\t\tsize += usualFormBoundarySize;\n\t\t\tsize += new TextEncoder().encode(`Content-Disposition: form-data; name=\"${key}\"`).length;\n\t\t\tsize += typeof value === 'string'\n\t\t\t\t? new TextEncoder().encode(value).length\n\t\t\t\t: value.size;\n\t\t}\n\n\t\treturn size;\n\t}\n\n\tif (body instanceof Blob) {\n\t\treturn body.size;\n\t}\n\n\tif (body instanceof ArrayBuffer) {\n\t\treturn body.byteLength;\n\t}\n\n\tif (typeof body === 'string') {\n\t\treturn new TextEncoder().encode(body).length;\n\t}\n\n\tif (body instanceof URLSearchParams) {\n\t\treturn new TextEncoder().encode(body.toString()).length;\n\t}\n\n\tif ('byteLength' in body) {\n\t\treturn (body).byteLength;\n\t}\n\n\tif (typeof body === 'object' && body !== null) {\n\t\ttry {\n\t\t\tconst jsonString = JSON.stringify(body);\n\t\t\treturn new TextEncoder().encode(jsonString).length;\n\t\t} catch {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\treturn 0; // Default case, unable to determine size\n};\n\nexport const streamResponse = (response: Response, onDownloadProgress: Options['onDownloadProgress']) => {\n\tconst totalBytes = Number(response.headers.get('content-length')) || 0;\n\tlet transferredBytes = 0;\n\n\tif (response.status === 204) {\n\t\tif (onDownloadProgress) {\n\t\t\tonDownloadProgress({percent: 1, totalBytes, transferredBytes}, new Uint8Array());\n\t\t}\n\n\t\treturn new Response(\n\t\t\tnull,\n\t\t\t{\n\t\t\t\tstatus: response.status,\n\t\t\t\tstatusText: response.statusText,\n\t\t\t\theaders: response.headers,\n\t\t\t},\n\t\t);\n\t}\n\n\treturn new Response(\n\t\tnew ReadableStream({\n\t\t\tasync start(controller) {\n\t\t\t\tconst reader = response.body!.getReader();\n\n\t\t\t\tif (onDownloadProgress) {\n\t\t\t\t\tonDownloadProgress({percent: 0, transferredBytes: 0, totalBytes}, new Uint8Array());\n\t\t\t\t}\n\n\t\t\t\tasync function read() {\n\t\t\t\t\tconst {done, value} = await reader.read();\n\t\t\t\t\tif (done) {\n\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (onDownloadProgress) {\n\t\t\t\t\t\ttransferredBytes += value.byteLength;\n\t\t\t\t\t\tconst percent = totalBytes === 0 ? 0 : transferredBytes / totalBytes;\n\t\t\t\t\t\tonDownloadProgress({percent, transferredBytes, totalBytes}, value);\n\t\t\t\t\t}\n\n\t\t\t\t\tcontroller.enqueue(value);\n\t\t\t\t\tawait read();\n\t\t\t\t}\n\n\t\t\t\tawait read();\n\t\t\t},\n\t\t}),\n\t\t{\n\t\t\tstatus: response.status,\n\t\t\tstatusText: response.statusText,\n\t\t\theaders: response.headers,\n\t\t},\n\t);\n};\n\nexport const streamRequest = (request: Request, onUploadProgress: Options['onUploadProgress']) => {\n\tconst totalBytes = getBodySize(request.body);\n\tlet transferredBytes = 0;\n\n\treturn new Request(request, {\n\t\t// @ts-expect-error - Types are outdated.\n\t\tduplex: 'half',\n\t\tbody: new ReadableStream({\n\t\t\tasync start(controller) {\n\t\t\t\tconst reader = request.body instanceof ReadableStream ? request.body.getReader() : new Response('').body!.getReader();\n\n\t\t\t\tasync function read() {\n\t\t\t\t\tconst {done, value} = await reader.read();\n\t\t\t\t\tif (done) {\n\t\t\t\t\t\t// Ensure 100% progress is reported when the upload is complete\n\t\t\t\t\t\tif (onUploadProgress) {\n\t\t\t\t\t\t\tonUploadProgress({percent: 1, transferredBytes, totalBytes: Math.max(totalBytes, transferredBytes)}, new Uint8Array());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\ttransferredBytes += value.byteLength;\n\t\t\t\t\tlet percent = totalBytes === 0 ? 0 : transferredBytes / totalBytes;\n\t\t\t\t\tif (totalBytes < transferredBytes || percent === 1) {\n\t\t\t\t\t\tpercent = 0.99;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (onUploadProgress) {\n\t\t\t\t\t\tonUploadProgress({percent: Number(percent.toFixed(2)), transferredBytes, totalBytes}, value);\n\t\t\t\t\t}\n\n\t\t\t\t\tcontroller.enqueue(value);\n\t\t\t\t\tawait read();\n\t\t\t\t}\n\n\t\t\t\tawait read();\n\t\t\t},\n\t\t}),\n\t});\n};\n","// eslint-disable-next-line @typescript-eslint/ban-types\nexport const isObject = (value: unknown): value is object => value !== null && typeof value === 'object';\n","import type {KyHeadersInit, Options} from '../types/options.js';\nimport type {Hooks} from '../types/hooks.js';\nimport {isObject} from './is.js';\n\nexport const validateAndMerge = (...sources: Array<Partial<Options> | undefined>): Partial<Options> => {\n\tfor (const source of sources) {\n\t\tif ((!isObject(source) || Array.isArray(source)) && source !== undefined) {\n\t\t\tthrow new TypeError('The `options` argument must be an object');\n\t\t}\n\t}\n\n\treturn deepMerge({}, ...sources);\n};\n\nexport const mergeHeaders = (source1: KyHeadersInit = {}, source2: KyHeadersInit = {}) => {\n\tconst result = new globalThis.Headers(source1 as RequestInit['headers']);\n\tconst isHeadersInstance = source2 instanceof globalThis.Headers;\n\tconst source = new globalThis.Headers(source2 as RequestInit['headers']);\n\n\tfor (const [key, value] of source.entries()) {\n\t\tif ((isHeadersInstance && value === 'undefined') || value === undefined) {\n\t\t\tresult.delete(key);\n\t\t} else {\n\t\t\tresult.set(key, value);\n\t\t}\n\t}\n\n\treturn result;\n};\n\nfunction newHookValue<K extends keyof Hooks>(original: Hooks, incoming: Hooks, property: K): Required<Hooks>[K] {\n\treturn (Object.hasOwn(incoming, property) && incoming[property] === undefined)\n\t\t? []\n\t\t: deepMerge<Required<Hooks>[K]>(original[property] ?? [], incoming[property] ?? []);\n}\n\nexport const mergeHooks = (original: Hooks = {}, incoming: Hooks = {}): Required<Hooks> => (\n\t{\n\t\tbeforeRequest: newHookValue(original, incoming, 'beforeRequest'),\n\t\tbeforeRetry: newHookValue(original, incoming, 'beforeRetry'),\n\t\tafterResponse: newHookValue(original, incoming, 'afterResponse'),\n\t\tbeforeError: newHookValue(original, incoming, 'beforeError'),\n\t}\n);\n\n// TODO: Make this strongly-typed (no `any`).\nexport const deepMerge = <T>(...sources: Array<Partial<T> | undefined>): T => {\n\tlet returnValue: any = {};\n\tlet headers = {};\n\tlet hooks = {};\n\n\tfor (const source of sources) {\n\t\tif (Array.isArray(source)) {\n\t\t\tif (!Array.isArray(returnValue)) {\n\t\t\t\treturnValue = [];\n\t\t\t}\n\n\t\t\treturnValue = [...returnValue, ...source];\n\t\t} else if (isObject(source)) {\n\t\t\tfor (let [key, value] of Object.entries(source)) {\n\t\t\t\tif (isObject(value) && key in returnValue) {\n\t\t\t\t\tvalue = deepMerge(returnValue[key], value);\n\t\t\t\t}\n\n\t\t\t\treturnValue = {...returnValue, [key]: value};\n\t\t\t}\n\n\t\t\tif (isObject((source as any).hooks)) {\n\t\t\t\thooks = mergeHooks(hooks, (source as any).hooks);\n\t\t\t\treturnValue.hooks = hooks;\n\t\t\t}\n\n\t\t\tif (isObject((source as any).headers)) {\n\t\t\t\theaders = mergeHeaders(headers, (source as any).headers);\n\t\t\t\treturnValue.headers = headers;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn returnValue;\n};\n","import {requestMethods} from '../core/constants.js';\nimport type {HttpMethod} from '../types/options.js';\nimport type {RetryOptions} from '../types/retry.js';\n\nexport const normalizeRequestMethod = (input: string): string =>\n\trequestMethods.includes(input as HttpMethod) ? input.toUpperCase() : input;\n\nconst retryMethods = ['get', 'put', 'head', 'delete', 'options', 'trace'];\n\nconst retryStatusCodes = [408, 413, 429, 500, 502, 503, 504];\n\nconst retryAfterStatusCodes = [413, 429, 503];\n\nconst defaultRetryOptions: Required<RetryOptions> = {\n\tlimit: 2,\n\tmethods: retryMethods,\n\tstatusCodes: retryStatusCodes,\n\tafterStatusCodes: retryAfterStatusCodes,\n\tmaxRetryAfter: Number.POSITIVE_INFINITY,\n\tbackoffLimit: Number.POSITIVE_INFINITY,\n\tdelay: attemptCount => 0.3 * (2 ** (attemptCount - 1)) * 1000,\n};\n\nexport const normalizeRetryOptions = (retry: number | RetryOptions = {}): Required<RetryOptions> => {\n\tif (typeof retry === 'number') {\n\t\treturn {\n\t\t\t...defaultRetryOptions,\n\t\t\tlimit: retry,\n\t\t};\n\t}\n\n\tif (retry.methods && !Array.isArray(retry.methods)) {\n\t\tthrow new Error('retry.methods must be an array');\n\t}\n\n\tif (retry.statusCodes && !Array.isArray(retry.statusCodes)) {\n\t\tthrow new Error('retry.statusCodes must be an array');\n\t}\n\n\treturn {\n\t\t...defaultRetryOptions,\n\t\t...retry,\n\t};\n};\n","import {TimeoutError} from '../errors/TimeoutError.js';\n\nexport type TimeoutOptions = {\n\ttimeout: number;\n\tfetch: typeof fetch;\n};\n\n// `Promise.race()` workaround (#91)\nexport default async function timeout(\n\trequest: Request,\n\tinit: RequestInit,\n\tabortController: AbortController | undefined,\n\toptions: TimeoutOptions,\n): Promise<Response> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst timeoutId = setTimeout(() => {\n\t\t\tif (abortController) {\n\t\t\t\tabortController.abort();\n\t\t\t}\n\n\t\t\treject(new TimeoutError(request));\n\t\t}, options.timeout);\n\n\t\tvoid options\n\t\t\t.fetch(request, init)\n\t\t\t.then(resolve)\n\t\t\t.catch(reject)\n\t\t\t.then(() => {\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t});\n\t});\n}\n","// https://github.com/sindresorhus/delay/tree/ab98ae8dfcb38e1593286c94d934e70d14a4e111\n\nimport {type InternalOptions} from '../types/options.js';\n\nexport type DelayOptions = {\n\tsignal?: InternalOptions['signal'];\n};\n\nexport default async function delay(\n\tms: number,\n\t{signal}: DelayOptions,\n): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tif (signal) {\n\t\t\tsignal.throwIfAborted();\n\t\t\tsignal.addEventListener('abort', abortHandler, {once: true});\n\t\t}\n\n\t\tfunction abortHandler() {\n\t\t\tclearTimeout(timeoutId);\n\t\t\treject(signal!.reason as Error);\n\t\t}\n\n\t\tconst timeoutId = setTimeout(() => {\n\t\t\tsignal?.removeEventListener('abort', abortHandler);\n\t\t\tresolve();\n\t\t}, ms);\n\t});\n}\n","import {kyOptionKeys, requestOptionsRegistry} from '../core/constants.js';\n\nexport const findUnknownOptions = (\n\trequest: Request,\n\toptions: Record<string, unknown>,\n): Record<string, unknown> => {\n\tconst unknownOptions: Record<string, unknown> = {};\n\n\tfor (const key in options) {\n\t\tif (!(key in requestOptionsRegistry) && !(key in kyOptionKeys) && !(key in request)) {\n\t\t\tunknownOptions[key] = options[key];\n\t\t}\n\t}\n\n\treturn unknownOptions;\n};\n","import {HTTPError} from '../errors/HTTPError.js';\nimport {TimeoutError} from '../errors/TimeoutError.js';\nimport type {\n\tInput,\n\tInternalOptions,\n\tNormalizedOptions,\n\tOptions,\n\tSearchParamsInit,\n} from '../types/options.js';\nimport {type ResponsePromise} from '../types/ResponsePromise.js';\nimport {streamRequest, streamResponse} from '../utils/body.js';\nimport {mergeHeaders, mergeHooks} from '../utils/merge.js';\nimport {normalizeRequestMethod, normalizeRetryOptions} from '../utils/normalize.js';\nimport timeout, {type TimeoutOptions} from '../utils/timeout.js';\nimport delay from '../utils/delay.js';\nimport {type ObjectEntries} from '../utils/types.js';\nimport {findUnknownOptions} from '../utils/options.js';\nimport {\n\tmaxSafeTimeout,\n\tresponseTypes,\n\tstop,\n\tsupportsAbortController,\n\tsupportsAbortSignal,\n\tsupportsFormData,\n\tsupportsResponseStreams,\n\tsupportsRequestStreams,\n} from './constants.js';\n\nexport class Ky {\n\tstatic create(input: Input, options: Options): ResponsePromise {\n\t\tconst ky = new Ky(input, options);\n\n\t\tconst function_ = async (): Promise<Response> => {\n\t\t\tif (typeof ky._options.timeout === 'number' && ky._options.timeout > maxSafeTimeout) {\n\t\t\t\tthrow new RangeError(`The \\`timeout\\` option cannot be greater than ${maxSafeTimeout}`);\n\t\t\t}\n\n\t\t\t// Delay the fetch so that body method shortcuts can set the Accept header\n\t\t\tawait Promise.resolve();\n\t\t\t// Before using ky.request, _fetch clones it and saves the clone for future retries to use.\n\t\t\t// If retry is not needed, close the cloned request's ReadableStream for memory safety.\n\t\t\tlet response = await ky._fetch();\n\n\t\t\tfor (const hook of ky._options.hooks.afterResponse) {\n\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\tconst modifiedResponse = await hook(\n\t\t\t\t\tky.request,\n\t\t\t\t\tky._options as NormalizedOptions,\n\t\t\t\t\tky._decorateResponse(response.clone()),\n\t\t\t\t);\n\n\t\t\t\tif (modifiedResponse instanceof globalThis.Response) {\n\t\t\t\t\tresponse = modifiedResponse;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tky._decorateResponse(response);\n\n\t\t\tif (!response.ok && ky._options.throwHttpErrors) {\n\t\t\t\tlet error = new HTTPError(response, ky.request, ky._options as NormalizedOptions);\n\n\t\t\t\tfor (const hook of ky._options.hooks.beforeError) {\n\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\terror = await hook(error);\n\t\t\t\t}\n\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\t// If `onDownloadProgress` is passed, it uses the stream API internally\n\t\t\tif (ky._options.onDownloadProgress) {\n\t\t\t\tif (typeof ky._options.onDownloadProgress !== 'function') {\n\t\t\t\t\tthrow new TypeError('The `onDownloadProgress` option must be a function');\n\t\t\t\t}\n\n\t\t\t\tif (!supportsResponseStreams) {\n\t\t\t\t\tthrow new Error('Streams are not supported in your environment. `ReadableStream` is missing.');\n\t\t\t\t}\n\n\t\t\t\treturn streamResponse(response.clone(), ky._options.onDownloadProgress);\n\t\t\t}\n\n\t\t\treturn response;\n\t\t};\n\n\t\tconst isRetriableMethod = ky._options.retry.methods.includes(ky.request.method.toLowerCase());\n\t\tconst result = (isRetriableMethod ? ky._retry(function_) : function_())\n\t\t\t.finally(async () => {\n\t\t\t\t// Now that we know a retry is not needed, close the ReadableStream of the cloned request.\n\t\t\t\tif (!ky.request.bodyUsed) {\n\t\t\t\t\tawait ky.request.body?.cancel();\n\t\t\t\t}\n\t\t\t}) as ResponsePromise;\n\n\t\tfor (const [type, mimeType] of Object.entries(responseTypes) as ObjectEntries<typeof responseTypes>) {\n\t\t\tresult[type] = async () => {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n\t\t\t\tky.request.headers.set('accept', ky.request.headers.get('accept') || mimeType);\n\n\t\t\t\tconst response = await result;\n\n\t\t\t\tif (type === 'json') {\n\t\t\t\t\tif (response.status === 204) {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\n\t\t\t\t\tconst arrayBuffer = await response.clone().arrayBuffer();\n\t\t\t\t\tconst responseSize = arrayBuffer.byteLength;\n\t\t\t\t\tif (responseSize === 0) {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.parseJson) {\n\t\t\t\t\t\treturn options.parseJson(await response.text());\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn response[type]();\n\t\t\t};\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic request: Request;\n\tprotected abortController?: AbortController;\n\tprotected _retryCount = 0;\n\tprotected _input: Input;\n\tprotected _options: InternalOptions;\n\n\t// eslint-disable-next-line complexity\n\tconstructor(input: Input, options: Options = {}) {\n\t\tthis._input = input;\n\n\t\tthis._options = {\n\t\t\t...options,\n\t\t\theaders: mergeHeaders((this._input as Request).headers, options.headers),\n\t\t\thooks: mergeHooks(\n\t\t\t\t{\n\t\t\t\t\tbeforeRequest: [],\n\t\t\t\t\tbeforeRetry: [],\n\t\t\t\t\tbeforeError: [],\n\t\t\t\t\tafterResponse: [],\n\t\t\t\t},\n\t\t\t\toptions.hooks,\n\t\t\t),\n\t\t\tmethod: normalizeRequestMethod(options.method ?? (this._input as Request).method ?? 'GET'),\n\t\t\t// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n\t\t\tprefixUrl: String(options.prefixUrl || ''),\n\t\t\tretry: normalizeRetryOptions(options.retry),\n\t\t\tthrowHttpErrors: options.throwHttpErrors !== false,\n\t\t\ttimeout: options.timeout ?? 10_000,\n\t\t\tfetch: options.fetch ?? globalThis.fetch.bind(globalThis),\n\t\t};\n\n\t\tif (typeof this._input !== 'string' && !(this._input instanceof URL || this._input instanceof globalThis.Request)) {\n\t\t\tthrow new TypeError('`input` must be a string, URL, or Request');\n\t\t}\n\n\t\tif (this._options.prefixUrl && typeof this._input === 'string') {\n\t\t\tif (this._input.startsWith('/')) {\n\t\t\t\tthrow new Error('`input` must not begin with a slash when using `prefixUrl`');\n\t\t\t}\n\n\t\t\tif (!this._options.prefixUrl.endsWith('/')) {\n\t\t\t\tthis._options.prefixUrl += '/';\n\t\t\t}\n\n\t\t\tthis._input = this._options.prefixUrl + this._input;\n\t\t}\n\n\t\tif (supportsAbortController && supportsAbortSignal) {\n\t\t\tconst originalSignal = this._options.signal ?? (this._input as Request).signal;\n\t\t\tthis.abortController = new globalThis.AbortController();\n\t\t\tthis._options.signal = originalSignal ? AbortSignal.any([originalSignal, this.abortController.signal]) : this.abortController.signal;\n\t\t}\n\n\t\tif (supportsRequestStreams) {\n\t\t\t// @ts-expect-error - Types are outdated.\n\t\t\tthis._options.duplex = 'half';\n\t\t}\n\n\t\tif (this._options.json !== undefined) {\n\t\t\tthis._options.body = this._options.stringifyJson?.(this._options.json) ?? JSON.stringify(this._options.json);\n\t\t\tthis._options.headers.set('content-type', this._options.headers.get('content-type') ?? 'application/json');\n\t\t}\n\n\t\tthis.request = new globalThis.Request(this._input, this._options);\n\n\t\tif (this._options.searchParams) {\n\t\t\t// eslint-disable-next-line unicorn/prevent-abbreviations\n\t\t\tconst textSearchParams = typeof this._options.searchParams === 'string'\n\t\t\t\t? this._options.searchParams.replace(/^\\?/, '')\n\t\t\t\t: new URLSearchParams(this._options.searchParams as unknown as SearchParamsInit).toString();\n\t\t\t// eslint-disable-next-line unicorn/prevent-abbreviations\n\t\t\tconst searchParams = '?' + textSearchParams;\n\t\t\tconst url = this.request.url.replace(/(?:\\?.*?)?(?=#|$)/, searchParams);\n\n\t\t\t// To provide correct form boundary, Content-Type header should be deleted each time when new Request instantiated from another one\n\t\t\tif (\n\t\t\t\t((supportsFormData && this._options.body instanceof globalThis.FormData)\n\t\t\t\t\t|| this._options.body instanceof URLSearchParams) && !(this._options.headers && (this._options.headers as Record<string, string>)['content-type'])\n\t\t\t) {\n\t\t\t\tthis.request.headers.delete('content-type');\n\t\t\t}\n\n\t\t\t// The spread of `this.request` is required as otherwise it misses the `duplex` option for some reason and throws.\n\t\t\tthis.request = new globalThis.Request(new globalThis.Request(url, {...this.request}), this._options as RequestInit);\n\t\t}\n\n\t\t// If `onUploadProgress` is passed, it uses the stream API internally\n\t\tif (this._options.onUploadProgress) {\n\t\t\tif (typeof this._options.onUploadProgress !== 'function') {\n\t\t\t\tthrow new TypeError('The `onUploadProgress` option must be a function');\n\t\t\t}\n\n\t\t\tif (!supportsRequestStreams) {\n\t\t\t\tthrow new Error('Request streams are not supported in your environment. The `duplex` option for `Request` is not available.');\n\t\t\t}\n\n\t\t\tconst originalBody = this.request.body;\n\t\t\tif (originalBody) {\n\t\t\t\tthis.request = streamRequest(this.request, this._options.onUploadProgress);\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected _calculateRetryDelay(error: unknown) {\n\t\tthis._retryCount++;\n\n\t\tif (this._retryCount > this._options.retry.limit || error instanceof TimeoutError) {\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (error instanceof HTTPError) {\n\t\t\tif (!this._options.retry.statusCodes.includes(error.response.status)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tconst retryAfter = error.response.headers.get('Retry-After')\n\t\t\t\t?? error.response.headers.get('RateLimit-Reset')\n\t\t\t\t?? error.response.headers.get('X-RateLimit-Reset') // GitHub\n\t\t\t\t?? error.response.headers.get('X-Rate-Limit-Reset'); // Twitter\n\t\t\tif (retryAfter && this._options.retry.afterStatusCodes.includes(error.response.status)) {\n\t\t\t\tlet after = Number(retryAfter) * 1000;\n\t\t\t\tif (Number.isNaN(after)) {\n\t\t\t\t\tafter = Date.parse(retryAfter) - Date.now();\n\t\t\t\t} else if (after >= Date.parse('2024-01-01')) {\n\t\t\t\t\t// A large number is treated as a timestamp (fixed threshold protects against clock skew)\n\t\t\t\t\tafter -= Date.now();\n\t\t\t\t}\n\n\t\t\t\tconst max = this._options.retry.maxRetryAfter ?? after;\n\t\t\t\treturn after < max ? after : max;\n\t\t\t}\n\n\t\t\tif (error.response.status === 413) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst retryDelay = this._options.retry.delay(this._retryCount);\n\t\treturn Math.min(this._options.retry.backoffLimit, retryDelay);\n\t}\n\n\tprotected _decorateResponse(response: Response): Response {\n\t\tif (this._options.parseJson) {\n\t\t\tresponse.json = async () => this._options.parseJson!(await response.text());\n\t\t}\n\n\t\treturn response;\n\t}\n\n\tprotected async _retry<T extends (...arguments_: any) => Promise<any>>(function_: T): Promise<ReturnType<T> | void> {\n\t\ttry {\n\t\t\treturn await function_();\n\t\t} catch (error) {\n\t\t\tconst ms = Math.min(this._calculateRetryDelay(error), maxSafeTimeout);\n\t\t\tif (this._retryCount < 1) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tawait delay(ms, {signal: this._options.signal});\n\n\t\t\tfor (const hook of this._options.hooks.beforeRetry) {\n\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\tconst hookResult = await hook({\n\t\t\t\t\trequest: this.request,\n\t\t\t\t\toptions: (this._options as unknown) as NormalizedOptions,\n\t\t\t\t\terror: error as Error,\n\t\t\t\t\tretryCount: this._retryCount,\n\t\t\t\t});\n\n\t\t\t\t// If `stop` is returned from the hook, the retry process is stopped\n\t\t\t\tif (hookResult === stop) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this._retry(function_);\n\t\t}\n\t}\n\n\tprotected async _fetch(): Promise<Response> {\n\t\tfor (const hook of this._options.hooks.beforeRequest) {\n\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\tconst result = await hook(this.request, (this._options as unknown) as NormalizedOptions);\n\n\t\t\tif (result instanceof Request) {\n\t\t\t\tthis.request = result;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (result instanceof Response) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tconst nonRequestOptions = findUnknownOptions(this.request, this._options);\n\n\t\t// Cloning is done here to prepare in advance for retries\n\t\tconst mainRequest = this.request;\n\t\tthis.request = mainRequest.clone();\n\n\t\tif (this._options.timeout === false) {\n\t\t\treturn this._options.fetch(mainRequest, nonRequestOptions);\n\t\t}\n\n\t\treturn timeout(mainRequest, nonRequestOptions, this.abortController, this._options as TimeoutOptions);\n\t}\n}\n","/*! MIT License © Sindre Sorhus */\n\nimport {Ky} from './core/Ky.js';\nimport {requestMethods, stop} from './core/constants.js';\nimport type {KyInstance} from './types/ky.js';\nimport type {Input, Options} from './types/options.js';\nimport {validateAndMerge} from './utils/merge.js';\nimport {type Mutable} from './utils/types.js';\n\nconst createInstance = (defaults?: Partial<Options>): KyInstance => {\n\t// eslint-disable-next-line @typescript-eslint/promise-function-async\n\tconst ky: Partial<Mutable<KyInstance>> = (input: Input, options?: Options) => Ky.create(input, validateAndMerge(defaults, options));\n\n\tfor (const method of requestMethods) {\n\t\t// eslint-disable-next-line @typescript-eslint/promise-function-async\n\t\tky[method] = (input: Input, options?: Options) => Ky.create(input, validateAndMerge(defaults, options, {method}));\n\t}\n\n\tky.create = (newDefaults?: Partial<Options>) => createInstance(validateAndMerge(newDefaults));\n\tky.extend = (newDefaults?: Partial<Options> | ((parentDefaults: Partial<Options>) => Partial<Options>)) => {\n\t\tif (typeof newDefaults === 'function') {\n\t\t\tnewDefaults = newDefaults(defaults ?? {});\n\t\t}\n\n\t\treturn createInstance(validateAndMerge(defaults, newDefaults));\n\t};\n\n\tky.stop = stop;\n\n\treturn ky as KyInstance;\n};\n\nconst ky = createInstance();\n\nexport default ky;\n\nexport type {KyInstance} from './types/ky.js';\n\nexport type {\n\tInput,\n\tOptions,\n\tNormalizedOptions,\n\tRetryOptions,\n\tSearchParamsOption,\n\tProgress,\n} from './types/options.js';\n\nexport type {\n\tHooks,\n\tBeforeRequestHook,\n\tBeforeRetryHook,\n\tBeforeRetryState,\n\tBeforeErrorHook,\n\tAfterResponseHook,\n} from './types/hooks.js';\n\nexport type {ResponsePromise} from './types/ResponsePromise.js';\nexport type {KyRequest} from './types/request.js';\nexport type {KyResponse} from './types/response.js';\nexport {HTTPError} from './errors/HTTPError.js';\nexport {TimeoutError} from './errors/TimeoutError.js';\n","function isLength(value) {\n return Number.isSafeInteger(value) && value >= 0;\n}\n\nexport { isLength };\n","import { isLength } from '../../predicate/isLength.mjs';\n\nfunction isArrayLike(value) {\n return value != null && typeof value !== 'function' && isLength(value.length);\n}\n\nexport { isArrayLike };\n","function compact(arr) {\n const result = [];\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i];\n if (item) {\n result.push(item);\n }\n }\n return result;\n}\n\nexport { compact };\n","import { compact as compact$1 } from '../../array/compact.mjs';\nimport { isArrayLike } from '../predicate/isArrayLike.mjs';\n\nfunction compact(arr) {\n if (!isArrayLike(arr)) {\n return [];\n }\n return compact$1(Array.from(arr));\n}\n\nexport { compact };\n","function flatten(arr, depth = 1) {\n const result = [];\n const flooredDepth = Math.floor(depth);\n const recursive = (arr, currentDepth) => {\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i];\n if (Array.isArray(item) && currentDepth < flooredDepth) {\n recursive(item, currentDepth + 1);\n }\n else {\n result.push(item);\n }\n }\n };\n recursive(arr, 0);\n return result;\n}\n\nexport { flatten };\n","function identity(x) {\n return x;\n}\n\nexport { identity };\n","function isUnsafeProperty(key) {\n return key === '__proto__';\n}\n\nexport { isUnsafeProperty };\n","function isDeepKey(key) {\n switch (typeof key) {\n case 'number':\n case 'symbol': {\n return false;\n }\n case 'string': {\n return key.includes('.') || key.includes('[') || key.includes(']');\n }\n }\n}\n\nexport { isDeepKey };\n","function toKey(value) {\n if (typeof value === 'string' || typeof value === 'symbol') {\n return value;\n }\n if (Object.is(value?.valueOf?.(), -0)) {\n return '-0';\n }\n return String(value);\n}\n\nexport { toKey };\n","function toPath(deepKey) {\n const result = [];\n const length = deepKey.length;\n if (length === 0) {\n return result;\n }\n let index = 0;\n let key = '';\n let quoteChar = '';\n let bracket = false;\n if (deepKey.charCodeAt(0) === 46) {\n result.push('');\n index++;\n }\n while (index < length) {\n const char = deepKey[index];\n if (quoteChar) {\n if (char === '\\\\' && index + 1 < length) {\n index++;\n key += deepKey[index];\n }\n else if (char === quoteChar) {\n quoteChar = '';\n }\n else {\n key += char;\n }\n }\n else if (bracket) {\n if (char === '\"' || char === \"'\") {\n quoteChar = char;\n }\n else if (char === ']') {\n bracket = false;\n result.push(key);\n key = '';\n }\n else {\n key += char;\n }\n }\n else {\n if (char === '[') {\n bracket = true;\n if (key) {\n result.push(key);\n key = '';\n }\n }\n else if (char === '.') {\n if (key) {\n result.push(key);\n key = '';\n }\n }\n else {\n key += char;\n }\n }\n index++;\n }\n if (key) {\n result.push(key);\n }\n return result;\n}\n\nexport { toPath };\n","import { isUnsafeProperty } from '../../_internal/isUnsafeProperty.mjs';\nimport { isDeepKey } from '../_internal/isDeepKey.mjs';\nimport { toKey } from '../_internal/toKey.mjs';\nimport { toPath } from '../util/toPath.mjs';\n\nfunction get(object, path, defaultValue) {\n if (object == null) {\n return defaultValue;\n }\n switch (typeof path) {\n case 'string': {\n if (isUnsafeProperty(path)) {\n return defaultValue;\n }\n const result = object[path];\n if (result === undefined) {\n if (isDeepKey(path)) {\n return get(object, toPath(path), defaultValue);\n }\n else {\n return defaultValue;\n }\n }\n return result;\n }\n case 'number':\n case 'symbol': {\n if (typeof path === 'number') {\n path = toKey(path);\n }\n const result = object[path];\n if (result === undefined) {\n return defaultValue;\n }\n return result;\n }\n default: {\n if (Array.isArray(path)) {\n return getWithPath(object, path, defaultValue);\n }\n if (Object.is(path?.valueOf(), -0)) {\n path = '-0';\n }\n else {\n path = String(path);\n }\n if (isUnsafeProperty(path)) {\n return defaultValue;\n }\n const result = object[path];\n if (result === undefined) {\n return defaultValue;\n }\n return result;\n }\n }\n}\nfunction getWithPath(object, path, defaultValue) {\n if (path.length === 0) {\n return defaultValue;\n }\n let current = object;\n for (let index = 0; index < path.length; index++) {\n if (current == null) {\n return defaultValue;\n }\n if (isUnsafeProperty(path[index])) {\n return defaultValue;\n }\n current = current[path[index]];\n }\n if (current === undefined) {\n return defaultValue;\n }\n return current;\n}\n\nexport { get };\n","import { get } from './get.mjs';\n\nfunction property(path) {\n return function (object) {\n return get(object, path);\n };\n}\n\nexport { property };\n","function isObject(value) {\n return value !== null && (typeof value === 'object' || typeof value === 'function');\n}\n\nexport { isObject };\n","function isPrimitive(value) {\n return value == null || (typeof value !== 'object' && typeof value !== 'function');\n}\n\nexport { isPrimitive };\n","function eq(value, other) {\n return value === other || (Number.isNaN(value) && Number.isNaN(other));\n}\n\nexport { eq };\n","import { isMatch } from './isMatch.mjs';\nimport { isObject } from './isObject.mjs';\nimport { isPrimitive } from '../../predicate/isPrimitive.mjs';\nimport { eq } from '../util/eq.mjs';\n\nfunction isMatchWith(target, source, compare) {\n if (typeof compare !== 'function') {\n return isMatch(target, source);\n }\n return isMatchWithInternal(target, source, function doesMatch(objValue, srcValue, key, object, source, stack) {\n const isEqual = compare(objValue, srcValue, key, object, source, stack);\n if (isEqual !== undefined) {\n return Boolean(isEqual);\n }\n return isMatchWithInternal(objValue, srcValue, doesMatch, stack);\n }, new Map());\n}\nfunction isMatchWithInternal(target, source, compare, stack) {\n if (source === target) {\n return true;\n }\n switch (typeof source) {\n case 'object': {\n return isObjectMatch(target, source, compare, stack);\n }\n case 'function': {\n const sourceKeys = Object.keys(source);\n if (sourceKeys.length > 0) {\n return isMatchWithInternal(target, { ...source }, compare, stack);\n }\n return eq(target, source);\n }\n default: {\n if (!isObject(target)) {\n return eq(target, source);\n }\n if (typeof source === 'string') {\n return source === '';\n }\n return true;\n }\n }\n}\nfunction isObjectMatch(target, source, compare, stack) {\n if (source == null) {\n return true;\n }\n if (Array.isArray(source)) {\n return isArrayMatch(target, source, compare, stack);\n }\n if (source instanceof Map) {\n return isMapMatch(target, source, compare, stack);\n }\n if (source instanceof Set) {\n return isSetMatch(target, source, compare, stack);\n }\n const keys = Object.keys(source);\n if (target == null) {\n return keys.length === 0;\n }\n if (keys.length === 0) {\n return true;\n }\n if (stack && stack.has(source)) {\n return stack.get(source) === target;\n }\n if (stack) {\n stack.set(source, target);\n }\n try {\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (!isPrimitive(target) && !(key in target)) {\n return false;\n }\n if (source[key] === undefined && target[key] !== undefined) {\n return false;\n }\n if (source[key] === null && target[key] !== null) {\n return false;\n }\n const isEqual = compare(target[key], source[key], key, target, source, stack);\n if (!isEqual) {\n return false;\n }\n }\n return true;\n }\n finally {\n if (stack) {\n stack.delete(source);\n }\n }\n}\nfunction isMapMatch(target, source, compare, stack) {\n if (source.size === 0) {\n return true;\n }\n if (!(target instanceof Map)) {\n return false;\n }\n for (const [key, sourceValue] of source.entries()) {\n const targetValue = target.get(key);\n const isEqual = compare(targetValue, sourceValue, key, target, source, stack);\n if (isEqual === false) {\n return false;\n }\n }\n return true;\n}\nfunction isArrayMatch(target, source, compare, stack) {\n if (source.length === 0) {\n return true;\n }\n if (!Array.isArray(target)) {\n return false;\n }\n const countedIndex = new Set();\n for (let i = 0; i < source.length; i++) {\n const sourceItem = source[i];\n let found = false;\n for (let j = 0; j < target.length; j++) {\n if (countedIndex.has(j)) {\n continue;\n }\n const targetItem = target[j];\n let matches = false;\n const isEqual = compare(targetItem, sourceItem, i, target, source, stack);\n if (isEqual) {\n matches = true;\n }\n if (matches) {\n countedIndex.add(j);\n found = true;\n break;\n }\n }\n if (!found) {\n return false;\n }\n }\n return true;\n}\nfunction isSetMatch(target, source, compare, stack) {\n if (source.size === 0) {\n return true;\n }\n if (!(target instanceof Set)) {\n return false;\n }\n return isArrayMatch([...target], [...source], compare, stack);\n}\n\nexport { isMatchWith, isSetMatch };\n","import { isMatchWith } from './isMatchWith.mjs';\n\nfunction isMatch(target, source) {\n return isMatchWith(target, source, () => undefined);\n}\n\nexport { isMatch };\n","function getSymbols(object) {\n return Object.getOwnPropertySymbols(object).filter(symbol => Object.prototype.propertyIsEnumerable.call(object, symbol));\n}\n\nexport { getSymbols };\n","function getTag(value) {\n if (value == null) {\n return value === undefined ? '[object Undefined]' : '[object Null]';\n }\n return Object.prototype.toString.call(value);\n}\n\nexport { getTag };\n","const regexpTag = '[object RegExp]';\nconst stringTag = '[object String]';\nconst numberTag = '[object Number]';\nconst booleanTag = '[object Boolean]';\nconst argumentsTag = '[object Arguments]';\nconst symbolTag = '[object Symbol]';\nconst dateTag = '[object Date]';\nconst mapTag = '[object Map]';\nconst setTag = '[object Set]';\nconst arrayTag = '[object Array]';\nconst functionTag = '[object Function]';\nconst arrayBufferTag = '[object ArrayBuffer]';\nconst objectTag = '[object Object]';\nconst errorTag = '[object Error]';\nconst dataViewTag = '[object DataView]';\nconst uint8ArrayTag = '[object Uint8Array]';\nconst uint8ClampedArrayTag = '[object Uint8ClampedArray]';\nconst uint16ArrayTag = '[object Uint16Array]';\nconst uint32ArrayTag = '[object Uint32Array]';\nconst bigUint64ArrayTag = '[object BigUint64Array]';\nconst int8ArrayTag = '[object Int8Array]';\nconst int16ArrayTag = '[object Int16Array]';\nconst int32ArrayTag = '[object Int32Array]';\nconst bigInt64ArrayTag = '[object BigInt64Array]';\nconst float32ArrayTag = '[object Float32Array]';\nconst float64ArrayTag = '[object Float64Array]';\n\nexport { argumentsTag, arrayBufferTag, arrayTag, bigInt64ArrayTag, bigUint64ArrayTag, booleanTag, dataViewTag, dateTag, errorTag, float32ArrayTag, float64ArrayTag, functionTag, int16ArrayTag, int32ArrayTag, int8ArrayTag, mapTag, numberTag, objectTag, regexpTag, setTag, stringTag, symbolTag, uint16ArrayTag, uint32ArrayTag, uint8ArrayTag, uint8ClampedArrayTag };\n","function isTypedArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n\nexport { isTypedArray };\n","import { getSymbols } from '../compat/_internal/getSymbols.mjs';\nimport { getTag } from '../compat/_internal/getTag.mjs';\nimport { uint32ArrayTag, uint16ArrayTag, uint8ClampedArrayTag, uint8ArrayTag, symbolTag, stringTag, setTag, regexpTag, objectTag, numberTag, mapTag, int32ArrayTag, int16ArrayTag, int8ArrayTag, float64ArrayTag, float32ArrayTag, dateTag, booleanTag, dataViewTag, arrayBufferTag, arrayTag, argumentsTag } from '../compat/_internal/tags.mjs';\nimport { isPrimitive } from '../predicate/isPrimitive.mjs';\nimport { isTypedArray } from '../predicate/isTypedArray.mjs';\n\nfunction cloneDeepWith(obj, cloneValue) {\n return cloneDeepWithImpl(obj, undefined, obj, new Map(), cloneValue);\n}\nfunction cloneDeepWithImpl(valueToClone, keyToClone, objectToClone, stack = new Map(), cloneValue = undefined) {\n const cloned = cloneValue?.(valueToClone, keyToClone, objectToClone, stack);\n if (cloned != null) {\n return cloned;\n }\n if (isPrimitive(valueToClone)) {\n return valueToClone;\n }\n if (stack.has(valueToClone)) {\n return stack.get(valueToClone);\n }\n if (Array.isArray(valueToClone)) {\n const result = new Array(valueToClone.length);\n stack.set(valueToClone, result);\n for (let i = 0; i < valueToClone.length; i++) {\n result[i] = cloneDeepWithImpl(valueToClone[i], i, objectToClone, stack, cloneValue);\n }\n if (Object.hasOwn(valueToClone, 'index')) {\n result.index = valueToClone.index;\n }\n if (Object.hasOwn(valueToClone, 'input')) {\n result.input = valueToClone.input;\n }\n return result;\n }\n if (valueToClone instanceof Date) {\n return new Date(valueToClone.getTime());\n }\n if (valueToClone instanceof RegExp) {\n const result = new RegExp(valueToClone.source, valueToClone.flags);\n result.lastIndex = valueToClone.lastIndex;\n return result;\n }\n if (valueToClone instanceof Map) {\n const result = new Map();\n stack.set(valueToClone, result);\n for (const [key, value] of valueToClone) {\n result.set(key, cloneDeepWithImpl(value, key, objectToClone, stack, cloneValue));\n }\n return result;\n }\n if (valueToClone instanceof Set) {\n const result = new Set();\n stack.set(valueToClone, result);\n for (const value of valueToClone) {\n result.add(cloneDeepWithImpl(value, undefined, objectToClone, stack, cloneValue));\n }\n return result;\n }\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer(valueToClone)) {\n return valueToClone.subarray();\n }\n if (isTypedArray(valueToClone)) {\n const result = new (Object.getPrototypeOf(valueToClone).constructor)(valueToClone.length);\n stack.set(valueToClone, result);\n for (let i = 0; i < valueToClone.length; i++) {\n result[i] = cloneDeepWithImpl(valueToClone[i], i, objectToClone, stack, cloneValue);\n }\n return result;\n }\n if (valueToClone instanceof ArrayBuffer ||\n (typeof SharedArrayBuffer !== 'undefined' && valueToClone instanceof SharedArrayBuffer)) {\n return valueToClone.slice(0);\n }\n if (valueToClone instanceof DataView) {\n const result = new DataView(valueToClone.buffer.slice(0), valueToClone.byteOffset, valueToClone.byteLength);\n stack.set(valueToClone, result);\n copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n return result;\n }\n if (typeof File !== 'undefined' && valueToClone instanceof File) {\n const result = new File([valueToClone], valueToClone.name, {\n type: valueToClone.type,\n });\n stack.set(valueToClone, result);\n copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n return result;\n }\n if (valueToClone instanceof Blob) {\n const result = new Blob([valueToClone], { type: valueToClone.type });\n stack.set(valueToClone, result);\n copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n return result;\n }\n if (valueToClone instanceof Error) {\n const result = new valueToClone.constructor();\n stack.set(valueToClone, result);\n result.message = valueToClone.message;\n result.name = valueToClone.name;\n result.stack = valueToClone.stack;\n result.cause = valueToClone.cause;\n copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n return result;\n }\n if (typeof valueToClone === 'object' && isCloneableObject(valueToClone)) {\n const result = Object.create(Object.getPrototypeOf(valueToClone));\n stack.set(valueToClone, result);\n copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n return result;\n }\n return valueToClone;\n}\nfunction copyProperties(target, source, objectToClone = target, stack, cloneValue) {\n const keys = [...Object.keys(source), ...getSymbols(source)];\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const descriptor = Object.getOwnPropertyDescriptor(target, key);\n if (descriptor == null || descriptor.writable) {\n target[key] = cloneDeepWithImpl(source[key], key, objectToClone, stack, cloneValue);\n }\n }\n}\nfunction isCloneableObject(object) {\n switch (getTag(object)) {\n case argumentsTag:\n case arrayTag:\n case arrayBufferTag:\n case dataViewTag:\n case booleanTag:\n case dateTag:\n case float32ArrayTag:\n case float64ArrayTag:\n case int8ArrayTag:\n case int16ArrayTag:\n case int32ArrayTag:\n case mapTag:\n case numberTag:\n case objectTag:\n case regexpTag:\n case setTag:\n case stringTag:\n case symbolTag:\n case uint8ArrayTag:\n case uint8ClampedArrayTag:\n case uint16ArrayTag:\n case uint32ArrayTag: {\n return true;\n }\n default: {\n return false;\n }\n }\n}\n\nexport { cloneDeepWith, cloneDeepWithImpl, copyProperties };\n","import { cloneDeepWithImpl } from './cloneDeepWith.mjs';\n\nfunction cloneDeep(obj) {\n return cloneDeepWithImpl(obj, undefined, obj, new Map(), undefined);\n}\n\nexport { cloneDeep };\n","import { isMatch } from './isMatch.mjs';\nimport { cloneDeep } from '../../object/cloneDeep.mjs';\n\nfunction matches(source) {\n source = cloneDeep(source);\n return (target) => {\n return isMatch(target, source);\n };\n}\n\nexport { matches };\n","import { cloneDeepWith as cloneDeepWith$1, copyProperties } from '../../object/cloneDeepWith.mjs';\nimport { argumentsTag, booleanTag, stringTag, numberTag } from '../_internal/tags.mjs';\n\nfunction cloneDeepWith(obj, customizer) {\n return cloneDeepWith$1(obj, (value, key, object, stack) => {\n const cloned = customizer?.(value, key, object, stack);\n if (cloned != null) {\n return cloned;\n }\n if (typeof obj !== 'object') {\n return undefined;\n }\n switch (Object.prototype.toString.call(obj)) {\n case numberTag:\n case stringTag:\n case booleanTag: {\n const result = new obj.constructor(obj?.valueOf());\n copyProperties(result, obj);\n return result;\n }\n case argumentsTag: {\n const result = {};\n copyProperties(result, obj);\n result.length = obj.length;\n result[Symbol.iterator] = obj[Symbol.iterator];\n return result;\n }\n default: {\n return undefined;\n }\n }\n });\n}\n\nexport { cloneDeepWith };\n","import { cloneDeepWith } from './cloneDeepWith.mjs';\n\nfunction cloneDeep(obj) {\n return cloneDeepWith(obj);\n}\n\nexport { cloneDeep };\n","const IS_UNSIGNED_INTEGER = /^(?:0|[1-9]\\d*)$/;\nfunction isIndex(value, length = Number.MAX_SAFE_INTEGER) {\n switch (typeof value) {\n case 'number': {\n return Number.isInteger(value) && value >= 0 && value < length;\n }\n case 'symbol': {\n return false;\n }\n case 'string': {\n return IS_UNSIGNED_INTEGER.test(value);\n }\n }\n}\n\nexport { isIndex };\n","import { getTag } from '../_internal/getTag.mjs';\n\nfunction isArguments(value) {\n return value !== null && typeof value === 'object' && getTag(value) === '[object Arguments]';\n}\n\nexport { isArguments };\n","import { isDeepKey } from '../_internal/isDeepKey.mjs';\nimport { isIndex } from '../_internal/isIndex.mjs';\nimport { isArguments } from '../predicate/isArguments.mjs';\nimport { toPath } from '../util/toPath.mjs';\n\nfunction has(object, path) {\n let resolvedPath;\n if (Array.isArray(path)) {\n resolvedPath = path;\n }\n else if (typeof path === 'string' && isDeepKey(path) && object?.[path] == null) {\n resolvedPath = toPath(path);\n }\n else {\n resolvedPath = [path];\n }\n if (resolvedPath.length === 0) {\n return false;\n }\n let current = object;\n for (let i = 0; i < resolvedPath.length; i++) {\n const key = resolvedPath[i];\n if (current == null || !Object.hasOwn(current, key)) {\n const isSparseIndex = (Array.isArray(current) || isArguments(current)) && isIndex(key) && key < current.length;\n if (!isSparseIndex) {\n return false;\n }\n }\n current = current[key];\n }\n return true;\n}\n\nexport { has };\n","import { isMatch } from './isMatch.mjs';\nimport { toKey } from '../_internal/toKey.mjs';\nimport { cloneDeep } from '../object/cloneDeep.mjs';\nimport { get } from '../object/get.mjs';\nimport { has } from '../object/has.mjs';\n\nfunction matchesProperty(property, source) {\n switch (typeof property) {\n case 'object': {\n if (Object.is(property?.valueOf(), -0)) {\n property = '-0';\n }\n break;\n }\n case 'number': {\n property = toKey(property);\n break;\n }\n }\n source = cloneDeep(source);\n return function (target) {\n const result = get(target, property);\n if (result === undefined) {\n return has(target, property);\n }\n if (source === undefined) {\n return result === undefined;\n }\n return isMatch(result, source);\n };\n}\n\nexport { matchesProperty };\n","import { identity } from '../../function/identity.mjs';\nimport { property } from '../object/property.mjs';\nimport { matches } from '../predicate/matches.mjs';\nimport { matchesProperty } from '../predicate/matchesProperty.mjs';\n\nfunction iteratee(value) {\n if (value == null) {\n return identity;\n }\n switch (typeof value) {\n case 'function': {\n return value;\n }\n case 'object': {\n if (Array.isArray(value) && value.length === 2) {\n return matchesProperty(value[0], value[1]);\n }\n return matches(value);\n }\n case 'string':\n case 'symbol':\n case 'number': {\n return property(value);\n }\n }\n}\n\nexport { iteratee };\n","function isObjectLike(value) {\n return typeof value === 'object' && value !== null;\n}\n\nexport { isObjectLike };\n","function isSymbol(value) {\n return typeof value === 'symbol' || value instanceof Symbol;\n}\n\nexport { isSymbol };\n","import { isSymbol } from '../predicate/isSymbol.mjs';\n\nfunction toNumber(value) {\n if (isSymbol(value)) {\n return NaN;\n }\n return Number(value);\n}\n\nexport { toNumber };\n","import { toNumber } from './toNumber.mjs';\n\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === Infinity || value === -Infinity) {\n const sign = value < 0 ? -1 : 1;\n return sign * Number.MAX_VALUE;\n }\n return value === value ? value : 0;\n}\n\nexport { toFinite };\n","import { toFinite } from './toFinite.mjs';\n\nfunction toInteger(value) {\n const finite = toFinite(value);\n const remainder = finite % 1;\n return remainder ? finite - remainder : finite;\n}\n\nexport { toInteger };\n","function range(start, end, step = 1) {\n if (end == null) {\n end = start;\n start = 0;\n }\n if (!Number.isInteger(step) || step === 0) {\n throw new Error(`The step value must be a non-zero integer.`);\n }\n const length = Math.max(Math.ceil((end - start) / step), 0);\n const result = new Array(length);\n for (let i = 0; i < length; i++) {\n result[i] = start + i * step;\n }\n return result;\n}\n\nexport { range };\n","import { identity } from '../../function/identity.mjs';\nimport { range } from '../../math/range.mjs';\nimport { isArrayLike } from '../predicate/isArrayLike.mjs';\n\nfunction forEach(collection, callback = identity) {\n if (!collection) {\n return collection;\n }\n const keys = isArrayLike(collection) || Array.isArray(collection) ? range(0, collection.length) : Object.keys(collection);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = collection[key];\n const result = callback(value, key, collection);\n if (result === false) {\n break;\n }\n }\n return collection;\n}\n\nexport { forEach };\n","import { isIndex } from './isIndex.mjs';\nimport { isArrayLike } from '../predicate/isArrayLike.mjs';\nimport { isObject } from '../predicate/isObject.mjs';\nimport { eq } from '../util/eq.mjs';\n\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n if ((typeof index === 'number' && isArrayLike(object) && isIndex(index) && index < object.length) ||\n (typeof index === 'string' && index in object)) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport { isIterateeCall };\n","function isString(value) {\n return typeof value === 'string' || value instanceof String;\n}\n\nexport { isString };\n","import { identity } from '../../function/identity.mjs';\nimport { isArrayLike } from '../predicate/isArrayLike.mjs';\nimport { iteratee } from '../util/iteratee.mjs';\n\nfunction filter(source, predicate = identity) {\n if (!source) {\n return [];\n }\n predicate = iteratee(predicate);\n if (!Array.isArray(source)) {\n const result = [];\n const keys = Object.keys(source);\n const length = isArrayLike(source) ? source.length : keys.length;\n for (let i = 0; i < length; i++) {\n const key = keys[i];\n const value = source[key];\n if (predicate(value, key, source)) {\n result.push(value);\n }\n }\n return result;\n }\n const result = [];\n const length = source.length;\n for (let i = 0; i < length; i++) {\n const value = source[i];\n if (predicate(value, i, source)) {\n result.push(value);\n }\n }\n return result;\n}\n\nexport { filter };\n","import { identity } from '../../function/identity.mjs';\nimport { iteratee } from '../util/iteratee.mjs';\n\nfunction find(source, _doesMatch = identity, fromIndex = 0) {\n if (!source) {\n return undefined;\n }\n if (fromIndex < 0) {\n fromIndex = Math.max(source.length + fromIndex, 0);\n }\n const doesMatch = iteratee(_doesMatch);\n if (typeof doesMatch === 'function' && !Array.isArray(source)) {\n const keys = Object.keys(source);\n for (let i = fromIndex; i < keys.length; i++) {\n const key = keys[i];\n const value = source[key];\n if (doesMatch(value, key, source)) {\n return value;\n }\n }\n return undefined;\n }\n const values = Array.isArray(source) ? source.slice(fromIndex) : Object.values(source).slice(fromIndex);\n return values.find(doesMatch);\n}\n\nexport { find };\n","import { isArrayLike } from '../predicate/isArrayLike.mjs';\n\nfunction flatten(value, depth = 1) {\n const result = [];\n const flooredDepth = Math.floor(depth);\n if (!isArrayLike(value)) {\n return result;\n }\n const recursive = (arr, currentDepth) => {\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i];\n if (currentDepth < flooredDepth &&\n (Array.isArray(item) ||\n Boolean(item?.[Symbol.isConcatSpreadable]) ||\n (item !== null && typeof item === 'object' && Object.prototype.toString.call(item) === '[object Arguments]'))) {\n if (Array.isArray(item)) {\n recursive(item, currentDepth + 1);\n }\n else {\n recursive(Array.from(item), currentDepth + 1);\n }\n }\n else {\n result.push(item);\n }\n }\n };\n recursive(Array.from(value), 0);\n return result;\n}\n\nexport { flatten };\n","import { identity } from '../../function/identity.mjs';\nimport { range } from '../../math/range.mjs';\nimport { isArrayLike } from '../predicate/isArrayLike.mjs';\nimport { iteratee } from '../util/iteratee.mjs';\n\nfunction map(collection, _iteratee) {\n if (!collection) {\n return [];\n }\n const keys = isArrayLike(collection) || Array.isArray(collection) ? range(0, collection.length) : Object.keys(collection);\n const iteratee$1 = iteratee(_iteratee ?? identity);\n const result = new Array(keys.length);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = collection[key];\n result[i] = iteratee$1(value, key, collection);\n }\n return result;\n}\n\nexport { map };\n","function groupBy(arr, getKeyFromItem) {\n const result = {};\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i];\n const key = getKeyFromItem(item);\n if (!Object.hasOwn(result, key)) {\n result[key] = [];\n }\n result[key].push(item);\n }\n return result;\n}\n\nexport { groupBy };\n","import { groupBy as groupBy$1 } from '../../array/groupBy.mjs';\nimport { identity } from '../../function/identity.mjs';\nimport { isArrayLike } from '../predicate/isArrayLike.mjs';\nimport { iteratee } from '../util/iteratee.mjs';\n\nfunction groupBy(source, _getKeyFromItem) {\n if (source == null) {\n return {};\n }\n const items = isArrayLike(source) ? Array.from(source) : Object.values(source);\n const getKeyFromItem = iteratee(_getKeyFromItem ?? identity);\n return groupBy$1(items, getKeyFromItem);\n}\n\nexport { groupBy };\n","import { identity } from '../../function/identity.mjs';\nimport { range } from '../../math/range.mjs';\nimport { isArrayLike } from '../predicate/isArrayLike.mjs';\n\nfunction reduce(collection, iteratee = identity, accumulator) {\n if (!collection) {\n return accumulator;\n }\n let keys;\n let startIndex = 0;\n if (isArrayLike(collection)) {\n keys = range(0, collection.length);\n if (accumulator == null && collection.length > 0) {\n accumulator = collection[0];\n startIndex += 1;\n }\n }\n else {\n keys = Object.keys(collection);\n if (accumulator == null) {\n accumulator = collection[keys[0]];\n startIndex += 1;\n }\n }\n for (let i = startIndex; i < keys.length; i++) {\n const key = keys[i];\n const value = collection[key];\n accumulator = iteratee(accumulator, value, key, collection);\n }\n return accumulator;\n}\n\nexport { reduce };\n","import { reduce } from './reduce.mjs';\nimport { identity } from '../../function/identity.mjs';\nimport { isArrayLike } from '../predicate/isArrayLike.mjs';\nimport { isObjectLike } from '../predicate/isObjectLike.mjs';\nimport { iteratee } from '../util/iteratee.mjs';\n\nfunction keyBy(collection, iteratee$1) {\n if (!isArrayLike(collection) && !isObjectLike(collection)) {\n return {};\n }\n const keyFn = iteratee(iteratee$1 ?? identity);\n return reduce(collection, (result, value) => {\n const key = keyFn(value);\n result[key] = value;\n return result;\n }, {});\n}\n\nexport { keyBy };\n","function getPriority(a) {\n if (typeof a === 'symbol') {\n return 1;\n }\n if (a === null) {\n return 2;\n }\n if (a === undefined) {\n return 3;\n }\n if (a !== a) {\n return 4;\n }\n return 0;\n}\nconst compareValues = (a, b, order) => {\n if (a !== b) {\n const aPriority = getPriority(a);\n const bPriority = getPriority(b);\n if (aPriority === bPriority && aPriority === 0) {\n if (a < b) {\n return order === 'desc' ? 1 : -1;\n }\n if (a > b) {\n return order === 'desc' ? -1 : 1;\n }\n }\n return order === 'desc' ? bPriority - aPriority : aPriority - bPriority;\n }\n return 0;\n};\n\nexport { compareValues };\n","import { isSymbol } from '../predicate/isSymbol.mjs';\n\nconst regexIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/;\nconst regexIsPlainProp = /^\\w*$/;\nfunction isKey(value, object) {\n if (Array.isArray(value)) {\n return false;\n }\n if (typeof value === 'number' || typeof value === 'boolean' || value == null || isSymbol(value)) {\n return true;\n }\n return ((typeof value === 'string' && (regexIsPlainProp.test(value) || !regexIsDeepProp.test(value))) ||\n (object != null && Object.hasOwn(object, value)));\n}\n\nexport { isKey };\n","import { compareValues } from '../_internal/compareValues.mjs';\nimport { isKey } from '../_internal/isKey.mjs';\nimport { toPath } from '../util/toPath.mjs';\n\nfunction orderBy(collection, criteria, orders, guard) {\n if (collection == null) {\n return [];\n }\n orders = guard ? undefined : orders;\n if (!Array.isArray(collection)) {\n collection = Object.values(collection);\n }\n if (!Array.isArray(criteria)) {\n criteria = criteria == null ? [null] : [criteria];\n }\n if (criteria.length === 0) {\n criteria = [null];\n }\n if (!Array.isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n orders = orders.map(order => String(order));\n const getValueByNestedPath = (object, path) => {\n let target = object;\n for (let i = 0; i < path.length && target != null; ++i) {\n target = target[path[i]];\n }\n return target;\n };\n const getValueByCriterion = (criterion, object) => {\n if (object == null || criterion == null) {\n return object;\n }\n if (typeof criterion === 'object' && 'key' in criterion) {\n if (Object.hasOwn(object, criterion.key)) {\n return object[criterion.key];\n }\n return getValueByNestedPath(object, criterion.path);\n }\n if (typeof criterion === 'function') {\n return criterion(object);\n }\n if (Array.isArray(criterion)) {\n return getValueByNestedPath(object, criterion);\n }\n if (typeof object === 'object') {\n return object[criterion];\n }\n return object;\n };\n const preparedCriteria = criteria.map((criterion) => {\n if (Array.isArray(criterion) && criterion.length === 1) {\n criterion = criterion[0];\n }\n if (criterion == null || typeof criterion === 'function' || Array.isArray(criterion) || isKey(criterion)) {\n return criterion;\n }\n return { key: criterion, path: toPath(criterion) };\n });\n const preparedCollection = collection.map(item => ({\n original: item,\n criteria: preparedCriteria.map((criterion) => getValueByCriterion(criterion, item)),\n }));\n return preparedCollection\n .slice()\n .sort((a, b) => {\n for (let i = 0; i < preparedCriteria.length; i++) {\n const comparedResult = compareValues(a.criteria[i], b.criteria[i], orders[i]);\n if (comparedResult !== 0) {\n return comparedResult;\n }\n }\n return 0;\n })\n .map(item => item.original);\n}\n\nexport { orderBy };\n","import { get } from './get.mjs';\nimport { isUnsafeProperty } from '../../_internal/isUnsafeProperty.mjs';\nimport { isDeepKey } from '../_internal/isDeepKey.mjs';\nimport { toKey } from '../_internal/toKey.mjs';\nimport { toPath } from '../util/toPath.mjs';\n\nfunction unset(obj, path) {\n if (obj == null) {\n return true;\n }\n switch (typeof path) {\n case 'symbol':\n case 'number':\n case 'object': {\n if (Array.isArray(path)) {\n return unsetWithPath(obj, path);\n }\n if (typeof path === 'number') {\n path = toKey(path);\n }\n else if (typeof path === 'object') {\n if (Object.is(path?.valueOf(), -0)) {\n path = '-0';\n }\n else {\n path = String(path);\n }\n }\n if (isUnsafeProperty(path)) {\n return false;\n }\n if (obj?.[path] === undefined) {\n return true;\n }\n try {\n delete obj[path];\n return true;\n }\n catch {\n return false;\n }\n }\n case 'string': {\n if (obj?.[path] === undefined && isDeepKey(path)) {\n return unsetWithPath(obj, toPath(path));\n }\n if (isUnsafeProperty(path)) {\n return false;\n }\n try {\n delete obj[path];\n return true;\n }\n catch {\n return false;\n }\n }\n }\n}\nfunction unsetWithPath(obj, path) {\n const parent = get(obj, path.slice(0, -1), obj);\n const lastKey = path[path.length - 1];\n if (parent?.[lastKey] === undefined) {\n return true;\n }\n if (isUnsafeProperty(lastKey)) {\n return false;\n }\n try {\n delete parent[lastKey];\n return true;\n }\n catch {\n return false;\n }\n}\n\nexport { unset };\n","function isArray(value) {\n return Array.isArray(value);\n}\n\nexport { isArray };\n","function values(object) {\n if (object == null) {\n return [];\n }\n return Object.values(object);\n}\n\nexport { values };\n","function isNil(x) {\n return x == null;\n}\n\nexport { isNil };\n","import { identity } from '../../function/identity.mjs';\nimport { property } from '../object/property.mjs';\nimport { matches } from '../predicate/matches.mjs';\nimport { matchesProperty } from '../predicate/matchesProperty.mjs';\n\nfunction some(source, predicate, guard) {\n if (!source) {\n return false;\n }\n if (guard != null) {\n predicate = undefined;\n }\n if (!predicate) {\n predicate = identity;\n }\n const values = Array.isArray(source) ? source : Object.values(source);\n switch (typeof predicate) {\n case 'function': {\n if (!Array.isArray(source)) {\n const keys = Object.keys(source);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = source[key];\n if (predicate(value, key, source)) {\n return true;\n }\n }\n return false;\n }\n for (let i = 0; i < source.length; i++) {\n if (predicate(source[i], i, source)) {\n return true;\n }\n }\n return false;\n }\n case 'object': {\n if (Array.isArray(predicate) && predicate.length === 2) {\n const key = predicate[0];\n const value = predicate[1];\n const matchFunc = matchesProperty(key, value);\n if (Array.isArray(source)) {\n for (let i = 0; i < source.length; i++) {\n if (matchFunc(source[i])) {\n return true;\n }\n }\n return false;\n }\n return values.some(matchFunc);\n }\n else {\n const matchFunc = matches(predicate);\n if (Array.isArray(source)) {\n for (let i = 0; i < source.length; i++) {\n if (matchFunc(source[i])) {\n return true;\n }\n }\n return false;\n }\n return values.some(matchFunc);\n }\n }\n case 'number':\n case 'symbol':\n case 'string': {\n const propFunc = property(predicate);\n if (Array.isArray(source)) {\n for (let i = 0; i < source.length; i++) {\n if (propFunc(source[i])) {\n return true;\n }\n }\n return false;\n }\n return values.some(propFunc);\n }\n }\n}\n\nexport { some };\n","import { orderBy } from './orderBy.mjs';\nimport { flatten } from '../../array/flatten.mjs';\nimport { isIterateeCall } from '../_internal/isIterateeCall.mjs';\n\nfunction sortBy(collection, ...criteria) {\n const length = criteria.length;\n if (length > 1 && isIterateeCall(collection, criteria[0], criteria[1])) {\n criteria = [];\n }\n else if (length > 2 && isIterateeCall(criteria[0], criteria[1], criteria[2])) {\n criteria = [criteria[0]];\n }\n return orderBy(collection, flatten(criteria), ['asc']);\n}\n\nexport { sortBy };\n","function identity(x) {\n return x;\n}\n\nexport { identity };\n","import { eq } from '../util/eq.mjs';\n\nconst assignValue = (object, key, value) => {\n const objValue = object[key];\n if (!(Object.hasOwn(object, key) && eq(objValue, value)) || (value === undefined && !(key in object))) {\n object[key] = value;\n }\n};\n\nexport { assignValue };\n","import { isUnsafeProperty } from '../../_internal/isUnsafeProperty.mjs';\nimport { assignValue } from '../_internal/assignValue.mjs';\nimport { isIndex } from '../_internal/isIndex.mjs';\nimport { isKey } from '../_internal/isKey.mjs';\nimport { toKey } from '../_internal/toKey.mjs';\nimport { isObject } from '../predicate/isObject.mjs';\nimport { toPath } from '../util/toPath.mjs';\n\nfunction updateWith(obj, path, updater, customizer) {\n if (obj == null && !isObject(obj)) {\n return obj;\n }\n const resolvedPath = isKey(path, obj)\n ? [path]\n : Array.isArray(path)\n ? path\n : typeof path === 'string'\n ? toPath(path)\n : [path];\n let current = obj;\n for (let i = 0; i < resolvedPath.length && current != null; i++) {\n const key = toKey(resolvedPath[i]);\n if (isUnsafeProperty(key)) {\n continue;\n }\n let newValue;\n if (i === resolvedPath.length - 1) {\n newValue = updater(current[key]);\n }\n else {\n const objValue = current[key];\n const customizerResult = customizer?.(objValue, key, obj);\n newValue =\n customizerResult !== undefined\n ? customizerResult\n : isObject(objValue)\n ? objValue\n : isIndex(resolvedPath[i + 1])\n ? []\n : {};\n }\n assignValue(current, key, newValue);\n current = current[key];\n }\n return obj;\n}\n\nexport { updateWith };\n","import { updateWith } from './updateWith.mjs';\n\nfunction set(obj, path, value) {\n return updateWith(obj, path, () => value, () => undefined);\n}\n\nexport { set };\n","function isPlainObject(value) {\n if (!value || typeof value !== 'object') {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n const hasObjectPrototype = proto === null ||\n proto === Object.prototype ||\n Object.getPrototypeOf(proto) === null;\n if (!hasObjectPrototype) {\n return false;\n }\n return Object.prototype.toString.call(value) === '[object Object]';\n}\n\nexport { isPlainObject };\n","import { isPlainObject } from './isPlainObject.mjs';\nimport { getSymbols } from '../compat/_internal/getSymbols.mjs';\nimport { getTag } from '../compat/_internal/getTag.mjs';\nimport { functionTag, regexpTag, symbolTag, dateTag, booleanTag, numberTag, stringTag, objectTag, errorTag, dataViewTag, arrayBufferTag, float64ArrayTag, float32ArrayTag, bigInt64ArrayTag, int32ArrayTag, int16ArrayTag, int8ArrayTag, bigUint64ArrayTag, uint32ArrayTag, uint16ArrayTag, uint8ClampedArrayTag, uint8ArrayTag, arrayTag, setTag, mapTag, argumentsTag } from '../compat/_internal/tags.mjs';\nimport { eq } from '../compat/util/eq.mjs';\n\nfunction isEqualWith(a, b, areValuesEqual) {\n return isEqualWithImpl(a, b, undefined, undefined, undefined, undefined, areValuesEqual);\n}\nfunction isEqualWithImpl(a, b, property, aParent, bParent, stack, areValuesEqual) {\n const result = areValuesEqual(a, b, property, aParent, bParent, stack);\n if (result !== undefined) {\n return result;\n }\n if (typeof a === typeof b) {\n switch (typeof a) {\n case 'bigint':\n case 'string':\n case 'boolean':\n case 'symbol':\n case 'undefined': {\n return a === b;\n }\n case 'number': {\n return a === b || Object.is(a, b);\n }\n case 'function': {\n return a === b;\n }\n case 'object': {\n return areObjectsEqual(a, b, stack, areValuesEqual);\n }\n }\n }\n return areObjectsEqual(a, b, stack, areValuesEqual);\n}\nfunction areObjectsEqual(a, b, stack, areValuesEqual) {\n if (Object.is(a, b)) {\n return true;\n }\n let aTag = getTag(a);\n let bTag = getTag(b);\n if (aTag === argumentsTag) {\n aTag = objectTag;\n }\n if (bTag === argumentsTag) {\n bTag = objectTag;\n }\n if (aTag !== bTag) {\n return false;\n }\n switch (aTag) {\n case stringTag:\n return a.toString() === b.toString();\n case numberTag: {\n const x = a.valueOf();\n const y = b.valueOf();\n return eq(x, y);\n }\n case booleanTag:\n case dateTag:\n case symbolTag:\n return Object.is(a.valueOf(), b.valueOf());\n case regexpTag: {\n return a.source === b.source && a.flags === b.flags;\n }\n case functionTag: {\n return a === b;\n }\n }\n stack = stack ?? new Map();\n const aStack = stack.get(a);\n const bStack = stack.get(b);\n if (aStack != null && bStack != null) {\n return aStack === b;\n }\n stack.set(a, b);\n stack.set(b, a);\n try {\n switch (aTag) {\n case mapTag: {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a.entries()) {\n if (!b.has(key) || !isEqualWithImpl(value, b.get(key), key, a, b, stack, areValuesEqual)) {\n return false;\n }\n }\n return true;\n }\n case setTag: {\n if (a.size !== b.size) {\n return false;\n }\n const aValues = Array.from(a.values());\n const bValues = Array.from(b.values());\n for (let i = 0; i < aValues.length; i++) {\n const aValue = aValues[i];\n const index = bValues.findIndex(bValue => {\n return isEqualWithImpl(aValue, bValue, undefined, a, b, stack, areValuesEqual);\n });\n if (index === -1) {\n return false;\n }\n bValues.splice(index, 1);\n }\n return true;\n }\n case arrayTag:\n case uint8ArrayTag:\n case uint8ClampedArrayTag:\n case uint16ArrayTag:\n case uint32ArrayTag:\n case bigUint64ArrayTag:\n case int8ArrayTag:\n case int16ArrayTag:\n case int32ArrayTag:\n case bigInt64ArrayTag:\n case float32ArrayTag:\n case float64ArrayTag: {\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer(a) !== Buffer.isBuffer(b)) {\n return false;\n }\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (!isEqualWithImpl(a[i], b[i], i, a, b, stack, areValuesEqual)) {\n return false;\n }\n }\n return true;\n }\n case arrayBufferTag: {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n return areObjectsEqual(new Uint8Array(a), new Uint8Array(b), stack, areValuesEqual);\n }\n case dataViewTag: {\n if (a.byteLength !== b.byteLength || a.byteOffset !== b.byteOffset) {\n return false;\n }\n return areObjectsEqual(new Uint8Array(a), new Uint8Array(b), stack, areValuesEqual);\n }\n case errorTag: {\n return a.name === b.name && a.message === b.message;\n }\n case objectTag: {\n const areEqualInstances = areObjectsEqual(a.constructor, b.constructor, stack, areValuesEqual) ||\n (isPlainObject(a) && isPlainObject(b));\n if (!areEqualInstances) {\n return false;\n }\n const aKeys = [...Object.keys(a), ...getSymbols(a)];\n const bKeys = [...Object.keys(b), ...getSymbols(b)];\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n for (let i = 0; i < aKeys.length; i++) {\n const propKey = aKeys[i];\n const aProp = a[propKey];\n if (!Object.hasOwn(b, propKey)) {\n return false;\n }\n const bProp = b[propKey];\n if (!isEqualWithImpl(aProp, bProp, propKey, a, b, stack, areValuesEqual)) {\n return false;\n }\n }\n return true;\n }\n default: {\n return false;\n }\n }\n }\n finally {\n stack.delete(a);\n stack.delete(b);\n }\n}\n\nexport { isEqualWith };\n","function noop() { }\n\nexport { noop };\n","import { isEqualWith } from './isEqualWith.mjs';\nimport { noop } from '../function/noop.mjs';\n\nfunction isEqual(a, b) {\n return isEqualWith(a, b, noop);\n}\n\nexport { isEqual };\n","function isBuffer(x) {\n return typeof Buffer !== 'undefined' && Buffer.isBuffer(x);\n}\n\nexport { isBuffer };\n","function isPrototype(value) {\n const constructor = value?.constructor;\n const prototype = typeof constructor === 'function' ? constructor.prototype : Object.prototype;\n return value === prototype;\n}\n\nexport { isPrototype };\n","import { isTypedArray as isTypedArray$1 } from '../../predicate/isTypedArray.mjs';\n\nfunction isTypedArray(x) {\n return isTypedArray$1(x);\n}\n\nexport { isTypedArray };\n","import { toInteger } from './toInteger.mjs';\n\nfunction times(n, getValue) {\n n = toInteger(n);\n if (n < 1 || !Number.isSafeInteger(n)) {\n return [];\n }\n const result = new Array(n);\n for (let i = 0; i < n; i++) {\n result[i] = typeof getValue === 'function' ? getValue(i) : i;\n }\n return result;\n}\n\nexport { times };\n","import { isBuffer } from '../../predicate/isBuffer.mjs';\nimport { isPrototype } from '../_internal/isPrototype.mjs';\nimport { isArrayLike } from '../predicate/isArrayLike.mjs';\nimport { isTypedArray } from '../predicate/isTypedArray.mjs';\nimport { times } from '../util/times.mjs';\n\nfunction keys(object) {\n if (isArrayLike(object)) {\n return arrayLikeKeys(object);\n }\n const result = Object.keys(Object(object));\n if (!isPrototype(object)) {\n return result;\n }\n return result.filter(key => key !== 'constructor');\n}\nfunction arrayLikeKeys(object) {\n const indices = times(object.length, index => `${index}`);\n const filteredKeys = new Set(indices);\n if (isBuffer(object)) {\n filteredKeys.add('offset');\n filteredKeys.add('parent');\n }\n if (isTypedArray(object)) {\n filteredKeys.add('buffer');\n filteredKeys.add('byteLength');\n filteredKeys.add('byteOffset');\n }\n return [...indices, ...Object.keys(object).filter(key => !filteredKeys.has(key))];\n}\n\nexport { keys };\n","import { isBuffer } from '../../predicate/isBuffer.mjs';\nimport { isPrototype } from '../_internal/isPrototype.mjs';\nimport { isArrayLike } from '../predicate/isArrayLike.mjs';\nimport { isTypedArray } from '../predicate/isTypedArray.mjs';\nimport { times } from '../util/times.mjs';\n\nfunction keysIn(object) {\n if (object == null) {\n return [];\n }\n switch (typeof object) {\n case 'object':\n case 'function': {\n if (isArrayLike(object)) {\n return arrayLikeKeysIn(object);\n }\n if (isPrototype(object)) {\n return prototypeKeysIn(object);\n }\n return keysInImpl(object);\n }\n default: {\n return keysInImpl(Object(object));\n }\n }\n}\nfunction keysInImpl(object) {\n const result = [];\n for (const key in object) {\n result.push(key);\n }\n return result;\n}\nfunction prototypeKeysIn(object) {\n const keys = keysInImpl(object);\n return keys.filter(key => key !== 'constructor');\n}\nfunction arrayLikeKeysIn(object) {\n const indices = times(object.length, index => `${index}`);\n const filteredKeys = new Set(indices);\n if (isBuffer(object)) {\n filteredKeys.add('offset');\n filteredKeys.add('parent');\n }\n if (isTypedArray(object)) {\n filteredKeys.add('buffer');\n filteredKeys.add('byteLength');\n filteredKeys.add('byteOffset');\n }\n return [...indices, ...keysInImpl(object).filter(key => !filteredKeys.has(key))];\n}\n\nexport { keysIn };\n","import { unset } from './unset.mjs';\nimport { cloneDeep } from '../../object/cloneDeep.mjs';\n\nfunction omit(obj, ...keysArr) {\n if (obj == null) {\n return {};\n }\n const result = cloneDeep(obj);\n for (let i = 0; i < keysArr.length; i++) {\n let keys = keysArr[i];\n switch (typeof keys) {\n case 'object': {\n if (!Array.isArray(keys)) {\n keys = Array.from(keys);\n }\n for (let j = 0; j < keys.length; j++) {\n const key = keys[j];\n unset(result, key);\n }\n break;\n }\n case 'string':\n case 'symbol':\n case 'number': {\n unset(result, keys);\n break;\n }\n }\n }\n return result;\n}\n\nexport { omit };\n","import { getSymbols } from './getSymbols.mjs';\n\nfunction getSymbolsIn(object) {\n const result = [];\n while (object) {\n result.push(...getSymbols(object));\n object = Object.getPrototypeOf(object);\n }\n return result;\n}\n\nexport { getSymbolsIn };\n","import { keysIn } from './keysIn.mjs';\nimport { range } from '../../math/range.mjs';\nimport { getSymbolsIn } from '../_internal/getSymbolsIn.mjs';\nimport { identity } from '../function/identity.mjs';\nimport { isArrayLike } from '../predicate/isArrayLike.mjs';\nimport { isSymbol } from '../predicate/isSymbol.mjs';\nimport { iteratee } from '../util/iteratee.mjs';\n\nfunction pickBy(obj, shouldPick) {\n if (obj == null) {\n return {};\n }\n const predicate = iteratee(shouldPick ?? identity);\n const result = {};\n const keys = isArrayLike(obj) ? range(0, obj.length) : [...keysIn(obj), ...getSymbolsIn(obj)];\n for (let i = 0; i < keys.length; i++) {\n const key = (isSymbol(keys[i]) ? keys[i] : keys[i].toString());\n const value = obj[key];\n if (predicate(value, key, obj)) {\n result[key] = value;\n }\n }\n return result;\n}\n\nexport { pickBy };\n","function isBoolean(value) {\n return typeof value === 'boolean' || value instanceof Boolean;\n}\n\nexport { isBoolean };\n","function isFinite(value) {\n return Number.isFinite(value);\n}\n\nexport { isFinite };\n","function isInteger(value) {\n return Number.isInteger(value);\n}\n\nexport { isInteger };\n","import * as _ from './toolkit';\n\nexport function getFieldMask(obj: Record<string, unknown>) {\n let fromGrid = '';\n const fromRoot = Object.keys(obj).filter((key) => key !== 'gridProperties').join(',');\n\n if (obj.gridProperties) {\n fromGrid = Object.keys(obj.gridProperties).map((key) => `gridProperties.${key}`).join(',');\n if (fromGrid.length && fromRoot.length) {\n fromGrid = `${fromGrid},`;\n }\n }\n return fromGrid + fromRoot;\n}\n\nexport function columnToLetter(column: number) {\n let temp;\n let letter = '';\n let col = column;\n while (col > 0) {\n temp = (col - 1) % 26;\n letter = String.fromCharCode(temp + 65) + letter;\n col = (col - temp - 1) / 26;\n }\n return letter;\n}\n\nexport function letterToColumn(letter: string) {\n let column = 0;\n const { length } = letter;\n for (let i = 0; i < length; i++) {\n column += (letter.charCodeAt(i) - 64) * 26 ** (length - i - 1);\n }\n return column;\n}\n\nexport function checkForDuplicateHeaders(headers: string[]) {\n // check for duplicate headers\n const checkForDupes = _.groupBy(headers); // { c1: ['c1'], c2: ['c2', 'c2' ]}\n _.each(checkForDupes, (grouped, header) => {\n if (!header) return; // empty columns are skipped, so multiple is ok\n if (grouped.length > 1) {\n throw new Error(`Duplicate header detected: \"${header}\". Please make sure all non-empty headers are unique`);\n }\n });\n}\n\n","import { GoogleSpreadsheetWorksheet } from './GoogleSpreadsheetWorksheet';\nimport { columnToLetter } from './utils';\n\n\n// TODO: add type for possible row values (currently any)\n\nexport class GoogleSpreadsheetRow<T extends Record<string, any> = Record<string, any>> {\n constructor(\n /** parent GoogleSpreadsheetWorksheet instance */\n readonly _worksheet: GoogleSpreadsheetWorksheet,\n /** the A1 row (1-indexed) */\n private _rowNumber: number,\n /** raw underlying data for row */\n private _rawData: any[]\n ) {\n\n }\n\n private _deleted = false;\n get deleted() { return this._deleted; }\n\n /** row number (matches A1 notation, ie first row is 1) */\n get rowNumber() { return this._rowNumber; }\n /**\n * @internal\n * Used internally to update row numbers after deleting rows.\n * Should not be called directly.\n */\n _updateRowNumber(newRowNumber: number) {\n this._rowNumber = newRowNumber;\n }\n get a1Range() {\n return [\n this._worksheet.a1SheetName,\n '!',\n `A${this._rowNumber}`,\n ':',\n `${columnToLetter(this._worksheet.headerValues.length)}${this._rowNumber}`,\n ].join('');\n }\n\n /** get row's value of specific cell (by header key) */\n get(key: keyof T) {\n const index = this._worksheet.headerValues.indexOf(key as string);\n return this._rawData[index];\n }\n /** set row's value of specific cell (by header key) */\n set<K extends keyof T>(key: K, val: T[K]) {\n const index = this._worksheet.headerValues.indexOf(key as string);\n this._rawData[index] = val;\n }\n /** set multiple values in the row at once from an object */\n assign(obj: Partial<T>) {\n // eslint-disable-next-line no-restricted-syntax, guard-for-in\n for (const key in obj) this.set(key, obj[key] as any);\n }\n\n /** return raw object of row data */\n toObject() {\n const o: Partial<T> = {};\n for (let i = 0; i < this._worksheet.headerValues.length; i++) {\n const key: keyof T = this._worksheet.headerValues[i];\n if (!key) continue;\n o[key] = this._rawData[i];\n }\n return o;\n }\n\n /** save row values */\n async save(options?: { raw?: boolean }) {\n if (this._deleted) throw new Error('This row has been deleted - call getRows again before making updates.');\n\n const response = await this._worksheet._spreadsheet.sheetsApi.put(`values/${encodeURIComponent(this.a1Range)}`, {\n searchParams: {\n valueInputOption: options?.raw ? 'RAW' : 'USER_ENTERED',\n includeValuesInResponse: true,\n },\n json: {\n range: this.a1Range,\n majorDimension: 'ROWS',\n values: [this._rawData],\n },\n });\n const data = await response.json<any>();\n this._rawData = data.updatedData.values[0];\n }\n\n /** delete this row */\n async delete() {\n if (this._deleted) throw new Error('This row has been deleted - call getRows again before making updates.');\n\n const result = await this._worksheet._makeSingleUpdateRequest('deleteRange', {\n range: {\n sheetId: this._worksheet.sheetId,\n startRowIndex: this._rowNumber - 1, // this format is zero indexed, because of course...\n endRowIndex: this._rowNumber,\n },\n shiftDimension: 'ROWS',\n });\n this._deleted = true;\n this._worksheet._shiftRowCache(this.rowNumber);\n\n return result;\n }\n\n /**\n * @internal\n * Used internally to clear row data after calling sheet.clearRows\n * Should not be called directly.\n */\n _clearRowData() {\n for (let i = 0; i < this._rawData.length; i++) {\n this._rawData[i] = '';\n }\n }\n}\n","import { CellValueErrorType, ErrorValue } from './types/sheets-types';\n\n/**\n * Cell error\n *\n * not a js \"error\" that gets thrown, but a value that holds an error code and message for a cell\n * it's useful to use a class so we can check `instanceof`\n\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/other#ErrorType\n */\nexport class GoogleSpreadsheetCellErrorValue {\n /**\n * type of the error\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/other#ErrorType\n * */\n readonly type: CellValueErrorType;\n\n /** A message with more information about the error (in the spreadsheet's locale) */\n readonly message: string;\n\n constructor(rawError: ErrorValue) {\n this.type = rawError.type;\n this.message = rawError.message;\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport * as _ from './toolkit';\n\nimport { columnToLetter } from './utils';\n\nimport { GoogleSpreadsheetWorksheet } from './GoogleSpreadsheetWorksheet';\nimport { GoogleSpreadsheetCellErrorValue } from './GoogleSpreadsheetCellErrorValue';\n\nimport {\n CellData,\n CellFormat, CellValueType, ColumnIndex, RowIndex,\n} from './types/sheets-types';\n\nexport class GoogleSpreadsheetCell {\n private _rawData?: CellData;\n private _draftData: any = {};\n private _error?: GoogleSpreadsheetCellErrorValue;\n\n constructor(\n readonly _sheet: GoogleSpreadsheetWorksheet,\n private _rowIndex: RowIndex,\n private _columnIndex: ColumnIndex,\n rawCellData: CellData\n ) {\n this._updateRawData(rawCellData);\n this._rawData = rawCellData; // so TS does not complain\n }\n\n // TODO: figure out how to deal with empty rawData\n // newData can be undefined/null if the cell is totally empty and unformatted\n /**\n * update cell using raw CellData coming back from sheets API\n * @internal\n */\n _updateRawData(newData: CellData) {\n this._rawData = newData;\n this._draftData = {};\n if (this._rawData?.effectiveValue && 'errorValue' in this._rawData.effectiveValue) {\n this._error = new GoogleSpreadsheetCellErrorValue(this._rawData.effectiveValue.errorValue);\n } else {\n this._error = undefined;\n }\n }\n\n // CELL LOCATION/ADDRESS /////////////////////////////////////////////////////////////////////////\n get rowIndex() { return this._rowIndex; }\n get columnIndex() { return this._columnIndex; }\n get a1Column() { return columnToLetter(this._columnIndex + 1); }\n get a1Row() { return this._rowIndex + 1; } // a1 row numbers start at 1 instead of 0\n get a1Address() { return `${this.a1Column}${this.a1Row}`; }\n\n // CELL CONTENTS - VALUE/FORMULA/NOTES ///////////////////////////////////////////////////////////\n get value(): number | boolean | string | null | GoogleSpreadsheetCellErrorValue {\n // const typeKey = _.keys(this._rawData.effectiveValue)[0];\n if (this._draftData.value !== undefined) throw new Error('Value has been changed');\n if (this._error) return this._error;\n if (!this._rawData?.effectiveValue) return null;\n return _.values(this._rawData.effectiveValue)[0];\n }\n\n\n set value(newValue: number | boolean | Date | string | null | undefined | GoogleSpreadsheetCellErrorValue) {\n // had to include the GoogleSpreadsheetCellErrorValue in the type to make TS happy\n if (newValue instanceof GoogleSpreadsheetCellErrorValue) {\n throw new Error(\"You can't manually set a value to an error\");\n }\n\n if (_.isBoolean(newValue)) {\n this._draftData.valueType = 'boolValue';\n } else if (_.isString(newValue)) {\n if (newValue.substring(0, 1) === '=') this._draftData.valueType = 'formulaValue';\n else this._draftData.valueType = 'stringValue';\n } else if (_.isFinite(newValue)) {\n this._draftData.valueType = 'numberValue';\n } else if (_.isNil(newValue)) {\n // null or undefined\n this._draftData.valueType = 'stringValue';\n newValue = '';\n } else {\n throw new Error('Set value to boolean, string, or number');\n }\n this._draftData.value = newValue;\n }\n\n get valueType(): CellValueType | null {\n // an error only happens with a formula (as far as I know)\n if (this._error) return 'errorValue';\n if (!this._rawData?.effectiveValue) return null;\n return _.keys(this._rawData.effectiveValue)[0] as CellValueType;\n }\n\n /** The formatted value of the cell - this is the value as it's shown to the user */\n get formattedValue(): string | null { return this._rawData?.formattedValue || null; }\n\n get formula() { return _.get(this._rawData, 'userEnteredValue.formulaValue', null); }\n set formula(newValue: string | null) {\n if (!newValue) throw new Error('To clear a formula, set `cell.value = null`');\n if (newValue.substring(0, 1) !== '=') throw new Error('formula must begin with \"=\"');\n this.value = newValue; // use existing value setter\n }\n /**\n * @deprecated use `cell.errorValue` instead\n */\n get formulaError() { return this._error; }\n /**\n * error contained in the cell, which can happen with a bad formula (maybe some other weird cases?)\n */\n get errorValue() { return this._error; }\n\n get numberValue(): number | undefined {\n if (this.valueType !== 'numberValue') return undefined;\n return this.value as number;\n }\n set numberValue(val: number | undefined) {\n this.value = val;\n }\n\n get boolValue(): boolean | undefined {\n if (this.valueType !== 'boolValue') return undefined;\n return this.value as boolean;\n }\n set boolValue(val: boolean | undefined) {\n this.value = val;\n }\n\n get stringValue(): string | undefined {\n if (this.valueType !== 'stringValue') return undefined;\n return this.value as string;\n }\n set stringValue(val: string | undefined) {\n if (val?.startsWith('=')) {\n throw new Error('Use cell.formula to set formula values');\n }\n this.value = val;\n }\n\n /**\n * Hyperlink contained within the cell.\n *\n * To modify, do not set directly. Instead set cell.formula, for example `cell.formula = \\'=HYPERLINK(\"http://google.com\", \"Google\")\\'`\n */\n get hyperlink() {\n if (this._draftData.value) throw new Error('Save cell to be able to read hyperlink');\n return this._rawData?.hyperlink;\n }\n\n /** a note attached to the cell */\n get note(): string {\n return this._draftData.note !== undefined ? this._draftData.note : this._rawData?.note || '';\n }\n set note(newVal: string | null | undefined | false) {\n if (newVal === null || newVal === undefined || newVal === false) newVal = '';\n if (!_.isString(newVal)) throw new Error('Note must be a string');\n if (newVal === this._rawData?.note) delete this._draftData.note;\n else this._draftData.note = newVal;\n }\n\n // CELL FORMATTING ///////////////////////////////////////////////////////////////////////////////\n get userEnteredFormat() { return Object.freeze(this._rawData?.userEnteredFormat); }\n get effectiveFormat() { return Object.freeze(this._rawData?.effectiveFormat); }\n\n private _getFormatParam<T extends keyof CellFormat>(param: T): Readonly<CellFormat[T]> {\n // we freeze the object so users don't change nested props accidentally\n // TODO: figure out something that would throw an error if you try to update it?\n if (_.get(this._draftData, `userEnteredFormat.${param}`)) {\n throw new Error('User format is unsaved - save the cell to be able to read it again');\n }\n // TODO: figure out how to deal with possible empty rawData\n // if (!this._rawData?.userEnteredFormat?.[param]) {\n // return undefined;\n // }\n return Object.freeze(this._rawData!.userEnteredFormat[param]);\n }\n\n private _setFormatParam<T extends keyof CellFormat>(param: T, newVal: CellFormat[T]) {\n if (_.isEqual(newVal, _.get(this._rawData, `userEnteredFormat.${param}`))) {\n _.unset(this._draftData, `userEnteredFormat.${param}`);\n } else {\n _.set(this._draftData, `userEnteredFormat.${param}`, newVal);\n this._draftData.clearFormat = false;\n }\n }\n\n // format getters\n get numberFormat() { return this._getFormatParam('numberFormat'); }\n get backgroundColor() { return this._getFormatParam('backgroundColor'); }\n get backgroundColorStyle() { return this._getFormatParam('backgroundColorStyle'); }\n get borders() { return this._getFormatParam('borders'); }\n get padding() { return this._getFormatParam('padding'); }\n get horizontalAlignment() { return this._getFormatParam('horizontalAlignment'); }\n get verticalAlignment() { return this._getFormatParam('verticalAlignment'); }\n get wrapStrategy() { return this._getFormatParam('wrapStrategy'); }\n get textDirection() { return this._getFormatParam('textDirection'); }\n get textFormat() { return this._getFormatParam('textFormat'); }\n get hyperlinkDisplayType() { return this._getFormatParam('hyperlinkDisplayType'); }\n get textRotation() { return this._getFormatParam('textRotation'); }\n\n // format setters\n set numberFormat(newVal: CellFormat['numberFormat']) { this._setFormatParam('numberFormat', newVal); }\n set backgroundColor(newVal: CellFormat['backgroundColor']) { this._setFormatParam('backgroundColor', newVal); }\n set backgroundColorStyle(newVal: CellFormat['backgroundColorStyle']) { this._setFormatParam('backgroundColorStyle', newVal); }\n set borders(newVal: CellFormat['borders']) { this._setFormatParam('borders', newVal); }\n set padding(newVal: CellFormat['padding']) { this._setFormatParam('padding', newVal); }\n set horizontalAlignment(newVal: CellFormat['horizontalAlignment']) { this._setFormatParam('horizontalAlignment', newVal); }\n set verticalAlignment(newVal: CellFormat['verticalAlignment']) { this._setFormatParam('verticalAlignment', newVal); }\n set wrapStrategy(newVal: CellFormat['wrapStrategy']) { this._setFormatParam('wrapStrategy', newVal); }\n set textDirection(newVal: CellFormat['textDirection']) { this._setFormatParam('textDirection', newVal); }\n set textFormat(newVal: CellFormat['textFormat']) { this._setFormatParam('textFormat', newVal); }\n set hyperlinkDisplayType(newVal: CellFormat['hyperlinkDisplayType']) { this._setFormatParam('hyperlinkDisplayType', newVal); }\n set textRotation(newVal: CellFormat['textRotation']) { this._setFormatParam('textRotation', newVal); }\n\n clearAllFormatting() {\n // need to track this separately since by setting/unsetting things, we may end up with\n // this._draftData.userEnteredFormat as an empty object, but not an intent to clear it\n this._draftData.clearFormat = true;\n delete this._draftData.userEnteredFormat;\n }\n\n // SAVING + UTILS ////////////////////////////////////////////////////////////////////////////////\n\n // returns true if there are any updates that have not been saved yet\n get _isDirty() {\n // have to be careful about checking undefined rather than falsy\n // in case a new value is empty string or 0 or false\n if (this._draftData.note !== undefined) return true;\n if (_.keys(this._draftData.userEnteredFormat).length) return true;\n if (this._draftData.clearFormat) return true;\n if (this._draftData.value !== undefined) return true;\n return false;\n }\n\n discardUnsavedChanges() {\n this._draftData = {};\n }\n\n /**\n * saves updates for single cell\n * usually it's better to make changes and call sheet.saveUpdatedCells\n * */\n async save() {\n await this._sheet.saveCells([this]);\n }\n\n /**\n * used by worksheet when saving cells\n * returns an individual batchUpdate request to update the cell\n * @internal\n */\n _getUpdateRequest() {\n // this logic should match the _isDirty logic above\n // but we need it broken up to build the request below\n const isValueUpdated = this._draftData.value !== undefined;\n const isNoteUpdated = this._draftData.note !== undefined;\n const isFormatUpdated = !!_.keys(this._draftData.userEnteredFormat || {}).length;\n const isFormatCleared = this._draftData.clearFormat;\n\n // if no updates, we return null, which we can filter out later before sending requests\n if (!_.some([isValueUpdated, isNoteUpdated, isFormatUpdated, isFormatCleared])) {\n return null;\n }\n\n // build up the formatting object, which has some quirks...\n const format = {\n // have to pass the whole object or it will clear existing properties\n ...this._rawData?.userEnteredFormat,\n ...this._draftData.userEnteredFormat,\n };\n // if background color already set, cell has backgroundColor and backgroundColorStyle\n // but backgroundColorStyle takes precendence so we must remove to set the color\n // see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/cells#CellFormat\n if (_.get(this._draftData, 'userEnteredFormat.backgroundColor')) {\n delete (format.backgroundColorStyle);\n }\n\n return {\n updateCells: {\n rows: [{\n values: [{\n ...isValueUpdated && {\n userEnteredValue: { [this._draftData.valueType]: this._draftData.value },\n },\n ...isNoteUpdated && {\n note: this._draftData.note,\n },\n ...isFormatUpdated && {\n userEnteredFormat: format,\n },\n ...isFormatCleared && {\n userEnteredFormat: {},\n },\n }],\n }],\n // turns into a string of which fields to update ex \"note,userEnteredFormat\"\n fields: _.keys(_.pickBy({\n userEnteredValue: isValueUpdated,\n note: isNoteUpdated,\n userEnteredFormat: isFormatUpdated || isFormatCleared,\n })).join(','),\n start: {\n sheetId: this._sheet.sheetId,\n rowIndex: this.rowIndex,\n columnIndex: this.columnIndex,\n },\n },\n };\n }\n}\n","import { type ReadableStream } from 'stream/web';\nimport * as _ from './toolkit';\n\nimport { GoogleSpreadsheetRow } from './GoogleSpreadsheetRow';\nimport { GoogleSpreadsheetCell } from './GoogleSpreadsheetCell';\n\nimport {\n getFieldMask, columnToLetter, letterToColumn, checkForDuplicateHeaders,\n} from './utils';\nimport { GoogleSpreadsheet } from './GoogleSpreadsheet';\nimport {\n A1Range, SpreadsheetId, DimensionRangeIndexes, WorksheetDimension, WorksheetId, WorksheetProperties, A1Address,\n RowIndex, ColumnIndex, DataFilterWithoutWorksheetId, DataFilter, GetValuesRequestOptions, WorksheetGridProperties,\n WorksheetDimensionProperties, CellDataRange, AddRowOptions, GridRangeWithOptionalWorksheetId,\n DataValidationRule,\n} from './types/sheets-types';\n\n\n// types of cell data accepted when using row based api\ntype RowCellData = string | number | boolean | Date;\n// raw row data can be passed in as an array or an object using header values as keys\ntype RawRowData = RowCellData[] | Record<string, RowCellData>;\n\nexport class GoogleSpreadsheetWorksheet {\n // assume \"header row\" (for row-based calls) is in first row, can be adjusted later\n private _headerRowIndex = 1;\n\n private _rawProperties: WorksheetProperties | null = null;\n private _cells: GoogleSpreadsheetCell[][] = [];\n private _rowMetadata: any[] = [];\n private _columnMetadata: any[] = [];\n\n private _headerValues: string[] | undefined;\n get headerValues() {\n if (!this._headerValues) {\n throw new Error('Header values are not yet loaded');\n }\n return this._headerValues!;\n }\n\n constructor(\n /** parent GoogleSpreadsheet instance */\n readonly _spreadsheet: GoogleSpreadsheet,\n rawProperties: WorksheetProperties,\n rawCellData?: CellDataRange[]\n ) {\n this._headerRowIndex = 1;\n\n // basic properties\n this._rawProperties = rawProperties;\n\n this._cells = []; // we will use a 2d sparse array to store cells;\n\n this._rowMetadata = []; // 1d sparse array\n this._columnMetadata = [];\n\n if (rawCellData) this._fillCellData(rawCellData);\n }\n\n // INTERNAL UTILITY FUNCTIONS ////////////////////////////////////////////////////////////////////\n\n updateRawData(properties: WorksheetProperties, rawCellData: CellDataRange[]) {\n this._rawProperties = properties;\n this._fillCellData(rawCellData);\n }\n\n async _makeSingleUpdateRequest(requestType: string, requestParams: any) {\n // pass the call up to the parent\n return this._spreadsheet._makeSingleUpdateRequest(requestType, {\n ...requestParams,\n });\n }\n\n private _ensureInfoLoaded() {\n if (!this._rawProperties) {\n throw new Error('You must call `doc.loadInfo()` again before accessing this property');\n }\n }\n\n /** clear local cache of sheet data/properties */\n resetLocalCache(\n /** set to true to clear data only, leaving sheet metadata/propeties intact */\n dataOnly?: boolean\n ) {\n if (!dataOnly) this._rawProperties = null;\n this._headerValues = undefined;\n this._headerRowIndex = 1;\n this._cells = [];\n }\n\n private _fillCellData(\n dataRanges: CellDataRange[]\n ) {\n _.each(dataRanges, (range) => {\n const startRow = range.startRow || 0;\n const startColumn = range.startColumn || 0;\n const numRows = range.rowMetadata.length;\n const numColumns = range.columnMetadata.length;\n\n // update cell data for entire range\n for (let i = 0; i < numRows; i++) {\n const actualRow = startRow + i;\n for (let j = 0; j < numColumns; j++) {\n const actualColumn = startColumn + j;\n\n // if the row has not been initialized yet, do it\n if (!this._cells[actualRow]) this._cells[actualRow] = [];\n\n // see if the response includes some info for the cell\n const cellData = _.get(range, `rowData[${i}].values[${j}]`);\n\n // update the cell object or create it\n if (this._cells[actualRow][actualColumn]) {\n this._cells[actualRow][actualColumn]._updateRawData(cellData);\n } else {\n this._cells[actualRow][actualColumn] = new GoogleSpreadsheetCell(\n this,\n actualRow,\n actualColumn,\n cellData\n );\n }\n }\n }\n\n // update row metadata\n for (let i = 0; i < range.rowMetadata.length; i++) {\n this._rowMetadata[startRow + i] = range.rowMetadata[i];\n }\n // update column metadata\n for (let i = 0; i < range.columnMetadata.length; i++) {\n this._columnMetadata[startColumn + i] = range.columnMetadata[i];\n }\n });\n }\n\n // TODO: make this handle A1 ranges as well?\n private _addSheetIdToRange(range: GridRangeWithOptionalWorksheetId) {\n if (range.sheetId && range.sheetId !== this.sheetId) {\n throw new Error('Leave sheet ID blank or set to matching ID of this sheet');\n }\n return {\n ...range,\n sheetId: this.sheetId,\n };\n }\n\n\n // PROPERTY GETTERS //////////////////////////////////////////////////////////////////////////////\n\n private _getProp<T extends keyof WorksheetProperties>(param: T): WorksheetProperties[T] {\n this._ensureInfoLoaded();\n // see note about asserting info loaded on GoogleSpreasheet\n return this._rawProperties![param];\n }\n // eslint-disable-line no-unused-vars\n private _setProp<T extends keyof WorksheetProperties>(_param: T, _newVal: WorksheetProperties[T]) {\n throw new Error('Do not update directly - use `updateProperties()`');\n }\n\n get sheetId() { return this._getProp('sheetId'); }\n get title() { return this._getProp('title'); }\n get index() { return this._getProp('index'); }\n get sheetType() { return this._getProp('sheetType'); }\n get gridProperties() { return this._getProp('gridProperties'); }\n get hidden() { return this._getProp('hidden'); }\n get tabColor() { return this._getProp('tabColor'); }\n get rightToLeft() { return this._getProp('rightToLeft'); }\n private get _headerRange() {\n return `A${this._headerRowIndex}:${this.lastColumnLetter}${this._headerRowIndex}`;\n }\n\n set sheetId(newVal: WorksheetProperties['sheetId']) { this._setProp('sheetId', newVal); }\n set title(newVal: WorksheetProperties['title']) { this._setProp('title', newVal); }\n set index(newVal: WorksheetProperties['index']) { this._setProp('index', newVal); }\n set sheetType(newVal: WorksheetProperties['sheetType']) { this._setProp('sheetType', newVal); }\n set gridProperties(newVal: WorksheetProperties['gridProperties']) { this._setProp('gridProperties', newVal); }\n set hidden(newVal: WorksheetProperties['hidden']) { this._setProp('hidden', newVal); }\n set tabColor(newVal: WorksheetProperties['tabColor']) { this._setProp('tabColor', newVal); }\n set rightToLeft(newVal: WorksheetProperties['rightToLeft']) { this._setProp('rightToLeft', newVal); }\n\n get rowCount() {\n this._ensureInfoLoaded();\n return this.gridProperties.rowCount;\n }\n get columnCount() {\n this._ensureInfoLoaded();\n return this.gridProperties.columnCount;\n }\n\n get a1SheetName() { return `'${this.title.replace(/'/g, \"''\")}'`; }\n get encodedA1SheetName() { return encodeURIComponent(this.a1SheetName); }\n get lastColumnLetter() {\n // TODO: double check behaviour if data not loaded\n return this.columnCount ? columnToLetter(this.columnCount) : '';\n }\n\n\n // CELLS-BASED INTERACTIONS //////////////////////////////////////////////////////////////////////\n\n get cellStats() {\n let allCells = _.flatten(this._cells);\n allCells = _.compact(allCells);\n return {\n nonEmpty: _.filter(allCells, (c) => c.value).length,\n loaded: allCells.length,\n total: this.rowCount * this.columnCount,\n };\n }\n\n getCellByA1(a1Address: A1Address) {\n const split = a1Address.match(/([A-Z]+)([0-9]+)/);\n if (!split) throw new Error(`Cell address \"${a1Address}\" not valid`);\n const columnIndex = letterToColumn(split[1]);\n const rowIndex = parseInt(split[2]);\n return this.getCell(rowIndex - 1, columnIndex - 1);\n }\n\n getCell(rowIndex: RowIndex, columnIndex: ColumnIndex) {\n if (rowIndex < 0 || columnIndex < 0) throw new Error('Min coordinate is 0, 0');\n if (rowIndex >= this.rowCount || columnIndex >= this.columnCount) {\n throw new Error(`Out of bounds, sheet is ${this.rowCount} by ${this.columnCount}`);\n }\n\n if (!_.get(this._cells, `[${rowIndex}][${columnIndex}]`)) {\n throw new Error('This cell has not been loaded yet');\n }\n return this._cells[rowIndex][columnIndex];\n }\n\n async loadCells(sheetFilters?: DataFilterWithoutWorksheetId | DataFilterWithoutWorksheetId[]) {\n // load the whole sheet\n if (!sheetFilters) return this._spreadsheet.loadCells(this.a1SheetName);\n\n const filtersArray = _.isArray(sheetFilters) ? sheetFilters : [sheetFilters];\n const filtersArrayWithSheetId: DataFilter[] = _.map(filtersArray, (filter) => {\n // add sheet name to A1 ranges\n if (_.isString(filter)) {\n if (filter.startsWith(this.a1SheetName)) return filter;\n return `${this.a1SheetName}!${filter}`;\n }\n if (_.isObject(filter)) {\n // TODO: detect and support DeveloperMetadata filters\n\n // check if the user passed in a sheet id\n const filterAny = filter as any;\n if (filterAny.sheetId && filterAny.sheetId !== this.sheetId) {\n throw new Error('Leave sheet ID blank or set to matching ID of this sheet');\n }\n\n return { sheetId: this.sheetId, ...filter };\n }\n throw new Error('Each filter must be a A1 range string or gridrange object');\n });\n return this._spreadsheet.loadCells(filtersArrayWithSheetId);\n }\n\n async saveUpdatedCells() {\n const cellsToSave = _.filter(_.flatten(this._cells), { _isDirty: true });\n if (cellsToSave.length) {\n await this.saveCells(cellsToSave);\n }\n // TODO: do we want to return stats? or the cells that got updated?\n }\n\n async saveCells(cellsToUpdate: GoogleSpreadsheetCell[]) {\n // we send an individual \"updateCells\" request for each cell\n // because the fields that are udpated for each group are the same\n // and we dont want to accidentally overwrite something\n const requests = _.map(cellsToUpdate, (cell) => cell._getUpdateRequest());\n const responseRanges = _.map(cellsToUpdate, (c) => `${this.a1SheetName}!${c.a1Address}`);\n\n // if nothing is being updated the request returned is just `null`\n // so we make sure at least 1 request is valid - otherwise google throws a 400\n if (!_.compact(requests).length) {\n throw new Error('At least one cell must have something to update');\n }\n\n await this._spreadsheet._makeBatchUpdateRequest(requests, responseRanges);\n }\n\n // SAVING THIS FOR FUTURE USE\n // puts the cells that need updating into batches\n // async updateCellsByBatches() {\n // // saving this code, but it's problematic because each group must have the same update fields\n // const cellsByRow = _.groupBy(cellsToUpdate, 'rowIndex');\n // const groupsToSave = [];\n // _.each(cellsByRow, (cells, rowIndex) => {\n // let cellGroup = [];\n // _.each(cells, (c) => {\n // if (!cellGroup.length) {\n // cellGroup.push(c);\n // } else if (\n // cellGroup[cellGroup.length - 1].columnIndex ===\n // c.columnIndex - 1\n // ) {\n // cellGroup.push(c);\n // } else {\n // groupsToSave.push(cellGroup);\n // cellGroup = [];\n // }\n // });\n // groupsToSave.push(cellGroup);\n // });\n // const requests = _.map(groupsToSave, (cellGroup) => ({\n // updateCells: {\n // rows: [\n // {\n // values: _.map(cellGroup, (cell) => ({\n // ...cell._draftData.value && {\n // userEnteredValue: { [cell._draftData.valueType]: cell._draftData.value },\n // },\n // ...cell._draftData.note !== undefined && {\n // note: cell._draftData.note ,\n // },\n // ...cell._draftData.userEnteredFormat && {\n // userEnteredValue: cell._draftData.userEnteredFormat,\n // },\n // })),\n // },\n // ],\n // fields: 'userEnteredValue,note,userEnteredFormat',\n // start: {\n // sheetId: this.sheetId,\n // rowIndex: cellGroup[0].rowIndex,\n // columnIndex: cellGroup[0].columnIndex,\n // },\n // },\n // }));\n // const responseRanges = _.map(groupsToSave, (cellGroup) => {\n // let a1Range = cellGroup[0].a1Address;\n // if (cellGroup.length > 1)\n // a1Range += `:${cellGroup[cellGroup.length - 1].a1Address}`;\n // return `${cellGroup[0]._sheet.a1SheetName}!${a1Range}`;\n // });\n // }\n\n // ROW BASED FUNCTIONS ///////////////////////////////////////////////////////////////////////////\n\n async _ensureHeaderRowLoaded() {\n if (!this._headerValues) {\n await this.loadHeaderRow();\n }\n }\n\n async loadHeaderRow(headerRowIndex?: number) {\n if (headerRowIndex !== undefined) this._headerRowIndex = headerRowIndex;\n const rows = await this.getCellsInRange(this._headerRange);\n this._processHeaderRow(rows);\n }\n\n private _processHeaderRow(rows: any[]) {\n if (!rows) {\n throw new Error('No values in the header row - fill the first row with header values before trying to interact with rows');\n }\n this._headerValues = _.map(rows[0], (header) => header?.trim());\n if (!_.compact(this.headerValues).length) {\n throw new Error('All your header cells are blank - fill the first row with header values before trying to interact with rows');\n }\n checkForDuplicateHeaders(this.headerValues);\n }\n\n async setHeaderRow(headerValues: string[], headerRowIndex?: number) {\n if (!headerValues) return;\n if (headerValues.length > this.columnCount) {\n throw new Error(`Sheet is not large enough to fit ${headerValues.length} columns. Resize the sheet first.`);\n }\n const trimmedHeaderValues = _.map(headerValues, (h) => h?.trim());\n checkForDuplicateHeaders(trimmedHeaderValues);\n\n if (!_.compact(trimmedHeaderValues).length) {\n throw new Error('All your header cells are blank -');\n }\n\n if (headerRowIndex) this._headerRowIndex = headerRowIndex;\n\n const response = await this._spreadsheet.sheetsApi.put(\n `values/${this.encodedA1SheetName}!${this._headerRowIndex}:${this._headerRowIndex}`,\n {\n searchParams: {\n valueInputOption: 'USER_ENTERED', // other option is RAW\n includeValuesInResponse: true,\n },\n json: {\n range: `${this.a1SheetName}!${this._headerRowIndex}:${this._headerRowIndex}`,\n majorDimension: 'ROWS',\n values: [[\n ...trimmedHeaderValues,\n // pad the rest of the row with empty values to clear them all out\n ..._.times(this.columnCount - trimmedHeaderValues.length, () => ''),\n ]],\n },\n }\n );\n const data = await response.json<any>();\n this._headerValues = data.updatedData.values[0];\n }\n\n // TODO: look at these types\n async addRows(\n rows: RawRowData[],\n options: AddRowOptions = {}\n ) {\n // adds multiple rows in one API interaction using the append endpoint\n\n // each row can be an array or object\n // an array is just cells\n // ex: ['column 1', 'column 2', 'column 3']\n // an object must use the header row values as keys\n // ex: { col1: 'column 1', col2: 'column 2', col3: 'column 3' }\n\n // google bug that does not handle colons in sheet names\n // see https://issuetracker.google.com/issues/150373119\n if (this.title.includes(':')) {\n throw new Error('Please remove the \":\" from your sheet title. There is a bug with the google API which breaks appending rows if any colons are in the sheet title.');\n }\n\n if (!_.isArray(rows)) throw new Error('You must pass in an array of row values to append');\n\n await this._ensureHeaderRowLoaded();\n\n // convert each row into an array of cell values rather than the key/value object\n const rowsAsArrays: RawRowData[] = [];\n _.each(rows, (row) => {\n let rowAsArray;\n if (_.isArray(row)) {\n rowAsArray = row;\n } else if (_.isObject(row)) {\n rowAsArray = [];\n for (let i = 0; i < this.headerValues.length; i++) {\n const propName = this.headerValues[i];\n rowAsArray[i] = row[propName];\n }\n } else {\n throw new Error('Each row must be an object or an array');\n }\n rowsAsArrays.push(rowAsArray);\n });\n\n const response = await this._spreadsheet.sheetsApi.post(\n `values/${this.encodedA1SheetName}!A${this._headerRowIndex}:append`,\n {\n searchParams: {\n valueInputOption: options.raw ? 'RAW' : 'USER_ENTERED',\n insertDataOption: options.insert ? 'INSERT_ROWS' : 'OVERWRITE',\n includeValuesInResponse: true,\n },\n json: {\n values: rowsAsArrays,\n },\n }\n );\n\n // extract the new row number from the A1-notation data range in the response\n // ex: in \"'Sheet8!A2:C2\" -- we want the `2`\n const data = await response.json<any>();\n const { updatedRange } = data.updates;\n let rowNumber = updatedRange.match(/![A-Z]+([0-9]+):?/)[1];\n rowNumber = parseInt(rowNumber);\n\n\n this._ensureInfoLoaded();\n // if new rows were added, we need update sheet.rowRount\n if (options.insert) {\n this._rawProperties!.gridProperties.rowCount += rows.length;\n } else if (rowNumber + rows.length > this.rowCount) {\n // have to subtract 1 since one row was inserted at rowNumber\n this._rawProperties!.gridProperties.rowCount = rowNumber + rows.length - 1;\n }\n\n return _.map(data.updates.updatedData.values, (rowValues) => {\n const row = new GoogleSpreadsheetRow(this, rowNumber++, rowValues);\n return row;\n });\n }\n\n /** add a single row - see addRows for more info */\n async addRow(rowValues: RawRowData, options?: AddRowOptions) {\n const rows = await this.addRows([rowValues], options);\n return rows[0];\n }\n\n\n private _rowCache: GoogleSpreadsheetRow[] = [];\n async getRows<T extends Record<string, any>>(\n options?: {\n /** skip first N rows */\n offset?: number,\n /** limit number of rows fetched */\n limit?: number,\n }\n ) {\n // https://developers.google.com/sheets/api/guides/migration\n // v4 API does not have equivalents for the row-order query parameters provided\n // Reverse-order is trivial; simply process the returned values array in reverse order.\n // Order by column is not supported for reads, but it is possible to sort the data then read\n\n // v4 API does not currently have a direct equivalent for the Sheets API v3 structured queries\n // However, you can retrieve the relevant data and sort through it as needed in your application\n const offset = options?.offset || 0;\n const limit = options?.limit || this.rowCount - 1;\n\n const firstRow = 1 + this._headerRowIndex + offset;\n const lastRow = firstRow + limit - 1; // inclusive so we subtract 1\n\n let rawRows;\n if (this._headerValues) {\n const lastColumn = columnToLetter(this.headerValues.length);\n rawRows = await this.getCellsInRange(\n `A${firstRow}:${lastColumn}${lastRow}`\n );\n } else {\n const result = await this.batchGetCellsInRange([this._headerRange,\n `A${firstRow}:${this.lastColumnLetter}${lastRow}`]);\n this._processHeaderRow(result[0]);\n rawRows = result[1];\n }\n\n if (!rawRows) return [];\n\n const rows = [];\n let rowNum = firstRow;\n for (let i = 0; i < rawRows.length; i++) {\n const row = new GoogleSpreadsheetRow<T>(this, rowNum++, rawRows[i]);\n this._rowCache[row.rowNumber] = row;\n rows.push(row);\n }\n return rows;\n }\n\n /**\n * @internal\n * Used internally to update row numbers after deleting rows.\n * Should not be called directly.\n * */\n _shiftRowCache(deletedRowNumber: number) {\n delete this._rowCache[deletedRowNumber];\n this._rowCache.forEach((row) => {\n if (row.rowNumber > deletedRowNumber) {\n row._updateRowNumber(row.rowNumber - 1);\n }\n });\n }\n\n async clearRows(\n options?: {\n start?: number,\n end?: number,\n }\n ) {\n // default to first row after header\n const startRowIndex = options?.start || this._headerRowIndex + 1;\n const endRowIndex = options?.end || this.rowCount;\n await this._spreadsheet.sheetsApi.post(`values/${this.encodedA1SheetName}!${startRowIndex}:${endRowIndex}:clear`);\n this._rowCache.forEach((row) => {\n if (row.rowNumber >= startRowIndex && row.rowNumber <= endRowIndex) row._clearRowData();\n });\n }\n\n // BASIC PROPS ///////////////////////////////////////////////////////////////////////////////////\n /** @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateSheetPropertiesRequest */\n async updateProperties(properties: Partial<Omit<WorksheetProperties, 'sheetId'>>) {\n // Request type = `updateSheetProperties`\n\n return this._makeSingleUpdateRequest('updateSheetProperties', {\n properties: {\n sheetId: this.sheetId,\n ...properties,\n },\n fields: getFieldMask(properties),\n });\n }\n\n /**\n * passes through the call to updateProperties to update only the gridProperties object\n */\n async updateGridProperties(gridProperties: WorksheetGridProperties) {\n return this.updateProperties({ gridProperties });\n }\n\n /** resize, internally just calls updateGridProperties */\n async resize(gridProperties: Pick<WorksheetGridProperties, 'rowCount' | 'columnCount'>) {\n return this.updateGridProperties(gridProperties);\n }\n\n /**\n *\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#updatedimensionpropertiesrequest\n */\n async updateDimensionProperties(\n columnsOrRows: WorksheetDimension,\n properties: WorksheetDimensionProperties,\n bounds: Partial<DimensionRangeIndexes>\n ) {\n // Request type = `updateDimensionProperties`\n\n Object.keys(properties);\n\n return this._makeSingleUpdateRequest('updateDimensionProperties', {\n range: {\n sheetId: this.sheetId,\n dimension: columnsOrRows,\n ...bounds,\n },\n properties,\n fields: getFieldMask(properties as any),\n });\n }\n\n // OTHER /////////////////////////////////////////////////////////////////////////////////////////\n\n // this uses the \"values\" getter and does not give all the info about the cell contents\n // it is used internally when loading header cells\n async getCellsInRange(a1Range: A1Range, options?: GetValuesRequestOptions) {\n const response = await this._spreadsheet.sheetsApi.get(`values/${this.encodedA1SheetName}!${a1Range}`, {\n searchParams: options,\n });\n const data = await response.json<any>();\n return data.values;\n }\n\n async batchGetCellsInRange(a1Ranges: A1Range[], options?: GetValuesRequestOptions) {\n const ranges = a1Ranges.map((r) => `ranges=${this.encodedA1SheetName}!${r}`).join('&');\n const response = await this._spreadsheet.sheetsApi.get(`values:batchGet?${ranges}`, {\n searchParams: options,\n });\n const data = await response.json<any>();\n return data.valueRanges.map((r: any) => r.values);\n }\n\n async updateNamedRange() {\n // Request type = `updateNamedRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateNamedRangeRequest\n }\n\n async addNamedRange() {\n // Request type = `addNamedRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddNamedRangeRequest\n }\n\n async deleteNamedRange() {\n // Request type = `deleteNamedRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteNamedRangeRequest\n }\n\n async repeatCell() {\n // Request type = `repeatCell`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#RepeatCellRequest\n }\n\n async autoFill() {\n // Request type = `autoFill`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AutoFillRequest\n }\n\n async cutPaste() {\n // Request type = `cutPaste`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#CutPasteRequest\n }\n\n async copyPaste() {\n // Request type = `copyPaste`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#CopyPasteRequest\n }\n\n // TODO: check types on these ranges\n\n /**\n * Merges all cells in the range\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#MergeCellsRequest\n */\n async mergeCells(range: GridRangeWithOptionalWorksheetId, mergeType = 'MERGE_ALL') {\n await this._makeSingleUpdateRequest('mergeCells', {\n mergeType,\n range: this._addSheetIdToRange(range),\n });\n }\n\n /**\n * Unmerges cells in the given range\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UnmergeCellsRequest\n */\n async unmergeCells(range: GridRangeWithOptionalWorksheetId) {\n await this._makeSingleUpdateRequest('unmergeCells', {\n range: this._addSheetIdToRange(range),\n });\n }\n\n async updateBorders() {\n // Request type = `updateBorders`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateBordersRequest\n }\n\n async addFilterView() {\n // Request type = `addFilterView`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddFilterViewRequest\n }\n\n async appendCells() {\n // Request type = `appendCells`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AppendCellsRequest\n }\n\n async clearBasicFilter() {\n // Request type = `clearBasicFilter`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#ClearBasicFilterRequest\n }\n\n async deleteDimension() {\n // Request type = `deleteDimension`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteDimensionRequest\n }\n\n async deleteEmbeddedObject() {\n // Request type = `deleteEmbeddedObject`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteEmbeddedObjectRequest\n }\n\n async deleteFilterView() {\n // Request type = `deleteFilterView`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteFilterViewRequest\n }\n\n async duplicateFilterView() {\n // Request type = `duplicateFilterView`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DuplicateFilterViewRequest\n }\n\n /**\n * Duplicate worksheet within the document\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DuplicateSheetRequest\n */\n async duplicate(\n options?: {\n id?: WorksheetId,\n title?: string,\n index?: number,\n }\n ) {\n const response = await this._makeSingleUpdateRequest('duplicateSheet', {\n sourceSheetId: this.sheetId,\n ...options?.index !== undefined && { insertSheetIndex: options.index },\n ...options?.id && { newSheetId: options.id },\n ...options?.title && { newSheetName: options.title },\n });\n const newSheetId = response.properties.sheetId;\n return this._spreadsheet.sheetsById[newSheetId];\n }\n\n async findReplace() {\n // Request type = `findReplace`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#FindReplaceRequest\n }\n\n /**\n * Inserts rows or columns at a particular index\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#InsertDimensionRequest\n */\n async insertDimension(\n columnsOrRows: WorksheetDimension,\n rangeIndexes: DimensionRangeIndexes,\n inheritFromBefore?: boolean\n ) {\n if (!columnsOrRows) throw new Error('You need to specify a dimension. i.e. COLUMNS|ROWS');\n if (!_.isObject(rangeIndexes)) throw new Error('`range` must be an object containing `startIndex` and `endIndex`');\n if (!_.isInteger(rangeIndexes.startIndex) || rangeIndexes.startIndex < 0) throw new Error('range.startIndex must be an integer >=0');\n if (!_.isInteger(rangeIndexes.endIndex) || rangeIndexes.endIndex < 0) throw new Error('range.endIndex must be an integer >=0');\n if (rangeIndexes.endIndex <= rangeIndexes.startIndex) throw new Error('range.endIndex must be greater than range.startIndex');\n\n // default inheritFromBefore to true - unless inserting in the first row/column\n if (inheritFromBefore === undefined) {\n inheritFromBefore = rangeIndexes.startIndex > 0;\n }\n\n // do not allow inheritFromBefore if inserting at first row/column\n if (inheritFromBefore && rangeIndexes.startIndex === 0) {\n throw new Error('Cannot set inheritFromBefore to true if inserting in first row/column');\n }\n\n return this._makeSingleUpdateRequest('insertDimension', {\n range: {\n sheetId: this.sheetId,\n dimension: columnsOrRows,\n startIndex: rangeIndexes.startIndex,\n endIndex: rangeIndexes.endIndex,\n },\n inheritFromBefore,\n });\n }\n\n async insertRange() {\n // Request type = `insertRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#InsertRangeRequest\n }\n\n async moveDimension() {\n // Request type = `moveDimension`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#MoveDimensionRequest\n }\n\n async updateEmbeddedObjectPosition() {\n // Request type = `updateEmbeddedObjectPosition`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateEmbeddedObjectPositionRequest\n }\n\n async pasteData() {\n // Request type = `pasteData`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#PasteDataRequest\n }\n\n async textToColumns() {\n // Request type = `textToColumns`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#TextToColumnsRequest\n }\n\n async updateFilterView() {\n // Request type = `updateFilterView`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateFilterViewRequest\n }\n\n async deleteRange() {\n // Request type = `deleteRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteRangeRequest\n }\n\n async appendDimension() {\n // Request type = `appendDimension`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AppendDimensionRequest\n }\n\n async addConditionalFormatRule() {\n // Request type = `addConditionalFormatRule`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddConditionalFormatRuleRequest\n }\n\n async updateConditionalFormatRule() {\n // Request type = `updateConditionalFormatRule`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateConditionalFormatRuleRequest\n }\n\n async deleteConditionalFormatRule() {\n // Request type = `deleteConditionalFormatRule`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteConditionalFormatRuleRequest\n }\n\n async sortRange() {\n // Request type = `sortRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#SortRangeRequest\n }\n\n /**\n * Sets (or unsets) a data validation rule to every cell in the range\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#SetDataValidationRequest\n */\n async setDataValidation(\n range: GridRangeWithOptionalWorksheetId,\n /** data validation rule object, or set to false to clear an existing rule */\n rule: DataValidationRule | false\n ) {\n return this._makeSingleUpdateRequest('setDataValidation', {\n range: {\n sheetId: this.sheetId,\n ...range,\n },\n ...rule && { rule },\n });\n }\n\n async setBasicFilter() {\n // Request type = `setBasicFilter`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#SetBasicFilterRequest\n }\n\n async addProtectedRange() {\n // Request type = `addProtectedRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddProtectedRangeRequest\n }\n\n async updateProtectedRange() {\n // Request type = `updateProtectedRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateProtectedRangeRequest\n }\n\n async deleteProtectedRange() {\n // Request type = `deleteProtectedRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteProtectedRangeRequest\n }\n\n async autoResizeDimensions() {\n // Request type = `autoResizeDimensions`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AutoResizeDimensionsRequest\n }\n\n async addChart() {\n // Request type = `addChart`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddChartRequest\n }\n\n async updateChartSpec() {\n // Request type = `updateChartSpec`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateChartSpecRequest\n }\n\n async updateBanding() {\n // Request type = `updateBanding`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateBandingRequest\n }\n\n async addBanding() {\n // Request type = `addBanding`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddBandingRequest\n }\n\n async deleteBanding() {\n // Request type = `deleteBanding`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteBandingRequest\n }\n\n async createDeveloperMetadata() {\n // Request type = `createDeveloperMetadata`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#CreateDeveloperMetadataRequest\n }\n\n async updateDeveloperMetadata() {\n // Request type = `updateDeveloperMetadata`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateDeveloperMetadataRequest\n }\n\n async deleteDeveloperMetadata() {\n // Request type = `deleteDeveloperMetadata`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteDeveloperMetadataRequest\n }\n\n async randomizeRange() {\n // Request type = `randomizeRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#RandomizeRangeRequest\n }\n\n async addDimensionGroup() {\n // Request type = `addDimensionGroup`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddDimensionGroupRequest\n }\n\n async deleteDimensionGroup() {\n // Request type = `deleteDimensionGroup`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteDimensionGroupRequest\n }\n\n async updateDimensionGroup() {\n // Request type = `updateDimensionGroup`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateDimensionGroupRequest\n }\n\n async trimWhitespace() {\n // Request type = `trimWhitespace`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#TrimWhitespaceRequest\n }\n\n async deleteDuplicates() {\n // Request type = `deleteDuplicates`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteDuplicatesRequest\n }\n\n async addSlicer() {\n // Request type = `addSlicer`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddSlicerRequest\n }\n\n async updateSlicerSpec() {\n // Request type = `updateSlicerSpec`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateSlicerSpecRequest\n }\n\n /** delete this worksheet */\n async delete() {\n return this._spreadsheet.deleteSheet(this.sheetId);\n }\n\n /**\n * copies this worksheet into another document/spreadsheet\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.sheets/copyTo\n * */\n async copyToSpreadsheet(destinationSpreadsheetId: SpreadsheetId) {\n const req = this._spreadsheet.sheetsApi.post(`sheets/${this.sheetId}:copyTo`, {\n json: {\n destinationSpreadsheetId,\n },\n });\n const data = await req.json<any>();\n return data;\n }\n\n /** clear data in the sheet - either the entire sheet or a specific range */\n async clear(\n /** optional A1 range to clear - defaults to entire sheet */\n a1Range?: A1Range\n ) {\n const range = a1Range ? `!${a1Range}` : '';\n // sheet name without ie 'sheet1' rather than 'sheet1'!A1:B5 is all cells\n await this._spreadsheet.sheetsApi.post(`values/${this.encodedA1SheetName}${range}:clear`);\n this.resetLocalCache(true);\n }\n\n /** exports worksheet as CSV file (comma-separated values) */\n async downloadAsCSV(): Promise<ArrayBuffer>;\n async downloadAsCSV(returnStreamInsteadOfBuffer: false): Promise<ArrayBuffer>;\n async downloadAsCSV(returnStreamInsteadOfBuffer: true): Promise<ReadableStream>;\n async downloadAsCSV(returnStreamInsteadOfBuffer = false) {\n return this._spreadsheet._downloadAs('csv', this.sheetId, returnStreamInsteadOfBuffer);\n }\n /** exports worksheet as TSC file (tab-separated values) */\n async downloadAsTSV(): Promise<ArrayBuffer>;\n async downloadAsTSV(returnStreamInsteadOfBuffer: false): Promise<ArrayBuffer>;\n async downloadAsTSV(returnStreamInsteadOfBuffer: true): Promise<ReadableStream>;\n async downloadAsTSV(returnStreamInsteadOfBuffer = false) {\n return this._spreadsheet._downloadAs('tsv', this.sheetId, returnStreamInsteadOfBuffer);\n }\n /** exports worksheet as PDF */\n async downloadAsPDF(): Promise<ArrayBuffer>;\n async downloadAsPDF(returnStreamInsteadOfBuffer: false): Promise<ArrayBuffer>;\n async downloadAsPDF(returnStreamInsteadOfBuffer: true): Promise<ReadableStream>;\n async downloadAsPDF(returnStreamInsteadOfBuffer = false) {\n return this._spreadsheet._downloadAs('pdf', this.sheetId, returnStreamInsteadOfBuffer);\n }\n}\n","import ky, { HTTPError, KyInstance } from 'ky'; // eslint-disable-line import/no-extraneous-dependencies\nimport * as _ from './toolkit';\nimport { GoogleSpreadsheetWorksheet } from './GoogleSpreadsheetWorksheet';\nimport { getFieldMask } from './utils';\nimport {\n DataFilter, GridRange, NamedRangeId, SpreadsheetId, SpreadsheetProperties, WorksheetId, WorksheetProperties,\n} from './types/sheets-types';\nimport { PermissionRoles, PermissionsList, PublicPermissionRoles } from './types/drive-types';\nimport { RecursivePartial } from './types/util-types';\nimport { AUTH_MODES, GoogleApiAuth } from './types/auth-types';\n\n\nconst SHEETS_API_BASE_URL = 'https://sheets.googleapis.com/v4/spreadsheets';\nconst DRIVE_API_BASE_URL = 'https://www.googleapis.com/drive/v3/files';\n\nconst EXPORT_CONFIG: Record<string, { singleWorksheet?: boolean }> = {\n html: {},\n zip: {},\n xlsx: {},\n ods: {},\n csv: { singleWorksheet: true },\n tsv: { singleWorksheet: true },\n pdf: { singleWorksheet: true },\n};\ntype ExportFileTypes = keyof typeof EXPORT_CONFIG;\n\n\n\n\nfunction getAuthMode(auth: GoogleApiAuth) {\n if ('getRequestHeaders' in auth) return AUTH_MODES.GOOGLE_AUTH_CLIENT;\n if ('token' in auth && auth.token) return AUTH_MODES.RAW_ACCESS_TOKEN;\n // google-auth-library now has an empty `apiKey` property\n if ('apiKey' in auth && auth.apiKey) return AUTH_MODES.API_KEY;\n throw new Error('Invalid auth');\n}\n\nasync function getRequestAuthConfig(auth: GoogleApiAuth): Promise<{\n headers?: Record<string, string>;\n searchParams?: Record<string, string>\n}> {\n // google-auth-libary methods all can call this method to get the right headers\n // JWT | OAuth2Client | GoogleAuth | Impersonate | AuthClient\n if ('getRequestHeaders' in auth) {\n const headers = await auth.getRequestHeaders();\n\n // google-auth-library v10 uses a Headers object rather than a plain object\n if ('entries' in headers) {\n return { headers: Object.fromEntries(headers.entries()) };\n } if (_.isObject(headers)) {\n return { headers: headers as Record<string, string> };\n }\n throw new Error('unexpected headers returned from getRequestHeaders');\n }\n\n // API key only access passes through the api key as a query param\n // (note this can only provide read-only access)\n if ('apiKey' in auth && auth.apiKey) {\n return { searchParams: { key: auth.apiKey } };\n }\n\n // RAW ACCESS TOKEN\n if ('token' in auth && auth.token) {\n return { headers: { Authorization: `Bearer ${auth.token}` } };\n }\n\n throw new Error('Invalid auth');\n}\n\n/**\n * Google Sheets document\n *\n * @description\n * **This class represents an entire google spreadsheet document**\n * Provides methods to interact with document metadata/settings, formatting, manage sheets, and acts as the main gateway to interacting with sheets and data that the document contains.q\n *\n */\nexport class GoogleSpreadsheet {\n readonly spreadsheetId: string;\n\n public auth: GoogleApiAuth;\n get authMode() {\n return getAuthMode(this.auth);\n }\n\n private _rawSheets: any;\n private _rawProperties = null as SpreadsheetProperties | null;\n private _spreadsheetUrl = null as string | null;\n private _deleted = false;\n\n /**\n * Sheets API [ky](https://github.com/sindresorhus/ky?tab=readme-ov-file#kycreatedefaultoptions) instance\n * authentication is automatically attached\n * can be used if unsupported sheets calls need to be made\n * @see https://developers.google.com/sheets/api/reference/rest\n * */\n readonly sheetsApi: KyInstance;\n\n /**\n * Drive API [ky](https://github.com/sindresorhus/ky?tab=readme-ov-file#kycreatedefaultoptions) instance\n * authentication automatically attached\n * can be used if unsupported drive calls need to be made\n * @topic permissions\n * @see https://developers.google.com/drive/api/v3/reference\n * */\n readonly driveApi: KyInstance;\n\n\n /**\n * initialize new GoogleSpreadsheet\n * @category Initialization\n * */\n constructor(\n /** id of google spreadsheet doc */\n spreadsheetId: SpreadsheetId,\n /** authentication to use with Google Sheets API */\n auth: GoogleApiAuth\n ) {\n this.spreadsheetId = spreadsheetId;\n this.auth = auth;\n\n this._rawSheets = {};\n this._spreadsheetUrl = null;\n\n // create a ky instance with sheet root URL and hooks to handle auth\n this.sheetsApi = ky.create({\n prefixUrl: `${SHEETS_API_BASE_URL}/${spreadsheetId}`,\n hooks: {\n beforeRequest: [(r) => this._setAuthRequestHook(r)],\n beforeError: [(e) => this._errorHook(e)],\n },\n });\n this.driveApi = ky.create({\n prefixUrl: `${DRIVE_API_BASE_URL}/${spreadsheetId}`,\n hooks: {\n beforeRequest: [(r) => this._setAuthRequestHook(r)],\n beforeError: [(e) => this._errorHook(e)],\n },\n });\n }\n\n\n // INTERNAL UTILITY FUNCTIONS ////////////////////////////////////////////////////////////////////\n\n /** @internal */\n async _setAuthRequestHook(req: Request) {\n const authConfig = await getRequestAuthConfig(this.auth);\n if (authConfig.headers) {\n Object.entries(authConfig.headers).forEach(([key, val]) => {\n req.headers.set(key, String(val));\n });\n }\n\n if (authConfig.searchParams) {\n const url = new URL(req.url);\n Object.entries(authConfig.searchParams).forEach(([key, val]) => {\n url.searchParams.set(key, String(val));\n });\n // cannot change the URL with ky, so have to return a new request\n return new Request(url, req);\n }\n\n return req;\n }\n\n /** @internal */\n async _errorHook(error: HTTPError) {\n const { response } = error;\n const errorDataText = await response?.text();\n let errorData;\n try {\n errorData = JSON.parse(errorDataText);\n } catch (e) {\n // console.log('parsing json failed', errorDataText);\n }\n\n if (errorData) {\n // usually the error has a code and message, but occasionally not\n if (!errorData.error) return error;\n\n const { code, message } = errorData.error;\n error.message = `Google API error - [${code}] ${message}`;\n return error;\n }\n\n if (_.get(error, 'response.status') === 403) {\n if ('apiKey' in this.auth) {\n throw new Error('Sheet is private. Use authentication or make public. (see https://github.com/theoephraim/node-google-spreadsheet#a-note-on-authentication for details)');\n }\n }\n return error;\n }\n\n /** @internal */\n async _makeSingleUpdateRequest(requestType: string, requestParams: any) {\n const response = await this.sheetsApi.post(':batchUpdate', {\n json: {\n requests: [{ [requestType]: requestParams }],\n includeSpreadsheetInResponse: true,\n // responseRanges: [string]\n // responseIncludeGridData: true\n },\n });\n const data = await response.json<any>();\n\n this._updateRawProperties(data.updatedSpreadsheet.properties);\n _.each(data.updatedSpreadsheet.sheets, (s: any) => this._updateOrCreateSheet(s));\n // console.log('API RESPONSE', response.data.replies[0][requestType]);\n return data.replies[0][requestType];\n }\n\n // TODO: review these types\n // currently only used in batching cell updates\n /** @internal */\n async _makeBatchUpdateRequest(requests: any[], responseRanges?: string | string[]) {\n // this is used for updating batches of cells\n const response = await this.sheetsApi.post(':batchUpdate', {\n json: {\n requests,\n includeSpreadsheetInResponse: true,\n ...responseRanges && {\n responseIncludeGridData: true,\n ...responseRanges !== '*' && { responseRanges },\n },\n },\n });\n\n const data = await response.json<any>();\n this._updateRawProperties(data.updatedSpreadsheet.properties);\n _.each(data.updatedSpreadsheet.sheets, (s: any) => this._updateOrCreateSheet(s));\n }\n\n /** @internal */\n _ensureInfoLoaded() {\n if (!this._rawProperties) throw new Error('You must call `doc.loadInfo()` before accessing this property');\n }\n\n /** @internal */\n _updateRawProperties(newProperties: SpreadsheetProperties) { this._rawProperties = newProperties; }\n\n /** @internal */\n _updateOrCreateSheet(sheetInfo: { properties: WorksheetProperties, data: any }) {\n const { properties, data } = sheetInfo;\n const { sheetId } = properties;\n if (!this._rawSheets[sheetId]) {\n this._rawSheets[sheetId] = new GoogleSpreadsheetWorksheet(this, properties, data);\n } else {\n this._rawSheets[sheetId].updateRawData(properties, data);\n }\n }\n\n // BASIC PROPS //////////////////////////////////////////////////////////////////////////////\n _getProp(param: keyof SpreadsheetProperties) {\n this._ensureInfoLoaded();\n // ideally ensureInfoLoaded would assert that _rawProperties is in fact loaded\n // but this is not currently possible in TS - see https://github.com/microsoft/TypeScript/issues/49709\n return this._rawProperties![param];\n }\n\n get title(): SpreadsheetProperties['title'] { return this._getProp('title'); }\n get locale(): SpreadsheetProperties['locale'] { return this._getProp('locale'); }\n get timeZone(): SpreadsheetProperties['timeZone'] { return this._getProp('timeZone'); }\n get autoRecalc(): SpreadsheetProperties['autoRecalc'] { return this._getProp('autoRecalc'); }\n get defaultFormat(): SpreadsheetProperties['defaultFormat'] { return this._getProp('defaultFormat'); }\n get spreadsheetTheme(): SpreadsheetProperties['spreadsheetTheme'] { return this._getProp('spreadsheetTheme'); }\n get iterativeCalculationSettings(): SpreadsheetProperties['iterativeCalculationSettings'] { return this._getProp('iterativeCalculationSettings'); }\n\n /**\n * update spreadsheet properties\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets#SpreadsheetProperties\n * */\n async updateProperties(properties: Partial<SpreadsheetProperties>) {\n await this._makeSingleUpdateRequest('updateSpreadsheetProperties', {\n properties,\n fields: getFieldMask(properties),\n });\n }\n\n // BASIC INFO ////////////////////////////////////////////////////////////////////////////////////\n async loadInfo(includeCells = false) {\n const response = await this.sheetsApi.get('', {\n searchParams: {\n ...includeCells && { includeGridData: true },\n },\n });\n const data = await response.json<any>();\n this._spreadsheetUrl = data.spreadsheetUrl;\n this._rawProperties = data.properties;\n data.sheets?.forEach((s: any) => this._updateOrCreateSheet(s));\n }\n\n resetLocalCache() {\n this._rawProperties = null;\n this._rawSheets = {};\n }\n\n // WORKSHEETS ////////////////////////////////////////////////////////////////////////////////////\n get sheetCount() {\n this._ensureInfoLoaded();\n return _.values(this._rawSheets).length;\n }\n\n get sheetsById(): Record<WorksheetId, GoogleSpreadsheetWorksheet> {\n this._ensureInfoLoaded();\n return this._rawSheets;\n }\n\n get sheetsByIndex(): GoogleSpreadsheetWorksheet[] {\n this._ensureInfoLoaded();\n return _.sortBy(this._rawSheets, 'index');\n }\n\n get sheetsByTitle(): Record<string, GoogleSpreadsheetWorksheet> {\n this._ensureInfoLoaded();\n return _.keyBy(this._rawSheets, 'title');\n }\n\n /**\n * Add new worksheet to document\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddSheetRequest\n * */\n async addSheet(\n properties: Partial<\n RecursivePartial<WorksheetProperties>\n & {\n headerValues: string[],\n headerRowIndex: number\n }\n > = {}\n ) {\n const response = await this._makeSingleUpdateRequest('addSheet', {\n properties: _.omit(properties, 'headerValues', 'headerRowIndex'),\n });\n // _makeSingleUpdateRequest already adds the sheet\n const newSheetId = response.properties.sheetId;\n const newSheet = this.sheetsById[newSheetId];\n\n if (properties.headerValues) {\n await newSheet.setHeaderRow(properties.headerValues, properties.headerRowIndex);\n }\n\n return newSheet;\n }\n\n /**\n * delete a worksheet\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteSheetRequest\n * */\n async deleteSheet(sheetId: WorksheetId) {\n await this._makeSingleUpdateRequest('deleteSheet', { sheetId });\n delete this._rawSheets[sheetId];\n }\n\n // NAMED RANGES //////////////////////////////////////////////////////////////////////////////////\n\n /**\n * create a new named range\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddNamedRangeRequest\n */\n async addNamedRange(\n /** name of new named range */\n name: string,\n /** GridRange object describing range */\n range: GridRange,\n /** id for named range (optional) */\n namedRangeId?: string\n ) {\n // TODO: add named range to local cache\n return this._makeSingleUpdateRequest('addNamedRange', {\n name,\n namedRangeId,\n range,\n });\n }\n\n /**\n * delete a named range\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteNamedRangeRequest\n * */\n async deleteNamedRange(\n /** id of named range to delete */\n namedRangeId: NamedRangeId\n ) {\n // TODO: remove named range from local cache\n return this._makeSingleUpdateRequest('deleteNamedRange', { namedRangeId });\n }\n\n // LOADING CELLS /////////////////////////////////////////////////////////////////////////////////\n\n /** fetch cell data into local cache */\n async loadCells(\n /**\n * single filter or array of filters\n * strings are treated as A1 ranges, objects are treated as GridRange objects\n * pass nothing to fetch all cells\n * */\n filters?: DataFilter | DataFilter[]\n ) {\n // TODO: make it support DeveloperMetadataLookup objects\n\n\n\n // TODO: switch to this mode if using a read-only auth token?\n const readOnlyMode = this.authMode === AUTH_MODES.API_KEY;\n\n const filtersArray = _.isArray(filters) ? filters : [filters];\n const dataFilters = _.map(filtersArray, (filter) => {\n if (_.isString(filter)) {\n return readOnlyMode ? filter : { a1Range: filter };\n }\n if (_.isObject(filter)) {\n if (readOnlyMode) {\n throw new Error('Only A1 ranges are supported when fetching cells with read-only access (using only an API key)');\n }\n // TODO: make this support Developer Metadata filters\n return { gridRange: filter };\n }\n throw new Error('Each filter must be an A1 range string or a gridrange object');\n });\n\n let result;\n // when using an API key only, we must use the regular get endpoint\n // because :getByDataFilter requires higher access\n if (this.authMode === AUTH_MODES.API_KEY) {\n const params = new URLSearchParams();\n params.append('includeGridData', 'true');\n dataFilters.forEach((singleFilter) => {\n if (!_.isString(singleFilter)) {\n throw new Error('Only A1 ranges are supported when fetching cells with read-only access (using only an API key)');\n }\n params.append('ranges', singleFilter);\n });\n result = await this.sheetsApi.get('', {\n searchParams: params,\n });\n // otherwise we use the getByDataFilter endpoint because it is more flexible\n } else {\n result = await this.sheetsApi.post(':getByDataFilter', {\n json: {\n includeGridData: true,\n dataFilters,\n },\n });\n }\n\n const data = await result?.json<any>();\n _.each(data.sheets, (sheet: any) => { this._updateOrCreateSheet(sheet); });\n }\n\n // EXPORTING /////////////////////////////////////////////////////////////\n\n /**\n * export/download helper, not meant to be called directly (use downloadAsX methods on spreadsheet and worksheet instead)\n * @internal\n */\n async _downloadAs(\n fileType: ExportFileTypes,\n worksheetId: WorksheetId | undefined,\n returnStreamInsteadOfBuffer?: boolean\n ) {\n // see https://stackoverflow.com/questions/11619805/using-the-google-drive-api-to-download-a-spreadsheet-in-csv-format/51235960#51235960\n\n if (!EXPORT_CONFIG[fileType]) throw new Error(`unsupported export fileType - ${fileType}`);\n if (EXPORT_CONFIG[fileType].singleWorksheet) {\n if (worksheetId === undefined) throw new Error(`Must specify worksheetId when exporting as ${fileType}`);\n } else if (worksheetId) throw new Error(`Cannot specify worksheetId when exporting as ${fileType}`);\n\n // google UI shows \"html\" but passes through \"zip\"\n if (fileType === 'html') fileType = 'zip';\n\n if (!this._spreadsheetUrl) throw new Error('Cannot export sheet that is not fully loaded');\n\n const exportUrl = this._spreadsheetUrl.replace('edit', 'export');\n const response = await this.sheetsApi.get(exportUrl, {\n prefixUrl: '', // unset baseUrl since we're not hitting the normal sheets API\n searchParams: {\n id: this.spreadsheetId,\n format: fileType,\n // worksheetId can be 0\n ...worksheetId !== undefined && { gid: worksheetId },\n },\n });\n if (returnStreamInsteadOfBuffer) {\n return response.body;\n }\n return response.arrayBuffer();\n }\n\n /**\n * exports entire document as html file (zipped)\n * @topic export\n * */\n async downloadAsZippedHTML(): Promise<ArrayBuffer>;\n async downloadAsZippedHTML(returnStreamInsteadOfBuffer: false): Promise<ArrayBuffer>;\n async downloadAsZippedHTML(returnStreamInsteadOfBuffer: true): Promise<ReadableStream>;\n async downloadAsZippedHTML(returnStreamInsteadOfBuffer?: boolean) {\n return this._downloadAs('html', undefined, returnStreamInsteadOfBuffer);\n }\n\n /**\n * @deprecated\n * use `doc.downloadAsZippedHTML()` instead\n * */\n async downloadAsHTML(returnStreamInsteadOfBuffer?: boolean) {\n return this._downloadAs('html', undefined, returnStreamInsteadOfBuffer);\n }\n\n /**\n * exports entire document as xlsx spreadsheet (Microsoft Office Excel)\n * @topic export\n * */\n async downloadAsXLSX(): Promise<ArrayBuffer>;\n async downloadAsXLSX(returnStreamInsteadOfBuffer: false): Promise<ArrayBuffer>;\n async downloadAsXLSX(returnStreamInsteadOfBuffer: true): Promise<ReadableStream>;\n async downloadAsXLSX(returnStreamInsteadOfBuffer = false) {\n return this._downloadAs('xlsx', undefined, returnStreamInsteadOfBuffer);\n }\n /**\n * exports entire document as ods spreadsheet (Open Office)\n * @topic export\n */\n async downloadAsODS(): Promise<ArrayBuffer>;\n async downloadAsODS(returnStreamInsteadOfBuffer: false): Promise<ArrayBuffer>;\n async downloadAsODS(returnStreamInsteadOfBuffer: true): Promise<ReadableStream>;\n async downloadAsODS(returnStreamInsteadOfBuffer = false) {\n return this._downloadAs('ods', undefined, returnStreamInsteadOfBuffer);\n }\n\n\n async delete() {\n await this.driveApi.delete('');\n this._deleted = true;\n // endpoint returns nothing when successful\n }\n\n // PERMISSIONS ///////////////////////////////////////////////////////////////////////////////////\n\n /**\n * list all permissions entries for doc\n */\n async listPermissions(): Promise<PermissionsList> {\n const listReq = await this.driveApi.get('permissions', {\n searchParams: {\n fields: 'permissions(id,type,emailAddress,domain,role,displayName,photoLink,deleted)',\n },\n });\n const data = await listReq.json<{ permissions: PermissionsList }>();\n return data.permissions;\n }\n\n async setPublicAccessLevel(role: PublicPermissionRoles | false) {\n const permissions = await this.listPermissions();\n const existingPublicPermission = _.find(permissions, (p) => p.type === 'anyone');\n\n if (role === false) {\n if (!existingPublicPermission) {\n // doc is already not public... could throw an error or just do nothing\n return;\n }\n await this.driveApi.delete(`permissions/${existingPublicPermission.id}`);\n } else {\n const _shareReq = await this.driveApi.post('permissions', {\n json: {\n role: role || 'viewer',\n type: 'anyone',\n },\n });\n }\n }\n\n /** share document to email or domain */\n async share(emailAddressOrDomain: string, opts?: {\n /** set role level, defaults to owner */\n role?: PermissionRoles,\n\n /** set to true if email is for a group */\n isGroup?: boolean,\n\n /** set to string to include a custom message, set to false to skip sending a notification altogether */\n emailMessage?: string | false,\n\n // moveToNewOwnersRoot?: string,\n // /** send a notification email (default = true) */\n // sendNotificationEmail?: boolean,\n // /** support My Drives and shared drives (default = false) */\n // supportsAllDrives?: boolean,\n\n // /** Issue the request as a domain administrator */\n // useDomainAdminAccess?: boolean,\n }) {\n let emailAddress: string | undefined;\n let domain: string | undefined;\n if (emailAddressOrDomain.includes('@')) {\n emailAddress = emailAddressOrDomain;\n } else {\n domain = emailAddressOrDomain;\n }\n\n\n const shareReq = await this.driveApi.post('permissions', {\n searchParams: {\n ...opts?.emailMessage === false && { sendNotificationEmail: false },\n ..._.isString(opts?.emailMessage) && { emailMessage: opts?.emailMessage },\n ...opts?.role === 'owner' && { transferOwnership: true },\n },\n json: {\n role: opts?.role || 'writer',\n ...emailAddress && {\n type: opts?.isGroup ? 'group' : 'user',\n emailAddress,\n },\n ...domain && {\n type: 'domain',\n domain,\n },\n },\n });\n\n return shareReq.json();\n }\n\n //\n // CREATE NEW DOC ////////////////////////////////////////////////////////////////////////////////\n static async createNewSpreadsheetDocument(auth: GoogleApiAuth, properties?: Partial<SpreadsheetProperties>) {\n // see updateProperties for more info about available properties\n\n if (getAuthMode(auth) === AUTH_MODES.API_KEY) {\n throw new Error('Cannot use api key only to create a new spreadsheet - it is only usable for read-only access of public docs');\n }\n\n // TODO: handle injecting default credentials if running on google infra\n\n const authConfig = await getRequestAuthConfig(auth);\n\n const response = await ky.post(SHEETS_API_BASE_URL, {\n ...authConfig, // has the auth header\n json: {\n properties,\n },\n });\n\n const data = await response.json<any>();\n const newSpreadsheet = new GoogleSpreadsheet(data.spreadsheetId, auth);\n\n // TODO ideally these things aren't public, might want to refactor anyway\n newSpreadsheet._spreadsheetUrl = data.spreadsheetUrl;\n newSpreadsheet._rawProperties = data.properties;\n _.each(data.sheets, (s: any) => newSpreadsheet._updateOrCreateSheet(s));\n\n return newSpreadsheet;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/lib/GoogleSpreadsheetRow.ts","../src/lib/GoogleSpreadsheetCellErrorValue.ts","../src/lib/GoogleSpreadsheetCell.ts","../src/lib/GoogleSpreadsheetWorksheet.ts","../src/lib/GoogleSpreadsheet.ts"],"names":["groupBy","each","values","isBoolean","isString","isFinite","isNil","keys","get","isEqual","unset","set","some","pickBy","flatten","compact","filter","isArray","map","isObject","times","isInteger","ky","sortBy","keyBy","omit","find"],"mappings":"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","file":"index.cjs","sourcesContent":["import * as _ from './toolkit';\n\nexport function getFieldMask(obj: Record<string, unknown>) {\n let fromGrid = '';\n const fromRoot = Object.keys(obj).filter((key) => key !== 'gridProperties').join(',');\n\n if (obj.gridProperties) {\n fromGrid = Object.keys(obj.gridProperties).map((key) => `gridProperties.${key}`).join(',');\n if (fromGrid.length && fromRoot.length) {\n fromGrid = `${fromGrid},`;\n }\n }\n return fromGrid + fromRoot;\n}\n\nexport function columnToLetter(column: number) {\n let temp;\n let letter = '';\n let col = column;\n while (col > 0) {\n temp = (col - 1) % 26;\n letter = String.fromCharCode(temp + 65) + letter;\n col = (col - temp - 1) / 26;\n }\n return letter;\n}\n\nexport function letterToColumn(letter: string) {\n let column = 0;\n const { length } = letter;\n for (let i = 0; i < length; i++) {\n column += (letter.charCodeAt(i) - 64) * 26 ** (length - i - 1);\n }\n return column;\n}\n\nexport function checkForDuplicateHeaders(headers: string[]) {\n // check for duplicate headers\n const checkForDupes = _.groupBy(headers); // { c1: ['c1'], c2: ['c2', 'c2' ]}\n _.each(checkForDupes, (grouped, header) => {\n if (!header) return; // empty columns are skipped, so multiple is ok\n if (grouped.length > 1) {\n throw new Error(`Duplicate header detected: \"${header}\". Please make sure all non-empty headers are unique`);\n }\n });\n}\n\n","import { GoogleSpreadsheetWorksheet } from './GoogleSpreadsheetWorksheet';\nimport { columnToLetter } from './utils';\n\n\n// TODO: add type for possible row values (currently any)\n\nexport class GoogleSpreadsheetRow<T extends Record<string, any> = Record<string, any>> {\n constructor(\n /** parent GoogleSpreadsheetWorksheet instance */\n readonly _worksheet: GoogleSpreadsheetWorksheet,\n /** the A1 row (1-indexed) */\n private _rowNumber: number,\n /** raw underlying data for row */\n private _rawData: any[]\n ) {\n\n }\n\n private _deleted = false;\n get deleted() { return this._deleted; }\n\n /** row number (matches A1 notation, ie first row is 1) */\n get rowNumber() { return this._rowNumber; }\n /**\n * @internal\n * Used internally to update row numbers after deleting rows.\n * Should not be called directly.\n */\n _updateRowNumber(newRowNumber: number) {\n this._rowNumber = newRowNumber;\n }\n get a1Range() {\n return [\n this._worksheet.a1SheetName,\n '!',\n `A${this._rowNumber}`,\n ':',\n `${columnToLetter(this._worksheet.headerValues.length)}${this._rowNumber}`,\n ].join('');\n }\n\n /** get row's value of specific cell (by header key) */\n get(key: keyof T) {\n const index = this._worksheet.headerValues.indexOf(key as string);\n return this._rawData[index];\n }\n /** set row's value of specific cell (by header key) */\n set<K extends keyof T>(key: K, val: T[K]) {\n const index = this._worksheet.headerValues.indexOf(key as string);\n this._rawData[index] = val;\n }\n /** set multiple values in the row at once from an object */\n assign(obj: Partial<T>) {\n // eslint-disable-next-line no-restricted-syntax, guard-for-in\n for (const key in obj) this.set(key, obj[key] as any);\n }\n\n /** return raw object of row data */\n toObject() {\n const o: Partial<T> = {};\n for (let i = 0; i < this._worksheet.headerValues.length; i++) {\n const key: keyof T = this._worksheet.headerValues[i];\n if (!key) continue;\n o[key] = this._rawData[i];\n }\n return o;\n }\n\n /** save row values */\n async save(options?: { raw?: boolean }) {\n if (this._deleted) throw new Error('This row has been deleted - call getRows again before making updates.');\n\n const response = await this._worksheet._spreadsheet.sheetsApi.put(`values/${encodeURIComponent(this.a1Range)}`, {\n searchParams: {\n valueInputOption: options?.raw ? 'RAW' : 'USER_ENTERED',\n includeValuesInResponse: true,\n },\n json: {\n range: this.a1Range,\n majorDimension: 'ROWS',\n values: [this._rawData],\n },\n });\n const data = await response.json<any>();\n this._rawData = data.updatedData.values[0];\n }\n\n /** delete this row */\n async delete() {\n if (this._deleted) throw new Error('This row has been deleted - call getRows again before making updates.');\n\n const result = await this._worksheet._makeSingleUpdateRequest('deleteRange', {\n range: {\n sheetId: this._worksheet.sheetId,\n startRowIndex: this._rowNumber - 1, // this format is zero indexed, because of course...\n endRowIndex: this._rowNumber,\n },\n shiftDimension: 'ROWS',\n });\n this._deleted = true;\n this._worksheet._shiftRowCache(this.rowNumber);\n\n return result;\n }\n\n /**\n * @internal\n * Used internally to clear row data after calling sheet.clearRows\n * Should not be called directly.\n */\n _clearRowData() {\n for (let i = 0; i < this._rawData.length; i++) {\n this._rawData[i] = '';\n }\n }\n}\n","import { CellValueErrorType, ErrorValue } from './types/sheets-types';\n\n/**\n * Cell error\n *\n * not a js \"error\" that gets thrown, but a value that holds an error code and message for a cell\n * it's useful to use a class so we can check `instanceof`\n\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/other#ErrorType\n */\nexport class GoogleSpreadsheetCellErrorValue {\n /**\n * type of the error\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/other#ErrorType\n * */\n readonly type: CellValueErrorType;\n\n /** A message with more information about the error (in the spreadsheet's locale) */\n readonly message: string;\n\n constructor(rawError: ErrorValue) {\n this.type = rawError.type;\n this.message = rawError.message;\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport * as _ from './toolkit';\n\nimport { columnToLetter } from './utils';\n\nimport { GoogleSpreadsheetWorksheet } from './GoogleSpreadsheetWorksheet';\nimport { GoogleSpreadsheetCellErrorValue } from './GoogleSpreadsheetCellErrorValue';\n\nimport {\n CellData,\n CellFormat, CellValueType, ColumnIndex, RowIndex,\n} from './types/sheets-types';\n\nexport class GoogleSpreadsheetCell {\n private _rawData?: CellData;\n private _draftData: any = {};\n private _error?: GoogleSpreadsheetCellErrorValue;\n\n constructor(\n readonly _sheet: GoogleSpreadsheetWorksheet,\n private _rowIndex: RowIndex,\n private _columnIndex: ColumnIndex,\n rawCellData: CellData\n ) {\n this._updateRawData(rawCellData);\n this._rawData = rawCellData; // so TS does not complain\n }\n\n // TODO: figure out how to deal with empty rawData\n // newData can be undefined/null if the cell is totally empty and unformatted\n /**\n * update cell using raw CellData coming back from sheets API\n * @internal\n */\n _updateRawData(newData: CellData) {\n this._rawData = newData;\n this._draftData = {};\n if (this._rawData?.effectiveValue && 'errorValue' in this._rawData.effectiveValue) {\n this._error = new GoogleSpreadsheetCellErrorValue(this._rawData.effectiveValue.errorValue);\n } else {\n this._error = undefined;\n }\n }\n\n // CELL LOCATION/ADDRESS /////////////////////////////////////////////////////////////////////////\n get rowIndex() { return this._rowIndex; }\n get columnIndex() { return this._columnIndex; }\n get a1Column() { return columnToLetter(this._columnIndex + 1); }\n get a1Row() { return this._rowIndex + 1; } // a1 row numbers start at 1 instead of 0\n get a1Address() { return `${this.a1Column}${this.a1Row}`; }\n\n // CELL CONTENTS - VALUE/FORMULA/NOTES ///////////////////////////////////////////////////////////\n get value(): number | boolean | string | null | GoogleSpreadsheetCellErrorValue {\n // const typeKey = _.keys(this._rawData.effectiveValue)[0];\n if (this._draftData.value !== undefined) throw new Error('Value has been changed');\n if (this._error) return this._error;\n if (!this._rawData?.effectiveValue) return null;\n return _.values(this._rawData.effectiveValue)[0];\n }\n\n\n set value(newValue: number | boolean | Date | string | null | undefined | GoogleSpreadsheetCellErrorValue) {\n // had to include the GoogleSpreadsheetCellErrorValue in the type to make TS happy\n if (newValue instanceof GoogleSpreadsheetCellErrorValue) {\n throw new Error(\"You can't manually set a value to an error\");\n }\n\n if (_.isBoolean(newValue)) {\n this._draftData.valueType = 'boolValue';\n } else if (_.isString(newValue)) {\n if (newValue.substring(0, 1) === '=') this._draftData.valueType = 'formulaValue';\n else this._draftData.valueType = 'stringValue';\n } else if (_.isFinite(newValue)) {\n this._draftData.valueType = 'numberValue';\n } else if (_.isNil(newValue)) {\n // null or undefined\n this._draftData.valueType = 'stringValue';\n newValue = '';\n } else {\n throw new Error('Set value to boolean, string, or number');\n }\n this._draftData.value = newValue;\n }\n\n get valueType(): CellValueType | null {\n // an error only happens with a formula (as far as I know)\n if (this._error) return 'errorValue';\n if (!this._rawData?.effectiveValue) return null;\n return _.keys(this._rawData.effectiveValue)[0] as CellValueType;\n }\n\n /** The formatted value of the cell - this is the value as it's shown to the user */\n get formattedValue(): string | null { return this._rawData?.formattedValue || null; }\n\n get formula() { return _.get(this._rawData, 'userEnteredValue.formulaValue', null); }\n set formula(newValue: string | null) {\n if (!newValue) throw new Error('To clear a formula, set `cell.value = null`');\n if (newValue.substring(0, 1) !== '=') throw new Error('formula must begin with \"=\"');\n this.value = newValue; // use existing value setter\n }\n /**\n * @deprecated use `cell.errorValue` instead\n */\n get formulaError() { return this._error; }\n /**\n * error contained in the cell, which can happen with a bad formula (maybe some other weird cases?)\n */\n get errorValue() { return this._error; }\n\n get numberValue(): number | undefined {\n if (this.valueType !== 'numberValue') return undefined;\n return this.value as number;\n }\n set numberValue(val: number | undefined) {\n this.value = val;\n }\n\n get boolValue(): boolean | undefined {\n if (this.valueType !== 'boolValue') return undefined;\n return this.value as boolean;\n }\n set boolValue(val: boolean | undefined) {\n this.value = val;\n }\n\n get stringValue(): string | undefined {\n if (this.valueType !== 'stringValue') return undefined;\n return this.value as string;\n }\n set stringValue(val: string | undefined) {\n if (val?.startsWith('=')) {\n throw new Error('Use cell.formula to set formula values');\n }\n this.value = val;\n }\n\n /**\n * Hyperlink contained within the cell.\n *\n * To modify, do not set directly. Instead set cell.formula, for example `cell.formula = \\'=HYPERLINK(\"http://google.com\", \"Google\")\\'`\n */\n get hyperlink() {\n if (this._draftData.value) throw new Error('Save cell to be able to read hyperlink');\n return this._rawData?.hyperlink;\n }\n\n /** a note attached to the cell */\n get note(): string {\n return this._draftData.note !== undefined ? this._draftData.note : this._rawData?.note || '';\n }\n set note(newVal: string | null | undefined | false) {\n if (newVal === null || newVal === undefined || newVal === false) newVal = '';\n if (!_.isString(newVal)) throw new Error('Note must be a string');\n if (newVal === this._rawData?.note) delete this._draftData.note;\n else this._draftData.note = newVal;\n }\n\n // CELL FORMATTING ///////////////////////////////////////////////////////////////////////////////\n get userEnteredFormat() { return Object.freeze(this._rawData?.userEnteredFormat); }\n get effectiveFormat() { return Object.freeze(this._rawData?.effectiveFormat); }\n\n private _getFormatParam<T extends keyof CellFormat>(param: T): Readonly<CellFormat[T]> {\n // we freeze the object so users don't change nested props accidentally\n // TODO: figure out something that would throw an error if you try to update it?\n if (_.get(this._draftData, `userEnteredFormat.${param}`)) {\n throw new Error('User format is unsaved - save the cell to be able to read it again');\n }\n // TODO: figure out how to deal with possible empty rawData\n // if (!this._rawData?.userEnteredFormat?.[param]) {\n // return undefined;\n // }\n return Object.freeze(this._rawData!.userEnteredFormat[param]);\n }\n\n private _setFormatParam<T extends keyof CellFormat>(param: T, newVal: CellFormat[T]) {\n if (_.isEqual(newVal, _.get(this._rawData, `userEnteredFormat.${param}`))) {\n _.unset(this._draftData, `userEnteredFormat.${param}`);\n } else {\n _.set(this._draftData, `userEnteredFormat.${param}`, newVal);\n this._draftData.clearFormat = false;\n }\n }\n\n // format getters\n get numberFormat() { return this._getFormatParam('numberFormat'); }\n get backgroundColor() { return this._getFormatParam('backgroundColor'); }\n get backgroundColorStyle() { return this._getFormatParam('backgroundColorStyle'); }\n get borders() { return this._getFormatParam('borders'); }\n get padding() { return this._getFormatParam('padding'); }\n get horizontalAlignment() { return this._getFormatParam('horizontalAlignment'); }\n get verticalAlignment() { return this._getFormatParam('verticalAlignment'); }\n get wrapStrategy() { return this._getFormatParam('wrapStrategy'); }\n get textDirection() { return this._getFormatParam('textDirection'); }\n get textFormat() { return this._getFormatParam('textFormat'); }\n get hyperlinkDisplayType() { return this._getFormatParam('hyperlinkDisplayType'); }\n get textRotation() { return this._getFormatParam('textRotation'); }\n\n // format setters\n set numberFormat(newVal: CellFormat['numberFormat']) { this._setFormatParam('numberFormat', newVal); }\n set backgroundColor(newVal: CellFormat['backgroundColor']) { this._setFormatParam('backgroundColor', newVal); }\n set backgroundColorStyle(newVal: CellFormat['backgroundColorStyle']) { this._setFormatParam('backgroundColorStyle', newVal); }\n set borders(newVal: CellFormat['borders']) { this._setFormatParam('borders', newVal); }\n set padding(newVal: CellFormat['padding']) { this._setFormatParam('padding', newVal); }\n set horizontalAlignment(newVal: CellFormat['horizontalAlignment']) { this._setFormatParam('horizontalAlignment', newVal); }\n set verticalAlignment(newVal: CellFormat['verticalAlignment']) { this._setFormatParam('verticalAlignment', newVal); }\n set wrapStrategy(newVal: CellFormat['wrapStrategy']) { this._setFormatParam('wrapStrategy', newVal); }\n set textDirection(newVal: CellFormat['textDirection']) { this._setFormatParam('textDirection', newVal); }\n set textFormat(newVal: CellFormat['textFormat']) { this._setFormatParam('textFormat', newVal); }\n set hyperlinkDisplayType(newVal: CellFormat['hyperlinkDisplayType']) { this._setFormatParam('hyperlinkDisplayType', newVal); }\n set textRotation(newVal: CellFormat['textRotation']) { this._setFormatParam('textRotation', newVal); }\n\n clearAllFormatting() {\n // need to track this separately since by setting/unsetting things, we may end up with\n // this._draftData.userEnteredFormat as an empty object, but not an intent to clear it\n this._draftData.clearFormat = true;\n delete this._draftData.userEnteredFormat;\n }\n\n // SAVING + UTILS ////////////////////////////////////////////////////////////////////////////////\n\n // returns true if there are any updates that have not been saved yet\n get _isDirty() {\n // have to be careful about checking undefined rather than falsy\n // in case a new value is empty string or 0 or false\n if (this._draftData.note !== undefined) return true;\n if (_.keys(this._draftData.userEnteredFormat).length) return true;\n if (this._draftData.clearFormat) return true;\n if (this._draftData.value !== undefined) return true;\n return false;\n }\n\n discardUnsavedChanges() {\n this._draftData = {};\n }\n\n /**\n * saves updates for single cell\n * usually it's better to make changes and call sheet.saveUpdatedCells\n * */\n async save() {\n await this._sheet.saveCells([this]);\n }\n\n /**\n * used by worksheet when saving cells\n * returns an individual batchUpdate request to update the cell\n * @internal\n */\n _getUpdateRequest() {\n // this logic should match the _isDirty logic above\n // but we need it broken up to build the request below\n const isValueUpdated = this._draftData.value !== undefined;\n const isNoteUpdated = this._draftData.note !== undefined;\n const isFormatUpdated = !!_.keys(this._draftData.userEnteredFormat || {}).length;\n const isFormatCleared = this._draftData.clearFormat;\n\n // if no updates, we return null, which we can filter out later before sending requests\n if (!_.some([isValueUpdated, isNoteUpdated, isFormatUpdated, isFormatCleared])) {\n return null;\n }\n\n // build up the formatting object, which has some quirks...\n const format = {\n // have to pass the whole object or it will clear existing properties\n ...this._rawData?.userEnteredFormat,\n ...this._draftData.userEnteredFormat,\n };\n // if background color already set, cell has backgroundColor and backgroundColorStyle\n // but backgroundColorStyle takes precendence so we must remove to set the color\n // see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/cells#CellFormat\n if (_.get(this._draftData, 'userEnteredFormat.backgroundColor')) {\n delete (format.backgroundColorStyle);\n }\n\n return {\n updateCells: {\n rows: [{\n values: [{\n ...isValueUpdated && {\n userEnteredValue: { [this._draftData.valueType]: this._draftData.value },\n },\n ...isNoteUpdated && {\n note: this._draftData.note,\n },\n ...isFormatUpdated && {\n userEnteredFormat: format,\n },\n ...isFormatCleared && {\n userEnteredFormat: {},\n },\n }],\n }],\n // turns into a string of which fields to update ex \"note,userEnteredFormat\"\n fields: _.keys(_.pickBy({\n userEnteredValue: isValueUpdated,\n note: isNoteUpdated,\n userEnteredFormat: isFormatUpdated || isFormatCleared,\n })).join(','),\n start: {\n sheetId: this._sheet.sheetId,\n rowIndex: this.rowIndex,\n columnIndex: this.columnIndex,\n },\n },\n };\n }\n}\n","import { type ReadableStream } from 'stream/web';\nimport * as _ from './toolkit';\n\nimport { GoogleSpreadsheetRow } from './GoogleSpreadsheetRow';\nimport { GoogleSpreadsheetCell } from './GoogleSpreadsheetCell';\n\nimport {\n getFieldMask, columnToLetter, letterToColumn, checkForDuplicateHeaders,\n} from './utils';\nimport { GoogleSpreadsheet } from './GoogleSpreadsheet';\nimport {\n A1Range, SpreadsheetId, DimensionRangeIndexes, WorksheetDimension, WorksheetId, WorksheetProperties, A1Address,\n RowIndex, ColumnIndex, DataFilterWithoutWorksheetId, DataFilter, GetValuesRequestOptions, WorksheetGridProperties,\n WorksheetDimensionProperties, CellDataRange, AddRowOptions, GridRangeWithOptionalWorksheetId,\n DataValidationRule,\n} from './types/sheets-types';\n\n\n// types of cell data accepted when using row based api\ntype RowCellData = string | number | boolean | Date;\n// raw row data can be passed in as an array or an object using header values as keys\ntype RawRowData = RowCellData[] | Record<string, RowCellData>;\n\nexport class GoogleSpreadsheetWorksheet {\n // assume \"header row\" (for row-based calls) is in first row, can be adjusted later\n private _headerRowIndex = 1;\n\n private _rawProperties: WorksheetProperties | null = null;\n private _cells: GoogleSpreadsheetCell[][] = [];\n private _rowMetadata: any[] = [];\n private _columnMetadata: any[] = [];\n\n private _headerValues: string[] | undefined;\n get headerValues() {\n if (!this._headerValues) {\n throw new Error('Header values are not yet loaded');\n }\n return this._headerValues!;\n }\n\n constructor(\n /** parent GoogleSpreadsheet instance */\n readonly _spreadsheet: GoogleSpreadsheet,\n rawProperties: WorksheetProperties,\n rawCellData?: CellDataRange[]\n ) {\n this._headerRowIndex = 1;\n\n // basic properties\n this._rawProperties = rawProperties;\n\n this._cells = []; // we will use a 2d sparse array to store cells;\n\n this._rowMetadata = []; // 1d sparse array\n this._columnMetadata = [];\n\n if (rawCellData) this._fillCellData(rawCellData);\n }\n\n // INTERNAL UTILITY FUNCTIONS ////////////////////////////////////////////////////////////////////\n\n updateRawData(properties: WorksheetProperties, rawCellData: CellDataRange[]) {\n this._rawProperties = properties;\n this._fillCellData(rawCellData);\n }\n\n async _makeSingleUpdateRequest(requestType: string, requestParams: any) {\n // pass the call up to the parent\n return this._spreadsheet._makeSingleUpdateRequest(requestType, {\n ...requestParams,\n });\n }\n\n private _ensureInfoLoaded() {\n if (!this._rawProperties) {\n throw new Error('You must call `doc.loadInfo()` again before accessing this property');\n }\n }\n\n /** clear local cache of sheet data/properties */\n resetLocalCache(\n /** set to true to clear data only, leaving sheet metadata/propeties intact */\n dataOnly?: boolean\n ) {\n if (!dataOnly) this._rawProperties = null;\n this._headerValues = undefined;\n this._headerRowIndex = 1;\n this._cells = [];\n }\n\n private _fillCellData(\n dataRanges: CellDataRange[]\n ) {\n _.each(dataRanges, (range) => {\n const startRow = range.startRow || 0;\n const startColumn = range.startColumn || 0;\n const numRows = range.rowMetadata.length;\n const numColumns = range.columnMetadata.length;\n\n // update cell data for entire range\n for (let i = 0; i < numRows; i++) {\n const actualRow = startRow + i;\n for (let j = 0; j < numColumns; j++) {\n const actualColumn = startColumn + j;\n\n // if the row has not been initialized yet, do it\n if (!this._cells[actualRow]) this._cells[actualRow] = [];\n\n // see if the response includes some info for the cell\n const cellData = _.get(range, `rowData[${i}].values[${j}]`);\n\n // update the cell object or create it\n if (this._cells[actualRow][actualColumn]) {\n this._cells[actualRow][actualColumn]._updateRawData(cellData);\n } else {\n this._cells[actualRow][actualColumn] = new GoogleSpreadsheetCell(\n this,\n actualRow,\n actualColumn,\n cellData\n );\n }\n }\n }\n\n // update row metadata\n for (let i = 0; i < range.rowMetadata.length; i++) {\n this._rowMetadata[startRow + i] = range.rowMetadata[i];\n }\n // update column metadata\n for (let i = 0; i < range.columnMetadata.length; i++) {\n this._columnMetadata[startColumn + i] = range.columnMetadata[i];\n }\n });\n }\n\n // TODO: make this handle A1 ranges as well?\n private _addSheetIdToRange(range: GridRangeWithOptionalWorksheetId) {\n if (range.sheetId && range.sheetId !== this.sheetId) {\n throw new Error('Leave sheet ID blank or set to matching ID of this sheet');\n }\n return {\n ...range,\n sheetId: this.sheetId,\n };\n }\n\n\n // PROPERTY GETTERS //////////////////////////////////////////////////////////////////////////////\n\n private _getProp<T extends keyof WorksheetProperties>(param: T): WorksheetProperties[T] {\n this._ensureInfoLoaded();\n // see note about asserting info loaded on GoogleSpreasheet\n return this._rawProperties![param];\n }\n // eslint-disable-line no-unused-vars\n private _setProp<T extends keyof WorksheetProperties>(_param: T, _newVal: WorksheetProperties[T]) {\n throw new Error('Do not update directly - use `updateProperties()`');\n }\n\n get sheetId() { return this._getProp('sheetId'); }\n get title() { return this._getProp('title'); }\n get index() { return this._getProp('index'); }\n get sheetType() { return this._getProp('sheetType'); }\n get gridProperties() { return this._getProp('gridProperties'); }\n get hidden() { return this._getProp('hidden'); }\n get tabColor() { return this._getProp('tabColor'); }\n get rightToLeft() { return this._getProp('rightToLeft'); }\n private get _headerRange() {\n return `A${this._headerRowIndex}:${this.lastColumnLetter}${this._headerRowIndex}`;\n }\n\n set sheetId(newVal: WorksheetProperties['sheetId']) { this._setProp('sheetId', newVal); }\n set title(newVal: WorksheetProperties['title']) { this._setProp('title', newVal); }\n set index(newVal: WorksheetProperties['index']) { this._setProp('index', newVal); }\n set sheetType(newVal: WorksheetProperties['sheetType']) { this._setProp('sheetType', newVal); }\n set gridProperties(newVal: WorksheetProperties['gridProperties']) { this._setProp('gridProperties', newVal); }\n set hidden(newVal: WorksheetProperties['hidden']) { this._setProp('hidden', newVal); }\n set tabColor(newVal: WorksheetProperties['tabColor']) { this._setProp('tabColor', newVal); }\n set rightToLeft(newVal: WorksheetProperties['rightToLeft']) { this._setProp('rightToLeft', newVal); }\n\n get rowCount() {\n this._ensureInfoLoaded();\n return this.gridProperties.rowCount;\n }\n get columnCount() {\n this._ensureInfoLoaded();\n return this.gridProperties.columnCount;\n }\n\n get a1SheetName() { return `'${this.title.replace(/'/g, \"''\")}'`; }\n get encodedA1SheetName() { return encodeURIComponent(this.a1SheetName); }\n get lastColumnLetter() {\n // TODO: double check behaviour if data not loaded\n return this.columnCount ? columnToLetter(this.columnCount) : '';\n }\n\n\n // CELLS-BASED INTERACTIONS //////////////////////////////////////////////////////////////////////\n\n get cellStats() {\n let allCells = _.flatten(this._cells);\n allCells = _.compact(allCells);\n return {\n nonEmpty: _.filter(allCells, (c) => c.value).length,\n loaded: allCells.length,\n total: this.rowCount * this.columnCount,\n };\n }\n\n getCellByA1(a1Address: A1Address) {\n const split = a1Address.match(/([A-Z]+)([0-9]+)/);\n if (!split) throw new Error(`Cell address \"${a1Address}\" not valid`);\n const columnIndex = letterToColumn(split[1]);\n const rowIndex = parseInt(split[2]);\n return this.getCell(rowIndex - 1, columnIndex - 1);\n }\n\n getCell(rowIndex: RowIndex, columnIndex: ColumnIndex) {\n if (rowIndex < 0 || columnIndex < 0) throw new Error('Min coordinate is 0, 0');\n if (rowIndex >= this.rowCount || columnIndex >= this.columnCount) {\n throw new Error(`Out of bounds, sheet is ${this.rowCount} by ${this.columnCount}`);\n }\n\n if (!_.get(this._cells, `[${rowIndex}][${columnIndex}]`)) {\n throw new Error('This cell has not been loaded yet');\n }\n return this._cells[rowIndex][columnIndex];\n }\n\n async loadCells(sheetFilters?: DataFilterWithoutWorksheetId | DataFilterWithoutWorksheetId[]) {\n // load the whole sheet\n if (!sheetFilters) return this._spreadsheet.loadCells(this.a1SheetName);\n\n const filtersArray = _.isArray(sheetFilters) ? sheetFilters : [sheetFilters];\n const filtersArrayWithSheetId: DataFilter[] = _.map(filtersArray, (filter) => {\n // add sheet name to A1 ranges\n if (_.isString(filter)) {\n if (filter.startsWith(this.a1SheetName)) return filter;\n return `${this.a1SheetName}!${filter}`;\n }\n if (_.isObject(filter)) {\n // TODO: detect and support DeveloperMetadata filters\n\n // check if the user passed in a sheet id\n const filterAny = filter as any;\n if (filterAny.sheetId && filterAny.sheetId !== this.sheetId) {\n throw new Error('Leave sheet ID blank or set to matching ID of this sheet');\n }\n\n return { sheetId: this.sheetId, ...filter };\n }\n throw new Error('Each filter must be a A1 range string or gridrange object');\n });\n return this._spreadsheet.loadCells(filtersArrayWithSheetId);\n }\n\n async saveUpdatedCells() {\n const cellsToSave = _.filter(_.flatten(this._cells), { _isDirty: true });\n if (cellsToSave.length) {\n await this.saveCells(cellsToSave);\n }\n // TODO: do we want to return stats? or the cells that got updated?\n }\n\n async saveCells(cellsToUpdate: GoogleSpreadsheetCell[]) {\n // we send an individual \"updateCells\" request for each cell\n // because the fields that are udpated for each group are the same\n // and we dont want to accidentally overwrite something\n const requests = _.map(cellsToUpdate, (cell) => cell._getUpdateRequest());\n const responseRanges = _.map(cellsToUpdate, (c) => `${this.a1SheetName}!${c.a1Address}`);\n\n // if nothing is being updated the request returned is just `null`\n // so we make sure at least 1 request is valid - otherwise google throws a 400\n if (!_.compact(requests).length) {\n throw new Error('At least one cell must have something to update');\n }\n\n await this._spreadsheet._makeBatchUpdateRequest(requests, responseRanges);\n }\n\n // SAVING THIS FOR FUTURE USE\n // puts the cells that need updating into batches\n // async updateCellsByBatches() {\n // // saving this code, but it's problematic because each group must have the same update fields\n // const cellsByRow = _.groupBy(cellsToUpdate, 'rowIndex');\n // const groupsToSave = [];\n // _.each(cellsByRow, (cells, rowIndex) => {\n // let cellGroup = [];\n // _.each(cells, (c) => {\n // if (!cellGroup.length) {\n // cellGroup.push(c);\n // } else if (\n // cellGroup[cellGroup.length - 1].columnIndex ===\n // c.columnIndex - 1\n // ) {\n // cellGroup.push(c);\n // } else {\n // groupsToSave.push(cellGroup);\n // cellGroup = [];\n // }\n // });\n // groupsToSave.push(cellGroup);\n // });\n // const requests = _.map(groupsToSave, (cellGroup) => ({\n // updateCells: {\n // rows: [\n // {\n // values: _.map(cellGroup, (cell) => ({\n // ...cell._draftData.value && {\n // userEnteredValue: { [cell._draftData.valueType]: cell._draftData.value },\n // },\n // ...cell._draftData.note !== undefined && {\n // note: cell._draftData.note ,\n // },\n // ...cell._draftData.userEnteredFormat && {\n // userEnteredValue: cell._draftData.userEnteredFormat,\n // },\n // })),\n // },\n // ],\n // fields: 'userEnteredValue,note,userEnteredFormat',\n // start: {\n // sheetId: this.sheetId,\n // rowIndex: cellGroup[0].rowIndex,\n // columnIndex: cellGroup[0].columnIndex,\n // },\n // },\n // }));\n // const responseRanges = _.map(groupsToSave, (cellGroup) => {\n // let a1Range = cellGroup[0].a1Address;\n // if (cellGroup.length > 1)\n // a1Range += `:${cellGroup[cellGroup.length - 1].a1Address}`;\n // return `${cellGroup[0]._sheet.a1SheetName}!${a1Range}`;\n // });\n // }\n\n // ROW BASED FUNCTIONS ///////////////////////////////////////////////////////////////////////////\n\n async _ensureHeaderRowLoaded() {\n if (!this._headerValues) {\n await this.loadHeaderRow();\n }\n }\n\n async loadHeaderRow(headerRowIndex?: number) {\n if (headerRowIndex !== undefined) this._headerRowIndex = headerRowIndex;\n const rows = await this.getCellsInRange(this._headerRange);\n this._processHeaderRow(rows);\n }\n\n private _processHeaderRow(rows: any[]) {\n if (!rows) {\n throw new Error('No values in the header row - fill the first row with header values before trying to interact with rows');\n }\n this._headerValues = _.map(rows[0], (header) => header?.trim());\n if (!_.compact(this.headerValues).length) {\n throw new Error('All your header cells are blank - fill the first row with header values before trying to interact with rows');\n }\n checkForDuplicateHeaders(this.headerValues);\n }\n\n async setHeaderRow(headerValues: string[], headerRowIndex?: number) {\n if (!headerValues) return;\n if (headerValues.length > this.columnCount) {\n throw new Error(`Sheet is not large enough to fit ${headerValues.length} columns. Resize the sheet first.`);\n }\n const trimmedHeaderValues = _.map(headerValues, (h) => h?.trim());\n checkForDuplicateHeaders(trimmedHeaderValues);\n\n if (!_.compact(trimmedHeaderValues).length) {\n throw new Error('All your header cells are blank -');\n }\n\n if (headerRowIndex) this._headerRowIndex = headerRowIndex;\n\n const response = await this._spreadsheet.sheetsApi.put(\n `values/${this.encodedA1SheetName}!${this._headerRowIndex}:${this._headerRowIndex}`,\n {\n searchParams: {\n valueInputOption: 'USER_ENTERED', // other option is RAW\n includeValuesInResponse: true,\n },\n json: {\n range: `${this.a1SheetName}!${this._headerRowIndex}:${this._headerRowIndex}`,\n majorDimension: 'ROWS',\n values: [[\n ...trimmedHeaderValues,\n // pad the rest of the row with empty values to clear them all out\n ..._.times(this.columnCount - trimmedHeaderValues.length, () => ''),\n ]],\n },\n }\n );\n const data = await response.json<any>();\n this._headerValues = data.updatedData.values[0];\n }\n\n // TODO: look at these types\n async addRows(\n rows: RawRowData[],\n options: AddRowOptions = {}\n ) {\n // adds multiple rows in one API interaction using the append endpoint\n\n // each row can be an array or object\n // an array is just cells\n // ex: ['column 1', 'column 2', 'column 3']\n // an object must use the header row values as keys\n // ex: { col1: 'column 1', col2: 'column 2', col3: 'column 3' }\n\n // google bug that does not handle colons in sheet names\n // see https://issuetracker.google.com/issues/150373119\n if (this.title.includes(':')) {\n throw new Error('Please remove the \":\" from your sheet title. There is a bug with the google API which breaks appending rows if any colons are in the sheet title.');\n }\n\n if (!_.isArray(rows)) throw new Error('You must pass in an array of row values to append');\n\n await this._ensureHeaderRowLoaded();\n\n // convert each row into an array of cell values rather than the key/value object\n const rowsAsArrays: RawRowData[] = [];\n _.each(rows, (row) => {\n let rowAsArray;\n if (_.isArray(row)) {\n rowAsArray = row;\n } else if (_.isObject(row)) {\n rowAsArray = [];\n for (let i = 0; i < this.headerValues.length; i++) {\n const propName = this.headerValues[i];\n rowAsArray[i] = row[propName];\n }\n } else {\n throw new Error('Each row must be an object or an array');\n }\n rowsAsArrays.push(rowAsArray);\n });\n\n const response = await this._spreadsheet.sheetsApi.post(\n `values/${this.encodedA1SheetName}!A${this._headerRowIndex}:append`,\n {\n searchParams: {\n valueInputOption: options.raw ? 'RAW' : 'USER_ENTERED',\n insertDataOption: options.insert ? 'INSERT_ROWS' : 'OVERWRITE',\n includeValuesInResponse: true,\n },\n json: {\n values: rowsAsArrays,\n },\n }\n );\n\n // extract the new row number from the A1-notation data range in the response\n // ex: in \"'Sheet8!A2:C2\" -- we want the `2`\n const data = await response.json<any>();\n const { updatedRange } = data.updates;\n let rowNumber = updatedRange.match(/![A-Z]+([0-9]+):?/)[1];\n rowNumber = parseInt(rowNumber);\n\n\n this._ensureInfoLoaded();\n // if new rows were added, we need update sheet.rowRount\n if (options.insert) {\n this._rawProperties!.gridProperties.rowCount += rows.length;\n } else if (rowNumber + rows.length > this.rowCount) {\n // have to subtract 1 since one row was inserted at rowNumber\n this._rawProperties!.gridProperties.rowCount = rowNumber + rows.length - 1;\n }\n\n return _.map(data.updates.updatedData.values, (rowValues) => {\n const row = new GoogleSpreadsheetRow(this, rowNumber++, rowValues);\n return row;\n });\n }\n\n /** add a single row - see addRows for more info */\n async addRow(rowValues: RawRowData, options?: AddRowOptions) {\n const rows = await this.addRows([rowValues], options);\n return rows[0];\n }\n\n\n private _rowCache: GoogleSpreadsheetRow[] = [];\n async getRows<T extends Record<string, any>>(\n options?: {\n /** skip first N rows */\n offset?: number,\n /** limit number of rows fetched */\n limit?: number,\n }\n ) {\n // https://developers.google.com/sheets/api/guides/migration\n // v4 API does not have equivalents for the row-order query parameters provided\n // Reverse-order is trivial; simply process the returned values array in reverse order.\n // Order by column is not supported for reads, but it is possible to sort the data then read\n\n // v4 API does not currently have a direct equivalent for the Sheets API v3 structured queries\n // However, you can retrieve the relevant data and sort through it as needed in your application\n const offset = options?.offset || 0;\n const limit = options?.limit || this.rowCount - 1;\n\n const firstRow = 1 + this._headerRowIndex + offset;\n const lastRow = firstRow + limit - 1; // inclusive so we subtract 1\n\n let rawRows;\n if (this._headerValues) {\n const lastColumn = columnToLetter(this.headerValues.length);\n rawRows = await this.getCellsInRange(\n `A${firstRow}:${lastColumn}${lastRow}`\n );\n } else {\n const result = await this.batchGetCellsInRange([this._headerRange,\n `A${firstRow}:${this.lastColumnLetter}${lastRow}`]);\n this._processHeaderRow(result[0]);\n rawRows = result[1];\n }\n\n if (!rawRows) return [];\n\n const rows = [];\n let rowNum = firstRow;\n for (let i = 0; i < rawRows.length; i++) {\n const row = new GoogleSpreadsheetRow<T>(this, rowNum++, rawRows[i]);\n this._rowCache[row.rowNumber] = row;\n rows.push(row);\n }\n return rows;\n }\n\n /**\n * @internal\n * Used internally to update row numbers after deleting rows.\n * Should not be called directly.\n * */\n _shiftRowCache(deletedRowNumber: number) {\n delete this._rowCache[deletedRowNumber];\n this._rowCache.forEach((row) => {\n if (row.rowNumber > deletedRowNumber) {\n row._updateRowNumber(row.rowNumber - 1);\n }\n });\n }\n\n async clearRows(\n options?: {\n start?: number,\n end?: number,\n }\n ) {\n // default to first row after header\n const startRowIndex = options?.start || this._headerRowIndex + 1;\n const endRowIndex = options?.end || this.rowCount;\n await this._spreadsheet.sheetsApi.post(`values/${this.encodedA1SheetName}!${startRowIndex}:${endRowIndex}:clear`);\n this._rowCache.forEach((row) => {\n if (row.rowNumber >= startRowIndex && row.rowNumber <= endRowIndex) row._clearRowData();\n });\n }\n\n // BASIC PROPS ///////////////////////////////////////////////////////////////////////////////////\n /** @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateSheetPropertiesRequest */\n async updateProperties(properties: Partial<Omit<WorksheetProperties, 'sheetId'>>) {\n // Request type = `updateSheetProperties`\n\n return this._makeSingleUpdateRequest('updateSheetProperties', {\n properties: {\n sheetId: this.sheetId,\n ...properties,\n },\n fields: getFieldMask(properties),\n });\n }\n\n /**\n * passes through the call to updateProperties to update only the gridProperties object\n */\n async updateGridProperties(gridProperties: WorksheetGridProperties) {\n return this.updateProperties({ gridProperties });\n }\n\n /** resize, internally just calls updateGridProperties */\n async resize(gridProperties: Pick<WorksheetGridProperties, 'rowCount' | 'columnCount'>) {\n return this.updateGridProperties(gridProperties);\n }\n\n /**\n *\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#updatedimensionpropertiesrequest\n */\n async updateDimensionProperties(\n columnsOrRows: WorksheetDimension,\n properties: WorksheetDimensionProperties,\n bounds: Partial<DimensionRangeIndexes>\n ) {\n // Request type = `updateDimensionProperties`\n\n Object.keys(properties);\n\n return this._makeSingleUpdateRequest('updateDimensionProperties', {\n range: {\n sheetId: this.sheetId,\n dimension: columnsOrRows,\n ...bounds,\n },\n properties,\n fields: getFieldMask(properties as any),\n });\n }\n\n // OTHER /////////////////////////////////////////////////////////////////////////////////////////\n\n // this uses the \"values\" getter and does not give all the info about the cell contents\n // it is used internally when loading header cells\n async getCellsInRange(a1Range: A1Range, options?: GetValuesRequestOptions) {\n const response = await this._spreadsheet.sheetsApi.get(`values/${this.encodedA1SheetName}!${a1Range}`, {\n searchParams: options,\n });\n const data = await response.json<any>();\n return data.values;\n }\n\n async batchGetCellsInRange(a1Ranges: A1Range[], options?: GetValuesRequestOptions) {\n const ranges = a1Ranges.map((r) => `ranges=${this.encodedA1SheetName}!${r}`).join('&');\n const response = await this._spreadsheet.sheetsApi.get(`values:batchGet?${ranges}`, {\n searchParams: options,\n });\n const data = await response.json<any>();\n return data.valueRanges.map((r: any) => r.values);\n }\n\n async updateNamedRange() {\n // Request type = `updateNamedRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateNamedRangeRequest\n }\n\n async addNamedRange() {\n // Request type = `addNamedRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddNamedRangeRequest\n }\n\n async deleteNamedRange() {\n // Request type = `deleteNamedRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteNamedRangeRequest\n }\n\n async repeatCell() {\n // Request type = `repeatCell`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#RepeatCellRequest\n }\n\n async autoFill() {\n // Request type = `autoFill`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AutoFillRequest\n }\n\n async cutPaste() {\n // Request type = `cutPaste`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#CutPasteRequest\n }\n\n async copyPaste() {\n // Request type = `copyPaste`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#CopyPasteRequest\n }\n\n // TODO: check types on these ranges\n\n /**\n * Merges all cells in the range\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#MergeCellsRequest\n */\n async mergeCells(range: GridRangeWithOptionalWorksheetId, mergeType = 'MERGE_ALL') {\n await this._makeSingleUpdateRequest('mergeCells', {\n mergeType,\n range: this._addSheetIdToRange(range),\n });\n }\n\n /**\n * Unmerges cells in the given range\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UnmergeCellsRequest\n */\n async unmergeCells(range: GridRangeWithOptionalWorksheetId) {\n await this._makeSingleUpdateRequest('unmergeCells', {\n range: this._addSheetIdToRange(range),\n });\n }\n\n async updateBorders() {\n // Request type = `updateBorders`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateBordersRequest\n }\n\n async addFilterView() {\n // Request type = `addFilterView`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddFilterViewRequest\n }\n\n async appendCells() {\n // Request type = `appendCells`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AppendCellsRequest\n }\n\n async clearBasicFilter() {\n // Request type = `clearBasicFilter`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#ClearBasicFilterRequest\n }\n\n async deleteDimension() {\n // Request type = `deleteDimension`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteDimensionRequest\n }\n\n async deleteEmbeddedObject() {\n // Request type = `deleteEmbeddedObject`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteEmbeddedObjectRequest\n }\n\n async deleteFilterView() {\n // Request type = `deleteFilterView`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteFilterViewRequest\n }\n\n async duplicateFilterView() {\n // Request type = `duplicateFilterView`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DuplicateFilterViewRequest\n }\n\n /**\n * Duplicate worksheet within the document\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DuplicateSheetRequest\n */\n async duplicate(\n options?: {\n id?: WorksheetId,\n title?: string,\n index?: number,\n }\n ) {\n const response = await this._makeSingleUpdateRequest('duplicateSheet', {\n sourceSheetId: this.sheetId,\n ...options?.index !== undefined && { insertSheetIndex: options.index },\n ...options?.id && { newSheetId: options.id },\n ...options?.title && { newSheetName: options.title },\n });\n const newSheetId = response.properties.sheetId;\n return this._spreadsheet.sheetsById[newSheetId];\n }\n\n async findReplace() {\n // Request type = `findReplace`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#FindReplaceRequest\n }\n\n /**\n * Inserts rows or columns at a particular index\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#InsertDimensionRequest\n */\n async insertDimension(\n columnsOrRows: WorksheetDimension,\n rangeIndexes: DimensionRangeIndexes,\n inheritFromBefore?: boolean\n ) {\n if (!columnsOrRows) throw new Error('You need to specify a dimension. i.e. COLUMNS|ROWS');\n if (!_.isObject(rangeIndexes)) throw new Error('`range` must be an object containing `startIndex` and `endIndex`');\n if (!_.isInteger(rangeIndexes.startIndex) || rangeIndexes.startIndex < 0) throw new Error('range.startIndex must be an integer >=0');\n if (!_.isInteger(rangeIndexes.endIndex) || rangeIndexes.endIndex < 0) throw new Error('range.endIndex must be an integer >=0');\n if (rangeIndexes.endIndex <= rangeIndexes.startIndex) throw new Error('range.endIndex must be greater than range.startIndex');\n\n // default inheritFromBefore to true - unless inserting in the first row/column\n if (inheritFromBefore === undefined) {\n inheritFromBefore = rangeIndexes.startIndex > 0;\n }\n\n // do not allow inheritFromBefore if inserting at first row/column\n if (inheritFromBefore && rangeIndexes.startIndex === 0) {\n throw new Error('Cannot set inheritFromBefore to true if inserting in first row/column');\n }\n\n return this._makeSingleUpdateRequest('insertDimension', {\n range: {\n sheetId: this.sheetId,\n dimension: columnsOrRows,\n startIndex: rangeIndexes.startIndex,\n endIndex: rangeIndexes.endIndex,\n },\n inheritFromBefore,\n });\n }\n\n async insertRange() {\n // Request type = `insertRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#InsertRangeRequest\n }\n\n async moveDimension() {\n // Request type = `moveDimension`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#MoveDimensionRequest\n }\n\n async updateEmbeddedObjectPosition() {\n // Request type = `updateEmbeddedObjectPosition`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateEmbeddedObjectPositionRequest\n }\n\n async pasteData() {\n // Request type = `pasteData`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#PasteDataRequest\n }\n\n async textToColumns() {\n // Request type = `textToColumns`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#TextToColumnsRequest\n }\n\n async updateFilterView() {\n // Request type = `updateFilterView`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateFilterViewRequest\n }\n\n async deleteRange() {\n // Request type = `deleteRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteRangeRequest\n }\n\n async appendDimension() {\n // Request type = `appendDimension`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AppendDimensionRequest\n }\n\n async addConditionalFormatRule() {\n // Request type = `addConditionalFormatRule`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddConditionalFormatRuleRequest\n }\n\n async updateConditionalFormatRule() {\n // Request type = `updateConditionalFormatRule`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateConditionalFormatRuleRequest\n }\n\n async deleteConditionalFormatRule() {\n // Request type = `deleteConditionalFormatRule`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteConditionalFormatRuleRequest\n }\n\n async sortRange() {\n // Request type = `sortRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#SortRangeRequest\n }\n\n /**\n * Sets (or unsets) a data validation rule to every cell in the range\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#SetDataValidationRequest\n */\n async setDataValidation(\n range: GridRangeWithOptionalWorksheetId,\n /** data validation rule object, or set to false to clear an existing rule */\n rule: DataValidationRule | false\n ) {\n return this._makeSingleUpdateRequest('setDataValidation', {\n range: {\n sheetId: this.sheetId,\n ...range,\n },\n ...rule && { rule },\n });\n }\n\n async setBasicFilter() {\n // Request type = `setBasicFilter`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#SetBasicFilterRequest\n }\n\n async addProtectedRange() {\n // Request type = `addProtectedRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddProtectedRangeRequest\n }\n\n async updateProtectedRange() {\n // Request type = `updateProtectedRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateProtectedRangeRequest\n }\n\n async deleteProtectedRange() {\n // Request type = `deleteProtectedRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteProtectedRangeRequest\n }\n\n async autoResizeDimensions() {\n // Request type = `autoResizeDimensions`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AutoResizeDimensionsRequest\n }\n\n async addChart() {\n // Request type = `addChart`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddChartRequest\n }\n\n async updateChartSpec() {\n // Request type = `updateChartSpec`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateChartSpecRequest\n }\n\n async updateBanding() {\n // Request type = `updateBanding`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateBandingRequest\n }\n\n async addBanding() {\n // Request type = `addBanding`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddBandingRequest\n }\n\n async deleteBanding() {\n // Request type = `deleteBanding`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteBandingRequest\n }\n\n async createDeveloperMetadata() {\n // Request type = `createDeveloperMetadata`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#CreateDeveloperMetadataRequest\n }\n\n async updateDeveloperMetadata() {\n // Request type = `updateDeveloperMetadata`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateDeveloperMetadataRequest\n }\n\n async deleteDeveloperMetadata() {\n // Request type = `deleteDeveloperMetadata`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteDeveloperMetadataRequest\n }\n\n async randomizeRange() {\n // Request type = `randomizeRange`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#RandomizeRangeRequest\n }\n\n async addDimensionGroup() {\n // Request type = `addDimensionGroup`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddDimensionGroupRequest\n }\n\n async deleteDimensionGroup() {\n // Request type = `deleteDimensionGroup`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteDimensionGroupRequest\n }\n\n async updateDimensionGroup() {\n // Request type = `updateDimensionGroup`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateDimensionGroupRequest\n }\n\n async trimWhitespace() {\n // Request type = `trimWhitespace`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#TrimWhitespaceRequest\n }\n\n async deleteDuplicates() {\n // Request type = `deleteDuplicates`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteDuplicatesRequest\n }\n\n async addSlicer() {\n // Request type = `addSlicer`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddSlicerRequest\n }\n\n async updateSlicerSpec() {\n // Request type = `updateSlicerSpec`\n // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#UpdateSlicerSpecRequest\n }\n\n /** delete this worksheet */\n async delete() {\n return this._spreadsheet.deleteSheet(this.sheetId);\n }\n\n /**\n * copies this worksheet into another document/spreadsheet\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.sheets/copyTo\n * */\n async copyToSpreadsheet(destinationSpreadsheetId: SpreadsheetId) {\n const req = this._spreadsheet.sheetsApi.post(`sheets/${this.sheetId}:copyTo`, {\n json: {\n destinationSpreadsheetId,\n },\n });\n const data = await req.json<any>();\n return data;\n }\n\n /** clear data in the sheet - either the entire sheet or a specific range */\n async clear(\n /** optional A1 range to clear - defaults to entire sheet */\n a1Range?: A1Range\n ) {\n const range = a1Range ? `!${a1Range}` : '';\n // sheet name without ie 'sheet1' rather than 'sheet1'!A1:B5 is all cells\n await this._spreadsheet.sheetsApi.post(`values/${this.encodedA1SheetName}${range}:clear`);\n this.resetLocalCache(true);\n }\n\n /** exports worksheet as CSV file (comma-separated values) */\n async downloadAsCSV(): Promise<ArrayBuffer>;\n async downloadAsCSV(returnStreamInsteadOfBuffer: false): Promise<ArrayBuffer>;\n async downloadAsCSV(returnStreamInsteadOfBuffer: true): Promise<ReadableStream>;\n async downloadAsCSV(returnStreamInsteadOfBuffer = false) {\n return this._spreadsheet._downloadAs('csv', this.sheetId, returnStreamInsteadOfBuffer);\n }\n /** exports worksheet as TSC file (tab-separated values) */\n async downloadAsTSV(): Promise<ArrayBuffer>;\n async downloadAsTSV(returnStreamInsteadOfBuffer: false): Promise<ArrayBuffer>;\n async downloadAsTSV(returnStreamInsteadOfBuffer: true): Promise<ReadableStream>;\n async downloadAsTSV(returnStreamInsteadOfBuffer = false) {\n return this._spreadsheet._downloadAs('tsv', this.sheetId, returnStreamInsteadOfBuffer);\n }\n /** exports worksheet as PDF */\n async downloadAsPDF(): Promise<ArrayBuffer>;\n async downloadAsPDF(returnStreamInsteadOfBuffer: false): Promise<ArrayBuffer>;\n async downloadAsPDF(returnStreamInsteadOfBuffer: true): Promise<ReadableStream>;\n async downloadAsPDF(returnStreamInsteadOfBuffer = false) {\n return this._spreadsheet._downloadAs('pdf', this.sheetId, returnStreamInsteadOfBuffer);\n }\n}\n","import ky, { HTTPError, KyInstance } from 'ky'; // eslint-disable-line import/no-extraneous-dependencies\nimport * as _ from './toolkit';\nimport { GoogleSpreadsheetWorksheet } from './GoogleSpreadsheetWorksheet';\nimport { getFieldMask } from './utils';\nimport {\n DataFilter, GridRange, NamedRangeId, SpreadsheetId, SpreadsheetProperties, WorksheetId, WorksheetProperties,\n} from './types/sheets-types';\nimport { PermissionRoles, PermissionsList, PublicPermissionRoles } from './types/drive-types';\nimport { RecursivePartial } from './types/util-types';\nimport { AUTH_MODES, GoogleApiAuth } from './types/auth-types';\n\n\nconst SHEETS_API_BASE_URL = 'https://sheets.googleapis.com/v4/spreadsheets';\nconst DRIVE_API_BASE_URL = 'https://www.googleapis.com/drive/v3/files';\n\nconst EXPORT_CONFIG: Record<string, { singleWorksheet?: boolean }> = {\n html: {},\n zip: {},\n xlsx: {},\n ods: {},\n csv: { singleWorksheet: true },\n tsv: { singleWorksheet: true },\n pdf: { singleWorksheet: true },\n};\ntype ExportFileTypes = keyof typeof EXPORT_CONFIG;\n\n\n\n\nfunction getAuthMode(auth: GoogleApiAuth) {\n if ('getRequestHeaders' in auth) return AUTH_MODES.GOOGLE_AUTH_CLIENT;\n if ('token' in auth && auth.token) return AUTH_MODES.RAW_ACCESS_TOKEN;\n // google-auth-library now has an empty `apiKey` property\n if ('apiKey' in auth && auth.apiKey) return AUTH_MODES.API_KEY;\n throw new Error('Invalid auth');\n}\n\nasync function getRequestAuthConfig(auth: GoogleApiAuth): Promise<{\n headers?: Record<string, string>;\n searchParams?: Record<string, string>\n}> {\n // google-auth-libary methods all can call this method to get the right headers\n // JWT | OAuth2Client | GoogleAuth | Impersonate | AuthClient\n if ('getRequestHeaders' in auth) {\n const headers = await auth.getRequestHeaders();\n\n // google-auth-library v10 uses a Headers object rather than a plain object\n if ('entries' in headers) {\n return { headers: Object.fromEntries(headers.entries()) };\n } if (_.isObject(headers)) {\n return { headers: headers as Record<string, string> };\n }\n throw new Error('unexpected headers returned from getRequestHeaders');\n }\n\n // API key only access passes through the api key as a query param\n // (note this can only provide read-only access)\n if ('apiKey' in auth && auth.apiKey) {\n return { searchParams: { key: auth.apiKey } };\n }\n\n // RAW ACCESS TOKEN\n if ('token' in auth && auth.token) {\n return { headers: { Authorization: `Bearer ${auth.token}` } };\n }\n\n throw new Error('Invalid auth');\n}\n\n/**\n * Google Sheets document\n *\n * @description\n * **This class represents an entire google spreadsheet document**\n * Provides methods to interact with document metadata/settings, formatting, manage sheets, and acts as the main gateway to interacting with sheets and data that the document contains.q\n *\n */\nexport class GoogleSpreadsheet {\n readonly spreadsheetId: string;\n\n public auth: GoogleApiAuth;\n get authMode() {\n return getAuthMode(this.auth);\n }\n\n private _rawSheets: any;\n private _rawProperties = null as SpreadsheetProperties | null;\n private _spreadsheetUrl = null as string | null;\n private _deleted = false;\n\n /**\n * Sheets API [ky](https://github.com/sindresorhus/ky?tab=readme-ov-file#kycreatedefaultoptions) instance\n * authentication is automatically attached\n * can be used if unsupported sheets calls need to be made\n * @see https://developers.google.com/sheets/api/reference/rest\n * */\n readonly sheetsApi: KyInstance;\n\n /**\n * Drive API [ky](https://github.com/sindresorhus/ky?tab=readme-ov-file#kycreatedefaultoptions) instance\n * authentication automatically attached\n * can be used if unsupported drive calls need to be made\n * @topic permissions\n * @see https://developers.google.com/drive/api/v3/reference\n * */\n readonly driveApi: KyInstance;\n\n\n /**\n * initialize new GoogleSpreadsheet\n * @category Initialization\n * */\n constructor(\n /** id of google spreadsheet doc */\n spreadsheetId: SpreadsheetId,\n /** authentication to use with Google Sheets API */\n auth: GoogleApiAuth\n ) {\n this.spreadsheetId = spreadsheetId;\n this.auth = auth;\n\n this._rawSheets = {};\n this._spreadsheetUrl = null;\n\n // create a ky instance with sheet root URL and hooks to handle auth\n this.sheetsApi = ky.create({\n prefixUrl: `${SHEETS_API_BASE_URL}/${spreadsheetId}`,\n hooks: {\n beforeRequest: [(r) => this._setAuthRequestHook(r)],\n beforeError: [(e) => this._errorHook(e)],\n },\n });\n this.driveApi = ky.create({\n prefixUrl: `${DRIVE_API_BASE_URL}/${spreadsheetId}`,\n hooks: {\n beforeRequest: [(r) => this._setAuthRequestHook(r)],\n beforeError: [(e) => this._errorHook(e)],\n },\n });\n }\n\n\n // INTERNAL UTILITY FUNCTIONS ////////////////////////////////////////////////////////////////////\n\n /** @internal */\n async _setAuthRequestHook(req: Request) {\n const authConfig = await getRequestAuthConfig(this.auth);\n if (authConfig.headers) {\n Object.entries(authConfig.headers).forEach(([key, val]) => {\n req.headers.set(key, String(val));\n });\n }\n\n if (authConfig.searchParams) {\n const url = new URL(req.url);\n Object.entries(authConfig.searchParams).forEach(([key, val]) => {\n url.searchParams.set(key, String(val));\n });\n // cannot change the URL with ky, so have to return a new request\n return new Request(url, req);\n }\n\n return req;\n }\n\n /** @internal */\n async _errorHook(error: HTTPError) {\n const { response } = error;\n const errorDataText = await response?.text();\n let errorData;\n try {\n errorData = JSON.parse(errorDataText);\n } catch (e) {\n // console.log('parsing json failed', errorDataText);\n }\n\n if (errorData) {\n // usually the error has a code and message, but occasionally not\n if (!errorData.error) return error;\n\n const { code, message } = errorData.error;\n error.message = `Google API error - [${code}] ${message}`;\n return error;\n }\n\n if (_.get(error, 'response.status') === 403) {\n if ('apiKey' in this.auth) {\n throw new Error('Sheet is private. Use authentication or make public. (see https://github.com/theoephraim/node-google-spreadsheet#a-note-on-authentication for details)');\n }\n }\n return error;\n }\n\n /** @internal */\n async _makeSingleUpdateRequest(requestType: string, requestParams: any) {\n const response = await this.sheetsApi.post(':batchUpdate', {\n json: {\n requests: [{ [requestType]: requestParams }],\n includeSpreadsheetInResponse: true,\n // responseRanges: [string]\n // responseIncludeGridData: true\n },\n });\n const data = await response.json<any>();\n\n this._updateRawProperties(data.updatedSpreadsheet.properties);\n _.each(data.updatedSpreadsheet.sheets, (s: any) => this._updateOrCreateSheet(s));\n // console.log('API RESPONSE', response.data.replies[0][requestType]);\n return data.replies[0][requestType];\n }\n\n // TODO: review these types\n // currently only used in batching cell updates\n /** @internal */\n async _makeBatchUpdateRequest(requests: any[], responseRanges?: string | string[]) {\n // this is used for updating batches of cells\n const response = await this.sheetsApi.post(':batchUpdate', {\n json: {\n requests,\n includeSpreadsheetInResponse: true,\n ...responseRanges && {\n responseIncludeGridData: true,\n ...responseRanges !== '*' && { responseRanges },\n },\n },\n });\n\n const data = await response.json<any>();\n this._updateRawProperties(data.updatedSpreadsheet.properties);\n _.each(data.updatedSpreadsheet.sheets, (s: any) => this._updateOrCreateSheet(s));\n }\n\n /** @internal */\n _ensureInfoLoaded() {\n if (!this._rawProperties) throw new Error('You must call `doc.loadInfo()` before accessing this property');\n }\n\n /** @internal */\n _updateRawProperties(newProperties: SpreadsheetProperties) { this._rawProperties = newProperties; }\n\n /** @internal */\n _updateOrCreateSheet(sheetInfo: { properties: WorksheetProperties, data: any }) {\n const { properties, data } = sheetInfo;\n const { sheetId } = properties;\n if (!this._rawSheets[sheetId]) {\n this._rawSheets[sheetId] = new GoogleSpreadsheetWorksheet(this, properties, data);\n } else {\n this._rawSheets[sheetId].updateRawData(properties, data);\n }\n }\n\n // BASIC PROPS //////////////////////////////////////////////////////////////////////////////\n _getProp(param: keyof SpreadsheetProperties) {\n this._ensureInfoLoaded();\n // ideally ensureInfoLoaded would assert that _rawProperties is in fact loaded\n // but this is not currently possible in TS - see https://github.com/microsoft/TypeScript/issues/49709\n return this._rawProperties![param];\n }\n\n get title(): SpreadsheetProperties['title'] { return this._getProp('title'); }\n get locale(): SpreadsheetProperties['locale'] { return this._getProp('locale'); }\n get timeZone(): SpreadsheetProperties['timeZone'] { return this._getProp('timeZone'); }\n get autoRecalc(): SpreadsheetProperties['autoRecalc'] { return this._getProp('autoRecalc'); }\n get defaultFormat(): SpreadsheetProperties['defaultFormat'] { return this._getProp('defaultFormat'); }\n get spreadsheetTheme(): SpreadsheetProperties['spreadsheetTheme'] { return this._getProp('spreadsheetTheme'); }\n get iterativeCalculationSettings(): SpreadsheetProperties['iterativeCalculationSettings'] { return this._getProp('iterativeCalculationSettings'); }\n\n /**\n * update spreadsheet properties\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets#SpreadsheetProperties\n * */\n async updateProperties(properties: Partial<SpreadsheetProperties>) {\n await this._makeSingleUpdateRequest('updateSpreadsheetProperties', {\n properties,\n fields: getFieldMask(properties),\n });\n }\n\n // BASIC INFO ////////////////////////////////////////////////////////////////////////////////////\n async loadInfo(includeCells = false) {\n const response = await this.sheetsApi.get('', {\n searchParams: {\n ...includeCells && { includeGridData: true },\n },\n });\n const data = await response.json<any>();\n this._spreadsheetUrl = data.spreadsheetUrl;\n this._rawProperties = data.properties;\n data.sheets?.forEach((s: any) => this._updateOrCreateSheet(s));\n }\n\n resetLocalCache() {\n this._rawProperties = null;\n this._rawSheets = {};\n }\n\n // WORKSHEETS ////////////////////////////////////////////////////////////////////////////////////\n get sheetCount() {\n this._ensureInfoLoaded();\n return _.values(this._rawSheets).length;\n }\n\n get sheetsById(): Record<WorksheetId, GoogleSpreadsheetWorksheet> {\n this._ensureInfoLoaded();\n return this._rawSheets;\n }\n\n get sheetsByIndex(): GoogleSpreadsheetWorksheet[] {\n this._ensureInfoLoaded();\n return _.sortBy(this._rawSheets, 'index');\n }\n\n get sheetsByTitle(): Record<string, GoogleSpreadsheetWorksheet> {\n this._ensureInfoLoaded();\n return _.keyBy(this._rawSheets, 'title');\n }\n\n /**\n * Add new worksheet to document\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddSheetRequest\n * */\n async addSheet(\n properties: Partial<\n RecursivePartial<WorksheetProperties>\n & {\n headerValues: string[],\n headerRowIndex: number\n }\n > = {}\n ) {\n const response = await this._makeSingleUpdateRequest('addSheet', {\n properties: _.omit(properties, 'headerValues', 'headerRowIndex'),\n });\n // _makeSingleUpdateRequest already adds the sheet\n const newSheetId = response.properties.sheetId;\n const newSheet = this.sheetsById[newSheetId];\n\n if (properties.headerValues) {\n await newSheet.setHeaderRow(properties.headerValues, properties.headerRowIndex);\n }\n\n return newSheet;\n }\n\n /**\n * delete a worksheet\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteSheetRequest\n * */\n async deleteSheet(sheetId: WorksheetId) {\n await this._makeSingleUpdateRequest('deleteSheet', { sheetId });\n delete this._rawSheets[sheetId];\n }\n\n // NAMED RANGES //////////////////////////////////////////////////////////////////////////////////\n\n /**\n * create a new named range\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AddNamedRangeRequest\n */\n async addNamedRange(\n /** name of new named range */\n name: string,\n /** GridRange object describing range */\n range: GridRange,\n /** id for named range (optional) */\n namedRangeId?: string\n ) {\n // TODO: add named range to local cache\n return this._makeSingleUpdateRequest('addNamedRange', {\n name,\n namedRangeId,\n range,\n });\n }\n\n /**\n * delete a named range\n * @see https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#DeleteNamedRangeRequest\n * */\n async deleteNamedRange(\n /** id of named range to delete */\n namedRangeId: NamedRangeId\n ) {\n // TODO: remove named range from local cache\n return this._makeSingleUpdateRequest('deleteNamedRange', { namedRangeId });\n }\n\n // LOADING CELLS /////////////////////////////////////////////////////////////////////////////////\n\n /** fetch cell data into local cache */\n async loadCells(\n /**\n * single filter or array of filters\n * strings are treated as A1 ranges, objects are treated as GridRange objects\n * pass nothing to fetch all cells\n * */\n filters?: DataFilter | DataFilter[]\n ) {\n // TODO: make it support DeveloperMetadataLookup objects\n\n\n\n // TODO: switch to this mode if using a read-only auth token?\n const readOnlyMode = this.authMode === AUTH_MODES.API_KEY;\n\n const filtersArray = _.isArray(filters) ? filters : [filters];\n const dataFilters = _.map(filtersArray, (filter) => {\n if (_.isString(filter)) {\n return readOnlyMode ? filter : { a1Range: filter };\n }\n if (_.isObject(filter)) {\n if (readOnlyMode) {\n throw new Error('Only A1 ranges are supported when fetching cells with read-only access (using only an API key)');\n }\n // TODO: make this support Developer Metadata filters\n return { gridRange: filter };\n }\n throw new Error('Each filter must be an A1 range string or a gridrange object');\n });\n\n let result;\n // when using an API key only, we must use the regular get endpoint\n // because :getByDataFilter requires higher access\n if (this.authMode === AUTH_MODES.API_KEY) {\n const params = new URLSearchParams();\n params.append('includeGridData', 'true');\n dataFilters.forEach((singleFilter) => {\n if (!_.isString(singleFilter)) {\n throw new Error('Only A1 ranges are supported when fetching cells with read-only access (using only an API key)');\n }\n params.append('ranges', singleFilter);\n });\n result = await this.sheetsApi.get('', {\n searchParams: params,\n });\n // otherwise we use the getByDataFilter endpoint because it is more flexible\n } else {\n result = await this.sheetsApi.post(':getByDataFilter', {\n json: {\n includeGridData: true,\n dataFilters,\n },\n });\n }\n\n const data = await result?.json<any>();\n _.each(data.sheets, (sheet: any) => { this._updateOrCreateSheet(sheet); });\n }\n\n // EXPORTING /////////////////////////////////////////////////////////////\n\n /**\n * export/download helper, not meant to be called directly (use downloadAsX methods on spreadsheet and worksheet instead)\n * @internal\n */\n async _downloadAs(\n fileType: ExportFileTypes,\n worksheetId: WorksheetId | undefined,\n returnStreamInsteadOfBuffer?: boolean\n ) {\n // see https://stackoverflow.com/questions/11619805/using-the-google-drive-api-to-download-a-spreadsheet-in-csv-format/51235960#51235960\n\n if (!EXPORT_CONFIG[fileType]) throw new Error(`unsupported export fileType - ${fileType}`);\n if (EXPORT_CONFIG[fileType].singleWorksheet) {\n if (worksheetId === undefined) throw new Error(`Must specify worksheetId when exporting as ${fileType}`);\n } else if (worksheetId) throw new Error(`Cannot specify worksheetId when exporting as ${fileType}`);\n\n // google UI shows \"html\" but passes through \"zip\"\n if (fileType === 'html') fileType = 'zip';\n\n if (!this._spreadsheetUrl) throw new Error('Cannot export sheet that is not fully loaded');\n\n const exportUrl = this._spreadsheetUrl.replace('edit', 'export');\n const response = await this.sheetsApi.get(exportUrl, {\n prefixUrl: '', // unset baseUrl since we're not hitting the normal sheets API\n searchParams: {\n id: this.spreadsheetId,\n format: fileType,\n // worksheetId can be 0\n ...worksheetId !== undefined && { gid: worksheetId },\n },\n });\n if (returnStreamInsteadOfBuffer) {\n return response.body;\n }\n return response.arrayBuffer();\n }\n\n /**\n * exports entire document as html file (zipped)\n * @topic export\n * */\n async downloadAsZippedHTML(): Promise<ArrayBuffer>;\n async downloadAsZippedHTML(returnStreamInsteadOfBuffer: false): Promise<ArrayBuffer>;\n async downloadAsZippedHTML(returnStreamInsteadOfBuffer: true): Promise<ReadableStream>;\n async downloadAsZippedHTML(returnStreamInsteadOfBuffer?: boolean) {\n return this._downloadAs('html', undefined, returnStreamInsteadOfBuffer);\n }\n\n /**\n * @deprecated\n * use `doc.downloadAsZippedHTML()` instead\n * */\n async downloadAsHTML(returnStreamInsteadOfBuffer?: boolean) {\n return this._downloadAs('html', undefined, returnStreamInsteadOfBuffer);\n }\n\n /**\n * exports entire document as xlsx spreadsheet (Microsoft Office Excel)\n * @topic export\n * */\n async downloadAsXLSX(): Promise<ArrayBuffer>;\n async downloadAsXLSX(returnStreamInsteadOfBuffer: false): Promise<ArrayBuffer>;\n async downloadAsXLSX(returnStreamInsteadOfBuffer: true): Promise<ReadableStream>;\n async downloadAsXLSX(returnStreamInsteadOfBuffer = false) {\n return this._downloadAs('xlsx', undefined, returnStreamInsteadOfBuffer);\n }\n /**\n * exports entire document as ods spreadsheet (Open Office)\n * @topic export\n */\n async downloadAsODS(): Promise<ArrayBuffer>;\n async downloadAsODS(returnStreamInsteadOfBuffer: false): Promise<ArrayBuffer>;\n async downloadAsODS(returnStreamInsteadOfBuffer: true): Promise<ReadableStream>;\n async downloadAsODS(returnStreamInsteadOfBuffer = false) {\n return this._downloadAs('ods', undefined, returnStreamInsteadOfBuffer);\n }\n\n\n async delete() {\n await this.driveApi.delete('');\n this._deleted = true;\n // endpoint returns nothing when successful\n }\n\n // PERMISSIONS ///////////////////////////////////////////////////////////////////////////////////\n\n /**\n * list all permissions entries for doc\n */\n async listPermissions(): Promise<PermissionsList> {\n const listReq = await this.driveApi.get('permissions', {\n searchParams: {\n fields: 'permissions(id,type,emailAddress,domain,role,displayName,photoLink,deleted)',\n },\n });\n const data = await listReq.json<{ permissions: PermissionsList }>();\n return data.permissions;\n }\n\n async setPublicAccessLevel(role: PublicPermissionRoles | false) {\n const permissions = await this.listPermissions();\n const existingPublicPermission = _.find(permissions, (p) => p.type === 'anyone');\n\n if (role === false) {\n if (!existingPublicPermission) {\n // doc is already not public... could throw an error or just do nothing\n return;\n }\n await this.driveApi.delete(`permissions/${existingPublicPermission.id}`);\n } else {\n const _shareReq = await this.driveApi.post('permissions', {\n json: {\n role: role || 'viewer',\n type: 'anyone',\n },\n });\n }\n }\n\n /** share document to email or domain */\n async share(emailAddressOrDomain: string, opts?: {\n /** set role level, defaults to owner */\n role?: PermissionRoles,\n\n /** set to true if email is for a group */\n isGroup?: boolean,\n\n /** set to string to include a custom message, set to false to skip sending a notification altogether */\n emailMessage?: string | false,\n\n // moveToNewOwnersRoot?: string,\n // /** send a notification email (default = true) */\n // sendNotificationEmail?: boolean,\n // /** support My Drives and shared drives (default = false) */\n // supportsAllDrives?: boolean,\n\n // /** Issue the request as a domain administrator */\n // useDomainAdminAccess?: boolean,\n }) {\n let emailAddress: string | undefined;\n let domain: string | undefined;\n if (emailAddressOrDomain.includes('@')) {\n emailAddress = emailAddressOrDomain;\n } else {\n domain = emailAddressOrDomain;\n }\n\n\n const shareReq = await this.driveApi.post('permissions', {\n searchParams: {\n ...opts?.emailMessage === false && { sendNotificationEmail: false },\n ..._.isString(opts?.emailMessage) && { emailMessage: opts?.emailMessage },\n ...opts?.role === 'owner' && { transferOwnership: true },\n },\n json: {\n role: opts?.role || 'writer',\n ...emailAddress && {\n type: opts?.isGroup ? 'group' : 'user',\n emailAddress,\n },\n ...domain && {\n type: 'domain',\n domain,\n },\n },\n });\n\n return shareReq.json();\n }\n\n //\n // CREATE NEW DOC ////////////////////////////////////////////////////////////////////////////////\n static async createNewSpreadsheetDocument(auth: GoogleApiAuth, properties?: Partial<SpreadsheetProperties>) {\n // see updateProperties for more info about available properties\n\n if (getAuthMode(auth) === AUTH_MODES.API_KEY) {\n throw new Error('Cannot use api key only to create a new spreadsheet - it is only usable for read-only access of public docs');\n }\n\n // TODO: handle injecting default credentials if running on google infra\n\n const authConfig = await getRequestAuthConfig(auth);\n\n const response = await ky.post(SHEETS_API_BASE_URL, {\n ...authConfig, // has the auth header\n json: {\n properties,\n },\n });\n\n const data = await response.json<any>();\n const newSpreadsheet = new GoogleSpreadsheet(data.spreadsheetId, auth);\n\n // TODO ideally these things aren't public, might want to refactor anyway\n newSpreadsheet._spreadsheetUrl = data.spreadsheetUrl;\n newSpreadsheet._rawProperties = data.properties;\n _.each(data.sheets, (s: any) => newSpreadsheet._updateOrCreateSheet(s));\n\n return newSpreadsheet;\n }\n}\n"]}
|