@angular-eslint/bundled-angular-compiler 18.3.2-alpha.9 → 18.4.1-alpha.0

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 (2) hide show
  1. package/dist/index.js +107 -38
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  /**
4
- * @license Angular v18.2.4
4
+ * @license Angular v18.2.8
5
5
  * (c) 2010-2024 Google LLC. https://angular.io/
6
6
  * License: MIT
7
7
  */
@@ -7219,7 +7219,7 @@ class ShadowCss {
7219
7219
  * captures how many (if any) leading whitespaces are present or a comma
7220
7220
  * - (?:(?:(['"])((?:\\\\|\\\2|(?!\2).)+)\2)|(-?[A-Za-z][\w\-]*))
7221
7221
  * captures two different possible keyframes, ones which are quoted or ones which are valid css
7222
- * idents (custom properties excluded)
7222
+ * indents (custom properties excluded)
7223
7223
  * - (?=[,\s;]|$)
7224
7224
  * simply matches the end of the possible keyframe, valid endings are: a comma, a space, a
7225
7225
  * semicolon or the end of the string
@@ -7448,7 +7448,7 @@ class ShadowCss {
7448
7448
  */
7449
7449
  _scopeCssText(cssText, scopeSelector, hostSelector) {
7450
7450
  const unscopedRules = this._extractUnscopedRulesFromCssText(cssText);
7451
- // replace :host and :host-context -shadowcsshost and -shadowcsshost respectively
7451
+ // replace :host and :host-context with -shadowcsshost and -shadowcsshostcontext respectively
7452
7452
  cssText = this._insertPolyfillHostInCssText(cssText);
7453
7453
  cssText = this._convertColonHost(cssText);
7454
7454
  cssText = this._convertColonHostContext(cssText);
@@ -7526,7 +7526,7 @@ class ShadowCss {
7526
7526
  * .foo<scopeName> .bar { ... }
7527
7527
  */
7528
7528
  _convertColonHostContext(cssText) {
7529
- return cssText.replace(_cssColonHostContextReGlobal, (selectorText) => {
7529
+ return cssText.replace(_cssColonHostContextReGlobal, (selectorText, pseudoPrefix) => {
7530
7530
  // We have captured a selector that contains a `:host-context` rule.
7531
7531
  // For backward compatibility `:host-context` may contain a comma separated list of selectors.
7532
7532
  // Each context selector group will contain a list of host-context selectors that must match
@@ -7575,10 +7575,10 @@ class ShadowCss {
7575
7575
  selectorText = match[2];
7576
7576
  }
7577
7577
  // The context selectors now must be combined with each other to capture all the possible
7578
- // selectors that `:host-context` can match. See `combineHostContextSelectors()` for more
7578
+ // selectors that `:host-context` can match. See `_combineHostContextSelectors()` for more
7579
7579
  // info about how this is done.
7580
7580
  return contextSelectorGroups
7581
- .map((contextSelectors) => combineHostContextSelectors(contextSelectors, selectorText))
7581
+ .map((contextSelectors) => _combineHostContextSelectors(contextSelectors, selectorText, pseudoPrefix))
7582
7582
  .join(', ');
7583
7583
  });
7584
7584
  }
@@ -7595,7 +7595,12 @@ class ShadowCss {
7595
7595
  let selector = rule.selector;
7596
7596
  let content = rule.content;
7597
7597
  if (rule.selector[0] !== '@') {
7598
- selector = this._scopeSelector(rule.selector, scopeSelector, hostSelector);
7598
+ selector = this._scopeSelector({
7599
+ selector,
7600
+ scopeSelector,
7601
+ hostSelector,
7602
+ isParentSelector: true,
7603
+ });
7599
7604
  }
7600
7605
  else if (scopedAtRuleIdentifiers.some((atRule) => rule.selector.startsWith(atRule))) {
7601
7606
  content = this._scopeSelectors(rule.content, scopeSelector, hostSelector);
@@ -7635,15 +7640,29 @@ class ShadowCss {
7635
7640
  return new CssRule(selector, rule.content);
7636
7641
  });
7637
7642
  }
7638
- _scopeSelector(selector, scopeSelector, hostSelector) {
7643
+ // `isParentSelector` is used to distinguish the selectors which are coming from
7644
+ // the initial selector string and any nested selectors, parsed recursively,
7645
+ // for example `selector = 'a:where(.one)'` could be the parent, while recursive call
7646
+ // would have `selector = '.one'`.
7647
+ _scopeSelector({ selector, scopeSelector, hostSelector, isParentSelector = false, }) {
7648
+ // Split the selector into independent parts by `,` (comma) unless
7649
+ // comma is within parenthesis, for example `:is(.one, two)`.
7650
+ // Negative lookup after comma allows not splitting inside nested parenthesis,
7651
+ // up to three levels (((,))).
7652
+ const selectorSplitRe = / ?,(?!(?:[^)(]*(?:\([^)(]*(?:\([^)(]*(?:\([^)(]*\)[^)(]*)*\)[^)(]*)*\)[^)(]*)*\))) ?/;
7639
7653
  return selector
7640
- .split(/ ?, ?/)
7654
+ .split(selectorSplitRe)
7641
7655
  .map((part) => part.split(_shadowDeepSelectors))
7642
7656
  .map((deepParts) => {
7643
7657
  const [shallowPart, ...otherParts] = deepParts;
7644
7658
  const applyScope = (shallowPart) => {
7645
7659
  if (this._selectorNeedsScoping(shallowPart, scopeSelector)) {
7646
- return this._applySelectorScope(shallowPart, scopeSelector, hostSelector);
7660
+ return this._applySelectorScope({
7661
+ selector: shallowPart,
7662
+ scopeSelector,
7663
+ hostSelector,
7664
+ isParentSelector,
7665
+ });
7647
7666
  }
7648
7667
  else {
7649
7668
  return shallowPart;
@@ -7670,8 +7689,8 @@ class ShadowCss {
7670
7689
  if (_polyfillHostRe.test(selector)) {
7671
7690
  const replaceBy = `[${hostSelector}]`;
7672
7691
  return selector
7673
- .replace(_polyfillHostNoCombinatorRe, (hnc, selector) => {
7674
- return selector.replace(/([^:]*)(:*)(.*)/, (_, before, colon, after) => {
7692
+ .replace(_polyfillHostNoCombinatorReGlobal, (_hnc, selector) => {
7693
+ return selector.replace(/([^:\)]*)(:*)(.*)/, (_, before, colon, after) => {
7675
7694
  return before + replaceBy + colon + after;
7676
7695
  });
7677
7696
  })
@@ -7681,7 +7700,7 @@ class ShadowCss {
7681
7700
  }
7682
7701
  // return a selector with [name] suffix on each simple selector
7683
7702
  // e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .zot[name] /** @internal */
7684
- _applySelectorScope(selector, scopeSelector, hostSelector) {
7703
+ _applySelectorScope({ selector, scopeSelector, hostSelector, isParentSelector, }) {
7685
7704
  const isRe = /\[is=([^\]]*)\]/g;
7686
7705
  scopeSelector = scopeSelector.replace(isRe, (_, ...parts) => parts[0]);
7687
7706
  const attrName = '[' + scopeSelector + ']';
@@ -7692,6 +7711,10 @@ class ShadowCss {
7692
7711
  }
7693
7712
  if (p.includes(_polyfillHostNoCombinator)) {
7694
7713
  scopedP = this._applySimpleSelectorScope(p, scopeSelector, hostSelector);
7714
+ if (_polyfillHostNoCombinatorWithinPseudoFunction.test(p)) {
7715
+ const [_, before, colon, after] = scopedP.match(/([^:]*)(:*)(.*)/);
7716
+ scopedP = before + attrName + colon + after;
7717
+ }
7695
7718
  }
7696
7719
  else {
7697
7720
  // remove :host since it should be unnecessary
@@ -7705,12 +7728,50 @@ class ShadowCss {
7705
7728
  }
7706
7729
  return scopedP;
7707
7730
  };
7708
- const safeContent = new SafeSelector(selector);
7709
- selector = safeContent.content();
7731
+ // Wraps `_scopeSelectorPart()` to not use it directly on selectors with
7732
+ // pseudo selector functions like `:where()`. Selectors within pseudo selector
7733
+ // functions are recursively sent to `_scopeSelector()`.
7734
+ const _pseudoFunctionAwareScopeSelectorPart = (selectorPart) => {
7735
+ let scopedPart = '';
7736
+ const cssPrefixWithPseudoSelectorFunctionMatch = selectorPart.match(_cssPrefixWithPseudoSelectorFunction);
7737
+ if (cssPrefixWithPseudoSelectorFunctionMatch) {
7738
+ const [cssPseudoSelectorFunction] = cssPrefixWithPseudoSelectorFunctionMatch;
7739
+ // Unwrap the pseudo selector to scope its contents.
7740
+ // For example,
7741
+ // - `:where(selectorToScope)` -> `selectorToScope`;
7742
+ // - `:is(.foo, .bar)` -> `.foo, .bar`.
7743
+ const selectorToScope = selectorPart.slice(cssPseudoSelectorFunction.length, -1);
7744
+ if (selectorToScope.includes(_polyfillHostNoCombinator)) {
7745
+ this._shouldScopeIndicator = true;
7746
+ }
7747
+ const scopedInnerPart = this._scopeSelector({
7748
+ selector: selectorToScope,
7749
+ scopeSelector,
7750
+ hostSelector,
7751
+ });
7752
+ // Put the result back into the pseudo selector function.
7753
+ scopedPart = `${cssPseudoSelectorFunction}${scopedInnerPart})`;
7754
+ }
7755
+ else {
7756
+ this._shouldScopeIndicator =
7757
+ this._shouldScopeIndicator || selectorPart.includes(_polyfillHostNoCombinator);
7758
+ scopedPart = this._shouldScopeIndicator ? _scopeSelectorPart(selectorPart) : selectorPart;
7759
+ }
7760
+ return scopedPart;
7761
+ };
7762
+ if (isParentSelector) {
7763
+ this._safeSelector = new SafeSelector(selector);
7764
+ selector = this._safeSelector.content();
7765
+ }
7710
7766
  let scopedSelector = '';
7711
7767
  let startIndex = 0;
7712
7768
  let res;
7713
- const sep = /( |>|\+|~(?!=))\s*/g;
7769
+ // Combinators aren't used as a delimiter if they are within parenthesis,
7770
+ // for example `:where(.one .two)` stays intact.
7771
+ // Similarly to selector separation by comma initially, negative lookahead
7772
+ // is used here to not break selectors within nested parenthesis up to three
7773
+ // nested layers.
7774
+ const sep = /( |>|\+|~(?!=))(?!([^)(]*(?:\([^)(]*(?:\([^)(]*(?:\([^)(]*\)[^)(]*)*\)[^)(]*)*\)[^)(]*)*\)))\s*/g;
7714
7775
  // If a selector appears before :host it should not be shimmed as it
7715
7776
  // matches on ancestor elements and not on elements in the host's shadow
7716
7777
  // `:host-context(div)` is transformed to
@@ -7723,8 +7784,13 @@ class ShadowCss {
7723
7784
  // - `tag :host` -> `tag [h]` (`tag` is not scoped because it's considered part of a
7724
7785
  // `:host-context(tag)`)
7725
7786
  const hasHost = selector.includes(_polyfillHostNoCombinator);
7726
- // Only scope parts after the first `-shadowcsshost-no-combinator` when it is present
7727
- let shouldScope = !hasHost;
7787
+ // Only scope parts after or on the same level as the first `-shadowcsshost-no-combinator`
7788
+ // when it is present. The selector has the same level when it is a part of a pseudo
7789
+ // selector, like `:where()`, for example `:where(:host, .foo)` would result in `.foo`
7790
+ // being scoped.
7791
+ if (isParentSelector || this._shouldScopeIndicator) {
7792
+ this._shouldScopeIndicator = !hasHost;
7793
+ }
7728
7794
  while ((res = sep.exec(selector)) !== null) {
7729
7795
  const separator = res[1];
7730
7796
  // Do not trim the selector, as otherwise this will break sourcemaps
@@ -7740,16 +7806,15 @@ class ShadowCss {
7740
7806
  if (part.match(/__esc-ph-(\d+)__/) && selector[res.index + 1]?.match(/[a-fA-F\d]/)) {
7741
7807
  continue;
7742
7808
  }
7743
- shouldScope = shouldScope || part.includes(_polyfillHostNoCombinator);
7744
- const scopedPart = shouldScope ? _scopeSelectorPart(part) : part;
7809
+ const scopedPart = _pseudoFunctionAwareScopeSelectorPart(part);
7745
7810
  scopedSelector += `${scopedPart} ${separator} `;
7746
7811
  startIndex = sep.lastIndex;
7747
7812
  }
7748
7813
  const part = selector.substring(startIndex);
7749
- shouldScope = shouldScope || part.includes(_polyfillHostNoCombinator);
7750
- scopedSelector += shouldScope ? _scopeSelectorPart(part) : part;
7814
+ scopedSelector += _pseudoFunctionAwareScopeSelectorPart(part);
7751
7815
  // replace the placeholders with their original values
7752
- return safeContent.restore(scopedSelector);
7816
+ // using values stored inside the `safeSelector` instance.
7817
+ return this._safeSelector.restore(scopedSelector);
7753
7818
  }
7754
7819
  _insertPolyfillHostInCssText(selector) {
7755
7820
  return selector
@@ -7804,6 +7869,8 @@ class SafeSelector {
7804
7869
  });
7805
7870
  }
7806
7871
  }
7872
+ const _cssScopedPseudoFunctionPrefix = '(:(where|is)\\()?';
7873
+ const _cssPrefixWithPseudoSelectorFunction = /^:(where|is)\(/i;
7807
7874
  const _cssContentNextSelectorRe = /polyfill-next-selector[^}]*content:[\s]*?(['"])(.*?)\1[;\s]*}([^{]*?){/gim;
7808
7875
  const _cssContentRuleRe = /(polyfill-rule)[^}]*(content:[\s]*(['"])(.*?)\3)[;\s]*[^}]*}/gim;
7809
7876
  const _cssContentUnscopedRuleRe = /(polyfill-unscoped-rule)[^}]*(content:[\s]*(['"])(.*?)\3)[;\s]*[^}]*}/gim;
@@ -7812,10 +7879,12 @@ const _polyfillHost = '-shadowcsshost';
7812
7879
  const _polyfillHostContext = '-shadowcsscontext';
7813
7880
  const _parenSuffix = '(?:\\((' + '(?:\\([^)(]*\\)|[^)(]*)+?' + ')\\))?([^,{]*)';
7814
7881
  const _cssColonHostRe = new RegExp(_polyfillHost + _parenSuffix, 'gim');
7815
- const _cssColonHostContextReGlobal = new RegExp(_polyfillHostContext + _parenSuffix, 'gim');
7882
+ const _cssColonHostContextReGlobal = new RegExp(_cssScopedPseudoFunctionPrefix + '(' + _polyfillHostContext + _parenSuffix + ')', 'gim');
7816
7883
  const _cssColonHostContextRe = new RegExp(_polyfillHostContext + _parenSuffix, 'im');
7817
7884
  const _polyfillHostNoCombinator = _polyfillHost + '-no-combinator';
7885
+ const _polyfillHostNoCombinatorWithinPseudoFunction = new RegExp(`:.*\\(.*${_polyfillHostNoCombinator}.*\\)`);
7818
7886
  const _polyfillHostNoCombinatorRe = /-shadowcsshost-no-combinator([^\s]*)/;
7887
+ const _polyfillHostNoCombinatorReGlobal = new RegExp(_polyfillHostNoCombinatorRe, 'g');
7819
7888
  const _shadowDOMSelectorsRe = [
7820
7889
  /::shadow/g,
7821
7890
  /::content/g,
@@ -8049,7 +8118,7 @@ function unescapeQuotes(str, isQuoted) {
8049
8118
  * @param contextSelectors an array of context selectors that will be combined.
8050
8119
  * @param otherSelectors the rest of the selectors that are not context selectors.
8051
8120
  */
8052
- function combineHostContextSelectors(contextSelectors, otherSelectors) {
8121
+ function _combineHostContextSelectors(contextSelectors, otherSelectors, pseudoPrefix = '') {
8053
8122
  const hostMarker = _polyfillHostNoCombinator;
8054
8123
  _polyfillHostRe.lastIndex = 0; // reset the regex to ensure we get an accurate test
8055
8124
  const otherSelectorsHasHost = _polyfillHostRe.test(otherSelectors);
@@ -8075,8 +8144,8 @@ function combineHostContextSelectors(contextSelectors, otherSelectors) {
8075
8144
  // (A<hostMarker>) or as an ancestor (A <hostMarker>).
8076
8145
  return combined
8077
8146
  .map((s) => otherSelectorsHasHost
8078
- ? `${s}${otherSelectors}`
8079
- : `${s}${hostMarker}${otherSelectors}, ${s} ${hostMarker}${otherSelectors}`)
8147
+ ? `${pseudoPrefix}${s}${otherSelectors}`
8148
+ : `${pseudoPrefix}${s}${hostMarker}${otherSelectors}, ${pseudoPrefix}${s} ${hostMarker}${otherSelectors}`)
8080
8149
  .join(',');
8081
8150
  }
8082
8151
  /**
@@ -24104,7 +24173,7 @@ function wrapI18nIcus(job) {
24104
24173
  * Copyright Google LLC All Rights Reserved.
24105
24174
  *
24106
24175
  * Use of this source code is governed by an MIT-style license that can be
24107
- * found in the LICENSE file at https://angular.io/license
24176
+ * found in the LICENSE file at https://angular.dev/license
24108
24177
  */
24109
24178
  /**
24110
24179
  * Removes any `storeLet` calls that aren't referenced outside of the current view.
@@ -24187,7 +24256,7 @@ function generateLocalLetReferences(job) {
24187
24256
  * Copyright Google LLC All Rights Reserved.
24188
24257
  *
24189
24258
  * Use of this source code is governed by an MIT-style license that can be
24190
- * found in the LICENSE file at https://angular.io/license
24259
+ * found in the LICENSE file at https://angular.dev/license
24191
24260
  */
24192
24261
  const phases = [
24193
24262
  { kind: CompilationJobKind.Tmpl, fn: removeContentSelectors },
@@ -29698,7 +29767,7 @@ function publishFacade(global) {
29698
29767
  * @description
29699
29768
  * Entry point for all public APIs of the compiler package.
29700
29769
  */
29701
- const VERSION = new Version('18.2.4');
29770
+ const VERSION = new Version('18.2.8');
29702
29771
 
29703
29772
  class CompilerConfig {
29704
29773
  constructor({ defaultEncapsulation = exports.ViewEncapsulation.Emulated, preserveWhitespaces, strictInjectionParameters, } = {}) {
@@ -31349,7 +31418,7 @@ const MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION = '18.0.0';
31349
31418
  function compileDeclareClassMetadata(metadata) {
31350
31419
  const definitionMap = new DefinitionMap();
31351
31420
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$5));
31352
- definitionMap.set('version', literal('18.2.4'));
31421
+ definitionMap.set('version', literal('18.2.8'));
31353
31422
  definitionMap.set('ngImport', importExpr(Identifiers.core));
31354
31423
  definitionMap.set('type', metadata.type);
31355
31424
  definitionMap.set('decorators', metadata.decorators);
@@ -31367,7 +31436,7 @@ function compileComponentDeclareClassMetadata(metadata, dependencies) {
31367
31436
  callbackReturnDefinitionMap.set('ctorParameters', metadata.ctorParameters ?? literal(null));
31368
31437
  callbackReturnDefinitionMap.set('propDecorators', metadata.propDecorators ?? literal(null));
31369
31438
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION));
31370
- definitionMap.set('version', literal('18.2.4'));
31439
+ definitionMap.set('version', literal('18.2.8'));
31371
31440
  definitionMap.set('ngImport', importExpr(Identifiers.core));
31372
31441
  definitionMap.set('type', metadata.type);
31373
31442
  definitionMap.set('resolveDeferredDeps', compileComponentMetadataAsyncResolver(dependencies));
@@ -31462,7 +31531,7 @@ function createDirectiveDefinitionMap(meta) {
31462
31531
  const definitionMap = new DefinitionMap();
31463
31532
  const minVersion = getMinimumVersionForPartialOutput(meta);
31464
31533
  definitionMap.set('minVersion', literal(minVersion));
31465
- definitionMap.set('version', literal('18.2.4'));
31534
+ definitionMap.set('version', literal('18.2.8'));
31466
31535
  // e.g. `type: MyDirective`
31467
31536
  definitionMap.set('type', meta.type.value);
31468
31537
  if (meta.isStandalone) {
@@ -31881,7 +31950,7 @@ const MINIMUM_PARTIAL_LINKER_VERSION$4 = '12.0.0';
31881
31950
  function compileDeclareFactoryFunction(meta) {
31882
31951
  const definitionMap = new DefinitionMap();
31883
31952
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$4));
31884
- definitionMap.set('version', literal('18.2.4'));
31953
+ definitionMap.set('version', literal('18.2.8'));
31885
31954
  definitionMap.set('ngImport', importExpr(Identifiers.core));
31886
31955
  definitionMap.set('type', meta.type.value);
31887
31956
  definitionMap.set('deps', compileDependencies(meta.deps));
@@ -31916,7 +31985,7 @@ function compileDeclareInjectableFromMetadata(meta) {
31916
31985
  function createInjectableDefinitionMap(meta) {
31917
31986
  const definitionMap = new DefinitionMap();
31918
31987
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$3));
31919
- definitionMap.set('version', literal('18.2.4'));
31988
+ definitionMap.set('version', literal('18.2.8'));
31920
31989
  definitionMap.set('ngImport', importExpr(Identifiers.core));
31921
31990
  definitionMap.set('type', meta.type.value);
31922
31991
  // Only generate providedIn property if it has a non-null value
@@ -31967,7 +32036,7 @@ function compileDeclareInjectorFromMetadata(meta) {
31967
32036
  function createInjectorDefinitionMap(meta) {
31968
32037
  const definitionMap = new DefinitionMap();
31969
32038
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$2));
31970
- definitionMap.set('version', literal('18.2.4'));
32039
+ definitionMap.set('version', literal('18.2.8'));
31971
32040
  definitionMap.set('ngImport', importExpr(Identifiers.core));
31972
32041
  definitionMap.set('type', meta.type.value);
31973
32042
  definitionMap.set('providers', meta.providers);
@@ -32000,7 +32069,7 @@ function createNgModuleDefinitionMap(meta) {
32000
32069
  throw new Error('Invalid path! Local compilation mode should not get into the partial compilation path');
32001
32070
  }
32002
32071
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$1));
32003
- definitionMap.set('version', literal('18.2.4'));
32072
+ definitionMap.set('version', literal('18.2.8'));
32004
32073
  definitionMap.set('ngImport', importExpr(Identifiers.core));
32005
32074
  definitionMap.set('type', meta.type.value);
32006
32075
  // We only generate the keys in the metadata if the arrays contain values.
@@ -32051,7 +32120,7 @@ function compileDeclarePipeFromMetadata(meta) {
32051
32120
  function createPipeDefinitionMap(meta) {
32052
32121
  const definitionMap = new DefinitionMap();
32053
32122
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION));
32054
- definitionMap.set('version', literal('18.2.4'));
32123
+ definitionMap.set('version', literal('18.2.8'));
32055
32124
  definitionMap.set('ngImport', importExpr(Identifiers.core));
32056
32125
  // e.g. `type: MyPipe`
32057
32126
  definitionMap.set('type', meta.type.value);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@angular-eslint/bundled-angular-compiler",
3
- "version": "18.3.2-alpha.9",
3
+ "version": "18.4.1-alpha.0",
4
4
  "description": "A CJS bundled version of @angular/compiler",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",