-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
30 changed files
with
2,371 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
208 changes: 208 additions & 0 deletions
208
packages/nocms-plugin-directory-resources/lib/createDirectoryResourceProvider.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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('/'); | ||
} | ||
} |
32 changes: 32 additions & 0 deletions
32
packages/nocms-plugin-directory-resources/lib/createScriptManager.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
}; | ||
} |
83 changes: 83 additions & 0 deletions
83
packages/nocms-plugin-directory-resources/lib/getShortDescription.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} |
Oops, something went wrong.