@starterlib/eslint-config 0.10.12 → 0.10.14

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.
Files changed (2) hide show
  1. package/index.mjs +29 -2
  2. package/package.json +1 -1
package/index.mjs CHANGED
@@ -156,9 +156,17 @@ const FOURNI_PAR_L_HOTE = [
156
156
  /**
157
157
  * La configuration d'une SPA. `prefixe` : celui de ses selecteurs (`ct`, jamais `st`) ; `racine` :
158
158
  * `import.meta.dirname` de son `eslint.config.mjs` (le projet TypeScript) ; `role` : `remote` (par
159
- * defaut) ou `hote` ; `ignores` : des chemins de plus a ne pas lire.
159
+ * defaut) ou `hote` ; `ignores` : des chemins de plus a ne pas lire ; `nomDesElements` : le nom
160
+ * ENREGISTRE sous lequel la SPA definit ses custom elements (`<nom>-*`, lot 299, registre des custom
161
+ * elements du socle frontal), absent tant qu'elle n'en definit aucun.
160
162
  */
161
- export function configurationDuSocle({ prefixe, racine, role = 'remote', ignores = [] } = {}) {
163
+ export function configurationDuSocle({
164
+ prefixe,
165
+ racine,
166
+ role = 'remote',
167
+ ignores = [],
168
+ nomDesElements,
169
+ } = {}) {
162
170
  if (typeof prefixe !== 'string' || !PREFIXE.test(prefixe) || prefixe === 'st') {
163
171
  throw new Error(
164
172
  `@starterlib/eslint-config : prefixe "${String(prefixe)}", deux a huit minuscules attendues (jamais st).`,
@@ -172,6 +180,19 @@ export function configurationDuSocle({ prefixe, racine, role = 'remote', ignores
172
180
  if (role !== 'remote' && role !== 'hote') {
173
181
  throw new Error(`@starterlib/eslint-config : role "${String(role)}", remote ou hote attendu.`);
174
182
  }
183
+ // Le nom des custom elements n'est jamais un prefixe de selecteurs (Angular instancierait le composant
184
+ // une seconde fois), ni celui du socle, de la coquille ou du temoin.
185
+ if (
186
+ nomDesElements !== undefined &&
187
+ (typeof nomDesElements !== 'string' ||
188
+ !/^[a-z][a-z0-9-]{1,23}$/.test(nomDesElements) ||
189
+ nomDesElements === prefixe ||
190
+ ['st', 'sc', 'tm', 'starter'].includes(nomDesElements))
191
+ ) {
192
+ throw new Error(
193
+ `@starterlib/eslint-config : nomDesElements "${String(nomDesElements)}", le nom enregistre de l'application attendu (jamais son prefixe de selecteurs).`,
194
+ );
195
+ }
175
196
 
176
197
  return tseslint.config(
177
198
  {
@@ -237,6 +258,10 @@ export function configurationDuSocle({ prefixe, racine, role = 'remote', ignores
237
258
  'socle/route-has-title': 'error',
238
259
  'socle/no-toast-danger': 'error',
239
260
  'socle/no-free-text-query-param': 'error',
261
+ 'socle/custom-element-name': [
262
+ 'error',
263
+ { noms: nomDesElements === undefined ? [] : [nomDesElements] },
264
+ ],
240
265
  },
241
266
  },
242
267
  {
@@ -267,6 +292,8 @@ export function configurationDuSocle({ prefixe, racine, role = 'remote', ignores
267
292
  'socle/no-raw-interactive': 'error',
268
293
  'socle/no-literal-text': 'error',
269
294
  'socle/no-angular-locale-pipes': 'error',
295
+ // Lot 281 : l'affichage se decide par une permission (*stPermission), jamais par un role.
296
+ 'socle/no-role-comparison': 'error',
270
297
  },
271
298
  },
272
299
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@starterlib/eslint-config",
3
- "version": "0.10.12",
3
+ "version": "0.10.14",
4
4
  "description": "Configuration ESLint d'une SPA du socle frontal starter, parametree par son prefixe, et configuration stylelint de ses feuilles. Remplace les eslint.config.mjs recopies.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",