From 4e45791bbf9401f93c2d35c9b71c2dcbd6b8bb08 Mon Sep 17 00:00:00 2001 From: Martin Hochel Date: Fri, 14 Jul 2023 13:29:50 +0200 Subject: [PATCH 1/2] feat(scripts-storybook): simplify codesanbox rule mapping logic --- scripts/storybook/src/rules.spec.ts | 21 +++++++++++++---- scripts/storybook/src/utils.js | 36 +++++++++++++++-------------- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/scripts/storybook/src/rules.spec.ts b/scripts/storybook/src/rules.spec.ts index 9e42b07eb7cdb4..1c6a65ccf9d2fd 100644 --- a/scripts/storybook/src/rules.spec.ts +++ b/scripts/storybook/src/rules.spec.ts @@ -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); const options = (codesandboxRule.use as { options: Record }).options; @@ -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), diff --git a/scripts/storybook/src/utils.js b/scripts/storybook/src/utils.js index c49b744eabb5a0..c7097596b58932 100644 --- a/scripts/storybook/src/utils.js +++ b/scripts/storybook/src/utils.js @@ -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'); @@ -162,27 +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', - '@fluentui/react-breadcrumb-preview', - '@fluentui/react-search-preview', - ]; - 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 @@ -197,6 +183,22 @@ function _createCodesandboxRule(allPackageInfo = getAllPackageInfo()) { return importMappings; } + + /** + * + * @param {string} projectName + */ + function isPackagePartOfReactComponentsSuite(projectName) { + const suiteProject = allPackageInfo['@fluentui/react-components']; + + // this is needed because react-northstar is a lerna sub-project thus `getAllPackageInfo` returns only projects within `packages/fluentui/` folder + if (suiteProject) { + const suiteDependencies = suiteProject.packageJson.dependencies ?? {}; + return Boolean(suiteDependencies[projectName]); + } + + return false; + } } /** From b1edf7ad9170cb7f55d61fb4abab16bfd7102abf Mon Sep 17 00:00:00 2001 From: Martin Hochel Date: Fri, 14 Jul 2023 13:31:57 +0200 Subject: [PATCH 2/2] feat(scripts-storybook): dont import packageName stories provided to getPackageStoriesGlob argument to make the function more generic --- apps/public-docsite-v9/.storybook/main.js | 6 +----- scripts/storybook/src/utils.js | 5 ++--- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/apps/public-docsite-v9/.storybook/main.js b/apps/public-docsite-v9/.storybook/main.js index f01ed2979ebb2f..ef7da777e61ffc 100644 --- a/apps/public-docsite-v9/.storybook/main.js +++ b/apps/public-docsite-v9/.storybook/main.js @@ -12,11 +12,7 @@ module.exports = /** @type {Omit