@e280/stz 0.0.0-17 → 0.0.0-19
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/package.json +1 -1
- package/s/coalesce.ts +1 -0
- package/s/data/bytename/bytename.ts +0 -9
- package/s/data/bytename/thumbprint.test.ts +1 -1
- package/s/data/bytename/thumbprint.ts +38 -37
- package/s/deadline.ts +1 -0
- package/s/{defer-promise.ts → defer.ts} +2 -2
- package/s/drill.ts +2 -4
- package/s/id-counter.ts +9 -0
- package/s/index.ts +2 -1
- package/s/is.ts +10 -4
- package/s/map-g.ts +2 -2
- package/s/nap.ts +1 -0
- package/s/pubsub.ts +17 -2
- package/x/coalesce.d.ts +1 -0
- package/x/coalesce.js +1 -0
- package/x/coalesce.js.map +1 -1
- package/x/data/bytename/bytename.d.ts +0 -6
- package/x/data/bytename/bytename.js +0 -6
- package/x/data/bytename/bytename.js.map +1 -1
- package/x/data/bytename/thumbprint.d.ts +12 -11
- package/x/data/bytename/thumbprint.js +31 -32
- package/x/data/bytename/thumbprint.js.map +1 -1
- package/x/data/bytename/thumbprint.test.js +1 -1
- package/x/data/bytename/thumbprint.test.js.map +1 -1
- package/x/{defer-promise.d.ts → defer.d.ts} +2 -2
- package/x/{defer-promise.js → defer.js} +2 -2
- package/x/defer.js.map +1 -0
- package/x/drill.d.ts +1 -3
- package/x/drill.js +2 -4
- package/x/drill.js.map +1 -1
- package/x/id-counter.d.ts +5 -0
- package/x/id-counter.js +10 -0
- package/x/id-counter.js.map +1 -0
- package/x/index.d.ts +2 -1
- package/x/index.js +2 -1
- package/x/index.js.map +1 -1
- package/x/is.d.ts +6 -4
- package/x/is.js +6 -4
- package/x/is.js.map +1 -1
- package/x/map-g.d.ts +3 -3
- package/x/map-g.js +1 -1
- package/x/map-g.js.map +1 -1
- package/x/nap.d.ts +1 -0
- package/x/nap.js +1 -0
- package/x/nap.js.map +1 -1
- package/x/pubsub.d.ts +10 -0
- package/x/pubsub.js +2 -2
- package/x/pubsub.js.map +1 -1
- package/x/defer-promise.js.map +0 -1
package/package.json
CHANGED
package/s/coalesce.ts
CHANGED
|
@@ -86,14 +86,5 @@ export const Bytename = {
|
|
|
86
86
|
fromHex(hex: string, options?: Partial<BytenameOptions>) {
|
|
87
87
|
return Bytename.fromBytes(Hex.bytes(hex), options)
|
|
88
88
|
},
|
|
89
|
-
|
|
90
|
-
/** @deprecated renamed to `fromBytes` */
|
|
91
|
-
string(bytes: Uint8Array, options: Partial<BytenameOptions> = {}) { return Bytename.fromBytes(bytes, options) },
|
|
92
|
-
|
|
93
|
-
/** @deprecated renamed to `toBytes` */
|
|
94
|
-
bytes(bytename: string) { return Bytename.toBytes(bytename) },
|
|
95
|
-
|
|
96
|
-
/** @deprecated renamed to `toHex` */
|
|
97
|
-
hex(bytename: string) { return Bytename.toHex(bytename) },
|
|
98
89
|
}
|
|
99
90
|
|
|
@@ -4,7 +4,7 @@ import {Hex} from "../hex.js"
|
|
|
4
4
|
import {Bytes} from "../bytes.js"
|
|
5
5
|
import {Thumbprint} from "./thumbprint.js"
|
|
6
6
|
|
|
7
|
-
const sampleThumbprint = "nodlyn.fasrep.habbud
|
|
7
|
+
const sampleThumbprint = "nodlyn.fasrep.habbud.ralwel.Avo7gFmdWMRHkwsD149mcaBoZdS69iXuJ"
|
|
8
8
|
const sampleHex = "88e8c3fad1028fcf6ce5ac491578850f4d833336feca03b608265501c3019d59"
|
|
9
9
|
const sampleBytes = Hex.bytes(sampleHex)
|
|
10
10
|
|
|
@@ -5,75 +5,80 @@ import {Bytename} from "./bytename.js"
|
|
|
5
5
|
|
|
6
6
|
export type ThumbprintOptions = {
|
|
7
7
|
delimiter: string
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
sigilBytes: number
|
|
9
|
+
previewBytes: number
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export type ThumbprintData = {
|
|
13
13
|
bytes: Uint8Array
|
|
14
|
-
sigil: string
|
|
15
|
-
bulk: string
|
|
16
14
|
thumbprint: string
|
|
15
|
+
preview: string
|
|
16
|
+
bulk: string
|
|
17
|
+
sigil: string
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
/**
|
|
20
21
|
* Thumbprint is a friendly presentation format for arbitrary binary data.
|
|
21
|
-
* - looks like "nodlyn.fasrep.habbud.ralwel
|
|
22
|
-
* - the "
|
|
23
|
-
* - the
|
|
24
|
-
* -
|
|
25
|
-
* - can actually represent any number of bytes
|
|
22
|
+
* - looks like "nodlyn.fasrep.habbud.ralwel.Avo7gFmdWMRHkwsD149mcaBoZdS69iXuJ"
|
|
23
|
+
* - the preview: "nodlyn.fasrep.habbud.ralwel" (bytename format)
|
|
24
|
+
* - the bulk: "Avo7gFmdWMRHkwsD149mcaBoZdS69iXuJ" (base58 format)
|
|
25
|
+
* - the sigil: "nodlyn.fasrep" (shorter part of the bytename)
|
|
26
|
+
* - originally designed to be a nice way to present 256-bit ids, but can actually represent any number of bytes
|
|
26
27
|
*/
|
|
27
28
|
export const Thumbprint = {
|
|
28
29
|
defaults: (<ThumbprintOptions>{
|
|
29
|
-
delimiter: "
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
delimiter: ".",
|
|
31
|
+
sigilBytes: 4,
|
|
32
|
+
previewBytes: 8,
|
|
32
33
|
}),
|
|
33
34
|
|
|
34
|
-
|
|
35
|
+
toBytes(thumbprint: string) {
|
|
35
36
|
thumbprint = thumbprint.trim()
|
|
36
|
-
const
|
|
37
|
+
const beans = thumbprint.split(/[^a-zA-Z0-9]+/m)
|
|
37
38
|
.filter(Boolean)
|
|
38
39
|
.map(s => s.trim())
|
|
39
40
|
|
|
40
|
-
if (
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
if (beans.length < 2)
|
|
42
|
+
return Bytename.toBytes(beans.join(""))
|
|
43
|
+
|
|
44
|
+
const bulk = beans.pop()!
|
|
45
|
+
const preview = beans.join("")
|
|
45
46
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const bytes = new Uint8Array([
|
|
49
|
-
...Bytename.toBytes(sigil),
|
|
47
|
+
return new Uint8Array([
|
|
48
|
+
...Bytename.toBytes(preview),
|
|
50
49
|
...Base58.bytes(bulk),
|
|
51
50
|
])
|
|
51
|
+
},
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
parse(thumbprint: string, options?: Partial<ThumbprintOptions>): ThumbprintData {
|
|
54
|
+
const bytes = Thumbprint.toBytes(thumbprint)
|
|
55
|
+
return Thumbprint.build.fromBytes(bytes, options)
|
|
54
56
|
},
|
|
55
57
|
|
|
56
58
|
build: {
|
|
57
59
|
fromBytes(bytes: Uint8Array, options: Partial<ThumbprintOptions> = {}): ThumbprintData {
|
|
58
|
-
const {
|
|
60
|
+
const {delimiter, previewBytes, sigilBytes}
|
|
59
61
|
= {...Thumbprint.defaults, ...options}
|
|
60
62
|
|
|
61
|
-
const
|
|
62
|
-
? Bytename.fromBytes(bytes.slice(0,
|
|
63
|
-
wordSeparator:
|
|
64
|
-
groupSeparator:
|
|
63
|
+
const yoink = (b: number) => (bytes.length > 0)
|
|
64
|
+
? Bytename.fromBytes(bytes.slice(0, b), {
|
|
65
|
+
wordSeparator: delimiter,
|
|
66
|
+
groupSeparator: delimiter,
|
|
65
67
|
})
|
|
66
68
|
: ""
|
|
67
69
|
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
+
const sigil = yoink(sigilBytes)
|
|
71
|
+
const preview = yoink(previewBytes)
|
|
72
|
+
|
|
73
|
+
const bulk = (bytes.length > previewBytes)
|
|
74
|
+
? Base58.string(bytes.slice(previewBytes))
|
|
70
75
|
: ""
|
|
71
76
|
|
|
72
|
-
const thumbprint = [
|
|
77
|
+
const thumbprint = [preview, bulk]
|
|
73
78
|
.filter(s => s.length > 0)
|
|
74
79
|
.join(delimiter)
|
|
75
80
|
|
|
76
|
-
return {bytes,
|
|
81
|
+
return {bytes, thumbprint, preview, bulk, sigil}
|
|
77
82
|
},
|
|
78
83
|
|
|
79
84
|
fromHex(hex: string, options?: Partial<ThumbprintOptions>) {
|
|
@@ -82,10 +87,6 @@ export const Thumbprint = {
|
|
|
82
87
|
},
|
|
83
88
|
},
|
|
84
89
|
|
|
85
|
-
toBytes(thumbprint: string) {
|
|
86
|
-
return Thumbprint.parse(thumbprint).bytes
|
|
87
|
-
},
|
|
88
|
-
|
|
89
90
|
toHex(thumbprint: string) {
|
|
90
91
|
const bytes = Thumbprint.toBytes(thumbprint)
|
|
91
92
|
return Hex.string(bytes)
|
package/s/deadline.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
/** a promise which can be resolved from the outside */
|
|
3
|
-
export type
|
|
3
|
+
export type Deferred<R> = {
|
|
4
4
|
promise: Promise<R>
|
|
5
5
|
resolve: (result: R) => void
|
|
6
6
|
reject: (reason: any) => void
|
|
@@ -10,7 +10,7 @@ export type DeferredPromise<R> = {
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
/** returns a deferred promise with exposed resolve and reject fns */
|
|
13
|
-
export function
|
|
13
|
+
export function defer<R>(): Deferred<R> {
|
|
14
14
|
let resolve!: (result: R) => void
|
|
15
15
|
let reject!: (reason: any) => void
|
|
16
16
|
|
package/s/drill.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
import {is} from "./is.js"
|
|
3
3
|
|
|
4
|
-
/**
|
|
5
|
-
* return a value within an object tree, found at the given path.
|
|
6
|
-
*/
|
|
4
|
+
/** return a value within an object tree, found at the given path. */
|
|
7
5
|
export function drill<xResult>(
|
|
8
6
|
object: {[key: string]: any},
|
|
9
7
|
path: string[],
|
|
@@ -13,7 +11,7 @@ export function drill<xResult>(
|
|
|
13
11
|
|
|
14
12
|
for (const key of path) {
|
|
15
13
|
current = current[key]
|
|
16
|
-
if (is.
|
|
14
|
+
if (is.unset(current))
|
|
17
15
|
break
|
|
18
16
|
}
|
|
19
17
|
|
package/s/id-counter.ts
ADDED
package/s/index.ts
CHANGED
|
@@ -16,10 +16,11 @@ export * from "./coalesce.js"
|
|
|
16
16
|
export * from "./concurrent.js"
|
|
17
17
|
export * from "./deadline.js"
|
|
18
18
|
export * from "./dedupe.js"
|
|
19
|
-
export * from "./defer
|
|
19
|
+
export * from "./defer.js"
|
|
20
20
|
export * from "./drill.js"
|
|
21
21
|
export * from "./escape-regex.js"
|
|
22
22
|
export * from "./hat.js"
|
|
23
|
+
export * from "./id-counter.js"
|
|
23
24
|
export * from "./is.js"
|
|
24
25
|
export * from "./loopy.js"
|
|
25
26
|
export * from "./map-g.js"
|
package/s/is.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
|
|
2
|
-
export const is = {
|
|
3
|
-
|
|
2
|
+
export const is = Object.freeze({
|
|
3
|
+
set: <X>(x: X): x is NonNullable<X> =>
|
|
4
4
|
x !== undefined && x !== null,
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
unset: (x: any): x is (undefined | null) =>
|
|
7
7
|
x === undefined || x === null,
|
|
8
8
|
|
|
9
9
|
boolean: (x: any): x is boolean =>
|
|
@@ -23,5 +23,11 @@ export const is = {
|
|
|
23
23
|
|
|
24
24
|
array: (x: any | any[]): x is any[] =>
|
|
25
25
|
Array.isArray(x),
|
|
26
|
-
|
|
26
|
+
|
|
27
|
+
fn: (x: any): x is (...a: any[]) => any =>
|
|
28
|
+
typeof x === "function",
|
|
29
|
+
|
|
30
|
+
symbol: (x: any): x is symbol =>
|
|
31
|
+
typeof x === "symbol",
|
|
32
|
+
})
|
|
27
33
|
|
package/s/map-g.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
|
|
2
|
-
/** js map
|
|
2
|
+
/** extended js map with handy methods like `require` and `guarantee` */
|
|
3
3
|
export class MapG<K, V> extends Map<K, V> {
|
|
4
4
|
static require<K, V>(map: Map<K, V>, key: K) {
|
|
5
5
|
const value = map.get(key)
|
|
6
6
|
if (value === undefined)
|
|
7
7
|
throw new Error(`required key not found: "${key}"`)
|
|
8
|
-
return value
|
|
8
|
+
return value as V
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
static guarantee<K, V>(map: Map<K, V>, key: K, make: () => V) {
|
package/s/nap.ts
CHANGED
package/s/pubsub.ts
CHANGED
|
@@ -1,20 +1,35 @@
|
|
|
1
1
|
|
|
2
|
-
import {
|
|
2
|
+
import {defer} from "./defer.js"
|
|
3
3
|
|
|
4
4
|
export type Listener<A extends any[]> = (...a: A) => (void | Promise<void>)
|
|
5
5
|
|
|
6
6
|
export interface Xub<A extends any[] = []> {
|
|
7
|
+
|
|
8
|
+
/** publish to all subscribed listeners. */
|
|
7
9
|
pub(...a: A): Promise<void>
|
|
10
|
+
|
|
11
|
+
/** subscribe a listener function. */
|
|
8
12
|
sub(fn: Listener<A>): () => void
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* subscribe a listener function.
|
|
16
|
+
* @alias sub
|
|
17
|
+
*/
|
|
9
18
|
on(fn: Listener<A>): () => void
|
|
19
|
+
|
|
20
|
+
/** subscribe a listener function that unsubscribes itself after being invoked. */
|
|
10
21
|
once(): Promise<A>
|
|
22
|
+
|
|
23
|
+
/** wipe all listeners attached to this. */
|
|
11
24
|
clear(): void
|
|
12
25
|
}
|
|
13
26
|
|
|
27
|
+
/** subscriber fn that can be published to. */
|
|
14
28
|
export interface Sub<A extends any[] = []> extends Xub<A> {
|
|
15
29
|
(fn: Listener<A>): () => void
|
|
16
30
|
}
|
|
17
31
|
|
|
32
|
+
/** publisher fn that can be published to. */
|
|
18
33
|
export interface Pub<A extends any[] = []> extends Xub<A> {
|
|
19
34
|
(...a: A): Promise<void>
|
|
20
35
|
}
|
|
@@ -32,7 +47,7 @@ export function xub<A extends any[] = []>() {
|
|
|
32
47
|
}
|
|
33
48
|
|
|
34
49
|
async function once() {
|
|
35
|
-
const {promise, resolve} =
|
|
50
|
+
const {promise, resolve} = defer<A>()
|
|
36
51
|
const unsubscribe = sub((...a) => {
|
|
37
52
|
resolve(a)
|
|
38
53
|
unsubscribe()
|
package/x/coalesce.d.ts
CHANGED
package/x/coalesce.js
CHANGED
package/x/coalesce.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coalesce.js","sourceRoot":"","sources":["../s/coalesce.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,QAAQ,CAAuB,GAAG,GAA0B;IAC3E,OAAO,CAAC,GAAG,CAAI,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAChD,CAAC"}
|
|
1
|
+
{"version":3,"file":"coalesce.js","sourceRoot":"","sources":["../s/coalesce.ts"],"names":[],"mappings":"AACA,qEAAqE;AACrE,MAAM,UAAU,QAAQ,CAAuB,GAAG,GAA0B;IAC3E,OAAO,CAAC,GAAG,CAAI,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAChD,CAAC"}
|
|
@@ -16,10 +16,4 @@ export declare const Bytename: {
|
|
|
16
16
|
toBytes(bytename: string): Uint8Array<ArrayBuffer>;
|
|
17
17
|
toHex(bytename: string): string;
|
|
18
18
|
fromHex(hex: string, options?: Partial<BytenameOptions>): string;
|
|
19
|
-
/** @deprecated renamed to `fromBytes` */
|
|
20
|
-
string(bytes: Uint8Array, options?: Partial<BytenameOptions>): string;
|
|
21
|
-
/** @deprecated renamed to `toBytes` */
|
|
22
|
-
bytes(bytename: string): Uint8Array<ArrayBuffer>;
|
|
23
|
-
/** @deprecated renamed to `toHex` */
|
|
24
|
-
hex(bytename: string): string;
|
|
25
19
|
};
|
|
@@ -61,11 +61,5 @@ export const Bytename = {
|
|
|
61
61
|
fromHex(hex, options) {
|
|
62
62
|
return Bytename.fromBytes(Hex.bytes(hex), options);
|
|
63
63
|
},
|
|
64
|
-
/** @deprecated renamed to `fromBytes` */
|
|
65
|
-
string(bytes, options = {}) { return Bytename.fromBytes(bytes, options); },
|
|
66
|
-
/** @deprecated renamed to `toBytes` */
|
|
67
|
-
bytes(bytename) { return Bytename.toBytes(bytename); },
|
|
68
|
-
/** @deprecated renamed to `toHex` */
|
|
69
|
-
hex(bytename) { return Bytename.toHex(bytename); },
|
|
70
64
|
};
|
|
71
65
|
//# sourceMappingURL=bytename.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bytename.js","sourceRoot":"","sources":["../../../s/data/bytename/bytename.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"bytename.js","sourceRoot":"","sources":["../../../s/data/bytename/bytename.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +1,31 @@
|
|
|
1
1
|
export type ThumbprintOptions = {
|
|
2
2
|
delimiter: string;
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
sigilBytes: number;
|
|
4
|
+
previewBytes: number;
|
|
5
5
|
};
|
|
6
6
|
export type ThumbprintData = {
|
|
7
7
|
bytes: Uint8Array;
|
|
8
|
-
sigil: string;
|
|
9
|
-
bulk: string;
|
|
10
8
|
thumbprint: string;
|
|
9
|
+
preview: string;
|
|
10
|
+
bulk: string;
|
|
11
|
+
sigil: string;
|
|
11
12
|
};
|
|
12
13
|
/**
|
|
13
14
|
* Thumbprint is a friendly presentation format for arbitrary binary data.
|
|
14
|
-
* - looks like "nodlyn.fasrep.habbud.ralwel
|
|
15
|
-
* - the "
|
|
16
|
-
* - the
|
|
17
|
-
* -
|
|
18
|
-
* - can actually represent any number of bytes
|
|
15
|
+
* - looks like "nodlyn.fasrep.habbud.ralwel.Avo7gFmdWMRHkwsD149mcaBoZdS69iXuJ"
|
|
16
|
+
* - the preview: "nodlyn.fasrep.habbud.ralwel" (bytename format)
|
|
17
|
+
* - the bulk: "Avo7gFmdWMRHkwsD149mcaBoZdS69iXuJ" (base58 format)
|
|
18
|
+
* - the sigil: "nodlyn.fasrep" (shorter part of the bytename)
|
|
19
|
+
* - originally designed to be a nice way to present 256-bit ids, but can actually represent any number of bytes
|
|
19
20
|
*/
|
|
20
21
|
export declare const Thumbprint: {
|
|
21
22
|
defaults: ThumbprintOptions;
|
|
22
|
-
|
|
23
|
+
toBytes(thumbprint: string): Uint8Array<ArrayBuffer>;
|
|
24
|
+
parse(thumbprint: string, options?: Partial<ThumbprintOptions>): ThumbprintData;
|
|
23
25
|
build: {
|
|
24
26
|
fromBytes(bytes: Uint8Array, options?: Partial<ThumbprintOptions>): ThumbprintData;
|
|
25
27
|
fromHex(hex: string, options?: Partial<ThumbprintOptions>): ThumbprintData;
|
|
26
28
|
};
|
|
27
|
-
toBytes(thumbprint: string): Uint8Array<ArrayBufferLike>;
|
|
28
29
|
toHex(thumbprint: string): string;
|
|
29
30
|
fromBytes(bytes: Uint8Array, options?: Partial<ThumbprintOptions>): string;
|
|
30
31
|
fromHex(hex: string, options?: Partial<ThumbprintOptions>): string;
|
|
@@ -3,61 +3,60 @@ import { Base58 } from "../base58.js";
|
|
|
3
3
|
import { Bytename } from "./bytename.js";
|
|
4
4
|
/**
|
|
5
5
|
* Thumbprint is a friendly presentation format for arbitrary binary data.
|
|
6
|
-
* - looks like "nodlyn.fasrep.habbud.ralwel
|
|
7
|
-
* - the "
|
|
8
|
-
* - the
|
|
9
|
-
* -
|
|
10
|
-
* - can actually represent any number of bytes
|
|
6
|
+
* - looks like "nodlyn.fasrep.habbud.ralwel.Avo7gFmdWMRHkwsD149mcaBoZdS69iXuJ"
|
|
7
|
+
* - the preview: "nodlyn.fasrep.habbud.ralwel" (bytename format)
|
|
8
|
+
* - the bulk: "Avo7gFmdWMRHkwsD149mcaBoZdS69iXuJ" (base58 format)
|
|
9
|
+
* - the sigil: "nodlyn.fasrep" (shorter part of the bytename)
|
|
10
|
+
* - originally designed to be a nice way to present 256-bit ids, but can actually represent any number of bytes
|
|
11
11
|
*/
|
|
12
12
|
export const Thumbprint = {
|
|
13
13
|
defaults: {
|
|
14
|
-
delimiter: "
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
delimiter: ".",
|
|
15
|
+
sigilBytes: 4,
|
|
16
|
+
previewBytes: 8,
|
|
17
17
|
},
|
|
18
|
-
|
|
18
|
+
toBytes(thumbprint) {
|
|
19
19
|
thumbprint = thumbprint.trim();
|
|
20
|
-
const
|
|
20
|
+
const beans = thumbprint.split(/[^a-zA-Z0-9]+/m)
|
|
21
21
|
.filter(Boolean)
|
|
22
22
|
.map(s => s.trim());
|
|
23
|
-
if (
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const sigil = parts.join(".");
|
|
30
|
-
const bytes = new Uint8Array([
|
|
31
|
-
...Bytename.toBytes(sigil),
|
|
23
|
+
if (beans.length < 2)
|
|
24
|
+
return Bytename.toBytes(beans.join(""));
|
|
25
|
+
const bulk = beans.pop();
|
|
26
|
+
const preview = beans.join("");
|
|
27
|
+
return new Uint8Array([
|
|
28
|
+
...Bytename.toBytes(preview),
|
|
32
29
|
...Base58.bytes(bulk),
|
|
33
30
|
]);
|
|
34
|
-
|
|
31
|
+
},
|
|
32
|
+
parse(thumbprint, options) {
|
|
33
|
+
const bytes = Thumbprint.toBytes(thumbprint);
|
|
34
|
+
return Thumbprint.build.fromBytes(bytes, options);
|
|
35
35
|
},
|
|
36
36
|
build: {
|
|
37
37
|
fromBytes(bytes, options = {}) {
|
|
38
|
-
const {
|
|
39
|
-
const
|
|
40
|
-
? Bytename.fromBytes(bytes.slice(0,
|
|
41
|
-
wordSeparator:
|
|
42
|
-
groupSeparator:
|
|
38
|
+
const { delimiter, previewBytes, sigilBytes } = { ...Thumbprint.defaults, ...options };
|
|
39
|
+
const yoink = (b) => (bytes.length > 0)
|
|
40
|
+
? Bytename.fromBytes(bytes.slice(0, b), {
|
|
41
|
+
wordSeparator: delimiter,
|
|
42
|
+
groupSeparator: delimiter,
|
|
43
43
|
})
|
|
44
44
|
: "";
|
|
45
|
-
const
|
|
46
|
-
|
|
45
|
+
const sigil = yoink(sigilBytes);
|
|
46
|
+
const preview = yoink(previewBytes);
|
|
47
|
+
const bulk = (bytes.length > previewBytes)
|
|
48
|
+
? Base58.string(bytes.slice(previewBytes))
|
|
47
49
|
: "";
|
|
48
|
-
const thumbprint = [
|
|
50
|
+
const thumbprint = [preview, bulk]
|
|
49
51
|
.filter(s => s.length > 0)
|
|
50
52
|
.join(delimiter);
|
|
51
|
-
return { bytes,
|
|
53
|
+
return { bytes, thumbprint, preview, bulk, sigil };
|
|
52
54
|
},
|
|
53
55
|
fromHex(hex, options) {
|
|
54
56
|
const bytes = Hex.bytes(hex);
|
|
55
57
|
return Thumbprint.build.fromBytes(bytes, options);
|
|
56
58
|
},
|
|
57
59
|
},
|
|
58
|
-
toBytes(thumbprint) {
|
|
59
|
-
return Thumbprint.parse(thumbprint).bytes;
|
|
60
|
-
},
|
|
61
60
|
toHex(thumbprint) {
|
|
62
61
|
const bytes = Thumbprint.toBytes(thumbprint);
|
|
63
62
|
return Hex.string(bytes);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thumbprint.js","sourceRoot":"","sources":["../../../s/data/bytename/thumbprint.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,WAAW,CAAA;AAC7B,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AACnC,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"thumbprint.js","sourceRoot":"","sources":["../../../s/data/bytename/thumbprint.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { Science, test, expect } from "@e280/science";
|
|
|
2
2
|
import { Hex } from "../hex.js";
|
|
3
3
|
import { Bytes } from "../bytes.js";
|
|
4
4
|
import { Thumbprint } from "./thumbprint.js";
|
|
5
|
-
const sampleThumbprint = "nodlyn.fasrep.habbud
|
|
5
|
+
const sampleThumbprint = "nodlyn.fasrep.habbud.ralwel.Avo7gFmdWMRHkwsD149mcaBoZdS69iXuJ";
|
|
6
6
|
const sampleHex = "88e8c3fad1028fcf6ce5ac491578850f4d833336feca03b608265501c3019d59";
|
|
7
7
|
const sampleBytes = Hex.bytes(sampleHex);
|
|
8
8
|
function good(bytes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thumbprint.test.js","sourceRoot":"","sources":["../../../s/data/bytename/thumbprint.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAC,MAAM,eAAe,CAAA;AACnD,OAAO,EAAC,GAAG,EAAC,MAAM,WAAW,CAAA;AAC7B,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAA;AACjC,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAA;AAE1C,MAAM,gBAAgB,GAAG,
|
|
1
|
+
{"version":3,"file":"thumbprint.test.js","sourceRoot":"","sources":["../../../s/data/bytename/thumbprint.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** a promise which can be resolved from the outside */
|
|
2
|
-
export type
|
|
2
|
+
export type Deferred<R> = {
|
|
3
3
|
promise: Promise<R>;
|
|
4
4
|
resolve: (result: R) => void;
|
|
5
5
|
reject: (reason: any) => void;
|
|
@@ -7,4 +7,4 @@ export type DeferredPromise<R> = {
|
|
|
7
7
|
entangle: (outsidePromise: Promise<R>) => Promise<R>;
|
|
8
8
|
};
|
|
9
9
|
/** returns a deferred promise with exposed resolve and reject fns */
|
|
10
|
-
export declare function
|
|
10
|
+
export declare function defer<R>(): Deferred<R>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** returns a deferred promise with exposed resolve and reject fns */
|
|
2
|
-
export function
|
|
2
|
+
export function defer() {
|
|
3
3
|
let resolve;
|
|
4
4
|
let reject;
|
|
5
5
|
const promise = new Promise((res, rej) => {
|
|
@@ -12,4 +12,4 @@ export function deferPromise() {
|
|
|
12
12
|
}
|
|
13
13
|
return { promise, resolve, reject, entangle };
|
|
14
14
|
}
|
|
15
|
-
//# sourceMappingURL=defer
|
|
15
|
+
//# sourceMappingURL=defer.js.map
|
package/x/defer.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defer.js","sourceRoot":"","sources":["../s/defer.ts"],"names":[],"mappings":"AAWA,qEAAqE;AACrE,MAAM,UAAU,KAAK;IACpB,IAAI,OAA6B,CAAA;IACjC,IAAI,MAA8B,CAAA;IAElC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3C,OAAO,GAAG,GAAG,CAAA;QACb,MAAM,GAAG,GAAG,CAAA;IACb,CAAC,CAAC,CAAA;IAEF,SAAS,QAAQ,CAAC,OAAmB;QACpC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACnC,OAAO,OAAO,CAAA;IACf,CAAC;IAED,OAAO,EAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAC,CAAA;AAC5C,CAAC"}
|
package/x/drill.d.ts
CHANGED
package/x/drill.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { is } from "./is.js";
|
|
2
|
-
/**
|
|
3
|
-
* return a value within an object tree, found at the given path.
|
|
4
|
-
*/
|
|
2
|
+
/** return a value within an object tree, found at the given path. */
|
|
5
3
|
export function drill(object, path) {
|
|
6
4
|
let current = object;
|
|
7
5
|
for (const key of path) {
|
|
8
6
|
current = current[key];
|
|
9
|
-
if (is.
|
|
7
|
+
if (is.unset(current))
|
|
10
8
|
break;
|
|
11
9
|
}
|
|
12
10
|
return current;
|
package/x/drill.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drill.js","sourceRoot":"","sources":["../s/drill.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAC,MAAM,SAAS,CAAA;AAE1B
|
|
1
|
+
{"version":3,"file":"drill.js","sourceRoot":"","sources":["../s/drill.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAC,MAAM,SAAS,CAAA;AAE1B,qEAAqE;AACrE,MAAM,UAAU,KAAK,CACnB,MAA4B,EAC5B,IAAc;IAGf,IAAI,OAAO,GAAQ,MAAM,CAAA;IAEzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QACtB,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;YACpB,MAAK;IACP,CAAC;IAED,OAAO,OAAO,CAAA;AACf,CAAC"}
|
package/x/id-counter.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id-counter.js","sourceRoot":"","sources":["../s/id-counter.ts"],"names":[],"mappings":"AACA,MAAM,OAAO,SAAS;IACF;IAAnB,YAAmB,QAAQ,CAAC;QAAT,UAAK,GAAL,KAAK,CAAI;IAAG,CAAC;IAEhC,IAAI;QACH,OAAO,IAAI,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;CACD"}
|
package/x/index.d.ts
CHANGED
|
@@ -12,10 +12,11 @@ export * from "./coalesce.js";
|
|
|
12
12
|
export * from "./concurrent.js";
|
|
13
13
|
export * from "./deadline.js";
|
|
14
14
|
export * from "./dedupe.js";
|
|
15
|
-
export * from "./defer
|
|
15
|
+
export * from "./defer.js";
|
|
16
16
|
export * from "./drill.js";
|
|
17
17
|
export * from "./escape-regex.js";
|
|
18
18
|
export * from "./hat.js";
|
|
19
|
+
export * from "./id-counter.js";
|
|
19
20
|
export * from "./is.js";
|
|
20
21
|
export * from "./loopy.js";
|
|
21
22
|
export * from "./map-g.js";
|
package/x/index.js
CHANGED
|
@@ -12,10 +12,11 @@ export * from "./coalesce.js";
|
|
|
12
12
|
export * from "./concurrent.js";
|
|
13
13
|
export * from "./deadline.js";
|
|
14
14
|
export * from "./dedupe.js";
|
|
15
|
-
export * from "./defer
|
|
15
|
+
export * from "./defer.js";
|
|
16
16
|
export * from "./drill.js";
|
|
17
17
|
export * from "./escape-regex.js";
|
|
18
18
|
export * from "./hat.js";
|
|
19
|
+
export * from "./id-counter.js";
|
|
19
20
|
export * from "./is.js";
|
|
20
21
|
export * from "./loopy.js";
|
|
21
22
|
export * from "./map-g.js";
|
package/x/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../s/index.ts"],"names":[],"mappings":"AACA,cAAc,0BAA0B,CAAA;AACxC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAE7B,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AAEnC,cAAc,gBAAgB,CAAA;AAE9B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../s/index.ts"],"names":[],"mappings":"AACA,cAAc,0BAA0B,CAAA;AACxC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAE7B,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AAEnC,cAAc,gBAAgB,CAAA;AAE9B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AACjC,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA"}
|
package/x/is.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
export declare const is: {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export declare const is: Readonly<{
|
|
2
|
+
set: <X>(x: X) => x is NonNullable<X>;
|
|
3
|
+
unset: (x: any) => x is (undefined | null);
|
|
4
4
|
boolean: (x: any) => x is boolean;
|
|
5
5
|
number: (x: any) => x is number;
|
|
6
6
|
string: (x: any) => x is string;
|
|
7
7
|
bigint: (x: any) => x is bigint;
|
|
8
8
|
object: <X>(x: X) => x is object & NonNullable<X>;
|
|
9
9
|
array: (x: any | any[]) => x is any[];
|
|
10
|
-
|
|
10
|
+
fn: (x: any) => x is (...a: any[]) => any;
|
|
11
|
+
symbol: (x: any) => x is symbol;
|
|
12
|
+
}>;
|
package/x/is.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
export const is = {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export const is = Object.freeze({
|
|
2
|
+
set: (x) => x !== undefined && x !== null,
|
|
3
|
+
unset: (x) => x === undefined || x === null,
|
|
4
4
|
boolean: (x) => typeof x === "boolean",
|
|
5
5
|
number: (x) => typeof x === "number",
|
|
6
6
|
string: (x) => typeof x === "string",
|
|
7
7
|
bigint: (x) => typeof x === "bigint",
|
|
8
8
|
object: (x) => typeof x === "object" && x !== null,
|
|
9
9
|
array: (x) => Array.isArray(x),
|
|
10
|
-
|
|
10
|
+
fn: (x) => typeof x === "function",
|
|
11
|
+
symbol: (x) => typeof x === "symbol",
|
|
12
|
+
});
|
|
11
13
|
//# sourceMappingURL=is.js.map
|
package/x/is.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is.js","sourceRoot":"","sources":["../s/is.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,EAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"is.js","sourceRoot":"","sources":["../s/is.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/B,GAAG,EAAE,CAAI,CAAI,EAAuB,EAAE,CACrC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;IAE9B,KAAK,EAAE,CAAC,CAAM,EAA2B,EAAE,CAC1C,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;IAE9B,OAAO,EAAE,CAAC,CAAM,EAAgB,EAAE,CACjC,OAAO,CAAC,KAAK,SAAS;IAEvB,MAAM,EAAE,CAAC,CAAM,EAAe,EAAE,CAC/B,OAAO,CAAC,KAAK,QAAQ;IAEtB,MAAM,EAAE,CAAC,CAAM,EAAe,EAAE,CAC/B,OAAO,CAAC,KAAK,QAAQ;IAEtB,MAAM,EAAE,CAAC,CAAM,EAAe,EAAE,CAC/B,OAAO,CAAC,KAAK,QAAQ;IAEtB,MAAM,EAAE,CAAI,CAAI,EAAgC,EAAE,CACjD,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;IAEpC,KAAK,EAAE,CAAC,CAAc,EAAc,EAAE,CACrC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAEjB,EAAE,EAAE,CAAC,CAAM,EAA6B,EAAE,CACzC,OAAO,CAAC,KAAK,UAAU;IAExB,MAAM,EAAE,CAAC,CAAM,EAAe,EAAE,CAC/B,OAAO,CAAC,KAAK,QAAQ;CACtB,CAAC,CAAA"}
|
package/x/map-g.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
/** js map
|
|
1
|
+
/** extended js map with handy methods like `require` and `guarantee` */
|
|
2
2
|
export declare class MapG<K, V> extends Map<K, V> {
|
|
3
|
-
static require<K, V>(map: Map<K, V>, key: K): V
|
|
3
|
+
static require<K, V>(map: Map<K, V>, key: K): V;
|
|
4
4
|
static guarantee<K, V>(map: Map<K, V>, key: K, make: () => V): V;
|
|
5
5
|
array(): [K, V][];
|
|
6
|
-
require(key: K): V
|
|
6
|
+
require(key: K): V;
|
|
7
7
|
guarantee(key: K, make: () => V): V;
|
|
8
8
|
}
|
|
9
9
|
export type Identifiable<Id = any> = {
|
package/x/map-g.js
CHANGED
package/x/map-g.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-g.js","sourceRoot":"","sources":["../s/map-g.ts"],"names":[],"mappings":"AACA,
|
|
1
|
+
{"version":3,"file":"map-g.js","sourceRoot":"","sources":["../s/map-g.ts"],"names":[],"mappings":"AACA,wEAAwE;AACxE,MAAM,OAAO,IAAW,SAAQ,GAAS;IACxC,MAAM,CAAC,OAAO,CAAO,GAAc,EAAE,GAAM;QAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC1B,IAAI,KAAK,KAAK,SAAS;YACtB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,GAAG,CAAC,CAAA;QACpD,OAAO,KAAU,CAAA;IAClB,CAAC;IAED,MAAM,CAAC,SAAS,CAAO,GAAc,EAAE,GAAM,EAAE,IAAa;QAC3D,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAExB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,KAAK,GAAG,IAAI,EAAE,CAAA;YACd,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACpB,CAAC;QAED,OAAO,KAAK,CAAA;IACb,CAAC;IAED,KAAK;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;IACjB,CAAC;IAED,OAAO,CAAC,GAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED,SAAS,CAAC,GAAM,EAAE,IAAa;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IACvC,CAAC;CACD;AAID,oDAAoD;AACpD,MAAM,OAAO,KAA8B,SAAQ,IAAgB;IAClE,GAAG,CAAC,KAAQ;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC;IAED,GAAG,CAAC,KAAQ;QACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACzB,OAAO,KAAK,CAAA;IACb,CAAC;IAED,MAAM,CAAC,KAAQ;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC7B,CAAC;CACD"}
|
package/x/nap.d.ts
CHANGED
package/x/nap.js
CHANGED
package/x/nap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nap.js","sourceRoot":"","sources":["../s/nap.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,eAAuB,CAAC,EAAE,EAAE,CAAC,CAChD,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAC/D,CAAA"}
|
|
1
|
+
{"version":3,"file":"nap.js","sourceRoot":"","sources":["../s/nap.ts"],"names":[],"mappings":"AACA,gEAAgE;AAChE,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,eAAuB,CAAC,EAAE,EAAE,CAAC,CAChD,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAC/D,CAAA"}
|
package/x/pubsub.d.ts
CHANGED
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
export type Listener<A extends any[]> = (...a: A) => (void | Promise<void>);
|
|
2
2
|
export interface Xub<A extends any[] = []> {
|
|
3
|
+
/** publish to all subscribed listeners. */
|
|
3
4
|
pub(...a: A): Promise<void>;
|
|
5
|
+
/** subscribe a listener function. */
|
|
4
6
|
sub(fn: Listener<A>): () => void;
|
|
7
|
+
/**
|
|
8
|
+
* subscribe a listener function.
|
|
9
|
+
* @alias sub
|
|
10
|
+
*/
|
|
5
11
|
on(fn: Listener<A>): () => void;
|
|
12
|
+
/** subscribe a listener function that unsubscribes itself after being invoked. */
|
|
6
13
|
once(): Promise<A>;
|
|
14
|
+
/** wipe all listeners attached to this. */
|
|
7
15
|
clear(): void;
|
|
8
16
|
}
|
|
17
|
+
/** subscriber fn that can be published to. */
|
|
9
18
|
export interface Sub<A extends any[] = []> extends Xub<A> {
|
|
10
19
|
(fn: Listener<A>): () => void;
|
|
11
20
|
}
|
|
21
|
+
/** publisher fn that can be published to. */
|
|
12
22
|
export interface Pub<A extends any[] = []> extends Xub<A> {
|
|
13
23
|
(...a: A): Promise<void>;
|
|
14
24
|
}
|
package/x/pubsub.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { defer } from "./defer.js";
|
|
2
2
|
export function xub() {
|
|
3
3
|
const set = new Set();
|
|
4
4
|
function sub(fn) {
|
|
@@ -9,7 +9,7 @@ export function xub() {
|
|
|
9
9
|
await Promise.all([...set].map(fn => fn(...a)));
|
|
10
10
|
}
|
|
11
11
|
async function once() {
|
|
12
|
-
const { promise, resolve } =
|
|
12
|
+
const { promise, resolve } = defer();
|
|
13
13
|
const unsubscribe = sub((...a) => {
|
|
14
14
|
resolve(a);
|
|
15
15
|
unsubscribe();
|
package/x/pubsub.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../s/pubsub.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../s/pubsub.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAA;AAmChC,MAAM,UAAU,GAAG;IAClB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAe,CAAA;IAElC,SAAS,GAAG,CAAC,EAAe;QAC3B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACX,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC,CAAA;IAChC,CAAC;IAED,KAAK,UAAU,GAAG,CAAC,GAAG,CAAI;QACzB,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAChD,CAAC;IAED,KAAK,UAAU,IAAI;QAClB,MAAM,EAAC,OAAO,EAAE,OAAO,EAAC,GAAG,KAAK,EAAK,CAAA;QACrC,MAAM,WAAW,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;YAChC,OAAO,CAAC,CAAC,CAAC,CAAA;YACV,WAAW,EAAE,CAAA;QACd,CAAC,CAAC,CAAA;QACF,OAAO,OAAO,CAAA;IACf,CAAC;IAED,SAAS,KAAK;QACb,GAAG,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC;IAED,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;IACb,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;IACb,GAAG,CAAC,EAAE,GAAG,GAAG,CAAA;IACZ,GAAG,CAAC,IAAI,GAAG,IAAI,CAAA;IACf,GAAG,CAAC,KAAK,GAAG,KAAK,CAAA;IAEjB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;IACb,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;IACb,GAAG,CAAC,EAAE,GAAG,GAAG,CAAA;IACZ,GAAG,CAAC,IAAI,GAAG,IAAI,CAAA;IACf,GAAG,CAAC,KAAK,GAAG,KAAK,CAAA;IAEjB,OAAO,CAAC,GAAG,EAAE,GAAG,CAAqB,CAAA;AACtC,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,GAAG,CAAuB,QAAsB;IAC/D,MAAM,EAAE,GAAG,GAAG,EAAK,CAAC,CAAC,CAAC,CAAA;IACtB,IAAI,QAAQ;QACX,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACjB,OAAO,EAAE,CAAA;AACV,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,GAAG,CAAuB,QAAsB;IAC/D,MAAM,EAAE,GAAG,GAAG,EAAK,CAAC,CAAC,CAAC,CAAA;IACtB,IAAI,QAAQ;QACX,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACjB,OAAO,EAAE,CAAA;AACV,CAAC"}
|
package/x/defer-promise.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"defer-promise.js","sourceRoot":"","sources":["../s/defer-promise.ts"],"names":[],"mappings":"AAWA,qEAAqE;AACrE,MAAM,UAAU,YAAY;IAC3B,IAAI,OAA6B,CAAA;IACjC,IAAI,MAA8B,CAAA;IAElC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3C,OAAO,GAAG,GAAG,CAAA;QACb,MAAM,GAAG,GAAG,CAAA;IACb,CAAC,CAAC,CAAA;IAEF,SAAS,QAAQ,CAAC,OAAmB;QACpC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACnC,OAAO,OAAO,CAAA;IACf,CAAC;IAED,OAAO,EAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAC,CAAA;AAC5C,CAAC"}
|