diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index dd0f6d00..00000000 --- a/.eslintrc +++ /dev/null @@ -1,32 +0,0 @@ -{ - "extends": [ - "airbnb", - "airbnb/hooks" - ], - "env": { - "node": true, - "browser": true - }, - "rules": { - "max-len": 0, - "import/no-extraneous-dependencies": ["error", { - "devDependencies": true, - "optionalDependencies": false - }], - "no-console": 0, - "jsx-a11y/click-events-have-key-events": 0, - "jsx-a11y/interactive-supports-focus": 0, - "react/jsx-one-expression-per-line": 0, - "object-curly-newline": 0, - "arrow-parens": 0, - "jsx-a11y/control-has-associated-label": 0, - "react/prop-types": 0, - "no-multiple-empty-lines": ["error", { "max": 2, "maxBOF": 0, "maxEOF": 0 }], - "no-promise-executor-return": 0, - "react/function-component-definition": 0, - "no-constant-binary-expression": "error" - }, - "parserOptions": { - "ecmaVersion": 2022 - } -} diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 00000000..fb550aa8 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,46 @@ +module.exports = { + extends: [ + 'airbnb', + 'airbnb/hooks', + 'eslint:recommended', + 'plugin:import/recommended', + 'plugin:import/typescript', + 'plugin:@typescript-eslint/recommended', + 'plugin:@typescript-eslint/stylistic', + 'plugin:react/recommended', + 'plugin:react/jsx-runtime', + 'plugin:react-hooks/recommended', + 'plugin:jsx-a11y/recommended', + ], + env: { + node: true, + browser: true, + }, + rules: { + 'max-len': 0, + 'import/no-extraneous-dependencies': ['error', { + devDependencies: true, + optionalDependencies: false, + }], + 'no-console': 0, + 'jsx-a11y/click-events-have-key-events': 0, + 'jsx-a11y/interactive-supports-focus': 0, + 'react/jsx-one-expression-per-line': 0, + 'object-curly-newline': 0, + 'arrow-parens': 0, + 'jsx-a11y/control-has-associated-label': 0, + 'react/prop-types': 0, + 'no-multiple-empty-lines': ['error', { max: 2, maxBOF: 0, maxEOF: 0 }], + 'no-promise-executor-return': 0, + 'react/function-component-definition': 0, + 'no-constant-binary-expression': 'error', + '@typescript-eslint/no-var-requires': 0, // todo + 'react/display-name': 0, // todo + '@typescript-eslint/no-unused-vars': 0, // todo + 'import/extensions': 0, // doesn't work with TS https://github.com/import-js/eslint-plugin-import/issues/2111 + 'react/jsx-filename-extension': ['error', { extensions: ['.jsx', '.tsx'] }], + }, + parserOptions: { + ecmaVersion: 2022, + }, +}; diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index f92a7fb7..50808f4f 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -16,5 +16,6 @@ jobs: cache: 'yarn' - run: yarn - - run: npm run lint - - run: npm test + - run: yarn lint + - run: yarn test + - run: yarn tsc diff --git a/package.json b/package.json index e32f6c87..a9147778 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "download-ffmpeg-linux-x64": "mkdirp ffmpeg/linux-x64 && cd ffmpeg/linux-x64 && wget https://github.com/mifi/ffmpeg-builds/releases/download/6.0/ffmpeg-n6.0-12-ga6dc92968a-linux64-gpl-shared-6.0.tar.xz -O ffmpeg-ffprobe.xz && tar -xv -f ffmpeg-ffprobe.xz && mv ffmpeg-n6.0-12-ga6dc92968a-linux64-gpl-shared-6.0 extracted && mkdirp lib && mv extracted/bin/{ffmpeg,ffprobe} extracted/lib/lib*.so* lib", "download-ffmpeg-win32-x64": "mkdirp ffmpeg/win32-x64 && cd ffmpeg/win32-x64 && npx download-cli https://github.com/mifi/ffmpeg-builds/releases/download/6.0/ffmpeg-n6.0-12-ga6dc92968a-win64-gpl-shared-6.0.zip --out . --filename ffmpeg-ffprobe.zip && 7z x ffmpeg-ffprobe.zip && mkdirp lib && cd ffmpeg-n6.0-12-ga6dc92968a-win64-gpl-shared-6.0/bin && npx shx mv ffmpeg.exe ffprobe.exe *.dll ../../lib", "build": "yarn icon-gen && vite build --outDir vite-dist", + "tsc": "tsc --build", "test": "vitest", "lint": "eslint --ext .jsx --ext .js . --ext .mjs", "pack-mac": "electron-builder --mac -m dmg", @@ -44,7 +45,11 @@ "devDependencies": { "@fontsource/open-sans": "^4.5.14", "@radix-ui/react-switch": "^1.0.1", + "@tsconfig/strictest": "^2.0.2", + "@tsconfig/vite-react": "^3.0.0", "@types/sortablejs": "^1.15.0", + "@typescript-eslint/eslint-plugin": "^6.17.0", + "@typescript-eslint/parser": "^6.17.0", "@vitejs/plugin-react": "^3.1.0", "color": "^3.1.0", "concurrently": "^6.0.0", @@ -56,6 +61,7 @@ "electron-devtools-installer": "^3.2.0", "eslint": "^8.53.0", "eslint-config-airbnb": "^19.0.4", + "eslint-import-resolver-typescript": "^3.6.1", "eslint-plugin-import": "^2.25.3", "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-react": "^7.28.0", @@ -89,6 +95,7 @@ "sortablejs": "^1.13.0", "sweetalert2": "^11.0.0", "sweetalert2-react-content": "^5.0.7", + "typescript": "^5.3.3", "use-debounce": "^5.1.0", "use-trace-update": "^1.3.0", "uuid": "^8.3.2", diff --git a/public/ffmpeg.js b/public/ffmpeg.js index 046b177e..e29a427b 100644 --- a/public/ffmpeg.js +++ b/public/ffmpeg.js @@ -47,7 +47,7 @@ function abortFfmpegs() { }); } -function handleProgress(process, durationIn, onProgress, customMatcher = () => {}) { +function handleProgress(process, durationIn, onProgress, customMatcher = () => undefined) { if (!onProgress) return; onProgress(0); diff --git a/src/App.jsx b/src/App.jsx index 8338afcd..0b242416 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -102,7 +102,7 @@ const hevcPlaybackSupportedPromise = doesPlayerSupportHevcPlayback(); hevcPlaybackSupportedPromise.catch((err) => console.error(err)); -const App = memo(() => { +function App() { // Per project state const [commandedTime, setCommandedTime] = useState(0); const [ffmpegCommandLog, setFfmpegCommandLog] = useState([]); @@ -2633,6 +2633,6 @@ const App = memo(() => { ); -}); +} -export default App; +export default memo(App); diff --git a/src/hooks/useFfmpegOperations.js b/src/hooks/useFfmpegOperations.js index 27bf1762..5ffe7a68 100644 --- a/src/hooks/useFfmpegOperations.js +++ b/src/hooks/useFfmpegOperations.js @@ -65,7 +65,7 @@ function useFfmpegOperations({ filePath, treatInputFileModifiedTimeAsStart, trea const getOutputPlaybackRateArgs = useCallback(() => (outputPlaybackRate !== 1 ? ['-itsscale', 1 / outputPlaybackRate] : []), [outputPlaybackRate]); - const concatFiles = useCallback(async ({ paths, outDir, outPath, metadataFromPath, includeAllStreams, streams, outFormat, ffmpegExperimental, onProgress = () => {}, preserveMovData, movFastStart, chapters, preserveMetadataOnMerge, videoTimebase, appendFfmpegCommandLog }) => { + const concatFiles = useCallback(async ({ paths, outDir, outPath, metadataFromPath, includeAllStreams, streams, outFormat, ffmpegExperimental, onProgress = () => undefined, preserveMovData, movFastStart, chapters, preserveMetadataOnMerge, videoTimebase, appendFfmpegCommandLog }) => { if (await shouldSkipExistingFile(outPath)) return { haveExcludedStreams: false }; console.log('Merging files', { paths }, 'to', outPath); diff --git a/src/util/streams.js b/src/util/streams.js index 5687f6b0..e0ab1d4c 100644 --- a/src/util/streams.js +++ b/src/util/streams.js @@ -108,7 +108,7 @@ export function getActiveDisposition(disposition) { export const isMov = (format) => ['ismv', 'ipod', 'mp4', 'mov'].includes(format); -function getPerStreamFlags({ stream, outputIndex, outFormat, manuallyCopyDisposition = false, getVideoArgs = () => {} }) { +function getPerStreamFlags({ stream, outputIndex, outFormat, manuallyCopyDisposition = false, getVideoArgs = () => undefined }) { let args = []; function addArgs(...newArgs) { diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..f56514f2 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,6 @@ +{ + "references": [ + { "path": "./tsconfig.web.json" } + ], + "files": [], +} \ No newline at end of file diff --git a/tsconfig.web.json b/tsconfig.web.json new file mode 100644 index 00000000..72510e39 --- /dev/null +++ b/tsconfig.web.json @@ -0,0 +1,15 @@ +{ + "extends": ["@tsconfig/strictest", "@tsconfig/vite-react/tsconfig.json"], + "compilerOptions": { + "exactOptionalPropertyTypes": false, // todo + "noUncheckedIndexedAccess": true, + "noEmit": true, + "isolatedModules": true, + "noImplicitAny": false, // todo + "checkJs": false, // todo + "allowJs": true, // todo + }, + "include": [ + "src/**/*", + ], +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 5b76412f..e384ea92 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1024,7 +1024,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.2.0": +"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" dependencies: @@ -1035,7 +1035,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.6.1": +"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": version: 4.10.0 resolution: "@eslint-community/regexpp@npm:4.10.0" checksum: 8c36169c815fc5d726078e8c71a5b592957ee60d08c6470f9ce0187c8046af1a00afbda0a065cc40ff18d5d83f82aed9793c6818f7304a74a7488dc9f3ecbd42 @@ -1533,6 +1533,20 @@ __metadata: languageName: node linkType: hard +"@tsconfig/strictest@npm:^2.0.2": + version: 2.0.2 + resolution: "@tsconfig/strictest@npm:2.0.2" + checksum: 5409233288d872a2d79aca5eb65d3da681c6e0baa9ee58744adceda834fececdaa8265869793cfd5a80f4c887e3296b4d13309ef5bffbf7c8272071f00b60ba7 + languageName: node + linkType: hard + +"@tsconfig/vite-react@npm:^3.0.0": + version: 3.0.0 + resolution: "@tsconfig/vite-react@npm:3.0.0" + checksum: 69bad7d6829dd286107607d0c47ef4d9e245dec12741335ba3df6cd6f3693d80275c45e4d64ba4dd8338a086dbc76120dc1cc7b3b4dcaf970948a709d7a9f77c + languageName: node + linkType: hard + "@types/cacheable-request@npm:^6.0.1": version: 6.0.3 resolution: "@types/cacheable-request@npm:6.0.3" @@ -1602,6 +1616,13 @@ __metadata: languageName: node linkType: hard +"@types/json-schema@npm:^7.0.12": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 1a3c3e06236e4c4aab89499c428d585527ce50c24fe8259e8b3926d3df4cfbbbcf306cfc73ddfb66cbafc973116efd15967020b0f738f63e09e64c7d260519e7 + languageName: node + linkType: hard + "@types/json5@npm:^0.0.29": version: 0.0.29 resolution: "@types/json5@npm:0.0.29" @@ -1717,6 +1738,13 @@ __metadata: languageName: node linkType: hard +"@types/semver@npm:^7.5.0": + version: 7.5.6 + resolution: "@types/semver@npm:7.5.6" + checksum: e77282b17f74354e17e771c0035cccb54b94cc53d0433fa7e9ba9d23fd5d7edcd14b6c8b7327d58bbd89e83b1c5eda71dfe408e06b929007e2b89586e9b63459 + languageName: node + linkType: hard + "@types/sortablejs@npm:^1.15.0": version: 1.15.0 resolution: "@types/sortablejs@npm:1.15.0" @@ -1754,6 +1782,129 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/eslint-plugin@npm:^6.17.0": + version: 6.17.0 + resolution: "@typescript-eslint/eslint-plugin@npm:6.17.0" + dependencies: + "@eslint-community/regexpp": "npm:^4.5.1" + "@typescript-eslint/scope-manager": "npm:6.17.0" + "@typescript-eslint/type-utils": "npm:6.17.0" + "@typescript-eslint/utils": "npm:6.17.0" + "@typescript-eslint/visitor-keys": "npm:6.17.0" + debug: "npm:^4.3.4" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.2.4" + natural-compare: "npm:^1.4.0" + semver: "npm:^7.5.4" + ts-api-utils: "npm:^1.0.1" + peerDependencies: + "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: f2a5774e9cc03e491a5a488501e5622c7eebd766f5a4fc2c30642864a3b89b0807946bde33a678f326ba7032f3f6a51aa0bf9c2d10adc823804fc9fb47db55a6 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^6.17.0": + version: 6.17.0 + resolution: "@typescript-eslint/parser@npm:6.17.0" + dependencies: + "@typescript-eslint/scope-manager": "npm:6.17.0" + "@typescript-eslint/types": "npm:6.17.0" + "@typescript-eslint/typescript-estree": "npm:6.17.0" + "@typescript-eslint/visitor-keys": "npm:6.17.0" + debug: "npm:^4.3.4" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 2ed0ed4a5b30e953430ce3279df3655af09fa1caed2abf11804d239717daefc32a22864f6620ef57bb9c684c74a99a13241384fea5096e961385e3678fc2e920 + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:6.17.0": + version: 6.17.0 + resolution: "@typescript-eslint/scope-manager@npm:6.17.0" + dependencies: + "@typescript-eslint/types": "npm:6.17.0" + "@typescript-eslint/visitor-keys": "npm:6.17.0" + checksum: fe09c628553c9336e6a36d32c1d34e78ebd20aa02130a6bf535329621ba5a98aaac171f607bc6e4d17b3478c42e7de6476376636897ce3f227c754eb99acd07e + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:6.17.0": + version: 6.17.0 + resolution: "@typescript-eslint/type-utils@npm:6.17.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:6.17.0" + "@typescript-eslint/utils": "npm:6.17.0" + debug: "npm:^4.3.4" + ts-api-utils: "npm:^1.0.1" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: dc7938429193acfda61b7282197ec046039e2c4da41cdcddf4daaf300d10229e4e23bb0fcf0503b19c0b99a874849c8a9f5bb35ce106260f56a14106d2b41d8c + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:6.17.0": + version: 6.17.0 + resolution: "@typescript-eslint/types@npm:6.17.0" + checksum: 87ab1b5a3270ab34b917c22a2fb90a9ad7d9f3b19d73a337bc9efbe65f924da13482c97e8ccbe3bd3d081aa96039eeff50de41c1da2a2128066429b931cdb21d + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:6.17.0": + version: 6.17.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.17.0" + dependencies: + "@typescript-eslint/types": "npm:6.17.0" + "@typescript-eslint/visitor-keys": "npm:6.17.0" + debug: "npm:^4.3.4" + globby: "npm:^11.1.0" + is-glob: "npm:^4.0.3" + minimatch: "npm:9.0.3" + semver: "npm:^7.5.4" + ts-api-utils: "npm:^1.0.1" + peerDependenciesMeta: + typescript: + optional: true + checksum: 1671b0d2f2fdf07074fb1e2524d61935cec173bd8db6e482cc5b2dcc77aed3ffa831396736ffa0ee2fdbddd8585ae9ca8d6c97bcaea1385b23907a1ec0508f83 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:6.17.0": + version: 6.17.0 + resolution: "@typescript-eslint/utils@npm:6.17.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.0" + "@types/json-schema": "npm:^7.0.12" + "@types/semver": "npm:^7.5.0" + "@typescript-eslint/scope-manager": "npm:6.17.0" + "@typescript-eslint/types": "npm:6.17.0" + "@typescript-eslint/typescript-estree": "npm:6.17.0" + semver: "npm:^7.5.4" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: 37c63afcf66124bf84808699997953b8c84a378aa2c490a771b611d82cdac8499c58fac8eeb8378528e97660b59563d99297bfec4b982cd68760b0ffe54aa714 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:6.17.0": + version: 6.17.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.17.0" + dependencies: + "@typescript-eslint/types": "npm:6.17.0" + eslint-visitor-keys: "npm:^3.4.1" + checksum: a2aed0e1437fdab8858ab9c7c8e355f8b72a5fa4b0adc54f28b8a2bbc29d4bb93214968ee940f83d013d0a4b83d00cd4eeeb05fb4c2c7d0ead324c6793f7d6d4 + languageName: node + linkType: hard + "@ungap/structured-clone@npm:^1.2.0": version: 1.2.0 resolution: "@ungap/structured-clone@npm:1.2.0" @@ -3820,6 +3971,16 @@ __metadata: languageName: node linkType: hard +"enhanced-resolve@npm:^5.12.0": + version: 5.15.0 + resolution: "enhanced-resolve@npm:5.15.0" + dependencies: + graceful-fs: "npm:^4.2.4" + tapable: "npm:^2.2.0" + checksum: 180c3f2706f9117bf4dc7982e1df811dad83a8db075723f299245ef4488e0cad7e96859c5f0e410682d28a4ecd4da021ec7d06265f7e4eb6eed30c69ca5f7d3e + languageName: node + linkType: hard + "ensure-error@npm:^2.0.0": version: 2.1.0 resolution: "ensure-error@npm:2.1.0" @@ -4225,6 +4386,24 @@ __metadata: languageName: node linkType: hard +"eslint-import-resolver-typescript@npm:^3.6.1": + version: 3.6.1 + resolution: "eslint-import-resolver-typescript@npm:3.6.1" + dependencies: + debug: "npm:^4.3.4" + enhanced-resolve: "npm:^5.12.0" + eslint-module-utils: "npm:^2.7.4" + fast-glob: "npm:^3.3.1" + get-tsconfig: "npm:^4.5.0" + is-core-module: "npm:^2.11.0" + is-glob: "npm:^4.0.3" + peerDependencies: + eslint: "*" + eslint-plugin-import: "*" + checksum: 261df24721a7c5e37ee598b63e7e12c54e3d20c9ae5de6dbc132cecced023cb967c481007eef73252da108ac7eabb2e859853ff2e2d5776699a2954466ca716f + languageName: node + linkType: hard + "eslint-module-utils@npm:^2.7.2": version: 2.7.2 resolution: "eslint-module-utils@npm:2.7.2" @@ -4235,6 +4414,18 @@ __metadata: languageName: node linkType: hard +"eslint-module-utils@npm:^2.7.4": + version: 2.8.0 + resolution: "eslint-module-utils@npm:2.8.0" + dependencies: + debug: "npm:^3.2.7" + peerDependenciesMeta: + eslint: + optional: true + checksum: a9a7ed93eb858092e3cdc797357d4ead2b3ea06959b0eada31ab13862d46a59eb064b9cb82302214232e547980ce33618c2992f6821138a4934e65710ed9cc29 + languageName: node + linkType: hard + "eslint-plugin-import@npm:^2.25.3": version: 2.25.4 resolution: "eslint-plugin-import@npm:2.25.4" @@ -4596,6 +4787,19 @@ __metadata: languageName: node linkType: hard +"fast-glob@npm:^3.3.1": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.4" + checksum: 222512e9315a0efca1276af9adb2127f02105d7288fa746145bf45e2716383fb79eb983c89601a72a399a56b7c18d38ce70457c5466218c5f13fad957cee16df + languageName: node + linkType: hard + "fast-json-stable-stringify@npm:^2.0.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" @@ -5017,6 +5221,13 @@ __metadata: languageName: node linkType: hard +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 185e20d20f10c8d661d59aac0f3b63b31132d492e1b11fcc2a93cb2c47257ebaee7407c38513efd2b35cafdf972d9beb2ea4593c1e0f3bf8f2744836928d7454 + languageName: node + linkType: hard + "fuzzaldrin-plus@npm:^0.6.0": version: 0.6.0 resolution: "fuzzaldrin-plus@npm:0.6.0" @@ -5114,6 +5325,15 @@ __metadata: languageName: node linkType: hard +"get-tsconfig@npm:^4.5.0": + version: 4.7.2 + resolution: "get-tsconfig@npm:4.7.2" + dependencies: + resolve-pkg-maps: "npm:^1.0.0" + checksum: f21135848fb5d16012269b7b34b186af7a41824830f8616aba17a15eb4d9e54fdc876833f1e21768395215a826c8145582f5acd594ae2b4de3284d10b38d20f8 + languageName: node + linkType: hard + "github-api@npm:^3.2.2": version: 3.4.0 resolution: "github-api@npm:3.4.0" @@ -5258,7 +5478,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.0.1": +"globby@npm:^11.0.1, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -5367,6 +5587,15 @@ __metadata: languageName: node linkType: hard +"hasown@npm:^2.0.0": + version: 2.0.0 + resolution: "hasown@npm:2.0.0" + dependencies: + function-bind: "npm:^1.1.2" + checksum: c330f8d93f9d23fe632c719d4db3d698ef7d7c367d51548b836069e06a90fa9151e868c8e67353cfe98d67865bf7354855db28fa36eb1b18fa5d4a3f4e7f1c90 + languageName: node + linkType: hard + "hast-util-parse-selector@npm:^2.0.0": version: 2.2.5 resolution: "hast-util-parse-selector@npm:2.2.5" @@ -5654,6 +5883,13 @@ __metadata: languageName: node linkType: hard +"ignore@npm:^5.2.4": + version: 5.3.0 + resolution: "ignore@npm:5.3.0" + checksum: 51594355cea4c6ad6b28b3b85eb81afa7b988a1871feefd7062baf136c95aa06760ee934fa9590e43d967bd377ce84a4cf6135fbeb6063e063f1182a0e9a3bcd + languageName: node + linkType: hard + "immediate@npm:~3.0.5": version: 3.0.6 resolution: "immediate@npm:3.0.6" @@ -5861,6 +6097,15 @@ __metadata: languageName: node linkType: hard +"is-core-module@npm:^2.11.0": + version: 2.13.1 + resolution: "is-core-module@npm:2.13.1" + dependencies: + hasown: "npm:^2.0.0" + checksum: d53bd0cc24b0a0351fb4b206ee3908f71b9bbf1c47e9c9e14e5f06d292af1663704d2abd7e67700d6487b2b7864e0d0f6f10a1edf1892864bdffcb197d1845a2 + languageName: node + linkType: hard + "is-core-module@npm:^2.2.0, is-core-module@npm:^2.8.0": version: 2.8.1 resolution: "is-core-module@npm:2.8.1" @@ -6566,7 +6811,11 @@ __metadata: "@fontsource/open-sans": "npm:^4.5.14" "@radix-ui/colors": "npm:^0.1.8" "@radix-ui/react-switch": "npm:^1.0.1" + "@tsconfig/strictest": "npm:^2.0.2" + "@tsconfig/vite-react": "npm:^3.0.0" "@types/sortablejs": "npm:^1.15.0" + "@typescript-eslint/eslint-plugin": "npm:^6.17.0" + "@typescript-eslint/parser": "npm:^6.17.0" "@vitejs/plugin-react": "npm:^3.1.0" color: "npm:^3.1.0" concurrently: "npm:^6.0.0" @@ -6583,6 +6832,7 @@ __metadata: electron-unhandled: "npm:^4.0.1" eslint: "npm:^8.53.0" eslint-config-airbnb: "npm:^19.0.4" + eslint-import-resolver-typescript: "npm:^3.6.1" eslint-plugin-import: "npm:^2.25.3" eslint-plugin-jsx-a11y: "npm:^6.5.1" eslint-plugin-react: "npm:^7.28.0" @@ -6632,6 +6882,7 @@ __metadata: strtok3: "npm:^6.0.0" sweetalert2: "npm:^11.0.0" sweetalert2-react-content: "npm:^5.0.7" + typescript: "npm:^5.3.3" use-debounce: "npm:^5.1.0" use-trace-update: "npm:^1.3.0" uuid: "npm:^8.3.2" @@ -6892,6 +7143,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:9.0.3": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: c81b47d28153e77521877649f4bab48348d10938df9e8147a58111fe00ef89559a2938de9f6632910c4f7bf7bb5cd81191a546167e58d357f0cfb1e18cecc1c5 + languageName: node + linkType: hard + "minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -8423,6 +8683,13 @@ __metadata: languageName: node linkType: hard +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: 0763150adf303040c304009231314d1e84c6e5ebfa2d82b7d94e96a6e82bacd1dcc0b58ae257315f3c8adb89a91d8d0f12928241cba2df1680fbe6f60bf99b0e + languageName: node + linkType: hard + "resolve@npm:^1.20.0": version: 1.21.0 resolution: "resolve@npm:1.21.0" @@ -9477,6 +9744,13 @@ __metadata: languageName: node linkType: hard +"tapable@npm:^2.2.0": + version: 2.2.1 + resolution: "tapable@npm:2.2.1" + checksum: 1769336dd21481ae6347611ca5fca47add0962fd8e80466515032125eca0084a4f0ede11e65341b9c0018ef4e1cf1ad820adbb0fba7cc99865c6005734000b0a + languageName: node + linkType: hard + "tar-fs@npm:^2.0.0, tar-fs@npm:^2.1.1": version: 2.1.1 resolution: "tar-fs@npm:2.1.1" @@ -9779,6 +10053,15 @@ __metadata: languageName: node linkType: hard +"ts-api-utils@npm:^1.0.1": + version: 1.0.3 + resolution: "ts-api-utils@npm:1.0.3" + peerDependencies: + typescript: ">=4.2.0" + checksum: 1350a5110eb1e534e9a6178f4081fb8a4fcc439749e19f4ad699baec9090fcb90fe532d5e191d91a062dc6e454a14a8d7eb2ad202f57135a30c4a44a3024f039 + languageName: node + linkType: hard + "ts-easing@npm:^0.2.0": version: 0.2.0 resolution: "ts-easing@npm:0.2.0" @@ -9901,6 +10184,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:^5.3.3": + version: 5.3.3 + resolution: "typescript@npm:5.3.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 6e4e6a14a50c222b3d14d4ea2f729e79f972fa536ac1522b91202a9a65af3605c2928c4a790a4a50aa13694d461c479ba92cedaeb1e7b190aadaa4e4b96b8e18 + languageName: node + linkType: hard + "typescript@patch:typescript@npm%3A^4.0.2#optional!builtin, typescript@patch:typescript@npm%3A^4.2.4#optional!builtin": version: 4.9.5 resolution: "typescript@patch:typescript@npm%3A4.9.5#optional!builtin::version=4.9.5&hash=289587" @@ -9911,6 +10204,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@npm%3A^5.3.3#optional!builtin": + version: 5.3.3 + resolution: "typescript@patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: c93786fcc9a70718ba1e3819bab56064ead5817004d1b8186f8ca66165f3a2d0100fee91fa64c840dcd45f994ca5d615d8e1f566d39a7470fc1e014dbb4cf15d + languageName: node + linkType: hard + "ua-parser-js@npm:^0.7.30": version: 0.7.33 resolution: "ua-parser-js@npm:0.7.33"