diff --git a/.codesandbox/ci.json b/.codesandbox/ci.json index ca72bb41e8229..2cd7dc2ea27a1 100644 --- a/.codesandbox/ci.json +++ b/.codesandbox/ci.json @@ -2,5 +2,5 @@ "buildCommand": "build:codesandbox", "packages": ["packages/react", "packages/react-components/react-components"], "sandboxes": ["x5u3t", "spnyu"], - "node": "14" + "node": "16" } diff --git a/.devops/templates/tools.yml b/.devops/templates/tools.yml index 5b8b5d5004929..808451359407f 100644 --- a/.devops/templates/tools.yml +++ b/.devops/templates/tools.yml @@ -2,7 +2,7 @@ steps: - task: NodeTool@0 inputs: - versionSpec: '14.18.1' + versionSpec: '16.18.1' checkLatest: false displayName: 'Install Node.js' diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 85dac4ae69d1e..b938b699c70a2 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -55,9 +55,9 @@ #### NX related files /nx.json @microsoft/fluentui-react-build -/workspace.json @microsoft/fluentui-react-build /migrations.json @microsoft/fluentui-react-build + #### Meta and License stuff /LICENSE @microsoft/fluentui-react-build @justSlone @jurokapsiar @tudorpopams /packages/react/LICENSE @microsoft/fluentui-react-build @justSlone @jurokapsiar @tudorpopams @@ -293,3 +293,4 @@ packages/react-experiments/src/components/TileList @ThomasMichon **/api-extractor.json @microsoft/fluentui-react-build **/api-extractor.unstable.json @microsoft/fluentui-react-build **/.swcrc @microsoft/fluentui-react-build +**/project.json @microsoft/fluentui-react-build diff --git a/.github/workflows/check-packages.yml b/.github/workflows/check-packages.yml index 26c19808851d0..fc352c1c4a715 100644 --- a/.github/workflows/check-packages.yml +++ b/.github/workflows/check-packages.yml @@ -12,7 +12,7 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: 14.18.1 + node-version: 16.18.1 cache: 'yarn' - uses: tj-actions/changed-files@v34 @@ -44,7 +44,7 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: 14.18.1 + node-version: 16.18.1 - uses: actions/github-script@v6 with: @@ -70,7 +70,7 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: 14.18.1 + node-version: 16.18.1 - uses: actions/github-script@v6 with: diff --git a/.github/workflows/docsite-publish-chromatic.yml b/.github/workflows/docsite-publish-chromatic.yml index fc8ef562d8eba..20610ef7235f2 100644 --- a/.github/workflows/docsite-publish-chromatic.yml +++ b/.github/workflows/docsite-publish-chromatic.yml @@ -37,7 +37,7 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: 14.18.1 + node-version: 16.18.1 cache: 'yarn' - name: Install packages diff --git a/.github/workflows/docsite-publish-ghpages.yml b/.github/workflows/docsite-publish-ghpages.yml index f358f4ce03052..6cc781319d398 100644 --- a/.github/workflows/docsite-publish-ghpages.yml +++ b/.github/workflows/docsite-publish-ghpages.yml @@ -37,7 +37,7 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: 14.18.1 + node-version: 16.18.1 cache: 'yarn' - name: Install packages diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 0000000000000..88523c7a819c2 --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,198 @@ +name: PR CI + +on: + pull_request: + branches: + - master + +jobs: + prepare_env: + name: Prepare environment + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: '16.18.1' + + - name: Cache node_modules + id: cache-node-modules + uses: actions/cache@v3 + with: + path: '**/node_modules' + key: ${{ runner.os }}-node-modules-${{ hashFiles('**/yarn.lock') }} + + - name: Cache Cypress Binary + id: cache-cypress-binary + uses: actions/cache@v3 + with: + path: ~/.cache/Cypress + key: ${{ runner.os }}-cypress-binary-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-cypress-binary-${{ hashFiles('**/yarn.lock') }} + ${{ runner.os }}-cypress-binary- + + - name: Install packages + if: steps.cache-node-modules.outputs.cache-hit != 'true' || steps.cache-cypress-binary.outputs.cache-hit != 'true' + run: yarn install --prefer-offline --frozen-lockfile --non-interactive + + - name: List the state of node modules + run: yarn list + + - name: List node modules bin + continue-on-error: true + run: | + pwd + ls -la ~/.cache/ + find . -name "node_modules" -prune + + build_test_lint: + needs: [prepare_env] + name: Build, Test, Lint + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: '16.18.1' + + - name: Cache node_modules + id: cache-node-modules + uses: actions/cache@v3 + with: + path: '**/node_modules' + key: ${{ runner.os }}-node-modules-${{ hashFiles('**/yarn.lock') }} + + - name: List node modules bin + run: | + pwd + find . -name "node_modules" -prune + + - name: Install packages + if: steps.cache-node-modules.outputs.cache-hit != 'true' + run: yarn install --prefer-offline --frozen-lockfile --non-interactive + + - name: Build, Test, Lint + run: yarn nx run-many --targets=build,test,lint,type-check --parallel=8 + + build: + needs: [prepare_env] + name: Build + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: '16.18.1' + + - name: Cache node_modules + id: cache-node-modules + uses: actions/cache@v3 + with: + path: '**/node_modules' + key: ${{ runner.os }}-node-modules-${{ hashFiles('**/yarn.lock') }} + + - name: List node modules bin + run: | + pwd + find . -name "node_modules" -prune + + - name: Install packages + if: steps.cache-node-modules.outputs.cache-hit != 'true' + run: yarn install --prefer-offline --frozen-lockfile --non-interactive + + - name: Build + run: yarn nx run-many --targets=build --parallel=8 + + e2e: + needs: [prepare_env] + name: E2E target + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: '16.18.1' + + - name: Cache node_modules + id: cache-node-modules + uses: actions/cache@v3 + with: + path: '**/node_modules' + key: ${{ runner.os }}-node-modules-${{ hashFiles('**/yarn.lock') }} + + - name: Cache Cypress Binary + id: cache-cypress-binary + uses: actions/cache@v3 + with: + path: ~/.cache/Cypress + key: ${{ runner.os }}-cypress-binary-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-cypress-binary-${{ hashFiles('**/yarn.lock') }} + ${{ runner.os }}-cypress-binary- + + - name: Install packages + if: steps.cache-node-modules.outputs.cache-hit != 'true' || steps.cache-cypress-binary.outputs.cache-hit != 'true' + run: yarn install --prefer-offline --frozen-lockfile --non-interactive + + - name: E2E + run: yarn nx run-many --targets=e2e + + deploy: + needs: [prepare_env] + name: Deploy PR web + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: '16.18.1' + + - name: Cache node_modules + id: cache-node-modules + uses: actions/cache@v3 + with: + path: '**/node_modules' + key: ${{ runner.os }}-node-modules-${{ hashFiles('**/yarn.lock') }} + + - name: Install packages + if: steps.cache-node-modules.outputs.cache-hit != 'true' + run: yarn install --prefer-offline --frozen-lockfile --non-interactive + + - name: Build storybook + run: yarn nx run-many --targets=build-storybook --parallel=8 + + - name: Bundle + run: yarn nx run-many --targets=bundle --parallel=8 + + # - uses: actions/checkout@v3 + # - uses: actions/setup-node@v3 + # with: + # node-version-file: 'package.json' + # cache: 'yarn' + # cache-dependency-path: '**/yarn.lock' + # - name: install dependencies + # run: yarn install --frozen-lockfile + # - name: NX run-many + # run: yarn nx run-many --targets=build,test,lint,type-check --parallel=8 + + # - name: Upload npm package + # uses: actions/upload-artifact@v3 + # with: + # name: npm-package + # path: abc diff --git a/.nxignore b/.nxignore index 71226eaa4cbab..ee33ffa952c4a 100644 --- a/.nxignore +++ b/.nxignore @@ -1,4 +1,5 @@ -# Northstar files that doesn't belong to actual project to make nx workspace-lint pass +# Northstar files that doesn't belong to actual project to make nx workspace-lint pass + packages/fluentui/add-a-feature.md packages/fluentui/document-a-feature.md packages/fluentui/test-a-feature.md @@ -8,3 +9,4 @@ packages/fluentui/CONTRIBUTING.md packages/fluentui/README.md packages/fluentui/lerna.json packages/fluentui/package.json +**/dist/** diff --git a/apps/perf-test-react-components/project.json b/apps/perf-test-react-components/project.json new file mode 100644 index 0000000000000..4c5c92ae9073d --- /dev/null +++ b/apps/perf-test-react-components/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/perf-test-react-components", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [] +} diff --git a/apps/perf-test/project.json b/apps/perf-test/project.json new file mode 100644 index 0000000000000..f983aa336615d --- /dev/null +++ b/apps/perf-test/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/perf-test", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [] +} diff --git a/apps/pr-deploy-site/project.json b/apps/pr-deploy-site/project.json new file mode 100644 index 0000000000000..82bf5d5badb83 --- /dev/null +++ b/apps/pr-deploy-site/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/pr-deploy-site", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [] +} diff --git a/apps/public-docsite-resources/project.json b/apps/public-docsite-resources/project.json new file mode 100644 index 0000000000000..75a8e74903db1 --- /dev/null +++ b/apps/public-docsite-resources/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/public-docsite-resources", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [] +} diff --git a/apps/public-docsite-v9/package.json b/apps/public-docsite-v9/package.json index f3cb469bd18d4..c13836cabfa5e 100644 --- a/apps/public-docsite-v9/package.json +++ b/apps/public-docsite-v9/package.json @@ -5,7 +5,7 @@ "description": "Fluent UI React v9 documentation", "scripts": { "build": "just-scripts build", - "build-storybook": "build-storybook -o ./dist/storybook --docs && node ./.storybook/fix-title.js 'Fluent UI React v9' ../dist", + "build-storybook": "build-storybook --no-manager-cache -o ./dist/storybook --docs && node ./.storybook/fix-title.js 'Fluent UI React v9' ../dist", "chromatic:branch": "npx chromatic@6.4.3 --project-token $CHROMATIC_PROJECT_TOKEN --exit-zero-on-changes --build-script-name build-storybook", "chromatic": "npx chromatic@6.4.3 --project-token $CHROMATIC_PROJECT_TOKEN --exit-zero-on-changes --build-script-name build-storybook --branch-name microsoft:master", "clean": "just-scripts clean", diff --git a/apps/public-docsite-v9/project.json b/apps/public-docsite-v9/project.json new file mode 100644 index 0000000000000..b9a98ea19ff47 --- /dev/null +++ b/apps/public-docsite-v9/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/public-docsite-v9", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [], + "tags": ["platform:web"] +} diff --git a/apps/public-docsite/project.json b/apps/public-docsite/project.json new file mode 100644 index 0000000000000..b23eec7529592 --- /dev/null +++ b/apps/public-docsite/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/public-docsite", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [] +} diff --git a/apps/react-18-tests-v8/cypress.config.ts b/apps/react-18-tests-v8/cypress.config.ts index ca52cf041bbf2..196718d811c23 100644 --- a/apps/react-18-tests-v8/cypress.config.ts +++ b/apps/react-18-tests-v8/cypress.config.ts @@ -1,3 +1,29 @@ +import * as path from 'path'; import { baseConfig } from '@fluentui/scripts-cypress'; +import { TsconfigPathsPlugin } from 'tsconfig-paths-webpack-plugin'; + +registerTsPaths({ + configFile: path.resolve(__dirname, '../../tsconfig.base.v8.json'), + config: baseConfig.component.devServer.webpackConfig, +}); export default baseConfig; + +// TODO copied from scripts/storybook/utils - make it generic helper (out of SB domain) +function registerTsPaths(options: { configFile: string; config: import('webpack').Configuration }) { + // eslint-disable-next-line @typescript-eslint/no-shadow + const { config, configFile } = options; + const tsPaths = new TsconfigPathsPlugin({ + configFile, + }); + + config.resolve = config.resolve ?? {}; + config.resolve.plugins = config.resolve.plugins ?? []; + + // remove existing to prevent multiple tspaths plugin + config.resolve.plugins = config.resolve.plugins.filter(plugin => !(plugin instanceof TsconfigPathsPlugin)); + + config.resolve.plugins.push(tsPaths); + + return config; +} diff --git a/apps/react-18-tests-v8/jest.config.js b/apps/react-18-tests-v8/jest.config.js index dc4ce5443ae58..ed97661ee1f5d 100644 --- a/apps/react-18-tests-v8/jest.config.js +++ b/apps/react-18-tests-v8/jest.config.js @@ -15,7 +15,8 @@ if (config.globals) { // override ts-jest config, otherwise it gets merged config.globals['ts-jest'] = { tsconfig: '/tsconfig.spec.json', - diagnostics: { warnOnly: true /* , exclude: ['packages/**'] */ }, + // diagnostics: { warnOnly: true /* , exclude: ['packages/**'] */ }, + isolatedModules: true, }; } diff --git a/apps/react-18-tests-v8/package.json b/apps/react-18-tests-v8/package.json index 64c8cf29061da..4e732254c8d52 100644 --- a/apps/react-18-tests-v8/package.json +++ b/apps/react-18-tests-v8/package.json @@ -4,7 +4,7 @@ "version": "8.0.0", "private": true, "scripts": { - "type-check": "tsc -p tsconfig.react-compat-check.json", + "type-check": "just-scripts type-check", "format": "prettier -w . --ignore-path ../.prettierignore", "format:check": "yarn format -c", "e2e": "cypress run --component", diff --git a/apps/react-18-tests-v8/project.json b/apps/react-18-tests-v8/project.json new file mode 100644 index 0000000000000..50bbbaf1cc75a --- /dev/null +++ b/apps/react-18-tests-v8/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/react-18-tests-v8", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [] +} diff --git a/apps/react-18-tests-v8/tsconfig.app.json b/apps/react-18-tests-v8/tsconfig.app.json index 356da34103c91..3ea5d8ff43cf2 100644 --- a/apps/react-18-tests-v8/tsconfig.app.json +++ b/apps/react-18-tests-v8/tsconfig.app.json @@ -4,8 +4,6 @@ "noEmit": false, "lib": ["ES2019", "dom"], "outDir": "dist", - "declaration": true, - "declarationDir": "dist/types", "inlineSources": true, "types": ["static-assets", "environment", "node"] }, diff --git a/apps/react-18-tests-v8/tsconfig.json b/apps/react-18-tests-v8/tsconfig.json index dee30dfd6569d..d307c00123387 100644 --- a/apps/react-18-tests-v8/tsconfig.json +++ b/apps/react-18-tests-v8/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.base.v8.json", "compilerOptions": { - "module": "CommonJS", "target": "ES2019", "noEmit": true, "isolatedModules": true, diff --git a/apps/react-18-tests-v8/tsconfig.react-compat-check.json b/apps/react-18-tests-v8/tsconfig.react-compat-check.json deleted file mode 100644 index 0f82e55cfd403..0000000000000 --- a/apps/react-18-tests-v8/tsconfig.react-compat-check.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.app.json", - "compilerOptions": { - "noEmit": true, - "paths": {} - } -} diff --git a/apps/react-18-tests-v9/jest.config.js b/apps/react-18-tests-v9/jest.config.js index ff2e84e73010a..08de436edf022 100644 --- a/apps/react-18-tests-v9/jest.config.js +++ b/apps/react-18-tests-v9/jest.config.js @@ -9,7 +9,7 @@ module.exports = { globals: { 'ts-jest': { tsconfig: '/tsconfig.spec.json', - diagnostics: { warnOnly: true, exclude: ['packages/**'] }, + isolatedModules: true, }, }, transform: { diff --git a/apps/react-18-tests-v9/package.json b/apps/react-18-tests-v9/package.json index 91ba3aedf089b..d1949926dc4ee 100644 --- a/apps/react-18-tests-v9/package.json +++ b/apps/react-18-tests-v9/package.json @@ -4,7 +4,7 @@ "version": "1.0.0", "private": true, "scripts": { - "type-check": "tsc -p tsconfig.react-compat-check.json", + "type-check": "just-scripts type-check", "lint": "eslint --ext .js,.ts,.tsx ./src", "test": "jest --passWithNoTests", "format": "prettier -w . --ignore-path ../.prettierignore", diff --git a/apps/react-18-tests-v9/project.json b/apps/react-18-tests-v9/project.json new file mode 100644 index 0000000000000..7e3fd6c56c96b --- /dev/null +++ b/apps/react-18-tests-v9/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/react-18-tests-v9", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [] +} diff --git a/apps/react-18-tests-v9/tsconfig.app.json b/apps/react-18-tests-v9/tsconfig.app.json index cb6d5e2758841..276de9661659a 100644 --- a/apps/react-18-tests-v9/tsconfig.app.json +++ b/apps/react-18-tests-v9/tsconfig.app.json @@ -4,8 +4,6 @@ "noEmit": true, "lib": ["ES2019", "dom"], "outDir": "dist", - "declaration": true, - "declarationDir": "dist/types", "inlineSources": true, "types": ["static-assets", "environment"] }, diff --git a/apps/react-18-tests-v9/tsconfig.json b/apps/react-18-tests-v9/tsconfig.json index 302fdc40bf2bc..1af2781176ae8 100644 --- a/apps/react-18-tests-v9/tsconfig.json +++ b/apps/react-18-tests-v9/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "module": "CommonJS", "target": "ES2019", "noEmit": true, "isolatedModules": true, diff --git a/apps/react-18-tests-v9/tsconfig.react-compat-check.json b/apps/react-18-tests-v9/tsconfig.react-compat-check.json deleted file mode 100644 index 0f82e55cfd403..0000000000000 --- a/apps/react-18-tests-v9/tsconfig.react-compat-check.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.app.json", - "compilerOptions": { - "noEmit": true, - "paths": {} - } -} diff --git a/apps/recipes-react-components/package.json b/apps/recipes-react-components/package.json index 350fdf1258577..86389442545c1 100644 --- a/apps/recipes-react-components/package.json +++ b/apps/recipes-react-components/package.json @@ -9,7 +9,7 @@ "format": "prettier . -w --ignore-path ../../.prettierignore", "lint": "just-scripts lint", "start": "start-storybook", - "type-check": "tsc" + "type-check": "just-scripts type-check" }, "devDependencies": { "@fluentui/eslint-plugin": "*", diff --git a/apps/recipes-react-components/project.json b/apps/recipes-react-components/project.json new file mode 100644 index 0000000000000..de77688b4e461 --- /dev/null +++ b/apps/recipes-react-components/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/recipes-react-components", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [], + "sourceRoot": "apps/recipes-react-components/src", + "tags": ["vNext"] +} diff --git a/apps/recipes-react-components/tsconfig.app.json b/apps/recipes-react-components/tsconfig.app.json index 3d2934d25d2a7..0bc887260b58f 100644 --- a/apps/recipes-react-components/tsconfig.app.json +++ b/apps/recipes-react-components/tsconfig.app.json @@ -1,11 +1,8 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "noEmit": true, "lib": ["ES2019", "dom"], - "declaration": true, "inlineSources": true }, - "exclude": [], "include": ["./src/**/*.ts", "./src/**/*.tsx"] } diff --git a/apps/recipes-react-components/tsconfig.json b/apps/recipes-react-components/tsconfig.json index c7a240c7fbce9..e14521bc08f44 100644 --- a/apps/recipes-react-components/tsconfig.json +++ b/apps/recipes-react-components/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "module": "commonjs", "target": "ES2019", "noEmit": true, "isolatedModules": true, diff --git a/apps/ssr-tests-v9/jest.config.js b/apps/ssr-tests-v9/jest.config.js index 3b7292734386e..b607beb59a761 100644 --- a/apps/ssr-tests-v9/jest.config.js +++ b/apps/ssr-tests-v9/jest.config.js @@ -9,7 +9,8 @@ module.exports = { globals: { 'ts-jest': { tsconfig: '/tsconfig.spec.json', - diagnostics: false, + // diagnostics: false, + isolatedModules: true, }, }, transform: { diff --git a/apps/ssr-tests-v9/package.json b/apps/ssr-tests-v9/package.json index 9cfdcfffdb8a3..c60f5b01ee086 100644 --- a/apps/ssr-tests-v9/package.json +++ b/apps/ssr-tests-v9/package.json @@ -17,7 +17,7 @@ "test:unit": "jest", "test:ssr": "ts-node --swc ./src/test.ts", "test": "yarn test:unit && yarn test:ssr", - "type-check": "tsc -b tsconfig.json" + "type-check": "just-scripts type-check" }, "dependencies": { "@fluentui/react-components": "^9.18.6" diff --git a/apps/ssr-tests-v9/project.json b/apps/ssr-tests-v9/project.json new file mode 100644 index 0000000000000..464534f411fec --- /dev/null +++ b/apps/ssr-tests-v9/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/ssr-tests-v9", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [], + "sourceRoot": "apps/ssr-tests-v9/src", + "tags": ["vNext", "platform:node"] +} diff --git a/apps/ssr-tests/project.json b/apps/ssr-tests/project.json new file mode 100644 index 0000000000000..4d96515e163a7 --- /dev/null +++ b/apps/ssr-tests/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/ssr-tests", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [] +} diff --git a/apps/stress-test/jest.config.js b/apps/stress-test/jest.config.js index 3b7292734386e..b607beb59a761 100644 --- a/apps/stress-test/jest.config.js +++ b/apps/stress-test/jest.config.js @@ -9,7 +9,8 @@ module.exports = { globals: { 'ts-jest': { tsconfig: '/tsconfig.spec.json', - diagnostics: false, + // diagnostics: false, + isolatedModules: true, }, }, transform: { diff --git a/apps/stress-test/project.json b/apps/stress-test/project.json new file mode 100644 index 0000000000000..0a12a627bdb8b --- /dev/null +++ b/apps/stress-test/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/stress-test", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [] +} diff --git a/apps/test-bundles/project.json b/apps/test-bundles/project.json new file mode 100644 index 0000000000000..c9d44a5c03e07 --- /dev/null +++ b/apps/test-bundles/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/test-bundles", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [] +} diff --git a/apps/theming-designer/project.json b/apps/theming-designer/project.json new file mode 100644 index 0000000000000..e6f8d6b937a0a --- /dev/null +++ b/apps/theming-designer/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/theming-designer", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [] +} diff --git a/apps/ts-minbar-test-react-components/project.json b/apps/ts-minbar-test-react-components/project.json new file mode 100644 index 0000000000000..2be40c29f9242 --- /dev/null +++ b/apps/ts-minbar-test-react-components/project.json @@ -0,0 +1,5 @@ +{ + "name": "@fluentui/ts-minbar-test-react-components", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application" +} diff --git a/apps/ts-minbar-test-react/project.json b/apps/ts-minbar-test-react/project.json new file mode 100644 index 0000000000000..f1d81e90b846d --- /dev/null +++ b/apps/ts-minbar-test-react/project.json @@ -0,0 +1,5 @@ +{ + "name": "@fluentui/ts-minbar-test-react", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application" +} diff --git a/apps/vr-tests-react-components/jest.config.js b/apps/vr-tests-react-components/jest.config.js index ee67c7a86d250..ecd81f304df79 100644 --- a/apps/vr-tests-react-components/jest.config.js +++ b/apps/vr-tests-react-components/jest.config.js @@ -9,7 +9,8 @@ module.exports = { globals: { 'ts-jest': { tsconfig: '/tsconfig.json', - diagnostics: false, + // diagnostics: false, + isolatedModules: true, }, }, transform: { diff --git a/apps/vr-tests-react-components/package.json b/apps/vr-tests-react-components/package.json index eb581fcc1bd98..09ce17e876128 100644 --- a/apps/vr-tests-react-components/package.json +++ b/apps/vr-tests-react-components/package.json @@ -4,14 +4,13 @@ "private": true, "description": "Visual regression tests for @fluentui/react-components", "scripts": { - "build": "build-storybook --no-manager-cache -o dist/storybook", "clean": "just-scripts clean", "format": "prettier . -w --ignore-path ../../.prettierignore", "lint": "just-scripts lint", "start": "start-storybook", "test": "just-scripts test", "type-check": "tsc", - "vr:build": "yarn build", + "vr:build": "build-storybook --no-manager-cache -o dist/storybook", "vr:test": "storywright --browsers chromium --url dist/storybook --destpath dist/screenshots --waitTimeScreenshot 500 --concurrency 4 --headless true" }, "devDependencies": { diff --git a/apps/vr-tests-react-components/project.json b/apps/vr-tests-react-components/project.json new file mode 100644 index 0000000000000..a347d6ab8c83b --- /dev/null +++ b/apps/vr-tests-react-components/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/vr-tests-react-components", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "sourceRoot": "apps/vr-tests-react-components/src", + "implicitDependencies": [] +} diff --git a/apps/vr-tests/package.json b/apps/vr-tests/package.json index fdb396b707f77..98154583ddcfb 100644 --- a/apps/vr-tests/package.json +++ b/apps/vr-tests/package.json @@ -4,14 +4,13 @@ "private": true, "description": "Visual regression tests for Fluent UI React", "scripts": { - "build": "build-storybook --no-manager-cache -o dist/storybook", "clean": "just-scripts clean", "code-style": "just-scripts code-style", "just": "just-scripts", "lint": "just-scripts lint", "start": "start-storybook -p 3000", "type-check": "tsc", - "vr:build": "yarn build", + "vr:build": "build-storybook --no-manager-cache -o dist/storybook", "vr:test": "storywright --browsers chromium --url dist/storybook --destpath dist/screenshots --waitTimeScreenshot 500 --concurrency 4 --headless true" }, "devDependencies": { diff --git a/apps/vr-tests/project.json b/apps/vr-tests/project.json new file mode 100644 index 0000000000000..1d81d89c7a987 --- /dev/null +++ b/apps/vr-tests/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/vr-tests", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [] +} diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 989520511d028..3d54aea4b4280 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -17,51 +17,136 @@ variables: pool: '1ES-Host-Ubuntu' jobs: - - job: BuildTestLint + - job: Lage_Tests workspace: clean: all steps: - template: .devops/templates/tools.yml - - task: Bash@3 - inputs: - filePath: yarn-ci.sh - displayName: yarn (install packages) + - script: | + yarn install + displayName: yarn - script: | - yarn nx workspace-lint - yarn nx run @fluentui/nx-workspace-tools:check-graph - displayName: NX workspace lint + yarn lage test + displayName: test + + - template: .devops/templates/cleanup.yml + + - job: Lage + workspace: + clean: all + steps: + - template: .devops/templates/tools.yml + + - script: | + yarn install + displayName: yarn + + - script: | + yarn lage build test lint type-check + displayName: build, test, lint, type-check + + - template: .devops/templates/cleanup.yml + + - job: Lage_Lint + workspace: + clean: all + steps: + - template: .devops/templates/tools.yml - script: | - # @fluentui/api-docs is used within apps/public-docsite-resources/just.config.ts thus it needs to be build in advance - yarn workspace @fluentui/api-docs build - yarn tsc -p ./tsconfig.json - displayName: Type-check just.config.ts files + yarn install + displayName: yarn - script: | - yarn check:installed-dependencies-versions - displayName: 'check packages: installed dependencies versions' + yarn lage lint + displayName: lint + + - template: .devops/templates/cleanup.yml + + - job: NX + workspace: + clean: all + steps: + - template: .devops/templates/tools.yml - script: | - if [[ -n "$(targetBranch)" ]]; then - yarn format --since $(targetBranch) --check - else - yarn format --all --check - fi - displayName: check formatting + yarn install + displayName: yarn - ## Danger.js checks for Fluent UI N* - script: | - DANGER_DISABLE_TRANSPILATION="true" yarn danger ci - displayName: danger - condition: eq(variables.isPR, true) - env: - DANGER_GITHUB_API_TOKEN: $(DANGER_GITHUB_API_TOKEN) + yarn nx run-many --targets=build,test,lint,type-check --parallel=8 + # yarn affected:run --base=$(targetBranch) --target=build --target=test --target=lint --target=type-check + displayName: build, test, lint, type-check + + - template: .devops/templates/cleanup.yml + + - job: NX_Affected + workspace: + clean: all + steps: + - template: .devops/templates/tools.yml - script: | - yarn buildci $(sinceArg) - displayName: build, test, lint + yarn install + displayName: yarn + + - script: | + yarn nx affected --targets=build,test,lint,type-check --parallel=8 --base=$(targetBranch) + displayName: build, test, lint, type-check + + - template: .devops/templates/cleanup.yml + + - job: Nx_Tests + workspace: + clean: all + steps: + - template: .devops/templates/tools.yml + + - script: | + yarn install + displayName: yarn + + - script: | + yarn nx run-many --target=test --parallel=8 --maxWorkers=4 + displayName: test + + - template: .devops/templates/cleanup.yml + + - job: Nx_Lint + workspace: + clean: all + steps: + - template: .devops/templates/tools.yml + + - script: | + yarn install + git diff yarn.lock + git diff package.json + displayName: yarn + + - script: | + yarn nx run-many --target=lint --parallel=8 + displayName: lint + + - template: .devops/templates/cleanup.yml + + - job: E2E_new + displayName: E2E new + workspace: + clean: all + steps: + - template: .devops/templates/tools.yml + + - task: Bash@3 + inputs: + filePath: yarn-ci.sh + displayName: yarn + + - script: | + yarn e2e $(sinceArg) + displayName: Cypress E2E tests - template: .devops/templates/cleanup.yml diff --git a/docs/ci-data.md b/docs/ci-data.md new file mode 100644 index 0000000000000..cd5293007f05d --- /dev/null +++ b/docs/ci-data.md @@ -0,0 +1,374 @@ +# CI data (time metrics from running pipelines on whole monorepo) + +**Legend:** + +- optimization v1 => narrowing tsconfig for v9 `isConformance` / https://uifabric.visualstudio.com/fabricpublic/_build/results?buildId=291729&view=logs&j=4fecd60f-6595-5d51-257b-4743b034536f&t=0df5d56b-1f79-5ca2-2e20-703f84ecb970 +- optimization v2 => removing runInBand,maxWorkers,coverage from jest execution in v0,v8 / + +| CI Run (test,build,lint,type-check --all) | time | remarks | +| ------------------------------------------------------------------ | ------- | -------------------------------------------------------- | +| NX test optimization v1 | 50m 14s | | +| Lage test optimization v1 | 49m 38s | | +| NX test optimization v2 | ? | | +| Lage test optimization v2 | ? | | +| NX with maxWorkers=4 (v0,v8) | 42m 0s | | +| Lage with maxWorkers=4 (v0,v8) | 49m 0s | | +| NX with maxWorkers=4 (v0,v8,v9) | 38m 20s | | +| Lage with maxWorkers=4 (v0,v8,v9) | 58m 0s | 💀 pipeline reached 1 hour threshold | +| NX with maxWorkers=4 (v0,v8,v9) + ts-jest isolatedModules | 37m 5s | 🚅 (most effective testing perf optimizations) | +| Lage with maxWorkers=4 (v0,v8,v9)+ ts-jest isolatedModules | ??m 0s | 💀 pipeline reached 1 hour threshold | +| ---- | | ------- | +| NX (with test opt) + type-check optimization | 33m 35s | 🚅🚅🚅 (fastest !!!) | +| Lage (with test opt) + type-check optimization | xxx | 🚨 didn't finish - invalid targets dependency resolution | +| ---- | | ------- | +| NX (with test opt) + type-check optimization + build optimization | 34m 48s | data with rebase from master (+200 commits) | +| Lage (with test opt) + type-check optimization+ build optimization | xxx | 🚨 didn't finish - invalid targets dependency resolution | + +# Optimizations + +During analysis of our tasks/pipelines we found various opportunities how to improve our pipeline speeds to enable faster time do delivery. + +Following Chapters contain most impactful findings with some amount of detail for how to enable them. + +We were able to implement some of these suggestions during experimentation phase which gave us following worst case scenario pipeline durations. + +> **Note:** +> +> With improvements also uses Node 16, which is more subtle to OOM/unhandled promise rejections (initially we weren't able to make it pass until we landed some of optimizations described in this document) + +| CI Run (test,build,lint,type-check --all) | time | failure rate (Timeout/OOM) | +| ----------------------------------------- | ---- | -------------------------- | +| current | 40m | 50% | +| with improvements | 30m | 0% | + +## Stop using TS path aliases on CI + +Using TS path aliases provides excellent DX and blazing fast Application Bundling speeds with tools like swc or esbuild. + +For running `type-check` and d.ts emit within our codebase it inflicts huge performance penalty, as TSC needs to traverse and parse all the paths on every run. + +For `type-check` in particular, which is used by running `tsc -b` on ts solution configuration per project, the performance penalty is the biggest. + +By stopping using path aliases on CI for type-checks we will get 40% speed bumps for type-checking ! + +**Speed metrics:** + +| Run type | time | delta | +| ------------------------------ | ------- | -------- | +| current / parallel 1 | 16m 41s | | +| with optimization / parallel 1 | 9m 57s | 40,4% 🚅 | +| | | | +| current / parallel 8 | 3m 20s | | +| with optimization / parallel 8 | 2m 12s | 34% 🚅 | + +### Blockers: + +#### Storybook Stories + +Because our approach to stories we create circular dependency between packages. + +_Example:_ + +`react-table` stories import from `react-data-grid-react-window`, while `react-data-grid-react-window` production code imports from `react-table`. + +``` +react-table <---> react-data-grid-react-window +``` + +This makes it impossible to implement turning off path aliases for type-checks on CI, because following task relationship will not work: + +`generate-api` --> `type-check` + +#### Possible solutions (Storybook Stories) + +**1. lets keep things as is - having the per penalty increased with every new line of code** + +**2. make stories separate packages** + +```diff ++react-text-stories/ ++ |- .storybook ++ |- src ++ |- package.json ++ |- project.json +react-text/ +- |- .storybook/ +- |- stories/ + |- src/ + |- package.json + |- project.json +``` + +**3. make stories separate packages - via nx "hack"** + +```diff +react-text/ + |- .storybook/ + |- stories/ ++ |- package.json ++ |- project.json + |- src/ + |- package.json + |- project.json +``` + +This approach might be a ticking bomb as we are approaching a package within package (regarding resolution algorithms and tools). + +Clean approach would be to restructure folder structure to following: + +```sh +react-text/ + |- stories/ + |- .storybook/ + |- src/ + |- package.json + |- project.json + |- tsconfig.json + |- impl/ + |- src/ + |- package.json + |- project.json + |- tsconfig.json + |- tsconfig.lib.json + |- tsconfig.spec.json + |- tsconfig.cy.json + |- impl/ +``` + +**4. generate dts manually before running `type-check` on CI** + +Before `type-check` pipeline is run we manually generate type declaration for all v9 packages present in stories. + +_Simplified flow:_ + +- `tsc -p tsconfig.lib.json` within `react-components` +- parse story files to create import Map and run `tsc -p tsconfig.lib.json` on those dependencies that exist in stories but are not part of `react-components` suite +- create temporary `tsconfig.base.dts.json` that will map to `.d.ts` path aliases instead of `.ts` source files +- start `type-check` pipeline + +## Enable `incremental` for TS solution configs + `emitDeclarationOnly` + +By enabling `incremental:true` for projects that use TS Solution configs, we will get around 15% perf boost. + +This improvement will be leveraged on [`type-check` --depends on--> `generate-api`] task execution relationship, +where `type-check` will leverage incremental emit metadata from running `tsc -p tsconfig.lib.json (part of generate api)`. + +**Speed metrics:** + +| Run: yarn workspace @fluentui/react-table tsc -b | time | delta | +| -------------------------------------------------------------------- | ----------------------- | ------ | +| current | 27.73s | | +| with incremental: true / 1st(cold) run | 27.73s | | +| with incremental: true / 2nd run | 4.4s | | +| -- | | | +| current / (tsc -p tsconfig.lib + tsc -b tsconfig.json) | (6.86s + 22.32s) 29.18s | | +| with incremental:true / (tsc -p tsconfig.lib + tsc -b tsconfig.json) | (6.83s + 18.07) 24.9s | 15% 🚅 | + +## Migrate react(v8) to TS solution configs + +Besides small speed benefits, using solution configs will provide additional ones like: + +- mitigate any type globals leaks +- narrows down dep tree of files for both build and test execution that will give us around 5% speed boost +- lower memory pressure on conformance tests + +**Speed metrics:** + +| command: `@fluentui/react test --no-cache --runInBand` | time | delta | remarks | +| ------------------------------------------------------ | ---- | ----- | ------- | +| ts-jest (current state) | 281s | BASE | | +| ts-jest + tsconfig.spec.json config + target: ES2019 | 270s | 4% | | + +## Emit declarations only - react-northstar + +v0 uses solely babel for transpilation thus tsc is doing unnecessary work. TSC should generate only declaration files. This will give use approx 10% speed bump. + +## Jest Test transform tweaks + +- use `@swc/jest` for v9 - this will give us up to 10% speed boost +- use ts-jest with `isolatedModules` for v8 + - v8 explodes with swc/jest - additional work needed + +**Speed metrics:** + +| command: `@fluentui/react test --no-cache --runInBand` | time | delta | remarks | +| ------------------------------------------------------ | ---- | ----- | ------- | +| ts-jest (current state) | 281s | BASE | | +| ts-jest + `isolatedModules:true` | 260s | 7% | | + +## stop running Code Coverage on CI + +Slows test execution up to 10% (present in react-northstar) + +| Run type | time | command | +| --------------- | ----- | -------------------------------------------------------------------------- | +| current | 382 s | `gulp test --config ./jest.config.js --coverage --maxWorkers=2 --no-cache` | +| without codecov | 340 s | `gulp test --config ./jest.config.js --maxWorkers=2 | + +## Tests memory leaks + +Both v0 and v8 tests contain memory leaks and consume above **2GB of memory per test** !!! + +> discovered while executing via raw `jest` instead `gulp` + +``` +A worker process has failed to exit gracefully and has been force exited. This is likely caused by tests leaking due to improper teardown. Try running with --detectOpenHandles to find leaks. Active timers can also cause this, ensure that .unref() was called on them. +``` + +By cleaning up those tests to not leak / not drastically add memory heap, we could make them run faster as is and enable full `maxWorkers` count (we use 8 core CPUs on CI) which would drastically cut time execution. + +**Speed metrics:** + +| Run type (node --expose-gc ../../node_modules/.bin/jest --runInBand --logHeapUsage --no-cache ) | max heap size (MB) | delta | +| ----------------------------------------------------------------------------------------------- | ------------------ | ----- | +| conformance | 2029 MB | | +| no conformance | 1819 MB | | +| fixed leaks attempt 1 + conformance | 1954 MB | 4% | +| fixed leaks attempt 1 + no conformance | 1618 MB | 11% | + +## Components Conformance Tests + +**Speed metrics::** + +_Legend:_ + +- optimization v1 = fixing react-conformance to consume tsconfig.lib.json for ts solution projects +- optimization v2 = removing creation of TS Program via `ts.createProgram()`. + - > Note: with optimization v2, optimization v1 is not needed as that's logic is not invoked + +| command: `yarn workspace @fluentui/react-text --no-cache --runInBand` | time | delta | remarks | +| --------------------------------------------------------------------- | ----- | ----- | ------- | +| 1) ts-jest (current state) | 69s | BASE | | +| 2) optimization v1 + ts-jest | 37.43 | 46% | | +| 3) optimization v1 + swc | 28.79 | 58% | | +| 4) optimization v2 + ts-jest | 20.16 | 71% | | +| 5) optimization v2 + swc | 15.10 | 78% | | + +**Summary:** + +From the performance metrics 4th and 5th approach is clear winner in terms of performance. +🥶 Unfortunately, that approach (nor 4 nor 5) cannot be possible achieved with current conformance architecture. + +Why? + +Because of jest architecture - every test is executed in separate sandbox and executed in parallel( runInBand wont solve anything), thus we cannot cache anything per test scenario (in our case TS program instance) on global level (only serializable data via globalConfig hook). +What's the issue with TS program ? it is re-created on every test for exactly same set of compiler options and files. This has also implication where "bigger codebase of package" === "longer time to execute" + +### narrow down TS program + +For v9 we use TS path aliases. react-conformance will consume those solution config which cause to load huge trees of programs that inflict big perf slowdown. + +We can consume `tsconfig.lib.json` for ts solution projects which will gain us **45% speed boost** + +### mitigate need of TS program use + +We can do partial rewrite of react-conformance to create TS program via ` removing creation of TS Program via ``ts.createProgram() ` only when necessary (lazily). With that we can get up to 70% speed boost case ( depends on usage of conformance test scenarios ) + +### architecture rewrite + +Our UI controls conformance architecture inflicts one of the the biggest performance impacts (bottleneck). It needs to be rewritten in a way where TS program are created only once - a set of Eslint rules is excellent candidate for this. + +## Task runner/s change + +Replace gulp and just with nx executors/native node scripts. + +Every gulp and just execution takes 2-3 seconds. + +> lets say we have 150 projects in monorepo, every project has 4 tasks. If run everything in series only the task runner boot will take 30 minutes (150 x 4 x 3) 🥶 + +**Example:** + +running `yarn workspace @fluentui/react-button build`: + +> `build` is executed via just-scripts + +| command/task | time | delta | remarks | +| ----------------- | ------------ | ----- | ---------------------------------------------------------------------------------------------------------------------------- | +| just-scripts | 2-3s | 25% | 🔥 / invoking just tasks adds 2-3 seconds in comparison with running those by raw binaries !!! | +| copy-compiled | 0.8s - 1.85s | 15% | 🔥 / time spent here depends on amount of files and targets that exist (esm/cjs/amd) | +| ts:compile | 3.0s | 25% | invokes tsc 2-3 times (based on target spec) | +| ts:postprocess | 0.0s | 0% | noop | +| babel:postprocess | 1.8s | 14.7% | 🔥 / we do imperative source map creation (why?). Also same transform is executed twice , once for esm output , once for cjs | +| api-extractor | 2.6s | 21.3% | long time as expected as it needs to create TSC program similar to ts:compile + run rolluping | +| | | | | +| SUM | 12.25s | | | + +## `e2e` target leveraging TS path aliases for bundling + +> TL;DR enable pathAliases processed via esbuild/swc to run e2e without need to build anything. Speed bumps up to 60% + +ATM e2e task execution is mixed with bundle and deploy in 1 job. We have setup already in place where we don't need to physically trigger `build` nor `bundle` tasks for `e2e` execution, thus decouple these jobs. + +By doing that we can get following speed improvements: + +| command: `nx run-many --target=e2e --skip-cache` | time | delta | remarks | +| ------------------------------------------------ | -------------------------- | ----- | ------- | +| current | 13m 16s(bundle) + 6m (e2e) | BASE | | +| with path aliases | 6m 41s (bundle + e2e) | 65% | | + +**Solution Suggestion:** + +1. Decouple existing `Deploy & E2E` pipeline +2. enable ts path aliases bundling for all e2e and make it part of main (build,test,lint job) + +## apps `build` target change + +most of application that live within `apps` leverage path aliases with esbuild/swc. + +Using that setup for bundling is more than 50% faster then using incremental build based on our repo dependency tree. + +**Solution Suggestion:** + +We could rename target `build` to `bundle-app`. This would stop triggering `build` on every package on every PR/Release. + +## Decoupling dependency tree + +Mitigate v8 dependency tree creep which triggers literally all v8 packages "re-builds" on any change (v9) + +> TBA: more research needed +> +> partially fixed: https://github.com/microsoft/fluentui/pull/27334 + +## Enable caching/distributed caching + +we execute `build` task multiple times on every separate pipeline. This adds around 4 minutes to every pipeline we ran. + +**Solution Suggestion:** + +1. using caching would completely mitigate this +2. aggregating everything to 1 pipeline ( no caching needed ) + +- pros: easy to setup and maintenance/reasoning about for devs what is happening. +- cons: "main build" pipeline would block other pipelines, thus all checks might take longer total time then being executed in parallel + +## Cache node_modules (yarn install) + +`yarn install` takes significant amount for every pipeline job (up to 1m 30s). + +> ATM: we have 2 + 5 + 4 + 3 (14 jobs x 1.5 minutes = 21 minutes of `yarn install` 🥶 x number of PR re-runs on daily basis ) + +**Solution Suggestion:** + +This is a low hanging fruit that can be improved by caching node_modules for `yarn install` (from 2 minutes to 5 seconds) + +## Improve master pipeline + +On every PR merge (push to master), we run pipelines on default branch (master), which triggers `lint,build,test,type-check` on whole monorepo. + +metrics of this approach: + +- this has around 56% success rate +- it takes up to 57 minutes (if successful) + +**Solution Suggestion:** + +There is no need real need to run everything on every push to master. + +We should run pipelines only against latest successful merge commit. + +`yarn nx affected --targets=build,lint,type-check,test --base=LAST_SUCCESSFUL_SHA --head=HEAD` + +# Actionable + +- implement proposed suggestions +- create tools to will guard our pipelines to run into these issues again in the future diff --git a/docs/ci-perf-build.md b/docs/ci-perf-build.md new file mode 100644 index 0000000000000..5630dcc91b1ec --- /dev/null +++ b/docs/ci-perf-build.md @@ -0,0 +1,530 @@ +# `build` + +## Results + +**Projects with build target:** 143 + +**Legend:** + +- optimization v1 === disable path aliases for tsc -p tsconfig.lib.json runs +- optimization v2 === enabling `incremental:true` for projects with solution configs. this will have probably no impact on `build` task but should speed up `type-check` as execution for tsconfig.lib.json should be already cached by `build` task which is pre-requirement of `type-check` task +- optimization v3 === just-tasks speed improvements (copy-compiled task speed boost) + +| Run type (nx run-many build) | time | delta | +| ------------------------------------ | ------- | ----- | +| current / parallel 1 | 22m 33s | | +| with optimization v1 / parallel 1 | 20m 5s | 11% | +| with optimization v1+v2 / parallel 1 | 20m 33s | x | +| with optimization v1+v3 / parallel 1 | 20m 27s | x | +| | | | +| current / parallel 8 | 7m 49s | | +| with optimization v1 / parallel 8 | 7m 17s | 7% | + +## Experiments + +### Current task data + +> yarn workspace @fluentui/react-button build +> +> build is executed via just-scripts + +| command | time | delta | remarks | +| ----------------- | ------------ | ----- | ---------------------------------------------------------------------------------------------------------------------------- | +| just-scripts | 2-3s | 25% | 🔥 / invoking just tasks adds 2-3 seconds in comparison with running those by raw binaries !!! | +| copy-compiled | 0.8s - 1.85s | 15% | 🔥 / time spent here depends on amount of files and targets that exist (esm/cjs/amd) | +| ts:compile | 3.0s | 25% | invokes tsc 2-3 times (based on target spec) | +| ts:postprocess | 0.0s | 0% | noop | +| babel:postprocess | 1.8s | 14.7% | 🔥 / we do imperative source map creation (why?). Also same transform is executed twice , once for esm output , once for cjs | +| api-extractor | 2.6s | 21.3% | long time as expected as it needs to create TSC program similar to ts:compile + run rolluping | +| | | | | +| SUM | 12.25s | | | + +**Notes:** + +just-scripts slow processing: + +- invoking just adds 2-3 seconds to every task execution. I got the delta confirmation by running same task via native binaries "tsc && api-extractor" vs running those via "just" +- one of reasons why this is so slow is that every `just-scripts` needs to invoked `tsc` behind the scenes to compile all the custom code written in TS to JS. We have no control on how is that being compiled (for example ts-node allows us to use `swc` under the hood which makes TS->Js rather instant ) +- what about using `.cache()` for `task()` ? it's a lie https://github.com/microsoft/just/issues/392 + +nx run-commands executor: + +- whilst this is definitely not an 1:1 comparison with current just setup, it can give us at least nx slow-down numbers + +**potential improvements:** + +- just-scripts + + - use `swc:true` with ts-node (0.5s speed boost) - ts-node config is hardcoded and swc cannot be set + - using just.config.js with `swc-node/register/register` (0.5 speed boost) + +- copy-compiled: + + - use `parallel` (0.3s speed boost) + - don't use getProjectMetadata (1.2s speed boost) + + | task name | before | after | delta | + | ------------- | ------ | ----- | ----- | + | copy-compiled | 1.85s | 0.02s | 99% | + | just-scripts | 3s | 2.5s | 16.7% | + +### disable path aliases for tsc -p tsconfig.lib.json + +| Run type ( @fluentui/react-table build) | time | delta | +| --------------------------------------- | ---- | ------ | +| current | 20s | | +| with optimization v1 | 12s | 40% 🚅 | + +**Summary:** + +Delta varies up to 50% speed improvement for v9 packages + +### enable incremental for TS + +Having `incremental:true` will probably not provide any time benefits for actual `build` (tsc -p tsconfig.lib.json), +but should provide already cached execution for `type-check` task, which should re-use cache and run TSC program check only for other ts configs(spec/e2e/storybook) + +> NOTE: this uses already optimization v1 (disable path aliases for tsc -p tsconfig.lib.json) + +| Run type ( @fluentui/react-table build & type-check) | time | delta | remarks | +| -------------------------------------------------------------------------- | ------ | ----- | -------------- | +| current | 24.2s | | | +| with optimization 1 (incremental:true) | 21.9s | 10% | worth a shot ? | +| with optimization 2 (removing tsconfig.lib.json from references for tsc-b) | 22.5s | | | +| with optimization 1+2 | 21.39s | | | + +**Summary:** + +While delta per package seems good enough (10%) when executed on whole repo there are almost zero time execution benefits + +**Update:** looks like the configuration was wrong previously. To be able to achieve caching for `tsconfig.lib.json` it needs to be invoked with same parameters as `generate-api` task which is `emitDeclarationOnly`. With that in place, `type-check` leverages cache from previously run `tsconfig.lib.json` and gives us approx 15% speed bump. + +## Local + +### Current + +> - 145 projects have target:build + +> parallel 1 + +total: 1353s / 22m 33s + +> parallel 8 + +total: 469s / ~7m 49s + +**result for `parallel 1`:** + +> - parallel 1 + +Run 2: + +```sh +nx run-many --target=build --skip-nx-cache + +nx run @fluentui/react-conformance:build (6s) +nx run @fluentui/react-conformance-griffel:build (7s) +nx run @fluentui/set-version:build (4s) +nx run @fluentui/keyboard-keys:build (5s) +nx run @fluentui/react-utilities:build (8s) +nx run @fluentui/react-context-selector:build (7s) +nx run @fluentui/merge-styles:build (6s) +nx run @fluentui/jest-serializer-merge-styles:build (4s) +nx run @fluentui/react-aria:build (8s) +nx run @fluentui/example-data:build (5s) +nx run @fluentui/styles:build (5s) +nx run @fluentui/react-component-event-listener:build (5s) +nx run @fluentui/accessibility:build (6s) +nx run @fluentui/babel-preset-storybook-full-source:build (8s) +nx run @fluentui/test-utilities:build (5s) +nx run @fluentui/react-northstar-styles-renderer:build (6s) +nx run @fluentui/react-component-ref:build (8s) +nx run @fluentui/dom-utilities:build (6s) +nx run @fluentui/utilities:build (7s) +nx run @fluentui/theme:build (7s) +nx run @fluentui/style-utilities:build (7s) +nx run @fluentui/font-icons-mdl2:build (5s) +nx run @fluentui/foundation-legacy:build (8s) +nx run @fluentui/common-styles:build (3s) +nx run @fluentui/docs-components:build (5s) +nx run @fluentui/react-storybook-addon-codesandbox:build (5s) +nx run @fluentui/react-portal-compat-context:build (5s) +nx run @fluentui/a11y-testing:build (4s) +nx run @fluentui/scheme-utilities:build (5s) +nx run @fluentui/react-window-provider:build (6s) +nx run @fluentui/react-hooks:build (7s) +nx run @fluentui/date-time-utilities:build (5s) +nx run @fluentui/state:build (4s) +nx run @fluentui/react-northstar-fela-renderer:build (6s) +🔥🔥 nx run @fluentui/react-bindings:build (16s) +🔥 nx run @fluentui/react-icons-northstar:build (12s) +nx run @fluentui/public-docsite-setup:build (4s) +nx run @fluentui/react-file-type-icons:build (5s) +nx run @fluentui/tokens:build (6s) +nx run @fluentui/react-theme:build (5s) +nx run @fluentui/react-shared-contexts:build (6s) +nx run @fluentui/react-tabster:build (8s) +nx run @fluentui/react-label:build (8s) +nx run @fluentui/react-field:build (10s) +nx run @fluentui/react-portal:build (7s) +🔥 nx run @fluentui/react-button:build (12s) +nx run @fluentui/react-positioning:build (8s) +nx run @fluentui/react-popover:build (10s) +nx run @fluentui/react-provider:build (9s) +nx run @fluentui/react-badge:build (10s) +nx run @fluentui/react-radio:build (10s) +nx run @fluentui/react-tooltip:build (9s) +🔥 nx run @fluentui/react-avatar:build (13s) +nx run @fluentui/react-text:build (10s) +nx run @fluentui/react-divider:build (8s) +nx run @fluentui/react-spinbutton:build (10s) +nx run @fluentui/react-checkbox:build (10s) +nx run @fluentui/react-infobutton:build (11s) +🔥 nx run @fluentui/react-persona:build (12s) +nx run @fluentui/react-input:build (10s) +🔥🔥 nx run @fluentui/react-table:build (17s) +nx run @fluentui/react-storybook-addon:build (9s) +nx run @fluentui/react-image:build (8s) +nx run @fluentui/react-accordion:build (11s) +nx run @fluentui/react-link:build (9s) +nx run @fluentui/react-tabs:build (10s) +nx run @fluentui/react-spinner:build (9s) +nx run @fluentui/react-progress:build (9s) +nx run @fluentui/react-textarea:build (10s) +nx run @fluentui/react-select:build (10s) +nx run @fluentui/react-slider:build (10s) +nx run @fluentui/react-switch:build (10s) +nx run @fluentui/react-dialog:build (11s) +nx run @fluentui/react-card:build (10s) +🔥 nx run @fluentui/react-combobox:build (12s) +🔥 nx run @fluentui/react-menu:build (12s) +🔥 nx run @fluentui/react-toolbar:build (12s) +🔥 nx run @fluentui/react-alert:build (14s) +nx run @fluentui/keyboard-key:build (5s) +nx run @fluentui/react-focus:build (8s) +nx run @fluentui/webpack-utilities:build (4s) +🔥🔥 nx run @fluentui/react:build (19s) +nx run @fluentui/theme-samples:build (5s) +nx run @fluentui/azure-themes:build (6s) +nx run @fluentui/react-experiments:build (10s) +nx run @fluentui/storybook:build (5s) +nx run @fluentui/fluent2-theme:build (6s) +nx run @fluentui/react-component-nesting-registry:build (5s) +nx run @fluentui/priority-overflow:build (6s) +nx run @fluentui/react-proptypes:build (5s) +🔥🔥🔥 nx run @fluentui/react-northstar:build (25s) +🔥🔥 nx run @fluentui/code-sandbox:build (22s) +🔥🔥 nx run @fluentui/react-northstar-prototypes:build (16s) +nx run @fluentui/react-virtualizer:build (8s) +nx run @fluentui/react-overflow:build (7s) +🔥🔥🔥 nx run @fluentui/react-components:build (25s) +nx run @fluentui/monaco-editor:build (7s) +nx run @fluentui/react-monaco-editor:build (6s) +nx run @fluentui/react-docsite-components:build (8s) +nx run @fluentui/react-icon-provider:build (7s) +🔥🔥 nx run @fluentui/react-icons-mdl2:build (17s) +nx run @fluentui/react-charting:build (8s) +nx run @fluentui/react-cards:build (8s) +🔥🔥 nx run @fluentui/react-examples:build (15s) +nx run @fluentui/api-docs:build (3s) +nx run @fluentui/public-docsite-resources:build (6s) +nx run @fluentui/ability-attributes:build (5s) +nx run @fluentui/react-northstar-emotion-renderer:build (5s) +nx run @fluentui/react-telemetry:build (6s) +nx run @fluentui/react-builder:build (8s) +nx run @fluentui/digest:build (2s) +nx run @fluentui/global-context:build (7s) +🔥🔥 nx run @fluentui/react-migration-v0-v9:build (23s) +🔥🔥 nx run @fluentui/react-migration-v8-v9:build (21s) +nx run @fluentui/react-icons-mdl2-branded:build (7s) +nx run @fluentui/web-components:build (13s) +🔥🔥🔥🔥 nx run @fluentui/docs:build (44s) +nx run @fluentui/codemods:build (7s) +nx run @fluentui/my-lib:build (2s) +nx run @fluentui/react-avatar-context:build (5s) +nx run @fluentui/react-breadcrumb:build (8s) +nx run @fluentui/react-theme-sass:build (5s) +nx run @fluentui/react-drawer:build (9s) +nx run @fluentui/react-tags:build (8s) +nx run @fluentui/react-skeleton:build (9s) +🔥 nx run @fluentui/react-tree:build (14s) +nx run @fluentui/perf-test-react-components:build (11s) +🔥 nx run @fluentui/react-datepicker-compat:build (14s) +🔥🔥🔥 nx run @fluentui/vr-tests-react-components:build (26s) # build-storybook +nx run @fluentui/react-date-time:build (6s) +nx run @fluentui/perf-test:build (6s) +nx run @fluentui/local-sandbox:build (6s) +nx run @fluentui/projects-test:build (4s) +🔥🔥 nx run @fluentui/react-data-grid-react-window:build (15s) +🔥🔥 nx run @fluentui/react-portal-compat:build (19s) +🔥🔥 nx run @fluentui/theme-designer:build (22s) +🔥🔥🔥 nx run @fluentui/recipes-react-components:build (30s) # build-storybook +nx run @fluentui/ssr-tests-v9:build (11s) +nx run @fluentui/theming-designer:build (6s) +🔥🔥 nx run @fluentui/vr-tests:build (18s) +nx run @fluentui/ssr-tests:build (11s) +nx run @fluentui/perf-test-northstar:build (2s) +nx run @fluentui/babel-preset-global-context:build (8s) +nx run @fluentui/public-docsite-v9:build (7s) +🔥 nx run @fluentui/public-docsite:build (12s) +``` + +**slowest from 1st run (not CI=true set -> api-extractor uses declaration files for path-aliases in v9 packages):** + +```sh +# NOTE: no CI=true used +nx run-many --target=build --skip-nx-cache + +# wc +@fluentui/web-components:build (15s) + +# v0 +# no api-extractor used +@fluentui/react-icons-northstar:build (15s) +@fluentui/react-bindings:build (20s) +@fluentui/react-northstar-prototypes:build (21s) +@fluentui/code-sandbox:build (29s) +@fluentui/react-northstar:build (2m) + +# v8 +@fluentui/react-experiments:build (12s) +@fluentui/ssr-tests:build (14s) +@fluentui/public-docsite:build (15s) +@fluentui/react-examples:build (18s) +@fluentui/vr-tests:build (18s) +@fluentui/react-icons-mdl2:build (20s) +@fluentui/react:build (24s) # note: this is with using ts-solution configs ( without it would be around 30s) +@fluentui/docs:build (1m) +@fluentui/perf-test:build (2m) + + +# v9 ish +@fluentui/babel-preset-storybook-full-source:build (13s) + +# v9 +@fluentui/react-field:build (13s) +@fluentui/react-dialog:build (14s) +@fluentui/react-infobutton:build (15s) +@fluentui/react-combobox:build (15s) +@fluentui/react-toolbar:build (15s) +@fluentui/react-menu:build (16s) +@fluentui/react-button:build (16s) +@fluentui/react-avatar:build (16s) +@fluentui/react-persona:build (16s) +@fluentui/react-datepicker-compat:build (16s) +@fluentui/react-alert:build (17s) +@fluentui/react-tree:build (18s) +@fluentui/react-data-grid-react-window:build (19s) +@fluentui/react-table:build (21s) +@fluentui/react-portal-compat:build (22s) +@fluentui/react-migration-v8-v9:build (26s) +@fluentui/vr-tests-react-components:build (26s) +@fluentui/theme-designer:build (27s) +@fluentui/react-migration-v0-v9:build (28s) +@fluentui/react-components:build (30s) +@fluentui/recipes-react-components:build (33s) +``` + +### With optimization v1 + +> - disable TS path aliases for v9 builds + +> parallel 1 / 1205s / (CI true/api-extractor won't use path aliases) / s + +```sh +nx run @fluentui/react-conformance:build (6s) +nx run @fluentui/react-conformance-griffel:build (7s) +nx run @fluentui/set-version:build (5s) +nx run @fluentui/keyboard-keys:build (6s) +nx run @fluentui/react-utilities:build (8s) +nx run @fluentui/react-context-selector:build (6s) +nx run @fluentui/merge-styles:build (7s) +nx run @fluentui/jest-serializer-merge-styles:build (4s) +nx run @fluentui/react-aria:build (7s) +nx run @fluentui/example-data:build (5s) +nx run @fluentui/styles:build (6s) +nx run @fluentui/react-component-event-listener:build (5s) +nx run @fluentui/accessibility:build (6s) +nx run @fluentui/babel-preset-storybook-full-source:build (9s) +nx run @fluentui/test-utilities:build (5s) +nx run @fluentui/react-northstar-styles-renderer:build (6s) +nx run @fluentui/react-component-ref:build (8s) +nx run @fluentui/dom-utilities:build (6s) +nx run @fluentui/utilities:build (7s) +nx run @fluentui/theme:build (7s) +nx run @fluentui/style-utilities:build (7s) +nx run @fluentui/font-icons-mdl2:build (5s) +nx run @fluentui/foundation-legacy:build (8s) +nx run @fluentui/common-styles:build (3s) +nx run @fluentui/docs-components:build (6s) +nx run @fluentui/react-storybook-addon-codesandbox:build (5s) +nx run @fluentui/react-portal-compat-context:build (6s) +nx run @fluentui/a11y-testing:build (4s) +nx run @fluentui/scheme-utilities:build (6s) +nx run @fluentui/react-window-provider:build (7s) +nx run @fluentui/react-hooks:build (7s) +nx run @fluentui/date-time-utilities:build (5s) +nx run @fluentui/state:build (5s) +nx run @fluentui/react-northstar-fela-renderer:build (7s) +🔥🔥 nx run @fluentui/react-bindings:build (16s) # + build:component-info / 11s tsc (because tsc -b with lot of project references) +🔥 nx run @fluentui/react-icons-northstar:build (12s) +nx run @fluentui/public-docsite-setup:build (4s) +nx run @fluentui/react-file-type-icons:build (5s) +nx run @fluentui/tokens:build (6s) +nx run @fluentui/react-theme:build (5s) +nx run @fluentui/react-shared-contexts:build (7s) +nx run @fluentui/react-tabster:build (7s) +nx run @fluentui/react-label:build (7s) +nx run @fluentui/react-field:build (8s) +nx run @fluentui/react-portal:build (6s) +🔥 nx run @fluentui/react-button:build (11s) +nx run @fluentui/react-positioning:build (7s) +nx run @fluentui/react-popover:build (8s) +nx run @fluentui/react-provider:build (8s) +nx run @fluentui/react-badge:build (8s) +nx run @fluentui/react-radio:build (9s) +nx run @fluentui/react-tooltip:build (8s) +🔥 nx run @fluentui/react-avatar:build (11s) +nx run @fluentui/react-text:build (9s) +nx run @fluentui/react-divider:build (7s) +nx run @fluentui/react-spinbutton:build (8s) +nx run @fluentui/react-checkbox:build (9s) +nx run @fluentui/react-infobutton:build (9s) +nx run @fluentui/react-persona:build (8s) +nx run @fluentui/react-input:build (8s) +🔥 nx run @fluentui/react-table:build (13s) +nx run @fluentui/react-storybook-addon:build (6s) +nx run @fluentui/react-image:build (7s) +nx run @fluentui/react-accordion:build (9s) +nx run @fluentui/react-link:build (8s) +nx run @fluentui/react-tabs:build (8s) +nx run @fluentui/react-spinner:build (8s) +nx run @fluentui/react-progress:build (8s) +nx run @fluentui/react-textarea:build (8s) +nx run @fluentui/react-select:build (8s) +nx run @fluentui/react-slider:build (8s) +nx run @fluentui/react-switch:build (9s) +nx run @fluentui/react-dialog:build (10s) +nx run @fluentui/react-card:build (8s) +nx run @fluentui/react-combobox:build (10s) +🔥 nx run @fluentui/react-menu:build (11s) +nx run @fluentui/react-toolbar:build (8s) +nx run @fluentui/react-alert:build (10s) +nx run @fluentui/keyboard-key:build (6s) +nx run @fluentui/react-focus:build (8s) +nx run @fluentui/webpack-utilities:build (4s) +🔥🔥 nx run @fluentui/react:build (20s) +nx run @fluentui/theme-samples:build (6s) +nx run @fluentui/azure-themes:build (6s) +nx run @fluentui/react-experiments:build (10s) +nx run @fluentui/storybook:build (5s) +nx run @fluentui/fluent2-theme:build (6s) +nx run @fluentui/react-component-nesting-registry:build (5s) +nx run @fluentui/priority-overflow:build (5s) +nx run @fluentui/react-proptypes:build (5s) +🔥🔥🔥 nx run @fluentui/react-northstar:build (25s) +🔥🔥 nx run @fluentui/code-sandbox:build (23s) # has react-northstar and docs-components as project-references (slow TS) +🔥🔥 nx run @fluentui/react-northstar-prototypes:build (17s) # has react-northstar,icons etc as project-references (slow TS) +nx run @fluentui/react-virtualizer:build (7s) +nx run @fluentui/react-overflow:build (6s) +🔥 nx run @fluentui/react-components:build (12s) +nx run @fluentui/monaco-editor:build (7s) +nx run @fluentui/react-monaco-editor:build (6s) +nx run @fluentui/react-docsite-components:build (8s) +nx run @fluentui/react-icon-provider:build (7s) +🔥🔥 nx run @fluentui/react-icons-mdl2:build (17s) # tsc takes 13 seconds !!! if emitDeclaration only is used - reduced to 9 seconds +nx run @fluentui/react-charting:build (8s) +nx run @fluentui/react-cards:build (8s) +🔥🔥 nx run @fluentui/react-examples:build (15s) +nx run @fluentui/api-docs:build (4s) +nx run @fluentui/public-docsite-resources:build (6s) +nx run @fluentui/ability-attributes:build (5s) +nx run @fluentui/react-northstar-emotion-renderer:build (5s) +nx run @fluentui/react-telemetry:build (6s) +nx run @fluentui/react-builder:build (8s) +nx run @fluentui/digest:build (2s) +nx run @fluentui/global-context:build (6s) +🔥 nx run @fluentui/react-migration-v0-v9:build (12s) +nx run @fluentui/react-migration-v8-v9:build (11s) +nx run @fluentui/react-icons-mdl2-branded:build (7s) +🔥 nx run @fluentui/web-components:build (12s) +🔥🔥🔥🔥 nx run @fluentui/docs:build (42s) # webpack + component-info(react-docgen) +nx run @fluentui/codemods:build (7s) +nx run @fluentui/my-lib:build (2s) +nx run @fluentui/react-avatar-context:build (6s) +nx run @fluentui/react-breadcrumb:build (7s) +nx run @fluentui/react-theme-sass:build (5s) +nx run @fluentui/react-drawer:build (7s) +nx run @fluentui/react-tags:build (7s) +nx run @fluentui/react-skeleton:build (8s) +nx run @fluentui/react-tree:build (10s) +🔥 nx run @fluentui/perf-test-react-components:build (12s) +nx run @fluentui/react-datepicker-compat:build (11s) +🔥🔥 nx run @fluentui/vr-tests-react-components:build (24s) # build-storybook +nx run @fluentui/react-date-time:build (6s) +nx run @fluentui/perf-test:build (6s) +nx run @fluentui/local-sandbox:build (6s) +nx run @fluentui/projects-test:build (4s) +nx run @fluentui/react-data-grid-react-window:build (8s) +nx run @fluentui/react-portal-compat:build (6s) +nx run @fluentui/theme-designer:build (11s) +🔥🔥🔥 nx run @fluentui/recipes-react-components:build (28s) # build-storybook +nx run @fluentui/ssr-tests-v9:build (9s) +nx run @fluentui/theming-designer:build (6s) +🔥🔥 nx run @fluentui/vr-tests:build (17s) # build-storybook +nx run @fluentui/ssr-tests:build (11s) +nx run @fluentui/perf-test-northstar:build (1s) +nx run @fluentui/babel-preset-global-context:build (8s) +nx run @fluentui/public-docsite-v9:build (7s) +🔥 nx run @fluentui/public-docsite:build (12s) +``` + +## Using TS solution configs for v8,v0 + +### @fluentui/react + +> tsc -p tsconfig.lib.json - means solution config style is used - ts include is narrowed down to impl files only (also stricter global typings) + +| Run | time | delta | remarks | +| ---------------------------------------------------------------- | ------ | ------ | ------------------------------------------------ | +| yarn workspace @fluentui/react tsc | 12s | | | +| yarn workspace @fluentui/react tsc -p tsconfig.lib.json | 6.5s | 46% 🚅 | | +| yarn workspace @fluentui/react tsc -b tsconfig.json | 10.46s | 12.8% | in reality we need -b exec with solution configs | +| --- | | | | +| yarn workspace @fluentui/utilities tsc | 3.10s | | | +| yarn workspace @fluentui/utilities tsc -p tsconfig.lib.json | 2.59s | 16% | | +| --- | | | | +| yarn workspace @fluentui/react-examples tsc | 12.73s | | | +| yarn workspace @fluentui/react-examples tsc -p tsconfig.lib.json | ?s | ?% | | +| --- | | | | +| yarn workspace @fluentui/react-charting tsc | 4.62s | | | +| yarn workspace @fluentui/react-charting tsc -p tsconfig.lib.json | ?s | ?% | | + +**Summary (ts solution configs):** + +Based on data metrics ts solution configs for old projects (v8) will give use approx 46% speed boost for `build` task. +Even better production file will be properly narrowed in sense of TSC context this giving us better/real state of ECMA features used in these old libraries. + +**Various emit modes (with TS solution config)** + +| Run: @fluentui/react tsc -p tsconfig.lib.json | time | delta | +| --------------------------------------------- | ------ | ------- | +| declaration: true | 10.24s | | +| declaration: false (transpile only mode) | 9.48s | | +| declaration: false (transpile only with swc) | 0.3s | | +| emitDeclarationOnly: true | 7.51s | % 26 🚅 | + +**Summary (emit modes):** + +Based on data metrics using swc for transpilation and tsc only for type declaration will give us approx 26% speed boost for `build` task. Besides of measured "time to run" metrics, using ts only for type declaration generation will also use less memory/CPU as we wont execute full TSC 3 times to produce both `js` and `.d.ts` output. + +> TSC will be executed only once (also there is no difference between type declaration for different module formats), while swc 2(3 for amd) times (tsc --1-> es6 --2-> cjs --(3)-->amd). + +### @fluentui/react-northstar + +| Run: yarn workspace @fluentui/react-northstar tsc -b -f tsconfig.json | time | delta | +| --------------------------------------------------------------------- | ---- | ----- | +| current | 27s | | +| emitDeclarationOnly: true | 26s | | +| narrowed `"include" in all packages` | 25s | | +| narrowed `"include" in all packages` + emitDeclarationOnly | 23s | | diff --git a/docs/ci-perf-bundle.md b/docs/ci-perf-bundle.md new file mode 100644 index 0000000000000..0a271aa33c115 --- /dev/null +++ b/docs/ci-perf-bundle.md @@ -0,0 +1,5 @@ +## bundle + +## Results + +**Projects with bundle target:** 24 ( all v8 besides `perf-test-react-components` app) diff --git a/docs/ci-perf-e2e.md b/docs/ci-perf-e2e.md new file mode 100644 index 0000000000000..b556df502f35c --- /dev/null +++ b/docs/ci-perf-e2e.md @@ -0,0 +1,5 @@ +## e2e + +## Results + +**Projects with e2e target:** 16 ( from which only 1 is a real e2e (fluentui/e2e - v0). The rest uses cypress component testing) diff --git a/docs/ci-perf-lint.md b/docs/ci-perf-lint.md new file mode 100644 index 0000000000000..d275f675ec357 --- /dev/null +++ b/docs/ci-perf-lint.md @@ -0,0 +1,24 @@ +# `lint` + +## Results + +**Projects with lint target:** 172 + +## current build times within whole repo + +### CI + +| Run type | time | delta | +| -------------------------------------- | ------ | ----- | +| lage lint | 7m 21s | | +| nx run-many --target=lint --parallel=8 | 6m 4s | 17.4% | + +### Local + +> - parallel 1 +> - ??? projects have target:lint + +``` +nx run-many --target=build --skip-nx-cache + +``` diff --git a/docs/ci-perf-tests.md b/docs/ci-perf-tests.md new file mode 100644 index 0000000000000..c4fff384db43f --- /dev/null +++ b/docs/ci-perf-tests.md @@ -0,0 +1,1491 @@ +## test + +## Results + +**Projects with test target:** 150 + +| Run type | time | delta | remarks | +| --------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------- | +| 1. nx run-many --target=test --parallel=4 | 26m 9s | | | +| 2. nx run-many --target=test --parallel=8 --maxWorkers=4 | 23m 34s | | 🚅 | +| 3. nx run-many --target=test --parallel=8 --maxWorkers=2 | 25m 34s | | | +| 4. nx run-many --target=test --parallel=8 --maxWorkers=4 && v9 jest has maxWorkers=4 | 29m 11s | | | +| 5. nx run-many --target=test --parallel=8 --maxWorkers=4 && v9 jest has maxWorkers=4 && ts-jest isolatedModules | 31m 56s | | | + +(5.) - this doesn't make any sense, the test time should have been the same as the fastest or even faster (23m) + +### Local + +> - parallel 1, maxWorkers=default +> - ? projects have target:test + +``` +nx run-many --target=test --skip-nx-cache + +✔ nx run @fluentui/scripts-utils:test (2s) +✔ nx run @fluentui/scripts-monorepo:test (2s) +✔ nx run @fluentui/scripts-prettier:test (1s) +✔ nx run @fluentui/eslint-plugin:test (4s) +✔ nx run @fluentui/scripts-tasks:test (3s) +✔ nx run @fluentui/scripts-api-extractor:test (2s) +✔ nx run @fluentui/scripts-jest:test (3s) +✔ nx run @fluentui/react-conformance:test (20s) +✔ nx run @fluentui/keyboard-keys:test (2s) +✔ nx run @fluentui/react-utilities:test (3s) +✔ nx run @fluentui/tokens:test (3s) +✔ nx run @fluentui/react-theme:test (2s) +✔ nx run @fluentui/set-version:test (3s) +✔ nx run @fluentui/react-conformance-griffel:test (2s) +✔ nx run @fluentui/react-shared-contexts:test (2s) +✔ nx run @fluentui/dom-utilities:test (6s) +✔ nx run @fluentui/scripts-cypress:test (2s) +✔ nx run @fluentui/scripts-webpack:test (2s) +✔ nx run @fluentui/react-context-selector:test (3s) +✔ nx run @fluentui/react-tabster:test (2s) +✔ nx run @fluentui/test-utilities:test (6s) +✔ nx run @fluentui/merge-styles:test (8s) +✔ nx run @fluentui/jest-serializer-merge-styles:test (6s) +✔ nx run @fluentui/react-portal-compat-context:test (2s) +✔ nx run @fluentui/utilities:test (10s) +✔ nx run @fluentui/scripts-puppeteer:test (2s) +✔ nx run @fluentui/theme:test (7s) +✔ nx run @fluentui/style-utilities:test (6s) +✔ nx run @fluentui/scripts-projects-test:test (2s) +✔ nx run @fluentui/react-label:test (3s) +✔ nx run @fluentui/scripts-babel:test (2s) +✔ nx run @fluentui/react-field:test (5s) +✔ nx run @fluentui/react-aria:test (3s) +✔ nx run @fluentui/scripts-gulp:test (2s) +✔ nx run @fluentui/react-portal:test (4s) +✔ nx run @fluentui/react-window-provider:test (6s) +✔ nx run @fluentui/keyboard-key:test (5s) +✔ nx run @fluentui/react-positioning:test (4s) +✔ nx run @fluentui/date-time-utilities:test (7s) +✔ nx run @fluentui/foundation-legacy:test (7s) +✔ nx run @fluentui/font-icons-mdl2:test (3s) +✔ nx run @fluentui/example-data:test (3s) +✔ nx run @fluentui/react-focus:test (8s) +✔ nx run @fluentui/react-hooks:test (8s) +🔥 ✔ nx run @fluentui/react:test (1m) +✔ nx run @fluentui/react-popover:test (5s) +✔ nx run @fluentui/react-tooltip:test (3s) +✔ nx run @fluentui/react-badge:test (5s) +✔ nx run @fluentui/styles:test (8s) +✔ nx run @fluentui/react-avatar:test (6s) +✔ nx run @fluentui/react-button:test (7s) +✔ nx run @fluentui/react-component-event-listener:test (7s) +✔ nx run @fluentui/react-northstar-fela-renderer:test (7s) +✔ nx run @fluentui/react-component-ref:test (7s) +✔ nx run @fluentui/accessibility:test (10s) +✔ nx run @fluentui/react-provider:test (5s) +✔ nx run @fluentui/react-radio:test (6s) +✔ nx run @fluentui/react-text:test (10s) +✔ nx run @fluentui/react-bindings:test (13s) +✔ nx run @fluentui/react-infobutton:test (5s) +✔ nx run @fluentui/react-spinbutton:test (6s) +✔ nx run @fluentui/react-checkbox:test (5s) +✔ nx run @fluentui/react-divider:test (4s) +✔ nx run @fluentui/react-persona:test (5s) +✔ nx run @fluentui/react-input:test (4s) +✔ nx run @fluentui/react-component-nesting-registry:test (6s) +✔ nx run @fluentui/priority-overflow:test (3s) +✔ nx run @fluentui/react-accordion:test (7s) +✔ nx run @fluentui/react-combobox:test (9s) +✔ nx run @fluentui/react-progress:test (5s) +✔ nx run @fluentui/react-textarea:test (5s) +✔ nx run @fluentui/react-icons-northstar:test (13s) +✔ nx run @fluentui/react-spinner:test (4s) +✔ nx run @fluentui/react-toolbar:test (8s) +✔ nx run @fluentui/react-dialog:test (8s) +✔ nx run @fluentui/react-select:test (6s) +✔ nx run @fluentui/react-slider:test (5s) +✔ nx run @fluentui/react-switch:test (5s) +✔ nx run @fluentui/react-image:test (4s) +✔ nx run @fluentui/react-table:test (13s) +✔ nx run @fluentui/react-card:test (4s) +✔ nx run @fluentui/react-link:test (4s) +✔ nx run @fluentui/react-menu:test (10s) +✔ nx run @fluentui/react-tabs:test (5s) +✔ nx run @fluentui/react-proptypes:test (7s) +✔ nx run @fluentui/react-virtualizer:test (2s) +✔ nx run @fluentui/react-overflow:test (3s) +🔥 ✔ nx run @fluentui/react-alert:test (17m) 🚨🚨🚨 / takes 8s when run independently +🔥 ✔ nx run @fluentui/react-northstar:test (5m) +✔ nx run @fluentui/react-components:test (8s) +✔ nx run @fluentui/babel-preset-storybook-full-source:test (6s) +✔ nx run @fluentui/scripts-storybook:test (14s) +✔ nx run @fluentui/react-icon-provider:test (10s) +✔ nx run @fluentui/react-monaco-editor:test (11s) +🔥 ✔ nx run @fluentui/react-icons-mdl2:test (16m) 🚨🚨🚨 / takes 20s when run independently +✔ nx run @fluentui/react-docsite-components:test (7s) +✔ nx run @fluentui/react-experiments:test (8s) +✔ nx run @fluentui/react-storybook-addon-codesandbox:test (2s) +✔ nx run @fluentui/react-file-type-icons:test (6s) +✔ nx run @fluentui/react-charting:test (13s) +✔ nx run @fluentui/react-cards:test (6s) +✔ nx run @fluentui/react-storybook-addon:test (2s) +✔ nx run @fluentui/api-docs:test (3s) +✔ nx run @fluentui/react-northstar-emotion-renderer:test (7s) +🔥 ✔ nx run @fluentui/react-builder:test (17s) +✔ nx run @fluentui/scripts-github:test (2s) +✔ nx run @fluentui/react-migration-v0-v9:test (9s) +✔ nx run @fluentui/react-migration-v8-v9:test (2s) +✔ nx run @fluentui/global-context:test (3s) +✔ nx run @fluentui/digest:test (1s) +✔ nx run @fluentui/web-components:test (6s) +✔ nx run @fluentui/react-data-grid-react-window:test (2s) +✔ nx run @fluentui/babel-preset-global-context:test (2s) +✔ nx run @fluentui/react-datepicker-compat:test (2s) +✔ nx run @fluentui/react-avatar-context:test (1s) +✔ nx run @fluentui/react-portal-compat:test (3s) +✔ nx run @fluentui/react-breadcrumb:test (3s) +✔ nx run @fluentui/react-theme-sass:test (2s) +✔ nx run @fluentui/react-skeleton:test (4s) +✔ nx run @fluentui/theme-designer:test (2s) +✔ nx run @fluentui/react-drawer:test (3s) +✔ nx run @fluentui/perf-test-northstar:test (1s) +🔥 ✔ nx run @fluentui/ts-minbar-test-react-components:test (36s) +✔ nx run @fluentui/react-tags:test (4s) +✔ nx run @fluentui/react-tree:test (6s) +✔ nx run @fluentui/circulars-test:test (6s) +🔥 ✔ nx run @fluentui/projects-test:test (5m) +✔ nx run @fluentui/vr-tests-react-components:test (8s) +✔ nx run @fluentui/scripts-update-release-notes:test (2s) +🔥 ✔ nx run @fluentui/ts-minbar-test-react:test (42s) +✔ nx run @fluentui/scripts-fluentui-publish:test (1s) +✔ nx run @fluentui/scripts-package-manager:test (2s) +✔ nx run @fluentui/react-18-tests-v8:test (3s) +✔ nx run @fluentui/react-18-tests-v9:test (4s) +✔ nx run @fluentui/theming-designer:test (3s) +🔥 ✔ nx run @fluentui/cra-template:test (2m) +✔ nx run @fluentui/bundle-size:test (3s) +✔ nx run @fluentui/public-docsite:test (4s) +✔ nx run @fluentui/scripts-lint-staged:test (2s) +✔ nx run @fluentui/scripts-generators:test (3s) +✔ nx run @fluentui/scripts-triage-bot:test (3s) +✔ nx run @fluentui/ssr-tests-v9:test (9s) +🔥 ✔ nx run @fluentui/codemods:test (20s) +✔ nx run @fluentui/scripts-beachball:test (11s) +✔ nx run @fluentui/scripts-executors:test (3s) +✔ nx run @fluentui/scripts-dangerjs:test (1s) +✔ nx run @fluentui/my-lib:test (3s) +✔ nx run @fluentui/scripts-ts-node:test (1s) +✔ nx run @fluentui/ssr-tests:test (6s) +✔ nx run @fluentui/nx-workspace-tools:test (3s) +``` + +## whole pipeline with test optimization v1 + +**Total:** lage test / 33m 37.51s + +``` +lage build test lint type-check + + +@fluentui/pr-deploy-site lint ✔️ done - 4.16s + +@fluentui/digest build ✔️ done - 6.06s + +@fluentui/public-docsite-resources lint ✔️ done - 9.54s + +@fluentui/perf-test-react-components lint ✔️ done - 15.36s + +@fluentui/perf-test lint ✔️ done - 16.57s + +@fluentui/public-docsite-v9 lint ✔️ done - 15.91s + +@fluentui/public-docsite lint ✔️ done - 24.72s + +@fluentui/react-18-tests-v8 lint ✔️ done - 19.86s + +@fluentui/react-18-tests-v9 lint ✔️ done - 22.72s + +@fluentui/recipes-react-components lint ✔️ done - 17.12s + +@fluentui/theming-designer lint ✔️ done - 15.28s + +@fluentui/ssr-tests-v9 lint ✔️ done - 24.02s + +@fluentui/vr-tests lint ✔️ done - 17.50s + +@fluentui/api-docs lint ✔️ done - 10.71s + +@fluentui/a11y-testing lint ✔️ done - 11.03s + +@fluentui/bundle-size lint ✔️ done - 4.70s + +@fluentui/vr-tests-react-components lint ✔️ done - 19.54s + +@fluentui/web-components build ✔️ done - 49.87s + +@fluentui/azure-themes lint ✔️ done - 17.53s + +@fluentui/cra-template lint ✔️ done - 9.87s + +@fluentui/dom-utilities lint ✔️ done - 9.40s + +@fluentui/date-time-utilities lint ✔️ done - 11.81s + +@fluentui/eslint-plugin lint ✔️ done - 11.24s + +@fluentui/codemods lint ✔️ done - 15.00s + +@fluentui/example-data lint ✔️ done - 8.91s + +@fluentui/font-icons-mdl2 lint ✔️ done - 9.51s + +@fluentui/jest-serializer-merge-styles lint ✔️ done - 7.92s + +@fluentui/keyboard-key lint ✔️ done - 9.17s + +@fluentui/monaco-editor lint ✔️ done - 8.44s + +@fluentui/fluent2-theme lint ✔️ done - 14.20s + +@fluentui/foundation-legacy lint ✔️ done - 13.36s + +@fluentui/merge-styles lint ✔️ done - 11.72s + +@fluentui/public-docsite-setup lint ✔️ done - 11.68s + +@fluentui/react-cards lint ✔️ done - 11.01s + +@fluentui/react-date-time lint ✔️ done - 8.83s + +@fluentui/react-conformance lint ✔️ done - 12.43s + +@fluentui/react-docsite-components lint ✔️ done - 16.28s + +@fluentui/react-file-type-icons lint ✔️ done - 10.37s + +@fluentui/react-charting lint ✔️ done - 25.96s + +@fluentui/react-focus lint ✔️ done - 14.40s + +@fluentui/react-icon-provider lint ✔️ done - 10.60s + +@fluentui/react-hooks lint ✔️ done - 13.27s + +@fluentui/react-experiments lint ✔️ done - 24.46s + +@fluentui/react-window-provider lint ✔️ done - 9.54s + +@fluentui/react-monaco-editor lint ✔️ done - 13.97s + +@fluentui/react-icons-mdl2-branded lint ✔️ done - 19.13s + +@fluentui/scheme-utilities lint ✔️ done - 12.71s + +@fluentui/set-version lint ✔️ done - 8.66s + +@fluentui/storybook lint ✔️ done - 8.96s + +@fluentui/test-utilities lint ✔️ done - 8.87s + +@fluentui/style-utilities lint ✔️ done - 10.20s + +@fluentui/theme lint ✔️ done - 9.71s + +@fluentui/web-components lint ✔️ done - 5.82s + +@fluentui/theme-samples lint ✔️ done - 12.39s + +🔥 @fluentui/react lint ✔️ done - 1m 11.98s + +@fluentui/tokens lint ✔️ done - 12.34s + +🔥 @fluentui/react-examples lint ✔️ done - 1m 7.04s + +@fluentui/react-icons-mdl2 lint ✔️ done - 49.12s + +@fluentui/utilities lint ✔️ done - 19.85s + +@fluentui/webpack-utilities lint ✔️ done - 11.61s + +@fluentui/global-context lint ✔️ done - 14.14s + +@fluentui/babel-preset-storybook-full-source lint ✔️ done - 14.88s + +@fluentui/keyboard-keys lint ✔️ done - 9.24s + +@fluentui/priority-overflow lint ✔️ done - 11.00s + +@fluentui/babel-preset-global-context lint ✔️ done - 21.04s + +@fluentui/react-avatar-context lint ✔️ done - 8.19s + +@fluentui/react-aria lint ✔️ done - 21.28s + +@fluentui/react-breadcrumb lint ✔️ done - 18.00s + +@fluentui/react-accordion lint ✔️ done - 29.74s + +@fluentui/react-alert lint ✔️ done - 30.83s + +@fluentui/react-badge lint ✔️ done - 27.50s + +@fluentui/react-avatar lint ✔️ done - 42.07s + +@fluentui/react-conformance-griffel lint ✔️ done - 13.41s + +@fluentui/react-button lint ✔️ done - 39.23s + +@fluentui/react-card lint ✔️ done - 32.90s + +@fluentui/react-checkbox lint ✔️ done - 31.50s + +@fluentui/react-context-selector lint ✔️ done - 12.65s + +@fluentui/react-combobox lint ✔️ done - 37.18s + +@fluentui/react-data-grid-react-window lint ✔️ done - 18.97s + +@fluentui/react-components lint ✔️ done - 43.98s + +@fluentui/react-drawer lint ✔️ done - 18.69s + +@fluentui/react-divider lint ✔️ done - 22.92s + +@fluentui/react-datepicker-compat lint ✔️ done - 32.67s + +@fluentui/react-image lint ✔️ done - 21.97s + +@fluentui/react-field lint ✔️ done - 29.97s + +@fluentui/react-dialog lint ✔️ done - 38.31s + +@fluentui/react-infobutton lint ✔️ done - 30.33s + +@fluentui/react-label lint ✔️ done - 22.84s + +@fluentui/react-input lint ✔️ done - 26.65s + +@fluentui/react-link lint ✔️ done - 23.24s + +@fluentui/react-overflow lint ✔️ done - 25.69s + +@fluentui/react-portal lint ✔️ done - 22.86s + +@fluentui/react-popover lint ✔️ done - 28.35s + +@fluentui/react-menu lint ✔️ done - 44.12s + +@fluentui/react-persona lint ✔️ done - 31.08s + +@fluentui/react-migration-v0-v9 lint ✔️ done - 42.53s + +@fluentui/react-migration-v8-v9 lint ✔️ done - 41.32s + +@fluentui/react-portal-compat-context lint ✔️ done - 9.03s + +@fluentui/react-positioning lint ✔️ done - 13.75s + +@fluentui/react-shared-contexts lint ✔️ done - 10.09s + +@fluentui/react-portal-compat lint ✔️ done - 25.77s + +@fluentui/react-progress lint ✔️ done - 24.65s + +@fluentui/react-provider lint ✔️ done - 23.52s + +@fluentui/react-select lint ✔️ done - 29.15s + +@fluentui/react-radio lint ✔️ done - 31.63s + +@fluentui/react-skeleton lint ✔️ done - 22.96s + +@fluentui/react-slider lint ✔️ done - 26.11s + +@fluentui/react-storybook-addon-codesandbox lint ✔️ done - 11.55s + +@fluentui/react-storybook-addon lint ✔️ done - 20.26s + +@fluentui/react-spinner lint ✔️ done - 24.68s + +@fluentui/react-spinbutton lint ✔️ done - 29.98s + +@fluentui/react-tabster lint ✔️ done - 15.49s + +@fluentui/react-tags lint ✔️ done - 18.49s + +@fluentui/react-switch lint ✔️ done - 29.47s + +@fluentui/react-theme-sass lint ✔️ done - 8.06s + +@fluentui/react-tabs lint ✔️ done - 31.66s + +@fluentui/react-text lint ✔️ done - 26.05s + +@fluentui/react-textarea lint ✔️ done - 25.95s + +@fluentui/react-theme lint ✔️ done - 19.51s + +@fluentui/react-utilities lint ✔️ done - 17.76s + +@fluentui/react-table lint ✔️ done - 57.84s + +@fluentui/react-tooltip lint ✔️ done - 24.13s + +@fluentui/scripts-api-extractor lint ✔️ done - 3.64s + +@fluentui/react-toolbar lint ✔️ done - 34.81s + +@fluentui/react-virtualizer lint ✔️ done - 22.23s + +@fluentui/scripts-babel lint ✔️ done - 5.99s + +@fluentui/scripts-cypress lint ✔️ done - 6.65s + +@fluentui/scripts-beachball lint ✔️ done - 10.01s + +@fluentui/scripts-fluentui-publish lint ✔️ done - 6.20s + +@fluentui/scripts-dangerjs lint ✔️ done - 7.81s + +@fluentui/react-tree lint ✔️ done - 32.97s + +@fluentui/theme-designer lint ✔️ done - 28.71s + +@fluentui/scripts-executors lint ✔️ done - 9.93s + +@fluentui/scripts-lint-staged lint ✔️ done - 3.29s + +@fluentui/scripts-github lint ✔️ done - 5.92s + +@fluentui/scripts-package-manager lint ✔️ done - 3.28s + +@fluentui/scripts-generators lint ✔️ done - 9.36s + +@fluentui/scripts-jest lint ✔️ done - 7.91s + +@fluentui/scripts-monorepo lint ✔️ done - 7.51s + +@fluentui/scripts-prettier lint ✔️ done - 5.53s + +@fluentui/scripts-projects-test lint ✔️ done - 6.60s + +@fluentui/scripts-gulp lint ✔️ done - 13.24s + +@fluentui/scripts-ts-node lint ✔️ done - 3.28s + +@fluentui/scripts-puppeteer lint ✔️ done - 6.86s + +@fluentui/scripts-storybook lint ✔️ done - 8.03s + +@fluentui/scripts-triage-bot lint ✔️ done - 7.84s + +@fluentui/scripts-utils lint ✔️ done - 5.32s + +@fluentui/code-sandbox lint ✔️ done - 3.79s + +@fluentui/scripts-tasks lint ✔️ done - 10.03s + +@fluentui/scripts-webpack lint ✔️ done - 5.98s + +@fluentui/scripts-update-release-notes lint ✔️ done - 7.92s + +@fluentui/projects-test lint ✔️ done - 1.58s + +@fluentui/accessibility lint ✔️ done - 7.59s + +@fluentui/perf lint ✔️ done - 3.75s + +@fluentui/docs-components lint ✔️ done - 4.51s + +@fluentui/react-component-event-listener lint ✔️ done - 3.32s + +@fluentui/e2e lint ✔️ done - 6.30s + +@fluentui/react-component-nesting-registry lint ✔️ done - 3.63s + +@fluentui/react-component-ref lint ✔️ done - 3.93s + +@fluentui/react-builder lint ✔️ done - 6.70s + +@fluentui/react-bindings lint ✔️ done - 8.17s + +@fluentui/react-northstar-emotion-renderer lint ✔️ done - 3.83s + +@fluentui/react-northstar-fela-renderer lint ✔️ done - 4.27s + +@fluentui/react-northstar-styles-renderer lint ✔️ done - 3.46s + +@fluentui/react-icons-northstar lint ✔️ done - 9.09s + +@fluentui/react-proptypes lint ✔️ done - 3.75s + +@fluentui/react-telemetry lint ✔️ done - 4.05s + +@fluentui/state lint ✔️ done - 3.71s + +@fluentui/react-northstar-prototypes lint ✔️ done - 10.37s + +@fluentui/styles lint ✔️ done - 4.82s + +@fluentui/bundle-size test ✔️ done - 5.42s + +@fluentui/scripts-api-extractor test ✔️ done - 2.70s + +@fluentui/bundle-size type-check ✔️ done - 7.48s + +@fluentui/scripts-api-extractor type-check ✔️ done - 3.16s + +@fluentui/nx-workspace-tools lint ✔️ done - 14.01s + +@fluentui/scripts-babel test ✔️ done - 2.38s + +@fluentui/scripts-cypress test ✔️ done - 2.64s + +@fluentui/scripts-babel type-check ✔️ done - 3.89s + +@fluentui/eslint-plugin test ✔️ done - 12.44s + +@fluentui/scripts-cypress type-check ✔️ done - 4.09s + +@fluentui/scripts-github test ✔️ done - 2.10s + +@fluentui/scripts-package-manager test ✔️ done - 2.02s + +@fluentui/scripts-github type-check ✔️ done - 3.35s + +@fluentui/scripts-package-manager type-check ✔️ done - 2.89s + +@fluentui/scripts-puppeteer type-check ✔️ done - 3.60s + +@fluentui/scripts-ts-node test ✔️ done - 2.23s + +@fluentui/scripts-triage-bot type-check ✔️ done - 4.09s + +@fluentui/scripts-ts-node type-check ✔️ done - 1.15s + +@fluentui/docs lint ✔️ done - 43.39s + +@fluentui/scripts-puppeteer test ✔️ done - 8.55s + +@fluentui/scripts-utils test ✔️ done - 2.25s + +@fluentui/react-northstar lint ✔️ done - 36.87s + +@fluentui/scripts-triage-bot test ✔️ done - 8.31s + +@fluentui/typings type-check ✔️ done - 1.13s + +@fluentui/scripts-utils type-check ✔️ done - 2.85s + +@fluentui/digest test ✔️ done - 1.76s + +@fluentui/scripts-update-release-notes test ✔️ done - 2.27s + +@fluentui/scripts-update-release-notes type-check ✔️ done - 6.13s + +@fluentui/scripts-monorepo type-check ✔️ done - 6.56s + +@fluentui/scripts-monorepo test ✔️ done - 11.88s + +@fluentui/nx-workspace-tools type-check ✔️ done - 15.64s + +@fluentui/scripts-dangerjs test ✔️ done - 4.78s + +@fluentui/scripts-beachball type-check ✔️ done - 10.25s + +@fluentui/scripts-fluentui-publish test ✔️ done - 3.15s + +@fluentui/scripts-fluentui-publish type-check ✔️ done - 1.89s + +@fluentui/scripts-dangerjs type-check ✔️ done - 8.39s + +@fluentui/nx-workspace-tools test ✔️ done - 24.48s + +@fluentui/scripts-lint-staged test ✔️ done - 1.99s + +@fluentui/scripts-jest type-check ✔️ done - 4.86s + +@fluentui/scripts-beachball test ✔️ done - 20.32s + +@fluentui/scripts-prettier test ✔️ done - 2.05s + +@fluentui/scripts-lint-staged type-check ✔️ done - 3.89s + +@fluentui/scripts-projects-test test ✔️ done - 2.33s + +@fluentui/scripts-webpack test ✔️ done - 2.23s + +@fluentui/scripts-prettier type-check ✔️ done - 3.58s + +@fluentui/scripts-jest test ✔️ done - 10.07s + +@fluentui/scripts-projects-test type-check ✔️ done - 4.21s + +@fluentui/scripts-webpack type-check ✔️ done - 3.71s + +@fluentui/scripts-executors type-check ✔️ done - 5.02s + +@fluentui/scripts-executors test ✔️ done - 8.17s + +@fluentui/a11y-testing build ✔️ done - 6.74s + +@fluentui/api-docs build ✔️ done - 6.65s + +@fluentui/public-docsite-setup build ✔️ done - 7.12s + +@fluentui/example-data build ✔️ done - 11.07s + +@fluentui/codemods build ✔️ done - 15.30s + +@fluentui/web-components test ✔️ done - 48.68s + +@fluentui/keyboard-key build ✔️ done - 12.57s + +@fluentui/set-version build ✔️ done - 9.30s + +@fluentui/monaco-editor build ✔️ done - 22.28s + +@fluentui/webpack-utilities build ✔️ done - 10.78s + +@fluentui/react-conformance build ✔️ done - 16.76s + +@fluentui/test-utilities build ✔️ done - 14.05s + +@fluentui/tokens build ✔️ done - 14.13s + +@fluentui/keyboard-keys build ✔️ done - 12.23s + +@fluentui/priority-overflow build ✔️ done - 11.63s + +@fluentui/react-storybook-addon-codesandbox build ✔️ done - 12.96s + +@fluentui/react-portal-compat-context build ✔️ done - 13.81s + +@fluentui/babel-preset-global-context build ✔️ done - 23.53s + +@fluentui/scripts-tasks type-check ✔️ done - 6.78s + +@fluentui/scripts-generators type-check ✔️ done - 7.40s + +@fluentui/scripts-tasks test ✔️ done - 11.15s + +@fluentui/babel-preset-storybook-full-source build ✔️ done - 24.69s + +@fluentui/scripts-generators test ✔️ done - 10.34s + +@fluentui/ability-attributes build ✔️ done - 18.36s + +@fluentui/accessibility build ✔️ done - 21.61s + +@fluentui/react-component-event-listener build ✔️ done - 17.47s + +@fluentui/react-component-nesting-registry build ✔️ done - 17.41s + +@fluentui/docs-components build ✔️ done - 19.52s + +@fluentui/scripts-gulp test ✔️ done - 2.21s + +@fluentui/react-component-ref build ✔️ done - 25.57s + +@fluentui/pr-deploy-site type-check ✔️ done - 8.36s + +@fluentui/react-proptypes build ✔️ done - 16.07s + +@fluentui/scripts-gulp type-check ✔️ done - 11.21s + +@fluentui/state build ✔️ done - 13.50s + +@fluentui/api-docs test ✔️ done - 4.70s + +@fluentui/styles build ✔️ done - 15.36s + +@fluentui/example-data test ✔️ done - 4.70s + +@fluentui/set-version test ✔️ done - 4.42s + +@fluentui/keyboard-key test ✔️ done - 9.54s + +@fluentui/date-time-utilities build ✔️ done - 12.54s + +@fluentui/dom-utilities build ✔️ done - 14.11s + +@fluentui/react-conformance-griffel build ✔️ done - 11.59s + +@fluentui/merge-styles build ✔️ done - 16.77s + +@fluentui/test-utilities test ✔️ done - 11.81s + +@fluentui/tokens test ✔️ done - 9.44s + +@fluentui/react-theme build ✔️ done - 12.92s + +@fluentui/react-window-provider build ✔️ done - 19.10s + +@fluentui/tokens type-check ✔️ done - 4.82s + +🔥 @fluentui/react-northstar build:info ✔️ done - 2m 54.71s + +@fluentui/keyboard-keys test ✔️ done - 2.07s + +@fluentui/keyboard-keys type-check ✔️ done - 2.52s + +@fluentui/priority-overflow test ✔️ done - 3.28s + +@fluentui/priority-overflow type-check ✔️ done - 4.07s + +@fluentui/react-storybook-addon-codesandbox test ✔️ done - 3.47s + +@fluentui/react-portal-compat-context test ✔️ done - 2.30s + +@fluentui/react-storybook-addon-codesandbox type-check ✔️ done - 4.93s + +@fluentui/react-portal-compat-context type-check ✔️ done - 2.89s + +@fluentui/babel-preset-global-context test ✔️ done - 4.66s + +@fluentui/babel-preset-storybook-full-source test ✔️ done - 5.59s + +@fluentui/react-utilities build ✔️ done - 21.67s + +@fluentui/babel-preset-storybook-full-source type-check ✔️ done - 12.84s + +@fluentui/react-component-event-listener test ✔️ done - 9.87s + +@fluentui/babel-preset-global-context type-check ✔️ done - 18.08s + +@fluentui/react-component-nesting-registry test ✔️ done - 9.34s + +@fluentui/react-component-ref test ✔️ done - 11.30s + +@fluentui/accessibility test ✔️ done - 24.39s + +@fluentui/react-proptypes test ✔️ done - 11.22s + +🔥 @fluentui/react-conformance test ✔️ done - 1m 0.92s + +@fluentui/react-conformance-griffel test ✔️ done - 4.75s + +@fluentui/styles test ✔️ done - 14.92s + +@fluentui/dom-utilities test ✔️ done - 10.17s + +@fluentui/react-conformance-griffel type-check ✔️ done - 7.27s + +@fluentui/react-northstar-styles-renderer build ✔️ done - 21.02s + +@fluentui/date-time-utilities test ✔️ done - 15.14s + +@fluentui/react-theme test ✔️ done - 2.06s + +@fluentui/jest-serializer-merge-styles build ✔️ done - 9.47s + +@fluentui/react-theme-sass build ✔️ done - 10.94s + +@fluentui/react-window-provider test ✔️ done - 10.93s + +@fluentui/merge-styles test ✔️ done - 16.64s + +@fluentui/react-shared-contexts build ✔️ done - 16.16s + +@fluentui/scripts-storybook test ✔️ done - 18.10s + +@fluentui/react-avatar-context build ✔️ done - 12.80s + +@fluentui/scripts-storybook type-check ✔️ done - 16.16s + +🔥 @fluentui/codemods test ✔️ done - 1m 49.51s + +@fluentui/react-aria build ✔️ done - 27.17s + +@fluentui/react-breadcrumb build ✔️ done - 26.26s + +@fluentui/react-context-selector build ✔️ done - 22.54s + +@fluentui/react-utilities test ✔️ done - 8.97s + +@fluentui/react-theme type-check ✔️ done - 52.13s + +@fluentui/react-image build ✔️ done - 30.98s + +@fluentui/react-tags build ✔️ done - 28.94s + +@fluentui/react-drawer build ✔️ done - 33.23s + +@fluentui/react-virtualizer build ✔️ done - 27.25s + +@fluentui/react-utilities type-check ✔️ done - 16.28s + +@fluentui/jest-serializer-merge-styles test ✔️ done - 10.89s + +@fluentui/react-theme-sass test ✔️ done - 4.63s + +@fluentui/react-theme-sass type-check ✔️ done - 5.20s + +@fluentui/react-text build ✔️ done - 35.31s + +@fluentui/react-northstar-emotion-renderer build ✔️ done - 23.94s + +@fluentui/utilities build ✔️ done - 23.30s + +@fluentui/react-northstar-fela-renderer build ✔️ done - 27.40s + +@fluentui/react-shared-contexts test ✔️ done - 3.55s + +@fluentui/react-avatar-context test ✔️ done - 4.52s + +@fluentui/react-shared-contexts type-check ✔️ done - 6.80s + +@fluentui/react-avatar-context type-check ✔️ done - 3.21s + +@fluentui/react-aria test ✔️ done - 6.14s + +@fluentui/react-positioning build ✔️ done - 27.84s + +@fluentui/react-divider build ✔️ done - 29.87s + +@fluentui/react-label build ✔️ done - 29.05s + +@fluentui/react-tabster build ✔️ done - 26.98s + +@fluentui/react-badge build ✔️ done - 34.76s + +@fluentui/react-breadcrumb test ✔️ done - 7.59s + +@fluentui/react-context-selector test ✔️ done - 5.20s + +@fluentui/react-image test ✔️ done - 8.87s + +@fluentui/react-context-selector type-check ✔️ done - 15.02s + +@fluentui/react-tags test ✔️ done - 10.09s + +@fluentui/react-overflow build ✔️ done - 22.82s + +@fluentui/global-context build ✔️ done - 24.50s + +@fluentui/react-breadcrumb type-check ✔️ done - 26.55s + +@fluentui/react-virtualizer test ✔️ done - 3.84s + +@fluentui/react-drawer test ✔️ done - 7.41s + +@fluentui/react-tags type-check ✔️ done - 33.51s + +🔥 @fluentui/react-aria type-check ✔️ done - 1m 6.46s + +@fluentui/react-text test ✔️ done - 28.71s + +@fluentui/react-drawer type-check ✔️ done - 38.03s + +@fluentui/react-northstar-emotion-renderer test ✔️ done - 13.36s + +🔥 @fluentui/react-image type-check ✔️ done - 1m 6.68s + +@fluentui/theme build ✔️ done - 21.72s + +@fluentui/react-hooks build ✔️ done - 24.89s + +@fluentui/react-positioning test ✔️ done - 7.00s + +@fluentui/react-northstar-fela-renderer test ✔️ done - 15.14s + +🔥 @fluentui/react-virtualizer type-check ✔️ done - 1m 5.67s + +@fluentui/react-divider test ✔️ done - 7.76s + +🔥 @fluentui/react-text type-check ✔️ done - 1m 5.91s + +@fluentui/react-positioning type-check ✔️ done - 15.29s + +@fluentui/react-label test ✔️ done - 8.58s + +@fluentui/utilities test ✔️ done - 49.69s + +@fluentui/react-spinner build ✔️ done - 31.08s + +@fluentui/react-field build ✔️ done - 33.43s + +🔥 @fluentui/react-bindings build ✔️ done - 1m 8.56s + +@fluentui/react-accordion build ✔️ done - 40.16s + +🔥 @fluentui/react-divider type-check ✔️ done - 1m 0.78s + +@fluentui/react-portal build ✔️ done - 25.19s + +@fluentui/react-tabster test ✔️ done - 2.79s + +@fluentui/react-button build ✔️ done - 41.81s + +@fluentui/react-link build ✔️ done - 29.65s + +🔥 @fluentui/react-label type-check ✔️ done - 1m 0.96s + +@fluentui/react-overflow test ✔️ done - 6.86s + +@fluentui/react-provider build ✔️ done - 31.03s + +@fluentui/react-tabster type-check ✔️ done - 14.31s + +@fluentui/global-context test ✔️ done - 5.53s + +@fluentui/react-badge test ✔️ done - 15.09s + +@fluentui/react-tabs build ✔️ done - 33.83s + +@fluentui/scheme-utilities build ✔️ done - 12.82s + +@fluentui/theme test ✔️ done - 13.48s + +@fluentui/global-context type-check ✔️ done - 20.03s + +@fluentui/style-utilities build ✔️ done - 19.86s + +@fluentui/react-spinner test ✔️ done - 9.41s + +@fluentui/react-hooks test ✔️ done - 26.07s + +🔥 @fluentui/react-badge type-check ✔️ done - 1m 0.82s + +@fluentui/react-checkbox build ✔️ done - 34.70s + +@fluentui/react-progress build ✔️ done - 32.43s + +@fluentui/react-input build ✔️ done - 33.28s + +🔥 @fluentui/react-overflow type-check ✔️ done - 1m 3.01s + +@fluentui/react-radio build ✔️ done - 37.93s + +🔥 @fluentui/react-spinner type-check ✔️ done - 1m 4.26s + +@fluentui/react-select build ✔️ done - 36.37s + +@fluentui/react-skeleton build ✔️ done - 31.83s + +@fluentui/react-spinbutton build ✔️ done - 38.10s + +@fluentui/react-field test ✔️ done - 13.25s + +@fluentui/react-slider build ✔️ done - 38.73s + +@fluentui/react-switch build ✔️ done - 38.43s + +@fluentui/react-accordion test ✔️ done - 19.95s + +@fluentui/react-textarea build ✔️ done - 37.22s + +@fluentui/react-bindings test ✔️ done - 46.94s + +@fluentui/react-telemetry build ✔️ done - 48.91s + +🔥 @fluentui/react-icons-northstar build ✔️ done - 1m 0.29s + +🔥 @fluentui/react-field type-check ✔️ done - 1m 7.34s + +@fluentui/react-dialog build ✔️ done - 39.63s + +@fluentui/react-combobox build ✔️ done - 46.90s + +@fluentui/react-portal test ✔️ done - 10.00s + +🔥 @fluentui/react-accordion type-check ✔️ done - 1m 16.06s + +@fluentui/react-popover build ✔️ done - 39.73s + +@fluentui/react-button test ✔️ done - 22.89s + +@fluentui/react-tooltip build ✔️ done - 40.36s + +@fluentui/react-menu build ✔️ done - 48.82s + +@fluentui/react-link test ✔️ done - 9.76s + +@fluentui/react-provider test ✔️ done - 10.85s + +@fluentui/react-card build ✔️ done - 40.61s + +@fluentui/react-tabs test ✔️ done - 11.43s + +@fluentui/react-storybook-addon build ✔️ done - 26.17s + +@fluentui/common-styles build ✔️ done - 5.03s + +🔥 @fluentui/react-portal type-check ✔️ done - 1m 5.98s + +@fluentui/font-icons-mdl2 build ✔️ done - 11.84s + +@fluentui/react-file-type-icons build ✔️ done - 15.18s + +@fluentui/react-link type-check ✔️ done - 59.53s + +@fluentui/foundation-legacy build ✔️ done - 28.20s + +@fluentui/react-provider type-check ✔️ done - 53.18s + +🔥 @fluentui/react-button type-check ✔️ done - 1m 15.11s + +@fluentui/react-focus build ✔️ done - 28.41s + +@fluentui/react-icon-provider build ✔️ done - 20.41s + +@fluentui/style-utilities test ✔️ done - 12.63s + +@fluentui/react-progress test ✔️ done - 11.87s + +@fluentui/react-checkbox test ✔️ done - 13.53s + +🔥 @fluentui/react-tabs type-check ✔️ done - 1m 2.67s + +@fluentui/react-input test ✔️ done - 11.89s + +@fluentui/react-radio test ✔️ done - 15.50s + +@fluentui/react-select test ✔️ done - 14.13s + +@fluentui/react-skeleton test ✔️ done - 10.05s + +@fluentui/react-toolbar build ✔️ done - 38.20s + +🔥 @fluentui/react-checkbox type-check ✔️ done - 1m 1.06s + +@fluentui/react-progress type-check ✔️ done - 57.34s + +@fluentui/react-spinbutton test ✔️ done - 15.31s + +@fluentui/react-input type-check ✔️ done - 57.89s + +@fluentui/react-slider test ✔️ done - 11.24s + +@fluentui/react-radio type-check ✔️ done - 58.45s + +@fluentui/react-select type-check ✔️ done - 53.87s + +@fluentui/react-switch test ✔️ done - 12.63s + +@fluentui/react-textarea test ✔️ done - 11.52s + +@fluentui/react-skeleton type-check ✔️ done - 49.78s + +@fluentui/react-dialog test ✔️ done - 22.61s + +@fluentui/react-icons-northstar test ✔️ done - 37.35s + +🔥 @fluentui/react-spinbutton type-check ✔️ done - 1m 5.40s + +🔥 @fluentui/react-slider type-check ✔️ done - 1m 4.43s + +🔥 @fluentui/react-switch type-check ✔️ done - 1m 12.12s + +🔥 @fluentui/react-textarea type-check ✔️ done - 1m 15.14s + +@fluentui/react-combobox test ✔️ done - 31.74s + +@fluentui/react-popover test ✔️ done - 13.57s + +@fluentui/react-datepicker-compat build ✔️ done - 52.58s + +@fluentui/react-infobutton build ✔️ done - 37.68s + +@fluentui/react-tooltip test ✔️ done - 10.13s + +🔥 @fluentui/react-combobox type-check ✔️ done - 1m 15.28s + +@fluentui/react-avatar build ✔️ done - 47.83s + +🔥 @fluentui/react-dialog type-check ✔️ done - 1m 46.09s + +@fluentui/react-menu test ✔️ done - 32.64s + +@fluentui/react-storybook-addon test ✔️ done - 3.17s + +@fluentui/react-card test ✔️ done - 12.04s + +@fluentui/font-icons-mdl2 test ✔️ done - 5.02s + +🔥 @fluentui/react-popover type-check ✔️ done - 1m 19.54s + +@fluentui/react-file-type-icons test ✔️ done - 11.03s + +🔥 @fluentui/react-tooltip type-check ✔️ done - 1m 6.35s + +@fluentui/foundation-legacy test ✔️ done - 16.21s + +@fluentui/react-focus test ✔️ done - 22.56s + +🔥 @fluentui/react-menu type-check ✔️ done - 1m 17.03s + +@fluentui/react-storybook-addon type-check ✔️ done - 50.14s + +@fluentui/react-icon-provider test ✔️ done - 15.52s + +@fluentui/react-datepicker-compat test ✔️ done - 5.27s + +@fluentui/react-toolbar test ✔️ done - 23.14s + +🔥 @fluentui/react-card type-check ✔️ done - 1m 20.90s + +🔥 @fluentui/react-icons-mdl2 build ✔️ done - 1m 1.80s + +@fluentui/react-infobutton test ✔️ done - 15.10s + +🔥 @fluentui/react build ✔️ done - 1m 20.90s + +@fluentui/react-persona build ✔️ done - 40.97s + +@fluentui/react-alert build ✔️ done - 46.53s + +🔥 @fluentui/react-datepicker-compat type-check ✔️ done - 1m 14.83s + +🔥 @fluentui/react-toolbar type-check ✔️ done - 1m 31.56s + +🔥 @fluentui/react-northstar build ✔️ done - 4m 54.28s + +🔥 @fluentui/react-infobutton type-check ✔️ done - 1m 11.65s + +@fluentui/react-avatar test ✔️ done - 20.02s + +🔥 @fluentui/react-table build ✔️ done - 1m 1.06s + +@fluentui/perf-test build ✔️ done - 17.34s + +@fluentui/react-icons-mdl2-branded build ✔️ done - 25.66s + +@fluentui/azure-themes build ✔️ done - 17.79s + +@fluentui/fluent2-theme build ✔️ done - 17.42s + +@fluentui/react-tree build ✔️ done - 56.62s + +@fluentui/react-date-time build ✔️ done - 17.73s + +@fluentui/react-charting build ✔️ done - 26.29s + +@fluentui/react-cards build ✔️ done - 31.25s + +@fluentui/theme-samples build ✔️ done - 15.67s + +@fluentui/react-monaco-editor build ✔️ done - 24.39s + +@fluentui/react-experiments build ✔️ done - 39.38s + +@fluentui/react-persona test ✔️ done - 17.60s + +@fluentui/react-alert test ✔️ done - 16.05s + +@fluentui/perf-test-react-components build ✔️ done - 39.87s + +🔥 @fluentui/react-avatar type-check ✔️ done - 1m 35.12s + +🔥 @fluentui/react-icons-mdl2 test ✔️ done - 1m 49.90s + +@fluentui/local-sandbox build ✔️ done - 21.38s + +@fluentui/react-18-tests-v8 test ✔️ done - 12.11s + +@fluentui/react-18-tests-v8 type-check ✔️ done - 5.88s + +🔥 @fluentui/react-persona type-check ✔️ done - 1m 7.45s + +@fluentui/ts-minbar-test-react type-check ✔️ done - 3.40s + +@fluentui/react-alert type-check ✔️ done - 59.39s + +🔥 @fluentui/projects-test build ✔️ done - 1m 13.49s + +🔥 @fluentui/code-sandbox build ✔️ done - 1m 33.07s + +🔥 @fluentui/vr-tests-react-components build ✔️ done - 1m 36.97s + +🔥 @fluentui/ts-minbar-test-react test ✔️ done - 1m 43.04s + +🔥 @fluentui/react-data-grid-react-window build ✔️ done - 1m 10.93s + +@fluentui/react-table test ✔️ done - 55.85s + +🔥 @fluentui/react-components build ✔️ done - 1m 42.52s + +@fluentui/cra-template type-check ✔️ done - 9.36s + +@fluentui/react-tree test ✔️ done - 19.91s + +@fluentui/react-cards test ✔️ done - 18.40s + +@fluentui/storybook build ✔️ done - 13.24s + +@fluentui/react-charting test ✔️ done - 53.18s + +@fluentui/react-docsite-components build ✔️ done - 26.80s + +@fluentui/react-monaco-editor test ✔️ done - 19.79s + +🔥 @fluentui/react-tree type-check ✔️ done - 1m 25.58s + +@fluentui/circulars-test test ✔️ done - 20.96s + +🔥 @fluentui/react-table type-check ✔️ done - 1m 49.95s + +@fluentui/react-experiments test ✔️ done - 43.91s + +@fluentui/react-builder build ✔️ done - 51.11s + +@fluentui/vr-tests-react-components test ✔️ done - 33.88s + +@fluentui/react-data-grid-react-window test ✔️ done - 2.46s + +🔥 @fluentui/react-northstar-prototypes build ✔️ done - 1m 9.90s + +@fluentui/vr-tests-react-components type-check ✔️ done - 50.44s + +@fluentui/react-data-grid-react-window type-check ✔️ done - 54.65s + +@fluentui/ssr-tests-v9 build ✔️ done - 11.08s + +🔥 @fluentui/cra-template test ✔️ done - 4m 7.04s + +🔥 @fluentui/recipes-react-components build ✔️ done - 1m 20.80s + +🔥 @fluentui/react-migration-v8-v9 build ✔️ done - 1m 28.56s + +🔥 @fluentui/react-migration-v0-v9 build ✔️ done - 1m 32.87s + +@fluentui/react-components test ✔️ done - 14.92s + +🔥 @fluentui/react-portal-compat build ✔️ done - 1m 18.69s + +@fluentui/theming-designer build ✔️ done - 15.93s + +🔥 @fluentui/theme-designer build ✔️ done - 1m 30.24s + +@fluentui/react-docsite-components test ✔️ done - 18.74s + +@fluentui/vr-tests build ✔️ done - 51.35s + +@fluentui/react-examples build ✔️ done - 55.11s + +@fluentui/perf-test-northstar build ✔️ done - 2.63s + +@fluentui/react-builder test ✔️ done - 48.20s + +@fluentui/react-18-tests-v9 type-check ✔️ done - 6.31s + +🔥 @fluentui/react-components type-check ✔️ done - 2m 5.75s + +@fluentui/stress-test type-check ✔️ done - 53.42s + +@fluentui/ts-minbar-test-react-components type-check ✔️ done - 4.30s + +@fluentui/ssr-tests-v9 test ✔️ done - 26.28s + +🔥 @fluentui/ts-minbar-test-react-components test ✔️ done - 1m 12.35s + +@fluentui/recipes-react-components type-check ✔️ done - 1.33s + +🔥 @fluentui/react-18-tests-v9 test ✔️ done - 1m 49.28s + +@fluentui/react-migration-v8-v9 test ✔️ done - 2.43s + +@fluentui/public-docsite-v9 build ✔️ done - 23.22s + +@fluentui/react-migration-v0-v9 test ✔️ done - 34.40s + +🔥 @fluentui/ssr-tests-v9 type-check ✔️ done - 1m 48.83s + +@fluentui/react-portal-compat test ✔️ done - 9.17s + +🔥 @fluentui/react-migration-v8-v9 type-check ✔️ done - 2m 2.36s + +@fluentui/theming-designer test ✔️ done - 5.09s + +@fluentui/theme-designer test ✔️ done - 2.88s + +🔥 @fluentui/projects-test test ✔️ done - 9m 43.18s + +🔥 @fluentui/react-migration-v0-v9 type-check ✔️ done - 1m 56.75s + +@fluentui/public-docsite-resources build ✔️ done - 21.85s + +@fluentui/perf-test-northstar test ✔️ done - 1.62s + +@fluentui/vr-tests type-check ✔️ done - 47.06s + +🔥 @fluentui/react test ✔️ done - 15m 10.01s +🔥 @fluentui/theme-designer type-check ✔️ done - 1m 26.10s +🔥 @fluentui/react-portal-compat type-check ✔️ done - 1m 47.39s +@fluentui/public-docsite build ✔️ done - 33.47s + +@fluentui/public-docsite test ✔️ done - 6.36s +@fluentui/ssr-tests build ✔️ done - 34.77s + +🔥 @fluentui/docs build ✔️ done - 6m 30.13s +@fluentui/ssr-tests test ✔️ done - 7.87s +🔥 @fluentui/react-northstar test ✔️ done - 18m 16.83s + +🏗 Summary + +[Tasks Count] success: 570, skipped: 0, incomplete: 0 +---------------------------------------------- +Took a total of 45m 37.51s to complete +2023-03-08T19:21:27.6494704Z Done in 2738.23s. Peak memory usage 33.66MB. +2023-03-08T19:21:27.6677257Z ##[section]Finishing: build, test, lint, type-check +``` + +### Slowest tasks + +``` +🔥 @fluentui/react lint ✔️ done - 1m 11.98s +🔥 @fluentui/react-examples lint ✔️ done - 1m 7.04s +🔥 @fluentui/react-northstar build:info ✔️ done - 2m 54.71s +🔥 @fluentui/react-conformance test ✔️ done - 1m 0.92s +🔥 @fluentui/codemods test ✔️ done - 1m 49.51s +🔥 @fluentui/react-aria type-check ✔️ done - 1m 6.46s +🔥 @fluentui/react-image type-check ✔️ done - 1m 6.68s +🔥 @fluentui/react-virtualizer type-check ✔️ done - 1m 5.67s +🔥 @fluentui/react-text type-check ✔️ done - 1m 5.91s +🔥 @fluentui/react-bindings build ✔️ done - 1m 8.56s +🔥 @fluentui/react-divider type-check ✔️ done - 1m 0.78s +🔥 @fluentui/react-label type-check ✔️ done - 1m 0.96s +🔥 @fluentui/react-badge type-check ✔️ done - 1m 0.82s +🔥 @fluentui/react-overflow type-check ✔️ done - 1m 3.01s +🔥 @fluentui/react-spinner type-check ✔️ done - 1m 4.26s +🔥 @fluentui/react-icons-northstar build ✔️ done - 1m 0.29s +🔥 @fluentui/react-field type-check ✔️ done - 1m 7.34s +🔥 @fluentui/react-accordion type-check ✔️ done - 1m 16.06s +🔥 @fluentui/react-portal type-check ✔️ done - 1m 5.98s +🔥 @fluentui/react-button type-check ✔️ done - 1m 15.11s +🔥 @fluentui/react-tabs type-check ✔️ done - 1m 2.67s +🔥 @fluentui/react-checkbox type-check ✔️ done - 1m 1.06s +🔥 @fluentui/react-spinbutton type-check ✔️ done - 1m 5.40s +🔥 @fluentui/react-slider type-check ✔️ done - 1m 4.43s +🔥 @fluentui/react-switch type-check ✔️ done - 1m 12.12s +🔥 @fluentui/react-textarea type-check ✔️ done - 1m 15.14s +🔥 @fluentui/react-combobox type-check ✔️ done - 1m 15.28s +🔥 @fluentui/react-dialog type-check ✔️ done - 1m 46.09s +🔥 @fluentui/react-popover type-check ✔️ done - 1m 19.54s +🔥 @fluentui/react-tooltip type-check ✔️ done - 1m 6.35s +🔥 @fluentui/react-menu type-check ✔️ done - 1m 17.03s +🔥 @fluentui/react-card type-check ✔️ done - 1m 20.90s +🔥 @fluentui/react-icons-mdl2 build ✔️ done - 1m 1.80s +🔥 @fluentui/react build ✔️ done - 1m 20.90s +🔥 @fluentui/react-datepicker-compat type-check ✔️ done - 1m 14.83s +🔥 @fluentui/react-toolbar type-check ✔️ done - 1m 31.56s +🔥 @fluentui/react-northstar build ✔️ done - 4m 54.28s +🔥 @fluentui/react-infobutton type-check ✔️ done - 1m 11.65s +🔥 @fluentui/react-table build ✔️ done - 1m 1.06s +🔥 @fluentui/react-avatar type-check ✔️ done - 1m 35.12s +🔥 @fluentui/react-icons-mdl2 test ✔️ done - 1m 49.90s +🔥 @fluentui/react-persona type-check ✔️ done - 1m 7.45s +🔥 @fluentui/projects-test build ✔️ done - 1m 13.49s +🔥 @fluentui/code-sandbox build ✔️ done - 1m 33.07s +🔥 @fluentui/vr-tests-react-components build ✔️ done - 1m 36.97s +🔥 @fluentui/ts-minbar-test-react test ✔️ done - 1m 43.04s +🔥 @fluentui/react-data-grid-react-window build ✔️ done - 1m 10.93s +🔥 @fluentui/react-components build ✔️ done - 1m 42.52s +🔥 @fluentui/react-tree type-check ✔️ done - 1m 25.58s +🔥 @fluentui/react-table type-check ✔️ done - 1m 49.95s +🔥 @fluentui/react-northstar-prototypes build ✔️ done - 1m 9.90s +🔥 @fluentui/cra-template test ✔️ done - 4m 7.04s +🔥 @fluentui/recipes-react-components build ✔️ done - 1m 20.80s +🔥 @fluentui/react-migration-v8-v9 build ✔️ done - 1m 28.56s +🔥 @fluentui/react-migration-v0-v9 build ✔️ done - 1m 32.87s +🔥 @fluentui/react-portal-compat build ✔️ done - 1m 18.69s +🔥 @fluentui/theme-designer build ✔️ done - 1m 30.24s +🔥 @fluentui/react-components type-check ✔️ done - 2m 5.75s +🔥 @fluentui/ts-minbar-test-react-components test ✔️ done - 1m 12.35s +🔥 @fluentui/react-18-tests-v9 test ✔️ done - 1m 49.28s +🔥 @fluentui/ssr-tests-v9 type-check ✔️ done - 1m 48.83s +🔥 @fluentui/react-migration-v8-v9 type-check ✔️ done - 2m 2.36s +🔥 @fluentui/projects-test test ✔️ done - 9m 43.18s +🔥 @fluentui/react-migration-v0-v9 type-check ✔️ done - 1m 56.75s +🔥 @fluentui/react test ✔️ done - 15m 10.01s +🔥 @fluentui/theme-designer type-check ✔️ done - 1m 26.10s +🔥 @fluentui/react-portal-compat type-check ✔️ done - 1m 47.39s +🔥 @fluentui/docs build ✔️ done - 6m 30.13s +🔥 @fluentui/react-northstar test ✔️ done - 18m 16.83s +``` + +**Most slowest tasks:** + +``` +🔥 @fluentui/react-northstar build ✔️ done - 4m 54.28s +🔥 @fluentui/docs build ✔️ done - 6m 30.13s +🔥 @fluentui/projects-test test ✔️ done - 9m 43.18s +🔥 @fluentui/react test ✔️ done - 15m 10.01s +🔥 @fluentui/react-northstar test ✔️ done - 18m 16.83s + +🔥 @fluentui/react-migration-v8-v9 type-check ✔️ done - 2m 2.36s +🔥 @fluentui/react-components type-check ✔️ done - 2m 5.75s +🔥 @fluentui/react-migration-v0-v9 type-check ✔️ done - 1m 56.75s +🔥 @fluentui/react-portal-compat type-check ✔️ done - 1m 47.39s +``` + +--- + +## Per project data + +### react-components + +~~All packages use native jest so no perf bottlenecks caused by test execution. ✅~~ + +🔥 v9 packages are not using maxWorkers which might cause OOM and other issues on CI !!!! + +- fixed by setting maxWorkers on CI + +### react + +- used `runInBand` on CI !!!!! (update: without that it will never finish because memory leaks, we will use maxThreadWorkers=4) + +| Run type | time | command | +| ------------------------------ | ---------- | ----------------------------------------------------------------------- | +| current | 263 s | `just test --runInBand --no-cache` | +| current (CI) | 15m 10.01s | part of `lage build test lint type-check` | +| without runInBand | 85 s | `just test --no-cache` | +| without runInBand (+ raw jest) | 82 s | `jest --no-cache` | +| without runInBand (CI) | ? | part of `lage build test lint type-check`. This will never finish on CI | + +**Tests contain memory leaks** + +> discovered on CI when pipeline was executed via nx: + +``` +worker process has failed to exit gracefully and has been force exited. This is likely caused by tests leaking due to improper teardown. Try running with --detectOpenHandles to find leaks. Active timers can also cause this, ensure that .unref() was called on them. +``` + +### react-northstar + +| Run type | time | command | +| --------------------------------------- | ----- | -------------------------------------------------------------------------- | +| current | 382 s | `gulp test --config ./jest.config.js --coverage --maxWorkers=2 --no-cache` | +| without codecov | 348 s | `gulp test --config ./jest.config.js --maxWorkers=2 --no-cache` | +| without codecov,maxWorkers | 232 s | `gulp test --config ./jest.config.js --no-cache` | +| without codecov,maxWorkers (+ raw jest) | 196 s | `jest --config ./jest.config.js --no-cache` | + +#### More data: + +**70% of the test scenarios are very slow** - triggering jest warnings: + +``` + PASS test/specs/components/Skeleton/SkeletonButton-test.tsx (10.063 s) + PASS test/specs/components/Skeleton/SkeletonAvatar-test.tsx (10.126 s) + PASS test/specs/components/Chat/ChatMessageReadStatus-test.tsx (9.917 s) + PASS test/specs/components/Carousel/CarouselNavigationItem-test.tsx (10.338 s) + PASS test/specs/components/Button/ButtonContent-test.tsx (9.267 s) + PASS test/specs/components/Attachment/AttachmentDescription-test.tsx (9.598 s) + PASS test/specs/components/Toolbar/ToolbarMenuItemIcon-test.ts (9.674 s) + PASS test/specs/components/Dropdown/DropdownItem-test.tsx (9.877 s) + PASS test/specs/components/Toolbar/ToolbarMenu-test.tsx (10.047 s) + PASS test/specs/components/Toolbar/ToolbarMenuDivider-test.ts (9.796 s) + PASS test/specs/components/Toolbar/ToolbarItemWrapper-test.tsx (9.426 s) + PASS test/specs/components/Breadcrumb/Breadcrumb-test.ts (11.22 s) + PASS test/specs/components/Breadcrumb/BreadcrumbDivider-test.ts (9.089 s) + PASS test/specs/components/SplitButton/SplitButtonToggle-test.tsx (9.46 s) + PASS test/specs/components/Alert/AlertDismissAction-test.tsx (10.006 s) + PASS test/specs/components/List/ListItemContentMedia-test.tsx (9.923 s) + PASS test/specs/components/Skeleton/SkeletonInput-test.tsx (9.283 s) + PASS test/specs/components/Skeleton/SkeletonShape-test.tsx (9.819 s) + PASS test/specs/components/Chat/ChatMessageContent-test.tsx (11.646 s) + PASS test/specs/components/Menu/MenuItemIndicator-test.tsx (11.176 s) +``` + +**Tests contain memory leaks** + +> discovered while executing via raw `jest` instead `gulp` + +``` +A worker process has failed to exit gracefully and has been force exited. This is likely caused by tests leaking due to improper teardown. Try running with --detectOpenHandles to find leaks. Active timers can also cause this, ensure that .unref() was called on them. +``` diff --git a/docs/ci-perf-type-check.md b/docs/ci-perf-type-check.md new file mode 100644 index 0000000000000..06a004a7fe497 --- /dev/null +++ b/docs/ci-perf-type-check.md @@ -0,0 +1,304 @@ +# `type-check` + +## Results + +**Projects with type-check:** 105 + +**Legend:** + +- optimization === disable path aliases for `tsc -b` runs + +| Run type | time | delta | +| ------------------------------ | ------- | -------- | +| current / parallel 1 | 16m 41s | | +| with optimization / parallel 1 | 9m 57s | 40,4% 🚅 | +| | | | +| current / parallel 8 | 3m 20s | | +| with optimization / parallel 8 | 2m 12s | 34% 🚅 | + +## Local + +### current (no optimization) + +> - type-check parallel 1 +> - ? projects have target:type-check + +total: 1001.36s / ~16m 41s + +> type-check parallel 8 + +total: 200.00s / ~3m 20s + +**result for `parallel 1`:** + +``` +nx run-many --target=type-check --skip-nx-cache + + ✔ nx run @fluentui/scripts-utils:type-check (2s) + ✔ nx run @fluentui/scripts-monorepo:type-check (2s) + ✔ nx run @fluentui/scripts-prettier:type-check (2s) + ✔ nx run @fluentui/scripts-tasks:type-check (2s) + ✔ nx run @fluentui/scripts-api-extractor:type-check (1s) + ✔ nx run @fluentui/scripts-jest:type-check (2s) + ✔ nx run @fluentui/keyboard-keys:type-check (999ms) + ✔ nx run @fluentui/react-utilities:type-check (4s) + ✔ nx run @fluentui/tokens:type-check (2s) +🔥 ✔ nx run @fluentui/react-theme:type-check (12s) + ✔ nx run @fluentui/react-conformance-griffel:type-check (2s) + ✔ nx run @fluentui/react-shared-contexts:type-check (996ms) + ✔ nx run @fluentui/scripts-cypress:type-check (2s) + ✔ nx run @fluentui/scripts-webpack:type-check (2s) + ✔ nx run @fluentui/react-context-selector:type-check (3s) + ✔ nx run @fluentui/react-tabster:type-check (3s) + ✔ nx run @fluentui/react-portal-compat-context:type-check (1s) + ✔ nx run @fluentui/scripts-puppeteer:type-check (2s) + ✔ nx run @fluentui/scripts-projects-test:type-check (2s) +🔥 ✔ nx run @fluentui/react-label:type-check (14s) + ✔ nx run @fluentui/scripts-babel:type-check (2s) +🔥 ✔ nx run @fluentui/react-field:type-check (14s) +🔥 ✔ nx run @fluentui/react-aria:type-check (13s) + ✔ nx run @fluentui/scripts-gulp:type-check (3s) +🔥 ✔ nx run @fluentui/react-portal:type-check (15s) + ✔ nx run @fluentui/react-positioning:type-check (3s) +🔥 ✔ nx run @fluentui/react-popover:type-check (16s) +🔥 ✔ nx run @fluentui/react-tooltip:type-check (14s) +🔥 ✔ nx run @fluentui/react-badge:type-check (14s) +🔥 ✔ nx run @fluentui/react-avatar:type-check (18s) +🔥 ✔ nx run @fluentui/react-button:type-check (15s) +🔥 ✔ nx run @fluentui/react-provider:type-check (14s) +🔥 ✔ nx run @fluentui/react-radio:type-check (14s) +🔥 ✔ nx run @fluentui/react-text:type-check (14s) +🔥 ✔ nx run @fluentui/react-infobutton:type-check (17s) +🔥 ✔ nx run @fluentui/react-spinbutton:type-check (14s) +🔥 ✔ nx run @fluentui/react-checkbox:type-check (14s) +🔥 ✔ nx run @fluentui/react-divider:type-check (14s) +🔥 ✔ nx run @fluentui/react-persona:type-check (15s) +🔥 ✔ nx run @fluentui/react-input:type-check (14s) + ✔ nx run @fluentui/priority-overflow:type-check (2s) +🔥 ✔ nx run @fluentui/react-accordion:type-check (14s) +🔥 ✔ nx run @fluentui/react-combobox:type-check (15s) +🔥 ✔ nx run @fluentui/react-progress:type-check (14s) +🔥 ✔ nx run @fluentui/react-textarea:type-check (14s) +🔥 ✔ nx run @fluentui/react-spinner:type-check (14s) +🔥🔥 ✔ nx run @fluentui/react-toolbar:type-check (19s) +🔥🔥 ✔ nx run @fluentui/react-dialog:type-check (22s) +🔥 ✔ nx run @fluentui/react-select:type-check (14s) +🔥 ✔ nx run @fluentui/react-slider:type-check (14s) +🔥 ✔ nx run @fluentui/react-switch:type-check (14s) +🔥 ✔ nx run @fluentui/react-image:type-check (13s) +🔥🔥🔥 ✔ nx run @fluentui/react-table:type-check (29s) +🔥🔥 ✔ nx run @fluentui/react-card:type-check (20s) +🔥 ✔ nx run @fluentui/react-link:type-check (14s) +🔥 ✔ nx run @fluentui/react-menu:type-check (17s) +🔥 ✔ nx run @fluentui/react-tabs:type-check (15s) +🔥 ✔ nx run @fluentui/react-virtualizer:type-check (16s) +🔥 ✔ nx run @fluentui/react-overflow:type-check (16s) +🔥 ✔ nx run @fluentui/react-alert:type-check (13s) +🔥🔥🔥 ✔ nx run @fluentui/react-components:type-check (33s) + ✔ nx run @fluentui/babel-preset-storybook-full-source:type-check (4s) + ✔ nx run @fluentui/scripts-storybook:type-check (4s) + ✔ nx run @fluentui/react-storybook-addon-codesandbox:type-check (2s) +🔥 ✔ nx run @fluentui/react-storybook-addon:type-check (14s) + ✔ nx run @fluentui/scripts-github:type-check (2s) +🔥🔥🔥 ✔ nx run @fluentui/react-migration-v0-v9:type-check (33s) +🔥🔥🔥 ✔ nx run @fluentui/react-migration-v8-v9:type-check (32s) + ✔ nx run @fluentui/global-context:type-check (5s) +🔥 ✔ nx run @fluentui/react-data-grid-react-window:type-check (14s) + ✔ nx run @fluentui/babel-preset-global-context:type-check (6s) +🔥 ✔ nx run @fluentui/react-datepicker-compat:type-check (19s) + ✔ nx run @fluentui/react-avatar-context:type-check (1s) +🔥 ✔ nx run @fluentui/react-portal-compat:type-check (18s) + ✔ nx run @fluentui/react-breadcrumb:type-check (7s) + ✔ nx run @fluentui/react-theme-sass:type-check (2s) +🔥 ✔ nx run @fluentui/react-skeleton:type-check (15s) +🔥🔥 ✔ nx run @fluentui/theme-designer:type-check (22s) + ✔ nx run @fluentui/react-drawer:type-check (8s) + ✔ nx run @fluentui/ts-minbar-test-react-components:type-check (2s) + ✔ nx run @fluentui/react-tags:type-check (7s) +🔥🔥 ✔ nx run @fluentui/react-tree:type-check (22s) +🔥 ✔ nx run @fluentui/vr-tests-react-components:type-check (13s) + ✔ nx run @fluentui/recipes-react-components:type-check (1s) + ✔ nx run @fluentui/scripts-update-release-notes:type-check (2s) + ✔ nx run @fluentui/ts-minbar-test-react:type-check (2s) + ✔ nx run @fluentui/scripts-fluentui-publish:type-check (1s) + ✔ nx run @fluentui/scripts-package-manager:type-check (2s) + ✔ nx run @fluentui/react-18-tests-v8:type-check (2s) + ✔ nx run @fluentui/react-18-tests-v9:type-check (2s) + ✔ nx run @fluentui/cra-template:type-check (3s) + ✔ nx run @fluentui/bundle-size:type-check (3s) + ✔ nx run @fluentui/pr-deploy-site:type-check (3s) + ✔ nx run @fluentui/scripts-lint-staged:type-check (2s) + ✔ nx run @fluentui/scripts-generators:type-check (2s) + ✔ nx run @fluentui/scripts-triage-bot:type-check (2s) +🔥🔥 ✔ nx run @fluentui/ssr-tests-v9:type-check (25s) + ✔ nx run @fluentui/scripts-beachball:type-check (2s) + ✔ nx run @fluentui/scripts-executors:type-check (3s) +🔥 ✔ nx run @fluentui/stress-test:type-check (13s) + ✔ nx run @fluentui/scripts-dangerjs:type-check (2s) + ✔ nx run @fluentui/scripts-ts-node:type-check (1s) +🔥 ✔ nx run @fluentui/vr-tests:type-check (10s) + ✔ nx run @fluentui/typings:type-check (1s) + ✔ nx run @fluentui/nx-workspace-tools:type-check (2s) +``` + +### Summary: + +Disabling TS Path aliases for `tsc -b` execution reduces type-check time 4-5x ! + +@fluentui/react-migration-v8-v9 type-check / 32s -> 6s +@fluentui/react-dialog / 22s -> 6s + +## Local (After improvements) + +> custom type-check command in place that disables path aliases. relies on dts being generated prior to execution. + +> type-check parallel 1 + +total: 597.71s / ~9m 57s + +> type-check parallel 8 + +total: 132.00s / ~2m 12s + +**result for `parallel 1`:** + +``` +nx run-many --target=type-check --skip-nx-cache + + ✔ nx run @fluentui/scripts-utils:type-check (1s) + ✔ nx run @fluentui/scripts-monorepo:type-check (2s) + ✔ nx run @fluentui/scripts-prettier:type-check (1s) + ✔ nx run @fluentui/scripts-tasks:type-check (2s) + ✔ nx run @fluentui/scripts-api-extractor:type-check (1s) + ✔ nx run @fluentui/scripts-jest:type-check (2s) + ✔ nx run @fluentui/keyboard-keys:type-check (4s) + ✔ nx run @fluentui/react-utilities:type-check (7s) + ✔ nx run @fluentui/tokens:type-check (4s) + ✔ nx run @fluentui/react-theme:type-check (7s) + ✔ nx run @fluentui/react-conformance-griffel:type-check (5s) + ✔ nx run @fluentui/react-shared-contexts:type-check (4s) + ✔ nx run @fluentui/scripts-cypress:type-check (1s) + ✔ nx run @fluentui/scripts-webpack:type-check (1s) + ✔ nx run @fluentui/react-context-selector:type-check (4s) + ✔ nx run @fluentui/react-tabster:type-check (5s) + ✔ nx run @fluentui/react-portal-compat-context:type-check (4s) + ✔ nx run @fluentui/scripts-puppeteer:type-check (2s) + ✔ nx run @fluentui/scripts-projects-test:type-check (1s) + ✔ nx run @fluentui/react-label:type-check (7s) + ✔ nx run @fluentui/scripts-babel:type-check (1s) + ✔ nx run @fluentui/react-field:type-check (8s) + ✔ nx run @fluentui/react-aria:type-check (7s) + ✔ nx run @fluentui/scripts-gulp:type-check (1s) + ✔ nx run @fluentui/react-portal:type-check (7s) + ✔ nx run @fluentui/react-positioning:type-check (5s) + ✔ nx run @fluentui/react-popover:type-check (8s) + ✔ nx run @fluentui/react-tooltip:type-check (8s) + ✔ nx run @fluentui/react-badge:type-check (8s) + ✔ nx run @fluentui/react-avatar:type-check (11s) + ✔ nx run @fluentui/react-button:type-check (11s) + ✔ nx run @fluentui/react-provider:type-check (8s) + ✔ nx run @fluentui/react-radio:type-check (9s) + ✔ nx run @fluentui/react-text:type-check (9s) + ✔ nx run @fluentui/react-infobutton:type-check (8s) + ✔ nx run @fluentui/react-spinbutton:type-check (8s) + ✔ nx run @fluentui/react-checkbox:type-check (8s) + ✔ nx run @fluentui/react-divider:type-check (7s) + ✔ nx run @fluentui/react-persona:type-check (7s) + ✔ nx run @fluentui/react-input:type-check (8s) + ✔ nx run @fluentui/priority-overflow:type-check (4s) + ✔ nx run @fluentui/react-accordion:type-check (8s) + ✔ nx run @fluentui/react-combobox:type-check (10s) + ✔ nx run @fluentui/react-progress:type-check (7s) + ✔ nx run @fluentui/react-textarea:type-check (7s) + ✔ nx run @fluentui/react-spinner:type-check (8s) + ✔ nx run @fluentui/react-toolbar:type-check (8s) + ✔ nx run @fluentui/react-dialog:type-check (9s) + ✔ nx run @fluentui/react-select:type-check (8s) + ✔ nx run @fluentui/react-slider:type-check (7s) + ✔ nx run @fluentui/react-switch:type-check (8s) + ✔ nx run @fluentui/react-image:type-check (7s) + ✔ nx run @fluentui/react-table:type-check (14s) + ✔ nx run @fluentui/react-card:type-check (9s) + ✔ nx run @fluentui/react-link:type-check (7s) + ✔ nx run @fluentui/react-menu:type-check (10s) + ✔ nx run @fluentui/react-tabs:type-check (9s) + ✔ nx run @fluentui/react-virtualizer:type-check (7s) + ✔ nx run @fluentui/react-overflow:type-check (7s) + ✔ nx run @fluentui/react-alert:type-check (9s) + ✔ nx run @fluentui/react-components:type-check (9s) + ✔ nx run @fluentui/babel-preset-storybook-full-source:type-check (6s) + ✔ nx run @fluentui/scripts-storybook:type-check (3s) + ✔ nx run @fluentui/react-storybook-addon-codesandbox:type-check (4s) + ✔ nx run @fluentui/react-storybook-addon:type-check (7s) + ✔ nx run @fluentui/scripts-github:type-check (1s) + ✔ nx run @fluentui/react-migration-v0-v9:type-check (11s) + ✔ nx run @fluentui/react-migration-v8-v9:type-check (10s) + ✔ nx run @fluentui/global-context:type-check (4s) + ✔ nx run @fluentui/react-data-grid-react-window:type-check (7s) + ✔ nx run @fluentui/babel-preset-global-context:type-check (7s) + ✔ nx run @fluentui/react-datepicker-compat:type-check (8s) + ✔ nx run @fluentui/react-avatar-context:type-check (3s) + ✔ nx run @fluentui/react-portal-compat:type-check (5s) + ✔ nx run @fluentui/react-breadcrumb:type-check (7s) + ✔ nx run @fluentui/react-theme-sass:type-check (4s) + ✔ nx run @fluentui/react-skeleton:type-check (7s) + ✔ nx run @fluentui/theme-designer:type-check (9s) + ✔ nx run @fluentui/react-drawer:type-check (7s) + ✔ nx run @fluentui/ts-minbar-test-react-components:type-check (2s) + ✔ nx run @fluentui/react-tags:type-check (6s) + ✔ nx run @fluentui/react-tree:type-check (8s) + ✔ nx run @fluentui/vr-tests-react-components:type-check (13s) + ✔ nx run @fluentui/recipes-react-components:type-check (6s) + ✔ nx run @fluentui/scripts-update-release-notes:type-check (1s) + ✔ nx run @fluentui/ts-minbar-test-react:type-check (2s) + ✔ nx run @fluentui/scripts-fluentui-publish:type-check (1s) + ✔ nx run @fluentui/scripts-package-manager:type-check (949ms) + ✔ nx run @fluentui/react-18-tests-v8:type-check (6s) + ✔ nx run @fluentui/react-18-tests-v9:type-check (5s) + ✔ nx run @fluentui/cra-template:type-check (2s) + ✔ nx run @fluentui/bundle-size:type-check (2s) + ✔ nx run @fluentui/pr-deploy-site:type-check (3s) + ✔ nx run @fluentui/scripts-lint-staged:type-check (1s) + ✔ nx run @fluentui/scripts-generators:type-check (2s) + ✔ nx run @fluentui/scripts-triage-bot:type-check (2s) + ✔ nx run @fluentui/ssr-tests-v9:type-check (10s) + ✔ nx run @fluentui/scripts-beachball:type-check (2s) + ✔ nx run @fluentui/scripts-executors:type-check (2s) + ✔ nx run @fluentui/stress-test:type-check (13s) + ✔ nx run @fluentui/scripts-dangerjs:type-check (1s) + ✔ nx run @fluentui/scripts-ts-node:type-check (1s) + ✔ nx run @fluentui/vr-tests:type-check (10s) + ✔ nx run @fluentui/typings:type-check (1s) + ✔ nx run @fluentui/nx-workspace-tools:type-check (2s) +``` + +## Leveraging `incremental` + +| Run: yarn workspace @fluentui/react-table tsc -b | time | delta | +| -------------------------------------------------------------------- | ----------------------- | ------ | +| current | 27.73s | | +| with incremental: true / 1st(cold) run | 27.73s | | +| with incremental: true / 2nd run | 4.4s | | +| -- | | | +| current / (tsc -p tsconfig.lib + tsc -b tsconfig.json) | (6.86s + 22.32s) 29.18s | 34% | +| with incremental:true / (tsc -p tsconfig.lib + tsc -b tsconfig.json) | (6.83s + 18.07) 24.9s | 15% 🚅 | + +## Leveraging "build react-components first and remap path aliases to those d.ts" + +_experiment:_ using path aliasing to .d.ts (not rolluped ones): + +1. generate d.ts for react-components (vNext tagged libraries) +2. create path aliases configuration to point to those d.ts +3. run `type-check` + +> what does "create path aliases configuration to point to those d.ts mean ? + +```diff +- "@fluentui/babel-preset-global-context": ["packages/react-components/babel-preset-global-context/src/index.ts"], ++ "@fluentui/babel-preset-global-context": ["dist/out-tsc/types/packages/react-components/babel-preset-global-context/src/index.d.ts"], +``` + +| Run: yarn workspace @fluentui/react-table tsc -b | time | delta | +| ------------------------------------------------ | ------ | ------ | +| current | 34.20s | | +| with react-components remapped aliases to d/ts | 10.88s | 32% 🚅 | diff --git a/docs/ci-test-data-v8.md b/docs/ci-test-data-v8.md new file mode 100644 index 0000000000000..97474974c619e --- /dev/null +++ b/docs/ci-test-data-v8.md @@ -0,0 +1,584 @@ +## test v8 + +> run 281.05s + +``` +src/components/ComboBox/ComboBox.test.tsx (19.355 s) +src/components/ContextualMenu/ContextualMenu.test.tsx +src/components/DetailsList/DetailsListV2.test.tsx +src/components/SpinButton/SpinButton.test.tsx +src/components/DetailsList/DetailsList.test.tsx +src/components/TextField/TextField.test.tsx +src/components/Button/Button.test.tsx +src/components/Dropdown/Dropdown.test.tsx +src/components/ColorPicker/ColorPicker.test.tsx (6.786 s) +src/components/OverflowSet/OverflowSet.test.tsx +src/utilities/positioning/positioning.test.ts +src/components/DetailsList/DetailsHeader.test.tsx +src/components/ResizeGroup/ResizeGroup.test.tsx +src/components/KeytipLayer/KeytipTree.test.tsx +src/components/DatePicker/DatePicker.test.tsx +src/components/pickers/BasePicker.test.tsx +src/components/Slider/Slider.test.tsx +src/utilities/selection/SelectionZone.test.tsx +src/components/KeytipLayer/KeytipLayer.test.tsx +src/utilities/color/colors.test.ts +src/components/ExtendedPicker/BaseExtendedPicker.test.tsx +src/components/MessageBar/MessageBar.test.tsx +src/components/TextField/MaskedTextField/MaskedTextField.test.tsx +src/utilities/keytips/KeytipManager.test.tsx +src/components/ContextualMenu/ContextualMenu.deprecated.test.tsx +src/components/Autofill/Autofill.test.tsx +src/components/Stack/Stack.test.tsx +src/components/GroupedList/GroupedListV2.test.tsx +src/components/GroupedList/GroupedList.test.tsx +src/components/ChoiceGroup/ChoiceGroup.test.tsx +src/components/Layer/Layer.test.tsx +src/components/ColorPicker/ColorRectangle/ColorRectangle.test.tsx +src/components/DetailsList/DetailsColumn.test.tsx +src/components/Checkbox/Checkbox.test.tsx +src/components/SearchBox/SearchBox.test.tsx +src/components/ColorPicker/ColorSlider/ColorSlider.test.tsx +src/components/Breadcrumb/Breadcrumb.test.tsx +src/components/Facepile/Facepile.test.tsx +src/components/CommandBar/CommandBar.test.tsx +src/components/List/List.test.tsx +src/components/Persona/Persona.test.tsx +src/components/Dialog/Dialog.test.tsx +src/components/SwatchColorPicker/SwatchColorPicker.test.tsx +src/components/Nav/Nav.test.tsx +src/components/TeachingBubble/TeachingBubble.test.tsx +src/components/Callout/Callout.test.tsx +src/components/HoverCard/HoverCard.test.tsx +src/components/Panel/Panel.test.tsx +src/components/ContextualMenu/ContextualMenuItem.test.tsx +src/components/TextField/MaskedTextField/inputMask.test.ts +src/components/Modal/Modal.test.tsx (5.25 s) +src/components/Stack/StackUtils.test.ts +src/components/Pivot/Pivot.test.tsx +src/components/pickers/TagPicker/TagPicker.test.tsx +src/components/Toggle/Toggle.test.tsx +src/components/Image/Image.test.tsx +src/components/TimePicker/TimePicker.test.tsx +src/components/Tooltip/TooltipHost.test.tsx +src/components/CommandBar/CommandBar.deprecated.test.tsx +src/components/pickers/Suggestions/Suggestions.test.tsx +src/components/DetailsList/DetailsRow.test.tsx +src/components/Persona/Persona.deprecated.test.tsx +src/utilities/ThemeProvider/ThemeProvider.test.tsx +src/components/Link/Link.test.tsx +src/components/pickers/PeoplePicker/PeoplePicker.test.tsx +src/components/Persona/PersonaPresence/PersonaPresence.test.tsx +src/components/FloatingPicker/BaseFloatingPicker.test.tsx +src/components/Dropdown/utilities/DropdownSizePosCache.test.ts +src/utilities/keytips/KeytipConfig.test.ts +src/components/SelectedItemsList/SelectedPeopleList/SelectedPeopleList.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuButton.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuAnchor.test.tsx +src/utilities/keytips/KeytipUtils.test.ts +src/components/Icon/Icon.test.tsx +src/utilities/ButtonGrid/ButtonGrid.test.tsx +src/components/Coachmark/Coachmark.test.tsx +src/utilities/ThemeProvider/makeStyles.test.tsx +src/components/ActivityItem/ActivityItem.test.tsx +src/components/ColorPicker/ColorPicker.deprecated.test.tsx +src/utilities/contextualMenu/contextualMenuUtility.test.ts +src/components/MarqueeSelection/MarqueeSelection.test.tsx +src/components/Icon/ImageIcon.test.tsx +src/components/SelectedItemsList/BaseSelectedItemsList.test.tsx +src/components/Rating/Rating.test.tsx +src/utilities/keytips/IKeytipTransitionKey.test.ts +src/components/KeytipData/useKeytipData.test.tsx +src/components/Announced/Announced.test.tsx +src/components/Fabric/Fabric.test.tsx +src/components/Tooltip/Tooltip.test.tsx +src/components/Shimmer/Shimmer.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuSplitButton.test.tsx +src/components/FloatingPicker/Suggestions/SuggestionStore.test.tsx +src/components/Persona/PersonaCoin/PersonaCoin.test.tsx +src/components/Icon/FontIcon.test.tsx +src/components/List/utils/scroll.test.ts +src/utilities/hooks/useResponsiveMode.test.tsx +src/components/Dialog/Dialog.deprecated.test.tsx +src/components/ProgressIndicator/ProgressIndicator.test.tsx +src/components/DocumentCard/DocumentCardImage.test.tsx +src/components/ChoiceGroup/ChoiceGroupOption/ChoiceGroupOption.test.tsx +src/components/Stack/StackItem/StackItem.test.tsx +src/components/FocusTrapZone/FocusTrapZone.test.tsx +src/components/ComponentConformance.test.tsx (10.352 s) +src/components/Popup/Popup.test.tsx +src/components/Spinner/Spinner.test.tsx +src/components/Button/Button.deprecated.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuSplitButton.deprecated.test.tsx +src/components/Toggle/Toggle.deprecated.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuButton.deprecated.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuAnchor.deprecated.test.tsx +src/components/WeeklyDayPicker/WeeklyDayPicker.test.tsx +src/utilities/groupedList/GroupedListUtility.test.tsx +src/components/Persona/PersonaCoin/PersonaCoin.deprecated.test.tsx +src/components/FloatingPicker/Suggestions/SuggestionsControl.test.tsx +src/components/ColorPicker/ColorSlider/ColorSlider.deprecated.test.tsx +src/components/CalendarDayGrid/CalendarDayGrid.test.tsx +src/components/pickers/TagPicker/TagItem.test.tsx +src/components/Keytip/KeytipContent.test.tsx +src/components/Text/Text.test.tsx +src/components/Persona/PersonaInitialsColor.test.ts +src/components/TeachingBubble/TeachingBubble.deprecated.test.tsx +src/components/DetailsList/ShimmeredDetailsList.test.tsx +src/components/Label/Label.test.tsx +src/components/Pivot/Pivot.deprecated.test.tsx +src/components/ScrollablePane/ScrollablePane.test.tsx +src/components/DocumentCard/DocumentCard.test.tsx +src/components/Check/Check.test.tsx +src/utilities/decorators/withResponsiveMode.test.tsx +src/components/KeytipData/useKeytipRef.test.ts +src/components/Sticky/Sticky.test.tsx +src/components/Overlay/Overlay.test.tsx +src/components/Divider/VerticalDivider.test.tsx +src/components/Separator/Separator.test.tsx +src/components/Calendar/Calendar.test.tsx +``` + +## test v8 with ts-solution config + +> run 277.18s + +``` +src/components/ComboBox/ComboBox.test.tsx (22.526 s) +src/components/ContextualMenu/ContextualMenu.test.tsx +src/components/DetailsList/DetailsListV2.test.tsx +src/components/SpinButton/SpinButton.test.tsx +src/components/DetailsList/DetailsList.test.tsx +src/components/TextField/TextField.test.tsx +src/components/Button/Button.test.tsx +src/components/Dropdown/Dropdown.test.tsx +src/components/ColorPicker/ColorPicker.test.tsx (6.394 s) +src/components/OverflowSet/OverflowSet.test.tsx +src/utilities/positioning/positioning.test.ts +src/components/DetailsList/DetailsHeader.test.tsx +src/components/ResizeGroup/ResizeGroup.test.tsx +src/components/KeytipLayer/KeytipTree.test.tsx +src/components/DatePicker/DatePicker.test.tsx +src/components/pickers/BasePicker.test.tsx +src/components/Slider/Slider.test.tsx +src/utilities/selection/SelectionZone.test.tsx +src/components/KeytipLayer/KeytipLayer.test.tsx +src/utilities/color/colors.test.ts +src/components/ExtendedPicker/BaseExtendedPicker.test.tsx +src/components/MessageBar/MessageBar.test.tsx +src/components/TextField/MaskedTextField/MaskedTextField.test.tsx +src/utilities/keytips/KeytipManager.test.tsx +src/components/ContextualMenu/ContextualMenu.deprecated.test.tsx +src/components/Autofill/Autofill.test.tsx +src/components/Stack/Stack.test.tsx +src/components/GroupedList/GroupedListV2.test.tsx +src/components/GroupedList/GroupedList.test.tsx +src/components/ChoiceGroup/ChoiceGroup.test.tsx +src/components/Layer/Layer.test.tsx +src/components/ColorPicker/ColorRectangle/ColorRectangle.test.tsx +src/components/DetailsList/DetailsColumn.test.tsx +src/components/Checkbox/Checkbox.test.tsx +src/components/SearchBox/SearchBox.test.tsx +src/components/ColorPicker/ColorSlider/ColorSlider.test.tsx +src/components/Breadcrumb/Breadcrumb.test.tsx +src/components/Facepile/Facepile.test.tsx +src/components/CommandBar/CommandBar.test.tsx +src/components/List/List.test.tsx +src/components/Persona/Persona.test.tsx +src/components/Dialog/Dialog.test.tsx +src/components/SwatchColorPicker/SwatchColorPicker.test.tsx +src/components/Nav/Nav.test.tsx +src/components/TeachingBubble/TeachingBubble.test.tsx +src/components/Callout/Callout.test.tsx +src/components/HoverCard/HoverCard.test.tsx +src/components/Panel/Panel.test.tsx +src/components/ContextualMenu/ContextualMenuItem.test.tsx +src/components/TextField/MaskedTextField/inputMask.test.ts +src/components/Modal/Modal.test.tsx +src/components/Stack/StackUtils.test.ts +src/components/Pivot/Pivot.test.tsx +src/components/pickers/TagPicker/TagPicker.test.tsx +src/components/Toggle/Toggle.test.tsx +src/components/Image/Image.test.tsx +src/components/TimePicker/TimePicker.test.tsx +src/components/Tooltip/TooltipHost.test.tsx +src/components/CommandBar/CommandBar.deprecated.test.tsx +src/components/pickers/Suggestions/Suggestions.test.tsx +src/components/DetailsList/DetailsRow.test.tsx +src/components/Persona/Persona.deprecated.test.tsx +src/utilities/ThemeProvider/ThemeProvider.test.tsx +src/components/Link/Link.test.tsx +src/components/pickers/PeoplePicker/PeoplePicker.test.tsx +src/components/Persona/PersonaPresence/PersonaPresence.test.tsx +src/components/FloatingPicker/BaseFloatingPicker.test.tsx +src/components/Dropdown/utilities/DropdownSizePosCache.test.ts +src/utilities/keytips/KeytipConfig.test.ts +src/components/SelectedItemsList/SelectedPeopleList/SelectedPeopleList.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuButton.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuAnchor.test.tsx +src/utilities/keytips/KeytipUtils.test.ts +src/components/Icon/Icon.test.tsx +src/utilities/ButtonGrid/ButtonGrid.test.tsx +src/components/Coachmark/Coachmark.test.tsx +src/utilities/ThemeProvider/makeStyles.test.tsx +src/components/ActivityItem/ActivityItem.test.tsx +src/components/ColorPicker/ColorPicker.deprecated.test.tsx +src/utilities/contextualMenu/contextualMenuUtility.test.ts +src/components/MarqueeSelection/MarqueeSelection.test.tsx +src/components/Icon/ImageIcon.test.tsx +src/components/SelectedItemsList/BaseSelectedItemsList.test.tsx +src/components/Rating/Rating.test.tsx +src/utilities/keytips/IKeytipTransitionKey.test.ts +src/components/KeytipData/useKeytipData.test.tsx +src/components/Announced/Announced.test.tsx +src/components/Fabric/Fabric.test.tsx +src/components/Tooltip/Tooltip.test.tsx +src/components/Shimmer/Shimmer.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuSplitButton.test.tsx +src/components/FloatingPicker/Suggestions/SuggestionStore.test.tsx +src/components/Persona/PersonaCoin/PersonaCoin.test.tsx +src/components/Icon/FontIcon.test.tsx +src/components/List/utils/scroll.test.ts +src/utilities/hooks/useResponsiveMode.test.tsx +src/components/Dialog/Dialog.deprecated.test.tsx +src/components/ProgressIndicator/ProgressIndicator.test.tsx +src/components/DocumentCard/DocumentCardImage.test.tsx +src/components/ChoiceGroup/ChoiceGroupOption/ChoiceGroupOption.test.tsx +src/components/Stack/StackItem/StackItem.test.tsx +src/components/FocusTrapZone/FocusTrapZone.test.tsx +src/components/ComponentConformance.test.tsx (12.284 s) +src/components/Popup/Popup.test.tsx +src/components/Spinner/Spinner.test.tsx +src/components/Button/Button.deprecated.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuSplitButton.deprecated.test.tsx +src/components/Toggle/Toggle.deprecated.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuButton.deprecated.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuAnchor.deprecated.test.tsx +src/components/WeeklyDayPicker/WeeklyDayPicker.test.tsx +src/utilities/groupedList/GroupedListUtility.test.tsx +src/components/Persona/PersonaCoin/PersonaCoin.deprecated.test.tsx +src/components/FloatingPicker/Suggestions/SuggestionsControl.test.tsx +src/components/ColorPicker/ColorSlider/ColorSlider.deprecated.test.tsx +src/components/CalendarDayGrid/CalendarDayGrid.test.tsx +src/components/pickers/TagPicker/TagItem.test.tsx +src/components/Keytip/KeytipContent.test.tsx +src/components/Text/Text.test.tsx +src/components/Persona/PersonaInitialsColor.test.ts +src/components/TeachingBubble/TeachingBubble.deprecated.test.tsx +src/components/DetailsList/ShimmeredDetailsList.test.tsx +src/components/Label/Label.test.tsx +src/components/Pivot/Pivot.deprecated.test.tsx +src/components/ScrollablePane/ScrollablePane.test.tsx +src/components/DocumentCard/DocumentCard.test.tsx +src/components/Check/Check.test.tsx +src/utilities/decorators/withResponsiveMode.test.tsx +src/components/KeytipData/useKeytipRef.test.ts +src/components/Sticky/Sticky.test.tsx +src/components/Overlay/Overlay.test.tsx +src/components/Divider/VerticalDivider.test.tsx +src/components/Separator/Separator.test.tsx +src/components/Calendar/Calendar.test.tsx +``` + +## test v8 with tsconfig:false (disabled ts config lookup) + +> - @see https://kulshekhar.github.io/ts-jest/docs/28.0/getting-started/options/tsconfig#disable-auto-lookup +> - uses target: ES2015 instead ES5 + +> run 283s + +``` + +``` + +## OOM troubleshooting + +leaks fixed + no conformance (1618 MB heap size) +leaks fixed + conformance (1618 MB heap size) + +| Run type | max heap size (MB) | delta | +| -------------------------------------- | ------------------ | ----- | +| conformance | 2029 MB | | +| no conformance | 1819 MB | | +| fixed leaks attempt 1 + conformance | 1954 MB | | +| fixed leaks attempt 1 + no conformance | 1618 MB | | + +### current + +``` +src/components/ComponentConformance.test.tsx (11.427 s, 339 MB heap size) +src/components/ColorPicker/ColorPicker.test.tsx (6.235 s, 540 MB heap size) +src/components/ComboBox/ComboBox.test.tsx (5.275 s, 573 MB heap size) +src/components/Dropdown/Dropdown.test.tsx (467 MB heap size) +src/components/TextField/TextField.test.tsx (395 MB heap size) +src/components/Button/Button.test.tsx (261 MB heap size) +src/components/DetailsList/DetailsList.test.tsx (232 MB heap size) +src/components/ContextualMenu/ContextualMenu.test.tsx (418 MB heap size) +src/components/Breadcrumb/Breadcrumb.test.tsx (427 MB heap size) +src/components/DetailsList/DetailsListV2.test.tsx (297 MB heap size) +src/components/DatePicker/DatePicker.test.tsx (470 MB heap size) +src/components/CommandBar/CommandBar.test.tsx (497 MB heap size) +src/components/Facepile/Facepile.test.tsx (503 MB heap size) +src/components/SpinButton/SpinButton.test.tsx (682 MB heap size) +src/components/ChoiceGroup/ChoiceGroup.test.tsx (487 MB heap size) +src/components/Dialog/Dialog.test.tsx (441 MB heap size) +src/components/Callout/Callout.test.tsx (616 MB heap size) +src/components/Panel/Panel.test.tsx (532 MB heap size) +src/components/Modal/Modal.test.tsx (578 MB heap size) +src/components/DetailsList/DetailsHeader.test.tsx (576 MB heap size) +src/components/Pivot/Pivot.test.tsx (780 MB heap size) +src/components/OverflowSet/OverflowSet.test.tsx (959 MB heap size) +src/components/ExtendedPicker/BaseExtendedPicker.test.tsx (954 MB heap size) +src/utilities/selection/SelectionZone.test.tsx (753 MB heap size) +src/components/DetailsList/DetailsColumn.test.tsx (612 MB heap size) +src/components/Slider/Slider.test.tsx (815 MB heap size) +src/components/KeytipLayer/KeytipLayer.test.tsx (665 MB heap size) +src/components/Coachmark/Coachmark.test.tsx (863 MB heap size) +src/components/FloatingPicker/BaseFloatingPicker.test.tsx (726 MB heap size) +src/components/pickers/BasePicker.test.tsx (931 MB heap size) +src/components/SelectedItemsList/SelectedPeopleList/SelectedPeopleList.test.tsx (971 MB heap size) +src/components/pickers/TagPicker/TagPicker.test.tsx (1150 MB heap size) +src/components/Stack/Stack.test.tsx (1086 MB heap size) +src/components/Nav/Nav.test.tsx (1113 MB heap size) +src/components/FocusTrapZone/FocusTrapZone.test.tsx (1286 MB heap size) +src/components/MessageBar/MessageBar.test.tsx (1208 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuSplitButton.test.tsx (1064 MB heap size) +src/components/Layer/Layer.test.tsx (1080 MB heap size) +src/components/List/List.test.tsx (1287 MB heap size) +src/components/Toggle/Toggle.test.tsx (1325 MB heap size) +src/components/TimePicker/TimePicker.test.tsx (1317 MB heap size) +src/components/WeeklyDayPicker/WeeklyDayPicker.test.tsx (1384 MB heap size) +src/components/GroupedList/GroupedListV2.test.tsx (1428 MB heap size) +src/components/TeachingBubble/TeachingBubble.test.tsx (1476 MB heap size) +src/components/Rating/Rating.test.tsx (1656 MB heap size) +src/components/CommandBar/CommandBar.deprecated.test.tsx (1650 MB heap size) +src/components/Button/Button.deprecated.test.tsx (1396 MB heap size) +src/components/Checkbox/Checkbox.test.tsx (1597 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuButton.test.tsx (1453 MB heap size) +src/components/Popup/Popup.test.tsx (1653 MB heap size) +src/components/DetailsList/DetailsRow.test.tsx (1513 MB heap size) +src/components/SearchBox/SearchBox.test.tsx (1711 MB heap size) +src/components/Calendar/Calendar.test.tsx (1887 MB heap size) +src/components/Persona/Persona.test.tsx (1805 MB heap size) +src/components/Link/Link.test.tsx (1850 MB heap size) +src/components/ColorPicker/ColorSlider/ColorSlider.deprecated.test.tsx (1707 MB heap size) +src/components/Announced/Announced.test.tsx (1907 MB heap size) +src/components/TeachingBubble/TeachingBubble.deprecated.test.tsx (1766 MB heap size) +src/components/Persona/Persona.deprecated.test.tsx (1779 MB heap size) +src/components/pickers/TagPicker/TagItem.test.tsx (1791 MB heap size) +src/components/Label/Label.test.tsx (1851 MB heap size) +src/components/ColorPicker/ColorRectangle/ColorRectangle.test.tsx (1712 MB heap size) +src/components/ResizeGroup/ResizeGroup.test.tsx (1911 MB heap size) +src/utilities/ButtonGrid/ButtonGrid.test.tsx (2087 MB heap size) +src/components/GroupedList/GroupedList.test.tsx (462 MB heap size) +src/components/MarqueeSelection/MarqueeSelection.test.tsx (519 MB heap size) +src/components/Dialog/Dialog.deprecated.test.tsx (512 MB heap size) +src/components/ContextualMenu/ContextualMenu.deprecated.test.tsx (530 MB heap size) +src/components/HoverCard/HoverCard.test.tsx (428 MB heap size) +src/utilities/keytips/KeytipUtils.test.ts (282 MB heap size) +src/utilities/color/colors.test.ts (293 MB heap size) +src/components/SwatchColorPicker/SwatchColorPicker.test.tsx (455 MB heap size) +src/components/TextField/MaskedTextField/MaskedTextField.test.tsx (500 MB heap size) +src/utilities/positioning/positioning.test.ts (352 MB heap size) +src/components/Toggle/Toggle.deprecated.test.tsx (362 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuAnchor.deprecated.test.tsx (375 MB heap size) +src/components/FloatingPicker/Suggestions/SuggestionsControl.test.tsx (388 MB heap size) +src/components/Stack/StackItem/StackItem.test.tsx (396 MB heap size) +src/components/SelectedItemsList/BaseSelectedItemsList.test.tsx (523 MB heap size) +src/components/Sticky/Sticky.test.tsx (566 MB heap size) +src/components/ColorPicker/ColorPicker.deprecated.test.tsx (427 MB heap size) +src/components/ActivityItem/ActivityItem.test.tsx (558 MB heap size) +src/components/DetailsList/ShimmeredDetailsList.test.tsx (420 MB heap size) +src/components/KeytipData/useKeytipData.test.tsx (426 MB heap size) +src/components/Shimmer/Shimmer.test.tsx (484 MB heap size) +src/components/Image/Image.test.tsx (427 MB heap size) +src/components/Icon/Icon.test.tsx (473 MB heap size) +src/components/Divider/VerticalDivider.test.tsx (516 MB heap size) +src/components/pickers/PeoplePicker/PeoplePicker.test.tsx (569 MB heap size) +src/components/Persona/PersonaPresence/PersonaPresence.test.tsx (728 MB heap size) +src/utilities/decorators/withResponsiveMode.test.tsx (456 MB heap size) +src/components/Tooltip/Tooltip.test.tsx (471 MB heap size) +src/components/pickers/Suggestions/Suggestions.test.tsx (598 MB heap size) +src/components/Spinner/Spinner.test.tsx (642 MB heap size) +src/components/Icon/FontIcon.test.tsx (499 MB heap size) +src/utilities/keytips/KeytipManager.test.tsx (511 MB heap size) +src/components/Autofill/Autofill.test.tsx (518 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuSplitButton.deprecated.test.tsx (531 MB heap size) +src/components/Icon/ImageIcon.test.tsx (543 MB heap size) +src/components/ProgressIndicator/ProgressIndicator.test.tsx (741 MB heap size) +src/utilities/ThemeProvider/ThemeProvider.test.tsx (600 MB heap size) +src/components/Overlay/Overlay.test.tsx (796 MB heap size) +src/components/Check/Check.test.tsx (843 MB heap size) +src/components/ColorPicker/ColorSlider/ColorSlider.test.tsx (832 MB heap size) +src/utilities/contextualMenu/contextualMenuUtility.test.ts (710 MB heap size) +src/utilities/ThemeProvider/makeStyles.test.tsx (726 MB heap size) +src/components/Persona/PersonaCoin/PersonaCoin.test.tsx (741 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuButton.deprecated.test.tsx (746 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuAnchor.test.tsx (758 MB heap size) +src/components/Tooltip/TooltipHost.test.tsx (775 MB heap size) +src/components/Fabric/Fabric.test.tsx (781 MB heap size) +src/components/DocumentCard/DocumentCardImage.test.tsx (792 MB heap size) +src/components/Persona/PersonaInitialsColor.test.ts (800 MB heap size) +src/components/KeytipData/useKeytipRef.test.ts (810 MB heap size) +src/components/Persona/PersonaCoin/PersonaCoin.deprecated.test.tsx (823 MB heap size) +src/components/TextField/MaskedTextField/inputMask.test.ts (836 MB heap size) +src/components/CalendarDayGrid/CalendarDayGrid.test.tsx (1016 MB heap size) +src/components/KeytipLayer/KeytipTree.test.tsx (877 MB heap size) +src/utilities/hooks/useResponsiveMode.test.tsx (888 MB heap size) +src/utilities/keytips/KeytipConfig.test.ts (897 MB heap size) +src/components/ChoiceGroup/ChoiceGroupOption/ChoiceGroupOption.test.tsx (910 MB heap size) +src/components/Text/Text.test.tsx (1129 MB heap size) +src/components/Separator/Separator.test.tsx (1152 MB heap size) +src/components/Pivot/Pivot.deprecated.test.tsx (1014 MB heap size) +src/components/ContextualMenu/ContextualMenuItem.test.tsx (1022 MB heap size) +src/components/DocumentCard/DocumentCard.test.tsx (1040 MB heap size) +src/components/Keytip/KeytipContent.test.tsx (1045 MB heap size) +src/components/ScrollablePane/ScrollablePane.test.tsx (1056 MB heap size) +src/utilities/keytips/IKeytipTransitionKey.test.ts (1065 MB heap size) +src/components/List/utils/scroll.test.ts (1074 MB heap size) +src/components/FloatingPicker/Suggestions/SuggestionStore.test.tsx (1083 MB heap size) +src/components/Stack/StackUtils.test.ts (1096 MB heap size) +src/components/Dropdown/utilities/DropdownSizePosCache.test.ts (1103 MB heap size) +src/utilities/groupedList/GroupedListUtility.test.tsx (1112 MB heap size) +``` + +### without conformance + +``` +src/components/ComponentConformance.test.tsx (10.724 s, 339 MB heap size) +src/components/ColorPicker/ColorPicker.test.tsx (358 MB heap size) +src/components/ComboBox/ComboBox.test.tsx (354 MB heap size) +src/components/SearchBox/SearchBox.test.tsx (343 MB heap size) +src/components/Dropdown/Dropdown.test.tsx (367 MB heap size) +src/components/List/List.test.tsx (388 MB heap size) +src/utilities/ButtonGrid/ButtonGrid.test.tsx (400 MB heap size) +src/components/Modal/Modal.test.tsx (423 MB heap size) +src/components/Coachmark/Coachmark.test.tsx (440 MB heap size) +src/components/MessageBar/MessageBar.test.tsx (432 MB heap size) +src/components/TextField/TextField.test.tsx (445 MB heap size) +src/components/ActivityItem/ActivityItem.test.tsx (456 MB heap size) +src/components/CommandBar/CommandBar.test.tsx (475 MB heap size) +src/components/Pivot/Pivot.test.tsx (486 MB heap size) +src/components/pickers/BasePicker.test.tsx (509 MB heap size) +src/components/Button/Button.test.tsx (520 MB heap size) +src/components/Dialog/Dialog.test.tsx (542 MB heap size) +src/components/Separator/Separator.test.tsx (537 MB heap size) +src/components/Breadcrumb/Breadcrumb.test.tsx (563 MB heap size) +src/components/Facepile/Facepile.test.tsx (584 MB heap size) +src/utilities/selection/SelectionZone.test.tsx (587 MB heap size) +src/components/DetailsList/DetailsList.test.tsx (607 MB heap size) +src/components/ContextualMenu/ContextualMenu.test.tsx (639 MB heap size) +src/components/SpinButton/SpinButton.test.tsx (631 MB heap size) +src/components/Checkbox/Checkbox.test.tsx (643 MB heap size) +src/components/DatePicker/DatePicker.test.tsx (666 MB heap size) +src/components/HoverCard/HoverCard.test.tsx (671 MB heap size) +src/components/DetailsList/DetailsListV2.test.tsx (699 MB heap size) +src/components/SwatchColorPicker/SwatchColorPicker.test.tsx (707 MB heap size) +src/components/Slider/Slider.test.tsx (716 MB heap size) +src/components/ChoiceGroup/ChoiceGroup.test.tsx (730 MB heap size) +src/components/Divider/VerticalDivider.test.tsx (735 MB heap size) +src/components/TextField/MaskedTextField/MaskedTextField.test.tsx (752 MB heap size) +src/components/Popup/Popup.test.tsx (769 MB heap size) +src/components/pickers/Suggestions/Suggestions.test.tsx (778 MB heap size) +src/components/OverflowSet/OverflowSet.test.tsx (795 MB heap size) +src/components/GroupedList/GroupedList.test.tsx (804 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuSplitButton.deprecated.test.tsx (814 MB heap size) +src/components/Shimmer/Shimmer.test.tsx (830 MB heap size) +src/components/Panel/Panel.test.tsx (853 MB heap size) +src/components/Nav/Nav.test.tsx (859 MB heap size) +src/components/Callout/Callout.test.tsx (871 MB heap size) +src/components/Rating/Rating.test.tsx (890 MB heap size) +src/components/Tooltip/TooltipHost.test.tsx (894 MB heap size) +src/components/Announced/Announced.test.tsx (907 MB heap size) +src/components/Icon/Icon.test.tsx (918 MB heap size) +src/components/GroupedList/GroupedListV2.test.tsx (934 MB heap size) +src/components/Dialog/Dialog.deprecated.test.tsx (954 MB heap size) +src/components/Persona/Persona.test.tsx (960 MB heap size) +src/components/MarqueeSelection/MarqueeSelection.test.tsx (967 MB heap size) +src/components/Overlay/Overlay.test.tsx (977 MB heap size) +src/components/Stack/Stack.test.tsx (998 MB heap size) +src/components/pickers/PeoplePicker/PeoplePicker.test.tsx (1011 MB heap size) +src/components/ResizeGroup/ResizeGroup.test.tsx (1020 MB heap size) +src/components/WeeklyDayPicker/WeeklyDayPicker.test.tsx (1038 MB heap size) +src/components/Persona/PersonaPresence/PersonaPresence.test.tsx (1045 MB heap size) +src/components/Toggle/Toggle.test.tsx (1059 MB heap size) +src/components/SelectedItemsList/SelectedPeopleList/SelectedPeopleList.test.tsx (1077 MB heap size) +src/components/Link/Link.test.tsx (1087 MB heap size) +src/components/Calendar/Calendar.test.tsx (1097 MB heap size) +src/components/Text/Text.test.tsx (1109 MB heap size) +src/components/Check/Check.test.tsx (1121 MB heap size) +src/components/Spinner/Spinner.test.tsx (1133 MB heap size) +src/components/DetailsList/DetailsHeader.test.tsx (1159 MB heap size) +src/components/ExtendedPicker/BaseExtendedPicker.test.tsx (1180 MB heap size) +src/components/FocusTrapZone/FocusTrapZone.test.tsx (1175 MB heap size) +src/components/TeachingBubble/TeachingBubble.test.tsx (1191 MB heap size) +src/components/Label/Label.test.tsx (1201 MB heap size) +src/components/Sticky/Sticky.test.tsx (1208 MB heap size) +src/components/DetailsList/DetailsColumn.test.tsx (1229 MB heap size) +src/components/pickers/TagPicker/TagPicker.test.tsx (1242 MB heap size) +src/components/FloatingPicker/BaseFloatingPicker.test.tsx (1255 MB heap size) +src/components/CalendarDayGrid/CalendarDayGrid.test.tsx (1263 MB heap size) +src/components/FloatingPicker/Suggestions/SuggestionsControl.test.tsx (1277 MB heap size) +src/components/ProgressIndicator/ProgressIndicator.test.tsx (1289 MB heap size) +src/components/ColorPicker/ColorRectangle/ColorRectangle.test.tsx (1304 MB heap size) +src/components/CommandBar/CommandBar.deprecated.test.tsx (1326 MB heap size) +src/components/Tooltip/Tooltip.test.tsx (1327 MB heap size) +src/components/Image/Image.test.tsx (1340 MB heap size) +src/components/Persona/Persona.deprecated.test.tsx (1353 MB heap size) +src/components/TimePicker/TimePicker.test.tsx (1372 MB heap size) +src/components/ColorPicker/ColorSlider/ColorSlider.deprecated.test.tsx (1376 MB heap size) +src/components/Autofill/Autofill.test.tsx (1385 MB heap size) +src/components/SelectedItemsList/BaseSelectedItemsList.test.tsx (1398 MB heap size) +src/components/Persona/PersonaCoin/PersonaCoin.deprecated.test.tsx (1410 MB heap size) +src/utilities/color/colors.test.ts (1418 MB heap size) +src/components/Toggle/Toggle.deprecated.test.tsx (1428 MB heap size) +src/components/Button/Button.deprecated.test.tsx (1443 MB heap size) +src/utilities/ThemeProvider/makeStyles.test.tsx (1453 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuButton.test.tsx (1466 MB heap size) +src/components/FloatingPicker/Suggestions/SuggestionStore.test.tsx (1473 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuAnchor.deprecated.test.tsx (1486 MB heap size) +src/components/Layer/Layer.test.tsx (1503 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuButton.deprecated.test.tsx (1510 MB heap size) +src/components/KeytipLayer/KeytipTree.test.tsx (1519 MB heap size) +src/components/ContextualMenu/ContextualMenu.deprecated.test.tsx (1539 MB heap size) +src/components/Icon/ImageIcon.test.tsx (1555 MB heap size) +src/components/DetailsList/ShimmeredDetailsList.test.tsx (1559 MB heap size) +src/components/Fabric/Fabric.test.tsx (1568 MB heap size) +src/components/KeytipLayer/KeytipLayer.test.tsx (1581 MB heap size) +src/components/ColorPicker/ColorSlider/ColorSlider.test.tsx (1598 MB heap size) +src/components/ChoiceGroup/ChoiceGroupOption/ChoiceGroupOption.test.tsx (1604 MB heap size) +src/components/DocumentCard/DocumentCardImage.test.tsx (1615 MB heap size) +src/components/TextField/MaskedTextField/inputMask.test.ts (1626 MB heap size) +src/utilities/hooks/useResponsiveMode.test.tsx (1633 MB heap size) +src/components/Dropdown/utilities/DropdownSizePosCache.test.ts (1642 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuAnchor.test.tsx (1656 MB heap size) +src/components/DocumentCard/DocumentCard.test.tsx (1673 MB heap size) +src/components/Pivot/Pivot.deprecated.test.tsx (1682 MB heap size) +src/components/Keytip/KeytipContent.test.tsx (1691 MB heap size) +src/components/ContextualMenu/ContextualMenuItem.test.tsx (1700 MB heap size) +src/components/ScrollablePane/ScrollablePane.test.tsx (1712 MB heap size) +src/utilities/ThemeProvider/ThemeProvider.test.tsx (1724 MB heap size) +src/components/DetailsList/DetailsRow.test.tsx (1740 MB heap size) +src/components/KeytipData/useKeytipRef.test.ts (1745 MB heap size) +src/components/Stack/StackItem/StackItem.test.tsx (1755 MB heap size) +src/components/ColorPicker/ColorPicker.deprecated.test.tsx (1769 MB heap size) +src/components/List/utils/scroll.test.ts (1776 MB heap size) +src/utilities/groupedList/GroupedListUtility.test.tsx (1785 MB heap size) +src/utilities/keytips/KeytipManager.test.tsx (1798 MB heap size) +src/utilities/keytips/KeytipConfig.test.ts (1804 MB heap size) +src/utilities/contextualMenu/contextualMenuUtility.test.ts (1814 MB heap size) +src/utilities/keytips/IKeytipTransitionKey.test.ts (1824 MB heap size) +src/utilities/positioning/positioning.test.ts (1834 MB heap size) +src/components/Stack/StackUtils.test.ts (1846 MB heap size) +src/components/Persona/PersonaInitialsColor.test.ts (1853 MB heap size) +src/components/TeachingBubble/TeachingBubble.deprecated.test.tsx (1872 MB heap size) +src/components/Icon/FontIcon.test.tsx (1878 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuSplitButton.test.tsx (1890 MB heap size) +src/components/KeytipData/useKeytipData.test.tsx (1899 MB heap size) +src/utilities/decorators/withResponsiveMode.test.tsx (1908 MB heap size) +src/components/pickers/TagPicker/TagItem.test.tsx (1926 MB heap size) +src/components/Persona/PersonaCoin/PersonaCoin.test.tsx (1941 MB heap size) +src/utilities/keytips/KeytipUtils.test.ts (1947 MB heap size) +``` + +### with conformance except TS Program diff --git a/docs/ci-test-pipeline-data.md b/docs/ci-test-pipeline-data.md new file mode 100644 index 0000000000000..3a301c37a350a --- /dev/null +++ b/docs/ci-test-pipeline-data.md @@ -0,0 +1,86 @@ +**Test:** + +- nx run-many --target=test --parallel=4 / 26m 9s +- 🚅 nx run-many --target=test --parallel=8 --maxWorkers=4 / 23m 34s +- nx run-many --target=test --parallel=8 --maxWorkers=2 / 25m 34s +- nx run-many --target=test --parallel=8 --maxWorkers=4 && v9 jest has maxWorkers=4 / 29m 11s +- nx run-many --target=test --parallel=8 --maxWorkers=4 && v9 jest has maxWorkers=4 && ts-jest isolatedModules / 31m 56s + + - this doesn't make any sense, the test time should have been the same as the fastest or even faster (23m) + +- lage test / (constantly fails on ssr-test (TimeoutError: Navigation timeout of 10000 ms exceeded) + ) + - 27m 5s + - 33m 50s + +### react-components + +~~All packages use native jest so no perf bottlenecks caused by test execution. ✅~~ + +🔥 v9 packages are not using maxWorkers which might cause OOM and other issues on CI !!!! + +- fixed by setting maxWorkers on CI + +### react + +- used `runInBand` on CI !!!!! (update: without that it will never finish because memory leaks, we will use maxThreadWorkers=4) + +| Run type | time | command | +| ------------------------------ | ---------- | ----------------------------------------------------------------------- | +| current | 263 s | `just test --runInBand --no-cache` | +| current (CI) | 15m 10.01s | part of `lage build test lint type-check` | +| without runInBand | 85 s | `just test --no-cache` | +| without runInBand (+ raw jest) | 82 s | `jest --no-cache` | +| without runInBand (CI) | ? | part of `lage build test lint type-check`. This will never finish on CI | + +**Tests contain memory leaks** + +> discovered on CI when pipeline was executed via nx: + +``` +worker process has failed to exit gracefully and has been force exited. This is likely caused by tests leaking due to improper teardown. Try running with --detectOpenHandles to find leaks. Active timers can also cause this, ensure that .unref() was called on them. +``` + +### react-northstar + +| Run type | time | command | +| --------------------------------------- | ----- | -------------------------------------------------------------------------- | +| current | 382 s | `gulp test --config ./jest.config.js --coverage --maxWorkers=2 --no-cache` | +| without codecov | 348 s | `gulp test --config ./jest.config.js --maxWorkers=2 --no-cache` | +| without codecov,maxWorkers | 232 s | `gulp test --config ./jest.config.js --no-cache` | +| without codecov,maxWorkers (+ raw jest) | 196 s | `jest --config ./jest.config.js --no-cache` | + +#### More data: + +**70% of the test scenarios are very slow** - triggering jest warnings: + +``` + PASS test/specs/components/Skeleton/SkeletonButton-test.tsx (10.063 s) + PASS test/specs/components/Skeleton/SkeletonAvatar-test.tsx (10.126 s) + PASS test/specs/components/Chat/ChatMessageReadStatus-test.tsx (9.917 s) + PASS test/specs/components/Carousel/CarouselNavigationItem-test.tsx (10.338 s) + PASS test/specs/components/Button/ButtonContent-test.tsx (9.267 s) + PASS test/specs/components/Attachment/AttachmentDescription-test.tsx (9.598 s) + PASS test/specs/components/Toolbar/ToolbarMenuItemIcon-test.ts (9.674 s) + PASS test/specs/components/Dropdown/DropdownItem-test.tsx (9.877 s) + PASS test/specs/components/Toolbar/ToolbarMenu-test.tsx (10.047 s) + PASS test/specs/components/Toolbar/ToolbarMenuDivider-test.ts (9.796 s) + PASS test/specs/components/Toolbar/ToolbarItemWrapper-test.tsx (9.426 s) + PASS test/specs/components/Breadcrumb/Breadcrumb-test.ts (11.22 s) + PASS test/specs/components/Breadcrumb/BreadcrumbDivider-test.ts (9.089 s) + PASS test/specs/components/SplitButton/SplitButtonToggle-test.tsx (9.46 s) + PASS test/specs/components/Alert/AlertDismissAction-test.tsx (10.006 s) + PASS test/specs/components/List/ListItemContentMedia-test.tsx (9.923 s) + PASS test/specs/components/Skeleton/SkeletonInput-test.tsx (9.283 s) + PASS test/specs/components/Skeleton/SkeletonShape-test.tsx (9.819 s) + PASS test/specs/components/Chat/ChatMessageContent-test.tsx (11.646 s) + PASS test/specs/components/Menu/MenuItemIndicator-test.tsx (11.176 s) +``` + +**Tests contain memory leaks** + +> discovered while executing via raw `jest` instead `gulp` + +``` +A worker process has failed to exit gracefully and has been force exited. This is likely caused by tests leaking due to improper teardown. Try running with --detectOpenHandles to find leaks. Active timers can also cause this, ensure that .unref() was called on them. +``` diff --git a/jest.preset.js b/jest.preset.js index acdbe4fd5e5a9..9bf5c0858fd5c 100644 --- a/jest.preset.js +++ b/jest.preset.js @@ -5,6 +5,8 @@ const { pathsToModuleNameMapper } = require('ts-jest'); const tsConfig = require('./tsconfig.base.json'); +const isCI = Boolean(process.env.TF_BUILD); + const tsPathAliases = pathsToModuleNameMapper(tsConfig.compilerOptions.paths, { prefix: `/${path.relative(process.cwd(), __dirname)}/`, }); @@ -24,6 +26,19 @@ const baseConfig = { cacheDirectory: '/node_modules/.cache/jest', clearMocks: true, watchPlugins: ['jest-watch-typeahead/filename', 'jest-watch-typeahead/testname'], + ...(isCI ? { maxWorkers: 4 } : null), }; -module.exports = { ...baseConfig }; +module.exports = { + ...baseConfig, + /* TODO: Update to latest Jest snapshotFormat + * By default Nx has kept the older style of Jest Snapshot formats + * to prevent breaking of any existing tests with snapshots. + * It's recommend you update to the latest format. + * You can do this by removing snapshotFormat property + * and running tests with --update-snapshot flag. + * Example: "nx affected --targets=test --update-snapshot" + * More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format + */ + // snapshotFormat: { escapeString: true, printBasicPrototype: true }, +}; diff --git a/lage.config.js b/lage.config.js index a2474bb61c3cf..1a4efa6fa01c4 100644 --- a/lage.config.js +++ b/lage.config.js @@ -2,6 +2,11 @@ module.exports = { pipeline: { build: ['^build'], + /** + * This task definition exist only in v0 projects - dependent build:info are executed by lerna + * It's purpose is to not run build:info on all dependent packages from lage as it is invoked under the hood via gulp (triggers lerna) + * TODO: this won't be needed when we switch to NX + */ 'build:info': [], bundle: ['build'], 'bundle-size': ['build'], @@ -11,7 +16,6 @@ module.exports = { 'type-check': ['build'], 'code-style': [], 'update-snapshots': ['^update-snapshots'], - '@fluentui/docs#build': ['@fluentui/react-northstar#build:info'], }, // Adds some ADO-specific logging commands for reporting failures diff --git a/lerna.json b/lerna.json index 6ffde71379156..6ab55e42c544b 100644 --- a/lerna.json +++ b/lerna.json @@ -9,6 +9,7 @@ "typings" ], "npmClient": "yarn", + "useNx": true, "useWorkspaces": true, "version": "0.0.0" } diff --git a/migrations.json b/migrations.json index 0c6b7a4a65a76..30831b3404a80 100644 --- a/migrations.json +++ b/migrations.json @@ -1,76 +1,52 @@ { "migrations": [ { - "version": "13.9.0-beta.0", - "description": "Replace @nrwl/tao with nx", + "version": "15.7.0-beta.0", + "description": "Split global configuration files into individual project.json files. This migration has been added automatically to the beginning of your migration set to retroactively make them work with the new version of Nx.", "cli": "nx", - "implementation": "./src/migrations/update-13-9-0/replace-tao-with-nx", + "implementation": "./src/migrations/update-15-7-0/split-configuration-into-project-json-files", "package": "@nrwl/workspace", - "name": "13-9-0-replace-tao-with-nx" + "name": "15-7-0-split-configuration-into-project-json-files" }, { - "version": "13.10.0-beta.0", - "description": "Update the decorate-angular-cli script to require nx instead of @nrwl/cli", + "version": "15.7.0-beta.0", + "description": "Split global configuration files (e.g., workspace.json) into individual project.json files.", "cli": "nx", - "implementation": "./src/migrations/update-13-10-0/update-decorate-cli", + "implementation": "./src/migrations/update-15-7-0/split-configuration-into-project-json-files", "package": "@nrwl/workspace", - "name": "13-10-0-update-decorate-cli" + "name": "15-7-0-split-configuration-into-project-json-files" }, { - "version": "13.10.0-beta.0", - "description": "Update the tasks runner property to import it from the nx package instead of @nrwl/worksapce", + "version": "15.8.0-beta.0", "cli": "nx", - "implementation": "./src/migrations/update-13-10-0/update-tasks-runner", - "package": "@nrwl/workspace", - "name": "13-10-0-update-tasks-runner" - }, - { - "cli": "nx", - "version": "13.8.5-beta.1", - "description": "Renames @nrwl/node:build to @nrwl/node:webpack", - "factory": "./src/migrations/update-13-8-5/rename-build-to-webpack", - "package": "@nrwl/node", - "name": "rename-build-to-webpack" - }, - { - "cli": "nx", - "version": "13.8.5-beta.1", - "description": "Renames @nrwl/node:execute to @nrwl/node:node", - "factory": "./src/migrations/update-13-8-5/rename-execute-to-node", - "package": "@nrwl/node", - "name": "rename-execute-to-node" - }, - { - "cli": "nx", - "version": "13.8.5-beta.1", - "description": "Renames @nrwl/node:package to @nrwl/js:tsc", - "factory": "./src/migrations/update-13-8-5/update-package-to-tsc", - "package": "@nrwl/node", - "name": "update-package-to-tsc" + "description": "Update jest configs to support jest 29 changes (https://jestjs.io/docs/upgrading-to-jest29)", + "factory": "./src/migrations/update-15-8-0/update-configs-jest-29", + "package": "@nrwl/jest", + "name": "update-configs-jest-29" }, { + "version": "15.8.0-beta.0", "cli": "nx", - "version": "13.8.5-beta.1", - "description": "Renames @nrwl/js:node to @nrwl/node:node", - "factory": "./src/migrations/update-13-8-5/update-node-executor", - "package": "@nrwl/js", - "name": "update-node-executor" + "description": "Update jest test files to support jest 29 changes (https://jestjs.io/docs/upgrading-to-jest29)", + "factory": "./src/migrations/update-15-8-0/update-tests-jest-29", + "package": "@nrwl/jest", + "name": "update-tests-jest-29" }, { "cli": "nx", - "version": "13.8.5-beta.1", - "description": "Adjust .swcrc to .lib.swcrc", - "factory": "./src/migrations/update-13-8-5/update-swcrc", + "version": "15.8.0-beta.0", + "description": "Rename .lib.swcrc to .swcrc for better SWC support throughout the workspace", + "factory": "./src/migrations/update-15-8-0/rename-swcrc-config", "package": "@nrwl/js", - "name": "update-swcrc" + "name": "rename-swcrc-config" }, { "cli": "nx", - "version": "13.10.1-beta.1", - "description": "Update .lib.swcrc to exclude missing test files", - "factory": "./src/migrations/update-13-10-1/update-lib-swcrc-exclude", - "package": "@nrwl/js", - "name": "update-swcrc-exclude" + "version": "15.8.2-beta.0", + "description": "Updates the nx wrapper in encapsulated repos.", + "implementation": "./src/migrations/update-15-8-2/update-nxw", + "package": "nx", + "name": "15.8.2-update-nx-wrapper" } ] } diff --git a/nx.json b/nx.json index 8b548f2b86471..357f5e9a7aeb9 100644 --- a/nx.json +++ b/nx.json @@ -1,11 +1,6 @@ { + "$schema": "./node_modules/nx/schemas/nx-schema.json", "npmScope": "fluentui", - "implicitDependencies": { - "package.json": { - "dependencies": "*", - "devDependencies": "*" - } - }, "tasksRunnerOptions": { "default": { "runner": "nx/tasks-runners/default", @@ -25,27 +20,50 @@ }, "pluginsConfig": { "@nrwl/js": { - "analyzeSourceFiles": true + "analyzeSourceFiles": false } }, - "targetDependencies": { - "build": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "package": [ - { - "target": "package", - "projects": "dependencies" - } - ], - "prepare": [ - { - "target": "prepare", - "projects": "dependencies" - } + "targetDefaults": { + "lint": { + "dependsOn": [] + }, + "build": { + "dependsOn": ["^build"], + "inputs": ["production", "^production"] + }, + "bundle-size": { + "dependsOn": ["build"] + }, + "test": { + "dependsOn": ["build"], + "inputs": ["default", "^production", "{workspaceRoot}/jest.preset.js"] + }, + "type-check": { + "dependsOn": ["build"] + }, + "package": { + "dependsOn": ["^package"] + }, + "prepare": { + "dependsOn": ["^prepare"] + } + }, + "namedInputs": { + "default": ["{projectRoot}/**/*", "sharedGlobals"], + "sharedGlobals": [], + "production": [ + "default", + "!{projectRoot}/**/*.md", + "!{projectRoot}/.eslintrc.(json|js)", + "!{projectRoot}/**/?(*.)+(spec|test|cy).[jt]s?(x)?(.snap)", + "!{projectRoot}/tsconfig.spec.json", + "!{projectRoot}/tsconfig.cy.json", + "!{projectRoot}/jest.config.[jt]s", + "!{projectRoot}/cypress.config.[jt]s", + "!{projectRoot}/bundle-size/**", + "!{projectRoot}/e2e/**", + "!{projectRoot}/.storybook/**", + "!{projectRoot}/**/*.stories.tsx?" ] } } diff --git a/package.json b/package.json index d72a03c4f95a4..d8678108d4268 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "url": "https://github.com/microsoft/fluentui" }, "engines": { - "node": "^14.18.1 || ^16.0.0" + "node": "^16.0.0" }, "scripts": { "build": "lage build --verbose", @@ -24,6 +24,8 @@ "check:change": "beachball check", "check:modified-files": "node -r ./scripts/ts-node/register ./scripts/executors/check-for-modified-files", "check:affected-package": "node ./scripts/executors/checkIfPackagesAffected.js", + "affected:get": "node -r ./scripts/ts-node/register ./scripts/executors/get-affected-packages", + "affected:run": "node -r ./scripts/ts-node/register ./scripts/executors/run-affected", "check:installed-dependencies-versions": "satisfied --no-peers --skip-invalid", "clean": "lage clean --verbose", "code-style": "lage code-style --verbose", @@ -100,12 +102,12 @@ "@microsoft/eslint-plugin-sdl": "0.1.9", "@microsoft/load-themed-styles": "1.10.26", "@microsoft/loader-load-themed-styles": "2.0.17", - "@nrwl/cli": "13.10.6", - "@nrwl/devkit": "13.10.6", - "@nrwl/jest": "13.10.6", - "@nrwl/js": "13.10.6", - "@nrwl/node": "13.10.6", - "@nrwl/workspace": "13.10.6", + "@nrwl/cli": "15.8.7", + "@nrwl/devkit": "15.8.7", + "@nrwl/jest": "15.8.7", + "@nrwl/js": "15.8.7", + "@nrwl/node": "15.8.7", + "@nrwl/workspace": "15.8.7", "@octokit/rest": "18.12.0", "@storybook/addon-a11y": "6.5.15", "@storybook/addon-actions": "6.5.15", @@ -124,9 +126,11 @@ "@storybook/manager-webpack5": "6.5.15", "@storybook/react": "6.5.15", "@storybook/theming": "6.5.15", - "@swc/cli": "0.1.59", - "@swc/core": "1.3.30", + "@swc-node/register": "1.6.1", + "@swc/cli": "0.1.62", + "@swc/core": "1.3.37", "@swc/helpers": "0.4.14", + "@swc/jest": "0.2.24", "@testing-library/dom": "8.11.3", "@testing-library/jest-dom": "5.16.5", "@testing-library/react": "12.1.2", @@ -165,7 +169,7 @@ "@types/lodash": "4.14.182", "@types/markdown-table": "2.0.0", "@types/micromatch": "4.0.2", - "@types/node": "14.18.32", + "@types/node": "16.18.1", "@types/node-fetch": "2.5.7", "@types/prettier": "2.7.2", "@types/progress": "2.0.5", @@ -280,7 +284,7 @@ "node-fetch": "2.6.7", "node-plop": "0.25.0", "node-polyfill-webpack-plugin": "1.0.2", - "nx": "13.10.6", + "nx": "15.8.7", "p-queue": "6.6.2", "parse-diff": "0.7.1", "path-browserify": "1.0.1", @@ -336,13 +340,13 @@ "ts-jest": "28.0.8", "ts-loader": "9.3.1", "ts-node": "10.9.1", - "tsconfig-paths": "4.1.0", + "tsconfig-paths": "4.1.2", "tsconfig-paths-webpack-plugin": "4.0.0", - "tslib": "2.4.1", + "tslib": "2.5.0", "typescript": "4.3.5", "vinyl": "2.2.0", "vrscreenshotdiff": "0.0.17", - "webpack": "5.74.0", + "webpack": "5.75.0", "webpack-bundle-analyzer": "4.4.2", "webpack-cli": "4.10.0", "webpack-dev-middleware": "4.2.0", diff --git a/packages/a11y-testing/project.json b/packages/a11y-testing/project.json new file mode 100644 index 0000000000000..4cc3e5ae2d031 --- /dev/null +++ b/packages/a11y-testing/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/a11y-testing", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["platform:node"] +} diff --git a/packages/api-docs/project.json b/packages/api-docs/project.json new file mode 100644 index 0000000000000..5d168165b61a2 --- /dev/null +++ b/packages/api-docs/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/api-docs", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["v8", "platform:node"] +} diff --git a/packages/azure-themes/project.json b/packages/azure-themes/project.json new file mode 100644 index 0000000000000..9bf2843986122 --- /dev/null +++ b/packages/azure-themes/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/azure-themes", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/bundle-size/project.json b/packages/bundle-size/project.json new file mode 100644 index 0000000000000..4005cabde649b --- /dev/null +++ b/packages/bundle-size/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/bundle-size", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/bundle-size/src", + "tags": ["platform:node"], + "implicitDependencies": [] +} diff --git a/packages/codemods/project.json b/packages/codemods/project.json new file mode 100644 index 0000000000000..f560d4dc52a44 --- /dev/null +++ b/packages/codemods/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/codemods", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["v8", "platform:node"] +} diff --git a/packages/common-styles/project.json b/packages/common-styles/project.json new file mode 100644 index 0000000000000..be0bd86879417 --- /dev/null +++ b/packages/common-styles/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/common-styles", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/cra-template/project.json b/packages/cra-template/project.json new file mode 100644 index 0000000000000..e582440d4cbf5 --- /dev/null +++ b/packages/cra-template/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/cra-template", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/date-time-utilities/project.json b/packages/date-time-utilities/project.json new file mode 100644 index 0000000000000..acd2ee5d8c714 --- /dev/null +++ b/packages/date-time-utilities/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/date-time-utilities", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/dom-utilities/project.json b/packages/dom-utilities/project.json new file mode 100644 index 0000000000000..5f2f8afd906eb --- /dev/null +++ b/packages/dom-utilities/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/dom-utilities", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/eslint-plugin/project.json b/packages/eslint-plugin/project.json new file mode 100644 index 0000000000000..ed33a60456250 --- /dev/null +++ b/packages/eslint-plugin/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/eslint-plugin", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/eslint-plugin/src/utils/configHelpers.js b/packages/eslint-plugin/src/utils/configHelpers.js index 324ed70c20098..c7c416da18c02 100644 --- a/packages/eslint-plugin/src/utils/configHelpers.js +++ b/packages/eslint-plugin/src/utils/configHelpers.js @@ -4,6 +4,26 @@ const fs = require('fs-extra'); const path = require('path'); const jju = require('jju'); +// TODO: this is not ok (to depend on nx packages within this plugin - redo) +// eslint-disable-next-line import/no-extraneous-dependencies +const { FsTree } = require('nx/src/generators/tree'); +// eslint-disable-next-line import/no-extraneous-dependencies +const { readProjectConfiguration } = require('@nrwl/devkit'); + +/** + * Gets project metadata from monorepo source of truth which is `project.json` per project + * @param {Options} options + * @returns {import('@nrwl/devkit').ProjectConfiguration} + */ +function getProjectMetadata(options) { + /** + * @type {import('@nrwl/devkit').Tree} + */ + const tree = new FsTree(options.root, false); + + return readProjectConfiguration(tree, options.name); +} + /** * @typedef {{root: string, name: string}} Options * @typedef {{name: string, version: string, dependencies: {[key: string]: string}}} PackageJson @@ -232,9 +252,7 @@ module.exports = { * @returns {PackageJson} package.json file of the provided package name. */ getPackageJson: (/** @type {Options} */ options) => { - /** @type {WorkspaceJsonConfiguration} */ - const nxWorkspace = JSON.parse(fs.readFileSync(path.join(options.root, 'workspace.json'), 'utf-8')); - const projectMetaData = nxWorkspace.projects[options.name]; + const projectMetaData = getProjectMetadata(options); const packagePath = path.join(options.root, projectMetaData.root); /** @type {PackageJson} */ const packageJson = fs.readJSONSync(path.join(packagePath, 'package.json')); @@ -248,9 +266,8 @@ module.exports = { * @returns {Set} Returns a set of v9 packages that are currently unstable. */ getV9UnstablePackages: (/** @type {string} */ root) => { - const nxWorkspace = JSON.parse(fs.readFileSync(path.join(root, 'workspace.json'), 'utf-8')); - const v9ProjectMetaData = nxWorkspace.projects['@fluentui/react-components']; - const v9PackagePath = path.join(root, v9ProjectMetaData.sourceRoot, 'unstable', 'index.ts'); + const v9ProjectMetaData = getProjectMetadata({ root, name: '@fluentui/react-components' }); + const v9PackagePath = path.join(root, v9ProjectMetaData.sourceRoot ?? '', 'unstable', 'index.ts'); const unstableV9Packages = new Set(); fs.readFileSync(v9PackagePath) .toString() diff --git a/packages/example-data/project.json b/packages/example-data/project.json new file mode 100644 index 0000000000000..a574e46924646 --- /dev/null +++ b/packages/example-data/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/example-data", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/fluent2-theme/project.json b/packages/fluent2-theme/project.json new file mode 100644 index 0000000000000..61e632ac68bd6 --- /dev/null +++ b/packages/fluent2-theme/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/fluent2-theme", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/fluentui/ability-attributes/project.json b/packages/fluentui/ability-attributes/project.json new file mode 100644 index 0000000000000..c7ab81733ee9a --- /dev/null +++ b/packages/fluentui/ability-attributes/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/ability-attributes", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/accessibility/project.json b/packages/fluentui/accessibility/project.json new file mode 100644 index 0000000000000..76562cd785c00 --- /dev/null +++ b/packages/fluentui/accessibility/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/accessibility", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/circulars-test/project.json b/packages/fluentui/circulars-test/project.json new file mode 100644 index 0000000000000..344076a9364f2 --- /dev/null +++ b/packages/fluentui/circulars-test/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/circulars-test", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/code-sandbox/project.json b/packages/fluentui/code-sandbox/project.json new file mode 100644 index 0000000000000..f056ddb3b6815 --- /dev/null +++ b/packages/fluentui/code-sandbox/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/code-sandbox", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/digest/project.json b/packages/fluentui/digest/project.json new file mode 100644 index 0000000000000..9c13db4975a38 --- /dev/null +++ b/packages/fluentui/digest/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/digest", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/docs-components/project.json b/packages/fluentui/docs-components/project.json new file mode 100644 index 0000000000000..ad929ffc8a549 --- /dev/null +++ b/packages/fluentui/docs-components/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/docs-components", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/docs/project.json b/packages/fluentui/docs/project.json new file mode 100644 index 0000000000000..18f9df4a5a7af --- /dev/null +++ b/packages/fluentui/docs/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/docs", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/e2e/package.json b/packages/fluentui/e2e/package.json index 25493de741429..ba915a5cadc26 100644 --- a/packages/fluentui/e2e/package.json +++ b/packages/fluentui/e2e/package.json @@ -27,6 +27,7 @@ "e2e": "gulp test:e2e", "e2e:local": "cypress open --config baseUrl=http://localhost:8082", "lint": "eslint --ext .js,.ts,.tsx .", - "lint:fix": "yarn lint --fix" + "lint:fix": "yarn lint --fix", + "type-check": "tsc -p tsconfig.app.json --baseUrl . && tsc -p tsconfig.json --baseUrl ." } } diff --git a/packages/fluentui/e2e/project.json b/packages/fluentui/e2e/project.json new file mode 100644 index 0000000000000..fa2b46ff7e51a --- /dev/null +++ b/packages/fluentui/e2e/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/e2e", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/e2e/tests/carouselClickableContent-example.tsx b/packages/fluentui/e2e/tests/carouselClickableContent-example.tsx index e4d859fe7aaa3..b5e5704abf53a 100644 --- a/packages/fluentui/e2e/tests/carouselClickableContent-example.tsx +++ b/packages/fluentui/e2e/tests/carouselClickableContent-example.tsx @@ -1,13 +1,7 @@ import * as React from 'react'; -import { Carousel, Button, carouselNavigationItemClassName } from '@fluentui/react-northstar'; +import { Carousel, Button } from '@fluentui/react-northstar'; -export const selectors = { - CarouselClass: 'carousel', - ItemButton: 'item-button', - HiddenContent: 'hidden-content', - Navigation: carouselNavigationItemClassName, - second: 'second', -}; +import { selectors } from './carouselClickableContent-selectors'; const CarouselClickableContentExample = () => { const [clicked, setClicked] = React.useState(false); diff --git a/packages/fluentui/e2e/tests/carouselClickableContent-selectors.ts b/packages/fluentui/e2e/tests/carouselClickableContent-selectors.ts new file mode 100644 index 0000000000000..c6a945b8ced93 --- /dev/null +++ b/packages/fluentui/e2e/tests/carouselClickableContent-selectors.ts @@ -0,0 +1,7 @@ +export const selectors = { + CarouselClass: 'carousel', + ItemButton: 'item-button', + HiddenContent: 'hidden-content', + Navigation: 'ui-carousel__navigationitem', + second: 'second', +}; diff --git a/packages/fluentui/e2e/tests/carouselClickableContent.spec.ts b/packages/fluentui/e2e/tests/carouselClickableContent.spec.ts index 6321d616a7ed7..a432f924a1a94 100644 --- a/packages/fluentui/e2e/tests/carouselClickableContent.spec.ts +++ b/packages/fluentui/e2e/tests/carouselClickableContent.spec.ts @@ -1,4 +1,4 @@ -import { selectors } from './carouselClickableContent-example'; +import { selectors } from './carouselClickableContent-selectors'; describe('Carousel with clickable content', () => { const carousel = `.${selectors.CarouselClass}`; diff --git a/packages/fluentui/e2e/tests/dialog-example.tsx b/packages/fluentui/e2e/tests/dialog-example.tsx index 9780b7f8a0d53..23259fdf99d8c 100644 --- a/packages/fluentui/e2e/tests/dialog-example.tsx +++ b/packages/fluentui/e2e/tests/dialog-example.tsx @@ -1,10 +1,7 @@ import * as React from 'react'; import { Button, Dialog } from '@fluentui/react-northstar'; -export const selectors = { - trigger: 'trigger', - cancelButton: 'cancelButton', -}; +import { selectors } from './dialog-selectors'; const DialogBlockBodyScrollExample = () => ( { const trigger = `#${selectors.trigger}`; diff --git a/packages/fluentui/e2e/tests/popupDismissScroll-example.tsx b/packages/fluentui/e2e/tests/popupDismissScroll-example.tsx index ca69ae4a75cb4..f6fcb414014ae 100644 --- a/packages/fluentui/e2e/tests/popupDismissScroll-example.tsx +++ b/packages/fluentui/e2e/tests/popupDismissScroll-example.tsx @@ -1,25 +1,7 @@ import React from 'react'; import { Button, Popup, Flex } from '@fluentui/react-northstar'; -export const selectors = { - simplePopup: { - triggerId: 'trigger', - contentId: 'content', - }, - contextPopup: { - triggerId: 'trigger-context', - contentId: 'content-context', - }, - dismissScrollPopup: { - triggerId: 'trigger-dismiss', - contentId: 'content-dismiss', - }, - nestedPopup: { - parentPopupTriggerId: 'nested-parent-trigger', - childPopupTriggerId: 'nested-child-trigger', - childPopupContentId: 'nested-child-content', - }, -}; +import { selectors } from './popupDismissScroll-selectors'; const PopupClickHandlingExample = () => { return ( diff --git a/packages/fluentui/e2e/tests/popupDismissScroll-selectors.ts b/packages/fluentui/e2e/tests/popupDismissScroll-selectors.ts new file mode 100644 index 0000000000000..6d61cb5f8b2fa --- /dev/null +++ b/packages/fluentui/e2e/tests/popupDismissScroll-selectors.ts @@ -0,0 +1,19 @@ +export const selectors = { + simplePopup: { + triggerId: 'trigger', + contentId: 'content', + }, + contextPopup: { + triggerId: 'trigger-context', + contentId: 'content-context', + }, + dismissScrollPopup: { + triggerId: 'trigger-dismiss', + contentId: 'content-dismiss', + }, + nestedPopup: { + parentPopupTriggerId: 'nested-parent-trigger', + childPopupTriggerId: 'nested-child-trigger', + childPopupContentId: 'nested-child-content', + }, +}; diff --git a/packages/fluentui/e2e/tests/popupDismissScroll.spec.ts b/packages/fluentui/e2e/tests/popupDismissScroll.spec.ts index 0e2dc97ac6c19..8963699d72a4c 100644 --- a/packages/fluentui/e2e/tests/popupDismissScroll.spec.ts +++ b/packages/fluentui/e2e/tests/popupDismissScroll.spec.ts @@ -1,4 +1,4 @@ -import { selectors } from './popupDismissScroll-example'; +import { selectors } from './popupDismissScroll-selectors'; describe('Popup - dismiss on scroll container', () => { beforeEach(() => { diff --git a/packages/fluentui/e2e/tests/popupIframeDismiss-example.tsx b/packages/fluentui/e2e/tests/popupIframeDismiss-example.tsx index f95a412b9d895..1e32a2d79c6dc 100644 --- a/packages/fluentui/e2e/tests/popupIframeDismiss-example.tsx +++ b/packages/fluentui/e2e/tests/popupIframeDismiss-example.tsx @@ -1,11 +1,7 @@ import * as React from 'react'; -import { Popup, popupContentClassName, Button } from '@fluentui/react-northstar'; +import { Popup, Button } from '@fluentui/react-northstar'; -export const selectors = { - popupTriggerId: 'trigger', - popupContentClass: popupContentClassName, - iframe: 'iframe', -}; +import { selectors } from './popupIframeDismiss-selectors'; const iframeContent = `

Hello World!

diff --git a/packages/fluentui/e2e/tests/popupIframeDismiss-selectors.ts b/packages/fluentui/e2e/tests/popupIframeDismiss-selectors.ts new file mode 100644 index 0000000000000..64987a50cea29 --- /dev/null +++ b/packages/fluentui/e2e/tests/popupIframeDismiss-selectors.ts @@ -0,0 +1,5 @@ +export const selectors = { + popupTriggerId: 'trigger', + popupContentClass: 'ui-popup__content', + iframe: 'iframe', +}; diff --git a/packages/fluentui/e2e/tests/popupIframeDismiss.spec.ts b/packages/fluentui/e2e/tests/popupIframeDismiss.spec.ts index dcd5eb43017ab..db6353607185e 100644 --- a/packages/fluentui/e2e/tests/popupIframeDismiss.spec.ts +++ b/packages/fluentui/e2e/tests/popupIframeDismiss.spec.ts @@ -1,4 +1,4 @@ -import { selectors } from './popupIframeDismiss-example'; +import { selectors } from './popupIframeDismiss-selectors'; describe('Popup - Dismiss on iframe click', () => { const popupTrigger = `#${selectors.popupTriggerId}`; diff --git a/packages/fluentui/e2e/tests/popupIframeInContent.spec.ts b/packages/fluentui/e2e/tests/popupIframeInContent.spec.ts index d3b145375bd98..cd179121efffd 100644 --- a/packages/fluentui/e2e/tests/popupIframeInContent.spec.ts +++ b/packages/fluentui/e2e/tests/popupIframeInContent.spec.ts @@ -1,4 +1,4 @@ -import { selectors } from './popupIframeDismiss-example'; +import { selectors } from './popupIframeDismiss-selectors'; describe('Popup - Dismiss on iframe click', () => { const popupTrigger = `#${selectors.popupTriggerId}`; diff --git a/packages/fluentui/e2e/tests/popupWithTooltipTrigger-example.tsx b/packages/fluentui/e2e/tests/popupWithTooltipTrigger-example.tsx index 2e4336bbe90da..b7663fed6b4d8 100644 --- a/packages/fluentui/e2e/tests/popupWithTooltipTrigger-example.tsx +++ b/packages/fluentui/e2e/tests/popupWithTooltipTrigger-example.tsx @@ -1,10 +1,7 @@ import * as React from 'react'; import { Popup, Tooltip } from '@fluentui/react-northstar'; -export const selectors = { - trigger: 'tooltip-trigger', - content: 'tooltip-content', -}; +import { selectors } from './popupWithTooltipTrigger-selectors'; const PopupWithTooltipTriggerExample = () => { return ( diff --git a/packages/fluentui/e2e/tests/popupWithTooltipTrigger-selectors.ts b/packages/fluentui/e2e/tests/popupWithTooltipTrigger-selectors.ts new file mode 100644 index 0000000000000..e140e10fa2909 --- /dev/null +++ b/packages/fluentui/e2e/tests/popupWithTooltipTrigger-selectors.ts @@ -0,0 +1,4 @@ +export const selectors = { + trigger: 'tooltip-trigger', + content: 'tooltip-content', +}; diff --git a/packages/fluentui/e2e/tests/popupWithTooltipTrigger.spec.ts b/packages/fluentui/e2e/tests/popupWithTooltipTrigger.spec.ts index 727d7d89cd3aa..ea6a14b24be7d 100644 --- a/packages/fluentui/e2e/tests/popupWithTooltipTrigger.spec.ts +++ b/packages/fluentui/e2e/tests/popupWithTooltipTrigger.spec.ts @@ -1,4 +1,4 @@ -import { selectors } from './popupWithTooltipTrigger-example'; +import { selectors } from './popupWithTooltipTrigger-selectors'; describe('Popup with Tooltip as a "trigger"', () => { const trigger = `#${selectors.trigger}`; diff --git a/packages/fluentui/e2e/tests/toolbarWithPopupTooltip-example.tsx b/packages/fluentui/e2e/tests/toolbarWithPopupTooltip-example.tsx index 482dbef743563..36675a59516da 100644 --- a/packages/fluentui/e2e/tests/toolbarWithPopupTooltip-example.tsx +++ b/packages/fluentui/e2e/tests/toolbarWithPopupTooltip-example.tsx @@ -1,17 +1,7 @@ import * as React from 'react'; import { Toolbar, Tooltip, HighlightIcon, FontColorIcon } from '@fluentui/react-northstar'; -export const clickSelectors = { - triggerId: 'trigger-click', - contentId: 'content-click', - popupId: 'popup-click', -}; - -export const hoverSelectors = { - triggerId: 'trigger-hover', - contentId: 'content-hover', - popupId: 'popup-hover', -}; +import { clickSelectors, hoverSelectors } from './toolbarWithPopupTooltip-selectors'; const ToolbarWithPopupTooltipExample = () => { const [fontOpen, setFontOpen] = React.useState(false); diff --git a/packages/fluentui/e2e/tests/toolbarWithPopupTooltip-selectors.ts b/packages/fluentui/e2e/tests/toolbarWithPopupTooltip-selectors.ts new file mode 100644 index 0000000000000..e6920e09d69e4 --- /dev/null +++ b/packages/fluentui/e2e/tests/toolbarWithPopupTooltip-selectors.ts @@ -0,0 +1,11 @@ +export const clickSelectors = { + triggerId: 'trigger-click', + contentId: 'content-click', + popupId: 'popup-click', +}; + +export const hoverSelectors = { + triggerId: 'trigger-hover', + contentId: 'content-hover', + popupId: 'popup-hover', +}; diff --git a/packages/fluentui/e2e/tests/toolbarWithPopupTooltip.spec.ts b/packages/fluentui/e2e/tests/toolbarWithPopupTooltip.spec.ts index 3f96c932a608e..998265bcf62ae 100644 --- a/packages/fluentui/e2e/tests/toolbarWithPopupTooltip.spec.ts +++ b/packages/fluentui/e2e/tests/toolbarWithPopupTooltip.spec.ts @@ -1,4 +1,4 @@ -import { clickSelectors, hoverSelectors } from './toolbarWithPopupTooltip-example'; +import { clickSelectors, hoverSelectors } from './toolbarWithPopupTooltip-selectors'; const firstItem = `#${clickSelectors.triggerId}`; const secondItem = `#${hoverSelectors.triggerId}`; diff --git a/packages/fluentui/e2e/tests/tooltipUnhandledProps-example.tsx b/packages/fluentui/e2e/tests/tooltipUnhandledProps-example.tsx index cd10a9e1371cd..2de7aea98baa1 100644 --- a/packages/fluentui/e2e/tests/tooltipUnhandledProps-example.tsx +++ b/packages/fluentui/e2e/tests/tooltipUnhandledProps-example.tsx @@ -1,10 +1,7 @@ import React from 'react'; import { MenuButton, Tooltip, Button } from '@fluentui/react-northstar'; -export const selectors = { - menuItemClassName: 'menu-item', - triggerClassName: 'trigger-button', -}; +import { selectors } from './tooltipUnhandledProps-selectors'; const TooltipUnhandledProps = () => { return ( diff --git a/packages/fluentui/e2e/tests/tooltipUnhandledProps-selectors.ts b/packages/fluentui/e2e/tests/tooltipUnhandledProps-selectors.ts new file mode 100644 index 0000000000000..61e2b51b4789d --- /dev/null +++ b/packages/fluentui/e2e/tests/tooltipUnhandledProps-selectors.ts @@ -0,0 +1,4 @@ +export const selectors = { + menuItemClassName: 'menu-item', + triggerClassName: 'trigger-button', +}; diff --git a/packages/fluentui/e2e/tests/tooltipUnhandledProps.spec.ts b/packages/fluentui/e2e/tests/tooltipUnhandledProps.spec.ts index 7f544f323bb43..135448e3954be 100644 --- a/packages/fluentui/e2e/tests/tooltipUnhandledProps.spec.ts +++ b/packages/fluentui/e2e/tests/tooltipUnhandledProps.spec.ts @@ -1,4 +1,4 @@ -import { selectors } from './tooltipUnhandledProps-example'; +import { selectors } from './tooltipUnhandledProps-selectors'; const trigger = `.${selectors.triggerClassName}`; const menuItem = `.${selectors.menuItemClassName}`; diff --git a/packages/fluentui/e2e/tsconfig.app.json b/packages/fluentui/e2e/tsconfig.app.json new file mode 100644 index 0000000000000..e492d1e323a95 --- /dev/null +++ b/packages/fluentui/e2e/tsconfig.app.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.common.json", + "compilerOptions": { + "types": ["node", "webpack-env"] + }, + "include": ["server/", "tests/*-example.tsx", "tests/*-selectors.ts"] +} diff --git a/packages/fluentui/e2e/tsconfig.common.json b/packages/fluentui/e2e/tsconfig.common.json new file mode 100644 index 0000000000000..8a2854ff6a2e4 --- /dev/null +++ b/packages/fluentui/e2e/tsconfig.common.json @@ -0,0 +1,11 @@ +{ + "extends": "../../../tsconfig.base.v0.json", + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "isolatedModules": true, + "module": "esnext", + "skipLibCheck": true, + "noEmit": true, + "emitDeclarationOnly": false + } +} diff --git a/packages/fluentui/e2e/tsconfig.json b/packages/fluentui/e2e/tsconfig.json index a343a32b4060d..fb9f830fdeb74 100644 --- a/packages/fluentui/e2e/tsconfig.json +++ b/packages/fluentui/e2e/tsconfig.json @@ -1,11 +1,10 @@ { - "extends": "../../../tsconfig.base.v0.json", + "extends": "./tsconfig.common.json", "compilerOptions": { - "allowSyntheticDefaultImports": true, + "allowJs": true, + "checkJs": true, "isolatedModules": false, - "module": "esnext", - "types": ["node", "webpack-env", "cypress", "cypress-real-events"], - "skipLibCheck": true + "types": ["node", "cypress", "cypress-real-events"] }, - "include": ["."] + "include": ["./cypress.config.ts", "./cypress", "tests/*.spec.ts", "tests/*-selectors.ts"] } diff --git a/packages/fluentui/lerna.json b/packages/fluentui/lerna.json index 66dfe18a6a8b0..743a4faca2e88 100644 --- a/packages/fluentui/lerna.json +++ b/packages/fluentui/lerna.json @@ -1,5 +1,6 @@ { "packages": ["**/*"], "npmClient": "yarn", - "version": "0.66.4" + "version": "0.66.4", + "useNx": true } diff --git a/packages/fluentui/local-sandbox/project.json b/packages/fluentui/local-sandbox/project.json new file mode 100644 index 0000000000000..7cdc7f1087898 --- /dev/null +++ b/packages/fluentui/local-sandbox/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/local-sandbox", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/perf-test-northstar/project.json b/packages/fluentui/perf-test-northstar/project.json new file mode 100644 index 0000000000000..74c247168a98a --- /dev/null +++ b/packages/fluentui/perf-test-northstar/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/perf-test-northstar", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/perf/project.json b/packages/fluentui/perf/project.json new file mode 100644 index 0000000000000..0fbe472b0fab9 --- /dev/null +++ b/packages/fluentui/perf/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/perf", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/projects-test/project.json b/packages/fluentui/projects-test/project.json new file mode 100644 index 0000000000000..cb94ed7f8af7d --- /dev/null +++ b/packages/fluentui/projects-test/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/projects-test", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/projects-test/tsconfig.json b/packages/fluentui/projects-test/tsconfig.json index 36a27e87aad4a..82b3ba8211332 100644 --- a/packages/fluentui/projects-test/tsconfig.json +++ b/packages/fluentui/projects-test/tsconfig.json @@ -7,6 +7,7 @@ "skipLibCheck": true, "outDir": "dist/dts", "noEmit": true, + "emitDeclarationOnly": false, "composite": true }, "include": ["src"], diff --git a/packages/fluentui/react-bindings/project.json b/packages/fluentui/react-bindings/project.json new file mode 100644 index 0000000000000..64b6e4ad7aff9 --- /dev/null +++ b/packages/fluentui/react-bindings/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/react-bindings", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/react-builder/project.json b/packages/fluentui/react-builder/project.json new file mode 100644 index 0000000000000..6f5d870223298 --- /dev/null +++ b/packages/fluentui/react-builder/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/react-builder", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/react-component-event-listener/project.json b/packages/fluentui/react-component-event-listener/project.json new file mode 100644 index 0000000000000..1af2bddd5dbdc --- /dev/null +++ b/packages/fluentui/react-component-event-listener/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/react-component-event-listener", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/react-component-nesting-registry/project.json b/packages/fluentui/react-component-nesting-registry/project.json new file mode 100644 index 0000000000000..a39de138b23f9 --- /dev/null +++ b/packages/fluentui/react-component-nesting-registry/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/react-component-nesting-registry", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/react-component-ref/project.json b/packages/fluentui/react-component-ref/project.json new file mode 100644 index 0000000000000..15ca17a8bd195 --- /dev/null +++ b/packages/fluentui/react-component-ref/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/react-component-ref", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/react-icons-northstar/project.json b/packages/fluentui/react-icons-northstar/project.json new file mode 100644 index 0000000000000..e287196907210 --- /dev/null +++ b/packages/fluentui/react-icons-northstar/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/react-icons-northstar", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/react-northstar-emotion-renderer/project.json b/packages/fluentui/react-northstar-emotion-renderer/project.json new file mode 100644 index 0000000000000..a9a3001062cc6 --- /dev/null +++ b/packages/fluentui/react-northstar-emotion-renderer/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/react-northstar-emotion-renderer", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/react-northstar-fela-renderer/project.json b/packages/fluentui/react-northstar-fela-renderer/project.json new file mode 100644 index 0000000000000..6c238fbd32328 --- /dev/null +++ b/packages/fluentui/react-northstar-fela-renderer/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/react-northstar-fela-renderer", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/react-northstar-prototypes/project.json b/packages/fluentui/react-northstar-prototypes/project.json new file mode 100644 index 0000000000000..92e1cc17a0806 --- /dev/null +++ b/packages/fluentui/react-northstar-prototypes/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/react-northstar-prototypes", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/react-northstar-styles-renderer/project.json b/packages/fluentui/react-northstar-styles-renderer/project.json new file mode 100644 index 0000000000000..12b56946adc45 --- /dev/null +++ b/packages/fluentui/react-northstar-styles-renderer/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/react-northstar-styles-renderer", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/react-northstar/project.json b/packages/fluentui/react-northstar/project.json new file mode 100644 index 0000000000000..b09acad793b4f --- /dev/null +++ b/packages/fluentui/react-northstar/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/react-northstar", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/react-proptypes/project.json b/packages/fluentui/react-proptypes/project.json new file mode 100644 index 0000000000000..4a58365a6fd99 --- /dev/null +++ b/packages/fluentui/react-proptypes/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/react-proptypes", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/react-telemetry/project.json b/packages/fluentui/react-telemetry/project.json new file mode 100644 index 0000000000000..58a0b5b1e1632 --- /dev/null +++ b/packages/fluentui/react-telemetry/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/react-telemetry", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["react-northstar"] +} diff --git a/packages/fluentui/state/project.json b/packages/fluentui/state/project.json new file mode 100644 index 0000000000000..1b1931a2a7c23 --- /dev/null +++ b/packages/fluentui/state/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/state", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/fluentui/styles/project.json b/packages/fluentui/styles/project.json new file mode 100644 index 0000000000000..f4a0c8ef204c5 --- /dev/null +++ b/packages/fluentui/styles/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/styles", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/font-icons-mdl2/project.json b/packages/font-icons-mdl2/project.json new file mode 100644 index 0000000000000..3c4f125f9fa26 --- /dev/null +++ b/packages/font-icons-mdl2/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/font-icons-mdl2", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/foundation-legacy/project.json b/packages/foundation-legacy/project.json new file mode 100644 index 0000000000000..6b9e4ee26add2 --- /dev/null +++ b/packages/foundation-legacy/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/foundation-legacy", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/jest-serializer-merge-styles/project.json b/packages/jest-serializer-merge-styles/project.json new file mode 100644 index 0000000000000..eb1aaaaec1757 --- /dev/null +++ b/packages/jest-serializer-merge-styles/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/jest-serializer-merge-styles", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["v8", "platform:node"] +} diff --git a/packages/keyboard-key/jest.config.js b/packages/keyboard-key/jest.config.js index c0715e292e734..1ac6b602df588 100644 --- a/packages/keyboard-key/jest.config.js +++ b/packages/keyboard-key/jest.config.js @@ -1,7 +1,6 @@ const { createV8Config: createConfig } = require('@fluentui/scripts-jest'); const config = createConfig({ - collectCoverage: true, collectCoverageFrom: ['src/**/*.ts', '!src/**/*.test.ts', '!node_modules/**'], coverageDirectory: 'coverage', coverageThreshold: { diff --git a/packages/keyboard-key/project.json b/packages/keyboard-key/project.json new file mode 100644 index 0000000000000..42a9561f0eb35 --- /dev/null +++ b/packages/keyboard-key/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/keyboard-key", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/merge-styles/project.json b/packages/merge-styles/project.json new file mode 100644 index 0000000000000..d75098ea01f82 --- /dev/null +++ b/packages/merge-styles/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/merge-styles", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/monaco-editor/project.json b/packages/monaco-editor/project.json new file mode 100644 index 0000000000000..af336c1415852 --- /dev/null +++ b/packages/monaco-editor/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/monaco-editor", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/public-docsite-setup/project.json b/packages/public-docsite-setup/project.json new file mode 100644 index 0000000000000..ed1b9069f393b --- /dev/null +++ b/packages/public-docsite-setup/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/public-docsite-setup", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/react-cards/project.json b/packages/react-cards/project.json new file mode 100644 index 0000000000000..797ee15577fa5 --- /dev/null +++ b/packages/react-cards/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/react-cards", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/react-charting/project.json b/packages/react-charting/project.json new file mode 100644 index 0000000000000..c80d51008901d --- /dev/null +++ b/packages/react-charting/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/react-charting", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/react-components/babel-preset-global-context/jest.config.js b/packages/react-components/babel-preset-global-context/jest.config.js index c35f80f6a167e..07850af9884f0 100644 --- a/packages/react-components/babel-preset-global-context/jest.config.js +++ b/packages/react-components/babel-preset-global-context/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/babel-preset-global-context/package.json b/packages/react-components/babel-preset-global-context/package.json index 320bdf8c9789d..61f09cdec8c6d 100644 --- a/packages/react-components/babel-preset-global-context/package.json +++ b/packages/react-components/babel-preset-global-context/package.json @@ -19,7 +19,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/babel-preset-global-context/project.json b/packages/react-components/babel-preset-global-context/project.json new file mode 100644 index 0000000000000..1e8903d35c219 --- /dev/null +++ b/packages/react-components/babel-preset-global-context/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/babel-preset-global-context", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/babel-preset-global-context/src", + "tags": ["vNext", "platform:node"] +} diff --git a/packages/react-components/babel-preset-storybook-full-source/jest.config.js b/packages/react-components/babel-preset-storybook-full-source/jest.config.js index dafc6e0002a6b..5bd85f2cef6f9 100644 --- a/packages/react-components/babel-preset-storybook-full-source/jest.config.js +++ b/packages/react-components/babel-preset-storybook-full-source/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/babel-preset-storybook-full-source/package.json b/packages/react-components/babel-preset-storybook-full-source/package.json index 70c26d1a8d262..fe5349dc99efb 100644 --- a/packages/react-components/babel-preset-storybook-full-source/package.json +++ b/packages/react-components/babel-preset-storybook-full-source/package.json @@ -17,7 +17,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/babel-preset-storybook-full-source/project.json b/packages/react-components/babel-preset-storybook-full-source/project.json new file mode 100644 index 0000000000000..c2fc8f6b87d59 --- /dev/null +++ b/packages/react-components/babel-preset-storybook-full-source/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/babel-preset-storybook-full-source", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/babel-preset-storybook-full-source/src", + "tags": ["vNext", "platform:node"] +} diff --git a/packages/react-components/babel-preset-storybook-full-source/src/index.dev.js b/packages/react-components/babel-preset-storybook-full-source/src/index.dev.js index e916ec2369091..582322b59e0c7 100644 --- a/packages/react-components/babel-preset-storybook-full-source/src/index.dev.js +++ b/packages/react-components/babel-preset-storybook-full-source/src/index.dev.js @@ -1,11 +1,9 @@ // This is internal code and should be a dev dependency /* eslint-disable import/no-extraneous-dependencies */ const { registerTsProject } = require('nx/src/utils/register'); +const path = require('path'); -// This is internal code and should be a dev dependency -const { workspaceRoot } = require('@nrwl/devkit'); -/* eslint-enable import/no-extraneous-dependencies */ - -registerTsProject(workspaceRoot, 'tsconfig.base.json'); +const projectRoot = path.join(__dirname, '..'); +registerTsProject(projectRoot, 'tsconfig.lib.json'); module.exports = require('./index.ts'); diff --git a/packages/react-components/global-context/jest.config.js b/packages/react-components/global-context/jest.config.js index 89b83781aad75..d8866c69b6a95 100644 --- a/packages/react-components/global-context/jest.config.js +++ b/packages/react-components/global-context/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/global-context/package.json b/packages/react-components/global-context/package.json index 95bda821a3150..e4fe8bf065493 100644 --- a/packages/react-components/global-context/package.json +++ b/packages/react-components/global-context/package.json @@ -21,7 +21,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/global-context/project.json b/packages/react-components/global-context/project.json new file mode 100644 index 0000000000000..5a6e974b2851b --- /dev/null +++ b/packages/react-components/global-context/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/global-context", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/global-context/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/global-context/src/types.ts b/packages/react-components/global-context/src/types.ts index 0010ac80544e8..79a9007e8228b 100644 --- a/packages/react-components/global-context/src/types.ts +++ b/packages/react-components/global-context/src/types.ts @@ -1,3 +1,3 @@ import * as React from 'react'; -export type GlobalObject = (typeof globalThis | NodeJS.Global) & Record>; +export type GlobalObject = typeof globalThis & Record>; diff --git a/packages/react-components/keyboard-keys/jest.config.js b/packages/react-components/keyboard-keys/jest.config.js index f4f30182fe771..9075951549394 100644 --- a/packages/react-components/keyboard-keys/jest.config.js +++ b/packages/react-components/keyboard-keys/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/keyboard-keys/package.json b/packages/react-components/keyboard-keys/package.json index 1d7151368ca33..78a2ebff6e81c 100644 --- a/packages/react-components/keyboard-keys/package.json +++ b/packages/react-components/keyboard-keys/package.json @@ -18,7 +18,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/keyboard-keys/project.json b/packages/react-components/keyboard-keys/project.json new file mode 100644 index 0000000000000..6fb88382693ac --- /dev/null +++ b/packages/react-components/keyboard-keys/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/keyboard-keys", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/keyboard-keys/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/priority-overflow/jest.config.js b/packages/react-components/priority-overflow/jest.config.js index 5be1fb0250886..a0566b971625b 100644 --- a/packages/react-components/priority-overflow/jest.config.js +++ b/packages/react-components/priority-overflow/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/priority-overflow/package.json b/packages/react-components/priority-overflow/package.json index ca4dccf7a6a80..03665bb72a8a1 100644 --- a/packages/react-components/priority-overflow/package.json +++ b/packages/react-components/priority-overflow/package.json @@ -19,7 +19,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/priority-overflow/project.json b/packages/react-components/priority-overflow/project.json new file mode 100644 index 0000000000000..eb3dfa2db9e6a --- /dev/null +++ b/packages/react-components/priority-overflow/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/priority-overflow", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/priority-overflow/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-accordion/jest.config.js b/packages/react-components/react-accordion/jest.config.js index 9d2d508dfbe13..4e8a73e113ebf 100644 --- a/packages/react-components/react-accordion/jest.config.js +++ b/packages/react-components/react-accordion/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-accordion/package.json b/packages/react-components/react-accordion/package.json index 366395e5079b9..0c643427a888a 100644 --- a/packages/react-components/react-accordion/package.json +++ b/packages/react-components/react-accordion/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-accordion/project.json b/packages/react-components/react-accordion/project.json new file mode 100644 index 0000000000000..a639043fbcc7a --- /dev/null +++ b/packages/react-components/react-accordion/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-accordion", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-accordion/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-alert/jest.config.js b/packages/react-components/react-alert/jest.config.js index 7e1223ecf873b..1ce10024ed483 100644 --- a/packages/react-components/react-alert/jest.config.js +++ b/packages/react-components/react-alert/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-alert/package.json b/packages/react-components/react-alert/package.json index 522cc1040698b..6e9b7f9eee896 100644 --- a/packages/react-components/react-alert/package.json +++ b/packages/react-components/react-alert/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-alert/project.json b/packages/react-components/react-alert/project.json new file mode 100644 index 0000000000000..39e7ecd0a96d3 --- /dev/null +++ b/packages/react-components/react-alert/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-alert", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-alert/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-aria/jest.config.js b/packages/react-components/react-aria/jest.config.js index aabf1e411b3ec..d47d420c61eac 100644 --- a/packages/react-components/react-aria/jest.config.js +++ b/packages/react-components/react-aria/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-aria/package.json b/packages/react-components/react-aria/package.json index 9a1a48d0be101..f0f825045119f 100644 --- a/packages/react-components/react-aria/package.json +++ b/packages/react-components/react-aria/package.json @@ -20,7 +20,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-aria/project.json b/packages/react-components/react-aria/project.json new file mode 100644 index 0000000000000..dbcbc362bffab --- /dev/null +++ b/packages/react-components/react-aria/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-aria", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-aria/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-avatar-context/jest.config.js b/packages/react-components/react-avatar-context/jest.config.js index a86805833bc25..43f2e0353ac26 100644 --- a/packages/react-components/react-avatar-context/jest.config.js +++ b/packages/react-components/react-avatar-context/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-avatar-context/package.json b/packages/react-components/react-avatar-context/package.json index 098a76e377cd4..e16b60cfc6729 100644 --- a/packages/react-components/react-avatar-context/package.json +++ b/packages/react-components/react-avatar-context/package.json @@ -19,8 +19,8 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "generate-api": "just-scripts generate-api", - "type-check": "tsc -b tsconfig.json" + "type-check": "just-scripts type-check", + "generate-api": "just-scripts generate-api" }, "devDependencies": { "@fluentui/eslint-plugin": "*", diff --git a/packages/react-components/react-avatar-context/project.json b/packages/react-components/react-avatar-context/project.json new file mode 100644 index 0000000000000..dfd1916dc6d4b --- /dev/null +++ b/packages/react-components/react-avatar-context/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-avatar-context", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-avatar-context/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-avatar/jest.config.js b/packages/react-components/react-avatar/jest.config.js index 474b19047973a..f4008a1e38778 100644 --- a/packages/react-components/react-avatar/jest.config.js +++ b/packages/react-components/react-avatar/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-avatar/package.json b/packages/react-components/react-avatar/package.json index 143da34b2b3ae..39e5fbeaea27e 100644 --- a/packages/react-components/react-avatar/package.json +++ b/packages/react-components/react-avatar/package.json @@ -23,7 +23,7 @@ "e2e:local": "cypress open --component", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-avatar/project.json b/packages/react-components/react-avatar/project.json new file mode 100644 index 0000000000000..0bc355b003b41 --- /dev/null +++ b/packages/react-components/react-avatar/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-avatar", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-avatar/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-badge/jest.config.js b/packages/react-components/react-badge/jest.config.js index 2650ceafefa74..09a0dec57a003 100644 --- a/packages/react-components/react-badge/jest.config.js +++ b/packages/react-components/react-badge/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-badge/package.json b/packages/react-components/react-badge/package.json index 93d0d9e829a40..a51eda2393963 100644 --- a/packages/react-components/react-badge/package.json +++ b/packages/react-components/react-badge/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-badge/project.json b/packages/react-components/react-badge/project.json new file mode 100644 index 0000000000000..a70b4ec597c06 --- /dev/null +++ b/packages/react-components/react-badge/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-badge", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-badge/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-breadcrumb/jest.config.js b/packages/react-components/react-breadcrumb/jest.config.js index e71124efdbbd7..24e6312e37cf0 100644 --- a/packages/react-components/react-breadcrumb/jest.config.js +++ b/packages/react-components/react-breadcrumb/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-breadcrumb/package.json b/packages/react-components/react-breadcrumb/package.json index 93030abef68f7..14915062c1d6d 100644 --- a/packages/react-components/react-breadcrumb/package.json +++ b/packages/react-components/react-breadcrumb/package.json @@ -19,7 +19,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api", "storybook": "start-storybook", "start": "yarn storybook" diff --git a/packages/react-components/react-breadcrumb/project.json b/packages/react-components/react-breadcrumb/project.json new file mode 100644 index 0000000000000..c6aff92c15a8b --- /dev/null +++ b/packages/react-components/react-breadcrumb/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-breadcrumb", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-breadcrumb/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-button/jest.config.js b/packages/react-components/react-button/jest.config.js index fa9febaae3144..3bcfc432e5604 100644 --- a/packages/react-components/react-button/jest.config.js +++ b/packages/react-components/react-button/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-button/package.json b/packages/react-components/react-button/package.json index b29ad4b73bdfe..fac7759a647e6 100644 --- a/packages/react-components/react-button/package.json +++ b/packages/react-components/react-button/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-button/project.json b/packages/react-components/react-button/project.json new file mode 100644 index 0000000000000..fa64df23ec8e8 --- /dev/null +++ b/packages/react-components/react-button/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-button", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-button/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-card/jest.config.js b/packages/react-components/react-card/jest.config.js index 718afb7101794..3f0bccfd28370 100644 --- a/packages/react-components/react-card/jest.config.js +++ b/packages/react-components/react-card/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-card/package.json b/packages/react-components/react-card/package.json index 8402c79430976..b667cdf7ea430 100644 --- a/packages/react-components/react-card/package.json +++ b/packages/react-components/react-card/package.json @@ -24,7 +24,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-card/project.json b/packages/react-components/react-card/project.json new file mode 100644 index 0000000000000..c7fd952bec0ed --- /dev/null +++ b/packages/react-components/react-card/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-card", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-card/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-checkbox/jest.config.js b/packages/react-components/react-checkbox/jest.config.js index 276dda279da40..6501fb7e4a0f6 100644 --- a/packages/react-components/react-checkbox/jest.config.js +++ b/packages/react-components/react-checkbox/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-checkbox/package.json b/packages/react-components/react-checkbox/package.json index 005111b68906d..7e30ac2383887 100644 --- a/packages/react-components/react-checkbox/package.json +++ b/packages/react-components/react-checkbox/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-checkbox/project.json b/packages/react-components/react-checkbox/project.json new file mode 100644 index 0000000000000..6e6eb06b79db8 --- /dev/null +++ b/packages/react-components/react-checkbox/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-checkbox", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-checkbox/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-combobox/jest.config.js b/packages/react-components/react-combobox/jest.config.js index 42cc3e30eb229..50b5d9a23609e 100644 --- a/packages/react-components/react-combobox/jest.config.js +++ b/packages/react-components/react-combobox/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-combobox/package.json b/packages/react-components/react-combobox/package.json index 91254c8848fe1..62c5d89d7e884 100644 --- a/packages/react-components/react-combobox/package.json +++ b/packages/react-components/react-combobox/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-combobox/project.json b/packages/react-components/react-combobox/project.json new file mode 100644 index 0000000000000..0093460be54ce --- /dev/null +++ b/packages/react-components/react-combobox/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-combobox", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-combobox/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-components/jest.config.js b/packages/react-components/react-components/jest.config.js index 97e86a16f06bf..58195affdda94 100644 --- a/packages/react-components/react-components/jest.config.js +++ b/packages/react-components/react-components/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-components/package.json b/packages/react-components/react-components/package.json index 4b26882a95bce..09dfabf1a7ebb 100644 --- a/packages/react-components/react-components/package.json +++ b/packages/react-components/react-components/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "storybook": "start-storybook", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-components/project.json b/packages/react-components/react-components/project.json new file mode 100644 index 0000000000000..d6a4bda5fced9 --- /dev/null +++ b/packages/react-components/react-components/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-components", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-components/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-conformance-griffel/jest.config.js b/packages/react-components/react-conformance-griffel/jest.config.js index 6023f4a9b558f..4b0df4c1265f5 100644 --- a/packages/react-components/react-conformance-griffel/jest.config.js +++ b/packages/react-components/react-conformance-griffel/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-conformance-griffel/package.json b/packages/react-components/react-conformance-griffel/package.json index 7bf3d251b7978..995092c46c164 100644 --- a/packages/react-components/react-conformance-griffel/package.json +++ b/packages/react-components/react-conformance-griffel/package.json @@ -10,13 +10,13 @@ }, "license": "MIT", "scripts": { - "build": "just-scripts build", + "build": "just-scripts build --module=cjs", "clean": "just-scripts clean", "code-style": "just-scripts code-style", "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-conformance-griffel/project.json b/packages/react-components/react-conformance-griffel/project.json new file mode 100644 index 0000000000000..b24c735e3ac11 --- /dev/null +++ b/packages/react-components/react-conformance-griffel/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-conformance-griffel", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-conformance-griffel/src", + "tags": ["vNext", "platform:node"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-context-selector/jest.config.js b/packages/react-components/react-context-selector/jest.config.js index 39023dd6182c6..e22e1602067f0 100644 --- a/packages/react-components/react-context-selector/jest.config.js +++ b/packages/react-components/react-context-selector/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-context-selector/package.json b/packages/react-components/react-context-selector/package.json index c1119b8e6446e..267eddf766c4a 100644 --- a/packages/react-components/react-context-selector/package.json +++ b/packages/react-components/react-context-selector/package.json @@ -18,7 +18,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-context-selector/project.json b/packages/react-components/react-context-selector/project.json new file mode 100644 index 0000000000000..70c4410ef2cd6 --- /dev/null +++ b/packages/react-components/react-context-selector/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-context-selector", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-context-selector/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-data-grid-react-window/jest.config.js b/packages/react-components/react-data-grid-react-window/jest.config.js index 7a70c69372d17..5131e27024693 100644 --- a/packages/react-components/react-data-grid-react-window/jest.config.js +++ b/packages/react-components/react-data-grid-react-window/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-data-grid-react-window/package.json b/packages/react-components/react-data-grid-react-window/package.json index 2879fdbdb5ce7..f405a3d7dbd17 100644 --- a/packages/react-components/react-data-grid-react-window/package.json +++ b/packages/react-components/react-data-grid-react-window/package.json @@ -18,8 +18,10 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", - "generate-api": "just-scripts generate-api" + "type-check": "just-scripts type-check", + "generate-api": "just-scripts generate-api", + "storybook": "start-storybook", + "start": "yarn storybook" }, "devDependencies": { "@fluentui/eslint-plugin": "*", diff --git a/packages/react-components/react-data-grid-react-window/project.json b/packages/react-components/react-data-grid-react-window/project.json new file mode 100644 index 0000000000000..acdf6009abf3f --- /dev/null +++ b/packages/react-components/react-data-grid-react-window/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-data-grid-react-window", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-data-grid-react-window/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-datepicker-compat/jest.config.js b/packages/react-components/react-datepicker-compat/jest.config.js index f3fbfc2d76eb2..df85c7c67199c 100644 --- a/packages/react-components/react-datepicker-compat/jest.config.js +++ b/packages/react-components/react-datepicker-compat/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-datepicker-compat/package.json b/packages/react-components/react-datepicker-compat/package.json index c3784d4583397..54623722254d8 100644 --- a/packages/react-components/react-datepicker-compat/package.json +++ b/packages/react-components/react-datepicker-compat/package.json @@ -21,7 +21,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api", "storybook": "start-storybook", "start": "yarn storybook" diff --git a/packages/react-components/react-datepicker-compat/project.json b/packages/react-components/react-datepicker-compat/project.json new file mode 100644 index 0000000000000..359776037eea5 --- /dev/null +++ b/packages/react-components/react-datepicker-compat/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-datepicker-compat", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-datepicker-compat/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-dialog/jest.config.js b/packages/react-components/react-dialog/jest.config.js index 67ac9847a41d8..cda1eb010bd00 100644 --- a/packages/react-components/react-dialog/jest.config.js +++ b/packages/react-components/react-dialog/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-dialog/package.json b/packages/react-components/react-dialog/package.json index 8afef259f4ecd..371cd255cabd8 100644 --- a/packages/react-components/react-dialog/package.json +++ b/packages/react-components/react-dialog/package.json @@ -23,7 +23,7 @@ "e2e": "cypress run --component", "e2e:local": "cypress open --component", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-dialog/project.json b/packages/react-components/react-dialog/project.json new file mode 100644 index 0000000000000..c07172639d30f --- /dev/null +++ b/packages/react-components/react-dialog/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-dialog", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-dialog/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-divider/jest.config.js b/packages/react-components/react-divider/jest.config.js index d18346b0729fd..b29368d0dba85 100644 --- a/packages/react-components/react-divider/jest.config.js +++ b/packages/react-components/react-divider/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-divider/package.json b/packages/react-components/react-divider/package.json index 375626460b7f7..69dd73abf314f 100644 --- a/packages/react-components/react-divider/package.json +++ b/packages/react-components/react-divider/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-divider/project.json b/packages/react-components/react-divider/project.json new file mode 100644 index 0000000000000..433706b29f26d --- /dev/null +++ b/packages/react-components/react-divider/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-divider", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-divider/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-drawer/jest.config.js b/packages/react-components/react-drawer/jest.config.js index 94e954e0a6995..52b2fca395599 100644 --- a/packages/react-components/react-drawer/jest.config.js +++ b/packages/react-components/react-drawer/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-drawer/package.json b/packages/react-components/react-drawer/package.json index c4f86950b9633..f7fab1bec8cf8 100644 --- a/packages/react-components/react-drawer/package.json +++ b/packages/react-components/react-drawer/package.json @@ -21,7 +21,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api", "storybook": "start-storybook", "start": "yarn storybook" diff --git a/packages/react-components/react-drawer/project.json b/packages/react-components/react-drawer/project.json new file mode 100644 index 0000000000000..eaf8f7a310a91 --- /dev/null +++ b/packages/react-components/react-drawer/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-drawer", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-drawer/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-drawer/tsconfig.cy.json b/packages/react-components/react-drawer/tsconfig.cy.json new file mode 100644 index 0000000000000..93a140885851d --- /dev/null +++ b/packages/react-components/react-drawer/tsconfig.cy.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "isolatedModules": false, + "types": ["node", "cypress", "cypress-storybook/cypress", "cypress-real-events"], + "lib": ["ES2019", "dom"] + }, + "include": ["**/*.cy.ts", "**/*.cy.tsx"] +} diff --git a/packages/react-components/react-drawer/tsconfig.json b/packages/react-components/react-drawer/tsconfig.json index 1941a041d46c1..1317f81620ca5 100644 --- a/packages/react-components/react-drawer/tsconfig.json +++ b/packages/react-components/react-drawer/tsconfig.json @@ -20,6 +20,9 @@ }, { "path": "./.storybook/tsconfig.json" + }, + { + "path": "./tsconfig.cy.json" } ] } diff --git a/packages/react-components/react-drawer/tsconfig.lib.json b/packages/react-components/react-drawer/tsconfig.lib.json index 6f90cf95c005b..e17f808c03933 100644 --- a/packages/react-components/react-drawer/tsconfig.lib.json +++ b/packages/react-components/react-drawer/tsconfig.lib.json @@ -16,7 +16,9 @@ "**/*.test.ts", "**/*.test.tsx", "**/*.stories.ts", - "**/*.stories.tsx" + "**/*.stories.tsx", + "**/*.cy.ts", + "**/*.cy.tsx" ], "include": ["./src/**/*.ts", "./src/**/*.tsx"] } diff --git a/packages/react-components/react-field/jest.config.js b/packages/react-components/react-field/jest.config.js index a5a95459b194a..0ef5201077b16 100644 --- a/packages/react-components/react-field/jest.config.js +++ b/packages/react-components/react-field/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-field/package.json b/packages/react-components/react-field/package.json index b988207c001cf..e13f8610502e8 100644 --- a/packages/react-components/react-field/package.json +++ b/packages/react-components/react-field/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "storybook": "start-storybook", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-field/project.json b/packages/react-components/react-field/project.json new file mode 100644 index 0000000000000..2ed90d44bbf9e --- /dev/null +++ b/packages/react-components/react-field/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-field", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-field/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-image/jest.config.js b/packages/react-components/react-image/jest.config.js index 6cc92ea82d5d4..d9e9d18201ef0 100644 --- a/packages/react-components/react-image/jest.config.js +++ b/packages/react-components/react-image/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-image/package.json b/packages/react-components/react-image/package.json index 1390a8a36949c..3877916061172 100644 --- a/packages/react-components/react-image/package.json +++ b/packages/react-components/react-image/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-image/project.json b/packages/react-components/react-image/project.json new file mode 100644 index 0000000000000..a08f5cefc2e35 --- /dev/null +++ b/packages/react-components/react-image/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-image", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-image/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-infobutton/jest.config.js b/packages/react-components/react-infobutton/jest.config.js index 57088d9b82184..6499546b2f00b 100644 --- a/packages/react-components/react-infobutton/jest.config.js +++ b/packages/react-components/react-infobutton/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-infobutton/package.json b/packages/react-components/react-infobutton/package.json index 1b65d37a9281c..8a8a036a5438d 100644 --- a/packages/react-components/react-infobutton/package.json +++ b/packages/react-components/react-infobutton/package.json @@ -19,8 +19,8 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api", - "type-check": "tsc -b tsconfig.json", "storybook": "start-storybook", "start": "yarn storybook" }, diff --git a/packages/react-components/react-infobutton/project.json b/packages/react-components/react-infobutton/project.json new file mode 100644 index 0000000000000..72eb25be14239 --- /dev/null +++ b/packages/react-components/react-infobutton/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-infobutton", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-infobutton/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-input/jest.config.js b/packages/react-components/react-input/jest.config.js index a7110dfad207e..899f55f659c91 100644 --- a/packages/react-components/react-input/jest.config.js +++ b/packages/react-components/react-input/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-input/package.json b/packages/react-components/react-input/package.json index cd18d5f5155e7..e65bb1b6eb8c9 100644 --- a/packages/react-components/react-input/package.json +++ b/packages/react-components/react-input/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-input/project.json b/packages/react-components/react-input/project.json new file mode 100644 index 0000000000000..8b03567479445 --- /dev/null +++ b/packages/react-components/react-input/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-input", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-input/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-label/jest.config.js b/packages/react-components/react-label/jest.config.js index 00d608e89df8b..48b7be27d9882 100644 --- a/packages/react-components/react-label/jest.config.js +++ b/packages/react-components/react-label/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-label/package.json b/packages/react-components/react-label/package.json index 1d373f4c6f4b2..5d420373aca4f 100644 --- a/packages/react-components/react-label/package.json +++ b/packages/react-components/react-label/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-label/project.json b/packages/react-components/react-label/project.json new file mode 100644 index 0000000000000..27005409cd4cb --- /dev/null +++ b/packages/react-components/react-label/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-label", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-label/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-link/jest.config.js b/packages/react-components/react-link/jest.config.js index ce3f6a490ef56..65c33fe23139f 100644 --- a/packages/react-components/react-link/jest.config.js +++ b/packages/react-components/react-link/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-link/package.json b/packages/react-components/react-link/package.json index 74d36ea041415..4813f4cdfba6e 100644 --- a/packages/react-components/react-link/package.json +++ b/packages/react-components/react-link/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-link/project.json b/packages/react-components/react-link/project.json new file mode 100644 index 0000000000000..4fe7a0ae7b995 --- /dev/null +++ b/packages/react-components/react-link/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-link", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-link/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-menu/jest.config.js b/packages/react-components/react-menu/jest.config.js index 89dddbb7628ac..1c01ebb68385b 100644 --- a/packages/react-components/react-menu/jest.config.js +++ b/packages/react-components/react-menu/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-menu/package.json b/packages/react-components/react-menu/package.json index 06d5e96770a38..5ef95ffdc8c5e 100644 --- a/packages/react-components/react-menu/package.json +++ b/packages/react-components/react-menu/package.json @@ -23,7 +23,7 @@ "start": "yarn storybook", "storybook": "start-storybook", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-menu/project.json b/packages/react-components/react-menu/project.json new file mode 100644 index 0000000000000..3e10ca761df0f --- /dev/null +++ b/packages/react-components/react-menu/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-menu", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-menu/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-migration-v0-v9/jest.config.js b/packages/react-components/react-migration-v0-v9/jest.config.js index 8e16e3dd157c9..a3c8ced670b15 100644 --- a/packages/react-components/react-migration-v0-v9/jest.config.js +++ b/packages/react-components/react-migration-v0-v9/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-migration-v0-v9/package.json b/packages/react-components/react-migration-v0-v9/package.json index 95c947d1071af..9a5b92f43e739 100644 --- a/packages/react-components/react-migration-v0-v9/package.json +++ b/packages/react-components/react-migration-v0-v9/package.json @@ -19,7 +19,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api", "storybook": "start-storybook", "start": "yarn storybook" diff --git a/packages/react-components/react-migration-v0-v9/project.json b/packages/react-components/react-migration-v0-v9/project.json new file mode 100644 index 0000000000000..ed600d4f3dd4d --- /dev/null +++ b/packages/react-components/react-migration-v0-v9/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-migration-v0-v9", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-migration-v0-v9/src", + "tags": ["vNext", "react-northstar", "platform:web"] +} diff --git a/packages/react-components/react-migration-v8-v9/jest.config.js b/packages/react-components/react-migration-v8-v9/jest.config.js index 92a09e8740001..26d9500a85d73 100644 --- a/packages/react-components/react-migration-v8-v9/jest.config.js +++ b/packages/react-components/react-migration-v8-v9/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-migration-v8-v9/package.json b/packages/react-components/react-migration-v8-v9/package.json index d6afce83382a9..a1b420b05f90e 100644 --- a/packages/react-components/react-migration-v8-v9/package.json +++ b/packages/react-components/react-migration-v8-v9/package.json @@ -18,7 +18,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api", "storybook": "start-storybook", "start": "yarn storybook" diff --git a/packages/react-components/react-migration-v8-v9/project.json b/packages/react-components/react-migration-v8-v9/project.json new file mode 100644 index 0000000000000..b47cb620f3c40 --- /dev/null +++ b/packages/react-components/react-migration-v8-v9/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-migration-v8-v9", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-migration-v8-v9/src", + "tags": ["vNext", "v8", "platform:web"] +} diff --git a/packages/react-components/react-overflow/jest.config.js b/packages/react-components/react-overflow/jest.config.js index 461774fbaae0d..20dcc6587aa7c 100644 --- a/packages/react-components/react-overflow/jest.config.js +++ b/packages/react-components/react-overflow/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-overflow/package.json b/packages/react-components/react-overflow/package.json index 3101833c92150..ef0fbfff7f0a0 100644 --- a/packages/react-components/react-overflow/package.json +++ b/packages/react-components/react-overflow/package.json @@ -23,7 +23,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-overflow/project.json b/packages/react-components/react-overflow/project.json new file mode 100644 index 0000000000000..4b88290f7c7af --- /dev/null +++ b/packages/react-components/react-overflow/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-overflow", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-overflow/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-persona/jest.config.js b/packages/react-components/react-persona/jest.config.js index 64fccb00346d1..712e60e5c7a23 100644 --- a/packages/react-components/react-persona/jest.config.js +++ b/packages/react-components/react-persona/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-persona/package.json b/packages/react-components/react-persona/package.json index ede64b3314e18..d7a386b15a297 100644 --- a/packages/react-components/react-persona/package.json +++ b/packages/react-components/react-persona/package.json @@ -19,7 +19,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "storybook": "start-storybook", "start": "yarn storybook", "generate-api": "just-scripts generate-api" diff --git a/packages/react-components/react-persona/project.json b/packages/react-components/react-persona/project.json new file mode 100644 index 0000000000000..7b544f07948e5 --- /dev/null +++ b/packages/react-components/react-persona/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-persona", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-persona/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-popover/jest.config.js b/packages/react-components/react-popover/jest.config.js index c6dd2288db246..40c219feb9d35 100644 --- a/packages/react-components/react-popover/jest.config.js +++ b/packages/react-components/react-popover/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-popover/package.json b/packages/react-components/react-popover/package.json index 7beafcd6142ec..63fecb78595e7 100644 --- a/packages/react-components/react-popover/package.json +++ b/packages/react-components/react-popover/package.json @@ -23,7 +23,7 @@ "e2e:local": "cypress open --component", "storybook": "start-storybook", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-popover/project.json b/packages/react-components/react-popover/project.json new file mode 100644 index 0000000000000..eeead8c32f8f3 --- /dev/null +++ b/packages/react-components/react-popover/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-popover", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-popover/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-portal-compat-context/jest.config.js b/packages/react-components/react-portal-compat-context/jest.config.js index 4f76964fc037d..823bba301d59c 100644 --- a/packages/react-components/react-portal-compat-context/jest.config.js +++ b/packages/react-components/react-portal-compat-context/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-portal-compat-context/package.json b/packages/react-components/react-portal-compat-context/package.json index d02bf5922f5f9..b266c73a34338 100644 --- a/packages/react-components/react-portal-compat-context/package.json +++ b/packages/react-components/react-portal-compat-context/package.json @@ -18,7 +18,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-portal-compat-context/project.json b/packages/react-components/react-portal-compat-context/project.json new file mode 100644 index 0000000000000..676e13c6d830b --- /dev/null +++ b/packages/react-components/react-portal-compat-context/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-portal-compat-context", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-portal-compat-context/src", + "tags": ["vNext", "ships-amd", "platform:web"] +} diff --git a/packages/react-components/react-portal-compat/jest.config.js b/packages/react-components/react-portal-compat/jest.config.js index be4da49608cee..b48a025681647 100644 --- a/packages/react-components/react-portal-compat/jest.config.js +++ b/packages/react-components/react-portal-compat/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-portal-compat/package.json b/packages/react-components/react-portal-compat/package.json index 33f92fe65f248..dce504d56a56a 100644 --- a/packages/react-components/react-portal-compat/package.json +++ b/packages/react-components/react-portal-compat/package.json @@ -21,7 +21,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-portal-compat/project.json b/packages/react-components/react-portal-compat/project.json new file mode 100644 index 0000000000000..cc87d2828b284 --- /dev/null +++ b/packages/react-components/react-portal-compat/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-portal-compat", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-portal-compat/src", + "tags": ["vNext", "ships-amd", "platform:web"] +} diff --git a/packages/react-components/react-portal/jest.config.js b/packages/react-components/react-portal/jest.config.js index dbf98b99ea189..a454a370e4b20 100644 --- a/packages/react-components/react-portal/jest.config.js +++ b/packages/react-components/react-portal/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-portal/package.json b/packages/react-components/react-portal/package.json index 2a5b688a72900..529fc9ba03467 100644 --- a/packages/react-components/react-portal/package.json +++ b/packages/react-components/react-portal/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-portal/project.json b/packages/react-components/react-portal/project.json new file mode 100644 index 0000000000000..eb5841cbe758d --- /dev/null +++ b/packages/react-components/react-portal/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-portal", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-portal/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-positioning/jest.config.js b/packages/react-components/react-positioning/jest.config.js index 2c4d600b111c2..1ce8f67b5babc 100644 --- a/packages/react-components/react-positioning/jest.config.js +++ b/packages/react-components/react-positioning/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-positioning/package.json b/packages/react-components/react-positioning/package.json index 49861655366ee..f536decf283ff 100644 --- a/packages/react-components/react-positioning/package.json +++ b/packages/react-components/react-positioning/package.json @@ -19,7 +19,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-positioning/project.json b/packages/react-components/react-positioning/project.json new file mode 100644 index 0000000000000..a9d421401c89c --- /dev/null +++ b/packages/react-components/react-positioning/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-positioning", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-positioning/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-progress/jest.config.js b/packages/react-components/react-progress/jest.config.js index f22d09ca37207..dececc1df5e54 100644 --- a/packages/react-components/react-progress/jest.config.js +++ b/packages/react-components/react-progress/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-progress/package.json b/packages/react-components/react-progress/package.json index 837453e7903f9..34badf9396808 100644 --- a/packages/react-components/react-progress/package.json +++ b/packages/react-components/react-progress/package.json @@ -19,7 +19,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "storybook": "start-storybook", "start": "yarn storybook", "generate-api": "just-scripts generate-api" diff --git a/packages/react-components/react-progress/project.json b/packages/react-components/react-progress/project.json new file mode 100644 index 0000000000000..3fa0e148b4e67 --- /dev/null +++ b/packages/react-components/react-progress/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-progress", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-progress/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-provider/jest.config.js b/packages/react-components/react-provider/jest.config.js index aa1e59a8f1e8c..9fd6cf0047dc7 100644 --- a/packages/react-components/react-provider/jest.config.js +++ b/packages/react-components/react-provider/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-provider/package.json b/packages/react-components/react-provider/package.json index 5e671b3fb5fe1..519c4d888d43c 100644 --- a/packages/react-components/react-provider/package.json +++ b/packages/react-components/react-provider/package.json @@ -21,7 +21,7 @@ "lint": "just-scripts lint", "storybook": "start-storybook", "start": "yarn storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-provider/project.json b/packages/react-components/react-provider/project.json new file mode 100644 index 0000000000000..1ef7befb12ec6 --- /dev/null +++ b/packages/react-components/react-provider/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-provider", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-provider/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-radio/jest.config.js b/packages/react-components/react-radio/jest.config.js index c8dc1fb78a935..1a3fd627eba61 100644 --- a/packages/react-components/react-radio/jest.config.js +++ b/packages/react-components/react-radio/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-radio/package.json b/packages/react-components/react-radio/package.json index 08ef0d00c413e..50fa13d66fd7b 100644 --- a/packages/react-components/react-radio/package.json +++ b/packages/react-components/react-radio/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-radio/project.json b/packages/react-components/react-radio/project.json new file mode 100644 index 0000000000000..beaf1c1b62a49 --- /dev/null +++ b/packages/react-components/react-radio/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-radio", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-radio/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-select/jest.config.js b/packages/react-components/react-select/jest.config.js index ce2b7e4228dec..45d576e27c3ee 100644 --- a/packages/react-components/react-select/jest.config.js +++ b/packages/react-components/react-select/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-select/package.json b/packages/react-components/react-select/package.json index 956f350f2175a..02048d83d4476 100644 --- a/packages/react-components/react-select/package.json +++ b/packages/react-components/react-select/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-select/project.json b/packages/react-components/react-select/project.json new file mode 100644 index 0000000000000..078912acaea2e --- /dev/null +++ b/packages/react-components/react-select/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-select", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-select/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-shared-contexts/jest.config.js b/packages/react-components/react-shared-contexts/jest.config.js index 232fc8fc07d0c..3be312e9f58db 100644 --- a/packages/react-components/react-shared-contexts/jest.config.js +++ b/packages/react-components/react-shared-contexts/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-shared-contexts/package.json b/packages/react-components/react-shared-contexts/package.json index 2e8e61501fc6a..38dd57d197d20 100644 --- a/packages/react-components/react-shared-contexts/package.json +++ b/packages/react-components/react-shared-contexts/package.json @@ -18,7 +18,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-shared-contexts/project.json b/packages/react-components/react-shared-contexts/project.json new file mode 100644 index 0000000000000..f984e719536f6 --- /dev/null +++ b/packages/react-components/react-shared-contexts/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-shared-contexts", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-shared-contexts/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-skeleton/jest.config.js b/packages/react-components/react-skeleton/jest.config.js index 0a32212b98d50..01c9bd9880643 100644 --- a/packages/react-components/react-skeleton/jest.config.js +++ b/packages/react-components/react-skeleton/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-skeleton/package.json b/packages/react-components/react-skeleton/package.json index 9f5804b2f026a..67ea33559877f 100644 --- a/packages/react-components/react-skeleton/package.json +++ b/packages/react-components/react-skeleton/package.json @@ -18,8 +18,8 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api", - "type-check": "tsc -b tsconfig.json", "storybook": "start-storybook", "start": "yarn storybook" }, diff --git a/packages/react-components/react-skeleton/project.json b/packages/react-components/react-skeleton/project.json new file mode 100644 index 0000000000000..c569f0b422168 --- /dev/null +++ b/packages/react-components/react-skeleton/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-skeleton", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-skeleton/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-slider/jest.config.js b/packages/react-components/react-slider/jest.config.js index f267c71f237f0..9bfa4424a726d 100644 --- a/packages/react-components/react-slider/jest.config.js +++ b/packages/react-components/react-slider/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-slider/package.json b/packages/react-components/react-slider/package.json index 4c02dcfae0d01..4a01468c6cad5 100644 --- a/packages/react-components/react-slider/package.json +++ b/packages/react-components/react-slider/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-slider/project.json b/packages/react-components/react-slider/project.json new file mode 100644 index 0000000000000..d8a76df7566b8 --- /dev/null +++ b/packages/react-components/react-slider/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-slider", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-slider/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-spinbutton/jest.config.js b/packages/react-components/react-spinbutton/jest.config.js index 4d703b5734aa2..fcfc47ac06901 100644 --- a/packages/react-components/react-spinbutton/jest.config.js +++ b/packages/react-components/react-spinbutton/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-spinbutton/package.json b/packages/react-components/react-spinbutton/package.json index de9ff0785c641..9d7ce0683dc9a 100644 --- a/packages/react-components/react-spinbutton/package.json +++ b/packages/react-components/react-spinbutton/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-spinbutton/project.json b/packages/react-components/react-spinbutton/project.json new file mode 100644 index 0000000000000..d8a9cb4734487 --- /dev/null +++ b/packages/react-components/react-spinbutton/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-spinbutton", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-spinbutton/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-spinner/jest.config.js b/packages/react-components/react-spinner/jest.config.js index 74cc94ecc6bb6..9ec64a3a4eb41 100644 --- a/packages/react-components/react-spinner/jest.config.js +++ b/packages/react-components/react-spinner/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-spinner/package.json b/packages/react-components/react-spinner/package.json index 1ab89c971fbbe..288dba0e825de 100644 --- a/packages/react-components/react-spinner/package.json +++ b/packages/react-components/react-spinner/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-spinner/project.json b/packages/react-components/react-spinner/project.json new file mode 100644 index 0000000000000..afe91496c90c4 --- /dev/null +++ b/packages/react-components/react-spinner/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-spinner", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-spinner/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-storybook-addon-codesandbox/jest.config.js b/packages/react-components/react-storybook-addon-codesandbox/jest.config.js index 6ebf7bca345a5..9f382de729f77 100644 --- a/packages/react-components/react-storybook-addon-codesandbox/jest.config.js +++ b/packages/react-components/react-storybook-addon-codesandbox/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-storybook-addon-codesandbox/package.json b/packages/react-components/react-storybook-addon-codesandbox/package.json index 982cf0add8ee8..eeddc6696a11d 100644 --- a/packages/react-components/react-storybook-addon-codesandbox/package.json +++ b/packages/react-components/react-storybook-addon-codesandbox/package.json @@ -18,7 +18,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-storybook-addon-codesandbox/project.json b/packages/react-components/react-storybook-addon-codesandbox/project.json new file mode 100644 index 0000000000000..ab828dc501123 --- /dev/null +++ b/packages/react-components/react-storybook-addon-codesandbox/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-storybook-addon-codesandbox", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-storybook-addon-codesandbox/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-storybook-addon/jest.config.js b/packages/react-components/react-storybook-addon/jest.config.js index a0e17fee3482d..934b27bf5e7f4 100644 --- a/packages/react-components/react-storybook-addon/jest.config.js +++ b/packages/react-components/react-storybook-addon/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-storybook-addon/package.json b/packages/react-components/react-storybook-addon/package.json index c3b7f725e53e2..2c6b3752849e5 100644 --- a/packages/react-components/react-storybook-addon/package.json +++ b/packages/react-components/react-storybook-addon/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-storybook-addon/project.json b/packages/react-components/react-storybook-addon/project.json new file mode 100644 index 0000000000000..785a0c7a65161 --- /dev/null +++ b/packages/react-components/react-storybook-addon/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-storybook-addon", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-storybook-addon/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-switch/jest.config.js b/packages/react-components/react-switch/jest.config.js index 7ab58b7b5e477..c9cfcaa473ac5 100644 --- a/packages/react-components/react-switch/jest.config.js +++ b/packages/react-components/react-switch/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-switch/package.json b/packages/react-components/react-switch/package.json index 552e8f0503f3b..a60db53eb6249 100644 --- a/packages/react-components/react-switch/package.json +++ b/packages/react-components/react-switch/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-switch/project.json b/packages/react-components/react-switch/project.json new file mode 100644 index 0000000000000..cfbcdd83a3922 --- /dev/null +++ b/packages/react-components/react-switch/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-switch", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-switch/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-table/jest.config.js b/packages/react-components/react-table/jest.config.js index 95fa209faa546..5130e2b301c8b 100644 --- a/packages/react-components/react-table/jest.config.js +++ b/packages/react-components/react-table/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-table/package.json b/packages/react-components/react-table/package.json index fa33ee8dffa21..4fe043cf4e77d 100644 --- a/packages/react-components/react-table/package.json +++ b/packages/react-components/react-table/package.json @@ -19,7 +19,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "storybook": "start-storybook", "start": "yarn storybook", "generate-api": "just-scripts generate-api" diff --git a/packages/react-components/react-table/project.json b/packages/react-components/react-table/project.json new file mode 100644 index 0000000000000..fb364f90e1820 --- /dev/null +++ b/packages/react-components/react-table/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-table", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-table/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-tabs/jest.config.js b/packages/react-components/react-tabs/jest.config.js index 82f3e969dc35f..2b6c0e1f40f3d 100644 --- a/packages/react-components/react-tabs/jest.config.js +++ b/packages/react-components/react-tabs/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-tabs/package.json b/packages/react-components/react-tabs/package.json index fefb89a87d0bd..144a9b92d1c55 100644 --- a/packages/react-components/react-tabs/package.json +++ b/packages/react-components/react-tabs/package.json @@ -20,7 +20,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-tabs/project.json b/packages/react-components/react-tabs/project.json new file mode 100644 index 0000000000000..c9324fe74e6c0 --- /dev/null +++ b/packages/react-components/react-tabs/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-tabs", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-tabs/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-tabster/jest.config.js b/packages/react-components/react-tabster/jest.config.js index 3459449cccb60..3be2362d289b0 100644 --- a/packages/react-components/react-tabster/jest.config.js +++ b/packages/react-components/react-tabster/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-tabster/package.json b/packages/react-components/react-tabster/package.json index 007f0e9fbd467..3644423cfdecf 100644 --- a/packages/react-components/react-tabster/package.json +++ b/packages/react-components/react-tabster/package.json @@ -20,7 +20,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-tabster/project.json b/packages/react-components/react-tabster/project.json new file mode 100644 index 0000000000000..32061e7cc2535 --- /dev/null +++ b/packages/react-components/react-tabster/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-tabster", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-tabster/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-tags/jest.config.js b/packages/react-components/react-tags/jest.config.js index 9b6d68d291110..9403817ca6e6f 100644 --- a/packages/react-components/react-tags/jest.config.js +++ b/packages/react-components/react-tags/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-tags/package.json b/packages/react-components/react-tags/package.json index 666963eb33889..d124eab8c7419 100644 --- a/packages/react-components/react-tags/package.json +++ b/packages/react-components/react-tags/package.json @@ -19,7 +19,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api", "storybook": "start-storybook", "start": "yarn storybook" diff --git a/packages/react-components/react-tags/project.json b/packages/react-components/react-tags/project.json new file mode 100644 index 0000000000000..60af273511f83 --- /dev/null +++ b/packages/react-components/react-tags/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-tags", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-tags/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-text/jest.config.js b/packages/react-components/react-text/jest.config.js index 8e3d3aaf2d53b..9c83cb2307675 100644 --- a/packages/react-components/react-text/jest.config.js +++ b/packages/react-components/react-text/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-text/package.json b/packages/react-components/react-text/package.json index 6b711de228dd4..a128b15f66bf8 100644 --- a/packages/react-components/react-text/package.json +++ b/packages/react-components/react-text/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-text/project.json b/packages/react-components/react-text/project.json new file mode 100644 index 0000000000000..388b82a4fda42 --- /dev/null +++ b/packages/react-components/react-text/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-text", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-text/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-textarea/jest.config.js b/packages/react-components/react-textarea/jest.config.js index d5255744ad5b2..a21aaacb770ff 100644 --- a/packages/react-components/react-textarea/jest.config.js +++ b/packages/react-components/react-textarea/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-textarea/package.json b/packages/react-components/react-textarea/package.json index 95840ab978bba..1f5104c96425c 100644 --- a/packages/react-components/react-textarea/package.json +++ b/packages/react-components/react-textarea/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-textarea/project.json b/packages/react-components/react-textarea/project.json new file mode 100644 index 0000000000000..6ca02c68108e1 --- /dev/null +++ b/packages/react-components/react-textarea/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-textarea", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-textarea/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-theme-sass/jest.config.js b/packages/react-components/react-theme-sass/jest.config.js index c87480044d94a..140a54bb865d5 100644 --- a/packages/react-components/react-theme-sass/jest.config.js +++ b/packages/react-components/react-theme-sass/jest.config.js @@ -14,7 +14,12 @@ module.exports = { }, testEnvironment: 'jest-environment-node-single-context', transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-theme-sass/package.json b/packages/react-components/react-theme-sass/package.json index 0bc2153bb305b..ae4746d60555e 100644 --- a/packages/react-components/react-theme-sass/package.json +++ b/packages/react-components/react-theme-sass/package.json @@ -19,7 +19,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-theme-sass/project.json b/packages/react-components/react-theme-sass/project.json new file mode 100644 index 0000000000000..f1ee6099e3c37 --- /dev/null +++ b/packages/react-components/react-theme-sass/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-theme-sass", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-theme-sass/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-theme/jest.config.js b/packages/react-components/react-theme/jest.config.js index ff0a627f6eb09..e017cf54652ca 100644 --- a/packages/react-components/react-theme/jest.config.js +++ b/packages/react-components/react-theme/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-theme/package.json b/packages/react-components/react-theme/package.json index b468745304754..8736b347b8048 100644 --- a/packages/react-components/react-theme/package.json +++ b/packages/react-components/react-theme/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "storybook": "start-storybook", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-theme/project.json b/packages/react-components/react-theme/project.json new file mode 100644 index 0000000000000..ec0688e19a07a --- /dev/null +++ b/packages/react-components/react-theme/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-theme", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-theme/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-toolbar/jest.config.js b/packages/react-components/react-toolbar/jest.config.js index f3bfbe21ad217..e04faf39e6f77 100644 --- a/packages/react-components/react-toolbar/jest.config.js +++ b/packages/react-components/react-toolbar/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-toolbar/package.json b/packages/react-components/react-toolbar/package.json index 0ccc602d03f39..e845dde8ce5b6 100644 --- a/packages/react-components/react-toolbar/package.json +++ b/packages/react-components/react-toolbar/package.json @@ -22,7 +22,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-toolbar/project.json b/packages/react-components/react-toolbar/project.json new file mode 100644 index 0000000000000..d5e87a56071a9 --- /dev/null +++ b/packages/react-components/react-toolbar/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-toolbar", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-toolbar/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-tooltip/jest.config.js b/packages/react-components/react-tooltip/jest.config.js index 3c184b0adf74f..f72a16a22ffda 100644 --- a/packages/react-components/react-tooltip/jest.config.js +++ b/packages/react-components/react-tooltip/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-tooltip/package.json b/packages/react-components/react-tooltip/package.json index 03fa6ec89b189..2105fb032b292 100644 --- a/packages/react-components/react-tooltip/package.json +++ b/packages/react-components/react-tooltip/package.json @@ -21,7 +21,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-tooltip/project.json b/packages/react-components/react-tooltip/project.json new file mode 100644 index 0000000000000..f6161de9e47cd --- /dev/null +++ b/packages/react-components/react-tooltip/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-tooltip", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-tooltip/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-tree/jest.config.js b/packages/react-components/react-tree/jest.config.js index 387ed673bf25f..35a8bd0263db2 100644 --- a/packages/react-components/react-tree/jest.config.js +++ b/packages/react-components/react-tree/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-tree/package.json b/packages/react-components/react-tree/package.json index d5225b4c4424d..fcb6cc5e109f1 100644 --- a/packages/react-components/react-tree/package.json +++ b/packages/react-components/react-tree/package.json @@ -20,8 +20,8 @@ "test": "jest --passWithNoTests", "e2e": "cypress run --component", "e2e:local": "cypress open --component", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api", - "type-check": "tsc -b tsconfig.json", "storybook": "start-storybook", "start": "yarn storybook" }, diff --git a/packages/react-components/react-tree/project.json b/packages/react-components/react-tree/project.json new file mode 100644 index 0000000000000..7842c9addec09 --- /dev/null +++ b/packages/react-components/react-tree/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-tree", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-tree/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/react-utilities/jest.config.js b/packages/react-components/react-utilities/jest.config.js index ad0713da7e648..0fdfd8b23fca4 100644 --- a/packages/react-components/react-utilities/jest.config.js +++ b/packages/react-components/react-utilities/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-utilities/package.json b/packages/react-components/react-utilities/package.json index 0085929f11e9f..0f34251cc1767 100644 --- a/packages/react-components/react-utilities/package.json +++ b/packages/react-components/react-utilities/package.json @@ -19,7 +19,7 @@ "just": "just-scripts", "lint": "just-scripts lint", "test": "jest --passWithNoTests", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/react-utilities/project.json b/packages/react-components/react-utilities/project.json new file mode 100644 index 0000000000000..e132da23b75e6 --- /dev/null +++ b/packages/react-components/react-utilities/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-utilities", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react-components/react-utilities/src", + "tags": ["vNext", "platform:web"], + "implicitDependencies": [] +} diff --git a/packages/react-components/react-virtualizer/jest.config.js b/packages/react-components/react-virtualizer/jest.config.js index 606059485bce0..12425e8bf7bde 100644 --- a/packages/react-components/react-virtualizer/jest.config.js +++ b/packages/react-components/react-virtualizer/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/react-virtualizer/package.json b/packages/react-components/react-virtualizer/package.json index 70d3efb0e767e..c922d69716ffb 100644 --- a/packages/react-components/react-virtualizer/package.json +++ b/packages/react-components/react-virtualizer/package.json @@ -20,8 +20,8 @@ "test": "jest --passWithNoTests", "storybook": "start-storybook", "start": "yarn storybook", - "generate-api": "just-scripts generate-api", - "type-check": "tsc -b tsconfig.json" + "type-check": "just-scripts type-check", + "generate-api": "just-scripts generate-api" }, "devDependencies": { "@fluentui/eslint-plugin": "*", diff --git a/packages/react-components/react-virtualizer/project.json b/packages/react-components/react-virtualizer/project.json new file mode 100644 index 0000000000000..cbd66c7675e16 --- /dev/null +++ b/packages/react-components/react-virtualizer/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/react-virtualizer", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/react-virtualizer/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-components/theme-designer/jest.config.js b/packages/react-components/theme-designer/jest.config.js index 37c42ffb59b17..0ea14dc714737 100644 --- a/packages/react-components/theme-designer/jest.config.js +++ b/packages/react-components/theme-designer/jest.config.js @@ -13,7 +13,12 @@ module.exports = { }, }, transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': [ + '@swc/jest', + { + swcrc: false, + }, + ], }, coverageDirectory: './coverage', setupFilesAfterEnv: ['./config/tests.js'], diff --git a/packages/react-components/theme-designer/package.json b/packages/react-components/theme-designer/package.json index 70dad9920718f..34833a9236d65 100644 --- a/packages/react-components/theme-designer/package.json +++ b/packages/react-components/theme-designer/package.json @@ -22,7 +22,7 @@ "start": "yarn storybook", "test": "jest --passWithNoTests", "storybook": "start-storybook", - "type-check": "tsc -b tsconfig.json", + "type-check": "just-scripts type-check", "generate-api": "just-scripts generate-api" }, "devDependencies": { diff --git a/packages/react-components/theme-designer/project.json b/packages/react-components/theme-designer/project.json new file mode 100644 index 0000000000000..e24372ad484b1 --- /dev/null +++ b/packages/react-components/theme-designer/project.json @@ -0,0 +1,8 @@ +{ + "name": "@fluentui/theme-designer", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "sourceRoot": "packages/react-components/theme-designer/src", + "tags": ["vNext", "platform:web"] +} diff --git a/packages/react-conformance/project.json b/packages/react-conformance/project.json new file mode 100644 index 0000000000000..7310502458562 --- /dev/null +++ b/packages/react-conformance/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/react-conformance", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [], + "tags": ["v8", "platform:node"] +} diff --git a/packages/react-conformance/src/isConformant.ts b/packages/react-conformance/src/isConformant.ts index 734e1cb009082..2711019ebf321 100644 --- a/packages/react-conformance/src/isConformant.ts +++ b/packages/react-conformance/src/isConformant.ts @@ -8,14 +8,28 @@ import { getComponentDoc } from './utils/getComponentDoc'; export function isConformant(...testInfo: Partial>[]) { const mergedOptions = merge(...testInfo); - const { componentPath, displayName, disabledTests = [], extraTests, tsconfigDir } = mergedOptions; + + const { + componentPath, + displayName, + disabledTests = [], + extraTests, + tsConfig, + // eslint-disable-next-line deprecation/deprecation + tsconfigDir, + } = mergedOptions; + + const mergedTsConfig = { + configDir: tsConfig?.configDir ?? tsconfigDir, + configName: tsConfig?.configName, + }; describe('isConformant', () => { if (!fs.existsSync(componentPath)) { throw new Error(`Path ${componentPath} does not exist`); } - const tsProgram = createTsProgram(componentPath, tsconfigDir); + const tsProgram = createTsProgram(componentPath, mergedTsConfig); const components = getComponentDoc(componentPath, tsProgram); const mainComponents = components.filter(comp => comp.displayName === displayName); diff --git a/packages/react-conformance/src/types.ts b/packages/react-conformance/src/types.ts index 0abb94ea054c5..5e950e4e3af70 100644 --- a/packages/react-conformance/src/types.ts +++ b/packages/react-conformance/src/types.ts @@ -92,10 +92,16 @@ export interface IsConformantOptions { primarySlot?: keyof TProps | 'root'; /** + * @deprecated - use `tsConfig` property + * * Test will load the first tsconfig.json file working upwards from `tsconfigDir`. * @defaultvalue the directory of the component being tested */ tsconfigDir?: string; + /** + * replaces tsconfigDir + */ + tsConfig?: Partial<{ configName: string; configDir: string }>; } export type ConformanceTest = ( diff --git a/packages/react-conformance/src/utils/createTsProgram.ts b/packages/react-conformance/src/utils/createTsProgram.ts index c2fb35a59d1d4..4f78b70e5ff28 100644 --- a/packages/react-conformance/src/utils/createTsProgram.ts +++ b/packages/react-conformance/src/utils/createTsProgram.ts @@ -4,19 +4,44 @@ import * as ts from 'typescript'; let program: ts.Program; +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +function temporaryTsconfigV9resolve(tsconfigPath: string | undefined) { + if (!tsconfigPath) { + return; + } + + const tsConfigDir = path.dirname(tsconfigPath); + const solutionLibConfigPath = path.join(tsConfigDir, 'tsconfig.lib.json'); + const hasSolutionConfig = fs.existsSync(solutionLibConfigPath); + if (hasSolutionConfig) { + return solutionLibConfigPath; + } + + return tsconfigPath; +} + /** - * Creates a cached TS Program. + * Creates a ~cached~ TS Program. + * @remarks this will be never cached with current use/setup as jest creates this for every it/describe() block 🐌 */ -export function createTsProgram(componentPath: string, tsconfigDir?: string): ts.Program { +export function createTsProgram( + sourcePath: string, + options: Partial<{ configDir: string; configName: string }> = {}, +): ts.Program { + const { configName, configDir } = options; if (!program) { // Calling parse() from react-docgen-typescript would create a new ts.Program for every component, // which can take multiple seconds in a large project. For better performance, we create a single // ts.Program per package and pass it to parseWithProgramProvider(). - const tsconfigPath = ts.findConfigFile(tsconfigDir ?? componentPath, fs.existsSync); + // const tsconfigPath = ts.findConfigFile(configDir ?? sourcePath, fs.existsSync, configName); + const tsconfigPath = temporaryTsconfigV9resolve( + ts.findConfigFile(configDir ?? sourcePath, fs.existsSync, configName), + ); if (!tsconfigPath) { - throw new Error('Cannot find tsconfig.json'); + throw new Error(`Cannot find ${configName}`); } const compilerOptions = getCompilerOptions(tsconfigPath); @@ -33,9 +58,9 @@ export function createTsProgram(componentPath: string, tsconfigDir?: string): ts program = ts.createProgram([rootFile], compilerOptions); } - if (!program.getSourceFile(componentPath)) { + if (!program.getSourceFile(sourcePath)) { // See earlier comment for why it's handled this way (can reconsider if it becomes a problem) - throw new Error(`Component file "${componentPath}" does not appear to be referenced from the project index file`); + throw new Error(`Component file "${sourcePath}" does not appear to be referenced from the project index file`); } return program; diff --git a/packages/react-date-time/project.json b/packages/react-date-time/project.json new file mode 100644 index 0000000000000..5e68499a309b0 --- /dev/null +++ b/packages/react-date-time/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/react-date-time", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/react-docsite-components/project.json b/packages/react-docsite-components/project.json new file mode 100644 index 0000000000000..731f1165c663f --- /dev/null +++ b/packages/react-docsite-components/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/react-docsite-components", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/react-examples/project.json b/packages/react-examples/project.json new file mode 100644 index 0000000000000..c72e1bc862748 --- /dev/null +++ b/packages/react-examples/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/react-examples", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/react-experiments/project.json b/packages/react-experiments/project.json new file mode 100644 index 0000000000000..8141f66a23c59 --- /dev/null +++ b/packages/react-experiments/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/react-experiments", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/react-file-type-icons/project.json b/packages/react-file-type-icons/project.json new file mode 100644 index 0000000000000..ed2e83172f5c8 --- /dev/null +++ b/packages/react-file-type-icons/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/react-file-type-icons", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/react-focus/project.json b/packages/react-focus/project.json new file mode 100644 index 0000000000000..24f57da6a93d5 --- /dev/null +++ b/packages/react-focus/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/react-focus", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/react-hooks/project.json b/packages/react-hooks/project.json new file mode 100644 index 0000000000000..a90e9e5ee9756 --- /dev/null +++ b/packages/react-hooks/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/react-hooks", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/react-icon-provider/project.json b/packages/react-icon-provider/project.json new file mode 100644 index 0000000000000..2e3089369ecfb --- /dev/null +++ b/packages/react-icon-provider/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/react-icon-provider", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/react-icons-mdl2-branded/project.json b/packages/react-icons-mdl2-branded/project.json new file mode 100644 index 0000000000000..ae09abb62633e --- /dev/null +++ b/packages/react-icons-mdl2-branded/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/react-icons-mdl2-branded", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/react-icons-mdl2/project.json b/packages/react-icons-mdl2/project.json new file mode 100644 index 0000000000000..f414da462b4eb --- /dev/null +++ b/packages/react-icons-mdl2/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/react-icons-mdl2", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/react-monaco-editor/project.json b/packages/react-monaco-editor/project.json new file mode 100644 index 0000000000000..45a202544282d --- /dev/null +++ b/packages/react-monaco-editor/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/react-monaco-editor", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/react-window-provider/project.json b/packages/react-window-provider/project.json new file mode 100644 index 0000000000000..4ff5947d89201 --- /dev/null +++ b/packages/react-window-provider/project.json @@ -0,0 +1,6 @@ +{ + "name": "@fluentui/react-window-provider", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "implicitDependencies": [] +} diff --git a/packages/react/.eslintrc.js b/packages/react/.eslintrc.js deleted file mode 100644 index f90777356cd34..0000000000000 --- a/packages/react/.eslintrc.js +++ /dev/null @@ -1,21 +0,0 @@ -// @ts-check -const configHelpers = require('@fluentui/eslint-plugin/src/utils/configHelpers'); - -/** @type {import("eslint").Linter.Config} */ -module.exports = { - extends: ['plugin:@fluentui/eslint-plugin/react--legacy'], - plugins: ['@fluentui'], - root: true, - rules: { - '@fluentui/ban-imports': ['error', { pathRegex: '^(\\.\\./)+Styling$', names: ['FontSizes'] }], - '@typescript-eslint/no-explicit-any': 'off', - }, - overrides: [ - { - files: [...configHelpers.devDependenciesFiles, 'src/common/{shallowUntilTarget,testUtilities}.ts'], - rules: { - 'import/no-extraneous-dependencies': ['error', { packageDir: ['.', configHelpers.findGitRoot()] }], - }, - }, - ], -}; diff --git a/packages/react/.eslintrc.json b/packages/react/.eslintrc.json new file mode 100644 index 0000000000000..ea772989a9783 --- /dev/null +++ b/packages/react/.eslintrc.json @@ -0,0 +1,14 @@ +{ + "extends": ["plugin:@fluentui/eslint-plugin/react--legacy"], + "root": true, + "rules": { + "@fluentui/ban-imports": [ + "error", + { + "pathRegex": "^(\\.\\./)+Styling$", + "names": ["FontSizes"] + } + ], + "@typescript-eslint/no-explicit-any": "off" + } +} diff --git a/packages/react/.npmignore b/packages/react/.npmignore index 7fc556fac8db2..a3d73a59d4901 100644 --- a/packages/react/.npmignore +++ b/packages/react/.npmignore @@ -26,6 +26,8 @@ src/**/* !src/**/*.types.ts temp tsconfig.json +tsconfig.lib.json +tsconfig.spec.json tsd.json tslint.json typings diff --git a/packages/react/jest.config.js b/packages/react/jest.config.js index c16374ebe05fe..6a0cc7d4a2ac5 100644 --- a/packages/react/jest.config.js +++ b/packages/react/jest.config.js @@ -1,6 +1,11 @@ const { createV8Config: createConfig } = require('@fluentui/scripts-jest'); const config = createConfig({ + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + }, + }, setupFiles: ['./config/tests.js'], snapshotSerializers: ['@fluentui/jest-serializer-merge-styles'], }); diff --git a/packages/react/project.json b/packages/react/project.json new file mode 100644 index 0000000000000..375884761d1e0 --- /dev/null +++ b/packages/react/project.json @@ -0,0 +1,7 @@ +{ + "name": "@fluentui/react", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/react/src", + "implicitDependencies": [] +} diff --git a/packages/react/src/common/shallowUntilTarget.ts b/packages/react/src/common/shallowUntilTarget.ts deleted file mode 100644 index 4641925afbf68..0000000000000 --- a/packages/react/src/common/shallowUntilTarget.ts +++ /dev/null @@ -1,68 +0,0 @@ -import * as React from 'react'; -import { shallow, ShallowWrapper } from 'enzyme'; - -/** - * Duplicated enzyme's ShallowRendererProps - * - * @internal - */ -export interface IShallowRendererProps { - lifecycleExperimental?: boolean; - disableLifecycleMethods?: boolean; -} - -/** - * ShallowUntilTarget Interface - * - * @internal - */ -export interface IShallowUntilTarget { - maxTries: number; - shallowOptions: IShallowRendererProps; -} - -/** - * An extention of enzyme's shallow function which will fail to work - * with decorated components and/or components using the styled() function. - * This function allows you to pass a 'target' component (e.g. ComponentBase) - * and keep running shallow on each child component till a match is found. - * - * @public - */ -export function shallowUntilTarget( - componentInstance: React.ReactElement

, - TargetComponent: string, - options: IShallowUntilTarget = { - maxTries: 10, - shallowOptions: {}, - }, -): ShallowWrapper { - const { maxTries, shallowOptions } = options; - - let root = shallow(componentInstance, shallowOptions); - let rootType = root.type(); - - if (typeof rootType === 'string' || rootType.toString().indexOf(TargetComponent) !== -1) { - // Default shallow() - // If type() is a string then it's a DOM Node. - // If it were wrapped, it would be a React component. - return root; - } - - for (let tries = 1; tries <= maxTries; tries++) { - // Check for target as a string to avoid conflicts - // with decoratored components name - if (rootType.toString().indexOf(TargetComponent) !== -1) { - // Now that we found the target component, render it. - return root.first().shallow(shallowOptions); - } - // Unwrap the next component in the hierarchy. - root = root.first().shallow(shallowOptions); - rootType = root.type(); - } - - throw new Error( - `Could not find ${TargetComponent} in React instance: ${componentInstance}; - gave up after ${maxTries} tries`, - ); -} diff --git a/packages/react/src/components/DetailsList/DetailsList.test.tsx b/packages/react/src/components/DetailsList/DetailsList.test.tsx index d2e40b859ee35..9f82b65c97542 100644 --- a/packages/react/src/components/DetailsList/DetailsList.test.tsx +++ b/packages/react/src/components/DetailsList/DetailsList.test.tsx @@ -68,18 +68,17 @@ function customColumnDivider( describe('DetailsList', () => { let spy: jest.SpyInstance; - beforeAll(() => { + beforeEach(() => { /* eslint-disable-next-line @typescript-eslint/no-empty-function */ spy = jest.spyOn(window, 'scrollTo').mockImplementation(() => {}); + resetIds(); }); afterAll(() => { spy.mockRestore(); }); - beforeEach(() => { - resetIds(); - }); + // beforeEach(() => {}); afterEach(() => { if ((setTimeout as unknown as jest.Mock).mock) { diff --git a/packages/react/src/components/DetailsList/DetailsListV2.test.tsx b/packages/react/src/components/DetailsList/DetailsListV2.test.tsx index da42473541867..9766f957b55d8 100644 --- a/packages/react/src/components/DetailsList/DetailsListV2.test.tsx +++ b/packages/react/src/components/DetailsList/DetailsListV2.test.tsx @@ -77,7 +77,8 @@ const groupProps: IDetailsGroupRenderProps = { */ describe('DetailsListV2', () => { let spy: jest.SpyInstance; - beforeAll(() => { + + beforeEach(() => { /* eslint-disable-next-line @typescript-eslint/no-empty-function */ spy = jest.spyOn(window, 'scrollTo').mockImplementation(() => {}); }); diff --git a/packages/react/src/components/Dialog/Dialog.deprecated.test.tsx b/packages/react/src/components/Dialog/Dialog.deprecated.test.tsx index 57c18ad1942db..07c6f06799406 100644 --- a/packages/react/src/components/Dialog/Dialog.deprecated.test.tsx +++ b/packages/react/src/components/Dialog/Dialog.deprecated.test.tsx @@ -6,24 +6,25 @@ import { resetIds, setWarningCallback } from '../../Utilities'; import { DialogBase } from './Dialog.base'; describe('Dialog deprecated props', () => { - beforeEach(() => { - resetIds(); + beforeAll(() => { + // eslint-disable-next-line @typescript-eslint/no-empty-function + const noop = () => {}; + // Prevent warn deprecations from failing test + setWarningCallback(noop); }); - afterAll(() => { + beforeEach(() => { resetIds(); - }); - - beforeAll(() => { - // Prevent warn deprecations from failing test - setWarningCallback(() => { - /* no-op */ - }); (ReactDOM.createPortal as any) = jest.fn((element, node) => { return element; }); }); + afterAll(() => { + setWarningCallback(); + // resetIds(); + }); + afterEach(() => { (ReactDOM.createPortal as any).mockClear(); jest.useRealTimers(); diff --git a/packages/react/src/components/Dialog/Dialog.test.tsx b/packages/react/src/components/Dialog/Dialog.test.tsx index 1d5b969ac78d7..83186263f8f3a 100644 --- a/packages/react/src/components/Dialog/Dialog.test.tsx +++ b/packages/react/src/components/Dialog/Dialog.test.tsx @@ -14,11 +14,6 @@ describe('Dialog', () => { resetIds(); }); - afterEach(() => { - setWarningCallback(); - jest.useRealTimers(); - }); - afterAll(() => { resetIds(); }); @@ -86,11 +81,14 @@ describe('Dialog', () => { expect(queryByRole('dialog')).toBeFalsy(); expect(onDismissed).toHaveBeenCalledTimes(1); + + jest.useRealTimers(); }); it('deprecated isOpen controls open state of the dialog', () => { // suppress deprecation warning as error - setWarningCallback(() => undefined); + // eslint-disable-next-line @typescript-eslint/no-empty-function + setWarningCallback(() => {}); jest.useFakeTimers(); const onDismissed = jest.fn(); @@ -106,6 +104,9 @@ describe('Dialog', () => { expect(queryByRole('dialog')).toBeFalsy(); expect(onDismissed).toHaveBeenCalledTimes(1); + + jest.useRealTimers(); + setWarningCallback(); }); it('Properly attaches auto-generated aria attributes IDs', () => { @@ -154,7 +155,7 @@ describe('Dialog', () => {