@nocobase/plugin-workflow-javascript 2.1.0-alpha.12 → 2.1.0-alpha.14

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 (145) hide show
  1. package/dist/client/index.js +1 -1
  2. package/dist/externalVersion.js +4 -4
  3. package/dist/node_modules/isolated-vm/.clang-tidy +13 -0
  4. package/dist/node_modules/isolated-vm/.dockerignore +9 -0
  5. package/dist/node_modules/isolated-vm/Dockerfile.alpine +9 -0
  6. package/dist/node_modules/isolated-vm/Dockerfile.debian +12 -0
  7. package/dist/node_modules/isolated-vm/LICENSE +13 -0
  8. package/dist/node_modules/isolated-vm/binding.gyp +120 -0
  9. package/dist/node_modules/isolated-vm/include.js +3 -0
  10. package/dist/node_modules/isolated-vm/inspector-example.js +59 -0
  11. package/dist/node_modules/isolated-vm/isolated-vm.d.ts +820 -0
  12. package/dist/node_modules/isolated-vm/isolated-vm.js +1 -0
  13. package/dist/node_modules/isolated-vm/native-example/binding.gyp +23 -0
  14. package/dist/node_modules/isolated-vm/native-example/example.cc +61 -0
  15. package/dist/node_modules/isolated-vm/native-example/package.json +13 -0
  16. package/dist/node_modules/isolated-vm/native-example/usage.js +35 -0
  17. package/dist/node_modules/isolated-vm/out/isolated_vm.node +0 -0
  18. package/dist/node_modules/isolated-vm/package.json +1 -0
  19. package/dist/node_modules/isolated-vm/src/external_copy/error.h +33 -0
  20. package/dist/node_modules/isolated-vm/src/external_copy/external_copy.cc +509 -0
  21. package/dist/node_modules/isolated-vm/src/external_copy/external_copy.h +117 -0
  22. package/dist/node_modules/isolated-vm/src/external_copy/serializer.cc +85 -0
  23. package/dist/node_modules/isolated-vm/src/external_copy/serializer.h +136 -0
  24. package/dist/node_modules/isolated-vm/src/external_copy/serializer_nortti.cc +73 -0
  25. package/dist/node_modules/isolated-vm/src/external_copy/string.cc +124 -0
  26. package/dist/node_modules/isolated-vm/src/external_copy/string.h +28 -0
  27. package/dist/node_modules/isolated-vm/src/isolate/allocator.h +32 -0
  28. package/dist/node_modules/isolated-vm/src/isolate/allocator_nortti.cc +142 -0
  29. package/dist/node_modules/isolated-vm/src/isolate/class_handle.h +334 -0
  30. package/dist/node_modules/isolated-vm/src/isolate/cpu_profile_manager.cc +220 -0
  31. package/dist/node_modules/isolated-vm/src/isolate/cpu_profile_manager.h +100 -0
  32. package/dist/node_modules/isolated-vm/src/isolate/environment.cc +626 -0
  33. package/dist/node_modules/isolated-vm/src/isolate/environment.h +381 -0
  34. package/dist/node_modules/isolated-vm/src/isolate/executor.cc +198 -0
  35. package/dist/node_modules/isolated-vm/src/isolate/executor.h +183 -0
  36. package/dist/node_modules/isolated-vm/src/isolate/external.h +64 -0
  37. package/dist/node_modules/isolated-vm/src/isolate/functor_runners.h +97 -0
  38. package/dist/node_modules/isolated-vm/src/isolate/generic/array.h +145 -0
  39. package/dist/node_modules/isolated-vm/src/isolate/generic/callbacks.h +272 -0
  40. package/dist/node_modules/isolated-vm/src/isolate/generic/error.h +140 -0
  41. package/dist/node_modules/isolated-vm/src/isolate/generic/extract_params.h +145 -0
  42. package/dist/node_modules/isolated-vm/src/isolate/generic/handle_cast.h +257 -0
  43. package/dist/node_modules/isolated-vm/src/isolate/generic/read_option.h +47 -0
  44. package/dist/node_modules/isolated-vm/src/isolate/holder.cc +88 -0
  45. package/dist/node_modules/isolated-vm/src/isolate/holder.h +63 -0
  46. package/dist/node_modules/isolated-vm/src/isolate/inspector.cc +200 -0
  47. package/dist/node_modules/isolated-vm/src/isolate/inspector.h +70 -0
  48. package/dist/node_modules/isolated-vm/src/isolate/node_wrapper.h +15 -0
  49. package/dist/node_modules/isolated-vm/src/isolate/platform_delegate.cc +22 -0
  50. package/dist/node_modules/isolated-vm/src/isolate/platform_delegate.h +46 -0
  51. package/dist/node_modules/isolated-vm/src/isolate/remote_handle.h +164 -0
  52. package/dist/node_modules/isolated-vm/src/isolate/run_with_timeout.h +171 -0
  53. package/dist/node_modules/isolated-vm/src/isolate/runnable.h +29 -0
  54. package/dist/node_modules/isolated-vm/src/isolate/scheduler.cc +191 -0
  55. package/dist/node_modules/isolated-vm/src/isolate/scheduler.h +165 -0
  56. package/dist/node_modules/isolated-vm/src/isolate/specific.h +35 -0
  57. package/dist/node_modules/isolated-vm/src/isolate/stack_trace.cc +219 -0
  58. package/dist/node_modules/isolated-vm/src/isolate/stack_trace.h +24 -0
  59. package/dist/node_modules/isolated-vm/src/isolate/strings.h +127 -0
  60. package/dist/node_modules/isolated-vm/src/isolate/three_phase_task.cc +385 -0
  61. package/dist/node_modules/isolated-vm/src/isolate/three_phase_task.h +136 -0
  62. package/dist/node_modules/isolated-vm/src/isolate/transferable.h +15 -0
  63. package/dist/node_modules/isolated-vm/src/isolate/util.h +45 -0
  64. package/dist/node_modules/isolated-vm/src/isolate/v8_inspector_wrapper.h +12 -0
  65. package/dist/node_modules/isolated-vm/src/isolate/v8_version.h +12 -0
  66. package/dist/node_modules/isolated-vm/src/isolated_vm.h +71 -0
  67. package/dist/node_modules/isolated-vm/src/lib/covariant.h +50 -0
  68. package/dist/node_modules/isolated-vm/src/lib/lockable.h +178 -0
  69. package/dist/node_modules/isolated-vm/src/lib/suspend.h +106 -0
  70. package/dist/node_modules/isolated-vm/src/lib/thread_pool.cc +98 -0
  71. package/dist/node_modules/isolated-vm/src/lib/thread_pool.h +45 -0
  72. package/dist/node_modules/isolated-vm/src/lib/timer.cc +233 -0
  73. package/dist/node_modules/isolated-vm/src/lib/timer.h +36 -0
  74. package/dist/node_modules/isolated-vm/src/module/callback.cc +151 -0
  75. package/dist/node_modules/isolated-vm/src/module/callback.h +64 -0
  76. package/dist/node_modules/isolated-vm/src/module/context_handle.cc +241 -0
  77. package/dist/node_modules/isolated-vm/src/module/context_handle.h +35 -0
  78. package/dist/node_modules/isolated-vm/src/module/evaluation.cc +109 -0
  79. package/dist/node_modules/isolated-vm/src/module/evaluation.h +99 -0
  80. package/dist/node_modules/isolated-vm/src/module/external_copy_handle.cc +119 -0
  81. package/dist/node_modules/isolated-vm/src/module/external_copy_handle.h +64 -0
  82. package/dist/node_modules/isolated-vm/src/module/isolate.cc +136 -0
  83. package/dist/node_modules/isolated-vm/src/module/isolate_handle.cc +611 -0
  84. package/dist/node_modules/isolated-vm/src/module/isolate_handle.h +47 -0
  85. package/dist/node_modules/isolated-vm/src/module/lib_handle.cc +77 -0
  86. package/dist/node_modules/isolated-vm/src/module/lib_handle.h +28 -0
  87. package/dist/node_modules/isolated-vm/src/module/module_handle.cc +475 -0
  88. package/dist/node_modules/isolated-vm/src/module/module_handle.h +68 -0
  89. package/dist/node_modules/isolated-vm/src/module/native_module_handle.cc +104 -0
  90. package/dist/node_modules/isolated-vm/src/module/native_module_handle.h +49 -0
  91. package/dist/node_modules/isolated-vm/src/module/reference_handle.cc +636 -0
  92. package/dist/node_modules/isolated-vm/src/module/reference_handle.h +106 -0
  93. package/dist/node_modules/isolated-vm/src/module/script_handle.cc +107 -0
  94. package/dist/node_modules/isolated-vm/src/module/script_handle.h +37 -0
  95. package/dist/node_modules/isolated-vm/src/module/session_handle.cc +173 -0
  96. package/dist/node_modules/isolated-vm/src/module/session_handle.h +31 -0
  97. package/dist/node_modules/isolated-vm/src/module/transferable.cc +268 -0
  98. package/dist/node_modules/isolated-vm/src/module/transferable.h +42 -0
  99. package/dist/node_modules/isolated-vm/vendor/v8_inspector/nodejs_v18.0.0.h +360 -0
  100. package/dist/node_modules/isolated-vm/vendor/v8_inspector/nodejs_v18.3.0.h +376 -0
  101. package/dist/node_modules/isolated-vm/vendor/v8_inspector/nodejs_v20.0.0.h +397 -0
  102. package/dist/node_modules/isolated-vm/vendor/v8_inspector/nodejs_v22.0.0.h +419 -0
  103. package/dist/node_modules/joi/dist/joi-browser.min.js +1 -0
  104. package/dist/node_modules/joi/lib/annotate.js +175 -0
  105. package/dist/node_modules/joi/lib/base.js +1069 -0
  106. package/dist/node_modules/joi/lib/cache.js +143 -0
  107. package/dist/node_modules/joi/lib/common.js +216 -0
  108. package/dist/node_modules/joi/lib/compile.js +283 -0
  109. package/dist/node_modules/joi/lib/errors.js +271 -0
  110. package/dist/node_modules/joi/lib/extend.js +312 -0
  111. package/dist/node_modules/joi/lib/index.d.ts +2365 -0
  112. package/dist/node_modules/joi/lib/index.js +1 -0
  113. package/dist/node_modules/joi/lib/manifest.js +476 -0
  114. package/dist/node_modules/joi/lib/messages.js +178 -0
  115. package/dist/node_modules/joi/lib/modify.js +267 -0
  116. package/dist/node_modules/joi/lib/ref.js +414 -0
  117. package/dist/node_modules/joi/lib/schemas.js +302 -0
  118. package/dist/node_modules/joi/lib/state.js +166 -0
  119. package/dist/node_modules/joi/lib/template.js +463 -0
  120. package/dist/node_modules/joi/lib/trace.js +346 -0
  121. package/dist/node_modules/joi/lib/types/alternatives.js +364 -0
  122. package/dist/node_modules/joi/lib/types/any.js +174 -0
  123. package/dist/node_modules/joi/lib/types/array.js +809 -0
  124. package/dist/node_modules/joi/lib/types/binary.js +100 -0
  125. package/dist/node_modules/joi/lib/types/boolean.js +150 -0
  126. package/dist/node_modules/joi/lib/types/date.js +233 -0
  127. package/dist/node_modules/joi/lib/types/function.js +93 -0
  128. package/dist/node_modules/joi/lib/types/keys.js +1067 -0
  129. package/dist/node_modules/joi/lib/types/link.js +168 -0
  130. package/dist/node_modules/joi/lib/types/number.js +363 -0
  131. package/dist/node_modules/joi/lib/types/object.js +22 -0
  132. package/dist/node_modules/joi/lib/types/string.js +850 -0
  133. package/dist/node_modules/joi/lib/types/symbol.js +102 -0
  134. package/dist/node_modules/joi/lib/validator.js +750 -0
  135. package/dist/node_modules/joi/lib/values.js +263 -0
  136. package/dist/node_modules/joi/node_modules/@hapi/topo/lib/index.d.ts +60 -0
  137. package/dist/node_modules/joi/node_modules/@hapi/topo/lib/index.js +225 -0
  138. package/dist/node_modules/joi/node_modules/@hapi/topo/package.json +30 -0
  139. package/dist/node_modules/joi/package.json +1 -0
  140. package/dist/node_modules/winston-transport/package.json +1 -1
  141. package/dist/server/IsolatedVm.js +75 -0
  142. package/dist/server/ScriptInstruction.d.ts +8 -0
  143. package/dist/server/ScriptInstruction.js +23 -1
  144. package/dist/server/Vm.js +42 -27
  145. package/package.json +4 -2
@@ -0,0 +1,750 @@
1
+ 'use strict';
2
+
3
+ const Assert = require('@hapi/hoek/lib/assert');
4
+ const Clone = require('@hapi/hoek/lib/clone');
5
+ const Ignore = require('@hapi/hoek/lib/ignore');
6
+ const Reach = require('@hapi/hoek/lib/reach');
7
+
8
+ const Common = require('./common');
9
+ const Errors = require('./errors');
10
+ const State = require('./state');
11
+
12
+
13
+ const internals = {
14
+ result: Symbol('result')
15
+ };
16
+
17
+
18
+ exports.entry = function (value, schema, prefs) {
19
+
20
+ let settings = Common.defaults;
21
+ if (prefs) {
22
+ Assert(prefs.warnings === undefined, 'Cannot override warnings preference in synchronous validation');
23
+ Assert(prefs.artifacts === undefined, 'Cannot override artifacts preference in synchronous validation');
24
+ settings = Common.preferences(Common.defaults, prefs);
25
+ }
26
+
27
+ const result = internals.entry(value, schema, settings);
28
+ Assert(!result.mainstay.externals.length, 'Schema with external rules must use validateAsync()');
29
+ const outcome = { value: result.value };
30
+
31
+ if (result.error) {
32
+ outcome.error = result.error;
33
+ }
34
+
35
+ if (result.mainstay.warnings.length) {
36
+ outcome.warning = Errors.details(result.mainstay.warnings);
37
+ }
38
+
39
+ if (result.mainstay.debug) {
40
+ outcome.debug = result.mainstay.debug;
41
+ }
42
+
43
+ if (result.mainstay.artifacts) {
44
+ outcome.artifacts = result.mainstay.artifacts;
45
+ }
46
+
47
+ return outcome;
48
+ };
49
+
50
+
51
+ exports.entryAsync = async function (value, schema, prefs) {
52
+
53
+ let settings = Common.defaults;
54
+ if (prefs) {
55
+ settings = Common.preferences(Common.defaults, prefs);
56
+ }
57
+
58
+ const result = internals.entry(value, schema, settings);
59
+ const mainstay = result.mainstay;
60
+ if (result.error) {
61
+ if (mainstay.debug) {
62
+ result.error.debug = mainstay.debug;
63
+ }
64
+
65
+ throw result.error;
66
+ }
67
+
68
+ if (mainstay.externals.length) {
69
+ let root = result.value;
70
+ const errors = [];
71
+ for (const external of mainstay.externals) {
72
+ const path = external.state.path;
73
+ const linked = external.schema.type === 'link' ? mainstay.links.get(external.schema) : null;
74
+ let node = root;
75
+ let key;
76
+ let parent;
77
+
78
+ const ancestors = path.length ? [root] : [];
79
+ const original = path.length ? Reach(value, path) : value;
80
+
81
+ if (path.length) {
82
+ key = path[path.length - 1];
83
+
84
+ let current = root;
85
+ for (const segment of path.slice(0, -1)) {
86
+ current = current[segment];
87
+ ancestors.unshift(current);
88
+ }
89
+
90
+ parent = ancestors[0];
91
+ node = parent[key];
92
+ }
93
+
94
+ try {
95
+ const createError = (code, local) => (linked || external.schema).$_createError(code, node, local, external.state, settings);
96
+ const output = await external.method(node, {
97
+ schema: external.schema,
98
+ linked,
99
+ state: external.state,
100
+ prefs,
101
+ original,
102
+ error: createError,
103
+ errorsArray: internals.errorsArray,
104
+ warn: (code, local) => mainstay.warnings.push((linked || external.schema).$_createError(code, node, local, external.state, settings)),
105
+ message: (messages, local) => (linked || external.schema).$_createError('external', node, local, external.state, settings, { messages })
106
+ });
107
+
108
+ if (output === undefined ||
109
+ output === node) {
110
+
111
+ continue;
112
+ }
113
+
114
+ if (output instanceof Errors.Report) {
115
+ mainstay.tracer.log(external.schema, external.state, 'rule', 'external', 'error');
116
+ errors.push(output);
117
+
118
+ if (settings.abortEarly) {
119
+ break;
120
+ }
121
+
122
+ continue;
123
+ }
124
+
125
+ if (Array.isArray(output) &&
126
+ output[Common.symbols.errors]) {
127
+ mainstay.tracer.log(external.schema, external.state, 'rule', 'external', 'error');
128
+ errors.push(...output);
129
+
130
+ if (settings.abortEarly) {
131
+ break;
132
+ }
133
+
134
+ continue;
135
+ }
136
+
137
+ if (parent) {
138
+ mainstay.tracer.value(external.state, 'rule', node, output, 'external');
139
+ parent[key] = output;
140
+ }
141
+ else {
142
+ mainstay.tracer.value(external.state, 'rule', root, output, 'external');
143
+ root = output;
144
+ }
145
+ }
146
+ catch (err) {
147
+ if (settings.errors.label) {
148
+ err.message += ` (${(external.label)})`; // Change message to include path
149
+ }
150
+
151
+ throw err;
152
+ }
153
+ }
154
+
155
+ result.value = root;
156
+
157
+ if (errors.length) {
158
+ result.error = Errors.process(errors, value, settings);
159
+
160
+ if (mainstay.debug) {
161
+ result.error.debug = mainstay.debug;
162
+ }
163
+
164
+ throw result.error;
165
+ }
166
+ }
167
+
168
+ if (!settings.warnings &&
169
+ !settings.debug &&
170
+ !settings.artifacts) {
171
+
172
+ return result.value;
173
+ }
174
+
175
+ const outcome = { value: result.value };
176
+ if (mainstay.warnings.length) {
177
+ outcome.warning = Errors.details(mainstay.warnings);
178
+ }
179
+
180
+ if (mainstay.debug) {
181
+ outcome.debug = mainstay.debug;
182
+ }
183
+
184
+ if (mainstay.artifacts) {
185
+ outcome.artifacts = mainstay.artifacts;
186
+ }
187
+
188
+ return outcome;
189
+ };
190
+
191
+
192
+ internals.Mainstay = class {
193
+
194
+ constructor(tracer, debug, links) {
195
+
196
+ this.externals = [];
197
+ this.warnings = [];
198
+ this.tracer = tracer;
199
+ this.debug = debug;
200
+ this.links = links;
201
+ this.shadow = null;
202
+ this.artifacts = null;
203
+
204
+ this._snapshots = [];
205
+ }
206
+
207
+ snapshot() {
208
+
209
+ this._snapshots.push({
210
+ externals: this.externals.slice(),
211
+ warnings: this.warnings.slice()
212
+ });
213
+ }
214
+
215
+ restore() {
216
+
217
+ const snapshot = this._snapshots.pop();
218
+ this.externals = snapshot.externals;
219
+ this.warnings = snapshot.warnings;
220
+ }
221
+
222
+ commit() {
223
+
224
+ this._snapshots.pop();
225
+ }
226
+ };
227
+
228
+
229
+ internals.entry = function (value, schema, prefs) {
230
+
231
+ // Prepare state
232
+
233
+ const { tracer, cleanup } = internals.tracer(schema, prefs);
234
+ const debug = prefs.debug ? [] : null;
235
+ const links = schema._ids._schemaChain ? new Map() : null;
236
+ const mainstay = new internals.Mainstay(tracer, debug, links);
237
+ const schemas = schema._ids._schemaChain ? [{ schema }] : null;
238
+ const state = new State([], [], { mainstay, schemas });
239
+
240
+ // Validate value
241
+
242
+ const result = exports.validate(value, schema, state, prefs);
243
+
244
+ // Process value and errors
245
+
246
+ if (cleanup) {
247
+ schema.$_root.untrace();
248
+ }
249
+
250
+ const error = Errors.process(result.errors, value, prefs);
251
+ return { value: result.value, error, mainstay };
252
+ };
253
+
254
+
255
+ internals.tracer = function (schema, prefs) {
256
+
257
+ if (schema.$_root._tracer) {
258
+ return { tracer: schema.$_root._tracer._register(schema) };
259
+ }
260
+
261
+ if (prefs.debug) {
262
+ Assert(schema.$_root.trace, 'Debug mode not supported');
263
+ return { tracer: schema.$_root.trace()._register(schema), cleanup: true };
264
+ }
265
+
266
+ return { tracer: internals.ignore };
267
+ };
268
+
269
+
270
+ exports.validate = function (value, schema, state, prefs, overrides = {}) {
271
+
272
+ if (schema.$_terms.whens) {
273
+ schema = schema._generate(value, state, prefs).schema;
274
+ }
275
+
276
+ // Setup state and settings
277
+
278
+ if (schema._preferences) {
279
+ prefs = internals.prefs(schema, prefs);
280
+ }
281
+
282
+ // Cache
283
+
284
+ if (schema._cache &&
285
+ prefs.cache) {
286
+
287
+ const result = schema._cache.get(value);
288
+ state.mainstay.tracer.debug(state, 'validate', 'cached', !!result);
289
+ if (result) {
290
+ return result;
291
+ }
292
+ }
293
+
294
+ // Helpers
295
+
296
+ const createError = (code, local, localState) => schema.$_createError(code, value, local, localState || state, prefs);
297
+ const helpers = {
298
+ original: value,
299
+ prefs,
300
+ schema,
301
+ state,
302
+ error: createError,
303
+ errorsArray: internals.errorsArray,
304
+ warn: (code, local, localState) => state.mainstay.warnings.push(createError(code, local, localState)),
305
+ message: (messages, local) => schema.$_createError('custom', value, local, state, prefs, { messages })
306
+ };
307
+
308
+ // Prepare
309
+
310
+ state.mainstay.tracer.entry(schema, state);
311
+
312
+ const def = schema._definition;
313
+ if (def.prepare &&
314
+ value !== undefined &&
315
+ prefs.convert) {
316
+
317
+ const prepared = def.prepare(value, helpers);
318
+ if (prepared) {
319
+ state.mainstay.tracer.value(state, 'prepare', value, prepared.value);
320
+ if (prepared.errors) {
321
+ return internals.finalize(prepared.value, [].concat(prepared.errors), helpers); // Prepare error always aborts early
322
+ }
323
+
324
+ value = prepared.value;
325
+ }
326
+ }
327
+
328
+ // Type coercion
329
+
330
+ if (def.coerce &&
331
+ value !== undefined &&
332
+ prefs.convert &&
333
+ (!def.coerce.from || def.coerce.from.includes(typeof value))) {
334
+
335
+ const coerced = def.coerce.method(value, helpers);
336
+ if (coerced) {
337
+ state.mainstay.tracer.value(state, 'coerced', value, coerced.value);
338
+ if (coerced.errors) {
339
+ return internals.finalize(coerced.value, [].concat(coerced.errors), helpers); // Coerce error always aborts early
340
+ }
341
+
342
+ value = coerced.value;
343
+ }
344
+ }
345
+
346
+ // Empty value
347
+
348
+ const empty = schema._flags.empty;
349
+ if (empty &&
350
+ empty.$_match(internals.trim(value, schema), state.nest(empty), Common.defaults)) {
351
+
352
+ state.mainstay.tracer.value(state, 'empty', value, undefined);
353
+ value = undefined;
354
+ }
355
+
356
+ // Presence requirements (required, optional, forbidden)
357
+
358
+ const presence = overrides.presence || schema._flags.presence || (schema._flags._endedSwitch ? null : prefs.presence);
359
+ if (value === undefined) {
360
+ if (presence === 'forbidden') {
361
+ return internals.finalize(value, null, helpers);
362
+ }
363
+
364
+ if (presence === 'required') {
365
+ return internals.finalize(value, [schema.$_createError('any.required', value, null, state, prefs)], helpers);
366
+ }
367
+
368
+ if (presence === 'optional') {
369
+ if (schema._flags.default !== Common.symbols.deepDefault) {
370
+ return internals.finalize(value, null, helpers);
371
+ }
372
+
373
+ state.mainstay.tracer.value(state, 'default', value, {});
374
+ value = {};
375
+ }
376
+ }
377
+ else if (presence === 'forbidden') {
378
+ return internals.finalize(value, [schema.$_createError('any.unknown', value, null, state, prefs)], helpers);
379
+ }
380
+
381
+ // Allowed values
382
+
383
+ const errors = [];
384
+
385
+ if (schema._valids) {
386
+ const match = schema._valids.get(value, state, prefs, schema._flags.insensitive);
387
+ if (match) {
388
+ if (prefs.convert) {
389
+ state.mainstay.tracer.value(state, 'valids', value, match.value);
390
+ value = match.value;
391
+ }
392
+
393
+ state.mainstay.tracer.filter(schema, state, 'valid', match);
394
+ return internals.finalize(value, null, helpers);
395
+ }
396
+
397
+ if (schema._flags.only) {
398
+ const report = schema.$_createError('any.only', value, { valids: schema._valids.values({ display: true }) }, state, prefs);
399
+ if (prefs.abortEarly) {
400
+ return internals.finalize(value, [report], helpers);
401
+ }
402
+
403
+ errors.push(report);
404
+ }
405
+ }
406
+
407
+ // Denied values
408
+
409
+ if (schema._invalids) {
410
+ const match = schema._invalids.get(value, state, prefs, schema._flags.insensitive);
411
+ if (match) {
412
+ state.mainstay.tracer.filter(schema, state, 'invalid', match);
413
+ const report = schema.$_createError('any.invalid', value, { invalids: schema._invalids.values({ display: true }) }, state, prefs);
414
+ if (prefs.abortEarly) {
415
+ return internals.finalize(value, [report], helpers);
416
+ }
417
+
418
+ errors.push(report);
419
+ }
420
+ }
421
+
422
+ // Base type
423
+
424
+ if (def.validate) {
425
+ const base = def.validate(value, helpers);
426
+ if (base) {
427
+ state.mainstay.tracer.value(state, 'base', value, base.value);
428
+ value = base.value;
429
+
430
+ if (base.errors) {
431
+ if (!Array.isArray(base.errors)) {
432
+ errors.push(base.errors);
433
+ return internals.finalize(value, errors, helpers); // Base error always aborts early
434
+ }
435
+
436
+ if (base.errors.length) {
437
+ errors.push(...base.errors);
438
+ return internals.finalize(value, errors, helpers); // Base error always aborts early
439
+ }
440
+ }
441
+ }
442
+ }
443
+
444
+ // Validate tests
445
+
446
+ if (!schema._rules.length) {
447
+ return internals.finalize(value, errors, helpers);
448
+ }
449
+
450
+ return internals.rules(value, errors, helpers);
451
+ };
452
+
453
+
454
+ internals.rules = function (value, errors, helpers) {
455
+
456
+ const { schema, state, prefs } = helpers;
457
+
458
+ for (const rule of schema._rules) {
459
+ const definition = schema._definition.rules[rule.method];
460
+
461
+ // Skip rules that are also applied in coerce step
462
+
463
+ if (definition.convert &&
464
+ prefs.convert) {
465
+
466
+ state.mainstay.tracer.log(schema, state, 'rule', rule.name, 'full');
467
+ continue;
468
+ }
469
+
470
+ // Resolve references
471
+
472
+ let ret;
473
+ let args = rule.args;
474
+ if (rule._resolve.length) {
475
+ args = Object.assign({}, args); // Shallow copy
476
+ for (const key of rule._resolve) {
477
+ const resolver = definition.argsByName.get(key);
478
+
479
+ const resolved = args[key].resolve(value, state, prefs);
480
+ const normalized = resolver.normalize ? resolver.normalize(resolved) : resolved;
481
+
482
+ const invalid = Common.validateArg(normalized, null, resolver);
483
+ if (invalid) {
484
+ ret = schema.$_createError('any.ref', resolved, { arg: key, ref: args[key], reason: invalid }, state, prefs);
485
+ break;
486
+ }
487
+
488
+ args[key] = normalized;
489
+ }
490
+ }
491
+
492
+ // Test rule
493
+
494
+ ret = ret || definition.validate(value, helpers, args, rule); // Use ret if already set to reference error
495
+
496
+ const result = internals.rule(ret, rule);
497
+ if (result.errors) {
498
+ state.mainstay.tracer.log(schema, state, 'rule', rule.name, 'error');
499
+
500
+ if (rule.warn) {
501
+ state.mainstay.warnings.push(...result.errors);
502
+ continue;
503
+ }
504
+
505
+ if (prefs.abortEarly) {
506
+ return internals.finalize(value, result.errors, helpers);
507
+ }
508
+
509
+ errors.push(...result.errors);
510
+ }
511
+ else {
512
+ state.mainstay.tracer.log(schema, state, 'rule', rule.name, 'pass');
513
+ state.mainstay.tracer.value(state, 'rule', value, result.value, rule.name);
514
+ value = result.value;
515
+ }
516
+ }
517
+
518
+ return internals.finalize(value, errors, helpers);
519
+ };
520
+
521
+
522
+ internals.rule = function (ret, rule) {
523
+
524
+ if (ret instanceof Errors.Report) {
525
+ internals.error(ret, rule);
526
+ return { errors: [ret], value: null };
527
+ }
528
+
529
+ if (Array.isArray(ret) &&
530
+ ret[Common.symbols.errors]) {
531
+
532
+ ret.forEach((report) => internals.error(report, rule));
533
+ return { errors: ret, value: null };
534
+ }
535
+
536
+ return { errors: null, value: ret };
537
+ };
538
+
539
+
540
+ internals.error = function (report, rule) {
541
+
542
+ if (rule.message) {
543
+ report._setTemplate(rule.message);
544
+ }
545
+
546
+ return report;
547
+ };
548
+
549
+
550
+ internals.finalize = function (value, errors, helpers) {
551
+
552
+ errors = errors || [];
553
+ const { schema, state, prefs } = helpers;
554
+
555
+ // Failover value
556
+
557
+ if (errors.length) {
558
+ const failover = internals.default('failover', undefined, errors, helpers);
559
+ if (failover !== undefined) {
560
+ state.mainstay.tracer.value(state, 'failover', value, failover);
561
+ value = failover;
562
+ errors = [];
563
+ }
564
+ }
565
+
566
+ // Error override
567
+
568
+ if (errors.length &&
569
+ schema._flags.error) {
570
+
571
+ if (typeof schema._flags.error === 'function') {
572
+ errors = schema._flags.error(errors);
573
+ if (!Array.isArray(errors)) {
574
+ errors = [errors];
575
+ }
576
+
577
+ for (const error of errors) {
578
+ Assert(error instanceof Error || error instanceof Errors.Report, 'error() must return an Error object');
579
+ }
580
+ }
581
+ else {
582
+ errors = [schema._flags.error];
583
+ }
584
+ }
585
+
586
+ // Default
587
+
588
+ if (value === undefined) {
589
+ const defaulted = internals.default('default', value, errors, helpers);
590
+ state.mainstay.tracer.value(state, 'default', value, defaulted);
591
+ value = defaulted;
592
+ }
593
+
594
+ // Cast
595
+
596
+ if (schema._flags.cast &&
597
+ value !== undefined) {
598
+
599
+ const caster = schema._definition.cast[schema._flags.cast];
600
+ if (caster.from(value)) {
601
+ const casted = caster.to(value, helpers);
602
+ state.mainstay.tracer.value(state, 'cast', value, casted, schema._flags.cast);
603
+ value = casted;
604
+ }
605
+ }
606
+
607
+ // Externals
608
+
609
+ if (schema.$_terms.externals &&
610
+ prefs.externals &&
611
+ prefs._externals !== false) { // Disabled for matching
612
+
613
+ for (const { method } of schema.$_terms.externals) {
614
+ state.mainstay.externals.push({ method, schema, state, label: Errors.label(schema._flags, state, prefs) });
615
+ }
616
+ }
617
+
618
+ // Result
619
+
620
+ const result = { value, errors: errors.length ? errors : null };
621
+
622
+ if (schema._flags.result) {
623
+ result.value = schema._flags.result === 'strip' ? undefined : /* raw */ helpers.original;
624
+ state.mainstay.tracer.value(state, schema._flags.result, value, result.value);
625
+ state.shadow(value, schema._flags.result);
626
+ }
627
+
628
+ // Cache
629
+
630
+ if (schema._cache &&
631
+ prefs.cache !== false &&
632
+ !schema._refs.length) {
633
+
634
+ schema._cache.set(helpers.original, result);
635
+ }
636
+
637
+ // Artifacts
638
+
639
+ if (value !== undefined &&
640
+ !result.errors &&
641
+ schema._flags.artifact !== undefined) {
642
+
643
+ state.mainstay.artifacts = state.mainstay.artifacts || new Map();
644
+ if (!state.mainstay.artifacts.has(schema._flags.artifact)) {
645
+ state.mainstay.artifacts.set(schema._flags.artifact, []);
646
+ }
647
+
648
+ state.mainstay.artifacts.get(schema._flags.artifact).push(state.path);
649
+ }
650
+
651
+ return result;
652
+ };
653
+
654
+
655
+ internals.prefs = function (schema, prefs) {
656
+
657
+ const isDefaultOptions = prefs === Common.defaults;
658
+ if (isDefaultOptions &&
659
+ schema._preferences[Common.symbols.prefs]) {
660
+
661
+ return schema._preferences[Common.symbols.prefs];
662
+ }
663
+
664
+ prefs = Common.preferences(prefs, schema._preferences);
665
+ if (isDefaultOptions) {
666
+ schema._preferences[Common.symbols.prefs] = prefs;
667
+ }
668
+
669
+ return prefs;
670
+ };
671
+
672
+
673
+ internals.default = function (flag, value, errors, helpers) {
674
+
675
+ const { schema, state, prefs } = helpers;
676
+ const source = schema._flags[flag];
677
+ if (prefs.noDefaults ||
678
+ source === undefined) {
679
+
680
+ return value;
681
+ }
682
+
683
+ state.mainstay.tracer.log(schema, state, 'rule', flag, 'full');
684
+
685
+ if (!source) {
686
+ return source;
687
+ }
688
+
689
+ if (typeof source === 'function') {
690
+ const args = source.length ? [Clone(state.ancestors[0]), helpers] : [];
691
+
692
+ try {
693
+ return source(...args);
694
+ }
695
+ catch (err) {
696
+ errors.push(schema.$_createError(`any.${flag}`, null, { error: err }, state, prefs));
697
+ return;
698
+ }
699
+ }
700
+
701
+ if (typeof source !== 'object') {
702
+ return source;
703
+ }
704
+
705
+ if (source[Common.symbols.literal]) {
706
+ return source.literal;
707
+ }
708
+
709
+ if (Common.isResolvable(source)) {
710
+ return source.resolve(value, state, prefs);
711
+ }
712
+
713
+ return Clone(source);
714
+ };
715
+
716
+
717
+ internals.trim = function (value, schema) {
718
+
719
+ if (typeof value !== 'string') {
720
+ return value;
721
+ }
722
+
723
+ const trim = schema.$_getRule('trim');
724
+ if (!trim ||
725
+ !trim.args.enabled) {
726
+
727
+ return value;
728
+ }
729
+
730
+ return value.trim();
731
+ };
732
+
733
+
734
+ internals.ignore = {
735
+ active: false,
736
+ debug: Ignore,
737
+ entry: Ignore,
738
+ filter: Ignore,
739
+ log: Ignore,
740
+ resolve: Ignore,
741
+ value: Ignore
742
+ };
743
+
744
+
745
+ internals.errorsArray = function () {
746
+
747
+ const errors = [];
748
+ errors[Common.symbols.errors] = true;
749
+ return errors;
750
+ };