lombok-typescript 0.3.0 → 0.6.0

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 (52) hide show
  1. package/README.md +48 -12
  2. package/dist/{log-Dpr79VRt.d.cts → chain-of-responsibility-CQ7votcC.d.cts} +45 -1
  3. package/dist/{log-Dbe0sSP1.d.ts → chain-of-responsibility-Dwsaoe4x.d.ts} +45 -1
  4. package/dist/cli/index.cjs +19 -1
  5. package/dist/cli/index.cjs.map +1 -1
  6. package/dist/cli/index.d.cts +1 -1
  7. package/dist/cli/index.d.ts +1 -1
  8. package/dist/cli/index.js +19 -1
  9. package/dist/cli/index.js.map +1 -1
  10. package/dist/codegen/index.cjs +18 -0
  11. package/dist/codegen/index.cjs.map +1 -1
  12. package/dist/codegen/index.js +18 -0
  13. package/dist/codegen/index.js.map +1 -1
  14. package/dist/core/index.cjs +1 -0
  15. package/dist/core/index.cjs.map +1 -1
  16. package/dist/core/index.d.cts +1 -0
  17. package/dist/core/index.d.ts +1 -0
  18. package/dist/core/index.js +1 -0
  19. package/dist/core/index.js.map +1 -1
  20. package/dist/index.cjs +2 -1
  21. package/dist/index.cjs.map +1 -1
  22. package/dist/index.d.cts +1 -1
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.js +2 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/legacy/index.cjs +539 -0
  27. package/dist/legacy/index.cjs.map +1 -1
  28. package/dist/legacy/index.d.cts +29 -3
  29. package/dist/legacy/index.d.ts +29 -3
  30. package/dist/legacy/index.js +523 -1
  31. package/dist/legacy/index.js.map +1 -1
  32. package/dist/observable-AIiQMzLD.d.cts +6 -0
  33. package/dist/observable-AIiQMzLD.d.ts +6 -0
  34. package/dist/observers/mobx.cjs +17 -0
  35. package/dist/observers/mobx.cjs.map +1 -0
  36. package/dist/observers/mobx.d.cts +10 -0
  37. package/dist/observers/mobx.d.ts +10 -0
  38. package/dist/observers/mobx.js +12 -0
  39. package/dist/observers/mobx.js.map +1 -0
  40. package/dist/observers/rxjs.cjs +17 -0
  41. package/dist/observers/rxjs.cjs.map +1 -0
  42. package/dist/observers/rxjs.d.cts +10 -0
  43. package/dist/observers/rxjs.d.ts +10 -0
  44. package/dist/observers/rxjs.js +15 -0
  45. package/dist/observers/rxjs.js.map +1 -0
  46. package/dist/stage3/index.cjs +570 -1
  47. package/dist/stage3/index.cjs.map +1 -1
  48. package/dist/stage3/index.d.cts +31 -3
  49. package/dist/stage3/index.d.ts +31 -3
  50. package/dist/stage3/index.js +554 -2
  51. package/dist/stage3/index.js.map +1 -1
  52. package/package.json +40 -5
@@ -98,10 +98,19 @@ var MetadataKeys = {
98
98
  FIELD_DEFAULTS: `${PREFIX}fieldDefaults`,
99
99
  ACCESSORS: `${PREFIX}accessors`,
100
100
  LOG: `${PREFIX}log`,
101
+ // Class-level (TS-only)
102
+ OBSERVABLE: `${PREFIX}observable`,
101
103
  // Class-level (GoF)
102
104
  SINGLETON: `${PREFIX}singleton`,
103
105
  FACTORY: `${PREFIX}factory`,
104
106
  PROTOTYPE: `${PREFIX}prototype`,
107
+ CHAIN_OF_RESPONSIBILITY: `${PREFIX}chainOfResponsibility`,
108
+ COMMAND: `${PREFIX}command`,
109
+ ITERABLE: `${PREFIX}iterable`,
110
+ MEMENTO: `${PREFIX}memento`,
111
+ MEMENTO_EXCLUDE: `${PREFIX}memento:exclude`,
112
+ STATE: `${PREFIX}state`,
113
+ STRATEGY: `${PREFIX}strategy`,
105
114
  // Field-level
106
115
  GETTER: `${PREFIX}getter`,
107
116
  SETTER: `${PREFIX}setter`,
@@ -109,8 +118,11 @@ var MetadataKeys = {
109
118
  WITH: `${PREFIX}with`,
110
119
  DELEGATE: `${PREFIX}delegate`,
111
120
  EQUALS_EXCLUDE: `${PREFIX}equals:exclude`,
121
+ ITERATE_OVER: `${PREFIX}iterateOver`,
112
122
  // Method-level
113
- MEMOIZE: `${PREFIX}memoize`};
123
+ MEMOIZE: `${PREFIX}memoize`,
124
+ HANDLER: `${PREFIX}handler`,
125
+ TRANSITION: `${PREFIX}transition`};
114
126
 
115
127
  // src/decorators/shared/factory.ts
116
128
  var factoryRegistry = /* @__PURE__ */ new Map();
@@ -360,6 +372,510 @@ function withFieldStage3(backend, context) {
360
372
  fieldMarkerStage3(backend, context, MetadataKeys.WITH);
361
373
  }
362
374
 
375
+ // src/decorators/shared/strategy.ts
376
+ var strategyRegistry = /* @__PURE__ */ new Map();
377
+ function familyBucket(family, create = false) {
378
+ let bucket = strategyRegistry.get(family);
379
+ if (!bucket && create) {
380
+ bucket = /* @__PURE__ */ new Map();
381
+ strategyRegistry.set(family, bucket);
382
+ }
383
+ return bucket;
384
+ }
385
+ function registerStrategy(family, name, ctor) {
386
+ const bucket = familyBucket(family, true);
387
+ bucket.set(name, ctor);
388
+ }
389
+ function getStrategyFromRegistry(family, name) {
390
+ const ctor = familyBucket(family)?.get(name);
391
+ if (!ctor) {
392
+ throw new Error(`No strategy registered for family "${family}" and name "${name}"`);
393
+ }
394
+ return new ctor();
395
+ }
396
+ function listStrategies(family) {
397
+ const bucket = familyBucket(family);
398
+ return bucket ? Array.from(bucket.keys()) : [];
399
+ }
400
+ function getStrategyRegistry() {
401
+ return strategyRegistry;
402
+ }
403
+ var StrategyRegistry = {
404
+ get: getStrategyFromRegistry,
405
+ list: listStrategies
406
+ };
407
+ function strategyClassStage3(backend, value, context, family, name) {
408
+ backend.metadata.set(MetadataKeys.STRATEGY, context.metadata, void 0, {
409
+ family,
410
+ name
411
+ });
412
+ registerStrategy(family, name, value);
413
+ }
414
+
415
+ // src/decorators/shared/transition.ts
416
+ function normalizeFromStates(from) {
417
+ return Array.isArray(from) ? from : [from];
418
+ }
419
+ function transitionMethodStage3(backend, value, context, options) {
420
+ backend.metadata.set(MetadataKeys.TRANSITION, context.metadata, context.name, options);
421
+ return value;
422
+ }
423
+
424
+ // src/decorators/shared/state.ts
425
+ var STATE_SYMBOL = /* @__PURE__ */ Symbol("lombok-ts:state");
426
+ function collectTransitionMethods(metadata, proto, classMetadata) {
427
+ const transitions = /* @__PURE__ */ new Map();
428
+ for (const key of Object.getOwnPropertyNames(proto)) {
429
+ if (key === "constructor") continue;
430
+ const options = metadata.get(MetadataKeys.TRANSITION, proto, key) ?? (classMetadata ? metadata.get(MetadataKeys.TRANSITION, classMetadata, key) : void 0);
431
+ if (!options) continue;
432
+ const desc = Object.getOwnPropertyDescriptor(proto, key);
433
+ if (!desc || typeof desc.value !== "function") continue;
434
+ transitions.set(key, { options, original: desc.value });
435
+ }
436
+ return transitions;
437
+ }
438
+ function applyStateWrapping(backend, target, options, classMetadata) {
439
+ const { states, initial, onEnter, onExit, onTransition } = options;
440
+ if (!states.includes(initial)) {
441
+ throw new Error(`@State initial state "${initial}" is not in states: [${states.join(", ")}]`);
442
+ }
443
+ const transitions = collectTransitionMethods(
444
+ backend.metadata,
445
+ target.prototype,
446
+ classMetadata
447
+ );
448
+ const StateClass = class extends target {
449
+ constructor(...args) {
450
+ super(...args);
451
+ Object.defineProperty(this, STATE_SYMBOL, {
452
+ value: initial,
453
+ writable: true,
454
+ enumerable: false,
455
+ configurable: false
456
+ });
457
+ onEnter?.(initial);
458
+ }
459
+ get state() {
460
+ return this[STATE_SYMBOL] ?? initial;
461
+ }
462
+ };
463
+ const stateProto = StateClass.prototype;
464
+ for (const [methodName, { options: transition, original }] of transitions) {
465
+ const fromStates = normalizeFromStates(transition.from);
466
+ const toState = transition.to;
467
+ if (!states.includes(toState)) {
468
+ throw new Error(`@Transition on "${methodName}" targets unknown state "${toState}"`);
469
+ }
470
+ for (const from of fromStates) {
471
+ if (!states.includes(from)) {
472
+ throw new Error(`@Transition on "${methodName}" references unknown state "${from}"`);
473
+ }
474
+ }
475
+ Object.defineProperty(stateProto, methodName, {
476
+ configurable: true,
477
+ enumerable: false,
478
+ writable: true,
479
+ value: function stateTransitionWrapper(...args) {
480
+ const self = this;
481
+ const current = self[STATE_SYMBOL] ?? "";
482
+ if (!fromStates.includes(current)) {
483
+ throw new Error(
484
+ `Cannot transition from "${current}" to "${toState}" via ${methodName}()`
485
+ );
486
+ }
487
+ onExit?.(current);
488
+ const result = original.apply(this, args);
489
+ self[STATE_SYMBOL] = toState;
490
+ onTransition?.(current, toState);
491
+ onEnter?.(toState);
492
+ return result;
493
+ }
494
+ });
495
+ }
496
+ return StateClass;
497
+ }
498
+ function stateClassStage3(backend, value, context, options) {
499
+ backend.metadata.set(MetadataKeys.STATE, context.metadata, void 0, options);
500
+ return applyStateWrapping(backend, value, options, context.metadata);
501
+ }
502
+
503
+ // src/decorators/shared/command.ts
504
+ function assertCommand(target) {
505
+ const proto = target.prototype;
506
+ if (typeof proto.execute !== "function") {
507
+ throw new Error(`@Command class ${target.name} must define execute()`);
508
+ }
509
+ }
510
+ function commandClassStage3(backend, value, context) {
511
+ assertCommand(value);
512
+ backend.metadata.set(MetadataKeys.COMMAND, context.metadata, void 0, true);
513
+ }
514
+
515
+ // src/decorators/shared/command-history.ts
516
+ var CommandHistory = class {
517
+ undoStack = [];
518
+ redoStack = [];
519
+ execute(cmd) {
520
+ const result = cmd.execute();
521
+ this.undoStack.push(cmd);
522
+ this.redoStack.length = 0;
523
+ return result;
524
+ }
525
+ undo() {
526
+ const cmd = this.undoStack.pop();
527
+ if (!cmd) {
528
+ throw new Error("Nothing to undo");
529
+ }
530
+ if (typeof cmd.undo !== "function") {
531
+ this.undoStack.push(cmd);
532
+ throw new Error("Command does not support undo()");
533
+ }
534
+ const result = cmd.undo();
535
+ this.redoStack.push(cmd);
536
+ return result;
537
+ }
538
+ redo() {
539
+ const cmd = this.redoStack.pop();
540
+ if (!cmd) {
541
+ throw new Error("Nothing to redo");
542
+ }
543
+ const result = cmd.execute();
544
+ this.undoStack.push(cmd);
545
+ return result;
546
+ }
547
+ get canUndo() {
548
+ return this.undoStack.length > 0;
549
+ }
550
+ get canRedo() {
551
+ return this.redoStack.length > 0;
552
+ }
553
+ clear() {
554
+ this.undoStack.length = 0;
555
+ this.redoStack.length = 0;
556
+ }
557
+ };
558
+
559
+ // src/decorators/shared/memento.ts
560
+ var MEMENTO_SNAPSHOT = /* @__PURE__ */ Symbol("lombok-ts:memento-snapshot");
561
+ var stage3MementoExcluded = /* @__PURE__ */ new WeakMap();
562
+ var legacyMementoExcluded = /* @__PURE__ */ new WeakMap();
563
+ function registerStage3MementoExclude(classMetadata, field) {
564
+ const set = stage3MementoExcluded.get(classMetadata) ?? /* @__PURE__ */ new Set();
565
+ set.add(field);
566
+ stage3MementoExcluded.set(classMetadata, set);
567
+ }
568
+ function isMementoSnapshot(value) {
569
+ return typeof value === "object" && value !== null && value[MEMENTO_SNAPSHOT] === true;
570
+ }
571
+ function collectExcludedFields(metadata, proto, classMetadata) {
572
+ const excluded = /* @__PURE__ */ new Set();
573
+ for (const key of Object.getOwnPropertyNames(proto)) {
574
+ if (key === "constructor") continue;
575
+ if (metadata.has(MetadataKeys.MEMENTO_EXCLUDE, proto, key) || classMetadata && metadata.has(MetadataKeys.MEMENTO_EXCLUDE, classMetadata, key)) {
576
+ excluded.add(key);
577
+ }
578
+ }
579
+ if (classMetadata) {
580
+ for (const key of stage3MementoExcluded.get(classMetadata) ?? []) {
581
+ excluded.add(key);
582
+ }
583
+ }
584
+ for (const key of legacyMementoExcluded.get(proto) ?? []) {
585
+ excluded.add(key);
586
+ }
587
+ return excluded;
588
+ }
589
+ function snapshotInstance(instance, excluded) {
590
+ const data = {};
591
+ for (const key of Object.keys(instance)) {
592
+ if (excluded.has(key)) continue;
593
+ if (key === "save" || key === "restore") continue;
594
+ data[key] = deepClone(instance[key]);
595
+ }
596
+ return { [MEMENTO_SNAPSHOT]: true, data };
597
+ }
598
+ function applySnapshot(instance, snapshot) {
599
+ for (const [key, value] of Object.entries(snapshot.data)) {
600
+ instance[key] = deepClone(value);
601
+ }
602
+ }
603
+ function wrapMementoClass(backend, target, classMetadata) {
604
+ const excluded = collectExcludedFields(
605
+ backend.metadata,
606
+ target.prototype,
607
+ classMetadata
608
+ );
609
+ const MementoClass = class extends target {
610
+ save() {
611
+ return snapshotInstance(this, excluded);
612
+ }
613
+ restore(snapshot) {
614
+ if (!isMementoSnapshot(snapshot)) {
615
+ throw new TypeError("restore() expects a snapshot returned from save()");
616
+ }
617
+ applySnapshot(this, snapshot);
618
+ }
619
+ };
620
+ return MementoClass;
621
+ }
622
+ function mementoClassStage3(backend, value, context) {
623
+ backend.metadata.set(MetadataKeys.MEMENTO, context.metadata, void 0, true);
624
+ return wrapMementoClass(backend, value, context.metadata);
625
+ }
626
+ function mementoExcludeFieldStage3(backend, context) {
627
+ backend.metadata.set(
628
+ MetadataKeys.MEMENTO_EXCLUDE,
629
+ context.metadata,
630
+ context.name,
631
+ true
632
+ );
633
+ registerStage3MementoExclude(context.metadata, String(context.name));
634
+ }
635
+
636
+ // src/decorators/shared/observable.ts
637
+ var LISTENERS = /* @__PURE__ */ Symbol("lombok-ts:observable-listeners");
638
+ function findGetter(proto, key) {
639
+ let current = proto;
640
+ while (current) {
641
+ const desc = Object.getOwnPropertyDescriptor(current, key);
642
+ if (desc?.get) return desc.get;
643
+ current = Object.getPrototypeOf(current);
644
+ }
645
+ return void 0;
646
+ }
647
+ function getInternals(target) {
648
+ const bag = target;
649
+ if (!bag[LISTENERS]) {
650
+ bag[LISTENERS] = {
651
+ listeners: /* @__PURE__ */ new Map(),
652
+ wildcards: /* @__PURE__ */ new Set(),
653
+ derivedKeys: /* @__PURE__ */ new Set(),
654
+ derivedCache: /* @__PURE__ */ new Map()
655
+ };
656
+ }
657
+ return bag[LISTENERS];
658
+ }
659
+ function notify(internals, key, next, prev) {
660
+ const keyListeners = internals.listeners.get(key);
661
+ if (keyListeners) {
662
+ for (const listener of keyListeners) {
663
+ listener(next, prev);
664
+ }
665
+ }
666
+ for (const listener of internals.wildcards) {
667
+ listener(key, next, prev);
668
+ }
669
+ if (internals.derivedKeys.size > 0) {
670
+ const instance = targetWithInternals(internals);
671
+ for (const derivedKey of internals.derivedKeys) {
672
+ const prevDerived = internals.derivedCache.get(derivedKey);
673
+ internals.derivedCache.delete(derivedKey);
674
+ const getter = findGetter(Object.getPrototypeOf(instance), derivedKey);
675
+ if (!getter) continue;
676
+ const newDerived = getter.call(instance);
677
+ internals.derivedCache.set(derivedKey, newDerived);
678
+ if (prevDerived !== newDerived) {
679
+ const derivedListeners = internals.listeners.get(derivedKey);
680
+ if (derivedListeners) {
681
+ for (const listener of derivedListeners) {
682
+ listener(newDerived, prevDerived);
683
+ }
684
+ }
685
+ }
686
+ }
687
+ }
688
+ }
689
+ var INSTANCE = /* @__PURE__ */ Symbol("lombok-ts:observable-instance");
690
+ function targetWithInternals(internals) {
691
+ return internals[INSTANCE] ?? {};
692
+ }
693
+ function installSubscribe(proto) {
694
+ Object.defineProperty(proto, "subscribe", {
695
+ configurable: true,
696
+ enumerable: false,
697
+ writable: true,
698
+ value: function subscribe(key, listener) {
699
+ const internals = getInternals(this);
700
+ internals[INSTANCE] = this;
701
+ if (key === "*") {
702
+ const wildcardListener = listener;
703
+ internals.wildcards.add(wildcardListener);
704
+ return () => internals.wildcards.delete(wildcardListener);
705
+ }
706
+ const keyListener = listener;
707
+ let set = internals.listeners.get(key);
708
+ if (!set) {
709
+ set = /* @__PURE__ */ new Set();
710
+ internals.listeners.set(key, set);
711
+ }
712
+ set.add(keyListener);
713
+ const proto2 = Object.getPrototypeOf(this);
714
+ if (findGetter(proto2, key)) {
715
+ internals.derivedKeys.add(key);
716
+ }
717
+ return () => set.delete(keyListener);
718
+ }
719
+ });
720
+ }
721
+ function wrapObservableInstance(instance) {
722
+ const internals = getInternals(instance);
723
+ internals[INSTANCE] = instance;
724
+ return new Proxy(instance, {
725
+ set(target, prop, value, receiver) {
726
+ if (typeof prop === "symbol") {
727
+ return Reflect.set(target, prop, value, receiver);
728
+ }
729
+ const prev = Reflect.get(target, prop, receiver);
730
+ const result = Reflect.set(target, prop, value, receiver);
731
+ if (prev !== value) {
732
+ notify(internals, prop, value, prev);
733
+ }
734
+ return result;
735
+ }
736
+ });
737
+ }
738
+ function wrapObservableClass(target) {
739
+ installSubscribe(target.prototype);
740
+ const ObservableClass = class extends target {
741
+ constructor(...args) {
742
+ super(...args);
743
+ return wrapObservableInstance(this);
744
+ }
745
+ };
746
+ return ObservableClass;
747
+ }
748
+ function observableClassStage3(backend, value, context) {
749
+ backend.metadata.set(MetadataKeys.OBSERVABLE, context.metadata, void 0, true);
750
+ return wrapObservableClass(value);
751
+ }
752
+ function observableDerivedStage3(backend, value, context) {
753
+ backend.metadata.set(MetadataKeys.OBSERVABLE, context.metadata, context.name, {
754
+ derived: true
755
+ });
756
+ const key = context.name;
757
+ return function derivedGetter() {
758
+ const internals = getInternals(this);
759
+ internals[INSTANCE] = this;
760
+ internals.derivedKeys.add(key);
761
+ if (internals.derivedCache.has(key)) {
762
+ return internals.derivedCache.get(key);
763
+ }
764
+ const result = value.call(this);
765
+ internals.derivedCache.set(key, result);
766
+ return result;
767
+ };
768
+ }
769
+ function observerClassStage3(backend, value, context) {
770
+ return observableClassStage3(backend, value, context);
771
+ }
772
+
773
+ // src/decorators/shared/chain-of-responsibility.ts
774
+ function collectHandlers(backend, proto, classMetadata) {
775
+ const handlers = [];
776
+ for (const key of Object.getOwnPropertyNames(proto)) {
777
+ if (key === "constructor") continue;
778
+ const options = backend.metadata.get(MetadataKeys.HANDLER, proto, key) ?? (classMetadata ? backend.metadata.get(MetadataKeys.HANDLER, classMetadata, key) : void 0);
779
+ if (!options) continue;
780
+ const desc = Object.getOwnPropertyDescriptor(proto, key);
781
+ if (!desc || typeof desc.value !== "function") continue;
782
+ handlers.push({
783
+ order: options.order,
784
+ method: key,
785
+ fn: desc.value
786
+ });
787
+ }
788
+ handlers.sort((a, b) => a.order - b.order);
789
+ return handlers;
790
+ }
791
+ function wrapChainClass(backend, target, classMetadata) {
792
+ const handlers = collectHandlers(backend, target.prototype, classMetadata);
793
+ const ChainClass = class extends target {
794
+ handle(context) {
795
+ for (const handler of handlers) {
796
+ const result = handler.fn.call(this, context);
797
+ if (result === true || result !== void 0 && result !== false) {
798
+ return true;
799
+ }
800
+ }
801
+ return false;
802
+ }
803
+ };
804
+ return ChainClass;
805
+ }
806
+ function chainOfResponsibilityClassStage3(backend, value, context) {
807
+ backend.metadata.set(
808
+ MetadataKeys.CHAIN_OF_RESPONSIBILITY,
809
+ context.metadata,
810
+ void 0,
811
+ true
812
+ );
813
+ return wrapChainClass(backend, value, context.metadata);
814
+ }
815
+ function handlerMethodStage3(backend, value, context, options) {
816
+ backend.metadata.set(MetadataKeys.HANDLER, context.metadata, context.name, options);
817
+ return value;
818
+ }
819
+
820
+ // src/decorators/shared/iterable.ts
821
+ var ITERATE_FIELD = /* @__PURE__ */ Symbol("lombok-ts:iterate-over-field");
822
+ var legacyIterateFields = /* @__PURE__ */ new WeakMap();
823
+ var stage3IterateFields = /* @__PURE__ */ new WeakMap();
824
+ function registerStage3IterateField(classMetadata, field) {
825
+ const existing = stage3IterateFields.get(classMetadata) ?? [];
826
+ existing.push(field);
827
+ stage3IterateFields.set(classMetadata, existing);
828
+ }
829
+ function resolveIterateField(backend, proto, classMetadata) {
830
+ const fields = [];
831
+ for (const key of [
832
+ ...Object.getOwnPropertyNames(proto),
833
+ ...Object.getOwnPropertySymbols(proto)
834
+ ]) {
835
+ if (key === "constructor") continue;
836
+ if (backend.metadata.has(MetadataKeys.ITERATE_OVER, proto, key) || classMetadata && backend.metadata.has(MetadataKeys.ITERATE_OVER, classMetadata, key)) {
837
+ fields.push(key);
838
+ }
839
+ }
840
+ if (classMetadata) {
841
+ fields.push(...stage3IterateFields.get(classMetadata) ?? []);
842
+ }
843
+ fields.push(...legacyIterateFields.get(proto) ?? []);
844
+ if (fields.length === 0) {
845
+ throw new Error("@Iterable requires exactly one @IterateOver field");
846
+ }
847
+ if (fields.length > 1) {
848
+ throw new Error("@Iterable allows only one @IterateOver field");
849
+ }
850
+ return fields[0];
851
+ }
852
+ function installIterator(target, fieldKey) {
853
+ Object.defineProperty(target.prototype, Symbol.iterator, {
854
+ configurable: true,
855
+ enumerable: false,
856
+ writable: true,
857
+ value: function* iterateOver() {
858
+ const collection = this[fieldKey];
859
+ if (collection == null) return;
860
+ yield* collection;
861
+ }
862
+ });
863
+ }
864
+ function iterableClassStage3(backend, value, context) {
865
+ backend.metadata.set(MetadataKeys.ITERABLE, context.metadata, void 0, true);
866
+ const fieldKey = resolveIterateField(
867
+ backend,
868
+ value.prototype,
869
+ context.metadata
870
+ );
871
+ value[ITERATE_FIELD] = fieldKey;
872
+ installIterator(value, fieldKey);
873
+ }
874
+ function iterateOverFieldStage3(backend, context) {
875
+ backend.metadata.set(MetadataKeys.ITERATE_OVER, context.metadata, context.name, true);
876
+ registerStage3IterateField(context.metadata, context.name);
877
+ }
878
+
363
879
  // src/decorators/stage3/index.ts
364
880
  var NonNull = defineFieldDecorator(nonNullFieldStage3);
365
881
  var Singleton = defineClassDecorator(singletonClassStage3);
@@ -435,6 +951,42 @@ function Delegate(...methods) {
435
951
  );
436
952
  }
437
953
  var EqualsExclude = defineFieldDecorator(equalsExcludeFieldStage3);
954
+ function Strategy(family, name) {
955
+ return defineClassDecorator((backend, value, context) => {
956
+ strategyClassStage3(backend, value, context, family, name);
957
+ });
958
+ }
959
+ function State(options) {
960
+ return defineClassDecorator(
961
+ (backend, value, context) => stateClassStage3(backend, value, context, options)
962
+ );
963
+ }
964
+ function Transition(options) {
965
+ return defineMethodDecorator(
966
+ (backend, value, context) => transitionMethodStage3(backend, value, context, options)
967
+ );
968
+ }
969
+ var Command = defineClassDecorator(commandClassStage3);
970
+ var observableClassDec = defineClassDecorator(observableClassStage3);
971
+ var observableDerivedDec = defineGetterDecorator(observableDerivedStage3);
972
+ function Observable() {
973
+ return observableClassDec;
974
+ }
975
+ Observable.Derived = observableDerivedDec;
976
+ var Observer = defineClassDecorator(observerClassStage3);
977
+ var mementoClassDec = defineClassDecorator(mementoClassStage3);
978
+ function Memento() {
979
+ return mementoClassDec;
980
+ }
981
+ Memento.Exclude = defineFieldDecorator(mementoExcludeFieldStage3);
982
+ var ChainOfResponsibility = defineClassDecorator(chainOfResponsibilityClassStage3);
983
+ function Handler(options) {
984
+ return defineMethodDecorator(
985
+ (backend, value, context) => handlerMethodStage3(backend, value, context, options)
986
+ );
987
+ }
988
+ var Iterable = defineClassDecorator(iterableClassStage3);
989
+ var IterateOver = defineFieldDecorator(iterateOverFieldStage3);
438
990
 
439
991
  // src/stage3/index.ts
440
992
  function getClassMetadata(cls) {
@@ -443,6 +995,9 @@ function getClassMetadata(cls) {
443
995
 
444
996
  exports.Accessors = Accessors;
445
997
  exports.Builder = Builder;
998
+ exports.ChainOfResponsibility = ChainOfResponsibility;
999
+ exports.Command = Command;
1000
+ exports.CommandHistory = CommandHistory;
446
1001
  exports.Data = Data;
447
1002
  exports.Delegate = Delegate;
448
1003
  exports.Equals = Equals;
@@ -450,14 +1005,24 @@ exports.EqualsExclude = EqualsExclude;
450
1005
  exports.Factory = Factory;
451
1006
  exports.FieldDefaults = FieldDefaults;
452
1007
  exports.Getter = Getter;
1008
+ exports.Handler = Handler;
1009
+ exports.Iterable = Iterable;
1010
+ exports.IterateOver = IterateOver;
453
1011
  exports.Log = Log;
1012
+ exports.Memento = Memento;
454
1013
  exports.Memoize = Memoize;
455
1014
  exports.NonNull = NonNull;
1015
+ exports.Observable = Observable;
1016
+ exports.Observer = Observer;
456
1017
  exports.Prototype = Prototype;
457
1018
  exports.Setter = Setter;
458
1019
  exports.Singleton = Singleton;
459
1020
  exports.Stage3Backend = Stage3Backend;
1021
+ exports.State = State;
1022
+ exports.Strategy = Strategy;
1023
+ exports.StrategyRegistry = StrategyRegistry;
460
1024
  exports.ToString = ToString;
1025
+ exports.Transition = Transition;
461
1026
  exports.UtilityClass = UtilityClass;
462
1027
  exports.Value = Value;
463
1028
  exports.With = With;
@@ -469,7 +1034,11 @@ exports.defineMethodDecorator = defineMethodDecorator;
469
1034
  exports.defineSetterDecorator = defineSetterDecorator;
470
1035
  exports.getClassMetadata = getClassMetadata;
471
1036
  exports.getFactoryRegistry = getFactoryRegistry;
1037
+ exports.getStrategyFromRegistry = getStrategyFromRegistry;
1038
+ exports.getStrategyRegistry = getStrategyRegistry;
1039
+ exports.listStrategies = listStrategies;
472
1040
  exports.registerFactory = registerFactory;
1041
+ exports.registerStrategy = registerStrategy;
473
1042
  exports.stage3Backend = stage3Backend;
474
1043
  //# sourceMappingURL=index.cjs.map
475
1044
  //# sourceMappingURL=index.cjs.map