diff --git a/change/@fluentui-web-components-974b7e3c-cb82-4399-8daf-f58a9a1b23ed.json b/change/@fluentui-web-components-974b7e3c-cb82-4399-8daf-f58a9a1b23ed.json new file mode 100644 index 0000000000000..9581a88f06183 --- /dev/null +++ b/change/@fluentui-web-components-974b7e3c-cb82-4399-8daf-f58a9a1b23ed.json @@ -0,0 +1,7 @@ +{ + "type": "none", + "comment": "chore: setup typescript 4.7 for web-components package", + "packageName": "@fluentui/web-components", + "email": "martinhochel@microsoft.com", + "dependentChangeType": "none" +} diff --git a/package.json b/package.json index a4f48ec3d07a4..6937f63f8f5b7 100644 --- a/package.json +++ b/package.json @@ -219,8 +219,8 @@ "express": "4.17.1", "extract-comments": "1.1.0", "file-loader": "6.2.0", - "fork-ts-checker-webpack-plugin": "6.1.0", "find-free-port": "2.0.0", + "fork-ts-checker-webpack-plugin": "6.1.0", "fs-extra": "8.1.0", "geckodriver": "3.0.2", "glob": "7.2.0", @@ -297,7 +297,7 @@ "through2": "4.0.2", "tmp": "0.2.1", "ts-jest": "26.5.6", - "ts-loader": "9.3.1", + "ts-loader": "9.4.2", "ts-node": "10.9.1", "tsconfig-paths": "4.1.0", "tsconfig-paths-webpack-plugin": "4.0.0", @@ -330,7 +330,9 @@ "typings" ], "nohoist": [ - "@fluentui/web-components/@storybook/html" + "@fluentui/web-components/@storybook/html", + "@fluentui/web-components/@microsoft/api-extractor", + "@fluentui/web-components/@microsoft/api-extractor/**" ] }, "resolutions": { diff --git a/packages/web-components/.eslintrc.js b/packages/web-components/.eslintrc.js deleted file mode 100644 index d3118d7db8188..0000000000000 --- a/packages/web-components/.eslintrc.js +++ /dev/null @@ -1,57 +0,0 @@ -module.exports = { - root: true, - parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint', 'import'], - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/eslint-recommended', - 'plugin:@typescript-eslint/recommended', - 'prettier', - ], - settings: { - react: { - version: 'latest', - }, - }, - rules: { - 'no-extra-boolean-cast': 'off', - 'no-prototype-builtins': 'off', - 'no-fallthrough': 'off', - 'no-unexpected-multiline': 'off', - 'import/order': 'error', - 'sort-imports': [ - 'error', - { - ignoreCase: true, - ignoreDeclarationSort: true, - }, - ], - 'comma-dangle': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/no-use-before-define': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/camelcase': 'off', - '@typescript-eslint/no-inferrable-types': 'off', - '@typescript-eslint/no-unused-vars': ['warn', { args: 'none' }], - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/naming-convention': [ - 'error', - { - selector: 'default', - format: ['UPPER_CASE', 'camelCase', 'PascalCase'], - leadingUnderscore: 'allow', - }, - { - selector: 'property', - format: null, // disable for property names because of our foo__expanded convention for JSS - // TODO: I think we can come up with a regex that ignores variables with __ in them - }, - { - selector: 'variable', - format: null, // disable for variable names because of our foo__expanded convention for JSS - // TODO: I think we can come up with a regex that ignores variables with __ in them - }, - ], - }, -}; diff --git a/packages/web-components/.eslintrc.json b/packages/web-components/.eslintrc.json new file mode 100644 index 0000000000000..ca5b46cb7c91c --- /dev/null +++ b/packages/web-components/.eslintrc.json @@ -0,0 +1,62 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint", "import"], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended", + "prettier" + ], + "settings": { + "react": { + "version": "latest" + } + }, + "rules": { + "no-extra-boolean-cast": "off", + "no-prototype-builtins": "off", + "no-fallthrough": "off", + "no-unexpected-multiline": "off", + "import/order": "error", + "sort-imports": [ + "error", + { + "ignoreCase": true, + "ignoreDeclarationSort": true + } + ], + "comma-dangle": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-use-before-define": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/camelcase": "off", + "@typescript-eslint/no-inferrable-types": "off", + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "args": "none" + } + ], + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/naming-convention": [ + "error", + { + "selector": "default", + "format": ["UPPER_CASE", "camelCase", "PascalCase"], + "leadingUnderscore": "allow" + }, + { + "selector": "property", + "format": null // disable for property names because of our foo__expanded convention for JSS + // TODO: I think we can come up with a regex that ignores variables with __ in them + }, + { + "selector": "variable", + "format": null // disable for variable names because of our foo__expanded convention for JSS + // TODO: I think we can come up with a regex that ignores variables with __ in them + } + ] + } +} diff --git a/packages/web-components/.storybook/main.js b/packages/web-components/.storybook/main.js index 243eb50b8bdd4..aed1da6dba780 100644 --- a/packages/web-components/.storybook/main.js +++ b/packages/web-components/.storybook/main.js @@ -1,5 +1,7 @@ const CircularDependencyPlugin = require('circular-dependency-plugin'); +const tsBin = require.resolve('typescript'); + module.exports = { stories: ['../src/**/*.stories.@(ts|mdx)'], staticDirs: ['../public'], @@ -21,16 +23,29 @@ module.exports = { }, ], webpackFinal: async config => { - config.module.rules.push({ - test: /\.ts$/, - use: [ - { - loader: 'ts-loader', + config.resolve.extensionAlias = { + '.js': ['.ts', '.js'], + '.mjs': ['.mts', '.mjs'], + }; + config.module.rules.push( + { + test: /\.([cm]?ts|tsx)$/, + loader: 'ts-loader', + sideEffects: true, + options: { + transpileOnly: true, + compiler: tsBin, }, - ], - }); - config.resolve.extensions.push('.ts'); - config.resolve.extensions.push('.js'); + }, + // Following config is needed to be able to resolve @storybook packages imported in specified files that don't ship valid ESM + // It also enables importing other packages without proper ESM extensions, but that should be avoided ! + // @see https://webpack.js.org/configuration/module/#resolvefullyspecified + { + test: /\.storybook\/.+\.m?js/, + resolve: { fullySpecified: false }, + }, + ); + config.resolve.extensions.push(...['.ts', '.js']); config.plugins.push( new CircularDependencyPlugin({ exclude: /node_modules/, diff --git a/packages/web-components/.storybook/manager.js b/packages/web-components/.storybook/manager.js index a46a132161789..5dcaa431bdecd 100644 --- a/packages/web-components/.storybook/manager.js +++ b/packages/web-components/.storybook/manager.js @@ -1,5 +1,5 @@ import { addons } from '@storybook/addons'; -import webcomponentsTheme from './theme'; +import webcomponentsTheme from './theme.mjs'; addons.setConfig({ previewTabs: { diff --git a/packages/web-components/.storybook/preview.js b/packages/web-components/.storybook/preview.mjs similarity index 78% rename from packages/web-components/.storybook/preview.js rename to packages/web-components/.storybook/preview.mjs index c1340a5c49bde..3fb4a4e08285c 100644 --- a/packages/web-components/.storybook/preview.js +++ b/packages/web-components/.storybook/preview.mjs @@ -1,6 +1,6 @@ -import * as Fluent from '../src/index-rollup'; -import webcomponentsTheme from './theme'; -import { switchTheme } from '../public/theme-switch'; +import * as Fluent from '../src/index-rollup.ts'; +import webcomponentsTheme from './theme.mjs'; +import { switchTheme } from '../public/theme-switch.ts'; Fluent; diff --git a/packages/web-components/.storybook/theme.js b/packages/web-components/.storybook/theme.mjs similarity index 100% rename from packages/web-components/.storybook/theme.js rename to packages/web-components/.storybook/theme.mjs diff --git a/packages/web-components/karma.conf.js b/packages/web-components/karma.conf.cjs similarity index 98% rename from packages/web-components/karma.conf.js rename to packages/web-components/karma.conf.cjs index 71091978d65ac..50321485c4632 100644 --- a/packages/web-components/karma.conf.js +++ b/packages/web-components/karma.conf.cjs @@ -46,7 +46,7 @@ module.exports = function (config) { ], files: [`dist/esm/__test__/${setup}.js`], preprocessors: { - [`dist/esm/__test__/${setup}.js`]: ['webpack', 'sourcemap'], + [`dist/esm/__test__/${setup}.cjs`]: ['webpack', 'sourcemap'], }, webpackMiddleware: { // webpack-dev-middleware configuration diff --git a/packages/web-components/package.json b/packages/web-components/package.json index 341fcfb0cbef5..c9606f6860a85 100644 --- a/packages/web-components/package.json +++ b/packages/web-components/package.json @@ -15,13 +15,16 @@ "bugs": { "url": "https://github.com/Microsoft/fluentui/issues/new/choose" }, + "type": "module", "main": "dist/esm/index.js", "types": "dist/web-components.d.ts", "unpkg": "dist/web-components.min.js", "scripts": { + "tsc": "tsc", + "api-extractor": "api-extractor", "clean": "node ./build/clean.js dist", "doc": "api-extractor run --local", - "doc:ci": "api-extractor run --local", + "doc:ci": "yarn doc", "build": "tsc -p ./tsconfig.json && rollup -c && yarn doc", "dev": "tsc -p ./tsconfig.json -w", "tdd": "yarn dev & yarn test-chrome:watch", @@ -37,14 +40,14 @@ "test": "yarn doc:ci && yarn test-chrome:verbose", "test-node": "mocha --reporter min --exit dist/esm/__test__/setup-node.js './dist/esm/**/*.spec.js'", "test-node:verbose": "mocha --reporter spec --exit dist/esm/__test__/setup-node.js './dist/esm/**/*.spec.js'", - "test-chrome": "karma start karma.conf.js --browsers=ChromeHeadlessOpt --single-run --coverage", - "test-chrome:verbose": "karma start karma.conf.js --browsers=ChromeHeadlessOpt --single-run --coverage --reporter=mocha", - "test-chrome:watch": "karma start karma.conf.js --browsers=ChromeHeadlessOpt --coverage --watch-extensions js", - "test-chrome:debugger": "karma start karma.conf.js --browsers=ChromeDebugging", - "test-chrome:verbose:watch": "karma start karma.conf.js --browsers=ChromeHeadlessOpt --coverage --watch-extensions js --reporter=mocha ", - "test-chrome:verbose:debugger": "karma start karma.conf.js --browsers=ChromeDebugging --reporter=mocha", - "test-firefox": "karma start karma.conf.js --browsers=FirefoxHeadless --single-run --coverage", - "test-firefox:verbose": "karma start karma.conf.js --browsers=FirefoxHeadless --single-run --coverage --reporter=mocha" + "test-chrome": "karma start karma.conf.cjs --browsers=ChromeHeadlessOpt --single-run --coverage", + "test-chrome:verbose": "karma start karma.conf.cjs --no-fail-on-empty-test-suite --browsers=ChromeHeadlessOpt --single-run --coverage --reporter=mocha", + "test-chrome:watch": "karma start karma.conf.cjs --browsers=ChromeHeadlessOpt --coverage --watch-extensions js", + "test-chrome:debugger": "karma start karma.conf.cjs --browsers=ChromeDebugging", + "test-chrome:verbose:watch": "karma start karma.conf.cjs --browsers=ChromeHeadlessOpt --coverage --watch-extensions js --reporter=mocha ", + "test-chrome:verbose:debugger": "karma start karma.conf.cjs --browsers=ChromeDebugging --reporter=mocha", + "test-firefox": "karma start karma.conf.cjs --browsers=FirefoxHeadless --single-run --coverage", + "test-firefox:verbose": "karma start karma.conf.cjs --browsers=FirefoxHeadless --single-run --coverage --reporter=mocha" }, "devDependencies": { "@storybook/html": "6.5.5", @@ -69,7 +72,9 @@ "karma-source-map-support": "1.4.0", "karma-sourcemap-loader": "0.3.8", "karma-webpack": "5.0.0", - "mocha": "7.2.0" + "mocha": "7.2.0", + "@microsoft/api-extractor": "7.31.2", + "typescript": "4.7.4" }, "dependencies": { "@microsoft/fast-element": "^2.0.0-beta.17", diff --git a/packages/web-components/rollup.config.js b/packages/web-components/rollup.config.js index c79ffeb292333..d3c02fd5ba91c 100644 --- a/packages/web-components/rollup.config.js +++ b/packages/web-components/rollup.config.js @@ -6,6 +6,9 @@ import transformTaggedTemplate from 'rollup-plugin-transform-tagged-template'; import typescript from 'rollup-plugin-typescript2'; import { transformCSSFragment, transformHTMLFragment } from './build/transform-fragments'; +// eslint-disable-next-line no-undef +const tsBin = require.resolve('typescript'); + const parserOptions = { sourceType: 'module', }; @@ -28,6 +31,8 @@ export default [ resolve(), commonJS(), typescript({ + // eslint-disable-next-line no-undef + typescript: require(tsBin), tsconfigOverride: { compilerOptions: { declaration: false, diff --git a/packages/web-components/src/__test__/setup-browser.ts b/packages/web-components/src/__test__/setup-browser.cts similarity index 100% rename from packages/web-components/src/__test__/setup-browser.ts rename to packages/web-components/src/__test__/setup-browser.cts diff --git a/yarn.lock b/yarn.lock index 942ec9879f8aa..465a4b1e896d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2991,6 +2991,15 @@ "@microsoft/tsdoc-config" "~0.15.2" "@rushstack/node-core-library" "3.39.0" +"@microsoft/api-extractor-model@7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.24.2.tgz#759b09f2360fe761ff40bcf7e5a57b9b86284235" + integrity sha512-uUvjqTCY7hYERWGks+joTioN1QYHIucCDy7I/JqLxFxLbFXE5dpc1X7L+FG4PN/s8QYL24DKt0fqJkgcrFKLTw== + dependencies: + "@microsoft/tsdoc" "0.14.1" + "@microsoft/tsdoc-config" "~0.16.1" + "@rushstack/node-core-library" "3.52.0" + "@microsoft/api-extractor@7.18.1": version "7.18.1" resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.18.1.tgz#61b39f972b646261dd49f2de9f5d448aa6497e7a" @@ -3009,6 +3018,24 @@ source-map "~0.6.1" typescript "~4.3.2" +"@microsoft/api-extractor@7.31.2": + version "7.31.2" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.31.2.tgz#8312fe2519deaed8f81d60efe9e54b99fc5a19a0" + integrity sha512-ZODCU9ckTS9brXiZpUW2iDrnAg7jLxeLBM1AkPpSZFcbG/8HGLvfKOKrd71VIJHjc52x2lB8xj7ZWksnP7AOBA== + dependencies: + "@microsoft/api-extractor-model" "7.24.2" + "@microsoft/tsdoc" "0.14.1" + "@microsoft/tsdoc-config" "~0.16.1" + "@rushstack/node-core-library" "3.52.0" + "@rushstack/rig-package" "0.3.15" + "@rushstack/ts-command-line" "4.12.3" + colors "~1.2.1" + lodash "~4.17.15" + resolve "~1.17.0" + semver "~7.3.0" + source-map "~0.6.1" + typescript "~4.7.4" + "@microsoft/eslint-plugin-sdl@0.1.9": version "0.1.9" resolved "https://registry.yarnpkg.com/@microsoft/eslint-plugin-sdl/-/eslint-plugin-sdl-0.1.9.tgz#6f831c5a039dccc37844197c5a67c7d1ca0dc8df" @@ -3069,11 +3096,31 @@ jju "~1.4.0" resolve "~1.19.0" +"@microsoft/tsdoc-config@~0.16.1": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz#b786bb4ead00d54f53839a458ce626c8548d3adf" + integrity sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw== + dependencies: + "@microsoft/tsdoc" "0.14.2" + ajv "~6.12.6" + jju "~1.4.0" + resolve "~1.19.0" + "@microsoft/tsdoc@0.13.2": version "0.13.2" resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.13.2.tgz#3b0efb6d3903bd49edb073696f60e90df08efb26" integrity sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg== +"@microsoft/tsdoc@0.14.1": + version "0.14.1" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.14.1.tgz#155ef21065427901994e765da8a0ba0eaae8b8bd" + integrity sha512-6Wci+Tp3CgPt/B9B0a3J4s3yMgLNSku6w5TV6mN+61C71UqsRBv2FUibBf3tPGlNxebgPHMEUzKpb1ggE8KCKw== + +"@microsoft/tsdoc@0.14.2": + version "0.14.2" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz#c3ec604a0b54b9a9b87e9735dfc59e1a5da6a5fb" + integrity sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug== + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -3753,6 +3800,20 @@ timsort "~0.3.0" z-schema "~5.0.2" +"@rushstack/node-core-library@3.52.0": + version "3.52.0" + resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz#ee45e52b4b5fc038ce59bf59b1534311884e63fb" + integrity sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw== + dependencies: + "@types/node" "12.20.24" + colors "~1.2.1" + fs-extra "~7.0.1" + import-lazy "~4.0.0" + jju "~1.4.0" + resolve "~1.17.0" + semver "~7.3.0" + z-schema "~5.0.2" + "@rushstack/package-deps-hash@^3.2.4", "@rushstack/package-deps-hash@^3.2.5": version "3.2.40" resolved "https://registry.yarnpkg.com/@rushstack/package-deps-hash/-/package-deps-hash-3.2.40.tgz#0f14076694e65bd85de39bfcd83afb00483e0dae" @@ -3768,6 +3829,24 @@ resolve "~1.17.0" strip-json-comments "~3.1.1" +"@rushstack/rig-package@0.3.15": + version "0.3.15" + resolved "https://registry.yarnpkg.com/@rushstack/rig-package/-/rig-package-0.3.15.tgz#8a870880cbeb8de82b951e628f6a37d428b4c5ce" + integrity sha512-jxVfvO5OnkRlYRhcVDZWvwiI2l4pv37HDJRtyg5HbD8Z/I8Xj32RICgrxS5xMeGGytobrg5S6OfPOHskg7Nw+A== + dependencies: + resolve "~1.17.0" + strip-json-comments "~3.1.1" + +"@rushstack/ts-command-line@4.12.3": + version "4.12.3" + resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-4.12.3.tgz#3c5e4b381dcd780aab6efe42c7faa2018248cbb1" + integrity sha512-Pdij22RotMXzI+HWHyYCvw0RMZhiP5a6Za/96XamZ1+mxmpSm4ujf8TROKxGAHySmR5A8iNVSlzhNMnUlFQE6g== + dependencies: + "@types/argparse" "1.0.38" + argparse "~1.0.9" + colors "~1.2.1" + string-argv "~0.3.1" + "@rushstack/ts-command-line@4.8.0": version "4.8.0" resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-4.8.0.tgz#611accb931b9ac62ff4d078f68f95c47f6606724" @@ -18103,9 +18182,9 @@ loader-utils@2.0.0, loader-utils@^2.0.0: json5 "^2.1.2" loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + version "1.4.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" + integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" @@ -25481,10 +25560,10 @@ ts-jest@26.5.6: semver "7.x" yargs-parser "20.x" -ts-loader@9.3.1, ts-loader@^9.2.6: - version "9.3.1" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.3.1.tgz#fe25cca56e3e71c1087fe48dc67f4df8c59b22d4" - integrity sha512-OkyShkcZTsTwyS3Kt7a4rsT/t2qvEVQuKCTg4LJmpj9fhFR7ukGdZwV6Qq3tRUkqcXtfGpPR7+hFKHCG/0d3Lw== +ts-loader@9.4.2, ts-loader@^9.2.6: + version "9.4.2" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.4.2.tgz#80a45eee92dd5170b900b3d00abcfa14949aeb78" + integrity sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA== dependencies: chalk "^4.1.0" enhanced-resolve "^5.0.0" @@ -25711,11 +25790,16 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@4.3.5, "typescript@^3 || ^4", typescript@~4.3.2: +typescript@4.3.5, typescript@~4.3.2: version "4.3.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== +typescript@4.7.4, "typescript@^3 || ^4", typescript@~4.7.4: + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + typical@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4"