UNPKG

2.18 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3const program = require('commander'),
4 fs = require('fs'),
5 logger = require('./lib/logger'),
6 fetchAuthData = require('./lib/settings').fetchSettings,
7 yaml = require('js-yaml'),
8 version = require('./package.json').version,
9 Gateway = require('./lib/proxy');
10
11program
12 .version(version)
13 .arguments('[environment]', 'Name of environment. Example: staging')
14 .option('-c --config-file <config-file>', 'config file path', '.marketplace-kit')
15 .option('-t --type <type>', 'item type - LiquidView', 'Page')
16 .action((environment, params) => {
17 process.env.CONFIG_FILE_PATH = params.configFile;
18 const authData = fetchAuthData(environment, program);
19 const itemsQuery = `{ items: cms_items(type: ${params.type}) { results { type name: resource_name data }}}`;
20 const typesQuery = '{ itemTypes: cms_discovery { results { name path fields }}}';
21 const gateway = new Gateway(authData);
22
23 gateway.graph(typesQuery).then(typesResponse => {
24 const types = typesResponse.data.itemTypes.results;
25
26 gateway.graph(itemsQuery).then(response => {
27 const files = response.data.items.results;
28
29 [...files].forEach(file => {
30 logger.Info(`File: ${file}`);
31 let type = types.find(t => t.name == file.type);
32
33 const source = new Liquid(file, type);
34 fs.writeFileSync(source.path, source.output, logger.Error);
35 });
36 }, logger.Error);
37 }, logger.Error);
38 });
39
40const LIQUID_TEMPLATE = '---\nMETADATA---\nCONTENT';
41
42class Liquid {
43 constructor(source, type) {
44 this.source = source;
45 this.type = type;
46 this.content = source.data.content || source.data.body || '';
47 }
48
49 get path() {
50 return `marketplace_builder/${this.type.path.base}/${this.source.name}.${this.type.path.ext}`;
51 }
52
53 get metadata() {
54 const metadata = Object.assign(this.source.data);
55 delete metadata.content;
56 delete metadata.body;
57 return metadata;
58 }
59
60 get output() {
61 return LIQUID_TEMPLATE.replace('METADATA', this.serialize(this.metadata)).replace('CONTENT', this.content);
62 }
63
64 serialize(obj) {
65 return yaml.safeDump(obj);
66 }
67}
68
69program.parse(process.argv);