lombok-typescript 0.2.0 → 0.5.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.
- package/README.md +54 -14
- package/dist/{log-Dpr79VRt.d.cts → chain-of-responsibility-CQ7votcC.d.cts} +45 -1
- package/dist/{log-Dbe0sSP1.d.ts → chain-of-responsibility-Dwsaoe4x.d.ts} +45 -1
- package/dist/cli/index.cjs +19 -1
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.cts +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.js +19 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/codegen/index.cjs +18 -0
- package/dist/codegen/index.cjs.map +1 -1
- package/dist/codegen/index.js +18 -0
- package/dist/codegen/index.js.map +1 -1
- package/dist/core/index.cjs +1 -0
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/index.cjs +2 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/legacy/index.cjs +539 -0
- package/dist/legacy/index.cjs.map +1 -1
- package/dist/legacy/index.d.cts +29 -3
- package/dist/legacy/index.d.ts +29 -3
- package/dist/legacy/index.js +523 -1
- package/dist/legacy/index.js.map +1 -1
- package/dist/observable-AIiQMzLD.d.cts +6 -0
- package/dist/observable-AIiQMzLD.d.ts +6 -0
- package/dist/observers/mobx.cjs +17 -0
- package/dist/observers/mobx.cjs.map +1 -0
- package/dist/observers/mobx.d.cts +10 -0
- package/dist/observers/mobx.d.ts +10 -0
- package/dist/observers/mobx.js +12 -0
- package/dist/observers/mobx.js.map +1 -0
- package/dist/observers/rxjs.cjs +17 -0
- package/dist/observers/rxjs.cjs.map +1 -0
- package/dist/observers/rxjs.d.cts +10 -0
- package/dist/observers/rxjs.d.ts +10 -0
- package/dist/observers/rxjs.js +15 -0
- package/dist/observers/rxjs.js.map +1 -0
- package/dist/stage3/index.cjs +570 -1
- package/dist/stage3/index.cjs.map +1 -1
- package/dist/stage3/index.d.cts +31 -3
- package/dist/stage3/index.d.ts +31 -3
- package/dist/stage3/index.js +554 -2
- package/dist/stage3/index.js.map +1 -1
- package/package.json +40 -5
package/dist/stage3/index.cjs
CHANGED
|
@@ -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
|