mirror of
https://github.com/clarencechaan/ufc-cal.git
synced 2026-10-19 08:38:30 -07:00
Add node_modules
This commit is contained in:
1 parent
1df571f777
commit
c01615d999
530 files changed
+38186
No files matched your search
+158
@@ -0,0 +1,158 @@
|
||||
/**
|
||||
* Based on Kendo UI Core expression code <https://github.com/telerik/kendo-ui-core#license-information>
|
||||
*/
|
||||
'use strict'
|
||||
|
||||
function Cache(maxSize) {
|
||||
this._maxSize = maxSize
|
||||
this.clear()
|
||||
}
|
||||
Cache.prototype.clear = function () {
|
||||
this._size = 0
|
||||
this._values = Object.create(null)
|
||||
}
|
||||
Cache.prototype.get = function (key) {
|
||||
return this._values[key]
|
||||
}
|
||||
Cache.prototype.set = function (key, value) {
|
||||
this._size >= this._maxSize && this.clear()
|
||||
if (!(key in this._values)) this._size++
|
||||
|
||||
return (this._values[key] = value)
|
||||
}
|
||||
|
||||
var SPLIT_REGEX = /[^.^\]^[]+|(?=\[\]|\.\.)/g,
|
||||
DIGIT_REGEX = /^\d+$/,
|
||||
LEAD_DIGIT_REGEX = /^\d/,
|
||||
SPEC_CHAR_REGEX = /[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g,
|
||||
CLEAN_QUOTES_REGEX = /^\s*(['"]?)(.*?)(\1)\s*$/,
|
||||
MAX_CACHE_SIZE = 512
|
||||
|
||||
var pathCache = new Cache(MAX_CACHE_SIZE),
|
||||
setCache = new Cache(MAX_CACHE_SIZE),
|
||||
getCache = new Cache(MAX_CACHE_SIZE)
|
||||
|
||||
var config
|
||||
|
||||
module.exports = {
|
||||
Cache: Cache,
|
||||
|
||||
split: split,
|
||||
|
||||
normalizePath: normalizePath,
|
||||
|
||||
setter: function (path) {
|
||||
var parts = normalizePath(path)
|
||||
|
||||
return (
|
||||
setCache.get(path) ||
|
||||
setCache.set(path, function setter(obj, value) {
|
||||
var index = 0
|
||||
var len = parts.length
|
||||
var data = obj
|
||||
|
||||
while (index < len - 1) {
|
||||
var part = parts[index]
|
||||
if (
|
||||
part === '__proto__' ||
|
||||
part === 'constructor' ||
|
||||
part === 'prototype'
|
||||
) {
|
||||
return obj
|
||||
}
|
||||
|
||||
data = data[parts[index++]]
|
||||
}
|
||||
data[parts[index]] = value
|
||||
})
|
||||
)
|
||||
},
|
||||
|
||||
getter: function (path, safe) {
|
||||
var parts = normalizePath(path)
|
||||
return (
|
||||
getCache.get(path) ||
|
||||
getCache.set(path, function getter(data) {
|
||||
var index = 0,
|
||||
len = parts.length
|
||||
while (index < len) {
|
||||
if (data != null || !safe) data = data[parts[index++]]
|
||||
else return
|
||||
}
|
||||
return data
|
||||
})
|
||||
)
|
||||
},
|
||||
|
||||
join: function (segments) {
|
||||
return segments.reduce(function (path, part) {
|
||||
return (
|
||||
path +
|
||||
(isQuoted(part) || DIGIT_REGEX.test(part)
|
||||
? '[' + part + ']'
|
||||
: (path ? '.' : '') + part)
|
||||
)
|
||||
}, '')
|
||||
},
|
||||
|
||||
forEach: function (path, cb, thisArg) {
|
||||
forEach(Array.isArray(path) ? path : split(path), cb, thisArg)
|
||||
},
|
||||
}
|
||||
|
||||
function normalizePath(path) {
|
||||
return (
|
||||
pathCache.get(path) ||
|
||||
pathCache.set(
|
||||
path,
|
||||
split(path).map(function (part) {
|
||||
return part.replace(CLEAN_QUOTES_REGEX, '$2')
|
||||
})
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
function split(path) {
|
||||
return path.match(SPLIT_REGEX) || ['']
|
||||
}
|
||||
|
||||
function forEach(parts, iter, thisArg) {
|
||||
var len = parts.length,
|
||||
part,
|
||||
idx,
|
||||
isArray,
|
||||
isBracket
|
||||
|
||||
for (idx = 0; idx < len; idx++) {
|
||||
part = parts[idx]
|
||||
|
||||
if (part) {
|
||||
if (shouldBeQuoted(part)) {
|
||||
part = '"' + part + '"'
|
||||
}
|
||||
|
||||
isBracket = isQuoted(part)
|
||||
isArray = !isBracket && /^\d+$/.test(part)
|
||||
|
||||
iter.call(thisArg, part, isBracket, isArray, idx, parts)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function isQuoted(str) {
|
||||
return (
|
||||
typeof str === 'string' && str && ["'", '"'].indexOf(str.charAt(0)) !== -1
|
||||
)
|
||||
}
|
||||
|
||||
function hasLeadingNumber(part) {
|
||||
return part.match(LEAD_DIGIT_REGEX) && !part.match(DIGIT_REGEX)
|
||||
}
|
||||
|
||||
function hasSpecialChars(part) {
|
||||
return SPEC_CHAR_REGEX.test(part)
|
||||
}
|
||||
|
||||
function shouldBeQuoted(part) {
|
||||
return !isQuoted(part) && (hasLeadingNumber(part) || hasSpecialChars(part))
|
||||
}
|
||||
Reference in new issue
Block a user