@gem-sdk/eslint-plugin 0.0.1 → 0.0.3
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 +32 -252
- package/dist/index.d.ts +25 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -13
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
# eslint-plugin
|
|
1
|
+
# @gem-sdk/eslint-plugin
|
|
2
2
|
|
|
3
3
|
Shared ESLint rules for all GemPages frontend repositories.
|
|
4
4
|
|
|
5
5
|
Consolidates every custom rule from `web-builder-shopify-app`, `web-builder`, and `web-builder-elements` into a single publishable npm package. The architecture rules support both React (`.tsx`) and Vue (`.vue`) files.
|
|
6
6
|
|
|
7
|
+
> The package name is `@gem-sdk/eslint-plugin`, so its ESLint plugin prefix is **`@gem-sdk`** (scoped packages drop the `eslint-plugin-` segment). Reference rules as `@gem-sdk/<rule>` and shareable configs as `plugin:@gem-sdk/<config>`.
|
|
8
|
+
|
|
7
9
|
## Installation
|
|
8
10
|
|
|
9
11
|
```bash
|
|
10
|
-
yarn add -D eslint-plugin
|
|
12
|
+
yarn add -D @gem-sdk/eslint-plugin
|
|
11
13
|
```
|
|
12
14
|
|
|
13
15
|
## Usage
|
|
@@ -18,7 +20,7 @@ Choose the config that matches your tech stack:
|
|
|
18
20
|
|
|
19
21
|
```json
|
|
20
22
|
{
|
|
21
|
-
"extends": ["plugin
|
|
23
|
+
"extends": ["plugin:@gem-sdk/react"]
|
|
22
24
|
}
|
|
23
25
|
```
|
|
24
26
|
|
|
@@ -26,7 +28,7 @@ Choose the config that matches your tech stack:
|
|
|
26
28
|
|
|
27
29
|
```json
|
|
28
30
|
{
|
|
29
|
-
"extends": ["plugin
|
|
31
|
+
"extends": ["plugin:@gem-sdk/vue"]
|
|
30
32
|
}
|
|
31
33
|
```
|
|
32
34
|
|
|
@@ -34,7 +36,7 @@ Choose the config that matches your tech stack:
|
|
|
34
36
|
|
|
35
37
|
```json
|
|
36
38
|
{
|
|
37
|
-
"extends": ["plugin
|
|
39
|
+
"extends": ["plugin:@gem-sdk/recommended"]
|
|
38
40
|
}
|
|
39
41
|
```
|
|
40
42
|
|
|
@@ -42,257 +44,35 @@ Choose the config that matches your tech stack:
|
|
|
42
44
|
|
|
43
45
|
```json
|
|
44
46
|
{
|
|
45
|
-
"plugins": ["gem-
|
|
47
|
+
"plugins": ["@gem-sdk"],
|
|
46
48
|
"rules": {
|
|
47
|
-
"gem-
|
|
48
|
-
"gem-
|
|
49
|
-
"gem-
|
|
50
|
-
"gem-
|
|
51
|
-
"gem-
|
|
52
|
-
"gem-
|
|
53
|
-
"gem-
|
|
54
|
-
"gem-
|
|
55
|
-
"gem-
|
|
56
|
-
"gem-
|
|
49
|
+
"@gem-sdk/module-structure": "error",
|
|
50
|
+
"@gem-sdk/no-module-barrel": "error",
|
|
51
|
+
"@gem-sdk/module-import-boundary": "error",
|
|
52
|
+
"@gem-sdk/pure-ui-layer": "error",
|
|
53
|
+
"@gem-sdk/module-index-required": "error",
|
|
54
|
+
"@gem-sdk/no-t-for-variable": "error",
|
|
55
|
+
"@gem-sdk/not-use-store-to-refs": "error",
|
|
56
|
+
"@gem-sdk/not-use-custom-color-class": "warn",
|
|
57
|
+
"@gem-sdk/no-export-type-from-tsx": "error",
|
|
58
|
+
"@gem-sdk/no-import-from-package-path": "error"
|
|
57
59
|
}
|
|
58
60
|
}
|
|
59
61
|
```
|
|
60
62
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
## Rules
|
|
64
|
-
|
|
65
|
-
### Architecture (React + Vue)
|
|
66
|
-
|
|
67
|
-
These rules apply to both `.tsx` and `.vue` files and enforce the v2 module structure used across all GemPages repos.
|
|
68
|
-
|
|
69
|
-
Module detection handles both project layouts:
|
|
70
|
-
- `v2/modules/<name>/` — business modules (code lives under `app/` subdir)
|
|
71
|
-
- `v2/core/<name>/` — core modules (code lives at the module root)
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
#### `module-structure`
|
|
76
|
-
|
|
77
|
-
Enforces the allowed file/folder layout inside v2 modules.
|
|
78
|
-
|
|
79
|
-
**Allowed paths (business modules):**
|
|
80
|
-
|
|
81
|
-
```
|
|
82
|
-
app/contexts/*.(ts|tsx)
|
|
83
|
-
app/constants/*.ts
|
|
84
|
-
app/hooks/*.ts
|
|
85
|
-
app/stores/*.ts
|
|
86
|
-
app/types/*.ts
|
|
87
|
-
app/utils/*.ts
|
|
88
|
-
app/graphql/{fragments,queries,mutations}/*.(gql|ts)
|
|
89
|
-
app/ui/{atoms,molecules,organisms,templates}/*.(vue|tsx)
|
|
90
|
-
app/ui/assets/fonts/*.(woff|woff2|ttf|eot)
|
|
91
|
-
app/ui/assets/icons/*.(vue|tsx)
|
|
92
|
-
app/ui/assets/images/*.(png|jpg|jpeg|gif|svg|webp|ico|bmp|tiff)
|
|
93
|
-
app/ui/assets/styles/*.(css|scss)
|
|
94
|
-
app/ui/assets/videos/*.(mp4|mp3)
|
|
95
|
-
*.test.[tj]sx? (anywhere in the module)
|
|
96
|
-
external.ts (module root only)
|
|
97
|
-
index.ts (module root only)
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
Core modules use the same layout without the `app/` prefix.
|
|
101
|
-
|
|
102
|
-
---
|
|
103
|
-
|
|
104
|
-
#### `no-module-barrel`
|
|
105
|
-
|
|
106
|
-
Bans `index.ts` barrel files inside module subdirectories. Only the module-root `index.ts` is allowed.
|
|
107
|
-
|
|
108
|
-
```ts
|
|
109
|
-
// ❌ Error — app/hooks/index.ts
|
|
110
|
-
export { useFoo } from './useFoo';
|
|
111
|
-
|
|
112
|
-
// ✅ OK — module-root index.ts
|
|
113
|
-
export { useFoo } from './app/hooks/useFoo';
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
---
|
|
117
|
-
|
|
118
|
-
#### `module-import-boundary`
|
|
119
|
-
|
|
120
|
-
Prevents files inside a module from importing across the module boundary. Cross-module dependencies must go through `external.ts`.
|
|
121
|
-
|
|
122
|
-
Banned imports:
|
|
123
|
-
- Alias imports (`~/...`, `@/...`) — always escape the module
|
|
124
|
-
- Relative imports (`../`) resolving outside the module root
|
|
125
|
-
|
|
126
|
-
Scoped npm packages (e.g. `@shopify/react-form`) are unaffected — the alias check only matches the literal `@/` prefix.
|
|
127
|
-
|
|
128
|
-
```ts
|
|
129
|
-
// ❌ Error
|
|
130
|
-
import { useShop } from '~/modules/shop-info/app/hooks/useShop';
|
|
131
|
-
|
|
132
|
-
// ✅ OK — through the public API
|
|
133
|
-
import { useShop } from '~/modules/shop-info';
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
---
|
|
137
|
-
|
|
138
|
-
#### `pure-ui-layer`
|
|
139
|
-
|
|
140
|
-
Bans hook imports and `use*` calls inside `ui/atoms/` and `ui/molecules/`. These layers must be stateless.
|
|
141
|
-
|
|
142
|
-
Exempt hooks: anything matching `use.*i18n`, `use.*translat`, or `use.*const` (case-insensitive) — e.g. `useI18n`, `useTranslation`, `useConstants`.
|
|
143
|
-
|
|
144
|
-
Files under `v2/modules/<name>/core/` are fully exempt from this rule.
|
|
145
|
-
|
|
146
|
-
```tsx
|
|
147
|
-
// ❌ Error — atoms/ProductCard.tsx
|
|
148
|
-
import { useProduct } from '../../hooks/useProduct';
|
|
149
|
-
|
|
150
|
-
// ✅ OK
|
|
151
|
-
import { useTranslation } from '../../hooks/useTranslation';
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
#### `module-index-required`
|
|
157
|
-
|
|
158
|
-
Verifies that every v2 module has an `index.ts` at its root. Fires on every file linted inside the module.
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
### i18n (React + Vue)
|
|
163
|
-
|
|
164
|
-
#### `no-t-for-variable`
|
|
165
|
-
|
|
166
|
-
Only plain string literals are allowed as the first argument to `t()`. Template literals with interpolations are banned.
|
|
167
|
-
|
|
168
|
-
```ts
|
|
169
|
-
// ✅ OK
|
|
170
|
-
t("Save")
|
|
171
|
-
t(`Hello`)
|
|
172
|
-
|
|
173
|
-
// ❌ Error
|
|
174
|
-
t(key)
|
|
175
|
-
t(`Hello ${name}`)
|
|
176
|
-
t(props.label)
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
---
|
|
180
|
-
|
|
181
|
-
### Vue-specific
|
|
182
|
-
|
|
183
|
-
#### `not-use-store-to-refs`
|
|
184
|
-
|
|
185
|
-
Bans Pinia's `storeToRefs()`. Use `computed()` instead for explicit reactivity.
|
|
63
|
+
## What each config enables
|
|
186
64
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
65
|
+
| Rule | `recommended` | `vue` | `react` |
|
|
66
|
+
| --- | :---: | :---: | :---: |
|
|
67
|
+
| `module-structure` | error | error | error |
|
|
68
|
+
| `no-module-barrel` | error | error | error |
|
|
69
|
+
| `module-import-boundary` | error | error | error |
|
|
70
|
+
| `pure-ui-layer` | error | error | error |
|
|
71
|
+
| `module-index-required` | error | error | error |
|
|
72
|
+
| `no-t-for-variable` | error | error | error |
|
|
73
|
+
| `not-use-store-to-refs` | — | error | — |
|
|
74
|
+
| `not-use-custom-color-class` | — | warn | — |
|
|
75
|
+
| `no-export-type-from-tsx` | — | — | error |
|
|
76
|
+
| `no-import-from-package-path` | — | — | error |
|
|
190
77
|
|
|
191
|
-
|
|
192
|
-
const count = computed(() => useCounterStore().count)
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
#### `not-use-custom-color-class`
|
|
196
|
-
|
|
197
|
-
Warns when raw color values (hex, `rgb()`, `hsl()`) are used in Vue template class bindings. Use design-system tokens instead.
|
|
198
|
-
|
|
199
|
-
```html
|
|
200
|
-
<!-- ❌ Warning -->
|
|
201
|
-
<div :class="['[#ff0000]']" />
|
|
202
|
-
|
|
203
|
-
<!-- ✅ OK -->
|
|
204
|
-
<div class="text-primary" />
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
Requires `vue-eslint-parser` as the parser.
|
|
208
|
-
|
|
209
|
-
---
|
|
210
|
-
|
|
211
|
-
### React / TypeScript-specific
|
|
212
|
-
|
|
213
|
-
#### `no-export-type-from-tsx`
|
|
214
|
-
|
|
215
|
-
Disallows type/interface exports from `.tsx` files. Move types to a dedicated `.ts` file.
|
|
216
|
-
|
|
217
|
-
```ts
|
|
218
|
-
// ❌ Error — MyComponent.tsx
|
|
219
|
-
export type MyProps = { name: string };
|
|
220
|
-
|
|
221
|
-
// ✅ OK — MyComponent.ts
|
|
222
|
-
export type MyProps = { name: string };
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
#### `no-import-from-package-path`
|
|
226
|
-
|
|
227
|
-
Prevents value imports from `@gem-sdk` packages using deep path syntax. Type-only imports are allowed.
|
|
228
|
-
|
|
229
|
-
```ts
|
|
230
|
-
// ❌ Error
|
|
231
|
-
import { fn } from '@gem-sdk/core/internal/utils';
|
|
232
|
-
|
|
233
|
-
// ✅ OK
|
|
234
|
-
import { fn } from '@gem-sdk/core';
|
|
235
|
-
import type { T } from '@gem-sdk/core/internal/utils';
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
---
|
|
239
|
-
|
|
240
|
-
## Development
|
|
241
|
-
|
|
242
|
-
### Setup
|
|
243
|
-
|
|
244
|
-
```bash
|
|
245
|
-
yarn install
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
### Tests
|
|
249
|
-
|
|
250
|
-
Each rule has a co-located `.test.ts` file. Run all tests with:
|
|
251
|
-
|
|
252
|
-
```bash
|
|
253
|
-
yarn test
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
### Build
|
|
257
|
-
|
|
258
|
-
```bash
|
|
259
|
-
yarn build # outputs to dist/
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
### Adding a new rule
|
|
263
|
-
|
|
264
|
-
1. Create `src/rules/myNewRule.ts` (camelCase filename)
|
|
265
|
-
2. Export the rule as `default`
|
|
266
|
-
3. Add a co-located `src/rules/myNewRule.test.ts`
|
|
267
|
-
4. Register in `src/index.ts`:
|
|
268
|
-
|
|
269
|
-
```ts
|
|
270
|
-
import myNewRule from './rules/myNewRule';
|
|
271
|
-
|
|
272
|
-
export const rules = {
|
|
273
|
-
// ...existing
|
|
274
|
-
'my-new-rule': myNewRule,
|
|
275
|
-
};
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
---
|
|
279
|
-
|
|
280
|
-
## Release
|
|
281
|
-
|
|
282
|
-
This package uses [Changesets](https://github.com/changesets/changesets) with the same branching strategy as `web-builder-elements`:
|
|
283
|
-
|
|
284
|
-
| Branch | NPM tag |
|
|
285
|
-
|--------|---------|
|
|
286
|
-
| `production` | `latest` |
|
|
287
|
-
| `staging` | `staging` |
|
|
288
|
-
| `dev` | `dev` |
|
|
289
|
-
| `dev-sun` / `dev-moon` / `dev-earth` / `dev-new-feature` | `sun` / `moon` / `earth` / `new-feature` |
|
|
290
|
-
|
|
291
|
-
To release a new version:
|
|
292
|
-
|
|
293
|
-
```bash
|
|
294
|
-
# 1. Create a changeset describing your changes
|
|
295
|
-
yarn changeset
|
|
296
|
-
|
|
297
|
-
# 2. The CI release workflow handles publishing automatically on merge
|
|
298
|
-
```
|
|
78
|
+
`vue` and `react` both extend `recommended`. Vue configs require `vue-eslint-parser`.
|
package/dist/index.d.ts
CHANGED
|
@@ -12,40 +12,40 @@ export declare const rules: {
|
|
|
12
12
|
};
|
|
13
13
|
export declare const configs: {
|
|
14
14
|
recommended: {
|
|
15
|
-
readonly plugins: readonly ['gem-
|
|
15
|
+
readonly plugins: readonly ['@gem-sdk'];
|
|
16
16
|
readonly rules: {
|
|
17
|
-
readonly 'gem-
|
|
18
|
-
readonly 'gem-
|
|
19
|
-
readonly 'gem-
|
|
20
|
-
readonly 'gem-
|
|
21
|
-
readonly 'gem-
|
|
22
|
-
readonly 'gem-
|
|
17
|
+
readonly '@gem-sdk/module-structure': 'error';
|
|
18
|
+
readonly '@gem-sdk/no-module-barrel': 'error';
|
|
19
|
+
readonly '@gem-sdk/module-import-boundary': 'error';
|
|
20
|
+
readonly '@gem-sdk/pure-ui-layer': 'error';
|
|
21
|
+
readonly '@gem-sdk/module-index-required': 'error';
|
|
22
|
+
readonly '@gem-sdk/no-t-for-variable': 'error';
|
|
23
23
|
};
|
|
24
24
|
};
|
|
25
25
|
vue: {
|
|
26
|
-
readonly plugins: readonly ['gem-
|
|
26
|
+
readonly plugins: readonly ['@gem-sdk'];
|
|
27
27
|
readonly rules: {
|
|
28
|
-
readonly 'gem-
|
|
29
|
-
readonly 'gem-
|
|
30
|
-
readonly 'gem-
|
|
31
|
-
readonly 'gem-
|
|
32
|
-
readonly 'gem-
|
|
33
|
-
readonly 'gem-
|
|
34
|
-
readonly 'gem-
|
|
35
|
-
readonly 'gem-
|
|
28
|
+
readonly '@gem-sdk/module-structure': 'error';
|
|
29
|
+
readonly '@gem-sdk/no-module-barrel': 'error';
|
|
30
|
+
readonly '@gem-sdk/module-import-boundary': 'error';
|
|
31
|
+
readonly '@gem-sdk/pure-ui-layer': 'error';
|
|
32
|
+
readonly '@gem-sdk/module-index-required': 'error';
|
|
33
|
+
readonly '@gem-sdk/no-t-for-variable': 'error';
|
|
34
|
+
readonly '@gem-sdk/not-use-store-to-refs': 'error';
|
|
35
|
+
readonly '@gem-sdk/not-use-custom-color-class': 'warn';
|
|
36
36
|
};
|
|
37
37
|
};
|
|
38
38
|
react: {
|
|
39
|
-
readonly plugins: readonly ['gem-
|
|
39
|
+
readonly plugins: readonly ['@gem-sdk'];
|
|
40
40
|
readonly rules: {
|
|
41
|
-
readonly 'gem-
|
|
42
|
-
readonly 'gem-
|
|
43
|
-
readonly 'gem-
|
|
44
|
-
readonly 'gem-
|
|
45
|
-
readonly 'gem-
|
|
46
|
-
readonly 'gem-
|
|
47
|
-
readonly 'gem-
|
|
48
|
-
readonly 'gem-
|
|
41
|
+
readonly '@gem-sdk/module-structure': 'error';
|
|
42
|
+
readonly '@gem-sdk/no-module-barrel': 'error';
|
|
43
|
+
readonly '@gem-sdk/module-import-boundary': 'error';
|
|
44
|
+
readonly '@gem-sdk/pure-ui-layer': 'error';
|
|
45
|
+
readonly '@gem-sdk/module-index-required': 'error';
|
|
46
|
+
readonly '@gem-sdk/no-t-for-variable': 'error';
|
|
47
|
+
readonly '@gem-sdk/no-export-type-from-tsx': 'error';
|
|
48
|
+
readonly '@gem-sdk/no-import-from-package-path': 'error';
|
|
49
49
|
};
|
|
50
50
|
};
|
|
51
51
|
};
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,KAAK;;;;;;;;;;;CAegB,CAAC;AAyCnC,eAAO,MAAM,OAAO;;oCAnCR,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,KAAK;;;;;;;;;;;CAegB,CAAC;AAyCnC,eAAO,MAAM,OAAO;;oCAnCR,UAAU;;qBAElB,2BAA2B,EAAE,OAAO;qBACpC,2BAA2B,EAAE,OAAO;qBACpC,iCAAiC,EAAE,OAAO;qBAC1C,wBAAwB,EAAE,OAAO;qBACjC,gCAAgC,EAAE,OAAO;qBACzC,4BAA4B,EAAE,OAAO;;;;oCAQ7B,UAAU;;kDAbW,OAAO;kDACP,OAAO;wDACD,OAAO;+CAChB,OAAO;uDACC,OAAO;mDACX,OAAO;uDAWH,OAAO;4DACF,MAAM;;;;oCAQrC,UAAU;;kDAzBW,OAAO;kDACP,OAAO;wDACD,OAAO;+CAChB,OAAO;uDACC,OAAO;mDACX,OAAO;yDAuBD,OAAO;6DACH,OAAO;;;CAID,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -34,36 +34,36 @@ exports.rules = {
|
|
|
34
34
|
* Shared architecture + i18n rules for both React and Vue repos.
|
|
35
35
|
*/
|
|
36
36
|
const recommended = {
|
|
37
|
-
plugins: ['gem-
|
|
37
|
+
plugins: ['@gem-sdk'],
|
|
38
38
|
rules: {
|
|
39
|
-
'gem-
|
|
40
|
-
'gem-
|
|
41
|
-
'gem-
|
|
42
|
-
'gem-
|
|
43
|
-
'gem-
|
|
44
|
-
'gem-
|
|
39
|
+
'@gem-sdk/module-structure': 'error',
|
|
40
|
+
'@gem-sdk/no-module-barrel': 'error',
|
|
41
|
+
'@gem-sdk/module-import-boundary': 'error',
|
|
42
|
+
'@gem-sdk/pure-ui-layer': 'error',
|
|
43
|
+
'@gem-sdk/module-index-required': 'error',
|
|
44
|
+
'@gem-sdk/no-t-for-variable': 'error',
|
|
45
45
|
},
|
|
46
46
|
};
|
|
47
47
|
/**
|
|
48
48
|
* `recommended` + Vue-specific rules. Use with vue-eslint-parser.
|
|
49
49
|
*/
|
|
50
50
|
const vue = {
|
|
51
|
-
plugins: ['gem-
|
|
51
|
+
plugins: ['@gem-sdk'],
|
|
52
52
|
rules: {
|
|
53
53
|
...recommended.rules,
|
|
54
|
-
'gem-
|
|
55
|
-
'gem-
|
|
54
|
+
'@gem-sdk/not-use-store-to-refs': 'error',
|
|
55
|
+
'@gem-sdk/not-use-custom-color-class': 'warn',
|
|
56
56
|
},
|
|
57
57
|
};
|
|
58
58
|
/**
|
|
59
59
|
* `recommended` + React/TypeScript-specific rules.
|
|
60
60
|
*/
|
|
61
61
|
const react = {
|
|
62
|
-
plugins: ['gem-
|
|
62
|
+
plugins: ['@gem-sdk'],
|
|
63
63
|
rules: {
|
|
64
64
|
...recommended.rules,
|
|
65
|
-
'gem-
|
|
66
|
-
'gem-
|
|
65
|
+
'@gem-sdk/no-export-type-from-tsx': 'error',
|
|
66
|
+
'@gem-sdk/no-import-from-package-path': 'error',
|
|
67
67
|
},
|
|
68
68
|
};
|
|
69
69
|
exports.configs = { recommended, vue, react };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gem-sdk/eslint-plugin",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"description": "Shared ESLint rules for GemPages frontend repos (React + Vue)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
"test": "vitest run",
|
|
14
14
|
"type-check": "tsc --noEmit",
|
|
15
15
|
"lint": "eslint src --ext .ts",
|
|
16
|
-
"release": "changeset publish",
|
|
17
|
-
"release-packages": "yarn build && changeset publish"
|
|
16
|
+
"release": "set -a && . ./.env && set +a && env npm_config_//registry.npmjs.org/:_authToken=\"$NPM_TOKEN\" changeset publish",
|
|
17
|
+
"release-packages": "set -a && . ./.env && set +a && yarn build && env npm_config_//registry.npmjs.org/:_authToken=\"$NPM_TOKEN\" changeset publish"
|
|
18
18
|
},
|
|
19
19
|
"peerDependencies": {
|
|
20
20
|
"eslint": ">=8.0.0"
|