draaft
Version:
A CLI to pull content from https://pilot.pm content collaboration platform and feed your static site generator with markdown files
94 lines (93 loc) • 3.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const command_1 = require("@oclif/command");
const yaml = require("js-yaml");
const path = require("path");
const chalk_1 = require("chalk");
const base_1 = require("../base");
const signal_1 = require("../signal");
const write_1 = require("../write");
class Types extends base_1.BaseCommand {
purgeType(srcType) {
let purgedType = {};
purgedType.id = srcType.id;
purgedType.name = srcType.name;
purgedType.content_schema = {};
srcType.content_schema.forEach((element) => {
let neovalue = {};
neovalue.fm_show = true;
neovalue.fm_key = element.name;
if (element.name === "body") {
neovalue.fm_show = false;
}
purgedType.content_schema[element.name] = neovalue;
});
return purgedType;
}
saveTypeToDisk(contentType, backup = false) {
let yaml2write = yaml.safeDump(this.purgeType(contentType));
let writePath = path.join(process.cwd(), ".draaft", `type-${contentType.id}.yml`);
if (backup) {
write_1.createFileSafe(writePath, yaml2write);
}
else {
write_1.createFile(writePath, yaml2write);
}
}
async run() {
const { flags, args } = this.parse(Types);
let typesList = [];
// Get item types list
if (args.id) {
try {
this.spinner.start(`Get one item type (${args.id})`);
typesList.push(await this.api.typesGetOne(args.id));
this.spinner.succeed(`item type ${args.id} downloaded`);
if (flags.save) {
this.saveTypeToDisk(typesList[0], flags.backup);
}
}
catch (error) {
this.spinner.fail("Error while downloading item type");
signal_1.signal.fatal(error);
this.exit(1);
}
}
else {
try {
this.spinner.start("Get item types list");
let firstPage = await this.api.typesGetAll();
typesList = firstPage.objects;
this.spinner.succeed("item types list downloaded");
this.log("This list represents all item types created by the user \n ===================");
}
catch (error) {
this.spinner.fail("Error while downloading item types list");
signal_1.signal.fatal(error);
this.exit(1);
}
}
for (let type of typesList) {
this.log(`📐 ${type.name} [id:${type.id}]`);
if (flags.schema) {
type.content_schema.forEach((field) => {
let required = field.required ? "required" : "";
this.log(` ${field.name} ${chalk_1.default.yellow(field.type)} ${chalk_1.default.gray(required)}`);
});
}
}
}
}
Types.description = "List all item types";
Types.flags = {
help: command_1.flags.help({ char: "h" }),
// flag with no value (-f, --force)
schema: command_1.flags.boolean({ char: "w", description: "Display content schema for each type" }),
save: command_1.flags.boolean({
char: "s",
description: "Save content shema as file for customisation",
}),
backup: command_1.flags.boolean({ char: "b", description: "If file exists create backup" }),
};
Types.args = [{ name: "id", description: "ID of type", required: false }];
exports.default = Types;