@snyggt/base 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # @snygt/base
2
+
3
+ ## Config
4
+
5
+ Base configurations for
6
+
7
+ - typescript
8
+ - eslint
9
+ - prettier
10
+ - jest
11
+
@@ -0,0 +1,139 @@
1
+ import eslint from '@eslint/js'
2
+ import tseslint from 'typescript-eslint'
3
+ import eslintConfigPrettier from 'eslint-config-prettier'
4
+ import eslintPluginPrettier from 'eslint-plugin-prettier/recommended'
5
+ import jestPlugin from 'eslint-plugin-jest'
6
+
7
+ export const defaultEsTsConfigs = [
8
+ eslint.configs.recommended,
9
+ ...tseslint.configs.recommended,
10
+ eslintConfigPrettier,
11
+ eslintPluginPrettier,
12
+ ].map(config => ({
13
+ ...config,
14
+ files: ['**/*.ts', '**/*.tsx'],
15
+ }))
16
+
17
+ const ignoredFolders = [
18
+ 'dist',
19
+ '.dist',
20
+ 'bin',
21
+ '.bin',
22
+ 'cdk.out',
23
+ 'storybook-static',
24
+ '.storybook',
25
+ '.next',
26
+ ]
27
+ export const defaultIgnoreDist = {
28
+ ignores: ignoredFolders.flatMap(folder => [`**/${folder}/**`, folder]),
29
+ }
30
+
31
+ export const defaultTsLanguageConfig = {
32
+ files: ['**/*.ts', '**/*.tsx'],
33
+ plugins: {
34
+ '@typescript-eslint': tseslint.plugin,
35
+ jest: jestPlugin,
36
+ },
37
+ languageOptions: {
38
+ parserOptions: {
39
+ projectService: { allowDefaultProject: ['*.js', '*.mjs'] },
40
+ ecmaFeatures: {
41
+ jsx: true,
42
+ },
43
+ allowImportExportEverywhere: true,
44
+ },
45
+ ecmaVersion: 2022,
46
+ sourceType: 'module',
47
+ globals: {
48
+ node: true,
49
+ commonjs: true,
50
+ es6: true,
51
+ browser: true,
52
+ jest: true,
53
+ },
54
+ },
55
+ }
56
+
57
+ export const defaultJsLanguageConfig = {
58
+ files: ['**/*.js'],
59
+ languageOptions: {
60
+ parserOptions: {
61
+ allowImportExportEverywhere: true,
62
+ },
63
+ sourceType: 'commonjs',
64
+ globals: {
65
+ node: true,
66
+ commonjs: true,
67
+ browser: true,
68
+ jest: true,
69
+ },
70
+ },
71
+ }
72
+
73
+ const defaultOverrideRules = {
74
+ '@typescript-eslint/no-unsafe-call': 'off',
75
+ '@typescript-eslint/no-unsafe-member-access': 'off',
76
+ '@typescript-eslint/no-unsafe-assignment': 'off',
77
+ '@typescript-eslint/no-unsafe-argument': 'off',
78
+ '@typescript-eslint/no-explicit-any': 'error',
79
+ '@typescript-eslint/no-empty-function': [
80
+ 'error',
81
+ { allow: ['functions', 'arrowFunctions'] },
82
+ ],
83
+
84
+ '@typescript-eslint/no-unused-vars': [
85
+ 'error',
86
+ {
87
+ args: 'all',
88
+ argsIgnorePattern: '^_',
89
+ caughtErrors: 'all',
90
+ caughtErrorsIgnorePattern: '^_',
91
+ destructuredArrayIgnorePattern: '^_',
92
+ varsIgnorePattern: '^_',
93
+ ignoreRestSiblings: true,
94
+ },
95
+ ],
96
+ '@/quotes': [
97
+ 'error',
98
+ 'single',
99
+ { allowTemplateLiterals: false, avoidEscape: true },
100
+ ],
101
+ 'no-unsafe-negation': 'off',
102
+ 'no-var': 'error',
103
+ 'prefer-const': 'error',
104
+ 'prefer-rest-params': 'error',
105
+ 'prefer-spread': 'error',
106
+ }
107
+
108
+ export const defaultRuleOverrides = {
109
+ files: ['**/*.ts', '**/*.tsx'],
110
+ rules: defaultOverrideRules,
111
+ }
112
+
113
+ export const defaultDisableTypecheckOnJs = {
114
+ ...tseslint.configs.disableTypeChecked,
115
+ files: ['**/*.js', '**/*.mjs'],
116
+ rules: { ...tseslint.configs.disableTypeChecked.rules },
117
+ }
118
+
119
+ export const defaultJestRules = {
120
+ ...jestPlugin.configs['flat/recommended'],
121
+ files: ['test/*.test.ts', '**/*.test.ts', 'test/*.test.tsx', '**/*.test.tsx'],
122
+ rules: {
123
+ ...jestPlugin.configs['flat/recommended'].rules,
124
+ '@typescript-eslint/no-explicit-any': 'off',
125
+ '@typescript-eslint/no-unsafe-return': 'off',
126
+ '@typescript-eslint/no-unsafe-argument': 'off',
127
+ '@typescript-eslint/no-require-imports': 'off',
128
+ },
129
+ }
130
+
131
+ export default tseslint.config(
132
+ defaultIgnoreDist,
133
+ ...defaultEsTsConfigs,
134
+ defaultJsLanguageConfig,
135
+ defaultTsLanguageConfig,
136
+ defaultRuleOverrides,
137
+ defaultDisableTypecheckOnJs,
138
+ defaultJestRules,
139
+ )
@@ -0,0 +1,38 @@
1
+ import nodeBase, { defaultRuleOverrides } from './node.mjs'
2
+ import tseslint from 'typescript-eslint'
3
+ import pluginReactHooks from 'eslint-plugin-react-hooks'
4
+ import reactPlugin from 'eslint-plugin-react'
5
+
6
+ export const defaultReactLint = {
7
+ files: ['**/*.ts', '**/*.tsx'],
8
+ plugins: {
9
+ 'react-hooks': pluginReactHooks,
10
+ },
11
+ rules: {
12
+ ...pluginReactHooks.configs.recommended.rules,
13
+ ...defaultRuleOverrides.rules,
14
+ 'react/react-in-jsx-scope': 'off',
15
+ 'react/prop-types': 'off',
16
+ },
17
+ }
18
+
19
+ export const defaultReactPlugin = {
20
+ files: ['**/*.ts', '**/*.tsx'],
21
+ plugins: {
22
+ react: reactPlugin,
23
+ },
24
+ rules: {
25
+ ...reactPlugin.configs['jsx-runtime'].rules,
26
+ },
27
+ settings: {
28
+ react: {
29
+ version: 'detect',
30
+ },
31
+ },
32
+ }
33
+
34
+ export default tseslint.config(
35
+ ...nodeBase,
36
+ defaultReactLint,
37
+ defaultReactPlugin
38
+ )
@@ -0,0 +1,12 @@
1
+ export default {
2
+ testEnvironment: 'node',
3
+ transform: { '^.+\\.tsx?$': ['ts-jest', {}] },
4
+ modulePaths: ['src', 'src/lib'],
5
+ testPathIgnorePatterns: [
6
+ '<rootDir>/.next/',
7
+ '<rootDir>/dist/',
8
+ '<rootDir>/node_modules/',
9
+ '<rootDir>/node_modules/.pnpm',
10
+ ],
11
+ prettierPath: null,
12
+ }
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@snyggt/base",
3
+ "version": "0.0.1",
4
+ "description": "Base configurations",
5
+ "main": "index.js",
6
+ "files": [
7
+ "prettier",
8
+ "eslint",
9
+ "jest",
10
+ "typescript",
11
+ "templates"
12
+ ],
13
+ "exports": {
14
+ "./eslint/node": "./eslint/node.mjs",
15
+ "./eslint/react": "./eslint/react.mjs",
16
+ "./prettier": "./prettier/index.mjs",
17
+ "./jest": "./jest/jest-preset.mjs",
18
+ "./ts-base": "./typescript/tsconfig.json",
19
+ "./ts-prod": "./typescript/tsconfig.prod.json"
20
+ },
21
+ "keywords": [],
22
+ "author": "",
23
+ "license": "ISC",
24
+ "peerDependencies": {
25
+ "jest": "29.7.x",
26
+ "typescript": "5.6.x",
27
+ "eslint": "9.13.x",
28
+ "prettier": "3.3.x"
29
+ },
30
+ "prettier": "@snyggt/base/prettier",
31
+ "dependencies": {
32
+ "@babel/preset-typescript": "7.26.0",
33
+ "@eslint/js": "9.13.0",
34
+ "@types/jest": "29.5.14",
35
+ "@types/node": "22.8.4",
36
+ "eslint-config-prettier": "9.1.0",
37
+ "eslint-plugin-jest": "28.8.3",
38
+ "eslint-plugin-prettier": "5.2.1",
39
+ "eslint-plugin-react": "^7.37.2",
40
+ "eslint-plugin-react-hooks": "5.1.0-beta-26f2496093-20240514",
41
+ "hello-world-npm": "^1.1.1",
42
+ "jest": "29.7.0",
43
+ "ts-jest": "29.2.5",
44
+ "typescript": "5.6.3",
45
+ "typescript-eslint": "8.11.0"
46
+ },
47
+ "packageManager": "pnpm@9.14.2+sha512.6e2baf77d06b9362294152c851c4f278ede37ab1eba3a55fda317a4a17b209f4dbb973fb250a77abc463a341fcb1f17f17cfa24091c4eb319cda0d9b84278387"
48
+ }
@@ -0,0 +1,10 @@
1
+ const config = {
2
+ tabWidth: 2,
3
+ useTabs: true,
4
+ semi: false,
5
+ singleQuote: true,
6
+ trailingComma: 'es5',
7
+ arrowParens: 'avoid',
8
+ }
9
+
10
+ export default config
@@ -0,0 +1,3 @@
1
+ import base from '@snyggt/base/eslint/node'
2
+
3
+ export default [...base]
@@ -0,0 +1,3 @@
1
+ import base from '@snyggt/base/jest'
2
+
3
+ export default base
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "@snyggt/base/ts-base"
3
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "es2022",
4
+ "module": "CommonJS",
5
+ "outDir": "${configDir}/dist",
6
+ "declaration": true,
7
+ "emitDeclarationOnly": true,
8
+ "esModuleInterop": true,
9
+ "forceConsistentCasingInFileNames": true,
10
+ "strict": true,
11
+ "skipLibCheck": true,
12
+ "paths": {
13
+ "*": ["${configDir}/src/*", "${configDir}/src/lib/*"]
14
+ }
15
+ },
16
+ "include": ["${configDir}/**/*.ts", "${configDir}/**/*.tsx"],
17
+ "exclude": [
18
+ "${configDir}/**/dist**",
19
+ "${configDir}/**/tmp/**",
20
+ "${configDir}/**/node_modules**"
21
+ ]
22
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "${configDir}/dist",
5
+ "esModuleInterop": true,
6
+ "resolveJsonModule": true,
7
+ "emitDeclarationOnly": true,
8
+ "declaration": true,
9
+ "allowJs": true
10
+ },
11
+ "exclude": ["${configDir}/**/dist**", "${configDir}/**/*.test.ts"],
12
+ "include": [
13
+ "${configDir}/**/*.ts",
14
+ "${configDir}/**/*.tsx",
15
+ "${configDir}/**/*.sh"
16
+ ]
17
+ }