@nx/angular
Version:
50 lines (49 loc) • 2.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.checkSharedNpmPackagesMatchExpected = checkSharedNpmPackagesMatchExpected;
const ensure_typescript_1 = require("@nx/js/src/utils/typescript/ensure-typescript");
function checkSharedNpmPackagesMatchExpected(ast) {
(0, ensure_typescript_1.ensureTypescript)();
const { tsquery } = require('@phenomnomnominal/tsquery');
const SHARE_HELPER_SELECTOR = 'PropertyAssignment:has(Identifier[name=shared]) > CallExpression:has(Identifier[name=share])';
const SHARED_PACKAGE_CONFIG_SELECTOR = 'ObjectLiteralExpression > PropertyAssignment > ObjectLiteralExpression';
const shareHelperNodes = tsquery(ast, SHARE_HELPER_SELECTOR, {
visitAllChildren: true,
});
let sharedPackageConfigNodes;
let settingsToMatch = [];
if (shareHelperNodes.length === 0) {
// if we arent sharing using share helper, check for standard object sharing syntax
const SHARED_OBJECT_SELECTOR = 'PropertyAssignment:has(Identifier[name=shared]) > ObjectLiteralExpression';
const sharedObjectNodes = tsquery(ast, SHARED_OBJECT_SELECTOR, {
visitAllChildren: true,
});
if (sharedObjectNodes.length === 0) {
// nothing is being shared, we're safe to continue
return true;
}
sharedPackageConfigNodes = tsquery(sharedObjectNodes[0], SHARED_PACKAGE_CONFIG_SELECTOR, { visitAllChildren: true });
settingsToMatch = [`singleton: true`, `strictVersion: true`];
}
else {
sharedPackageConfigNodes = tsquery(shareHelperNodes[0], SHARED_PACKAGE_CONFIG_SELECTOR, { visitAllChildren: true });
settingsToMatch = [
`singleton: true`,
`strictVersion: true`,
`requiredVersion: 'auto'`,
];
}
if (sharedPackageConfigNodes.length === 0) {
// we arent sharing configs with the share helper, so we can safely continue
return true;
}
let packagesMatch = true;
for (const configNode of sharedPackageConfigNodes) {
const configText = configNode.getText();
packagesMatch = settingsToMatch.every((setting) => configText.includes(setting));
if (!packagesMatch) {
break;
}
}
return packagesMatch;
}