abseil 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +28 -22
- package/dist/index.js +26 -10
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** biome-ignore-all lint/suspicious/noExplicitAny: Not worth my time */
|
|
2
2
|
import { type APIComponentInContainer, type APIComponentInMessageActionRow, type APIMessageComponent, type APISectionAccessoryComponent, type APISelectMenuComponent, ComponentType } from "discord-api-types/v10";
|
|
3
|
-
type CT = typeof ComponentType & {
|
|
3
|
+
type CT = Omit<typeof ComponentType, "SelectMenu" | "ContentInventoryEntry"> & {
|
|
4
4
|
"Button:URL": ComponentType.Button;
|
|
5
5
|
"Button:SKU": ComponentType.Button;
|
|
6
6
|
};
|
|
@@ -15,11 +15,13 @@ type Last<T extends any[]> = T extends [...any[], infer L] ? L : never;
|
|
|
15
15
|
type Arrable<T> = T | T[];
|
|
16
16
|
type Overwriter<T> = Partial<T> | ((prev: T) => Partial<T>);
|
|
17
17
|
interface ChildrenMap {
|
|
18
|
-
ActionRow: IComponentType[APIComponentInMessageActionRow["type"]]
|
|
18
|
+
ActionRow: IComponentType[APIComponentInMessageActionRow["type"]];
|
|
19
19
|
Container: IComponentType[APIComponentInContainer["type"]];
|
|
20
20
|
Section: "TextDisplay";
|
|
21
21
|
}
|
|
22
|
-
type
|
|
22
|
+
type Depth = [keyof CT, keyof CT][];
|
|
23
|
+
type History = Depth[];
|
|
24
|
+
type TraverserFn<C extends keyof CT, H extends History, D extends Depth, O extends string = ""> = <T extends C>(type: Arrable<T>) => Omit<Traverser<[...D, [T, C]], H>, O>;
|
|
23
25
|
type Component<T extends keyof CT> = Extract<APIMessageComponent, {
|
|
24
26
|
type: CT[T extends "Button:URL" | "Button:SKU" ? "Button" : T];
|
|
25
27
|
} & (T extends "Button" ? {
|
|
@@ -29,33 +31,35 @@ type Component<T extends keyof CT> = Extract<APIMessageComponent, {
|
|
|
29
31
|
} : T extends "Button:SKU" ? {
|
|
30
32
|
sku_id: string;
|
|
31
33
|
} : object)>;
|
|
32
|
-
export type Traverser<
|
|
34
|
+
export type Traverser<D extends Depth, H extends History> = {
|
|
33
35
|
/** Shallow merge with the current component in place. */
|
|
34
|
-
update: (value: Overwriter<Component<
|
|
36
|
+
update: (value: Overwriter<Component<Last<D>[0]>>) => Traverser<D, H>;
|
|
35
37
|
/** The current component. */
|
|
36
|
-
value: Component<
|
|
37
|
-
|
|
38
|
-
parent: TraverserFn<keyof CT, [...H, T]>;
|
|
39
|
-
} & (T extends IComponentType[APISelectMenuComponent["type"]] ? object : {
|
|
38
|
+
value: Component<Last<D>[0]>;
|
|
39
|
+
} & (Last<D>[0] extends IComponentType[APISelectMenuComponent["type"]] ? object : {
|
|
40
40
|
/** Insert a sibling before the current node. */
|
|
41
|
-
insertBefore: (component:
|
|
42
|
-
type: (typeof ComponentType)[Exclude<ST, "Button:URL" | "Button:SKU">];
|
|
43
|
-
}>) => Traverser<T, H, ST>;
|
|
41
|
+
insertBefore: <V extends Component<Last<D>[1]>>(component: V) => Traverser<D, H>;
|
|
44
42
|
/** Jump to the last neighbouring node of a type in an array. */
|
|
45
|
-
last: <N extends
|
|
43
|
+
last: <N extends Last<D>[1]>(type: Arrable<N>) => Traverser<[...Pop<D>, [N, Last<D>[1]]], [...H, D]> | undefined;
|
|
46
44
|
/** Jump to the next neighbouring node of a type in an array. */
|
|
47
|
-
next: <N extends
|
|
45
|
+
next: <N extends Last<D>[1]>(type: Arrable<N>) => Traverser<[...Pop<D>, [N, Last<D>[1]]], [...H, D]> | undefined;
|
|
48
46
|
/** Access the next node in an array. */
|
|
49
|
-
sibling: TraverserFn<
|
|
50
|
-
}) & (
|
|
47
|
+
sibling: TraverserFn<Last<D>[1], [...H, D], Pop<D>>;
|
|
48
|
+
}) & (Last<D>[0] extends keyof ChildrenMap ? {
|
|
51
49
|
/** Access the first child of a node. */
|
|
52
|
-
child: TraverserFn<ChildrenMap[
|
|
53
|
-
} : object) & (
|
|
50
|
+
child: TraverserFn<ChildrenMap[Last<D>[0]], [...H, D], D>;
|
|
51
|
+
} : object) & (Last<D>[0] extends "Section" ? {
|
|
54
52
|
/** Access the accessory of a [Section](https://docs.discord.com/developers/components/reference#section). */
|
|
55
|
-
accessory: TraverserFn<IComponentType[APISectionAccessoryComponent["type"]], [...H,
|
|
53
|
+
accessory: TraverserFn<IComponentType[APISectionAccessoryComponent["type"]], [...H, D], Pop<D>, "sibling">;
|
|
56
54
|
} : object) & (H extends [] ? object : {
|
|
57
55
|
/** Return to the previous node. */
|
|
58
56
|
previous: Traverser<Last<H>, Pop<H>>;
|
|
57
|
+
}) & (D extends [any] ? object : {
|
|
58
|
+
/** Access the parent of the current node. */
|
|
59
|
+
parent: <P extends Last<Pop<D>> extends never ? keyof ChildrenMap : Last<Pop<D>>[0]>(type: Arrable<P>) => Traverser<Last<Pop<D>> extends never ? [...(P extends "Container" ? [] : [never]), [P, keyof CT]] : Pop<D>, [
|
|
60
|
+
...H,
|
|
61
|
+
D
|
|
62
|
+
]>;
|
|
59
63
|
});
|
|
60
64
|
/** Initiate a tree traverser. */
|
|
61
65
|
export default function abseil<T extends APIMessageComponent>(components: T[]): {
|
|
@@ -63,14 +67,16 @@ export default function abseil<T extends APIMessageComponent>(components: T[]):
|
|
|
63
67
|
* Enter the tree at a specific node.
|
|
64
68
|
* @param query Either the component `id` or `custom_id`
|
|
65
69
|
*/
|
|
66
|
-
find<Q extends number | string | RegExp, F extends Q extends number ? keyof CT : WithCustomIdType>(query: Q, type: Arrable<F>): Omit<Traverser<
|
|
70
|
+
find<Q extends number | string | RegExp, F extends Q extends number ? keyof CT : WithCustomIdType>(query: Q, type: Arrable<F>): Omit<Traverser<[never, [F, "File" | "ActionRow" | "Button" | "StringSelect" | "TextInput" | "UserSelect" | "RoleSelect" | "MentionableSelect" | "ChannelSelect" | "Section" | "TextDisplay" | "Thumbnail" | "MediaGallery" | "Separator" | "Container" | "Label" | "FileUpload" | "RadioGroup" | "CheckboxGroup" | "Checkbox" | "Button:URL" | "Button:SKU"]], []>, "previous"> | undefined;
|
|
67
71
|
/** Entry point of the tree, visually this is the top-leftmost component. */
|
|
68
|
-
initial: TraverserFn<IComponentType[T["type"]], [], "parent" | "previous">;
|
|
72
|
+
initial: TraverserFn<IComponentType[T["type"]], [], [], "parent" | "previous">;
|
|
69
73
|
};
|
|
70
74
|
/**
|
|
71
75
|
* Destroy a node in the tree.
|
|
72
76
|
* Data on this node will be stripped, attempting to access most functions will throw.
|
|
73
77
|
* @important This may cause issues when you try to navigate {@link abseil} instances you've previously created
|
|
74
78
|
*/
|
|
75
|
-
export declare function removeNode<
|
|
79
|
+
export declare function removeNode<D extends Depth, H extends History>(node: Traverser<D, H>): void;
|
|
80
|
+
/** Assert that a component is of certain type(s). */
|
|
81
|
+
export declare const assert: <T extends keyof CT>(component: APIMessageComponent, type: Arrable<T>) => component is Component<T>;
|
|
76
82
|
export {};
|
package/dist/index.js
CHANGED
|
@@ -8,20 +8,22 @@ const selects = new Set([
|
|
|
8
8
|
ComponentType.MentionableSelect,
|
|
9
9
|
ComponentType.ChannelSelect,
|
|
10
10
|
]);
|
|
11
|
-
function
|
|
11
|
+
function typesMatch(component, expected, throwOnMismatch) {
|
|
12
12
|
const expectedTypes = new Set((Array.isArray(expected) ? expected : [expected]).filter(Boolean));
|
|
13
13
|
if (!expectedTypes.size) {
|
|
14
14
|
throw new Error("Selectors must specify expected type(s)");
|
|
15
15
|
}
|
|
16
|
-
let actualType = ComponentType[component.type];
|
|
16
|
+
let actualType = component.type === "Root" ? "Root" : ComponentType[component.type];
|
|
17
17
|
if (actualType === "Button") {
|
|
18
18
|
if ("url" in component)
|
|
19
19
|
actualType += ":URL";
|
|
20
20
|
else if ("sku_id" in component)
|
|
21
21
|
actualType += ":SKU";
|
|
22
22
|
}
|
|
23
|
+
else if (actualType === "SelectMenu")
|
|
24
|
+
actualType = "StringSelect";
|
|
23
25
|
if (!expectedTypes.has(actualType)) {
|
|
24
|
-
if (
|
|
26
|
+
if (throwOnMismatch) {
|
|
25
27
|
throw new TypeError(`Type mismatch: expected ${[...expectedTypes].join(" or ")}, got ${actualType}`);
|
|
26
28
|
}
|
|
27
29
|
return false;
|
|
@@ -49,6 +51,8 @@ function find(query, components) {
|
|
|
49
51
|
}
|
|
50
52
|
}
|
|
51
53
|
function findParent(child, components) {
|
|
54
|
+
if (components.includes(child))
|
|
55
|
+
return components;
|
|
52
56
|
for (const component of components) {
|
|
53
57
|
if ("components" in component) {
|
|
54
58
|
if (component.components.includes(child))
|
|
@@ -65,7 +69,7 @@ function findParent(child, components) {
|
|
|
65
69
|
/** Initiate a tree traverser. */
|
|
66
70
|
export default function abseil(components) {
|
|
67
71
|
function createTraverser(component, expected, previous, neighbours) {
|
|
68
|
-
|
|
72
|
+
typesMatch(component, expected, true);
|
|
69
73
|
const traverser = {
|
|
70
74
|
value: component,
|
|
71
75
|
update(v) {
|
|
@@ -74,10 +78,15 @@ export default function abseil(components) {
|
|
|
74
78
|
},
|
|
75
79
|
parent(t) {
|
|
76
80
|
const parentComponent = findParent(component, components);
|
|
77
|
-
if (
|
|
81
|
+
if (Array.isArray(parentComponent)) {
|
|
82
|
+
typesMatch({ type: "Root" }, t, true);
|
|
83
|
+
return { value: { components } };
|
|
84
|
+
}
|
|
85
|
+
if (!parentComponent) {
|
|
78
86
|
throw new Error("This node does not have a parent");
|
|
87
|
+
}
|
|
79
88
|
const parentParent = findParent(parentComponent, components);
|
|
80
|
-
return createTraverser(parentComponent, t, traverser, parentParent && "components" in parentParent ? parentParent.components :
|
|
89
|
+
return createTraverser(parentComponent, t, traverser, parentParent && "components" in parentParent ? parentParent.components : parentParent);
|
|
81
90
|
},
|
|
82
91
|
};
|
|
83
92
|
if (previous)
|
|
@@ -91,13 +100,13 @@ export default function abseil(components) {
|
|
|
91
100
|
traverser.last = (t) => {
|
|
92
101
|
for (let i = neighbours.length - 1; i >= 0; --i) {
|
|
93
102
|
const sibling = neighbours[i];
|
|
94
|
-
if (!
|
|
103
|
+
if (!typesMatch(sibling, t))
|
|
95
104
|
continue;
|
|
96
105
|
return createTraverser(sibling, t, traverser, neighbours);
|
|
97
106
|
}
|
|
98
107
|
};
|
|
99
108
|
traverser.next = (t) => {
|
|
100
|
-
const next = neighbours.slice(neighbours.indexOf(component) + 1).find((s) =>
|
|
109
|
+
const next = neighbours.slice(neighbours.indexOf(component) + 1).find((s) => typesMatch(s, t));
|
|
101
110
|
if (!next)
|
|
102
111
|
return undefined;
|
|
103
112
|
return createTraverser(next, t, traverser, neighbours);
|
|
@@ -122,7 +131,7 @@ export default function abseil(components) {
|
|
|
122
131
|
*/
|
|
123
132
|
find(query, type) {
|
|
124
133
|
const component = find(query, components);
|
|
125
|
-
if (!component || !
|
|
134
|
+
if (!component || !typesMatch(component, type))
|
|
126
135
|
return undefined;
|
|
127
136
|
const parent = findParent(component, components);
|
|
128
137
|
return createTraverser(component, type, undefined, parent && "components" in parent ? parent.components : components);
|
|
@@ -137,7 +146,12 @@ export default function abseil(components) {
|
|
|
137
146
|
* @important This may cause issues when you try to navigate {@link abseil} instances you've previously created
|
|
138
147
|
*/
|
|
139
148
|
export function removeNode(node) {
|
|
140
|
-
const { components } = node.parent([
|
|
149
|
+
const { components } = node.parent([
|
|
150
|
+
"ActionRow",
|
|
151
|
+
"Container",
|
|
152
|
+
"Root",
|
|
153
|
+
"Section",
|
|
154
|
+
]).value;
|
|
141
155
|
components === null || components === void 0 ? void 0 : components.splice(components.indexOf(node.value), 1);
|
|
142
156
|
for (const key of Object.keys(node)) {
|
|
143
157
|
if (key === "previous" || key === "last")
|
|
@@ -149,4 +163,6 @@ export function removeNode(node) {
|
|
|
149
163
|
});
|
|
150
164
|
}
|
|
151
165
|
}
|
|
166
|
+
/** Assert that a component is of certain type(s). */
|
|
167
|
+
export const assert = (component, type) => typesMatch(component, type);
|
|
152
168
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,OAAO,EAML,aAAa,GACd,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|