@schema-hub/stryker-zod-mutator 0.0.16 → 0.0.18
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/package.json +4 -1
- package/readme.md +5 -0
- package/sbom.cdx.json +5 -5
- package/stryker-zod-mutator/ast.js +88 -1
- package/stryker-zod-mutator/ast.js.map +1 -1
- package/stryker-zod-mutator/behavior-mutations.js +70 -6
- package/stryker-zod-mutator/behavior-mutations.js.map +1 -1
- package/stryker-zod-mutator/binding-resolution.js +289 -3
- package/stryker-zod-mutator/binding-resolution.js.map +1 -1
- package/stryker-zod-mutator/check-mutations.js +153 -5
- package/stryker-zod-mutator/check-mutations.js.map +1 -1
- package/stryker-zod-mutator/collection-mutations.js +159 -5
- package/stryker-zod-mutator/collection-mutations.js.map +1 -1
- package/stryker-zod-mutator/declarator-init-id.js +12 -2
- package/stryker-zod-mutator/declarator-init-id.js.map +1 -1
- package/stryker-zod-mutator/filesystem-module-loader.js +61 -2
- package/stryker-zod-mutator/filesystem-module-loader.js.map +1 -1
- package/stryker-zod-mutator/masked-schema-references.js +114 -4
- package/stryker-zod-mutator/masked-schema-references.js.map +1 -1
- package/stryker-zod-mutator/mutation-catalog.js +16 -7
- package/stryker-zod-mutator/mutation-catalog.js.map +1 -1
- package/stryker-zod-mutator/mutation-definition.js +16 -2
- package/stryker-zod-mutator/mutation-definition.js.map +1 -1
- package/stryker-zod-mutator/mutations.js +16 -3
- package/stryker-zod-mutator/mutations.js.map +1 -1
- package/stryker-zod-mutator/object-mutations.js +114 -6
- package/stryker-zod-mutator/object-mutations.js.map +1 -1
- package/stryker-zod-mutator/operator.js +95 -0
- package/stryker-zod-mutator/operator.js.map +1 -1
- package/stryker-zod-mutator/presence-mutations.js +83 -6
- package/stryker-zod-mutator/presence-mutations.js.map +1 -1
- package/stryker-zod-mutator/primitive-mutations.js +33 -2
- package/stryker-zod-mutator/primitive-mutations.js.map +1 -1
- package/stryker-zod-mutator/reference-mutations.js +58 -4
- package/stryker-zod-mutator/reference-mutations.js.map +1 -1
- package/stryker-zod-mutator/registry.js +50 -2
- package/stryker-zod-mutator/registry.js.map +1 -1
- package/stryker-zod-mutator/schema-call-mutations.js +93 -6
- package/stryker-zod-mutator/schema-call-mutations.js.map +1 -1
- package/stryker-zod-mutator/zod-bindings.js +221 -3
- package/stryker-zod-mutator/zod-bindings.js.map +1 -1
package/package.json
CHANGED
|
@@ -36,13 +36,16 @@
|
|
|
36
36
|
"./stryker-zod-mutator/behavior-mutations.js",
|
|
37
37
|
"./stryker-zod-mutator/binding-resolution.js",
|
|
38
38
|
"./stryker-zod-mutator/check-mutations.js",
|
|
39
|
+
"./stryker-zod-mutator/collection-mutations.js",
|
|
39
40
|
"./stryker-zod-mutator/filesystem-module-loader.js",
|
|
40
41
|
"./stryker-zod-mutator/masked-schema-references.js",
|
|
41
42
|
"./stryker-zod-mutator/object-mutations.js",
|
|
43
|
+
"./stryker-zod-mutator/presence-mutations.js",
|
|
42
44
|
"./stryker-zod-mutator/primitive-mutations.js",
|
|
45
|
+
"./stryker-zod-mutator/reference-mutations.js",
|
|
43
46
|
"./stryker-zod-mutator/registry.js",
|
|
44
47
|
"./stryker-zod-mutator/zod-bindings.js"
|
|
45
48
|
],
|
|
46
49
|
"type": "module",
|
|
47
|
-
"version": "0.0.
|
|
50
|
+
"version": "0.0.18"
|
|
48
51
|
}
|
package/readme.md
CHANGED
|
@@ -116,6 +116,8 @@ The mutator detects namespace, `z`, alias, and direct factory imports from:
|
|
|
116
116
|
- `zod/v4/mini`
|
|
117
117
|
|
|
118
118
|
It supports classic chains like `z.string().optional()` and mini calls like `z.optional(z.string())`.
|
|
119
|
+
Zod 4.5 schema wrappers such as `z.deepPartial(...)`, `z.exactPartial(...)`, and `z.compile(...)` are
|
|
120
|
+
recognized as schema values.
|
|
119
121
|
|
|
120
122
|
## Mutations
|
|
121
123
|
|
|
@@ -210,6 +212,9 @@ them has no effect. It emits a single mutant per schema value and skips schemas
|
|
|
210
212
|
mirrors this: it removes `readonly` only when the underlying value is one of those freezable families, since
|
|
211
213
|
removing it from a frozen primitive has no observable effect.
|
|
212
214
|
|
|
215
|
+
`ZodCustomBehaviorRemove` also removes `z.property(...)` and spread `z.properties(...)` checks from
|
|
216
|
+
`.check(...)` calls.
|
|
217
|
+
|
|
213
218
|
Boolean and string literal values are left to Stryker’s built-in literal mutators.
|
|
214
219
|
|
|
215
220
|
## Limits
|
package/sbom.cdx.json
CHANGED
|
@@ -9,16 +9,16 @@
|
|
|
9
9
|
{
|
|
10
10
|
"type": "application",
|
|
11
11
|
"name": "packtory",
|
|
12
|
-
"version": "0.0.
|
|
12
|
+
"version": "0.0.109"
|
|
13
13
|
}
|
|
14
14
|
]
|
|
15
15
|
},
|
|
16
16
|
"component": {
|
|
17
17
|
"type": "library",
|
|
18
18
|
"name": "@schema-hub/stryker-zod-mutator",
|
|
19
|
-
"version": "0.0.
|
|
20
|
-
"bom-ref": "pkg:npm/@schema-hub/stryker-zod-mutator@0.0.
|
|
21
|
-
"purl": "pkg:npm/@schema-hub/stryker-zod-mutator@0.0.
|
|
19
|
+
"version": "0.0.18",
|
|
20
|
+
"bom-ref": "pkg:npm/@schema-hub/stryker-zod-mutator@0.0.18",
|
|
21
|
+
"purl": "pkg:npm/@schema-hub/stryker-zod-mutator@0.0.18"
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
24
|
"components": [
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
"ref": "pkg:npm/@babel/types@8.0.4"
|
|
97
97
|
},
|
|
98
98
|
{
|
|
99
|
-
"ref": "pkg:npm/@schema-hub/stryker-zod-mutator@0.0.
|
|
99
|
+
"ref": "pkg:npm/@schema-hub/stryker-zod-mutator@0.0.18",
|
|
100
100
|
"dependsOn": [
|
|
101
101
|
"pkg:npm/@babel/parser@8.0.4",
|
|
102
102
|
"pkg:npm/@babel/types@8.0.4",
|
|
@@ -1,2 +1,89 @@
|
|
|
1
|
-
import '@babel/types';
|
|
1
|
+
import * as babel from '@babel/types';
|
|
2
|
+
export function isExpressionNode(node) {
|
|
3
|
+
return node !== null && node !== undefined && babel.isExpression(node) && !babel.isV8IntrinsicIdentifier(node);
|
|
4
|
+
}
|
|
5
|
+
export function cloneExpression(expression) {
|
|
6
|
+
return babel.cloneNode(expression, true);
|
|
7
|
+
}
|
|
8
|
+
export function findProgram(path) {
|
|
9
|
+
let current = path;
|
|
10
|
+
while (current !== null) {
|
|
11
|
+
if (babel.isProgram(current.node)) {
|
|
12
|
+
return current.node;
|
|
13
|
+
}
|
|
14
|
+
current = current.parentPath;
|
|
15
|
+
}
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
function readProperty(value, key) {
|
|
19
|
+
if (typeof value !== 'object' || value === null) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
return Reflect.get(value, key);
|
|
23
|
+
}
|
|
24
|
+
function hubFileName(path) {
|
|
25
|
+
const filename = readProperty(readProperty(readProperty(readProperty(path, 'hub'), 'file'), 'opts'), 'filename');
|
|
26
|
+
return typeof filename === 'string' ? filename : null;
|
|
27
|
+
}
|
|
28
|
+
export function fileNameOf(path) {
|
|
29
|
+
const locationFileName = findProgram(path)?.loc?.filename;
|
|
30
|
+
return hubFileName(path) ?? (typeof locationFileName === 'string' ? locationFileName : null);
|
|
31
|
+
}
|
|
32
|
+
export function namedIdentifier(name) {
|
|
33
|
+
return babel.identifier(name);
|
|
34
|
+
}
|
|
35
|
+
export function callExpression(callee, args) {
|
|
36
|
+
return babel.callExpression(callee, Array.from(args));
|
|
37
|
+
}
|
|
38
|
+
export function memberCall(object, methodName, args) {
|
|
39
|
+
return callExpression(babel.memberExpression(object, namedIdentifier(methodName)), args);
|
|
40
|
+
}
|
|
41
|
+
export function replaceArrayItem(arrayExpression, indexToRemove) {
|
|
42
|
+
return babel.arrayExpression(arrayExpression.elements.filter(function (_element, index) {
|
|
43
|
+
return index !== indexToRemove;
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
export function replaceObjectProperty(objectExpression, indexToReplace, value) {
|
|
47
|
+
return babel.objectExpression(objectExpression.properties.map(function (property, index) {
|
|
48
|
+
if (index !== indexToReplace || !babel.isObjectProperty(property)) {
|
|
49
|
+
return babel.cloneNode(property, true);
|
|
50
|
+
}
|
|
51
|
+
const clone = babel.cloneNode(property, true);
|
|
52
|
+
clone.value = value;
|
|
53
|
+
return clone;
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
export function removeObjectProperty(objectExpression, indexToRemove) {
|
|
57
|
+
return babel.objectExpression(objectExpression
|
|
58
|
+
.properties
|
|
59
|
+
.filter(function (_property, index) {
|
|
60
|
+
return index !== indexToRemove;
|
|
61
|
+
})
|
|
62
|
+
.map(function (property) {
|
|
63
|
+
return babel.cloneNode(property, true);
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
export function getMemberName(expression) {
|
|
67
|
+
if (!babel.isMemberExpression(expression) || expression.computed || !babel.isIdentifier(expression.property)) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
return expression.property.name;
|
|
71
|
+
}
|
|
72
|
+
export function getCallName(callee) {
|
|
73
|
+
if (babel.isIdentifier(callee)) {
|
|
74
|
+
return callee.name;
|
|
75
|
+
}
|
|
76
|
+
return getMemberName(callee);
|
|
77
|
+
}
|
|
78
|
+
export function numericArgumentMutations(call, argumentIndex) {
|
|
79
|
+
const argument = call.arguments[argumentIndex];
|
|
80
|
+
if (!babel.isNumericLiteral(argument)) {
|
|
81
|
+
return [];
|
|
82
|
+
}
|
|
83
|
+
return [-1, 1].map(function (offset) {
|
|
84
|
+
const clone = babel.cloneNode(call, true);
|
|
85
|
+
clone.arguments[argumentIndex] = babel.valueToNode(argument.value + offset);
|
|
86
|
+
return clone;
|
|
87
|
+
});
|
|
88
|
+
}
|
|
2
89
|
//# sourceMappingURL=ast.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../../../source/stryker-zod-mutator/ast.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../../../source/stryker-zod-mutator/ast.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,72 @@
|
|
|
1
|
-
import '@babel/types';
|
|
2
|
-
import "./ast.js";
|
|
3
|
-
import "./mutation-definition.js";
|
|
4
|
-
import "./schema-call-mutations.js";
|
|
5
|
-
import "./zod-bindings.js";
|
|
1
|
+
import * as babel from '@babel/types';
|
|
2
|
+
import { getMemberName } from "./ast.js";
|
|
3
|
+
import { callNode, createDefinition } from "./mutation-definition.js";
|
|
4
|
+
import { removeMethod, removeMethodOrWrapper } from "./schema-call-mutations.js";
|
|
5
|
+
import { buildZodCall, expressionStyle, getZodCallName, isCoerceCall } from "./zod-bindings.js";
|
|
6
6
|
const removeFallbackNames = new Set(['default', '_default', 'prefault', 'catch']);
|
|
7
|
-
const removeCustomBehaviorNames = new Set(['refine', 'superRefine', 'transform', 'pipe', 'custom']);
|
|
7
|
+
const removeCustomBehaviorNames = new Set(['refine', 'superRefine', 'transform', 'pipe', 'custom', 'property']);
|
|
8
|
+
function removeFallback(path, bindings) {
|
|
9
|
+
return removeMethodOrWrapper(path, bindings, removeFallbackNames);
|
|
10
|
+
}
|
|
11
|
+
function isRemovableCheckArgument(argument, bindings, names) {
|
|
12
|
+
if (babel.isCallExpression(argument)) {
|
|
13
|
+
return names.has(getZodCallName(bindings, argument) ?? '');
|
|
14
|
+
}
|
|
15
|
+
if (!babel.isSpreadElement(argument) || !babel.isCallExpression(argument.argument)) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return getZodCallName(bindings, argument.argument) === 'properties';
|
|
19
|
+
}
|
|
20
|
+
function removeChecksFromCheckCall(call, bindings, names) {
|
|
21
|
+
if (!babel.isMemberExpression(call.callee) || getMemberName(call.callee) !== 'check') {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
return call.arguments.flatMap(function (argument, index) {
|
|
25
|
+
if (!isRemovableCheckArgument(argument, bindings, names)) {
|
|
26
|
+
return [];
|
|
27
|
+
}
|
|
28
|
+
const clone = babel.cloneNode(call, true);
|
|
29
|
+
clone.arguments = clone.arguments.filter(function (_check, checkIndex) {
|
|
30
|
+
return checkIndex !== index;
|
|
31
|
+
});
|
|
32
|
+
return [clone];
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function removeCustomBehavior(path, bindings) {
|
|
36
|
+
const call = callNode(path);
|
|
37
|
+
if (call === null) {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
return [
|
|
41
|
+
...removeMethod(call, bindings, removeCustomBehaviorNames),
|
|
42
|
+
...removeChecksFromCheckCall(call, bindings, removeCustomBehaviorNames)
|
|
43
|
+
];
|
|
44
|
+
}
|
|
45
|
+
function coerceTargetName(call) {
|
|
46
|
+
return call !== null && babel.isMemberExpression(call.callee)
|
|
47
|
+
? getMemberName(call.callee)
|
|
48
|
+
: null;
|
|
49
|
+
}
|
|
50
|
+
function readCoercionMutationTarget(path, bindings) {
|
|
51
|
+
const call = callNode(path);
|
|
52
|
+
const targetName = coerceTargetName(call);
|
|
53
|
+
const style = call === null ? null : expressionStyle(bindings, call);
|
|
54
|
+
if (call === null || targetName === null || style === null || !isCoerceCall(bindings, call)) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
return { name: targetName, style };
|
|
58
|
+
}
|
|
59
|
+
function removeCoercion(path, bindings) {
|
|
60
|
+
const target = readCoercionMutationTarget(path, bindings);
|
|
61
|
+
if (target === null) {
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
const replacement = buildZodCall(bindings, target.style, target.name, []);
|
|
65
|
+
return replacement === null ? [] : [replacement];
|
|
66
|
+
}
|
|
67
|
+
export const behaviorMutationDefinitions = [
|
|
68
|
+
createDefinition('ZodFallbackRemove', removeFallback),
|
|
69
|
+
createDefinition('ZodCustomBehaviorRemove', removeCustomBehavior),
|
|
70
|
+
createDefinition('ZodCoercionRemove', removeCoercion)
|
|
71
|
+
];
|
|
8
72
|
//# sourceMappingURL=behavior-mutations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behavior-mutations.js","sourceRoot":"","sources":["../../../../source/stryker-zod-mutator/behavior-mutations.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"behavior-mutations.js","sourceRoot":"","sources":["../../../../source/stryker-zod-mutator/behavior-mutations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,210 @@
|
|
|
1
|
-
import '@babel/types';
|
|
2
|
-
import "./ast.js";
|
|
3
|
-
import { valuePreservingWrapperNames } from "./zod-bindings.js";
|
|
1
|
+
import * as babel from '@babel/types';
|
|
2
|
+
import { getMemberName, isExpressionNode } from "./ast.js";
|
|
3
|
+
import { buildZodBindings, firstExpressionArgument, getZodCallName, isZodSchemaExpression, valuePreservingWrapperNames } from "./zod-bindings.js";
|
|
4
|
+
|
|
5
|
+
function seenKey(bindings, name) {
|
|
6
|
+
return `${bindings.fileName ?? ''} ${name}`;
|
|
7
|
+
}
|
|
8
|
+
function getPropertyName(property) {
|
|
9
|
+
if (babel.isIdentifier(property.key)) {
|
|
10
|
+
return property.key.name;
|
|
11
|
+
}
|
|
12
|
+
return babel.isStringLiteral(property.key) ? property.key.value : null;
|
|
13
|
+
}
|
|
14
|
+
function objectPropertyValue(object, name) {
|
|
15
|
+
const match = object.properties.find(function (property) {
|
|
16
|
+
return babel.isObjectProperty(property) && !property.computed && getPropertyName(property) === name;
|
|
17
|
+
});
|
|
18
|
+
return match !== undefined && babel.isObjectProperty(match) && isExpressionNode(match.value) ? match.value : null;
|
|
19
|
+
}
|
|
20
|
+
function propertySourceName(pattern, localName) {
|
|
21
|
+
const match = pattern.properties.find(function (property) {
|
|
22
|
+
return babel.isObjectProperty(property) && babel.isIdentifier(property.value) &&
|
|
23
|
+
property.value.name === localName;
|
|
24
|
+
});
|
|
25
|
+
return match !== undefined && babel.isObjectProperty(match) && !match.computed && babel.isIdentifier(match.key)
|
|
26
|
+
? match.key.name
|
|
27
|
+
: localName;
|
|
28
|
+
}
|
|
29
|
+
function objectPatternValue(pattern, name, init) {
|
|
30
|
+
const holdsName = pattern.properties.some(function (property) {
|
|
31
|
+
return babel.isObjectProperty(property) && babel.isIdentifier(property.value) && property.value.name === name;
|
|
32
|
+
});
|
|
33
|
+
return holdsName && babel.isObjectExpression(init.expression)
|
|
34
|
+
? objectPropertyValue(init.expression, propertySourceName(pattern, name))
|
|
35
|
+
: null;
|
|
36
|
+
}
|
|
37
|
+
function arrayPatternValue(pattern, name, init) {
|
|
38
|
+
const index = pattern.elements.findIndex(function (element) {
|
|
39
|
+
return babel.isIdentifier(element) && element.name === name;
|
|
40
|
+
});
|
|
41
|
+
const element = index !== -1 && babel.isArrayExpression(init.expression)
|
|
42
|
+
? init.expression.elements[index]
|
|
43
|
+
: undefined;
|
|
44
|
+
return isExpressionNode(element) ? element : null;
|
|
45
|
+
}
|
|
46
|
+
function bindingPatternValue(id, name, init) {
|
|
47
|
+
if (babel.isObjectPattern(id)) {
|
|
48
|
+
return objectPatternValue(id, name, init);
|
|
49
|
+
}
|
|
50
|
+
return babel.isArrayPattern(id) ? arrayPatternValue(id, name, init) : null;
|
|
51
|
+
}
|
|
52
|
+
function patternBindsName(pattern, name) {
|
|
53
|
+
if (babel.isObjectPattern(pattern)) {
|
|
54
|
+
return pattern.properties.some(function (property) {
|
|
55
|
+
return babel.isObjectProperty(property) && babel.isIdentifier(property.value) &&
|
|
56
|
+
property.value.name === name;
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return babel.isArrayPattern(pattern) && pattern.elements.some(function (element) {
|
|
60
|
+
return babel.isIdentifier(element) && element.name === name;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function declaresName(declarator, name) {
|
|
64
|
+
if (babel.isIdentifier(declarator.id)) {
|
|
65
|
+
return declarator.id.name === name;
|
|
66
|
+
}
|
|
67
|
+
return patternBindsName(declarator.id, name);
|
|
68
|
+
}
|
|
69
|
+
function localDeclarators(program) {
|
|
70
|
+
return program.body.flatMap(function (statement) {
|
|
71
|
+
const declaration = babel.isExportNamedDeclaration(statement) ? statement.declaration : statement;
|
|
72
|
+
return babel.isVariableDeclaration(declaration) ? declaration.declarations : [];
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function importSpecifierEntries(program) {
|
|
76
|
+
return program.body.flatMap(function (statement) {
|
|
77
|
+
return babel.isImportDeclaration(statement)
|
|
78
|
+
? statement.specifiers.map(function (specifier) {
|
|
79
|
+
return { specifier, source: statement.source.value };
|
|
80
|
+
})
|
|
81
|
+
: [];
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
function importedExportName(specifier) {
|
|
85
|
+
if (!babel.isImportSpecifier(specifier)) {
|
|
86
|
+
return 'default';
|
|
87
|
+
}
|
|
88
|
+
return babel.isIdentifier(specifier.imported) ? specifier.imported.name : specifier.imported.value;
|
|
89
|
+
}
|
|
90
|
+
function importBindingFor(program, localName) {
|
|
91
|
+
const entry = importSpecifierEntries(program).find(function (candidate) {
|
|
92
|
+
return candidate.specifier.local.name === localName;
|
|
93
|
+
});
|
|
94
|
+
if (entry === undefined || babel.isImportNamespaceSpecifier(entry.specifier)) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
return { source: entry.source, exportName: importedExportName(entry.specifier) };
|
|
98
|
+
}
|
|
99
|
+
function defaultExportDeclaration(program) {
|
|
100
|
+
const [declaration] = program.body.flatMap(function (statement) {
|
|
101
|
+
return babel.isExportDefaultDeclaration(statement) ? [statement.declaration] : [];
|
|
102
|
+
});
|
|
103
|
+
return isExpressionNode(declaration) ? declaration : null;
|
|
104
|
+
}
|
|
105
|
+
function exportSpecifiers(program) {
|
|
106
|
+
return program
|
|
107
|
+
.body
|
|
108
|
+
.flatMap(function (statement) {
|
|
109
|
+
return babel.isExportNamedDeclaration(statement) && statement.source === null ? statement.specifiers : [];
|
|
110
|
+
})
|
|
111
|
+
.flatMap(function (specifier) {
|
|
112
|
+
return babel.isExportSpecifier(specifier) ? [specifier] : [];
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
function exportedName(specifier) {
|
|
116
|
+
return babel.isIdentifier(specifier.exported) ? specifier.exported.name : specifier.exported.value;
|
|
117
|
+
}
|
|
118
|
+
function localNameForExport(program, exportName) {
|
|
119
|
+
const specifier = exportSpecifiers(program).find(function (candidate) {
|
|
120
|
+
return exportedName(candidate) === exportName;
|
|
121
|
+
});
|
|
122
|
+
return specifier?.local.name ?? exportName;
|
|
123
|
+
}
|
|
124
|
+
function resolveMember(member, state, recurse) {
|
|
125
|
+
const name = getMemberName(member);
|
|
126
|
+
if (name === null || !isExpressionNode(member.object)) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
const object = recurse({ kind: 'expression', expression: member.object }, state);
|
|
130
|
+
if (object === null || !babel.isObjectExpression(object.expression)) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
const value = objectPropertyValue(object.expression, name);
|
|
134
|
+
return value === null
|
|
135
|
+
? null
|
|
136
|
+
: recurse({ kind: 'expression', expression: value }, { bindings: object.bindings, seen: state.seen });
|
|
137
|
+
}
|
|
138
|
+
function resolveExpressionTarget(expression, state, recurse) {
|
|
139
|
+
if (babel.isIdentifier(expression)) {
|
|
140
|
+
return recurse({ kind: 'localName', name: expression.name }, state);
|
|
141
|
+
}
|
|
142
|
+
if (babel.isMemberExpression(expression)) {
|
|
143
|
+
return resolveMember(expression, state, recurse);
|
|
144
|
+
}
|
|
145
|
+
return { expression, bindings: state.bindings };
|
|
146
|
+
}
|
|
147
|
+
function declaratorValue(declarator, name, state, recurse) {
|
|
148
|
+
if (!isExpressionNode(declarator.init)) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
const init = recurse({ kind: 'expression', expression: declarator.init }, state);
|
|
152
|
+
if (init === null || babel.isIdentifier(declarator.id) && declarator.id.name === name) {
|
|
153
|
+
return init;
|
|
154
|
+
}
|
|
155
|
+
const value = bindingPatternValue(declarator.id, name, init);
|
|
156
|
+
return value === null
|
|
157
|
+
? null
|
|
158
|
+
: recurse({ kind: 'expression', expression: value }, { bindings: init.bindings, seen: state.seen });
|
|
159
|
+
}
|
|
160
|
+
function resolveLocalTarget(name, state, recurse) {
|
|
161
|
+
const declarator = localDeclarators(state.bindings.program).find(function (candidate) {
|
|
162
|
+
return declaresName(candidate, name);
|
|
163
|
+
});
|
|
164
|
+
return declarator === undefined ? null : declaratorValue(declarator, name, state, recurse);
|
|
165
|
+
}
|
|
166
|
+
function resolveImportedTarget(name, state, recurse) {
|
|
167
|
+
const binding = importBindingFor(state.bindings.program, name);
|
|
168
|
+
if (binding === null || state.bindings.fileName === null) {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
const loaded = state.bindings.env.loadModule(binding.source, state.bindings.fileName);
|
|
172
|
+
if (loaded === null) {
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
const targetBindings = buildZodBindings(loaded.program, loaded.fileName, state.bindings.env);
|
|
176
|
+
return recurse({ kind: 'exportName', name: binding.exportName }, { bindings: targetBindings, seen: state.seen });
|
|
177
|
+
}
|
|
178
|
+
function resolveExportTarget(name, state, recurse) {
|
|
179
|
+
if (name === 'default') {
|
|
180
|
+
const declaration = defaultExportDeclaration(state.bindings.program);
|
|
181
|
+
return declaration === null ? null : recurse({ kind: 'expression', expression: declaration }, state);
|
|
182
|
+
}
|
|
183
|
+
return recurse({ kind: 'localName', name: localNameForExport(state.bindings.program, name) }, state);
|
|
184
|
+
}
|
|
185
|
+
function resolveNameTarget(name, state, recurse) {
|
|
186
|
+
const key = seenKey(state.bindings, name);
|
|
187
|
+
if (state.seen.has(key)) {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
const next = { bindings: state.bindings, seen: new Set([...state.seen, key]) };
|
|
191
|
+
return resolveLocalTarget(name, next, recurse) ?? resolveImportedTarget(name, next, recurse);
|
|
192
|
+
}
|
|
193
|
+
function resolve(target, state) {
|
|
194
|
+
if (target.kind === 'expression') {
|
|
195
|
+
return resolveExpressionTarget(target.expression, state, resolve);
|
|
196
|
+
}
|
|
197
|
+
if (target.kind === 'exportName') {
|
|
198
|
+
return resolveExportTarget(target.name, state, resolve);
|
|
199
|
+
}
|
|
200
|
+
return resolveNameTarget(target.name, state, resolve);
|
|
201
|
+
}
|
|
202
|
+
function resolveSchemaReference(bindings, name) {
|
|
203
|
+
return resolve({ kind: 'localName', name }, { bindings, seen: new Set() });
|
|
204
|
+
}
|
|
205
|
+
function resolveExpressionReference(bindings, expression) {
|
|
206
|
+
return resolve({ kind: 'expression', expression }, { bindings, seen: new Set() });
|
|
207
|
+
}
|
|
4
208
|
const freezableSchemaFactoryNames = new Set([
|
|
5
209
|
'object',
|
|
6
210
|
'strictObject',
|
|
@@ -11,6 +215,68 @@ const freezableSchemaFactoryNames = new Set([
|
|
|
11
215
|
'partialRecord',
|
|
12
216
|
'looseRecord'
|
|
13
217
|
]);
|
|
218
|
+
function underlyingSchemaExpression(bindings, call) {
|
|
219
|
+
const callName = getZodCallName(bindings, call);
|
|
220
|
+
if (callName !== null && valuePreservingWrapperNames.has(callName)) {
|
|
221
|
+
return firstExpressionArgument(call);
|
|
222
|
+
}
|
|
223
|
+
return babel.isMemberExpression(call.callee) && isExpressionNode(call.callee.object)
|
|
224
|
+
? call.callee.object
|
|
225
|
+
: null;
|
|
226
|
+
}
|
|
227
|
+
function stepFromNode(node, bindings) {
|
|
228
|
+
if (babel.isIdentifier(node)) {
|
|
229
|
+
return resolveSchemaReference(bindings, node.name);
|
|
230
|
+
}
|
|
231
|
+
if (babel.isMemberExpression(node) && !babel.isCallExpression(node)) {
|
|
232
|
+
const resolved = resolveExpressionReference(bindings, node);
|
|
233
|
+
return resolved === null || babel.isMemberExpression(resolved.expression) ? null : resolved;
|
|
234
|
+
}
|
|
235
|
+
return { expression: node, bindings };
|
|
236
|
+
}
|
|
237
|
+
function nextResolution(step) {
|
|
238
|
+
const node = step.expression;
|
|
239
|
+
if (!babel.isCallExpression(node)) {
|
|
240
|
+
return stepFromNode(node, step.bindings);
|
|
241
|
+
}
|
|
242
|
+
const next = underlyingSchemaExpression(step.bindings, node);
|
|
243
|
+
return next === null ? null : stepFromNode(next, step.bindings);
|
|
244
|
+
}
|
|
245
|
+
function* schemaChain(expression, bindings) {
|
|
246
|
+
const seen = new Set();
|
|
247
|
+
let resolution = { expression, bindings };
|
|
248
|
+
while (resolution !== null && !seen.has(resolution.expression)) {
|
|
249
|
+
seen.add(resolution.expression);
|
|
250
|
+
if (babel.isCallExpression(resolution.expression)) {
|
|
251
|
+
yield { node: resolution.expression, bindings: resolution.bindings };
|
|
252
|
+
}
|
|
253
|
+
resolution = nextResolution(resolution);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
function isFreezableFactoryCall(step) {
|
|
257
|
+
const callName = getZodCallName(step.bindings, step.node);
|
|
258
|
+
return callName !== null && freezableSchemaFactoryNames.has(callName);
|
|
259
|
+
}
|
|
260
|
+
export function producesFreezableValue(bindings, expression) {
|
|
261
|
+
return Array.from(schemaChain(expression, bindings)).some(isFreezableFactoryCall);
|
|
262
|
+
}
|
|
263
|
+
export function resolvesToZodSchema(bindings, expression) {
|
|
264
|
+
return Array.from(schemaChain(expression, bindings)).some(function (step) {
|
|
265
|
+
return getZodCallName(step.bindings, step.node) !== null;
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
export function isZodSchemaOrReference(bindings, expression) {
|
|
269
|
+
return isZodSchemaExpression(bindings, expression) || resolvesToZodSchema(bindings, expression);
|
|
270
|
+
}
|
|
271
|
+
function appliesReadonly(step) {
|
|
272
|
+
return getZodCallName(step.bindings, step.node) === 'readonly' || getMemberName(step.node.callee) === 'readonly';
|
|
273
|
+
}
|
|
274
|
+
export function chainAppliesReadonly(bindings, expression) {
|
|
275
|
+
return Array.from(schemaChain(expression, bindings)).some(appliesReadonly);
|
|
276
|
+
}
|
|
277
|
+
function schemaName(step) {
|
|
278
|
+
return getZodCallName(step.bindings, step.node) ?? getMemberName(step.node.callee) ?? '';
|
|
279
|
+
}
|
|
14
280
|
// A wrapper that re-restricts presence: `nonoptional` passes `null` through unchanged but rejects
|
|
15
281
|
// `undefined`, so it is transparent when reasoning about `null` yet breaks reasoning about `undefined`.
|
|
16
282
|
const presenceRestrictingWrappers = new Set(['nonoptional']);
|
|
@@ -43,4 +309,24 @@ const presenceAcceptanceByWrapper = new Map([
|
|
|
43
309
|
}
|
|
44
310
|
]
|
|
45
311
|
]);
|
|
312
|
+
function chainAcceptsBefore(bindings, expression, alreadyAccepting, transparent) {
|
|
313
|
+
for (const step of schemaChain(expression, bindings)) {
|
|
314
|
+
const name = schemaName(step);
|
|
315
|
+
if (alreadyAccepting.has(name)) {
|
|
316
|
+
return true;
|
|
317
|
+
}
|
|
318
|
+
if (!transparent.has(name)) {
|
|
319
|
+
return false;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
return false;
|
|
323
|
+
}
|
|
324
|
+
export function resolvesToAcceptAnything(bindings, expression) {
|
|
325
|
+
return chainAcceptsBefore(bindings, expression, new Set(['any', 'unknown']), acceptAnythingPreservingWrappers);
|
|
326
|
+
}
|
|
327
|
+
export function addingWrapperHasNoEffect(bindings, expression, wrapperName) {
|
|
328
|
+
const acceptance = presenceAcceptanceByWrapper.get(wrapperName);
|
|
329
|
+
return acceptance !== undefined &&
|
|
330
|
+
chainAcceptsBefore(bindings, expression, acceptance.alreadyAccepting, acceptance.transparent);
|
|
331
|
+
}
|
|
46
332
|
//# sourceMappingURL=binding-resolution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binding-resolution.js","sourceRoot":"","sources":["../../../../source/stryker-zod-mutator/binding-resolution.ts"],"names":[],"mappings":"AAAA,OAAuB,cAAc,CAAC;AAEtC,OAA4F,UAAU,CAAC;AACvG,OAAO,EAKH,2BAA2B,EAE9B,MAAM,mBAAmB,CAAC;AAWpB,MAuBP,CACI,0BA+S6B,GAAG,IAAI,GAAG,CAAC;IACxC,QAAQ;IACR,cAAc;IACd,aAAa;IACb,OAAO;IACP,OAAO;IACP,QAAQ;IACR,eAAe;IACf,aAAa;CAChB,CAAC,CAAC;AAuFH,kGAAkG;AAClG,wGAAwG;AACxG,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAAC,CAAE,aAAa,CAAE,CAAC,CAAC;AAE/D,MAAM,gCAAgC,GAAG,IAAI,GAAG,CAC5C,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI;IACzD,OAAO,CAAC,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC,CAAC,CACL,CAAC;AAOF,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAA6B;IACpE;QACI,UAAU;QACV;YACI,gBAAgB,EAAE,IAAI,GAAG,CAAC,CAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAE,CAAC;YAC9E,WAAW,EAAE,2BAA2B;SAC3C;KACJ;IACD;QACI,UAAU;QACV;YACI,gBAAgB,EAAE,IAAI,GAAG,CAAC;gBACtB,UAAU;gBACV,SAAS;gBACT,WAAW;gBACX,MAAM;gBACN,SAAS;gBACT,UAAU;gBACV,UAAU;gBACV,KAAK;gBACL,SAAS;aACZ,CAAC;YACF,WAAW,EAAE,gCAAgC;SAChD;KACJ;CACJ,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"binding-resolution.js","sourceRoot":"","sources":["../../../../source/stryker-zod-mutator/binding-resolution.ts"],"names":[],"mappings":"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"}
|