liferay-npm-bundler-preset-reactjs
Version:
liferay npm bundler preset react
95 lines (94 loc) • 3.97 kB
JavaScript
;
/**
* SPDX-FileCopyrightText: © 2017 Liferay, Inc. <https://liferay.com>
* SPDX-License-Identifier: LGPL-3.0-or-later
*/
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const babelIpc = __importStar(require("liferay-npm-build-tools-common/lib/babel-ipc"));
const plugin_logger_1 = __importDefault(require("liferay-npm-build-tools-common/lib/plugin-logger"));
/**
* Valid babel plugin options are:
* namespace: 'Liferay.Loader'
* @return {object} a babel visitor
*/
function default_1() {
let extraNamespaceCount;
let firstDefineNamespaced;
const namespaceVisitor = {
Identifier(path) {
if (path.node.name === 'define') {
if (path.parent.type === 'MemberExpression' &&
path.parent.property === path.node) {
return;
}
if (path.parent.type === 'ObjectProperty' &&
path.parent.key === path.node) {
return;
}
if (path.parent.type !== 'CallExpression') {
return;
}
if (!firstDefineNamespaced) {
if (path.scope.parent === null ||
(!path.scope.hasOwnBinding('define') &&
!path.scope.hasBinding('define'))) {
const namespace = this.opts.namespace || 'Liferay.Loader';
path.node.name = `${namespace}.define`;
firstDefineNamespaced = true;
}
}
else {
extraNamespaceCount++;
}
}
},
};
return {
visitor: {
Program: {
exit(path, state) {
// We must traverse the AST again because the third party
// transform-es2015-modules-amd emits its define() call after
// Program exit :-(
firstDefineNamespaced = false;
extraNamespaceCount = 0;
path.traverse(namespaceVisitor, { opts: state.opts });
if (extraNamespaceCount > 0) {
const { log } = babelIpc.get(state, () => ({
log: new plugin_logger_1.default(),
}));
if (firstDefineNamespaced) {
log.info('namespace-amd-define', 'Namespaced first AMD define in file');
}
if (extraNamespaceCount) {
log.warn('namespace-amd-define', 'Found', extraNamespaceCount, 'define() calls inside the module definition', 'which have been ignored as they should never', 'be executed during runtime');
}
}
},
},
},
};
}
exports.default = default_1;