123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- "use strict";
-
- const HarmonyExportExpressionDependency = require("./HarmonyExportExpressionDependency");
- const HarmonyImportSideEffectDependency = require("./HarmonyImportSideEffectDependency");
- const HarmonyExportHeaderDependency = require("./HarmonyExportHeaderDependency");
- const HarmonyExportSpecifierDependency = require("./HarmonyExportSpecifierDependency");
- const HarmonyExportImportedSpecifierDependency = require("./HarmonyExportImportedSpecifierDependency");
- const ConstDependency = require("./ConstDependency");
-
- module.exports = class HarmonyExportDependencyParserPlugin {
- constructor(moduleOptions) {
- this.strictExportPresence = moduleOptions.strictExportPresence;
- }
-
- apply(parser) {
- parser.hooks.export.tap(
- "HarmonyExportDependencyParserPlugin",
- statement => {
- const dep = new HarmonyExportHeaderDependency(
- statement.declaration && statement.declaration.range,
- statement.range
- );
- dep.loc = Object.create(statement.loc);
- dep.loc.index = -1;
- parser.state.current.addDependency(dep);
- return true;
- }
- );
- parser.hooks.exportImport.tap(
- "HarmonyExportDependencyParserPlugin",
- (statement, source) => {
- parser.state.lastHarmonyImportOrder =
- (parser.state.lastHarmonyImportOrder || 0) + 1;
- const clearDep = new ConstDependency("", statement.range);
- clearDep.loc = Object.create(statement.loc);
- clearDep.loc.index = -1;
- parser.state.current.addDependency(clearDep);
- const sideEffectDep = new HarmonyImportSideEffectDependency(
- source,
- parser.state.module,
- parser.state.lastHarmonyImportOrder,
- parser.state.harmonyParserScope
- );
- sideEffectDep.loc = Object.create(statement.loc);
- sideEffectDep.loc.index = -1;
- parser.state.current.addDependency(sideEffectDep);
- return true;
- }
- );
- parser.hooks.exportExpression.tap(
- "HarmonyExportDependencyParserPlugin",
- (statement, expr) => {
- const comments = parser.getComments([
- statement.range[0],
- expr.range[0]
- ]);
- const dep = new HarmonyExportExpressionDependency(
- parser.state.module,
- expr.range,
- statement.range,
- comments
- .map(c => {
- switch (c.type) {
- case "Block":
- return `/*${c.value}*/`;
- case "Line":
- return `//${c.value}\n`;
- }
- return "";
- })
- .join("")
- );
- dep.loc = Object.create(statement.loc);
- dep.loc.index = -1;
- parser.state.current.addDependency(dep);
- return true;
- }
- );
- parser.hooks.exportDeclaration.tap(
- "HarmonyExportDependencyParserPlugin",
- statement => {}
- );
- parser.hooks.exportSpecifier.tap(
- "HarmonyExportDependencyParserPlugin",
- (statement, id, name, idx) => {
- const rename = parser.scope.renames.get(id);
- let dep;
- const harmonyNamedExports = (parser.state.harmonyNamedExports =
- parser.state.harmonyNamedExports || new Set());
- harmonyNamedExports.add(name);
- if (rename === "imported var") {
- const settings = parser.state.harmonySpecifier.get(id);
- dep = new HarmonyExportImportedSpecifierDependency(
- settings.source,
- parser.state.module,
- settings.sourceOrder,
- parser.state.harmonyParserScope,
- settings.id,
- name,
- harmonyNamedExports,
- null,
- this.strictExportPresence
- );
- } else {
- dep = new HarmonyExportSpecifierDependency(
- parser.state.module,
- id,
- name
- );
- }
- dep.loc = Object.create(statement.loc);
- dep.loc.index = idx;
- parser.state.current.addDependency(dep);
- return true;
- }
- );
- parser.hooks.exportImportSpecifier.tap(
- "HarmonyExportDependencyParserPlugin",
- (statement, source, id, name, idx) => {
- const harmonyNamedExports = (parser.state.harmonyNamedExports =
- parser.state.harmonyNamedExports || new Set());
- let harmonyStarExports = null;
- if (name) {
- harmonyNamedExports.add(name);
- } else {
- harmonyStarExports = parser.state.harmonyStarExports =
- parser.state.harmonyStarExports || [];
- }
- const dep = new HarmonyExportImportedSpecifierDependency(
- source,
- parser.state.module,
- parser.state.lastHarmonyImportOrder,
- parser.state.harmonyParserScope,
- id,
- name,
- harmonyNamedExports,
- harmonyStarExports && harmonyStarExports.slice(),
- this.strictExportPresence
- );
- if (harmonyStarExports) {
- harmonyStarExports.push(dep);
- }
- dep.loc = Object.create(statement.loc);
- dep.loc.index = idx;
- parser.state.current.addDependency(dep);
- return true;
- }
- );
- }
- };
|