@atomist/rugs
Version:
Helper functions for Rugs
64 lines (59 loc) • 2.13 kB
text/typescript
/*
* Copyright © 2017 Atomist, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Project } from "@atomist/rug/model/Project";
import { CommandRespondable, Edit, Execute, HandleCommand, Instruction } from "@atomist/rug/operations/Handlers";
import { EditProject } from "@atomist/rug/operations/ProjectEditor";
/**
* Build a plan instruction for the given decorated
* editor, extracting its present property values, which
* follow a convention, with names like __name
* @param p project or name of project to edit
* @param ed editor to use
*/
export function editWith(p: Project | string, ed: EditProject): Edit {
const obj = instruction(ed, "edit");
const proj = p as any;
const projectKey = "project";
obj[projectKey] = proj.name ? proj.name() : p;
return obj as Edit;
}
export function handleCommand(ed: HandleCommand): Instruction<"command"> {
return instruction(ed, "command");
}
/**
* Emit an instruction for the given decorated operation type
* @param op operation to emit instruction for
* @param kind kind of the instruction, such as "edit"
*/
function instruction(op, kind) {
const params = {};
for (const param of op.__parameters) {
params[param.name] = op[param.name];
}
return {
kind,
name: op.__name,
parameters: params,
};
}
/**
* Build an 'execute' Rug Function
* @param name Rug Function to call
* @param params any params, if any
*/
export function execute(name: string, params?: any): CommandRespondable<Execute> {
return { instruction: { kind: "execute", name, parameters: params } };
}