@clipboard-health/oxlint-plugin 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.
Files changed (29) hide show
  1. package/README.md +27 -0
  2. package/package.json +30 -0
  3. package/src/index.d.ts +9 -0
  4. package/src/index.js +21 -0
  5. package/src/index.js.map +1 -0
  6. package/src/lib/internal/findVariable.d.ts +4 -0
  7. package/src/lib/internal/findVariable.js +15 -0
  8. package/src/lib/internal/findVariable.js.map +1 -0
  9. package/src/lib/rules/enforce-ts-rest-in-controllers/index.d.ts +2 -0
  10. package/src/lib/rules/enforce-ts-rest-in-controllers/index.js +111 -0
  11. package/src/lib/rules/enforce-ts-rest-in-controllers/index.js.map +1 -0
  12. package/src/lib/rules/no-cross-contract-imports/index.d.ts +2 -0
  13. package/src/lib/rules/no-cross-contract-imports/index.js +116 -0
  14. package/src/lib/rules/no-cross-contract-imports/index.js.map +1 -0
  15. package/src/lib/rules/require-contract-fixture-construction/index.d.ts +3 -0
  16. package/src/lib/rules/require-contract-fixture-construction/index.js +615 -0
  17. package/src/lib/rules/require-contract-fixture-construction/index.js.map +1 -0
  18. package/src/lib/rules/require-contract-response-parse/index.d.ts +21 -0
  19. package/src/lib/rules/require-contract-response-parse/index.js +368 -0
  20. package/src/lib/rules/require-contract-response-parse/index.js.map +1 -0
  21. package/src/lib/rules/require-http-module-factory/index.d.ts +2 -0
  22. package/src/lib/rules/require-http-module-factory/index.js +74 -0
  23. package/src/lib/rules/require-http-module-factory/index.js.map +1 -0
  24. package/src/lib/rules/require-run-validators-with-upsert/index.d.ts +2 -0
  25. package/src/lib/rules/require-run-validators-with-upsert/index.js +110 -0
  26. package/src/lib/rules/require-run-validators-with-upsert/index.js.map +1 -0
  27. package/src/lib/rules/require-zod-import-in-contracts/index.d.ts +2 -0
  28. package/src/lib/rules/require-zod-import-in-contracts/index.js +46 -0
  29. package/src/lib/rules/require-zod-import-in-contracts/index.js.map +1 -0
@@ -0,0 +1,615 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const findVariable_1 = require("../../internal/findVariable");
4
+ const CONTRACT_PACKAGE_PREFIX = "@clipboard-health/contract-";
5
+ const MOCKS_FILE_PATTERN = /\/(?:testUtils|test-utils)\/mocks\.[cm]?[jt]sx?$/u;
6
+ const MOCK_NAME_PATTERN = /mock/iu;
7
+ const MUTATING_METHOD_NAMES = new Set([
8
+ "add",
9
+ "clear",
10
+ "copyWithin",
11
+ "delete",
12
+ "fill",
13
+ "pop",
14
+ "push",
15
+ "reverse",
16
+ "set",
17
+ "shift",
18
+ "sort",
19
+ "splice",
20
+ "unshift",
21
+ ]);
22
+ const OBJECT_MUTATOR_NAMES = new Set([
23
+ "assign",
24
+ "defineProperties",
25
+ "defineProperty",
26
+ "setPrototypeOf",
27
+ ]);
28
+ function unwrap(node) {
29
+ let current = node;
30
+ while (current?.type === "ChainExpression" ||
31
+ current?.type === "TSAsExpression" ||
32
+ current?.type === "TSInstantiationExpression" ||
33
+ current?.type === "TSNonNullExpression" ||
34
+ current?.type === "TSSatisfiesExpression" ||
35
+ current?.type === "TSTypeAssertion") {
36
+ current = current.expression;
37
+ }
38
+ return current;
39
+ }
40
+ function propertyName(node) {
41
+ const property = node.type === "MemberExpression" ? node.property : node.key;
42
+ const computed = node.computed;
43
+ if (!computed && property.type === "Identifier") {
44
+ return property.name;
45
+ }
46
+ if (computed && property.type === "Literal" && typeof property.value === "string") {
47
+ return property.value;
48
+ }
49
+ return undefined;
50
+ }
51
+ function isExpression(node) {
52
+ return (node !== null &&
53
+ node !== undefined &&
54
+ node.type !== "SpreadElement" &&
55
+ node.type !== "JSXElement" &&
56
+ node.type !== "JSXFragment");
57
+ }
58
+ function rootIdentifier(node) {
59
+ let current = unwrap(node);
60
+ while (current?.type === "MemberExpression") {
61
+ current = unwrap(current.object);
62
+ }
63
+ return current?.type === "Identifier" ? current : undefined;
64
+ }
65
+ function objectProperty(object, name) {
66
+ return object.properties.find((entry) => entry.type === "Property" && propertyName(entry) === name);
67
+ }
68
+ function isRouteFulfillCall(node, allowAnyReceiver) {
69
+ return (node.callee.type === "MemberExpression" &&
70
+ propertyName(node.callee) === "fulfill" &&
71
+ node.callee.object.type === "Identifier" &&
72
+ (allowAnyReceiver || /route$/iu.test(node.callee.object.name)));
73
+ }
74
+ function isFixtureValue(name, node) {
75
+ const current = unwrap(node);
76
+ return (MOCK_NAME_PATTERN.test(name) ||
77
+ current?.type === "ArrayExpression" ||
78
+ current?.type === "ObjectExpression");
79
+ }
80
+ function importName(specifier) {
81
+ if (specifier.type === "ImportSpecifier") {
82
+ return specifier.imported.type === "Identifier"
83
+ ? specifier.imported.name
84
+ : specifier.imported.value;
85
+ }
86
+ return specifier.type === "ImportNamespaceSpecifier" ? "*" : "default";
87
+ }
88
+ const rule = {
89
+ meta: {
90
+ type: "problem",
91
+ docs: {
92
+ description: "Require response fixtures to be constructed by producer-owned contracts",
93
+ url: "https://github.com/ClipboardHealth/core-utils/tree/main/packages/eslint-plugin/src/lib/rules/require-contract-fixture-construction",
94
+ },
95
+ schema: [],
96
+ messages: {
97
+ parseMock: "Construct exported response fixtures with a producer-owned contract response schema.",
98
+ parsePayload: "Construct JSON response fixtures with a producer-owned contract response schema before passing them to the test transport.",
99
+ },
100
+ },
101
+ create(context) {
102
+ const filename = context.filename.replaceAll("\\", "/");
103
+ const isMocksFile = MOCKS_FILE_PATTERN.test(filename);
104
+ const isPlaywrightFile = filename.includes("/playwright/");
105
+ const isTestUtilsFile = /\/(?:testUtils|test-utils)\//u.test(filename);
106
+ const contractImports = new Map();
107
+ const fixtureBuilderFactoryImports = new Set();
108
+ const oneShotBuilderImports = new Set();
109
+ const httpResponseImports = new Set();
110
+ const trustedFixtureImports = new Set();
111
+ const variableInitializers = new Map();
112
+ const fixtureBuilders = new Set();
113
+ const mutations = new Map();
114
+ const aliasTargets = new Map();
115
+ const candidates = [];
116
+ const directFixtureCandidates = [];
117
+ const functionReturns = new Map();
118
+ const functionStack = [];
119
+ const exportedFunctions = new Set();
120
+ const indirectExports = [];
121
+ function variableFor(identifier) {
122
+ return (0, findVariable_1.findVariable)(context.sourceCode, identifier);
123
+ }
124
+ function declaredVariable(node) {
125
+ return context.sourceCode.getDeclaredVariables(node)[0];
126
+ }
127
+ function recordMutation(node, position) {
128
+ const identifier = rootIdentifier(node);
129
+ if (!identifier) {
130
+ return;
131
+ }
132
+ const variable = variableFor(identifier);
133
+ if (!variable) {
134
+ return;
135
+ }
136
+ const positions = mutations.get(variable) ?? [];
137
+ positions.push(position);
138
+ mutations.set(variable, positions);
139
+ }
140
+ function wasMutated(variable, observationPosition) {
141
+ return mutations.get(variable)?.some((position) => position < observationPosition) === true;
142
+ }
143
+ function isContractRoot(identifier) {
144
+ const variable = variableFor(identifier);
145
+ return variable !== undefined && contractImports.has(variable);
146
+ }
147
+ function isContractResponseSchema(node, seen = new Set()) {
148
+ const current = unwrap(node);
149
+ if (!current) {
150
+ return false;
151
+ }
152
+ if (current.type === "Identifier") {
153
+ const variable = variableFor(current);
154
+ if (!variable) {
155
+ return false;
156
+ }
157
+ const importedName = contractImports.get(variable);
158
+ if (importedName !== undefined) {
159
+ return importedName.endsWith("ResponseSchema");
160
+ }
161
+ if (seen.has(variable)) {
162
+ return false;
163
+ }
164
+ seen.add(variable);
165
+ return isContractResponseSchema(variableInitializers.get(variable), seen);
166
+ }
167
+ if (current.type !== "MemberExpression") {
168
+ return false;
169
+ }
170
+ const selectedFromResponses = current.computed &&
171
+ current.object.type === "MemberExpression" &&
172
+ propertyName(current.object) === "responses";
173
+ if (selectedFromResponses) {
174
+ const root = rootIdentifier(current);
175
+ return root !== undefined && isContractRoot(root);
176
+ }
177
+ const selectedNamedSchema = propertyName(current)?.endsWith("ResponseSchema") === true;
178
+ if (selectedNamedSchema) {
179
+ const root = rootIdentifier(current);
180
+ return root !== undefined && isContractRoot(root);
181
+ }
182
+ return false;
183
+ }
184
+ function hasContractSchemaOption(call) {
185
+ const [options] = call.arguments;
186
+ const current = unwrap(options);
187
+ if (current?.type !== "ObjectExpression") {
188
+ return false;
189
+ }
190
+ const schema = objectProperty(current, "schema");
191
+ return (schema !== undefined && isExpression(schema.value) && isContractResponseSchema(schema.value));
192
+ }
193
+ function isOneShotBuilderCall(node) {
194
+ const current = unwrap(node);
195
+ if (current?.type !== "CallExpression" || current.callee.type !== "Identifier") {
196
+ return false;
197
+ }
198
+ const variable = variableFor(current.callee);
199
+ return (variable !== undefined &&
200
+ oneShotBuilderImports.has(variable) &&
201
+ hasContractSchemaOption(current));
202
+ }
203
+ function isFixtureBuilderFactoryCall(node) {
204
+ const current = unwrap(node);
205
+ if (current?.type !== "CallExpression" || current.callee.type !== "Identifier") {
206
+ return false;
207
+ }
208
+ const variable = variableFor(current.callee);
209
+ return (variable !== undefined &&
210
+ fixtureBuilderFactoryImports.has(variable) &&
211
+ hasContractSchemaOption(current));
212
+ }
213
+ function isContractParseCall(node) {
214
+ const current = unwrap(node);
215
+ return (current?.type === "CallExpression" &&
216
+ current.callee.type === "MemberExpression" &&
217
+ propertyName(current.callee) === "parse" &&
218
+ isContractResponseSchema(current.callee.object));
219
+ }
220
+ function isContractConstructed(node, observationPosition, seen = new Set()) {
221
+ const current = unwrap(node);
222
+ if (!current) {
223
+ return false;
224
+ }
225
+ if (isContractParseCall(current) || isOneShotBuilderCall(current)) {
226
+ return true;
227
+ }
228
+ if (current.type === "CallExpression" && current.callee.type === "Identifier") {
229
+ const variable = variableFor(current.callee);
230
+ if (variable !== undefined && fixtureBuilders.has(variable)) {
231
+ return true;
232
+ }
233
+ }
234
+ if (current.type !== "Identifier") {
235
+ return false;
236
+ }
237
+ const variable = variableFor(current);
238
+ if (!variable || seen.has(variable) || wasMutated(variable, observationPosition)) {
239
+ return false;
240
+ }
241
+ if (trustedFixtureImports.has(variable)) {
242
+ return true;
243
+ }
244
+ const initializer = variableInitializers.get(variable);
245
+ if (!initializer) {
246
+ return false;
247
+ }
248
+ seen.add(variable);
249
+ return isContractConstructed(initializer, observationPosition, seen);
250
+ }
251
+ function resolveObject(node, observationPosition, seen = new Set()) {
252
+ const current = unwrap(node);
253
+ if (current?.type === "ObjectExpression") {
254
+ return current;
255
+ }
256
+ if (current?.type !== "Identifier") {
257
+ return undefined;
258
+ }
259
+ const variable = variableFor(current);
260
+ if (!variable || seen.has(variable) || wasMutated(variable, observationPosition)) {
261
+ return undefined;
262
+ }
263
+ const initializer = variableInitializers.get(variable);
264
+ if (!initializer) {
265
+ return undefined;
266
+ }
267
+ seen.add(variable);
268
+ return resolveObject(initializer, observationPosition, seen);
269
+ }
270
+ function jsonStringifyPayload(node, seen = new Set()) {
271
+ const current = unwrap(node);
272
+ if (current?.type === "CallExpression" &&
273
+ current.callee.type === "MemberExpression" &&
274
+ current.callee.object.type === "Identifier" &&
275
+ current.callee.object.name === "JSON" &&
276
+ propertyName(current.callee) === "stringify") {
277
+ const [payload] = current.arguments;
278
+ return isExpression(payload) ? payload : undefined;
279
+ }
280
+ if (current?.type !== "Identifier") {
281
+ return undefined;
282
+ }
283
+ const variable = variableFor(current);
284
+ if (!variable || seen.has(variable)) {
285
+ return undefined;
286
+ }
287
+ seen.add(variable);
288
+ return jsonStringifyPayload(variableInitializers.get(variable), seen);
289
+ }
290
+ function playwrightPayloads(node, observationPosition, seen = new Set()) {
291
+ const options = resolveObject(node, observationPosition, seen);
292
+ if (!options) {
293
+ const expression = unwrap(node);
294
+ return isExpression(expression) ? { unknown: expression } : {};
295
+ }
296
+ const payloads = {};
297
+ for (const entry of options.properties) {
298
+ if (entry.type === "SpreadElement") {
299
+ const spread = playwrightPayloads(entry.argument, observationPosition, new Set(seen));
300
+ if (spread.unknown) {
301
+ return { unknown: spread.unknown };
302
+ }
303
+ if (spread.body !== undefined) {
304
+ payloads.body = spread.body;
305
+ }
306
+ if (spread.json !== undefined) {
307
+ payloads.json = spread.json;
308
+ }
309
+ continue;
310
+ }
311
+ const name = propertyName(entry);
312
+ if (name === undefined && entry.computed && isExpression(entry.value)) {
313
+ return { unknown: entry.value };
314
+ }
315
+ if (!isExpression(entry.value)) {
316
+ continue;
317
+ }
318
+ if (name === "json") {
319
+ payloads.json = entry.value;
320
+ }
321
+ else if (name === "body") {
322
+ const serialized = jsonStringifyPayload(entry.value);
323
+ if (serialized) {
324
+ payloads.body = serialized;
325
+ }
326
+ }
327
+ }
328
+ return payloads;
329
+ }
330
+ function isMswJsonCall(node) {
331
+ if (node.callee.type !== "MemberExpression" ||
332
+ propertyName(node.callee) !== "json" ||
333
+ node.callee.object.type !== "Identifier") {
334
+ return false;
335
+ }
336
+ if (node.callee.object.name === "ctx" || node.callee.object.name === "context") {
337
+ return true;
338
+ }
339
+ const variable = variableFor(node.callee.object);
340
+ return variable !== undefined && httpResponseImports.has(variable);
341
+ }
342
+ function addCandidate(node, observationPosition) {
343
+ if (isExpression(node)) {
344
+ candidates.push({ node, observationPosition });
345
+ }
346
+ }
347
+ function addDirectFixture(node) {
348
+ if (isExpression(node)) {
349
+ directFixtureCandidates.push({
350
+ node,
351
+ observationPosition: Number.MAX_SAFE_INTEGER,
352
+ });
353
+ }
354
+ }
355
+ function registerBuilderVariables() {
356
+ let changed = true;
357
+ while (changed) {
358
+ changed = false;
359
+ for (const [variable, initializer] of variableInitializers) {
360
+ if (!fixtureBuilders.has(variable) && isFixtureBuilderFactoryCall(initializer)) {
361
+ fixtureBuilders.add(variable);
362
+ changed = true;
363
+ }
364
+ }
365
+ }
366
+ }
367
+ function propagateAliasMutations() {
368
+ let changed = true;
369
+ while (changed) {
370
+ changed = false;
371
+ for (const [alias, target] of aliasTargets) {
372
+ const aliasMutations = mutations.get(alias) ?? [];
373
+ const targetMutations = mutations.get(target) ?? [];
374
+ for (const position of aliasMutations) {
375
+ if (!targetMutations.includes(position)) {
376
+ targetMutations.push(position);
377
+ changed = true;
378
+ }
379
+ }
380
+ if (targetMutations.length > 0) {
381
+ mutations.set(target, targetMutations);
382
+ }
383
+ }
384
+ }
385
+ }
386
+ function reportDirectFixtures() {
387
+ for (const candidate of directFixtureCandidates) {
388
+ if (!isContractConstructed(candidate.node, candidate.observationPosition)) {
389
+ context.report({ node: candidate.node, messageId: "parseMock" });
390
+ }
391
+ }
392
+ }
393
+ function reportExportedFunctions() {
394
+ for (const functionNode of exportedFunctions) {
395
+ for (const returnValue of functionReturns.get(functionNode) ?? []) {
396
+ if (!isContractConstructed(returnValue, returnValue.range[0])) {
397
+ context.report({ node: returnValue, messageId: "parseMock" });
398
+ }
399
+ }
400
+ }
401
+ }
402
+ function reportIndirectExports() {
403
+ for (const { exportedName, local } of indirectExports) {
404
+ const variable = variableFor(local);
405
+ if (!variable) {
406
+ continue;
407
+ }
408
+ const initializer = variableInitializers.get(variable);
409
+ const current = unwrap(initializer);
410
+ if (current?.type === "ArrowFunctionExpression" || current?.type === "FunctionExpression") {
411
+ for (const returnValue of functionReturns.get(current) ?? []) {
412
+ if (!isContractConstructed(returnValue, returnValue.range[0])) {
413
+ context.report({ node: returnValue, messageId: "parseMock" });
414
+ }
415
+ }
416
+ }
417
+ else if (isFixtureValue(exportedName, initializer) &&
418
+ !isContractConstructed(local, Number.MAX_SAFE_INTEGER)) {
419
+ context.report({
420
+ node: initializer ?? local,
421
+ messageId: "parseMock",
422
+ });
423
+ }
424
+ }
425
+ }
426
+ function reportTransportCandidates() {
427
+ for (const candidate of candidates) {
428
+ if (!isContractConstructed(candidate.node, candidate.observationPosition)) {
429
+ context.report({ node: candidate.node, messageId: "parsePayload" });
430
+ }
431
+ }
432
+ }
433
+ return {
434
+ ImportDeclaration(node) {
435
+ const source = node.source.value;
436
+ for (const specifier of node.specifiers) {
437
+ const variable = declaredVariable(specifier);
438
+ if (!variable) {
439
+ continue;
440
+ }
441
+ const importedName = importName(specifier);
442
+ if (source.startsWith(CONTRACT_PACKAGE_PREFIX)) {
443
+ contractImports.set(variable, importedName);
444
+ }
445
+ if ((source === "@clipboard-health/testing-core" ||
446
+ /(?:^|\/)test(?:Utils|-utils)\/createContractFixtureBuilder$/u.test(source)) &&
447
+ importedName === "createContractFixtureBuilder") {
448
+ fixtureBuilderFactoryImports.add(variable);
449
+ }
450
+ if ((source === "@clipboard-health/testing-core" ||
451
+ /(?:^|\/)test(?:Utils|-utils)\/buildContractFixture$/u.test(source)) &&
452
+ importedName === "buildContractFixture") {
453
+ oneShotBuilderImports.add(variable);
454
+ }
455
+ if (source === "msw" && importedName === "HttpResponse") {
456
+ httpResponseImports.add(variable);
457
+ }
458
+ if (/(?:^|\/)test(?:Utils|-utils)\/mocks$/u.test(source) ||
459
+ (isTestUtilsFile && /^\.\/mocks$/u.test(source))) {
460
+ trustedFixtureImports.add(variable);
461
+ }
462
+ }
463
+ },
464
+ VariableDeclarator(node) {
465
+ if (!isExpression(node.init)) {
466
+ return;
467
+ }
468
+ if (node.id.type !== "Identifier") {
469
+ const aliasIdentifier = rootIdentifier(node.init);
470
+ const target = aliasIdentifier ? variableFor(aliasIdentifier) : undefined;
471
+ if (target) {
472
+ for (const variable of context.sourceCode.getDeclaredVariables(node)) {
473
+ aliasTargets.set(variable, target);
474
+ }
475
+ }
476
+ return;
477
+ }
478
+ const variable = declaredVariable(node);
479
+ if (!variable) {
480
+ return;
481
+ }
482
+ variableInitializers.set(variable, node.init);
483
+ const aliasIdentifier = rootIdentifier(node.init);
484
+ const target = aliasIdentifier ? variableFor(aliasIdentifier) : undefined;
485
+ if (target && target !== variable) {
486
+ aliasTargets.set(variable, target);
487
+ }
488
+ },
489
+ FunctionDeclaration(node) {
490
+ functionReturns.set(node, []);
491
+ functionStack.push(node);
492
+ if (node.parent.type === "ExportNamedDeclaration" && isMocksFile) {
493
+ exportedFunctions.add(node);
494
+ }
495
+ },
496
+ "FunctionDeclaration:exit"() {
497
+ functionStack.pop();
498
+ },
499
+ FunctionExpression(node) {
500
+ functionReturns.set(node, []);
501
+ functionStack.push(node);
502
+ },
503
+ "FunctionExpression:exit"() {
504
+ functionStack.pop();
505
+ },
506
+ ArrowFunctionExpression(node) {
507
+ functionReturns.set(node, node.body.type === "BlockStatement" ? [] : [node.body]);
508
+ functionStack.push(node);
509
+ },
510
+ "ArrowFunctionExpression:exit"() {
511
+ functionStack.pop();
512
+ },
513
+ ReturnStatement(node) {
514
+ const current = functionStack.at(-1);
515
+ if (current && isExpression(node.argument)) {
516
+ functionReturns.get(current)?.push(node.argument);
517
+ }
518
+ },
519
+ ExportNamedDeclaration(node) {
520
+ if (!isMocksFile) {
521
+ return;
522
+ }
523
+ for (const specifier of node.specifiers) {
524
+ if (specifier.type === "ExportSpecifier" && specifier.local.type === "Identifier") {
525
+ indirectExports.push({
526
+ exportedName: specifier.exported.type === "Identifier"
527
+ ? specifier.exported.name
528
+ : specifier.exported.value,
529
+ local: specifier.local,
530
+ });
531
+ }
532
+ }
533
+ if (node.declaration?.type !== "VariableDeclaration") {
534
+ return;
535
+ }
536
+ for (const declaration of node.declaration.declarations) {
537
+ if (declaration.id.type !== "Identifier" || !isExpression(declaration.init)) {
538
+ addDirectFixture(declaration.init);
539
+ continue;
540
+ }
541
+ const initializer = unwrap(declaration.init);
542
+ if (initializer?.type === "ArrowFunctionExpression" ||
543
+ initializer?.type === "FunctionExpression") {
544
+ exportedFunctions.add(initializer);
545
+ }
546
+ else if (isFixtureValue(declaration.id.name, declaration.init)) {
547
+ addDirectFixture(declaration.id);
548
+ }
549
+ }
550
+ },
551
+ ExportDefaultDeclaration(node) {
552
+ if (!isMocksFile) {
553
+ return;
554
+ }
555
+ if (node.declaration.type === "Identifier") {
556
+ indirectExports.push({
557
+ exportedName: node.declaration.name,
558
+ local: node.declaration,
559
+ });
560
+ }
561
+ else if (isExpression(node.declaration)) {
562
+ const current = unwrap(node.declaration);
563
+ if (current?.type === "ArrowFunctionExpression" ||
564
+ current?.type === "FunctionExpression") {
565
+ exportedFunctions.add(current);
566
+ }
567
+ else {
568
+ addDirectFixture(node.declaration);
569
+ }
570
+ }
571
+ },
572
+ AssignmentExpression(node) {
573
+ recordMutation(node.left, node.range[0]);
574
+ },
575
+ UpdateExpression(node) {
576
+ recordMutation(node.argument, node.range[0]);
577
+ },
578
+ UnaryExpression(node) {
579
+ if (node.operator === "delete") {
580
+ recordMutation(node.argument, node.range[0]);
581
+ }
582
+ },
583
+ CallExpression(node) {
584
+ if (isMswJsonCall(node)) {
585
+ addCandidate(node.arguments[0], node.range[0]);
586
+ }
587
+ if (isRouteFulfillCall(node, isPlaywrightFile)) {
588
+ const payloads = playwrightPayloads(node.arguments[0], node.range[0]);
589
+ addCandidate(payloads.unknown ?? payloads.json ?? payloads.body, node.range[0]);
590
+ }
591
+ if (node.callee.type === "MemberExpression") {
592
+ const method = propertyName(node.callee);
593
+ if (node.callee.object.type === "Identifier" &&
594
+ node.callee.object.name === "Object" &&
595
+ OBJECT_MUTATOR_NAMES.has(method ?? "")) {
596
+ recordMutation(node.arguments[0], node.range[0]);
597
+ }
598
+ else if (MUTATING_METHOD_NAMES.has(method ?? "")) {
599
+ recordMutation(node.callee.object, node.range[0]);
600
+ }
601
+ }
602
+ },
603
+ "Program:exit"() {
604
+ registerBuilderVariables();
605
+ propagateAliasMutations();
606
+ reportDirectFixtures();
607
+ reportExportedFunctions();
608
+ reportIndirectExports();
609
+ reportTransportCandidates();
610
+ },
611
+ };
612
+ },
613
+ };
614
+ exports.default = rule;
615
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/oxlint-plugin/src/lib/rules/require-contract-fixture-construction/index.ts"],"names":[],"mappings":"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"}