mol_wire_pub 0.0.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.
package/.nojekyll ADDED
File without changes
package/README.md ADDED
@@ -0,0 +1,64 @@
1
+ # $mol_wire
2
+
3
+ Auto wiring modules. It gives ability to:
4
+
5
+ - Make any state observable using only 1.5KB lib. [$hyoo_crowd](https://github.com/hyoo-ru/crowd.hyoo.ru) as example.
6
+ - Automatic dynamic track runtime property value dependencies.
7
+ - Memoize calculations with automatic revalidationn.
8
+ - Convert sync API to async and vice versa.
9
+ - Manage resources automatically with predictable deconstruction time.
10
+ - Optimize execution of tasks.
11
+ - Dramatically reduce source code size and increase reliability by implementing reactive architecture.
12
+
13
+ ## Articles about
14
+
15
+ - [Main Aspects of Reactivity](https://github.com/nin-jin/slides/tree/master/reactivity#readme)
16
+ - [JS Proposal: Auto Wire](https://gist.github.com/nin-jin/6b9765fb9d0d50c2e1d37689008f5357)
17
+
18
+ ## High level API
19
+
20
+ ### Decorators
21
+
22
+ - [$mol_wire_mem](./mem) - reactive memoizing property decorator
23
+ - [$mol_wire_field](./field) - reactive memoizing field decorator
24
+ - [$mol_wire_method](./method) - method decorator which run inside fiber
25
+
26
+ ### Proxies
27
+
28
+ - [$mol_wire_sync](./sync) - converts async API to sync
29
+ - [$mol_wire_async](./async) - converts sync API to async
30
+
31
+ ### Functions
32
+
33
+ - [$mol_wire_probe](./probe) - run code without state changes
34
+ - [$mol_wire_solid](./solid) - make current fiber immortal
35
+
36
+ ## Structures
37
+
38
+ - [$mol_wire_set](./set) - reactive Set
39
+
40
+ ## Low level API
41
+
42
+ ### Pub/Sub
43
+
44
+ - [$mol_wire_pub](./pub) - tiny publisher
45
+ - [$mol_wire_sub](./sub) - generic subscriber interface
46
+ - [$mol_wire_pub_sub](./pub/sub) - subscriber with retranslation support
47
+ - `$mol_wire_auto` - current tracking subscriber
48
+
49
+ ### Reactivity
50
+
51
+ - [$mol_wire_fiber](./fiber) - pausable task with sync API
52
+ - [$mol_wire_cursor](./cursor) - subscription statuses
53
+
54
+ ## NPM Bundles
55
+
56
+ - [mol_wire_lib](./lib) - lib with all this modules (7KB)
57
+ - [mol_wire_pub](./pub) - tiny lib to making any state observabe (1.5KB)
58
+
59
+ ## Close alternatives
60
+
61
+ - [MobX](https://mobx.js.org/)
62
+ - [CellX](https://github.com/Riim/cellx)
63
+
64
+ ### [Architectural comparison](https://github.com/nin-jin/slides/tree/master/reactivity#reactive-libraries)
package/node.audit.js ADDED
@@ -0,0 +1 @@
1
+ console.info("Audit passed")
package/node.d.ts ADDED
@@ -0,0 +1,2 @@
1
+
2
+ export = $;
package/node.deps.json ADDED
@@ -0,0 +1 @@
1
+ {"files":["LICENSE","README.md","lang.lang.tree","mam.jam.js","mam.ts","package.json","sandbox.config.json","tsconfig.json","tsfmt.json","yarn.lock","mol/CNAME","mol/CODE_OF_CONDUCT.md","mol/CONTRIBUTING.md","mol/LICENSE","mol/index.html","mol/mol.meta.tree","mol/readme.md","mol/fail/fail.ts","mol/wire/cursor/cursor.ts","mol/wire/pub/pub.ts","mol/wire/sub/sub.ts","mol/wire/README.md","mol/wire/wire.ts"],"mods":{},"deps_in":{"mol/wire":{},"mol":{"mol/wire":-9007199254740991,"mol/fail":-9007199254740991},"":{"mol":-9007199254740991},"mol/wire/sub":{"mol/wire":-1},"mol/wire/pub":{"mol/wire/sub":-1},"mol/fail":{"mol/wire/pub":-4},"mol/wire/cursor":{"mol/wire/pub":-3}},"deps_out":{"mol/wire/pub":{"mol/fail":-4,"mol/wire/cursor":-3},"mol/wire":{"mol":-9007199254740991,"mol/wire/sub":-1},"mol":{"":-9007199254740991},"mol/wire/sub":{"mol/wire/pub":-1},"mol/fail":{"mol":-9007199254740991},"mol/wire/cursor":{}},"sloc":{"LICENSE":113,"md":538,"tree":31,"js":10,"ts":180,"json":86,"lock":927,"CNAME":1,"html":1},"deps":{"mol/wire/pub":{"..":-9007199254740991,"/mol/wire/pub":-1,"/mol/wire/sub":-3,"/mol/fail":-4,"/mol/wire/auto":-3,"/mol/wire/cursor/stale":-3,"/mol/wire/affected/length":-3,"/mol/wire/affected/pop":-4,"/mol/wire/cursor/doubt":-4,"/mol/wire/affected/push":-4},"mol/wire":{"..":-9007199254740991,"/mol/wire/auto":-1,"/mol/wire/sub":-1,"/mol/wire/affected":-1},"mol":{"..":-9007199254740991},"":{},"mol/wire/sub":{"..":-9007199254740991,"/mol/wire/sub":-1,"/mol/wire/pub":-1},"mol/fail":{"..":-9007199254740991,"/mol/fail":-1},"mol/wire/cursor":{"..":-9007199254740991,"/mol/wire/cursor":-1}}}
package/node.esm.js ADDED
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var exports = void 0;
3
+ "use strict"
4
+
5
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
6
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
7
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
8
+ else for (var i = decorators.length - 1; i >= 0; i--) if ((d = decorators[i])) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
9
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
10
+ };
11
+
12
+ var globalThis = globalThis || ( typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : this )
13
+ var $ = ( typeof module === 'object' ) ? ( module['export'+'s'] = globalThis ) : globalThis
14
+ $.$$ = $
15
+
16
+ ;
17
+
18
+ var $node = $node || {}
19
+ void function( module ) { var exports = module.exports = this; function require( id ) { return $node[ id.replace( /^.\// , "../" ) ] };
20
+ ;
21
+ "use strict";
22
+ Error.stackTraceLimit = 50;
23
+ var $;
24
+ (function ($) {
25
+ })($ || ($ = {}));
26
+ module.exports = $;
27
+ //mam.ts
28
+ ;
29
+
30
+ $node[ "../mam.ts" ] = $node[ "../mam.ts" ] = module.exports }.call( {} , {} )
31
+ ;
32
+ "use strict";
33
+ var $;
34
+ (function ($) {
35
+ function $mol_fail(error) {
36
+ throw error;
37
+ }
38
+ $.$mol_fail = $mol_fail;
39
+ })($ || ($ = {}));
40
+ //mol/fail/fail.ts
41
+ ;
42
+ "use strict";
43
+ var $;
44
+ (function ($) {
45
+ let $mol_wire_cursor;
46
+ (function ($mol_wire_cursor) {
47
+ $mol_wire_cursor[$mol_wire_cursor["stale"] = new (class stale extends Number {
48
+ })(-1)] = "stale";
49
+ $mol_wire_cursor[$mol_wire_cursor["doubt"] = new (class doubt extends Number {
50
+ })(-2)] = "doubt";
51
+ $mol_wire_cursor[$mol_wire_cursor["fresh"] = new (class fresh extends Number {
52
+ })(-3)] = "fresh";
53
+ $mol_wire_cursor[$mol_wire_cursor["final"] = new (class solid extends Number {
54
+ })(-4)] = "final";
55
+ })($mol_wire_cursor = $.$mol_wire_cursor || ($.$mol_wire_cursor = {}));
56
+ })($ || ($ = {}));
57
+ //mol/wire/cursor/cursor.ts
58
+ ;
59
+ "use strict";
60
+ var $;
61
+ (function ($) {
62
+ class $mol_wire_pub extends Array {
63
+ static get [Symbol.species]() {
64
+ return Array;
65
+ }
66
+ sub_from = 0;
67
+ get sub_list() {
68
+ const res = [];
69
+ for (let i = this.sub_from; i < this.length; i += 2) {
70
+ res.push(this[i]);
71
+ }
72
+ return res;
73
+ }
74
+ get sub_empty() {
75
+ return this.sub_from === this.length;
76
+ }
77
+ sub_on(sub, pub_pos) {
78
+ const pos = this.length;
79
+ this.push(sub, pub_pos);
80
+ return pos;
81
+ }
82
+ sub_off(sub_pos) {
83
+ if (!(sub_pos < this.length)) {
84
+ $mol_fail(new Error(`Wrong pos ${sub_pos}`));
85
+ }
86
+ const end = this.length - 2;
87
+ if (sub_pos !== end) {
88
+ this.peer_move(end, sub_pos);
89
+ }
90
+ this.pop();
91
+ this.pop();
92
+ if (this.length === this.sub_from)
93
+ this.reap();
94
+ }
95
+ reap() { }
96
+ track_promote() {
97
+ $mol_wire_auto?.track_next(this);
98
+ }
99
+ up() { }
100
+ down() { }
101
+ emit() {
102
+ for (let i = this.sub_from; i < this.length; i += 2) {
103
+ ;
104
+ this[i].stale();
105
+ }
106
+ }
107
+ stale() {
108
+ if (!this.affect($mol_wire_cursor.stale))
109
+ return false;
110
+ while ($mol_wire_affected.length) {
111
+ const next = $mol_wire_affected.pop();
112
+ next.affect($mol_wire_cursor.doubt);
113
+ }
114
+ return true;
115
+ }
116
+ affect(quant) {
117
+ for (let i = this.sub_from; i < this.length; i += 2) {
118
+ const sub = this[i];
119
+ $mol_wire_affected.push(sub);
120
+ }
121
+ return true;
122
+ }
123
+ peer_move(from_pos, to_pos) {
124
+ const peer = this[from_pos];
125
+ const self_pos = this[from_pos + 1];
126
+ this[to_pos] = peer;
127
+ this[to_pos + 1] = self_pos;
128
+ peer.peer_repos(self_pos, to_pos);
129
+ }
130
+ peer_repos(peer_pos, self_pos) {
131
+ this[peer_pos + 1] = self_pos;
132
+ }
133
+ }
134
+ $.$mol_wire_pub = $mol_wire_pub;
135
+ })($ || ($ = {}));
136
+ //mol/wire/pub/pub.ts
137
+ ;
138
+ "use strict";
139
+ //mol/wire/sub/sub.ts
140
+ ;
141
+ "use strict";
142
+ var $;
143
+ (function ($) {
144
+ $.$mol_wire_auto = null;
145
+ $.$mol_wire_affected = [];
146
+ })($ || ($ = {}));
147
+ //mol/wire/wire.ts
148
+ ;
149
+ export default $
150
+ //# sourceMappingURL=node.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../mam.jam.js","-","../../../../mam.ts","../../../fail/mol/fail/fail.ts","../../cursor/mol/wire/cursor/cursor.ts","../mol/wire/pub/pub.ts","../../sub/sub.ts","../../mol/wire/wire.ts"],"names":[],"mappings":"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","file":"node.esm.js","sourcesContent":[null,null,"Error.stackTraceLimit = 50;\n\ndeclare let _$_: { new(): {} } & typeof globalThis\ndeclare class $ extends _$_ {}\n\nnamespace $ {\n\texport type $ = typeof $$\n\texport declare class $$ extends $ {}\n\tnamespace $$ {\n\t\texport type $$ = $\n\t}\n}\n\nmodule.exports = $\n","namespace $ {\n\n\texport function $mol_fail( error : any ) : never {\n\t\tthrow error\n\t}\n\n}\n","namespace $ {\n\t\n\t/** Special status statuses. */\n\texport enum $mol_wire_cursor {\n\t\t\n\t\t/** Update required. */\n\t\tstale = new ( class stale extends Number {} )( -1 ) as any as number,\n\t\t\n\t\t/** Some of (transitive) pub update required. */\n\t\tdoubt = new ( class doubt extends Number {} )( -2 ) as any as number,\n\t\t\n\t\t/** Actual state but may be dropped. */\n\t\tfresh = new ( class fresh extends Number {} )( -3 ) as any as number,\n\t\t\n\t\t/** State will never be changed. */\n\t\tfinal = new ( class solid extends Number {} )( -4 ) as any as number,\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\t\n\t/**\n\t * Collects subscribers in compact array. 24B\n\t */\n\texport class $mol_wire_pub extends Array< unknown > {\n\t\t\n\t\t// Derived objects should be Arrays.\n\t\tstatic get [ Symbol.species ]() {\n\t\t\treturn Array\n\t\t}\n\t\t\n\t\t/**\n\t\t * Index of first subscriber.\n\t\t */\n\t\tprotected sub_from = 0 // 4B\n\t\t\n\t\t/**\n\t\t * All current subscribers.\n\t\t */\n\t\tget sub_list() {\n\t\t\tconst res = [] as $mol_wire_sub[]\n\t\t\tfor( let i = this.sub_from; i < this.length; i += 2 ) {\n\t\t\t\tres.push( this[i] as $mol_wire_sub )\n\t\t\t}\n\t\t\treturn res as readonly $mol_wire_sub[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * Has any subscribers or not.\n\t\t */\n\t\tget sub_empty() {\n\t\t\treturn this.sub_from === this.length\n\t\t}\n\t\t\n\t\t/**\n\t\t * Subscribe subscriber to this publisher events and return position of subscriber that required to unsubscribe.\n\t\t */\n\t\tsub_on( sub: $mol_wire_pub, pub_pos: number ) {\n\t\t\tconst pos = this.length\n\t\t\tthis.push( sub, pub_pos )\n\t\t\treturn pos\n\t\t}\n\t\t\n\t\t/**\n\t\t * Unsubscribe subscriber from this publisher events by subscriber position provided by `on(pub)`.\n\t\t */\n\t\tsub_off( sub_pos: number ) {\n\t\t\t\n\t\t\tif(!( sub_pos < this.length )) {\n\t\t\t\t$mol_fail( new Error( `Wrong pos ${ sub_pos }` ) )\n\t\t\t}\n\t\t\t\n\t\t\tconst end = this.length - 2\n\t\t\tif( sub_pos !== end ) {\n\t\t\t\tthis.peer_move( end, sub_pos )\n\t\t\t}\n\t\t\t\n\t\t\tthis.pop()\n\t\t\tthis.pop()\n\t\t\t\n\t\t\tif( this.length === this.sub_from ) this.reap()\n\t\t\t\n\t\t}\n\t\t\n\t\t/**\n\t\t * Called when last sub was unsubscribed.\n\t\t **/\n\t\treap() { }\n\t\t\n\t\t/**\n\t\t * Autowire this publisher with current subscriber.\n\t\t **/\n\t\ttrack_promote() {\n\t\t\t$mol_wire_auto?.track_next( this )\n\t\t}\n\t\t\n\t\t/**\n\t\t * Enforce actualization. Should not throw errors.\n\t\t */\n\t\tup() {}\n\t\t\n\t\t/**\n\t\t * Subscriber stabilized and allows to free.\n\t\t */\n\t\tdown() {}\n\t\t\n\t\t/**\n\t\t * Notify subscribers about self changes.\n\t\t */\n\t\temit() {\n\t\t\tfor( let i = this.sub_from; i < this.length; i += 2 ) {\n\t\t\t\t;( this[i] as $mol_wire_pub ).stale()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * Receive notification about publisher changes.\n\t\t */\n\t\tstale() {\n\t\t\t\n\t\t\tif( !this.affect( $mol_wire_cursor.stale ) ) return false\n\t\t\t\n\t\t\twhile( $mol_wire_affected.length ) {\n\t\t\t\tconst next = $mol_wire_affected.pop()! as $mol_wire_sub\n\t\t\t\tnext.affect( $mol_wire_cursor.doubt )\n\t\t\t}\n\t\t\t\n\t\t\treturn true\n\t\t}\n\t\t\n\t\t/**\n\t\t * Add self subscribers to affection queue.\n\t\t */\n\t\taffect( quant: number ) {\n\t\t\tfor( let i = this.sub_from; i < this.length; i += 2 ) {\n\t\t\t\tconst sub = this[i] as $mol_wire_sub\n\t\t\t\t$mol_wire_affected.push( sub )\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\t\n\t\t/**\n\t\t * Moves peer from one position to another. Doesn't clear data at old position!\n\t\t */\n\t\tpeer_move( from_pos: number, to_pos: number ) {\n\t\t\t\n\t\t\tconst peer = this[ from_pos ] as $mol_wire_pub\n\t\t\tconst self_pos = this[ from_pos + 1 ] as number\n\t\t\t\n\t\t\tthis[ to_pos ] = peer\n\t\t\tthis[ to_pos + 1 ] = self_pos\n\t\t\t\n\t\t\tpeer.peer_repos( self_pos, to_pos )\n\t\t}\n\t\t\n\t\t/**\n\t\t * Updates self position in the peer.\n\t\t */\n\t\tpeer_repos( peer_pos: number, self_pos: number ) {\n\t\t\tthis[ peer_pos + 1 ] = self_pos\n\t\t}\n\t\t\n\t}\n\t\n}\n",null,"namespace $ {\n\t\n\t/**\n\t * When fulfilled, all publishers are promoted to this subscriber on access to its.\n\t */\n\texport let $mol_wire_auto: $mol_wire_sub | null = null\n\t\n\t/**\n\t * Affection queue. Used to prevent accidental stack overflow on emit.\n\t */\n\texport const $mol_wire_affected = [] as ( $mol_wire_sub | number )[]\n\t\n}\n"]}
package/node.js ADDED
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ var exports = void 0;
3
+ "use strict"
4
+
5
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
6
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
7
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
8
+ else for (var i = decorators.length - 1; i >= 0; i--) if ((d = decorators[i])) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
9
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
10
+ };
11
+
12
+ var globalThis = globalThis || ( typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : this )
13
+ var $ = ( typeof module === 'object' ) ? ( module['export'+'s'] = globalThis ) : globalThis
14
+ $.$$ = $
15
+
16
+ ;
17
+
18
+ var $node = $node || {}
19
+ void function( module ) { var exports = module.exports = this; function require( id ) { return $node[ id.replace( /^.\// , "../" ) ] };
20
+ ;
21
+ "use strict";
22
+ Error.stackTraceLimit = 50;
23
+ var $;
24
+ (function ($) {
25
+ })($ || ($ = {}));
26
+ module.exports = $;
27
+ //mam.ts
28
+ ;
29
+
30
+ $node[ "../mam.ts" ] = $node[ "../mam.ts" ] = module.exports }.call( {} , {} )
31
+ ;
32
+ "use strict";
33
+ var $;
34
+ (function ($) {
35
+ function $mol_fail(error) {
36
+ throw error;
37
+ }
38
+ $.$mol_fail = $mol_fail;
39
+ })($ || ($ = {}));
40
+ //mol/fail/fail.ts
41
+ ;
42
+ "use strict";
43
+ var $;
44
+ (function ($) {
45
+ let $mol_wire_cursor;
46
+ (function ($mol_wire_cursor) {
47
+ $mol_wire_cursor[$mol_wire_cursor["stale"] = new (class stale extends Number {
48
+ })(-1)] = "stale";
49
+ $mol_wire_cursor[$mol_wire_cursor["doubt"] = new (class doubt extends Number {
50
+ })(-2)] = "doubt";
51
+ $mol_wire_cursor[$mol_wire_cursor["fresh"] = new (class fresh extends Number {
52
+ })(-3)] = "fresh";
53
+ $mol_wire_cursor[$mol_wire_cursor["final"] = new (class solid extends Number {
54
+ })(-4)] = "final";
55
+ })($mol_wire_cursor = $.$mol_wire_cursor || ($.$mol_wire_cursor = {}));
56
+ })($ || ($ = {}));
57
+ //mol/wire/cursor/cursor.ts
58
+ ;
59
+ "use strict";
60
+ var $;
61
+ (function ($) {
62
+ class $mol_wire_pub extends Array {
63
+ static get [Symbol.species]() {
64
+ return Array;
65
+ }
66
+ sub_from = 0;
67
+ get sub_list() {
68
+ const res = [];
69
+ for (let i = this.sub_from; i < this.length; i += 2) {
70
+ res.push(this[i]);
71
+ }
72
+ return res;
73
+ }
74
+ get sub_empty() {
75
+ return this.sub_from === this.length;
76
+ }
77
+ sub_on(sub, pub_pos) {
78
+ const pos = this.length;
79
+ this.push(sub, pub_pos);
80
+ return pos;
81
+ }
82
+ sub_off(sub_pos) {
83
+ if (!(sub_pos < this.length)) {
84
+ $mol_fail(new Error(`Wrong pos ${sub_pos}`));
85
+ }
86
+ const end = this.length - 2;
87
+ if (sub_pos !== end) {
88
+ this.peer_move(end, sub_pos);
89
+ }
90
+ this.pop();
91
+ this.pop();
92
+ if (this.length === this.sub_from)
93
+ this.reap();
94
+ }
95
+ reap() { }
96
+ track_promote() {
97
+ $mol_wire_auto?.track_next(this);
98
+ }
99
+ up() { }
100
+ down() { }
101
+ emit() {
102
+ for (let i = this.sub_from; i < this.length; i += 2) {
103
+ ;
104
+ this[i].stale();
105
+ }
106
+ }
107
+ stale() {
108
+ if (!this.affect($mol_wire_cursor.stale))
109
+ return false;
110
+ while ($mol_wire_affected.length) {
111
+ const next = $mol_wire_affected.pop();
112
+ next.affect($mol_wire_cursor.doubt);
113
+ }
114
+ return true;
115
+ }
116
+ affect(quant) {
117
+ for (let i = this.sub_from; i < this.length; i += 2) {
118
+ const sub = this[i];
119
+ $mol_wire_affected.push(sub);
120
+ }
121
+ return true;
122
+ }
123
+ peer_move(from_pos, to_pos) {
124
+ const peer = this[from_pos];
125
+ const self_pos = this[from_pos + 1];
126
+ this[to_pos] = peer;
127
+ this[to_pos + 1] = self_pos;
128
+ peer.peer_repos(self_pos, to_pos);
129
+ }
130
+ peer_repos(peer_pos, self_pos) {
131
+ this[peer_pos + 1] = self_pos;
132
+ }
133
+ }
134
+ $.$mol_wire_pub = $mol_wire_pub;
135
+ })($ || ($ = {}));
136
+ //mol/wire/pub/pub.ts
137
+ ;
138
+ "use strict";
139
+ //mol/wire/sub/sub.ts
140
+ ;
141
+ "use strict";
142
+ var $;
143
+ (function ($) {
144
+ $.$mol_wire_auto = null;
145
+ $.$mol_wire_affected = [];
146
+ })($ || ($ = {}));
147
+ //mol/wire/wire.ts
148
+
149
+ //# sourceMappingURL=node.js.map
package/node.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../mam.jam.js","-","../../../../mam.ts","../../../fail/mol/fail/fail.ts","../../cursor/mol/wire/cursor/cursor.ts","../mol/wire/pub/pub.ts","../../sub/sub.ts","../../mol/wire/wire.ts"],"names":[],"mappings":"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","file":"node.js","sourcesContent":[null,null,"Error.stackTraceLimit = 50;\n\ndeclare let _$_: { new(): {} } & typeof globalThis\ndeclare class $ extends _$_ {}\n\nnamespace $ {\n\texport type $ = typeof $$\n\texport declare class $$ extends $ {}\n\tnamespace $$ {\n\t\texport type $$ = $\n\t}\n}\n\nmodule.exports = $\n","namespace $ {\n\n\texport function $mol_fail( error : any ) : never {\n\t\tthrow error\n\t}\n\n}\n","namespace $ {\n\t\n\t/** Special status statuses. */\n\texport enum $mol_wire_cursor {\n\t\t\n\t\t/** Update required. */\n\t\tstale = new ( class stale extends Number {} )( -1 ) as any as number,\n\t\t\n\t\t/** Some of (transitive) pub update required. */\n\t\tdoubt = new ( class doubt extends Number {} )( -2 ) as any as number,\n\t\t\n\t\t/** Actual state but may be dropped. */\n\t\tfresh = new ( class fresh extends Number {} )( -3 ) as any as number,\n\t\t\n\t\t/** State will never be changed. */\n\t\tfinal = new ( class solid extends Number {} )( -4 ) as any as number,\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\t\n\t/**\n\t * Collects subscribers in compact array. 24B\n\t */\n\texport class $mol_wire_pub extends Array< unknown > {\n\t\t\n\t\t// Derived objects should be Arrays.\n\t\tstatic get [ Symbol.species ]() {\n\t\t\treturn Array\n\t\t}\n\t\t\n\t\t/**\n\t\t * Index of first subscriber.\n\t\t */\n\t\tprotected sub_from = 0 // 4B\n\t\t\n\t\t/**\n\t\t * All current subscribers.\n\t\t */\n\t\tget sub_list() {\n\t\t\tconst res = [] as $mol_wire_sub[]\n\t\t\tfor( let i = this.sub_from; i < this.length; i += 2 ) {\n\t\t\t\tres.push( this[i] as $mol_wire_sub )\n\t\t\t}\n\t\t\treturn res as readonly $mol_wire_sub[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * Has any subscribers or not.\n\t\t */\n\t\tget sub_empty() {\n\t\t\treturn this.sub_from === this.length\n\t\t}\n\t\t\n\t\t/**\n\t\t * Subscribe subscriber to this publisher events and return position of subscriber that required to unsubscribe.\n\t\t */\n\t\tsub_on( sub: $mol_wire_pub, pub_pos: number ) {\n\t\t\tconst pos = this.length\n\t\t\tthis.push( sub, pub_pos )\n\t\t\treturn pos\n\t\t}\n\t\t\n\t\t/**\n\t\t * Unsubscribe subscriber from this publisher events by subscriber position provided by `on(pub)`.\n\t\t */\n\t\tsub_off( sub_pos: number ) {\n\t\t\t\n\t\t\tif(!( sub_pos < this.length )) {\n\t\t\t\t$mol_fail( new Error( `Wrong pos ${ sub_pos }` ) )\n\t\t\t}\n\t\t\t\n\t\t\tconst end = this.length - 2\n\t\t\tif( sub_pos !== end ) {\n\t\t\t\tthis.peer_move( end, sub_pos )\n\t\t\t}\n\t\t\t\n\t\t\tthis.pop()\n\t\t\tthis.pop()\n\t\t\t\n\t\t\tif( this.length === this.sub_from ) this.reap()\n\t\t\t\n\t\t}\n\t\t\n\t\t/**\n\t\t * Called when last sub was unsubscribed.\n\t\t **/\n\t\treap() { }\n\t\t\n\t\t/**\n\t\t * Autowire this publisher with current subscriber.\n\t\t **/\n\t\ttrack_promote() {\n\t\t\t$mol_wire_auto?.track_next( this )\n\t\t}\n\t\t\n\t\t/**\n\t\t * Enforce actualization. Should not throw errors.\n\t\t */\n\t\tup() {}\n\t\t\n\t\t/**\n\t\t * Subscriber stabilized and allows to free.\n\t\t */\n\t\tdown() {}\n\t\t\n\t\t/**\n\t\t * Notify subscribers about self changes.\n\t\t */\n\t\temit() {\n\t\t\tfor( let i = this.sub_from; i < this.length; i += 2 ) {\n\t\t\t\t;( this[i] as $mol_wire_pub ).stale()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * Receive notification about publisher changes.\n\t\t */\n\t\tstale() {\n\t\t\t\n\t\t\tif( !this.affect( $mol_wire_cursor.stale ) ) return false\n\t\t\t\n\t\t\twhile( $mol_wire_affected.length ) {\n\t\t\t\tconst next = $mol_wire_affected.pop()! as $mol_wire_sub\n\t\t\t\tnext.affect( $mol_wire_cursor.doubt )\n\t\t\t}\n\t\t\t\n\t\t\treturn true\n\t\t}\n\t\t\n\t\t/**\n\t\t * Add self subscribers to affection queue.\n\t\t */\n\t\taffect( quant: number ) {\n\t\t\tfor( let i = this.sub_from; i < this.length; i += 2 ) {\n\t\t\t\tconst sub = this[i] as $mol_wire_sub\n\t\t\t\t$mol_wire_affected.push( sub )\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\t\n\t\t/**\n\t\t * Moves peer from one position to another. Doesn't clear data at old position!\n\t\t */\n\t\tpeer_move( from_pos: number, to_pos: number ) {\n\t\t\t\n\t\t\tconst peer = this[ from_pos ] as $mol_wire_pub\n\t\t\tconst self_pos = this[ from_pos + 1 ] as number\n\t\t\t\n\t\t\tthis[ to_pos ] = peer\n\t\t\tthis[ to_pos + 1 ] = self_pos\n\t\t\t\n\t\t\tpeer.peer_repos( self_pos, to_pos )\n\t\t}\n\t\t\n\t\t/**\n\t\t * Updates self position in the peer.\n\t\t */\n\t\tpeer_repos( peer_pos: number, self_pos: number ) {\n\t\t\tthis[ peer_pos + 1 ] = self_pos\n\t\t}\n\t\t\n\t}\n\t\n}\n",null,"namespace $ {\n\t\n\t/**\n\t * When fulfilled, all publishers are promoted to this subscriber on access to its.\n\t */\n\texport let $mol_wire_auto: $mol_wire_sub | null = null\n\t\n\t/**\n\t * Affection queue. Used to prevent accidental stack overflow on emit.\n\t */\n\texport const $mol_wire_affected = [] as ( $mol_wire_sub | number )[]\n\t\n}\n"]}
package/node.test.js ADDED
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ "use strict"
3
+
4
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
7
+ else for (var i = decorators.length - 1; i >= 0; i--) if ((d = decorators[i])) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
8
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
9
+ };
10
+
11
+ var globalThis = globalThis || ( typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : this )
12
+ var $ = ( typeof module === 'object' ) ? ( module['export'+'s'] = globalThis ) : globalThis
13
+ $.$$ = $
14
+
15
+ ;
16
+ "use strict";
17
+ Error.stackTraceLimit = 50;
18
+ var $;
19
+ (function ($) {
20
+ })($ || ($ = {}));
21
+ module.exports = $;
22
+ //mam.ts
23
+ ;
24
+ "use strict";
25
+ var $;
26
+ (function ($) {
27
+ function $mol_fail(error) {
28
+ throw error;
29
+ }
30
+ $.$mol_fail = $mol_fail;
31
+ })($ || ($ = {}));
32
+ //mol/fail/fail.ts
33
+ ;
34
+ "use strict";
35
+ var $;
36
+ (function ($) {
37
+ let $mol_wire_cursor;
38
+ (function ($mol_wire_cursor) {
39
+ $mol_wire_cursor[$mol_wire_cursor["stale"] = new (class stale extends Number {
40
+ })(-1)] = "stale";
41
+ $mol_wire_cursor[$mol_wire_cursor["doubt"] = new (class doubt extends Number {
42
+ })(-2)] = "doubt";
43
+ $mol_wire_cursor[$mol_wire_cursor["fresh"] = new (class fresh extends Number {
44
+ })(-3)] = "fresh";
45
+ $mol_wire_cursor[$mol_wire_cursor["final"] = new (class solid extends Number {
46
+ })(-4)] = "final";
47
+ })($mol_wire_cursor = $.$mol_wire_cursor || ($.$mol_wire_cursor = {}));
48
+ })($ || ($ = {}));
49
+ //mol/wire/cursor/cursor.ts
50
+ ;
51
+ "use strict";
52
+ var $;
53
+ (function ($) {
54
+ class $mol_wire_pub extends Array {
55
+ static get [Symbol.species]() {
56
+ return Array;
57
+ }
58
+ sub_from = 0;
59
+ get sub_list() {
60
+ const res = [];
61
+ for (let i = this.sub_from; i < this.length; i += 2) {
62
+ res.push(this[i]);
63
+ }
64
+ return res;
65
+ }
66
+ get sub_empty() {
67
+ return this.sub_from === this.length;
68
+ }
69
+ sub_on(sub, pub_pos) {
70
+ const pos = this.length;
71
+ this.push(sub, pub_pos);
72
+ return pos;
73
+ }
74
+ sub_off(sub_pos) {
75
+ if (!(sub_pos < this.length)) {
76
+ $mol_fail(new Error(`Wrong pos ${sub_pos}`));
77
+ }
78
+ const end = this.length - 2;
79
+ if (sub_pos !== end) {
80
+ this.peer_move(end, sub_pos);
81
+ }
82
+ this.pop();
83
+ this.pop();
84
+ if (this.length === this.sub_from)
85
+ this.reap();
86
+ }
87
+ reap() { }
88
+ track_promote() {
89
+ $mol_wire_auto?.track_next(this);
90
+ }
91
+ up() { }
92
+ down() { }
93
+ emit() {
94
+ for (let i = this.sub_from; i < this.length; i += 2) {
95
+ ;
96
+ this[i].stale();
97
+ }
98
+ }
99
+ stale() {
100
+ if (!this.affect($mol_wire_cursor.stale))
101
+ return false;
102
+ while ($mol_wire_affected.length) {
103
+ const next = $mol_wire_affected.pop();
104
+ next.affect($mol_wire_cursor.doubt);
105
+ }
106
+ return true;
107
+ }
108
+ affect(quant) {
109
+ for (let i = this.sub_from; i < this.length; i += 2) {
110
+ const sub = this[i];
111
+ $mol_wire_affected.push(sub);
112
+ }
113
+ return true;
114
+ }
115
+ peer_move(from_pos, to_pos) {
116
+ const peer = this[from_pos];
117
+ const self_pos = this[from_pos + 1];
118
+ this[to_pos] = peer;
119
+ this[to_pos + 1] = self_pos;
120
+ peer.peer_repos(self_pos, to_pos);
121
+ }
122
+ peer_repos(peer_pos, self_pos) {
123
+ this[peer_pos + 1] = self_pos;
124
+ }
125
+ }
126
+ $.$mol_wire_pub = $mol_wire_pub;
127
+ })($ || ($ = {}));
128
+ //mol/wire/pub/pub.ts
129
+ ;
130
+ "use strict";
131
+ //mol/wire/sub/sub.ts
132
+ ;
133
+ "use strict";
134
+ var $;
135
+ (function ($) {
136
+ $.$mol_wire_auto = null;
137
+ $.$mol_wire_affected = [];
138
+ })($ || ($ = {}));
139
+ //mol/wire/wire.ts
140
+
141
+ //# sourceMappingURL=node.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../mam.jam.js","../../../../mam.ts","../../../fail/mol/fail/fail.ts","../../cursor/mol/wire/cursor/cursor.ts","../mol/wire/pub/pub.ts","../../sub/sub.ts","../../mol/wire/wire.ts"],"names":[],"mappings":"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","file":"node.test.js","sourcesContent":[null,"Error.stackTraceLimit = 50;\n\ndeclare let _$_: { new(): {} } & typeof globalThis\ndeclare class $ extends _$_ {}\n\nnamespace $ {\n\texport type $ = typeof $$\n\texport declare class $$ extends $ {}\n\tnamespace $$ {\n\t\texport type $$ = $\n\t}\n}\n\nmodule.exports = $\n","namespace $ {\n\n\texport function $mol_fail( error : any ) : never {\n\t\tthrow error\n\t}\n\n}\n","namespace $ {\n\t\n\t/** Special status statuses. */\n\texport enum $mol_wire_cursor {\n\t\t\n\t\t/** Update required. */\n\t\tstale = new ( class stale extends Number {} )( -1 ) as any as number,\n\t\t\n\t\t/** Some of (transitive) pub update required. */\n\t\tdoubt = new ( class doubt extends Number {} )( -2 ) as any as number,\n\t\t\n\t\t/** Actual state but may be dropped. */\n\t\tfresh = new ( class fresh extends Number {} )( -3 ) as any as number,\n\t\t\n\t\t/** State will never be changed. */\n\t\tfinal = new ( class solid extends Number {} )( -4 ) as any as number,\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\t\n\t/**\n\t * Collects subscribers in compact array. 24B\n\t */\n\texport class $mol_wire_pub extends Array< unknown > {\n\t\t\n\t\t// Derived objects should be Arrays.\n\t\tstatic get [ Symbol.species ]() {\n\t\t\treturn Array\n\t\t}\n\t\t\n\t\t/**\n\t\t * Index of first subscriber.\n\t\t */\n\t\tprotected sub_from = 0 // 4B\n\t\t\n\t\t/**\n\t\t * All current subscribers.\n\t\t */\n\t\tget sub_list() {\n\t\t\tconst res = [] as $mol_wire_sub[]\n\t\t\tfor( let i = this.sub_from; i < this.length; i += 2 ) {\n\t\t\t\tres.push( this[i] as $mol_wire_sub )\n\t\t\t}\n\t\t\treturn res as readonly $mol_wire_sub[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * Has any subscribers or not.\n\t\t */\n\t\tget sub_empty() {\n\t\t\treturn this.sub_from === this.length\n\t\t}\n\t\t\n\t\t/**\n\t\t * Subscribe subscriber to this publisher events and return position of subscriber that required to unsubscribe.\n\t\t */\n\t\tsub_on( sub: $mol_wire_pub, pub_pos: number ) {\n\t\t\tconst pos = this.length\n\t\t\tthis.push( sub, pub_pos )\n\t\t\treturn pos\n\t\t}\n\t\t\n\t\t/**\n\t\t * Unsubscribe subscriber from this publisher events by subscriber position provided by `on(pub)`.\n\t\t */\n\t\tsub_off( sub_pos: number ) {\n\t\t\t\n\t\t\tif(!( sub_pos < this.length )) {\n\t\t\t\t$mol_fail( new Error( `Wrong pos ${ sub_pos }` ) )\n\t\t\t}\n\t\t\t\n\t\t\tconst end = this.length - 2\n\t\t\tif( sub_pos !== end ) {\n\t\t\t\tthis.peer_move( end, sub_pos )\n\t\t\t}\n\t\t\t\n\t\t\tthis.pop()\n\t\t\tthis.pop()\n\t\t\t\n\t\t\tif( this.length === this.sub_from ) this.reap()\n\t\t\t\n\t\t}\n\t\t\n\t\t/**\n\t\t * Called when last sub was unsubscribed.\n\t\t **/\n\t\treap() { }\n\t\t\n\t\t/**\n\t\t * Autowire this publisher with current subscriber.\n\t\t **/\n\t\ttrack_promote() {\n\t\t\t$mol_wire_auto?.track_next( this )\n\t\t}\n\t\t\n\t\t/**\n\t\t * Enforce actualization. Should not throw errors.\n\t\t */\n\t\tup() {}\n\t\t\n\t\t/**\n\t\t * Subscriber stabilized and allows to free.\n\t\t */\n\t\tdown() {}\n\t\t\n\t\t/**\n\t\t * Notify subscribers about self changes.\n\t\t */\n\t\temit() {\n\t\t\tfor( let i = this.sub_from; i < this.length; i += 2 ) {\n\t\t\t\t;( this[i] as $mol_wire_pub ).stale()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * Receive notification about publisher changes.\n\t\t */\n\t\tstale() {\n\t\t\t\n\t\t\tif( !this.affect( $mol_wire_cursor.stale ) ) return false\n\t\t\t\n\t\t\twhile( $mol_wire_affected.length ) {\n\t\t\t\tconst next = $mol_wire_affected.pop()! as $mol_wire_sub\n\t\t\t\tnext.affect( $mol_wire_cursor.doubt )\n\t\t\t}\n\t\t\t\n\t\t\treturn true\n\t\t}\n\t\t\n\t\t/**\n\t\t * Add self subscribers to affection queue.\n\t\t */\n\t\taffect( quant: number ) {\n\t\t\tfor( let i = this.sub_from; i < this.length; i += 2 ) {\n\t\t\t\tconst sub = this[i] as $mol_wire_sub\n\t\t\t\t$mol_wire_affected.push( sub )\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\t\n\t\t/**\n\t\t * Moves peer from one position to another. Doesn't clear data at old position!\n\t\t */\n\t\tpeer_move( from_pos: number, to_pos: number ) {\n\t\t\t\n\t\t\tconst peer = this[ from_pos ] as $mol_wire_pub\n\t\t\tconst self_pos = this[ from_pos + 1 ] as number\n\t\t\t\n\t\t\tthis[ to_pos ] = peer\n\t\t\tthis[ to_pos + 1 ] = self_pos\n\t\t\t\n\t\t\tpeer.peer_repos( self_pos, to_pos )\n\t\t}\n\t\t\n\t\t/**\n\t\t * Updates self position in the peer.\n\t\t */\n\t\tpeer_repos( peer_pos: number, self_pos: number ) {\n\t\t\tthis[ peer_pos + 1 ] = self_pos\n\t\t}\n\t\t\n\t}\n\t\n}\n",null,"namespace $ {\n\t\n\t/**\n\t * When fulfilled, all publishers are promoted to this subscriber on access to its.\n\t */\n\texport let $mol_wire_auto: $mol_wire_sub | null = null\n\t\n\t/**\n\t * Affection queue. Used to prevent accidental stack overflow on emit.\n\t */\n\texport const $mol_wire_affected = [] as ( $mol_wire_sub | number )[]\n\t\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "mol_wire_pub",
3
+ "version": "0.0.1",
4
+ "main": "node.js",
5
+ "module": "node.esm.js",
6
+ "browser": "web.js",
7
+ "types": "web.d.ts",
8
+ "dependencies": {}
9
+ }
package/test.html ADDED
@@ -0,0 +1,17 @@
1
+ <!doctype html><meta charset="utf-8" /><body><script src="web.js" charset="utf-8"></script>
2
+ <script src="/mol/build/client/client.js" charset="utf-8"></script>
3
+ <script>
4
+ addEventListener( 'load', ()=> {
5
+
6
+ const test = document.createElement( 'script' )
7
+ test.src = 'web.test.js'
8
+
9
+ const audit = document.createElement( 'script' )
10
+ audit.src = 'web.audit.js'
11
+
12
+ test.onload = ()=> document.head.appendChild( audit )
13
+ document.head.appendChild( test )
14
+
15
+ } )
16
+ </script>
17
+
package/web.audit.js ADDED
@@ -0,0 +1 @@
1
+ console.info("Audit passed")
package/web.css ADDED
@@ -0,0 +1 @@
1
+ /* CSS compiles into js bundle now! */
package/web.css.map ADDED
@@ -0,0 +1 @@
1
+ "/* CSS compiles into js bundle now! */"
package/web.d.ts ADDED
@@ -0,0 +1,2 @@
1
+
2
+ export = $;
package/web.deps.json ADDED
@@ -0,0 +1 @@
1
+ {"files":["LICENSE","README.md","lang.lang.tree","mam.jam.js","mam.ts","package.json","sandbox.config.json","tsconfig.json","tsfmt.json","yarn.lock","mol/CNAME","mol/CODE_OF_CONDUCT.md","mol/CONTRIBUTING.md","mol/LICENSE","mol/index.html","mol/mol.meta.tree","mol/readme.md","mol/fail/fail.ts","mol/wire/cursor/cursor.ts","mol/wire/pub/pub.ts","mol/wire/sub/sub.ts","mol/wire/README.md","mol/wire/wire.ts"],"mods":{},"deps_in":{"mol/wire":{},"mol":{"mol/wire":-9007199254740991,"mol/fail":-9007199254740991},"":{"mol":-9007199254740991},"mol/wire/sub":{"mol/wire":-1},"mol/wire/pub":{"mol/wire/sub":-1},"mol/fail":{"mol/wire/pub":-4},"mol/wire/cursor":{"mol/wire/pub":-3}},"deps_out":{"mol/wire/pub":{"mol/fail":-4,"mol/wire/cursor":-3},"mol/wire":{"mol":-9007199254740991,"mol/wire/sub":-1},"mol":{"":-9007199254740991},"mol/wire/sub":{"mol/wire/pub":-1},"mol/fail":{"mol":-9007199254740991},"mol/wire/cursor":{}},"sloc":{"LICENSE":113,"md":538,"tree":31,"js":10,"ts":180,"json":86,"lock":927,"CNAME":1,"html":1},"deps":{"mol/wire/pub":{"..":-9007199254740991,"/mol/wire/pub":-1,"/mol/wire/sub":-3,"/mol/fail":-4,"/mol/wire/auto":-3,"/mol/wire/cursor/stale":-3,"/mol/wire/affected/length":-3,"/mol/wire/affected/pop":-4,"/mol/wire/cursor/doubt":-4,"/mol/wire/affected/push":-4},"mol/wire":{"..":-9007199254740991,"/mol/wire/auto":-1,"/mol/wire/sub":-1,"/mol/wire/affected":-1},"mol":{"..":-9007199254740991},"":{},"mol/wire/sub":{"..":-9007199254740991,"/mol/wire/sub":-1,"/mol/wire/pub":-1},"mol/fail":{"..":-9007199254740991,"/mol/fail":-1},"mol/wire/cursor":{"..":-9007199254740991,"/mol/wire/cursor":-1}}}
package/web.esm.js ADDED
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ function require( path ){ return $node[ path ] };
3
+ "use strict"
4
+
5
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
6
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
7
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
8
+ else for (var i = decorators.length - 1; i >= 0; i--) if ((d = decorators[i])) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
9
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
10
+ };
11
+
12
+ var globalThis = globalThis || ( typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : this )
13
+ var $ = ( typeof module === 'object' ) ? ( module['export'+'s'] = globalThis ) : globalThis
14
+ $.$$ = $
15
+
16
+ ;
17
+
18
+ var $node = $node || {}
19
+ void function( module ) { var exports = module.exports = this; function require( id ) { return $node[ id.replace( /^.\// , "../" ) ] };
20
+ ;
21
+ "use strict";
22
+ Error.stackTraceLimit = 50;
23
+ var $;
24
+ (function ($) {
25
+ })($ || ($ = {}));
26
+ module.exports = $;
27
+ //mam.ts
28
+ ;
29
+
30
+ $node[ "../mam.ts" ] = $node[ "../mam.ts" ] = module.exports }.call( {} , {} )
31
+ ;
32
+ "use strict";
33
+ var $;
34
+ (function ($) {
35
+ function $mol_fail(error) {
36
+ throw error;
37
+ }
38
+ $.$mol_fail = $mol_fail;
39
+ })($ || ($ = {}));
40
+ //mol/fail/fail.ts
41
+ ;
42
+ "use strict";
43
+ var $;
44
+ (function ($) {
45
+ let $mol_wire_cursor;
46
+ (function ($mol_wire_cursor) {
47
+ $mol_wire_cursor[$mol_wire_cursor["stale"] = new (class stale extends Number {
48
+ })(-1)] = "stale";
49
+ $mol_wire_cursor[$mol_wire_cursor["doubt"] = new (class doubt extends Number {
50
+ })(-2)] = "doubt";
51
+ $mol_wire_cursor[$mol_wire_cursor["fresh"] = new (class fresh extends Number {
52
+ })(-3)] = "fresh";
53
+ $mol_wire_cursor[$mol_wire_cursor["final"] = new (class solid extends Number {
54
+ })(-4)] = "final";
55
+ })($mol_wire_cursor = $.$mol_wire_cursor || ($.$mol_wire_cursor = {}));
56
+ })($ || ($ = {}));
57
+ //mol/wire/cursor/cursor.ts
58
+ ;
59
+ "use strict";
60
+ var $;
61
+ (function ($) {
62
+ class $mol_wire_pub extends Array {
63
+ static get [Symbol.species]() {
64
+ return Array;
65
+ }
66
+ sub_from = 0;
67
+ get sub_list() {
68
+ const res = [];
69
+ for (let i = this.sub_from; i < this.length; i += 2) {
70
+ res.push(this[i]);
71
+ }
72
+ return res;
73
+ }
74
+ get sub_empty() {
75
+ return this.sub_from === this.length;
76
+ }
77
+ sub_on(sub, pub_pos) {
78
+ const pos = this.length;
79
+ this.push(sub, pub_pos);
80
+ return pos;
81
+ }
82
+ sub_off(sub_pos) {
83
+ if (!(sub_pos < this.length)) {
84
+ $mol_fail(new Error(`Wrong pos ${sub_pos}`));
85
+ }
86
+ const end = this.length - 2;
87
+ if (sub_pos !== end) {
88
+ this.peer_move(end, sub_pos);
89
+ }
90
+ this.pop();
91
+ this.pop();
92
+ if (this.length === this.sub_from)
93
+ this.reap();
94
+ }
95
+ reap() { }
96
+ track_promote() {
97
+ $mol_wire_auto?.track_next(this);
98
+ }
99
+ up() { }
100
+ down() { }
101
+ emit() {
102
+ for (let i = this.sub_from; i < this.length; i += 2) {
103
+ ;
104
+ this[i].stale();
105
+ }
106
+ }
107
+ stale() {
108
+ if (!this.affect($mol_wire_cursor.stale))
109
+ return false;
110
+ while ($mol_wire_affected.length) {
111
+ const next = $mol_wire_affected.pop();
112
+ next.affect($mol_wire_cursor.doubt);
113
+ }
114
+ return true;
115
+ }
116
+ affect(quant) {
117
+ for (let i = this.sub_from; i < this.length; i += 2) {
118
+ const sub = this[i];
119
+ $mol_wire_affected.push(sub);
120
+ }
121
+ return true;
122
+ }
123
+ peer_move(from_pos, to_pos) {
124
+ const peer = this[from_pos];
125
+ const self_pos = this[from_pos + 1];
126
+ this[to_pos] = peer;
127
+ this[to_pos + 1] = self_pos;
128
+ peer.peer_repos(self_pos, to_pos);
129
+ }
130
+ peer_repos(peer_pos, self_pos) {
131
+ this[peer_pos + 1] = self_pos;
132
+ }
133
+ }
134
+ $.$mol_wire_pub = $mol_wire_pub;
135
+ })($ || ($ = {}));
136
+ //mol/wire/pub/pub.ts
137
+ ;
138
+ "use strict";
139
+ //mol/wire/sub/sub.ts
140
+ ;
141
+ "use strict";
142
+ var $;
143
+ (function ($) {
144
+ $.$mol_wire_auto = null;
145
+ $.$mol_wire_affected = [];
146
+ })($ || ($ = {}));
147
+ //mol/wire/wire.ts
148
+ ;
149
+ export default $
150
+ //# sourceMappingURL=web.esm.js.map
package/web.esm.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../mam.jam.js","-","../../../../mam.ts","../../../fail/mol/fail/fail.ts","../../cursor/mol/wire/cursor/cursor.ts","../mol/wire/pub/pub.ts","../../sub/sub.ts","../../mol/wire/wire.ts"],"names":[],"mappings":"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","file":"web.esm.js","sourcesContent":[null,null,"Error.stackTraceLimit = 50;\n\ndeclare let _$_: { new(): {} } & typeof globalThis\ndeclare class $ extends _$_ {}\n\nnamespace $ {\n\texport type $ = typeof $$\n\texport declare class $$ extends $ {}\n\tnamespace $$ {\n\t\texport type $$ = $\n\t}\n}\n\nmodule.exports = $\n","namespace $ {\n\n\texport function $mol_fail( error : any ) : never {\n\t\tthrow error\n\t}\n\n}\n","namespace $ {\n\t\n\t/** Special status statuses. */\n\texport enum $mol_wire_cursor {\n\t\t\n\t\t/** Update required. */\n\t\tstale = new ( class stale extends Number {} )( -1 ) as any as number,\n\t\t\n\t\t/** Some of (transitive) pub update required. */\n\t\tdoubt = new ( class doubt extends Number {} )( -2 ) as any as number,\n\t\t\n\t\t/** Actual state but may be dropped. */\n\t\tfresh = new ( class fresh extends Number {} )( -3 ) as any as number,\n\t\t\n\t\t/** State will never be changed. */\n\t\tfinal = new ( class solid extends Number {} )( -4 ) as any as number,\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\t\n\t/**\n\t * Collects subscribers in compact array. 24B\n\t */\n\texport class $mol_wire_pub extends Array< unknown > {\n\t\t\n\t\t// Derived objects should be Arrays.\n\t\tstatic get [ Symbol.species ]() {\n\t\t\treturn Array\n\t\t}\n\t\t\n\t\t/**\n\t\t * Index of first subscriber.\n\t\t */\n\t\tprotected sub_from = 0 // 4B\n\t\t\n\t\t/**\n\t\t * All current subscribers.\n\t\t */\n\t\tget sub_list() {\n\t\t\tconst res = [] as $mol_wire_sub[]\n\t\t\tfor( let i = this.sub_from; i < this.length; i += 2 ) {\n\t\t\t\tres.push( this[i] as $mol_wire_sub )\n\t\t\t}\n\t\t\treturn res as readonly $mol_wire_sub[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * Has any subscribers or not.\n\t\t */\n\t\tget sub_empty() {\n\t\t\treturn this.sub_from === this.length\n\t\t}\n\t\t\n\t\t/**\n\t\t * Subscribe subscriber to this publisher events and return position of subscriber that required to unsubscribe.\n\t\t */\n\t\tsub_on( sub: $mol_wire_pub, pub_pos: number ) {\n\t\t\tconst pos = this.length\n\t\t\tthis.push( sub, pub_pos )\n\t\t\treturn pos\n\t\t}\n\t\t\n\t\t/**\n\t\t * Unsubscribe subscriber from this publisher events by subscriber position provided by `on(pub)`.\n\t\t */\n\t\tsub_off( sub_pos: number ) {\n\t\t\t\n\t\t\tif(!( sub_pos < this.length )) {\n\t\t\t\t$mol_fail( new Error( `Wrong pos ${ sub_pos }` ) )\n\t\t\t}\n\t\t\t\n\t\t\tconst end = this.length - 2\n\t\t\tif( sub_pos !== end ) {\n\t\t\t\tthis.peer_move( end, sub_pos )\n\t\t\t}\n\t\t\t\n\t\t\tthis.pop()\n\t\t\tthis.pop()\n\t\t\t\n\t\t\tif( this.length === this.sub_from ) this.reap()\n\t\t\t\n\t\t}\n\t\t\n\t\t/**\n\t\t * Called when last sub was unsubscribed.\n\t\t **/\n\t\treap() { }\n\t\t\n\t\t/**\n\t\t * Autowire this publisher with current subscriber.\n\t\t **/\n\t\ttrack_promote() {\n\t\t\t$mol_wire_auto?.track_next( this )\n\t\t}\n\t\t\n\t\t/**\n\t\t * Enforce actualization. Should not throw errors.\n\t\t */\n\t\tup() {}\n\t\t\n\t\t/**\n\t\t * Subscriber stabilized and allows to free.\n\t\t */\n\t\tdown() {}\n\t\t\n\t\t/**\n\t\t * Notify subscribers about self changes.\n\t\t */\n\t\temit() {\n\t\t\tfor( let i = this.sub_from; i < this.length; i += 2 ) {\n\t\t\t\t;( this[i] as $mol_wire_pub ).stale()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * Receive notification about publisher changes.\n\t\t */\n\t\tstale() {\n\t\t\t\n\t\t\tif( !this.affect( $mol_wire_cursor.stale ) ) return false\n\t\t\t\n\t\t\twhile( $mol_wire_affected.length ) {\n\t\t\t\tconst next = $mol_wire_affected.pop()! as $mol_wire_sub\n\t\t\t\tnext.affect( $mol_wire_cursor.doubt )\n\t\t\t}\n\t\t\t\n\t\t\treturn true\n\t\t}\n\t\t\n\t\t/**\n\t\t * Add self subscribers to affection queue.\n\t\t */\n\t\taffect( quant: number ) {\n\t\t\tfor( let i = this.sub_from; i < this.length; i += 2 ) {\n\t\t\t\tconst sub = this[i] as $mol_wire_sub\n\t\t\t\t$mol_wire_affected.push( sub )\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\t\n\t\t/**\n\t\t * Moves peer from one position to another. Doesn't clear data at old position!\n\t\t */\n\t\tpeer_move( from_pos: number, to_pos: number ) {\n\t\t\t\n\t\t\tconst peer = this[ from_pos ] as $mol_wire_pub\n\t\t\tconst self_pos = this[ from_pos + 1 ] as number\n\t\t\t\n\t\t\tthis[ to_pos ] = peer\n\t\t\tthis[ to_pos + 1 ] = self_pos\n\t\t\t\n\t\t\tpeer.peer_repos( self_pos, to_pos )\n\t\t}\n\t\t\n\t\t/**\n\t\t * Updates self position in the peer.\n\t\t */\n\t\tpeer_repos( peer_pos: number, self_pos: number ) {\n\t\t\tthis[ peer_pos + 1 ] = self_pos\n\t\t}\n\t\t\n\t}\n\t\n}\n",null,"namespace $ {\n\t\n\t/**\n\t * When fulfilled, all publishers are promoted to this subscriber on access to its.\n\t */\n\texport let $mol_wire_auto: $mol_wire_sub | null = null\n\t\n\t/**\n\t * Affection queue. Used to prevent accidental stack overflow on emit.\n\t */\n\texport const $mol_wire_affected = [] as ( $mol_wire_sub | number )[]\n\t\n}\n"]}
package/web.js ADDED
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ function require( path ){ return $node[ path ] };
3
+ "use strict"
4
+
5
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
6
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
7
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
8
+ else for (var i = decorators.length - 1; i >= 0; i--) if ((d = decorators[i])) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
9
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
10
+ };
11
+
12
+ var globalThis = globalThis || ( typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : this )
13
+ var $ = ( typeof module === 'object' ) ? ( module['export'+'s'] = globalThis ) : globalThis
14
+ $.$$ = $
15
+
16
+ ;
17
+
18
+ var $node = $node || {}
19
+ void function( module ) { var exports = module.exports = this; function require( id ) { return $node[ id.replace( /^.\// , "../" ) ] };
20
+ ;
21
+ "use strict";
22
+ Error.stackTraceLimit = 50;
23
+ var $;
24
+ (function ($) {
25
+ })($ || ($ = {}));
26
+ module.exports = $;
27
+ //mam.ts
28
+ ;
29
+
30
+ $node[ "../mam.ts" ] = $node[ "../mam.ts" ] = module.exports }.call( {} , {} )
31
+ ;
32
+ "use strict";
33
+ var $;
34
+ (function ($) {
35
+ function $mol_fail(error) {
36
+ throw error;
37
+ }
38
+ $.$mol_fail = $mol_fail;
39
+ })($ || ($ = {}));
40
+ //mol/fail/fail.ts
41
+ ;
42
+ "use strict";
43
+ var $;
44
+ (function ($) {
45
+ let $mol_wire_cursor;
46
+ (function ($mol_wire_cursor) {
47
+ $mol_wire_cursor[$mol_wire_cursor["stale"] = new (class stale extends Number {
48
+ })(-1)] = "stale";
49
+ $mol_wire_cursor[$mol_wire_cursor["doubt"] = new (class doubt extends Number {
50
+ })(-2)] = "doubt";
51
+ $mol_wire_cursor[$mol_wire_cursor["fresh"] = new (class fresh extends Number {
52
+ })(-3)] = "fresh";
53
+ $mol_wire_cursor[$mol_wire_cursor["final"] = new (class solid extends Number {
54
+ })(-4)] = "final";
55
+ })($mol_wire_cursor = $.$mol_wire_cursor || ($.$mol_wire_cursor = {}));
56
+ })($ || ($ = {}));
57
+ //mol/wire/cursor/cursor.ts
58
+ ;
59
+ "use strict";
60
+ var $;
61
+ (function ($) {
62
+ class $mol_wire_pub extends Array {
63
+ static get [Symbol.species]() {
64
+ return Array;
65
+ }
66
+ sub_from = 0;
67
+ get sub_list() {
68
+ const res = [];
69
+ for (let i = this.sub_from; i < this.length; i += 2) {
70
+ res.push(this[i]);
71
+ }
72
+ return res;
73
+ }
74
+ get sub_empty() {
75
+ return this.sub_from === this.length;
76
+ }
77
+ sub_on(sub, pub_pos) {
78
+ const pos = this.length;
79
+ this.push(sub, pub_pos);
80
+ return pos;
81
+ }
82
+ sub_off(sub_pos) {
83
+ if (!(sub_pos < this.length)) {
84
+ $mol_fail(new Error(`Wrong pos ${sub_pos}`));
85
+ }
86
+ const end = this.length - 2;
87
+ if (sub_pos !== end) {
88
+ this.peer_move(end, sub_pos);
89
+ }
90
+ this.pop();
91
+ this.pop();
92
+ if (this.length === this.sub_from)
93
+ this.reap();
94
+ }
95
+ reap() { }
96
+ track_promote() {
97
+ $mol_wire_auto?.track_next(this);
98
+ }
99
+ up() { }
100
+ down() { }
101
+ emit() {
102
+ for (let i = this.sub_from; i < this.length; i += 2) {
103
+ ;
104
+ this[i].stale();
105
+ }
106
+ }
107
+ stale() {
108
+ if (!this.affect($mol_wire_cursor.stale))
109
+ return false;
110
+ while ($mol_wire_affected.length) {
111
+ const next = $mol_wire_affected.pop();
112
+ next.affect($mol_wire_cursor.doubt);
113
+ }
114
+ return true;
115
+ }
116
+ affect(quant) {
117
+ for (let i = this.sub_from; i < this.length; i += 2) {
118
+ const sub = this[i];
119
+ $mol_wire_affected.push(sub);
120
+ }
121
+ return true;
122
+ }
123
+ peer_move(from_pos, to_pos) {
124
+ const peer = this[from_pos];
125
+ const self_pos = this[from_pos + 1];
126
+ this[to_pos] = peer;
127
+ this[to_pos + 1] = self_pos;
128
+ peer.peer_repos(self_pos, to_pos);
129
+ }
130
+ peer_repos(peer_pos, self_pos) {
131
+ this[peer_pos + 1] = self_pos;
132
+ }
133
+ }
134
+ $.$mol_wire_pub = $mol_wire_pub;
135
+ })($ || ($ = {}));
136
+ //mol/wire/pub/pub.ts
137
+ ;
138
+ "use strict";
139
+ //mol/wire/sub/sub.ts
140
+ ;
141
+ "use strict";
142
+ var $;
143
+ (function ($) {
144
+ $.$mol_wire_auto = null;
145
+ $.$mol_wire_affected = [];
146
+ })($ || ($ = {}));
147
+ //mol/wire/wire.ts
148
+
149
+ //# sourceMappingURL=web.js.map
package/web.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../mam.jam.js","-","../../../../mam.ts","../../../fail/mol/fail/fail.ts","../../cursor/mol/wire/cursor/cursor.ts","../mol/wire/pub/pub.ts","../../sub/sub.ts","../../mol/wire/wire.ts"],"names":[],"mappings":"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","file":"web.js","sourcesContent":[null,null,"Error.stackTraceLimit = 50;\n\ndeclare let _$_: { new(): {} } & typeof globalThis\ndeclare class $ extends _$_ {}\n\nnamespace $ {\n\texport type $ = typeof $$\n\texport declare class $$ extends $ {}\n\tnamespace $$ {\n\t\texport type $$ = $\n\t}\n}\n\nmodule.exports = $\n","namespace $ {\n\n\texport function $mol_fail( error : any ) : never {\n\t\tthrow error\n\t}\n\n}\n","namespace $ {\n\t\n\t/** Special status statuses. */\n\texport enum $mol_wire_cursor {\n\t\t\n\t\t/** Update required. */\n\t\tstale = new ( class stale extends Number {} )( -1 ) as any as number,\n\t\t\n\t\t/** Some of (transitive) pub update required. */\n\t\tdoubt = new ( class doubt extends Number {} )( -2 ) as any as number,\n\t\t\n\t\t/** Actual state but may be dropped. */\n\t\tfresh = new ( class fresh extends Number {} )( -3 ) as any as number,\n\t\t\n\t\t/** State will never be changed. */\n\t\tfinal = new ( class solid extends Number {} )( -4 ) as any as number,\n\t\t\n\t}\n\t\n}\n","namespace $ {\n\t\n\t/**\n\t * Collects subscribers in compact array. 24B\n\t */\n\texport class $mol_wire_pub extends Array< unknown > {\n\t\t\n\t\t// Derived objects should be Arrays.\n\t\tstatic get [ Symbol.species ]() {\n\t\t\treturn Array\n\t\t}\n\t\t\n\t\t/**\n\t\t * Index of first subscriber.\n\t\t */\n\t\tprotected sub_from = 0 // 4B\n\t\t\n\t\t/**\n\t\t * All current subscribers.\n\t\t */\n\t\tget sub_list() {\n\t\t\tconst res = [] as $mol_wire_sub[]\n\t\t\tfor( let i = this.sub_from; i < this.length; i += 2 ) {\n\t\t\t\tres.push( this[i] as $mol_wire_sub )\n\t\t\t}\n\t\t\treturn res as readonly $mol_wire_sub[]\n\t\t}\n\t\t\n\t\t/**\n\t\t * Has any subscribers or not.\n\t\t */\n\t\tget sub_empty() {\n\t\t\treturn this.sub_from === this.length\n\t\t}\n\t\t\n\t\t/**\n\t\t * Subscribe subscriber to this publisher events and return position of subscriber that required to unsubscribe.\n\t\t */\n\t\tsub_on( sub: $mol_wire_pub, pub_pos: number ) {\n\t\t\tconst pos = this.length\n\t\t\tthis.push( sub, pub_pos )\n\t\t\treturn pos\n\t\t}\n\t\t\n\t\t/**\n\t\t * Unsubscribe subscriber from this publisher events by subscriber position provided by `on(pub)`.\n\t\t */\n\t\tsub_off( sub_pos: number ) {\n\t\t\t\n\t\t\tif(!( sub_pos < this.length )) {\n\t\t\t\t$mol_fail( new Error( `Wrong pos ${ sub_pos }` ) )\n\t\t\t}\n\t\t\t\n\t\t\tconst end = this.length - 2\n\t\t\tif( sub_pos !== end ) {\n\t\t\t\tthis.peer_move( end, sub_pos )\n\t\t\t}\n\t\t\t\n\t\t\tthis.pop()\n\t\t\tthis.pop()\n\t\t\t\n\t\t\tif( this.length === this.sub_from ) this.reap()\n\t\t\t\n\t\t}\n\t\t\n\t\t/**\n\t\t * Called when last sub was unsubscribed.\n\t\t **/\n\t\treap() { }\n\t\t\n\t\t/**\n\t\t * Autowire this publisher with current subscriber.\n\t\t **/\n\t\ttrack_promote() {\n\t\t\t$mol_wire_auto?.track_next( this )\n\t\t}\n\t\t\n\t\t/**\n\t\t * Enforce actualization. Should not throw errors.\n\t\t */\n\t\tup() {}\n\t\t\n\t\t/**\n\t\t * Subscriber stabilized and allows to free.\n\t\t */\n\t\tdown() {}\n\t\t\n\t\t/**\n\t\t * Notify subscribers about self changes.\n\t\t */\n\t\temit() {\n\t\t\tfor( let i = this.sub_from; i < this.length; i += 2 ) {\n\t\t\t\t;( this[i] as $mol_wire_pub ).stale()\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * Receive notification about publisher changes.\n\t\t */\n\t\tstale() {\n\t\t\t\n\t\t\tif( !this.affect( $mol_wire_cursor.stale ) ) return false\n\t\t\t\n\t\t\twhile( $mol_wire_affected.length ) {\n\t\t\t\tconst next = $mol_wire_affected.pop()! as $mol_wire_sub\n\t\t\t\tnext.affect( $mol_wire_cursor.doubt )\n\t\t\t}\n\t\t\t\n\t\t\treturn true\n\t\t}\n\t\t\n\t\t/**\n\t\t * Add self subscribers to affection queue.\n\t\t */\n\t\taffect( quant: number ) {\n\t\t\tfor( let i = this.sub_from; i < this.length; i += 2 ) {\n\t\t\t\tconst sub = this[i] as $mol_wire_sub\n\t\t\t\t$mol_wire_affected.push( sub )\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\t\n\t\t/**\n\t\t * Moves peer from one position to another. Doesn't clear data at old position!\n\t\t */\n\t\tpeer_move( from_pos: number, to_pos: number ) {\n\t\t\t\n\t\t\tconst peer = this[ from_pos ] as $mol_wire_pub\n\t\t\tconst self_pos = this[ from_pos + 1 ] as number\n\t\t\t\n\t\t\tthis[ to_pos ] = peer\n\t\t\tthis[ to_pos + 1 ] = self_pos\n\t\t\t\n\t\t\tpeer.peer_repos( self_pos, to_pos )\n\t\t}\n\t\t\n\t\t/**\n\t\t * Updates self position in the peer.\n\t\t */\n\t\tpeer_repos( peer_pos: number, self_pos: number ) {\n\t\t\tthis[ peer_pos + 1 ] = self_pos\n\t\t}\n\t\t\n\t}\n\t\n}\n",null,"namespace $ {\n\t\n\t/**\n\t * When fulfilled, all publishers are promoted to this subscriber on access to its.\n\t */\n\texport let $mol_wire_auto: $mol_wire_sub | null = null\n\t\n\t/**\n\t * Affection queue. Used to prevent accidental stack overflow on emit.\n\t */\n\texport const $mol_wire_affected = [] as ( $mol_wire_sub | number )[]\n\t\n}\n"]}
package/web.test.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ function require( path ){ return $node[ path ] }
3
+ //# sourceMappingURL=web.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":";","file":"web.test.js","sourcesContent":[]}