@schema-hub/stryker-zod-mutator 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/LICENSE +21 -0
- package/package.json +44 -6
- package/readme.md +171 -5
- package/sbom.cdx.json +84 -0
- package/stryker-zod-mutator/ast.js +75 -0
- package/stryker-zod-mutator/ast.js.map +1 -0
- package/stryker-zod-mutator/behavior-mutations.js +64 -0
- package/stryker-zod-mutator/behavior-mutations.js.map +1 -0
- package/stryker-zod-mutator/check-mutations.js +159 -0
- package/stryker-zod-mutator/check-mutations.js.map +1 -0
- package/stryker-zod-mutator/collection-mutations.js +153 -0
- package/stryker-zod-mutator/collection-mutations.js.map +1 -0
- package/stryker-zod-mutator/entry-point.d.ts +11 -0
- package/stryker-zod-mutator/entry-point.d.ts.map +1 -0
- package/stryker-zod-mutator/entry-point.js +19 -0
- package/stryker-zod-mutator/entry-point.js.map +1 -0
- package/stryker-zod-mutator/mutation-definition.js +17 -0
- package/stryker-zod-mutator/mutation-definition.js.map +1 -0
- package/stryker-zod-mutator/mutations.js +24 -0
- package/stryker-zod-mutator/mutations.js.map +1 -0
- package/stryker-zod-mutator/object-mutations.js +96 -0
- package/stryker-zod-mutator/object-mutations.js.map +1 -0
- package/stryker-zod-mutator/operator.d.ts +6 -0
- package/stryker-zod-mutator/operator.d.ts.map +1 -0
- package/stryker-zod-mutator/operator.js +93 -0
- package/stryker-zod-mutator/operator.js.map +1 -0
- package/stryker-zod-mutator/presence-mutations.js +35 -0
- package/stryker-zod-mutator/presence-mutations.js.map +1 -0
- package/stryker-zod-mutator/primitive-mutations.js +27 -0
- package/stryker-zod-mutator/primitive-mutations.js.map +1 -0
- package/stryker-zod-mutator/registry.js +59 -0
- package/stryker-zod-mutator/registry.js.map +1 -0
- package/stryker-zod-mutator/schema-call-mutations.js +81 -0
- package/stryker-zod-mutator/schema-call-mutations.js.map +1 -0
- package/stryker-zod-mutator/zod-bindings.js +222 -0
- package/stryker-zod-mutator/zod-bindings.js.map +1 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import * as babel from '@babel/types';
|
|
2
|
+
import { cloneExpression, getCallName, getMemberName, isExpressionNode, memberCall } from "./ast.js";
|
|
3
|
+
import { callNode } from "./mutation-definition.js";
|
|
4
|
+
import { buildZodCall, expressionStyle, firstExpressionArgument, getZodCallName, isZodSchemaExpression } from "./zod-bindings.js";
|
|
5
|
+
export function removeMethod(call, bindings, methodNames) {
|
|
6
|
+
if (!babel.isMemberExpression(call.callee)) {
|
|
7
|
+
return [];
|
|
8
|
+
}
|
|
9
|
+
const methodName = getMemberName(call.callee);
|
|
10
|
+
const { object } = call.callee;
|
|
11
|
+
if (methodName === null || !methodNames.has(methodName) || !isExpressionNode(object)) {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
return isZodSchemaExpression(bindings, object) ? [cloneExpression(object)] : [];
|
|
15
|
+
}
|
|
16
|
+
function removeWrapper(call, bindings, wrapperNames) {
|
|
17
|
+
const callName = getZodCallName(bindings, call);
|
|
18
|
+
const schema = firstExpressionArgument(call);
|
|
19
|
+
if (callName === null || schema === null || !wrapperNames.has(callName)) {
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
return isZodSchemaExpression(bindings, schema) ? [cloneExpression(schema)] : [];
|
|
23
|
+
}
|
|
24
|
+
export function removeMethodOrWrapper(path, bindings, names) {
|
|
25
|
+
const call = callNode(path);
|
|
26
|
+
if (call === null) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
return [...removeMethod(call, bindings, names), ...removeWrapper(call, bindings, names)];
|
|
30
|
+
}
|
|
31
|
+
function zodSchemaExpression(path, bindings) {
|
|
32
|
+
return isExpressionNode(path.node) && isZodSchemaExpression(bindings, path.node)
|
|
33
|
+
? path.node
|
|
34
|
+
: null;
|
|
35
|
+
}
|
|
36
|
+
function buildWrapperMutation(bindings, expression, style, name) {
|
|
37
|
+
if (style === 'classic') {
|
|
38
|
+
return [memberCall(cloneExpression(expression), name, [])];
|
|
39
|
+
}
|
|
40
|
+
const wrapped = buildZodCall(bindings, style, name, [cloneExpression(expression)]);
|
|
41
|
+
return wrapped === null ? [] : [wrapped];
|
|
42
|
+
}
|
|
43
|
+
export function addWrapperOrMethod(path, bindings, name) {
|
|
44
|
+
const expression = zodSchemaExpression(path, bindings);
|
|
45
|
+
const style = expression === null ? null : expressionStyle(bindings, expression);
|
|
46
|
+
if (expression === null ||
|
|
47
|
+
style === null ||
|
|
48
|
+
babel.isCallExpression(expression) && getCallName(expression.callee) === name) {
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
return buildWrapperMutation(bindings, expression, style, name);
|
|
52
|
+
}
|
|
53
|
+
function replaceNullishMethod(call, bindings, replacementName) {
|
|
54
|
+
if (!babel.isMemberExpression(call.callee) || getMemberName(call.callee) !== 'nullish') {
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
const { object } = call.callee;
|
|
58
|
+
return isExpressionNode(object) && isZodSchemaExpression(bindings, object)
|
|
59
|
+
? [memberCall(cloneExpression(object), replacementName, [])]
|
|
60
|
+
: [];
|
|
61
|
+
}
|
|
62
|
+
function replaceNullishWrapper(call, bindings, replacementName) {
|
|
63
|
+
const schema = firstExpressionArgument(call);
|
|
64
|
+
const style = expressionStyle(bindings, call);
|
|
65
|
+
if (getZodCallName(bindings, call) !== 'nullish' || schema === null || style === null) {
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
const replacement = buildZodCall(bindings, style, replacementName, [cloneExpression(schema)]);
|
|
69
|
+
return replacement === null ? [] : [replacement];
|
|
70
|
+
}
|
|
71
|
+
export function replaceNullish(path, bindings, replacementName) {
|
|
72
|
+
const call = callNode(path);
|
|
73
|
+
if (call === null) {
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
const methodMutations = replaceNullishMethod(call, bindings, replacementName);
|
|
77
|
+
return methodMutations.length > 0
|
|
78
|
+
? methodMutations
|
|
79
|
+
: replaceNullishWrapper(call, bindings, replacementName);
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=schema-call-mutations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-call-mutations.js","sourceRoot":"","sources":["../../../../source/stryker-zod-mutator/schema-call-mutations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import * as babel from '@babel/types';
|
|
2
|
+
import { findProgram, getMemberName, isExpressionNode } from "./ast.js";
|
|
3
|
+
const zodSourceStyles = new Map([
|
|
4
|
+
['zod', 'classic'],
|
|
5
|
+
['zod/v4', 'classic'],
|
|
6
|
+
['zod/mini', 'mini'],
|
|
7
|
+
['zod/v4-mini', 'mini'],
|
|
8
|
+
['zod/v4/mini', 'mini']
|
|
9
|
+
]);
|
|
10
|
+
export const primitiveFactoryNames = [
|
|
11
|
+
'string',
|
|
12
|
+
'number',
|
|
13
|
+
'bigint',
|
|
14
|
+
'boolean',
|
|
15
|
+
'date',
|
|
16
|
+
'symbol',
|
|
17
|
+
'null',
|
|
18
|
+
'undefined',
|
|
19
|
+
'void',
|
|
20
|
+
'never',
|
|
21
|
+
'any',
|
|
22
|
+
'unknown'
|
|
23
|
+
];
|
|
24
|
+
const schemaFactoryNames = new Set([
|
|
25
|
+
...primitiveFactoryNames,
|
|
26
|
+
'object',
|
|
27
|
+
'strictObject',
|
|
28
|
+
'looseObject',
|
|
29
|
+
'array',
|
|
30
|
+
'tuple',
|
|
31
|
+
'record',
|
|
32
|
+
'partialRecord',
|
|
33
|
+
'looseRecord',
|
|
34
|
+
'union',
|
|
35
|
+
'discriminatedUnion',
|
|
36
|
+
'enum',
|
|
37
|
+
'literal',
|
|
38
|
+
'optional',
|
|
39
|
+
'nullable',
|
|
40
|
+
'nullish',
|
|
41
|
+
'nonoptional',
|
|
42
|
+
'readonly',
|
|
43
|
+
'_default',
|
|
44
|
+
'prefault',
|
|
45
|
+
'catch',
|
|
46
|
+
'email',
|
|
47
|
+
'url',
|
|
48
|
+
'uuid',
|
|
49
|
+
'ulid',
|
|
50
|
+
'cuid',
|
|
51
|
+
'cuid2',
|
|
52
|
+
'nanoid',
|
|
53
|
+
'emoji',
|
|
54
|
+
'ipv4',
|
|
55
|
+
'ipv6',
|
|
56
|
+
'iso'
|
|
57
|
+
]);
|
|
58
|
+
function getImportedName(specifier) {
|
|
59
|
+
return babel.isIdentifier(specifier.imported)
|
|
60
|
+
? specifier.imported.name
|
|
61
|
+
: specifier.imported.value;
|
|
62
|
+
}
|
|
63
|
+
function readZodImportSpecifier(style, specifier) {
|
|
64
|
+
if (specifier.type === 'ImportNamespaceSpecifier' || specifier.type === 'ImportDefaultSpecifier') {
|
|
65
|
+
return { namespaces: [{ name: specifier.local.name, style }], directBindings: [] };
|
|
66
|
+
}
|
|
67
|
+
const importedName = getImportedName(specifier);
|
|
68
|
+
return importedName === 'z'
|
|
69
|
+
? { namespaces: [{ name: specifier.local.name, style }], directBindings: [] }
|
|
70
|
+
: {
|
|
71
|
+
namespaces: [],
|
|
72
|
+
directBindings: [{ localName: specifier.local.name, importedName, style }]
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function readZodImport(statement) {
|
|
76
|
+
const style = babel.isImportDeclaration(statement)
|
|
77
|
+
? zodSourceStyles.get(statement.source.value)
|
|
78
|
+
: undefined;
|
|
79
|
+
if (!babel.isImportDeclaration(statement) || style === undefined) {
|
|
80
|
+
return { namespaces: [], directBindings: [] };
|
|
81
|
+
}
|
|
82
|
+
const bindings = statement.specifiers.map(function (specifier) {
|
|
83
|
+
return readZodImportSpecifier(style, specifier);
|
|
84
|
+
});
|
|
85
|
+
return {
|
|
86
|
+
namespaces: bindings.flatMap(function (binding) {
|
|
87
|
+
return binding.namespaces;
|
|
88
|
+
}),
|
|
89
|
+
directBindings: bindings.flatMap(function (binding) {
|
|
90
|
+
return binding.directBindings;
|
|
91
|
+
})
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export function readZodBindings(path) {
|
|
95
|
+
const program = findProgram(path);
|
|
96
|
+
const imports = program?.body.map(readZodImport) ?? [];
|
|
97
|
+
return {
|
|
98
|
+
namespaces: imports.flatMap(function (binding) {
|
|
99
|
+
return binding.namespaces;
|
|
100
|
+
}),
|
|
101
|
+
directBindings: imports.flatMap(function (binding) {
|
|
102
|
+
return binding.directBindings;
|
|
103
|
+
})
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
export function getDirectBinding(bindings, localName) {
|
|
107
|
+
return bindings.directBindings.find(function (binding) {
|
|
108
|
+
return binding.localName === localName;
|
|
109
|
+
}) ?? null;
|
|
110
|
+
}
|
|
111
|
+
export function getNamespaceStyle(bindings, localName) {
|
|
112
|
+
return bindings
|
|
113
|
+
.namespaces
|
|
114
|
+
.find(function (binding) {
|
|
115
|
+
return binding.name === localName;
|
|
116
|
+
})
|
|
117
|
+
?.style ?? null;
|
|
118
|
+
}
|
|
119
|
+
export function isZodNamespaceMember(bindings, expression) {
|
|
120
|
+
if (!babel.isMemberExpression(expression) || !babel.isIdentifier(expression.object)) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
return getNamespaceStyle(bindings, expression.object.name) !== null;
|
|
124
|
+
}
|
|
125
|
+
function getCoerceNamespaceName(call) {
|
|
126
|
+
if (!babel.isMemberExpression(call.callee) || !babel.isMemberExpression(call.callee.object)) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
const { object } = call.callee;
|
|
130
|
+
return getMemberName(object) === 'coerce' && babel.isIdentifier(object.object)
|
|
131
|
+
? object.object.name
|
|
132
|
+
: null;
|
|
133
|
+
}
|
|
134
|
+
export function isCoerceCall(bindings, call) {
|
|
135
|
+
const namespaceName = getCoerceNamespaceName(call);
|
|
136
|
+
return namespaceName !== null && getNamespaceStyle(bindings, namespaceName) !== null;
|
|
137
|
+
}
|
|
138
|
+
export function getZodCallName(bindings, call) {
|
|
139
|
+
if (babel.isIdentifier(call.callee)) {
|
|
140
|
+
return getDirectBinding(bindings, call.callee.name)?.importedName ?? null;
|
|
141
|
+
}
|
|
142
|
+
if (isZodNamespaceMember(bindings, call.callee)) {
|
|
143
|
+
return getMemberName(call.callee);
|
|
144
|
+
}
|
|
145
|
+
if (isCoerceCall(bindings, call)) {
|
|
146
|
+
return getMemberName(call.callee);
|
|
147
|
+
}
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
function getCoerceCallStyle(bindings, call) {
|
|
151
|
+
const namespaceName = getCoerceNamespaceName(call);
|
|
152
|
+
return namespaceName === null ? null : getNamespaceStyle(bindings, namespaceName);
|
|
153
|
+
}
|
|
154
|
+
export function getZodCallStyle(bindings, call) {
|
|
155
|
+
if (babel.isIdentifier(call.callee)) {
|
|
156
|
+
return getDirectBinding(bindings, call.callee.name)?.style ?? null;
|
|
157
|
+
}
|
|
158
|
+
if (babel.isMemberExpression(call.callee) && babel.isIdentifier(call.callee.object)) {
|
|
159
|
+
return getNamespaceStyle(bindings, call.callee.object.name);
|
|
160
|
+
}
|
|
161
|
+
return getCoerceCallStyle(bindings, call);
|
|
162
|
+
}
|
|
163
|
+
export function isZodSchemaExpression(bindings, expression) {
|
|
164
|
+
if (!babel.isCallExpression(expression)) {
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
const callName = getZodCallName(bindings, expression);
|
|
168
|
+
if (callName !== null) {
|
|
169
|
+
return schemaFactoryNames.has(callName);
|
|
170
|
+
}
|
|
171
|
+
if (!babel.isMemberExpression(expression.callee)) {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
const { object } = expression.callee;
|
|
175
|
+
return isExpressionNode(object) && isZodSchemaExpression(bindings, object);
|
|
176
|
+
}
|
|
177
|
+
export function expressionStyle(bindings, expression) {
|
|
178
|
+
let currentExpression = expression;
|
|
179
|
+
for (;;) {
|
|
180
|
+
if (!babel.isCallExpression(currentExpression)) {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
const directStyle = getZodCallStyle(bindings, currentExpression);
|
|
184
|
+
if (directStyle !== null) {
|
|
185
|
+
return directStyle;
|
|
186
|
+
}
|
|
187
|
+
if (!babel.isMemberExpression(currentExpression.callee) || !isExpressionNode(currentExpression.callee.object)) {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
currentExpression = currentExpression.callee.object;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
export function buildZodCall(bindings, style, name, args) {
|
|
194
|
+
const namespace = bindings.namespaces.find(function (binding) {
|
|
195
|
+
return binding.style === style;
|
|
196
|
+
});
|
|
197
|
+
if (namespace !== undefined) {
|
|
198
|
+
return babel.callExpression(babel.memberExpression(babel.identifier(namespace.name), babel.identifier(name)), Array.from(args));
|
|
199
|
+
}
|
|
200
|
+
const direct = bindings.directBindings.find(function (binding) {
|
|
201
|
+
return binding.style === style && binding.importedName === name;
|
|
202
|
+
});
|
|
203
|
+
if (direct !== undefined) {
|
|
204
|
+
return babel.callExpression(babel.identifier(direct.localName), Array.from(args));
|
|
205
|
+
}
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
export function replaceZodCallee(bindings, call, replacementName) {
|
|
209
|
+
const style = getZodCallStyle(bindings, call);
|
|
210
|
+
if (style === null) {
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
return buildZodCall(bindings, style, replacementName, call.arguments.filter(isExpressionNode));
|
|
214
|
+
}
|
|
215
|
+
export function firstExpressionArgument(call) {
|
|
216
|
+
const argument = call.arguments[0];
|
|
217
|
+
return argument !== undefined && isExpressionNode(argument) ? argument : null;
|
|
218
|
+
}
|
|
219
|
+
export function isObjectLikeFactory(name) {
|
|
220
|
+
return ['object', 'strictObject', 'looseObject'].includes(name);
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=zod-bindings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zod-bindings.js","sourceRoot":"","sources":["../../../../source/stryker-zod-mutator/zod-bindings.ts"],"names":[],"mappings":"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"}
|