Website/node_modules/yaml-js/lib/resolver.js

212 lines
7.6 KiB
JavaScript

(function() {
var YAMLError, nodes, util, _ref, _ref1,
__hasProp = {}.hasOwnProperty,
__extends = 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; },
__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; };
nodes = require('./nodes');
util = require('./util');
YAMLError = require('./errors').YAMLError;
this.ResolverError = (function(_super) {
__extends(ResolverError, _super);
function ResolverError() {
_ref = ResolverError.__super__.constructor.apply(this, arguments);
return _ref;
}
return ResolverError;
})(YAMLError);
this.BaseResolver = (function() {
var DEFAULT_MAPPING_TAG, DEFAULT_SCALAR_TAG, DEFAULT_SEQUENCE_TAG;
DEFAULT_SCALAR_TAG = 'tag:yaml.org,2002:str';
DEFAULT_SEQUENCE_TAG = 'tag:yaml.org,2002:seq';
DEFAULT_MAPPING_TAG = 'tag:yaml.org,2002:map';
BaseResolver.prototype.yaml_implicit_resolvers = {};
BaseResolver.prototype.yaml_path_resolvers = {};
BaseResolver.add_implicit_resolver = function(tag, regexp, first) {
var char, _base, _i, _len, _ref1, _results;
if (first == null) {
first = [null];
}
if (!this.prototype.hasOwnProperty('yaml_implicit_resolvers')) {
this.prototype.yaml_implicit_resolvers = util.extend({}, this.prototype.yaml_implicit_resolvers);
}
_results = [];
for (_i = 0, _len = first.length; _i < _len; _i++) {
char = first[_i];
_results.push(((_ref1 = (_base = this.prototype.yaml_implicit_resolvers)[char]) != null ? _ref1 : _base[char] = []).push([tag, regexp]));
}
return _results;
};
function BaseResolver() {
this.resolver_exact_paths = [];
this.resolver_prefix_paths = [];
}
BaseResolver.prototype.descend_resolver = function(current_node, current_index) {
var depth, exact_paths, kind, path, prefix_paths, _i, _j, _len, _len1, _ref1, _ref2, _ref3, _ref4;
if (util.is_empty(this.yaml_path_resolvers)) {
return;
}
exact_paths = {};
prefix_paths = [];
if (current_node) {
depth = this.resolver_prefix_paths.length;
_ref1 = this.resolver_prefix_paths.slice(-1)[0];
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
_ref2 = _ref1[_i], path = _ref2[0], kind = _ref2[1];
if (this.check_resolver_prefix(depth, path, kind, current_node, current_index)) {
if (path.length > depth) {
prefix_paths.push([path, kind]);
} else {
exact_paths[kind] = this.yaml_path_resolvers[path][kind];
}
}
}
} else {
_ref3 = this.yaml_path_resolvers;
for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
_ref4 = _ref3[_j], path = _ref4[0], kind = _ref4[1];
if (!path) {
exact_paths[kind] = this.yaml_path_resolvers[path][kind];
} else {
prefix_paths.push([path, kind]);
}
}
}
this.resolver_exact_paths.push(exact_paths);
return this.resolver_prefix_paths.push(prefix_paths);
};
BaseResolver.prototype.ascend_resolver = function() {
if (util.is_empty(this.yaml_path_resolvers)) {
return;
}
this.resolver_exact_paths.pop();
return this.resolver_prefix_paths.pop();
};
BaseResolver.prototype.check_resolver_prefix = function(depth, path, kind, current_node, current_index) {
var index_check, node_check, _ref1;
_ref1 = path[depth - 1], node_check = _ref1[0], index_check = _ref1[1];
if (typeof node_check === 'string') {
if (current_node.tag !== node_check) {
return;
}
} else if (node_check !== null) {
if (!(current_node instanceof node_check)) {
return;
}
}
if (index_check === true && current_index !== null) {
return;
}
if ((index_check === false || index_check === null) && current_index === null) {
return;
}
if (typeof index_check === 'string') {
if (!(current_index instanceof nodes.ScalarNode) && index_check === current_index.value) {
return;
}
} else if (typeof index_check === 'number') {
if (index_check !== current_index) {
return;
}
}
return true;
};
BaseResolver.prototype.resolve = function(kind, value, implicit) {
var empty, exact_paths, k, regexp, resolvers, tag, _i, _len, _ref1, _ref2, _ref3, _ref4;
if (kind === nodes.ScalarNode && implicit[0]) {
if (value === '') {
resolvers = (_ref1 = this.yaml_implicit_resolvers['']) != null ? _ref1 : [];
} else {
resolvers = (_ref2 = this.yaml_implicit_resolvers[value[0]]) != null ? _ref2 : [];
}
resolvers = resolvers.concat((_ref3 = this.yaml_implicit_resolvers[null]) != null ? _ref3 : []);
for (_i = 0, _len = resolvers.length; _i < _len; _i++) {
_ref4 = resolvers[_i], tag = _ref4[0], regexp = _ref4[1];
if (value.match(regexp)) {
return tag;
}
}
implicit = implicit[1];
}
empty = true;
for (k in this.yaml_path_resolvers) {
if ({}[k] == null) {
empty = false;
}
}
if (!empty) {
exact_paths = this.resolver_exact_paths.slice(-1)[0];
if (__indexOf.call(exact_paths, kind) >= 0) {
return exact_paths[kind];
}
if (__indexOf.call(exact_paths, null) >= 0) {
return exact_paths[null];
}
}
if (kind === nodes.ScalarNode) {
return DEFAULT_SCALAR_TAG;
}
if (kind === nodes.SequenceNode) {
return DEFAULT_SEQUENCE_TAG;
}
if (kind === nodes.MappingNode) {
return DEFAULT_MAPPING_TAG;
}
};
return BaseResolver;
})();
this.Resolver = (function(_super) {
__extends(Resolver, _super);
function Resolver() {
_ref1 = Resolver.__super__.constructor.apply(this, arguments);
return _ref1;
}
return Resolver;
})(this.BaseResolver);
this.Resolver.add_implicit_resolver('tag:yaml.org,2002:bool', /^(?:yes|Yes|YES|true|True|TRUE|on|On|ON|no|No|NO|false|False|FALSE|off|Off|OFF)$/, 'yYnNtTfFoO');
this.Resolver.add_implicit_resolver('tag:yaml.org,2002:float', /^(?:[-+]?(?:[0-9][0-9_]*)\.[0-9_]*(?:[eE][-+][0-9]+)?|\.[0-9_]+(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*|[-+]?\.(?:inf|Inf|INF)|\.(?:nan|NaN|NAN))$/, '-+0123456789.');
this.Resolver.add_implicit_resolver('tag:yaml.org,2002:int', /^(?:[-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[0-9a-fA-F_]+|[-+]?0o[0-7_]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$/, '-+0123456789');
this.Resolver.add_implicit_resolver('tag:yaml.org,2002:merge', /^(?:<<)$/, '<');
this.Resolver.add_implicit_resolver('tag:yaml.org,2002:null', /^(?:~|null|Null|NULL|)$/, ['~', 'n', 'N', '']);
this.Resolver.add_implicit_resolver('tag:yaml.org,2002:timestamp', /^(?:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]|[0-9][0-9][0-9][0-9]-[0-9][0-9]?-[0-9][0-9]?(?:[Tt]|[\x20\t]+)[0-9][0-9]?:[0-9][0-9]:[0-9][0-9](?:\.[0-9]*)?(?:[\x20\t]*(?:Z|[-+][0-9][0-9]?(?::[0-9][0-9])?))?)$/, '0123456789');
this.Resolver.add_implicit_resolver('tag:yaml.org,2002:value', /^(?:=)$/, '=');
this.Resolver.add_implicit_resolver('tag:yaml.org,2002:yaml', /^(?:!|&|\*)$/, '!&*');
}).call(this);