@angular-wave/angular.ts 0.0.6 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dist/angular-ts.cjs.js +1 -1
  2. package/dist/angular-ts.esm.js +1 -1
  3. package/dist/angular-ts.umd.js +1 -1
  4. package/docs/.cspell.yml +8 -0
  5. package/docs/.github/dependabot.yml +14 -0
  6. package/docs/.nvmrc +1 -0
  7. package/docs/CONTRIBUTING.md +28 -0
  8. package/docs/Dockerfile +4 -0
  9. package/docs/LICENSE +201 -0
  10. package/docs/README.md +184 -0
  11. package/docs/assets/scss/_variables_project.scss +6 -0
  12. package/docs/config.yaml +15 -0
  13. package/docs/content/en/_index.md +77 -0
  14. package/docs/content/en/about/featured-background.jpg +0 -0
  15. package/docs/content/en/about/index.md +35 -0
  16. package/docs/content/en/blog/_index.md +8 -0
  17. package/docs/content/en/blog/news/_index.md +4 -0
  18. package/docs/content/en/blog/news/first-post/featured-sunset-get.png +0 -0
  19. package/docs/content/en/blog/news/first-post/index.md +48 -0
  20. package/docs/content/en/blog/news/second-post.md +244 -0
  21. package/docs/content/en/blog/releases/_index.md +4 -0
  22. package/docs/content/en/blog/releases/in-depth-monoliths-detailed-spec.md +244 -0
  23. package/docs/content/en/community/_index.md +6 -0
  24. package/docs/content/en/docs/_index.md +29 -0
  25. package/docs/content/en/docs/concepts/_index.md +14 -0
  26. package/docs/content/en/docs/contribution-guidelines/_index.md +79 -0
  27. package/docs/content/en/docs/examples/_index.md +13 -0
  28. package/docs/content/en/docs/getting-started/_index.md +35 -0
  29. package/docs/content/en/docs/getting-started/example-page.md +240 -0
  30. package/docs/content/en/docs/overview/_index.md +36 -0
  31. package/docs/content/en/docs/reference/_index.md +12 -0
  32. package/docs/content/en/docs/reference/parameter-reference.md +211 -0
  33. package/docs/content/en/docs/tasks/Ponycopters/_index.md +12 -0
  34. package/docs/content/en/docs/tasks/Ponycopters/configuring-ponycopters.md +238 -0
  35. package/docs/content/en/docs/tasks/Ponycopters/launching-ponycopters.md +236 -0
  36. package/docs/content/en/docs/tasks/_index.md +21 -0
  37. package/docs/content/en/docs/tasks/beds.md +237 -0
  38. package/docs/content/en/docs/tasks/porridge.md +237 -0
  39. package/docs/content/en/docs/tasks/task.md +237 -0
  40. package/docs/content/en/docs/tutorials/_index.md +13 -0
  41. package/docs/content/en/docs/tutorials/multi-bear.md +236 -0
  42. package/docs/content/en/docs/tutorials/tutorial2.md +236 -0
  43. package/docs/content/en/featured-background.jpg +0 -0
  44. package/docs/content/en/search.md +4 -0
  45. package/docs/docker-compose.yaml +13 -0
  46. package/docs/docsy.work +5 -0
  47. package/docs/docsy.work.sum +0 -0
  48. package/docs/go.mod +5 -0
  49. package/docs/go.sum +6 -0
  50. package/docs/hugo-disabled.toml +221 -0
  51. package/docs/hugo.yaml +220 -0
  52. package/docs/layouts/404.html +7 -0
  53. package/docs/layouts/_default/_markup/render-heading.html +1 -0
  54. package/docs/netlify.toml +12 -0
  55. package/docs/package.json +42 -0
  56. package/package.json +1 -1
  57. package/src/core/compile.js +15 -168
  58. package/src/core/compile.md +51 -16
  59. package/src/core/filter.js +0 -110
  60. package/src/core/filter.md +132 -0
  61. package/src/core/interval.js +0 -126
  62. package/src/core/interval.md +123 -0
  63. package/src/core/location.js +1 -2
  64. package/src/core/sce.js +2 -13
  65. package/src/injector.js +0 -630
  66. package/src/injector.md +740 -0
  67. package/src/jqLite.js +1 -1
  68. package/src/loader.js +1 -15
  69. package/src/loader.md +13 -0
  70. package/test/jqlite.spec.js +4 -4
  71. package/test/messages/messages.spec.js +1 -1
  72. package/test/ng/compile.spec.js +118 -316
  73. package/test/ng/directive/form.spec.js +8 -8
  74. package/src/route-to-reg-exp.js +0 -41
@@ -0,0 +1,740 @@
1
+ /\*\*
2
+
3
+ - @ngdoc function
4
+ - @module ng
5
+ - @name angular.injector
6
+ - @kind function
7
+ -
8
+ - @description
9
+ - Creates an injector object that can be used for retrieving services as well as for
10
+ - dependency injection (see {@link guide/di dependency injection}).
11
+ -
12
+ - @param {Array.<string|Function>} modules A list of module functions or their aliases. See
13
+ - {@link angular.module}. The `ng` module must be explicitly added.
14
+ - @param {boolean=} [strictDi=false] Whether the injector should be in strict mode, which
15
+ - disallows argument name annotation inference.
16
+ - @returns {injector} Injector object. See {@link auto.$injector $injector}.
17
+ -
18
+ - @example
19
+ - Typical usage
20
+ - ```js
21
+
22
+ ```
23
+
24
+ - // create an injector
25
+ - var $injector = angular.injector(['ng']);
26
+ -
27
+ - // use the injector to kick off your application
28
+ - // use the type inference to auto inject arguments, or use implicit injection
29
+ - $injector.invoke(function($rootScope, $compile, $document) {
30
+ - $compile($document)($rootScope);
31
+ - $rootScope.$digest();
32
+ - });
33
+ - ```
34
+
35
+ ```
36
+
37
+ -
38
+ - Sometimes you want to get access to the injector of a currently running AngularJS app
39
+ - from outside AngularJS. Perhaps, you want to inject and compile some markup after the
40
+ - application has been bootstrapped. You can do this using the extra `injector()` added
41
+ - to JQuery/jqLite elements. See {@link angular.element}.
42
+ -
43
+ - \*This is fairly rare but could be the case if a third party library is injecting the
44
+ - markup.\*
45
+ -
46
+ - In the following example a new block of HTML containing a `ng-controller`
47
+ - directive is added to the end of the document body by JQuery. We then compile and link
48
+ - it into the current AngularJS scope.
49
+ -
50
+ - ```js
51
+
52
+ ```
53
+
54
+ - var $div = $('<div ng-controller="MyCtrl">{{content.label}}</div>');
55
+ - $(document.body).append($div);
56
+ -
57
+ - angular.element(document).injector().invoke(function($compile) {
58
+ - var scope = angular.element($div).scope();
59
+ - $compile($div)(scope);
60
+ - });
61
+ - ```
62
+ */
63
+ ```
64
+
65
+ /\*\*
66
+
67
+ - @ngdoc module
68
+ - @name auto
69
+ - @installation
70
+ - @description
71
+ -
72
+ - Implicit module which gets automatically added to each {@link auto.$injector $injector}.
73
+ \*/
74
+
75
+ ///////////////////////////////////////
76
+
77
+ /\*\*
78
+
79
+ - @ngdoc service
80
+ - @name $injector
81
+ -
82
+ - @description
83
+ -
84
+ - `$injector` is used to retrieve object instances as defined by
85
+ - {@link auto.$provide provider}, instantiate types, invoke methods,
86
+ - and load modules.
87
+ -
88
+ - The following always holds true:
89
+ -
90
+ - ```js
91
+
92
+ ```
93
+
94
+ - var $injector = angular.injector();
95
+ - expect($injector.get('$injector')).toBe($injector);
96
+ - expect($injector.invoke(function($injector) {
97
+ - return $injector;
98
+ - })).toBe($injector);
99
+ - ```
100
+
101
+ ```
102
+
103
+ -
104
+ - ## Injection Function Annotation
105
+ -
106
+ - JavaScript does not have annotations, and annotations are needed for dependency injection. The
107
+ - following are all valid ways of annotating function with injection arguments and are equivalent.
108
+ -
109
+ - ```js
110
+
111
+ ```
112
+
113
+ - // inferred (only works if code not minified/obfuscated)
114
+ - $injector.invoke(function(serviceA){});
115
+ -
116
+ - // annotated
117
+ - function explicit(serviceA) {};
118
+ - explicit.$inject = ['serviceA'];
119
+ - $injector.invoke(explicit);
120
+ -
121
+ - // inline
122
+ - $injector.invoke(['serviceA', function(serviceA){}]);
123
+ - ```
124
+
125
+ ```
126
+
127
+ -
128
+ - ### Inference
129
+ -
130
+ - In JavaScript calling `toString()` on a function returns the function definition. The definition
131
+ - can then be parsed and the function arguments can be extracted. This method of discovering
132
+ - annotations is disallowed when the injector is in strict mode.
133
+ - _NOTE:_ This does not work with minification, and obfuscation tools since these tools change the
134
+ - argument names.
135
+ -
136
+ - ### `$inject` Annotation
137
+ - By adding an `$inject` property onto a function the injection parameters can be specified.
138
+ -
139
+ - ### Inline
140
+ - As an array of injection names, where the last item in the array is the function to call.
141
+ \*/
142
+
143
+ /\*\*
144
+
145
+ - @ngdoc property
146
+ - @name $injector#modules
147
+ - @type {Object}
148
+ - @description
149
+ - A hash containing all the modules that have been loaded into the
150
+ - $injector.
151
+ -
152
+ - You can use this property to find out information about a module via the
153
+ - {@link angular.Module#info `myModule.info(...)`} method.
154
+ -
155
+ - For example:
156
+ -
157
+ - ```
158
+
159
+ ```
160
+
161
+ - var info = $injector.modules['ngAnimate'].info();
162
+ - ```
163
+
164
+ ```
165
+
166
+ -
167
+ - \*\*Do not use this property to attempt to modify the modules after the application
168
+ - has been bootstrapped.\*\*
169
+ \*/
170
+
171
+ /\*\*
172
+
173
+ - @ngdoc method
174
+ - @name $injector#get
175
+ -
176
+ - @description
177
+ - Return an instance of the service.
178
+ -
179
+ - @param {string} name The name of the instance to retrieve.
180
+ - @param {string=} caller An optional string to provide the origin of the function call for error messages.
181
+ - @return {_} The instance.
182
+ _/
183
+
184
+ /\*\*
185
+
186
+ - @ngdoc method
187
+ - @name $injector#invoke
188
+ -
189
+ - @description
190
+ - Invoke the method and supply the method arguments from the `$injector`.
191
+ -
192
+ - @param {Function|Array.<string|Function>} fn The injectable function to invoke. Function parameters are
193
+ - injected according to the {@link guide/di $inject Annotation} rules.
194
+ - @param {Object=} self The `this` for the invoked method.
195
+ - @param {Object=} locals Optional object. If preset then any argument names are read from this
196
+ - object first, before the `$injector` is consulted.
197
+ - @returns {_} the value returned by the invoked `fn` function.
198
+ _/
199
+
200
+ /\*\*
201
+
202
+ - @ngdoc method
203
+ - @name $injector#has
204
+ -
205
+ - @description
206
+ - Allows the user to query if the particular service exists.
207
+ -
208
+ - @param {string} name Name of the service to query.
209
+ - @returns {boolean} `true` if injector has given service.
210
+ \*/
211
+
212
+ /\*\*
213
+
214
+ - @ngdoc method
215
+ - @name $injector#instantiate
216
+ - @description
217
+ - Create a new instance of JS type. The method takes a constructor function, invokes the new
218
+ - operator, and supplies all of the arguments to the constructor function as specified by the
219
+ - constructor annotation.
220
+ -
221
+ - @param {Function} Type Annotated constructor function.
222
+ - @param {Object=} locals Optional object. If preset then any argument names are read from this
223
+ - object first, before the `$injector` is consulted.
224
+ - @returns {Object} new instance of `Type`.
225
+ \*/
226
+
227
+ /\*\*
228
+
229
+ - @ngdoc method
230
+ - @name $injector#annotate
231
+ -
232
+ - @description
233
+ - Returns an array of service names which the function is requesting for injection. This API is
234
+ - used by the injector to determine which services need to be injected into the function when the
235
+ - function is invoked. There are three ways in which the function can be annotated with the needed
236
+ - dependencies.
237
+ -
238
+ - #### Argument names
239
+ -
240
+ - The simplest form is to extract the dependencies from the arguments of the function. This is done
241
+ - by converting the function into a string using `toString()` method and extracting the argument
242
+ - names.
243
+ - ```js
244
+
245
+ ```
246
+
247
+ - // Given
248
+ - function MyController($scope, $route) {
249
+ - // ...
250
+ - }
251
+ -
252
+ - // Then
253
+ - expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
254
+ - ```
255
+
256
+ ```
257
+
258
+ -
259
+ - You can disallow this method by using strict injection mode.
260
+ -
261
+ - This method does not work with code minification / obfuscation. For this reason the following
262
+ - annotation strategies are supported.
263
+ -
264
+ - #### The `$inject` property
265
+ -
266
+ - If a function has an `$inject` property and its value is an array of strings, then the strings
267
+ - represent names of services to be injected into the function.
268
+ - ```js
269
+
270
+ ```
271
+
272
+ - // Given
273
+ - var MyController = function(obfuscatedScope, obfuscatedRoute) {
274
+ - // ...
275
+ - }
276
+ - // Define function dependencies
277
+ - MyController['$inject'] = ['$scope', '$route'];
278
+ -
279
+ - // Then
280
+ - expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
281
+ - ```
282
+
283
+ ```
284
+
285
+ -
286
+ - #### The array notation
287
+ -
288
+ - It is often desirable to inline Injected functions and that's when setting the `$inject` property
289
+ - is very inconvenient. In these situations using the array notation to specify the dependencies in
290
+ - a way that survives minification is a better choice:
291
+ -
292
+ - ```js
293
+
294
+ ```
295
+
296
+ - // We wish to write this (not minification / obfuscation safe)
297
+ - injector.invoke(function($compile, $rootScope) {
298
+ - // ...
299
+ - });
300
+ -
301
+ - // We are forced to write break inlining
302
+ - var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) {
303
+ - // ...
304
+ - };
305
+ - tmpFn.$inject = ['$compile', '$rootScope'];
306
+ - injector.invoke(tmpFn);
307
+ -
308
+ - // To better support inline function the inline annotation is supported
309
+ - injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) {
310
+ - // ...
311
+ - }]);
312
+ -
313
+ - // Therefore
314
+ - expect(injector.annotate(
315
+ - ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}])
316
+ - ).toEqual(['$compile', '$rootScope']);
317
+ - ```
318
+
319
+ ```
320
+
321
+ -
322
+ - @param {Function|Array.<string|Function>} fn Function for which dependent service names need to
323
+ - be retrieved as described above.
324
+ -
325
+ - @param {boolean=} [strictDi=false] Disallow argument name annotation inference.
326
+ -
327
+ - @returns {Array.<string>} The names of the services which the function requires.
328
+ \*/
329
+ /\*\*
330
+ - @ngdoc method
331
+ - @name $injector#loadNewModules
332
+ -
333
+ - @description
334
+ -
335
+ - Add the specified modules to the current injector.
336
+ -
337
+ - This method will add each of the injectables to the injector and execute all of the config and run
338
+ - blocks for each module passed to the method.
339
+ -
340
+ - If a module has already been loaded into the injector then it will not be loaded again.
341
+ -
342
+ - - The application developer is responsible for loading the code containing the modules; and for
343
+ - ensuring that lazy scripts are not downloaded and executed more often that desired.
344
+ - - Previously compiled HTML will not be affected by newly loaded directives, filters and components.
345
+ - - Modules cannot be unloaded.
346
+ -
347
+ - You can use {@link $injector#modules `$injector.modules`} to check whether a module has been loaded
348
+ - into the injector, which may indicate whether the script has been executed already.
349
+ -
350
+ - @example
351
+ - Here is an example of loading a bundle of modules, with a utility method called `getScript`:
352
+ -
353
+ - ```javascript
354
+
355
+ ```
356
+
357
+ - app.factory('loadModule', function($injector) {
358
+ - return function loadModule(moduleName, bundleUrl) {
359
+ - return getScript(bundleUrl).then(function() { $injector.loadNewModules([moduleName]); });
360
+ - };
361
+ - })
362
+ - ```
363
+
364
+ ```
365
+
366
+ -
367
+ - @param {Array<String|Function|Array>=} mods an array of modules to load into the application.
368
+ - Each item in the array should be the name of a predefined module or a (DI annotated)
369
+ - function that will be invoked by the injector as a `config` block.
370
+ - See: {@link angular.module modules}
371
+ \*/
372
+
373
+ /\*\*
374
+
375
+ - @ngdoc service
376
+ - @name $provide
377
+ -
378
+ - @description
379
+ -
380
+ - The {@link auto.$provide $provide} service has a number of methods for registering components
381
+ - with the {@link auto.$injector $injector}. Many of these functions are also exposed on
382
+ - {@link angular.Module}.
383
+ -
384
+ - An AngularJS **service** is a singleton object created by a **service factory**. These \*\*service
385
+ - factories** are functions which, in turn, are created by a **service provider\*\*.
386
+ - The **service providers** are constructor functions. When instantiated they must contain a
387
+ - property called `$get`, which holds the **service factory** function.
388
+ -
389
+ - When you request a service, the {@link auto.$injector $injector} is responsible for finding the
390
+ - correct **service provider**, instantiating it and then calling its `$get` **service factory**
391
+ - function to get the instance of the **service**.
392
+ -
393
+ - Often services have no configuration options and there is no need to add methods to the service
394
+ - provider. The provider will be no more than a constructor function with a `$get` property. For
395
+ - these cases the {@link auto.$provide $provide} service has additional helper methods to register
396
+ - services without specifying a provider.
397
+ -
398
+ - - {@link auto.$provide#provider provider(name, provider)} - registers a **service provider** with the
399
+ - {@link auto.$injector $injector}
400
+ - - {@link auto.$provide#constant constant(name, obj)} - registers a value/object that can be accessed by
401
+ - providers and services.
402
+ - - {@link auto.$provide#value value(name, obj)} - registers a value/object that can only be accessed by
403
+ - services, not providers.
404
+ - - {@link auto.$provide#factory factory(name, fn)} - registers a service **factory function**
405
+ - that will be wrapped in a **service provider** object, whose `$get` property will contain the
406
+ - given factory function.
407
+ - - {@link auto.$provide#service service(name, Fn)} - registers a **constructor function**
408
+ - that will be wrapped in a **service provider** object, whose `$get` property will instantiate
409
+ - a new object using the given constructor function.
410
+ - - {@link auto.$provide#decorator decorator(name, decorFn)} - registers a **decorator function** that
411
+ - will be able to modify or replace the implementation of another service.
412
+ -
413
+ - See the individual methods for more information and examples.
414
+ \*/
415
+
416
+ /\*\*
417
+
418
+ - @ngdoc method
419
+ - @name $provide#provider
420
+ - @description
421
+ -
422
+ - Register a **provider function** with the {@link auto.$injector $injector}. Provider functions
423
+ - are constructor functions, whose instances are responsible for "providing" a factory for a
424
+ - service.
425
+ -
426
+ - Service provider names start with the name of the service they provide followed by `Provider`.
427
+ - For example, the {@link ng.$log $log} service has a provider called
428
+ - {@link ng.$logProvider $logProvider}.
429
+ -
430
+ - Service provider objects can have additional methods which allow configuration of the provider
431
+ - and its service. Importantly, you can configure what kind of service is created by the `$get`
432
+ - method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a
433
+ - method {@link ng.$logProvider#debugEnabled debugEnabled}
434
+ - which lets you specify whether the {@link ng.$log $log} service will log debug messages to the
435
+ - console or not.
436
+ -
437
+ - It is possible to inject other providers into the provider function,
438
+ - but the injected provider must have been defined before the one that requires it.
439
+ -
440
+ - @param {string} name The name of the instance. NOTE: the provider will be available under `name +
441
+ 'Provider'` key.
442
+ - @param {(Object|function())} provider If the provider is:
443
+ -
444
+ - - `Object`: then it should have a `$get` method. The `$get` method will be invoked using
445
+ - {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created.
446
+ - - `Constructor`: a new instance of the provider will be created using
447
+ - {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`.
448
+ -
449
+ - @returns {Object} registered provider instance
450
+
451
+ - @example
452
+ -
453
+ - The following example shows how to create a simple event tracking service and register it using
454
+ - {@link auto.$provide#provider $provide.provider()}.
455
+ -
456
+ - ```js
457
+
458
+ ```
459
+
460
+ - // Define the eventTracker provider
461
+ - function EventTrackerProvider() {
462
+ - var trackingUrl = '/track';
463
+ -
464
+ - // A provider method for configuring where the tracked events should been saved
465
+ - this.setTrackingUrl = function(url) {
466
+ - trackingUrl = url;
467
+ - };
468
+ -
469
+ - // The service factory function
470
+ - this.$get = ['$http', function($http) {
471
+ - var trackedEvents = {};
472
+ - return {
473
+ - // Call this to track an event
474
+ - event: function(event) {
475
+ - var count = trackedEvents[event] || 0;
476
+ - count += 1;
477
+ - trackedEvents[event] = count;
478
+ - return count;
479
+ - },
480
+ - // Call this to save the tracked events to the trackingUrl
481
+ - save: function() {
482
+ - $http.post(trackingUrl, trackedEvents);
483
+ - }
484
+ - };
485
+ - }];
486
+ - }
487
+ -
488
+ - describe('eventTracker', function() {
489
+ - var postSpy;
490
+ -
491
+ - beforeEach(module(function($provide) {
492
+ - // Register the eventTracker provider
493
+ - $provide.provider('eventTracker', EventTrackerProvider);
494
+ - }));
495
+ -
496
+ - beforeEach(module(function(eventTrackerProvider) {
497
+ - // Configure eventTracker provider
498
+ - eventTrackerProvider.setTrackingUrl('/custom-track');
499
+ - }));
500
+ -
501
+ - it('tracks events', inject(function(eventTracker) {
502
+ - expect(eventTracker.event('login')).toEqual(1);
503
+ - expect(eventTracker.event('login')).toEqual(2);
504
+ - }));
505
+ -
506
+ - it('saves to the tracking url', inject(function(eventTracker, $http) {
507
+ - postSpy = spyOn($http, 'post');
508
+ - eventTracker.event('login');
509
+ - eventTracker.save();
510
+ - expect(postSpy).toHaveBeenCalled();
511
+ - expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track');
512
+ - expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track');
513
+ - expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 });
514
+ - }));
515
+ - });
516
+ - ```
517
+ */
518
+ ```
519
+
520
+ /\*\*
521
+
522
+ - @ngdoc method
523
+ - @name $provide#factory
524
+ - @description
525
+ -
526
+ - Register a **service factory**, which will be called to return the service instance.
527
+ - This is short for registering a service where its provider consists of only a `$get` property,
528
+ - which is the given service factory function.
529
+ - You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to
530
+ - configure your service in a provider.
531
+ -
532
+ - @param {string} name The name of the instance.
533
+ - @param {Function|Array.<string|Function>} $getFn The injectable $getFn for the instance creation.
534
+ - Internally this is a short hand for `$provide.provider(name, {$get: $getFn})`.
535
+ - @returns {Object} registered provider instance
536
+ -
537
+ - @example
538
+ - Here is an example of registering a service
539
+ - ```js
540
+
541
+ ```
542
+
543
+ - $provide.factory('ping', ['$http', function($http) {
544
+ - return function ping() {
545
+ - return $http.send('/ping');
546
+ - };
547
+ - }]);
548
+ - ```
549
+
550
+ ```
551
+
552
+ - You would then inject and use this service like this:
553
+ - ```js
554
+
555
+ ```
556
+
557
+ - someModule.controller('Ctrl', ['ping', function(ping) {
558
+ - ping();
559
+ - }]);
560
+ - ```
561
+ */
562
+ ```
563
+
564
+ /\*\*
565
+
566
+ - @ngdoc method
567
+ - @name $provide#service
568
+ - @description
569
+ -
570
+ - Register a **service constructor**, which will be invoked with `new` to create the service
571
+ - instance.
572
+ - This is short for registering a service where its provider's `$get` property is a factory
573
+ - function that returns an instance instantiated by the injector from the service constructor
574
+ - function.
575
+ -
576
+ - Internally it looks a bit like this:
577
+ -
578
+ - ```
579
+
580
+ ```
581
+
582
+ - {
583
+ - $get: function() {
584
+ - return $injector.instantiate(constructor);
585
+ - }
586
+ - }
587
+ - ```
588
+
589
+ ```
590
+
591
+ -
592
+ -
593
+ - You should use {@link auto.$provide#service $provide.service(class)} if you define your service
594
+ - as a type/class.
595
+ -
596
+ - @param {string} name The name of the instance.
597
+ - @param {Function|Array.<string|Function>} constructor An injectable class (constructor function)
598
+ - that will be instantiated.
599
+ - @returns {Object} registered provider instance
600
+ -
601
+ - @example
602
+ - Here is an example of registering a service using
603
+ - {@link auto.$provide#service $provide.service(class)}.
604
+ - ```js
605
+
606
+ ```
607
+
608
+ - var Ping = function($http) {
609
+ - this.$http = $http;
610
+ - };
611
+ -
612
+ - Ping.$inject = ['$http'];
613
+ -
614
+ - Ping.prototype.send = function() {
615
+ - return this.$http.get('/ping');
616
+ - };
617
+ - $provide.service('ping', Ping);
618
+ - ```
619
+
620
+ ```
621
+
622
+ - You would then inject and use this service like this:
623
+ - ```js
624
+
625
+ ```
626
+
627
+ - someModule.controller('Ctrl', ['ping', function(ping) {
628
+ - ping.send();
629
+ - }]);
630
+ - ```
631
+ */
632
+ ```
633
+
634
+ /\*\*
635
+
636
+ - @ngdoc method
637
+ - @name $provide#value
638
+ - @description
639
+ -
640
+ - Register a **value service** with the {@link auto.$injector $injector}, such as a string, a
641
+ - number, an array, an object or a function. This is short for registering a service where its
642
+ - provider's `$get` property is a factory function that takes no arguments and returns the \*\*value
643
+ - service\*\*. That also means it is not possible to inject other services into a value service.
644
+ -
645
+ - Value services are similar to constant services, except that they cannot be injected into a
646
+ - module configuration function (see {@link angular.Module#config}) but they can be overridden by
647
+ - an AngularJS {@link auto.$provide#decorator decorator}.
648
+ -
649
+ - @param {string} name The name of the instance.
650
+ - @param {\*} value The value.
651
+ - @returns {Object} registered provider instance
652
+ -
653
+ - @example
654
+ - Here are some examples of creating value services.
655
+ - ```js
656
+
657
+ ```
658
+
659
+ - $provide.value('ADMIN_USER', 'admin');
660
+ -
661
+ - $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 });
662
+ -
663
+ - $provide.value('halfOf', function(value) {
664
+ - return value / 2;
665
+ - });
666
+ - ```
667
+ */
668
+ ```
669
+
670
+ /\*\*
671
+
672
+ - @ngdoc method
673
+ - @name $provide#constant
674
+ - @description
675
+ -
676
+ - Register a **constant service** with the {@link auto.$injector $injector}, such as a string,
677
+ - a number, an array, an object or a function. Like the {@link auto.$provide#value value}, it is not
678
+ - possible to inject other services into a constant.
679
+ -
680
+ - But unlike {@link auto.$provide#value value}, a constant can be
681
+ - injected into a module configuration function (see {@link angular.Module#config}) and it cannot
682
+ - be overridden by an AngularJS {@link auto.$provide#decorator decorator}.
683
+ -
684
+ - @param {string} name The name of the constant.
685
+ - @param {\*} value The constant value.
686
+ - @returns {Object} registered instance
687
+ -
688
+ - @example
689
+ - Here a some examples of creating constants:
690
+ - ```js
691
+
692
+ ```
693
+
694
+ - $provide.constant('SHARD_HEIGHT', 306);
695
+ -
696
+ - $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']);
697
+ -
698
+ - $provide.constant('double', function(value) {
699
+ - return value * 2;
700
+ - });
701
+ - ```
702
+ */
703
+ ```
704
+
705
+ /\*\*
706
+
707
+ - @ngdoc method
708
+ - @name $provide#decorator
709
+ - @description
710
+ -
711
+ - Register a **decorator function** with the {@link auto.$injector $injector}. A decorator function
712
+ - intercepts the creation of a service, allowing it to override or modify the behavior of the
713
+ - service. The return value of the decorator function may be the original service, or a new service
714
+ - that replaces (or wraps and delegates to) the original service.
715
+ -
716
+ - You can find out more about using decorators in the {@link guide/decorators} guide.
717
+ -
718
+ - @param {string} name The name of the service to decorate.
719
+ - @param {Function|Array.<string|Function>} decorator This function will be invoked when the service needs to be
720
+ - provided and should return the decorated service instance. The function is called using
721
+ - the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable.
722
+ - Local injection arguments:
723
+ -
724
+ - - `$delegate` - The original service instance, which can be replaced, monkey patched, configured,
725
+ - decorated or delegated to.
726
+ -
727
+ - @example
728
+ - Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting
729
+ - calls to {@link ng.$log#error $log.warn()}.
730
+ - ```js
731
+
732
+ ```
733
+
734
+ - $provide.decorator('$log', ['$delegate', function($delegate) {
735
+ - $delegate.warn = $delegate.error;
736
+ - return $delegate;
737
+ - }]);
738
+ - ```
739
+ */
740
+ ```