source: trip-planner-front/node_modules/@angular/compiler-cli/ngcc/src/packages/patch_ts_expando_initializer.d.ts@ 6a3a178

Last change on this file since 6a3a178 was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 2.1 KB
Line 
1/// <amd-module name="@angular/compiler-cli/ngcc/src/packages/patch_ts_expando_initializer" />
2/**
3 * Consider the following ES5 code that may have been generated for a class:
4 *
5 * ```
6 * var A = (function(){
7 * function A() {}
8 * return A;
9 * }());
10 * A.staticProp = true;
11 * ```
12 *
13 * Here, TypeScript marks the symbol for "A" as a so-called "expando symbol", which causes
14 * "staticProp" to be added as an export of the "A" symbol.
15 *
16 * In the example above, symbol "A" has been assigned some flags to indicate that it represents a
17 * class. Due to this flag, the symbol is considered an expando symbol and as such, "staticProp" is
18 * stored in `ts.Symbol.exports`.
19 *
20 * A problem arises when "A" is not at the top-level, i.e. in UMD bundles. In that case, the symbol
21 * does not have the flag that marks the symbol as a class. Therefore, TypeScript inspects "A"'s
22 * initializer expression, which is an IIFE in the above example. Unfortunately however, only IIFEs
23 * of the form `(function(){})()` qualify as initializer for an "expando symbol"; the slightly
24 * different form seen in the example above, `(function(){}())`, does not. This prevents the "A"
25 * symbol from being considered an expando symbol, in turn preventing "staticProp" from being stored
26 * in `ts.Symbol.exports`.
27 *
28 * The logic for identifying symbols as "expando symbols" can be found here:
29 * https://github.com/microsoft/TypeScript/blob/v3.4.5/src/compiler/binder.ts#L2656-L2685
30 *
31 * Notice how the `getExpandoInitializer` function is available on the "ts" namespace in the
32 * compiled bundle, so we are able to override this function to accommodate for the alternative
33 * IIFE notation. The original implementation can be found at:
34 * https://github.com/Microsoft/TypeScript/blob/v3.4.5/src/compiler/utilities.ts#L1864-L1887
35 *
36 * Issue tracked in https://github.com/microsoft/TypeScript/issues/31778
37 *
38 * @returns the function to pass to `restoreGetExpandoInitializer` to undo the patch, or null if
39 * the issue is known to have been fixed.
40 */
41export declare function patchTsGetExpandoInitializer(): unknown;
42export declare function restoreGetExpandoInitializer(originalGetExpandoInitializer: unknown): void;
Note: See TracBrowser for help on using the repository browser.