Skip to content

Commit d4f796d

Browse files
committed
build: v2.0.0 for browser (fix)
1 parent 424572d commit d4f796d

File tree

3 files changed

+238
-7
lines changed

3 files changed

+238
-7
lines changed

build/jsonMask.js

+236-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,241 @@
22
* json-mask | (c) 2015 Yuriy Nemtsov | https://github.com/nemtsov/json-mask/blob/master/LICENSE
33
* @license
44
*/
5+
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.jsonMask = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
6+
var util = require('./util')
7+
var TERMINALS = { ',': 1, '/': 2, '(': 3, ')': 4 }
8+
var ESCAPE_CHAR = '\\'
9+
var WILDCARD_CHAR = '*'
10+
11+
module.exports = compile
12+
513
/**
6-
* json-mask | (c) 2015 Yuriy Nemtsov | https://github.com/nemtsov/json-mask/blob/master/LICENSE
7-
* @license
14+
* Compiler
15+
*
16+
* Grammar:
17+
* Props ::= Prop | Prop "," Props
18+
* Prop ::= Object | Array
19+
* Object ::= NAME | NAME "/" Prop
20+
* Array ::= NAME "(" Props ")"
21+
* NAME ::= ? all visible characters except "\" ? | EscapeSeq | Wildcard
22+
* Wildcard ::= "*"
23+
* EscapeSeq ::= "\" ? all visible characters ?
24+
*
25+
* Examples:
26+
* a
27+
* a,d,g
28+
* a/b/c
29+
* a(b)
30+
* ob,a(k,z(f,g/d)),d
31+
* a\/b/c
832
*/
33+
34+
function compile (text) {
35+
if (!text) return null
36+
return parse(scan(text))
37+
}
38+
39+
function scan (text) {
40+
var i = 0
41+
var len = text.length
42+
var tokens = []
43+
var name = ''
44+
var ch
45+
46+
function maybePushName () {
47+
if (!name) return
48+
tokens.push({ tag: '_n', value: name })
49+
name = ''
50+
}
51+
52+
for (; i < len; i++) {
53+
ch = text.charAt(i)
54+
if (ch === ESCAPE_CHAR) {
55+
i++
56+
ch = text.charAt(i)
57+
name += ch === WILDCARD_CHAR ? ESCAPE_CHAR + WILDCARD_CHAR : ch
58+
} else if (TERMINALS[ch]) {
59+
maybePushName()
60+
tokens.push({ tag: ch })
61+
} else {
62+
name += ch
63+
}
64+
}
65+
maybePushName()
66+
67+
return tokens
68+
}
69+
70+
function parse (tokens) {
71+
return _buildTree(tokens, {})
72+
}
73+
74+
function _buildTree (tokens, parent) {
75+
var props = {}
76+
var token
77+
78+
while ((token = tokens.shift())) {
79+
if (token.tag === '_n') {
80+
token.type = 'object'
81+
token.properties = _buildTree(tokens, token)
82+
if (parent.hasChild) {
83+
_addToken(token, props)
84+
return props
85+
}
86+
} else if (token.tag === ',') {
87+
return props
88+
} else if (token.tag === '(') {
89+
parent.type = 'array'
90+
continue
91+
} else if (token.tag === ')') {
92+
return props
93+
} else if (token.tag === '/') {
94+
parent.hasChild = true
95+
continue
96+
}
97+
_addToken(token, props)
98+
}
99+
100+
return props
101+
}
102+
103+
function _addToken (token, props) {
104+
var prop = { type: token.type }
105+
106+
if (token.value === WILDCARD_CHAR) prop.isWildcard = true
107+
else if (token.value === ESCAPE_CHAR + WILDCARD_CHAR) token.value = WILDCARD_CHAR
108+
109+
if (!util.isEmpty(token.properties)) {
110+
prop.properties = token.properties
111+
}
112+
113+
props[token.value] = prop
114+
}
115+
116+
},{"./util":4}],2:[function(require,module,exports){
117+
var util = require('./util')
118+
119+
module.exports = filter
120+
121+
function filter (obj, compiledMask) {
122+
return util.isArray(obj)
123+
? _arrayProperties(obj, compiledMask)
124+
: _properties(obj, compiledMask)
125+
}
126+
127+
// wrap array & mask in a temp object;
128+
// extract results from temp at the end
129+
function _arrayProperties (arr, mask) {
130+
var obj = _properties({ _: arr }, {
131+
_: {
132+
type: 'array',
133+
properties: mask
134+
}
135+
})
136+
return obj && obj._
137+
}
138+
139+
function _properties (obj, mask) {
140+
var maskedObj, key, value, ret, retKey, typeFunc
141+
if (!obj || !mask) return obj
142+
143+
if (util.isArray(obj)) maskedObj = []
144+
else if (util.isObject(obj)) maskedObj = {}
145+
146+
for (key in mask) {
147+
if (!util.has(mask, key)) continue
148+
value = mask[key]
149+
ret = undefined
150+
typeFunc = (value.type === 'object') ? _object : _array
151+
if (value.isWildcard) {
152+
ret = _forAll(obj, value.properties, typeFunc)
153+
for (retKey in ret) {
154+
if (!util.has(ret, retKey)) continue
155+
maskedObj[retKey] = ret[retKey]
156+
}
157+
} else {
158+
ret = typeFunc(obj, key, value.properties)
159+
if (typeof ret !== 'undefined') maskedObj[key] = ret
160+
}
161+
}
162+
return maskedObj
163+
}
164+
165+
function _forAll (obj, mask, fn) {
166+
var ret = {}
167+
var key
168+
var value
169+
for (key in obj) {
170+
if (!util.has(obj, key)) continue
171+
value = fn(obj, key, mask)
172+
if (typeof value !== 'undefined') ret[key] = value
173+
}
174+
return ret
175+
}
176+
177+
function _object (obj, key, mask) {
178+
var value = obj[key]
179+
if (util.isArray(value)) return _array(obj, key, mask)
180+
return mask ? _properties(value, mask) : value
181+
}
182+
183+
function _array (object, key, mask) {
184+
var ret = []
185+
var arr = object[key]
186+
var obj
187+
var maskedObj
188+
var i
189+
var l
190+
if (!util.isArray(arr)) return _properties(arr, mask)
191+
if (util.isEmpty(arr)) return arr
192+
for (i = 0, l = arr.length; i < l; i++) {
193+
obj = arr[i]
194+
maskedObj = _properties(obj, mask)
195+
if (typeof maskedObj !== 'undefined') ret.push(maskedObj)
196+
}
197+
return ret.length ? ret : undefined
198+
}
199+
200+
},{"./util":4}],3:[function(require,module,exports){
201+
var compile = require('./compiler')
202+
var filter = require('./filter')
203+
204+
function mask (obj, mask) {
205+
return filter(obj, compile(mask)) || null
206+
}
207+
208+
mask.compile = compile
209+
mask.filter = filter
210+
211+
module.exports = mask
212+
213+
},{"./compiler":1,"./filter":2}],4:[function(require,module,exports){
214+
var ObjProto = Object.prototype
215+
216+
exports.isEmpty = isEmpty
217+
exports.isArray = Array.isArray || isArray
218+
exports.isObject = isObject
219+
exports.has = has
220+
221+
function isEmpty (obj) {
222+
if (obj == null) return true
223+
if (isArray(obj) ||
224+
(typeof obj === 'string')) return (obj.length === 0)
225+
for (var key in obj) if (has(obj, key)) return false
226+
return true
227+
}
228+
229+
function isArray (obj) {
230+
return ObjProto.toString.call(obj) === '[object Array]'
231+
}
232+
233+
function isObject (obj) {
234+
return (typeof obj === 'function') || (typeof obj === 'object' && !!obj)
235+
}
236+
237+
function has (obj, key) {
238+
return ObjProto.hasOwnProperty.call(obj, key)
239+
}
240+
241+
},{}]},{},[3])(3)
242+
});

build/jsonMask.min.js

+1-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"version": "2.0.0",
44
"description": "Tiny language and engine for selecting specific parts of a JS object, hiding the rest.",
55
"main": "lib/index",
6-
"files":[
6+
"files": [
77
"bin",
88
"build",
99
"lib"

0 commit comments

Comments
 (0)