· 6 years ago · Sep 12, 2019, 12:48 PM
1
2'use strict';
3
4require('dotenv').config();
5
6var request = require('superagent'),
7 path = require('path'),
8 knox = require('knox'),
9 Q = require('q'),
10 fs = require('fs'),
11 yargs = require('yargs'),
12 promises = [],
13 obj = {},
14
15 routes = [
16 { path: 'posts', type: 'list' },
17 { path: 'content', type: 'single' },
18 { path: 'settings', type: 'single' }
19 ];
20
21const client = knox.createClient({
22 key: process.env.S3_KEY,
23 secret: process.env.S3_SECRET,
24 bucket: process.env.S3_BUCKET,
25 region: process.env.S3_REGION
26});
27
28function get(route) {
29
30 let deferred = new Q.defer();
31
32 request
33 .get(process.env.SITE_URL + '/api/' + route.path)
34 .end( (err, res) => {
35 if (err) return deferred.reject(err);
36 obj[route.path] = parse(res.body.results, route.type);
37 deferred.resolve(res.body)
38 });
39
40 return deferred.promise;
41
42}
43
44/**
45 * Smash through the content and put the content as lean little
46 * nuggets of truth
47 */
48function parse (obj, type) {
49 const parsed = {},
50 sorted = [];
51
52 if (type === 'single') {
53 obj.map((item) => {
54
55 if (item.typeBoolean === true) parsed[item.content_key] = item.optBoolean;
56 if (item.typeString === true) parsed[item.content_key] = item.optString;
57 if (item.typeHtml === true) parsed[item.content_key] = item.optHtml;
58 if (item.typeCodeHTML === true) parsed[item.content_key] = item.optCodeHTML;
59 if (item.typeCodeJS === true) parsed[item.content_key] = item.optCodeJS;
60 if (item.typeMarkdown === true) parsed[item.content_key] = item.optMarkdown.html;
61 if (item.typeColor === true) parsed[item.content_key] = item.optColor;
62 if (item.typeFile === true) parsed[item.content_key] = item.optFile;
63 if (item.typeImages === true) parsed[item.content_key] = item.optImages;
64 if (item.typeImage === true) parsed[item.content_key] = item.optImage;
65
66 });
67
68 return parsed;
69
70 } else {
71 if ( obj.length ) {
72
73 obj.map((item, index) => {
74 if ('content_key' in item) parsed[item.content_key] = item;
75 else parse[index] = item;
76 sorted.push(item);
77 });
78
79 if ( sorted.length && 'list_order' in sorted[0] ) {
80 parsed._sorted = sorted.sort( (a, b) => {
81 if ( a.list_order < b.list_order ) return -1;
82 else if ( a.list_order > b.list_order ) return 1;
83 else return 0;
84 });
85 }
86
87 if ( sorted.length && 'date' in sorted[0] ) {
88 sorted.map( (s) => console.log(s.date));
89 parsed._sorted = sorted.sort( (a, b) => {
90 if ( new Date(a.date) > new Date(b.date) ) return -1;
91 else if ( new Date(a.date) < new Date(b.date) ) return 1;
92 else return 0;
93 });
94 }
95
96 return parsed;
97
98 } else {
99
100 return obj;
101 }
102 }
103
104}
105
106function upload () {
107
108 var
109 file = fs.readFileSync(path.join(process.cwd(), 'server/public/js/app.js'), "utf8"),
110 src = 'window.bagelcontent = ' + JSON.stringify(obj) + ';' + file;
111
112 var req = client.put('/js/app.built.js', {
113 'Content-Length': Buffer.byteLength(src),
114 'Content-Type': 'application/javascript',
115 // 'Content-Encoding': 'gzip',
116 'x-amz-acl': 'public-read'
117 });
118
119 req.on('error', console.log);
120
121 req.on('response', (res) => {
122 if (200 == res.statusCode) console.log('saved to %s', req.url);
123 });
124
125 req.end(src);
126
127}
128
129function save () {
130
131 let
132 file = fs.readFileSync('./public/js/app.js', "utf8"),
133 src = 'window.bagelcontent = ' + JSON.stringify(obj) + ';' + file;
134
135 fs.writeFileSync('./public/js/app.built.js', src);
136 console.log('saved locally');
137
138}
139
140function start () {
141
142 obj = {};
143 promises = [];
144 routes.map( (route, index) => promises.push(get(route)) );
145 Q.all(promises)
146 .then(process.env.ENV_TYPE !== 'local' ? upload : save)
147 .fail(console.log);
148
149}
150
151module.exports = start;
152
153/**
154 * If we are running locally, invoke the squasher immediately.
155 * INVOKE THE SQUASHER
156 */
157if (process.env.ENV_TYPE === 'local') start();