aboutsummaryrefslogtreecommitdiff
path: root/packages/config
diff options
context:
space:
mode:
Diffstat (limited to 'packages/config')
-rw-r--r--packages/config/.eslintrc.js4
-rw-r--r--packages/config/base.tsconfig.json2
-rw-r--r--packages/config/eslint/base.js79
-rw-r--r--packages/config/eslint/tailwind.js23
-rw-r--r--packages/config/eslint/web.js22
-rw-r--r--packages/config/index.js3
-rw-r--r--packages/config/index.ts1
-rw-r--r--packages/config/package.json29
-rw-r--r--packages/config/vite/index.ts12
-rw-r--r--packages/config/vite/relAlias.ts33
-rw-r--r--packages/config/vitest.shared.ts8
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'],
+ },
+});