UNPKG

forest-cli

Version:

The Lumberjacks' toolbelt is the Forest CLI which makes easy to manage your back office application directly from the terminal.

65 lines 5.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseLayoutFile = exports.serializeLayoutFile = exports.LayoutFileError = void 0; class LayoutFileError extends Error { constructor(message) { super(message); this.name = 'LayoutFileError'; } } exports.LayoutFileError = LayoutFileError; /** Serialize the pulled documents with the scope header. */ function serializeLayoutFile(scope, docs, now) { const content = { forest: { environment: { id: scope.environmentId, name: scope.environmentName }, project: { id: scope.projectId, name: scope.projectName }, pulledAt: now().toISOString(), server: scope.serverUrl, team: { id: scope.teamId, name: scope.teamName }, version: 1, }, ...(docs.layout === undefined ? {} : { layout: docs.layout }), ...(docs.folders === undefined ? {} : { folders: docs.folders }), ...(docs.workflows === undefined ? {} : { workflows: docs.workflows }), }; return `${JSON.stringify(content, null, 2)}\n`; } exports.serializeLayoutFile = serializeLayoutFile; /** Parse the file back; tolerates absent domains (partial pulls). */ function parseLayoutFile(content) { let parsed; try { parsed = JSON.parse(content); } catch (error) { throw new LayoutFileError(`Invalid JSON: ${error instanceof Error ? error.message : String(error)}`); } if (!parsed || typeof parsed !== 'object') { throw new LayoutFileError('Empty or invalid layout file.'); } const root = parsed; const header = root.forest; if (!header) { throw new LayoutFileError('Missing `forest` header. Generate the file with `forest layout pull`.'); } const scope = { environmentId: header.environment?.id, environmentName: header.environment?.name, projectId: header.project?.id, projectName: header.project?.name, serverUrl: header.server, teamId: header.team?.id, teamName: header.team?.name, }; return { docs: { folders: root.folders, layout: root.layout, workflows: root.workflows, }, scope, }; } exports.parseLayoutFile = parseLayoutFile; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvbGF5b3V0L2xheW91dC1maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVNBLE1BQWEsZUFBZ0IsU0FBUSxLQUFLO0lBQ3hDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQUxELDBDQUtDO0FBRUQsNERBQTREO0FBQzVELFNBQWdCLG1CQUFtQixDQUNqQyxLQUFrQixFQUNsQixJQUFtQixFQUNuQixHQUFlO0lBRWYsTUFBTSxPQUFPLEdBQUc7UUFDZCxNQUFNLEVBQUU7WUFDTixXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLGVBQWUsRUFBRTtZQUNyRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRTtZQUN6RCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQzdCLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUztZQUN2QixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUNoRCxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM3RCxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hFLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7S0FDdkUsQ0FBQztJQUVGLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNqRCxDQUFDO0FBcEJELGtEQW9CQztBQUVELHFFQUFxRTtBQUNyRSxTQUFnQixlQUFlLENBQUMsT0FBZTtJQUk3QyxJQUFJLE1BQWUsQ0FBQztJQUNwQixJQUFJO1FBQ0YsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFZLENBQUM7S0FDekM7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLE1BQU0sSUFBSSxlQUFlLENBQ3ZCLGlCQUFpQixLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDMUUsQ0FBQztLQUNIO0lBRUQsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7UUFDekMsTUFBTSxJQUFJLGVBQWUsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0tBQzVEO0lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBaUMsQ0FBQztJQUMvQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFPUCxDQUFDO0lBRWQsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUNYLE1BQU0sSUFBSSxlQUFlLENBQ3ZCLHVFQUF1RSxDQUN4RSxDQUFDO0tBQ0g7SUFFRCxNQUFNLEtBQUssR0FBeUI7UUFDbEMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRTtRQUNyQyxlQUFlLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJO1FBQ3pDLFNBQVMsRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDN0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSTtRQUNqQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDeEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUN2QixRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJO0tBQzVCLENBQUM7SUFFRixPQUFPO1FBQ0wsSUFBSSxFQUFFO1lBQ0osT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFnQztZQUM5QyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFrQztTQUNuRDtRQUNELEtBQUs7S0FDTixDQUFDO0FBQ0osQ0FBQztBQW5ERCwwQ0FtREMifQ==