Skip to content

Commit

Permalink
feat(scripts-storybook): simplify codesanbox rule mapping logic
Browse files Browse the repository at this point in the history
  • Loading branch information
Hotell committed Jul 14, 2023
1 parent ed65f75 commit e08e9ef
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 20 deletions.
21 changes: 16 additions & 5 deletions scripts/storybook/src/rules.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,25 @@ import { codesandboxRule } from './rules';
describe(`rules`, () => {
describe(`codesandbox`, () => {
it(`should generate rule definition with overridden babel loader`, () => {
const unstablePackage = Object.values(getAllPackageInfo()).find(metadata => {
const allPackagesInfo = getAllPackageInfo();
const allPackagesInfoProjects = Object.values(allPackagesInfo);
const suitePackage = allPackagesInfo['@fluentui/react-components'];
const suitePackageDependencies = suitePackage.packageJson.dependencies ?? {};
const unstablePackage = allPackagesInfoProjects.find(metadata => {
return (
metadata.packagePath.includes('packages/') &&
metadata.packageJson.version.startsWith('9') &&
suitePackageDependencies[metadata.packageJson.name] &&
semver.prerelease(metadata.packageJson.version) !== null
);
});
const stableSuitePackages = allPackagesInfoProjects.reduce((acc, metadata) => {
if (
suitePackageDependencies[metadata.packageJson.name] &&
semver.prerelease(metadata.packageJson.version) === null
) {
acc[metadata.packageJson.name] = { replace: '@fluentui/react-components' };
}
return acc;
}, {} as Record<string, { replace: string }>);

const options = (codesandboxRule.use as { options: Record<string, unknown> }).options;

Expand All @@ -23,8 +35,7 @@ describe(`rules`, () => {
[
expect.any(Function),
expect.objectContaining({
'@fluentui/react-migration-v8-v9': { replace: '@fluentui/react-migration-v8-v9' },
'@fluentui/react-utilities': { replace: '@fluentui/react-components' },
...stableSuitePackages,
...(unstablePackage
? { [unstablePackage.packageJson.name]: { replace: '@fluentui/react-components/unstable' } }
: null),
Expand Down
28 changes: 13 additions & 15 deletions scripts/storybook/src/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const fs = require('fs');
const path = require('path');

const { fullSourcePlugin: babelPlugin } = require('@fluentui/babel-preset-storybook-full-source');
const { isConvergedPackage, getAllPackageInfo } = require('@fluentui/scripts-monorepo');
const { getAllPackageInfo } = require('@fluentui/scripts-monorepo');
const { stripIndents, offsetFromRoot, workspaceRoot, readProjectConfiguration } = require('@nrwl/devkit');
const { FsTree } = require('nx/src/generators/tree');
const semver = require('semver');
Expand Down Expand Up @@ -162,25 +162,13 @@ function _createCodesandboxRule(allPackageInfo = getAllPackageInfo()) {
'@fluentui/react-conformance-griffel',
];

// TODO: https://github.com/microsoft/fluentui/issues/26691
const packagesOutsideReactComponentsSuite = [
'@fluentui/react-data-grid-react-window',
'@fluentui/react-datepicker-compat',
'@fluentui/react-migration-v8-v9',
'@fluentui/react-migration-v0-v9',
];

const importMappings = Object.values(allPackageInfo).reduce((acc, cur) => {
if (excludePackages.includes(cur.packageJson.name)) {
return acc;
}

if (packagesOutsideReactComponentsSuite.includes(cur.packageJson.name)) {
acc[cur.packageJson.name] = { replace: cur.packageJson.name };
return acc;
}

if (isConvergedPackage({ packagePathOrJson: cur.packageJson, projectType: 'library' })) {
if (isPackagePartOfReactComponentsSuite(cur.packageJson.name)) {
// TODO: once all pre-release packages (deprecated approach) will be released as stable this logic will be removed
const isPrerelease = semver.prerelease(cur.packageJson.version) !== null;

acc[cur.packageJson.name] = isPrerelease
Expand All @@ -195,6 +183,16 @@ function _createCodesandboxRule(allPackageInfo = getAllPackageInfo()) {

return importMappings;
}

/**
*
* @param {string} projectName
*/
function isPackagePartOfReactComponentsSuite(projectName) {
const suiteProject = allPackageInfo['@fluentui/react-components'];
const suiteDependencies = suiteProject.packageJson.dependencies ?? {};
return Boolean(suiteDependencies[projectName]);
}
}

/**
Expand Down

0 comments on commit e08e9ef

Please sign in to comment.