@nx/storybook
Version:
161 lines (160 loc) • 8.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildPostTargetTransformer = buildPostTargetTransformer;
const devkit_1 = require("@nx/devkit");
const plugin_migration_utils_1 = require("@nx/devkit/src/generators/plugin-migrations/plugin-migration-utils");
const tsquery_1 = require("@phenomnomnominal/tsquery");
const utils_1 = require("./utils");
const utils_2 = require("./utils");
function buildPostTargetTransformer(migrationLogs) {
return (target, tree, projectDetails, inferredTargetConfiguration) => {
let defaultConfigDir = (0, devkit_1.joinPathFragments)(projectDetails.root, '.storybook');
const configValues = {
default: {},
};
if (target.options) {
if (target.options.configDir) {
defaultConfigDir = target.options.configDir;
}
handlePropertiesFromTargetOptions(tree, target.options, defaultConfigDir, projectDetails.projectName, projectDetails.root, configValues['default'], migrationLogs);
}
if (target.configurations) {
for (const configurationName in target.configurations) {
const configuration = target.configurations[configurationName];
configValues[configurationName] = {};
handlePropertiesFromTargetOptions(tree, configuration, defaultConfigDir, projectDetails.projectName, projectDetails.root, configValues[configurationName], migrationLogs);
}
for (const configurationName in target.configurations) {
const configuration = target.configurations[configurationName];
if (configuration.configDir &&
configuration.configDir !==
(0, plugin_migration_utils_1.toProjectRelativePath)(defaultConfigDir, projectDetails.root)) {
const configFilePath = (0, utils_1.getConfigFilePath)(tree, (0, devkit_1.joinPathFragments)(projectDetails.root, configuration.configDir));
(0, utils_1.addConfigValuesToConfigFile)(tree, configFilePath, configValues);
(0, utils_1.ensureViteConfigPathIsRelative)(tree, configFilePath, projectDetails.projectName, projectDetails.root, '@nx/storybook:build', migrationLogs);
}
if (configurationName === 'ci' &&
Object.keys(configuration).length === 0) {
delete target.configurations[configurationName];
}
}
if (Object.keys(target.configurations).length === 0) {
if ('defaultConfiguration' in target) {
delete target.defaultConfiguration;
}
delete target.configurations;
}
if ('defaultConfiguration' in target &&
!target.configurations[target.defaultConfiguration]) {
delete target.defaultConfiguration;
}
}
if (target.outputs) {
(0, plugin_migration_utils_1.processTargetOutputs)(target, [{ newName: 'output-dir', oldName: 'outputDir' }], inferredTargetConfiguration, {
projectName: projectDetails.projectName,
projectRoot: projectDetails.root,
});
}
(0, utils_1.addConfigValuesToConfigFile)(tree, (0, utils_1.getConfigFilePath)(tree, defaultConfigDir), configValues);
(0, utils_1.ensureViteConfigPathIsRelative)(tree, (0, utils_1.getConfigFilePath)(tree, defaultConfigDir), projectDetails.projectName, projectDetails.root, '@nx/storybook:build', migrationLogs);
return target;
};
}
function handlePropertiesFromTargetOptions(tree, options, defaultConfigDir, projectName, projectRoot, configValues, migrationLogs) {
let configDir = defaultConfigDir;
if ('configDir' in options) {
if (options.configDir !== defaultConfigDir) {
configDir = options.configDir;
}
options.configDir = (0, plugin_migration_utils_1.toProjectRelativePath)(options.configDir, projectRoot);
}
if (options.outputDir) {
options.outputDir = (0, plugin_migration_utils_1.toProjectRelativePath)(options.outputDir, projectRoot);
}
if ('styles' in options) {
delete options.styles;
}
if ('stylePreprocessorOptions' in options) {
delete options.stylePreprocessorOptions;
}
if ('docsMode' in options) {
configValues.docsMode = options.docsMode;
moveDocsModeToConfigFile(tree, configDir, projectName, migrationLogs, configDir === defaultConfigDir);
delete options.docsMode;
}
if ('staticDir' in options) {
configValues.staticDir = options.staticDir;
moveStaticDirToConfigFile(tree, configDir, projectName, migrationLogs, configDir === defaultConfigDir);
delete options.staticDir;
}
const storybookPropMappings = (0, utils_2.getInstalledPackageVersionInfo)(tree, 'storybook')?.major === 8
? utils_1.STORYBOOK_PROP_MAPPINGS.v8
: utils_1.STORYBOOK_PROP_MAPPINGS.v7;
for (const [prevKey, newKey] of Object.entries(storybookPropMappings)) {
if (prevKey in options) {
let prevValue = options[prevKey];
delete options[prevKey];
options[newKey] = prevValue;
}
}
}
function moveDocsModeToConfigFile(tree, configDir, projectName, migrationLogs, useConfigValues = true) {
const configFilePath = (0, utils_1.getConfigFilePath)(tree, configDir);
const configFileContents = tree.read(configFilePath, 'utf-8');
const sourceFile = (0, tsquery_1.ast)(configFileContents);
const CONFIG_OBJECT_SELECTOR = 'VariableDeclaration:has(Identifier[name=config]) ObjectLiteralExpression';
const DOCS_MODE_SELECTOR = 'PropertyAssignment:has(Identifier[name=docs]) PropertyAssignment:has(Identifier[name=docsMode])';
const DOCS_SELECTOR = 'PropertyAssignment:has(Identifier[name=docs])';
const configNodes = (0, tsquery_1.query)(sourceFile, CONFIG_OBJECT_SELECTOR);
if (configNodes.length === 0) {
// Invalid config file
migrationLogs.addLog({
project: projectName,
executorName: '@nx/storybook:build',
log: 'Could not find a valid Storybook Config to migrate `docsMode`. Update your `main.ts` file to add `docsMode`.',
});
return;
}
const configNode = configNodes[0];
const hasDocsMode = (0, tsquery_1.query)(configNode, DOCS_MODE_SELECTOR).length > 0;
if (hasDocsMode) {
return;
}
let startPosition = configNode.getStart() + 1;
let needsDocObject = true;
const docsNodes = (0, tsquery_1.query)(configNode, DOCS_SELECTOR);
if (docsNodes.length > 0) {
needsDocObject = false;
startPosition = docsNodes[0].getStart() + 1;
}
const docsModeInsert = `options.docsMode`;
const nodeToInsert = needsDocObject
? `docs: { docsMode: ${docsModeInsert} },`
: `docsMode: ${docsModeInsert},`;
tree.write(configFilePath, `${configFileContents.slice(0, startPosition)}${nodeToInsert}${configFileContents.slice(startPosition)}`);
}
function moveStaticDirToConfigFile(tree, configDir, projectName, migrationLogs, useConfigValues = true) {
const configFilePath = (0, utils_1.getConfigFilePath)(tree, configDir);
const configFileContents = tree.read(configFilePath, 'utf-8');
const sourceFile = (0, tsquery_1.ast)(configFileContents);
const CONFIG_OBJECT_SELECTOR = 'VariableDeclaration:has(Identifier[name=config]) ObjectLiteralExpression';
const STATIC_DIRS_SELECTOR = 'PropertyAssignment:has(Identifier[name=staticDirs])';
const configNodes = (0, tsquery_1.query)(sourceFile, CONFIG_OBJECT_SELECTOR);
if (configNodes.length === 0) {
// Invalid config file
migrationLogs.addLog({
project: projectName,
executorName: '@nx/storybook:build',
log: 'Could not find a valid Storybook Config to migrate `staticDir`. Update your `main.ts` file to add `staticDirs`.',
});
return;
}
const configNode = configNodes[0];
const hasStaticDir = (0, tsquery_1.query)(configNode, STATIC_DIRS_SELECTOR).length > 0;
if (hasStaticDir) {
return;
}
let startPosition = configNode.getStart() + 1;
const nodeToInsert = `staticDirs: options.staticDir,`;
tree.write(configFilePath, `${configFileContents.slice(0, startPosition)}${nodeToInsert}${configFileContents.slice(startPosition)}`);
}