homeassistant/www/community/custom-sidebar/custom-sidebar.js

2242 lines
76 KiB
JavaScript
Raw Permalink Normal View History

console.log("Custom Sidebar is loading");
var Hacky_Hackerson = setInterval(run, 1000 / 60);
var Loaded = false;
var Haobj = null;
var Root = null;
var TitleElement = null;
function Current_Order(config) {
var return_order = null;
if (config) {
if(config.title){
setTitle(config.title);
}
if (config.order) {
return_order = config.order;
}
if (config.exceptions) {
for (var i = 0; i < config.exceptions.length; i++) {
var current_exception = config.exceptions[i];
var current_environment_enabled = true;
var current_exception_keys = Object.keys(current_exception);
for (var x = 0; x < current_exception_keys.length; x++) {
console.log(navigator.userAgent);
switch (current_exception_keys[x]) {
case "user":
if(current_exception.user.includes(',')){
current_exception.user = current_exception.user.replace(/, /g, ',').split(',');
}
if (current_exception.user instanceof Array) {
current_environment_enabled = current_exception.user.map(x => x.toLowerCase()).some(x => x == Haobj.user.name.toLowerCase());
}
else {
if (current_exception.user.toLowerCase() != Haobj.user.name.toLowerCase()) {
current_environment_enabled = false;
}
}
break;
case "device":
if(current_exception.device.includes(',')){
current_exception.device = current_exception.device.replace(/, /g, ',').split(',');
}
if (current_exception.device instanceof Array) {
current_environment_enabled = false;
current_exception.device.forEach(device=>{
if (navigator.userAgent.toLowerCase().includes(device.toLowerCase())) {
current_environment_enabled = true;
}
});
}
else {
if (!navigator.userAgent.toLowerCase().includes(current_exception.device.toLowerCase())) {
current_environment_enabled = false;
}
}
break;
case "not_user":
if(current_exception.not_user.includes(',')){
current_exception.not_user = current_exception.not_user.replace(/, /g, ',').split(',');
}
if (current_exception.not_user instanceof Array) {
current_environment_enabled = !current_exception.not_user.map(x => x.toLowerCase()).some(x => x == Haobj.user.name.toLowerCase());
}
else {
if (current_exception.not_user.toLowerCase() == Haobj.user.name.toLowerCase()) {
current_environment_enabled = false;
}
}
break;
case "not_device":
if(current_exception.not_device.includes(',')){
current_exception.not_device = current_exception.not_device.replace(/, /g, ',').split(',');
}
if (current_exception.not_device instanceof Array) {
current_exception.not_device.forEach(not_device=>{
if (navigator.userAgent.toLowerCase().includes(not_device.toLowerCase())) {
current_environment_enabled = false;
}
});
}
else {
if (navigator.userAgent.toLowerCase().includes(current_exception.not_device.toLowerCase())) {
current_environment_enabled = false;
}
}
break;
}
if (current_environment_enabled == false) {
break;
}
}
if (current_environment_enabled) {
if (current_exception.order) {
if (current_exception.base_order && return_order) {
rearrange(return_order);
}
return_order = current_exception.order;
}
}
}
}
}
return return_order;
}
function rearrange(order) {
if (order) {
for (var i = order.length - 1; i >= 0; i--) {
if (order[i].new_item == true) {
createItem(Root, order[i]);
}
}
for (var i = order.length - 1; i >= 0; i--) {
moveItem(Root, order[i]);
}
}
}
function setTitle(title){
if(TitleElement){
TitleElement.innerHTML = title;
}
}
function run() {
Root = getSidebar();
if (Root && !Loaded) {
Loaded = true;
var req = new XMLHttpRequest();
req.onload = function () {
var order = Current_Order(YAML.parse(this.responseText));
rearrange(order);
clearInterval(Hacky_Hackerson)
console.log("Custom Sidebar is loaded");
};
req.onerror = function () {
clearInterval(Hacky_Hackerson);
}
req.open("GET", "/local/sidebar-order.yaml?rnd=" + rando());
req.send();
}
}
function getSidebar() {
let root = document.querySelector("home-assistant");
Haobj = root.hass;
root = root && root.shadowRoot;
root = root && root.querySelector("home-assistant-main");
root = root && root.shadowRoot;
root = root && root.querySelector("app-drawer-layout app-drawer");
root = root && root.querySelector("ha-sidebar");
root = root && root.shadowRoot;
TitleElement = root && root.querySelector('.title') ? root.querySelector('.title') : null ;
root = root && root.querySelector("paper-listbox");
return root;
}
function createItem(elements, item) {
var cln = getConfigurationElement(elements).cloneNode(true);
if (cln) {
cln.querySelector("paper-icon-item").querySelector("ha-icon").setAttribute("icon", item.icon);
cln.querySelector("paper-icon-item").querySelector("span").innerHTML = item.item;
cln.href = item.href;
cln.setAttribute("data-panel", item.item);
elements.insertBefore(cln, elements.children[0]);
}
}
function getConfigurationElement(elements) {
for (var i = 0; i < elements.children.length; i++) {
if (elements.children[i].tagName == "A") {
var current = elements.children[i].getAttribute("data-panel");
if (current == "config") {
return elements.children[i];
}
}
}
}
function moveItem(elements, config_entry) {
for (var i = 0; i < elements.children.length; i++) {
if (elements.children[i].tagName == "A") {
var current = elements.children[i].children[0].getElementsByTagName("span")[0].innerHTML.replace('<!---->', '').replace('<!---->', '');
var match = false;
if (config_entry.exact) {
match = current == config_entry.item;
} else {
match = current.toLowerCase().includes(config_entry.item.toLowerCase());
}
if (match) {
if (config_entry.href) {
elements.children[i].href = config_entry.href;
}
if (config_entry.name) {
elements.children[i].children[0].getElementsByTagName("span")[0].innerHTML = elements.children[i].children[0].getElementsByTagName("span")[0].innerHTML.replace(current, config_entry.name);
}
if (config_entry.icon) {
var icon_holder = elements.children[i].querySelector("ha-icon");
if (icon_holder) {
icon_holder.setAttribute("icon", config_entry.icon);
} else {
var old_icon = elements.children[i].querySelector("ha-svg-icon");
if (old_icon) {
var icon_item = elements.children[i].querySelector("paper-icon-item");
icon_item.removeChild(old_icon);
icon_holder = document.createElement("ha-icon");
icon_holder.setAttribute("slot", "item-icon");
icon_holder.setAttribute("icon", config_entry.icon);
icon_item.prepend(icon_holder);
}
}
}
if (config_entry.hide == true) {
elements.children[i].style.display = "none";
} else {
elements.children[i].style.display = "block";
if (config_entry.bottom == true) {
elements.insertBefore(elements.children[i], elements.querySelector("div").nextSibling);
} else {
elements.insertBefore(elements.children[i], elements.children[0]);
}
}
}
}
}
}
function rando() {
return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
}
//YAML parser taken from https://github.com/jeremyfa/yaml.js
(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) {
var Dumper, Inline, Utils;
Utils = require('./Utils');
Inline = require('./Inline');
Dumper = (function () {
function Dumper() { }
Dumper.indentation = 4;
Dumper.prototype.dump = function (input, inline, indent, exceptionOnInvalidType, objectEncoder) {
var i, key, len, output, prefix, value, willBeInlined;
if (inline == null) {
inline = 0;
}
if (indent == null) {
indent = 0;
}
if (exceptionOnInvalidType == null) {
exceptionOnInvalidType = false;
}
if (objectEncoder == null) {
objectEncoder = null;
}
output = '';
if (typeof input === 'function') {
return output;
}
prefix = (indent ? Utils.strRepeat(' ', indent) : '');
if (inline <= 0 || typeof input !== 'object' || input instanceof Date || Utils.isEmpty(input)) {
output += prefix + Inline.dump(input, exceptionOnInvalidType, objectEncoder);
} else {
if (input instanceof Array) {
for (i = 0, len = input.length; i < len; i++) {
value = input[i];
willBeInlined = inline - 1 <= 0 || typeof value !== 'object' || Utils.isEmpty(value);
output += prefix + '-' + (willBeInlined ? ' ' : "\n") + this.dump(value, inline - 1, (willBeInlined ? 0 : indent + this.indentation), exceptionOnInvalidType, objectEncoder) + (willBeInlined ? "\n" : '');
}
} else {
for (key in input) {
value = input[key];
willBeInlined = inline - 1 <= 0 || typeof value !== 'object' || Utils.isEmpty(value);
output += prefix + Inline.dump(key, exceptionOnInvalidType, objectEncoder) + ':' + (willBeInlined ? ' ' : "\n") + this.dump(value, inline - 1, (willBeInlined ? 0 : indent + this.indentation), exceptionOnInvalidType, objectEncoder) + (willBeInlined ? "\n" : '');
}
}
}
return output;
};
return Dumper;
})();
module.exports = Dumper;
}, {
"./Inline": 6,
"./Utils": 10
}],
2: [function (require, module, exports) {
var Escaper, Pattern;
Pattern = require('./Pattern');
Escaper = (function () {
var ch;
function Escaper() { }
Escaper.LIST_ESCAPEES = ['\\', '\\\\', '\\"', '"', "\x00", "\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", "\x08", "\x09", "\x0a", "\x0b", "\x0c", "\x0d", "\x0e", "\x0f", "\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17", "\x18", "\x19", "\x1a", "\x1b", "\x1c", "\x1d", "\x1e", "\x1f", (ch = String.fromCharCode)(0x0085), ch(0x00A0), ch(0x2028), ch(0x2029)];
Escaper.LIST_ESCAPED = ['\\\\', '\\"', '\\"', '\\"', "\\0", "\\x01", "\\x02", "\\x03", "\\x04", "\\x05", "\\x06", "\\a", "\\b", "\\t", "\\n", "\\v", "\\f", "\\r", "\\x0e", "\\x0f", "\\x10", "\\x11", "\\x12", "\\x13", "\\x14", "\\x15", "\\x16", "\\x17", "\\x18", "\\x19", "\\x1a", "\\e", "\\x1c", "\\x1d", "\\x1e", "\\x1f", "\\N", "\\_", "\\L", "\\P"];
Escaper.MAPPING_ESCAPEES_TO_ESCAPED = (function () {
var i, j, mapping, ref;
mapping = {};
for (i = j = 0, ref = Escaper.LIST_ESCAPEES.length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
mapping[Escaper.LIST_ESCAPEES[i]] = Escaper.LIST_ESCAPED[i];
}
return mapping;
})();
Escaper.PATTERN_CHARACTERS_TO_ESCAPE = new Pattern('[\\x00-\\x1f]|\xc2\x85|\xc2\xa0|\xe2\x80\xa8|\xe2\x80\xa9');
Escaper.PATTERN_MAPPING_ESCAPEES = new Pattern(Escaper.LIST_ESCAPEES.join('|').split('\\').join('\\\\'));
Escaper.PATTERN_SINGLE_QUOTING = new Pattern('[\\s\'":{}[\\],&*#?]|^[-?|<>=!%@`]');
Escaper.requiresDoubleQuoting = function (value) {
return this.PATTERN_CHARACTERS_TO_ESCAPE.test(value);
};
Escaper.escapeWithDoubleQuotes = function (value) {
var result;
result = this.PATTERN_MAPPING_ESCAPEES.replace(value, (function (_this) {
return function (str) {
return _this.MAPPING_ESCAPEES_TO_ESCAPED[str];
};
})(this));
return '"' + result + '"';
};
Escaper.requiresSingleQuoting = function (value) {
return this.PATTERN_SINGLE_QUOTING.test(value);
};
Escaper.escapeWithSingleQuotes = function (value) {
return "'" + value.replace(/'/g, "''") + "'";
};
return Escaper;
})();
module.exports = Escaper;
}, {
"./Pattern": 8
}],
3: [function (require, module, exports) {
var DumpException,
extend = function (child, parent) {
for (var key in parent) {
if (hasProp.call(parent, key)) child[key] = parent[key];
}
function ctor() {
this.constructor = child;
}
ctor.prototype = parent.prototype;
child.prototype = new ctor();
child.__super__ = parent.prototype;
return child;
},
hasProp = {}.hasOwnProperty;
DumpException = (function (superClass) {
extend(DumpException, superClass);
function DumpException(message, parsedLine, snippet) {
DumpException.__super__.constructor.call(this, message);
this.message = message;
this.parsedLine = parsedLine;
this.snippet = snippet;
}
DumpException.prototype.toString = function () {
if ((this.parsedLine != null) && (this.snippet != null)) {
return '<DumpException> ' + this.message + ' (line ' + this.parsedLine + ': \'' + this.snippet + '\')';
} else {
return '<DumpException> ' + this.message;
}
};
return DumpException;
})(Error);
module.exports = DumpException;
}, {}],
4: [function (require, module, exports) {
var ParseException,
extend = function (child, parent) {
for (var key in parent) {
if (hasProp.call(parent, key)) child[key] = parent[key];
}
function ctor() {
this.constructor = child;
}
ctor.prototype = parent.prototype;
child.prototype = new ctor();
child.__super__ = parent.prototype;
return child;
},
hasProp = {}.hasOwnProperty;
ParseException = (function (superClass) {
extend(ParseException, superClass);
function ParseException(message, parsedLine, snippet) {
ParseException.__super__.constructor.call(this, message);
this.message = message;
this.parsedLine = parsedLine;
this.snippet = snippet;
}
ParseException.prototype.toString = function () {
if ((this.parsedLine != null) && (this.snippet != null)) {
return '<ParseException> ' + this.message + ' (line ' + this.parsedLine + ': \'' + this.snippet + '\')';
} else {
return '<ParseException> ' + this.message;
}
};
return ParseException;
})(Error);
module.exports = ParseException;
}, {}],
5: [function (require, module, exports) {
var ParseMore,
extend = function (child, parent) {
for (var key in parent) {
if (hasProp.call(parent, key)) child[key] = parent[key];
}
function ctor() {
this.constructor = child;
}
ctor.prototype = parent.prototype;
child.prototype = new ctor();
child.__super__ = parent.prototype;
return child;
},
hasProp = {}.hasOwnProperty;
ParseMore = (function (superClass) {
extend(ParseMore, superClass);
function ParseMore(message, parsedLine, snippet) {
ParseMore.__super__.constructor.call(this, message);
this.message = message;
this.parsedLine = parsedLine;
this.snippet = snippet;
}
ParseMore.prototype.toString = function () {
if ((this.parsedLine != null) && (this.snippet != null)) {
return '<ParseMore> ' + this.message + ' (line ' + this.parsedLine + ': \'' + this.snippet + '\')';
} else {
return '<ParseMore> ' + this.message;
}
};
return ParseMore;
})(Error);
module.exports = ParseMore;
}, {}],
6: [function (require, module, exports) {
var DumpException, Escaper, Inline, ParseException, ParseMore, Pattern, Unescaper, Utils,
indexOf = [].indexOf || function (item) {
for (var i = 0, l = this.length; i < l; i++) {
if (i in this && this[i] === item) return i;
}
return -1;
};
Pattern = require('./Pattern');
Unescaper = require('./Unescaper');
Escaper = require('./Escaper');
Utils = require('./Utils');
ParseException = require('./Exception/ParseException');
ParseMore = require('./Exception/ParseMore');
DumpException = require('./Exception/DumpException');
Inline = (function () {
function Inline() { }
Inline.REGEX_QUOTED_STRING = '(?:"(?:[^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'(?:[^\']*(?:\'\'[^\']*)*)\')';
Inline.PATTERN_TRAILING_COMMENTS = new Pattern('^\\s*#.*$');
Inline.PATTERN_QUOTED_SCALAR = new Pattern('^' + Inline.REGEX_QUOTED_STRING);
Inline.PATTERN_THOUSAND_NUMERIC_SCALAR = new Pattern('^(-|\\+)?[0-9,]+(\\.[0-9]+)?$');
Inline.PATTERN_SCALAR_BY_DELIMITERS = {};
Inline.settings = {};
Inline.configure = function (exceptionOnInvalidType, objectDecoder) {
if (exceptionOnInvalidType == null) {
exceptionOnInvalidType = null;
}
if (objectDecoder == null) {
objectDecoder = null;
}
this.settings.exceptionOnInvalidType = exceptionOnInvalidType;
this.settings.objectDecoder = objectDecoder;
};
Inline.parse = function (value, exceptionOnInvalidType, objectDecoder) {
var context, result;
if (exceptionOnInvalidType == null) {
exceptionOnInvalidType = false;
}
if (objectDecoder == null) {
objectDecoder = null;
}
this.settings.exceptionOnInvalidType = exceptionOnInvalidType;
this.settings.objectDecoder = objectDecoder;
if (value == null) {
return '';
}
value = Utils.trim(value);
if (0 === value.length) {
return '';
}
context = {
exceptionOnInvalidType: exceptionOnInvalidType,
objectDecoder: objectDecoder,
i: 0
};
switch (value.charAt(0)) {
case '[':
result = this.parseSequence(value, context);
++context.i;
break;
case '{':
result = this.parseMapping(value, context);
++context.i;
break;
default:
result = this.parseScalar(value, null, ['"', "'"], context);
}
if (this.PATTERN_TRAILING_COMMENTS.replace(value.slice(context.i), '') !== '') {
throw new ParseException('Unexpected characters near "' + value.slice(context.i) + '".');
}
return result;
};
Inline.dump = function (value, exceptionOnInvalidType, objectEncoder) {
var ref, result, type;
if (exceptionOnInvalidType == null) {
exceptionOnInvalidType = false;
}
if (objectEncoder == null) {
objectEncoder = null;
}
if (value == null) {
return 'null';
}
type = typeof value;
if (type === 'object') {
if (value instanceof Date) {
return value.toISOString();
} else if (objectEncoder != null) {
result = objectEncoder(value);
if (typeof result === 'string' || (result != null)) {
return result;
}
}
return this.dumpObject(value);
}
if (type === 'boolean') {
return (value ? 'true' : 'false');
}
if (Utils.isDigits(value)) {
return (type === 'string' ? "'" + value + "'" : String(parseInt(value)));
}
if (Utils.isNumeric(value)) {
return (type === 'string' ? "'" + value + "'" : String(parseFloat(value)));
}
if (type === 'number') {
return (value === Infinity ? '.Inf' : (value === -Infinity ? '-.Inf' : (isNaN(value) ? '.NaN' : value)));
}
if (Escaper.requiresDoubleQuoting(value)) {
return Escaper.escapeWithDoubleQuotes(value);
}
if (Escaper.requiresSingleQuoting(value)) {
return Escaper.escapeWithSingleQuotes(value);
}
if ('' === value) {
return '""';
}
if (Utils.PATTERN_DATE.test(value)) {
return "'" + value + "'";
}
if ((ref = value.toLowerCase()) === 'null' || ref === '~' || ref === 'true' || ref === 'false') {
return "'" + value + "'";
}
return value;
};
Inline.dumpObject = function (value, exceptionOnInvalidType, objectSupport) {
var j, key, len1, output, val;
if (objectSupport == null) {
objectSupport = null;
}
if (value instanceof Array) {
output = [];
for (j = 0, len1 = value.length; j < len1; j++) {
val = value[j];
output.push(this.dump(val));
}
return '[' + output.join(', ') + ']';
} else {
output = [];
for (key in value) {
val = value[key];
output.push(this.dump(key) + ': ' + this.dump(val));
}
return '{' + output.join(', ') + '}';
}
};
Inline.parseScalar = function (scalar, delimiters, stringDelimiters, context, evaluate) {
var i, joinedDelimiters, match, output, pattern, ref, ref1, strpos, tmp;
if (delimiters == null) {
delimiters = null;
}
if (stringDelimiters == null) {
stringDelimiters = ['"', "'"];
}
if (context == null) {
context = null;
}
if (evaluate == null) {
evaluate = true;
}
if (context == null) {
context = {
exceptionOnInvalidType: this.settings.exceptionOnInvalidType,
objectDecoder: this.settings.objectDecoder,
i: 0
};
}
i = context.i;
if (ref = scalar.charAt(i), indexOf.call(stringDelimiters, ref) >= 0) {
output = this.parseQuotedScalar(scalar, context);
i = context.i;
if (delimiters != null) {
tmp = Utils.ltrim(scalar.slice(i), ' ');
if (!(ref1 = tmp.charAt(0), indexOf.call(delimiters, ref1) >= 0)) {
throw new ParseException('Unexpected characters (' + scalar.slice(i) + ').');
}
}
} else {
if (!delimiters) {
output = scalar.slice(i);
i += output.length;
strpos = output.indexOf(' #');
if (strpos !== -1) {
output = Utils.rtrim(output.slice(0, strpos));
}
} else {
joinedDelimiters = delimiters.join('|');
pattern = this.PATTERN_SCALAR_BY_DELIMITERS[joinedDelimiters];
if (pattern == null) {
pattern = new Pattern('^(.+?)(' + joinedDelimiters + ')');
this.PATTERN_SCALAR_BY_DELIMITERS[joinedDelimiters] = pattern;
}
if (match = pattern.exec(scalar.slice(i))) {
output = match[1];
i += output.length;
} else {
throw new ParseException('Malformed inline YAML string (' + scalar + ').');
}
}
if (evaluate) {
output = this.evaluateScalar(output, context);
}
}
context.i = i;
return output;
};
Inline.parseQuotedScalar = function (scalar, context) {
var i, match, output;
i = context.i;
if (!(match = this.PATTERN_QUOTED_SCALAR.exec(scalar.slice(i)))) {
throw new ParseMore('Malformed inline YAML string (' + scalar.slice(i) + ').');
}
output = match[0].substr(1, match[0].length - 2);
if ('"' === scalar.charAt(i)) {
output = Unescaper.unescapeDoubleQuotedString(output);
} else {
output = Unescaper.unescapeSingleQuotedString(output);
}
i += match[0].length;
context.i = i;
return output;
};
Inline.parseSequence = function (sequence, context) {
var e, error, i, isQuoted, len, output, ref, value;
output = [];
len = sequence.length;
i = context.i;
i += 1;
while (i < len) {
context.i = i;
switch (sequence.charAt(i)) {
case '[':
output.push(this.parseSequence(sequence, context));
i = context.i;
break;
case '{':
output.push(this.parseMapping(sequence, context));
i = context.i;
break;
case ']':
return output;
case ',':
case ' ':
case "\n":
break;
default:
isQuoted = ((ref = sequence.charAt(i)) === '"' || ref === "'");
value = this.parseScalar(sequence, [',', ']'], ['"', "'"], context);
i = context.i;
if (!isQuoted && typeof value === 'string' && (value.indexOf(': ') !== -1 || value.indexOf(":\n") !== -1)) {
try {
value = this.parseMapping('{' + value + '}');
} catch (error) {
e = error;
}
}
output.push(value);
--i;
}
++i;
}
throw new ParseMore('Malformed inline YAML string ' + sequence);
};
Inline.parseMapping = function (mapping, context) {
var done, i, key, len, output, shouldContinueWhileLoop, value;
output = {};
len = mapping.length;
i = context.i;
i += 1;
shouldContinueWhileLoop = false;
while (i < len) {
context.i = i;
switch (mapping.charAt(i)) {
case ' ':
case ',':
case "\n":
++i;
context.i = i;
shouldContinueWhileLoop = true;
break;
case '}':
return output;
}
if (shouldContinueWhileLoop) {
shouldContinueWhileLoop = false;
continue;
}
key = this.parseScalar(mapping, [':', ' ', "\n"], ['"', "'"], context, false);
i = context.i;
done = false;
while (i < len) {
context.i = i;
switch (mapping.charAt(i)) {
case '[':
value = this.parseSequence(mapping, context);
i = context.i;
if (output[key] === void 0) {
output[key] = value;
}
done = true;
break;
case '{':
value = this.parseMapping(mapping, context);
i = context.i;
if (output[key] === void 0) {
output[key] = value;
}
done = true;
break;
case ':':
case ' ':
case "\n":
break;
default:
value = this.parseScalar(mapping, [',', '}'], ['"', "'"], context);
i = context.i;
if (output[key] === void 0) {
output[key] = value;
}
done = true;
--i;
}
++i;
if (done) {
break;
}
}
}
throw new ParseMore('Malformed inline YAML string ' + mapping);
};
Inline.evaluateScalar = function (scalar, context) {
var cast, date, exceptionOnInvalidType, firstChar, firstSpace, firstWord, objectDecoder, raw, scalarLower, subValue, trimmedScalar;
scalar = Utils.trim(scalar);
scalarLower = scalar.toLowerCase();
switch (scalarLower) {
case 'null':
case '':
case '~':
return null;
case 'true':
return true;
case 'false':
return false;
case '.inf':
return Infinity;
case '.nan':
return NaN;
case '-.inf':
return Infinity;
default:
firstChar = scalarLower.charAt(0);
switch (firstChar) {
case '!':
firstSpace = scalar.indexOf(' ');
if (firstSpace === -1) {
firstWord = scalarLower;
} else {
firstWord = scalarLower.slice(0, firstSpace);
}
switch (firstWord) {
case '!':
if (firstSpace !== -1) {
return parseInt(this.parseScalar(scalar.slice(2)));
}
return null;
case '!str':
return Utils.ltrim(scalar.slice(4));
case '!!str':
return Utils.ltrim(scalar.slice(5));
case '!!int':
return parseInt(this.parseScalar(scalar.slice(5)));
case '!!bool':
return Utils.parseBoolean(this.parseScalar(scalar.slice(6)), false);
case '!!float':
return parseFloat(this.parseScalar(scalar.slice(7)));
case '!!timestamp':
return Utils.stringToDate(Utils.ltrim(scalar.slice(11)));
default:
if (context == null) {
context = {
exceptionOnInvalidType: this.settings.exceptionOnInvalidType,
objectDecoder: this.settings.objectDecoder,
i: 0
};
}
objectDecoder = context.objectDecoder, exceptionOnInvalidType = context.exceptionOnInvalidType;
if (objectDecoder) {
trimmedScalar = Utils.rtrim(scalar);
firstSpace = trimmedScalar.indexOf(' ');
if (firstSpace === -1) {
return objectDecoder(trimmedScalar, null);
} else {
subValue = Utils.ltrim(trimmedScalar.slice(firstSpace + 1));
if (!(subValue.length > 0)) {
subValue = null;
}
return objectDecoder(trimmedScalar.slice(0, firstSpace), subValue);
}
}
if (exceptionOnInvalidType) {
throw new ParseException('Custom object support when parsing a YAML file has been disabled.');
}
return null;
}
break;
case '0':
if ('0x' === scalar.slice(0, 2)) {
return Utils.hexDec(scalar);
} else if (Utils.isDigits(scalar)) {
return Utils.octDec(scalar);
} else if (Utils.isNumeric(scalar)) {
return parseFloat(scalar);
} else {
return scalar;
}
break;
case '+':
if (Utils.isDigits(scalar)) {
raw = scalar;
cast = parseInt(raw);
if (raw === String(cast)) {
return cast;
} else {
return raw;
}
} else if (Utils.isNumeric(scalar)) {
return parseFloat(scalar);
} else if (this.PATTERN_THOUSAND_NUMERIC_SCALAR.test(scalar)) {
return parseFloat(scalar.replace(',', ''));
}
return scalar;
case '-':
if (Utils.isDigits(scalar.slice(1))) {
if ('0' === scalar.charAt(1)) {
return -Utils.octDec(scalar.slice(1));
} else {
raw = scalar.slice(1);
cast = parseInt(raw);
if (raw === String(cast)) {
return -cast;
} else {
return -raw;
}
}
} else if (Utils.isNumeric(scalar)) {
return parseFloat(scalar);
} else if (this.PATTERN_THOUSAND_NUMERIC_SCALAR.test(scalar)) {
return parseFloat(scalar.replace(',', ''));
}
return scalar;
default:
if (date = Utils.stringToDate(scalar)) {
return date;
} else if (Utils.isNumeric(scalar)) {
return parseFloat(scalar);
} else if (this.PATTERN_THOUSAND_NUMERIC_SCALAR.test(scalar)) {
return parseFloat(scalar.replace(',', ''));
}
return scalar;
}
}
};
return Inline;
})();
module.exports = Inline;
}, {
"./Escaper": 2,
"./Exception/DumpException": 3,
"./Exception/ParseException": 4,
"./Exception/ParseMore": 5,
"./Pattern": 8,
"./Unescaper": 9,
"./Utils": 10
}],
7: [function (require, module, exports) {
var Inline, ParseException, ParseMore, Parser, Pattern, Utils;
Inline = require('./Inline');
Pattern = require('./Pattern');
Utils = require('./Utils');
ParseException = require('./Exception/ParseException');
ParseMore = require('./Exception/ParseMore');
Parser = (function () {
Parser.prototype.PATTERN_FOLDED_SCALAR_ALL = new Pattern('^(?:(?<type>![^\\|>]*)\\s+)?(?<separator>\\||>)(?<modifiers>\\+|\\-|\\d+|\\+\\d+|\\-\\d+|\\d+\\+|\\d+\\-)?(?<comments> +#.*)?$');
Parser.prototype.PATTERN_FOLDED_SCALAR_END = new Pattern('(?<separator>\\||>)(?<modifiers>\\+|\\-|\\d+|\\+\\d+|\\-\\d+|\\d+\\+|\\d+\\-)?(?<comments> +#.*)?$');
Parser.prototype.PATTERN_SEQUENCE_ITEM = new Pattern('^\\-((?<leadspaces>\\s+)(?<value>.+?))?\\s*$');
Parser.prototype.PATTERN_ANCHOR_VALUE = new Pattern('^&(?<ref>[^ ]+) *(?<value>.*)');
Parser.prototype.PATTERN_COMPACT_NOTATION = new Pattern('^(?<key>' + Inline.REGEX_QUOTED_STRING + '|[^ \'"\\{\\[].*?) *\\:(\\s+(?<value>.+?))?\\s*$');
Parser.prototype.PATTERN_MAPPING_ITEM = new Pattern('^(?<key>' + Inline.REGEX_QUOTED_STRING + '|[^ \'"\\[\\{].*?) *\\:(\\s+(?<value>.+?))?\\s*$');
Parser.prototype.PATTERN_DECIMAL = new Pattern('\\d+');
Parser.prototype.PATTERN_INDENT_SPACES = new Pattern('^ +');
Parser.prototype.PATTERN_TRAILING_LINES = new Pattern('(\n*)$');
Parser.prototype.PATTERN_YAML_HEADER = new Pattern('^\\%YAML[: ][\\d\\.]+.*\n', 'm');
Parser.prototype.PATTERN_LEADING_COMMENTS = new Pattern('^(\\#.*?\n)+', 'm');
Parser.prototype.PATTERN_DOCUMENT_MARKER_START = new Pattern('^\\-\\-\\-.*?\n', 'm');
Parser.prototype.PATTERN_DOCUMENT_MARKER_END = new Pattern('^\\.\\.\\.\\s*$', 'm');
Parser.prototype.PATTERN_FOLDED_SCALAR_BY_INDENTATION = {};
Parser.prototype.CONTEXT_NONE = 0;
Parser.prototype.CONTEXT_SEQUENCE = 1;
Parser.prototype.CONTEXT_MAPPING = 2;
function Parser(offset) {
this.offset = offset != null ? offset : 0;
this.lines = [];
this.currentLineNb = -1;
this.currentLine = '';
this.refs = {};
}
Parser.prototype.parse = function (value, exceptionOnInvalidType, objectDecoder) {
var alias, allowOverwrite, block, c, context, data, e, error, error1, error2, first, i, indent, isRef, j, k, key, l, lastKey, len, len1, len2, len3, lineCount, m, matches, mergeNode, n, name, parsed, parsedItem, parser, ref, ref1, ref2, refName, refValue, val, values;
if (exceptionOnInvalidType == null) {
exceptionOnInvalidType = false;
}
if (objectDecoder == null) {
objectDecoder = null;
}
this.currentLineNb = -1;
this.currentLine = '';
this.lines = this.cleanup(value).split("\n");
data = null;
context = this.CONTEXT_NONE;
allowOverwrite = false;
while (this.moveToNextLine()) {
if (this.isCurrentLineEmpty()) {
continue;
}
if ("\t" === this.currentLine[0]) {
throw new ParseException('A YAML file cannot contain tabs as indentation.', this.getRealCurrentLineNb() + 1, this.currentLine);
}
isRef = mergeNode = false;
if (values = this.PATTERN_SEQUENCE_ITEM.exec(this.currentLine)) {
if (this.CONTEXT_MAPPING === context) {
throw new ParseException('You cannot define a sequence item when in a mapping');
}
context = this.CONTEXT_SEQUENCE;
if (data == null) {
data = [];
}
if ((values.value != null) && (matches = this.PATTERN_ANCHOR_VALUE.exec(values.value))) {
isRef = matches.ref;
values.value = matches.value;
}
if (!(values.value != null) || '' === Utils.trim(values.value, ' ') || Utils.ltrim(values.value, ' ').indexOf('#') === 0) {
if (this.currentLineNb < this.lines.length - 1 && !this.isNextLineUnIndentedCollection()) {
c = this.getRealCurrentLineNb() + 1;
parser = new Parser(c);
parser.refs = this.refs;
data.push(parser.parse(this.getNextEmbedBlock(null, true), exceptionOnInvalidType, objectDecoder));
} else {
data.push(null);
}
} else {
if (((ref = values.leadspaces) != null ? ref.length : void 0) && (matches = this.PATTERN_COMPACT_NOTATION.exec(values.value))) {
c = this.getRealCurrentLineNb();
parser = new Parser(c);
parser.refs = this.refs;
block = values.value;
indent = this.getCurrentLineIndentation();
if (this.isNextLineIndented(false)) {
block += "\n" + this.getNextEmbedBlock(indent + values.leadspaces.length + 1, true);
}
data.push(parser.parse(block, exceptionOnInvalidType, objectDecoder));
} else {
data.push(this.parseValue(values.value, exceptionOnInvalidType, objectDecoder));
}
}
} else if ((values = this.PATTERN_MAPPING_ITEM.exec(this.currentLine)) && values.key.indexOf(' #') === -1) {
if (this.CONTEXT_SEQUENCE === context) {
throw new ParseException('You cannot define a mapping item when in a sequence');
}
context = this.CONTEXT_MAPPING;
if (data == null) {
data = {};
}
Inline.configure(exceptionOnInvalidType, objectDecoder);
try {
key = Inline.parseScalar(values.key);
} catch (error) {
e = error;
e.parsedLine = this.getRealCurrentLineNb() + 1;
e.snippet = this.currentLine;
throw e;
}
if ('<<' === key) {
mergeNode = true;
allowOverwrite = true;
if (((ref1 = values.value) != null ? ref1.indexOf('*') : void 0) === 0) {
refName = values.value.slice(1);
if (this.refs[refName] == null) {
throw new ParseException('Reference "' + refName + '" does not exist.', this.getRealCurrentLineNb() + 1, this.currentLine);
}
refValue = this.refs[refName];
if (typeof refValue !== 'object') {
throw new ParseException('YAML merge keys used with a scalar value instead of an object.', this.getRealCurrentLineNb() + 1, this.currentLine);
}
if (refValue instanceof Array) {
for (i = j = 0, len = refValue.length; j < len; i = ++j) {
value = refValue[i];
if (data[name = String(i)] == null) {
data[name] = value;
}
}
} else {
for (key in refValue) {
value = refValue[key];
if (data[key] == null) {
data[key] = value;
}
}
}
} else {
if ((values.value != null) && values.value !== '') {
value = values.value;
} else {
value = this.getNextEmbedBlock();
}
c = this.getRealCurrentLineNb() + 1;
parser = new Parser(c);
parser.refs = this.refs;
parsed = parser.parse(value, exceptionOnInvalidType);
if (typeof parsed !== 'object') {
throw new ParseException('YAML merge keys used with a scalar value instead of an object.', this.getRealCurrentLineNb() + 1, this.currentLine);
}
if (parsed instanceof Array) {
for (l = 0, len1 = parsed.length; l < len1; l++) {
parsedItem = parsed[l];
if (typeof parsedItem !== 'object') {
throw new ParseException('Merge items must be objects.', this.getRealCurrentLineNb() + 1, parsedItem);
}
if (parsedItem instanceof Array) {
for (i = m = 0, len2 = parsedItem.length; m < len2; i = ++m) {
value = parsedItem[i];
k = String(i);
if (!data.hasOwnProperty(k)) {
data[k] = value;
}
}
} else {
for (key in parsedItem) {
value = parsedItem[key];
if (!data.hasOwnProperty(key)) {
data[key] = value;
}
}
}
}
} else {
for (key in parsed) {
value = parsed[key];
if (!data.hasOwnProperty(key)) {
data[key] = value;
}
}
}
}
} else if ((values.value != null) && (matches = this.PATTERN_ANCHOR_VALUE.exec(values.value))) {
isRef = matches.ref;
values.value = matches.value;
}
if (mergeNode) {
} else if (!(values.value != null) || '' === Utils.trim(values.value, ' ') || Utils.ltrim(values.value, ' ').indexOf('#') === 0) {
if (!(this.isNextLineIndented()) && !(this.isNextLineUnIndentedCollection())) {
if (allowOverwrite || data[key] === void 0) {
data[key] = null;
}
} else {
c = this.getRealCurrentLineNb() + 1;
parser = new Parser(c);
parser.refs = this.refs;
val = parser.parse(this.getNextEmbedBlock(), exceptionOnInvalidType, objectDecoder);
if (allowOverwrite || data[key] === void 0) {
data[key] = val;
}
}
} else {
val = this.parseValue(values.value, exceptionOnInvalidType, objectDecoder);
if (allowOverwrite || data[key] === void 0) {
data[key] = val;
}
}
} else {
lineCount = this.lines.length;
if (1 === lineCount || (2 === lineCount && Utils.isEmpty(this.lines[1]))) {
try {
value = Inline.parse(this.lines[0], exceptionOnInvalidType, objectDecoder);
} catch (error1) {
e = error1;
e.parsedLine = this.getRealCurrentLineNb() + 1;
e.snippet = this.currentLine;
throw e;
}
if (typeof value === 'object') {
if (value instanceof Array) {
first = value[0];
} else {
for (key in value) {
first = value[key];
break;
}
}
if (typeof first === 'string' && first.indexOf('*') === 0) {
data = [];
for (n = 0, len3 = value.length; n < len3; n++) {
alias = value[n];
data.push(this.refs[alias.slice(1)]);
}
value = data;
}
}
return value;
} else if ((ref2 = Utils.ltrim(value).charAt(0)) === '[' || ref2 === '{') {
try {
return Inline.parse(value, exceptionOnInvalidType, objectDecoder);
} catch (error2) {
e = error2;
e.parsedLine = this.getRealCurrentLineNb() + 1;
e.snippet = this.currentLine;
throw e;
}
}
throw new ParseException('Unable to parse.', this.getRealCurrentLineNb() + 1, this.currentLine);
}
if (isRef) {
if (data instanceof Array) {
this.refs[isRef] = data[data.length - 1];
} else {
lastKey = null;
for (key in data) {
lastKey = key;
}
this.refs[isRef] = data[lastKey];
}
}
}
if (Utils.isEmpty(data)) {
return null;
} else {
return data;
}
};
Parser.prototype.getRealCurrentLineNb = function () {
return this.currentLineNb + this.offset;
};
Parser.prototype.getCurrentLineIndentation = function () {
return this.currentLine.length - Utils.ltrim(this.currentLine, ' ').length;
};
Parser.prototype.getNextEmbedBlock = function (indentation, includeUnindentedCollection) {
var data, indent, isItUnindentedCollection, newIndent, removeComments, removeCommentsPattern, unindentedEmbedBlock;
if (indentation == null) {
indentation = null;
}
if (includeUnindentedCollection == null) {
includeUnindentedCollection = false;
}
this.moveToNextLine();
if (indentation == null) {
newIndent = this.getCurrentLineIndentation();
unindentedEmbedBlock = this.isStringUnIndentedCollectionItem(this.currentLine);
if (!(this.isCurrentLineEmpty()) && 0 === newIndent && !unindentedEmbedBlock) {
throw new ParseException('Indentation problem.', this.getRealCurrentLineNb() + 1, this.currentLine);
}
} else {
newIndent = indentation;
}
data = [this.currentLine.slice(newIndent)];
if (!includeUnindentedCollection) {
isItUnindentedCollection = this.isStringUnIndentedCollectionItem(this.currentLine);
}
removeCommentsPattern = this.PATTERN_FOLDED_SCALAR_END;
removeComments = !removeCommentsPattern.test(this.currentLine);
while (this.moveToNextLine()) {
indent = this.getCurrentLineIndentation();
if (indent === newIndent) {
removeComments = !removeCommentsPattern.test(this.currentLine);
}
if (removeComments && this.isCurrentLineComment()) {
continue;
}
if (this.isCurrentLineBlank()) {
data.push(this.currentLine.slice(newIndent));
continue;
}
if (isItUnindentedCollection && !this.isStringUnIndentedCollectionItem(this.currentLine) && indent === newIndent) {
this.moveToPreviousLine();
break;
}
if (indent >= newIndent) {
data.push(this.currentLine.slice(newIndent));
} else if (Utils.ltrim(this.currentLine).charAt(0) === '#') {
} else if (0 === indent) {
this.moveToPreviousLine();
break;
} else {
throw new ParseException('Indentation problem.', this.getRealCurrentLineNb() + 1, this.currentLine);
}
}
return data.join("\n");
};
Parser.prototype.moveToNextLine = function () {
if (this.currentLineNb >= this.lines.length - 1) {
return false;
}
this.currentLine = this.lines[++this.currentLineNb];
return true;
};
Parser.prototype.moveToPreviousLine = function () {
this.currentLine = this.lines[--this.currentLineNb];
};
Parser.prototype.parseValue = function (value, exceptionOnInvalidType, objectDecoder) {
var e, error, foldedIndent, matches, modifiers, pos, ref, ref1, val;
if (0 === value.indexOf('*')) {
pos = value.indexOf('#');
if (pos !== -1) {
value = value.substr(1, pos - 2);
} else {
value = value.slice(1);
}
if (this.refs[value] === void 0) {
throw new ParseException('Reference "' + value + '" does not exist.', this.currentLine);
}
return this.refs[value];
}
if (matches = this.PATTERN_FOLDED_SCALAR_ALL.exec(value)) {
modifiers = (ref = matches.modifiers) != null ? ref : '';
foldedIndent = Math.abs(parseInt(modifiers));
if (isNaN(foldedIndent)) {
foldedIndent = 0;
}
val = this.parseFoldedScalar(matches.separator, this.PATTERN_DECIMAL.replace(modifiers, ''), foldedIndent);
if (matches.type != null) {
Inline.configure(exceptionOnInvalidType, objectDecoder);
return Inline.parseScalar(matches.type + ' ' + val);
} else {
return val;
}
}
if ((ref1 = value.charAt(0)) === '[' || ref1 === '{' || ref1 === '"' || ref1 === "'") {
while (true) {
try {
return Inline.parse(value, exceptionOnInvalidType, objectDecoder);
} catch (error) {
e = error;
if (e instanceof ParseMore && this.moveToNextLine()) {
value += "\n" + Utils.trim(this.currentLine, ' ');
} else {
e.parsedLine = this.getRealCurrentLineNb() + 1;
e.snippet = this.currentLine;
throw e;
}
}
}
} else {
if (this.isNextLineIndented()) {
value += "\n" + this.getNextEmbedBlock();
}
return Inline.parse(value, exceptionOnInvalidType, objectDecoder);
}
};
Parser.prototype.parseFoldedScalar = function (separator, indicator, indentation) {
var isCurrentLineBlank, j, len, line, matches, newText, notEOF, pattern, ref, text;
if (indicator == null) {
indicator = '';
}
if (indentation == null) {
indentation = 0;
}
notEOF = this.moveToNextLine();
if (!notEOF) {
return '';
}
isCurrentLineBlank = this.isCurrentLineBlank();
text = '';
while (notEOF && isCurrentLineBlank) {
if (notEOF = this.moveToNextLine()) {
text += "\n";
isCurrentLineBlank = this.isCurrentLineBlank();
}
}
if (0 === indentation) {
if (matches = this.PATTERN_INDENT_SPACES.exec(this.currentLine)) {
indentation = matches[0].length;
}
}
if (indentation > 0) {
pattern = this.PATTERN_FOLDED_SCALAR_BY_INDENTATION[indentation];
if (pattern == null) {
pattern = new Pattern('^ {' + indentation + '}(.*)$');
Parser.prototype.PATTERN_FOLDED_SCALAR_BY_INDENTATION[indentation] = pattern;
}
while (notEOF && (isCurrentLineBlank || (matches = pattern.exec(this.currentLine)))) {
if (isCurrentLineBlank) {
text += this.currentLine.slice(indentation);
} else {
text += matches[1];
}
if (notEOF = this.moveToNextLine()) {
text += "\n";
isCurrentLineBlank = this.isCurrentLineBlank();
}
}
} else if (notEOF) {
text += "\n";
}
if (notEOF) {
this.moveToPreviousLine();
}
if ('>' === separator) {
newText = '';
ref = text.split("\n");
for (j = 0, len = ref.length; j < len; j++) {
line = ref[j];
if (line.length === 0 || line.charAt(0) === ' ') {
newText = Utils.rtrim(newText, ' ') + line + "\n";
} else {
newText += line + ' ';
}
}
text = newText;
}
if ('+' !== indicator) {
text = Utils.rtrim(text);
}
if ('' === indicator) {
text = this.PATTERN_TRAILING_LINES.replace(text, "\n");
} else if ('-' === indicator) {
text = this.PATTERN_TRAILING_LINES.replace(text, '');
}
return text;
};
Parser.prototype.isNextLineIndented = function (ignoreComments) {
var EOF, currentIndentation, ret;
if (ignoreComments == null) {
ignoreComments = true;
}
currentIndentation = this.getCurrentLineIndentation();
EOF = !this.moveToNextLine();
if (ignoreComments) {
while (!EOF && this.isCurrentLineEmpty()) {
EOF = !this.moveToNextLine();
}
} else {
while (!EOF && this.isCurrentLineBlank()) {
EOF = !this.moveToNextLine();
}
}
if (EOF) {
return false;
}
ret = false;
if (this.getCurrentLineIndentation() > currentIndentation) {
ret = true;
}
this.moveToPreviousLine();
return ret;
};
Parser.prototype.isCurrentLineEmpty = function () {
var trimmedLine;
trimmedLine = Utils.trim(this.currentLine, ' ');
return trimmedLine.length === 0 || trimmedLine.charAt(0) === '#';
};
Parser.prototype.isCurrentLineBlank = function () {
return '' === Utils.trim(this.currentLine, ' ');
};
Parser.prototype.isCurrentLineComment = function () {
var ltrimmedLine;
ltrimmedLine = Utils.ltrim(this.currentLine, ' ');
return ltrimmedLine.charAt(0) === '#';
};
Parser.prototype.cleanup = function (value) {
var count, i, indent, j, l, len, len1, line, lines, ref, ref1, ref2, smallestIndent, trimmedValue;
if (value.indexOf("\r") !== -1) {
value = value.split("\r\n").join("\n").split("\r").join("\n");
}
count = 0;
ref = this.PATTERN_YAML_HEADER.replaceAll(value, ''), value = ref[0], count = ref[1];
this.offset += count;
ref1 = this.PATTERN_LEADING_COMMENTS.replaceAll(value, '', 1), trimmedValue = ref1[0], count = ref1[1];
if (count === 1) {
this.offset += Utils.subStrCount(value, "\n") - Utils.subStrCount(trimmedValue, "\n");
value = trimmedValue;
}
ref2 = this.PATTERN_DOCUMENT_MARKER_START.replaceAll(value, '', 1), trimmedValue = ref2[0], count = ref2[1];
if (count === 1) {
this.offset += Utils.subStrCount(value, "\n") - Utils.subStrCount(trimmedValue, "\n");
value = trimmedValue;
value = this.PATTERN_DOCUMENT_MARKER_END.replace(value, '');
}
lines = value.split("\n");
smallestIndent = -1;
for (j = 0, len = lines.length; j < len; j++) {
line = lines[j];
if (Utils.trim(line, ' ').length === 0) {
continue;
}
indent = line.length - Utils.ltrim(line).length;
if (smallestIndent === -1 || indent < smallestIndent) {
smallestIndent = indent;
}
}
if (smallestIndent > 0) {
for (i = l = 0, len1 = lines.length; l < len1; i = ++l) {
line = lines[i];
lines[i] = line.slice(smallestIndent);
}
value = lines.join("\n");
}
return value;
};
Parser.prototype.isNextLineUnIndentedCollection = function (currentIndentation) {
var notEOF, ret;
if (currentIndentation == null) {
currentIndentation = null;
}
if (currentIndentation == null) {
currentIndentation = this.getCurrentLineIndentation();
}
notEOF = this.moveToNextLine();
while (notEOF && this.isCurrentLineEmpty()) {
notEOF = this.moveToNextLine();
}
if (false === notEOF) {
return false;
}
ret = false;
if (this.getCurrentLineIndentation() === currentIndentation && this.isStringUnIndentedCollectionItem(this.currentLine)) {
ret = true;
}
this.moveToPreviousLine();
return ret;
};
Parser.prototype.isStringUnIndentedCollectionItem = function () {
return this.currentLine === '-' || this.currentLine.slice(0, 2) === '- ';
};
return Parser;
})();
module.exports = Parser;
}, {
"./Exception/ParseException": 4,
"./Exception/ParseMore": 5,
"./Inline": 6,
"./Pattern": 8,
"./Utils": 10
}],
8: [function (require, module, exports) {
var Pattern;
Pattern = (function () {
Pattern.prototype.regex = null;
Pattern.prototype.rawRegex = null;
Pattern.prototype.cleanedRegex = null;
Pattern.prototype.mapping = null;
function Pattern(rawRegex, modifiers) {
var _char, capturingBracketNumber, cleanedRegex, i, len, mapping, name, part, subChar;
if (modifiers == null) {
modifiers = '';
}
cleanedRegex = '';
len = rawRegex.length;
mapping = null;
capturingBracketNumber = 0;
i = 0;
while (i < len) {
_char = rawRegex.charAt(i);
if (_char === '\\') {
cleanedRegex += rawRegex.slice(i, +(i + 1) + 1 || 9e9);
i++;
} else if (_char === '(') {
if (i < len - 2) {
part = rawRegex.slice(i, +(i + 2) + 1 || 9e9);
if (part === '(?:') {
i += 2;
cleanedRegex += part;
} else if (part === '(?<') {
capturingBracketNumber++;
i += 2;
name = '';
while (i + 1 < len) {
subChar = rawRegex.charAt(i + 1);
if (subChar === '>') {
cleanedRegex += '(';
i++;
if (name.length > 0) {
if (mapping == null) {
mapping = {};
}
mapping[name] = capturingBracketNumber;
}
break;
} else {
name += subChar;
}
i++;
}
} else {
cleanedRegex += _char;
capturingBracketNumber++;
}
} else {
cleanedRegex += _char;
}
} else {
cleanedRegex += _char;
}
i++;
}
this.rawRegex = rawRegex;
this.cleanedRegex = cleanedRegex;
this.regex = new RegExp(this.cleanedRegex, 'g' + modifiers.replace('g', ''));
this.mapping = mapping;
}
Pattern.prototype.exec = function (str) {
var index, matches, name, ref;
this.regex.lastIndex = 0;
matches = this.regex.exec(str);
if (matches == null) {
return null;
}
if (this.mapping != null) {
ref = this.mapping;
for (name in ref) {
index = ref[name];
matches[name] = matches[index];
}
}
return matches;
};
Pattern.prototype.test = function (str) {
this.regex.lastIndex = 0;
return this.regex.test(str);
};
Pattern.prototype.replace = function (str, replacement) {
this.regex.lastIndex = 0;
return str.replace(this.regex, replacement);
};
Pattern.prototype.replaceAll = function (str, replacement, limit) {
var count;
if (limit == null) {
limit = 0;
}
this.regex.lastIndex = 0;
count = 0;
while (this.regex.test(str) && (limit === 0 || count < limit)) {
this.regex.lastIndex = 0;
str = str.replace(this.regex, replacement);
count++;
}
return [str, count];
};
return Pattern;
})();
module.exports = Pattern;
}, {}],
9: [function (require, module, exports) {
var Pattern, Unescaper, Utils;
Utils = require('./Utils');
Pattern = require('./Pattern');
Unescaper = (function () {
function Unescaper() { }
Unescaper.PATTERN_ESCAPED_CHARACTER = new Pattern('\\\\([0abt\tnvfre "\\/\\\\N_LP]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})');
Unescaper.unescapeSingleQuotedString = function (value) {
return value.replace(/\'\'/g, '\'');
};
Unescaper.unescapeDoubleQuotedString = function (value) {
if (this._unescapeCallback == null) {
this._unescapeCallback = (function (_this) {
return function (str) {
return _this.unescapeCharacter(str);
};
})(this);
}
return this.PATTERN_ESCAPED_CHARACTER.replace(value, this._unescapeCallback);
};
Unescaper.unescapeCharacter = function (value) {
var ch;
ch = String.fromCharCode;
switch (value.charAt(1)) {
case '0':
return ch(0);
case 'a':
return ch(7);
case 'b':
return ch(8);
case 't':
return "\t";
case "\t":
return "\t";
case 'n':
return "\n";
case 'v':
return ch(11);
case 'f':
return ch(12);
case 'r':
return ch(13);
case 'e':
return ch(27);
case ' ':
return ' ';
case '"':
return '"';
case '/':
return '/';
case '\\':
return '\\';
case 'N':
return ch(0x0085);
case '_':
return ch(0x00A0);
case 'L':
return ch(0x2028);
case 'P':
return ch(0x2029);
case 'x':
return Utils.utf8chr(Utils.hexDec(value.substr(2, 2)));
case 'u':
return Utils.utf8chr(Utils.hexDec(value.substr(2, 4)));
case 'U':
return Utils.utf8chr(Utils.hexDec(value.substr(2, 8)));
default:
return '';
}
};
return Unescaper;
})();
module.exports = Unescaper;
}, {
"./Pattern": 8,
"./Utils": 10
}],
10: [function (require, module, exports) {
var Pattern, Utils,
hasProp = {}.hasOwnProperty;
Pattern = require('./Pattern');
Utils = (function () {
function Utils() { }
Utils.REGEX_LEFT_TRIM_BY_CHAR = {};
Utils.REGEX_RIGHT_TRIM_BY_CHAR = {};
Utils.REGEX_SPACES = /\s+/g;
Utils.REGEX_DIGITS = /^\d+$/;
Utils.REGEX_OCTAL = /[^0-7]/gi;
Utils.REGEX_HEXADECIMAL = /[^a-f0-9]/gi;
Utils.PATTERN_DATE = new Pattern('^' + '(?<year>[0-9][0-9][0-9][0-9])' + '-(?<month>[0-9][0-9]?)' + '-(?<day>[0-9][0-9]?)' + '(?:(?:[Tt]|[ \t]+)' + '(?<hour>[0-9][0-9]?)' + ':(?<minute>[0-9][0-9])' + ':(?<second>[0-9][0-9])' + '(?:\.(?<fraction>[0-9]*))?' + '(?:[ \t]*(?<tz>Z|(?<tz_sign>[-+])(?<tz_hour>[0-9][0-9]?)' + '(?::(?<tz_minute>[0-9][0-9]))?))?)?' + '$', 'i');
Utils.LOCAL_TIMEZONE_OFFSET = new Date().getTimezoneOffset() * 60 * 1000;
Utils.trim = function (str, _char) {
var regexLeft, regexRight;
if (_char == null) {
_char = '\\s';
}
regexLeft = this.REGEX_LEFT_TRIM_BY_CHAR[_char];
if (regexLeft == null) {
this.REGEX_LEFT_TRIM_BY_CHAR[_char] = regexLeft = new RegExp('^' + _char + '' + _char + '*');
}
regexLeft.lastIndex = 0;
regexRight = this.REGEX_RIGHT_TRIM_BY_CHAR[_char];
if (regexRight == null) {
this.REGEX_RIGHT_TRIM_BY_CHAR[_char] = regexRight = new RegExp(_char + '' + _char + '*$');
}
regexRight.lastIndex = 0;
return str.replace(regexLeft, '').replace(regexRight, '');
};
Utils.ltrim = function (str, _char) {
var regexLeft;
if (_char == null) {
_char = '\\s';
}
regexLeft = this.REGEX_LEFT_TRIM_BY_CHAR[_char];
if (regexLeft == null) {
this.REGEX_LEFT_TRIM_BY_CHAR[_char] = regexLeft = new RegExp('^' + _char + '' + _char + '*');
}
regexLeft.lastIndex = 0;
return str.replace(regexLeft, '');
};
Utils.rtrim = function (str, _char) {
var regexRight;
if (_char == null) {
_char = '\\s';
}
regexRight = this.REGEX_RIGHT_TRIM_BY_CHAR[_char];
if (regexRight == null) {
this.REGEX_RIGHT_TRIM_BY_CHAR[_char] = regexRight = new RegExp(_char + '' + _char + '*$');
}
regexRight.lastIndex = 0;
return str.replace(regexRight, '');
};
Utils.isEmpty = function (value) {
return !value || value === '' || value === '0' || (value instanceof Array && value.length === 0) || this.isEmptyObject(value);
};
Utils.isEmptyObject = function (value) {
var k;
return value instanceof Object && ((function () {
var results;
results = [];
for (k in value) {
if (!hasProp.call(value, k)) continue;
results.push(k);
}
return results;
})()).length === 0;
};
Utils.subStrCount = function (string, subString, start, length) {
var c, i, j, len, ref, sublen;
c = 0;
string = '' + string;
subString = '' + subString;
if (start != null) {
string = string.slice(start);
}
if (length != null) {
string = string.slice(0, length);
}
len = string.length;
sublen = subString.length;
for (i = j = 0, ref = len; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
if (subString === string.slice(i, sublen)) {
c++;
i += sublen - 1;
}
}
return c;
};
Utils.isDigits = function (input) {
this.REGEX_DIGITS.lastIndex = 0;
return this.REGEX_DIGITS.test(input);
};
Utils.octDec = function (input) {
this.REGEX_OCTAL.lastIndex = 0;
return parseInt((input + '').replace(this.REGEX_OCTAL, ''), 8);
};
Utils.hexDec = function (input) {
this.REGEX_HEXADECIMAL.lastIndex = 0;
input = this.trim(input);
if ((input + '').slice(0, 2) === '0x') {
input = (input + '').slice(2);
}
return parseInt((input + '').replace(this.REGEX_HEXADECIMAL, ''), 16);
};
Utils.utf8chr = function (c) {
var ch;
ch = String.fromCharCode;
if (0x80 > (c %= 0x200000)) {
return ch(c);
}
if (0x800 > c) {
return ch(0xC0 | c >> 6) + ch(0x80 | c & 0x3F);
}
if (0x10000 > c) {
return ch(0xE0 | c >> 12) + ch(0x80 | c >> 6 & 0x3F) + ch(0x80 | c & 0x3F);
}
return ch(0xF0 | c >> 18) + ch(0x80 | c >> 12 & 0x3F) + ch(0x80 | c >> 6 & 0x3F) + ch(0x80 | c & 0x3F);
};
Utils.parseBoolean = function (input, strict) {
var lowerInput;
if (strict == null) {
strict = true;
}
if (typeof input === 'string') {
lowerInput = input.toLowerCase();
if (!strict) {
if (lowerInput === 'no') {
return false;
}
}
if (lowerInput === '0') {
return false;
}
if (lowerInput === 'false') {
return false;
}
if (lowerInput === '') {
return false;
}
return true;
}
return !!input;
};
Utils.isNumeric = function (input) {
this.REGEX_SPACES.lastIndex = 0;
return typeof input === 'number' || typeof input === 'string' && !isNaN(input) && input.replace(this.REGEX_SPACES, '') !== '';
};
Utils.stringToDate = function (str) {
var date, day, fraction, hour, info, minute, month, second, tz_hour, tz_minute, tz_offset, year;
if (!(str != null ? str.length : void 0)) {
return null;
}
info = this.PATTERN_DATE.exec(str);
if (!info) {
return null;
}
year = parseInt(info.year, 10);
month = parseInt(info.month, 10) - 1;
day = parseInt(info.day, 10);
if (info.hour == null) {
date = new Date(Date.UTC(year, month, day));
return date;
}
hour = parseInt(info.hour, 10);
minute = parseInt(info.minute, 10);
second = parseInt(info.second, 10);
if (info.fraction != null) {
fraction = info.fraction.slice(0, 3);
while (fraction.length < 3) {
fraction += '0';
}
fraction = parseInt(fraction, 10);
} else {
fraction = 0;
}
if (info.tz != null) {
tz_hour = parseInt(info.tz_hour, 10);
if (info.tz_minute != null) {
tz_minute = parseInt(info.tz_minute, 10);
} else {
tz_minute = 0;
}
tz_offset = (tz_hour * 60 + tz_minute) * 60000;
if ('-' === info.tz_sign) {
tz_offset *= -1;
}
}
date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));
if (tz_offset) {
date.setTime(date.getTime() - tz_offset);
}
return date;
};
Utils.strRepeat = function (str, number) {
var i, res;
res = '';
i = 0;
while (i < number) {
res += str;
i++;
}
return res;
};
Utils.getStringFromFile = function (path, callback) {
var data, fs, j, len1, name, ref, req, xhr;
if (callback == null) {
callback = null;
}
xhr = null;
if (typeof window !== "undefined" && window !== null) {
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else if (window.ActiveXObject) {
ref = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];
for (j = 0, len1 = ref.length; j < len1; j++) {
name = ref[j];
try {
xhr = new ActiveXObject(name);
} catch (undefined) { }
}
}
}
if (xhr != null) {
if (callback != null) {
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200 || xhr.status === 0) {
return callback(xhr.responseText);
} else {
return callback(null);
}
}
};
xhr.open('GET', path, true);
return xhr.send(null);
} else {
xhr.open('GET', path, false);
xhr.send(null);
if (xhr.status === 200 || xhr.status === 0) {
return xhr.responseText;
}
return null;
}
} else {
req = require;
fs = req('fs');
if (callback != null) {
return fs.readFile(path, function (err, data) {
if (err) {
return callback(null);
} else {
return callback(String(data));
}
});
} else {
data = fs.readFileSync(path);
if (data != null) {
return String(data);
}
return null;
}
}
};
return Utils;
})();
module.exports = Utils;
}, {
"./Pattern": 8
}],
11: [function (require, module, exports) {
var Dumper, Parser, Utils, Yaml;
Parser = require('./Parser');
Dumper = require('./Dumper');
Utils = require('./Utils');
Yaml = (function () {
function Yaml() { }
Yaml.parse = function (input, exceptionOnInvalidType, objectDecoder) {
if (exceptionOnInvalidType == null) {
exceptionOnInvalidType = false;
}
if (objectDecoder == null) {
objectDecoder = null;
}
return new Parser().parse(input, exceptionOnInvalidType, objectDecoder);
};
Yaml.parseFile = function (path, callback, exceptionOnInvalidType, objectDecoder) {
var input;
if (callback == null) {
callback = null;
}
if (exceptionOnInvalidType == null) {
exceptionOnInvalidType = false;
}
if (objectDecoder == null) {
objectDecoder = null;
}
if (callback != null) {
return Utils.getStringFromFile(path, (function (_this) {
return function (input) {
var result;
result = null;
if (input != null) {
result = _this.parse(input, exceptionOnInvalidType, objectDecoder);
}
callback(result);
};
})(this));
} else {
input = Utils.getStringFromFile(path);
if (input != null) {
return this.parse(input, exceptionOnInvalidType, objectDecoder);
}
return null;
}
};
Yaml.dump = function (input, inline, indent, exceptionOnInvalidType, objectEncoder) {
var yaml;
if (inline == null) {
inline = 2;
}
if (indent == null) {
indent = 4;
}
if (exceptionOnInvalidType == null) {
exceptionOnInvalidType = false;
}
if (objectEncoder == null) {
objectEncoder = null;
}
yaml = new Dumper();
yaml.indentation = indent;
return yaml.dump(input, inline, 0, exceptionOnInvalidType, objectEncoder);
};
Yaml.stringify = function (input, inline, indent, exceptionOnInvalidType, objectEncoder) {
return this.dump(input, inline, indent, exceptionOnInvalidType, objectEncoder);
};
Yaml.load = function (path, callback, exceptionOnInvalidType, objectDecoder) {
return this.parseFile(path, callback, exceptionOnInvalidType, objectDecoder);
};
return Yaml;
})();
if (typeof window !== "undefined" && window !== null) {
window.YAML = Yaml;
}
if (typeof window === "undefined" || window === null) {
this.YAML = Yaml;
}
module.exports = Yaml;
}, {
"./Dumper": 1,
"./Parser": 7,
"./Utils": 10
}]
}, {}, [11]);