Skip to content

Commit

Permalink
Build project
Browse files Browse the repository at this point in the history
  • Loading branch information
hilleer committed Jul 12, 2017
1 parent b6b5a41 commit 58f9237
Show file tree
Hide file tree
Showing 30 changed files with 2,371 additions and 3 deletions.
4 changes: 1 addition & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
lerna-debug.log
node_modules

# Ignore all build folders
packages/*/bin
packages/*/lib
# Ignore all build folders
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
'use strict';

Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = createDirectoryResourceProvider;

var _path = require('path');

var _path2 = _interopRequireDefault(_path);

var _renderDirectoryResource = require('./renderDirectoryResource');

var _renderDirectoryResource2 = _interopRequireDefault(_renderDirectoryResource);

var _deepmerge = require('deepmerge');

var _deepmerge2 = _interopRequireDefault(_deepmerge);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }

const pugFiles = ['_index.pug', 'index.pug'];
const scssFiles = ['_index.scss', 'index.scss'];
const pattern = '**/';

function createDirectoryResourceProvider({ findFiles, fileExists, readFile, watchFiles, writeFile, resolveInputPath }) {
let getDirectoryResources = (() => {
var _ref = _asyncToGenerator(function* () {
try {
if (!directoryResourceCache) {
let directories = yield getDirectories();
let globals = yield getGlobals();
let directoryResources = yield createDirectoryResources(directories, globals);
directoryResourceCache = directoryResources.reduce(function (directoryResourceCache, directoryResource) {
directoryResourceCache[directoryResource.id] = directoryResource;
return directoryResourceCache;
}, {});
}

return Object.values(directoryResourceCache);
} catch (err) {
throw err;
}
});

return function getDirectoryResources() {
return _ref.apply(this, arguments);
};
})();

let createDirectoryResources = (() => {
var _ref2 = _asyncToGenerator(function* (directories, globals) {
let createDirectoryResourcePromises = directories.map(function (directory) {
return createDirectoryResource(directory, globals);
});

return Promise.all(createDirectoryResourcePromises);
});

return function createDirectoryResources(_x, _x2) {
return _ref2.apply(this, arguments);
};
})();

let createDirectoryResource = (() => {
var _ref3 = _asyncToGenerator(function* (directory, globals) {
try {
let id = getDirectoryResourceId(directory);
let inDir = directory;
let outFile = _path2.default.join(directory, 'index.html');
let physicalPath = resolveInputPath(directory);
let locals = yield getData(directory);
let data = (0, _deepmerge2.default)(globals, locals);
let mimeType = 'text/html';

return { id, inDir, outFile, physicalPath, data, mimeType };
} catch (err) {
throw err;
}
});

return function createDirectoryResource(_x3, _x4) {
return _ref3.apply(this, arguments);
};
})();

let getDirectories = (() => {
var _ref4 = _asyncToGenerator(function* () {
return findFiles(pattern).then(function (directories) {
return directories.filter(function (directory) {
const doesNotStartWithAnUnderscore = _path2.default.parse(directory).base[0] !== '_';
const hasPugFile = pugFiles.some(function (pugFile) {
return fileExists(_path2.default.join(directory, pugFile));
});
const hasScssFile = scssFiles.some(function (scssFile) {
return fileExists(_path2.default.join(directory, scssFile));
});

return doesNotStartWithAnUnderscore && hasPugFile && hasScssFile;
});
});
});

return function getDirectories() {
return _ref4.apply(this, arguments);
};
})();

let getData = (() => {
var _ref5 = _asyncToGenerator(function* (directory) {
try {
let dataJson = yield getDataJson(directory);

return JSON.parse(dataJson);
} catch (err) {
return {};
}
});

return function getData(_x5) {
return _ref5.apply(this, arguments);
};
})();

let getDataJson = (() => {
var _ref6 = _asyncToGenerator(function* (directory) {
try {
let dataJsonPath = _path2.default.join(directory, '_data.json');
let dataJson = yield readFile(dataJsonPath, 'utf8');

return dataJson;
} catch (err) {
throw err;
}
});

return function getDataJson(_x6) {
return _ref6.apply(this, arguments);
};
})();

let compileDirectoryResource = (() => {
var _ref7 = _asyncToGenerator(function* (directoryResource, resourceCompilationContext) {
try {
let renderedDirectoryResource = yield (0, _renderDirectoryResource2.default)(directoryResource, resourceCompilationContext);

return writeFile(directoryResource.outFile, renderedDirectoryResource, 'utf8');
} catch (err) {
throw err;
}
});

return function compileDirectoryResource(_x7, _x8) {
return _ref7.apply(this, arguments);
};
})();

let getGlobals = (() => {
var _ref8 = _asyncToGenerator(function* () {
try {
let globals;
let env = process.env.NODE_ENV || 'development';

let defaultGlobalsJson = yield readFile('_globals.json');
let defaultGlobals = JSON.parse(defaultGlobalsJson);

try {
let envGlobalsJson = yield readFile(`_globals.${env}.json`);
let envGlobals = JSON.parse(envGlobalsJson);

globals = (0, _deepmerge2.default)(defaultGlobals, envGlobals);
} catch (err) {
// We do not force having env-specific _globals.json, thus just proceed if it does not exist.
globals = defaultGlobals;
}

return globals;
} catch (err) {
throw err;
}
});

return function getGlobals() {
return _ref8.apply(this, arguments);
};
})();

let directoryResourceCache;

watchFiles(pattern).on('all', handleAll);

function handleAll(event, directory) {
if (directoryResourceCache) {
directoryResourceCache = null;
}
}

return {
getResources: getDirectoryResources,
compileResource: compileDirectoryResource
};

function getDirectoryResourceId(directory) {
return '/' + directory.split(_path2.default.sep).join('/');
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
'use strict';

Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = createScriptManager;

var _fs = require('fs');

var _fs2 = _interopRequireDefault(_fs);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function createScriptManager() {
const scriptsFiles = new Set();

function registerScript(scriptFile) {
scriptsFiles.add(scriptFile);
}

function embedRegisteredScripts(html) {
const scripts = [...scriptsFiles].map(file => _fs2.default.readFileSync(file, 'utf8'));
const scriptElements = scripts.map(script => `<script>${script}</script>`);

return html.replace('</body>', `${scriptElements.join('')}</body>`);
}

return {
registerScript,
embedRegisteredScripts
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
'use strict';

Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = getShortDescription;
/*
Rules:
1. ignore first line if it starts with '#'
2. take content until you meet '**' or '##' or '###' at start of line
3. take no more than 4 paragraphs of text
4. transform string like "Here's a few tips:" on last line to "Here's a few tips..."
*/
function getShortDescription(fullContent) {
let lines = fullContent.split('\n');

removeFirstLineIfHeader(lines);
removeFirstLineIfEmpty(lines);

removeLinesAfterStars(lines);
removeLastLineIfEmpty(lines);

removeLinesAfterNParagraphs(lines, 4);
removeLastLineIfEmpty(lines);

replaceLastSymbolOfLastLine(lines, ':', '...');

return lines.join('\n');
}

function removeFirstLineIfHeader(lines) {
if (lines[0].indexOf('#') === 0) {
lines.splice(0, 1);
}
}

function removeFirstLineIfEmpty(lines) {
if (lines[0] === '') {
lines.splice(0, 1);
}
}

function removeLinesAfterStars(lines) {
let breakIndex = lines.findIndex(l => l.indexOf('**') === 0 || l.indexOf('##') === 0);
removeLinesAfterIndex(lines, breakIndex);
}

function removeLinesAfterIndex(lines, index) {
if (index !== -1) {
lines.splice(index, lines.length - index);
}
}

function removeLastLineIfEmpty(lines) {
if (lines.length && lines[lines.length - 1] === '') {
lines.splice(lines.length - 1, 1);
}
}

function removeLinesAfterNParagraphs(lines, n) {
let p = 0,
breakIndex = -1;
for (let i = 0; i < lines.length; i++) {
if (lines[i] !== '') {
p++;
}
if (p > n) {
breakIndex = i;
break;
}
}
removeLinesAfterIndex(lines, breakIndex);
}

function replaceLastSymbolOfLastLine(lines, symbolToReplace, replaceToSymbols) {
if (lines.length) {
var lastLine = lines[lines.length - 1];
if (lastLine.length && lastLine[lastLine.length - 1] === symbolToReplace) {
lastLine = lastLine.substring(0, lastLine.length - 1) + replaceToSymbols;
lines[lines.length - 1] = lastLine;
}
}
}
18 changes: 18 additions & 0 deletions packages/nocms-plugin-directory-resources/lib/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
'use strict';

Object.defineProperty(exports, "__esModule", {
value: true
});
exports.activate = activate;

var _createDirectoryResourceProvider = require('./createDirectoryResourceProvider');

var _createDirectoryResourceProvider2 = _interopRequireDefault(_createDirectoryResourceProvider);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function activate({ findFiles, fileExists, readFile, registerResourceProvider, resolveInputPath, watchFiles, writeFile }) {
let directoryResourceProvider = (0, _createDirectoryResourceProvider2.default)({ findFiles, fileExists, readFile, resolveInputPath, watchFiles, writeFile });

registerResourceProvider(directoryResourceProvider);
}
Loading

0 comments on commit 58f9237

Please sign in to comment.