+16
-18
@@ -1,24 +0,22 @@ | ||
| var fs = require('fs'); | ||
| var _ = require('lodash'); | ||
| var yaml = require('js-yaml'); | ||
| module.exports = function (src, options) { | ||
| options = options || {}; | ||
| var delim = options.delim || '---'; | ||
| var re = new RegExp('^'+delim+'\\s([\\s\\S]*?)'+delim+'(\\s[\\s\\S]*|\\s?)$'); | ||
| var content = fs.readFileSync(src, 'utf8'); | ||
| var originalContent = content; | ||
| var pageArr = content.match(re); | ||
| var metadata = {}; | ||
| var str = require('fs').readFileSync(src, 'utf8'), | ||
| delim = options.delim || '---', | ||
| arr = str.replace(/^-{3}/, '').split(delim), | ||
| obj = {}; | ||
| if (pageArr && pageArr.length === 3) { | ||
| metadata = require('js-yaml').load(pageArr[1]); | ||
| content = pageArr[2]; | ||
| if (arr.length === 1) { | ||
| if (/^-{3}/.test(arr)) { | ||
| obj.metadata = yaml.load(arr); | ||
| } else { | ||
| obj.content = arr[0]; | ||
| } | ||
| } else { | ||
| obj.metadata = yaml.load(arr.shift()); | ||
| obj.content = arr.join(delim).replace(/^\s*/, ''); | ||
| } | ||
| return { | ||
| metadata: metadata, | ||
| src: src, | ||
| content: content, | ||
| originalContent: originalContent | ||
| }; | ||
| obj.original = str; | ||
| return obj; | ||
| }; |
+1
-1
| { | ||
| "name": "yfm-test", | ||
| "description": "Temp repo to test YAML front matter functions.", | ||
| "version": "0.1.1", | ||
| "version": "0.1.2", | ||
| "repository": { | ||
@@ -6,0 +6,0 @@ "type": "git", |
| { | ||
| "metadata": {}, | ||
| "src": "fixtures/custom-delim.hbs", | ||
| "content": "~~~\ntitle: Default\ndescription: Home page\n~~~\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <title>{{titleize this.basename}}</title>\n </head>\n <body>\n {{> body }}\n </body>\n</html>", | ||
| "originalContent": "~~~\ntitle: Default\ndescription: Home page\n~~~\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <title>{{titleize this.basename}}</title>\n </head>\n <body>\n {{> body }}\n </body>\n</html>" | ||
| "content": "~~~\ntitle: Custom Delims\ndescription: This page has custom delimiters\n~~~\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <title>{{titleize this.basename}}</title>\n </head>\n <body>\n {{> body }}\n </body>\n</html>", | ||
| "original": "~~~\ntitle: Custom Delims\ndescription: This page has custom delimiters\n~~~\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <title>{{titleize this.basename}}</title>\n </head>\n <body>\n {{> body }}\n </body>\n</html>" | ||
| } |
| { | ||
| "metadata": { | ||
| "title": "Default", | ||
| "description": "Home page" | ||
| "description": "Default custom delimiters and content" | ||
| }, | ||
| "src": "fixtures/default.hbs", | ||
| "content": "\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <title>{{titleize this.basename}}</title>\n </head>\n <body>\n {{> body }}\n </body>\n</html>", | ||
| "originalContent": "---\ntitle: Default\ndescription: Home page\n---\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <title>{{titleize this.basename}}</title>\n </head>\n <body>\n {{> body }}\n </body>\n</html>" | ||
| "content": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <title>{{titleize this.basename}}</title>\n </head>\n <body>\n {{> body }}\n </body>\n</html>", | ||
| "original": "---\ntitle: Default\ndescription: Default custom delimiters and content\n---\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <title>{{titleize this.basename}}</title>\n </head>\n <body>\n {{> body }}\n </body>\n</html>" | ||
| } |
| { | ||
| "metadata": { | ||
| "title": "Default", | ||
| "description": "Home page" | ||
| "title": "Multiple occurrences", | ||
| "description": "This page has multiple occurrences of yaml front matter." | ||
| }, | ||
| "src": "fixtures/multiple-occurences.hbs", | ||
| "content": "\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <title>{{titleize this.basename}}</title>\n </head>\n <body>\n {{> body }}\n </body>\n</html>\n~~~\ntitle: Default\ndescription: Home page\n~~~\n\n---\ntitle: Default\ndescription: Home page\n---", | ||
| "originalContent": "---\ntitle: Default\ndescription: Home page\n---\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <title>{{titleize this.basename}}</title>\n </head>\n <body>\n {{> body }}\n </body>\n</html>\n~~~\ntitle: Default\ndescription: Home page\n~~~\n\n---\ntitle: Default\ndescription: Home page\n---" | ||
| "content": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <title>{{titleize this.basename}}</title>\n </head>\n <body>\n {{> body }}\n </body>\n</html>\n~~~\ntitle: Default\ndescription: Home page\n~~~\n\n---\ntitle: Default\ndescription: Home page\n---\n\n---\ntitle: Default\ndescription: Home page\n---", | ||
| "original": "---\ntitle: Multiple occurrences\ndescription: This page has multiple occurrences of yaml front matter.\n---\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <title>{{titleize this.basename}}</title>\n </head>\n <body>\n {{> body }}\n </body>\n</html>\n~~~\ntitle: Default\ndescription: Home page\n~~~\n\n---\ntitle: Default\ndescription: Home page\n---\n\n---\ntitle: Default\ndescription: Home page\n---" | ||
| } |
| { | ||
| "metadata": {}, | ||
| "src": "fixtures/no-yfm.hbs", | ||
| "content": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <title>{{titleize this.basename}}</title>\n </head>\n <body>\n {{> body }}\n </body>\n</html>", | ||
| "originalContent": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <title>{{titleize this.basename}}</title>\n </head>\n <body>\n {{> body }}\n </body>\n</html>" | ||
| "original": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <title>{{titleize this.basename}}</title>\n </head>\n <body>\n {{> body }}\n </body>\n</html>" | ||
| } |
| { | ||
| "metadata": { | ||
| "title": "Bar", | ||
| "description": "Bar page" | ||
| "title": "YFM Only", | ||
| "description": "There is no content on this page." | ||
| }, | ||
| "src": "fixtures/yfm-only.hbs", | ||
| "content": "", | ||
| "originalContent": "---\ntitle: Bar\ndescription: Bar page\n---" | ||
| "original": "---\ntitle: YFM Only\ndescription: There is no content on this page.\n---" | ||
| } |
| ~~~ | ||
| title: Default | ||
| description: Home page | ||
| title: Custom Delims | ||
| description: This page has custom delimiters | ||
| ~~~ | ||
@@ -5,0 +5,0 @@ <!DOCTYPE html> |
| --- | ||
| title: Default | ||
| description: Home page | ||
| description: Default custom delimiters and content | ||
| --- | ||
@@ -5,0 +5,0 @@ <!DOCTYPE html> |
| --- | ||
| title: Default | ||
| description: Home page | ||
| title: Multiple occurrences | ||
| description: This page has multiple occurrences of yaml front matter. | ||
| --- | ||
@@ -23,2 +23,7 @@ <!DOCTYPE html> | ||
| description: Home page | ||
| --- | ||
| --- | ||
| title: Default | ||
| description: Home page | ||
| --- |
| --- | ||
| title: Bar | ||
| description: Bar page | ||
| title: YFM Only | ||
| description: There is no content on this page. | ||
| --- |
+2
-39
@@ -7,6 +7,2 @@ // node.js | ||
| var expand = require('globule').find; | ||
| var assert = require('assert'); | ||
| var _ = require('lodash'); | ||
| var chalk = require('chalk'); | ||
| var success = chalk.green; | ||
@@ -16,40 +12,7 @@ // Local libs | ||
| // Test paths | ||
| var fixtures = function (str) { | ||
| return path.join('fixtures', str).replace(/\\/, '/'); | ||
| }; | ||
| var actual = path.join.bind(null, 'actual'); | ||
| var expected = path.join.bind(null, 'expected'); | ||
| // Make output more readable | ||
| var test = function (str, delim) { | ||
| return JSON.stringify(yfm(str, delim), null, 2); | ||
| }; | ||
| var readJSON = function (src) { | ||
| return JSON.parse(fs.readFileSync(src, 'utf8')); | ||
| }; | ||
| // expand('fixtures/*.hbs', '!fixtures/*-delim.hbs').map(function(filepath) { | ||
| // console.log(success('\n>> Page:\n'), test(filepath)); | ||
| // }); | ||
| // expand('fixtures/custom-delim.hbs').map(function(filepath) { | ||
| // console.log(success('\n>> Page:\n'), test(filepath, {delim: '~~~'})); | ||
| // }); | ||
| var jsonExpected = expand('expected/*.json').map(readJSON); | ||
| var jsonActual = expand('actual/*.json').map(readJSON); | ||
| expand('fixtures/*.hbs').map(function (src) { | ||
| var name = path.basename(src, path.extname(src)); | ||
| var dest = path.join('actual', name + '.json'); | ||
| fs.writeFileSync(dest, test(src)); | ||
| console.log(test(src)); | ||
| fs.writeFileSync(dest, JSON.stringify(yfm(src), null, 2)); | ||
| console.log(yfm(src)); | ||
| }); | ||
| describe('YAML front matter', function () { | ||
| it('Both matching methods should produce the same results.', function () { | ||
| assert.deepEqual(jsonActual, jsonExpected); | ||
| }); | ||
| }); |
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
5370
-13.33%61
-37.76%