@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.
Files changed (41) hide show
  1. package/package.json +4 -1
  2. package/readme.md +5 -0
  3. package/sbom.cdx.json +5 -5
  4. package/stryker-zod-mutator/ast.js +88 -1
  5. package/stryker-zod-mutator/ast.js.map +1 -1
  6. package/stryker-zod-mutator/behavior-mutations.js +70 -6
  7. package/stryker-zod-mutator/behavior-mutations.js.map +1 -1
  8. package/stryker-zod-mutator/binding-resolution.js +289 -3
  9. package/stryker-zod-mutator/binding-resolution.js.map +1 -1
  10. package/stryker-zod-mutator/check-mutations.js +153 -5
  11. package/stryker-zod-mutator/check-mutations.js.map +1 -1
  12. package/stryker-zod-mutator/collection-mutations.js +159 -5
  13. package/stryker-zod-mutator/collection-mutations.js.map +1 -1
  14. package/stryker-zod-mutator/declarator-init-id.js +12 -2
  15. package/stryker-zod-mutator/declarator-init-id.js.map +1 -1
  16. package/stryker-zod-mutator/filesystem-module-loader.js +61 -2
  17. package/stryker-zod-mutator/filesystem-module-loader.js.map +1 -1
  18. package/stryker-zod-mutator/masked-schema-references.js +114 -4
  19. package/stryker-zod-mutator/masked-schema-references.js.map +1 -1
  20. package/stryker-zod-mutator/mutation-catalog.js +16 -7
  21. package/stryker-zod-mutator/mutation-catalog.js.map +1 -1
  22. package/stryker-zod-mutator/mutation-definition.js +16 -2
  23. package/stryker-zod-mutator/mutation-definition.js.map +1 -1
  24. package/stryker-zod-mutator/mutations.js +16 -3
  25. package/stryker-zod-mutator/mutations.js.map +1 -1
  26. package/stryker-zod-mutator/object-mutations.js +114 -6
  27. package/stryker-zod-mutator/object-mutations.js.map +1 -1
  28. package/stryker-zod-mutator/operator.js +95 -0
  29. package/stryker-zod-mutator/operator.js.map +1 -1
  30. package/stryker-zod-mutator/presence-mutations.js +83 -6
  31. package/stryker-zod-mutator/presence-mutations.js.map +1 -1
  32. package/stryker-zod-mutator/primitive-mutations.js +33 -2
  33. package/stryker-zod-mutator/primitive-mutations.js.map +1 -1
  34. package/stryker-zod-mutator/reference-mutations.js +58 -4
  35. package/stryker-zod-mutator/reference-mutations.js.map +1 -1
  36. package/stryker-zod-mutator/registry.js +50 -2
  37. package/stryker-zod-mutator/registry.js.map +1 -1
  38. package/stryker-zod-mutator/schema-call-mutations.js +93 -6
  39. package/stryker-zod-mutator/schema-call-mutations.js.map +1 -1
  40. package/stryker-zod-mutator/zod-bindings.js +221 -3
  41. 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.16"
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.98"
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.16",
20
- "bom-ref": "pkg:npm/@schema-hub/stryker-zod-mutator@0.0.16",
21
- "purl": "pkg:npm/@schema-hub/stryker-zod-mutator@0.0.16"
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.16",
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,OAAuB,cAAc,CAAC"}
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,OAAuB,cAAc,CAAC;AAEtC,OAAsE,UAAU,CAAC;AACjF,OAAoE,0BAA0B,CAAC;AAC/F,OAAoD,4BAA4B,CAAC;AACjF,OAMO,mBAAmB,CAAC;AAE3B,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAE,CAAC,CAAC;AACpF,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC,CAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAE,CAAC,CAAC"}
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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"}