• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

WolferyScripting / WolferyJS / #18

01 Sep 2025 09:19PM UTC coverage: 63.335% (+3.5%) from 59.833%
#18

push

DonovanDMC
0.0.6

95 of 253 branches covered (37.55%)

Branch coverage included in aggregate %.

7592 of 11884 relevant lines covered (63.88%)

1.32 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

94.61
/lib/generated/ResourceIDs.ts
1
import type { Writable } from "../util/types.js";
1✔
2

1✔
3
/* eslint-disable @typescript-eslint/no-namespace, @typescript-eslint/explicit-function-return-type*/
1✔
4
namespace ResourceIDs {
1✔
5
    export function arg<Name extends string>(name: Name): Arg<Name> {
1✔
6
        return { __arg__: name } as Arg<Name>;
12✔
7
    }
12✔
8

1✔
9
    export interface Arg<Name extends string> {
1✔
10
        __arg__: Name;
1✔
11
    }
1✔
12

1✔
13
    export type ExtractArgs<T extends ReadonlyArray<unknown>> =
1✔
14
    T[number] extends Arg<infer Name> ? Name : never;
1✔
15

1✔
16
    export type ArgObject<T extends ReadonlyArray<unknown>> =
1✔
17
    ExtractArgs<T> extends infer U
1✔
18
        ? [U] extends [never]
1✔
19
            ? unknown
1✔
20
            : { [K in U & string]: string }
1✔
21
        : never;
1✔
22

1✔
23
    export type ArgArray<T extends ReadonlyArray<unknown>> =
1✔
24
        { [K in keyof T]: T[K] extends Arg<infer N> ? N : never };
1✔
25
    export type ArgArrayValue<T extends ReadonlyArray<unknown>> =
1✔
26
        // eslint-disable-next-line @typescript-eslint/no-explicit-any
1✔
27
        { [K in keyof T]: T[K] extends Arg<any> ? string : never };
1✔
28
    export interface RIDFunction<Parts extends ReadonlyArray<unknown>> {
1✔
29
        (args: ArgObject<Parts>): string;
1✔
30
        __typesOnlyArgs: ArgArrayValue<Parts>;
1✔
31
        get names(): ArgArray<Parts>;
1✔
32
        get regex(): RegExp;
1✔
33
        parts(value: string): ArgObject<Parts>;
1✔
34
    }
1✔
35

1✔
36
    export function f<Parts extends ReadonlyArray<unknown>>(
1✔
37
        strings: TemplateStringsArray,
91✔
38
        ...exprs: Parts
91✔
39
    ): RIDFunction<Parts> {
91✔
40
        const func =  (args: Record<string, string>): string => {
91✔
41
            let result = strings[0]!;
382✔
42
            for (const [i, expr] of exprs.entries()) {
382✔
43
                let value: string;
454✔
44
                if (typeof expr === "object" && expr && "__arg__" in expr) {
454✔
45
                    value = args[(expr as Arg<string>).__arg__]!;
454✔
46
                } else {
454!
47
                    value = String(expr);
×
48
                }
×
49
                result += value + strings[i + 1]!;
454✔
50
            }
454✔
51
            return result;
382✔
52
        };
91✔
53
        const names = exprs.map(expr => (typeof expr === "object" && expr && "__arg__" in expr ? (expr as Arg<string>).__arg__ : undefined)).filter((name): name is string => name !== undefined);
91!
54
        Object.defineProperties(func, {
91✔
55
            regex: {
91✔
56
                get() {
91✔
57
                    const pattern = strings.reduce((acc, str, i) => acc + str.replaceAll(".", String.raw`\.`) + (i < exprs.length ? `(?<${names[i]}>[^.]+)` : ""), "");
×
58
                    return new RegExp(`^${pattern}$`);
×
59
                }
×
60
            },
91✔
61
            names: {
91✔
62
                get() {
91✔
63
                    return names;
×
64
                }
×
65
            }
91✔
66
        });
91✔
67
        func.parts = (value: string) => getRIDParts(func as unknown as RIDFunction<Writable<Parts>>, value);
91✔
68
        return func satisfies ((args: ArgObject<Parts>) => string) as unknown as RIDFunction<Parts>;
91✔
69
    }
91✔
70

1✔
71
    export function getRIDParts<T extends RIDFunction<Array<unknown>>>(func: T, value: string): T extends RIDFunction<infer Parts> ? ArgObject<Parts> : never {
1✔
72
        const r = func.regex;
×
73
        const match = r.exec(value);
×
74
        if (!match) {
×
75
            throw new Error(`No match: ${r.source} for ${value}`);
×
76
        }
×
77
        return match.groups as T extends RIDFunction<infer Parts> ? ArgObject<Parts> : never;
×
78
    }
×
79

1✔
80
    export const id = arg("id");
1✔
81
    const char = arg("char");
1✔
82
    const puppet = arg("puppet");
1✔
83
    const room = arg("room");
1✔
84
    const instance = arg("instance");
1✔
85
    const player = arg("player");
1✔
86
    const message = arg("message");
1✔
87
    const script = arg("script");
1✔
88
    const binary = arg("binary");
1✔
89
    const ctrl = arg("ctrl");
1✔
90
    const user = arg("user");
1✔
91
    const bot = arg("bot");
1✔
92
    /** core.room.{id}.afar */
1✔
93
    export const AFAR_ROOM = f`core.room.${id}.afar`;
1✔
94
    /** core.area.{id} */
1✔
95
    export const AREA = f`core.area.${id}`;
1✔
96
    /** core.area.{id}.child */
1✔
97
    export const AREA_CHILD = f`core.area.${id}.child`;
1✔
98
    /** core.area.{id}.children */
1✔
99
    export const AREA_CHILDREN = f`core.area.${id}.children`;
1✔
100
    /** core.area.{id}.details */
1✔
101
    export const AREA_DETAILS = f`core.area.${id}.details`;
1✔
102
    export const AWAKE_CHARACTERS = "core.chars.awake";
1✔
103
    /** core.bot.{id} */
1✔
104
    export const BOT_USER = f`core.bot.${id}`;
1✔
105
    /** core.char.{id} */
1✔
106
    export const CHARACTER = f`core.char.${id}`;
1✔
107
    /** core.char.{id}.details */
1✔
108
    export const CHARACTER_DETAILS = f`core.char.${id}.details`;
1✔
109
    /** core.char.{id}.info */
1✔
110
    export const CHARACTER_INFO = f`core.char.${id}.info`;
1✔
111
    /** core.char.{id}.min */
1✔
112
    export const CHARACTER_MIN = f`core.char.${id}.min`;
1✔
113
    /** core.char.{id}.ctrl */
1✔
114
    export const CONTROLLED_CHARACTER = f`core.char.${id}.ctrl`;
1✔
115
    /** core.char.{char}.puppet.{puppet}.ctrl */
1✔
116
    export const CONTROLLED_PUPPET = f`core.char.${char}.puppet.${puppet}.ctrl`;
1✔
117
    /** core.exit.{id} */
1✔
118
    export const EXIT = f`core.exit.${id}`;
1✔
119
    /** core.exit.{id}.details */
1✔
120
    export const EXIT_DETAILS = f`core.exit.${id}.details`;
1✔
121
    /** core.char.{id}.focus */
1✔
122
    export const CHARACTER_FOCUS = f`core.char.${id}.focus`;
1✔
123
    /** core.char.{char}.puppet.{puppet}.focus */
1✔
124
    export const PUPPET_FOCUS = f`core.char.${char}.puppet.${puppet}.focus`;
1✔
125
    /** core.char.{id}.focus.chars */
1✔
126
    export const CHARACTER_FOCUS_CHARS = f`core.char.${id}.focus.chars`;
1✔
127
    /** core.char.{char}.puppet.{puppet}.focus.chars */
1✔
128
    export const PUPPET_FOCUS_CHARS = f`core.char.${char}.puppet.${puppet}.focus.chars`;
1✔
129
    /** identity.user.{id} */
1✔
130
    export const IDENTITY = f`identity.user.${id}`;
1✔
131
    /** core.area.img.{id} */
1✔
132
    export const AREA_IMAGE = f`core.area.img.${id}`;
1✔
133
    /** core.char.img.{id} */
1✔
134
    export const CHARACTER_IMAGE = f`core.char.img.${id}`;
1✔
135
    /** core.room.img.{id} */
1✔
136
    export const ROOM_IMAGE = f`core.room.img.${id}`;
1✔
137
    /** core.lookat.char.{char}.inroom.{room} */
1✔
138
    export const LOOK_AT = f`core.lookat.char.${char}.inroom.${room}`;
1✔
139
    /** core.lookedat.char.{char}.inroom.{room} */
1✔
140
    export const LOOKED_AT = f`core.lookedat.char.${char}.inroom.${room}`;
1✔
141
    /** core.instance.{instance}.lookedat.char.{char}.inroom.{room} */
1✔
142
    export const LOOKED_AT_INSTANCE = f`core.instance.${instance}.lookedat.char.${char}.inroom.${room}`;
1✔
143
    /** mail.message.{id} */
1✔
144
    export const MAIL_MESSAGE = f`mail.message.${id}`;
1✔
145
    /** core.player.{id}.mutedchars */
1✔
146
    export const MUTED_CHARACTERS = f`core.player.${id}.mutedchars`;
1✔
147
    /** core.node.{id} */
1✔
148
    export const NODE = f`core.node.${id}`;
1✔
149
    /** note.player.{player}.note.{char} */
1✔
150
    export const NOTE = f`note.player.${player}.note.${char}`;
1✔
151
    /** note.player.{id}.notes */
1✔
152
    export const NOTES = f`note.player.${id}.notes`;
1✔
153
    /** core.char.{id}.owned */
1✔
154
    export const OWNED_CHARACTER = f`core.char.${id}.owned`;
1✔
155
    /** core.player.{id} */
1✔
156
    export const PLAYER = f`core.player.${id}`;
1✔
157
    /** mail.player.{player}.message.{message} */
1✔
158
    export const PLAYER_MAIL_MESSAGE = f`mail.player.${player}.message.${message}`;
1✔
159
    /** core.profile.{id} */
1✔
160
    export const PROFILE = f`core.profile.${id}`;
1✔
161
    /** core.char.{char}.puppet.{puppet} */
1✔
162
    export const PUPPET = f`core.char.${char}.puppet.${puppet}`;
1✔
163
    /** core.puppet.{id}.info */
1✔
164
    export const PUPPET_INFO = f`core.puppet.${id}.info`;
1✔
165
    /** core.request.{id} */
1✔
166
    export const REQUEST = f`core.request.${id}`;
1✔
167
    /** core.request.{id}.params */
1✔
168
    export const REQUEST_PARAMS = f`core.request.${id}.params`;
1✔
169
    /** core.room.{id} */
1✔
170
    export const ROOM = f`core.room.${id}`;
1✔
171
    /** core.char.{id}.inroom */
1✔
172
    export const ROOM_CHARACTER = f`core.char.${id}.inroom`;
1✔
173
    /** core.room.{id}.child */
1✔
174
    export const ROOM_CHILD = f`core.room.${id}.child`;
1✔
175
    /** core.roomcmd.{id} */
1✔
176
    export const ROOM_COMMAND = f`core.roomcmd.${id}`;
1✔
177
    /** core.room.{id}.cmds */
1✔
178
    export const ROOM_COMMANDS = f`core.room.${id}.cmds`;
1✔
179
    /** core.room.{id}.details */
1✔
180
    export const ROOM_DETAILS = f`core.room.${id}.details`;
1✔
181
    /** core.instance.{instance}.room.{room}.details */
1✔
182
    export const ROOM_INSTANCE_DETAILS = f`core.instance.${instance}.room.${room}.details`;
1✔
183
    /** core.roomprofile.{id} */
1✔
184
    export const ROOM_PROFILE = f`core.roomprofile.${id}`;
1✔
185
    /** core.roomscript.{id} */
1✔
186
    export const ROOM_SCRIPT = f`core.roomscript.${id}`;
1✔
187
    /** core.roomscript.{id}.details */
1✔
188
    export const ROOM_SCRIPT_DETAILS = f`core.roomscript.${id}.details`;
1✔
189
    /** auth.user.{id}.safe */
1✔
190
    export const TOKEN_USER = f`auth.user.${id}.safe`;
1✔
191
    /** core.script.{script}.binary.{binary} */
1✔
192
    export const SCRIPT_BINARY = f`core.script.${script}.binary.${binary}`;
1✔
193
    /** core.script.log.{id} */
1✔
194
    export const SCRIPT_LOG = f`core.script.log.${id}`;
1✔
195
    /** core.char.{id}.settings */
1✔
196
    export const CHARACTER_SETTINGS = f`core.char.${id}.settings`;
1✔
197
    /** core.char.{ctrl}.puppet.{puppet}.settings */
1✔
198
    export const PUPPET_SETTINGS = f`core.char.${ctrl}.puppet.${puppet}.settings`;
1✔
199
    /** tag.tag.{id} */
1✔
200
    export const TAG = f`tag.tag.${id}`;
1✔
201
    /** tag.char.{id}.tags */
1✔
202
    export const CHARACTER_TAGS = f`tag.char.${id}.tags`;
1✔
203
    /** mail.player.{id}.unread */
1✔
204
    export const UNREAD_MAIL = f`mail.player.${id}.unread`;
1✔
205
    /** auth.user.{id} */
1✔
206
    export const USER = f`auth.user.${id}`;
1✔
207
    /** note.player.{player}.watch.{char} */
1✔
208
    export const WATCH = f`note.player.${player}.watch.${char}`;
1✔
209
    /** note.player.{id}.watches */
1✔
210
    export const WATCHES = f`note.player.${id}.watches`;
1✔
211
    export const TAGS = "tag.tags";
1✔
212
    /** tag.group.{id} */
1✔
213
    export const TAG_GROUP = f`tag.group.${id}`;
1✔
214
    export const TAG_GROUPS = "tag.groups";
1✔
215
    export const CORE_INFO = "core.info";
1✔
216
    export const TAG_INFO = "tag.info";
1✔
217
    export const MAIL_INFO = "mail.info";
1✔
218
    export const NOTE_INFO = "note.info";
1✔
219
    export const REPORT_INFO = "report.info";
1✔
220
    export const SUPPORT_INFO = "support.info";
1✔
221
    export const WEB_CLIENT_INFO = "client.web.info";
1✔
222
    /** notice.notice.{id}.notice */
1✔
223
    export const NOTICE = f`notice.notice.${id}.notice`;
1✔
224
    /** auth.token.{id} */
1✔
225
    export const TOKEN = f`auth.token.${id}`;
1✔
226
    /** auth.user.{user}.bot.{bot} */
1✔
227
    export const BOT = f`auth.user.${user}.bot.${bot}`;
1✔
228
    /** auth.user.{id}.bots */
1✔
229
    export const BOTS = f`auth.user.${id}.bots`;
1✔
230
    /** core.room.{id}.exits.hidden */
1✔
231
    export const HIDDEN_EXITS = f`core.room.${id}.exits.hidden`;
1✔
232
    /** core.char.{id}.nodes */
1✔
233
    export const CHARACTER_NODES = f`core.char.${id}.nodes`;
1✔
234
    /** core.player.{id}.ctrls */
1✔
235
    export const CONTROLLED_CHARACTERS = f`core.player.${id}.ctrls`;
1✔
236
    /** core.room.{id}.exits */
1✔
237
    export const EXITS = f`core.room.${id}.exits`;
1✔
238
    export const NODES = "core.nodes";
1✔
239
    /** mail.player.{id}.inbox */
1✔
240
    export const INBOX = f`mail.player.${id}.inbox`;
1✔
241
    /** core.player.{id}.incoming.requests */
1✔
242
    export const INCOMING_REQUESTS = f`core.player.${id}.incoming.requests`;
1✔
243
    /** core.player.{id}.outgoing.requests */
1✔
244
    export const OUTGOING_REQUESTS = f`core.player.${id}.outgoing.requests`;
1✔
245
    /** core.char.{id}.areas */
1✔
246
    export const OWNED_AREAS = f`core.char.${id}.areas`;
1✔
247
    /** core.player.{id}.chars */
1✔
248
    export const OWNED_CHARACTERS = f`core.player.${id}.chars`;
1✔
249
    /** core.char.{id}.rooms */
1✔
250
    export const OWNED_ROOMS = f`core.char.${id}.rooms`;
1✔
251
    /** core.char.{id}.profiles */
1✔
252
    export const PROFILES = f`core.char.${id}.profiles`;
1✔
253
    /** core.player.{id}.puppets */
1✔
254
    export const PUPPETS = f`core.player.${id}.puppets`;
1✔
255
    /** core.room.{id}.chars */
1✔
256
    export const ROOM_CHARACTERS = f`core.room.${id}.chars`;
1✔
257
    /** core.instance.{instance}.room.{room}.chars */
1✔
258
    export const ROOM_INSTANCE_CHARACTERS = f`core.instance.${instance}.room.${room}.chars`;
1✔
259
    /** core.room.{id}.chars.awake */
1✔
260
    export const ROOM_CHARACTERS_AWAKE = f`core.room.${id}.chars.awake`;
1✔
261
    /** core.instance.{instance}.room.{room}.chars.awake */
1✔
262
    export const ROOM_INSTANCE_CHARACTERS_AWAKE = f`core.instance.${instance}.room.${room}.chars.awake`;
1✔
263
    /** core.room.{id}.profiles */
1✔
264
    export const ROOM_PROFILES = f`core.room.${id}.profiles`;
1✔
265
    /** core.room.{id}.scripts */
1✔
266
    export const ROOM_SCRIPTS = f`core.room.${id}.scripts`;
1✔
267
    /** core.script.{id}.logs */
1✔
268
    export const SCRIPT_LOGS = f`core.script.${id}.logs`;
1✔
269
    /** core.char.{id}.settings.triggers */
1✔
270
    export const CHARACTER_SETTINGS_TRIGGERS = f`core.char.${id}.settings.triggers`;
1✔
271
    /** core.char.{ctrl}.puppet.{puppet}.settings.triggers */
1✔
272
    export const PUPPET_SETTINGS_TRIGGERS = f`core.char.${ctrl}.puppet.${puppet}.settings.triggers`;
1✔
273
    /** auth.user.{id}.notices */
1✔
274
    export const AUTH_NOTICES = f`auth.user.${id}.notices`;
1✔
275
    /** identity.user.{id}.notices */
1✔
276
    export const IDENTITY_NOTICES = f`identity.user.${id}.notices`;
1✔
277
    /** auth.user.{id}.tokens */
1✔
278
    export const TOKENS = f`auth.user.${id}.tokens`;
1✔
279
    /** core.room.{id}.tenants */
1✔
280
    export const TENANTS = f`core.room.${id}.tenants`;
1✔
281
    /** core.room.{id}.nodes */
1✔
282
    export const TELEPORTERS = f`core.room.${id}.nodes`;
1✔
283

1✔
284
    export const ROLLER = f`roller.char.${id}`;
1✔
285
}
1✔
286
/* eslint-enable @typescript-eslint/no-namespace, @typescript-eslint/explicit-function-return-type*/
1✔
287

1✔
288
export default ResourceIDs;
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc