1 | #!/usr/bin/env node
|
2 |
|
3 | const 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 |
|
11 | program
|
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 |
|
40 | const LIQUID_TEMPLATE = '---\nMETADATA---\nCONTENT';
|
41 |
|
42 | class 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 |
|
69 | program.parse(process.argv);
|