@google/clasp
Version:
Develop Apps Script Projects locally
52 lines (51 loc) • 2.09 kB
JavaScript
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);
}
}
}