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
JavaScript
;
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==