eslint-plugin-use-agnostic 1.6.8 → 1.6.10
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 +1 -1
- package/library/_commons/constants/bases.js +8 -4
- package/library/_commons/utilities/helpers.js +21 -21
- package/library/_commons/utilities/walk-ast.js +46 -0
- package/library/agnostic20/_commons/constants/bases.js +57 -57
- package/library/agnostic20/_commons/utilities/flows.js +17 -17
- package/library/agnostic20/_commons/utilities/helpers.js +43 -43
- package/library/agnostic20/config.js +3 -3
- package/library/directive21/_commons/constants/bases.js +134 -85
- package/library/directive21/_commons/rules/import-rules.js +16 -8
- package/library/directive21/_commons/utilities/analyze-exports-re.js +100 -0
- package/library/directive21/_commons/utilities/flows.js +201 -28
- package/library/directive21/_commons/utilities/helpers.js +88 -88
- package/library/directive21/config.js +3 -3
- package/package.json +2 -2
- package/types/index.d.ts +100 -100
|
@@ -11,6 +11,11 @@ import {
|
|
|
11
11
|
USE_AGNOSTIC_CONDITIONS as COMMONS_USE_AGNOSTIC_CONDITIONS,
|
|
12
12
|
USE_AGNOSTIC_STRATEGIES as COMMONS_USE_AGNOSTIC_STRATEGIES,
|
|
13
13
|
} from "../../../_commons/constants/bases.js";
|
|
14
|
+
import {
|
|
15
|
+
USE_SERVER,
|
|
16
|
+
USE_CLIENT,
|
|
17
|
+
USE_AGNOSTIC,
|
|
18
|
+
} from "../../../agnostic20/_commons/constants/bases.js";
|
|
14
19
|
|
|
15
20
|
import { makeIntroForSpecificViolationMessage } from "../../../_commons/utilities/helpers.js";
|
|
16
21
|
|
|
@@ -129,6 +134,10 @@ export const importedFileCommentedDirective = "importedFileCommentedDirective";
|
|
|
129
134
|
export const commentedDirectiveMessage = "commentedDirectiveMessage";
|
|
130
135
|
export const specificViolationMessage = "specificViolationMessage";
|
|
131
136
|
export const specificFailure = "specificFailure";
|
|
137
|
+
export const verifiedCommentedDirective = "verifiedCommentedDirective";
|
|
138
|
+
export const expectedReactDirectiveAsText = "expectedReactDirectiveAsText";
|
|
139
|
+
export const currentFileEnvironment = "currentFileEnvironment";
|
|
140
|
+
export const importedFileEnvironment = "importedFileEnvironment";
|
|
132
141
|
|
|
133
142
|
/* commentedDirectives_verificationReports */
|
|
134
143
|
|
|
@@ -155,12 +164,12 @@ export const commentedDirectives_verificationReports = Object.freeze({
|
|
|
155
164
|
/* commentedDirectives_blockedImports */
|
|
156
165
|
|
|
157
166
|
/**
|
|
158
|
-
*
|
|
167
|
+
* $COMMENT#JSDOC#DEFINITIONS#AGNOSTIC20#MAKEBLOCKEDIMPORT
|
|
159
168
|
* @template {CommentedDirectiveWithoutUseAgnosticStrategies} T
|
|
160
169
|
* @template {CommentedDirectiveWithoutUseAgnosticStrategies} U
|
|
161
|
-
* @param {T} currentFileCommentedDirective
|
|
162
|
-
* @param {U} importedFileCommentedDirective
|
|
163
|
-
* @returns
|
|
170
|
+
* @param {T} currentFileCommentedDirective $COMMENT#JSDOC#PARAMS#DIRECTIVE21#CURRENTFILECOMMENTEDDIRECTIVE
|
|
171
|
+
* @param {U} importedFileCommentedDirective $COMMENT#JSDOC#PARAMS#DIRECTIVE21#IMPORTEDFILECOMMENTEDDIRECTIVE
|
|
172
|
+
* @returns $COMMENT#JSDOC#RETURNS#AGNOSTIC20#MAKEBLOCKEDIMPORT
|
|
164
173
|
*/
|
|
165
174
|
export const makeBlockedImport = (
|
|
166
175
|
currentFileCommentedDirective,
|
|
@@ -181,189 +190,229 @@ export const makeBlockedImport = (
|
|
|
181
190
|
|
|
182
191
|
export const commentedDirectives_blockedImports = Object.freeze({
|
|
183
192
|
[USE_SERVER_LOGICS]: Object.freeze([
|
|
184
|
-
// USE_SERVER_LOGICS
|
|
193
|
+
// USE_SERVER_LOGICS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_SERVER_LOGICS#USE_SERVER_LOGICS
|
|
185
194
|
makeBlockedImport(
|
|
186
195
|
USE_SERVER_LOGICS,
|
|
187
196
|
USE_CLIENT_LOGICS
|
|
188
|
-
) /*
|
|
189
|
-
// USE_AGNOSTIC_LOGICS
|
|
190
|
-
// USE_SERVER_COMPONENTS
|
|
197
|
+
) /* $COMMENT#DIRECTIVE21#FORALIASVARIABLES#CLIENTNEVERSERVER */,
|
|
198
|
+
// USE_AGNOSTIC_LOGICS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#FORALIASVARIABLES#AGNOSTICCANSERVERCLIENT
|
|
199
|
+
// USE_SERVER_COMPONENTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_SERVER_LOGICS#USE_SERVER_COMPONENTS
|
|
191
200
|
makeBlockedImport(
|
|
192
201
|
USE_SERVER_LOGICS,
|
|
193
202
|
USE_CLIENT_COMPONENTS
|
|
194
|
-
) /*
|
|
195
|
-
// USE_AGNOSTIC_COMPONENTS
|
|
196
|
-
// USE_SERVER_FUNCTIONS
|
|
203
|
+
) /* $COMMENT#DIRECTIVE21#USE_SERVER_LOGICS#USE_CLIENT_COMPONENTS */,
|
|
204
|
+
// USE_AGNOSTIC_COMPONENTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#FORALIASVARIABLES#AGNOSTICCOMPONENTSCANANY
|
|
205
|
+
// USE_SERVER_FUNCTIONS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_SERVER_LOGICS#USE_SERVER_FUNCTIONS
|
|
197
206
|
makeBlockedImport(
|
|
198
207
|
USE_SERVER_LOGICS,
|
|
199
208
|
USE_CLIENT_CONTEXTS
|
|
200
|
-
) /*
|
|
201
|
-
// USE_AGNOSTIC_CONDITIONS
|
|
209
|
+
) /* $COMMENT#DIRECTIVE21#USE_SERVER_LOGICS#USE_CLIENT_CONTEXTS */,
|
|
210
|
+
// USE_AGNOSTIC_CONDITIONS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_SERVER_LOGICS#USE_AGNOSTIC_CONDITIONS
|
|
202
211
|
]),
|
|
203
212
|
[USE_CLIENT_LOGICS]: Object.freeze([
|
|
204
213
|
makeBlockedImport(
|
|
205
214
|
USE_CLIENT_LOGICS,
|
|
206
215
|
USE_SERVER_LOGICS
|
|
207
|
-
) /*
|
|
208
|
-
// USE_CLIENT_LOGICS
|
|
209
|
-
// USE_AGNOSTIC_LOGICS
|
|
216
|
+
) /* $COMMENT#DIRECTIVE21#FORALIASVARIABLES#SERVERNEVERCLIENT */,
|
|
217
|
+
// USE_CLIENT_LOGICS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_CLIENT_LOGICS#USE_CLIENT_LOGICS
|
|
218
|
+
// USE_AGNOSTIC_LOGICS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#FORALIASVARIABLES#AGNOSTICCANCLIENTSERVER
|
|
210
219
|
makeBlockedImport(
|
|
211
220
|
USE_CLIENT_LOGICS,
|
|
212
221
|
USE_SERVER_COMPONENTS
|
|
213
|
-
) /*
|
|
214
|
-
// USE_CLIENT_COMPONENTS
|
|
215
|
-
// USE_AGNOSTIC_COMPONENTS
|
|
216
|
-
// USE_SERVER_FUNCTIONS
|
|
217
|
-
// USE_CLIENT_CONTEXTS
|
|
218
|
-
// USE_AGNOSTIC_CONDITIONS
|
|
222
|
+
) /* $COMMENT#DIRECTIVE21#USE_CLIENT_LOGICS#USE_SERVER_COMPONENTS */,
|
|
223
|
+
// USE_CLIENT_COMPONENTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_CLIENT_LOGICS#USE_CLIENT_COMPONENTS
|
|
224
|
+
// USE_AGNOSTIC_COMPONENTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#FORALIASVARIABLES#AGNOSTICCOMPONENTSCANANY
|
|
225
|
+
// USE_SERVER_FUNCTIONS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_CLIENT_LOGICS#USE_SERVER_FUNCTIONS
|
|
226
|
+
// USE_CLIENT_CONTEXTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_CLIENT_LOGICS#USE_CLIENT_CONTEXTS
|
|
227
|
+
// USE_AGNOSTIC_CONDITIONS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_CLIENT_LOGICS#USE_AGNOSTIC_CONDITIONS
|
|
219
228
|
]),
|
|
220
229
|
[USE_AGNOSTIC_LOGICS]: Object.freeze([
|
|
221
230
|
makeBlockedImport(
|
|
222
231
|
USE_AGNOSTIC_LOGICS,
|
|
223
232
|
USE_SERVER_LOGICS
|
|
224
|
-
) /*
|
|
233
|
+
) /* $COMMENT#DIRECTIVE21#FORALIASVARIABLES#SERVERLOGICSCANTBOTH */,
|
|
225
234
|
makeBlockedImport(
|
|
226
235
|
USE_AGNOSTIC_LOGICS,
|
|
227
236
|
USE_CLIENT_LOGICS
|
|
228
|
-
) /*
|
|
229
|
-
// USE_AGNOSTIC_LOGICS
|
|
237
|
+
) /* $COMMENT#DIRECTIVE21#FORALIASVARIABLES#CLIENTLOGICSCANTBOTH */,
|
|
238
|
+
// USE_AGNOSTIC_LOGICS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_AGNOSTIC_LOGICS#USE_AGNOSTIC_LOGICS
|
|
230
239
|
makeBlockedImport(
|
|
231
240
|
USE_AGNOSTIC_LOGICS,
|
|
232
241
|
USE_SERVER_COMPONENTS
|
|
233
|
-
) /*
|
|
242
|
+
) /* $COMMENT#DIRECTIVE21#USE_AGNOSTIC_LOGICS#USE_SERVER_COMPONENTS */,
|
|
234
243
|
makeBlockedImport(
|
|
235
244
|
USE_AGNOSTIC_LOGICS,
|
|
236
245
|
USE_CLIENT_COMPONENTS
|
|
237
|
-
) /*
|
|
238
|
-
// USE_AGNOSTIC_COMPONENTS
|
|
246
|
+
) /* $COMMENT#DIRECTIVE21#USE_AGNOSTIC_LOGICS#USE_CLIENT_COMPONENTS */,
|
|
247
|
+
// USE_AGNOSTIC_COMPONENTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#FORALIASVARIABLES#AGNOSTICCOMPONENTSCANANY
|
|
239
248
|
makeBlockedImport(
|
|
240
249
|
USE_AGNOSTIC_LOGICS,
|
|
241
250
|
USE_SERVER_FUNCTIONS
|
|
242
|
-
) /*
|
|
251
|
+
) /* $COMMENT#DIRECTIVE21#USE_AGNOSTIC_LOGICS#USE_SERVER_FUNCTIONS */,
|
|
243
252
|
makeBlockedImport(
|
|
244
253
|
USE_AGNOSTIC_LOGICS,
|
|
245
254
|
USE_CLIENT_CONTEXTS
|
|
246
|
-
) /*
|
|
247
|
-
// USE_AGNOSTIC_CONDITIONS
|
|
255
|
+
) /* $COMMENT#DIRECTIVE21#USE_AGNOSTIC_LOGICS#USE_CLIENT_CONTEXTS */,
|
|
256
|
+
// USE_AGNOSTIC_CONDITIONS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_AGNOSTIC_LOGICS#USE_AGNOSTIC_CONDITIONS
|
|
248
257
|
]),
|
|
249
258
|
[USE_SERVER_COMPONENTS]: Object.freeze([
|
|
250
|
-
// USE_SERVER_LOGICS
|
|
259
|
+
// USE_SERVER_LOGICS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_SERVER_COMPONENTS#USE_SERVER_LOGICS
|
|
251
260
|
makeBlockedImport(
|
|
252
261
|
USE_SERVER_COMPONENTS,
|
|
253
262
|
USE_CLIENT_LOGICS
|
|
254
|
-
) /*
|
|
255
|
-
// USE_AGNOSTIC_LOGICS
|
|
256
|
-
// USE_SERVER_COMPONENTS
|
|
257
|
-
// USE_CLIENT_COMPONENTS
|
|
258
|
-
// USE_AGNOSTIC_COMPONENTS
|
|
259
|
-
// USE_SERVER_FUNCTIONS
|
|
260
|
-
// USE_CLIENT_CONTEXTS
|
|
261
|
-
// USE_AGNOSTIC_CONDITIONS
|
|
263
|
+
) /* $COMMENT#DIRECTIVE21#FORALIASVARIABLES#CLIENTNEVERSERVER */,
|
|
264
|
+
// USE_AGNOSTIC_LOGICS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#FORALIASVARIABLES#AGNOSTICCANSERVERCLIENT
|
|
265
|
+
// USE_SERVER_COMPONENTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_SERVER_COMPONENTS#USE_SERVER_COMPONENTS
|
|
266
|
+
// USE_CLIENT_COMPONENTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_SERVER_COMPONENTS#USE_CLIENT_COMPONENTS
|
|
267
|
+
// USE_AGNOSTIC_COMPONENTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_SERVER_COMPONENTS#USE_AGNOSTIC_COMPONENTS
|
|
268
|
+
// USE_SERVER_FUNCTIONS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_SERVER_COMPONENTS#USE_SERVER_FUNCTIONS
|
|
269
|
+
// USE_CLIENT_CONTEXTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_SERVER_COMPONENTS#USE_CLIENT_CONTEXTS
|
|
270
|
+
// USE_AGNOSTIC_CONDITIONS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_SERVER_COMPONENTS#USE_AGNOSTIC_CONDITIONS
|
|
262
271
|
]),
|
|
263
272
|
[USE_CLIENT_COMPONENTS]: Object.freeze([
|
|
264
273
|
makeBlockedImport(
|
|
265
274
|
USE_CLIENT_COMPONENTS,
|
|
266
275
|
USE_SERVER_LOGICS
|
|
267
|
-
) /*
|
|
268
|
-
// USE_CLIENT_LOGICS
|
|
269
|
-
// USE_AGNOSTIC_LOGICS
|
|
276
|
+
) /* $COMMENT#DIRECTIVE21#FORALIASVARIABLES#SERVERNEVERCLIENT */,
|
|
277
|
+
// USE_CLIENT_LOGICS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_CLIENT_COMPONENTS#USE_CLIENT_LOGICS
|
|
278
|
+
// USE_AGNOSTIC_LOGICS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#FORALIASVARIABLES#AGNOSTICCANCLIENTSERVER
|
|
270
279
|
makeBlockedImport(
|
|
271
280
|
USE_CLIENT_COMPONENTS,
|
|
272
281
|
USE_SERVER_COMPONENTS
|
|
273
|
-
) /*
|
|
274
|
-
// USE_CLIENT_COMPONENTS
|
|
275
|
-
// USE_AGNOSTIC_COMPONENTS
|
|
276
|
-
// USE_SERVER_FUNCTIONS
|
|
277
|
-
// USE_CLIENT_CONTEXTS
|
|
278
|
-
// USE_AGNOSTIC_CONDITIONS
|
|
282
|
+
) /* $COMMENT#DIRECTIVE21#USE_CLIENT_COMPONENTS#USE_SERVER_COMPONENTS */,
|
|
283
|
+
// USE_CLIENT_COMPONENTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_CLIENT_COMPONENTS#USE_CLIENT_COMPONENTS
|
|
284
|
+
// USE_AGNOSTIC_COMPONENTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#FORALIASVARIABLES#AGNOSTICCOMPONENTSRENDERANY
|
|
285
|
+
// USE_SERVER_FUNCTIONS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#FORALIASVARIABLES#SERVERFUNCTIONSCLIENT
|
|
286
|
+
// USE_CLIENT_CONTEXTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_CLIENT_COMPONENTS#USE_CLIENT_CONTEXTS
|
|
287
|
+
// USE_AGNOSTIC_CONDITIONS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_CLIENT_COMPONENTS#USE_AGNOSTIC_CONDITIONS
|
|
279
288
|
]),
|
|
280
289
|
[USE_AGNOSTIC_COMPONENTS]: Object.freeze([
|
|
281
290
|
makeBlockedImport(
|
|
282
291
|
USE_AGNOSTIC_COMPONENTS,
|
|
283
292
|
USE_SERVER_LOGICS
|
|
284
|
-
) /*
|
|
293
|
+
) /* $COMMENT#DIRECTIVE21#FORALIASVARIABLES#SERVERLOGICSCANTBOTH */,
|
|
285
294
|
makeBlockedImport(
|
|
286
295
|
USE_AGNOSTIC_COMPONENTS,
|
|
287
296
|
USE_CLIENT_LOGICS
|
|
288
|
-
) /*
|
|
289
|
-
// USE_AGNOSTIC_LOGICS
|
|
297
|
+
) /* $COMMENT#DIRECTIVE21#FORALIASVARIABLES#CLIENTLOGICSCANTBOTH */,
|
|
298
|
+
// USE_AGNOSTIC_LOGICS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_AGNOSTIC_COMPONENTS#USE_AGNOSTIC_LOGICS
|
|
290
299
|
makeBlockedImport(
|
|
291
300
|
USE_AGNOSTIC_COMPONENTS,
|
|
292
301
|
USE_SERVER_COMPONENTS
|
|
293
|
-
) /*
|
|
294
|
-
// USE_CLIENT_COMPONENTS
|
|
295
|
-
// USE_AGNOSTIC_COMPONENTS
|
|
296
|
-
// USE_SERVER_FUNCTIONS
|
|
297
|
-
// USE_CLIENT_CONTEXTS
|
|
298
|
-
// USE_AGNOSTIC_CONDITIONS
|
|
302
|
+
) /* $COMMENT#DIRECTIVE21#USE_AGNOSTIC_COMPONENTS#USE_SERVER_COMPONENTS */,
|
|
303
|
+
// USE_CLIENT_COMPONENTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_AGNOSTIC_COMPONENTS#USE_CLIENT_COMPONENTS
|
|
304
|
+
// USE_AGNOSTIC_COMPONENTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_AGNOSTIC_COMPONENTS#USE_AGNOSTIC_COMPONENTS
|
|
305
|
+
// USE_SERVER_FUNCTIONS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_AGNOSTIC_COMPONENTS#USE_SERVER_FUNCTIONS
|
|
306
|
+
// USE_CLIENT_CONTEXTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_AGNOSTIC_COMPONENTS#USE_CLIENT_CONTEXTS
|
|
307
|
+
// USE_AGNOSTIC_CONDITIONS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_AGNOSTIC_COMPONENTS#USE_AGNOSTIC_CONDITIONS
|
|
299
308
|
]),
|
|
300
309
|
[USE_SERVER_FUNCTIONS]: Object.freeze([
|
|
301
|
-
// USE_SERVER_LOGICS
|
|
310
|
+
// USE_SERVER_LOGICS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_SERVER_FUNCTIONS#USE_SERVER_LOGICS
|
|
302
311
|
makeBlockedImport(
|
|
303
312
|
USE_SERVER_FUNCTIONS,
|
|
304
313
|
USE_CLIENT_LOGICS
|
|
305
|
-
) /*
|
|
306
|
-
// USE_AGNOSTIC_LOGICS
|
|
314
|
+
) /* $COMMENT#DIRECTIVE21#FORALIASVARIABLES#CLIENTNEVERSERVER */,
|
|
315
|
+
// USE_AGNOSTIC_LOGICS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#FORALIASVARIABLES#AGNOSTICCANSERVERCLIENT
|
|
307
316
|
makeBlockedImport(
|
|
308
317
|
USE_SERVER_FUNCTIONS,
|
|
309
318
|
USE_SERVER_COMPONENTS
|
|
310
|
-
) /*
|
|
319
|
+
) /* $COMMENT#DIRECTIVE21#USE_SERVER_FUNCTIONS#USE_SERVER_COMPONENTS */,
|
|
311
320
|
makeBlockedImport(
|
|
312
321
|
USE_SERVER_FUNCTIONS,
|
|
313
322
|
USE_CLIENT_COMPONENTS
|
|
314
|
-
) /*
|
|
323
|
+
) /* $COMMENT#DIRECTIVE21#USE_SERVER_FUNCTIONS#USE_CLIENT_COMPONENTS */,
|
|
315
324
|
makeBlockedImport(
|
|
316
325
|
USE_SERVER_FUNCTIONS,
|
|
317
326
|
USE_AGNOSTIC_COMPONENTS
|
|
318
|
-
) /*
|
|
319
|
-
// USE_SERVER_FUNCTIONS
|
|
327
|
+
) /* $COMMENT#DIRECTIVE21#USE_SERVER_FUNCTIONS#USE_AGNOSTIC_COMPONENTS */,
|
|
328
|
+
// USE_SERVER_FUNCTIONS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_SERVER_FUNCTIONS#USE_SERVER_FUNCTIONS
|
|
320
329
|
makeBlockedImport(
|
|
321
330
|
USE_SERVER_FUNCTIONS,
|
|
322
331
|
USE_CLIENT_CONTEXTS
|
|
323
|
-
) /*
|
|
332
|
+
) /* $COMMENT#DIRECTIVE21#USE_SERVER_FUNCTIONS#USE_CLIENT_CONTEXTS */,
|
|
324
333
|
makeBlockedImport(
|
|
325
334
|
USE_SERVER_FUNCTIONS,
|
|
326
335
|
USE_AGNOSTIC_CONDITIONS
|
|
327
|
-
) /*
|
|
336
|
+
) /* $COMMENT#DIRECTIVE21#USE_SERVER_FUNCTIONS#USE_AGNOSTIC_CONDITIONS */,
|
|
328
337
|
]),
|
|
329
338
|
[USE_CLIENT_CONTEXTS]: Object.freeze([
|
|
330
339
|
makeBlockedImport(
|
|
331
340
|
USE_CLIENT_CONTEXTS,
|
|
332
341
|
USE_SERVER_LOGICS
|
|
333
|
-
) /*
|
|
334
|
-
// USE_CLIENT_LOGICS
|
|
335
|
-
// USE_AGNOSTIC_LOGICS
|
|
342
|
+
) /* $COMMENT#DIRECTIVE21#FORALIASVARIABLES#SERVERNEVERCLIENT */,
|
|
343
|
+
// USE_CLIENT_LOGICS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_CLIENT_CONTEXTS#USE_CLIENT_LOGICS
|
|
344
|
+
// USE_AGNOSTIC_LOGICS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#FORALIASVARIABLES#AGNOSTICCANCLIENTSERVER
|
|
336
345
|
makeBlockedImport(
|
|
337
346
|
USE_CLIENT_CONTEXTS,
|
|
338
347
|
USE_SERVER_COMPONENTS
|
|
339
|
-
) /*
|
|
340
|
-
// USE_CLIENT_COMPONENTS
|
|
341
|
-
// USE_AGNOSTIC_COMPONENTS
|
|
342
|
-
// USE_SERVER_FUNCTIONS
|
|
343
|
-
// USE_CLIENT_CONTEXTS
|
|
344
|
-
// USE_AGNOSTIC_CONDITIONS
|
|
348
|
+
) /* $COMMENT#DIRECTIVE21#USE_CLIENT_CONTEXTS#USE_SERVER_COMPONENTS */,
|
|
349
|
+
// USE_CLIENT_COMPONENTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_CLIENT_CONTEXTS#USE_CLIENT_COMPONENTS
|
|
350
|
+
// USE_AGNOSTIC_COMPONENTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#FORALIASVARIABLES#AGNOSTICCOMPONENTSRENDERANY
|
|
351
|
+
// USE_SERVER_FUNCTIONS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#FORALIASVARIABLES#SERVERFUNCTIONSCLIENT
|
|
352
|
+
// USE_CLIENT_CONTEXTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_CLIENT_CONTEXTS#USE_CLIENT_CONTEXTS
|
|
353
|
+
// USE_AGNOSTIC_CONDITIONS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_CLIENT_CONTEXTS#USE_AGNOSTIC_CONDITIONS
|
|
345
354
|
]),
|
|
346
355
|
[USE_AGNOSTIC_CONDITIONS]: Object.freeze([
|
|
347
356
|
makeBlockedImport(
|
|
348
357
|
USE_AGNOSTIC_CONDITIONS,
|
|
349
358
|
USE_SERVER_LOGICS
|
|
350
|
-
) /*
|
|
359
|
+
) /* $COMMENT#DIRECTIVE21#FORALIASVARIABLES#SERVERLOGICSCANTBOTH */,
|
|
351
360
|
makeBlockedImport(
|
|
352
361
|
USE_AGNOSTIC_CONDITIONS,
|
|
353
362
|
USE_CLIENT_LOGICS
|
|
354
|
-
) /*
|
|
355
|
-
// USE_AGNOSTIC_LOGICS
|
|
356
|
-
// USE_SERVER_COMPONENTS
|
|
357
|
-
// USE_CLIENT_COMPONENTS
|
|
358
|
-
// USE_AGNOSTIC_COMPONENTS
|
|
363
|
+
) /* $COMMENT#DIRECTIVE21#FORALIASVARIABLES#CLIENTLOGICSCANTBOTH */,
|
|
364
|
+
// USE_AGNOSTIC_LOGICS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_AGNOSTIC_CONDITIONS#USE_AGNOSTIC_LOGICS
|
|
365
|
+
// USE_SERVER_COMPONENTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_AGNOSTIC_CONDITIONS#USE_SERVER_COMPONENTS
|
|
366
|
+
// USE_CLIENT_COMPONENTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_AGNOSTIC_CONDITIONS#USE_CLIENT_COMPONENTS
|
|
367
|
+
// USE_AGNOSTIC_COMPONENTS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_AGNOSTIC_CONDITIONS#USE_AGNOSTIC_COMPONENTS
|
|
359
368
|
makeBlockedImport(
|
|
360
369
|
USE_AGNOSTIC_CONDITIONS,
|
|
361
370
|
USE_SERVER_FUNCTIONS
|
|
362
|
-
) /*
|
|
371
|
+
) /* $COMMENT#DIRECTIVE21#USE_AGNOSTIC_CONDITIONS#USE_SERVER_FUNCTIONS */,
|
|
363
372
|
makeBlockedImport(
|
|
364
373
|
USE_AGNOSTIC_CONDITIONS,
|
|
365
374
|
USE_CLIENT_CONTEXTS
|
|
366
|
-
) /*
|
|
367
|
-
// USE_AGNOSTIC_CONDITIONS
|
|
375
|
+
) /* $COMMENT#DIRECTIVE21#USE_AGNOSTIC_CONDITIONS#USE_CLIENT_CONTEXTS */,
|
|
376
|
+
// USE_AGNOSTIC_CONDITIONS $COMMENT#AGNOSTIC20#FORCOMPOSEDVARIABLES#ALLOWEDBECAUSE $COMMENT#DIRECTIVE21#USE_AGNOSTIC_CONDITIONS#USE_AGNOSTIC_CONDITIONS
|
|
368
377
|
]),
|
|
369
378
|
});
|
|
379
|
+
|
|
380
|
+
/* environments_allowedChainedImportEnvironments */
|
|
381
|
+
|
|
382
|
+
export const SERVER = "server";
|
|
383
|
+
export const CLIENT = "client";
|
|
384
|
+
export const AGNOSTIC = "agnostic";
|
|
385
|
+
|
|
386
|
+
/** @type {readonly [typeof SERVER, typeof AGNOSTIC]} */
|
|
387
|
+
const server_allowedChainImportEnvironments = Object.freeze([SERVER, AGNOSTIC]);
|
|
388
|
+
/** @type {readonly [typeof CLIENT, typeof AGNOSTIC]} */
|
|
389
|
+
const client_allowedChainImportEnvironments = Object.freeze([CLIENT, AGNOSTIC]);
|
|
390
|
+
/** @type {readonly [typeof AGNOSTIC]} */
|
|
391
|
+
const agnostic_allowedChainImportEnvironments = Object.freeze([AGNOSTIC]);
|
|
392
|
+
|
|
393
|
+
export const environments_allowedChainImportEnvironments = Object.freeze({
|
|
394
|
+
[SERVER]: server_allowedChainImportEnvironments,
|
|
395
|
+
[CLIENT]: client_allowedChainImportEnvironments,
|
|
396
|
+
[AGNOSTIC]: agnostic_allowedChainImportEnvironments,
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
export const commentedDirectives_reactDirectives = Object.freeze({
|
|
400
|
+
[USE_SERVER_LOGICS]: null,
|
|
401
|
+
[USE_CLIENT_LOGICS]: "use client",
|
|
402
|
+
[USE_AGNOSTIC_LOGICS]: "use agnostic",
|
|
403
|
+
[USE_SERVER_COMPONENTS]: null,
|
|
404
|
+
[USE_CLIENT_COMPONENTS]: "use client",
|
|
405
|
+
[USE_AGNOSTIC_COMPONENTS]: "use agnostic",
|
|
406
|
+
[USE_SERVER_FUNCTIONS]: "use server",
|
|
407
|
+
[USE_CLIENT_CONTEXTS]: "use client",
|
|
408
|
+
[USE_AGNOSTIC_CONDITIONS]: null,
|
|
409
|
+
[USE_AGNOSTIC_STRATEGIES]: null,
|
|
410
|
+
});
|
|
411
|
+
|
|
412
|
+
/** @type {Map<typeof USE_SERVER | typeof USE_CLIENT | typeof USE_AGNOSTIC | null, `the React "${typeof USE_SERVER}"` | `the React "${typeof USE_CLIENT}"` | `the React "${typeof USE_AGNOSTIC}"` | "no React" `>} */
|
|
413
|
+
export const reactDirectives_asTexts = new Map([
|
|
414
|
+
[USE_SERVER, `the React "${USE_SERVER}"`],
|
|
415
|
+
[USE_CLIENT, `the React "${USE_CLIENT}"`],
|
|
416
|
+
[USE_AGNOSTIC, `the React "${USE_AGNOSTIC}"`],
|
|
417
|
+
[null, "no React"],
|
|
418
|
+
]);
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
reExportNotSameMessageId,
|
|
3
3
|
importBreaksCommentedImportRulesMessageId,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
noCommentedDirectiveMessageId,
|
|
5
|
+
commentedDirectiveVerificationFailedMessageId,
|
|
6
|
+
commentedDirectiveReactDirectiveFailedMessageId,
|
|
7
|
+
importNotStrategizedMessageId,
|
|
8
|
+
exportNotStrategizedMessageId,
|
|
9
|
+
cantChainImportAcrossEnvironmentsMessageId,
|
|
8
10
|
} from "../../../_commons/constants/bases.js";
|
|
9
11
|
import {
|
|
10
12
|
currentFileCommentedDirective,
|
|
@@ -12,6 +14,10 @@ import {
|
|
|
12
14
|
commentedDirectiveMessage,
|
|
13
15
|
specificViolationMessage,
|
|
14
16
|
specificFailure,
|
|
17
|
+
verifiedCommentedDirective,
|
|
18
|
+
expectedReactDirectiveAsText,
|
|
19
|
+
currentFileEnvironment,
|
|
20
|
+
importedFileEnvironment,
|
|
15
21
|
} from "../constants/bases.js";
|
|
16
22
|
|
|
17
23
|
import {
|
|
@@ -38,14 +44,16 @@ const rule = {
|
|
|
38
44
|
Here, "{{ ${currentFileCommentedDirective} }}" and "{{ ${importedFileCommentedDirective} }}" are not the same. Please re-export only from modules that have the same commented directive as the current module. `,
|
|
39
45
|
[importBreaksCommentedImportRulesMessageId]: `{{ ${commentedDirectiveMessage} }}
|
|
40
46
|
In this case, {{ ${specificViolationMessage} }} `,
|
|
41
|
-
[
|
|
47
|
+
[noCommentedDirectiveMessageId]: `No commented directive detected.
|
|
42
48
|
All targeted modules need to be marked with their respective directives (\`// "use server logics"\`, etc.) for the purpose of this linting rule, evaluated from the first JavaScript comment starting on the first column within the first three lines of a module. `,
|
|
43
|
-
[
|
|
49
|
+
[commentedDirectiveVerificationFailedMessageId]: `The commented directive could not pass verification due to an incompatible combination with its file extension.
|
|
44
50
|
In this context, {{ ${specificFailure} }} `,
|
|
45
|
-
[
|
|
51
|
+
[commentedDirectiveReactDirectiveFailedMessageId]: `Commented directive "{{ ${verifiedCommentedDirective} }}" requires {{ ${expectedReactDirectiveAsText} }} directive in order to communicate accordingly with the React architecture at hand. `,
|
|
52
|
+
[importNotStrategizedMessageId]: `Imports from Agnostic Strategies Modules must be strategized (\`/* @serverLogics */\`, etc.).
|
|
46
53
|
Please include a Strategy that corresponds to the kind of module this import would be mapped to. `,
|
|
47
|
-
[
|
|
54
|
+
[exportNotStrategizedMessageId]: `Exports from Agnostic Strategies Modules must be strategized (\`/* @serverLogics */\`, etc.).
|
|
48
55
|
Please include a Strategy that corresponds to the kind of module this export would be mapped to. `,
|
|
56
|
+
[cantChainImportAcrossEnvironmentsMessageId]: `Because imports are actually references instead of modules across environments, it is not possible to chain-import between the {{ ${currentFileEnvironment} }} environment and the {{ ${importedFileEnvironment} }} environment. In these cases, only direct imports apply. `,
|
|
49
57
|
},
|
|
50
58
|
},
|
|
51
59
|
create: (context) => {
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {import("../../../../types/_commons/typedefs.js").SourceCode} SourceCode
|
|
3
|
+
* @typedef {import("../../../../types/_commons/typedefs.js").ImportDeclaration} ImportDeclaration
|
|
4
|
+
* @typedef {import("../../../../types/_commons/typedefs.js").ExportAllDeclaration} ExportAllDeclaration
|
|
5
|
+
* @typedef {import("../../../../types/_commons/typedefs.js").ExportNamedDeclarationWithSource} ExportNamedDeclarationWithSource
|
|
6
|
+
* @typedef {import("../../../../types/_commons/typedefs.js").ExportNamedDeclarationWithoutSourceWithMultiple} ExportNamedDeclarationWithoutSourceWithMultiple
|
|
7
|
+
* @typedef {import("../../../../types/_commons/typedefs.js").ExportNamedDeclarationWithoutSourceWithSingle} ExportNamedDeclarationWithoutSourceWithSingle
|
|
8
|
+
* @typedef {import("../../../../types/_commons/typedefs.js").ExportDefaultDeclaration} ExportDefaultDeclaration
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { walkAST } from "../../../_commons/utilities/walk-ast.js";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Analyzes a source code exports to detect re-exports.
|
|
15
|
+
* @param {SourceCode} sourceCode
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
export const analyzeExportsForReExports = (sourceCode) => {
|
|
19
|
+
/** @type {Map<string, {source: string, importNode: ImportDeclaration}>} */
|
|
20
|
+
const importMap = new Map();
|
|
21
|
+
|
|
22
|
+
/** @type {{node: ExportAllDeclaration | ExportNamedDeclarationWithSource, source: string}[]} */
|
|
23
|
+
const reExportsWithSource = [];
|
|
24
|
+
|
|
25
|
+
/** @type {{identifier: string, node: ExportNamedDeclarationWithoutSourceWithMultiple | ExportNamedDeclarationWithoutSourceWithSingle | ExportDefaultDeclaration, importNode: ImportDeclaration, source: string}[]} */
|
|
26
|
+
const reExportsViaLocal = [];
|
|
27
|
+
|
|
28
|
+
walkAST(sourceCode, (node) => {
|
|
29
|
+
if (node.type === "ImportDeclaration") {
|
|
30
|
+
const moduleName = node.source?.value;
|
|
31
|
+
if (moduleName) {
|
|
32
|
+
for (const spec of node.specifiers) {
|
|
33
|
+
importMap.set(spec.local.name, {
|
|
34
|
+
source: moduleName,
|
|
35
|
+
importNode: node,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// works
|
|
42
|
+
if (
|
|
43
|
+
node.type === "ExportAllDeclaration" &&
|
|
44
|
+
node.exportKind === "value" &&
|
|
45
|
+
node.source
|
|
46
|
+
) {
|
|
47
|
+
reExportsWithSource.push({ node, source: node.source.value });
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// works
|
|
51
|
+
if (
|
|
52
|
+
node.type === "ExportNamedDeclaration" &&
|
|
53
|
+
node.exportKind === "value" &&
|
|
54
|
+
node.source
|
|
55
|
+
) {
|
|
56
|
+
reExportsWithSource.push({ node, source: node.source.value });
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// works
|
|
60
|
+
if (
|
|
61
|
+
node.type === "ExportNamedDeclaration" &&
|
|
62
|
+
node.exportKind === "value" &&
|
|
63
|
+
node.source === null &&
|
|
64
|
+
node.specifiers?.length
|
|
65
|
+
) {
|
|
66
|
+
for (const spec of node.specifiers) {
|
|
67
|
+
const local = spec.local?.name;
|
|
68
|
+
if (importMap.has(local)) {
|
|
69
|
+
const info = importMap.get(local);
|
|
70
|
+
reExportsViaLocal.push({
|
|
71
|
+
identifier: local,
|
|
72
|
+
exportNode: node,
|
|
73
|
+
importNode: info.importNode,
|
|
74
|
+
source: info.source,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// works
|
|
81
|
+
if (
|
|
82
|
+
node.type === "ExportDefaultDeclaration" &&
|
|
83
|
+
node.exportKind === "value" &&
|
|
84
|
+
node.declaration.type === "Identifier"
|
|
85
|
+
) {
|
|
86
|
+
const name = node.declaration.name;
|
|
87
|
+
if (importMap.has(name)) {
|
|
88
|
+
const info = importMap.get(name);
|
|
89
|
+
reExportsViaLocal.push({
|
|
90
|
+
identifier: name,
|
|
91
|
+
exportNode: node,
|
|
92
|
+
importNode: info.importNode,
|
|
93
|
+
source: info.source,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
return { reExportsWithSource, reExportsViaLocal };
|
|
100
|
+
};
|