@nx/angular
Version:
68 lines (67 loc) • 2.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isHostRemoteConfig = isHostRemoteConfig;
exports.getRemotesFromHost = getRemotesFromHost;
exports.getExposedModulesFromRemote = getExposedModulesFromRemote;
const ensure_typescript_1 = require("@nx/js/src/utils/typescript/ensure-typescript");
const REMOTES_EXPRESSION_SELECTOR = 'PropertyAssignment:has(Identifier[name=remotes]) > ObjectLiteralExpression';
const EXPOSES_EXPRESSION_SELECTOR = 'PropertyAssignment:has(Identifier[name=exposes]) > ObjectLiteralExpression';
const PROPERTY_SELECTOR = 'ObjectLiteralExpression > PropertyAssignment';
function isHostRemoteConfig(ast) {
let isHost = false;
let isRemote = false;
(0, ensure_typescript_1.ensureTypescript)();
const { tsquery } = require('@phenomnomnominal/tsquery');
const remotesNodes = tsquery(ast, REMOTES_EXPRESSION_SELECTOR, {
visitAllChildren: true,
});
if (remotesNodes.length > 0) {
isHost = true;
}
const exposesNodes = tsquery(ast, EXPOSES_EXPRESSION_SELECTOR, {
visitAllChildren: true,
});
if (exposesNodes.length > 0) {
isRemote = true;
}
let result = isHost && isRemote ? 'both' : isHost ? 'host' : isRemote ? 'remote' : false;
return result;
}
function getRemotesFromHost(ast) {
(0, ensure_typescript_1.ensureTypescript)();
const { tsquery } = require('@phenomnomnominal/tsquery');
const remotesObjectNodes = tsquery(ast, REMOTES_EXPRESSION_SELECTOR, {
visitAllChildren: true,
});
if (remotesObjectNodes.length === 0) {
return [];
}
const remotesNodes = tsquery(remotesObjectNodes[0], PROPERTY_SELECTOR, {
visitAllChildren: true,
});
if (remotesNodes.length === 0) {
return [];
}
const remotes = [];
for (const remoteNode of remotesNodes) {
const remoteText = remoteNode.getText();
const remoteParts = remoteText
.split(':')
.map((part) => part.trim().replace(/'/g, ''));
const remoteName = remoteParts.shift();
const remoteLocation = remoteParts.join(':').replace(/\/[^\/]+$/, '');
remotes.push([remoteName, remoteLocation]);
}
return remotes;
}
function getExposedModulesFromRemote(ast) {
(0, ensure_typescript_1.ensureTypescript)();
const { tsquery } = require('@phenomnomnominal/tsquery');
const exposesObjectNodes = tsquery(ast, EXPOSES_EXPRESSION_SELECTOR, {
visitAllChildren: true,
});
if (exposesObjectNodes.length === 0) {
return {};
}
return exposesObjectNodes[0].getText();
}