From 102ca8cc62bd7bea543c700c19c937f4a351b985 Mon Sep 17 00:00:00 2001 From: Kyohei Fukuda Date: Mon, 3 Mar 2025 10:20:36 +0900 Subject: [PATCH] Fix eslint (#780) * Refactor ESLint configuration: remove legacy .eslintrc.cjs files and replace with new .mjs configurations * Remove unnecessary TypeScript ignore comments and simplify async calls in barcode tests * Refactor date helper: remove TypeScript ignore comments and simplify AirDatepicker usage * Enhance date helper: add AirDatepickerDate type and improve type annotations for onSelect callback * Update TypeScript and ESLint configurations: change module to NodeNext, refine file patterns, and enhance lint command * Refactor ESLint configuration: remove unnecessary language options for TypeScript files --- eslint.base.js | 29 - eslint.config.mjs | 43 ++ package-lock.json | 582 ++++-------------- package.json | 1 + packages/common/.eslintrc.cjs | 3 - packages/common/eslint.config.mjs | 22 + packages/common/package.json | 2 +- packages/common/src/types.ts | 2 - packages/converter/.eslintrc.cjs | 3 - packages/converter/eslint.config.mjs | 22 + packages/converter/package.json | 2 +- packages/generator/.eslintrc.cjs | 3 - packages/generator/eslint.config.mjs | 22 + packages/generator/package.json | 2 +- packages/manipulator/.eslintrc.cjs | 3 - packages/manipulator/eslint.config.mjs | 22 + packages/manipulator/package.json | 4 +- packages/schemas/.eslintrc.cjs | 3 - packages/schemas/__tests__/barcode.test.ts | 12 +- packages/schemas/eslint.config.mjs | 22 + packages/schemas/package.json | 2 +- packages/schemas/src/date/helper.ts | 124 ++-- packages/ui/.eslintrc.cjs | 16 - packages/ui/eslint.config.mjs | 41 ++ packages/ui/package.json | 8 +- .../RightSidebar/DetailView/index.tsx | 1 - packages/ui/src/components/Root.tsx | 2 - packages/ui/tsconfig.json | 2 +- 28 files changed, 370 insertions(+), 630 deletions(-) delete mode 100644 eslint.base.js create mode 100644 eslint.config.mjs delete mode 100644 packages/common/.eslintrc.cjs create mode 100644 packages/common/eslint.config.mjs delete mode 100644 packages/converter/.eslintrc.cjs create mode 100644 packages/converter/eslint.config.mjs delete mode 100644 packages/generator/.eslintrc.cjs create mode 100644 packages/generator/eslint.config.mjs delete mode 100644 packages/manipulator/.eslintrc.cjs create mode 100644 packages/manipulator/eslint.config.mjs delete mode 100644 packages/schemas/.eslintrc.cjs create mode 100644 packages/schemas/eslint.config.mjs delete mode 100644 packages/ui/.eslintrc.cjs create mode 100644 packages/ui/eslint.config.mjs diff --git a/eslint.base.js b/eslint.base.js deleted file mode 100644 index d43b37a2..00000000 --- a/eslint.base.js +++ /dev/null @@ -1,29 +0,0 @@ -module.exports = { - root: true, - env: { - es2020: true, - node: true, - browser: true, - jest: true, - }, - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:@typescript-eslint/recommended-requiring-type-checking" - ], - ignorePatterns: ['dist', '.eslintrc.cjs'], - overrides: [ - { - files: ['*.ts'], - parserOptions: { - project: ['./tsconfig.esm.json'], - }, - }, - ], - parser: '@typescript-eslint/parser', - parserOptions: { - parser: 'typescript-eslint-parser', - ecmaVersion: 2020, - sourceType: 'module', - }, -}; \ No newline at end of file diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..69528a0d --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,43 @@ +import typescriptParser from '@typescript-eslint/parser'; +import typescriptPlugin from '@typescript-eslint/eslint-plugin'; + +export default [ + { + ignores: ['dist/**', '**/node_modules/**'], + }, + { + languageOptions: { + ecmaVersion: 2020, + sourceType: 'module', + parser: typescriptParser, + parserOptions: { + ecmaVersion: 2020, + sourceType: 'module', + }, + globals: { + // Browser globals + window: 'readonly', + document: 'readonly', + // Node globals + process: 'readonly', + // Jest globals + jest: 'readonly', + describe: 'readonly', + test: 'readonly', + it: 'readonly', + expect: 'readonly', + beforeEach: 'readonly', + afterEach: 'readonly', + beforeAll: 'readonly', + afterAll: 'readonly', + }, + }, + plugins: { + '@typescript-eslint': typescriptPlugin, + }, + rules: { + ...typescriptPlugin.configs['recommended'].rules, + ...typescriptPlugin.configs['recommended-requiring-type-checking'].rules, + }, + } +]; diff --git a/package-lock.json b/package-lock.json index 4638e76d..87204903 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ ], "devDependencies": { "@babel/core": "^7.16.7", + "@humanwhocodes/config-array": "^0.13.0", "@types/jest": "^29.5.14", "@types/jest-image-snapshot": "^6.4.0", "@typescript-eslint/eslint-plugin": "^8.25.0", @@ -1272,30 +1273,6 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@eslint/core": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", @@ -1333,17 +1310,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", @@ -1357,19 +1323,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@eslint/js": { "version": "9.21.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.21.0.tgz", @@ -1442,6 +1395,22 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -1456,6 +1425,14 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/@humanwhocodes/retry": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", @@ -2820,30 +2797,6 @@ "path-browserify": "^1.0.1" } }, - "node_modules/@ts-morph/common/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@ts-morph/common/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@types/aria-query": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", @@ -3036,13 +2989,6 @@ "undici-types": "~6.20.0" } }, - "node_modules/@types/offscreencanvas": { - "version": "2019.7.3", - "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz", - "integrity": "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/parse-json": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", @@ -3285,6 +3231,32 @@ "typescript": ">=4.8.4 <5.8.0" } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { "version": "7.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", @@ -3353,6 +3325,13 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, "node_modules/@vitejs/plugin-react": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz", @@ -4270,13 +4249,14 @@ } }, "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "devOptional": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/braces": { @@ -5765,28 +5745,17 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, - "node_modules/eslint-plugin-react/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-react/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, "engines": { - "node": "*" + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "node_modules/eslint-plugin-react/node_modules/resolve": { @@ -5837,17 +5806,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", @@ -5861,19 +5819,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/espree": { "version": "10.3.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", @@ -6144,6 +6089,16 @@ "minimatch": "^5.0.1" } }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", @@ -6693,30 +6648,6 @@ "license": "BSD-2-Clause", "peer": true }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -7394,6 +7325,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -7739,30 +7680,6 @@ "node": ">=10" } }, - "node_modules/jake/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jake/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", @@ -8971,19 +8888,16 @@ } }, "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "devOptional": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "*" } }, "node_modules/minipass": { @@ -9265,17 +9179,6 @@ "node": ">=4" } }, - "node_modules/npm-run-all/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/npm-run-all/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -9345,19 +9248,6 @@ "node": ">=4" } }, - "node_modules/npm-run-all/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/npm-run-all/node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -11320,6 +11210,16 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/rimraf/node_modules/glob": { "version": "11.0.1", "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz", @@ -12492,30 +12392,6 @@ "node": ">=8" } }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/throttle-debounce": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.2.tgz", @@ -14259,7 +14135,6 @@ "@pdfme/common": "file:../common", "@types/bwip-js": "^3.2.1", "@types/fontkit": "^2.0.4", - "@types/offscreencanvas": "^2019.7.3", "@types/pngjs": "^6.0.2", "jsqr": "^1.4.0", "pngjs": "^7.0.0" @@ -14301,11 +14176,13 @@ "@testing-library/react": "^12.1.2", "@types/react": "^17.0.52", "@types/react-dom": "^17.0.18", + "@ungap/structured-clone": "^1.3.0", "@vitejs/plugin-react": "^4.2.0", "csstype": "^3.1.2", "esbuild": "^0.25.0", - "eslint-plugin-react": "^7.28.0", - "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-react": "^7.37.4", + "eslint-plugin-react-hooks": "^5.2.0", + "is-path-inside": "^3.0.3", "jest-canvas-mock": "^2.3.1", "jest-environment-jsdom": "^29.7.0", "process": "^0.11.10", @@ -14318,40 +14195,10 @@ "@pdfme/schemas": "latest" } }, - "packages/ui/node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "packages/ui/node_modules/@eslint/js": { - "version": "8.57.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, "packages/ui/node_modules/@testing-library/react": { "version": "12.1.5", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.5.tgz", + "integrity": "sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg==", "dev": true, "license": "MIT", "dependencies": { @@ -14366,207 +14213,6 @@ "react": "<18.0.0", "react-dom": "<18.0.0" } - }, - "packages/ui/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "packages/ui/node_modules/doctrine": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "packages/ui/node_modules/eslint": { - "version": "8.57.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "packages/ui/node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "packages/ui/node_modules/eslint-scope": { - "version": "7.2.2", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "packages/ui/node_modules/espree": { - "version": "9.6.1", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "packages/ui/node_modules/file-entry-cache": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "packages/ui/node_modules/flat-cache": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "packages/ui/node_modules/globals": { - "version": "13.24.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/ui/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "packages/ui/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "packages/ui/node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } } } } diff --git a/package.json b/package.json index 6c7b0cc1..ee120f1c 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ }, "devDependencies": { "@babel/core": "^7.16.7", + "@humanwhocodes/config-array": "^0.13.0", "@types/jest": "^29.5.14", "@types/jest-image-snapshot": "^6.4.0", "@typescript-eslint/eslint-plugin": "^8.25.0", diff --git a/packages/common/.eslintrc.cjs b/packages/common/.eslintrc.cjs deleted file mode 100644 index 86931962..00000000 --- a/packages/common/.eslintrc.cjs +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: ['../../eslint.base.js'], -}; diff --git a/packages/common/eslint.config.mjs b/packages/common/eslint.config.mjs new file mode 100644 index 00000000..6c1af351 --- /dev/null +++ b/packages/common/eslint.config.mjs @@ -0,0 +1,22 @@ +import { fileURLToPath } from 'url'; +import { dirname, resolve } from 'path'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +// Import the root config +const rootConfigPath = resolve(__dirname, '../../eslint.config.mjs'); +const rootConfig = await import(rootConfigPath); + +export default [ + ...rootConfig.default, + { + files: ['src/**/*.ts'], + languageOptions: { + parserOptions: { + project: ['./tsconfig.esm.json'], + tsconfigRootDir: __dirname, + }, + }, + }, +]; diff --git a/packages/common/package.json b/packages/common/package.json index 50ce2a95..33a4a214 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -42,7 +42,7 @@ "build:esm": "tsc -p tsconfig.esm.json", "build:node": "tsc -p tsconfig.node.json", "clean": "rimraf dist", - "lint": "eslint --ext .ts src", + "lint": "eslint --ext .ts src --config eslint.config.mjs --no-error-on-unmatched-pattern", "test": "jest", "prune": "ts-prune src", "prettier": "prettier --write 'src/**/*.ts'" diff --git a/packages/common/src/types.ts b/packages/common/src/types.ts index 7b3905e0..2e1dca37 100644 --- a/packages/common/src/types.ts +++ b/packages/common/src/types.ts @@ -1,8 +1,6 @@ import { z } from 'zod'; import type { PDFPage, PDFDocument } from '@pdfme/pdf-lib'; -/** @ts-ignore -- optional interface, will gracefully degrade to `any` if `antd` isn't installed **/ import type { ThemeConfig, GlobalToken } from 'antd'; -/** @ts-ignore -- optional interface, will gracefully degrade to `any` if `form-render` isn't installed*/ import type { WidgetProps as _PropPanelWidgetProps, Schema as _PropPanelSchema } from 'form-render'; import { Lang, diff --git a/packages/converter/.eslintrc.cjs b/packages/converter/.eslintrc.cjs deleted file mode 100644 index 86931962..00000000 --- a/packages/converter/.eslintrc.cjs +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: ['../../eslint.base.js'], -}; diff --git a/packages/converter/eslint.config.mjs b/packages/converter/eslint.config.mjs new file mode 100644 index 00000000..6c1af351 --- /dev/null +++ b/packages/converter/eslint.config.mjs @@ -0,0 +1,22 @@ +import { fileURLToPath } from 'url'; +import { dirname, resolve } from 'path'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +// Import the root config +const rootConfigPath = resolve(__dirname, '../../eslint.config.mjs'); +const rootConfig = await import(rootConfigPath); + +export default [ + ...rootConfig.default, + { + files: ['src/**/*.ts'], + languageOptions: { + parserOptions: { + project: ['./tsconfig.esm.json'], + tsconfigRootDir: __dirname, + }, + }, + }, +]; diff --git a/packages/converter/package.json b/packages/converter/package.json index a7d3292d..3eb36052 100644 --- a/packages/converter/package.json +++ b/packages/converter/package.json @@ -38,7 +38,7 @@ "build:cjs": "tsc -p tsconfig.cjs.json", "build:esm": "tsc -p tsconfig.esm.json", "clean": "rimraf dist", - "lint": "eslint --ext .ts src", + "lint": "eslint --ext .ts src --config eslint.config.mjs --no-error-on-unmatched-pattern", "test": "jest", "prune": "ts-prune src", "prettier": "prettier --write 'src/**/*.ts'" diff --git a/packages/generator/.eslintrc.cjs b/packages/generator/.eslintrc.cjs deleted file mode 100644 index cd7f4888..00000000 --- a/packages/generator/.eslintrc.cjs +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: ['../../eslint.base.js'], -}; \ No newline at end of file diff --git a/packages/generator/eslint.config.mjs b/packages/generator/eslint.config.mjs new file mode 100644 index 00000000..6c1af351 --- /dev/null +++ b/packages/generator/eslint.config.mjs @@ -0,0 +1,22 @@ +import { fileURLToPath } from 'url'; +import { dirname, resolve } from 'path'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +// Import the root config +const rootConfigPath = resolve(__dirname, '../../eslint.config.mjs'); +const rootConfig = await import(rootConfigPath); + +export default [ + ...rootConfig.default, + { + files: ['src/**/*.ts'], + languageOptions: { + parserOptions: { + project: ['./tsconfig.esm.json'], + tsconfigRootDir: __dirname, + }, + }, + }, +]; diff --git a/packages/generator/package.json b/packages/generator/package.json index c9f1a03f..60794d9c 100644 --- a/packages/generator/package.json +++ b/packages/generator/package.json @@ -41,7 +41,7 @@ "build:esm": "tsc -p tsconfig.esm.json", "build:node": "tsc -p tsconfig.node.json", "clean": "rimraf dist", - "lint": "eslint --ext .ts src", + "lint": "eslint --ext .ts src --config eslint.config.mjs --no-error-on-unmatched-pattern", "test": "jest", "test:update-snapshots": "jest --updateSnapshot", "prune": "ts-prune src", diff --git a/packages/manipulator/.eslintrc.cjs b/packages/manipulator/.eslintrc.cjs deleted file mode 100644 index 86931962..00000000 --- a/packages/manipulator/.eslintrc.cjs +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: ['../../eslint.base.js'], -}; diff --git a/packages/manipulator/eslint.config.mjs b/packages/manipulator/eslint.config.mjs new file mode 100644 index 00000000..6c1af351 --- /dev/null +++ b/packages/manipulator/eslint.config.mjs @@ -0,0 +1,22 @@ +import { fileURLToPath } from 'url'; +import { dirname, resolve } from 'path'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +// Import the root config +const rootConfigPath = resolve(__dirname, '../../eslint.config.mjs'); +const rootConfig = await import(rootConfigPath); + +export default [ + ...rootConfig.default, + { + files: ['src/**/*.ts'], + languageOptions: { + parserOptions: { + project: ['./tsconfig.esm.json'], + tsconfigRootDir: __dirname, + }, + }, + }, +]; diff --git a/packages/manipulator/package.json b/packages/manipulator/package.json index 28caf586..2014b3bb 100644 --- a/packages/manipulator/package.json +++ b/packages/manipulator/package.json @@ -37,7 +37,7 @@ "build:cjs": "tsc -p tsconfig.cjs.json", "build:esm": "tsc -p tsconfig.esm.json", "clean": "rimraf dist", - "lint": "eslint --ext .ts src", + "lint": "eslint --ext .ts src --config eslint.config.mjs", "test": "jest", "test:update-snapshots": "jest --updateSnapshot", "prune": "ts-prune src", @@ -78,4 +78,4 @@ "^(\\.{1,2}/(?:src|__tests__)/.*)\\.js$": "$1.ts" } } -} \ No newline at end of file +} diff --git a/packages/schemas/.eslintrc.cjs b/packages/schemas/.eslintrc.cjs deleted file mode 100644 index 86931962..00000000 --- a/packages/schemas/.eslintrc.cjs +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: ['../../eslint.base.js'], -}; diff --git a/packages/schemas/__tests__/barcode.test.ts b/packages/schemas/__tests__/barcode.test.ts index 94c0ddd0..27f06974 100644 --- a/packages/schemas/__tests__/barcode.test.ts +++ b/packages/schemas/__tests__/barcode.test.ts @@ -272,22 +272,19 @@ describe('createBarCode', () => { ['タイ語', 'สวัสดีปีใหม่', 'สวัสดีปีใหม่'], ]; - const upcaCode = '416000336108'; - describe('generate qrcode with default colours', () => { for (const t of tests) { // eslint-disable-next-line no-loop-func test(`${t[0]}: ${t[1]}`, async () => { - const buffer = (await createBarCode({ + const buffer = await createBarCode({ type: 'qrcode', input: t[1], width: 10, // mm height: 10, // mm backgroundColor: '00000000', // 背景色を指定しないとjsQRでうまく解析できない - })) as Buffer; + }); const png = PNG.sync.read(buffer); const pngData = new Uint8ClampedArray(png.data); - // @ts-ignore const qr = jsQR(pngData, png.width, png.height) as QRCode; expect(qr).not.toBeNull(); const dataBuffer = Buffer.from(qr.binaryData); @@ -300,17 +297,16 @@ describe('createBarCode', () => { for (const t of tests) { // eslint-disable-next-line no-loop-func test(`${t[0]}: ${t[1]}`, async () => { - const buffer = (await createBarCode({ + const buffer = await createBarCode({ type: 'qrcode', input: t[1], width: 10, // mm height: 10, // mm backgroundColor: 'ffffff', barColor: 'f50505', - })) as Buffer; + }); const png = PNG.sync.read(buffer); const pngData = new Uint8ClampedArray(png.data); - // @ts-ignore const qr = jsQR(pngData, png.width, png.height) as QRCode; expect(qr).not.toBeNull(); const dataBuffer = Buffer.from(qr.binaryData); diff --git a/packages/schemas/eslint.config.mjs b/packages/schemas/eslint.config.mjs new file mode 100644 index 00000000..6c1af351 --- /dev/null +++ b/packages/schemas/eslint.config.mjs @@ -0,0 +1,22 @@ +import { fileURLToPath } from 'url'; +import { dirname, resolve } from 'path'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +// Import the root config +const rootConfigPath = resolve(__dirname, '../../eslint.config.mjs'); +const rootConfig = await import(rootConfigPath); + +export default [ + ...rootConfig.default, + { + files: ['src/**/*.ts'], + languageOptions: { + parserOptions: { + project: ['./tsconfig.esm.json'], + tsconfigRootDir: __dirname, + }, + }, + }, +]; diff --git a/packages/schemas/package.json b/packages/schemas/package.json index f0575965..0b475cfa 100644 --- a/packages/schemas/package.json +++ b/packages/schemas/package.json @@ -49,7 +49,7 @@ "build:esm": "tsc -p tsconfig.esm.json", "build:node": "tsc -p tsconfig.node.json", "clean": "rimraf dist", - "lint": "eslint --ext .ts src", + "lint": "eslint --ext .ts src --config eslint.config.mjs --no-error-on-unmatched-pattern", "test": "jest", "prune": "ts-prune src", "prettier": "prettier --write 'src/**/*.ts'" diff --git a/packages/schemas/src/date/helper.ts b/packages/schemas/src/date/helper.ts index 947f098a..0030fa92 100644 --- a/packages/schemas/src/date/helper.ts +++ b/packages/schemas/src/date/helper.ts @@ -1,82 +1,40 @@ import type * as CSS from 'csstype'; import AirDatepicker from 'air-datepicker'; -import type { AirDatepickerLocale, AirDatepickerButton } from 'air-datepicker'; - -// Define custom interfaces for AirDatepicker types -interface AirDatepickerDate extends Date {} -interface AirDatepickerInstance { - selectedDates: Date[]; - hide: () => void; - destroy: () => void; - show: () => void; -} -// @ts-ignore -import localeAr from 'air-datepicker/locale/ar.js'; -// @ts-ignore -import localeBg from 'air-datepicker/locale/bg.js'; -// @ts-ignore -import localeCa from 'air-datepicker/locale/ca.js'; -// @ts-ignore -import localeCs from 'air-datepicker/locale/cs.js'; -// @ts-ignore -import localeDa from 'air-datepicker/locale/da.js'; -// @ts-ignore -import localeDe from 'air-datepicker/locale/de.js'; -// @ts-ignore -import localeEl from 'air-datepicker/locale/el.js'; -// @ts-ignore -import localeEn from 'air-datepicker/locale/en.js'; -// @ts-ignore -import localeEs from 'air-datepicker/locale/es.js'; -// @ts-ignore -import localeEu from 'air-datepicker/locale/eu.js'; -// @ts-ignore -import localeFi from 'air-datepicker/locale/fi.js'; -// @ts-ignore -import localeFr from 'air-datepicker/locale/fr.js'; -// @ts-ignore -import localeHr from 'air-datepicker/locale/hr.js'; -// @ts-ignore -import localeHu from 'air-datepicker/locale/hu.js'; -// @ts-ignore -import localeId from 'air-datepicker/locale/id.js'; -// @ts-ignore -import localeIt from 'air-datepicker/locale/it.js'; -// @ts-ignore -import localeJa from 'air-datepicker/locale/ja.js'; -// @ts-ignore -import localeKo from 'air-datepicker/locale/ko.js'; -// @ts-ignore -import localeNb from 'air-datepicker/locale/nb.js'; -// @ts-ignore -import localeNl from 'air-datepicker/locale/nl.js'; -// @ts-ignore -import localeTh from 'air-datepicker/locale/th.js'; -// @ts-ignore -import localePl from 'air-datepicker/locale/pl.js'; -// @ts-ignore -import localePtBR from 'air-datepicker/locale/pt-BR.js'; -// @ts-ignore -import localePt from 'air-datepicker/locale/pt.js'; -// @ts-ignore -import localeRo from 'air-datepicker/locale/ro.js'; -// @ts-ignore -import localeRu from 'air-datepicker/locale/ru.js'; -// @ts-ignore -import localeSi from 'air-datepicker/locale/si.js'; -// @ts-ignore -import localeSk from 'air-datepicker/locale/sk.js'; -// @ts-ignore -import localeSl from 'air-datepicker/locale/sl.js'; -// @ts-ignore -import localeSv from 'air-datepicker/locale/sv.js'; -// @ts-ignore -import localeTr from 'air-datepicker/locale/tr.js'; -// @ts-ignore -import localeUk from 'air-datepicker/locale/uk.js'; -// @ts-ignore -import localeZh from 'air-datepicker/locale/zh.js'; +import type { AirDatepickerLocale, AirDatepickerButton, AirDatepickerDate } from 'air-datepicker'; +import localeAr from 'air-datepicker/locale/ar'; +import localeBg from 'air-datepicker/locale/bg'; +import localeCa from 'air-datepicker/locale/ca'; +import localeCs from 'air-datepicker/locale/cs'; +import localeDa from 'air-datepicker/locale/da'; +import localeDe from 'air-datepicker/locale/de'; +import localeEl from 'air-datepicker/locale/el'; +import localeEn from 'air-datepicker/locale/en'; +import localeEs from 'air-datepicker/locale/es'; +import localeEu from 'air-datepicker/locale/eu'; +import localeFi from 'air-datepicker/locale/fi'; +import localeFr from 'air-datepicker/locale/fr'; +import localeHr from 'air-datepicker/locale/hr'; +import localeHu from 'air-datepicker/locale/hu'; +import localeId from 'air-datepicker/locale/id'; +import localeIt from 'air-datepicker/locale/it'; +import localeJa from 'air-datepicker/locale/ja'; +import localeKo from 'air-datepicker/locale/ko'; +import localeNb from 'air-datepicker/locale/nb'; +import localeNl from 'air-datepicker/locale/nl'; +import localeTh from 'air-datepicker/locale/th'; +import localePl from 'air-datepicker/locale/pl'; +import localePtBR from 'air-datepicker/locale/pt-BR'; +import localePt from 'air-datepicker/locale/pt'; +import localeRo from 'air-datepicker/locale/ro'; +import localeRu from 'air-datepicker/locale/ru'; +import localeSi from 'air-datepicker/locale/si'; +import localeSk from 'air-datepicker/locale/sk'; +import localeSl from 'air-datepicker/locale/sl'; +import localeSv from 'air-datepicker/locale/sv'; +import localeTr from 'air-datepicker/locale/tr'; +import localeUk from 'air-datepicker/locale/uk'; +import localeZh from 'air-datepicker/locale/zh'; import * as dateFns from 'date-fns/locale'; import { format } from 'date-fns'; @@ -97,6 +55,13 @@ import { DateSchema } from './types.js'; import { getExtraFormatterSchema, Formatter } from '../text/extraFormatter.js'; import { isEditable } from '../utils.js'; +interface AirDatepickerInstance { + selectedDates: Date[]; + hide: () => void; + destroy: () => void; + show: () => void; +} + type PickerType = 'date' | 'time' | 'dateTime'; interface Locale { @@ -301,11 +266,11 @@ export const getPlugin = ({ type, icon }: { type: PickerType; icon: string }) => }, }); } - - const airDatepicker = new (AirDatepicker as any)(input, { + const airDatepicker = new AirDatepicker(input, { locale: locale.adLocale, selectedDates: [strDateToDate(value, type)], - dateFormat: (date: AirDatepickerDate) => format(date, schema.format, { locale: locale.formatLocale }), + dateFormat: (date: AirDatepickerDate) => + format(date, schema.format, { locale: locale.formatLocale }), timepicker: type !== 'date', onlyTimepicker: type === 'time', isMobile: window.innerWidth < 768, @@ -471,6 +436,7 @@ export const getPlugin = ({ type, icon }: { type: PickerType; icon: string }) => format: defaultFormat, type, content: getFmtContent(new Date(), type), + position: { x: 0, y: 0 }, width: 50, height: 10, rotate: 0, diff --git a/packages/ui/.eslintrc.cjs b/packages/ui/.eslintrc.cjs deleted file mode 100644 index 072e72d5..00000000 --- a/packages/ui/.eslintrc.cjs +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - extends: ['../../eslint.base.js', "plugin:react/recommended", 'plugin:react-hooks/recommended'], - overrides: [ - { - files: ['*.ts', '*.tsx'], - parserOptions: { - project: ['./tsconfig.json'], - }, - }, - ], - settings: { - react: { - version: 'detect', - }, - }, -}; diff --git a/packages/ui/eslint.config.mjs b/packages/ui/eslint.config.mjs new file mode 100644 index 00000000..5a94744c --- /dev/null +++ b/packages/ui/eslint.config.mjs @@ -0,0 +1,41 @@ +import { fileURLToPath } from 'url'; +import { dirname, resolve } from 'path'; +import reactPlugin from 'eslint-plugin-react'; +import reactHooksPlugin from 'eslint-plugin-react-hooks'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +// Import the root config +const rootConfigPath = resolve(__dirname, '../../eslint.config.mjs'); +const rootConfig = await import(rootConfigPath); + +export default [ + ...rootConfig.default, + { + files: ['src/**/*.ts', 'src/**/*.tsx'], + languageOptions: { + parserOptions: { + project: ['./tsconfig.json'], + tsconfigRootDir: __dirname, + ecmaFeatures: { + jsx: true, + }, + }, + }, + plugins: { + react: reactPlugin, + 'react-hooks': reactHooksPlugin, + }, + settings: { + react: { + version: 'detect', + }, + }, + rules: { + ...reactPlugin.configs.recommended.rules, + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'warn', + }, + }, +]; diff --git a/packages/ui/package.json b/packages/ui/package.json index 31e7ddd4..d1b6640d 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -30,7 +30,7 @@ "devBuildType:watch": "tsc --emitDeclarationOnly --watch", "build": "vite build && tsc --emitDeclarationOnly", "clean": "rimraf dist", - "lint": "eslint --ext .ts,.tsx src", + "lint": "eslint --ext .ts,.tsx src --config eslint.config.mjs --no-error-on-unmatched-pattern", "test": "jest", "prune": "ts-prune src", "prettier": "prettier --write 'src/**/*.{ts,tsx}'" @@ -56,11 +56,13 @@ "@testing-library/react": "^12.1.2", "@types/react": "^17.0.52", "@types/react-dom": "^17.0.18", + "@ungap/structured-clone": "^1.3.0", "@vitejs/plugin-react": "^4.2.0", "csstype": "^3.1.2", "esbuild": "^0.25.0", - "eslint-plugin-react": "^7.28.0", - "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-react": "^7.37.4", + "eslint-plugin-react-hooks": "^5.2.0", + "is-path-inside": "^3.0.3", "jest-canvas-mock": "^2.3.1", "jest-environment-jsdom": "^29.7.0", "process": "^0.11.10", diff --git a/packages/ui/src/components/Designer/RightSidebar/DetailView/index.tsx b/packages/ui/src/components/Designer/RightSidebar/DetailView/index.tsx index f97ccb90..40572d8d 100644 --- a/packages/ui/src/components/Designer/RightSidebar/DetailView/index.tsx +++ b/packages/ui/src/components/Designer/RightSidebar/DetailView/index.tsx @@ -275,7 +275,6 @@ Check this document: https://pdfme.com/docs/custom-schemas`); overflowX: 'hidden', }} > - {/* @ts-ignore */} ) => { display: 'swap', }) ); - // @ts-ignore const newFontFaces = fontFaces.filter((fontFace) => !document.fonts.has(fontFace)); Promise.allSettled(newFontFaces.map((f) => f.load())).then((loadedFontFaces) => { loadedFontFaces.forEach((loadedFontFace) => { if (loadedFontFace.status === 'fulfilled') { - // @ts-ignore document.fonts.add(loadedFontFace.value); } }); diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json index 4870c974..42bcd38a 100644 --- a/packages/ui/tsconfig.json +++ b/packages/ui/tsconfig.json @@ -7,7 +7,7 @@ "isolatedModules": true, "declaration": true, "declarationDir": "dist/types", - "module": "ESNext", + "module": "NodeNext", "lib": [ "ES2020", "DOM",