@angular/core 20.0.0-rc.1 → 20.0.0-rc.2

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 (75) hide show
  1. package/{api.d-BcbEQ58q.d.ts → api.d-B0vztftH.d.ts} +15 -15
  2. package/{chrome_dev_tools_performance.d-CARNn07P.d.ts → chrome_dev_tools_performance.d-DvzAxqBc.d.ts} +5 -1
  3. package/{discovery.d-MmZhhuxb.d.ts → discovery.d-Cf_r2Ojk.d.ts} +6 -13
  4. package/event_dispatcher.d-BReQpZfC.d.ts +1 -1
  5. package/fesm2022/attribute-BWp59EjE.mjs +1 -1
  6. package/fesm2022/attribute-BWp59EjE.mjs.map +1 -1
  7. package/fesm2022/core.mjs +15 -9
  8. package/fesm2022/core.mjs.map +1 -1
  9. package/fesm2022/{debug_node-BTSSF0Vj.mjs → debug_node-Nc-zr65s.mjs} +12163 -12293
  10. package/fesm2022/debug_node-Nc-zr65s.mjs.map +1 -0
  11. package/fesm2022/primitives/di.mjs +1 -1
  12. package/fesm2022/primitives/di.mjs.map +1 -1
  13. package/fesm2022/primitives/event-dispatch.mjs +1 -1
  14. package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
  15. package/fesm2022/primitives/signals.mjs +1 -1
  16. package/fesm2022/primitives/signals.mjs.map +1 -1
  17. package/fesm2022/{resource-DdxAP6ca.mjs → resource-DOwetGLU.mjs} +64 -14
  18. package/fesm2022/resource-DOwetGLU.mjs.map +1 -0
  19. package/fesm2022/{root_effect_scheduler-CX0Q-uCT.mjs → root_effect_scheduler-BgGHQ80j.mjs} +26 -16
  20. package/fesm2022/root_effect_scheduler-BgGHQ80j.mjs.map +1 -0
  21. package/fesm2022/rxjs-interop.mjs +27 -12
  22. package/fesm2022/rxjs-interop.mjs.map +1 -1
  23. package/fesm2022/signal-ePSl6jXn.mjs +1 -1
  24. package/fesm2022/signal-ePSl6jXn.mjs.map +1 -1
  25. package/fesm2022/testing.mjs +43 -26
  26. package/fesm2022/testing.mjs.map +1 -1
  27. package/fesm2022/untracked-2ouAFbCz.mjs +1 -1
  28. package/fesm2022/untracked-2ouAFbCz.mjs.map +1 -1
  29. package/fesm2022/weak_ref-BaIq-pgY.mjs +1 -1
  30. package/fesm2022/weak_ref-BaIq-pgY.mjs.map +1 -1
  31. package/graph.d-BcIOep_B.d.ts +1 -1
  32. package/index.d.ts +204 -313
  33. package/package.json +3 -3
  34. package/primitives/di/index.d.ts +1 -1
  35. package/primitives/event-dispatch/index.d.ts +1 -1
  36. package/primitives/signals/index.d.ts +1 -1
  37. package/rxjs-interop/index.d.ts +3 -3
  38. package/schematics/bundles/{apply_import_manager-BdH8vaIZ.js → apply_import_manager-BqwxKJiu.cjs} +3 -3
  39. package/schematics/bundles/{change_tracker-C_neAOvN.js → change_tracker-B1qegJFu.cjs} +3 -3
  40. package/schematics/bundles/{checker-DqG0JVTu.js → checker-DmucNdBi.cjs} +55 -45
  41. package/schematics/bundles/{cleanup-unused-imports.js → cleanup-unused-imports.cjs} +26 -55
  42. package/schematics/bundles/{compiler-CWuG67kz.js → compiler-DPq1iS19.cjs} +92 -86
  43. package/schematics/bundles/{compiler_host-CAfDJO3W.js → compiler_host-CAfDJO3W.cjs} +1 -1
  44. package/schematics/bundles/{control-flow-migration.js → control-flow-migration.cjs} +4 -4
  45. package/schematics/bundles/{document-core.js → document-core.cjs} +8 -8
  46. package/schematics/bundles/{imports-CIX-JgAN.js → imports-CIX-JgAN.cjs} +1 -1
  47. package/schematics/bundles/{index-CGYcUmPq.js → index-1H-qYSW6.cjs} +80 -34
  48. package/schematics/bundles/{index-DWcLBEg_.js → index-CFmTQ_wx.cjs} +29 -20
  49. package/schematics/bundles/{inject-flags.js → inject-flags.cjs} +8 -8
  50. package/schematics/bundles/{inject-migration.js → inject-migration.cjs} +9 -9
  51. package/schematics/bundles/{leading_space-D9nQ8UQC.js → leading_space-D9nQ8UQC.cjs} +1 -1
  52. package/schematics/bundles/{migrate_ts_type_references-DAudyiEk.js → migrate_ts_type_references-B2aJNuIK.cjs} +7 -7
  53. package/schematics/bundles/{ng_decorators-DznZ5jMl.js → ng_decorators-B5HCqr20.cjs} +2 -2
  54. package/schematics/bundles/{nodes-B16H9JUd.js → nodes-B16H9JUd.cjs} +1 -1
  55. package/schematics/bundles/{output-migration.js → output-migration.cjs} +8 -8
  56. package/schematics/bundles/{project_paths-B3YG5aUz.js → project_paths-DmvzlTQL.cjs} +71 -42
  57. package/schematics/bundles/{project_tsconfig_paths-CDVxT6Ov.js → project_tsconfig_paths-CDVxT6Ov.cjs} +1 -1
  58. package/schematics/bundles/{property_name-BBwFuqMe.js → property_name-BBwFuqMe.cjs} +1 -1
  59. package/schematics/bundles/{route-lazy-loading.js → route-lazy-loading.cjs} +7 -7
  60. package/schematics/bundles/{self-closing-tags-migration.js → self-closing-tags-migration.cjs} +12 -26
  61. package/schematics/bundles/{signal-input-migration.js → signal-input-migration.cjs} +20 -16
  62. package/schematics/bundles/{signal-queries-migration.js → signal-queries-migration.cjs} +10 -10
  63. package/schematics/bundles/{signals.js → signals.cjs} +13 -13
  64. package/schematics/bundles/{standalone-migration.js → standalone-migration.cjs} +11 -11
  65. package/schematics/bundles/{symbol-VPWguRxr.js → symbol-VPWguRxr.cjs} +1 -1
  66. package/schematics/bundles/{test-bed-get.js → test-bed-get.cjs} +8 -8
  67. package/schematics/collection.json +9 -9
  68. package/schematics/migrations.json +4 -4
  69. package/signal.d-D6VJ67xi.d.ts +1 -1
  70. package/testing/index.d.ts +18 -4
  71. package/weak_ref.d-eGOEP9S1.d.ts +1 -1
  72. package/fesm2022/debug_node-BTSSF0Vj.mjs.map +0 -1
  73. package/fesm2022/resource-DdxAP6ca.mjs.map +0 -1
  74. package/fesm2022/root_effect_scheduler-CX0Q-uCT.mjs.map +0 -1
  75. package/schematics/package.json +0 -3
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.0.0-rc.1
3
+ * @license Angular v20.0.0-rc.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -496,6 +496,28 @@ function parseSelectorToR3Selector(selector) {
496
496
  return selector ? CssSelector.parse(selector).map(parserSelectorToR3Selector) : [];
497
497
  }
498
498
 
499
+ exports.FactoryTarget = void 0;
500
+ (function (FactoryTarget) {
501
+ FactoryTarget[FactoryTarget["Directive"] = 0] = "Directive";
502
+ FactoryTarget[FactoryTarget["Component"] = 1] = "Component";
503
+ FactoryTarget[FactoryTarget["Injectable"] = 2] = "Injectable";
504
+ FactoryTarget[FactoryTarget["Pipe"] = 3] = "Pipe";
505
+ FactoryTarget[FactoryTarget["NgModule"] = 4] = "NgModule";
506
+ })(exports.FactoryTarget || (exports.FactoryTarget = {}));
507
+ var R3TemplateDependencyKind;
508
+ (function (R3TemplateDependencyKind) {
509
+ R3TemplateDependencyKind[R3TemplateDependencyKind["Directive"] = 0] = "Directive";
510
+ R3TemplateDependencyKind[R3TemplateDependencyKind["Pipe"] = 1] = "Pipe";
511
+ R3TemplateDependencyKind[R3TemplateDependencyKind["NgModule"] = 2] = "NgModule";
512
+ })(R3TemplateDependencyKind || (R3TemplateDependencyKind = {}));
513
+ var ViewEncapsulation;
514
+ (function (ViewEncapsulation) {
515
+ ViewEncapsulation[ViewEncapsulation["Emulated"] = 0] = "Emulated";
516
+ // Historically the 1 value was for `Native` encapsulation which has been removed as of v11.
517
+ ViewEncapsulation[ViewEncapsulation["None"] = 2] = "None";
518
+ ViewEncapsulation[ViewEncapsulation["ShadowDom"] = 3] = "ShadowDom";
519
+ })(ViewEncapsulation || (ViewEncapsulation = {}));
520
+
499
521
  /**
500
522
  * A lazily created TextEncoder instance for converting strings into UTF-8 bytes
501
523
  */
@@ -2532,42 +2554,6 @@ class Identifiers {
2532
2554
  moduleName: CORE,
2533
2555
  };
2534
2556
  static attribute = { name: 'ɵɵattribute', moduleName: CORE };
2535
- static attributeInterpolate1 = {
2536
- name: 'ɵɵattributeInterpolate1',
2537
- moduleName: CORE,
2538
- };
2539
- static attributeInterpolate2 = {
2540
- name: 'ɵɵattributeInterpolate2',
2541
- moduleName: CORE,
2542
- };
2543
- static attributeInterpolate3 = {
2544
- name: 'ɵɵattributeInterpolate3',
2545
- moduleName: CORE,
2546
- };
2547
- static attributeInterpolate4 = {
2548
- name: 'ɵɵattributeInterpolate4',
2549
- moduleName: CORE,
2550
- };
2551
- static attributeInterpolate5 = {
2552
- name: 'ɵɵattributeInterpolate5',
2553
- moduleName: CORE,
2554
- };
2555
- static attributeInterpolate6 = {
2556
- name: 'ɵɵattributeInterpolate6',
2557
- moduleName: CORE,
2558
- };
2559
- static attributeInterpolate7 = {
2560
- name: 'ɵɵattributeInterpolate7',
2561
- moduleName: CORE,
2562
- };
2563
- static attributeInterpolate8 = {
2564
- name: 'ɵɵattributeInterpolate8',
2565
- moduleName: CORE,
2566
- };
2567
- static attributeInterpolateV = {
2568
- name: 'ɵɵattributeInterpolateV',
2569
- moduleName: CORE,
2570
- };
2571
2557
  static classProp = { name: 'ɵɵclassProp', moduleName: CORE };
2572
2558
  static elementContainerStart = {
2573
2559
  name: 'ɵɵelementContainerStart',
@@ -2689,6 +2675,46 @@ class Identifiers {
2689
2675
  name: 'ɵɵstylePropInterpolateV',
2690
2676
  moduleName: CORE,
2691
2677
  };
2678
+ static interpolate = {
2679
+ name: 'ɵɵinterpolate',
2680
+ moduleName: CORE,
2681
+ };
2682
+ static interpolate1 = {
2683
+ name: 'ɵɵinterpolate1',
2684
+ moduleName: CORE,
2685
+ };
2686
+ static interpolate2 = {
2687
+ name: 'ɵɵinterpolate2',
2688
+ moduleName: CORE,
2689
+ };
2690
+ static interpolate3 = {
2691
+ name: 'ɵɵinterpolate3',
2692
+ moduleName: CORE,
2693
+ };
2694
+ static interpolate4 = {
2695
+ name: 'ɵɵinterpolate4',
2696
+ moduleName: CORE,
2697
+ };
2698
+ static interpolate5 = {
2699
+ name: 'ɵɵinterpolate5',
2700
+ moduleName: CORE,
2701
+ };
2702
+ static interpolate6 = {
2703
+ name: 'ɵɵinterpolate6',
2704
+ moduleName: CORE,
2705
+ };
2706
+ static interpolate7 = {
2707
+ name: 'ɵɵinterpolate7',
2708
+ moduleName: CORE,
2709
+ };
2710
+ static interpolate8 = {
2711
+ name: 'ɵɵinterpolate8',
2712
+ moduleName: CORE,
2713
+ };
2714
+ static interpolateV = {
2715
+ name: 'ɵɵinterpolateV',
2716
+ moduleName: CORE,
2717
+ };
2692
2718
  static nextContext = { name: 'ɵɵnextContext', moduleName: CORE };
2693
2719
  static resetView = { name: 'ɵɵresetView', moduleName: CORE };
2694
2720
  static templateCreate = { name: 'ɵɵtemplate', moduleName: CORE };
@@ -2867,6 +2893,10 @@ class Identifiers {
2867
2893
  static forwardRef = { name: 'forwardRef', moduleName: CORE };
2868
2894
  static resolveForwardRef = { name: 'resolveForwardRef', moduleName: CORE };
2869
2895
  static replaceMetadata = { name: 'ɵɵreplaceMetadata', moduleName: CORE };
2896
+ static getReplaceMetadataURL = {
2897
+ name: 'ɵɵgetReplaceMetadataURL',
2898
+ moduleName: CORE,
2899
+ };
2870
2900
  static ɵɵdefineInjectable = { name: 'ɵɵdefineInjectable', moduleName: CORE };
2871
2901
  static declareInjectable = { name: 'ɵɵngDeclareInjectable', moduleName: CORE };
2872
2902
  static InjectableDeclaration = {
@@ -3882,14 +3912,6 @@ var R3FactoryDelegateType;
3882
3912
  R3FactoryDelegateType[R3FactoryDelegateType["Class"] = 0] = "Class";
3883
3913
  R3FactoryDelegateType[R3FactoryDelegateType["Function"] = 1] = "Function";
3884
3914
  })(R3FactoryDelegateType || (R3FactoryDelegateType = {}));
3885
- exports.FactoryTarget = void 0;
3886
- (function (FactoryTarget) {
3887
- FactoryTarget[FactoryTarget["Directive"] = 0] = "Directive";
3888
- FactoryTarget[FactoryTarget["Component"] = 1] = "Component";
3889
- FactoryTarget[FactoryTarget["Injectable"] = 2] = "Injectable";
3890
- FactoryTarget[FactoryTarget["Pipe"] = 3] = "Pipe";
3891
- FactoryTarget[FactoryTarget["NgModule"] = 4] = "NgModule";
3892
- })(exports.FactoryTarget || (exports.FactoryTarget = {}));
3893
3915
  /**
3894
3916
  * Construct a factory function expression for the given `R3FactoryMetadata`.
3895
3917
  */
@@ -23468,13 +23490,10 @@ function propertyInterpolate(name, strings, expressions, sanitizer, sourceSpan)
23468
23490
  }
23469
23491
  return callVariadicInstruction(PROPERTY_INTERPOLATE_CONFIG, [literal(name)], interpolationArgs, extraArgs, sourceSpan);
23470
23492
  }
23471
- function attributeInterpolate(name, strings, expressions, sanitizer, sourceSpan) {
23493
+ function attributeInterpolate(name, strings, expressions, sanitizer, namespace, sourceSpan) {
23472
23494
  const interpolationArgs = collateInterpolationArgs(strings, expressions);
23473
- const extraArgs = [];
23474
- if (sanitizer !== null) {
23475
- extraArgs.push(sanitizer);
23476
- }
23477
- return callVariadicInstruction(ATTRIBUTE_INTERPOLATE_CONFIG, [literal(name)], interpolationArgs, extraArgs, sourceSpan);
23495
+ const value = callVariadicInstructionExpr(VALUE_INTERPOLATE_CONFIG, [], interpolationArgs, [], sourceSpan);
23496
+ return attribute(name, value, sanitizer, namespace);
23478
23497
  }
23479
23498
  function stylePropInterpolate(name, strings, expressions, unit, sourceSpan) {
23480
23499
  const interpolationArgs = collateInterpolationArgs(strings, expressions);
@@ -23586,6 +23605,26 @@ const PROPERTY_INTERPOLATE_CONFIG = {
23586
23605
  return (n - 1) / 2;
23587
23606
  },
23588
23607
  };
23608
+ const VALUE_INTERPOLATE_CONFIG = {
23609
+ constant: [
23610
+ Identifiers.interpolate,
23611
+ Identifiers.interpolate1,
23612
+ Identifiers.interpolate2,
23613
+ Identifiers.interpolate3,
23614
+ Identifiers.interpolate4,
23615
+ Identifiers.interpolate5,
23616
+ Identifiers.interpolate6,
23617
+ Identifiers.interpolate7,
23618
+ Identifiers.interpolate8,
23619
+ ],
23620
+ variable: Identifiers.interpolateV,
23621
+ mapping: (n) => {
23622
+ if (n % 2 === 0) {
23623
+ throw new Error(`Expected odd number of arguments`);
23624
+ }
23625
+ return (n - 1) / 2;
23626
+ },
23627
+ };
23589
23628
  /**
23590
23629
  * `InterpolationConfig` for the `stylePropInterpolate` instruction.
23591
23630
  */
@@ -23609,29 +23648,6 @@ const STYLE_PROP_INTERPOLATE_CONFIG = {
23609
23648
  return (n - 1) / 2;
23610
23649
  },
23611
23650
  };
23612
- /**
23613
- * `InterpolationConfig` for the `attributeInterpolate` instruction.
23614
- */
23615
- const ATTRIBUTE_INTERPOLATE_CONFIG = {
23616
- constant: [
23617
- Identifiers.attribute,
23618
- Identifiers.attributeInterpolate1,
23619
- Identifiers.attributeInterpolate2,
23620
- Identifiers.attributeInterpolate3,
23621
- Identifiers.attributeInterpolate4,
23622
- Identifiers.attributeInterpolate5,
23623
- Identifiers.attributeInterpolate6,
23624
- Identifiers.attributeInterpolate7,
23625
- Identifiers.attributeInterpolate8,
23626
- ],
23627
- variable: Identifiers.attributeInterpolateV,
23628
- mapping: (n) => {
23629
- if (n % 2 === 0) {
23630
- throw new Error(`Expected odd number of arguments`);
23631
- }
23632
- return (n - 1) / 2;
23633
- },
23634
- };
23635
23651
  /**
23636
23652
  * `InterpolationConfig` for the `styleMapInterpolate` instruction.
23637
23653
  */
@@ -24030,7 +24046,7 @@ function reifyUpdateOperations(_unit, ops) {
24030
24046
  break;
24031
24047
  case OpKind.Attribute:
24032
24048
  if (op.expression instanceof Interpolation) {
24033
- OpList.replace(op, attributeInterpolate(op.name, op.expression.strings, op.expression.expressions, op.sanitizer, op.sourceSpan));
24049
+ OpList.replace(op, attributeInterpolate(op.name, op.expression.strings, op.expression.expressions, op.sanitizer, op.namespace, op.sourceSpan));
24034
24050
  }
24035
24051
  else {
24036
24052
  OpList.replace(op, attribute(op.name, op.expression, op.sanitizer, op.namespace));
@@ -32391,21 +32407,12 @@ function isAttrNode(ast) {
32391
32407
  return ast.length === 1 && ast[0] instanceof Attribute;
32392
32408
  }
32393
32409
 
32394
- var FactoryTarget;
32395
- (function (FactoryTarget) {
32396
- FactoryTarget[FactoryTarget["Directive"] = 0] = "Directive";
32397
- FactoryTarget[FactoryTarget["Component"] = 1] = "Component";
32398
- FactoryTarget[FactoryTarget["Injectable"] = 2] = "Injectable";
32399
- FactoryTarget[FactoryTarget["Pipe"] = 3] = "Pipe";
32400
- FactoryTarget[FactoryTarget["NgModule"] = 4] = "NgModule";
32401
- })(FactoryTarget || (FactoryTarget = {}));
32402
-
32403
32410
  /**
32404
32411
  * @module
32405
32412
  * @description
32406
32413
  * Entry point for all public APIs of the compiler package.
32407
32414
  */
32408
- new Version('20.0.0-rc.1');
32415
+ new Version('20.0.0-rc.2');
32409
32416
 
32410
32417
  //////////////////////////////////////
32411
32418
  // THIS FILE HAS GLOBAL SIDE EFFECT //
@@ -32483,7 +32490,6 @@ exports.Identifiers = Identifiers;
32483
32490
  exports.IfBlock = IfBlock;
32484
32491
  exports.IfBlockBranch = IfBlockBranch;
32485
32492
  exports.ImplicitReceiver = ImplicitReceiver;
32486
- exports.InstantiateExpr = InstantiateExpr;
32487
32493
  exports.Interpolation = Interpolation$1;
32488
32494
  exports.InterpolationConfig = InterpolationConfig;
32489
32495
  exports.InvokeFunctionExpr = InvokeFunctionExpr;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.0.0-rc.1
3
+ * @license Angular v20.0.0-rc.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.0.0-rc.1
3
+ * @license Angular v20.0.0-rc.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -8,10 +8,10 @@
8
8
 
9
9
  var schematics = require('@angular-devkit/schematics');
10
10
  var p = require('path');
11
- var compiler_host = require('./compiler_host-CAfDJO3W.js');
12
- var compiler = require('./compiler-CWuG67kz.js');
11
+ var compiler_host = require('./compiler_host-CAfDJO3W.cjs');
12
+ var compiler = require('./compiler-DPq1iS19.cjs');
13
13
  var ts = require('typescript');
14
- var project_tsconfig_paths = require('./project_tsconfig_paths-CDVxT6Ov.js');
14
+ var project_tsconfig_paths = require('./project_tsconfig_paths-CDVxT6Ov.cjs');
15
15
  require('@angular-devkit/core');
16
16
 
17
17
  function lookupIdentifiersInSourceFile(sourceFile, names) {
@@ -1,27 +1,27 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.0.0-rc.1
3
+ * @license Angular v20.0.0-rc.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
7
7
  'use strict';
8
8
 
9
- require('./compiler-CWuG67kz.js');
9
+ require('./compiler-DPq1iS19.cjs');
10
10
  require('typescript');
11
- var checker = require('./checker-DqG0JVTu.js');
11
+ var checker = require('./checker-DmucNdBi.cjs');
12
12
  require('os');
13
- var apply_import_manager = require('./apply_import_manager-BdH8vaIZ.js');
14
- require('./index-CGYcUmPq.js');
13
+ var apply_import_manager = require('./apply_import_manager-BqwxKJiu.cjs');
14
+ require('./index-1H-qYSW6.cjs');
15
15
  require('path');
16
- var project_paths = require('./project_paths-B3YG5aUz.js');
17
- var imports = require('./imports-CIX-JgAN.js');
16
+ var project_paths = require('./project_paths-DmvzlTQL.cjs');
17
+ var imports = require('./imports-CIX-JgAN.cjs');
18
18
  require('@angular-devkit/core');
19
19
  require('node:path/posix');
20
20
  require('fs');
21
21
  require('module');
22
22
  require('url');
23
23
  require('@angular-devkit/schematics');
24
- require('./project_tsconfig_paths-CDVxT6Ov.js');
24
+ require('./project_tsconfig_paths-CDVxT6Ov.cjs');
25
25
 
26
26
  /** Migration that moves the import of `DOCUMENT` from `core` to `common`. */
27
27
  class DocumentCoreMigration extends project_paths.TsurgeFunnelMigration {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.0.0-rc.1
3
+ * @license Angular v20.0.0-rc.2
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */