@lincode/events 1.0.22

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/.ambientsrc ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "@lincode/events",
3
+ "strict": true,
4
+ "esnext": true,
5
+ "es2015": false,
6
+ "es5": false,
7
+ "library": true,
8
+ "node": true,
9
+ "react": false,
10
+ "jsx": false,
11
+ "css": false,
12
+ "tailwind": false,
13
+ "3d": false
14
+ }
@@ -0,0 +1,13 @@
1
+ import { Cancellable } from "@lincode/promiselikes";
2
+ export default class<Payload = void, Names extends string = string> {
3
+ private cbsMap;
4
+ private states?;
5
+ on(name: Names | Array<Names>, cb: (val: Payload) => void): Cancellable;
6
+ once(name: Names | Array<Names>, cb: (val: Payload) => void): Cancellable;
7
+ emit(name: Names, value: Payload): void;
8
+ hasState(name: Names): boolean;
9
+ setState(name: Names, value: Payload): void;
10
+ getState(name: Names): Payload | undefined;
11
+ deleteState(name: Names): void;
12
+ clear(): void;
13
+ }
package/lib/Events.js ADDED
@@ -0,0 +1,59 @@
1
+ import { Cancellable } from "@lincode/promiselikes";
2
+ import { forceGet } from "@lincode/utils";
3
+ export default class {
4
+ constructor() {
5
+ this.cbsMap = new Map();
6
+ }
7
+ on(name, cb) {
8
+ var _a;
9
+ if (Array.isArray(name)) {
10
+ const handle = new Cancellable();
11
+ for (const n of name)
12
+ handle.watch(this.on(n, cb));
13
+ return handle;
14
+ }
15
+ if ((_a = this.states) === null || _a === void 0 ? void 0 : _a.has(name))
16
+ cb(this.states.get(name));
17
+ const cbs = forceGet(this.cbsMap, name, () => new Set());
18
+ cbs.add(cb);
19
+ return new Cancellable(() => cbs.delete(cb));
20
+ }
21
+ once(name, cb) {
22
+ const handle = new Cancellable();
23
+ handle.watch(this.on(name, value => {
24
+ handle.cancel();
25
+ cb(value);
26
+ }));
27
+ return handle;
28
+ }
29
+ emit(name, value) {
30
+ if (this.cbsMap.has(name))
31
+ for (const cb of this.cbsMap.get(name))
32
+ cb(value);
33
+ }
34
+ hasState(name) {
35
+ var _a;
36
+ return !!((_a = this.states) === null || _a === void 0 ? void 0 : _a.has(name));
37
+ }
38
+ setState(name, value) {
39
+ var _a;
40
+ (_a = this.states) !== null && _a !== void 0 ? _a : (this.states = new Map());
41
+ if (this.states.has(name) && this.states.get(name) === value)
42
+ return;
43
+ this.states.set(name, value);
44
+ this.emit(name, value);
45
+ }
46
+ getState(name) {
47
+ var _a;
48
+ return (_a = this.states) === null || _a === void 0 ? void 0 : _a.get(name);
49
+ }
50
+ deleteState(name) {
51
+ var _a;
52
+ (_a = this.states) === null || _a === void 0 ? void 0 : _a.delete(name);
53
+ }
54
+ clear() {
55
+ var _a;
56
+ this.cbsMap.clear();
57
+ (_a = this.states) === null || _a === void 0 ? void 0 : _a.clear();
58
+ }
59
+ }
package/lib/event.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { Cancellable } from "@lincode/promiselikes";
2
+ declare type Emit<T> = (val: T, isState?: boolean) => void;
3
+ declare type On<T> = (cb: (val: T) => void, once?: boolean) => Cancellable;
4
+ declare type GetState<T> = () => T | undefined;
5
+ declare const _default: <T = void>() => readonly [Emit<T>, On<T>, GetState<T>];
6
+ export default _default;
package/lib/event.js ADDED
@@ -0,0 +1,40 @@
1
+ import { Cancellable } from "@lincode/promiselikes";
2
+ class Event {
3
+ constructor() {
4
+ this.cbs = new Set();
5
+ }
6
+ on(cb) {
7
+ if ("state" in this)
8
+ cb(this.state);
9
+ this.cbs.add(cb);
10
+ return new Cancellable(() => this.cbs.delete(cb));
11
+ }
12
+ once(cb) {
13
+ const handle = new Cancellable();
14
+ handle.watch(this.on(value => {
15
+ handle.cancel();
16
+ cb(value);
17
+ }));
18
+ return handle;
19
+ }
20
+ emit(value) {
21
+ for (const cb of this.cbs)
22
+ cb(value);
23
+ }
24
+ setState(value) {
25
+ if ("state" in this && this.state === value)
26
+ return;
27
+ this.state = value;
28
+ this.emit(value);
29
+ }
30
+ getState() {
31
+ return this.state;
32
+ }
33
+ }
34
+ export default () => {
35
+ const event = new Event();
36
+ const emit = (val, isState) => isState ? event.setState(val) : event.emit(val);
37
+ const on = (cb, once) => once ? event.once(cb) : event.on(cb);
38
+ const getState = () => event.getState();
39
+ return [emit, on, getState];
40
+ };
package/lib/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { default, default as Events } from "./Events";
2
+ export { default as event } from "./event";
package/lib/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { default, default as Events } from "./Events";
2
+ export { default as event } from "./event";
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const promiselikes_1 = require("@lincode/promiselikes");
4
+ const utils_1 = require("@lincode/utils");
5
+ class default_1 {
6
+ constructor() {
7
+ this.cbsMap = new Map();
8
+ }
9
+ on(name, cb) {
10
+ var _a;
11
+ if (Array.isArray(name)) {
12
+ const handle = new promiselikes_1.Cancellable();
13
+ for (const n of name)
14
+ handle.watch(this.on(n, cb));
15
+ return handle;
16
+ }
17
+ if ((_a = this.states) === null || _a === void 0 ? void 0 : _a.has(name))
18
+ cb(this.states.get(name));
19
+ const cbs = (0, utils_1.forceGet)(this.cbsMap, name, () => new Set());
20
+ cbs.add(cb);
21
+ return new promiselikes_1.Cancellable(() => cbs.delete(cb));
22
+ }
23
+ once(name, cb) {
24
+ const handle = new promiselikes_1.Cancellable();
25
+ handle.watch(this.on(name, value => {
26
+ handle.cancel();
27
+ cb(value);
28
+ }));
29
+ return handle;
30
+ }
31
+ emit(name, value) {
32
+ if (this.cbsMap.has(name))
33
+ for (const cb of this.cbsMap.get(name))
34
+ cb(value);
35
+ }
36
+ hasState(name) {
37
+ var _a;
38
+ return !!((_a = this.states) === null || _a === void 0 ? void 0 : _a.has(name));
39
+ }
40
+ setState(name, value) {
41
+ var _a;
42
+ (_a = this.states) !== null && _a !== void 0 ? _a : (this.states = new Map());
43
+ if (this.states.has(name) && this.states.get(name) === value)
44
+ return;
45
+ this.states.set(name, value);
46
+ this.emit(name, value);
47
+ }
48
+ getState(name) {
49
+ var _a;
50
+ return (_a = this.states) === null || _a === void 0 ? void 0 : _a.get(name);
51
+ }
52
+ deleteState(name) {
53
+ var _a;
54
+ (_a = this.states) === null || _a === void 0 ? void 0 : _a.delete(name);
55
+ }
56
+ clear() {
57
+ var _a;
58
+ this.cbsMap.clear();
59
+ (_a = this.states) === null || _a === void 0 ? void 0 : _a.clear();
60
+ }
61
+ }
62
+ exports.default = default_1;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const promiselikes_1 = require("@lincode/promiselikes");
4
+ class Event {
5
+ constructor() {
6
+ this.cbs = new Set();
7
+ }
8
+ on(cb) {
9
+ if ("state" in this)
10
+ cb(this.state);
11
+ this.cbs.add(cb);
12
+ return new promiselikes_1.Cancellable(() => this.cbs.delete(cb));
13
+ }
14
+ once(cb) {
15
+ const handle = new promiselikes_1.Cancellable();
16
+ handle.watch(this.on(value => {
17
+ handle.cancel();
18
+ cb(value);
19
+ }));
20
+ return handle;
21
+ }
22
+ emit(value) {
23
+ for (const cb of this.cbs)
24
+ cb(value);
25
+ }
26
+ setState(value) {
27
+ if ("state" in this && this.state === value)
28
+ return;
29
+ this.state = value;
30
+ this.emit(value);
31
+ }
32
+ getState() {
33
+ return this.state;
34
+ }
35
+ }
36
+ exports.default = () => {
37
+ const event = new Event();
38
+ const emit = (val, isState) => isState ? event.setState(val) : event.emit(val);
39
+ const on = (cb, once) => once ? event.once(cb) : event.on(cb);
40
+ const getState = () => event.getState();
41
+ return [emit, on, getState];
42
+ };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.event = exports.Events = exports.default = void 0;
4
+ var Events_1 = require("./Events");
5
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return Events_1.default; } });
6
+ Object.defineProperty(exports, "Events", { enumerable: true, get: function () { return Events_1.default; } });
7
+ var event_1 = require("./event");
8
+ Object.defineProperty(exports, "event", { enumerable: true, get: function () { return event_1.default; } });
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const _1 = require(".");
4
+ const events = new _1.default();
5
+ events.on("hello", (val) => {
6
+ console.log(val);
7
+ console.log("awesome");
8
+ });
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@lincode/events",
3
+ "version": "1.0.22",
4
+ "description": "Generated by ambients-cli",
5
+ "author": "Lai Schwe",
6
+ "license": "MIT",
7
+ "keywords": [
8
+ "ambients"
9
+ ],
10
+ "dependencies": {
11
+ "@lincode/promiselikes": "*",
12
+ "@lincode/utils": "*"
13
+ },
14
+ "peerDependencies": {},
15
+ "devDependencies": {
16
+ "typescript": "*"
17
+ },
18
+ "scripts": {
19
+ "build": "ambients clean && yarn tsc && yarn tsc -p tsconfig-commonjs.json",
20
+ "start": "node lib-commonjs/test.js",
21
+ "dev": "yarn build && yarn start dev"
22
+ },
23
+ "private": false,
24
+ "main": "lib-commonjs/index.js",
25
+ "module": "lib/index.js",
26
+ "types": "lib/index.d.ts"
27
+ }
package/src/Events.ts ADDED
@@ -0,0 +1,63 @@
1
+ import { Cancellable } from "@lincode/promiselikes"
2
+ import { forceGet } from "@lincode/utils"
3
+
4
+ export default class <Payload = void, Names extends string = string> {
5
+ private cbsMap = new Map<string, Set<(val: Payload) => void>>()
6
+ private states?: Map<string, Payload>
7
+
8
+ public on(name: Names | Array<Names>, cb: (val: Payload) => void): Cancellable {
9
+ if (Array.isArray(name)) {
10
+ const handle = new Cancellable()
11
+ for (const n of name)
12
+ handle.watch(this.on(n, cb))
13
+
14
+ return handle
15
+ }
16
+ if (this.states?.has(name))
17
+ cb(this.states.get(name)!)
18
+
19
+ const cbs = forceGet(this.cbsMap, name, () => new Set<(val: Payload) => void>())
20
+
21
+ cbs.add(cb)
22
+ return new Cancellable(() => cbs.delete(cb))
23
+ }
24
+
25
+ public once(name: Names | Array<Names>, cb: (val: Payload) => void): Cancellable {
26
+ const handle = new Cancellable()
27
+ handle.watch(this.on(name, value => {
28
+ handle.cancel()
29
+ cb(value)
30
+ }))
31
+ return handle
32
+ }
33
+
34
+ public emit(name: Names, value: Payload): void {
35
+ if (this.cbsMap.has(name))
36
+ for (const cb of this.cbsMap.get(name)!)
37
+ cb(value)
38
+ }
39
+
40
+ public hasState(name: Names): boolean {
41
+ return !!this.states?.has(name)
42
+ }
43
+
44
+ public setState(name: Names, value: Payload): void {
45
+ this.states ??= new Map()
46
+ if (this.states.has(name) && this.states.get(name) === value) return
47
+ this.states.set(name, value)
48
+ this.emit(name, value)
49
+ }
50
+
51
+ public getState(name: Names): Payload | undefined {
52
+ return this.states?.get(name)
53
+ }
54
+
55
+ public deleteState(name: Names): void {
56
+ this.states?.delete(name)
57
+ }
58
+
59
+ public clear(): void {
60
+ this.cbsMap.clear()
61
+ this.states?.clear()
62
+ }
63
+ }
package/src/event.ts ADDED
@@ -0,0 +1,50 @@
1
+ import { Cancellable } from "@lincode/promiselikes"
2
+
3
+ class Event<Payload = void> {
4
+ private cbs = new Set<(val: Payload) => void>()
5
+ private state?: Payload
6
+
7
+ public on(cb: (val: Payload) => void): Cancellable {
8
+ if ("state" in this)
9
+ cb(this.state!)
10
+
11
+ this.cbs.add(cb)
12
+ return new Cancellable(() => this.cbs.delete(cb))
13
+ }
14
+
15
+ public once(cb: (val: Payload) => void): Cancellable {
16
+ const handle = new Cancellable()
17
+ handle.watch(this.on(value => {
18
+ handle.cancel()
19
+ cb(value)
20
+ }))
21
+ return handle
22
+ }
23
+
24
+ public emit(value: Payload): void {
25
+ for (const cb of this.cbs)
26
+ cb(value)
27
+ }
28
+
29
+ public setState(value: Payload): void {
30
+ if ("state" in this && this.state === value) return
31
+ this.state = value
32
+ this.emit(value)
33
+ }
34
+
35
+ public getState(): Payload | undefined {
36
+ return this.state
37
+ }
38
+ }
39
+
40
+ type Emit<T> = (val: T, isState?: boolean) => void
41
+ type On<T> = (cb: (val: T) => void, once?: boolean) => Cancellable
42
+ type GetState<T> = () => T | undefined
43
+
44
+ export default <T = void>() => {
45
+ const event = new Event<T>()
46
+ const emit: Emit<T> = (val: T, isState?: boolean) => isState ? event.setState(val) : event.emit(val)
47
+ const on: On<T> = (cb: (val: T) => void, once?: boolean) => once ? event.once(cb) : event.on(cb)
48
+ const getState: GetState<T> = () => event.getState()
49
+ return <const>[emit, on, getState]
50
+ }
package/src/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { default, default as Events } from "./Events"
2
+ export { default as event } from "./event"
package/src/test.ts ADDED
@@ -0,0 +1,7 @@
1
+ import Events from "."
2
+
3
+ const events = new Events<string | undefined, "hello">()
4
+ events.on("hello", (val) => {
5
+ console.log(val)
6
+ console.log("awesome")
7
+ })
@@ -0,0 +1,17 @@
1
+ {
2
+ "compilerOptions": {
3
+ "module": "commonjs",
4
+ "moduleResolution": "node",
5
+ "strict": true,
6
+ "noImplicitOverride": true,
7
+ "skipLibCheck": true,
8
+ "allowSyntheticDefaultImports": true,
9
+ "experimentalDecorators": true,
10
+ "target": "es2019",
11
+ "declaration": false,
12
+ "outDir": "lib-commonjs"
13
+ },
14
+ "include": [
15
+ "src"
16
+ ]
17
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "compilerOptions": {
3
+ "module": "esnext",
4
+ "moduleResolution": "node",
5
+ "strict": true,
6
+ "noImplicitOverride": true,
7
+ "skipLibCheck": true,
8
+ "allowSyntheticDefaultImports": true,
9
+ "experimentalDecorators": true,
10
+ "target": "es2019",
11
+ "declaration": true,
12
+ "outDir": "lib"
13
+ },
14
+ "include": [
15
+ "src"
16
+ ],
17
+ "exclude": [
18
+ "src/test.ts"
19
+ ]
20
+ }