UNPKG

@nx/angular

Version:

The Nx Plugin for Angular contains executors, generators, and utilities for managing Angular applications and libraries within an Nx workspace. It provides: - Integration with libraries such as Storybook, Jest, ESLint, Tailwind CSS, Playwright and Cypre

68 lines (67 loc) 2.63 kB
"use strict"; 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(); }