UNPKG

4.65 kBJavaScriptView Raw
1"use strict";
2var fs = require('fs');
3var request = require('request');
4var mkdirp = require('mkdirp');
5var path = require('path');
6var rimraf = require('rimraf');
7var copydir = require('copy-dir');
8var moment = require('moment');
9function ensureDirectoryExistence(filePath) {
10 var dirname = path.dirname(filePath);
11 if (fs.existsSync(dirname)) {
12 return true;
13 }
14 ensureDirectoryExistence(dirname);
15 fs.mkdirSync(dirname);
16}
17exports.handleRoutesArray = function (arr, resultArr, base) {
18 if (base === void 0) { base = '/'; }
19 arr.forEach(function (route) {
20 if (route.path !== '**') {
21 resultArr.push(base + route.path);
22 if (route.children && route.children.length > 0) {
23 exports.handleRoutesArray(route.children, resultArr, base + route.path + '/');
24 }
25 }
26 });
27};
28function generateStaticWebsite(baseHost, port, routesArray, outputLocation, assetsDirectory) {
29 var siteMapArr = [];
30 function generateSiteMap(pathArr) {
31 console.log('Generating sitemap.xml file');
32 return new Promise(function (resolve) {
33 var base = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">";
34 pathArr.forEach(function (p) {
35 var path = p;
36 if (path === 'index') {
37 path = '/';
38 }
39 var priority;
40 var depth = (path.split('/') || []).length;
41 if (depth === 0 || depth === 1) {
42 priority = '1.0';
43 }
44 else if (depth === 2) {
45 priority = '0.8';
46 }
47 else {
48 priority = '0.5';
49 }
50 base += "\n <url>\n <loc>http://angular-meteor.com" + path + "</loc>\n <lastmod>" + moment().format('YYYY-MM-DD') + "</lastmod>\n <changefreq>weekly</changefreq>\n <priority>" + priority + "</priority>\n </url>";
51 });
52 base += "</urlset>";
53 var fullFilePath = path.join(outputLocation, 'sitemap.xml');
54 fs.writeFileSync(fullFilePath, base);
55 resolve();
56 });
57 }
58 function generateStaticForUrl(fullBaseUrl, urlPath) {
59 var url = fullBaseUrl + urlPath;
60 return new Promise(function (resolve, reject) {
61 request(url, function (err, res) {
62 if (err) {
63 return reject(err);
64 }
65 console.log('Done loading HTML content for ' + url);
66 resolve({
67 html: res.body,
68 url: urlPath
69 });
70 });
71 });
72 }
73 rimraf.sync(outputLocation);
74 copydir.sync(assetsDirectory, path.join(outputLocation, path.basename(assetsDirectory)), function (stat, filepath, filename) {
75 if (stat === 'file' && (path.extname(filepath) === '.md' || path.extname(filepath) === '.patch')) {
76 return false;
77 }
78 return true;
79 });
80 var fullBaseUrl = 'http://' + baseHost + ':' + port;
81 var urlsToLoad = ['/'];
82 exports.handleRoutesArray(routesArray, urlsToLoad);
83 var r;
84 var donePromise = new Promise(function (resolve) {
85 r = resolve;
86 });
87 function runNext(arr, i) {
88 if (i === void 0) { i = 0; }
89 if (arr[i]) {
90 generateStaticForUrl(fullBaseUrl, arr[i]).then(function (result) {
91 var filePath = result.url;
92 if (filePath === '/') {
93 filePath = 'index';
94 }
95 siteMapArr.push(filePath);
96 var filePathIndex = filePath + '/index.html';
97 filePath = filePath + '.html';
98 var fullFilePath = path.join(outputLocation, filePath);
99 var fullFilePathIndex = path.join(outputLocation, filePathIndex);
100 mkdirp.sync(path.dirname(fullFilePath));
101 mkdirp.sync(path.dirname(fullFilePathIndex));
102 fs.writeFileSync(fullFilePath, result.html);
103 fs.writeFileSync(fullFilePathIndex, result.html);
104 console.log('Done writing to files:' + [fullFilePath, fullFilePathIndex].join(', '));
105 runNext(arr, i + 1);
106 });
107 }
108 else {
109 generateSiteMap(siteMapArr).then(function () {
110 r();
111 });
112 }
113 return donePromise;
114 }
115 return runNext(urlsToLoad);
116}
117exports.generateStaticWebsite = generateStaticWebsite;
118//# sourceMappingURL=generate-static.js.map
\No newline at end of file