UNPKG

angular2

Version:

Angular 2 - a web framework for modern web apps

648 lines 92.5 kB
'use strict';"use strict"; var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; var lang_1 = require('angular2/src/facade/lang'); var exceptions_1 = require('angular2/src/facade/exceptions'); var collection_1 = require('angular2/src/facade/collection'); var change_detection_1 = require('angular2/src/core/change_detection/change_detection'); var view_1 = require('angular2/src/core/metadata/view'); var selector_1 = require('angular2/src/compiler/selector'); var util_1 = require('./util'); var lifecycle_hooks_1 = require('angular2/src/core/metadata/lifecycle_hooks'); var url_resolver_1 = require('./url_resolver'); // group 1: "property" from "[property]" // group 2: "event" from "(event)" var HOST_REG_EXP = /^(?:(?:\[([^\]]+)\])|(?:\(([^\)]+)\)))$/g; var CompileMetadataWithIdentifier = (function () { function CompileMetadataWithIdentifier() { } Object.defineProperty(CompileMetadataWithIdentifier.prototype, "identifier", { get: function () { return exceptions_1.unimplemented(); }, enumerable: true, configurable: true }); return CompileMetadataWithIdentifier; }()); exports.CompileMetadataWithIdentifier = CompileMetadataWithIdentifier; var CompileMetadataWithType = (function (_super) { __extends(CompileMetadataWithType, _super); function CompileMetadataWithType() { _super.apply(this, arguments); } Object.defineProperty(CompileMetadataWithType.prototype, "type", { get: function () { return exceptions_1.unimplemented(); }, enumerable: true, configurable: true }); Object.defineProperty(CompileMetadataWithType.prototype, "identifier", { get: function () { return exceptions_1.unimplemented(); }, enumerable: true, configurable: true }); return CompileMetadataWithType; }(CompileMetadataWithIdentifier)); exports.CompileMetadataWithType = CompileMetadataWithType; function metadataFromJson(data) { return _COMPILE_METADATA_FROM_JSON[data['class']](data); } exports.metadataFromJson = metadataFromJson; var CompileIdentifierMetadata = (function () { function CompileIdentifierMetadata(_a) { var _b = _a === void 0 ? {} : _a, runtime = _b.runtime, name = _b.name, moduleUrl = _b.moduleUrl, prefix = _b.prefix, value = _b.value; this.runtime = runtime; this.name = name; this.prefix = prefix; this.moduleUrl = moduleUrl; this.value = value; } CompileIdentifierMetadata.fromJson = function (data) { var value = lang_1.isArray(data['value']) ? _arrayFromJson(data['value'], metadataFromJson) : _objFromJson(data['value'], metadataFromJson); return new CompileIdentifierMetadata({ name: data['name'], prefix: data['prefix'], moduleUrl: data['moduleUrl'], value: value }); }; CompileIdentifierMetadata.prototype.toJson = function () { var value = lang_1.isArray(this.value) ? _arrayToJson(this.value) : _objToJson(this.value); return { // Note: Runtime type can't be serialized... 'class': 'Identifier', 'name': this.name, 'moduleUrl': this.moduleUrl, 'prefix': this.prefix, 'value': value }; }; Object.defineProperty(CompileIdentifierMetadata.prototype, "identifier", { get: function () { return this; }, enumerable: true, configurable: true }); return CompileIdentifierMetadata; }()); exports.CompileIdentifierMetadata = CompileIdentifierMetadata; var CompileDiDependencyMetadata = (function () { function CompileDiDependencyMetadata(_a) { var _b = _a === void 0 ? {} : _a, isAttribute = _b.isAttribute, isSelf = _b.isSelf, isHost = _b.isHost, isSkipSelf = _b.isSkipSelf, isOptional = _b.isOptional, isValue = _b.isValue, query = _b.query, viewQuery = _b.viewQuery, token = _b.token, value = _b.value; this.isAttribute = lang_1.normalizeBool(isAttribute); this.isSelf = lang_1.normalizeBool(isSelf); this.isHost = lang_1.normalizeBool(isHost); this.isSkipSelf = lang_1.normalizeBool(isSkipSelf); this.isOptional = lang_1.normalizeBool(isOptional); this.isValue = lang_1.normalizeBool(isValue); this.query = query; this.viewQuery = viewQuery; this.token = token; this.value = value; } CompileDiDependencyMetadata.fromJson = function (data) { return new CompileDiDependencyMetadata({ token: _objFromJson(data['token'], CompileTokenMetadata.fromJson), query: _objFromJson(data['query'], CompileQueryMetadata.fromJson), viewQuery: _objFromJson(data['viewQuery'], CompileQueryMetadata.fromJson), value: data['value'], isAttribute: data['isAttribute'], isSelf: data['isSelf'], isHost: data['isHost'], isSkipSelf: data['isSkipSelf'], isOptional: data['isOptional'], isValue: data['isValue'] }); }; CompileDiDependencyMetadata.prototype.toJson = function () { return { 'token': _objToJson(this.token), 'query': _objToJson(this.query), 'viewQuery': _objToJson(this.viewQuery), 'value': this.value, 'isAttribute': this.isAttribute, 'isSelf': this.isSelf, 'isHost': this.isHost, 'isSkipSelf': this.isSkipSelf, 'isOptional': this.isOptional, 'isValue': this.isValue }; }; return CompileDiDependencyMetadata; }()); exports.CompileDiDependencyMetadata = CompileDiDependencyMetadata; var CompileProviderMetadata = (function () { function CompileProviderMetadata(_a) { var token = _a.token, useClass = _a.useClass, useValue = _a.useValue, useExisting = _a.useExisting, useFactory = _a.useFactory, deps = _a.deps, multi = _a.multi; this.token = token; this.useClass = useClass; this.useValue = useValue; this.useExisting = useExisting; this.useFactory = useFactory; this.deps = lang_1.normalizeBlank(deps); this.multi = lang_1.normalizeBool(multi); } CompileProviderMetadata.fromJson = function (data) { return new CompileProviderMetadata({ token: _objFromJson(data['token'], CompileTokenMetadata.fromJson), useClass: _objFromJson(data['useClass'], CompileTypeMetadata.fromJson), useExisting: _objFromJson(data['useExisting'], CompileTokenMetadata.fromJson), useValue: _objFromJson(data['useValue'], CompileIdentifierMetadata.fromJson), useFactory: _objFromJson(data['useFactory'], CompileFactoryMetadata.fromJson), multi: data['multi'], deps: _arrayFromJson(data['deps'], CompileDiDependencyMetadata.fromJson) }); }; CompileProviderMetadata.prototype.toJson = function () { return { // Note: Runtime type can't be serialized... 'class': 'Provider', 'token': _objToJson(this.token), 'useClass': _objToJson(this.useClass), 'useExisting': _objToJson(this.useExisting), 'useValue': _objToJson(this.useValue), 'useFactory': _objToJson(this.useFactory), 'multi': this.multi, 'deps': _arrayToJson(this.deps) }; }; return CompileProviderMetadata; }()); exports.CompileProviderMetadata = CompileProviderMetadata; var CompileFactoryMetadata = (function () { function CompileFactoryMetadata(_a) { var runtime = _a.runtime, name = _a.name, moduleUrl = _a.moduleUrl, prefix = _a.prefix, diDeps = _a.diDeps, value = _a.value; this.runtime = runtime; this.name = name; this.prefix = prefix; this.moduleUrl = moduleUrl; this.diDeps = _normalizeArray(diDeps); this.value = value; } Object.defineProperty(CompileFactoryMetadata.prototype, "identifier", { get: function () { return this; }, enumerable: true, configurable: true }); CompileFactoryMetadata.fromJson = function (data) { return new CompileFactoryMetadata({ name: data['name'], prefix: data['prefix'], moduleUrl: data['moduleUrl'], value: data['value'], diDeps: _arrayFromJson(data['diDeps'], CompileDiDependencyMetadata.fromJson) }); }; CompileFactoryMetadata.prototype.toJson = function () { return { 'class': 'Factory', 'name': this.name, 'prefix': this.prefix, 'moduleUrl': this.moduleUrl, 'value': this.value, 'diDeps': _arrayToJson(this.diDeps) }; }; return CompileFactoryMetadata; }()); exports.CompileFactoryMetadata = CompileFactoryMetadata; var CompileTokenMetadata = (function () { function CompileTokenMetadata(_a) { var value = _a.value, identifier = _a.identifier, identifierIsInstance = _a.identifierIsInstance; this.value = value; this.identifier = identifier; this.identifierIsInstance = lang_1.normalizeBool(identifierIsInstance); } CompileTokenMetadata.fromJson = function (data) { return new CompileTokenMetadata({ value: data['value'], identifier: _objFromJson(data['identifier'], CompileIdentifierMetadata.fromJson), identifierIsInstance: data['identifierIsInstance'] }); }; CompileTokenMetadata.prototype.toJson = function () { return { 'value': this.value, 'identifier': _objToJson(this.identifier), 'identifierIsInstance': this.identifierIsInstance }; }; Object.defineProperty(CompileTokenMetadata.prototype, "runtimeCacheKey", { get: function () { if (lang_1.isPresent(this.identifier)) { return this.identifier.runtime; } else { return this.value; } }, enumerable: true, configurable: true }); Object.defineProperty(CompileTokenMetadata.prototype, "assetCacheKey", { get: function () { if (lang_1.isPresent(this.identifier)) { return lang_1.isPresent(this.identifier.moduleUrl) && lang_1.isPresent(url_resolver_1.getUrlScheme(this.identifier.moduleUrl)) ? this.identifier.name + "|" + this.identifier.moduleUrl + "|" + this.identifierIsInstance : null; } else { return this.value; } }, enumerable: true, configurable: true }); CompileTokenMetadata.prototype.equalsTo = function (token2) { var rk = this.runtimeCacheKey; var ak = this.assetCacheKey; return (lang_1.isPresent(rk) && rk == token2.runtimeCacheKey) || (lang_1.isPresent(ak) && ak == token2.assetCacheKey); }; Object.defineProperty(CompileTokenMetadata.prototype, "name", { get: function () { return lang_1.isPresent(this.value) ? util_1.sanitizeIdentifier(this.value) : this.identifier.name; }, enumerable: true, configurable: true }); return CompileTokenMetadata; }()); exports.CompileTokenMetadata = CompileTokenMetadata; var CompileTokenMap = (function () { function CompileTokenMap() { this._valueMap = new Map(); this._values = []; } CompileTokenMap.prototype.add = function (token, value) { var existing = this.get(token); if (lang_1.isPresent(existing)) { throw new exceptions_1.BaseException("Can only add to a TokenMap! Token: " + token.name); } this._values.push(value); var rk = token.runtimeCacheKey; if (lang_1.isPresent(rk)) { this._valueMap.set(rk, value); } var ak = token.assetCacheKey; if (lang_1.isPresent(ak)) { this._valueMap.set(ak, value); } }; CompileTokenMap.prototype.get = function (token) { var rk = token.runtimeCacheKey; var ak = token.assetCacheKey; var result; if (lang_1.isPresent(rk)) { result = this._valueMap.get(rk); } if (lang_1.isBlank(result) && lang_1.isPresent(ak)) { result = this._valueMap.get(ak); } return result; }; CompileTokenMap.prototype.values = function () { return this._values; }; Object.defineProperty(CompileTokenMap.prototype, "size", { get: function () { return this._values.length; }, enumerable: true, configurable: true }); return CompileTokenMap; }()); exports.CompileTokenMap = CompileTokenMap; /** * Metadata regarding compilation of a type. */ var CompileTypeMetadata = (function () { function CompileTypeMetadata(_a) { var _b = _a === void 0 ? {} : _a, runtime = _b.runtime, name = _b.name, moduleUrl = _b.moduleUrl, prefix = _b.prefix, isHost = _b.isHost, value = _b.value, diDeps = _b.diDeps; this.runtime = runtime; this.name = name; this.moduleUrl = moduleUrl; this.prefix = prefix; this.isHost = lang_1.normalizeBool(isHost); this.value = value; this.diDeps = _normalizeArray(diDeps); } CompileTypeMetadata.fromJson = function (data) { return new CompileTypeMetadata({ name: data['name'], moduleUrl: data['moduleUrl'], prefix: data['prefix'], isHost: data['isHost'], value: data['value'], diDeps: _arrayFromJson(data['diDeps'], CompileDiDependencyMetadata.fromJson) }); }; Object.defineProperty(CompileTypeMetadata.prototype, "identifier", { get: function () { return this; }, enumerable: true, configurable: true }); Object.defineProperty(CompileTypeMetadata.prototype, "type", { get: function () { return this; }, enumerable: true, configurable: true }); CompileTypeMetadata.prototype.toJson = function () { return { // Note: Runtime type can't be serialized... 'class': 'Type', 'name': this.name, 'moduleUrl': this.moduleUrl, 'prefix': this.prefix, 'isHost': this.isHost, 'value': this.value, 'diDeps': _arrayToJson(this.diDeps) }; }; return CompileTypeMetadata; }()); exports.CompileTypeMetadata = CompileTypeMetadata; var CompileQueryMetadata = (function () { function CompileQueryMetadata(_a) { var _b = _a === void 0 ? {} : _a, selectors = _b.selectors, descendants = _b.descendants, first = _b.first, propertyName = _b.propertyName, read = _b.read; this.selectors = selectors; this.descendants = lang_1.normalizeBool(descendants); this.first = lang_1.normalizeBool(first); this.propertyName = propertyName; this.read = read; } CompileQueryMetadata.fromJson = function (data) { return new CompileQueryMetadata({ selectors: _arrayFromJson(data['selectors'], CompileTokenMetadata.fromJson), descendants: data['descendants'], first: data['first'], propertyName: data['propertyName'], read: _objFromJson(data['read'], CompileTokenMetadata.fromJson) }); }; CompileQueryMetadata.prototype.toJson = function () { return { 'selectors': _arrayToJson(this.selectors), 'descendants': this.descendants, 'first': this.first, 'propertyName': this.propertyName, 'read': _objToJson(this.read) }; }; return CompileQueryMetadata; }()); exports.CompileQueryMetadata = CompileQueryMetadata; /** * Metadata regarding compilation of a template. */ var CompileTemplateMetadata = (function () { function CompileTemplateMetadata(_a) { var _b = _a === void 0 ? {} : _a, encapsulation = _b.encapsulation, template = _b.template, templateUrl = _b.templateUrl, styles = _b.styles, styleUrls = _b.styleUrls, ngContentSelectors = _b.ngContentSelectors; this.encapsulation = lang_1.isPresent(encapsulation) ? encapsulation : view_1.ViewEncapsulation.Emulated; this.template = template; this.templateUrl = templateUrl; this.styles = lang_1.isPresent(styles) ? styles : []; this.styleUrls = lang_1.isPresent(styleUrls) ? styleUrls : []; this.ngContentSelectors = lang_1.isPresent(ngContentSelectors) ? ngContentSelectors : []; } CompileTemplateMetadata.fromJson = function (data) { return new CompileTemplateMetadata({ encapsulation: lang_1.isPresent(data['encapsulation']) ? view_1.VIEW_ENCAPSULATION_VALUES[data['encapsulation']] : data['encapsulation'], template: data['template'], templateUrl: data['templateUrl'], styles: data['styles'], styleUrls: data['styleUrls'], ngContentSelectors: data['ngContentSelectors'] }); }; CompileTemplateMetadata.prototype.toJson = function () { return { 'encapsulation': lang_1.isPresent(this.encapsulation) ? lang_1.serializeEnum(this.encapsulation) : this.encapsulation, 'template': this.template, 'templateUrl': this.templateUrl, 'styles': this.styles, 'styleUrls': this.styleUrls, 'ngContentSelectors': this.ngContentSelectors }; }; return CompileTemplateMetadata; }()); exports.CompileTemplateMetadata = CompileTemplateMetadata; /** * Metadata regarding compilation of a directive. */ var CompileDirectiveMetadata = (function () { function CompileDirectiveMetadata(_a) { var _b = _a === void 0 ? {} : _a, type = _b.type, isComponent = _b.isComponent, selector = _b.selector, exportAs = _b.exportAs, changeDetection = _b.changeDetection, inputs = _b.inputs, outputs = _b.outputs, hostListeners = _b.hostListeners, hostProperties = _b.hostProperties, hostAttributes = _b.hostAttributes, lifecycleHooks = _b.lifecycleHooks, providers = _b.providers, viewProviders = _b.viewProviders, queries = _b.queries, viewQueries = _b.viewQueries, template = _b.template; this.type = type; this.isComponent = isComponent; this.selector = selector; this.exportAs = exportAs; this.changeDetection = changeDetection; this.inputs = inputs; this.outputs = outputs; this.hostListeners = hostListeners; this.hostProperties = hostProperties; this.hostAttributes = hostAttributes; this.lifecycleHooks = _normalizeArray(lifecycleHooks); this.providers = _normalizeArray(providers); this.viewProviders = _normalizeArray(viewProviders); this.queries = _normalizeArray(queries); this.viewQueries = _normalizeArray(viewQueries); this.template = template; } CompileDirectiveMetadata.create = function (_a) { var _b = _a === void 0 ? {} : _a, type = _b.type, isComponent = _b.isComponent, selector = _b.selector, exportAs = _b.exportAs, changeDetection = _b.changeDetection, inputs = _b.inputs, outputs = _b.outputs, host = _b.host, lifecycleHooks = _b.lifecycleHooks, providers = _b.providers, viewProviders = _b.viewProviders, queries = _b.queries, viewQueries = _b.viewQueries, template = _b.template; var hostListeners = {}; var hostProperties = {}; var hostAttributes = {}; if (lang_1.isPresent(host)) { collection_1.StringMapWrapper.forEach(host, function (value, key) { var matches = lang_1.RegExpWrapper.firstMatch(HOST_REG_EXP, key); if (lang_1.isBlank(matches)) { hostAttributes[key] = value; } else if (lang_1.isPresent(matches[1])) { hostProperties[matches[1]] = value; } else if (lang_1.isPresent(matches[2])) { hostListeners[matches[2]] = value; } }); } var inputsMap = {}; if (lang_1.isPresent(inputs)) { inputs.forEach(function (bindConfig) { // canonical syntax: `dirProp: elProp` // if there is no `:`, use dirProp = elProp var parts = util_1.splitAtColon(bindConfig, [bindConfig, bindConfig]); inputsMap[parts[0]] = parts[1]; }); } var outputsMap = {}; if (lang_1.isPresent(outputs)) { outputs.forEach(function (bindConfig) { // canonical syntax: `dirProp: elProp` // if there is no `:`, use dirProp = elProp var parts = util_1.splitAtColon(bindConfig, [bindConfig, bindConfig]); outputsMap[parts[0]] = parts[1]; }); } return new CompileDirectiveMetadata({ type: type, isComponent: lang_1.normalizeBool(isComponent), selector: selector, exportAs: exportAs, changeDetection: changeDetection, inputs: inputsMap, outputs: outputsMap, hostListeners: hostListeners, hostProperties: hostProperties, hostAttributes: hostAttributes, lifecycleHooks: lang_1.isPresent(lifecycleHooks) ? lifecycleHooks : [], providers: providers, viewProviders: viewProviders, queries: queries, viewQueries: viewQueries, template: template }); }; Object.defineProperty(CompileDirectiveMetadata.prototype, "identifier", { get: function () { return this.type; }, enumerable: true, configurable: true }); CompileDirectiveMetadata.fromJson = function (data) { return new CompileDirectiveMetadata({ isComponent: data['isComponent'], selector: data['selector'], exportAs: data['exportAs'], type: lang_1.isPresent(data['type']) ? CompileTypeMetadata.fromJson(data['type']) : data['type'], changeDetection: lang_1.isPresent(data['changeDetection']) ? change_detection_1.CHANGE_DETECTION_STRATEGY_VALUES[data['changeDetection']] : data['changeDetection'], inputs: data['inputs'], outputs: data['outputs'], hostListeners: data['hostListeners'], hostProperties: data['hostProperties'], hostAttributes: data['hostAttributes'], lifecycleHooks: data['lifecycleHooks'].map(function (hookValue) { return lifecycle_hooks_1.LIFECYCLE_HOOKS_VALUES[hookValue]; }), template: lang_1.isPresent(data['template']) ? CompileTemplateMetadata.fromJson(data['template']) : data['template'], providers: _arrayFromJson(data['providers'], metadataFromJson), viewProviders: _arrayFromJson(data['viewProviders'], metadataFromJson), queries: _arrayFromJson(data['queries'], CompileQueryMetadata.fromJson), viewQueries: _arrayFromJson(data['viewQueries'], CompileQueryMetadata.fromJson) }); }; CompileDirectiveMetadata.prototype.toJson = function () { return { 'class': 'Directive', 'isComponent': this.isComponent, 'selector': this.selector, 'exportAs': this.exportAs, 'type': lang_1.isPresent(this.type) ? this.type.toJson() : this.type, 'changeDetection': lang_1.isPresent(this.changeDetection) ? lang_1.serializeEnum(this.changeDetection) : this.changeDetection, 'inputs': this.inputs, 'outputs': this.outputs, 'hostListeners': this.hostListeners, 'hostProperties': this.hostProperties, 'hostAttributes': this.hostAttributes, 'lifecycleHooks': this.lifecycleHooks.map(function (hook) { return lang_1.serializeEnum(hook); }), 'template': lang_1.isPresent(this.template) ? this.template.toJson() : this.template, 'providers': _arrayToJson(this.providers), 'viewProviders': _arrayToJson(this.viewProviders), 'queries': _arrayToJson(this.queries), 'viewQueries': _arrayToJson(this.viewQueries) }; }; return CompileDirectiveMetadata; }()); exports.CompileDirectiveMetadata = CompileDirectiveMetadata; /** * Construct {@link CompileDirectiveMetadata} from {@link ComponentTypeMetadata} and a selector. */ function createHostComponentMeta(componentType, componentSelector) { var template = selector_1.CssSelector.parse(componentSelector)[0].getMatchingElementTemplate(); return CompileDirectiveMetadata.create({ type: new CompileTypeMetadata({ runtime: Object, name: componentType.name + "_Host", moduleUrl: componentType.moduleUrl, isHost: true }), template: new CompileTemplateMetadata({ template: template, templateUrl: '', styles: [], styleUrls: [], ngContentSelectors: [] }), changeDetection: change_detection_1.ChangeDetectionStrategy.Default, inputs: [], outputs: [], host: {}, lifecycleHooks: [], isComponent: true, selector: '*', providers: [], viewProviders: [], queries: [], viewQueries: [] }); } exports.createHostComponentMeta = createHostComponentMeta; var CompilePipeMetadata = (function () { function CompilePipeMetadata(_a) { var _b = _a === void 0 ? {} : _a, type = _b.type, name = _b.name, pure = _b.pure, lifecycleHooks = _b.lifecycleHooks; this.type = type; this.name = name; this.pure = lang_1.normalizeBool(pure); this.lifecycleHooks = _normalizeArray(lifecycleHooks); } Object.defineProperty(CompilePipeMetadata.prototype, "identifier", { get: function () { return this.type; }, enumerable: true, configurable: true }); CompilePipeMetadata.fromJson = function (data) { return new CompilePipeMetadata({ type: lang_1.isPresent(data['type']) ? CompileTypeMetadata.fromJson(data['type']) : data['type'], name: data['name'], pure: data['pure'] }); }; CompilePipeMetadata.prototype.toJson = function () { return { 'class': 'Pipe', 'type': lang_1.isPresent(this.type) ? this.type.toJson() : null, 'name': this.name, 'pure': this.pure }; }; return CompilePipeMetadata; }()); exports.CompilePipeMetadata = CompilePipeMetadata; var _COMPILE_METADATA_FROM_JSON = { 'Directive': CompileDirectiveMetadata.fromJson, 'Pipe': CompilePipeMetadata.fromJson, 'Type': CompileTypeMetadata.fromJson, 'Provider': CompileProviderMetadata.fromJson, 'Identifier': CompileIdentifierMetadata.fromJson, 'Factory': CompileFactoryMetadata.fromJson }; function _arrayFromJson(obj, fn) { return lang_1.isBlank(obj) ? null : obj.map(function (o) { return _objFromJson(o, fn); }); } function _arrayToJson(obj) { return lang_1.isBlank(obj) ? null : obj.map(_objToJson); } function _objFromJson(obj, fn) { if (lang_1.isArray(obj)) return _arrayFromJson(obj, fn); if (lang_1.isString(obj) || lang_1.isBlank(obj) || lang_1.isBoolean(obj) || lang_1.isNumber(obj)) return obj; return fn(obj); } function _objToJson(obj) { if (lang_1.isArray(obj)) return _arrayToJson(obj); if (lang_1.isString(obj) || lang_1.isBlank(obj) || lang_1.isBoolean(obj) || lang_1.isNumber(obj)) return obj; return obj.toJson(); } function _normalizeArray(obj) { return lang_1.isPresent(obj) ? obj : []; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZV9tZXRhZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRpZmZpbmdfcGx1Z2luX3dyYXBwZXItb3V0cHV0X3BhdGgtQlJKZXIxSjkudG1wL2FuZ3VsYXIyL3NyYy9jb21waWxlci9jb21waWxlX21ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFCQWFPLDBCQUEwQixDQUFDLENBQUE7QUFDbEMsMkJBQTJDLGdDQUFnQyxDQUFDLENBQUE7QUFDNUUsMkJBS08sZ0NBQWdDLENBQUMsQ0FBQTtBQUN4QyxpQ0FHTyxxREFBcUQsQ0FBQyxDQUFBO0FBQzdELHFCQUEyRCxpQ0FBaUMsQ0FBQyxDQUFBO0FBQzdGLHlCQUEwQixnQ0FBZ0MsQ0FBQyxDQUFBO0FBQzNELHFCQUErQyxRQUFRLENBQUMsQ0FBQTtBQUN4RCxnQ0FBcUQsNENBQTRDLENBQUMsQ0FBQTtBQUNsRyw2QkFBMkIsZ0JBQWdCLENBQUMsQ0FBQTtBQUU1Qyx3Q0FBd0M7QUFDeEMsa0NBQWtDO0FBQ2xDLElBQUksWUFBWSxHQUFHLDBDQUEwQyxDQUFDO0FBRTlEO0lBQUE7SUFJQSxDQUFDO0lBREMsc0JBQUkscURBQVU7YUFBZCxjQUE4QyxNQUFNLENBQTRCLDBCQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBQ3BHLG9DQUFDO0FBQUQsQ0FBQyxBQUpELElBSUM7QUFKcUIscUNBQTZCLGdDQUlsRCxDQUFBO0FBRUQ7SUFBc0QsMkNBQTZCO0lBQW5GO1FBQXNELDhCQUE2QjtJQU1uRixDQUFDO0lBSEMsc0JBQUkseUNBQUk7YUFBUixjQUFrQyxNQUFNLENBQXNCLDBCQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBRWhGLHNCQUFJLCtDQUFVO2FBQWQsY0FBOEMsTUFBTSxDQUE0QiwwQkFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUNwRyw4QkFBQztBQUFELENBQUMsQUFORCxDQUFzRCw2QkFBNkIsR0FN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