abseil 0.2.0 → 0.3.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/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Abseil
2
2
 
3
- Quickly traverse Discord [Components V2](https://docs.discord.com/developers/components/overview) trees.
3
+ Quickly traverse Discord [Components V2](https://docs.discord.com/developers/components/overview) trees. Either enter at the root with `abseil([...]).initial(type)` or jump to a specific node with `abseil([...]).find(query, type)`.
4
4
 
5
- ## Reference
5
+ ## Node Reference
6
6
 
7
7
  | function | description |
8
8
  | ------------ | ----------------------------------------------------------------------------------------------------- |
@@ -11,6 +11,7 @@ Quickly traverse Discord [Components V2](https://docs.discord.com/developers/com
11
11
  | insertBefore | Insert a sibling before the current node |
12
12
  | last | Jump to the last neighbouring node of a type in an array |
13
13
  | next | Jump to the next neighbouring node of a type in an array |
14
+ | parent | Access the parent of a node |
14
15
  | previous | Return to the previous node |
15
16
  | sibling | Access the next node in an array |
16
17
  | update | Shallow merge with the current component in place |
@@ -31,11 +32,11 @@ const message = {
31
32
  Section(["## Trivia!"], Button({ custom_id: "suggest", style: "Secondary" })),
32
33
  TextDisplay("What is the meaning of life?"),
33
34
  ActionRow(
34
- Button({ custom_id: "money", label: "💵" }),
35
- Button({ custom_id: "42", label: "🤖" }),
35
+ Button({ custom_id: "guess-money", label: "💵" }),
36
+ Button({ custom_id: "guess-42", label: "🤖" }),
36
37
  ),
37
38
  Separator(),
38
- Section(["## 🟩🟩🟥🟥🟥⬛⬛⬛⬛⬛"], Button({ custom_id: "stats", style: "Secondary" })),
39
+ Section(["## 🟩🟩🟥🟥🟥⬛⬛⬛⬛⬛"], Button({ custom_id: "stats-3-2", style: "Secondary" })),
39
40
  ),
40
41
  ],
41
42
  } as APIMessage;
@@ -44,26 +45,26 @@ const message = {
44
45
  </details>
45
46
 
46
47
  ```ts
47
- import abseil from "abseil";
48
+ import abseil, { removeNode } from "abseil";
48
49
  import { editMessage } from "dressed";
49
50
 
50
- const section = abseil(message.components ?? [])
51
- .initial("Container")
52
- .child("Section");
51
+ const line = abseil(message.components ?? []);
53
52
 
54
- let button = section.next("ActionRow")?.child("Button");
53
+ let guessBtn = line.find(/guess-.+/, "Button");
55
54
 
56
- while (button) {
57
- button.update({ disabled: true });
58
- // The last item in an array does not have a sibling function
59
- button = button.sibling?.("Button");
55
+ while (guessBtn) {
56
+ guessBtn.update({ disabled: true });
57
+ guessBtn = guessBtn.next("Button");
60
58
  }
61
59
 
60
+ const header = line.initial("Container").child("Section");
61
+
62
+ header.insertBefore(TextDisplay(header.child("TextDisplay").value.content));
63
+ removeNode(header);
64
+
62
65
  // Insert-if-not-exists the warning message
63
- if (section.last("TextDisplay")?.sibling) {
64
- section.previous.update((prev) => ({
65
- components: prev.components.concat(TextDisplay("-# This has expired!")),
66
- }));
66
+ if (!header.last("Section")?.sibling) {
67
+ header.previous.value.components.push(TextDisplay("-# This has expired!"));
67
68
  }
68
69
 
69
70
  editMessage("<CHANNEL_ID>", "<MESSAGE_ID>", { components: message.components });
package/dist/index.d.ts CHANGED
@@ -7,17 +7,19 @@ type CT = typeof ComponentType & {
7
7
  type IComponentType = {
8
8
  [K in keyof CT as CT[K]]: K;
9
9
  };
10
+ type WithCustomIdType = Exclude<IComponentType[Extract<APIMessageComponent, {
11
+ custom_id: string;
12
+ }>["type"]], `Button:${string}`>;
10
13
  type Pop<T extends any[]> = T extends [...infer Rest, any] ? Rest : never;
11
14
  type Last<T extends any[]> = T extends [...any[], infer L] ? L : never;
12
15
  type Arrable<T> = T | T[];
13
- type Narr<T extends Arrable<string>> = T extends string ? T : T[number];
14
16
  type Overwriter<T> = Partial<T> | ((prev: T) => Partial<T>);
15
17
  interface ChildrenMap {
16
18
  ActionRow: IComponentType[APIComponentInMessageActionRow["type"]] | "Button:URL" | "Button:SKU";
17
19
  Container: IComponentType[APIComponentInContainer["type"]];
18
20
  Section: "TextDisplay";
19
21
  }
20
- type TraverserFn<C extends keyof CT, H extends (keyof CT)[], O extends string = ""> = <const T extends Arrable<C>>(type: T) => Omit<Traverser<Narr<T>, H, C>, O>;
22
+ type TraverserFn<C extends keyof CT, H extends (keyof CT)[], O extends string = ""> = <T extends C>(type: Arrable<T>) => Omit<Traverser<T, H, C>, O>;
21
23
  type Component<T extends keyof CT> = Extract<APIMessageComponent, {
22
24
  type: CT[T extends "Button:URL" | "Button:SKU" ? "Button" : T];
23
25
  } & (T extends "Button" ? {
@@ -27,34 +29,48 @@ type Component<T extends keyof CT> = Extract<APIMessageComponent, {
27
29
  } : T extends "Button:SKU" ? {
28
30
  sku_id: string;
29
31
  } : object)>;
30
- type Traverser<T extends keyof CT, H extends (keyof CT)[], ST extends keyof CT = keyof CT> = {
31
- /** Shallow merge with the current component in place */
32
+ export type Traverser<T extends keyof CT, H extends (keyof CT)[], ST extends keyof CT = keyof CT> = {
33
+ /** Shallow merge with the current component in place. */
32
34
  update: (value: Overwriter<Component<T>>) => Traverser<T, H, ST>;
33
- /** The current component */
35
+ /** The current component. */
34
36
  value: Component<T>;
37
+ /** Access the parent of the current node. */
38
+ parent: TraverserFn<keyof CT, [...H, T]>;
35
39
  } & (T extends IComponentType[APISelectMenuComponent["type"]] ? object : {
36
- /** Insert a sibling before the current node */
40
+ /** Insert a sibling before the current node. */
37
41
  insertBefore: (component: Extract<APIMessageComponent, {
38
42
  type: (typeof ComponentType)[Exclude<ST, "Button:URL" | "Button:SKU">];
39
43
  }>) => Traverser<T, H, ST>;
40
- /** Jump to the last neighbouring node of a type in an array */
41
- last: <const N extends Arrable<ST>>(type: N) => Traverser<Narr<N>, [...H, T], ST> | undefined;
42
- /** Jump to the next neighbouring node of a type in an array */
43
- next: <const N extends Arrable<ST>>(type: N) => Traverser<Narr<N>, [...H, T], ST> | undefined;
44
- /** Access the next node in an array */
44
+ /** Jump to the last neighbouring node of a type in an array. */
45
+ last: <N extends ST>(type: Arrable<N>) => Traverser<N, [...H, T], ST> | undefined;
46
+ /** Jump to the next neighbouring node of a type in an array. */
47
+ next: <N extends ST>(type: Arrable<N>) => Traverser<N, [...H, T], ST> | undefined;
48
+ /** Access the next node in an array. */
45
49
  sibling: TraverserFn<ST, [...H, T]>;
46
50
  }) & (T extends keyof ChildrenMap ? {
47
- /** Access the first child of a node */
51
+ /** Access the first child of a node. */
48
52
  child: TraverserFn<ChildrenMap[T], [...H, T]>;
49
53
  } : object) & (T extends "Section" ? {
50
- /** Access the accessory of a [Section](https://docs.discord.com/developers/components/reference#section) */
54
+ /** Access the accessory of a [Section](https://docs.discord.com/developers/components/reference#section). */
51
55
  accessory: TraverserFn<IComponentType[APISectionAccessoryComponent["type"]], [...H, T], "sibling">;
52
56
  } : object) & (H extends [] ? object : {
53
- /** Return to the previous node */
57
+ /** Return to the previous node. */
54
58
  previous: Traverser<Last<H>, Pop<H>>;
55
59
  });
56
- /** Initiate a tree traverser */
57
- declare const abseil: <T extends APIMessageComponent>(components: T[]) => {
58
- initial: TraverserFn<IComponentType[T["type"]], [], "previous">;
60
+ /** Initiate a tree traverser. */
61
+ export default function abseil<T extends APIMessageComponent>(components: T[]): {
62
+ /**
63
+ * Enter the tree at a specific node.
64
+ * @param query Either the component `id` or `custom_id`
65
+ */
66
+ find<Q extends number | string | RegExp, F extends Q extends number ? keyof CT : WithCustomIdType>(query: Q, type: Arrable<F>): Omit<Traverser<F, [], "File" | "ActionRow" | "Button" | "StringSelect" | "TextInput" | "UserSelect" | "RoleSelect" | "MentionableSelect" | "ChannelSelect" | "Section" | "TextDisplay" | "Thumbnail" | "MediaGallery" | "Separator" | "ContentInventoryEntry" | "Container" | "Label" | "FileUpload" | "RadioGroup" | "CheckboxGroup" | "Checkbox" | "SelectMenu" | "Button:URL" | "Button:SKU">, "previous"> | undefined;
67
+ /** Entry point of the tree, visually this is the top-leftmost component. */
68
+ initial: TraverserFn<IComponentType[T["type"]], [], "parent" | "previous">;
59
69
  };
60
- export default abseil;
70
+ /**
71
+ * Destroy a node in the tree.
72
+ * Data on this node will be stripped, attempting to access most functions will throw.
73
+ * @important This may cause issues when you try to navigate {@link abseil} instances you've previously created
74
+ */
75
+ export declare function removeNode<T extends keyof typeof ComponentType>(node: Traverser<T, any, any>): void;
76
+ export {};
package/dist/index.js CHANGED
@@ -28,54 +28,125 @@ function matchTypes(component, expected, doNotThrow) {
28
28
  }
29
29
  return true;
30
30
  }
31
- function createTraverser(component, expected, previous, neighbours) {
32
- matchTypes(component, expected);
33
- const traverser = {
34
- value: component,
35
- update(v) {
36
- Object.assign(component, typeof v === "function" ? v(component) : v);
37
- return traverser;
38
- },
39
- };
40
- if (previous)
41
- traverser.previous = previous;
42
- if (neighbours) {
43
- if (!selects.has(component.type)) {
44
- traverser.insertBefore = (v) => {
45
- neighbours.splice(neighbours.indexOf(component), 0, v);
46
- return traverser;
47
- };
48
- traverser.last = (t) => {
49
- for (let i = neighbours.length - 1; i >= 0; --i) {
50
- const sibling = neighbours[i];
51
- if (!matchTypes(sibling, t, true))
52
- continue;
53
- return createTraverser(sibling, t, traverser, neighbours);
54
- }
55
- return undefined;
56
- };
57
- traverser.next = (t) => {
58
- const next = neighbours.slice(neighbours.indexOf(component) + 1).find((s) => matchTypes(s, t, true));
59
- if (!next)
60
- return undefined;
61
- return createTraverser(next, t, traverser, neighbours);
62
- };
31
+ function find(query, components) {
32
+ for (const component of components) {
33
+ if ((typeof query === "number" && component.id === query) ||
34
+ ("custom_id" in component &&
35
+ ((typeof query === "string" && component.custom_id === query) ||
36
+ (query instanceof RegExp && query.test(component.custom_id))))) {
37
+ return component;
38
+ }
39
+ if ("components" in component) {
40
+ const found = find(query, component.components);
41
+ if (found)
42
+ return found;
43
+ }
44
+ if (component.type === ComponentType.Section && component.accessory) {
45
+ const found = find(query, [component.accessory]);
46
+ if (found)
47
+ return found;
48
+ }
49
+ }
50
+ }
51
+ function findParent(child, components) {
52
+ for (const component of components) {
53
+ if ("components" in component) {
54
+ if (component.components.includes(child))
55
+ return component;
56
+ const found = findParent(child, component.components);
57
+ if (found)
58
+ return found;
63
59
  }
64
- if (neighbours.length !== neighbours.indexOf(component) + 1) {
65
- traverser.sibling = (t) => createTraverser(neighbours[neighbours.indexOf(component) + 1], t, traverser, neighbours);
60
+ if (component.type === ComponentType.Section && component.accessory === child) {
61
+ return component;
66
62
  }
67
63
  }
68
- if (withChildren.has(component.type) && "components" in component) {
69
- traverser.child = (t) => createTraverser(component.components[0], t, traverser, component.components);
64
+ }
65
+ /** Initiate a tree traverser. */
66
+ export default function abseil(components) {
67
+ function createTraverser(component, expected, previous, neighbours) {
68
+ matchTypes(component, expected);
69
+ const traverser = {
70
+ value: component,
71
+ update(v) {
72
+ Object.assign(component, typeof v === "function" ? v(component) : v);
73
+ return traverser;
74
+ },
75
+ parent(t) {
76
+ const parentComponent = findParent(component, components);
77
+ if (!parentComponent)
78
+ throw new Error("This node does not have a parent");
79
+ const parentParent = findParent(parentComponent, components);
80
+ return createTraverser(parentComponent, t, traverser, parentParent && "components" in parentParent ? parentParent.components : []);
81
+ },
82
+ };
83
+ if (previous)
84
+ traverser.previous = previous;
85
+ if (neighbours) {
86
+ if (!selects.has(component.type)) {
87
+ traverser.insertBefore = (v) => {
88
+ neighbours.splice(neighbours.indexOf(component), 0, v);
89
+ return traverser;
90
+ };
91
+ traverser.last = (t) => {
92
+ for (let i = neighbours.length - 1; i >= 0; --i) {
93
+ const sibling = neighbours[i];
94
+ if (!matchTypes(sibling, t, true))
95
+ continue;
96
+ return createTraverser(sibling, t, traverser, neighbours);
97
+ }
98
+ };
99
+ traverser.next = (t) => {
100
+ const next = neighbours.slice(neighbours.indexOf(component) + 1).find((s) => matchTypes(s, t, true));
101
+ if (!next)
102
+ return undefined;
103
+ return createTraverser(next, t, traverser, neighbours);
104
+ };
105
+ }
106
+ if (neighbours.length !== neighbours.indexOf(component) + 1) {
107
+ traverser.sibling = (t) => createTraverser(neighbours[neighbours.indexOf(component) + 1], t, traverser, neighbours);
108
+ }
109
+ }
110
+ if (withChildren.has(component.type) && "components" in component) {
111
+ traverser.child = (t) => createTraverser(component.components[0], t, traverser, component.components);
112
+ }
113
+ if (component.type === ComponentType.Section) {
114
+ traverser.accessory = (t) => createTraverser(component.accessory, t, traverser);
115
+ }
116
+ return traverser;
70
117
  }
71
- if (component.type === ComponentType.Section) {
72
- traverser.accessory = (t) => createTraverser(component.accessory, t, traverser);
118
+ return {
119
+ /**
120
+ * Enter the tree at a specific node.
121
+ * @param query Either the component `id` or `custom_id`
122
+ */
123
+ find(query, type) {
124
+ const component = find(query, components);
125
+ if (!component || !matchTypes(component, type, true))
126
+ return undefined;
127
+ const parent = findParent(component, components);
128
+ return createTraverser(component, type, undefined, parent && "components" in parent ? parent.components : components);
129
+ },
130
+ /** Entry point of the tree, visually this is the top-leftmost component. */
131
+ initial: ((t) => createTraverser(components[0], t, undefined, components)),
132
+ };
133
+ }
134
+ /**
135
+ * Destroy a node in the tree.
136
+ * Data on this node will be stripped, attempting to access most functions will throw.
137
+ * @important This may cause issues when you try to navigate {@link abseil} instances you've previously created
138
+ */
139
+ export function removeNode(node) {
140
+ const { components } = node.parent(["ActionRow", "Container", "Section"]).value;
141
+ components === null || components === void 0 ? void 0 : components.splice(components.indexOf(node.value), 1);
142
+ for (const key of Object.keys(node)) {
143
+ if (key === "previous" || key === "last")
144
+ continue;
145
+ node[key] = (key === "value"
146
+ ? null
147
+ : () => {
148
+ throw new RangeError(`Unable to access ${key} on node as it was removed`);
149
+ });
73
150
  }
74
- return traverser;
75
151
  }
76
- /** Initiate a tree traverser */
77
- const abseil = (components) => ({
78
- initial: ((t) => createTraverser(components[0], t, undefined, components)),
79
- });
80
- export default abseil;
81
152
  //# 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;AA8E/B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;AAExG,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC;IACtB,aAAa,CAAC,YAAY;IAC1B,aAAa,CAAC,UAAU;IACxB,aAAa,CAAC,UAAU;IACxB,aAAa,CAAC,iBAAiB;IAC/B,aAAa,CAAC,aAAa;CAC5B,CAAC,CAAC;AAEH,SAAS,UAAU,CAAC,SAA8B,EAAE,QAA2B,EAAE,UAAoB;IACnG,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACjG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,KAAK,IAAI,SAAS;YAAE,UAAU,IAAI,MAAM,CAAC;aACxC,IAAI,QAAQ,IAAI,SAAS;YAAE,UAAU,IAAI,MAAM,CAAC;IACvD,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;QACvG,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CACtB,SAAY,EACZ,QAA2B,EAC3B,QAA4C,EAC5C,UAAkC;IAElC,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,MAAM,SAAS,GAAQ;QACrB,KAAK,EAAE,SAAS;QAChB,MAAM,CAAC,CAAkC;YACvC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC;IACF,IAAI,QAAQ;QAAE,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC5C,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAsB,EAAE,EAAE;gBAClD,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,SAAkB,CAAC,EAAE,CAAC,EAAE,CAAU,CAAC,CAAC;gBACzE,OAAO,SAAS,CAAC;YACnB,CAAC,CAAC;YACF,SAAS,CAAC,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE;gBAC7B,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;oBAChD,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC;wBAAE,SAAS;oBAC5C,OAAO,eAAe,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;gBAC5D,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC,CAAC;YACF,SAAS,CAAC,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE;gBAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;gBACrG,IAAI,CAAC,IAAI;oBAAE,OAAO,SAAS,CAAC;gBAC5B,OAAO,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;YACzD,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5D,SAAS,CAAC,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAChC,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IACD,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;QAClE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAChH,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC;QAC7C,SAAS,CAAC,SAAS,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,gCAAgC;AAChC,MAAM,MAAM,GAAG,CAAgC,UAAe,EAAE,EAAE,CAAC,CAAC;IAClE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAIxE;CACF,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "abseil",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Quickly traverse Discord Components V2 trees.",
5
5
  "scripts": {
6
6
  "dist": "rm -fr dist && tsc",