atom.io 0.40.10 → 0.41.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/dist/eslint-plugin/index.js +1 -1
- package/dist/internal/index.d.ts +11 -2
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +34 -1
- package/dist/internal/index.js.map +1 -1
- package/dist/realtime/index.d.ts +2 -1
- package/dist/realtime/index.d.ts.map +1 -1
- package/dist/realtime/index.js.map +1 -1
- package/dist/realtime-client/index.js +2 -1
- package/dist/realtime-client/index.js.map +1 -1
- package/dist/realtime-server/index.js +1 -1
- package/dist/realtime-server/index.js.map +1 -1
- package/dist/transceivers/o-list/index.d.ts +20 -10
- package/dist/transceivers/o-list/index.d.ts.map +1 -1
- package/dist/transceivers/o-list/index.js +215 -10
- package/dist/transceivers/o-list/index.js.map +1 -1
- package/dist/transceivers/set-rtx/index.d.ts +16 -16
- package/dist/transceivers/set-rtx/index.d.ts.map +1 -1
- package/dist/transceivers/set-rtx/index.js.map +1 -1
- package/dist/transceivers/u-list/index.d.ts +27 -18
- package/dist/transceivers/u-list/index.d.ts.map +1 -1
- package/dist/transceivers/u-list/index.js +54 -34
- package/dist/transceivers/u-list/index.js.map +1 -1
- package/package.json +10 -10
- package/src/internal/index.ts +1 -0
- package/src/internal/micro.ts +69 -0
- package/src/realtime/shared-room-store.ts +3 -2
- package/src/realtime-server/ipc-sockets/parent-socket.ts +1 -1
- package/src/transceivers/o-list/o-list.ts +231 -30
- package/src/transceivers/set-rtx/set-rtx.ts +22 -21
- package/src/transceivers/u-list/u-list.ts +85 -55
|
@@ -1,29 +1,38 @@
|
|
|
1
|
-
import { Subject, Transceiver, TransceiverMode } from "atom.io/internal";
|
|
2
|
-
import {
|
|
1
|
+
import { Enumeration, Fn, Subject, Transceiver, TransceiverMode } from "atom.io/internal";
|
|
2
|
+
import { primitive } from "atom.io/json";
|
|
3
3
|
|
|
4
4
|
//#region src/transceivers/u-list/u-list.d.ts
|
|
5
|
-
type
|
|
6
|
-
type
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
|
|
5
|
+
type SetMutations = Exclude<keyof Set<any>, symbol | keyof ReadonlySet<any>>;
|
|
6
|
+
type SetUpdate<P extends primitive> = {
|
|
7
|
+
type: `add` | `delete`;
|
|
8
|
+
value: P;
|
|
9
|
+
} | {
|
|
10
|
+
type: `clear`;
|
|
11
|
+
values: P[];
|
|
12
|
+
};
|
|
13
|
+
type UListUpdateType = SetUpdate<any>[`type`];
|
|
14
|
+
type PackedSetUpdate<P extends primitive> = string & {
|
|
15
|
+
update?: SetUpdate<P>;
|
|
16
|
+
};
|
|
17
|
+
declare const SET_UPDATE_ENUM: Enumeration<[`add`, `delete`, `clear`]>;
|
|
18
|
+
type SetMutationHandler = { [K in UListUpdateType]: Fn };
|
|
19
|
+
declare class UList<P extends primitive> extends Set<P> implements Transceiver<ReadonlySet<P>, PackedSetUpdate<P>, ReadonlyArray<P>>, SetMutationHandler {
|
|
11
20
|
mode: TransceiverMode;
|
|
12
|
-
readonly subject: Subject<
|
|
21
|
+
readonly subject: Subject<PackedSetUpdate<P>>;
|
|
13
22
|
constructor(values?: Iterable<P>);
|
|
14
23
|
readonly READONLY_VIEW: ReadonlySet<P>;
|
|
15
|
-
toJSON():
|
|
16
|
-
static fromJSON<P extends primitive>(json:
|
|
24
|
+
toJSON(): ReadonlyArray<P>;
|
|
25
|
+
static fromJSON<P extends primitive>(json: ReadonlyArray<P>): UList<P>;
|
|
17
26
|
add(value: P): this;
|
|
18
27
|
clear(): void;
|
|
19
28
|
delete(value: P): boolean;
|
|
20
|
-
subscribe(key: string, fn: (update:
|
|
21
|
-
emit(update:
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
29
|
+
subscribe(key: string, fn: (update: PackedSetUpdate<P>) => void): () => void;
|
|
30
|
+
emit(update: SetUpdate<P>): void;
|
|
31
|
+
do(packed: PackedSetUpdate<P>): null;
|
|
32
|
+
undo(packed: PackedSetUpdate<P>): number | null;
|
|
33
|
+
static packUpdate<P extends primitive>(update: SetUpdate<P>): PackedSetUpdate<P>;
|
|
34
|
+
static unpackUpdate<P extends primitive>(packed: PackedSetUpdate<P>): SetUpdate<P>;
|
|
26
35
|
}
|
|
27
36
|
//#endregion
|
|
28
|
-
export {
|
|
37
|
+
export { PackedSetUpdate, SET_UPDATE_ENUM, SetMutationHandler, SetMutations, SetUpdate, UList, UListUpdateType };
|
|
29
38
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/transceivers/u-list/u-list.ts"],"sourcesContent":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["SET_UPDATE_ENUM: Enumeration<[`add`, `delete`, `clear`]>"],"sources":["../../../src/transceivers/u-list/u-list.ts"],"sourcesContent":[],"mappings":";;;;KASY,YAAA,GAAe,cACpB,yBACS;AAFJ,KAIA,SAJA,CAAA,UAIoB,SAJpB,CAAA,GAAA;EAAA,IAAA,EAAA,KAAA,GAAA,QAAA;SAOF,CANH;;QADoB,OAAA;EAAA,MAAA,EAWhB,CAXgB,EAAA;AAI3B,CAAA;AAAY,KASA,eAAA,GAAkB,SATlB,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA;AAAoB,KAcpB,eAdoB,CAAA,UAcM,SAdN,CAAA,GAAA,MAAA,GAAA;QAGtB,CAAA,EAYA,SAZA,CAYU,CAZV,CAAA;;AAIC,cAWEA,eAXF,EAWmB,WAXnB,CAAA,CAAA,KAAA,EAAA,QAAA,EAAA,OAAA,CAAA,CAAA;AAEC,KAYA,kBAAA,GAZkB,QAYW,eAZX,GAY6B,EAZ7B,EAAA;AAKlB,cASC,KATD,CAAA,UASiB,SATjB,CAAA,SAUH,GAVG,CAUC,CAVD,CAAA,YAYV,WAZU,CAYE,WAZF,CAYc,CAZd,CAAA,EAYkB,eAZlB,CAYkC,CAZlC,CAAA,EAYsC,aAZtC,CAYoD,CAZpD,CAAA,CAAA,EAaV,kBAbU,CAAA;EAAA,IAAA,EAeE,eAfF;WAA0B,OAAA,EAgBZ,OAhBY,CAgBJ,eAhBI,CAgBY,CAhBZ,CAAA,CAAA;aAClB,CAAA,MAAA,CAAA,EAiBS,QAjBT,CAiBkB,CAjBlB,CAAA;WAAV,aAAA,EAuBsB,WAvBtB,CAuBkC,CAvBlC,CAAA;EAAA,MAAA,CAAA,CAAA,EAyBQ,aAzBR,CAyBsB,CAzBtB,CAAA;EAGV,OAAaA,QAAAA,CAAAA,UA0BqB,SA1BJ,CAAA,CAAA,IAAA,EA0BqB,aA1BrB,CA0BmC,CA1BnC,CAAA,CAAA,EA0BwC,KA1BxC,CA0B8C,CA1B9C,CAAA;EAG9B,GAAY,CAAA,KAAA,EA2BO,CA3BP,CAAA,EAAA,IAAA;EAAA,KAAA,CAAA,CAAA,EAAA,IAAA;QAA6B,CAAA,KAAA,EA2CnB,CA3CmB,CAAA,EAAA,OAAA;WAAkB,CAAA,GAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA,MAAA,EAqD5C,eArD4C,CAqD5B,CArD4B,CAAA,EAAA,GAAA,IAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAAA,IAAA,CAAA,MAAA,EA0DtC,SA1DsC,CA0D5B,CA1D4B,CAAA,CAAA,EAAA,IAAA;EAE3D,EAAA,CAAa,MAAA,EA4DM,eA5DN,CA4DsB,CA5DtB,CAAA,CAAA,EAAA,IAAA;EAAA,IAAA,CAAA,MAAA,EA6EQ,eA7ER,CA6EwB,CA7ExB,CAAA,CAAA,EAAA,MAAA,GAAA,IAAA;SAAgB,UAAA,CAAA,UAgGO,SAhGP,CAAA,CAAA,MAAA,EAiGnB,SAjGmB,CAiGT,CAjGS,CAAA,CAAA,EAkGzB,eAlGyB,CAkGT,CAlGS,CAAA;SAChB,YAAA,CAAA,UAwGyB,SAxGzB,CAAA,CAAA,MAAA,EAyGH,eAzGG,CAyGa,CAzGb,CAAA,CAAA,EA0GT,SA1GS,CA0GC,CA1GD,CAAA"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import { Subject } from "atom.io/internal";
|
|
2
|
-
import { stringifyJson } from "atom.io/json";
|
|
1
|
+
import { Subject, enumeration, packValue, unpackValue } from "atom.io/internal";
|
|
3
2
|
|
|
4
3
|
//#region src/transceivers/u-list/u-list.ts
|
|
4
|
+
const SET_UPDATE_ENUM = enumeration([
|
|
5
|
+
`add`,
|
|
6
|
+
`delete`,
|
|
7
|
+
`clear`
|
|
8
|
+
]);
|
|
5
9
|
var UList = class UList extends Set {
|
|
6
10
|
mode = `record`;
|
|
7
11
|
subject = new Subject();
|
|
@@ -11,77 +15,93 @@ var UList = class UList extends Set {
|
|
|
11
15
|
}
|
|
12
16
|
READONLY_VIEW = this;
|
|
13
17
|
toJSON() {
|
|
14
|
-
return
|
|
18
|
+
return [...this];
|
|
15
19
|
}
|
|
16
20
|
static fromJSON(json) {
|
|
17
|
-
return new UList(json
|
|
21
|
+
return new UList(json);
|
|
18
22
|
}
|
|
19
23
|
add(value) {
|
|
20
24
|
const result = super.add(value);
|
|
21
|
-
if (this.mode === `record`) this.emit(
|
|
25
|
+
if (this.mode === `record`) this.emit({
|
|
26
|
+
type: `add`,
|
|
27
|
+
value
|
|
28
|
+
});
|
|
22
29
|
return result;
|
|
23
30
|
}
|
|
24
31
|
clear() {
|
|
25
32
|
const capturedContents = this.mode === `record` ? [...this] : null;
|
|
26
33
|
super.clear();
|
|
27
|
-
if (capturedContents) this.emit(
|
|
34
|
+
if (capturedContents) this.emit({
|
|
35
|
+
type: `clear`,
|
|
36
|
+
values: capturedContents
|
|
37
|
+
});
|
|
28
38
|
}
|
|
29
39
|
delete(value) {
|
|
30
40
|
const result = super.delete(value);
|
|
31
|
-
if (this.mode === `record`) this.emit(
|
|
41
|
+
if (this.mode === `record`) this.emit({
|
|
42
|
+
type: `delete`,
|
|
43
|
+
value
|
|
44
|
+
});
|
|
32
45
|
return result;
|
|
33
46
|
}
|
|
34
47
|
subscribe(key, fn) {
|
|
35
48
|
return this.subject.subscribe(key, fn);
|
|
36
49
|
}
|
|
37
50
|
emit(update) {
|
|
38
|
-
this.subject.next(update);
|
|
51
|
+
this.subject.next(UList.packUpdate(update));
|
|
39
52
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
switch (type) {
|
|
53
|
+
do(packed) {
|
|
54
|
+
this.mode = `playback`;
|
|
55
|
+
const update = UList.unpackUpdate(packed);
|
|
56
|
+
switch (update.type) {
|
|
45
57
|
case `add`:
|
|
46
|
-
this.add(
|
|
58
|
+
this.add(update.value);
|
|
47
59
|
break;
|
|
48
|
-
case `
|
|
49
|
-
this.delete(
|
|
60
|
+
case `delete`:
|
|
61
|
+
this.delete(update.value);
|
|
50
62
|
break;
|
|
51
63
|
case `clear`: this.clear();
|
|
52
64
|
}
|
|
53
|
-
}
|
|
54
|
-
do(update) {
|
|
55
|
-
this.mode = `playback`;
|
|
56
|
-
this.doStep(update);
|
|
57
65
|
this.mode = `record`;
|
|
58
66
|
return null;
|
|
59
67
|
}
|
|
60
|
-
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
switch (type) {
|
|
68
|
+
undo(packed) {
|
|
69
|
+
const update = UList.unpackUpdate(packed);
|
|
70
|
+
this.mode = `playback`;
|
|
71
|
+
switch (update.type) {
|
|
65
72
|
case `add`:
|
|
66
|
-
this.delete(
|
|
73
|
+
this.delete(update.value);
|
|
67
74
|
break;
|
|
68
|
-
case `
|
|
69
|
-
this.add(
|
|
75
|
+
case `delete`:
|
|
76
|
+
this.add(update.value);
|
|
70
77
|
break;
|
|
71
78
|
case `clear`: {
|
|
72
|
-
const values =
|
|
79
|
+
const values = update.values;
|
|
73
80
|
for (const v of values) this.add(v);
|
|
74
81
|
}
|
|
75
82
|
}
|
|
76
|
-
}
|
|
77
|
-
undo(update) {
|
|
78
|
-
this.mode = `playback`;
|
|
79
|
-
this.undoStep(update);
|
|
80
83
|
this.mode = `record`;
|
|
81
84
|
return null;
|
|
82
85
|
}
|
|
86
|
+
static packUpdate(update) {
|
|
87
|
+
const head = SET_UPDATE_ENUM[update.type] + `\u001F`;
|
|
88
|
+
if (update.type === `clear`) return head + update.values.map(packValue).join(`\u001E`);
|
|
89
|
+
return head + packValue(update.value);
|
|
90
|
+
}
|
|
91
|
+
static unpackUpdate(packed) {
|
|
92
|
+
const [type, tail] = packed.split(`\u001F`);
|
|
93
|
+
const head = SET_UPDATE_ENUM[type];
|
|
94
|
+
if (head === `clear`) return {
|
|
95
|
+
type: `clear`,
|
|
96
|
+
values: tail.split(`\u001E`).map(unpackValue)
|
|
97
|
+
};
|
|
98
|
+
return {
|
|
99
|
+
type: head,
|
|
100
|
+
value: unpackValue(tail)
|
|
101
|
+
};
|
|
102
|
+
}
|
|
83
103
|
};
|
|
84
104
|
|
|
85
105
|
//#endregion
|
|
86
|
-
export { UList };
|
|
106
|
+
export { SET_UPDATE_ENUM, UList };
|
|
87
107
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/transceivers/u-list/u-list.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"index.js","names":["SET_UPDATE_ENUM: Enumeration<[`add`, `delete`, `clear`]>"],"sources":["../../../src/transceivers/u-list/u-list.ts"],"sourcesContent":["import type {\n\tEnumeration,\n\tFn,\n\tTransceiver,\n\tTransceiverMode,\n} from \"atom.io/internal\"\nimport { enumeration, packValue, Subject, unpackValue } from \"atom.io/internal\"\nimport type { primitive } from \"atom.io/json\"\n\nexport type SetMutations = Exclude<\n\tkeyof Set<any>,\n\tsymbol | keyof ReadonlySet<any>\n>\nexport type SetUpdate<P extends primitive> =\n\t| {\n\t\t\ttype: `add` | `delete`\n\t\t\tvalue: P\n\t }\n\t| {\n\t\t\ttype: `clear`\n\t\t\tvalues: P[]\n\t }\nexport type UListUpdateType = SetUpdate<any>[`type`]\ntrue satisfies SetMutations extends UListUpdateType\n\t? true\n\t: Exclude<SetMutations, UListUpdateType>\n\nexport type PackedSetUpdate<P extends primitive> = string & {\n\tupdate?: SetUpdate<P>\n}\n\nexport const SET_UPDATE_ENUM: Enumeration<[`add`, `delete`, `clear`]> =\n\tenumeration([`add`, `delete`, `clear`] as const)\n\nexport type SetMutationHandler = { [K in UListUpdateType]: Fn }\n\nexport class UList<P extends primitive>\n\textends Set<P>\n\timplements\n\t\tTransceiver<ReadonlySet<P>, PackedSetUpdate<P>, ReadonlyArray<P>>,\n\t\tSetMutationHandler\n{\n\tpublic mode: TransceiverMode = `record`\n\tpublic readonly subject: Subject<PackedSetUpdate<P>> = new Subject()\n\n\tpublic constructor(values?: Iterable<P>) {\n\t\tsuper(values)\n\t\tif (values instanceof UList) {\n\t\t}\n\t}\n\n\tpublic readonly READONLY_VIEW: ReadonlySet<P> = this\n\n\tpublic toJSON(): ReadonlyArray<P> {\n\t\treturn [...this]\n\t}\n\n\tpublic static fromJSON<P extends primitive>(json: ReadonlyArray<P>): UList<P> {\n\t\treturn new UList<P>(json)\n\t}\n\n\tpublic add(value: P): this {\n\t\tconst result = super.add(value)\n\t\tif (this.mode === `record`) {\n\t\t\tthis.emit({ type: `add`, value })\n\t\t}\n\t\treturn result\n\t}\n\n\tpublic clear(): void {\n\t\tconst capturedContents = this.mode === `record` ? [...this] : null\n\t\tsuper.clear()\n\t\tif (capturedContents) {\n\t\t\tthis.emit({ type: `clear`, values: capturedContents })\n\t\t}\n\t}\n\n\tpublic delete(value: P): boolean {\n\t\tconst result = super.delete(value)\n\t\tif (this.mode === `record`) {\n\t\t\tthis.emit({ type: `delete`, value })\n\t\t}\n\t\treturn result\n\t}\n\n\tpublic subscribe(\n\t\tkey: string,\n\t\tfn: (update: PackedSetUpdate<P>) => void,\n\t): () => void {\n\t\treturn this.subject.subscribe(key, fn)\n\t}\n\n\tpublic emit(update: SetUpdate<P>): void {\n\t\tthis.subject.next(UList.packUpdate(update))\n\t}\n\n\tpublic do(packed: PackedSetUpdate<P>): null {\n\t\tthis.mode = `playback`\n\t\tconst update = UList.unpackUpdate(packed)\n\t\tswitch (update.type) {\n\t\t\tcase `add`:\n\t\t\t\tthis.add(update.value)\n\t\t\t\tbreak\n\t\t\tcase `delete`:\n\t\t\t\tthis.delete(update.value)\n\t\t\t\tbreak\n\t\t\tcase `clear`:\n\t\t\t\tthis.clear()\n\t\t}\n\t\tthis.mode = `record`\n\t\treturn null\n\t}\n\n\tpublic undo(packed: PackedSetUpdate<P>): number | null {\n\t\tconst update = UList.unpackUpdate(packed)\n\t\tthis.mode = `playback`\n\t\tswitch (update.type) {\n\t\t\tcase `add`:\n\t\t\t\tthis.delete(update.value)\n\t\t\t\tbreak\n\t\t\tcase `delete`:\n\t\t\t\tthis.add(update.value)\n\t\t\t\tbreak\n\t\t\tcase `clear`: {\n\t\t\t\tconst values = update.values\n\t\t\t\tfor (const v of values) this.add(v)\n\t\t\t}\n\t\t}\n\t\tthis.mode = `record`\n\t\treturn null\n\t}\n\n\tpublic static packUpdate<P extends primitive>(\n\t\tupdate: SetUpdate<P>,\n\t): PackedSetUpdate<P> {\n\t\tconst head = SET_UPDATE_ENUM[update.type] + `\\u001F`\n\t\tif (update.type === `clear`) {\n\t\t\treturn head + update.values.map(packValue).join(`\\u001E`)\n\t\t}\n\t\treturn head + packValue(update.value)\n\t}\n\tpublic static unpackUpdate<P extends primitive>(\n\t\tpacked: PackedSetUpdate<P>,\n\t): SetUpdate<P> {\n\t\tconst [type, tail] = packed.split(`\\u001F`) as [0 | 1 | 2, string]\n\t\tconst head = SET_UPDATE_ENUM[type]\n\t\tif (head === `clear`) {\n\t\t\tconst values = tail.split(`\\u001E`).map(unpackValue) as P[]\n\t\t\treturn { type: `clear`, values }\n\t\t}\n\t\treturn { type: head, value: unpackValue(tail) as P }\n\t}\n}\n"],"mappings":";;;AA+BA,MAAaA,kBACZ,YAAY;CAAC;CAAO;CAAU;CAAQ,CAAU;AAIjD,IAAa,QAAb,MAAa,cACJ,IAIT;CACC,AAAO,OAAwB;CAC/B,AAAgB,UAAuC,IAAI,SAAS;CAEpE,AAAO,YAAY,QAAsB;AACxC,QAAM,OAAO;AACb,MAAI,kBAAkB,OAAO;;CAI9B,AAAgB,gBAAgC;CAEhD,AAAO,SAA2B;AACjC,SAAO,CAAC,GAAG,KAAK;;CAGjB,OAAc,SAA8B,MAAkC;AAC7E,SAAO,IAAI,MAAS,KAAK;;CAG1B,AAAO,IAAI,OAAgB;EAC1B,MAAM,SAAS,MAAM,IAAI,MAAM;AAC/B,MAAI,KAAK,SAAS,SACjB,MAAK,KAAK;GAAE,MAAM;GAAO;GAAO,CAAC;AAElC,SAAO;;CAGR,AAAO,QAAc;EACpB,MAAM,mBAAmB,KAAK,SAAS,WAAW,CAAC,GAAG,KAAK,GAAG;AAC9D,QAAM,OAAO;AACb,MAAI,iBACH,MAAK,KAAK;GAAE,MAAM;GAAS,QAAQ;GAAkB,CAAC;;CAIxD,AAAO,OAAO,OAAmB;EAChC,MAAM,SAAS,MAAM,OAAO,MAAM;AAClC,MAAI,KAAK,SAAS,SACjB,MAAK,KAAK;GAAE,MAAM;GAAU;GAAO,CAAC;AAErC,SAAO;;CAGR,AAAO,UACN,KACA,IACa;AACb,SAAO,KAAK,QAAQ,UAAU,KAAK,GAAG;;CAGvC,AAAO,KAAK,QAA4B;AACvC,OAAK,QAAQ,KAAK,MAAM,WAAW,OAAO,CAAC;;CAG5C,AAAO,GAAG,QAAkC;AAC3C,OAAK,OAAO;EACZ,MAAM,SAAS,MAAM,aAAa,OAAO;AACzC,UAAQ,OAAO,MAAf;GACC,KAAK;AACJ,SAAK,IAAI,OAAO,MAAM;AACtB;GACD,KAAK;AACJ,SAAK,OAAO,OAAO,MAAM;AACzB;GACD,KAAK,QACJ,MAAK,OAAO;;AAEd,OAAK,OAAO;AACZ,SAAO;;CAGR,AAAO,KAAK,QAA2C;EACtD,MAAM,SAAS,MAAM,aAAa,OAAO;AACzC,OAAK,OAAO;AACZ,UAAQ,OAAO,MAAf;GACC,KAAK;AACJ,SAAK,OAAO,OAAO,MAAM;AACzB;GACD,KAAK;AACJ,SAAK,IAAI,OAAO,MAAM;AACtB;GACD,KAAK,SAAS;IACb,MAAM,SAAS,OAAO;AACtB,SAAK,MAAM,KAAK,OAAQ,MAAK,IAAI,EAAE;;;AAGrC,OAAK,OAAO;AACZ,SAAO;;CAGR,OAAc,WACb,QACqB;EACrB,MAAM,OAAO,gBAAgB,OAAO,QAAQ;AAC5C,MAAI,OAAO,SAAS,QACnB,QAAO,OAAO,OAAO,OAAO,IAAI,UAAU,CAAC,KAAK,SAAS;AAE1D,SAAO,OAAO,UAAU,OAAO,MAAM;;CAEtC,OAAc,aACb,QACe;EACf,MAAM,CAAC,MAAM,QAAQ,OAAO,MAAM,SAAS;EAC3C,MAAM,OAAO,gBAAgB;AAC7B,MAAI,SAAS,QAEZ,QAAO;GAAE,MAAM;GAAS,QADT,KAAK,MAAM,SAAS,CAAC,IAAI,YAAY;GACpB;AAEjC,SAAO;GAAE,MAAM;GAAM,OAAO,YAAY,KAAK;GAAO"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "atom.io",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.41.1",
|
|
4
4
|
"description": "Composable and testable reactive data library.",
|
|
5
5
|
"homepage": "https://atom.io.fyi",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -61,9 +61,9 @@
|
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@eslint/core": "0.15.2",
|
|
64
|
-
"@storybook/addon-docs": "9.1.
|
|
65
|
-
"@storybook/addon-onboarding": "9.1.
|
|
66
|
-
"@storybook/react-vite": "9.1.
|
|
64
|
+
"@storybook/addon-docs": "9.1.6",
|
|
65
|
+
"@storybook/addon-onboarding": "9.1.6",
|
|
66
|
+
"@storybook/react-vite": "9.1.6",
|
|
67
67
|
"@testing-library/react": "16.3.0",
|
|
68
68
|
"@types/bun": "npm:bun-types@1.2.22",
|
|
69
69
|
"@types/eslint": "9.6.1",
|
|
@@ -72,9 +72,9 @@
|
|
|
72
72
|
"@types/npmlog": "7.0.0",
|
|
73
73
|
"@types/react": "19.1.13",
|
|
74
74
|
"@types/tmp": "0.2.6",
|
|
75
|
-
"@typescript-eslint/parser": "8.
|
|
76
|
-
"@typescript-eslint/rule-tester": "8.
|
|
77
|
-
"@typescript-eslint/utils": "8.
|
|
75
|
+
"@typescript-eslint/parser": "8.44.0",
|
|
76
|
+
"@typescript-eslint/rule-tester": "8.44.0",
|
|
77
|
+
"@typescript-eslint/utils": "8.44.0",
|
|
78
78
|
"@vitest/coverage-v8": "3.2.4",
|
|
79
79
|
"@vitest/ui": "3.2.4",
|
|
80
80
|
"concurrently": "9.2.1",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"eslint": "9.35.0",
|
|
84
84
|
"happy-dom": "18.0.1",
|
|
85
85
|
"http-proxy": "1.18.1",
|
|
86
|
-
"motion": "12.23.
|
|
86
|
+
"motion": "12.23.14",
|
|
87
87
|
"npmlog": "7.0.1",
|
|
88
88
|
"nyc": "17.1.0",
|
|
89
89
|
"postgres": "3.4.7",
|
|
@@ -94,9 +94,9 @@
|
|
|
94
94
|
"recoverage": "0.1.11",
|
|
95
95
|
"socket.io": "4.8.1",
|
|
96
96
|
"socket.io-client": "4.8.1",
|
|
97
|
-
"storybook": "9.1.
|
|
97
|
+
"storybook": "9.1.6",
|
|
98
98
|
"tmp": "0.2.5",
|
|
99
|
-
"tsdown": "0.15.
|
|
99
|
+
"tsdown": "0.15.2",
|
|
100
100
|
"typescript": "5.9.2",
|
|
101
101
|
"vite": "7.1.5",
|
|
102
102
|
"vite-tsconfig-paths": "5.1.4",
|
package/src/internal/index.ts
CHANGED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { primitive } from "atom.io/json"
|
|
2
|
+
|
|
3
|
+
import type { Flat } from "./utility-types"
|
|
4
|
+
|
|
5
|
+
export type IndexOf<
|
|
6
|
+
T extends readonly unknown[],
|
|
7
|
+
E,
|
|
8
|
+
A extends unknown[] = [],
|
|
9
|
+
> = T extends readonly [infer Head, ...infer Tail]
|
|
10
|
+
? (<U>() => U extends Head ? 1 : 2) extends <U>() => U extends E ? 1 : 2
|
|
11
|
+
? A[`length`]
|
|
12
|
+
: IndexOf<Tail, E, [...A, unknown]>
|
|
13
|
+
: never
|
|
14
|
+
|
|
15
|
+
export type Flip<T extends Record<string, number | string>> = {
|
|
16
|
+
[K in keyof T as T[K]]: K
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type TwoWay<T extends Record<string, number | string>> = Flip<T> & T
|
|
20
|
+
|
|
21
|
+
export type Enumeration<T extends readonly string[]> = Flat<
|
|
22
|
+
TwoWay<{
|
|
23
|
+
[K in T[number]]: IndexOf<T, K>
|
|
24
|
+
}>
|
|
25
|
+
>
|
|
26
|
+
|
|
27
|
+
export function enumeration<T extends readonly string[]>(
|
|
28
|
+
values: T,
|
|
29
|
+
): Enumeration<T> {
|
|
30
|
+
const result: Record<any, any> = {}
|
|
31
|
+
let i = 0
|
|
32
|
+
for (const value of values) {
|
|
33
|
+
result[value] = i
|
|
34
|
+
result[i] = value
|
|
35
|
+
++i
|
|
36
|
+
}
|
|
37
|
+
return result as Enumeration<T>
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const BOOL = `\u0001`
|
|
41
|
+
const NULL = `\u0002`
|
|
42
|
+
const STRING = `\u0003`
|
|
43
|
+
const NUMBER = `\u0004`
|
|
44
|
+
export const packValue = (value: primitive): string => {
|
|
45
|
+
const type = typeof value as `boolean` | `number` | `object` | `string`
|
|
46
|
+
switch (type) {
|
|
47
|
+
case `string`:
|
|
48
|
+
return STRING + value
|
|
49
|
+
case `number`:
|
|
50
|
+
return NUMBER + value
|
|
51
|
+
case `boolean`:
|
|
52
|
+
return BOOL + +(value as boolean)
|
|
53
|
+
case `object`:
|
|
54
|
+
return NULL
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export const unpackValue = (value: string): primitive => {
|
|
58
|
+
const type = value[0] as `\u0001` | `\u0002` | `\u0003` | `\u0004`
|
|
59
|
+
switch (type) {
|
|
60
|
+
case STRING:
|
|
61
|
+
return value.slice(1)
|
|
62
|
+
case NUMBER:
|
|
63
|
+
return +value.slice(1)
|
|
64
|
+
case BOOL:
|
|
65
|
+
return value.slice(1) === `1`
|
|
66
|
+
case NULL:
|
|
67
|
+
return null
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -4,6 +4,7 @@ import type {
|
|
|
4
4
|
ReadonlyPureSelectorFamilyToken,
|
|
5
5
|
} from "atom.io"
|
|
6
6
|
import { getInternalRelations, join, mutableAtom, selectorFamily } from "atom.io"
|
|
7
|
+
import type { SetRTX } from "atom.io/transceivers/set-rtx"
|
|
7
8
|
import { UList } from "atom.io/transceivers/u-list"
|
|
8
9
|
|
|
9
10
|
export const usersInThisRoomIndex: MutableAtomToken<UList<string>> = mutableAtom<
|
|
@@ -45,9 +46,9 @@ export const usersInRooms: JoinToken<
|
|
|
45
46
|
)
|
|
46
47
|
|
|
47
48
|
export const usersInMyRoomView: ReadonlyPureSelectorFamilyToken<
|
|
48
|
-
MutableAtomToken<
|
|
49
|
+
MutableAtomToken<SetRTX<string>>[],
|
|
49
50
|
string
|
|
50
|
-
> = selectorFamily<MutableAtomToken<
|
|
51
|
+
> = selectorFamily<MutableAtomToken<SetRTX<string>>[], string>({
|
|
51
52
|
key: `usersInMyRoomView`,
|
|
52
53
|
get:
|
|
53
54
|
(myUsername) =>
|
|
@@ -76,7 +76,7 @@ export class ParentSocket<
|
|
|
76
76
|
this.proc.stderr.write(
|
|
77
77
|
stringifyJson(
|
|
78
78
|
args.map((arg) =>
|
|
79
|
-
arg instanceof UList ? `{ ${arg.toJSON().
|
|
79
|
+
arg instanceof UList ? `{ ${arg.toJSON().join(` | `)} }` : arg,
|
|
80
80
|
),
|
|
81
81
|
) + `\x03`,
|
|
82
82
|
)
|