| | |
| | | /** @typedef {(value: boolean | Set<string> | undefined) => void} UsageCallback */ |
| | | |
| | | /** |
| | | * Defines the state object type used by this module. |
| | | * @typedef {object} StateObject |
| | | * @property {InnerGraph} innerGraph |
| | | * @property {TopLevelSymbol=} currentTopLevelSymbol |
| | |
| | | |
| | | class TopLevelSymbol { |
| | | /** |
| | | * Creates an instance of TopLevelSymbol. |
| | | * @param {string} name name of the variable |
| | | */ |
| | | constructor(name) { |
| | | /** @type {string} */ |
| | | this.name = name; |
| | | } |
| | | } |
| | |
| | | const topLevelSymbolTag = Symbol("top level symbol"); |
| | | |
| | | /** |
| | | * Returns state. |
| | | * @param {ParserState} parserState parser state |
| | | * @returns {State | undefined} state |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * Processes the provided state. |
| | | * @param {ParserState} state parser state |
| | | * @param {TopLevelSymbol | null} symbol the symbol, or null for all symbols |
| | | * @param {Usage} usage usage data |
| | |
| | | /** @typedef {string | TopLevelSymbol | true} Usage */ |
| | | |
| | | /** |
| | | * Processes the provided parser. |
| | | * @param {JavascriptParser} parser the parser |
| | | * @param {string} name name of variable |
| | | * @param {Usage} usage usage data |
| | |
| | | }; |
| | | |
| | | /** |
| | | * Processes the provided parser state. |
| | | * @param {ParserState} parserState parser state |
| | | * @returns {void} |
| | | */ |
| | |
| | | }; |
| | | |
| | | /** |
| | | * Processes the provided parser state. |
| | | * @param {ParserState} parserState parser state |
| | | * @returns {void} |
| | | */ |
| | |
| | | /** @typedef {Set<string> | boolean} UsedByExports */ |
| | | |
| | | /** |
| | | * Usage callback map. |
| | | * @param {Dependency} dependency the dependency |
| | | * @param {UsedByExports | undefined} usedByExports usedByExports info |
| | | * @param {ModuleGraph} moduleGraph moduleGraph |
| | |
| | | }; |
| | | |
| | | /** |
| | | * Returns usage data. |
| | | * @param {ParserState} state parser state |
| | | * @returns {TopLevelSymbol | void} usage data |
| | | */ |
| | |
| | | }; |
| | | |
| | | /** |
| | | * Processes the provided state. |
| | | * @param {ParserState} state parser state |
| | | * @returns {void} |
| | | */ |
| | |
| | | }; |
| | | |
| | | /** |
| | | * Returns false, when unused. Otherwise true. |
| | | * @param {Dependency} dependency the dependency |
| | | * @param {UsedByExports | undefined} usedByExports usedByExports info |
| | | * @param {ModuleGraph} moduleGraph moduleGraph |
| | |
| | | }; |
| | | |
| | | /** |
| | | * Returns true, when enabled. |
| | | * @param {ParserState} parserState parser state |
| | | * @returns {boolean} true, when enabled |
| | | */ |
| | |
| | | }; |
| | | |
| | | /** |
| | | * Processes the provided state. |
| | | * @param {ParserState} state parser state |
| | | * @param {UsageCallback} onUsageCallback on usage callback |
| | | */ |
| | |
| | | let callbacks = usageCallbackMap.get(currentTopLevelSymbol); |
| | | |
| | | if (callbacks === undefined) { |
| | | /** @type {Set<UsageCallback>} */ |
| | | callbacks = new Set(); |
| | | usageCallbackMap.set(currentTopLevelSymbol, callbacks); |
| | | } |
| | |
| | | }; |
| | | |
| | | /** |
| | | * Processes the provided state. |
| | | * @param {ParserState} state parser state |
| | | * @param {TopLevelSymbol | undefined} symbol the symbol |
| | | */ |
| | |
| | | }; |
| | | |
| | | /** |
| | | * Returns symbol. |
| | | * @param {JavascriptParser} parser parser |
| | | * @param {string} name name of variable |
| | | * @returns {TopLevelSymbol | undefined} symbol |
| | |
| | | return existingTag; |
| | | } |
| | | |
| | | const fn = new TopLevelSymbol(name); |
| | | const symbol = new TopLevelSymbol(name); |
| | | parser.tagVariable( |
| | | name, |
| | | topLevelSymbolTag, |
| | | fn, |
| | | symbol, |
| | | JavascriptParser.VariableInfoFlags.Normal |
| | | ); |
| | | return fn; |
| | | return symbol; |
| | | }; |
| | | |
| | | module.exports.topLevelSymbolTag = topLevelSymbolTag; |