summaryrefslogtreecommitdiff
path: root/xstatic/pkg/angular/data/angular-loader.js
diff options
context:
space:
mode:
Diffstat (limited to 'xstatic/pkg/angular/data/angular-loader.js')
-rw-r--r--xstatic/pkg/angular/data/angular-loader.js136
1 files changed, 101 insertions, 35 deletions
diff --git a/xstatic/pkg/angular/data/angular-loader.js b/xstatic/pkg/angular/data/angular-loader.js
index b005220..77111d5 100644
--- a/xstatic/pkg/angular/data/angular-loader.js
+++ b/xstatic/pkg/angular/data/angular-loader.js
@@ -1,6 +1,6 @@
/**
- * @license AngularJS v1.5.8
- * (c) 2010-2016 Google, Inc. http://angularjs.org
+ * @license AngularJS v1.8.2
+ * (c) 2010-2020 Google, Inc. http://angularjs.org
* License: MIT
*/
@@ -9,9 +9,17 @@
/* global toDebugString: true */
-function serializeObject(obj) {
+function serializeObject(obj, maxDepth) {
var seen = [];
+ // There is no direct way to stringify object until reaching a specific depth
+ // and a very deep object can cause a performance issue, so we copy the object
+ // based on this specific depth and then stringify it.
+ if (isValidObjectMaxDepth(maxDepth)) {
+ // This file is also included in `angular-loader`, so `copy()` might not always be available in
+ // the closure. Therefore, it is lazily retrieved as `angular.copy()` when needed.
+ obj = angular.copy(obj, null, maxDepth);
+ }
return JSON.stringify(obj, function(key, val) {
val = toJsonReplacer(key, val);
if (isObject(val)) {
@@ -24,13 +32,13 @@ function serializeObject(obj) {
});
}
-function toDebugString(obj) {
+function toDebugString(obj, maxDepth) {
if (typeof obj === 'function') {
return obj.toString().replace(/ \{[\s\S]*$/, '');
} else if (isUndefined(obj)) {
return 'undefined';
} else if (typeof obj !== 'string') {
- return serializeObject(obj);
+ return serializeObject(obj, maxDepth);
}
return obj;
}
@@ -39,7 +47,7 @@ function toDebugString(obj) {
* @description
*
* This object provides a utility for producing rich Error messages within
- * Angular. It can be called as follows:
+ * AngularJS. It can be called as follows:
*
* var exampleMinErr = minErr('example');
* throw exampleMinErr('one', 'This {0} is {1}', foo, bar);
@@ -56,7 +64,7 @@ function toDebugString(obj) {
* Since data will be parsed statically during a build step, some restrictions
* are applied with respect to how minErr instances are created and called.
* Instances should have names of the form namespaceMinErr for a minErr created
- * using minErr('namespace') . Error codes, namespaces and template strings
+ * using minErr('namespace'). Error codes, namespaces and template strings
* should all be static strings, not variables or general expressions.
*
* @param {string} module The namespace to use for the new minErr instance.
@@ -67,32 +75,41 @@ function toDebugString(obj) {
function minErr(module, ErrorConstructor) {
ErrorConstructor = ErrorConstructor || Error;
- return function() {
- var SKIP_INDEXES = 2;
- var templateArgs = arguments,
- code = templateArgs[0],
+ var url = 'https://errors.angularjs.org/"1.8.2"/';
+ var regex = url.replace('.', '\\.') + '[\\s\\S]*';
+ var errRegExp = new RegExp(regex, 'g');
+
+ return function() {
+ var code = arguments[0],
+ template = arguments[1],
message = '[' + (module ? module + ':' : '') + code + '] ',
- template = templateArgs[1],
+ templateArgs = sliceArgs(arguments, 2).map(function(arg) {
+ return toDebugString(arg, minErrConfig.objectMaxDepth);
+ }),
paramPrefix, i;
+ // A minErr message has two parts: the message itself and the url that contains the
+ // encoded message.
+ // The message's parameters can contain other error messages which also include error urls.
+ // To prevent the messages from getting too long, we strip the error urls from the parameters.
+
message += template.replace(/\{\d+\}/g, function(match) {
- var index = +match.slice(1, -1),
- shiftedIndex = index + SKIP_INDEXES;
+ var index = +match.slice(1, -1);
- if (shiftedIndex < templateArgs.length) {
- return toDebugString(templateArgs[shiftedIndex]);
+ if (index < templateArgs.length) {
+ return templateArgs[index].replace(errRegExp, '');
}
return match;
});
- message += '\nhttp://errors.angularjs.org/1.5.8/' +
- (module ? module + '/' : '') + code;
+ message += '\n' + url + (module ? module + '/' : '') + code;
- for (i = SKIP_INDEXES, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') {
- message += paramPrefix + 'p' + (i - SKIP_INDEXES) + '=' +
- encodeURIComponent(toDebugString(templateArgs[i]));
+ if (minErrConfig.urlErrorParamsEnabled) {
+ for (i = 0, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') {
+ message += paramPrefix + 'p' + i + '=' + encodeURIComponent(templateArgs[i]);
+ }
}
return new ErrorConstructor(message);
@@ -105,7 +122,7 @@ function minErr(module, ErrorConstructor) {
* @module ng
* @description
*
- * Interface for configuring angular {@link angular.module modules}.
+ * Interface for configuring AngularJS {@link angular.module modules}.
*/
function setupModuleLoader(window) {
@@ -132,9 +149,9 @@ function setupModuleLoader(window) {
* @module ng
* @description
*
- * The `angular.module` is a global place for creating, registering and retrieving Angular
+ * The `angular.module` is a global place for creating, registering and retrieving AngularJS
* modules.
- * All modules (angular core or 3rd party) that should be available to an application must be
+ * All modules (AngularJS core or 3rd party) that should be available to an application must be
* registered using this mechanism.
*
* Passing one argument retrieves an existing {@link angular.Module},
@@ -178,6 +195,9 @@ function setupModuleLoader(window) {
* @returns {angular.Module} new module with the {@link angular.Module} api.
*/
return function module(name, requires, configFn) {
+
+ var info = {};
+
var assertNotHasOwnProperty = function(name, context) {
if (name === 'hasOwnProperty') {
throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);
@@ -190,9 +210,9 @@ function setupModuleLoader(window) {
}
return ensure(modules, name, function() {
if (!requires) {
- throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " +
- "the module name or forgot to load it. If registering a module ensure that you " +
- "specify the dependencies as the second argument.", name);
+ throw $injectorMinErr('nomod', 'Module \'{0}\' is not available! You either misspelled ' +
+ 'the module name or forgot to load it. If registering a module ensure that you ' +
+ 'specify the dependencies as the second argument.', name);
}
/** @type {!Array.<Array.<*>>} */
@@ -214,6 +234,45 @@ function setupModuleLoader(window) {
_runBlocks: runBlocks,
/**
+ * @ngdoc method
+ * @name angular.Module#info
+ * @module ng
+ *
+ * @param {Object=} info Information about the module
+ * @returns {Object|Module} The current info object for this module if called as a getter,
+ * or `this` if called as a setter.
+ *
+ * @description
+ * Read and write custom information about this module.
+ * For example you could put the version of the module in here.
+ *
+ * ```js
+ * angular.module('myModule', []).info({ version: '1.0.0' });
+ * ```
+ *
+ * The version could then be read back out by accessing the module elsewhere:
+ *
+ * ```
+ * var version = angular.module('myModule').info().version;
+ * ```
+ *
+ * You can also retrieve this information during runtime via the
+ * {@link $injector#modules `$injector.modules`} property:
+ *
+ * ```js
+ * var version = $injector.modules['myModule'].info().version;
+ * ```
+ */
+ info: function(value) {
+ if (isDefined(value)) {
+ if (!isObject(value)) throw ngMinErr('aobj', 'Argument \'{0}\' must be an object', 'value');
+ info = value;
+ return this;
+ }
+ return info;
+ },
+
+ /**
* @ngdoc property
* @name angular.Module#requires
* @module ng
@@ -302,7 +361,7 @@ function setupModuleLoader(window) {
* @description
* See {@link auto.$provide#decorator $provide.decorator()}.
*/
- decorator: invokeLaterAndSetModuleName('$provide', 'decorator'),
+ decorator: invokeLaterAndSetModuleName('$provide', 'decorator', configBlocks),
/**
* @ngdoc method
@@ -342,13 +401,13 @@ function setupModuleLoader(window) {
* @ngdoc method
* @name angular.Module#filter
* @module ng
- * @param {string} name Filter name - this must be a valid angular expression identifier
+ * @param {string} name Filter name - this must be a valid AngularJS expression identifier
* @param {Function} filterFactory Factory function for creating new instance of filter.
* @description
* See {@link ng.$filterProvider#register $filterProvider.register()}.
*
* <div class="alert alert-warning">
- * **Note:** Filter names must be valid angular {@link expression} identifiers, such as `uppercase` or `orderBy`.
+ * **Note:** Filter names must be valid AngularJS {@link expression} identifiers, such as `uppercase` or `orderBy`.
* Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace
* your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores
* (`myapp_subsection_filterx`).
@@ -385,7 +444,8 @@ function setupModuleLoader(window) {
* @ngdoc method
* @name angular.Module#component
* @module ng
- * @param {string} name Name of the component in camel-case (i.e. myComp which will match as my-comp)
+ * @param {string|Object} name Name of the component in camelCase (i.e. `myComp` which will match `<my-comp>`),
+ * or an object map of components where the keys are the names and the values are the component definition objects.
* @param {Object} options Component definition object (a simplified
* {@link ng.$compile#directive-definition-object directive definition object})
*
@@ -401,7 +461,13 @@ function setupModuleLoader(window) {
* @param {Function} configFn Execute this function on module load. Useful for service
* configuration.
* @description
- * Use this method to register work which needs to be performed on module loading.
+ * Use this method to configure services by injecting their
+ * {@link angular.Module#provider `providers`}, e.g. for adding routes to the
+ * {@link ngRoute.$routeProvider $routeProvider}.
+ *
+ * Note that you can only inject {@link angular.Module#provider `providers`} and
+ * {@link angular.Module#constant `constants`} into this function.
+ *
* For more about how to configure services, see
* {@link providers#provider-recipe Provider Recipe}.
*/
@@ -448,10 +514,11 @@ function setupModuleLoader(window) {
* @param {string} method
* @returns {angular.Module}
*/
- function invokeLaterAndSetModuleName(provider, method) {
+ function invokeLaterAndSetModuleName(provider, method, queue) {
+ if (!queue) queue = invokeQueue;
return function(recipeName, factoryFunction) {
if (factoryFunction && isFunction(factoryFunction)) factoryFunction.$$moduleName = name;
- invokeQueue.push([provider, method, arguments]);
+ queue.push([provider, method, arguments]);
return moduleInstance;
};
}
@@ -481,4 +548,3 @@ setupModuleLoader(window);
* } }
*/
angular.Module;
-