UNPKG

@baqhub/cli

Version:

The official command line interface for the BAQ federated app platform.

49 lines (48 loc) 1.99 kB
import camelCase from "lodash/camelCase.js"; import { pascalCase } from "../helpers/case.js"; import { writeAuthenticationFile, } from "./files/authenticationFile.js"; import { projectFileToProjectFilesPath, } from "./files/projectFile.js"; const defaultScopes = ["read", "write"]; export async function maybeRestoreAuthentication(projectFile) { const { project } = projectFile; const { name, description, websiteUrl, type, recordTypes } = project; // Build imports for each record type. const recordTypeNames = Object.keys(recordTypes); const recordTypesImport = recordTypeNames .map(n => `import {${pascalCase(n)}Record} from "./${camelCase(n)}Record.js";`) .join("\n"); // Scope request. const intermediateScopeRequest = recordTypeNames.reduce((result, recordTypeName) => { const recordType = recordTypes[recordTypeName]; if (!recordType) { return result; } const link = `${pascalCase(recordTypeName)}Record.link`; const scopes = recordType.scopes || defaultScopes; return scopes.reduce((r, scope) => { return { ...r, [scope]: [...(r[scope] || []), link], }; }, result); }, {}); const scopeRequest = Object.entries(intermediateScopeRequest).reduce((result, [scope, links]) => { return result + `${scope}: [${links.join(", ")}],`; }, ""); // Write the file. const vars = { appName: name, appDescription: maybeJsonProperty("description", description), appWebsiteUrl: maybeJsonProperty("website", websiteUrl), recordTypesImport, scopeRequest, }; const projectFilesPath = projectFileToProjectFilesPath(projectFile); await writeAuthenticationFile(type, projectFilesPath, vars); } function maybeJsonProperty(propertyName, value) { if (!value) { return undefined; } return `${propertyName}: ${JSON.stringify(value)},`; }