UNPKG

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
"use strict"; 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;