UNPKG

@google/clasp

Version:

Develop Apps Script Projects locally

52 lines (51 loc) 2.09 kB
import Debug from 'debug'; import { google } from 'googleapis'; import { assertAuthenticated, assertScriptConfigured, handleApiError } from './utils.js'; const debug = Debug('clasp:core'); export class Functions { constructor(options) { this.options = options; } async getFunctionNames() { debug('Fetching runnable functions'); assertAuthenticated(this.options); assertScriptConfigured(this.options); const credentials = this.options.credentials; const scriptId = this.options.project.scriptId; const script = google.script({ version: 'v1', auth: credentials }); const res = await script.projects.getContent({ scriptId }); const files = res.data.files; const functions = []; if (!files) { return functions; } return files.flatMap(file => { var _a, _b; return (_b = (_a = file.functionSet) === null || _a === void 0 ? void 0 : _a.values) !== null && _b !== void 0 ? _b : []; }).map(func => func.name); } async runFunction(functionName, parameters, devMode = true) { debug('Running script function %s', functionName); assertAuthenticated(this.options); assertScriptConfigured(this.options); const credentials = this.options.credentials; const scriptId = this.options.project.scriptId; const script = google.script({ version: 'v1', auth: credentials }); try { const request = { scriptId, requestBody: { function: functionName, parameters: parameters !== null && parameters !== void 0 ? parameters : [], devMode, }, }; debug('Running function with request: %O', request); const res = await script.scripts.run(request); if (!res.data) { throw new Error('Function returned undefined'); } return res.data; } catch (error) { handleApiError(error); } } }