@tsofist/web-buddy 1.0.0

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/.editorconfig ADDED
@@ -0,0 +1,22 @@
1
+ [*]
2
+ charset = utf-8
3
+ end_of_line = lf
4
+ indent_style = space
5
+ indent_size = 4
6
+ tab_width = 4
7
+ insert_final_newline = true
8
+ trim_trailing_whitespace = true
9
+
10
+ [*.json]
11
+ indent_size = 2
12
+ tab_width = 2
13
+
14
+ [*.{yaml,yml}]
15
+ indent_size = 2
16
+ tab_width = 2
17
+
18
+ # Markdown
19
+ [*.{md,markdown}]
20
+ trim_trailing_whitespace = false
21
+ indent_size = 2
22
+ tab_width = 2
package/.eslintrc.yaml ADDED
@@ -0,0 +1,66 @@
1
+ env:
2
+ browser: true
3
+ node: true
4
+
5
+ parserOptions:
6
+ ecmaVersion: 2020
7
+ extraFileExtensions:
8
+ - .vue
9
+
10
+ ignorePatterns:
11
+ - 'package*.json'
12
+ - '*.scss'
13
+ - '*.css'
14
+ - '*.html'
15
+ - '*.htm'
16
+ - '!.*.yml'
17
+ - '!.*.yaml'
18
+ - '!.*.json'
19
+ - '!.gitlab-ci'
20
+ - '!.k8s'
21
+
22
+ plugins:
23
+ - import
24
+ - vue
25
+ - '@typescript-eslint'
26
+ - decorator-position
27
+
28
+ settings:
29
+ import/extensions: [.ts, .tsx, .vue, .js, .json]
30
+ import/parsers:
31
+ '@typescript-eslint/parser': [.ts, .tsx, .vue]
32
+ prettier-vue:
33
+ SFCBlocks:
34
+ template: false
35
+ style: true
36
+ script: true
37
+
38
+ overrides:
39
+ - files: ['*.json']
40
+ parser: '@typescript-eslint/parser'
41
+ plugins:
42
+ - prettier
43
+ extends:
44
+ - prettier
45
+ - ./eslint/shared.yaml
46
+ rules:
47
+ prettier/prettier: error
48
+ quotes: off
49
+ quote-props: off
50
+
51
+ - files: ['*.yaml', '*.yml']
52
+ extends:
53
+ - ./eslint/yaml/common.yaml
54
+
55
+ - files: ['*.vue']
56
+ extends:
57
+ - ./eslint/vue/common.yaml
58
+
59
+ - files: ['*.ts', '*.tsx']
60
+ extends:
61
+ - ./eslint/typescript/common.yaml
62
+
63
+ # todo?
64
+ - files: ['*.js', '*.jsx']
65
+ extends:
66
+ - ./eslint/typescript/common.yaml
@@ -0,0 +1,4 @@
1
+ #!/bin/sh
2
+ . "$(dirname "$0")/_/husky.sh"
3
+
4
+ npm run lint
package/.prettierrc.js ADDED
@@ -0,0 +1,37 @@
1
+ module.exports = {
2
+ arrowParens: 'always',
3
+ printWidth: 100,
4
+ quoteProps: 'consistent',
5
+ singleQuote: true,
6
+ endOfLine: 'lf',
7
+ tabWidth: 4,
8
+ trailingComma: 'all',
9
+ bracketSpacing: true,
10
+ vueIndentScriptAndStyle: true,
11
+ bracketSameLine: true,
12
+ singleAttributePerLine: false,
13
+
14
+ overrides: [
15
+ {
16
+ files: '*.{html,htm}',
17
+ options: {
18
+ singleQuote: false,
19
+ tabWidth: 4,
20
+ },
21
+ },
22
+ {
23
+ files: '*.{yaml,yml}',
24
+ parser: 'yaml',
25
+ options: {
26
+ tabWidth: 2,
27
+ },
28
+ },
29
+ {
30
+ files: '*.json',
31
+ parser: 'json',
32
+ options: {
33
+ tabWidth: 2,
34
+ },
35
+ },
36
+ ],
37
+ };
@@ -0,0 +1,22 @@
1
+ {
2
+ "branches": [
3
+ "main",
4
+ "master",
5
+ { "name": "next", "prerelease": true },
6
+ { "name": "stage", "prerelease": true },
7
+ { "name": "dev", "prerelease": true }
8
+ ],
9
+ "plugins": [
10
+ "@semantic-release/commit-analyzer",
11
+ "@semantic-release/release-notes-generator",
12
+ "@semantic-release/github",
13
+ "@semantic-release/npm",
14
+ [
15
+ "@semantic-release/git",
16
+ {
17
+ "assets": ["package.json", "package-lock.json"],
18
+ "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
19
+ }
20
+ ]
21
+ ]
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "branches": [
3
+ "main",
4
+ "master",
5
+ { "name": "next", "prerelease": true },
6
+ { "name": "stage", "prerelease": true },
7
+ { "name": "dev", "prerelease": true }
8
+ ],
9
+ "plugins": [
10
+ "@semantic-release/commit-analyzer",
11
+ "@semantic-release/release-notes-generator",
12
+ "@semantic-release/gitlab",
13
+ "@semantic-release/npm",
14
+ [
15
+ "@semantic-release/git",
16
+ {
17
+ "assets": ["package.json", "package-lock.json"],
18
+ "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
19
+ }
20
+ ]
21
+ ]
22
+ }
@@ -0,0 +1,36 @@
1
+ defaultSeverity: error
2
+
3
+ extends:
4
+ - stylelint-config-html
5
+ - stylelint-config-standard
6
+ - stylelint-config-standard-vue
7
+ - stylelint-config-standard-scss
8
+ - stylelint-config-standard-vue/scss
9
+ - stylelint-prettier
10
+
11
+ plugins:
12
+ - stylelint-prettier
13
+ - stylelint-scss
14
+ - stylelint-order
15
+
16
+ rules:
17
+ prettier/prettier: true
18
+ order/properties-alphabetical-order: true
19
+ no-empty-source: null
20
+ declaration-property-value-no-unknown: true
21
+ selector-pseudo-element-no-unknown:
22
+ - true
23
+ - ignorePseudoElements:
24
+ # for webpack
25
+ - v-deep
26
+ - v-slotted
27
+ - v-global
28
+ # for vite
29
+ - deep
30
+ - slotted
31
+ - global
32
+ scss/at-rule-no-unknown: null
33
+ scss/comment-no-empty: null
34
+
35
+ ignoreFiles:
36
+ - '**/*.template.html'
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2023-present, Andrew Berdnikov
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,40 @@
1
+ # Concept
2
+ This is a set of pre-configured configurations for quickly starting web projects of the JS family.
3
+ You can simply clone this repository, make the necessary changes, and easily connect it to your projects.
4
+
5
+ Thus, all projects using this repository will have uniform settings for styling, building, and other things.
6
+ Exceptions can always be localized in the package.json file of a specific project.
7
+
8
+ ### What's included?
9
+ * **ESLint** _TypeScript, JavaScript, Yaml, VueJS, JSON_
10
+ * **Stylelint** _Vue, SCSS, PostCSS, HTML_
11
+ * **Prettier**
12
+ * **.editorconfig**
13
+ * **TypeScript**
14
+ * **Semantic release** _GitHub, Gitlab_
15
+
16
+ # How to use
17
+
18
+ ### As concept or sample
19
+ Your project may differ significantly from the configurations collected in this repository, so you can simply fork this project and make your own changes. Alternatively, you can use this repository as a sample for creating your own.
20
+
21
+ ### Directly
22
+ All specified configurations are easily extensible, so simply use the configuration extension, for example in `package.json`:
23
+
24
+ ```json
25
+ {
26
+ "prettier": "./node_modules/@tsofist/web-buddy/.prettierrc.js",
27
+ "stylelint": {
28
+ "extends": "./node_modules/@tsofist/web-buddy/.stylelintrc.yaml"
29
+ },
30
+ "eslintConfig": {
31
+ "root": true,
32
+ "extends": "./node_modules/@tsofist/web-buddy/.eslintrc.yaml"
33
+ },
34
+ "release": {
35
+ "extends": [
36
+ "@tsofist/web-buddy/.releaserc.json"
37
+ ]
38
+ }
39
+ }
40
+ ```
@@ -0,0 +1,64 @@
1
+ rules:
2
+ prefer-const: error
3
+ one-var:
4
+ - error
5
+ - never
6
+ no-multi-spaces: error
7
+ no-multiple-empty-lines:
8
+ - error
9
+ - max: 1
10
+ maxEOF: 0
11
+ maxBOF: 0
12
+ object-curly-spacing:
13
+ - error
14
+ - always
15
+
16
+ import/newline-after-import: error
17
+ import/no-duplicates: warn
18
+ import/order:
19
+ - error
20
+ - newlines-between: never
21
+ alphabetize:
22
+ order: asc
23
+ caseInsensitive: false
24
+ groups:
25
+ - builtin
26
+ - external
27
+ - internal
28
+ - parent
29
+ - sibling
30
+ - index
31
+
32
+ no-restricted-imports:
33
+ - error
34
+ - paths:
35
+ - name: lodash
36
+ message: NEVER IMPORT lodash. Use ONLY DIRECT lodash-es/<SOME-TOOL>
37
+ - name: lodash-es
38
+ message: NEVER IMPORT lodash-es. Use ONLY lodash-es/<SOME-TOOL>
39
+
40
+ quotes:
41
+ - error
42
+ - single
43
+ - allowTemplateLiterals: true
44
+ avoidEscape: true
45
+ quote-props:
46
+ - error
47
+ - consistent-as-needed
48
+
49
+ no-return-await: error
50
+
51
+ key-spacing:
52
+ - error
53
+ block-spacing:
54
+ - error
55
+ semi-spacing:
56
+ - error
57
+ keyword-spacing:
58
+ - error
59
+ space-before-blocks:
60
+ - error
61
+ brace-style:
62
+ - error
63
+ arrow-spacing:
64
+ - error
@@ -0,0 +1,20 @@
1
+ parser: '@typescript-eslint/parser'
2
+
3
+ parserOptions:
4
+ extraFilesExtension:
5
+ - .vue
6
+ project: tsconfig.json
7
+ sourceType: module
8
+
9
+ plugins:
10
+ - import
11
+ - prettier
12
+ - '@typescript-eslint'
13
+ - decorator-position
14
+
15
+ extends:
16
+ - eslint:recommended
17
+ - plugin:import/typescript
18
+ - plugin:@typescript-eslint/recommended
19
+ - ./rules.yaml
20
+ - ../shared.yaml
@@ -0,0 +1,78 @@
1
+ rules:
2
+ prettier/prettier: error
3
+ '@typescript-eslint/explicit-member-accessibility':
4
+ - error
5
+ - accessibility: no-public
6
+ '@typescript-eslint/ban-types':
7
+ - warn
8
+ - extendDefaults: true
9
+ types:
10
+ Record:
11
+ message: 'Do not use the Record type: it can be unsafe. Use @tsofist/stem: PRec/Rec type instead (Your Stem. With LOVE)'
12
+ suggest:
13
+ - PRec
14
+ - Rec
15
+ '@typescript-eslint/explicit-module-boundary-types': off
16
+ '@typescript-eslint/no-explicit-any': off
17
+ '@typescript-eslint/no-non-null-assertion': off
18
+ '@typescript-eslint/no-this-alias': error
19
+ '@typescript-eslint/return-await': off
20
+ '@typescript-eslint/no-floating-promises': error
21
+ '@typescript-eslint/no-unnecessary-type-assertion': error
22
+ '@typescript-eslint/no-unnecessary-condition': off
23
+ '@typescript-eslint/no-misused-new': error
24
+ '@typescript-eslint/no-misused-promises': off
25
+ '@typescript-eslint/no-array-constructor': error
26
+ '@typescript-eslint/no-useless-constructor': error
27
+ '@typescript-eslint/adjacent-overload-signatures': error
28
+ '@typescript-eslint/consistent-type-assertions': error
29
+ '@typescript-eslint/semi': error
30
+ '@typescript-eslint/member-delimiter-style':
31
+ - error
32
+ - multiline:
33
+ delimiter: semi
34
+ requireLast: true
35
+ singleline:
36
+ delimiter: semi
37
+ requireLast: false
38
+
39
+ space-before-function-paren: off
40
+ '@typescript-eslint/space-before-function-paren':
41
+ - warn
42
+ - anonymous: always
43
+ named: never
44
+ asyncArrow: always
45
+
46
+ '@typescript-eslint/no-meaningless-void-operator': error
47
+
48
+ '@typescript-eslint/no-redundant-type-constituents': off
49
+
50
+ '@typescript-eslint/method-signature-style':
51
+ - error
52
+ - method
53
+
54
+ lines-between-class-members: off
55
+ '@typescript-eslint/lines-between-class-members':
56
+ - error
57
+ - always
58
+ - exceptAfterOverload: true
59
+ exceptAfterSingleLine: true
60
+
61
+ indent: off
62
+ '@typescript-eslint/indent': off # prettier
63
+
64
+ no-unused-vars: off
65
+ '@typescript-eslint/no-unused-vars': off
66
+
67
+ no-trailing-spaces:
68
+ - error
69
+
70
+ decorator-position/decorator-position:
71
+ - error
72
+ - properties: above
73
+ methods: above
74
+
75
+ space-in-parens: error
76
+
77
+ func-call-spacing: off
78
+ '@typescript-eslint/func-call-spacing': error
@@ -0,0 +1,35 @@
1
+ parser: vue-eslint-parser
2
+
3
+ parserOptions:
4
+ parser: '@typescript-eslint/parser'
5
+ ecmaVersion: 2020
6
+ extraFilesExtension:
7
+ - .vue
8
+ project: tsconfig.json
9
+ sourceType: module
10
+ vueFeatures:
11
+ filter: false
12
+ interpolationAsNonHTML: true
13
+
14
+ plugins:
15
+ - import
16
+ - vue
17
+ - prettier-vue
18
+ - '@typescript-eslint'
19
+ - decorator-position
20
+
21
+ extends:
22
+ - eslint:recommended
23
+ - plugin:import/typescript
24
+ - '@vue/eslint-config-typescript/recommended'
25
+ - plugin:vue/vue3-recommended
26
+ - ../typescript/rules.yaml
27
+ - ./rules.yaml
28
+ - ../shared.yaml
29
+
30
+ globals:
31
+ NodeJS: readonly
32
+ defineProps: readonly
33
+ defineEmits: readonly
34
+ defineExpose: readonly
35
+ withDefaults: readonly
@@ -0,0 +1,58 @@
1
+ rules:
2
+ prettier/prettier: off
3
+ prettier-vue/prettier:
4
+ - error
5
+
6
+ vue/multi-word-component-names: off
7
+ vue/html-closing-bracket-newline:
8
+ - error
9
+ - multiline: never
10
+ singleline: never
11
+
12
+ indent: off
13
+ '@typescript-eslint/indent': off
14
+ # covered by prettier.vueIndentScriptAndStyle
15
+ # vue/script-indent:
16
+ # - error
17
+ # - 4
18
+ # - baseIndent: 1
19
+ # switchCase: 1
20
+
21
+ vue/html-indent:
22
+ - error
23
+ - 4
24
+ - alignAttributesVertically: true
25
+ baseIndent: 1
26
+ closeBracket: 1
27
+
28
+ vue/max-attributes-per-line:
29
+ - error
30
+ - singleline: 3
31
+ multiline: 1
32
+ vue/object-curly-spacing:
33
+ - error
34
+ - always
35
+
36
+ vue/valid-v-for: warn
37
+ vue/component-api-style:
38
+ - error
39
+ - - script-setup
40
+ - composition
41
+ vue/no-reserved-component-names: off
42
+
43
+ vue/attributes-order:
44
+ - error
45
+ - alphabetical: true
46
+ order:
47
+ - DEFINITION
48
+ - LIST_RENDERING
49
+ - CONDITIONALS
50
+ - RENDER_MODIFIERS
51
+ - GLOBAL
52
+ - - UNIQUE
53
+ - SLOT
54
+ - TWO_WAY_BINDING
55
+ - OTHER_DIRECTIVES
56
+ - OTHER_ATTR
57
+ - EVENTS
58
+ - CONTENT
@@ -0,0 +1,22 @@
1
+ plugins:
2
+ - prettier
3
+
4
+ extends:
5
+ - plugin:yml/standard
6
+ - ../shared.yaml
7
+
8
+ rules:
9
+ prettier/prettier: error
10
+
11
+ yml/plain-scalar:
12
+ - error
13
+ - always
14
+ yml/indent: off
15
+ yml/quotes:
16
+ - error
17
+ - avoidEscape: true
18
+ prefer: single
19
+ yml/block-sequence-hyphen-indicator-newline:
20
+ - error
21
+ - never
22
+ - nestedHyphen: never
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@tsofist/web-buddy",
3
+ "version": "1.0.0",
4
+ "description": "Configuration basics for Linters, TypeScript, Semantic Release and others",
5
+ "author": "Andrew Berdnikov <tsofistgudmen@gmail.com>",
6
+ "license": "MIT",
7
+ "scripts": {
8
+ "format": "npm run lint:code -- --fix && npm run lint:style -- --fix",
9
+ "lint": "npm run lint:code && npm run lint:style",
10
+ "lint:code": "eslint . -c .eslintrc.yaml --cache --cache-location .lint-cache/",
11
+ "lint:style": "stylelint **/*.{htm,html,vue,css,scss,sass,pcss,postcss} --cache --cache-location .lint-cache/ --allow-empty-input",
12
+ "pkg:publish": "semantic-release --no-ci",
13
+ "pkg:publish-test": "semantic-release --dry-run",
14
+ "pkg:purge": "rimraf dist lib .coverage .lint-cache .npm node_modules",
15
+ "prepare": "husky install & echo \"$INIT_CWD\" & (cp .editorconfig \"$INIT_CWD\" || true)"
16
+ },
17
+ "dependencies": {
18
+ "@semantic-release/git": "^10.0.1",
19
+ "@semantic-release/github": "^9.0.4",
20
+ "@semantic-release/gitlab": "^12.0.5",
21
+ "@semantic-release/npm": "^10.0.5",
22
+ "@typescript-eslint/eslint-plugin": "^6.5.0",
23
+ "@typescript-eslint/parser": "^6.5.0",
24
+ "@vue/eslint-config-prettier": "^8.0.0",
25
+ "@vue/eslint-config-typescript": "^11.0.3",
26
+ "eslint": "^8.48.0",
27
+ "eslint-config-prettier": "^9.0.0",
28
+ "eslint-plugin-decorator-position": "^5.0.2",
29
+ "eslint-plugin-import": "^2.28.1",
30
+ "eslint-plugin-json-format": "^2.0.1",
31
+ "eslint-plugin-prettier": "^5.0.0",
32
+ "eslint-plugin-prettier-vue": "^5.0.0",
33
+ "eslint-plugin-vue": "^9.17.0",
34
+ "eslint-plugin-yml": "^1.8.0",
35
+ "husky": "^8.0.3",
36
+ "postcss-html": "^1.5.0",
37
+ "prettier": "^3.0.3",
38
+ "semantic-release": "^21.1.1",
39
+ "stylelint": "^15.10.3",
40
+ "stylelint-config-standard": "^34.0.0",
41
+ "stylelint-config-standard-scss": "^10.0.0",
42
+ "stylelint-config-standard-vue": "^1.0.0",
43
+ "stylelint-order": "^6.0.3",
44
+ "stylelint-prettier": "^4.0.2",
45
+ "stylelint-scss": "^5.1.0",
46
+ "typescript": "^5.2.2"
47
+ },
48
+ "devDependencies": {
49
+ "rimraf": "^5.0.1",
50
+ "tslib": "^2.6.2"
51
+ },
52
+ "publishConfig": {
53
+ "registry": "https://registry.npmjs.org/",
54
+ "access": "public"
55
+ },
56
+ "release": {
57
+ "extends": [
58
+ "./.releaserc-github.json"
59
+ ]
60
+ },
61
+ "keywords": []
62
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "compilerOptions": {
3
+ "declaration": true,
4
+ "declarationMap": true,
5
+ "emitDecoratorMetadata": true,
6
+ "experimentalDecorators": true,
7
+ "forceConsistentCasingInFileNames": true,
8
+ "importHelpers": true,
9
+ "incremental": true,
10
+ "module": "commonjs",
11
+ "moduleResolution": "node",
12
+ "newLine": "lf",
13
+ "noEmitOnError": true,
14
+ "noImplicitAny": true,
15
+ "noImplicitOverride": true,
16
+ "noImplicitReturns": true,
17
+ "noImplicitThis": true,
18
+ "noUnusedLocals": true,
19
+ "noUnusedParameters": false,
20
+ "sourceMap": true,
21
+ "strict": true
22
+ },
23
+ "exclude": ["node_modules"]
24
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "./base",
3
+ "compilerOptions": {
4
+ "lib": ["dom", "es2020"],
5
+ "plugins": [],
6
+ "resolveJsonModule": true,
7
+ "target": "es2020",
8
+ "useDefineForClassFields": false
9
+ }
10
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "extends": "./base",
3
+ "compilerOptions": {
4
+ "lib": ["es2020"],
5
+ "target": "es2020"
6
+ }
7
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "./tsconfig/browser",
3
+ "compilerOptions": {
4
+ "allowJs": true,
5
+ "checkJs": false,
6
+ "noEmit": true
7
+ },
8
+ "exclude": ["node_modules"],
9
+ "include": ["test", "test/**/*.vue"]
10
+ }