Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
node_js:
- '7'
- '8'
sudo: false
language: node_js
env:
- CXX=g++-4.8
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-4.8
script: npm run test
8 changes: 5 additions & 3 deletions example/index.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
var nanocontent = require('../')
var css = require('sheetify')
var hypha = require('hypha')
var choo = require('choo')
css('./src/design/index.js')

var site = hypha.readSiteSync('./content', {
var site = nanocontent.readSiteSync('./content', {
parent: '/content'
})

var app = choo()

// design
css('./src/design/index.js')

// content and routes
app.use(require('./src/stores/content')(site))
app.route('*', require('./src/views/notfound'))
Expand Down
8 changes: 4 additions & 4 deletions example/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "hypha-example",
"name": "nanocontent-example",
"version": "1.0.0",
"description": "nice",
"main": "index.js",
Expand All @@ -10,13 +10,13 @@
"author": "",
"license": "ISC",
"dependencies": {
"bel": "^5.1.3",
"bel": "^6.0.0",
"choo": "^6.5.1",
"gr8": "^3.1.3",
"markdown-it": "^8.4.0",
"object-keys": "^1.0.11",
"object-values": "^1.0.0",
"sheetify": "^6.2.0",
"object-values": "^2.0.0",
"sheetify": "^7.3.2",
"xtend": "^4.0.1"
},
"devDependencies": {
Expand Down
10 changes: 10 additions & 0 deletions greenkeeper.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"groups": {
"default": {
"packages": [
"example/package.json",
"package.json"
]
}
}
}
45 changes: 41 additions & 4 deletions lib/readFile.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
var promisify = require('promisify-node')
var assert = require('assert')
var smarkt = require('smarkt')
var xtend = require('xtend')
var path = require('path')

var utilFile = require('../utils/file')
var utilPage = require('../utils/page')
var readPage = require('./readPage')
var defaults = require('./defaults')

module.exports = readFile

Expand All @@ -10,9 +16,40 @@ async function readFile (pathFile, opts) {
assert.equal(typeof opts, 'object', 'arg2: opts must be type object')
assert.equal(typeof opts.fs, 'object', 'arg2: opts.fs must be type object')

if (!utilFile.isFile(pathFile)) {
return readPage(pathFile, opts)
} else {
return false
// pages
if (utilPage.isPage(pathFile)) return readPage(pathFile, opts)

var fs = opts.fs
var parse = typeof opts.parse === 'function' ? opts.parse : smarkt.parse
var fileIndex = opts.file || defaults.file
var fileExtname = path.extname(fileIndex).toLowerCase()
var filetypes = opts.filetypes || defaults.filetypes
var pathRoot = opts.pathRoot || ''
var encoding = opts.encoding || defaults.encoding
var fileParsed = utilFile.getFileMeta({
pathFile: pathFile,
pathRoot: pathRoot,
filetypes: filetypes,
pathSource: opts.source,
pathSiteParent: opts.parent
})

// skip text files
if (fileExtname === fileParsed.extension) return false

try {
var pathMeta = pathFile + fileExtname
var text = isAsync(fs.readFile)
? await fs.readFile(pathMeta, encoding)
: await promisify(fs.readFile)(pathMeta, encoding)
return xtend(parse(text), fileParsed)
} catch (err) {
// console.log(fileParsed.filename, err.message)
if (fileParsed.filename) return Promise.resolve(fileParsed)
else return Promise.resolve(false)
}
}

function isAsync (fn) {
return fn.constructor.name === 'AsyncFunction'
}
36 changes: 32 additions & 4 deletions lib/readFileSync.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
var assert = require('assert')
var smarkt = require('smarkt')
var xtend = require('xtend')
var path = require('path')

var readPageSync = require('./readPageSync')
var utilFile = require('../utils/file')
var utilPage = require('../utils/page')
var defaults = require('./defaults')

module.exports = readFileSync

Expand All @@ -10,9 +15,32 @@ function readFileSync (pathFile, opts) {
assert.equal(typeof opts, 'object', 'arg2: opts must be type object')
assert.equal(typeof opts.fs, 'object', 'arg2: opts.fs must be type object')

if (!utilFile.isFile(pathFile)) {
return readPageSync(pathFile, opts)
} else {
return false
// page
if (utilPage.isPage(pathFile)) return readPageSync(pathFile, opts)

var fs = opts.fs
var parse = typeof opts.parse === 'function' ? opts.parse : smarkt.parse
var fileIndex = opts.file || defaults.file
var fileExtname = path.extname(fileIndex).toLowerCase()
var filetypes = opts.filetypes || defaults.filetypes
var pathRoot = opts.pathRoot || ''
var encoding = opts.encoding || defaults.encoding
var fileParsed = utilFile.getFileMeta({
pathFile: pathFile,
pathRoot: pathRoot,
filetypes: filetypes,
pathSiteParent: opts.parent
})

// skip text files
if (fileExtname === fileParsed.extension) return false

try {
var pathMeta = pathFile + fileExtname
var text = fs.readFileSync(pathMeta, encoding)
return xtend(parse(text), fileParsed)
} catch (err) {
if (fileParsed.filename) return fileParsed
else return false
}
}
8 changes: 7 additions & 1 deletion lib/readFiles.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,13 @@ async function readFiles (files, pathSite, opts) {
async function read (pathFile) {
var content = await readFile(pathFile, opts)
if (content && !content.name.match(defaults.ignore)) {
output[content.url] = content
var key = content.url

// temp cleanup
content.url = content.extension ? content.path : content.url
delete content.path

output[key] = content
}
return content
}
Expand Down
8 changes: 7 additions & 1 deletion lib/readFilesSync.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,13 @@ function readFilesSync (files, pathSite, opts) {
if (typeof opts.onFile === 'function') opts.onFile(pathFile)
var content = readFileSync(pathFile, opts)
if (content && !content.name.match(defaults.ignore)) {
output[content.url] = content
var key = content.url

// temp cleanup
content.url = content.extension ? content.path : content.url
delete content.path

output[key] = content
}
})

Expand Down
39 changes: 11 additions & 28 deletions lib/readPage.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,8 @@ async function readPage (pathPage, opts) {
var fs = opts.fs.url ? opts.fs : pify(opts.fs) // web api or node
var parse = typeof opts.parse === 'function' ? opts.parse : smarkt.parse
var fileIndex = opts.file || defaults.file
var fileExtname = path.extname(fileIndex)
var filetypes = opts.filetypes || defaults.filetypes
var pathRoot = opts.pathRoot || ''
var filetypes = opts.filetypes || defaults.filetypes
var pathUrl = utilFile.formatUrl(pathPage, pathRoot, opts.parent)
var encoding = opts.encoding || defaults.encoding
var content = await getContent()
Expand All @@ -39,22 +38,20 @@ async function readPage (pathPage, opts) {
pages: pages
})

async function getChildren () {
async function getContent () {
try {
return await fs.readdir(pathPage)
var content = await fs.readFile(slash(path.join(pathPage, fileIndex)), encoding)
return parse(content)
} catch (err) {
return []
return ''
}
}

async function getContent () {
async function getChildren () {
try {
var content
content = await fs.readFile(slash(path.join(pathPage, fileIndex)), encoding)
content = parse(content)
return content
return await fs.readdir(pathPage)
} catch (err) {
return ''
return []
}
}

Expand All @@ -73,22 +70,8 @@ async function readPage (pathPage, opts) {
pathSiteParent: opts.parent
})

try {
var fileMeta = pathFile + fileExtname
var pathMeta = path.join(pathPage, fileMeta)
var text = await fs.readFile(pathMeta, encoding)
// set
result[fileParsed.filename] = xtend(parse(text), fileParsed)
files.splice(files.indexOf(fileMeta), 1)
// cleanup
delete result[fileMeta]
return text
} catch (err) {
if (fileParsed.filename) {
result[fileParsed.filename] = fileParsed
}
return Promise.resolve()
}
if (!utilFile.filterFile(pathFile, fileIndex)) return false
else result[fileParsed.filename] = fileParsed.url
}
}

Expand All @@ -102,7 +85,7 @@ async function readPage (pathPage, opts) {
pathSiteParent: opts.parent
})

if (fileParsed.name) result[fileParsed.name] = fileParsed
if (fileParsed.name) result[fileParsed.name] = fileParsed.url
return result
}, {})
}
Expand Down
25 changes: 5 additions & 20 deletions lib/readPageSync.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ function readPageSync (pathPage, opts) {
var fs = opts.fs
var parse = typeof opts.parse === 'function' ? opts.parse : smarkt.parse
var fileIndex = opts.file || defaults.file
var fileExtname = path.extname(fileIndex)
var filetypes = opts.filetypes || defaults.filetypes
var pathRoot = opts.pathRoot || ''
var pathUrl = utilFile.formatUrl(pathPage, pathRoot, opts.parent)
Expand Down Expand Up @@ -47,10 +46,8 @@ function readPageSync (pathPage, opts) {

function getContent () {
try {
var content
content = fs.readFileSync(slash(path.join(pathPage, fileIndex)), encoding)
content = parse(content)
return content
var content = fs.readFileSync(slash(path.join(pathPage, fileIndex)), encoding)
return parse(content)
} catch (err) {
return ''
}
Expand All @@ -66,20 +63,8 @@ function readPageSync (pathPage, opts) {
pathSiteParent: opts.parent
})

try {
var fileMeta = pathFile + fileExtname
var text = fs.readFileSync(slash(path.join(pathPage, fileMeta)), encoding)
// set
result[fileParsed.filename] = xtend(parse(text), fileParsed)
files.splice(files.indexOf(fileMeta), 1)
// cleanup
delete result[fileMeta]
} catch (err) {
if (fileParsed.filename) {
result[fileParsed.filename] = fileParsed
}
}

if (!utilFile.filterFile(pathFile, fileIndex)) return false
else result[fileParsed.filename] = fileParsed.url
return result
}, { })
}
Expand All @@ -95,7 +80,7 @@ function readPageSync (pathPage, opts) {
pathSiteParent: opts.parent
})

if (fileParsed.name) result[fileParsed.name] = fileParsed
if (fileParsed.name) result[fileParsed.name] = fileParsed.url
return result
}, { })
}
Expand Down
13 changes: 7 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "nanocontent",
"version": "0.4.5",
"version": "1.0.0-next3",
"description": "read a directory of content into an object",
"main": "index.js",
"scripts": {
"test": "standard --fix; ava"
"test": "standard; ava"
},
"keywords": [],
"author": "Jon-Kyle <[email protected]> (http://jon-kyle.com)",
Expand All @@ -20,17 +20,18 @@
"dependencies": {
"glob": "^7.1.2",
"js-yaml": "^3.10.0",
"normalize-path": "^2.1.1",
"normalize-path": "^3.0.0",
"object-keys": "^1.0.11",
"object-values": "^1.0.0",
"object-values": "^2.0.0",
"pify": "^3.0.0",
"promisify-node": "^0.4.0",
"smarkt": "0.0.6",
"static-module": "^1.5.0",
"static-module": "^2.2.5",
"through2": "^2.0.3",
"xtend": "^4.0.1"
},
"devDependencies": {
"ava": "^0.25.0",
"standard": "^10.0.3"
"standard": "^11.0.1"
}
}
3 changes: 2 additions & 1 deletion readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,13 @@ var site = nanocontent.readSiteSync('./content')

Each directory becomes a path containing a sub-object of the content in your text file.

```
```js
{
'/': { },
'/about': { },
'/blog': { },
'/blog/30-01-19-technopastoral': { }
'/blog/30-01-19-technopastoral/header.jpg': { }
}
```

Expand Down
Loading