diff --git a/packages/framework/eslint-config-rules/package.json b/packages/framework/eslint-config-rules/package.json index 481d50566b1..77cbc90ee22 100644 --- a/packages/framework/eslint-config-rules/package.json +++ b/packages/framework/eslint-config-rules/package.json @@ -15,7 +15,7 @@ "license": "MIT", "dependencies": { "@microsoft/eslint-plugin-sdl": "^1.1.0", - "@rnx-kit/eslint-plugin": "^0.4.0" + "@rnx-kit/eslint-plugin": "^0.8.6" }, "devDependencies": { "@types/eslint": "^9.0.0", diff --git a/packages/utils/test-tools/package.json b/packages/utils/test-tools/package.json index a4c3cea6246..26a22678a4a 100644 --- a/packages/utils/test-tools/package.json +++ b/packages/utils/test-tools/package.json @@ -3,8 +3,14 @@ "version": "0.1.1", "description": "Tools and mocks for testing components using jest", "main": "lib-commonjs/index.js", - "module": "src/index.ts", + "module": "lib/index.js", "typings": "lib/index.d.ts", + "exports": { + ".": { + "import": "./lib/index.js", + "require": "./lib-commonjs/index.js" + } + }, "private": true, "scripts": { "build": "fluentui-scripts build", diff --git a/scripts/babel.config.js b/scripts/babel.config.js index 959d3342f4b..ee6370b093d 100644 --- a/scripts/babel.config.js +++ b/scripts/babel.config.js @@ -1,13 +1,2 @@ -module.exports = { - presets: [ - ['@babel/preset-env', { targets: { node: 'current' } }], - '@babel/preset-react', - '@babel/preset-typescript', - ['module:@react-native/babel-preset', { runtime: 'classic' }], - ], - plugins: [ - ['@babel/plugin-proposal-private-property-in-object', { loose: false }], - ['@babel/plugin-proposal-class-properties', { loose: false }], - ['@babel/plugin-transform-private-methods', { loose: false }], - ], -}; +const { configureBabel } = require('./src/configs/configureBabel'); +module.exports = configureBabel(); diff --git a/scripts/dynamic.extensions.mjs b/scripts/dynamic.extensions.mjs index 809bbb92a4b..fbfece69f04 100644 --- a/scripts/dynamic.extensions.mjs +++ b/scripts/dynamic.extensions.mjs @@ -1,46 +1,79 @@ +// @ts-check + import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; /** - * @param {Object} workspace The package currently being processed - * @param {string} workspace.cwd Path of the current package - * @param {Object} workspace.manifest The content of `package.json` - * @returns {{ - * dependencies?: Record; - * peerDependencies?: Record; - * peerDependenciesMeta?: Record; - * }} + * @typedef {() => boolean} ConditionalCheck */ /** - * These are the dependencies we want to ensure exist in each folder. They will not override - * the dependencies in the package.json if already present. + * Get the package.json manifest for a given folder. + * @param {string} folder + * @returns {import('@rnx-kit/tools-packages').PackageInfo['manifest']} */ -const scriptDependencies = getScriptFolderDependencies(['typescript', 'eslint', 'just-scripts']); +function getPackageManifest(folder) { + const manifestPath = path.join(folder, 'package.json'); + return JSON.parse(fs.readFileSync(manifestPath, 'utf-8')); +} + +// Get the versions once, so we don't query again on each package +const scriptFolder = path.dirname(fileURLToPath(import.meta.url)); +const scriptManifest = getPackageManifest(scriptFolder); +const rootManifest = getPackageManifest(path.dirname(scriptFolder)); +// all merged versions from the root and script manifests, scripts having precedence +const baseVersions = { + ...rootManifest?.devDependencies, + ...rootManifest?.dependencies, + ...scriptManifest?.devDependencies, + ...scriptManifest?.dependencies, +}; /** - * Get the dependencies for the script folder, both `devDependencies` and `dependencies` - * @param {string[]} keys - The keys of the dependencies to include - * @returns {Record} A map of dependencies for the script folder + * Conditionally add a dependency to the given dependencies object if it is not already present + * @param {string[]} depsToAdd + * @param {import('@rnx-kit/tools-packages').PackageInfo['manifest']} manifest + * @param {ConditionalCheck | boolean | undefined} condition + * @returns {Record} */ -function getScriptFolderDependencies(keys) { - const pkgJsonName = path.join(path.dirname(fileURLToPath(import.meta.url)), './package.json'); - const pkgJson = JSON.parse(fs.readFileSync(pkgJsonName, 'utf-8')); - const mergedDeps = { ...pkgJson.devDependencies, ...pkgJson.dependencies }; - return Object.fromEntries(Object.entries(mergedDeps).filter(([key]) => keys.includes(key))); +function conditionallyAdd(depsToAdd, manifest, condition) { + /** @type {Record} */ + const newDeps = {}; + if (!condition || (typeof condition === 'function' ? condition() : condition)) { + for (const dep of depsToAdd) { + if (!manifest.dependencies?.[dep] && !manifest.devDependencies?.[dep]) { + if (baseVersions[dep]) { + // If the dependency is not already present, and the extra condition is met, add it + newDeps[dep] = baseVersions[dep]; + } else { + // If the dependency is not found in the base versions, log a warning + console.warn(`Dependency ${dep} not found in base versions. Skipping dynamic add.`); + } + } + } + } + return newDeps; +} + +function addPrettier(manifest) { + return manifest && manifest.scripts && (manifest.scripts.prettier || manifest.scripts['prettier-fix']); } +/** + * Get the dynamic dependencies for the given package given the package root directory and its manifest. + * @param {{cwd: string, manifest: import('@rnx-kit/tools-packages').PackageInfo['manifest']}} param0 + * @returns { { dependencies: Record } } + */ export default function ({ cwd, manifest }) { const dependenciesToAdd = {}; - Object.keys(scriptDependencies).forEach((key) => { - if ((manifest?.dependencies && manifest.dependencies[key]) || (manifest?.devDependencies && manifest.devDependencies[key])) { - // If the dependency already exists in the package.json, skip it - return; - } - dependenciesToAdd[key] = scriptDependencies[key]; - }); + const enableLinting = Boolean(manifest.scripts && manifest.scripts.lint); + return { - dependencies: dependenciesToAdd, + dependencies: { + ...conditionallyAdd(['typescript'], manifest, () => fs.existsSync(path.join(cwd, 'tsconfig.json'))), + ...conditionallyAdd(['eslint'], manifest, enableLinting), + ...conditionallyAdd(['prettier'], manifest, () => addPrettier(manifest)), + }, }; } diff --git a/scripts/package.json b/scripts/package.json index f2208feddd7..114cc8d1d98 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -18,19 +18,19 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "scripts" }, - "peerDependencies": { - "just-scripts": "^2.3.2", - "react": "18.2.0", - "react-native": "^0.73.0 || ^0.74.0", - "react-native-svg": "^15.0.0 || ^15.4.0" - }, "devDependencies": { + "@babel/core": "^7.22.5", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.21.11", + "@babel/plugin-transform-private-methods": "^7.27.1", "@react-native-community/cli": "^13.6.4", "@react-native-community/cli-platform-android": "^13.6.4", "@react-native-community/cli-platform-ios": "^13.6.4", "@react-native/metro-babel-transformer": "^0.74.0", "@react-native/metro-config": "^0.74.0", "@rnx-kit/jest-preset": "^0.2.0", + "@rnx-kit/tools-packages": "^0.1.1", + "@rnx-kit/tools-typescript": "^0.1.1", "@types/es6-collections": "^0.5.29", "@types/es6-promise": "0.0.32", "@types/jest": "^29.0.0", @@ -40,6 +40,7 @@ "depcheck": "^1.0.0", "find-up": "^5.0.0", "fs-extra": "^7.0.1", + "glob": "^10.0.0", "jest": "^29.2.1", "jest-diff": "^27.0.0", "jsdom": "^25.0.0", @@ -94,5 +95,10 @@ "svg" ] } + }, + "peerDependencies": { + "react": "18.2.0", + "react-native": "^0.73.0 || ^0.74.0", + "react-native-svg": "^15.0.0 || ^15.4.0" } } diff --git a/scripts/src/configs/configureBabel.js b/scripts/src/configs/configureBabel.js new file mode 100644 index 00000000000..22125ed344d --- /dev/null +++ b/scripts/src/configs/configureBabel.js @@ -0,0 +1,30 @@ +/** @typedef {{ esmodule?: boolean, estarget?: string, jsxRuntime?: boolean }} BabelConfigOptions */ + +/** + * @param {BabelConfigOptions} options + * @param {import('@babel/core').TransformOptions} [mixin] - Additional Babel configuration options to mix in. + * @returns {import('@babel/core').TransformOptions} - The complete Babel configuration object. + */ +module.exports.configureBabel = function (/** @type {BabelConfigOptions} */ options = {}, mixin = {}) { + const { esmodule, estarget, jsxRuntime } = options; + return { + presets: [ + [ + '@babel/preset-env', + { + modules: esmodule ? false : 'auto', + targets: { node: 'current' }, + }, + ], + '@babel/preset-react', + '@babel/preset-typescript', + ['module:@react-native/babel-preset', { runtime: jsxRuntime ? 'automatic' : 'classic' }], + ], + plugins: [ + ['@babel/plugin-proposal-private-property-in-object', { loose: false }], + ['@babel/plugin-proposal-class-properties', { loose: false }], + ['@babel/plugin-transform-private-methods', { loose: false }], + ], + ...mixin, + }; +}; diff --git a/scripts/src/justPreset.ts b/scripts/src/justPreset.ts index 8ef40f501d6..a257371e93b 100644 --- a/scripts/src/justPreset.ts +++ b/scripts/src/justPreset.ts @@ -8,8 +8,7 @@ const fs = require('fs'); const { clean } = require('./tasks/clean'); const { copy } = require('./tasks/copy'); const { jest } = require('./tasks/jest'); -const { ts } = require('./tasks/ts'); -const { codegenNativeComponents } = require('./tasks/codegenNativeComponents') +const { build } = require('./tasks/build'); const { eslint } = require('./tasks/eslint'); const { depcheckTask } = require('./tasks/depcheck'); const { checkForModifiedFiles } = require('./tasks/checkForModifiedFilesTask'); @@ -33,25 +32,14 @@ export function preset() { task('clean', clean); task('copy', copy); task('jest', jest); - task('codegenNativeComponents', codegenNativeComponents); - task('ts:commonjs', ts.commonjs); - task('ts:esm', ts.esm); + task('ts', build); task('eslint', eslint); - task('ts:commonjs-only', ts.commonjsOnly); task('prettier', () => argv().fix ? prettierTask({ files: ['src/.'], ignorePath: path.join(findGitRoot(process.cwd()), '.prettierignore') }) : prettierCheckTask({ files: ['src/.'], ignorePath: path.join(findGitRoot(process.cwd()), '.prettierignore') }), ); task('checkForModifiedFiles', checkForModifiedFiles); - task('tsall', parallel('ts:commonjs', 'ts:esm')); - task( - 'ts', - series( - condition('ts:commonjs-only', () => !!argv().commonjs), - condition('tsall', () => !argv().commonjs), - ), - ); task( 'validate', @@ -61,19 +49,7 @@ export function preset() { ), ); - task( - 'build:node-lib', - series( - 'clean', - 'copy', - series( - condition('validate', () => !argv().min), - 'ts:commonjs-only', - ), - ), - ); - - task('build', series('clean', 'copy', 'ts', 'codegenNativeComponents')); + task('build', series('clean', 'copy', 'ts')); task('depcheck', depcheckTask); diff --git a/scripts/src/tasks/build.js b/scripts/src/tasks/build.js new file mode 100644 index 00000000000..26412b0c9aa --- /dev/null +++ b/scripts/src/tasks/build.js @@ -0,0 +1,122 @@ +// @ts-check + +const { findNativeComponents, codegenNativeComponents } = require('../utils/codegenNativeComponents'); +const path = require('path'); +const fs = require('fs'); +const { runScript } = require('../utils/runScript.js'); +const { readTypeScriptConfig } = require('@rnx-kit/tools-typescript'); +const { getPackageInfoFromPath } = require('@rnx-kit/tools-packages'); +const { JsxEmit, ModuleKind } = require('typescript'); + +/** + * Get the module string for a given module kind. + * @param {ModuleKind} [moduleKind] - The module kind to get the string for. + * @returns {string} - The module string. + */ +function getModuleString(moduleKind) { + switch (moduleKind) { + case ModuleKind.CommonJS: + return 'commonjs'; + case ModuleKind.ESNext: + return 'esnext'; + default: + return 'node16'; + } +} + +/** + * Get the build targets for the project. + * @param {string} cwd - The current working directory to search in. + * @returns {import('../utils/codegenNativeComponents').BuildTarget[]} - The build targets found. + */ +function getBuildTargets(cwd = process.cwd()) { + /** @type {import('../utils/codegenNativeComponents').BuildTarget[]} */ + const targets = []; + const pkgInfo = getPackageInfoFromPath(cwd); + + // do nothing if no tsconfig.json exists + if (fs.existsSync(path.join(cwd, 'tsconfig.json'))) { + const manifest = pkgInfo.manifest; + const nativeComponents = findNativeComponents(cwd); + const tsconfig = readTypeScriptConfig(pkgInfo); + const options = tsconfig.options || {}; + const moduleBase = getModuleString(options.module); + const jsxRuntime = options.jsx === JsxEmit.ReactJSX || options.jsx === JsxEmit.ReactJSXDev; + + function addTarget(srcTarget, module) { + targets.push({ + module, + outDir: path.dirname(srcTarget), + nativeComponents, + jsxRuntime, + }); + } + + // now look for a cjs target + const cjsPath = manifest.main || manifest.exports?.['.'].require; + if (cjsPath) { + const module = moduleBase && moduleBase !== 'esnext' ? moduleBase : 'node16'; + addTarget(cjsPath, module); + } + + // look for an esm target + const esmPath = manifest.module || manifest.exports?.['.'].import; + if (esmPath) { + addTarget(esmPath, 'esnext'); + } + } + + return targets; +} + +/** + * Execute the build for a given target + * @param {import('../utils/codegenNativeComponents').BuildTarget} target - The build target to execute. + * @param {string} cwd - The current working directory. + * @returns {Promise} - The exit code of the build process. + */ +async function buildTarget(target, cwd) { + const { module, outDir, nativeComponents } = target; + const extraArgs = ['--outDir', outDir, '--module', module]; + const result = await runScript('tsc', ...extraArgs); + + if (result === 0 && nativeComponents && nativeComponents.length > 0) { + codegenNativeComponents(target, cwd); + } + + if (result !== 0) { + console.error(`Build failed for target: ${cwd}:${outDir}`); + } + + return result; +} + +/** + * Task to check the matrix of packages for publishing errors. In particular this checks for published packages that + * have a dependency on a private package + * + * @returns {import('just-scripts').TaskFunction} + */ +function build() { + return async function (done) { + const cwd = process.cwd(); + const targets = getBuildTargets(cwd); + if (targets.length === 0) { + console.log('No build targets found. Skipping build.'); + done(); + return; + } + + const buildPromises = targets.map((target) => buildTarget(target, cwd)); + const results = await Promise.all(buildPromises); + for (const result of results) { + if (result !== 0) { + done(new Error(`Build failed with exit code: ${result}`)); + return; + } + } + done(); + }; +} + +module.exports.build = build; diff --git a/scripts/src/tasks/codegenNativeComponents.js b/scripts/src/tasks/codegenNativeComponents.js deleted file mode 100644 index a01429046de..00000000000 --- a/scripts/src/tasks/codegenNativeComponents.js +++ /dev/null @@ -1,33 +0,0 @@ -// @ts-check -import * as glob from 'glob'; - -const fs = require('fs'); -const path = require('path'); - -exports.codegenNativeComponents = () => { - const babel = require("@babel/core"); - const matches = glob.sync("src/**/*NativeComponent.ts"); - - matches.forEach(matchedPath => { - const relativePath = path.relative(path.resolve(process.cwd(), 'src'), matchedPath); - const code = fs.readFileSync(matchedPath).toString(); - const filename = path.resolve(process.cwd(), matchedPath); - - const res = babel.transformSync(code, - { - ast: false, - filename, - cwd: process.cwd(), - sourceRoot: process.cwd(), - root: process.cwd(), - babelrc: true - }); - - const relativeOutputPath = relativePath.replace(/\.ts$/, '.js'); - - fs.writeFileSync(path.resolve(process.cwd(), 'lib', relativeOutputPath), res?.code); - }); - - - -}; diff --git a/scripts/src/tasks/ts.js b/scripts/src/tasks/ts.js deleted file mode 100644 index 0abcbfb5085..00000000000 --- a/scripts/src/tasks/ts.js +++ /dev/null @@ -1,29 +0,0 @@ -// @ts-check - -const path = require('path'); -const { tscTask, argv } = require('just-scripts'); -const libPath = path.resolve(process.cwd(), 'lib'); -const srcPath = path.resolve(process.cwd(), 'src'); - -function getExtraTscParams(args) { - return { pretty: true, target: 'es5', ...(args.production && { inlineSources: true, sourceRoot: path.relative(libPath, srcPath) }) }; -} - -module.exports.ts = { - commonjs: () => { - const extraOptions = getExtraTscParams(argv()); - return tscTask({ ...extraOptions, outDir: 'lib-commonjs', module: 'commonjs' }); - }, - esm: () => { - const extraOptions = getExtraTscParams(argv()); - return tscTask({ ...extraOptions, outDir: 'lib', module: 'esnext' }); - }, - amd: () => { - const extraOptions = getExtraTscParams(argv()); - return tscTask({ ...extraOptions, outDir: 'lib-amd', module: 'amd' }); - }, - commonjsOnly: () => { - const extraOptions = getExtraTscParams(argv()); - return tscTask({ ...extraOptions, outDir: 'lib', module: 'commonjs' }); - } -}; diff --git a/scripts/src/utils/codegenNativeComponents.js b/scripts/src/utils/codegenNativeComponents.js new file mode 100644 index 00000000000..2f4ee5b4be4 --- /dev/null +++ b/scripts/src/utils/codegenNativeComponents.js @@ -0,0 +1,60 @@ +// @ts-check +const glob = require('glob'); + +const fs = require('fs'); +const path = require('path'); + +const { configureBabel } = require('../configs/configureBabel'); + +/** + * @typedef {{ module: string, outDir: string, jsxRuntime?: boolean, nativeComponents?: string[] }} BuildTarget + */ + +/** + * Finds all native components under the specified directory. + * @param {string} [cwd=process.cwd()] - The current working directory to search in. + * @returns {string[] | undefined} + */ +function findNativeComponents(cwd = process.cwd()) { + const results = glob.sync('src/**/*NativeComponent.ts', { cwd }); + return results.length > 0 ? results : undefined; +} + +/** + * Generates code for native components. + * @param {BuildTarget} target + * @param {string} [cwd=process.cwd()] - The current working directory. + */ +function codegenNativeComponents(target, cwd = process.cwd()) { + const { module, outDir, nativeComponents, jsxRuntime } = target; + if (nativeComponents && nativeComponents.length > 0) { + const babel = require('@babel/core'); + const configOptions = { esmodule: module === 'esnext', jsxRuntime }; + const optionsBase = configureBabel(configOptions, { + ast: false, + babelrc: false, + cwd: cwd, + sourceRoot: cwd, + root: cwd, + }); + + for (const matchedPath of nativeComponents) { + const relativePath = path.relative(path.resolve(process.cwd(), 'src'), matchedPath); + const code = fs.readFileSync(matchedPath).toString(); + const filename = path.resolve(process.cwd(), matchedPath); + + const res = babel.transformSync(code, { + ...optionsBase, + filename, + }); + + if (res && res.code) { + const relativeOutputPath = relativePath.replace(/\.ts$/, '.js'); + fs.writeFileSync(path.resolve(cwd, outDir, relativeOutputPath), res.code); + } + } + } +} + +module.exports.codegenNativeComponents = codegenNativeComponents; +module.exports.findNativeComponents = findNativeComponents; diff --git a/scripts/src/utils/runScript.js b/scripts/src/utils/runScript.js new file mode 100644 index 00000000000..9e43cc92c51 --- /dev/null +++ b/scripts/src/utils/runScript.js @@ -0,0 +1,47 @@ +// @ts-check + +const { spawn } = require('child_process'); +const path = require('path'); + +/** @type {Record} */ +const cmdToModule = { + tsc: 'typescript', +}; + +/** + * Get the path to a bin entrypoint for a js package. + * @param {string} command + * @returns {string} + */ +function getBinPath(command) { + const cmdModule = cmdToModule[command] ?? command; + const pkgJsonPath = require.resolve(`${cmdModule}/package.json`, { + paths: [process.cwd()], + }); + if (!pkgJsonPath) { + throw new Error(`Could not find package.json for command: ${command}`); + } + const pkgBinPath = require(pkgJsonPath).bin?.[command]; + if (!pkgBinPath) { + throw new Error(`Command "${command}" not found in package.json of ${cmdModule}`); + } + return path.join(path.dirname(pkgJsonPath), pkgBinPath); +} + +/** + * @param {string} command + * @param {...string} args + * @returns {Promise} + */ +export async function runScript(command, ...args) { + const spawnArgs = [getBinPath(command), ...args]; + + return new Promise((resolve) => { + spawn(process.execPath, spawnArgs, { + cwd: process.cwd(), + stdio: 'inherit', + }).on('close', (code) => { + resolve(code ?? -1); + }); + }); +} diff --git a/yarn.lock b/yarn.lock index 3ad4cb42909..59316503f09 100644 --- a/yarn.lock +++ b/yarn.lock @@ -458,6 +458,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.22.5": + version: 7.28.0 + resolution: "@babel/core@npm:7.28.0" + dependencies: + "@ampproject/remapping": "npm:^2.2.0" + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.28.0" + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-module-transforms": "npm:^7.27.3" + "@babel/helpers": "npm:^7.27.6" + "@babel/parser": "npm:^7.28.0" + "@babel/template": "npm:^7.27.2" + "@babel/traverse": "npm:^7.28.0" + "@babel/types": "npm:^7.28.0" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: 10c0/423302e7c721e73b1c096217880272e02020dfb697a55ccca60ad01bba90037015f84d0c20c6ce297cf33a19bb704bc5c2b3d3095f5284dfa592bd1de0b9e8c3 + languageName: node + linkType: hard + "@babel/generator@npm:^7.20.0, @babel/generator@npm:^7.27.3, @babel/generator@npm:^7.7.2": version: 7.27.5 resolution: "@babel/generator@npm:7.27.5" @@ -471,6 +494,19 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/generator@npm:7.28.0" + dependencies: + "@babel/parser": "npm:^7.28.0" + "@babel/types": "npm:^7.28.0" + "@jridgewell/gen-mapping": "npm:^0.3.12" + "@jridgewell/trace-mapping": "npm:^0.3.28" + jsesc: "npm:^3.0.2" + checksum: 10c0/1b3d122268ea3df50fde707ad864d9a55c72621357d5cebb972db3dd76859c45810c56e16ad23123f18f80cc2692f5a015d2858361300f0f224a05dc43d36a92 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.18.6, @babel/helper-annotate-as-pure@npm:^7.27.1": version: 7.27.3 resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" @@ -577,6 +613,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-globals@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/helper-globals@npm:7.28.0" + checksum: 10c0/5a0cd0c0e8c764b5f27f2095e4243e8af6fa145daea2b41b53c0c1414fe6ff139e3640f4e2207ae2b3d2153a1abd346f901c26c290ee7cb3881dd922d4ee9232 + languageName: node + linkType: hard + "@babel/helper-member-expression-to-functions@npm:^7.27.1": version: 7.27.1 resolution: "@babel/helper-member-expression-to-functions@npm:7.27.1" @@ -694,7 +737,7 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.27.4": +"@babel/helpers@npm:^7.27.4, @babel/helpers@npm:^7.27.6": version: 7.27.6 resolution: "@babel/helpers@npm:7.27.6" dependencies: @@ -715,6 +758,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/parser@npm:7.28.0" + dependencies: + "@babel/types": "npm:^7.28.0" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/c2ef81d598990fa949d1d388429df327420357cb5200271d0d0a2784f1e6d54afc8301eb8bdf96d8f6c77781e402da93c7dc07980fcc136ac5b9d5f1fce701b5 + languageName: node + linkType: hard + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.27.1" @@ -788,7 +842,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-class-properties@npm:^7.0.0, @babel/plugin-proposal-class-properties@npm:^7.13.0, @babel/plugin-proposal-class-properties@npm:^7.18.0": +"@babel/plugin-proposal-class-properties@npm:^7.0.0, @babel/plugin-proposal-class-properties@npm:^7.13.0, @babel/plugin-proposal-class-properties@npm:^7.18.0, @babel/plugin-proposal-class-properties@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" dependencies: @@ -2028,6 +2082,21 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/traverse@npm:7.28.0" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.28.0" + "@babel/helper-globals": "npm:^7.28.0" + "@babel/parser": "npm:^7.28.0" + "@babel/template": "npm:^7.27.2" + "@babel/types": "npm:^7.28.0" + debug: "npm:^4.3.1" + checksum: 10c0/32794402457827ac558173bcebdcc0e3a18fa339b7c41ca35621f9f645f044534d91bb923ff385f5f960f2e495f56ce18d6c7b0d064d2f0ccb55b285fa6bc7b9 + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.24.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.27.6, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": version: 7.27.6 resolution: "@babel/types@npm:7.27.6" @@ -2038,6 +2107,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/types@npm:7.28.0" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + checksum: 10c0/7ca8521bf5e2d2ed4db31176efaaf94463a6b7a4d16dcc60e34e963b3596c2ecadb85457bebed13a9ee9a5829ef5f515d05b55a991b6a8f3b835451843482e39 + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -2263,7 +2342,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.1.2, @eslint-community/eslint-utils@npm:^4.4.0": +"@eslint-community/eslint-utils@npm:^4.1.2, @eslint-community/eslint-utils@npm:^4.4.0, @eslint-community/eslint-utils@npm:^4.7.0": version: 4.7.0 resolution: "@eslint-community/eslint-utils@npm:4.7.0" dependencies: @@ -2285,7 +2364,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.11.0, @eslint-community/regexpp@npm:^4.12.1, @eslint-community/regexpp@npm:^4.4.0": +"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.11.0, @eslint-community/regexpp@npm:^4.12.1": version: 4.12.1 resolution: "@eslint-community/regexpp@npm:4.12.1" checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 @@ -3137,7 +3216,7 @@ __metadata: resolution: "@fluentui-react-native/eslint-config-rules@workspace:packages/framework/eslint-config-rules" dependencies: "@microsoft/eslint-plugin-sdl": "npm:^1.1.0" - "@rnx-kit/eslint-plugin": "npm:^0.4.0" + "@rnx-kit/eslint-plugin": "npm:^0.8.6" "@types/eslint": "npm:^9.0.0" eslint: "npm:^9.0.0" languageName: unknown @@ -4198,12 +4277,18 @@ __metadata: version: 0.0.0-use.local resolution: "@fluentui-react-native/scripts@workspace:scripts" dependencies: + "@babel/core": "npm:^7.22.5" + "@babel/plugin-proposal-class-properties": "npm:^7.18.6" + "@babel/plugin-proposal-private-property-in-object": "npm:^7.21.11" + "@babel/plugin-transform-private-methods": "npm:^7.27.1" "@react-native-community/cli": "npm:^13.6.4" "@react-native-community/cli-platform-android": "npm:^13.6.4" "@react-native-community/cli-platform-ios": "npm:^13.6.4" "@react-native/metro-babel-transformer": "npm:^0.74.0" "@react-native/metro-config": "npm:^0.74.0" "@rnx-kit/jest-preset": "npm:^0.2.0" + "@rnx-kit/tools-packages": "npm:^0.1.1" + "@rnx-kit/tools-typescript": "npm:^0.1.1" "@types/es6-collections": "npm:^0.5.29" "@types/es6-promise": "npm:0.0.32" "@types/jest": "npm:^29.0.0" @@ -4213,6 +4298,7 @@ __metadata: depcheck: "npm:^1.0.0" find-up: "npm:^5.0.0" fs-extra: "npm:^7.0.1" + glob: "npm:^10.0.0" jest: "npm:^29.2.1" jest-diff: "npm:^27.0.0" jsdom: "npm:^25.0.0" @@ -4230,7 +4316,6 @@ __metadata: typescript: "npm:4.9.4" workspace-tools: "npm:^0.26.3" peerDependencies: - just-scripts: ^2.3.2 react: 18.2.0 react-native: ^0.73.0 || ^0.74.0 react-native-svg: ^15.0.0 || ^15.4.0 @@ -5768,6 +5853,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/gen-mapping@npm:^0.3.12": + version: 0.3.12 + resolution: "@jridgewell/gen-mapping@npm:0.3.12" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/32f771ae2467e4d440be609581f7338d786d3d621bac3469e943b9d6d116c23c4becb36f84898a92bbf2f3c0511365c54a945a3b86a83141547a2a360a5ec0c7 + languageName: node + linkType: hard + "@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": version: 3.1.2 resolution: "@jridgewell/resolve-uri@npm:3.1.2" @@ -5819,6 +5914,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.28": + version: 0.3.29 + resolution: "@jridgewell/trace-mapping@npm:0.3.29" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/fb547ba31658c4d74eb17e7389f4908bf7c44cef47acb4c5baa57289daf68e6fe53c639f41f751b3923aca67010501264f70e7b49978ad1f040294b22c37b333 + languageName: node + linkType: hard + "@ljharb/through@npm:^2.3.11": version: 2.3.13 resolution: "@ljharb/through@npm:2.3.13" @@ -6566,6 +6671,13 @@ __metadata: languageName: node linkType: hard +"@react-native/eslint-plugin@npm:^0.76.0": + version: 0.76.9 + resolution: "@react-native/eslint-plugin@npm:0.76.9" + checksum: 10c0/752d62aa21f8a37fb456f1b16284bb02a847730ca4a3a24a55cda2e2bfc1f559d06ecf4c4d0d2a1aa5ccfb7bb3e9a4f3397d1cb33aae2d1899539668cd18024b + languageName: node + linkType: hard + "@react-native/gradle-plugin@npm:0.74.89": version: 0.74.89 resolution: "@react-native/gradle-plugin@npm:0.74.89" @@ -6709,18 +6821,18 @@ __metadata: languageName: node linkType: hard -"@rnx-kit/eslint-plugin@npm:^0.4.0": - version: 0.4.2 - resolution: "@rnx-kit/eslint-plugin@npm:0.4.2" +"@rnx-kit/eslint-plugin@npm:^0.8.6": + version: 0.8.6 + resolution: "@rnx-kit/eslint-plugin@npm:0.8.6" dependencies: - "@typescript-eslint/eslint-plugin": "npm:^5.0.0" - "@typescript-eslint/parser": "npm:^5.0.0" + "@react-native/eslint-plugin": "npm:^0.76.0" enhanced-resolve: "npm:^5.8.3" - eslint-plugin-react: "npm:^7.26.0" - eslint-plugin-react-hooks: "npm:^4.3.0" + eslint-plugin-react: "npm:^7.35.2" + eslint-plugin-react-hooks: "npm:^5.0.0" + typescript-eslint: "npm:^8.0.0" peerDependencies: - eslint: ">=6.0.0" - checksum: 10c0/839a46f6300cc33b40edea46840c79f489b4bc4ffc02db02ab6a17574e8a6329f9bf1c9dade644778d7b7229d804260a03b74e0ab9913d4927ed81ea773b8681 + eslint: ">=8.57.0" + checksum: 10c0/a0a6d87ce1bc2aba8127f95994a7d2df5b7e5d303e43c280cb473542b9d18df6f71d29f70278cd2c9c6beba1e5442543a342f351217645f3f55135007f9f4341 languageName: node linkType: hard @@ -6905,7 +7017,7 @@ __metadata: languageName: node linkType: hard -"@rnx-kit/tools-node@npm:^3.0.0, @rnx-kit/tools-node@npm:^3.0.2": +"@rnx-kit/tools-node@npm:^3.0.0, @rnx-kit/tools-node@npm:^3.0.1, @rnx-kit/tools-node@npm:^3.0.2": version: 3.0.2 resolution: "@rnx-kit/tools-node@npm:3.0.2" checksum: 10c0/ea8cfc264e3adea18511316a7a90cacad18087561464177c5291f54fca0befe37fde88f3facbb7a102e7fa45a0816137aaa2eee30f0bcf320e35c60895e8286c @@ -6922,6 +7034,16 @@ __metadata: languageName: node linkType: hard +"@rnx-kit/tools-packages@npm:^0.1.1": + version: 0.1.1 + resolution: "@rnx-kit/tools-packages@npm:0.1.1" + dependencies: + "@rnx-kit/tools-node": "npm:^3.0.0" + "@rnx-kit/tools-workspaces": "npm:^0.2.1" + checksum: 10c0/88b2af4198c572b5079fb436904d50cb211b7ee026d89b4430ad5305200cd6f38a0849b52ba1b099d19b50837318e230e9904dbaeb24a6271aa65db9d30bd5d7 + languageName: node + linkType: hard + "@rnx-kit/tools-react-native@npm:^2.0.0, @rnx-kit/tools-react-native@npm:^2.0.3": version: 2.1.0 resolution: "@rnx-kit/tools-react-native@npm:2.1.0" @@ -6938,6 +7060,22 @@ __metadata: languageName: node linkType: hard +"@rnx-kit/tools-typescript@npm:^0.1.1": + version: 0.1.1 + resolution: "@rnx-kit/tools-typescript@npm:0.1.1" + dependencies: + "@rnx-kit/config": "npm:^0.7.0" + "@rnx-kit/console": "npm:^2.0.0" + "@rnx-kit/tools-node": "npm:^3.0.1" + "@rnx-kit/tools-packages": "npm:^0.1.1" + "@rnx-kit/tools-react-native": "npm:^2.0.0" + "@rnx-kit/typescript-service": "npm:^2.0.0" + peerDependencies: + typescript: ">=4.7.0" + checksum: 10c0/981e1b0c6045ff2a3e18a3bae66c682da59a10c2d7452314ab131faec7d17ae8123cb982ad83f1863beaf83f822d58e8a2581f7c51019f6e85ffbc03fcb0cbd6 + languageName: node + linkType: hard + "@rnx-kit/tools-workspaces@npm:^0.2.0, @rnx-kit/tools-workspaces@npm:^0.2.1, @rnx-kit/tools-workspaces@npm:^0.2.3": version: 0.2.3 resolution: "@rnx-kit/tools-workspaces@npm:0.2.3" @@ -7574,7 +7712,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:7.0.15, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:*, @types/json-schema@npm:7.0.15, @types/json-schema@npm:^7.0.15": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db @@ -7795,7 +7933,7 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:7.5.8, @types/semver@npm:^7.3.12": +"@types/semver@npm:7.5.8": version: 7.5.8 resolution: "@types/semver@npm:7.5.8" checksum: 10c0/8663ff927234d1c5fcc04b33062cb2b9fcfbe0f5f351ed26c4d1e1581657deebd506b41ff7fdf89e787e3d33ce05854bc01686379b89e9c49b564c4cfa988efa @@ -7994,124 +8132,139 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^5.0.0": - version: 5.62.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.62.0" +"@typescript-eslint/eslint-plugin@npm:8.36.0": + version: 8.36.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.36.0" dependencies: - "@eslint-community/regexpp": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:5.62.0" - "@typescript-eslint/type-utils": "npm:5.62.0" - "@typescript-eslint/utils": "npm:5.62.0" - debug: "npm:^4.3.4" + "@eslint-community/regexpp": "npm:^4.10.0" + "@typescript-eslint/scope-manager": "npm:8.36.0" + "@typescript-eslint/type-utils": "npm:8.36.0" + "@typescript-eslint/utils": "npm:8.36.0" + "@typescript-eslint/visitor-keys": "npm:8.36.0" graphemer: "npm:^1.4.0" - ignore: "npm:^5.2.0" - natural-compare-lite: "npm:^1.4.0" - semver: "npm:^7.3.7" - tsutils: "npm:^3.21.0" + ignore: "npm:^7.0.0" + natural-compare: "npm:^1.4.0" + ts-api-utils: "npm:^2.1.0" peerDependencies: - "@typescript-eslint/parser": ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/3f40cb6bab5a2833c3544e4621b9fdacd8ea53420cadc1c63fac3b89cdf5c62be1e6b7bcf56976dede5db4c43830de298ced3db60b5494a3b961ca1b4bff9f2a + "@typescript-eslint/parser": ^8.36.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/a9bb55b896717bea630f969d1c7ca15ddaf0d0f72df1d8a05696a7ca75e8b40dc9abdc8ad447a0a0130f1d81a4bb5befd66c7f5e10950c4b1a389542ac3e0298 languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.0.0": - version: 5.62.0 - resolution: "@typescript-eslint/parser@npm:5.62.0" +"@typescript-eslint/parser@npm:8.36.0": + version: 8.36.0 + resolution: "@typescript-eslint/parser@npm:8.36.0" dependencies: - "@typescript-eslint/scope-manager": "npm:5.62.0" - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/typescript-estree": "npm:5.62.0" + "@typescript-eslint/scope-manager": "npm:8.36.0" + "@typescript-eslint/types": "npm:8.36.0" + "@typescript-eslint/typescript-estree": "npm:8.36.0" + "@typescript-eslint/visitor-keys": "npm:8.36.0" debug: "npm:^4.3.4" peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/315194b3bf39beb9bd16c190956c46beec64b8371e18d6bb72002108b250983eb1e186a01d34b77eb4045f4941acbb243b16155fbb46881105f65e37dc9e24d4 + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/4cba651b9fb6a3662775dcb9391d7c65c0674442674fb46e19bc612cc284057e638b4c3410ba5985f78d4a6bf55f522d875e428bc334e26e91a58d3b0f55904f languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/scope-manager@npm:5.62.0" +"@typescript-eslint/project-service@npm:8.36.0": + version: 8.36.0 + resolution: "@typescript-eslint/project-service@npm:8.36.0" dependencies: - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/visitor-keys": "npm:5.62.0" - checksum: 10c0/861253235576c1c5c1772d23cdce1418c2da2618a479a7de4f6114a12a7ca853011a1e530525d0931c355a8fd237b9cd828fac560f85f9623e24054fd024726f + "@typescript-eslint/tsconfig-utils": "npm:^8.36.0" + "@typescript-eslint/types": "npm:^8.36.0" + debug: "npm:^4.3.4" + peerDependencies: + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/4199bb52118fa530f24709707e0ab7677ffbe2885412aea294a24befe6ffe2af19b05512913752ab08b8177b00784da23285a6b091066e28fe4449cddcf0ef7a languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/type-utils@npm:5.62.0" +"@typescript-eslint/scope-manager@npm:8.36.0": + version: 8.36.0 + resolution: "@typescript-eslint/scope-manager@npm:8.36.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:5.62.0" - "@typescript-eslint/utils": "npm:5.62.0" + "@typescript-eslint/types": "npm:8.36.0" + "@typescript-eslint/visitor-keys": "npm:8.36.0" + checksum: 10c0/ee40ac6ac130c8656530eac5705f386b9e33ee6aa4bb285794b62023bc42e1004c871260b0accdff57275cf8c939981dc72c5a64043310375e9117734827e9bb + languageName: node + linkType: hard + +"@typescript-eslint/tsconfig-utils@npm:8.36.0, @typescript-eslint/tsconfig-utils@npm:^8.36.0": + version: 8.36.0 + resolution: "@typescript-eslint/tsconfig-utils@npm:8.36.0" + peerDependencies: + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/e0e1bacd3f5bfddb90a90362dbedf793d98ee1ada203fc2d83531a61617d246b9e0d0bfac493680f635afb3cfd749da2008e06e4404660334a5f804392064006 + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:8.36.0": + version: 8.36.0 + resolution: "@typescript-eslint/type-utils@npm:8.36.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:8.36.0" + "@typescript-eslint/utils": "npm:8.36.0" debug: "npm:^4.3.4" - tsutils: "npm:^3.21.0" + ts-api-utils: "npm:^2.1.0" peerDependencies: - eslint: "*" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/93112e34026069a48f0484b98caca1c89d9707842afe14e08e7390af51cdde87378df29d213d3bbd10a7cfe6f91b228031b56218515ce077bdb62ddea9d9f474 + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/9743b99d1ab5c98b96e9b43472c1c0c787256285fe4c5fe3e54bbf331cd3c9a3bfac1188a490f6e0de8eacea0940731478feef6b3e0266d701bb0686815532c6 languageName: node linkType: hard -"@typescript-eslint/types@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/types@npm:5.62.0" - checksum: 10c0/7febd3a7f0701c0b927e094f02e82d8ee2cada2b186fcb938bc2b94ff6fbad88237afc304cbaf33e82797078bbbb1baf91475f6400912f8b64c89be79bfa4ddf +"@typescript-eslint/types@npm:8.36.0, @typescript-eslint/types@npm:^8.36.0": + version: 8.36.0 + resolution: "@typescript-eslint/types@npm:8.36.0" + checksum: 10c0/cacb941a0caad6ab556c416051b97ec33b364b7c8e0703e2729ae43f12daf02b42eef12011705329107752e3f1685ca82cfffe181d637f85907293cb634bee31 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" +"@typescript-eslint/typescript-estree@npm:8.36.0": + version: 8.36.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.36.0" dependencies: - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/visitor-keys": "npm:5.62.0" + "@typescript-eslint/project-service": "npm:8.36.0" + "@typescript-eslint/tsconfig-utils": "npm:8.36.0" + "@typescript-eslint/types": "npm:8.36.0" + "@typescript-eslint/visitor-keys": "npm:8.36.0" debug: "npm:^4.3.4" - globby: "npm:^11.1.0" + fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" - semver: "npm:^7.3.7" - tsutils: "npm:^3.21.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/d7984a3e9d56897b2481940ec803cb8e7ead03df8d9cfd9797350be82ff765dfcf3cfec04e7355e1779e948da8f02bc5e11719d07a596eb1cb995c48a95e38cf + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^2.1.0" + peerDependencies: + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/3581401620de27fbeb4ce5052211432eff839961b4430324b505429637e3d19270be1ab1575e29da0115817d32fb5b1fa5e774667b91d92da7f6b95fff5dbf74 languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/utils@npm:5.62.0" +"@typescript-eslint/utils@npm:8.36.0": + version: 8.36.0 + resolution: "@typescript-eslint/utils@npm:8.36.0" dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@types/json-schema": "npm:^7.0.9" - "@types/semver": "npm:^7.3.12" - "@typescript-eslint/scope-manager": "npm:5.62.0" - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/typescript-estree": "npm:5.62.0" - eslint-scope: "npm:^5.1.1" - semver: "npm:^7.3.7" + "@eslint-community/eslint-utils": "npm:^4.7.0" + "@typescript-eslint/scope-manager": "npm:8.36.0" + "@typescript-eslint/types": "npm:8.36.0" + "@typescript-eslint/typescript-estree": "npm:8.36.0" peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 10c0/f09b7d9952e4a205eb1ced31d7684dd55cee40bf8c2d78e923aa8a255318d97279825733902742c09d8690f37a50243f4c4d383ab16bd7aefaf9c4b438f785e1 + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/b107018ae0ba1cca954c3e8c3280cf1844c81c1c8494f9967014eadf41fdc44a88d13accc935c5371c61df02a13decd4846f12e63d9b2b2c789e5007abce1050 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" +"@typescript-eslint/visitor-keys@npm:8.36.0": + version: 8.36.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.36.0" dependencies: - "@typescript-eslint/types": "npm:5.62.0" - eslint-visitor-keys: "npm:^3.3.0" - checksum: 10c0/7c3b8e4148e9b94d9b7162a596a1260d7a3efc4e65199693b8025c71c4652b8042501c0bc9f57654c1e2943c26da98c0f77884a746c6ae81389fcb0b513d995d + "@typescript-eslint/types": "npm:8.36.0" + eslint-visitor-keys: "npm:^4.2.1" + checksum: 10c0/cc5cc3ab8cf0a84c73c6aa025556e8c6ed04c1a114f6d03c4c4a05c0b197f2de4f02764d053760f2ba81b256234bb14be391a8601f294e3ac31baaa1dce44a63 languageName: node linkType: hard @@ -9579,7 +9732,7 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.5, array-includes@npm:^3.1.6, array-includes@npm:^3.1.8": +"array-includes@npm:^3.1.5, array-includes@npm:^3.1.8": version: 3.1.8 resolution: "array-includes@npm:3.1.8" dependencies: @@ -9656,7 +9809,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.flatmap@npm:^1.3.1, array.prototype.flatmap@npm:^1.3.2": +"array.prototype.flatmap@npm:^1.3.2": version: 1.3.2 resolution: "array.prototype.flatmap@npm:1.3.2" dependencies: @@ -9680,19 +9833,6 @@ __metadata: languageName: node linkType: hard -"array.prototype.tosorted@npm:^1.1.1": - version: 1.1.1 - resolution: "array.prototype.tosorted@npm:1.1.1" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - es-shim-unscopables: "npm:^1.0.0" - get-intrinsic: "npm:^1.1.3" - checksum: 10c0/fd5f57aca3c7ddcd1bb83965457b625f3a67d8f334f5cbdb8ac8ef33d5b0d38281524114db2936f8c08048115d5158af216c94e6ae1eb966241b9b6f4ab8a7e8 - languageName: node - linkType: hard - "array.prototype.tosorted@npm:^1.1.4": version: 1.1.4 resolution: "array.prototype.tosorted@npm:1.1.4" @@ -11722,7 +11862,7 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": +"define-properties@npm:^1.1.3, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": version: 1.2.1 resolution: "define-properties@npm:1.2.1" dependencies: @@ -12354,7 +12494,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.20.4, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2": +"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2": version: 1.23.3 resolution: "es-abstract@npm:1.23.3" dependencies: @@ -12745,12 +12885,12 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react-hooks@npm:^4.3.0": - version: 4.6.0 - resolution: "eslint-plugin-react-hooks@npm:4.6.0" +"eslint-plugin-react-hooks@npm:^5.0.0": + version: 5.2.0 + resolution: "eslint-plugin-react-hooks@npm:5.2.0" peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - checksum: 10c0/58c7e10ea5792c33346fcf5cb4024e14837035ce412ff99c2dcb7c4f903dc9b17939078f80bfef826301ce326582c396c00e8e0ac9d10ac2cde2b42d33763c65 + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + checksum: 10c0/1c8d50fa5984c6dea32470651807d2922cc3934cf3425e78f84a24c2dfd972e7f019bee84aefb27e0cf2c13fea0ac1d4473267727408feeb1c56333ca1489385 languageName: node linkType: hard @@ -12782,28 +12922,31 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react@npm:^7.26.0": - version: 7.32.2 - resolution: "eslint-plugin-react@npm:7.32.2" +"eslint-plugin-react@npm:^7.35.2": + version: 7.37.5 + resolution: "eslint-plugin-react@npm:7.37.5" dependencies: - array-includes: "npm:^3.1.6" - array.prototype.flatmap: "npm:^1.3.1" - array.prototype.tosorted: "npm:^1.1.1" + array-includes: "npm:^3.1.8" + array.prototype.findlast: "npm:^1.2.5" + array.prototype.flatmap: "npm:^1.3.3" + array.prototype.tosorted: "npm:^1.1.4" doctrine: "npm:^2.1.0" + es-iterator-helpers: "npm:^1.2.1" estraverse: "npm:^5.3.0" + hasown: "npm:^2.0.2" jsx-ast-utils: "npm:^2.4.1 || ^3.0.0" minimatch: "npm:^3.1.2" - object.entries: "npm:^1.1.6" - object.fromentries: "npm:^2.0.6" - object.hasown: "npm:^1.1.2" - object.values: "npm:^1.1.6" + object.entries: "npm:^1.1.9" + object.fromentries: "npm:^2.0.8" + object.values: "npm:^1.2.1" prop-types: "npm:^15.8.1" - resolve: "npm:^2.0.0-next.4" - semver: "npm:^6.3.0" - string.prototype.matchall: "npm:^4.0.8" + resolve: "npm:^2.0.0-next.5" + semver: "npm:^6.3.1" + string.prototype.matchall: "npm:^4.0.12" + string.prototype.repeat: "npm:^1.0.0" peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 10c0/9ddd5cfc508555a5cb3edbdcc9138dd472d269d3a45da0be3e267ea2b3fa1b5990823675208c0e11376c9c55e46aaad5b7a5f46c965eb4dcf6f1eebcebf174c3 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + checksum: 10c0/c850bfd556291d4d9234f5ca38db1436924a1013627c8ab1853f77cac73ec19b020e861e6c7b783436a48b6ffcdfba4547598235a37ad4611b6739f65fd8ad57 languageName: node linkType: hard @@ -12816,16 +12959,6 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^5.1.1": - version: 5.1.1 - resolution: "eslint-scope@npm:5.1.1" - dependencies: - esrecurse: "npm:^4.3.0" - estraverse: "npm:^4.1.1" - checksum: 10c0/d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a - languageName: node - linkType: hard - "eslint-scope@npm:^8.4.0": version: 8.4.0 resolution: "eslint-scope@npm:8.4.0" @@ -12939,13 +13072,6 @@ __metadata: languageName: node linkType: hard -"estraverse@npm:^4.1.1": - version: 4.3.0 - resolution: "estraverse@npm:4.3.0" - checksum: 10c0/9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d - languageName: node - linkType: hard - "estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": version: 5.3.0 resolution: "estraverse@npm:5.3.0" @@ -13837,7 +13963,7 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7, get-intrinsic@npm:^1.3.0": +"get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7, get-intrinsic@npm:^1.3.0": version: 1.3.0 resolution: "get-intrinsic@npm:1.3.0" dependencies: @@ -14643,6 +14769,13 @@ __metadata: languageName: node linkType: hard +"ignore@npm:^7.0.0": + version: 7.0.5 + resolution: "ignore@npm:7.0.5" + checksum: 10c0/ae00db89fe873064a093b8999fe4cc284b13ef2a178636211842cceb650b9c3e390d3339191acb145d81ed5379d2074840cf0c33a20bdbd6f32821f79eb4ad5d + languageName: node + linkType: hard + "image-size@npm:^1.0.2": version: 1.0.2 resolution: "image-size@npm:1.0.2" @@ -14803,7 +14936,7 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.3, internal-slot@npm:^1.0.7": +"internal-slot@npm:^1.0.7": version: 1.0.7 resolution: "internal-slot@npm:1.0.7" dependencies: @@ -14989,7 +15122,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.12.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": +"is-core-module@npm:^2.12.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1, is-core-module@npm:^2.8.1": version: 2.15.1 resolution: "is-core-module@npm:2.15.1" dependencies: @@ -17774,13 +17907,6 @@ __metadata: languageName: node linkType: hard -"natural-compare-lite@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare-lite@npm:1.4.0" - checksum: 10c0/f6cef26f5044515754802c0fc475d81426f3b90fe88c20fabe08771ce1f736ce46e0397c10acb569a4dd0acb84c7f1ee70676122f95d5bfdd747af3a6c6bbaa8 - languageName: node - linkType: hard - "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -18172,18 +18298,7 @@ __metadata: languageName: node linkType: hard -"object.entries@npm:^1.1.6": - version: 1.1.6 - resolution: "object.entries@npm:1.1.6" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - checksum: 10c0/8782c71db3a068ccbae9e0541e6b4ac2c25dc67c63f97b7e6ad3c88271d7820197e7398e37747f96542ed47c27f0b81148cdf14c42df15dc22f64818ae7bb5bf - languageName: node - linkType: hard - -"object.entries@npm:^1.1.8": +"object.entries@npm:^1.1.8, object.entries@npm:^1.1.9": version: 1.1.9 resolution: "object.entries@npm:1.1.9" dependencies: @@ -18195,7 +18310,7 @@ __metadata: languageName: node linkType: hard -"object.fromentries@npm:^2.0.6, object.fromentries@npm:^2.0.8": +"object.fromentries@npm:^2.0.8": version: 2.0.8 resolution: "object.fromentries@npm:2.0.8" dependencies: @@ -18218,17 +18333,7 @@ __metadata: languageName: node linkType: hard -"object.hasown@npm:^1.1.2": - version: 1.1.2 - resolution: "object.hasown@npm:1.1.2" - dependencies: - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - checksum: 10c0/419fc1c74a2aea7ebb4d49b79d5b1599a010b26c18eae35bd061ccdd013ccb749c499d8dd6ee21a91e6d7264ccc592573d0f13562970f76e25fc844d8c1b02ce - languageName: node - linkType: hard - -"object.values@npm:^1.1.6, object.values@npm:^1.2.0": +"object.values@npm:^1.2.0": version: 1.2.0 resolution: "object.values@npm:1.2.0" dependencies: @@ -19854,7 +19959,7 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.4.3, regexp.prototype.flags@npm:^1.5.2": +"regexp.prototype.flags@npm:^1.5.2": version: 1.5.2 resolution: "regexp.prototype.flags@npm:1.5.2" dependencies: @@ -20025,19 +20130,6 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^2.0.0-next.4": - version: 2.0.0-next.4 - resolution: "resolve@npm:2.0.0-next.4" - dependencies: - is-core-module: "npm:^2.9.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/1de92669e7c46cfe125294c66d5405e13288bb87b97e9bdab71693ceebbcc0255c789bde30e2834265257d330d8ff57414d7d88e3097d8f69951f3ce978bf045 - languageName: node - linkType: hard - "resolve@npm:^2.0.0-next.5": version: 2.0.0-next.5 resolution: "resolve@npm:2.0.0-next.5" @@ -20064,19 +20156,6 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^2.0.0-next.4#optional!builtin": - version: 2.0.0-next.4 - resolution: "resolve@patch:resolve@npm%3A2.0.0-next.4#optional!builtin::version=2.0.0-next.4&hash=c3c19d" - dependencies: - is-core-module: "npm:^2.9.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/ed2bb51d616b9cd30fe85cf49f7a2240094d9fa01a221d361918462be81f683d1855b7f192391d2ab5325245b42464ca59690db5bd5dad0a326fc0de5974dd10 - languageName: node - linkType: hard - "resolve@patch:resolve@npm%3A^2.0.0-next.5#optional!builtin": version: 2.0.0-next.5 resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=c3c19d" @@ -21206,22 +21285,6 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.8": - version: 4.0.8 - resolution: "string.prototype.matchall@npm:4.0.8" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - get-intrinsic: "npm:^1.1.3" - has-symbols: "npm:^1.0.3" - internal-slot: "npm:^1.0.3" - regexp.prototype.flags: "npm:^1.4.3" - side-channel: "npm:^1.0.4" - checksum: 10c0/644523d05c1ee93bab7474e999a5734ee5f6ad2d7ad24ed6ea8706c270dc92b352bde0f2a5420bfbeed54e28cb6a770c3800e1988a5267a70fd5e677c7750abc - languageName: node - linkType: hard - "string.prototype.repeat@npm:^1.0.0": version: 1.0.0 resolution: "string.prototype.repeat@npm:1.0.0" @@ -21800,6 +21863,15 @@ __metadata: languageName: node linkType: hard +"ts-api-utils@npm:^2.1.0": + version: 2.1.0 + resolution: "ts-api-utils@npm:2.1.0" + peerDependencies: + typescript: ">=4.8.4" + checksum: 10c0/9806a38adea2db0f6aa217ccc6bc9c391ddba338a9fe3080676d0d50ed806d305bb90e8cef0276e793d28c8a929f400abb184ddd7ff83a416959c0f4d2ce754f + languageName: node + linkType: hard + "ts-node@npm:^10.7.0": version: 10.9.2 resolution: "ts-node@npm:10.9.2" @@ -21871,13 +21943,6 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^1.8.1": - version: 1.14.1 - resolution: "tslib@npm:1.14.1" - checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 - languageName: node - linkType: hard - "tslib@npm:^2, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.6.2": version: 2.7.0 resolution: "tslib@npm:2.7.0" @@ -21885,17 +21950,6 @@ __metadata: languageName: node linkType: hard -"tsutils@npm:^3.21.0": - version: 3.21.0 - resolution: "tsutils@npm:3.21.0" - dependencies: - tslib: "npm:^1.8.1" - peerDependencies: - typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - checksum: 10c0/02f19e458ec78ead8fffbf711f834ad8ecd2cc6ade4ec0320790713dccc0a412b99e7fd907c4cda2a1dc602c75db6f12e0108e87a5afad4b2f9e90a24cabd5a2 - languageName: node - linkType: hard - "tsx@npm:^4.7.2": version: 4.19.4 resolution: "tsx@npm:4.19.4" @@ -22106,6 +22160,20 @@ __metadata: languageName: node linkType: hard +"typescript-eslint@npm:^8.0.0": + version: 8.36.0 + resolution: "typescript-eslint@npm:8.36.0" + dependencies: + "@typescript-eslint/eslint-plugin": "npm:8.36.0" + "@typescript-eslint/parser": "npm:8.36.0" + "@typescript-eslint/utils": "npm:8.36.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/ba6155b7a950e198400b656bca2ec9df5ed6e18283da276722aaeb4f7d2caf80b2a37d38003532ff1bfbd306201b3a69e56256cc76eb75db1128235a1be2c031 + languageName: node + linkType: hard + "typescript@npm:4.9.4": version: 4.9.4 resolution: "typescript@npm:4.9.4"