diff options
Diffstat (limited to 'packages/config')
-rw-r--r-- | packages/config/.eslintrc.js | 4 | ||||
-rw-r--r-- | packages/config/base.tsconfig.json | 2 | ||||
-rw-r--r-- | packages/config/eslint/base.js | 79 | ||||
-rw-r--r-- | packages/config/eslint/tailwind.js | 23 | ||||
-rw-r--r-- | packages/config/eslint/web.js | 22 | ||||
-rw-r--r-- | packages/config/index.js | 3 | ||||
-rw-r--r-- | packages/config/index.ts | 1 | ||||
-rw-r--r-- | packages/config/package.json | 29 | ||||
-rw-r--r-- | packages/config/vite/index.ts | 12 | ||||
-rw-r--r-- | packages/config/vite/relAlias.ts | 33 | ||||
-rw-r--r-- | packages/config/vitest.shared.ts | 8 |
11 files changed, 48 insertions, 168 deletions
diff --git a/packages/config/.eslintrc.js b/packages/config/.eslintrc.js deleted file mode 100644 index 93a0c63..0000000 --- a/packages/config/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('eslint').ESLint.ConfigData} */ -module.exports = { - extends: [require.resolve('./eslint/base.js'), require.resolve('./eslint/tailwind.js')] -}; diff --git a/packages/config/base.tsconfig.json b/packages/config/base.tsconfig.json index 2d27ce4..17c8f2a 100644 --- a/packages/config/base.tsconfig.json +++ b/packages/config/base.tsconfig.json @@ -17,6 +17,6 @@ "resolveJsonModule": true, "module": "ESNext", "target": "ESNext", - "types": ["vite/client"] + "types": ["vite/client", "vitest/globals"] } } diff --git a/packages/config/eslint/base.js b/packages/config/eslint/base.js deleted file mode 100644 index 200f17d..0000000 --- a/packages/config/eslint/base.js +++ /dev/null @@ -1,79 +0,0 @@ -const path = require('node:path'); - -/** @type {import('eslint').ESLint.ConfigData} */ -module.exports = { - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaFeatures: { - jsx: true - }, - ecmaVersion: 12, - sourceType: 'module' - }, - extends: [ - 'eslint:recommended', - 'plugin:react/recommended', - 'plugin:react-hooks/recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:astro/recommended', - 'plugin:astro/jsx-a11y-recommended', - 'turbo', - 'prettier' - ], - plugins: ['react', 'jsx-a11y'], - rules: { - 'react/display-name': 'off', - 'react/prop-types': 'off', - 'react/no-unescaped-entities': 'off', - 'react/react-in-jsx-scope': 'off', - 'react-hooks/rules-of-hooks': 'warn', - 'react-hooks/exhaustive-deps': 'warn', - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-var-requires': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-empty-interface': 'off', - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/ban-types': 'off', - 'no-control-regex': 'off', - 'no-mixed-spaces-and-tabs': ['warn', 'smart-tabs'], - 'turbo/no-undeclared-env-vars': [ - 'error', - { - cwd: path.resolve(path.join(__dirname, '..', '..', '..')) - } - ] - }, - ignorePatterns: ['dist', '**/*.js', '**/*.json', 'node_modules'], - settings: { - react: { - version: 'detect' - } - }, - overrides: [ - { - files: ['*.astro'], - parser: 'astro-eslint-parser', - parserOptions: { - parser: '@typescript-eslint/parser', - extraFileExtensions: ['.astro'] - }, - rules: { - 'astro/no-set-html-directive': 2, - 'indent': 'off' - } - }, - { - files: ['*.ts', '*.d.ts', '*.tsx', '*.js', '*.jsx', '*.mjs', '*.cjs'], - parser: '@typescript-eslint/parser', - parserOptions: { - parser: '@typescript-eslint/parser' - }, - rules: { - indent: 'off' - } - } - ] -}; diff --git a/packages/config/eslint/tailwind.js b/packages/config/eslint/tailwind.js deleted file mode 100644 index 9ac36ae..0000000 --- a/packages/config/eslint/tailwind.js +++ /dev/null @@ -1,23 +0,0 @@ -const path = require('node:path'); - -/** @type {import('eslint').ESLint.ConfigData} */ -module.exports = { - extends: ['plugin:tailwindcss/recommended'], - rules: { - 'tailwindcss/no-custom-classname': 'off', - 'tailwindcss/classnames-order': [ - 'warn', - { - config: path.resolve( - path.join(__dirname, '../../..', 'packages/ui/tailwind.config.js') - ) - } - ] - }, - settings: { - tailwindcss: { - callees: ['classnames', 'clsx', 'ctl', 'cva', 'tw', 'twStyle'], - tags: ['tw', 'twStyle'] - } - } -}; diff --git a/packages/config/eslint/web.js b/packages/config/eslint/web.js deleted file mode 100644 index dc010b3..0000000 --- a/packages/config/eslint/web.js +++ /dev/null @@ -1,22 +0,0 @@ -/** @type {import('eslint').ESLint.ConfigData} */ -module.exports = { - extends: [require.resolve('./base.js'), require.resolve('./tailwind.js')], - ignorePatterns: ['public', 'vite.config.ts'], - env: { - browser: true, - node: true - }, - rules: { - 'no-restricted-syntax': [ - 'error', - { - selector: "CallExpression[callee.name='useParams']", - message: 'useParams is illegal, use useZodRouteParams!' - }, - { - selector: "CallExpression[callee.name='useSearchParams']", - message: 'useSearchParams is illegal, use useZodSearchParams!' - } - ] - } -}; diff --git a/packages/config/index.js b/packages/config/index.js deleted file mode 100644 index 524af3b..0000000 --- a/packages/config/index.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - vite: require('./vite') -}; diff --git a/packages/config/index.ts b/packages/config/index.ts new file mode 100644 index 0000000..cf96492 --- /dev/null +++ b/packages/config/index.ts @@ -0,0 +1 @@ +export { default as vite } from './vite'; diff --git a/packages/config/package.json b/packages/config/package.json index 5fdcbdc..6f68aed 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,29 +1,22 @@ { "name": "@polyfrost/config", + "type": "module", "version": "0.0.0", "exports": { "./*": "./*", "./vite": "./vite", - "./vite/relAlias": "./vite/relAlias" - }, - "scripts": { - "lint": "eslint . --cache" + "./vite/relAlias": "./vite/relAlias", + "./vitest": "./vitest.shared" }, + "main": "index.ts", + "types": "index.ts", "devDependencies": { - "@typescript-eslint/eslint-plugin": "^6.8.0", - "@typescript-eslint/parser": "^6.8.0", - "eslint": "^8.52.0", - "eslint-config-prettier": "^9.0.0", - "eslint-config-turbo": "^1.10.16", - "eslint-plugin-astro": "^0.29.1", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-prettier": "^5.0.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-tailwindcss": "^3.13.0", - "eslint-utils": "^3.0.0", + "@vitejs/plugin-react": "^4.2.1", "regexpp": "^3.2.0", - "vite-plugin-html": "^3.2.0", - "vite-plugin-svgr": "^4.1.0" + "vite": "^5.0.11", + "vite-plugin-html": "^3.2.1", + "vite-plugin-svgr": "^4.2.0", + "vite-tsconfig-paths": "^4.2.3", + "vitest": "^1.1.3" } } diff --git a/packages/config/vite/index.ts b/packages/config/vite/index.ts index a9306a6..f845f11 100644 --- a/packages/config/vite/index.ts +++ b/packages/config/vite/index.ts @@ -10,18 +10,18 @@ export default defineConfig({ react(), svg({ svgrOptions: { icon: true } }), createHtmlPlugin({ - minify: true - }) + minify: true, + }), ], css: { modules: { - localsConvention: 'camelCaseOnly' - } + localsConvention: 'camelCaseOnly', + }, }, root: 'src', build: { sourcemap: true, outDir: '../dist', - assetsDir: '.' - } + assetsDir: '.', + }, }); diff --git a/packages/config/vite/relAlias.ts b/packages/config/vite/relAlias.ts index 1a502b5..7bafe74 100644 --- a/packages/config/vite/relAlias.ts +++ b/packages/config/vite/relAlias.ts @@ -1,10 +1,11 @@ -import fs from 'fs/promises'; -import path from 'path'; -import { Alias } from 'vite'; +import fs from 'node:fs/promises'; +import path from 'node:path'; +import type { Alias } from 'vite'; const projectPath = path.resolve(__dirname, '../../../'); const pkgJsonCache = new Map(); +// /src/ or \src\, depending on platform const SRC_DIR_PATH = `${path.sep}src${path.sep}`; const resolver: Alias = { @@ -13,15 +14,18 @@ const resolver: Alias = { async customResolver(source, importer) { let root: null | string = null; - if (importer) importer = path.normalize(importer); + if (importer) + importer = path.normalize(importer); + // source is the path imported on typescript, which always use / as path separator const [_, sourcePath] = source.split('~/'); const relativeImporter = importer?.replace(projectPath, ''); if (relativeImporter && relativeImporter.includes(SRC_DIR_PATH)) { const [pkg] = relativeImporter.split(SRC_DIR_PATH); root = path.join(projectPath, pkg, 'src'); - } else if (importer) { + } + else if (importer) { const pathObj = path.parse(importer); let parent = pathObj.dir; @@ -30,13 +34,15 @@ const resolver: Alias = { let hasPkgJson = pkgJsonCache.get(parent); - if (hasPkgJson === undefined) + if (hasPkgJson === undefined) { try { await fs.stat(path.join(parent, 'package.json')); pkgJsonCache.set(parent, (hasPkgJson = true)); - } catch { + } + catch { pkgJsonCache.set(parent, (hasPkgJson = false)); } + } if (hasPkgJson) { root = parent; @@ -46,7 +52,8 @@ const resolver: Alias = { if (root === null) throw new Error(`Failed to resolve import path ${source} in file ${importer}`); - } else { + } + else { throw new Error(`Failed to resolve import path ${source} in file ${importer}`); } @@ -54,7 +61,8 @@ const resolver: Alias = { const folderItems = await fs.readdir(path.join(absolutePath, '..')); - const item = folderItems.find((i) => i.startsWith(sourcePath.split('/').at(-1)!))!; + // sourcePath is derived from the path imported on typescript, which always use / as path separator + const item = folderItems.find(i => i.startsWith(sourcePath.split('/').at(-1)!))!; const fullPath = absolutePath + path.extname(item); @@ -63,15 +71,16 @@ const resolver: Alias = { if (stats.isDirectory()) { const directoryItems = await fs.readdir(absolutePath + path.extname(item)); - const indexFile = directoryItems.find((i) => i.startsWith('index')); + const indexFile = directoryItems.find(i => i.startsWith('index')); if (!indexFile) throw new Error(`Failed to resolve import path ${source} in file ${importer}`); return path.join(absolutePath, indexFile); - } else { + } + else { return fullPath; } - } + }, }; export default resolver; diff --git a/packages/config/vitest.shared.ts b/packages/config/vitest.shared.ts new file mode 100644 index 0000000..313a0ff --- /dev/null +++ b/packages/config/vitest.shared.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + globals: true, + reporters: ['dot'], + }, +}); |