@front-cmdt/format 1.3.0 → 1.4.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/CHANGELOG.md CHANGED
@@ -2,7 +2,14 @@
2
2
 
3
3
  Все значимые изменения этого проекта будут задокументированы в этом файле.
4
4
 
5
- ## [1.2.2] - 2025-01-30
5
+ ## [1.3.1] - 2026-02-09
6
+
7
+ ### Добавлено
8
+
9
+ - Общая конфигурация Stylelint с поддержкой SCSS, включая порядок CSS-свойств и базовые правила
10
+ - Поддержка форматирования файлов `.astro` через `prettier-plugin-astro`
11
+
12
+ ## [1.2.2] - 2026-01-30
6
13
 
7
14
  ### Добавлено
8
15
 
package/README.md CHANGED
@@ -1,41 +1,83 @@
1
1
  # @front-cmdt/format
2
2
 
3
+ ## Установка
4
+
5
+ ```bash
6
+ npm i -D @front-cmdt/format
7
+ # или
8
+ yarn add -D @front-cmdt/format
9
+ # или
10
+ pnpm add -D @front-cmdt/format
11
+ ```
12
+
13
+ ## Prettier
14
+
3
15
  Общий **Prettier config** для проектов. Включает:
4
16
 
5
17
  - Сортировку импортов через `@trivago/prettier-plugin-sort-imports`
6
18
  - Автоматическую сортировку Tailwind CSS классов через `prettier-plugin-tailwindcss`
19
+ - Поддержку форматирования файлов `.astro` через `prettier-plugin-astro`
7
20
 
8
- ## Требования
21
+ ### Создайте: `prettier.config.mjs` в проекте
9
22
 
10
- - `prettier` (peer dependency): `^3.0.0`
23
+ ```js
24
+ import config from '@front-cmdt/format/prettier';
11
25
 
12
- ## Установка
26
+ export default config;
27
+ ```
13
28
 
14
- ```bash
15
- npm i -D @front-cmdt/format prettier
16
- # или
17
- yarn add -D @front-cmdt/format prettier
18
- # или
19
- pnpm add -D @front-cmdt/format prettier
29
+ ### Пример скриптов
30
+
31
+ `package.json`:
32
+
33
+ ```json
34
+ {
35
+ "scripts": {
36
+ "prettier:fix": "prettier . --write",
37
+ "prettier:check": "prettier . --check"
38
+ }
39
+ }
20
40
  ```
21
41
 
22
- ### Создайте: `prettier.config.js` в проекте
42
+ ---
43
+
44
+ ## Stylelint
45
+
46
+ Общий **stylelint** для проектов. Включает:
47
+
48
+ - Автоматическую очистку и сортировку свойств через `stylelint-config-clean-order`
49
+ - Поддержку SCSS через `stylelint-scss` и `postcss-scss`
50
+ - Базовые правила для предотвращения ошибок (пустые блоки, дубликаты селекторов и т.д.)
51
+
52
+ ### Создайте: `stylelint.config.mjs` в проекте
23
53
 
24
54
  ```js
25
- import config from "@front-cmdt/format/prettier"
55
+ import config from '@front-cmdt/format/stylelint';
56
+
57
+ export default config;
58
+ ```
59
+
60
+ ### Пример скриптов
26
61
 
27
- export default config
62
+ `package.json`:
63
+
64
+ ```json
65
+ {
66
+ "scripts": {
67
+ "stylelint:fix": "stylelint '**/*.{css,scss}' --fix",
68
+ "stylelint:check": "stylelint '**/*.{css,scss}'"
69
+ }
70
+ }
28
71
  ```
29
72
 
30
- ## Пример скриптов
73
+ ## Пример общего скрипта для форматирования
31
74
 
32
75
  `package.json`:
33
76
 
34
77
  ```json
35
78
  {
36
79
  "scripts": {
37
- "format": "prettier . --write",
38
- "format:check": "prettier . --check"
80
+ "format": "npm run stylelint:fix && npm run prettier:fix"
39
81
  }
40
82
  }
41
83
  ```
@@ -44,42 +86,86 @@ export default config
44
86
 
45
87
  # @front-cmdt/format (EN)
46
88
 
89
+ ## Installation
90
+
91
+ ```bash
92
+ npm i -D @front-cmdt/format
93
+ # or
94
+ yarn add -D @front-cmdt/format
95
+ # or
96
+ pnpm add -D @front-cmdt/format
97
+ ```
98
+
99
+ ---
100
+
101
+ ## Prettier
102
+
47
103
  Shared **Prettier config** for projects. Includes:
48
104
 
49
105
  - Import sorting via `@trivago/prettier-plugin-sort-imports`
50
106
  - Automatic Tailwind CSS class sorting via `prettier-plugin-tailwindcss`
107
+ - `.astro` file formatting support via `prettier-plugin-astro`
51
108
 
52
- ## Requirements
109
+ ### Create: `prettier.config.mjs` in your project
53
110
 
54
- - `prettier` (peer dependency): `^3.0.0`
111
+ ```js
112
+ import config from '@front-cmdt/format/prettier';
55
113
 
56
- ## Install
114
+ export default config;
115
+ ```
57
116
 
58
- ```bash
59
- npm i -D @front-cmdt/format prettier
60
- # or
61
- yarn add -D @front-cmdt/format prettier
62
- # or
63
- pnpm add -D @front-cmdt/format prettier
117
+ ### Script examples
118
+
119
+ `package.json`:
120
+
121
+ ```json
122
+ {
123
+ "scripts": {
124
+ "prettier:fix": "prettier . --write",
125
+ "prettier:check": "prettier . --check"
126
+ }
127
+ }
64
128
  ```
65
129
 
66
- ### Create: `prettier.config.js` in your project
130
+ ---
131
+
132
+ ## Stylelint
133
+
134
+ Shared **Stylelint config** for projects. Includes:
135
+
136
+ - Automatic property ordering and cleaning via `stylelint-config-clean-order`
137
+ - SCSS support via `stylelint-scss` and `postcss-scss`
138
+ - Core rules for error prevention (empty blocks, duplicate selectors, etc.)
139
+
140
+ ### Create: `stylelint.config.mjs` in your project
67
141
 
68
142
  ```js
69
- import config from "@front-cmdt/format/prettier"
143
+ import config from '@front-cmdt/format/stylelint';
144
+
145
+ export default config;
146
+ ```
147
+
148
+ ### Script examples
70
149
 
71
- export default config
150
+ `package.json`:
151
+
152
+ ```json
153
+ {
154
+ "scripts": {
155
+ "stylelint:fix": "stylelint '**/*.{css,scss}' --fix",
156
+ "stylelint:check": "stylelint '**/*.{css,scss}'"
157
+ }
158
+ }
72
159
  ```
73
160
 
74
- ## Script examples
161
+ ## Shared formatting script example
75
162
 
76
163
  `package.json`:
77
164
 
78
165
  ```json
79
166
  {
80
167
  "scripts": {
81
- "format": "prettier . --write",
82
- "format:check": "prettier . --check"
168
+ "format": "npm run stylelint:fix && npm run prettier:fix"
83
169
  }
84
170
  }
85
171
  ```
@@ -0,0 +1,2 @@
1
+ dist
2
+ dist-scripts
@@ -78,5 +78,13 @@ var prettier_config_default = {
78
78
  // Относительные импорты из текущей директории
79
79
  ],
80
80
  // Подключённые плагины Prettier
81
- plugins: ["@trivago/prettier-plugin-sort-imports", "prettier-plugin-tailwindcss"]
81
+ plugins: ["@trivago/prettier-plugin-sort-imports", "prettier-plugin-astro", "prettier-plugin-tailwindcss"],
82
+ overrides: [
83
+ {
84
+ files: "*.astro",
85
+ options: {
86
+ parser: "astro"
87
+ }
88
+ }
89
+ ]
82
90
  };
@@ -2,7 +2,7 @@
2
2
 
3
3
  var prettier_config = {
4
4
  // Запятые в конце: "none" - без запятых, "es5" - где допустимо в ES5, "all" - везде
5
- trailingComma: "none",
5
+ trailingComma: 'none',
6
6
  // Количество пробелов для отступа
7
7
  tabWidth: 2,
8
8
  // Использовать табы вместо пробелов
@@ -14,17 +14,17 @@ var prettier_config = {
14
14
  // Одинарные кавычки в JSX
15
15
  jsxSingleQuote: true,
16
16
  // Скобки вокруг единственного параметра стрелочной функции: "avoid" - убирать, "always" - всегда
17
- arrowParens: "avoid",
17
+ arrowParens: 'avoid',
18
18
  // Максимальная длина строки перед переносом
19
19
  printWidth: 120,
20
20
  // Пробелы внутри фигурных скобок объектов: { foo: bar }
21
21
  bracketSpacing: true,
22
22
  // Кавычки вокруг ключей объекта: "as-needed" - только когда необходимо
23
- quoteProps: "as-needed",
23
+ quoteProps: 'as-needed',
24
24
  // Закрывающая скобка > на той же строке что и последний атрибут
25
25
  bracketSameLine: false,
26
26
  // Чувствительность к пробелам в HTML: "css" - как в CSS display свойстве
27
- htmlWhitespaceSensitivity: "css",
27
+ htmlWhitespaceSensitivity: 'css',
28
28
 
29
29
  // --- Настройки плагина сортировки импортов (@trivago/prettier-plugin-sort-imports) ---
30
30
  // Добавлять пустую строку между группами импортов
@@ -36,23 +36,31 @@ var prettier_config = {
36
36
  // Сортировка без учёта регистра
37
37
  importOrderCaseInsensitive: true,
38
38
  // Плагины парсера для корректной обработки синтаксиса
39
- importOrderParserPlugins: ["classProperties", "decorators-legacy", "typescript", "jsx"],
39
+ importOrderParserPlugins: ['classProperties', 'decorators-legacy', 'typescript', 'jsx'],
40
40
  // Порядок группировки импортов (регулярные выражения)
41
41
  importOrder: [
42
- "<THIRD_PARTY_MODULES>", // Сторонние модули (node_modules)
43
- "^react$", // React отдельно
42
+ '<THIRD_PARTY_MODULES>', // Сторонние модули (node_modules)
43
+ '^react$', // React отдельно
44
44
  // "^@/app/(.*)$",
45
45
  // "^@/pages/(.*)$",
46
46
  // "^@/widgets/(.*)$",
47
47
  // "^@/features/(.*)$",
48
48
  // "^@/entities/(.*)$",
49
49
  // "^@/shared/(.*)$",
50
- "^@/(.*)$", // Алиасы проекта (@/)
51
- "^../(.*)$", // Относительные импорты из родительских директорий
52
- "^./(.*)$", // Относительные импорты из текущей директории
50
+ '^@/(.*)$', // Алиасы проекта (@/)
51
+ '^../(.*)$', // Относительные импорты из родительских директорий
52
+ '^./(.*)$' // Относительные импорты из текущей директории
53
53
  ],
54
54
  // Подключённые плагины Prettier
55
- plugins: ["@trivago/prettier-plugin-sort-imports", "prettier-plugin-tailwindcss"],
55
+ plugins: ['@trivago/prettier-plugin-sort-imports', 'prettier-plugin-astro', 'prettier-plugin-tailwindcss'],
56
+ overrides: [
57
+ {
58
+ files: '*.astro',
59
+ options: {
60
+ parser: 'astro'
61
+ }
62
+ }
63
+ ]
56
64
  };
57
65
 
58
66
  export { prettier_config as default };
@@ -2,7 +2,7 @@
2
2
 
3
3
  var prettier_config = {
4
4
  // Запятые в конце: "none" - без запятых, "es5" - где допустимо в ES5, "all" - везде
5
- trailingComma: "none",
5
+ trailingComma: 'none',
6
6
  // Количество пробелов для отступа
7
7
  tabWidth: 2,
8
8
  // Использовать табы вместо пробелов
@@ -14,17 +14,17 @@ var prettier_config = {
14
14
  // Одинарные кавычки в JSX
15
15
  jsxSingleQuote: true,
16
16
  // Скобки вокруг единственного параметра стрелочной функции: "avoid" - убирать, "always" - всегда
17
- arrowParens: "avoid",
17
+ arrowParens: 'avoid',
18
18
  // Максимальная длина строки перед переносом
19
19
  printWidth: 120,
20
20
  // Пробелы внутри фигурных скобок объектов: { foo: bar }
21
21
  bracketSpacing: true,
22
22
  // Кавычки вокруг ключей объекта: "as-needed" - только когда необходимо
23
- quoteProps: "as-needed",
23
+ quoteProps: 'as-needed',
24
24
  // Закрывающая скобка > на той же строке что и последний атрибут
25
25
  bracketSameLine: false,
26
26
  // Чувствительность к пробелам в HTML: "css" - как в CSS display свойстве
27
- htmlWhitespaceSensitivity: "css",
27
+ htmlWhitespaceSensitivity: 'css',
28
28
 
29
29
  // --- Настройки плагина сортировки импортов (@trivago/prettier-plugin-sort-imports) ---
30
30
  // Добавлять пустую строку между группами импортов
@@ -36,23 +36,31 @@ var prettier_config = {
36
36
  // Сортировка без учёта регистра
37
37
  importOrderCaseInsensitive: true,
38
38
  // Плагины парсера для корректной обработки синтаксиса
39
- importOrderParserPlugins: ["classProperties", "decorators-legacy", "typescript", "jsx"],
39
+ importOrderParserPlugins: ['classProperties', 'decorators-legacy', 'typescript', 'jsx'],
40
40
  // Порядок группировки импортов (регулярные выражения)
41
41
  importOrder: [
42
- "<THIRD_PARTY_MODULES>", // Сторонние модули (node_modules)
43
- "^react$", // React отдельно
42
+ '<THIRD_PARTY_MODULES>', // Сторонние модули (node_modules)
43
+ '^react$', // React отдельно
44
44
  // "^@/app/(.*)$",
45
45
  // "^@/pages/(.*)$",
46
46
  // "^@/widgets/(.*)$",
47
47
  // "^@/features/(.*)$",
48
48
  // "^@/entities/(.*)$",
49
49
  // "^@/shared/(.*)$",
50
- "^@/(.*)$", // Алиасы проекта (@/)
51
- "^../(.*)$", // Относительные импорты из родительских директорий
52
- "^./(.*)$", // Относительные импорты из текущей директории
50
+ '^@/(.*)$', // Алиасы проекта (@/)
51
+ '^../(.*)$', // Относительные импорты из родительских директорий
52
+ '^./(.*)$' // Относительные импорты из текущей директории
53
53
  ],
54
54
  // Подключённые плагины Prettier
55
- plugins: ["@trivago/prettier-plugin-sort-imports", "prettier-plugin-tailwindcss"],
55
+ plugins: ['@trivago/prettier-plugin-sort-imports', 'prettier-plugin-astro', 'prettier-plugin-tailwindcss'],
56
+ overrides: [
57
+ {
58
+ files: '*.astro',
59
+ options: {
60
+ parser: 'astro'
61
+ }
62
+ }
63
+ ]
56
64
  };
57
65
 
58
66
  export { prettier_config as default };
@@ -55,7 +55,15 @@ var prettier_config_default = {
55
55
  // Относительные импорты из текущей директории
56
56
  ],
57
57
  // Подключённые плагины Prettier
58
- plugins: ["@trivago/prettier-plugin-sort-imports", "prettier-plugin-tailwindcss"]
58
+ plugins: ["@trivago/prettier-plugin-sort-imports", "prettier-plugin-astro", "prettier-plugin-tailwindcss"],
59
+ overrides: [
60
+ {
61
+ files: "*.astro",
62
+ options: {
63
+ parser: "astro"
64
+ }
65
+ }
66
+ ]
59
67
  };
60
68
  export {
61
69
  prettier_config_default as default
@@ -0,0 +1,50 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/stylelint.config.mjs
20
+ var stylelint_config_exports = {};
21
+ __export(stylelint_config_exports, {
22
+ default: () => stylelint_config_default
23
+ });
24
+ module.exports = __toCommonJS(stylelint_config_exports);
25
+ var stylelint_config_default = {
26
+ extends: ["stylelint-config-clean-order"],
27
+ plugins: ["stylelint-scss"],
28
+ customSyntax: "postcss-scss",
29
+ rules: {
30
+ "block-no-empty": true,
31
+ "color-hex-length": "long",
32
+ "no-duplicate-selectors": true,
33
+ "selector-max-id": 0,
34
+ "at-rule-empty-line-before": [
35
+ "always",
36
+ {
37
+ except: ["first-nested"],
38
+ ignoreAtRules: ["else if", "else", "use", "import", "include", "tailwind"]
39
+ }
40
+ ],
41
+ "rule-empty-line-before": [
42
+ "always",
43
+ {
44
+ except: ["first-nested"]
45
+ }
46
+ ],
47
+ "order/properties-alphabetical-order": null,
48
+ "order/order": ["custom-properties", "dollar-variables", "at-variables", "declarations", "at-rules", "rules"]
49
+ }
50
+ };
@@ -0,0 +1,29 @@
1
+ /** @type {import('stylelint').Config} */
2
+ var stylelint_config = {
3
+ extends: ['stylelint-config-clean-order'],
4
+ plugins: ['stylelint-scss'],
5
+ customSyntax: 'postcss-scss',
6
+ rules: {
7
+ 'block-no-empty': true,
8
+ 'color-hex-length': 'long',
9
+ 'no-duplicate-selectors': true,
10
+ 'selector-max-id': 0,
11
+ 'at-rule-empty-line-before': [
12
+ 'always',
13
+ {
14
+ except: ['first-nested'],
15
+ ignoreAtRules: ['else if', 'else', 'use', 'import', 'include', 'tailwind']
16
+ }
17
+ ],
18
+ 'rule-empty-line-before': [
19
+ 'always',
20
+ {
21
+ except: ['first-nested']
22
+ }
23
+ ],
24
+ 'order/properties-alphabetical-order': null,
25
+ 'order/order': ['custom-properties', 'dollar-variables', 'at-variables', 'declarations', 'at-rules', 'rules']
26
+ }
27
+ };
28
+
29
+ export { stylelint_config as default };
@@ -0,0 +1,29 @@
1
+ /** @type {import('stylelint').Config} */
2
+ var stylelint_config = {
3
+ extends: ['stylelint-config-clean-order'],
4
+ plugins: ['stylelint-scss'],
5
+ customSyntax: 'postcss-scss',
6
+ rules: {
7
+ 'block-no-empty': true,
8
+ 'color-hex-length': 'long',
9
+ 'no-duplicate-selectors': true,
10
+ 'selector-max-id': 0,
11
+ 'at-rule-empty-line-before': [
12
+ 'always',
13
+ {
14
+ except: ['first-nested'],
15
+ ignoreAtRules: ['else if', 'else', 'use', 'import', 'include', 'tailwind']
16
+ }
17
+ ],
18
+ 'rule-empty-line-before': [
19
+ 'always',
20
+ {
21
+ except: ['first-nested']
22
+ }
23
+ ],
24
+ 'order/properties-alphabetical-order': null,
25
+ 'order/order': ['custom-properties', 'dollar-variables', 'at-variables', 'declarations', 'at-rules', 'rules']
26
+ }
27
+ };
28
+
29
+ export { stylelint_config as default };
@@ -0,0 +1,30 @@
1
+ // src/stylelint.config.mjs
2
+ var stylelint_config_default = {
3
+ extends: ["stylelint-config-clean-order"],
4
+ plugins: ["stylelint-scss"],
5
+ customSyntax: "postcss-scss",
6
+ rules: {
7
+ "block-no-empty": true,
8
+ "color-hex-length": "long",
9
+ "no-duplicate-selectors": true,
10
+ "selector-max-id": 0,
11
+ "at-rule-empty-line-before": [
12
+ "always",
13
+ {
14
+ except: ["first-nested"],
15
+ ignoreAtRules: ["else if", "else", "use", "import", "include", "tailwind"]
16
+ }
17
+ ],
18
+ "rule-empty-line-before": [
19
+ "always",
20
+ {
21
+ except: ["first-nested"]
22
+ }
23
+ ],
24
+ "order/properties-alphabetical-order": null,
25
+ "order/order": ["custom-properties", "dollar-variables", "at-variables", "declarations", "at-rules", "rules"]
26
+ }
27
+ };
28
+ export {
29
+ stylelint_config_default as default
30
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@front-cmdt/format",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "keywords": [
5
5
  "prettier",
6
6
  "trivago",
@@ -13,7 +13,16 @@
13
13
  "formatting",
14
14
  "code style",
15
15
  "code formatting",
16
- "code styling"
16
+ "code styling",
17
+ "stylelint",
18
+ "stylelint-config",
19
+ "stylelint-scss",
20
+ "scss lint",
21
+ "scss linting",
22
+ "css lint",
23
+ "css linting",
24
+ "astro",
25
+ "astro plugin"
17
26
  ],
18
27
  "type": "module",
19
28
  "publishConfig": {
@@ -21,11 +30,18 @@
21
30
  },
22
31
  "license": "ISC",
23
32
  "peerDependencies": {
24
- "prettier": "^3.0.0"
33
+ "sass": "^1.5.0"
25
34
  },
26
35
  "dependencies": {
27
36
  "@trivago/prettier-plugin-sort-imports": "^5.2.2",
28
- "prettier-plugin-tailwindcss": "^0.7.2"
37
+ "postcss-scss": "^4.0.9",
38
+ "prettier": "^3.0.0",
39
+ "prettier-plugin-astro": "0.14.1",
40
+ "prettier-plugin-tailwindcss": "^0.7.2",
41
+ "stylelint": "^17.1.1",
42
+ "stylelint-config-clean-order": "^8.0.0",
43
+ "stylelint-order": "^7.0.0",
44
+ "stylelint-scss": "^7.0.0"
29
45
  },
30
46
  "main": "./dist/prettier.config.cjs",
31
47
  "module": "./dist/prettier.config.js",
@@ -35,7 +51,7 @@
35
51
  "CHANGELOG.md"
36
52
  ],
37
53
  "scripts": {
38
- "build": "tsup src/prettier.config.mjs --format esm,cjs --dts --clean",
54
+ "build": "tsup src/prettier.config.mjs src/stylelint.config.mjs --format esm,cjs --dts --clean",
39
55
  "release:patch": "yarn build && npm version patch -m \"release: v%s\" && git push --follow-tags",
40
56
  "release:minor": "yarn build && npm version minor -m \"release: v%s\" && git push --follow-tags",
41
57
  "release:major": "yarn build && npm version major -m \"release: v%s\" && git push --follow-tags",
@@ -43,7 +59,7 @@
43
59
  "pub:local": "npm run build && yalc push"
44
60
  },
45
61
  "exports": {
46
- ".": {
62
+ "./prettier": {
47
63
  "import": {
48
64
  "types": "./dist/prettier.config.d.ts",
49
65
  "default": "./dist/prettier.config.js"
@@ -53,14 +69,14 @@
53
69
  "default": "./dist/prettier.config.cjs"
54
70
  }
55
71
  },
56
- "./prettier": {
72
+ "./stylelint": {
57
73
  "import": {
58
- "types": "./dist/prettier.config.d.ts",
59
- "default": "./dist/prettier.config.js"
74
+ "types": "./dist/stylelint.config.d.ts",
75
+ "default": "./dist/stylelint.config.js"
60
76
  },
61
77
  "require": {
62
- "types": "./dist/prettier.config.d.cts",
63
- "default": "./dist/prettier.config.cjs"
78
+ "types": "./dist/stylelint.config.d.cts",
79
+ "default": "./dist/stylelint.config.cjs"
64
80
  }
65
81
  }
66
82
  },