@modern-js/plugin 2.56.2 → 2.57.1

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.
@@ -163,6 +163,12 @@ const cloneHook = (hook) => {
163
163
  if ((0, import_workflow.isParallelWorkflow)(hook)) {
164
164
  return (0, import_workflow.createParallelWorkflow)();
165
165
  }
166
+ if ((0, import_workflow.isAsyncInterruptWorkflow)(hook)) {
167
+ return (0, import_workflow.createAsyncInterruptWorkflow)();
168
+ }
169
+ if ((0, import_workflow.isSyncParallelWorkflow)(hook)) {
170
+ return (0, import_workflow.createSyncParallelWorkflow)();
171
+ }
166
172
  if ((0, import_farrow_pipeline.isPipeline)(hook)) {
167
173
  return (0, import_farrow_pipeline.createPipeline)();
168
174
  }
@@ -16,11 +16,15 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
16
16
  var workflow_exports = {};
17
17
  module.exports = __toCommonJS(workflow_exports);
18
18
  __reExport(workflow_exports, require("./sync"), module.exports);
19
+ __reExport(workflow_exports, require("./syncParallel"), module.exports);
19
20
  __reExport(workflow_exports, require("./parallel"), module.exports);
20
21
  __reExport(workflow_exports, require("./async"), module.exports);
22
+ __reExport(workflow_exports, require("./interrupt"), module.exports);
21
23
  // Annotate the CommonJS export names for ESM import in node:
22
24
  0 && (module.exports = {
23
25
  ...require("./sync"),
26
+ ...require("./syncParallel"),
24
27
  ...require("./parallel"),
25
- ...require("./async")
28
+ ...require("./async"),
29
+ ...require("./interrupt")
26
30
  });
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var interrupt_exports = {};
20
+ __export(interrupt_exports, {
21
+ createAsyncInterruptWorkflow: () => createAsyncInterruptWorkflow,
22
+ isAsyncInterruptWorkflow: () => isAsyncInterruptWorkflow
23
+ });
24
+ module.exports = __toCommonJS(interrupt_exports);
25
+ var import_farrow_pipeline = require("../farrow-pipeline");
26
+ const ASYNC_INTERRUPT_WORKFLOW_SYMBOL = Symbol.for("ASYNC_INTERRUPT_WORKFLOW_SYMBOL");
27
+ const isAsyncInterruptWorkflow = (input) => Boolean(input === null || input === void 0 ? void 0 : input[ASYNC_INTERRUPT_WORKFLOW_SYMBOL]);
28
+ const createAsyncInterruptWorkflow = () => {
29
+ const pipeline = (0, import_farrow_pipeline.createAsyncPipeline)();
30
+ const use = (...input) => {
31
+ pipeline.use(...input.map(mapAsyncWorkerToInterruptMiddleware));
32
+ return workflow;
33
+ };
34
+ const run = async (input) => {
35
+ const result = await pipeline.run(input, {
36
+ onLast: () => []
37
+ });
38
+ return result;
39
+ };
40
+ const workflow = {
41
+ ...pipeline,
42
+ use,
43
+ run,
44
+ [ASYNC_INTERRUPT_WORKFLOW_SYMBOL]: true
45
+ };
46
+ return workflow;
47
+ };
48
+ const mapAsyncWorkerToInterruptMiddleware = (worker) => async (input, next) => {
49
+ let isInterrupted = false;
50
+ const interrupt = (value) => {
51
+ isInterrupted = true;
52
+ return value;
53
+ };
54
+ const result = await Promise.resolve(worker(input, interrupt));
55
+ if (isInterrupted) {
56
+ return result;
57
+ }
58
+ return Promise.resolve(next(input));
59
+ };
60
+ // Annotate the CommonJS export names for ESM import in node:
61
+ 0 && (module.exports = {
62
+ createAsyncInterruptWorkflow,
63
+ isAsyncInterruptWorkflow
64
+ });
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var syncParallel_exports = {};
20
+ __export(syncParallel_exports, {
21
+ createSyncParallelWorkflow: () => createSyncParallelWorkflow,
22
+ isSyncParallelWorkflow: () => isSyncParallelWorkflow
23
+ });
24
+ module.exports = __toCommonJS(syncParallel_exports);
25
+ var import_farrow_pipeline = require("../farrow-pipeline");
26
+ const SYNC_PARALLEL_WORKFLOW_SYMBOL = Symbol.for("SYNC_MODERN_PARALLEL_WORKFLOW");
27
+ const isSyncParallelWorkflow = (input) => Boolean(input === null || input === void 0 ? void 0 : input[SYNC_PARALLEL_WORKFLOW_SYMBOL]);
28
+ const createSyncParallelWorkflow = () => {
29
+ const pipeline = (0, import_farrow_pipeline.createPipeline)();
30
+ const use = (...input) => {
31
+ pipeline.use(...input.map(mapSyncParallelWorkerToMiddleware));
32
+ return workflow;
33
+ };
34
+ const run = (input) => {
35
+ return pipeline.run(input, {
36
+ onLast: () => []
37
+ }).filter((result) => Boolean(result));
38
+ };
39
+ const workflow = {
40
+ ...pipeline,
41
+ run,
42
+ use,
43
+ [SYNC_PARALLEL_WORKFLOW_SYMBOL]: true
44
+ };
45
+ return workflow;
46
+ };
47
+ const mapSyncParallelWorkerToMiddleware = (worker) => (input, next) => [
48
+ worker(input),
49
+ ...next(input)
50
+ ];
51
+ // Annotate the CommonJS export names for ESM import in node:
52
+ 0 && (module.exports = {
53
+ createSyncParallelWorkflow,
54
+ isSyncParallelWorkflow
55
+ });
package/dist/esm/index.js CHANGED
@@ -253,11 +253,53 @@ var mapWorkerToMiddleware = function(worker) {
253
253
  };
254
254
  };
255
255
 
256
- // src/workflow/parallel.ts
256
+ // src/workflow/syncParallel.ts
257
257
  import { _ as _define_property5 } from "@swc/helpers/_/_define_property";
258
258
  import { _ as _object_spread5 } from "@swc/helpers/_/_object_spread";
259
259
  import { _ as _object_spread_props4 } from "@swc/helpers/_/_object_spread_props";
260
260
  import { _ as _to_consumable_array5 } from "@swc/helpers/_/_to_consumable_array";
261
+ var SYNC_PARALLEL_WORKFLOW_SYMBOL = Symbol.for("SYNC_MODERN_PARALLEL_WORKFLOW");
262
+ var isSyncParallelWorkflow = function(input) {
263
+ return Boolean(input === null || input === void 0 ? void 0 : input[SYNC_PARALLEL_WORKFLOW_SYMBOL]);
264
+ };
265
+ var createSyncParallelWorkflow = function() {
266
+ var pipeline = createPipeline();
267
+ var use = function() {
268
+ for (var _len = arguments.length, input = new Array(_len), _key = 0; _key < _len; _key++) {
269
+ input[_key] = arguments[_key];
270
+ }
271
+ var _pipeline;
272
+ (_pipeline = pipeline).use.apply(_pipeline, _to_consumable_array5(input.map(mapSyncParallelWorkerToMiddleware)));
273
+ return workflow;
274
+ };
275
+ var run = function(input) {
276
+ return pipeline.run(input, {
277
+ onLast: function() {
278
+ return [];
279
+ }
280
+ }).filter(function(result) {
281
+ return Boolean(result);
282
+ });
283
+ };
284
+ var workflow = _object_spread_props4(_object_spread5({}, pipeline), _define_property5({
285
+ run,
286
+ use
287
+ }, SYNC_PARALLEL_WORKFLOW_SYMBOL, true));
288
+ return workflow;
289
+ };
290
+ var mapSyncParallelWorkerToMiddleware = function(worker) {
291
+ return function(input, next) {
292
+ return [
293
+ worker(input)
294
+ ].concat(_to_consumable_array5(next(input)));
295
+ };
296
+ };
297
+
298
+ // src/workflow/parallel.ts
299
+ import { _ as _define_property6 } from "@swc/helpers/_/_define_property";
300
+ import { _ as _object_spread6 } from "@swc/helpers/_/_object_spread";
301
+ import { _ as _object_spread_props5 } from "@swc/helpers/_/_object_spread_props";
302
+ import { _ as _to_consumable_array6 } from "@swc/helpers/_/_to_consumable_array";
261
303
  var PARALLEL_WORKFLOW_SYMBOL = Symbol.for("MODERN_PARALLEL_WORKFLOW");
262
304
  var isParallelWorkflow = function(input) {
263
305
  return Boolean(input === null || input === void 0 ? void 0 : input[PARALLEL_WORKFLOW_SYMBOL]);
@@ -269,7 +311,7 @@ var createParallelWorkflow = function() {
269
311
  input[_key] = arguments[_key];
270
312
  }
271
313
  var _pipeline;
272
- (_pipeline = pipeline).use.apply(_pipeline, _to_consumable_array5(input.map(mapParallelWorkerToAsyncMiddleware)));
314
+ (_pipeline = pipeline).use.apply(_pipeline, _to_consumable_array6(input.map(mapParallelWorkerToAsyncMiddleware)));
273
315
  return workflow;
274
316
  };
275
317
  var run = function(input) {
@@ -281,7 +323,7 @@ var createParallelWorkflow = function() {
281
323
  return result.filter(Boolean);
282
324
  });
283
325
  };
284
- var workflow = _object_spread_props4(_object_spread5({}, pipeline), _define_property5({
326
+ var workflow = _object_spread_props5(_object_spread6({}, pipeline), _define_property6({
285
327
  run,
286
328
  use
287
329
  }, PARALLEL_WORKFLOW_SYMBOL, true));
@@ -291,15 +333,15 @@ var mapParallelWorkerToAsyncMiddleware = function(worker) {
291
333
  return function(input, next) {
292
334
  return [
293
335
  worker(input)
294
- ].concat(_to_consumable_array5(next(input)));
336
+ ].concat(_to_consumable_array6(next(input)));
295
337
  };
296
338
  };
297
339
 
298
340
  // src/workflow/async.ts
299
- import { _ as _define_property6 } from "@swc/helpers/_/_define_property";
300
- import { _ as _object_spread6 } from "@swc/helpers/_/_object_spread";
301
- import { _ as _object_spread_props5 } from "@swc/helpers/_/_object_spread_props";
302
- import { _ as _to_consumable_array6 } from "@swc/helpers/_/_to_consumable_array";
341
+ import { _ as _define_property7 } from "@swc/helpers/_/_define_property";
342
+ import { _ as _object_spread7 } from "@swc/helpers/_/_object_spread";
343
+ import { _ as _object_spread_props6 } from "@swc/helpers/_/_object_spread_props";
344
+ import { _ as _to_consumable_array7 } from "@swc/helpers/_/_to_consumable_array";
303
345
  var ASYNC_WORKFLOW_SYMBOL = Symbol.for("MODERN_ASYNC_WORKFLOW");
304
346
  var isPromise = function(obj) {
305
347
  return obj && typeof obj.then === "function";
@@ -314,7 +356,7 @@ var createAsyncWorkflow = function() {
314
356
  input[_key] = arguments[_key];
315
357
  }
316
358
  var _pipeline;
317
- (_pipeline = pipeline).use.apply(_pipeline, _to_consumable_array6(input.map(mapAsyncWorkerToAsyncMiddleware)));
359
+ (_pipeline = pipeline).use.apply(_pipeline, _to_consumable_array7(input.map(mapAsyncWorkerToAsyncMiddleware)));
318
360
  return workflow;
319
361
  };
320
362
  var run = function(input) {
@@ -330,7 +372,7 @@ var createAsyncWorkflow = function() {
330
372
  }
331
373
  return result.filter(Boolean);
332
374
  };
333
- var workflow = _object_spread_props5(_object_spread6({}, pipeline), _define_property6({
375
+ var workflow = _object_spread_props6(_object_spread7({}, pipeline), _define_property7({
334
376
  use,
335
377
  run
336
378
  }, ASYNC_WORKFLOW_SYMBOL, true));
@@ -342,15 +384,106 @@ var mapAsyncWorkerToAsyncMiddleware = function(worker) {
342
384
  return Promise.resolve(next(input)).then(function(nextResult) {
343
385
  return [
344
386
  result
345
- ].concat(_to_consumable_array6(nextResult));
387
+ ].concat(_to_consumable_array7(nextResult));
346
388
  });
347
389
  });
348
390
  };
349
391
  };
350
392
 
393
+ // src/workflow/interrupt.ts
394
+ import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
395
+ import { _ as _define_property8 } from "@swc/helpers/_/_define_property";
396
+ import { _ as _object_spread8 } from "@swc/helpers/_/_object_spread";
397
+ import { _ as _object_spread_props7 } from "@swc/helpers/_/_object_spread_props";
398
+ import { _ as _to_consumable_array8 } from "@swc/helpers/_/_to_consumable_array";
399
+ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
400
+ var ASYNC_INTERRUPT_WORKFLOW_SYMBOL = Symbol.for("ASYNC_INTERRUPT_WORKFLOW_SYMBOL");
401
+ var isAsyncInterruptWorkflow = function(input) {
402
+ return Boolean(input === null || input === void 0 ? void 0 : input[ASYNC_INTERRUPT_WORKFLOW_SYMBOL]);
403
+ };
404
+ var createAsyncInterruptWorkflow = function() {
405
+ var pipeline = createAsyncPipeline();
406
+ var use = function() {
407
+ for (var _len = arguments.length, input = new Array(_len), _key = 0; _key < _len; _key++) {
408
+ input[_key] = arguments[_key];
409
+ }
410
+ var _pipeline;
411
+ (_pipeline = pipeline).use.apply(_pipeline, _to_consumable_array8(input.map(mapAsyncWorkerToInterruptMiddleware)));
412
+ return workflow;
413
+ };
414
+ var run = function() {
415
+ var _ref = _async_to_generator(function(input) {
416
+ var result;
417
+ return _ts_generator(this, function(_state) {
418
+ switch (_state.label) {
419
+ case 0:
420
+ return [
421
+ 4,
422
+ pipeline.run(input, {
423
+ onLast: function() {
424
+ return [];
425
+ }
426
+ })
427
+ ];
428
+ case 1:
429
+ result = _state.sent();
430
+ return [
431
+ 2,
432
+ result
433
+ ];
434
+ }
435
+ });
436
+ });
437
+ return function run2(input) {
438
+ return _ref.apply(this, arguments);
439
+ };
440
+ }();
441
+ var workflow = _object_spread_props7(_object_spread8({}, pipeline), _define_property8({
442
+ use,
443
+ run
444
+ }, ASYNC_INTERRUPT_WORKFLOW_SYMBOL, true));
445
+ return workflow;
446
+ };
447
+ var mapAsyncWorkerToInterruptMiddleware = function(worker) {
448
+ return function() {
449
+ var _ref = _async_to_generator(function(input, next) {
450
+ var isInterrupted, interrupt, result;
451
+ return _ts_generator(this, function(_state) {
452
+ switch (_state.label) {
453
+ case 0:
454
+ isInterrupted = false;
455
+ interrupt = function(value) {
456
+ isInterrupted = true;
457
+ return value;
458
+ };
459
+ return [
460
+ 4,
461
+ Promise.resolve(worker(input, interrupt))
462
+ ];
463
+ case 1:
464
+ result = _state.sent();
465
+ if (isInterrupted) {
466
+ return [
467
+ 2,
468
+ result
469
+ ];
470
+ }
471
+ return [
472
+ 2,
473
+ Promise.resolve(next(input))
474
+ ];
475
+ }
476
+ });
477
+ });
478
+ return function(input, next) {
479
+ return _ref.apply(this, arguments);
480
+ };
481
+ }();
482
+ };
483
+
351
484
  // src/manager/sync.ts
352
- import { _ as _object_spread7 } from "@swc/helpers/_/_object_spread";
353
- import { _ as _object_spread_props6 } from "@swc/helpers/_/_object_spread_props";
485
+ import { _ as _object_spread9 } from "@swc/helpers/_/_object_spread";
486
+ import { _ as _object_spread_props8 } from "@swc/helpers/_/_object_spread_props";
354
487
 
355
488
  // src/manager/shared.ts
356
489
  import { pluginDagSort } from "@modern-js/utils/universal/plugin-dag-sort";
@@ -403,24 +536,24 @@ var DEFAULT_OPTIONS = {
403
536
  var createManager = function(hooks, api) {
404
537
  var index = 0;
405
538
  var runners;
406
- var currentHooks = _object_spread7({}, hooks);
539
+ var currentHooks = _object_spread9({}, hooks);
407
540
  var useRunner = function() {
408
541
  return runners;
409
542
  };
410
543
  var registerHook = function(extraHooks) {
411
- currentHooks = _object_spread7({}, extraHooks, currentHooks);
544
+ currentHooks = _object_spread9({}, extraHooks, currentHooks);
412
545
  };
413
546
  var isPlugin = function(input) {
414
547
  return isObject(input) && hasOwnProperty(input, SYNC_PLUGIN_SYMBOL) && input[SYNC_PLUGIN_SYMBOL] === SYNC_PLUGIN_SYMBOL;
415
548
  };
416
- var pluginAPI = _object_spread_props6(_object_spread7({}, api), {
549
+ var pluginAPI = _object_spread_props8(_object_spread9({}, api), {
417
550
  useHookRunners: useRunner
418
551
  });
419
552
  var clone = function(overrideAPI) {
420
553
  var plugins = [];
421
554
  var addPlugin = function(plugin) {
422
555
  if (!includePlugin(plugins, plugin)) {
423
- plugins.push(_object_spread7({}, plugin));
556
+ plugins.push(_object_spread9({}, plugin));
424
557
  }
425
558
  };
426
559
  var usePlugin = function() {
@@ -453,7 +586,7 @@ var createManager = function(hooks, api) {
453
586
  if (options.registerHook) {
454
587
  registerHook(options.registerHook);
455
588
  }
456
- return _object_spread_props6(_object_spread7(_object_spread_props6(_object_spread7({}, DEFAULT_OPTIONS), {
589
+ return _object_spread_props8(_object_spread9(_object_spread_props8(_object_spread9({}, DEFAULT_OPTIONS), {
457
590
  name: "No.".concat(index++, " plugin")
458
591
  }), options), {
459
592
  SYNC_PLUGIN_SYMBOL,
@@ -465,7 +598,7 @@ var createManager = function(hooks, api) {
465
598
  };
466
599
  var init = function() {
467
600
  var sortedPlugins = sortPlugins(plugins);
468
- var mergedPluginAPI = _object_spread7({}, pluginAPI, overrideAPI);
601
+ var mergedPluginAPI = _object_spread9({}, pluginAPI, overrideAPI);
469
602
  checkPlugins(sortedPlugins);
470
603
  var hooksList = sortedPlugins.map(function(plugin) {
471
604
  return plugin.setup(mergedPluginAPI);
@@ -502,7 +635,7 @@ var generateRunner = function(hooksList, hooksMap) {
502
635
  }
503
636
  });
504
637
  runner[key2] = function(input, options) {
505
- return cloneShape[key2].run(input, _object_spread7({}, options));
638
+ return cloneShape[key2].run(input, _object_spread9({}, options));
506
639
  };
507
640
  };
508
641
  for (var key in cloneShape)
@@ -526,6 +659,12 @@ var cloneHook = function(hook) {
526
659
  if (isParallelWorkflow(hook)) {
527
660
  return createParallelWorkflow();
528
661
  }
662
+ if (isAsyncInterruptWorkflow(hook)) {
663
+ return createAsyncInterruptWorkflow();
664
+ }
665
+ if (isSyncParallelWorkflow(hook)) {
666
+ return createSyncParallelWorkflow();
667
+ }
529
668
  if (isPipeline(hook)) {
530
669
  return createPipeline();
531
670
  }
@@ -543,32 +682,32 @@ var cloneHooksMap = function(record) {
543
682
  };
544
683
 
545
684
  // src/manager/async.ts
546
- import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
547
- import { _ as _object_spread8 } from "@swc/helpers/_/_object_spread";
548
- import { _ as _object_spread_props7 } from "@swc/helpers/_/_object_spread_props";
549
- import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
685
+ import { _ as _async_to_generator2 } from "@swc/helpers/_/_async_to_generator";
686
+ import { _ as _object_spread10 } from "@swc/helpers/_/_object_spread";
687
+ import { _ as _object_spread_props9 } from "@swc/helpers/_/_object_spread_props";
688
+ import { _ as _ts_generator2 } from "@swc/helpers/_/_ts_generator";
550
689
  var ASYNC_PLUGIN_SYMBOL = "ASYNC_PLUGIN_SYMBOL";
551
690
  var createAsyncManager = function(hooks, api) {
552
691
  var index = 0;
553
692
  var runners;
554
- var currentHooks = _object_spread8({}, hooks);
693
+ var currentHooks = _object_spread10({}, hooks);
555
694
  var useRunner = function() {
556
695
  return runners;
557
696
  };
558
697
  var registerHook = function(extraHooks) {
559
- currentHooks = _object_spread8({}, extraHooks, currentHooks);
698
+ currentHooks = _object_spread10({}, extraHooks, currentHooks);
560
699
  };
561
700
  var isPlugin = function(input) {
562
701
  return isObject(input) && hasOwnProperty(input, ASYNC_PLUGIN_SYMBOL) && input[ASYNC_PLUGIN_SYMBOL] === ASYNC_PLUGIN_SYMBOL;
563
702
  };
564
- var pluginAPI = _object_spread_props7(_object_spread8({}, api), {
703
+ var pluginAPI = _object_spread_props9(_object_spread10({}, api), {
565
704
  useHookRunners: useRunner
566
705
  });
567
706
  var clone = function(overrideAPI) {
568
707
  var plugins = [];
569
708
  var addPlugin = function(plugin) {
570
709
  if (!includePlugin(plugins, plugin)) {
571
- plugins.push(_object_spread8({}, plugin));
710
+ plugins.push(_object_spread10({}, plugin));
572
711
  }
573
712
  };
574
713
  var usePlugin = function() {
@@ -601,7 +740,7 @@ var createAsyncManager = function(hooks, api) {
601
740
  if (options.registerHook) {
602
741
  registerHook(options.registerHook);
603
742
  }
604
- return _object_spread_props7(_object_spread8(_object_spread_props7(_object_spread8({}, DEFAULT_OPTIONS), {
743
+ return _object_spread_props9(_object_spread10(_object_spread_props9(_object_spread10({}, DEFAULT_OPTIONS), {
605
744
  name: "No.".concat(index++, " plugin")
606
745
  }), options), {
607
746
  ASYNC_PLUGIN_SYMBOL,
@@ -612,13 +751,13 @@ var createAsyncManager = function(hooks, api) {
612
751
  plugins = [];
613
752
  };
614
753
  var init = function() {
615
- var _ref = _async_to_generator(function() {
754
+ var _ref = _async_to_generator2(function() {
616
755
  var sortedPlugins, mergedPluginAPI, hooksList, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, plugin, _, err;
617
- return _ts_generator(this, function(_state) {
756
+ return _ts_generator2(this, function(_state) {
618
757
  switch (_state.label) {
619
758
  case 0:
620
759
  sortedPlugins = sortPlugins(plugins);
621
- mergedPluginAPI = _object_spread8({}, pluginAPI, overrideAPI);
760
+ mergedPluginAPI = _object_spread10({}, pluginAPI, overrideAPI);
622
761
  checkPlugins(sortedPlugins);
623
762
  hooksList = [];
624
763
  _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
@@ -716,6 +855,7 @@ export {
716
855
  DEFAULT_OPTIONS,
717
856
  cloneHook,
718
857
  cloneHooksMap,
858
+ createAsyncInterruptWorkflow,
719
859
  createAsyncManager,
720
860
  createAsyncPipeline,
721
861
  createAsyncWaterfall,
@@ -724,15 +864,18 @@ export {
724
864
  createManager,
725
865
  createParallelWorkflow,
726
866
  createPipeline,
867
+ createSyncParallelWorkflow,
727
868
  createWaterfall,
728
869
  createWorkflow,
729
870
  generateRunner,
730
871
  getAsyncBrook,
731
872
  getBrook,
873
+ isAsyncInterruptWorkflow,
732
874
  isAsyncWaterfall,
733
875
  isAsyncWorkflow,
734
876
  isParallelWorkflow,
735
877
  isPipeline,
878
+ isSyncParallelWorkflow,
736
879
  isWaterfall,
737
880
  isWorkflow
738
881
  };
@@ -1,6 +1,6 @@
1
1
  import { isPipeline, createPipeline } from "../farrow-pipeline";
2
2
  import { isWaterfall, createWaterfall, isAsyncWaterfall, createAsyncWaterfall } from "../waterfall";
3
- import { isWorkflow, createWorkflow, isAsyncWorkflow, createAsyncWorkflow, isParallelWorkflow, createParallelWorkflow } from "../workflow";
3
+ import { isWorkflow, createWorkflow, isAsyncWorkflow, createAsyncWorkflow, isParallelWorkflow, createParallelWorkflow, isAsyncInterruptWorkflow, createAsyncInterruptWorkflow, isSyncParallelWorkflow, createSyncParallelWorkflow } from "../workflow";
4
4
  import { checkPlugins, hasOwnProperty, includePlugin, isObject, sortPlugins } from "./shared";
5
5
  const SYNC_PLUGIN_SYMBOL = "SYNC_PLUGIN_SYMBOL";
6
6
  const DEFAULT_OPTIONS = {
@@ -136,6 +136,12 @@ const cloneHook = (hook) => {
136
136
  if (isParallelWorkflow(hook)) {
137
137
  return createParallelWorkflow();
138
138
  }
139
+ if (isAsyncInterruptWorkflow(hook)) {
140
+ return createAsyncInterruptWorkflow();
141
+ }
142
+ if (isSyncParallelWorkflow(hook)) {
143
+ return createSyncParallelWorkflow();
144
+ }
139
145
  if (isPipeline(hook)) {
140
146
  return createPipeline();
141
147
  }
@@ -1,3 +1,5 @@
1
1
  export * from "./sync";
2
+ export * from "./syncParallel";
2
3
  export * from "./parallel";
3
4
  export * from "./async";
5
+ export * from "./interrupt";
@@ -0,0 +1,39 @@
1
+ import { createAsyncPipeline } from "../farrow-pipeline";
2
+ const ASYNC_INTERRUPT_WORKFLOW_SYMBOL = Symbol.for("ASYNC_INTERRUPT_WORKFLOW_SYMBOL");
3
+ const isAsyncInterruptWorkflow = (input) => Boolean(input === null || input === void 0 ? void 0 : input[ASYNC_INTERRUPT_WORKFLOW_SYMBOL]);
4
+ const createAsyncInterruptWorkflow = () => {
5
+ const pipeline = createAsyncPipeline();
6
+ const use = (...input) => {
7
+ pipeline.use(...input.map(mapAsyncWorkerToInterruptMiddleware));
8
+ return workflow;
9
+ };
10
+ const run = async (input) => {
11
+ const result = await pipeline.run(input, {
12
+ onLast: () => []
13
+ });
14
+ return result;
15
+ };
16
+ const workflow = {
17
+ ...pipeline,
18
+ use,
19
+ run,
20
+ [ASYNC_INTERRUPT_WORKFLOW_SYMBOL]: true
21
+ };
22
+ return workflow;
23
+ };
24
+ const mapAsyncWorkerToInterruptMiddleware = (worker) => async (input, next) => {
25
+ let isInterrupted = false;
26
+ const interrupt = (value) => {
27
+ isInterrupted = true;
28
+ return value;
29
+ };
30
+ const result = await Promise.resolve(worker(input, interrupt));
31
+ if (isInterrupted) {
32
+ return result;
33
+ }
34
+ return Promise.resolve(next(input));
35
+ };
36
+ export {
37
+ createAsyncInterruptWorkflow,
38
+ isAsyncInterruptWorkflow
39
+ };
@@ -0,0 +1,30 @@
1
+ import { createPipeline } from "../farrow-pipeline";
2
+ const SYNC_PARALLEL_WORKFLOW_SYMBOL = Symbol.for("SYNC_MODERN_PARALLEL_WORKFLOW");
3
+ const isSyncParallelWorkflow = (input) => Boolean(input === null || input === void 0 ? void 0 : input[SYNC_PARALLEL_WORKFLOW_SYMBOL]);
4
+ const createSyncParallelWorkflow = () => {
5
+ const pipeline = createPipeline();
6
+ const use = (...input) => {
7
+ pipeline.use(...input.map(mapSyncParallelWorkerToMiddleware));
8
+ return workflow;
9
+ };
10
+ const run = (input) => {
11
+ return pipeline.run(input, {
12
+ onLast: () => []
13
+ }).filter((result) => Boolean(result));
14
+ };
15
+ const workflow = {
16
+ ...pipeline,
17
+ run,
18
+ use,
19
+ [SYNC_PARALLEL_WORKFLOW_SYMBOL]: true
20
+ };
21
+ return workflow;
22
+ };
23
+ const mapSyncParallelWorkerToMiddleware = (worker) => (input, next) => [
24
+ worker(input),
25
+ ...next(input)
26
+ ];
27
+ export {
28
+ createSyncParallelWorkflow,
29
+ isSyncParallelWorkflow
30
+ };
@@ -1,17 +1,17 @@
1
1
  import type { Pipeline, MaybeAsync, Middleware, AsyncPipeline } from '../farrow-pipeline';
2
2
  import type { Brook, Waterfall, AsyncBrook, AsyncWaterfall } from '../waterfall';
3
- import type { Worker, Workflow, AsyncWorker, AsyncWorkflow, ParallelWorkflow } from '../workflow';
3
+ import type { Worker, Workflow, AsyncWorker, AsyncWorkflow, ParallelWorkflow, AsyncInterruptWorkflow, AsyncInterruptWorker, SyncParallelWorkflow } from '../workflow';
4
4
  /** All hook types. */
5
- export type Hook = Waterfall<any> | AsyncWaterfall<any> | Workflow<any, any> | AsyncWorkflow<any, any> | ParallelWorkflow<any> | Pipeline<any, any> | AsyncPipeline<any, any>;
5
+ export type Hook = Waterfall<any> | AsyncWaterfall<any> | Workflow<any, any> | AsyncWorkflow<any, any> | ParallelWorkflow<any> | SyncParallelWorkflow<any> | Pipeline<any, any> | AsyncPipeline<any, any> | AsyncInterruptWorkflow<any, any>;
6
6
  export type HooksMap = Record<string, Hook>;
7
7
  /** Extract the type of callback function from a hook. */
8
- export type ToThread<P extends Hook> = P extends Workflow<infer I, infer O> ? Worker<I, O> : P extends AsyncWorkflow<infer I, infer O> ? AsyncWorker<I, O> : P extends ParallelWorkflow<infer I, infer O> ? AsyncWorker<I, O> : P extends Waterfall<infer I> ? Brook<I> : P extends AsyncWaterfall<infer I> ? AsyncBrook<I> : P extends Pipeline<infer I, infer O> ? Middleware<I, O> : P extends AsyncPipeline<infer I, infer O> ? Middleware<I, MaybeAsync<O>> : never;
8
+ export type ToThread<P extends Hook> = P extends Workflow<infer I, infer O> ? Worker<I, O> : P extends AsyncWorkflow<infer I, infer O> ? AsyncWorker<I, O> : P extends ParallelWorkflow<infer I, infer O> ? AsyncWorker<I, O> : P extends SyncParallelWorkflow<infer I, infer O> ? Worker<I, O> : P extends Waterfall<infer I> ? Brook<I> : P extends AsyncWaterfall<infer I> ? AsyncBrook<I> : P extends Pipeline<infer I, infer O> ? Middleware<I, O> : P extends AsyncPipeline<infer I, infer O> ? Middleware<I, MaybeAsync<O>> : P extends AsyncInterruptWorkflow<infer I, infer O> ? AsyncInterruptWorker<I, O> : never;
9
9
  /** Extract types of callback function from hooks. */
10
10
  export type ToThreads<PS> = {
11
11
  [K in keyof PS]: PS[K] extends Hook ? ToThread<PS[K]> : PS[K] extends void ? void : never;
12
12
  };
13
13
  /** Extract run method from a hook. */
14
- export type RunnerFromHook<P extends Hook> = P extends Waterfall<infer I> ? Waterfall<I>['run'] : P extends AsyncWaterfall<infer I> ? AsyncWaterfall<I>['run'] : P extends Workflow<infer I, infer O> ? Workflow<I, O>['run'] : P extends AsyncWorkflow<infer I, infer O> ? AsyncWorkflow<I, O>['run'] : P extends ParallelWorkflow<infer I, infer O> ? ParallelWorkflow<I, O>['run'] : P extends Pipeline<infer I, infer O> ? Pipeline<I, O>['run'] : P extends AsyncPipeline<infer I, infer O> ? AsyncPipeline<I, O>['run'] : never;
14
+ export type RunnerFromHook<P extends Hook> = P extends Waterfall<infer I> ? Waterfall<I>['run'] : P extends AsyncWaterfall<infer I> ? AsyncWaterfall<I>['run'] : P extends Workflow<infer I, infer O> ? Workflow<I, O>['run'] : P extends AsyncWorkflow<infer I, infer O> ? AsyncWorkflow<I, O>['run'] : P extends ParallelWorkflow<infer I, infer O> ? ParallelWorkflow<I, O>['run'] : P extends SyncParallelWorkflow<infer I, infer O> ? SyncParallelWorkflow<I, O>['run'] : P extends Pipeline<infer I, infer O> ? Pipeline<I, O>['run'] : P extends AsyncPipeline<infer I, infer O> ? AsyncPipeline<I, O>['run'] : P extends AsyncInterruptWorkflow<infer I, infer O> ? AsyncInterruptWorkflow<I, O>['run'] : never;
15
15
  /** Extract all run methods from hooks. */
16
16
  export type ToRunners<PS> = {
17
17
  [K in keyof PS]: PS[K] extends Hook ? RunnerFromHook<PS[K]> : PS[K] extends void ? void : never;
@@ -1,3 +1,5 @@
1
1
  export * from './sync';
2
+ export * from './syncParallel';
2
3
  export * from './parallel';
3
4
  export * from './async';
5
+ export * from './interrupt';
@@ -0,0 +1,12 @@
1
+ import { MaybeAsync } from '../farrow-pipeline';
2
+ declare const ASYNC_INTERRUPT_WORKFLOW_SYMBOL: unique symbol;
3
+ export type AsyncInterruptWorker<I, O> = (I: I, interrupt: (result: any) => void) => MaybeAsync<O>;
4
+ export type AsyncInterruptWorkers<I, O> = AsyncInterruptWorker<I, O>[];
5
+ export type AsyncInterruptWorkflow<I, O> = {
6
+ run: (input: I) => MaybeAsync<O[]>;
7
+ use: (...I: AsyncInterruptWorkers<I, O>) => AsyncInterruptWorkflow<I, O>;
8
+ [ASYNC_INTERRUPT_WORKFLOW_SYMBOL]: true;
9
+ };
10
+ export declare const isAsyncInterruptWorkflow: (input: any) => input is AsyncInterruptWorkflow<any, any>;
11
+ export declare const createAsyncInterruptWorkflow: <I = void, O = unknown>() => AsyncInterruptWorkflow<I, O>;
12
+ export {};
@@ -0,0 +1,10 @@
1
+ import type { Workers } from './sync';
2
+ declare const SYNC_PARALLEL_WORKFLOW_SYMBOL: unique symbol;
3
+ export type SyncParallelWorkflow<I, O = any> = {
4
+ run: (input: I) => O[];
5
+ use: (...I: Workers<I, O>) => SyncParallelWorkflow<I, O>;
6
+ [SYNC_PARALLEL_WORKFLOW_SYMBOL]: true;
7
+ };
8
+ export declare const isSyncParallelWorkflow: (input: any) => input is SyncParallelWorkflow<any, any>;
9
+ export declare const createSyncParallelWorkflow: <I = void, O = unknown>() => SyncParallelWorkflow<I, O>;
10
+ export {};
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "2.56.2",
18
+ "version": "2.57.1",
19
19
  "jsnext:source": "./src/index.ts",
20
20
  "types": "./dist/types/index.d.ts",
21
21
  "main": "./dist/cjs/index.js",
@@ -33,15 +33,15 @@
33
33
  },
34
34
  "dependencies": {
35
35
  "@swc/helpers": "0.5.3",
36
- "@modern-js/utils": "2.56.2"
36
+ "@modern-js/utils": "2.57.1"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/jest": "^29",
40
40
  "@types/node": "^14",
41
41
  "typescript": "^5",
42
42
  "jest": "^29",
43
- "@scripts/build": "2.56.2",
44
- "@scripts/jest-config": "2.56.2"
43
+ "@scripts/build": "2.57.1",
44
+ "@scripts/jest-config": "2.57.1"
45
45
  },
46
46
  "sideEffects": false,
47
47
  "publishConfig": {