Socket
Socket
Sign inDemoInstall

delims

Package Overview
Dependencies
Maintainers
2
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

delims - npm Package Compare versions

Comparing version 0.2.0 to 0.3.0

.gitattributes

2

bower.json
{
"name": "delims",
"version": "0.2.0",
"version": "0.3.0",
"main": [

@@ -5,0 +5,0 @@ "index.js"

@@ -11,13 +11,17 @@ /*!

var utils = require('./lib/utils');
var arrayify = require('arrayify-compact');
var extend = require('xtend');
// Generate RegExp patterns dynamically. By default, patterns use
// [\s\S] instead to avoid the need for multiline and dotall flags.
var delims = module.exports = function (delims, options) {
if(!Array.isArray(delims)) {options = delims; delims = ['---', '---'];}
/**
* Generate regular expressions for template delimiters.
*
* @param {Array} `delims`
* @param {Object} `options`
*/
// Defaults
var opts = extend({}, {
var Delimiters = function Delimiters (delims, options) {
this.options = options || {};
this.delims = delims || [];
this.defaults = extend({}, {
beginning: '^', // '^' Matches beginning of input.

@@ -27,8 +31,29 @@ matter: '([\\s\\S]+?)', // The "content" between the delims

end: '$', // '$' Matches end of input.
flags: '' // g, m, i
flags: '' // RegExp flags: g, m, i
}, options);
};
/**
* ## .create
*
* Build custom delimiter regex.
*
* @param {Array} `delims`
* @param {Object} `options`
* @return {Object}
*/
Delimiters.prototype.create = function(delims, options) {
if (!Array.isArray(delims)) {
options = delims;
delims = ['---', '---'];
}
// Defaults
var opts = extend({}, this.defaults, options);
opts.body = delims[2] || opts.body || '';
// Generate regex ections
var open = utils.buildRegexGroup(delims[0], opts);
var open = utils.buildRegexGroup(delims[0], opts);
var close = utils.buildRegexGroup(delims[1], opts);

@@ -38,11 +63,47 @@ var block = opts.matter + close + opts.body + opts.end;

// "evaluate" is probably most suitable for most use cases
return {
return extend(opts, {open: open, close: close, delims: delims}, {
evaluate: new RegExp(opts.beginning + open + block, opts.flags),
interpolate: new RegExp(opts.beginning + open + '=' + block, opts.flags),
escape: new RegExp(opts.beginning + open + '-' + block, opts.flags),
};
});
};
delims.arrayify = arrayify;
delims.escapeDelim = utils.escapeDelim;
delims.buildRegexGroup = utils.buildRegexGroup;
/**
* ## .matter
*
* Convenience method for generating delimiter regex for front matter,
* with the necessary options pre-defined.
*
* @param {Array} `delims`
* @param {Object} `options`
* @return {Object}
*/
Delimiters.prototype.matter = function (delims, opts) {
return this.create(delims, opts);
};
/**
* ## .templates
*
* Convenience method for generating delimiter regex for templates,
* with the necessary options pre-defined.
*
* @param {Array} `delims`
* @param {Object} `options`
* @return {Object}
*/
Delimiters.prototype.templates = function (delims, opts) {
return this.create(delims, extend({
body: '',
beginning: '',
end: '',
flags: 'g',
noncapture: false
}, opts));
};
module.exports = Delimiters;

@@ -13,3 +13,3 @@ /*!

var utils = module.exports = {};
var utils = module.exports;

@@ -21,2 +21,3 @@ // Escape custom template delimiters

// Build RegExp patterns for delimiters

@@ -33,3 +34,5 @@ utils.buildRegexGroup = function (re, options) {

re = (len > 0) ? re.join('|') : re;
re = (opts.escape === true) ? utils.escapeDelim(re) : re;
re = (opts.escape === true)
? utils.escapeDelim(re)
: re;

@@ -36,0 +39,0 @@ if(opts.noncapture === true || len > 1) {

{
"name": "delims",
"description": "Generate RegExp for delimiters, to be used with templates, files or data streams.",
"version": "0.2.0",
"version": "0.3.0",
"homepage": "https://github.com/jonschlinkert/delims",

@@ -36,14 +36,21 @@ "author": {

"keywords": [
"yfm",
"yaml front matter",
"front matter",
"templates",
"boundaries",
"custom",
"customize",
"delimiters",
"delims",
"expressions",
"front",
"matter",
"pattern",
"patterns",
"re",
"regex",
"regexp",
"regular expressions",
"custom delimiters",
"delims",
"delimiters",
"boundaries"
"regular",
"template",
"templates",
"yaml",
"yfm"
]
}
}

@@ -22,10 +22,82 @@ # delims [![NPM version](https://badge.fury.io/js/delims.png)](http://badge.fury.io/js/delims)

```js
var delims = require('delims');
var Delims = require('delims');
var delims = new Delims();
```
delims([delimiters], {options});
# API
## .create
```js
delims.create(array, options);
```
## Parameters
* `array`:
#### delimiter
Build custom delimiter regex with the given `options`.
**Example:**
By default, if no options are defined `delims.create()` generates regex for front-matter:
```js
var matter = delims.create().evaluate;
//=> '/^---([\\s\\S]+?)---([\\s\\S]+|\\s?)$/'
```
**Customize:**
To customize, pass the delimiters you want to use in the form of an array. Here a couple examples:
```js
var matter = delims.create(['~~~', '~~~']).evaluate;
//=> '/^~~~([\\s\\S]+?)~~~([\\s\\S]+|\\s?)$/';
var matter = delims.create(['~{3}', '~{3}']).evaluate;
//=> '/^~{3}([\\s\\S]+?)~{3}([\\s\\S]+|\\s?)$/';
```
Read [more about delimiters](#delimiters).
## .templates
Convenience method for generating delimiter regex for templates with the necessary options pre-defined.
**Example:**
Let's say you want to use curly braces as delimiters for Lo-Dash templates instead of angle brackes, e.g. `{%= name %}`.
```js
var settings = delims.templates(['{{', '}}']);
// use it like this
var tmpl = _.template('{%= name %}', {name: 'Jon'}, settings);
console.log(tmpl);
//=> Jon
```
The full object returned looks something like:
```js
{
beginning: '',
matter: '([\\s\\S]+?)',
body: '',
end: '',
flags: 'g',
noncapture: false,
delims: [ '{%', '%}' ],
open: '{%',
close: '%}',
evaluate: /{%([\s\S]+?)%}/g,
interpolate: /{%=([\s\S]+?)%}/g,
escape: /{%-([\s\S]+?)%}/g
}
```
## delimiters
Type: `Array`

@@ -55,3 +127,3 @@

## Options
## options

@@ -86,3 +158,3 @@ An object of options may be passed as a second parameter. Example:

## RegExp Options
### RegExp Options
#### beginning

@@ -95,3 +167,3 @@ Type: `Boolean`

### end
#### end
Type: `Boolean`

@@ -103,3 +175,3 @@

#### escape
### escape
Type: `Boolean`

@@ -111,3 +183,3 @@

#### noncapture
### noncapture
Type: `Boolean`

@@ -119,3 +191,3 @@

#### flags
### flags
Type: `Boolean`

@@ -122,0 +194,0 @@

@@ -8,117 +8,192 @@ /*!

const util = require('util');
const expect = require('chai').expect;
const delims = require('../');
'use strict';
var util = require('util');
var expect = require('chai').expect;
var Delimiters = require('..');
describe('create delims:', function () {
it('should use the default delimiters for YAML front matter.', function () {
var d = delims();
describe('delimiters:', function () {
describe('.create():', function () {
var delims = new Delimiters();
var actual = util.inspect(d.evaluate);
var expected = '/^---([\\s\\S]+?)---([\\s\\S]+|\\s?)$/';
expect(actual).to.eql(expected);
});
it('should use the default delimiters for YAML front matter.', function () {
var d = delims.create();
var actual = util.inspect(d.evaluate);
var expected = '/^---([\\s\\S]+?)---([\\s\\S]+|\\s?)$/';
expect(actual).to.eql(expected);
});
it('should use and escape the default delimiters for YAML front matter.', function () {
var d = delims({escape: true});
it('should use and escape the default delimiters for YAML front matter.', function () {
var d = delims.create({escape: true});
var actual = util.inspect(d.evaluate);
var expected = '/^\\-\\-\\-([\\s\\S]+?)\\-\\-\\-([\\s\\S]+|\\s?)$/';
expect(actual).to.eql(expected);
});
var actual = util.inspect(d.evaluate);
var expected = '/^\\-\\-\\-([\\s\\S]+?)\\-\\-\\-([\\s\\S]+|\\s?)$/';
expect(actual).to.eql(expected);
});
it('should create escaped delimiters for YAML front matter.', function () {
var d = delims.create(['~~~', '~~~'], {escape: true});
var actual = util.inspect(d.evaluate);
var expected = '/^\\~\\~\\~([\\s\\S]+?)\\~\\~\\~([\\s\\S]+|\\s?)$/';
expect(actual).to.eql(expected);
});
it('should create escaped delimiters for YAML front matter.', function () {
var d = delims(['~~~', '~~~'], {escape: true});
it('should create non-escaped delimiters for YAML front matter.', function () {
var d = delims.create(['~~~', '~~~']);
var actual = util.inspect(d.evaluate);
var expected = '/^~~~([\\s\\S]+?)~~~([\\s\\S]+|\\s?)$/';
expect(actual).to.eql(expected);
});
var actual = util.inspect(d.evaluate);
var expected = '/^\\~\\~\\~([\\s\\S]+?)\\~\\~\\~([\\s\\S]+|\\s?)$/';
expect(actual).to.eql(expected);
});
it('should create non-escaped custom delimiters for YAML front matter.', function () {
var d = delims.create(['-{3}', '-{3}']);
var actual = util.inspect(d.evaluate);
var expected = '/^-{3}([\\s\\S]+?)-{3}([\\s\\S]+|\\s?)$/';
expect(actual).to.eql(expected);
});
it('should create non-escaped delimiters for YAML front matter.', function () {
var d = delims(['~~~', '~~~']);
it('should create non-escaped custom delimiters for YAML front matter.', function () {
var d = delims.create(['-{3}', '~~~']);
var actual = util.inspect(d.evaluate);
var expected = '/^-{3}([\\s\\S]+?)~~~([\\s\\S]+|\\s?)$/';
expect(actual).to.eql(expected);
});
var actual = util.inspect(d.evaluate);
var expected = '/^~~~([\\s\\S]+?)~~~([\\s\\S]+|\\s?)$/';
expect(actual).to.eql(expected);
});
it('should create non-escaped delimiters for YAML front matter with custom "body" regex.', function () {
var d = delims.create(['---', '---', '([\\w\\W]+?)']);
var actual = util.inspect(d.evaluate);
var expected = '/^---([\\s\\S]+?)---([\\w\\W]+?)$/';
expect(actual).to.eql(expected);
});
it('should create non-escaped custom delimiters for YAML front matter.', function () {
var d = delims(['-{3}', '-{3}']);
it('should create multiple non-escaped delimiters for YAML front matter.', function () {
var d = delims.create([['---', '~~~', '= yaml ='], ['---', '~~~', '= yaml =']]);
var actual = util.inspect(d.evaluate);
var expected = '/^(?:---|~~~|= yaml =)([\\s\\S]+?)(?:---|~~~|= yaml =)([\\s\\S]+|\\s?)$/';
expect(actual).to.eql(expected);
});
var actual = util.inspect(d.evaluate);
var expected = '/^-{3}([\\s\\S]+?)-{3}([\\s\\S]+|\\s?)$/';
expect(actual).to.eql(expected);
});
it('should create multiple non-escaped delimiters for YAML front matter with custom "body" regex.', function () {
var d = delims.create([['---', '~~~', '= yaml ='], ['---', '~~~', '= yaml ='], '([\\w\\W]+?)']);
var actual = util.inspect(d.evaluate);
var expected = '/^(?:---|~~~|= yaml =)([\\s\\S]+?)(?:---|~~~|= yaml =)([\\w\\W]+?)$/';
expect(actual).to.eql(expected);
});
it('should create non-escaped custom delimiters for YAML front matter.', function () {
var d = delims(['-{3}', '~~~']);
it('should create escaped delimiters for Lo-Dash templates.', function () {
var opts = {body: '', beginning: '', end: '', flags: 'g', noncapture: false, escape: true};
var actual = delims.create(['{%', '%}'], opts);
expect(actual).to.eql({
beginning: '',
matter: '([\\s\\S]+?)',
body: '',
end: '',
flags: 'g',
noncapture: false,
delims: [ '{%', '%}' ],
open: '\\{\\%',
close: '\\%\\}',
escape: /\{\%-([\s\S]+?)\%\}/g,
evaluate: /\{\%([\s\S]+?)\%\}/g,
interpolate: /\{\%=([\s\S]+?)\%\}/g
});
});
var actual = util.inspect(d.evaluate);
var expected = '/^-{3}([\\s\\S]+?)~~~([\\s\\S]+|\\s?)$/';
expect(actual).to.eql(expected);
});
it('should create escaped delimiters for Lo-Dash templates. empty value in array[2] should not throw an error.', function () {
var opts = {body: '', beginning: '', end: '', flags: 'g', noncapture: false, escape: true};
var actual = delims.create(['<%', '%>', ''], opts);
expect(actual).to.eql({
beginning: '',
matter: '([\\s\\S]+?)',
body: '',
end: '',
flags: 'g',
noncapture: false,
delims: ['<%', '%>', ''],
open: '\\<\\%',
close: '\\%\\>',
escape: /\<\%-([\s\S]+?)\%\>/g,
evaluate: /\<\%([\s\S]+?)\%\>/g,
interpolate: /\<\%=([\s\S]+?)\%\>/g
});
});
it('should create non-escaped delimiters for YAML front matter with custom "body" regex.', function () {
var d = delims(['---', '---', '([\\w\\W]+?)']);
var actual = util.inspect(d.evaluate);
var expected = '/^---([\\s\\S]+?)---([\\w\\W]+?)$/';
expect(actual).to.eql(expected);
it('should create non-escaped delimiters for Lo-Dash templates.', function () {
var opts = {body: '', beginning: '', end: '', flags: 'g', noncapture: false};
var actual = delims.create(['{%', '%}'], opts);
expect(actual).to.eql({
beginning: '',
matter: '([\\s\\S]+?)',
body: '',
end: '',
flags: 'g',
noncapture: false,
delims: [ '{%', '%}' ],
open: '{%',
close: '%}',
evaluate: /{%([\s\S]+?)%}/g,
interpolate: /{%=([\s\S]+?)%}/g,
escape: /{%-([\s\S]+?)%}/g
});
});
});
it('should create multiple non-escaped delimiters for YAML front matter.', function () {
var d = delims([['---', '~~~', '= yaml ='], ['---', '~~~', '= yaml =']]);
var actual = util.inspect(d.evaluate);
var expected = '/^(?:---|~~~|= yaml =)([\\s\\S]+?)(?:---|~~~|= yaml =)([\\s\\S]+|\\s?)$/';
expect(actual).to.eql(expected);
});
describe('.templates():', function () {
var delims = new Delimiters();
it('should create multiple non-escaped delimiters for YAML front matter with custom "body" regex.', function () {
var d = delims([['---', '~~~', '= yaml ='], ['---', '~~~', '= yaml ='], '([\\w\\W]+?)']);
var actual = util.inspect(d.evaluate);
var expected = '/^(?:---|~~~|= yaml =)([\\s\\S]+?)(?:---|~~~|= yaml =)([\\w\\W]+?)$/';
expect(actual).to.eql(expected);
});
it('should create escaped delimiters for Lo-Dash templates.', function () {
var opts = {body: '', beginning: '', end: '', flags: 'g', noncapture: false, escape: true};
var actual = util.inspect(delims(['{%', '%}'], opts));
var expected = util.inspect({
evaluate: new RegExp('\\{\\%([\\s\\S]+?)\\%\\}', 'g'),
interpolate: new RegExp('\\{\\%=([\\s\\S]+?)\\%\\}', 'g'),
escape: new RegExp('\\{\\%-([\\s\\S]+?)\\%\\}', 'g')
it('should create escaped delimiters for Lo-Dash templates.', function () {
var actual = delims.templates(['{%', '%}'], {escape: true});
expect(actual).to.eql({
beginning: '',
matter: '([\\s\\S]+?)',
body: '',
end: '',
flags: 'g',
noncapture: false,
delims: [ '{%', '%}' ],
open: '\\{\\%',
close: '\\%\\}',
escape: /\{\%-([\s\S]+?)\%\}/g,
evaluate: /\{\%([\s\S]+?)\%\}/g,
interpolate: /\{\%=([\s\S]+?)\%\}/g
});
});
expect(actual).to.eql(expected);
});
it('should create escaped delimiters for Lo-Dash templates. empty value in array[2] should not throw an error.', function () {
var opts = {body: '', beginning: '', end: '', flags: 'g', noncapture: false, escape: true};
var actual = util.inspect(delims(['<%', '%>', ''], opts));
var expected = util.inspect({
evaluate: new RegExp('\\<\\%([\\s\\S]+?)\\%\\>', 'g'),
interpolate: new RegExp('\\<\\%=([\\s\\S]+?)\\%\\>', 'g'),
escape: new RegExp('\\<\\%-([\\s\\S]+?)\\%\\>', 'g')
it('should create escaped delimiters for Lo-Dash templates. empty value in array[2] should not throw an error.', function () {
var actual = delims.templates(['<%', '%>', ''], {escape: true});
expect(actual).to.eql({
beginning: '',
matter: '([\\s\\S]+?)',
body: '',
end: '',
flags: 'g',
noncapture: false,
delims: ['<%', '%>', ''],
open: '\\<\\%',
close: '\\%\\>',
escape: /\<\%-([\s\S]+?)\%\>/g,
evaluate: /\<\%([\s\S]+?)\%\>/g,
interpolate: /\<\%=([\s\S]+?)\%\>/g
});
});
expect(actual).to.eql(expected);
});
it('should create non-escaped delimiters for Lo-Dash templates.', function () {
var opts = {body: '', beginning: '', end: '', flags: 'g', noncapture: false};
var actual = util.inspect(delims(['{%', '%}'], opts));
var expected = util.inspect({
evaluate: new RegExp('{%([\\s\\S]+?)%}', 'g'),
interpolate: new RegExp('{%=([\\s\\S]+?)%}', 'g'),
escape: new RegExp('{%-([\\s\\S]+?)%}', 'g')
it('should create non-escaped delimiters for Lo-Dash templates.', function () {
var actual = delims.templates(['{%', '%}']);
expect(actual).to.eql({
beginning: '',
matter: '([\\s\\S]+?)',
body: '',
end: '',
flags: 'g',
noncapture: false,
delims: [ '{%', '%}' ],
open: '{%',
close: '%}',
evaluate: /{%([\s\S]+?)%}/g,
interpolate: /{%=([\s\S]+?)%}/g,
escape: /{%-([\s\S]+?)%}/g
});
});
expect(actual).to.eql(expected);
});
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc