factoriomod-debug 2.0.5 → 2.0.7

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/fmtk.js DELETED
@@ -1,3406 +0,0 @@
1
- "use strict";var Xp=Object.create;var Mn=Object.defineProperty;var Yp=Object.getOwnPropertyDescriptor;var Qp=Object.getOwnPropertyNames;var Jp=Object.getPrototypeOf,Zp=Object.prototype.hasOwnProperty;var Q=(a,e)=>()=>(a&&(e=a(a=0)),e);var F=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports),Z=(a,e)=>{for(var t in e)Mn(a,t,{get:e[t],enumerable:!0})},El=(a,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Qp(e))!Zp.call(a,o)&&o!==t&&Mn(a,o,{get:()=>e[o],enumerable:!(n=Yp(e,o))||n.enumerable});return a};var le=(a,e,t)=>(t=a!=null?Xp(Jp(a)):{},El(e||!a||!a.__esModule?Mn(t,"default",{value:a,enumerable:!0}):t,a)),eh=a=>El(Mn({},"__esModule",{value:!0}),a);var Nn=a=>new Uint8Array(Buffer.from(a,"base64"));var gi={};Z(gi,{default:()=>nh});var nh,xl=Q(()=>{nh=`
2
- --[[
3
- Arg parser from: https://github.com/JanSharp/LuaArgParser
4
-
5
- MIT License
6
-
7
- Copyright (c) 2021-2024 Jan Mischak
8
-
9
- Permission is hereby granted, free of charge, to any person obtaining a copy
10
- of this software and associated documentation files (the "Software"), to deal
11
- in the Software without restriction, including without limitation the rights
12
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
- copies of the Software, and to permit persons to whom the Software is
14
- furnished to do so, subject to the following conditions:
15
-
16
- The above copyright notice and this permission notice shall be included in all
17
- copies or substantial portions of the Software.
18
-
19
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
- SOFTWARE.
26
- ]]
27
-
28
- ---@class ArgsConfigOption
29
- ---@field field string
30
- ---@field short string|nil @ short option name, defined without leading \`-\`. used when an option with a single leading \`-\` is encountered
31
- ---@field long string|nil @ long option name, defined without leading \`--\`. used when an option with leading \`--\` is encountered
32
- ---@field description string|nil @ description used in the help message
33
- ---@field flag boolean|nil @ is this option a flag?
34
- ---@field single_param boolean|nil @ does this option take a single parameter?
35
- ---@field min_params integer|nil @ when not a flag or single_param, how many params does the array have to have minimum? Default 0
36
- ---@field max_params integer|nil @ when not a flag or single_param, how many params is the array allowed to have maximum? Default \`nil\` meaning unlimited
37
- ---@field params integer|nil @ fallback for both min_params and max_params
38
- ---@field type string|nil @ (required) id of the type the single_param or array entries have to be. Not used for flags
39
- ---@field optional boolean|nil @ is the option optional? implied to be true for flags
40
- ---@field default_value any @ the default value to use for optional options. When set, optional is implied to be \`true\`
41
-
42
- ---@class ArgsConfigPositional
43
- ---@field single boolean|nil @ is this positional a single value?
44
- ---@field min_amount integer|nil @ when not a single, how many args does the array have to have minimum? Default 0
45
- ---@field max_amount integer|nil @ when not a single, how many args is the array allowed to have maximum? Default \`nil\` meaning unlimited
46
- ---@field amount integer|nil @ fallback for both min_amount and max_amount
47
- ---@field type string @ id of the type the single or array entries have to be
48
- ---@field optional boolean|nil @ is the option optional? implied to be true for flags
49
-
50
- ---@class ArgsConfig
51
- ---@field options ArgsConfigOption[]|nil
52
- ---@field positional ArgsConfigPositional[]|nil
53
-
54
- ---@class ArgsHelpConfig
55
- ---@field usage string|nil @ When provided a \`"Usage: "..usage\` line will be added before the help message
56
- ---@field indent_length integer|nil @ Default 4. Indent for the option/positional labels
57
- ---@field label_length integer|nil @ Default 32. Labels will get padded with blank space up to this length. If exceeding the length, the description is put on the next line
58
- ---@field spacing_length integer|nil @ Default 2. Space between label and description
59
-
60
- local type_defs = {}
61
-
62
- local function register_type(definition)
63
- type_defs[definition.id] = definition
64
- end
65
-
66
- register_type{
67
- id = "string",
68
- arg_count = 1,
69
- convert = function(arg, context)
70
- local success, value = pcall(tostring, arg)
71
- if not success then
72
- return nil, value.." "..context.."."
73
- end
74
- return value
75
- end,
76
- compare = function(left, right)
77
- return left == right
78
- end,
79
- tostring = function(str) return str end,
80
- }
81
-
82
- register_type{
83
- id = "number",
84
- arg_count = 1,
85
- convert = function(arg, context)
86
- local success, value = pcall(tonumber, arg)
87
- if not success then
88
- return nil, value.." "..context.."."
89
- end
90
- return value
91
- end,
92
- compare = function(left, right)
93
- return left == right
94
- end,
95
- }
96
-
97
- register_type{
98
- id = "boolean",
99
- arg_count = 1,
100
- convert = function(arg, context)
101
- if arg == "true" or arg == "1" then
102
- return true
103
- elseif arg == "false" or arg == "0" then
104
- return false
105
- else
106
- return nil, "Expected a boolean, got '"..tostring(arg).."' "..context.."."
107
- end
108
- end,
109
- compare = function(left, right)
110
- return left == right
111
- end,
112
- }
113
-
114
- local help_option = {
115
- field = "help",
116
- long = "help",
117
- short = "h",
118
- description = "Show help message.",
119
- flag = true,
120
- }
121
-
122
- local function get_option_descriptor(option)
123
- return (option.short and ("-"..option.short) or "")
124
- ..(option.long and option.short and " | " or "")
125
- ..(option.long and ("--"..option.long) or "")
126
- end
127
-
128
- ---@param args string[]
129
- ---@param config ArgsConfig
130
- ---@param start_index? integer @ 1 based including
131
- ---@return table|nil args @ returns \`nil\` if there was an error
132
- ---@return integer|string last_consumed_index_or_message @ If there was an error this is the error message
133
- local function parse(args, config, start_index)
134
- local err
135
- local i = (start_index and (start_index - 1)) or 0
136
- local current
137
- local function next_arg()
138
- i = i + 1
139
- current = args[i]
140
- return current
141
- end
142
- local function peek_next()
143
- return args[i + 1]
144
- end
145
-
146
- local function consume_args_and_convert_for_type(type_id, context)
147
- if not type_defs[type_id] then
148
- error("Invalid type_def id '"..type_id.."' "..context..". No type conversion registered with that id.")
149
- end
150
- local type_args = {}
151
- for j = 1, type_defs[type_id].arg_count do
152
- if not next_arg() then
153
- err = "Expected "..j.." arg(s) for the type '"..type_id.."' "..context.."."
154
- return
155
- end
156
- type_args[j] = current
157
- end
158
- type_args[#type_args+1] = context
159
- local result
160
- result, err = type_defs[type_id].convert(table.unpack(type_args))
161
- return result
162
- end
163
-
164
- local no_more_options = false
165
-
166
- local function consume_args_and_convert_for_type_array(type_id, min, max, context)
167
- local value_count = 0
168
- local values = {}
169
- while ((not max) or value_count < max)
170
- and peek_next()
171
- and (no_more_options or (value_count < min) or (peek_next():sub(1, 1) ~= "-"))
172
- and (not err)
173
- do
174
- value_count = value_count + 1
175
- values[value_count] = consume_args_and_convert_for_type(type_id, context)
176
- end
177
- if err then return values end
178
- if value_count < min then
179
- err = "Expected "..min..(max and (max ~= min and (" to "..max) or "") or " or more")
180
- .." parameters of the type '"..type_id.."', got "..value_count.." "..context.."."
181
- end
182
- return values
183
- end
184
-
185
- local result = {}
186
- local found_options = {}
187
-
188
- local positional_index = 0
189
- local current_positional
190
- local function next_positional()
191
- positional_index = positional_index + 1
192
- current_positional = config.positional and config.positional[positional_index] or nil
193
- return current_positional
194
- end
195
-
196
- while next_arg() do
197
- if not no_more_options then
198
- -- first check for options
199
- if current:sub(1, 1) == "-" then
200
- local option_config
201
- if current:sub(2, 2) == "-" then
202
- local long = current:sub(3)
203
- if long == "" then
204
- no_more_options = true
205
- goto continue
206
- else
207
- if long == help_option.long then
208
- option_config = help_option
209
- else
210
- for _, option in ipairs(config.options or {}) do
211
- if option.long == long then
212
- option_config = option
213
- break
214
- end
215
- end
216
- end
217
- end
218
- else
219
- local short = current:sub(2)
220
- if short == "" then
221
- return nil, "Invalid arg '-'."
222
- end
223
- if short == help_option.short then
224
- option_config = help_option
225
- else
226
- for _, option in ipairs(config.options or {}) do
227
- if option.short == short then
228
- option_config = option
229
- break
230
- end
231
- end
232
- end
233
- end
234
-
235
- if not option_config then
236
- return nil, "Invalid option '"..current.."'."
237
- end
238
-
239
- if found_options[option_config] then
240
- return nil, "Duplicate option '"..get_option_descriptor(option_config).."'."
241
- end
242
- found_options[option_config] = true
243
-
244
- if option_config.flag then
245
- result[option_config.field] = true
246
- elseif option_config.single_param then
247
- result[option_config.field] = consume_args_and_convert_for_type(
248
- option_config.type,
249
- "for the option '"..get_option_descriptor(option_config).."'"
250
- )
251
- if err then
252
- return nil, err
253
- end
254
- else
255
- result[option_config.field] = consume_args_and_convert_for_type_array(
256
- option_config.type,
257
- option_config.min_params or option_config.params,
258
- option_config.max_params or option_config.params,
259
- "for the option '"..get_option_descriptor(option_config).."'"
260
- )
261
- if err then
262
- return nil, err
263
- end
264
- end
265
- goto continue
266
- end
267
- end
268
-
269
- -- positional args
270
- no_more_options = true
271
- if not next_positional() then
272
- break
273
- end
274
-
275
- i = i - 1 -- the consume functions expect the current position to be just before what they are consuming
276
-
277
- if current_positional.single then
278
- result[current_positional.field] = consume_args_and_convert_for_type(
279
- current_positional.type,
280
- "for #"..positional_index.." positional arg '"..current_positional.name.."'"
281
- )
282
- if err then
283
- return nil, err
284
- end
285
- else
286
- result[current_positional.field] = consume_args_and_convert_for_type_array(
287
- current_positional.type,
288
- current_positional.min_amount or current_positional.amount,
289
- current_positional.max_amount or current_positional.amount,
290
- "for #"..positional_index.." positional arg group '"..current_positional.name.."'"
291
- )
292
- if err then
293
- return nil, err
294
- end
295
- end
296
-
297
- ::continue::
298
- end
299
-
300
- for _, option in ipairs(config.options or {}) do
301
- if not found_options[option] then
302
- if option.flag then
303
- result[option.field] = false
304
- elseif option.optional or (option.default_value ~= nil) then
305
- result[option.field] = option.default_value
306
- elseif not result.help then
307
- return nil, "Missing option '"..get_option_descriptor(option).."'."
308
- end
309
- end
310
- end
311
-
312
- while next_positional() do
313
- if current_positional.single then
314
- if not current_positional.optional then
315
- if not result.help then
316
- return nil, "Missing #"..positional_index.." positional arg '"..current_positional.name.."'."
317
- end
318
- end
319
- else
320
- if (not current_positional.optional) and current_positional.min_amount ~= 0 then
321
- if not result.help then
322
- return nil, "Missing #"..positional_index.." positional arg group '"..current_positional.name.."'."
323
- end
324
- end
325
- result[current_positional.field] = {}
326
- end
327
- end
328
-
329
- return result, i - 1
330
- end
331
-
332
- local function get_type(option_or_positional)
333
- if option_or_positional.flag then
334
- return ""
335
- elseif option_or_positional.single_param or option_or_positional.single then
336
- return " <"..option_or_positional.type..">"
337
- else
338
- return " <"..option_or_positional.type.."[]>"
339
- end
340
- end
341
-
342
- local function get_help_string(config, help_config)
343
- help_config = help_config or {}
344
- local indent_length = help_config.indent_length or 4
345
- local label_length = help_config.label_length or 32
346
- local spacing_length = help_config.spacing_length or 2
347
- local indent = string.rep(" ", indent_length)
348
- local full_indent = string.rep(" ", indent_length + label_length + spacing_length)
349
- local help = {}
350
-
351
- local function add_entry(label, description)
352
- help[#help+1] = label
353
- if description then
354
- if #label > label_length then
355
- help[#help+1] = "\\n"
356
- help[#help+1] = full_indent
357
- else
358
- help[#help+1] = string.rep(" ", label_length - #label + spacing_length)
359
- end
360
- help[#help+1] = description:gsub("\\n", "\\n"..full_indent)
361
- end
362
- help[#help+1] = "\\n"
363
- end
364
-
365
- local function default_value_tostring(option)
366
- local tostring = (type_defs[option.type].tostring or tostring)
367
- if option.single_param then
368
- return tostring(option.default_value)
369
- else
370
- local values = {}
371
- for i, value in ipairs(option.default_value) do
372
- values[i] = tostring(value)
373
- end
374
- return table.concat(values, ", ")
375
- end
376
- end
377
-
378
- local function add_option(option)
379
- help[#help+1] = indent
380
- local label
381
- if option.flag or option.optional or option.default_value ~= nil then
382
- label = "["..get_option_descriptor(option)..get_type(option)
383
- ..(
384
- option.default_value ~= nil
385
- and (" | default: "..default_value_tostring(option))
386
- or ""
387
- ).."]"
388
- else
389
- label = get_option_descriptor(option)..get_type(option)
390
- end
391
- add_entry(label, option.description)
392
- end
393
-
394
- if help_config.usage then
395
- help[#help+1] = "Usage: "
396
- help[#help+1] = help_config.usage
397
- help[#help+1] = "\\n"
398
- end
399
-
400
- for _, option in ipairs(config.options or {}) do
401
- add_option(option)
402
- end
403
-
404
- add_option(help_option)
405
-
406
- if next(config.options or {}) and next(config.positional or {}) then
407
- help[#help+1] = "\\n"
408
- end
409
-
410
- for _, positional in ipairs(config.positional or {}) do
411
- help[#help+1] = indent
412
- local label
413
- if positional.optional then
414
- label = "["..get_type(positional).."]"
415
- else
416
- label = get_type(positional)
417
- end
418
- add_entry(label, positional.description)
419
- end
420
-
421
- help[#help] = nil -- remove last newline
422
- return table.concat(help)
423
- end
424
-
425
- ---@param args string[]
426
- ---@param config ArgsConfig
427
- ---@param help_config? ArgsHelpConfig
428
- ---@return table|nil args @ returns \`nil\` if there was an error, \`{help = true}\` if it was help
429
- ---@return integer|nil last_consumed_index @ returns \`nil\` under the same condition.
430
- local function parse_and_print_on_error_or_help(args, config, help_config)
431
- local result, err_or_index = parse--[[@as fun(a,b):table?,integer?]](args, config)
432
- if (not result) or result.help then
433
- if not result then
434
- print(err_or_index)
435
- print()
436
- err_or_index = nil
437
- else
438
- result = {help = true}
439
- end
440
- print(get_help_string(config, help_config))
441
- end
442
- return result, err_or_index
443
- end
444
-
445
- return {
446
- register_type = register_type,
447
- parse = parse,
448
- parse_and_print_on_error_or_help = parse_and_print_on_error_or_help,
449
- get_help_string = get_help_string,
450
- help_option = help_option, -- one can modify this table by reference
451
- }
452
- `});var _i={};Z(_i,{default:()=>ih});var ih,Ll=Q(()=>{ih=`--##
453
-
454
- local util = require("factorio-plugin.util")
455
- local command_line_module_flag = util.module_flags.command_line
456
- local line_start_slashes = util.line_start_slashes
457
-
458
- local commands_lut = {
459
- ["command"] = true,
460
- ["c"] = true,
461
- ["silent-command"] = true,
462
- ["sc"] = true,
463
- ["measured-command"] = true,
464
- }
465
-
466
- ---@param uri string @ The uri of file
467
- ---@param text string @ The content of file
468
- ---@param diffs Diff[] @ The diffs to add more diffs to
469
- local function replace(uri, text, diffs)
470
- -- Process line_start_slashes after util pre_process has finished, since plugin disable-line annotations exist.
471
- -- Basically at the time of encountering the slash at the start of the line, it does not know if that position
472
- -- in the file may or may not have the command_line module disabled.
473
- util.reset_is_disabled_to_file_start()
474
- for i = 1, line_start_slashes.count do
475
- local slash_pos = line_start_slashes[i]
476
- local command, f_command = text:match("^([a-z-]+%f[%s\\0])()", slash_pos + 1)
477
- if not command then goto continue end
478
- f_command = text:match("^ __[a-zA-Z0-9_-]+__()", f_command) or f_command
479
- if commands_lut[command] and not util.is_disabled(slash_pos, command_line_module_flag) then
480
- util.add_diff(diffs, slash_pos, f_command, "")
481
- end
482
- ::continue::
483
- end
484
- end
485
-
486
- return {
487
- replace = replace,
488
- }
489
- `});var bi={};Z(bi,{default:()=>sh});var sh,Al=Q(()=>{sh=`--##
490
-
491
- local util = require("factorio-plugin.util")
492
- local object_name_module_flag = util.module_flags.object_name
493
-
494
- ---@param _ string @ The uri of file
495
- ---@param text string @ The content of file
496
- ---@param diffs Diff[] @ The diffs to add more diffs to
497
- local function replace(_, text, diffs)
498
- util.reset_is_disabled_to_file_start()
499
- for f_obj_name in
500
- string.gmatch(text, "object_name()%f[^a-zA-Z0-9_]")--[[@as fun(): integer]]
501
- do
502
- local s_obj_name = f_obj_name - #"object_name"
503
- if util.is_disabled(s_obj_name, object_name_module_flag) then goto continue end
504
- local preceding_start = s_obj_name - 128 -- Look behind quite far because variable names can be quite long.
505
- local preceding_text = text:sub(preceding_start, s_obj_name - 1)
506
- -- p_front is 1 after the front
507
- local p_front, p_dot = preceding_text:match("()[a-zA-Z_][a-zA-Z0-9_]*%s*()%.%s*$")
508
- if not p_front then goto continue end
509
- preceding_text = preceding_text:sub(1, p_front - 1)
510
- if preceding_text:find("%.%s*$") or preceding_text:find("function%s*$") then goto continue end
511
- p_front = preceding_start + p_front - 1
512
- p_dot = preceding_start + p_dot - 1
513
- util.add_diff(diffs, p_front, p_front, "__object_name(")
514
- util.add_diff(diffs, p_dot, p_dot + 1, ")")
515
- util.add_diff(diffs, p_dot + 1, f_obj_name, "")
516
- ::continue::
517
- end
518
- end
519
-
520
- return {
521
- replace = replace,
522
- }
523
- `});var yi={};Z(yi,{default:()=>uh});var uh,kl=Q(()=>{uh=`--##
524
-
525
- local util = require("factorio-plugin.util")
526
- local remote_add_module_flag = util.module_flags.remote_add
527
- local remote_call_module_flag = util.module_flags.remote_call
528
-
529
- ---@alias comma_or_paren ','|\`)\`
530
-
531
- ---@param _ string @ The uri of file
532
- ---@param text string @ The content of file
533
- ---@param diffs Diff[] @ The diffs to add more diffs to
534
- local function replace(_, text, diffs)
535
-
536
- ---parse one param and use it to index into the previous table
537
- ---creates 2 new elements in the chain_diff where the first one
538
- ---represents the actual string contents or identifier
539
- ---@param chain_diff ChainDiffElem[]
540
- ---@param p_param_start integer
541
- ---@return string|nil
542
- ---@return comma_or_paren|nil -- Does this only return the two literal strings/nil
543
- ---@return integer|nil
544
- local function process_param(chain_diff, p_param_start)
545
- ---@type integer, string|nil, integer, comma_or_paren|nil, integer
546
- local s_param, param, f_param, comma_or_paren, p_param_finish
547
- = text:match("^%s*()[\\"']([^\\"']*)[\\"']()%s*([,)])()", p_param_start)
548
-
549
- if not param then
550
- return
551
- end
552
-
553
- local i = #chain_diff + 1
554
- chain_diff[i] = {i = s_param}
555
- chain_diff[i + 1] = {i = f_param}
556
- util.use_source_to_index(chain_diff, i, param, true)
557
-
558
- return param, comma_or_paren, p_param_finish
559
- end
560
-
561
- ---remote.add_interface
562
- ---@param s_entire_thing integer
563
- ---@param s_add integer
564
- ---@param f_add integer
565
- ---@param p_open_paren integer
566
- ---@param s_param_1 integer
567
- local function handle_add_interface(s_entire_thing, s_add, f_add, p_open_paren, s_param_1)
568
- local chain_diff = {} ---@type ChainDiffElem[]
569
- local open_paren_diff = {i = p_open_paren, text = ""}
570
- chain_diff[1] = open_paren_diff
571
-
572
- local name, name_comma_or_paren, s_param_2 = process_param(chain_diff, s_param_1)
573
- if not name then return end
574
-
575
- if name_comma_or_paren == "," and not util.is_disabled(s_entire_thing, remote_add_module_flag) then
576
- util.extend_chain_diff_elem_text(chain_diff[3], "=(")
577
- chain_diff[4] = {i = s_param_2 --[[@as integer]]}
578
- util.add_diff(diffs, s_add - 1, s_add, text:sub(s_add - 1, s_add - 1).."--\\n")
579
- util.add_diff(diffs, s_add, f_add,
580
- "__typed_interfaces---@diagnostic disable-line:undefined-field\\n")
581
- util.add_chain_diff(chain_diff, diffs)
582
- end
583
- end
584
-
585
- ---remote.call
586
- ---this in particular needs to work as you're typing, not just once you're done
587
- ---which significantly complicates things, like we can't use the commas as reliable anchors
588
- ---@param s_entire_thing integer
589
- ---@param s_call integer
590
- ---@param f_call integer
591
- ---@param p_open_paren integer
592
- ---@param s_param_1 integer
593
- local function handle_call(s_entire_thing, s_call, f_call, p_open_paren, s_param_1)
594
- if util.is_disabled(s_entire_thing, remote_call_module_flag) then return end
595
-
596
- local chain_diff = {} ---@type ChainDiffElem[]
597
- local open_paren_diff = {i = p_open_paren, text = ""}
598
- chain_diff[1] = open_paren_diff
599
-
600
- local name, name_comma_or_paren, s_param_2 = process_param(chain_diff, s_param_1)
601
- if not name then return end
602
- ---@cast s_param_2 -nil
603
-
604
- if name_comma_or_paren == "," then
605
- local func, func_comma_or_paren, p_finish = process_param(chain_diff, s_param_2)
606
- if not func then return end
607
- ---@cast p_finish -nil
608
-
609
- chain_diff[6] = {i = p_finish}
610
- if func_comma_or_paren == ")" then
611
- util.extend_chain_diff_elem_text(chain_diff[5], "()")
612
- else
613
- if text:match("^%s*%)", p_finish) then
614
- util.extend_chain_diff_elem_text(chain_diff[5], "(,") -- unexpected symbol near ','
615
- else
616
- util.extend_chain_diff_elem_text(chain_diff[5], "(")
617
- end
618
- end
619
- end
620
-
621
- util.add_diff(diffs, s_call - 1, s_call, text:sub(s_call - 1, s_call - 1).."--\\n")
622
- util.add_diff(diffs, s_call, f_call,
623
- "__typed_interfaces---@diagnostic disable-line:undefined-field\\n")
624
- util.add_chain_diff(chain_diff, diffs)
625
- end
626
-
627
- util.reset_is_disabled_to_file_start()
628
- for f_remote, s_add_or_call in
629
- string.gmatch(text, "remote()%s*%.%s*()")--[[@as fun(): integer, integer]]
630
- do
631
- local s_entire_thing = f_remote - #"remote"
632
- local f_add_or_call, p_open_paren, s_param_1 = text:match("^add_interface()%s*()%(()", s_add_or_call)
633
- if f_add_or_call then
634
- handle_add_interface(s_entire_thing, s_add_or_call, f_add_or_call, p_open_paren, s_param_1)
635
- goto continue
636
- end
637
-
638
- f_add_or_call, p_open_paren, s_param_1 = text:match("^call()%s*()%(()", s_add_or_call)
639
- if f_add_or_call then
640
- handle_call(s_entire_thing, s_add_or_call, f_add_or_call, p_open_paren, s_param_1)
641
- goto continue
642
- end
643
-
644
- ::continue::
645
- end
646
- end
647
-
648
- return {
649
- replace = replace,
650
- }
651
- `});var wi={};Z(wi,{default:()=>dh});var dh,Tl=Q(()=>{dh=`--##
652
-
653
- local util = require("factorio-plugin.util")
654
- local require_module_flag = util.module_flags.require
655
-
656
- ---@param _ string @ The uri of file
657
- ---@param text string @ The content of file
658
- ---@param diffs Diff[] @ The diffs to add more diffs to
659
- ---@param args PluginArgs
660
- local function replace(_, text, diffs, args)
661
- util.reset_is_disabled_to_file_start()
662
- for f_require, start, name, finish in
663
- text:gmatch("require()%s*%(?%s*['\\"]()(.-)()['\\"]%s*%)?")--[=[@as fun(): integer, integer, string, integer]=]
664
- do
665
- local original_name = name
666
-
667
- ---Convert the mod name prefix if there is one
668
- name = name:gsub("^__(.-)__", "%1")
669
-
670
- --- Clusterio modules are structured with their source in 'plugin_name/module/'.
671
- --- The loader rewrites this to 'modules/plugin_name/', so it appears as 'require("modules/plugin_name/file")'.
672
- --- The loader also creates the file 'modules/plugin_name.lua' from 'plugin_name/module/module_exports.lua'
673
- --- Do a back substitution of both changes for all paths except modules/clusterio, as the clusterio repo
674
- --- has its sources at 'packages/host/modules/clusterio/api.lua'.
675
- if args.clusterio_modules and not name:find("^modules/clusterio/") then
676
- if name:find("^modules/[^/]-$") then
677
- -- 'modules/plugin_name' -> 'modules/plugin_name/module_exports'
678
- name = name .. "/module_exports"
679
- end
680
- -- 'modules/plugin_name/path/to/file' -> 'plugin_name/module/path/to/file'
681
- name = name:gsub("^modules/([^/]-)/", "%1/module/")
682
- end
683
-
684
- ---If the path has slashes in it, it may also have an extension
685
- ---the LS is not expecting. Factorio would also clobber any extension
686
- ---to .lua anyway. This just strips it to go with the default \`?.lua\`
687
- ---search pattern in "Lua.runtime.path"
688
- ---The test pattern checks for a dotted name after the final slash
689
- ---The replacement pattern then strips the last dotted segment
690
- if name:match("[\\\\/][^\\\\/]-%.[^.\\\\/]+$") then
691
- name = name:gsub("%.[^.\\\\/]+$", "")
692
- end
693
-
694
- if name ~= original_name and not util.is_disabled(f_require - 1, require_module_flag) then
695
- util.add_diff(diffs, start, finish, name)
696
- end
697
- end
698
- end
699
-
700
- return {
701
- replace = replace,
702
- }
703
- `});var vi={};Z(vi,{default:()=>ph});var ph,Cl=Q(()=>{ph=`--##
704
-
705
- local util = require("factorio-plugin.util")
706
- local storage_module_flag = util.module_flags.storage
707
- local workspace
708
- if not __plugin_dev then
709
- workspace = require("workspace")
710
- end
711
-
712
- ---[a-zA-Z0-9_]
713
- local identifier_char_lut = {["_"] = true}
714
- do
715
- ---@param from_char string
716
- ---@param to_char string
717
- local function add_range(from_char, to_char)
718
- for byte = string.byte(from_char), string.byte(to_char) do
719
- identifier_char_lut[string.char(byte)] = true
720
- end
721
- end
722
- add_range("a", "z")
723
- add_range("A", "Z")
724
- add_range("0", "9")
725
- end
726
-
727
- ---Rename \`storage\` so we can tell them apart!
728
- ---@param uri string @ The uri of file
729
- ---@param text string @ The content of file
730
- ---@param diffs Diff[] @ The diffs to add more diffs to
731
- local function replace(uri, text, diffs)
732
- ---Single Workspace/Folder OK, Multi Workspace OK, mods as root OK, mods_path as root uses __mods_path__
733
- ---Match on mods folder
734
- local this_mod, path_inside_mod = uri:match("mods[\\\\/]([^\\\\/]+)[\\\\/](.*)")
735
- if not this_mod then
736
- -- Being a bit more strict with a slash being before data as nobody should ever be renaming that folder
737
- this_mod, path_inside_mod = uri:match("[\\\\/]data[\\\\/]([^\\\\/]+)[\\\\/](.*)")
738
- end
739
-
740
- if not this_mod then
741
- path_inside_mod = uri
742
- if __plugin_dev then
743
- this_mod = "PluginDevModName"
744
- else
745
- this_mod = this_mod or workspace.getRootUri(uri)
746
- this_mod = this_mod and this_mod:match("[^/\\\\]+$")
747
- -- if \`this_mod\` is still nil at this point then we simply do nothing. using a fallback would
748
- -- ultimately do nothing because all cases where it didn't find a mod name would use the fallback,
749
- -- causing it to behave just the same as it would without using a fallback
750
- end
751
- end
752
-
753
- if this_mod then
754
- local inner_name = path_inside_mod:match("scenarios[\\\\/]([^\\\\/]+)[\\\\/]")
755
- local inner_type = "s"
756
- if not inner_name then
757
- local level
758
- inner_name,level = path_inside_mod:match("campaigns[\\\\/]([^\\\\/]+)[\\\\/]([^\\\\/]+)[\\\\/]")
759
- inner_name = inner_name and inner_name .. "__" .. level
760
- inner_type = "c"
761
- end
762
- if not inner_name then
763
- inner_name = path_inside_mod:match("tutorials[\\\\/]([^\\\\/]+)[\\\\/]")
764
- inner_type = "t"
765
- end
766
-
767
- if inner_name then
768
- this_mod = this_mod.."__"..inner_type.."__"..inner_name
769
- end
770
- this_mod = this_mod:gsub("[^a-zA-Z0-9_]","_")
771
- local storage_name = "__"..this_mod.."__storage"
772
-
773
- util.reset_is_disabled_to_file_start()
774
- for finish, ignore_pos, ignore_char in
775
- string.gmatch(text, "storage%f[^a-zA-Z0-9_]()%s*()([=.%[]?)")--[[@as fun(): integer, integer, string]]
776
- do
777
- local start = finish - #"storage"
778
- if identifier_char_lut[text:sub(start - 1, start - 1)] then goto continue end
779
-
780
- local preceding_start = start - 16
781
- local preceding_text = text:sub(preceding_start, start - 1)
782
- local dot_pos = preceding_text:match("()%.%s*$")
783
- if dot_pos then
784
- dot_pos = preceding_start + dot_pos - 1
785
- if text:sub(dot_pos - 1, dot_pos - 1) ~= "." -- If it's a concat, keep it.
786
- and text:sub(dot_pos - 2, dot_pos - 1) ~= "_G" -- Keep indexes into _G
787
- and text:sub(dot_pos - 4, dot_pos - 1) ~= "_ENV" -- and _ENV
788
- then
789
- goto continue
790
- end
791
- end
792
-
793
- if (ignore_char == "" and not preceding_text:find("=%s*$") and not preceding_text:find("%.%.%s*$"))
794
- or util.is_disabled(start, storage_module_flag)
795
- then
796
- goto continue
797
- end
798
-
799
- local before = text:sub(start - 1, start - 1)
800
- if before ~= "" then
801
- -- Put the newline on a separate diff before the one replacing 'storage',
802
- -- otherwise hovers and syntax highlighting doesn't work.
803
- -- This can cause issues if there is already a diff for that character,
804
- -- which is why it's using add_or_append_diff.
805
- util.add_or_append_diff(diffs, start - 1, before, " --\\n")
806
- end
807
- util.add_diff(diffs, start, finish, storage_name)
808
- if ignore_char == "" then
809
- ignore_pos = finish -- Move it directly next to \`storage\`, not past all the whitespace after it.
810
- end
811
- -- Put the diagnostic after the '.' otherwise code completion/suggestions don't work.
812
- util.add_diff(diffs, ignore_pos, ignore_pos + #ignore_char, ignore_char.."---@diagnostic disable-line:undefined-global\\n")
813
-
814
- ::continue::
815
- end
816
- end
817
- end
818
-
819
- return {
820
- replace = replace,
821
- }
822
- `});var Si={};Z(Si,{default:()=>mh});var mh,Il=Q(()=>{mh=`--##
823
-
824
- local floor_div = __plugin_dev
825
- and function(left, right) return math.floor(left / right) end
826
- or load("return function(left, right) return left // right end")()
827
- local band = __plugin_dev and bit32.band or load("return function(left, right) return left & right end")()
828
- local bor = __plugin_dev and bit32.bor or load("return function(left, right) return left | right end")()
829
- local bnot = __plugin_dev and bit32.bnot or load("return function(value) return ~value end")()
830
-
831
- ---@type table<integer, Diff>
832
- local diff_finish_pos_to_diff_map = {}
833
-
834
- local function clean_up_diff_finished_pos_to_diff_map()
835
- local next = next
836
- local k = next(diff_finish_pos_to_diff_map)
837
- while k do
838
- local next_k = next(diff_finish_pos_to_diff_map, k)
839
- diff_finish_pos_to_diff_map[k] = nil
840
- k = next_k
841
- end
842
- end
843
-
844
- ---extends the text of a ChainDiffElem or setting it if it is nil
845
- ---@param elem ChainDiffElem
846
- ---@param text string
847
- local function extend_chain_diff_elem_text(elem, text)
848
- if elem.text then
849
- elem.text = elem.text.. text
850
- else
851
- elem.text = text
852
- end
853
- end
854
-
855
- ---@param diffs Diff.ArrayWithCount
856
- ---@param start integer
857
- ---@param finish integer
858
- ---@param replacement string
859
- local function add_diff(diffs, start, finish, replacement)
860
- -- Finish is treated as including, but we want excluding for consistency with chain diffs.
861
- finish = finish - 1
862
- local count = diffs.count
863
- count = count + 1
864
- diffs.count = count
865
- ---@type Diff
866
- local diff = {
867
- start = start,
868
- finish = finish,
869
- text = replacement,
870
- }
871
- diffs[count] = diff
872
- diff_finish_pos_to_diff_map[finish] = diff
873
- end
874
-
875
- ---@param diffs Diff.ArrayWithCount
876
- ---@param position integer @ Position of a single character, instead of start and finish.
877
- ---@param prev_char string @ The character at the given position, before replacements.
878
- ---@param addition string @ The string to append after \`prev_char\`.
879
- local function add_or_append_diff(diffs, position, prev_char, addition)
880
- local diff = diff_finish_pos_to_diff_map[position]
881
- if diff then
882
- diff.text = diff.text..addition
883
- else
884
- return add_diff(diffs, position, position + 1, prev_char..addition)
885
- end
886
- end
887
-
888
- ---@param diffs Diff.ArrayWithCount
889
- local function remove_diff(diffs)
890
- local count = diffs.count
891
- diffs[count] = nil
892
- diffs.count = count - 1
893
- end
894
-
895
- ---if 'source' is a string wrapped in "" or '' get the string inside those quotes
896
- ---otherwise returns nil
897
- ---@param source string
898
- ---@return string|false
899
- local function try_parse_string_literal(source)
900
- ---@type string, integer
901
- local str, f_str = source:match("^[\\"']([^\\"']*)[\\"']%s*()")
902
- return f_str == #str and str
903
- end
904
-
905
- ---@param chain_diff ChainDiffElem[]
906
- ---@param i_in_chain_diff number @ index of the elem in \`chain_diff\` that represents the source
907
- ---@param source string
908
- ---@param is_literal_contents? boolean @ is 'source' the contents of a literal string already
909
- ---@param do_not_pad_with_white_space? boolean @ when using literal identifiers they get padded with a blank space to acuminate for replacing the quotes. If \`true\`, that padding is not added
910
- local function use_source_to_index(chain_diff, i_in_chain_diff, source, is_literal_contents, do_not_pad_with_white_space)
911
- local contents = is_literal_contents and source or try_parse_string_literal(source)
912
- if contents and contents:match("^[a-zA-Z_][a-zA-Z0-9_]*$") then
913
- -- source is a literal string and a valid identifier
914
- extend_chain_diff_elem_text(chain_diff[i_in_chain_diff - 1], ".")
915
- chain_diff[i_in_chain_diff].text = (do_not_pad_with_white_space and "" or " ")..contents
916
- else
917
- -- source is a variable, expression or literal string which is an invalid identifier
918
- extend_chain_diff_elem_text(chain_diff[i_in_chain_diff - 1], "[")
919
- extend_chain_diff_elem_text(chain_diff[i_in_chain_diff + 1], "]")
920
- -- leaves chain_diff[i_in_chain_diff] untouched
921
- end
922
- end
923
-
924
- ---@class ChainDiffElem
925
- ---@field i integer @ index within the text of the file
926
- ---@field text nil|string @ text replacing from this elem's \`i\` including to the next elem's \`i\` excluding. When nil no diff will be created. If the last elem has \`text\` it will treat it as if there was another elem after with with the same \`i\`
927
-
928
- ---creates diffs according to the chain_diff. See ChainDiffElem class description for how it works
929
- ---@param chain_diff ChainDiffElem[]
930
- ---@param diffs Diff.ArrayWithCount
931
- local function add_chain_diff(chain_diff, diffs)
932
- local prev_chain_diff_elem = chain_diff[1]
933
- if not prev_chain_diff_elem then return end
934
- for i = 2, #chain_diff do
935
- local chain_diff_elem = chain_diff[i]
936
- if prev_chain_diff_elem.text then
937
- local count = diffs.count
938
- count = count + 1
939
- diffs.count = count
940
- local finish = chain_diff_elem.i - 1 -- finish is treated as including, which we don't want
941
- ---@type Diff
942
- local diff = {
943
- start = prev_chain_diff_elem.i,
944
- finish = finish,
945
- text = prev_chain_diff_elem.text,
946
- }
947
- diffs[count] = diff
948
- diff_finish_pos_to_diff_map[finish] = diff
949
- end
950
- prev_chain_diff_elem = chain_diff_elem
951
- end
952
- if prev_chain_diff_elem.text then
953
- local count = diffs.count
954
- count = count + 1
955
- diffs.count = count
956
- local finish = prev_chain_diff_elem.i - 1
957
- ---@type Diff
958
- local diff = {
959
- start = prev_chain_diff_elem.i,
960
- finish = finish,
961
- text = prev_chain_diff_elem.text,
962
- }
963
- diffs[count] = diff
964
- diff_finish_pos_to_diff_map[finish] = diff
965
- end
966
- end
967
-
968
- ---@enum PluginDisableFlags
969
- local module_flags = {
970
- none = 0,
971
- command_line = 1,
972
- storage = 2,
973
- object_name = 4,
974
- remote_add = 8,
975
- remote_call = 16,
976
- require = 32,
977
- all = 63,
978
- }
979
-
980
- ---Always contains 1 element.\\
981
- ---This element must exist because the binary search expects at least 1 element. It searches for a value <=
982
- ---the given position, but this has to be 0 because 1 could be an index in the actual code already. So this 0
983
- ---basically defines the range starting at "before the code" until the first position, exclusive.
984
- ---@type integer[]
985
- local ranges = {0}
986
- ---@type PluginDisableFlags[]
987
- local ranges_flags = {module_flags.none} -- Indexes match up with \`disabled_positions\`.
988
- local ranges_count = 1
989
- local ranges_current_lower_bound = 0 -- Zero based.
990
-
991
- ---@param position integer @ The position to search for in \`ranges\`.
992
- ---@return integer found_index @ The position at this index is the greatest position which is <= \`position\`.
993
- local function binary_search_ranges(position)
994
- local lower_bound = ranges_current_lower_bound -- Zero based, inclusive.
995
- local upper_bound = ranges_count -- Zero based, exclusive.
996
- repeat
997
- local i = floor_div(lower_bound + upper_bound, 2)
998
- if ranges[i + 1] <= position then
999
- lower_bound = i + 1 -- It's inclusive, so +1 to make it not check this index twice.
1000
- else
1001
- upper_bound = i -- It's exclusive, it won't check this index twice.
1002
- end
1003
- until lower_bound == upper_bound
1004
- return lower_bound - 1
1005
- end
1006
-
1007
- ---@param position integer
1008
- ---@param flag PluginDisableFlags
1009
- ---@return boolean
1010
- local function is_disabled(position, flag)
1011
- local index = binary_search_ranges(position)
1012
- ranges_current_lower_bound = index
1013
- local flags = ranges_flags[index + 1] -- + 1 to go from zero to one based.
1014
- return band(flags, flag) ~= 0
1015
- end
1016
-
1017
- local function reset_is_disabled_to_file_start()
1018
- ranges_current_lower_bound = 0
1019
- end
1020
-
1021
- local function clean_up_disabled_data()
1022
- -- Not \`nil\`ing out \`ranges\` nor \`ranges_flags\` because count is tracked separately.
1023
- -- Lua doesn't shrink tables anyway, and even if LuaLS's version of Lua does shrink
1024
- -- tables, we don't want it to shrink these tables, because they're constantly reused.
1025
- ranges_count = 1
1026
- ranges_current_lower_bound = 0
1027
- end
1028
-
1029
- ---@param position integer @ One based.
1030
- ---@param flags PluginDisableFlags
1031
- local function append_range_flags(position, flags)
1032
- if ranges_flags[ranges_count] == flags then return end
1033
- ranges_count = ranges_count + 1
1034
- ranges[ranges_count] = position
1035
- ranges_flags[ranges_count] = flags
1036
- end
1037
-
1038
- ---@param index integer @ Zero based. Can be past \`ranges_count\`. Otherwise must be
1039
- ---the index of a position which is equal or adjacent to the given position arg.
1040
- ---@param position integer @ One based.
1041
- ---@param flags PluginDisableFlags
1042
- ---@return integer? modified_index @ Non \`nil\` when flags got set at a different \`index\`.
1043
- ---(Can also still return the same index as given by the \`index\` arg.)
1044
- local function set_flags_at(index, position, flags)
1045
- if index > ranges_count then
1046
- -- assert(index == ranges_count + 1) -- This assert is true, but it doesn't really matter.
1047
- return append_range_flags(position, flags)
1048
- end
1049
- local pos_at_index = ranges[index]
1050
- if pos_at_index == position then -- Same position, just overwrite.
1051
- -- Even if this causes 2 consecutive ranges to have the same flags, it's not worth using \`table.remove\`.
1052
- ranges_flags[index] = flags
1053
- return
1054
- end
1055
- if pos_at_index < position then -- Greater position, insert after \`index\`.
1056
- if index == ranges_count then -- Appending is faster than inserting.
1057
- return append_range_flags(position, flags) -- Tail call.
1058
- end
1059
- index = index + 1
1060
- end
1061
- if ranges_flags[index - 1] == flags then return end -- Phew, nothing to do, don't have to insert.
1062
- if ranges_flags[index] == flags then -- Phew, can just move the next range to start a bit earlier.
1063
- ranges[index] = position
1064
- return index
1065
- end
1066
- -- Alright fine, has to insert.
1067
- ranges_count = ranges_count + 1
1068
- table.insert(ranges, index, position)
1069
- table.insert(ranges_flags, index, flags)
1070
- return index
1071
- end
1072
-
1073
- ---@param start_position integer @ One based, inclusive. Is allowed to be \`== ranges[ranges_count]\`.
1074
- ---@param stop_position integer? @ Default: infinity. One based, exclusive. Must be > \`start_position\`.
1075
- ---@param start_flags PluginDisableFlags
1076
- ---@param stop_flags PluginDisableFlags
1077
- local function append_flags_range(start_position, stop_position, start_flags, stop_flags)
1078
- set_flags_at(ranges_count, start_position, start_flags) -- Will overwrite at \`ranges_count\` or append.
1079
- if stop_position then
1080
- return append_range_flags(stop_position, stop_flags) -- Tail call.
1081
- end
1082
- end
1083
-
1084
- ---@param start_position integer @ One based, inclusive.
1085
- ---@param stop_position integer? @ Default: infinity. One based, exclusive. Must be >= \`start_position\`.
1086
- ---@param flags_to_combine PluginDisableFlags
1087
- ---@param binary_op fun(left: integer, right: integer): integer
1088
- local function combine_flags_for_range(start_position, stop_position, flags_to_combine, binary_op)
1089
- if start_position == stop_position then return end
1090
-
1091
- if start_position >= ranges[ranges_count] then -- Update last or append.
1092
- local original_flags = ranges_flags[ranges_count]
1093
- local combined_flags = binary_op(original_flags, flags_to_combine)
1094
- return append_flags_range(start_position, stop_position, combined_flags, original_flags) -- Tail call.
1095
- end
1096
-
1097
- -- +1 to make it 1 based.
1098
- local index = binary_search_ranges(start_position) + 1
1099
- local original_flags = ranges_flags[index] -- The flags to restore at \`stop_position\`.
1100
- index = set_flags_at(index, start_position, binary_op(original_flags, flags_to_combine)) or index
1101
-
1102
- stop_position = stop_position or (1/0)
1103
- index = index + 1
1104
- while index <= ranges_count do
1105
- if ranges[index] >= stop_position then break end
1106
- original_flags = ranges_flags[index] -- Update the flags to restore.
1107
- ranges_flags[index] = binary_op(original_flags, flags_to_combine)
1108
- index = index + 1
1109
- end
1110
-
1111
- if stop_position ~= (1/0) then
1112
- if ranges[index] == stop_position then return end -- Do not overwrite, only insert or append.
1113
- -- The reason is that if there already is a range start at this stop_index, then the range
1114
- -- that just got set is already terminated properly. Overwriting would just break the next range.
1115
- return set_flags_at(index, stop_position, original_flags) -- Tail call.
1116
- end
1117
- end
1118
-
1119
- ---@param start_position integer
1120
- ---@param stop_position integer? @ Default: infinity. One based, exclusive. Must be > \`start_position\`.
1121
- ---@param flags_to_add PluginDisableFlags
1122
- local function add_flags_to_range(start_position, stop_position, flags_to_add)
1123
- return combine_flags_for_range(start_position, stop_position, flags_to_add, bor) -- Tail call.
1124
- end
1125
-
1126
- ---@param start_position integer
1127
- ---@param stop_position integer? @ Default: infinity. One based, exclusive. Must be > \`start_position\`.
1128
- ---@param flags_to_remove PluginDisableFlags
1129
- local function remove_flags_from_range(start_position, stop_position, flags_to_remove)
1130
- return combine_flags_for_range(start_position, stop_position, bnot(flags_to_remove), band) -- Tail call.
1131
- end
1132
-
1133
- local module_name_intellisense = [[
1134
- __plugin_dummy(({---@diagnostic disable-line:undefined-global
1135
- ---Removal of \`/c\` and friends at the start of a line.
1136
- command_line=true,
1137
- ---Replacement of expressions involving \`storage\` to help the language sever distinguish storage tables between different mods.
1138
- storage=true,
1139
- ---Rearrangement of \`obj.object_name == "LuaEntity"\` for the language server to perform type narrowing, same as how \`type()\` works.
1140
- object_name=true,
1141
- ---Hacks for \`remote.add_interface\` to look like table assignments, allowing the remote_add hack to provide intellisense.
1142
- remote_add=true,
1143
- ---Hacks for \`remote.call\` to look like table indexes into a fake table with all found remote interfaces to provide intellisense.
1144
- remote_call=true,
1145
- ---Mainly removal of the \`__\` in \`require("__mod-name__.file")\` for better cross mod file resolution.
1146
- require=true,
1147
- }).]]
1148
-
1149
- ---@type integer[]|{count: integer}
1150
- local line_start_slashes = {count = 0}
1151
-
1152
- local parse_strings_comments_and_annotations
1153
- do
1154
- ---@type string
1155
- local source
1156
- ---@type Diff.ArrayWithCount
1157
- local diffs
1158
- ---@type integer?
1159
- local cursor
1160
- ---@type integer
1161
- local line_start
1162
-
1163
- ---\`cursor\` must not be \`nil\`.\\
1164
- ---Tries matching the given pattern at the current cursor and advances the cursor if successful.
1165
- ---@param pattern string
1166
- ---@return boolean @ Did it match?
1167
- local function take(pattern)
1168
- local _, stop = string.find(source, pattern, cursor)
1169
- if not stop then return false end
1170
- cursor = stop + 1
1171
- return true
1172
- end
1173
-
1174
- ---Parse a opening long bracket, like \`[[\` or \`[=[\`
1175
- ---Assumes the first bracket has already been consumed.
1176
- ---@return integer? level @ \`nil\` when there isn't a valid open bracket.
1177
- local function parse_long_bracket_open()
1178
- -- Consume all the '='s
1179
- local match = source:match("^=*%[()", cursor)
1180
- if not match then return nil end
1181
- local level = match - cursor - 1
1182
- cursor = match
1183
- return level
1184
- end
1185
-
1186
- ---@param start_position integer
1187
- ---@param quote \`"\`|\`'\`
1188
- local function parse_short_string(start_position, quote)
1189
- local pattern = "()[\\\\"..quote.."\\r\\n]"
1190
- while cursor do
1191
- cursor = string.match(source, pattern, cursor)
1192
- if not cursor then return end
1193
- if not take("^\\\\") then
1194
- cursor = cursor + 1 -- Consume quote or newline (Don't care about 2 char wide newlines).
1195
- add_flags_to_range(start_position, cursor, module_flags.all)
1196
- return
1197
- end
1198
- -- \`\\\` has been consumed.
1199
- local escaped_char = source:sub(cursor, cursor)
1200
- cursor = cursor + 1 -- Consume escaped char.
1201
- if escaped_char == "z" then
1202
- cursor = string.match(source, "^%s*()", cursor)
1203
- goto continue
1204
- end
1205
- if escaped_char == "\\n" or escaped_char == "\\r" then
1206
- if string.find(source, escaped_char == "\\n" and "^\\r" or "^\\n", cursor) then
1207
- -- Handle \`\\r\\n\` and \`\\n\\r\` in source files. They are both treated as a single newline in Lua.
1208
- -- (And they are converted to just \`\\n\`, but we don't care about that here.)
1209
- cursor = cursor + 1
1210
- end
1211
- goto continue
1212
- end
1213
- -- All other escaped characters, valid or not, don't require special handling.
1214
- ::continue::
1215
- end
1216
- end
1217
-
1218
- ---@param start_position integer
1219
- ---@param level integer @ The amount of \`=\` between the square brackets
1220
- local function parse_long_string(start_position, level)
1221
- cursor = string.match(source, "%]"..string.rep("=", level).."%]()", cursor)
1222
- add_flags_to_range(start_position, cursor, module_flags.all)
1223
- end
1224
-
1225
- ---@return PluginDisableFlags
1226
- local function parse_module_flags_list()
1227
- local flags = module_flags.none
1228
- repeat
1229
- local s_module_name, module_name, f_module_name, p_comma
1230
- local start_pos = cursor--[[@as integer]]
1231
- ---@type integer, string, integer, integer, integer
1232
- s_module_name, module_name, f_module_name, p_comma, cursor
1233
- = string.match(source, "^[^%S\\r\\n]*()([%a_]*)()[^%S\\r\\n]*(),?()", cursor)
1234
- local module_flag = module_flags[module_name]
1235
- if not module_flag then-- Invalid 'module_name'.
1236
- -- Add a newline followed by a function call (to make it valid both as a statement and in
1237
- -- table constructors). The first argument to the call is a table constructor wrapped in
1238
- -- '()' followed by '.' to instantly index into that constructed table. The table contains
1239
- -- all the valid module names with a short comment describing what that module does.
1240
- add_diff(diffs, start_pos - 1, start_pos,
1241
- string.sub(source, start_pos - 1, start_pos - 1).."\\n"..module_name_intellisense
1242
- )
1243
- -- Must be split into 2 diffs like this to actually get the intellisense from the "table index".
1244
- -- Using an undefined global to get a warning. Extra ',' in the argument list to ensure
1245
- -- there is an error visible to the programmer, even with undefined global warnings disabled.
1246
- -- ';' at the end because it is valid both in statement and in table constructor context.
1247
- add_diff(diffs, s_module_name, f_module_name,
1248
- module_name..","..(module_name == "" and "missing" or "invalid").."_module_name,);--"
1249
- )
1250
- goto continue
1251
- end
1252
- -- if band(flags, module_flag) ~= 0 then end -- Duplicate 'module_name' in list.
1253
- flags = bor(flags, module_flag)
1254
- ::continue::
1255
- until p_comma == cursor
1256
- return flags
1257
- end
1258
-
1259
- local valid_tags_lut = {
1260
- ["disable-next-line"] = true,
1261
- ["disable-line"] = true,
1262
- ["disable"] = true,
1263
- ["enable"] = true,
1264
- }
1265
-
1266
- ---@param init_position integer
1267
- ---@return integer?
1268
- local function find_next_line_start(init_position)
1269
- local char, pos = string.match(source, "([\\r\\n])()", init_position)
1270
- if not char then return end
1271
- return string.find(source, char == "\\n" and "^\\r" or "^\\n", init_position)
1272
- and pos + 1
1273
- or pos
1274
- end
1275
-
1276
- ---@param init_position integer
1277
- ---@return integer
1278
- local function find_next_line_start_or_eof(init_position)
1279
- return find_next_line_start(init_position) or (#source + 1)
1280
- end
1281
-
1282
- local function parse_plugin_annotation()
1283
- ---@cast cursor -nil
1284
- ---@type integer, string, integer, integer
1285
- local s_tag, tag, colon_pos, done_pos = string.match(source, "^[^%S\\r\\n]*()([%a%-]*)[^%S\\r\\n]*():?()", cursor)
1286
- if (cursor == s_tag and tag == "")
1287
- or (cursor ~= s_tag and not valid_tags_lut[tag])
1288
- then
1289
- add_diff(diffs, cursor - #"plugin", cursor, "diagnostic") -- To get disable/enable etc suggestions.
1290
- return
1291
- end
1292
- if cursor == s_tag then return end -- It isn't actually an ---@plugin annotation.
1293
-
1294
- cursor = done_pos
1295
- local flags = colon_pos == done_pos
1296
- and module_flags.all -- No colon.
1297
- or parse_module_flags_list() -- Has colon, must have a list of flags.
1298
-
1299
- if flags == module_flags.none then return end -- Short circuit.
1300
-
1301
- if tag == "disable-next-line" then
1302
- local next_line_start = find_next_line_start(done_pos)
1303
- if next_line_start then
1304
- add_flags_to_range(next_line_start, find_next_line_start_or_eof(next_line_start), flags)
1305
- end
1306
- elseif tag == "disable-line" then
1307
- add_flags_to_range(line_start, find_next_line_start_or_eof(done_pos), flags)
1308
- elseif tag == "disable" then
1309
- add_flags_to_range(cursor, nil, flags)
1310
- elseif tag == "enable" then
1311
- remove_flags_from_range(cursor, nil, flags)
1312
- else
1313
- error("Impossible tag "..tostring(tag).." because the tag has already been checked using valid_tags_lut.")
1314
- end
1315
- end
1316
-
1317
- local function process_start_of_line()
1318
- if not cursor then return end
1319
- line_start = cursor -- The next line starts after the newline character. Cursor has already advanced.
1320
- if take("^/") then
1321
- line_start_slashes.count = line_start_slashes.count + 1
1322
- line_start_slashes[line_start_slashes.count] = line_start
1323
- end
1324
- -- During the creation of \`ranges\` and \`ranges_flags\` there can be overlapping ranges,
1325
- -- mainly due to ---@plugin disable-next-line and disable-line.
1326
- -- When this happens, the functions for adding or removing flags for ranges perform
1327
- -- binary searches to find the index to insert at. However since overlapping ranges can
1328
- -- only occur within the current line, once done with a line the lower bound can be shifted up.
1329
- if line_start >= ranges[ranges_count] then
1330
- ranges_current_lower_bound = ranges_count
1331
- else -- There are already ranges on this next line, find the index for the start of the line.
1332
- ranges_current_lower_bound = binary_search_ranges(line_start)
1333
- end
1334
- end
1335
-
1336
- ---@param start_position integer
1337
- local function parse_short_comment(start_position)
1338
- if take("^%-") then
1339
- cursor = string.match(source, "^[^%S\\r\\n]*()", cursor)
1340
- if take("^@plugin") then
1341
- parse_plugin_annotation()
1342
- end
1343
- end
1344
- -- Technically in Lua newline chars are not part of the single line comment anymore,
1345
- -- however this distinction does not matter here, in fact this is more efficient
1346
- -- because it can allow for ranges to be combined into 1.
1347
- cursor = find_next_line_start(cursor)
1348
- add_flags_to_range(start_position, cursor, module_flags.all)
1349
- process_start_of_line()
1350
- end
1351
-
1352
- local function parse()
1353
- while cursor do
1354
- local current_char
1355
- -- rapid advance to the next interesting character
1356
- current_char, cursor = string.match(source, "([-[\\"'\\r\\n])()", cursor)
1357
- if not cursor then break end
1358
- local anchor = cursor - 1 -- -1 because \`cursor\` already advanced past \`current_char\`.
1359
-
1360
- if current_char == "-" then
1361
- if not take("^%-") then goto continue end
1362
- if not take("^%[") then
1363
- parse_short_comment(anchor)
1364
- goto continue
1365
- end
1366
- -- \`[\` has been consumed.
1367
- local level = parse_long_bracket_open()
1368
- if level then
1369
- parse_long_string(anchor, level)
1370
- else
1371
- cursor = cursor - 1 -- Don't consume \`[\`.
1372
- parse_short_comment(anchor)
1373
- end
1374
- elseif current_char == "[" then
1375
- local level = parse_long_bracket_open()
1376
- if level then
1377
- parse_long_string(anchor, level)
1378
- end
1379
- elseif current_char == '"' or current_char == "'" then
1380
- parse_short_string(anchor, current_char)
1381
- elseif current_char == "\\r" or current_char == "\\n" then
1382
- process_start_of_line()
1383
- else
1384
- error("Impossible current_char '"..tostring(current_char).."'.")
1385
- end
1386
- ::continue::
1387
- end
1388
- end
1389
-
1390
- ---Lexically analyze Lua source files for positions of strings and comments.
1391
- ---Notably, this needs to be able to handle 'long brackets', which are context-sensitive.
1392
- ---Also parses ---@plugin annotations.
1393
- ---This is only run once per file.
1394
- ---@param text string
1395
- ---@param diffs_array Diff.ArrayWithCount
1396
- function parse_strings_comments_and_annotations(text, diffs_array)
1397
- source = text
1398
- diffs = diffs_array
1399
- cursor = 1 -- 1 is the first character in the source file.
1400
- line_start = 1
1401
- line_start_slashes.count = 0
1402
- parse()
1403
- -- If it is currently still inside of a string or comment, that range will not get closed.
1404
- -- That's fine however because nothing will be checking if a position past the end of the
1405
- -- file is code, a string or a comment.
1406
- end
1407
- end
1408
-
1409
- ---@param text string
1410
- ---@param diffs Diff.ArrayWithCount
1411
- local function on_pre_process_file(text, diffs)
1412
- parse_strings_comments_and_annotations(text, diffs)
1413
- end
1414
-
1415
- local function on_post_process_file()
1416
- clean_up_diff_finished_pos_to_diff_map()
1417
- clean_up_disabled_data()
1418
- end
1419
-
1420
- return {
1421
- module_flags = module_flags,
1422
- is_disabled = is_disabled,
1423
- reset_is_disabled_to_file_start = reset_is_disabled_to_file_start,
1424
- add_diff = add_diff,
1425
- add_or_append_diff = add_or_append_diff,
1426
- remove_diff = remove_diff,
1427
- add_chain_diff = add_chain_diff,
1428
- extend_chain_diff_elem_text = extend_chain_diff_elem_text,
1429
- try_parse_string_literal = try_parse_string_literal,
1430
- use_source_to_index = use_source_to_index,
1431
- line_start_slashes = line_start_slashes,
1432
- on_pre_process_file = on_pre_process_file,
1433
- on_post_process_file = on_post_process_file,
1434
- }
1435
- `});var Ri={};Z(Ri,{default:()=>_h});var _h,Dl=Q(()=>{_h=`---@meta _\r
1436
- \r
1437
- ---@class event_handler\r
1438
- ---@field events? event_handler.events\r
1439
- ---@field on_nth_tick? {[number]:fun(event:NthTickEventData)}\r
1440
- ---@field on_init? fun()\r
1441
- ---@field on_load? fun()\r
1442
- ---@field on_configuration_changed? fun(data:ConfigurationChangedData)\r
1443
- ---@field add_remote_interface? fun()\r
1444
- ---@field add_commands? fun()\r
1445
- \r
1446
- ---@class event_handler_lib\r
1447
- local handler = {}\r
1448
- \r
1449
- ---@param lib event_handler\r
1450
- handler.add_lib = function(lib) end\r
1451
- \r
1452
- ---@param libs event_handler[]\r
1453
- handler.add_libraries = function(libs) end\r
1454
- \r
1455
- return handler`});var Pi={};Z(Pi,{default:()=>yh});var yh,$l=Q(()=>{yh=`---@meta\r
1456
- \r
1457
- ---@class meld\r
1458
- ---@field private control_marker meld.control_marker\r
1459
- ---@field private control_handlers meld.control_handlers\r
1460
- ---@overload fun(target:table, source:table):table\r
1461
- local meld = {}\r
1462
- \r
1463
- ---@class (exact) meld.control_marker\r
1464
- meld.control_marker = {} -- empty but unique table used as a marker\r
1465
- \r
1466
- ---@class meld.control_handlers\r
1467
- meld.control_handlers = {}\r
1468
- \r
1469
- ---@class (exact) meld.control_op\r
1470
- ---@field marker meld.control_marker\r
1471
- \r
1472
- ---@class (exact) meld.delete_op : meld.control_op\r
1473
- ---@field op "delete"\r
1474
- \r
1475
- ---@return meld.delete_op\r
1476
- meld.delete = function() end\r
1477
- \r
1478
- meld.control_handlers.delete = function(target, k, v)\r
1479
- target[k] = nil\r
1480
- end\r
1481
- \r
1482
- ---@class (exact) meld.overwrite_op : meld.control_op\r
1483
- ---@field op "overwrite"\r
1484
- ---@field data any\r
1485
- \r
1486
- ---@return meld.overwrite_op\r
1487
- meld.overwrite = function(new) end\r
1488
- \r
1489
- meld.control_handlers.overwrite = function(target, k, v)\r
1490
- target[k] = util.copy(v.data)\r
1491
- end\r
1492
- \r
1493
- ---@class (exact) meld.invoke_op : meld.control_op\r
1494
- ---@field op "invoke"\r
1495
- ---@field fct fun(v:any):any\r
1496
- \r
1497
- ---@return meld.invoke_op\r
1498
- meld.invoke = function(fct) end\r
1499
- \r
1500
- meld.control_handlers.invoke = function(target, k, v)\r
1501
- target[k] = v.fct(target[k])\r
1502
- end\r
1503
- \r
1504
- ---@class (exact) meld.append_op : meld.control_op\r
1505
- ---@field op "append"\r
1506
- ---@field data any[]\r
1507
- \r
1508
- ---@return meld.append_op\r
1509
- meld.append = function(data) end\r
1510
- meld.control_handlers.append = function(target, k, v)\r
1511
- for _, to_append in pairs(v.data) do\r
1512
- table.insert(target[k], util.copy(to_append))\r
1513
- end\r
1514
- end\r
1515
- \r
1516
- --- recursive table merge but it reuses target table (does not deepcopy it). When target is not to be reused or more than\r
1517
- --- 2 tables are to be merged, consider using util.merge. When there is conflict of 2 values, a value from the source will\r
1518
- --- win overwriting the existing value. There are also control structures available for extra operations that would not\r
1519
- --- be possible under normal merge rules\r
1520
- ---@generic T\r
1521
- ---@param target T\r
1522
- ---@param source table\r
1523
- ---@return T\r
1524
- meld.meld = function(target, source) end\r
1525
- \r
1526
- return meld`});var Ei={};Z(Ei,{default:()=>vh});var vh,Fl=Q(()=>{vh=`---@meta\r
1527
- \r
1528
- --[[\r
1529
- Hello script explorer, if you are looking to upgrade your mod to use the mod gui, its pretty simple.\r
1530
- \r
1531
- Typically you will have something like: \`player.gui.left.add{...}\`\r
1532
- \r
1533
- All you will need to do, is change it to:\r
1534
- \`\`\`lua\r
1535
- mod_gui.get_frame_flow(player).add{...}\r
1536
- \`\`\`\r
1537
- \r
1538
- And for buttons its just the same:\r
1539
- \`\`\`lua\r
1540
- mod_gui.get_button_flow(player).add{...}\r
1541
- \`\`\`\r
1542
- \r
1543
- It should be as simple as find and replace.\r
1544
- Any other questions please feel free to ask on the modding help forum.\r
1545
- ]]\r
1546
- ---@class mod-gui\r
1547
- local mod_gui = {\r
1548
- button_style = 'mod_gui_button',\r
1549
- frame_style = 'non_draggable_frame'\r
1550
- }\r
1551
- \r
1552
- ---@param player LuaPlayer\r
1553
- ---@return LuaGuiElement #The mod_gui button flow\r
1554
- function mod_gui.get_button_flow(player) end\r
1555
- \r
1556
- ---@param player LuaPlayer\r
1557
- ---@return LuaGuiElement #The mod_gui frame flow\r
1558
- function mod_gui.get_frame_flow(player) end\r
1559
- \r
1560
- return mod_gui`});var xi={};Z(xi,{default:()=>Rh});var Rh,Ol=Q(()=>{Rh=`---@meta\r
1561
- \r
1562
- ---@class util\r
1563
- util = {\r
1564
- table = {}\r
1565
- }\r
1566
- \r
1567
- ---Deep copies a table\r
1568
- ---@generic T\r
1569
- ---@param object T\r
1570
- ---@return T\r
1571
- function table.deepcopy(object) end\r
1572
- \r
1573
- ---Compares a table for shallow equality\r
1574
- ---@param tbl1 any\r
1575
- ---@param tbl2 any\r
1576
- ---@return boolean\r
1577
- function table.compare(tbl1, tbl2) end\r
1578
- \r
1579
- util.table.deepcopy = table.deepcopy\r
1580
- util.table.compare = table.compare\r
1581
- util.copy = util.table.deepcopy\r
1582
- \r
1583
- ---The distance between two MapPositions\r
1584
- ---@param position1 MapPosition\r
1585
- ---@param position2 MapPosition\r
1586
- ---@return double\r
1587
- function util.distance(position1, position2) end\r
1588
- \r
1589
- ---@param pos MapPosition\r
1590
- ---@return string\r
1591
- function util.positiontostr(pos) end\r
1592
- \r
1593
- ---@param ticks uint\r
1594
- ---@return string\r
1595
- function util.formattime(ticks) end\r
1596
- \r
1597
- --- supports 'rrggbb', 'rgb', 'rrggbbaa', 'rgba', 'ww', 'w'\r
1598
- ---@param hex string\r
1599
- ---@return Color\r
1600
- function util.color(hex) end\r
1601
- \r
1602
- ---Multiplies all color channels by alpha\r
1603
- ---@generic T: Color\r
1604
- ---@param color T\r
1605
- ---@return T\r
1606
- function util.premul_color(color) end\r
1607
- \r
1608
- ---Mixes two colors together\r
1609
- ---@param c1 Color\r
1610
- ---@param c2 Color\r
1611
- ---@return Color\r
1612
- function util.mix_color(c1, c2) end\r
1613
- \r
1614
- ---@param c1 Color\r
1615
- ---@param n number\r
1616
- ---@return Color\r
1617
- function util.multiply_color(c1, n) end\r
1618
- \r
1619
- ---@param color Color\r
1620
- ---@param alpha number\r
1621
- ---@param normalized_alpha boolean?\r
1622
- ---@return Color\r
1623
- function util.get_color_with_alpha(color, alpha, normalized_alpha) end\r
1624
- \r
1625
- ---@type {[defines.direction]:Vector}\r
1626
- util.direction_vectors = {\r
1627
- [defines.direction.north] = { 0, -1 },\r
1628
- [defines.direction.northnortheast] = { 1, -2 },\r
1629
- [defines.direction.northeast] = { 1, -1 },\r
1630
- [defines.direction.eastnortheast] = { 2, -1 },\r
1631
- [defines.direction.east] = { 1, 0 },\r
1632
- [defines.direction.eastsoutheast] = { 2, 1 },\r
1633
- [defines.direction.southeast] = { 1, 1 },\r
1634
- [defines.direction.southsoutheast] = { 1, 2 },\r
1635
- [defines.direction.south] = { 0, 1 },\r
1636
- [defines.direction.southsouthwest] = {-1, 2 },\r
1637
- [defines.direction.southwest] = {-1, 1 },\r
1638
- [defines.direction.westsouthwest] = {-2, 1 },\r
1639
- [defines.direction.west] = {-1, 0 },\r
1640
- [defines.direction.westnorthwest] = {-2, -1 },\r
1641
- [defines.direction.northwest] = {-1, -1 },\r
1642
- [defines.direction.northnorthwest] = {-1, -2 },\r
1643
- }\r
1644
- \r
1645
- ---@param position Vector\r
1646
- ---@param direction defines.direction\r
1647
- ---@param distance number\r
1648
- ---@return Vector\r
1649
- function util.moveposition(position, direction, distance) end\r
1650
- \r
1651
- \r
1652
- ---@param position Vector\r
1653
- ---@param orientation number\r
1654
- ---@return Vector\r
1655
- function util.rotate_position(position, orientation) end\r
1656
- \r
1657
- ---@param direction defines.direction\r
1658
- ---@return defines.direction\r
1659
- function util.oppositedirection(direction) end\r
1660
- \r
1661
- ---@param count integer\r
1662
- ---@param stripes table\r
1663
- ---@return table\r
1664
- function util.multiplystripes(count, stripes) end\r
1665
- \r
1666
- ---@param x number\r
1667
- ---@param y number\r
1668
- ---@return Vector\r
1669
- function util.by_pixel(x, y) end\r
1670
- \r
1671
- ---@param x number\r
1672
- ---@param y number\r
1673
- ---@return Vector\r
1674
- function util.by_pixel_hr(x, y) end\r
1675
- \r
1676
- ---@generic T: table\r
1677
- ---@param table_ T\r
1678
- ---@param fun_ fun(t: T)\r
1679
- ---@return T\r
1680
- function util.foreach_sprite_definition(table_, fun_) end\r
1681
- \r
1682
- ---@param a Vector\r
1683
- ---@param b Vector\r
1684
- ---@return Vector\r
1685
- function util.add_shift(a, b) end\r
1686
- \r
1687
- ---@generic T: table\r
1688
- ---@param offset_ Vector\r
1689
- ---@param table_ T\r
1690
- ---@return T\r
1691
- function util.add_shift_offset(offset_, table_) end\r
1692
- \r
1693
- ---@generic T: Vector\r
1694
- ---@param shift T\r
1695
- ---@param scale number\r
1696
- ---@return T|Vector\r
1697
- function util.mul_shift(shift, scale) end\r
1698
- \r
1699
- ---@param amount number\r
1700
- ---@param append_suffix boolean?\r
1701
- ---@return string\r
1702
- function util.format_number(amount, append_suffix) end\r
1703
- \r
1704
- ---@generic K: AnyBasic\r
1705
- ---@param t {[K]:number}\r
1706
- ---@param k K\r
1707
- ---@param v? number\r
1708
- function util.increment(t, k, v) end\r
1709
- \r
1710
- ---If both value and data are truthy, returns data, otherwise returns false\r
1711
- ---@generic D: any\r
1712
- ---@param value any\r
1713
- ---@param data D\r
1714
- ---@return D|false\r
1715
- function util.conditional_return(value, data) end\r
1716
- \r
1717
- -- Recursively merges and/or deep-copies tables.\r
1718
- -- Entries in later tables override entries in earlier ones, unless\r
1719
- -- both entries are themselves tables, in which case they are recursively merged.\r
1720
- -- Non-merged tables are deep-copied, so that the result is brand new.\r
1721
- ---@param tables table[]\r
1722
- ---@return table\r
1723
- function util.merge(tables) end\r
1724
- \r
1725
- ---@param entity LuaControl?\r
1726
- ---@param item_dict ItemStackDefinition?\r
1727
- util.insert_safe = function(entity, item_dict) end\r
1728
- \r
1729
- ---@param entity LuaControl?\r
1730
- ---@param item_dict ItemStackDefinition?\r
1731
- util.remove_safe = function(entity, item_dict) end\r
1732
- \r
1733
- ---@param string string\r
1734
- ---@return string[]\r
1735
- util.split_whitespace = function(string) end\r
1736
- \r
1737
- ---@param inputstr string\r
1738
- ---@param sep string\r
1739
- ---@return string[]\r
1740
- util.split = function(inputstr, sep) end\r
1741
- \r
1742
- ---@param str string\r
1743
- ---@param start string\r
1744
- ---@return boolean\r
1745
- util.string_starts_with = function(str, start) end\r
1746
- \r
1747
- ---@param str string\r
1748
- ---@param what string\r
1749
- ---@param with string\r
1750
- util.string_replace = function(str, what, with) end\r
1751
- \r
1752
- ---@generic X: number, Lower: number, Upper: number\r
1753
- ---@param x X\r
1754
- ---@param lower Lower\r
1755
- ---@param upper Upper\r
1756
- ---@return X|Lower|Upper\r
1757
- util.clamp = function(x, lower, upper) end\r
1758
- \r
1759
- ---@return string\r
1760
- util.get_walkable_tile = function() end\r
1761
- \r
1762
- -- This function takes 2 icons tables, and adds the second to the first, but applies scale,\r
1763
- -- shift and tint to the entire second set.\\\r
1764
- -- This allows you to manipulate the entire second icons table in the same way as you would\r
1765
- -- manipulate a single icon when adding to the icons table.\r
1766
- ---@param icons1 data.IconData[]\r
1767
- ---@param icons2 data.IconData[]\r
1768
- ---@param inputs {["scale"]:number?, ["shift"]:Vector?, ["tint"]:Color?}\r
1769
- ---@param default_icon_size integer\r
1770
- ---@return data.IconData[]\r
1771
- function util.combine_icons(icons1, icons2, inputs, default_icon_size) end\r
1772
- \r
1773
- ---@param technology_icon string\r
1774
- ---@return data.IconData[]\r
1775
- function util.technology_icon_constant_damage(technology_icon) end\r
1776
- \r
1777
- ---@param technology_icon string\r
1778
- ---@return data.IconData[]\r
1779
- function util.technology_icon_constant_speed(technology_icon) end\r
1780
- \r
1781
- ---@param technology_icon string\r
1782
- ---@return data.IconData[]\r
1783
- function util.technology_icon_constant_movement_speed(technology_icon) end\r
1784
- \r
1785
- ---@param technology_icon string\r
1786
- ---@return data.IconData[]\r
1787
- function util.technology_icon_constant_range(technology_icon) end\r
1788
- \r
1789
- ---@param technology_icon string\r
1790
- ---@return data.IconData[]\r
1791
- function util.technology_icon_constant_planet(technology_icon) end\r
1792
- \r
1793
- ---@param technology_icon string\r
1794
- ---@return data.IconData[]\r
1795
- function util.technology_icon_constant_equipment(technology_icon) end\r
1796
- \r
1797
- ---@param technology_icon string\r
1798
- ---@return data.IconData[]\r
1799
- function util.technology_icon_constant_followers(technology_icon) end\r
1800
- \r
1801
- ---@param technology_icon string\r
1802
- ---@return data.IconData[]\r
1803
- function util.technology_icon_constant_capacity(technology_icon) end\r
1804
- \r
1805
- ---@param technology_icon string\r
1806
- ---@return data.IconData[]\r
1807
- function util.technology_icon_constant_stack_size(technology_icon) end\r
1808
- \r
1809
- ---@param technology_icon string\r
1810
- ---@return data.IconData[]\r
1811
- function util.technology_icon_constant_productivity(technology_icon) end\r
1812
- \r
1813
- ---@param technology_icon string\r
1814
- ---@return data.IconData[]\r
1815
- function util.technology_icon_constant_recipe_productivity(technology_icon) end\r
1816
- \r
1817
- ---@param technology_icon string\r
1818
- ---@return data.IconData[]\r
1819
- function util.technology_icon_constant_braking_force(technology_icon) end\r
1820
- \r
1821
- ---@param technology_icon string\r
1822
- ---@return data.IconData[]\r
1823
- function util.technology_icon_constant_mining(technology_icon) end\r
1824
- \r
1825
- ---@param energy string\r
1826
- ---@return number\r
1827
- function util.parse_energy(energy) end\r
1828
- \r
1829
- ---@param product data.ProductPrototype\r
1830
- ---@return number\r
1831
- function util.product_amount(product) end\r
1832
- \r
1833
- ---@return table\r
1834
- function util.empty_sprite() end\r
1835
- \r
1836
- ---@param animation_length number\r
1837
- ---@return table\r
1838
- function util.empty_animation(animation_length) end\r
1839
- \r
1840
- ---@return table\r
1841
- function util.empty_icon() end\r
1842
- \r
1843
- ---@generic L: table\r
1844
- ---@param layer L\r
1845
- ---@return L\r
1846
- function util.draw_as_glow(layer) end\r
1847
- \r
1848
- ---@generic T : table\r
1849
- ---@param path string\r
1850
- ---@param table T\r
1851
- ---@return T\r
1852
- function util.sprite_load(path, table) end\r
1853
- \r
1854
- ---@param spritesheets table[]\r
1855
- ---@return table[]\r
1856
- function util.spritesheets_to_pictures(spritesheets) end\r
1857
- \r
1858
- -- Does not handle:\r
1859
- -- - explicit tile filters in "selection-tool" items\r
1860
- -- - ItemPrototype::place_as_tile\r
1861
- -- - TilePrototype::next_direction\r
1862
- -- - TilePrototype::transition_merges_with_tile\r
1863
- -- - general tile transitions, only removes tile names from water_tile_type_names\r
1864
- ---@param data table --Seriously pass the global data\r
1865
- ---@param array_of_tiles_to_remove string[]\r
1866
- function util.remove_tile_references(data, array_of_tiles_to_remove) end\r
1867
- \r
1868
- ---Remove the first occurance of value from the array\r
1869
- ---@param list any[]\r
1870
- ---@param value any\r
1871
- util.remove_from_list = function(list, value) end\r
1872
- \r
1873
- ---@param list any[]\r
1874
- ---@return {[any]: true}\r
1875
- util.list_to_map = function(list) end\r
1876
- \r
1877
- ---@param raw_product data.ProductPrototype\r
1878
- ---@return data.ProductPrototype\r
1879
- util.normalize_recipe_product = function(raw_product) end\r
1880
- \r
1881
- ---@param recipe data.RecipePrototype\r
1882
- ---@return data.ProductPrototype[]\r
1883
- util.normalize_recipe_products = function(recipe) end\r
1884
- \r
1885
- ---Returns the normalized main product or nil if the recipe defintion is invalid or there is no main product\r
1886
- ---@param recipe data.RecipePrototype\r
1887
- ---@param normalized_products data.ProductPrototype[]\r
1888
- ---@return data.ProductPrototype\r
1889
- util.get_recipe_main_product = function(recipe, normalized_products) end\r
1890
- \r
1891
- gram = 1\r
1892
- grams = gram\r
1893
- kg = 1000*grams\r
1894
- tons = 1000*kg\r
1895
- second = 60\r
1896
- minute = 60 * second\r
1897
- hour = 60 * minute\r
1898
- meter = 1\r
1899
- kilometer = 1000\r
1900
- \r
1901
- return util\r
1902
- `});var Li={};Z(Li,{default:()=>Eh});var Eh,Bl=Q(()=>{Eh=`---[View Documentation](https://wiki.factorio.com/Tutorial:Mod_settings#The_setting_type_property)
1903
- ---@alias data.ModSettingSettingType ("startup")|("runtime-global")|("double-setting")|("runtime-per-user")
1904
-
1905
- ---[View Documentation](https://wiki.factorio.com/Tutorial:Mod_settings)
1906
- ---@alias data.AnyModSettingPrototype data.ModBoolSettingPrototype|data.ModIntSettingPrototype|data.ModDoubleSettingPrototype|data.ModStringSettingPrototype|data.ModColorSettingPrototype
1907
-
1908
- do
1909
- ---[View Documentation](https://wiki.factorio.com/Tutorial:Mod_settings)
1910
- ---@class (exact) data.ModSettingPrototype:data.PrototypeBase
1911
- ---[View Documentation](https://wiki.factorio.com/Tutorial:Mod_settings#The_hidden_property)
1912
- ---@field hidden? boolean
1913
- ---[View Documentation](https://wiki.factorio.com/Tutorial:Mod_settings#The_setting_type_property)
1914
- ---@field setting_type data.ModSettingSettingType
1915
- local data_ModSetting={
1916
- }
1917
- end
1918
-
1919
- do
1920
- ---[View Documentation](https://wiki.factorio.com/Tutorial:Mod_settings#bool-setting)
1921
- ---@class (exact) data.ModBoolSettingPrototype:data.ModSettingPrototype
1922
- ---@field type "bool-setting"
1923
- ---@field default_value boolean
1924
- ---@field forced_value? boolean
1925
- local data_ModBoolSetting={
1926
- }
1927
- end
1928
-
1929
- do
1930
- ---[View Documentation](https://wiki.factorio.com/Tutorial:Mod_settings#int-setting)
1931
- ---@class (exact) data.ModIntSettingPrototype:data.ModSettingPrototype
1932
- ---@field type "int-setting"
1933
- ---@field default_value int64
1934
- ---@field minimum_value? int64
1935
- ---@field maximum_value? int64
1936
- ---@field allowed_values? int64[]
1937
- local data_ModBoolSetting={
1938
- }
1939
- end
1940
-
1941
- do
1942
- ---[View Documentation](https://wiki.factorio.com/Tutorial:Mod_settings#double-setting)
1943
- ---@class (exact) data.ModDoubleSettingPrototype:data.ModSettingPrototype
1944
- ---@field type "double-setting"
1945
- ---@field default_value double
1946
- ---@field minimum_value? double
1947
- ---@field maximum_value? double
1948
- ---@field allowed_values? double[]
1949
- local data_ModBoolSetting={
1950
- }
1951
- end
1952
-
1953
- do
1954
- ---[View Documentation](https://wiki.factorio.com/Tutorial:Mod_settings#string-setting)
1955
- ---@class (exact) data.ModStringSettingPrototype:data.ModSettingPrototype
1956
- ---@field type "string-setting"
1957
- ---@field default_value string
1958
- ---@field allow_blank? boolean
1959
- ---@field auto_trim? boolean
1960
- ---@field allowed_values? string[]
1961
- local data_ModBoolSetting={
1962
- }
1963
- end
1964
-
1965
- do
1966
- ---[View Documentation](https://wiki.factorio.com/Tutorial:Mod_settings#color-setting)
1967
- ---@class (exact) data.ModColorSettingPrototype:data.ModSettingPrototype
1968
- ---@field type "color-setting"
1969
- ---@field default_value data.Color
1970
- local data_ModBoolSetting={
1971
- }
1972
- end
1973
-
1974
- `});var Ai={};Z(Ai,{default:()=>Lh});var Lh,ql=Q(()=>{Lh=`---@meta _\r
1975
- \r
1976
- ---@see LuaBootstrap.active_mods\r
1977
- ---@type {[string]: string}\r
1978
- mods = {}\r
1979
- `});var ki={};Z(ki,{default:()=>kh});var kh,Ml=Q(()=>{kh=`---@meta _\r
1980
- \r
1981
- ---Double precision floating point numbers. May not be NaN in prototypes.\r
1982
- ---@alias double number\r
1983
- ---Single precision floating point numbers. May not be NaN in prototypes.\r
1984
- ---@alias float number\r
1985
- \r
1986
- ---8 bit signed integer. Ranges from -128 to 127, or [-2^7, 2^7-1]\r
1987
- ---@alias int8 integer\r
1988
- ---8 bit unsigned integer. Ranges from 0 to 255, or [0, 2^8-1]\r
1989
- ---@alias uint8 integer\r
1990
- ---16 bit signed integer. Ranges from -32&nbsp;768 to 32&nbsp;767, or [-2^15, 2^15-1]\r
1991
- ---@alias int16 integer\r
1992
- ---16 bit unsigned integer. Ranges from 0 to 65&nbsp;535, or [0, 2^16-1]\r
1993
- ---@alias uint16 integer\r
1994
- ---32 bit signed integer. Ranges from -2&nbsp;147&nbsp;483&nbsp;648 to 2&nbsp;147&nbsp;483&nbsp;647, or [-2^31, 2^31-1]\r
1995
- ---@alias int32 integer\r
1996
- ---32 bit unsigned integer. Ranges from 0 to 4&nbsp;294&nbsp;967&nbsp;295, or [0, 2^32-1]\r
1997
- ---@alias uint32 integer\r
1998
- ---32 bit signed integer. Ranges from -2&nbsp;147&nbsp;483&nbsp;648 to 2&nbsp;147&nbsp;483&nbsp;647, or [-2^31, 2^31-1]\r
1999
- ---@alias int integer\r
2000
- ---32 bit unsigned integer. Ranges from 0 to 4&nbsp;294&nbsp;967&nbsp;295, or [0, 2^32-1]\r
2001
- ---@alias uint integer\r
2002
- ---64 bit signed integer.\r
2003
- ---@alias int64 integer\r
2004
- ---64 bit unsigned integer.\r
2005
- ---@alias uint64 integer`});var Ti={};Z(Ti,{default:()=>Ch});var Ch,Nl=Q(()=>{Ch=`---@meta _
2006
-
2007
- ---
2008
- ---
2009
- ---
2010
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-debug"])
2011
- ---
2012
- ---@class factorio.debuglib
2013
- debug = {}
2014
-
2015
- ---@class debuginfo
2016
- ---@field name string
2017
- ---@field namewhat string
2018
- ---@field source string
2019
- ---@field short_src string
2020
- ---@field linedefined integer
2021
- ---@field lastlinedefined integer
2022
- ---@field what string
2023
- ---@field currentline integer
2024
- ---@field istailcall boolean
2025
- ---@field nups integer
2026
- ---@field nparams integer
2027
- ---@field isvararg boolean
2028
- ---@field func function
2029
- ---@field activelines table
2030
- ---@field currentpc integer
2031
-
2032
- ---
2033
- ---Enters an interactive mode with the user, running each string that the user enters.
2034
- ---
2035
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-debug.debug"])
2036
- ---
2037
- ---@deprecated most \`debug\` library functions are disabled since Factorio 1.1.107
2038
- function debug.debug() end
2039
-
2040
- ---
2041
- ---Returns the current hook settings of the thread.
2042
- ---
2043
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-debug.gethook"])
2044
- ---
2045
- ---@return function hook
2046
- ---@return string mask
2047
- ---@return integer count
2048
- ---@nodiscard
2049
- ---@deprecated most \`debug\` library functions are disabled since Factorio 1.1.107
2050
- function debug.gethook() end
2051
-
2052
- ---@alias infowhat string
2053
- ---|+'"n"' # \`name\` and \`namewhat\`
2054
- ---|+'"S"' # \`source\`, \`short_src\`, \`linedefined\`, \`lastlinedefined\`, and \`what\`
2055
- ---|+'"l"' # \`currentline\`
2056
- ---|+'"t"' # \`istailcall\`
2057
- ---|+'"u"' # \`nups\`, \`nparams\`, and \`isvararg\`
2058
- ---|+'"f"' # \`func\`
2059
- ---|+'"L"' # \`activelines\`
2060
- ---|+'"p"' # \`currentpc\`
2061
-
2062
- ---
2063
- ---Returns a table with information about a function.
2064
- ---
2065
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-debug.getinfo"])
2066
- ---
2067
- ---@param f integer|async fun(...):...
2068
- ---@param what? infowhat
2069
- ---@return debuginfo
2070
- ---@nodiscard
2071
- function debug.getinfo(f, what) end
2072
-
2073
- ---
2074
- ---Returns the name and the value of the local variable with index \`local\` of the function at level \`f\` of the stack.
2075
- ---
2076
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-debug.getlocal"])
2077
- ---
2078
- ---@param f integer|async fun(...):...
2079
- ---@param index integer
2080
- ---@return string name
2081
- ---@return any value
2082
- ---@nodiscard
2083
- ---@deprecated most \`debug\` library functions are disabled since Factorio 1.1.107
2084
- function debug.getlocal(f, index) end
2085
-
2086
- ---
2087
- ---Returns the metatable of the given value.
2088
- ---
2089
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-debug.getmetatable"])
2090
- ---
2091
- ---@param object any
2092
- ---@return table metatable
2093
- ---@nodiscard
2094
- ---@deprecated most \`debug\` library functions are disabled since Factorio 1.1.107
2095
- function debug.getmetatable(object) end
2096
-
2097
- ---
2098
- ---Returns the registry table.
2099
- ---
2100
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-debug.getregistry"])
2101
- ---
2102
- ---@return table
2103
- ---@nodiscard
2104
- ---@deprecated most \`debug\` library functions are disabled since Factorio 1.1.107
2105
- function debug.getregistry() end
2106
-
2107
- ---
2108
- ---Returns the name and the value of the upvalue with index \`up\` of the function.
2109
- ---
2110
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-debug.getupvalue"])
2111
- ---
2112
- ---@param f async fun(...):...
2113
- ---@param up integer
2114
- ---@return string name
2115
- ---@return any value
2116
- ---@nodiscard
2117
- ---@deprecated most \`debug\` library functions are disabled since Factorio 1.1.107
2118
- function debug.getupvalue(f, up) end
2119
-
2120
- ---
2121
- ---Returns the Lua value associated to u.
2122
- ---
2123
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-debug.getuservalue"])
2124
- ---
2125
- ---@param u userdata
2126
- ---@return any
2127
- ---@nodiscard
2128
- ---@deprecated most \`debug\` library functions are disabled since Factorio 1.1.107
2129
- function debug.getuservalue(u) end
2130
-
2131
- ---
2132
- ---### **Deprecated in \`Lua 5.4.2\`**
2133
- ---
2134
- ---Sets a new limit for the C stack. This limit controls how deeply nested calls can go in Lua, with the intent of avoiding a stack overflow.
2135
- ---
2136
- ---In case of success, this function returns the old limit. In case of error, it returns \`false\`.
2137
- ---
2138
- ---
2139
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-debug.setcstacklimit"])
2140
- ---
2141
- ---@deprecated
2142
- ---@param limit integer
2143
- ---@return integer|boolean
2144
- ---@deprecated most \`debug\` library functions are disabled since Factorio 1.1.107
2145
- function debug.setcstacklimit(limit) end
2146
-
2147
- ---@alias hookmask string
2148
- ---|+'"c"' # Calls hook when Lua calls a function.
2149
- ---|+'"r"' # Calls hook when Lua returns from a function.
2150
- ---|+'"l"' # Calls hook when Lua enters a new line of code.
2151
-
2152
- ---
2153
- ---Sets the given function as a hook.
2154
- ---
2155
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-debug.sethook"])
2156
- ---
2157
- ---@overload fun(...):...
2158
- ---@param hook async fun(...):...
2159
- ---@param mask hookmask
2160
- ---@param count? integer
2161
- ---@deprecated most \`debug\` library functions are disabled since Factorio 1.1.107
2162
- function debug.sethook(hook, mask, count) end
2163
-
2164
- ---
2165
- ---Assigns the \`value\` to the local variable with index \`local\` of the function at \`level\` of the stack.
2166
- ---
2167
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-debug.setlocal"])
2168
- ---
2169
- ---@param level integer
2170
- ---@param index integer
2171
- ---@param value any
2172
- ---@return string name
2173
- ---@deprecated most \`debug\` library functions are disabled since Factorio 1.1.107
2174
- function debug.setlocal(level, index, value) end
2175
-
2176
- ---
2177
- ---Sets the metatable for the given value to the given table (which can be \`nil\`).
2178
- ---
2179
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-debug.setmetatable"])
2180
- ---
2181
- ---@generic T
2182
- ---@param value T
2183
- ---@param meta? table
2184
- ---@return T value
2185
- ---@deprecated most \`debug\` library functions are disabled since Factorio 1.1.107
2186
- function debug.setmetatable(value, meta) end
2187
-
2188
- ---
2189
- ---Assigns the \`value\` to the upvalue with index \`up\` of the function.
2190
- ---
2191
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-debug.setupvalue"])
2192
- ---
2193
- ---@param f async fun(...):...
2194
- ---@param up integer
2195
- ---@param value any
2196
- ---@return string name
2197
- ---@deprecated most \`debug\` library functions are disabled since Factorio 1.1.107
2198
- function debug.setupvalue(f, up, value) end
2199
-
2200
- ---
2201
- ---Sets the given value as the Lua value associated to the given udata.
2202
- ---
2203
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-debug.setuservalue"])
2204
- ---
2205
- ---@param udata userdata
2206
- ---@param value any
2207
- ---@return userdata udata
2208
- ---@deprecated most \`debug\` library functions are disabled since Factorio 1.1.107
2209
- function debug.setuservalue(udata, value) end
2210
-
2211
- ---
2212
- ---Returns a string with a traceback of the call stack. The optional message string is appended at the beginning of the traceback.
2213
- ---
2214
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-debug.traceback"])
2215
- ---
2216
- ---@overload fun(message?: any, level?: integer): string
2217
- ---@param thread thread
2218
- ---@param message? any
2219
- ---@param level? integer
2220
- ---@return string message
2221
- ---@nodiscard
2222
- function debug.traceback(thread, message, level) end
2223
-
2224
- ---
2225
- ---Returns a unique identifier (as a light userdata) for the upvalue numbered \`n\` from the given function.
2226
- ---
2227
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-debug.upvalueid"])
2228
- ---
2229
- ---@param f async fun(...):...
2230
- ---@param n integer
2231
- ---@return lightuserdata id
2232
- ---@nodiscard
2233
- ---@deprecated most \`debug\` library functions are disabled since Factorio 1.1.107
2234
- function debug.upvalueid(f, n) end
2235
-
2236
- ---
2237
- ---Make the \`n1\`-th upvalue of the Lua closure \`f1\` refer to the \`n2\`-th upvalue of the Lua closure \`f2\`.
2238
- ---
2239
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-debug.upvaluejoin"])
2240
- ---
2241
- ---@param f1 async fun(...):...
2242
- ---@param n1 integer
2243
- ---@param f2 async fun(...):...
2244
- ---@param n2 integer
2245
- ---@deprecated most \`debug\` library functions are disabled since Factorio 1.1.107
2246
- function debug.upvaluejoin(f1, n1, f2, n2) end
2247
-
2248
- return debug
2249
- `});var Ci={};Z(Ci,{default:()=>Dh});var Dh,Ul=Q(()=>{Dh=`---@meta _\r
2250
- \r
2251
- ---\r
2252
- ---\r
2253
- ---\r
2254
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math"])\r
2255
- ---\r
2256
- ---@class factorio.mathlib\r
2257
- ---\r
2258
- ---A value larger than any other numeric value.\r
2259
- ---\r
2260
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.huge"])\r
2261
- ---\r
2262
- ---@field huge number\r
2263
- ---\r
2264
- ---The value of *\u03C0*.\r
2265
- ---\r
2266
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.pi"])\r
2267
- ---\r
2268
- ---@field pi number\r
2269
- math = {}\r
2270
- \r
2271
- ---\r
2272
- ---Returns the absolute value of \`x\`.\r
2273
- ---\r
2274
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.abs"])\r
2275
- ---\r
2276
- ---@param x number\r
2277
- ---@return number\r
2278
- ---@nodiscard\r
2279
- function math.abs(x) end\r
2280
- \r
2281
- ---\r
2282
- ---Returns the arc cosine of \`x\` (in radians).\r
2283
- ---\r
2284
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.acos"])\r
2285
- ---\r
2286
- ---@param x number\r
2287
- ---@return number\r
2288
- ---@nodiscard\r
2289
- function math.acos(x) end\r
2290
- \r
2291
- ---\r
2292
- ---Returns the arc sine of \`x\` (in radians).\r
2293
- ---\r
2294
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.asin"])\r
2295
- ---\r
2296
- ---@param x number\r
2297
- ---@return number\r
2298
- ---@nodiscard\r
2299
- function math.asin(x) end\r
2300
- \r
2301
- ---\r
2302
- ---Returns the arc tangent of \`x\` (in radians).\r
2303
- ---\r
2304
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.atan"])\r
2305
- ---\r
2306
- ---@param y number\r
2307
- ---@return number\r
2308
- ---@nodiscard\r
2309
- function math.atan(y) end\r
2310
- \r
2311
- ---@version <5.2\r
2312
- ---\r
2313
- ---Returns the arc tangent of \`y/x\` (in radians).\r
2314
- ---\r
2315
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.atan2"])\r
2316
- ---\r
2317
- ---@param y number\r
2318
- ---@param x number\r
2319
- ---@return number\r
2320
- ---@nodiscard\r
2321
- function math.atan2(y, x) end\r
2322
- \r
2323
- ---\r
2324
- ---Returns the smallest integral value larger than or equal to \`x\`.\r
2325
- ---\r
2326
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.ceil"])\r
2327
- ---\r
2328
- ---@param x number\r
2329
- ---@return integer\r
2330
- ---@nodiscard\r
2331
- function math.ceil(x) end\r
2332
- \r
2333
- ---\r
2334
- ---Returns the cosine of \`x\` (assumed to be in radians).\r
2335
- ---\r
2336
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.cos"])\r
2337
- ---\r
2338
- ---@param x number\r
2339
- ---@return number\r
2340
- ---@nodiscard\r
2341
- function math.cos(x) end\r
2342
- \r
2343
- ---@version <5.2\r
2344
- ---\r
2345
- ---Returns the hyperbolic cosine of \`x\` (assumed to be in radians).\r
2346
- ---\r
2347
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.cosh"])\r
2348
- ---\r
2349
- ---@param x number\r
2350
- ---@return number\r
2351
- ---@nodiscard\r
2352
- function math.cosh(x) end\r
2353
- \r
2354
- ---\r
2355
- ---Converts the angle \`x\` from radians to degrees.\r
2356
- ---\r
2357
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.deg"])\r
2358
- ---\r
2359
- ---@param x number\r
2360
- ---@return number\r
2361
- ---@nodiscard\r
2362
- function math.deg(x) end\r
2363
- \r
2364
- ---\r
2365
- ---Returns the value \`e^x\` (where \`e\` is the base of natural logarithms).\r
2366
- ---\r
2367
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.exp"])\r
2368
- ---\r
2369
- ---@param x number\r
2370
- ---@return number\r
2371
- ---@nodiscard\r
2372
- function math.exp(x) end\r
2373
- \r
2374
- ---\r
2375
- ---Returns the largest integral value smaller than or equal to \`x\`.\r
2376
- ---\r
2377
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.floor"])\r
2378
- ---\r
2379
- ---@param x number\r
2380
- ---@return integer\r
2381
- ---@nodiscard\r
2382
- function math.floor(x) end\r
2383
- \r
2384
- ---\r
2385
- ---Returns the remainder of the division of \`x\` by \`y\` that rounds the quotient towards zero.\r
2386
- ---\r
2387
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.fmod"])\r
2388
- ---\r
2389
- ---@param x number\r
2390
- ---@param y number\r
2391
- ---@return number\r
2392
- ---@nodiscard\r
2393
- function math.fmod(x, y) end\r
2394
- \r
2395
- ---@version <5.2\r
2396
- ---\r
2397
- ---Decompose \`x\` into tails and exponents. Returns \`m\` and \`e\` such that \`x = m * (2 ^ e)\`, \`e\` is an integer and the absolute value of \`m\` is in the range [0.5, 1) (or zero when \`x\` is zero).\r
2398
- ---\r
2399
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.frexp"])\r
2400
- ---\r
2401
- ---@param x number\r
2402
- ---@return number m\r
2403
- ---@return number e\r
2404
- ---@nodiscard\r
2405
- function math.frexp(x) end\r
2406
- \r
2407
- ---@version <5.2\r
2408
- ---\r
2409
- ---Returns \`m * (2 ^ e)\` .\r
2410
- ---\r
2411
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.ldexp"])\r
2412
- ---\r
2413
- ---@param m number\r
2414
- ---@param e number\r
2415
- ---@return number\r
2416
- ---@nodiscard\r
2417
- function math.ldexp(m, e) end\r
2418
- \r
2419
- ---\r
2420
- ---Returns the logarithm of \`x\` in the given base.\r
2421
- ---\r
2422
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.log"])\r
2423
- ---\r
2424
- ---@param x number\r
2425
- ---@param base? integer\r
2426
- ---@return number\r
2427
- ---@nodiscard\r
2428
- function math.log(x, base) end\r
2429
- \r
2430
- ---@version <5.1\r
2431
- ---\r
2432
- ---Returns the base-10 logarithm of x.\r
2433
- ---\r
2434
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.log10"])\r
2435
- ---\r
2436
- ---@param x number\r
2437
- ---@return number\r
2438
- ---@nodiscard\r
2439
- function math.log10(x) end\r
2440
- \r
2441
- ---\r
2442
- ---Returns the argument with the maximum value, according to the Lua operator \`<\`.\r
2443
- ---\r
2444
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.max"])\r
2445
- ---\r
2446
- ---@generic Number: number\r
2447
- ---@param x Number\r
2448
- ---@param ... Number\r
2449
- ---@return Number\r
2450
- ---@nodiscard\r
2451
- function math.max(x, ...) end\r
2452
- \r
2453
- ---\r
2454
- ---Returns the argument with the minimum value, according to the Lua operator \`<\`.\r
2455
- ---\r
2456
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.min"])\r
2457
- ---\r
2458
- ---@generic Number: number\r
2459
- ---@param x Number\r
2460
- ---@param ... Number\r
2461
- ---@return Number\r
2462
- ---@nodiscard\r
2463
- function math.min(x, ...) end\r
2464
- \r
2465
- ---\r
2466
- ---Returns the integral part of \`x\` and the fractional part of \`x\`.\r
2467
- ---\r
2468
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.modf"])\r
2469
- ---\r
2470
- ---@param x number\r
2471
- ---@return integer\r
2472
- ---@return number\r
2473
- ---@nodiscard\r
2474
- function math.modf(x) end\r
2475
- \r
2476
- ---@version <5.2\r
2477
- ---\r
2478
- ---Returns \`x ^ y\` .\r
2479
- ---\r
2480
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.pow"])\r
2481
- ---\r
2482
- ---@param x number\r
2483
- ---@param y number\r
2484
- ---@return number\r
2485
- ---@nodiscard\r
2486
- function math.pow(x, y) end\r
2487
- \r
2488
- ---\r
2489
- ---Converts the angle \`x\` from degrees to radians.\r
2490
- ---\r
2491
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.rad"])\r
2492
- ---\r
2493
- ---@param x number\r
2494
- ---@return number\r
2495
- ---@nodiscard\r
2496
- function math.rad(x) end\r
2497
- \r
2498
- ---\r
2499
- ---Returns the sine of \`x\` (assumed to be in radians).\r
2500
- ---\r
2501
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.sin"])\r
2502
- ---\r
2503
- ---@param x number\r
2504
- ---@return number\r
2505
- ---@nodiscard\r
2506
- function math.sin(x) end\r
2507
- \r
2508
- ---@version <5.2\r
2509
- ---\r
2510
- ---Returns the hyperbolic sine of \`x\` (assumed to be in radians).\r
2511
- ---\r
2512
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.sinh"])\r
2513
- ---\r
2514
- ---@param x number\r
2515
- ---@return number\r
2516
- ---@nodiscard\r
2517
- function math.sinh(x) end\r
2518
- \r
2519
- ---\r
2520
- ---Returns the square root of \`x\`.\r
2521
- ---\r
2522
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.sqrt"])\r
2523
- ---\r
2524
- ---@param x number\r
2525
- ---@return number\r
2526
- ---@nodiscard\r
2527
- function math.sqrt(x) end\r
2528
- \r
2529
- ---\r
2530
- ---Returns the tangent of \`x\` (assumed to be in radians).\r
2531
- ---\r
2532
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.tan"])\r
2533
- ---\r
2534
- ---@param x number\r
2535
- ---@return number\r
2536
- ---@nodiscard\r
2537
- function math.tan(x) end\r
2538
- \r
2539
- ---@version <5.2\r
2540
- ---\r
2541
- ---Returns the hyperbolic tangent of \`x\` (assumed to be in radians).\r
2542
- ---\r
2543
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.tanh"])\r
2544
- ---\r
2545
- ---@param x number\r
2546
- ---@return number\r
2547
- ---@nodiscard\r
2548
- function math.tanh(x) end\r
2549
- \r
2550
- ---@version >5.3\r
2551
- ---\r
2552
- ---If the value \`x\` is convertible to an integer, returns that integer.\r
2553
- ---\r
2554
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.tointeger"])\r
2555
- ---\r
2556
- ---@param x any\r
2557
- ---@return integer?\r
2558
- ---@nodiscard\r
2559
- function math.tointeger(x) end\r
2560
- \r
2561
- ---\r
2562
- ---Returns \`"integer"\` if \`x\` is an integer, \`"float"\` if it is a float, or \`nil\` if \`x\` is not a number.\r
2563
- ---\r
2564
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.type"])\r
2565
- ---\r
2566
- ---@param x any\r
2567
- ---@return\r
2568
- ---| '"integer"'\r
2569
- ---| '"float"'\r
2570
- ---| 'nil'\r
2571
- ---@nodiscard\r
2572
- function math.type(x) end\r
2573
- \r
2574
- ---\r
2575
- ---Returns \`true\` if and only if \`m\` is below \`n\` when they are compared as unsigned integers.\r
2576
- ---\r
2577
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-math.ult"])\r
2578
- ---\r
2579
- ---@param m integer\r
2580
- ---@param n integer\r
2581
- ---@return boolean\r
2582
- ---@nodiscard\r
2583
- function math.ult(m, n) end\r
2584
- \r
2585
- \r
2586
- ---\`math.random()\` is reimplemented within Factorio to be deterministic, both in the data stage and during runtime.\r
2587
- ---\r
2588
- ---In the data stage, it is seeded with a constant number. During runtime, it uses the map's global random generator which is seeded with the map seed. The map's global random generator is shared between all mods and the core game, which all affect the random number that is generated. If this behaviour is not desired, \`LuaRandomGenerator\` can be used to create a random generator that is completely separate from the core game and other mods.\r
2589
- ---\r
2590
- ---This method can't be used outside of events or during loading. Calling it with non-integer arguments will floor them instead of resulting in an error.\r
2591
- ---\r
2592
- ---* \`math.random()\`: Returns a float in the range [0,1).\r
2593
- ---* \`math.random(m)\`: Returns a integer in the range [1, m].\r
2594
- ---* \`math.random(m, n)\`: Returns a integer in the range [m, n].\r
2595
- ---\r
2596
- ---@overload fun():number\r
2597
- ---@overload fun(m: integer|number):integer\r
2598
- ---@param m integer|number\r
2599
- ---@param n integer|number\r
2600
- ---@return integer\r
2601
- ---@nodiscard\r
2602
- ---@see LuaRandomGenerator\r
2603
- function math.random(m, n) end\r
2604
- \r
2605
- ---Using \`math.randomseed()\` in Factorio has no effect on the random generator, the function does nothing. If custom seeding or re-seeding is desired, \`LuaRandomGenerator\` can be used instead of \`math.random()\`.\r
2606
- ---@deprecated \`math.randomseed()\` has no effect in Factorio.\r
2607
- ---@param x integer\r
2608
- ---@see LuaRandomGenerator\r
2609
- function math.randomseed(x) end\r
2610
- \r
2611
- return math\r
2612
- `});var Ii={};Z(Ii,{default:()=>Fh});var Fh,jl=Q(()=>{Fh=`---@meta _\r
2613
- \r
2614
- ---Due to the changes to \`package\`, the functionality of \`require()\` changes. When using absolute paths, the path starts at the mod root. Additionally, \`..\` is disabled as a path variable. This means that it is not possible to load arbitrary files from outside the mod directory.\r
2615
- ---\r
2616
- ---Factorio does however provide two ways to load files from other mods:\r
2617
- ---\r
2618
- --- * The "lualib" directory of the core mod is included in the paths to be checked for files, so it is possible to require files directly from there, such as the "util" file by using \`require("util")\`.\r
2619
- --- * Furthermore, it is possible to require files from other mods by using \`require("__mod-name__.file")\`.\r
2620
- ---\r
2621
- ---\`require()\` can not be used in the console, in event listeners or during a \`remote.call()\`. The function expects any file to end with the \`.lua\` extension.\r
2622
- ---@param modname string\r
2623
- ---@return unknown\r
2624
- function require(modname) end\r
2625
- \r
2626
- ---@class factorio.packagelib\r
2627
- ---@field loaded table\r
2628
- package = {}\r
2629
- \r
2630
- return package`});var Di={};Z(Di,{default:()=>Bh});var Bh,Wl=Q(()=>{Bh=`---@meta _\r
2631
- ---Lua serializer and pretty printer.\\\r
2632
- ---Author: [Paul Kulchenko](mailto:paul@kulchenko.com)\\\r
2633
- ---https://github.com/pkulchenko/serpent\r
2634
- ---\`\`\`lua\r
2635
- ---local serpent = require("serpent")\r
2636
- ---local a = {1, nil, 3, x=1, ['true'] = 2, [not true]=3}\r
2637
- ---a[a] = a -- self-reference with a table as key and value\r
2638
- ---\r
2639
- ---print(serpent.dump(a)) -- full serialization\r
2640
- ---print(serpent.line(a)) -- single line, no self-ref section\r
2641
- ---print(serpent.block(a)) -- multi-line indented, no self-ref section\r
2642
- ---\r
2643
- ---local fun, err = loadstring(serpent.dump(a))\r
2644
- ---if err then error(err) end\r
2645
- ---local copy = fun()\r
2646
- ---\r
2647
- ---\r
2648
- ---local ok, copy = serpent.load(serpent.dump(a))\r
2649
- ---print(ok and copy[3] == a[3])\r
2650
- ---\`\`\`\r
2651
- ---\\\r
2652
- ---Note that line and block functions return pretty-printed data structures and if you want to deserialize them,\r
2653
- ---you need to add return before running them through loadstring. For example:\r
2654
- ---\`\`\`lua\r
2655
- ---loadstring('return '..require('mobdebug').line("foo"))() == "foo"\r
2656
- ---\`\`\`\r
2657
- ---\\\r
2658
- ---If a table or a userdata value has \`__tostring\` or \`__serialize\` method, the method will be used to serialize the value.\\\r
2659
- ---If \`__serialize\` method is present, it will be called with the value as a parameter. if \`__serialize\` method is not present, but \`__tostring\` is,\r
2660
- ---then tostring will be called with the value as a parameter. In both cases, the result will be serialized, so \`__serialize\` method can return a table,\r
2661
- ---that will be serialized and replace the original value.\r
2662
- ---\r
2663
- ---Limitations:\\\r
2664
- ---Doesn't handle userdata (except filehandles in io.* table).\\\r
2665
- ---Threads, function upvalues/environments, and metatables are not serialized.\r
2666
- ---@class serpent\r
2667
- serpent = {}\r
2668
- \r
2669
- -- multi-line indented pretty printing, no self-ref section; sets indent, sortkeys, and comment options.\r
2670
- ---@param value any\r
2671
- ---@param options? serpent.options\r
2672
- ---@return string\r
2673
- function serpent.block(value, options) end\r
2674
- \r
2675
- ---Single line pretty printing, no self-ref section; sets sortkeys and comment options;\r
2676
- ---@param value any\r
2677
- ---@param options? serpent.options\r
2678
- ---@return string\r
2679
- function serpent.line(value, options) end\r
2680
- \r
2681
- ---Full serialization; sets name, compact and sparse options\r
2682
- ---@param value any\r
2683
- ---@param options? serpent.options\r
2684
- ---@return string\r
2685
- function serpent.dump(value, options) end\r
2686
- \r
2687
- ---loads serialized fragment; you need to pass {safe = false} as the second value if you want to turn safety checks off.\\\r
2688
- ---Similar to pcall and loadstring calls, load returns status as the first value and the result or the error message as the second value.\r
2689
- ---@param str string\r
2690
- ---@param options? serpent.load_options\r
2691
- ---@return boolean, any\r
2692
- function serpent.load(str, options) end\r
2693
- \r
2694
- ---@class serpent.load_options\r
2695
- ---@field safe? boolean default: true\r
2696
- \r
2697
- ---These options can be provided as a second parameter to Serpent functions.\r
2698
- ---\r
2699
- ---Serpent functions set these options to different default values:\\\r
2700
- --- - \`serpent.dump(value)\` sets \`compact = true\` and \`sparse = true\`;\\\r
2701
- --- - \`serpent.line(value)\` sets \`sortkeys = true\` and \`comment = true\`;\\\r
2702
- --- - \`serpent.block(value)\` sets \`sortkeys = true\` and \`comment = true\` and \`indent = ' '\`.\r
2703
- ---@class serpent.options\r
2704
- ---@field safe? boolean enable safety checks when using \`serpent.load\`. default: true\r
2705
- ---@field indent? string triggers long multi-line output.\r
2706
- ---@field comment? boolean|integer provide stringified value in a comment (up to \`maxelevel\` of depth).\r
2707
- ---@field refcomment? boolean|integer describe the previous location of self-reference tables\r
2708
- ---@field tablecomment? boolean|integer provide comment on first appearance of table values\r
2709
- ---@field sortkeys? boolean|serpent.sort_function\r
2710
- ---@field sparse? boolean force sparese encoding (no nil filling based on #t).\r
2711
- ---@field compact? boolean remove spaces.\r
2712
- ---@field fatal? boolean raise fatal error on non-serilializable values.\r
2713
- ---@field fixradix? boolean change radic character set depenending on locale to decimal dot.\r
2714
- ---@field nocode? boolean disable bytecode serialization for easy comparison.\r
2715
- ---@field nohuge? boolean disable checking numbers against undefined and huge values.\r
2716
- ---@field maxlevel? number specify max level up to which to expand nested tables.\r
2717
- ---@field maxnum? number specify max number of elemmets in a table.\r
2718
- ---@field maxlength? number specify max length for all table elements.\r
2719
- ---@field metatostring? boolean use __tostring metatamethod when serializing tables; set to false to disable and serialize the table as is.\r
2720
- ---@field numformat? string specify format for numeric values as shortest possible round-trippable double.\\\r
2721
- ---Use "%.16g" for better readability and "%.17g" to preserve floating point precision. default: "%.17g"\r
2722
- ---@field valignore? {[string]: true} allows to specify a list of values to ignore (as keys).\r
2723
- ---@field keyallow? {[string]: true} allows to specify the list of keys to be serialized. Any keys not in this list are not included in final output (as keys).\r
2724
- ---@field keyignore? {[string]: true} allows to specity the list of keys to ignore in serialization.\r
2725
- ---@field valtypeignore? {[string]: true} allows to specify a list of value types to ignore (as keys).\r
2726
- ---@field custom? serpent.formater\r
2727
- ---@field name? string triggers full serialization with self-ref section.\r
2728
- \r
2729
- ---A custom sort function can be provided to sort the contents of tables. The function takes 2 parameters, the first being the table (a list) with the keys,\r
2730
- ---the second the original table. It should modify the first table in-place, and return nothing.\\\r
2731
- ---For example, the following call will apply a sort function identical to the standard sort, except that it will not distinguish between lower- and uppercase.\r
2732
- ---\`\`\`lua\r
2733
- ---local mysort = function(array_of_keys, original_table)\r
2734
- --- local maxn, to = 12, { number = "a", string = "b" }\r
2735
- --- local function padnum(d) return ("%0" .. maxn .. "d"):format(d) end\r
2736
- ---\r
2737
- --- local sort = function(a, b)\r
2738
- --- return ((array_of_keys[a] and 0 or to[type(a)] or "z") .. (tostring(a):gsub("%d+", padnum))):upper()\r
2739
- --- < ((array_of_keys[b] and 0 or to[type(b)] or "z") .. (tostring(b):gsub("%d+", padnum))):upper()\r
2740
- --- end\r
2741
- --- table.sort(array_of_keys, sort)\r
2742
- ---end\r
2743
- ---local content = { some = 1, input = 2, To = 3, serialize = 4 }\r
2744
- ---local result = serpent.line(content, { sortkeys = mysort })\r
2745
- ---print(result) -- {input = 2, serialize = 4, some = 1, To = 3}\r
2746
- ---\`\`\`\r
2747
- ---@alias serpent.sort_function fun(array_of_keys: string[], original_table: table)\r
2748
- \r
2749
- ---Serpent supports a way to provide a custom formatter that allows to fully customize the output. The formatter takes five values:\r
2750
- ---\r
2751
- --- \`tag\` -- the name of the current element with '=' or an empty string in case of array index,\\\r
2752
- --- \`head\` -- an opening table bracket { and associated indentation and newline (if any),\\\r
2753
- --- \`body\` -- table elements concatenated into a string using commas and indentation/newlines (if any),\\\r
2754
- --- \`tail\` -- a closing table bracket } and associated indentation and newline (if any), and\\\r
2755
- --- \`level\` -- the current level.\r
2756
- ---\r
2757
- ---For example, the following call will apply \`Foo{bar} notation to its output (used by Metalua to display ASTs):\r
2758
- ---\`\`\`lua\r
2759
- ---local function formatter(tag, head, body, tail)\r
2760
- ---local out = head .. body .. tail\r
2761
- --- if tag:find("^lineinfo") then\r
2762
- --- out = out:gsub("\\n%s+", "") -- collapse lineinfo to one line\r
2763
- --- elseif tag == "" then\r
2764
- --- body = body:gsub("%s*lineinfo = [^\\n]+", "")\r
2765
- --- local _, _, atag = body:find('tag = "(%w+)"%s*$')\r
2766
- --- if atag then\r
2767
- --- out = "\`" .. atag .. head .. body:gsub('%s*tag = "%w+"%s*$', "") .. tail\r
2768
- --- out = out:gsub("\\n%s+", ""):gsub(",}", "}")\r
2769
- --- else out = head .. body .. tail end\r
2770
- --- end\r
2771
- --- return tag .. out\r
2772
- ---end\r
2773
- ---\r
2774
- ---print(serpent.block(ast, { comment = false, custom = formatter }))\r
2775
- ---\`\`\`\r
2776
- ---@alias serpent.formater fun(tag: string, head: string, body: string, tail: string, level: number)`});var $i={};Z($i,{default:()=>Mh});var Mh,Vl=Q(()=>{Mh=`---@meta string\r
2777
- \r
2778
- ---\r
2779
- ---Returns a binary string containing the values \`v1\`, \`v2\`, etc. packed (that is, serialized in binary form) according to the format string \`fmt\` (see [\xA76.4.2](command:extension.lua.doc?["en-us/52/manual.html/6.4.2"])) .\r
2780
- ---\r
2781
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-string.pack"])\r
2782
- ---\r
2783
- ---@param fmt string\r
2784
- ---@param v1 string|number\r
2785
- ---@param v2? string|number\r
2786
- ---@param ... string|number\r
2787
- ---@return string binary\r
2788
- ---@nodiscard\r
2789
- function string.pack(fmt, v1, v2, ...) end\r
2790
- \r
2791
- ---\r
2792
- ---Returns the size of a string resulting from \`string.pack\` with the given format string \`fmt\` (see [\xA76.4.2](command:extension.lua.doc?["en-us/52/manual.html/6.4.2"])) .\r
2793
- ---\r
2794
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-string.packsize"])\r
2795
- ---\r
2796
- ---@param fmt string\r
2797
- ---@return integer\r
2798
- ---@nodiscard\r
2799
- function string.packsize(fmt) end\r
2800
- \r
2801
- ---\r
2802
- ---Returns the values packed in string according to the format string \`fmt\` (see [\xA76.4.2](command:extension.lua.doc?["en-us/52/manual.html/6.4.2"])) .\r
2803
- ---\r
2804
- ---[View documents](command:extension.lua.doc?["en-us/52/manual.html/pdf-string.unpack"])\r
2805
- ---\r
2806
- ---@param fmt string\r
2807
- ---@param s string\r
2808
- ---@param pos? integer\r
2809
- ---@return any ...\r
2810
- ---@return integer offset\r
2811
- ---@nodiscard\r
2812
- function string.unpack(fmt, s, pos) end\r
2813
- `});var Fi={};Z(Fi,{default:()=>Uh});var Uh,zl=Q(()=>{Uh=`---@meta _\r
2814
- \r
2815
- ---@param object LuaObject\r
2816
- ---@return LuaObject.object_name object_name\r
2817
- ---@nodiscard\r
2818
- function __object_name(object) end\r
2819
- \r
2820
- ---@class LuaObject\r
2821
- ---@field valid boolean\r
2822
- ---@field object_name LuaObject.object_name\r
2823
- `});var Oi={};Z(Oi,{default:()=>Wh});var Wh,Hl=Q(()=>{Wh=`---@meta _\r
2824
- \r
2825
- ---@class BlueprintCircuitConnection\r
2826
- \r
2827
- ---@class BlueprintControlBehavior\r
2828
- ---@field condition? CircuitCondition\r
2829
- ---@field circuit_condition? CircuitCondition\r
2830
- ---@field filters? Signal[]\r
2831
- ---@field is_on? boolean\r
2832
- ---@field arithmetic_conditions? ArithmeticCombinatorParameters\r
2833
- ---@field decider_conditions? DeciderCombinatorParameters\r
2834
- ---@field circuit_enable_disable? boolean\r
2835
- ---@field circuit_read_resources? boolean\r
2836
- ---@field circuit_resource_read_mode? defines.control_behavior.mining_drill.resource_read_mode\r
2837
- ---@field read_stopped_train? boolean\r
2838
- ---@field train_stopped_signal? SignalID\r
2839
- ---@field read_from_train? boolean\r
2840
- ---@field send_to_train? boolean\r
2841
- ---@field circuit_mode_of_operation? integer This should be the per-type defines but that's hard\r
2842
- ---@field circuit_read_hand_contents? boolean\r
2843
- ---@field circuit_hand_read_mode? defines.control_behavior.inserter\r
2844
- ---@field circuit_set_stack_size? boolean\r
2845
- ---@field stack_control_input_signal? SignalID\r
2846
- ---@field use_colors? boolean\r
2847
- ---@field read_robot_stats? boolean\r
2848
- ---@field read_logistics? boolean\r
2849
- ---@field available_logistic_output_signal? SignalID\r
2850
- ---@field total_logistic_output_signal? SignalID\r
2851
- ---@field available_construction_output_signal? SignalID\r
2852
- ---@field total_construction_output_signal? SignalID\r
2853
- ---@field circuit_contents_read_mode? defines.control_behavior.transport_belt\r
2854
- ---@field output_signal? SignalID\r
2855
- ---@field circuit_close_signal? SignalID\r
2856
- ---@field circuit_read_signal? SignalID\r
2857
- ---@field red_output_signal? SignalID\r
2858
- ---@field orange_output_signal? SignalID\r
2859
- ---@field green_output_signal? SignalID\r
2860
- ---@field blue_output_signal? SignalID\r
2861
- ---@field circuit_open_gate? boolean\r
2862
- ---@field circuit_read_sensor? boolean\r
2863
- ---@field circuit_parameters? ProgrammableSpeakerCircuitParameters\r
2864
- `});var Bi={};Z(Bi,{default:()=>zh});var zh,Kl=Q(()=>{zh=`---@meta _\r
2865
- \r
2866
- ---@see storage\r
2867
- ---@deprecated use \`storage\`\r
2868
- global = nil\r
2869
- \r
2870
- ---@class LuaBootstrap\r
2871
- local scriptdep = {\r
2872
- \r
2873
- ---@deprecated use \`script.register_on_object_destroyed\`\r
2874
- ---@see script.register_on_object_destroyed\r
2875
- register_on_entity_destroyed = nil\r
2876
- }\r
2877
- \r
2878
- ---@class LuaGameScript\r
2879
- local gamedep = {\r
2880
- ---@deprecated use \`script.active_mods\`\r
2881
- ---@see script.active_mods\r
2882
- active_mods = nil,\r
2883
- \r
2884
- ---@deprecated use \`helpers.table_to_json\`\r
2885
- ---@see helpers.table_to_json\r
2886
- table_to_json = nil,\r
2887
- ---@deprecated use \`helpers.json_to_table\`\r
2888
- ---@see helpers.json_to_table\r
2889
- json_to_table = nil,\r
2890
- ---@deprecated use \`helpers.write_file\`\r
2891
- ---@see helpers.write_file\r
2892
- write_file = nil,\r
2893
- ---@deprecated use \`helpers.remove_path\`\r
2894
- ---@see helpers.remove_path\r
2895
- remove_path = nil,\r
2896
- ---@deprecated use \`helpers.direction_to_string\`\r
2897
- ---@see helpers.direction_to_string\r
2898
- direction_to_string = nil,\r
2899
- ---@deprecated use \`helpers.evaluate_expression\`\r
2900
- ---@see helpers.evaluate_expression\r
2901
- evaluate_expression = nil,\r
2902
- ---@deprecated use \`helpers.encode_string\`\r
2903
- ---@see helpers.encode_string\r
2904
- encode_string = nil,\r
2905
- ---@deprecated use \`helpers.decode_string\`\r
2906
- ---@see helpers.decode_string\r
2907
- decode_string = nil,\r
2908
- ---@deprecated use \`helpers.parse_map_exchange_string\`\r
2909
- ---@see helpers.parse_map_exchange_string\r
2910
- parse_map_exchange_string = nil,\r
2911
- ---@deprecated use \`helpers.check_prototype_translations\`\r
2912
- ---@see helpers.check_prototype_translations\r
2913
- check_prototype_translations = nil,\r
2914
- ---@deprecated use \`helpers.is_valid_sound_path\`\r
2915
- ---@see helpers.is_valid_sound_path\r
2916
- is_valid_sound_path = nil,\r
2917
- ---@deprecated use \`helpers.is_valid_sprite_path\`\r
2918
- ---@see helpers.is_valid_sprite_path\r
2919
- is_valid_sprite_path = nil,\r
2920
- \r
2921
- ---@deprecated use \`prototypes.get_entity_filtered\`\r
2922
- ---@see prototypes.get_entity_filtered\r
2923
- get_filtered_entity_prototypes = nil,\r
2924
- ---@deprecated use \`prototypes.get_item_filtered\`\r
2925
- ---@see prototypes.get_item_filtered\r
2926
- get_filtered_item_prototypes = nil,\r
2927
- ---@deprecated use \`prototypes.get_equipment_filtered\`\r
2928
- ---@see prototypes.get_equipment_filtered\r
2929
- get_filtered_equipment_prototypes = nil,\r
2930
- ---@deprecated use \`prototypes.get_mod_setting_filtered\`\r
2931
- ---@see prototypes.get_mod_setting_filtered\r
2932
- get_filtered_mod_setting_prototypes = nil,\r
2933
- ---@deprecated use \`prototypes.get_achievement_filtered\`\r
2934
- ---@see prototypes.get_achievement_filtered\r
2935
- get_filtered_achievement_prototypes = nil,\r
2936
- ---@deprecated use \`prototypes.get_tile_filtered\`\r
2937
- ---@see prototypes.get_tile_filtered\r
2938
- get_filtered_tile_prototypes = nil,\r
2939
- ---@deprecated use \`prototypes.get_decorative_filtered\`\r
2940
- ---@see prototypes.get_decorative_filtered\r
2941
- get_filtered_decorative_prototypes = nil,\r
2942
- ---@deprecated use \`prototypes.get_fluid_filtered\`\r
2943
- ---@see prototypes.get_fluid_filtered\r
2944
- get_filtered_fluid_prototypes = nil,\r
2945
- ---@deprecated use \`prototypes.get_recipe_filtered\`\r
2946
- ---@see prototypes.get_recipe_filtered\r
2947
- get_filtered_recipe_prototypes = nil,\r
2948
- ---@deprecated use \`prototypes.get_technology_filtered\`\r
2949
- ---@see prototypes.get_technology_filtered\r
2950
- get_filtered_technology_prototypes = nil,\r
2951
- \r
2952
- \r
2953
- ---@deprecated use \`prototypes.entity\`\r
2954
- ---@see prototypes.entity\r
2955
- entity_prototypes = nil,\r
2956
- \r
2957
- \r
2958
- ---@deprecated use \`prototypes.item\`\r
2959
- ---@see prototypes.item\r
2960
- item_prototypes = nil,\r
2961
- ---@deprecated use \`prototypes.fluid\`\r
2962
- ---@see prototypes.fluid\r
2963
- fluid_prototypes = nil,\r
2964
- ---@deprecated use \`prototypes.tile\`\r
2965
- ---@see prototypes.tile\r
2966
- tile_prototypes = nil,\r
2967
- ---@deprecated use \`prototypes.equipment\`\r
2968
- ---@see prototypes.equipment\r
2969
- equipment_prototypes = nil,\r
2970
- ---@deprecated use \`prototypes.damage\`\r
2971
- ---@see prototypes.damage\r
2972
- damage_prototypes = nil,\r
2973
- ---@deprecated use \`prototypes.virtual_signal\`\r
2974
- ---@see prototypes.virtual_signal\r
2975
- virtual_signal_prototypes = nil,\r
2976
- ---@deprecated use \`prototypes.equipment_grid\`\r
2977
- ---@see prototypes.equipment_grid\r
2978
- equipment_grid_prototypes = nil,\r
2979
- ---@deprecated use \`prototypes.recipe\`\r
2980
- ---@see prototypes.recipe\r
2981
- recipe_prototypes = nil,\r
2982
- ---@deprecated use \`prototypes.technology\`\r
2983
- ---@see prototypes.technology\r
2984
- technology_prototypes = nil,\r
2985
- ---@deprecated use \`prototypes.decorative\`\r
2986
- ---@see prototypes.decorative\r
2987
- decorative_prototypes = nil,\r
2988
- ---@deprecated use \`prototypes.particle\`\r
2989
- ---@see prototypes.particle\r
2990
- particle_prototypes = nil,\r
2991
- ---@deprecated use \`prototypes.autoplace_control\`\r
2992
- ---@see prototypes.autoplace_control\r
2993
- autoplace_control_prototypes = nil,\r
2994
- ---@deprecated use \`prototypes.noise_layer\`\r
2995
- ---@see prototypes.noise_layer\r
2996
- noise_layer_prototypes = nil,\r
2997
- ---@deprecated use \`prototypes.mod_setting\`\r
2998
- ---@see prototypes.mod_setting\r
2999
- mod_setting_prototypes = nil,\r
3000
- ---@deprecated use \`prototypes.custom_input\`\r
3001
- ---@see prototypes.custom_input\r
3002
- custom_input_prototypes = nil,\r
3003
- ---@deprecated use \`prototypes.ammo_category\`\r
3004
- ---@see prototypes.ammo_category\r
3005
- ammo_category_prototypes = nil,\r
3006
- ---@deprecated use \`prototypes.named_noise_expression\`\r
3007
- ---@see prototypes.named_noise_expression\r
3008
- named_noise_expressions = nil,\r
3009
- ---@deprecated use \`prototypes.item_subgroup\`\r
3010
- ---@see prototypes.item_subgroup\r
3011
- item_subgroup_prototypes = nil,\r
3012
- ---@deprecated use \`prototypes.item_group\`\r
3013
- ---@see prototypes.item_group\r
3014
- item_group_prototypes = nil,\r
3015
- ---@deprecated use \`prototypes.fuel_category\`\r
3016
- ---@see prototypes.fuel_category\r
3017
- fuel_category_prototypes = nil,\r
3018
- ---@deprecated use \`prototypes.resource_category\`\r
3019
- ---@see prototypes.resource_category\r
3020
- resource_category_prototypes = nil,\r
3021
- ---@deprecated use \`prototypes.achievement\`\r
3022
- ---@see prototypes.achievement\r
3023
- achievement_prototypes = nil,\r
3024
- ---@deprecated use \`prototypes.module_category\`\r
3025
- ---@see prototypes.module_category\r
3026
- module_category_prototypes = nil,\r
3027
- ---@deprecated use \`prototypes.equipment_category\`\r
3028
- ---@see prototypes.equipment_category\r
3029
- equipment_category_prototypes = nil,\r
3030
- ---@deprecated use \`prototypes.trivial_smoke\`\r
3031
- ---@see prototypes.trivial_smoke\r
3032
- trivial_smoke_prototypes = nil,\r
3033
- ---@deprecated use \`prototypes.shortcut\`\r
3034
- ---@see prototypes.shortcut\r
3035
- shortcut_prototypes = nil,\r
3036
- ---@deprecated use \`prototypes.recipe_category\`\r
3037
- ---@see prototypes.recipe_category\r
3038
- recipe_category_prototypes = nil,\r
3039
- ---@deprecated use \`prototypes.font\`\r
3040
- ---@see prototypes.font\r
3041
- font_prototypes = nil,\r
3042
- \r
3043
- }`});var qi={};Z(qi,{default:()=>Kh});var Kh,Gl=Q(()=>{Kh=`---@meta _\r
3044
- \r
3045
- ---@type table\r
3046
- storage = {}\r
3047
- `});var Mi={};Z(Mi,{default:()=>Xh});var Xh,Xl=Q(()=>{Xh=`--##
3048
- ---cSpell:ignore userdata, nups, nparams
3049
-
3050
- -- (this should probably be in some better location, maybe the readme? i'm not sure)
3051
- -- what do the different prefixes for gmatch results mean:
3052
- -- s = start, f = finish, p = position, no prefix = an actual string capture
3053
-
3054
- ---Dev Notes: confirm "path/to/lua-language-server/script/", in Lua.Workspace.Library for completions
3055
-
3056
- -- define \`__plugin_dev\` variable used during development with https://github.com/JanSharp/SumnekoLuaPluginDevEnv
3057
- ---@diagnostic disable-next-line
3058
- if false then __plugin_dev = true end
3059
-
3060
- local workspace
3061
- local furi
3062
- local client
3063
- if not __plugin_dev then
3064
- workspace = require("workspace")
3065
- furi = require("file-uri")
3066
- client = require("client")
3067
- end
3068
-
3069
- local arg_parser = require("factorio-plugin.arg-parser")
3070
- local util = require("factorio-plugin.util")
3071
- local require_module = require("factorio-plugin.require")
3072
- local storage = require("factorio-plugin.storage")
3073
- local remote = require("factorio-plugin.remote")
3074
- local object_name = require("factorio-plugin.object-name")
3075
- local command_line = require("factorio-plugin.command-line")
3076
-
3077
- ---@class Diff
3078
- ---@field start integer @ The number of bytes at the beginning of the replacement
3079
- ---@field finish integer @ The number of bytes at the end of the replacement
3080
- ---@field text string @ What to replace
3081
-
3082
- ---@alias Diff.ArrayWithCount {[integer]: Diff, ["count"]: integer}
3083
-
3084
- ---@param msg string
3085
- local function log_info(msg)
3086
- if __plugin_dev then
3087
- print(msg)
3088
- return
3089
- end
3090
- client.logMessage("Info", msg)
3091
- log.info(msg) ---@diagnostic disable-line: undefined-field
3092
- end
3093
-
3094
- ---@param msg string
3095
- local function log_warn(msg)
3096
- if __plugin_dev then
3097
- print(msg)
3098
- return
3099
- end
3100
- client.logMessage("Warning", msg)
3101
- log.warn(msg) ---@diagnostic disable-line: undefined-field
3102
- end
3103
-
3104
- ---@param args string[]
3105
- ---@param config ArgsConfig
3106
- ---@param help_config? ArgsHelpConfig
3107
- ---@return table? args @ returns \`nil\` if there was an error, \`{help = true}\` if it was help
3108
- local function parse_and_show_msg_on_error_or_help(args, config, help_config)
3109
- local result, err_or_index = arg_parser.parse(args, config)
3110
-
3111
- if result and err_or_index < #args then
3112
- result = nil
3113
- err_or_index = string.format("Unknown/too many values. Consumed %d out of %d arguments.", err_or_index, #args)
3114
- end
3115
-
3116
- if result and not result.help then
3117
- return result
3118
- end
3119
-
3120
- local long_msg = (result and "\\n" or (err_or_index.."\\n\\n"))..arg_parser.get_help_string(config, help_config)
3121
- if not result then
3122
- client.showMessage("Warning", "Invalid FMTK plugin args: "..err_or_index.." See Output/log for help message.")
3123
- log_warn(long_msg)
3124
- else
3125
- client.showMessage("Info", "See Output/log for FMTK plugin help message.")
3126
- log_info(long_msg)
3127
- result = {help = true}
3128
- end
3129
- return result
3130
- end
3131
-
3132
- ---@type string
3133
- local workspace_uri = __plugin_dev and "file:///dev/null" or select(2, ...)
3134
- ---@type string|(string[])|{[string]: string|(string[])}
3135
- local plugin_args = __plugin_dev and {} or select(3, ...)
3136
-
3137
- if type(plugin_args) == "table" and not plugin_args[1] then
3138
- local keys = {}
3139
- for k in pairs(plugin_args) do
3140
- keys[#keys+1] = k
3141
- end
3142
- -- Sort because I do not trust that they got added to the table in deterministic order.
3143
- -- (Tmk LuaLS's pairs does have insertion iteration order, therefore the mention of "got added".)
3144
- table.sort(keys)
3145
- for _, k in ipairs(keys) do
3146
- if (k:lower():find("factorio", 1, true)) then
3147
- log_info(string.format("FMTK using plugin args from key %q", k))
3148
- plugin_args = plugin_args[k]
3149
- break
3150
- end
3151
- end
3152
- end
3153
-
3154
- -- Both to handle LuaLS <= v3.9.3, but also to handle args which were defined using
3155
- -- {[string]: string|(string[])}, because I'm 99% certain that'll end up giving us a
3156
- -- string instead of actual string arrays (aka I think it's also (a separate) bug.)
3157
- if type(plugin_args) ~= "table" then
3158
- -- The log message says string even though it could be anything. If it is not a string
3159
- -- then the safety loop below will catch it and also log its message.
3160
- log_warn("FMTK plugin received a string instead of a string array as plugin args.\\n\\z
3161
- If LuaLS v3.9.3 or lower is used, make sure to update.\\n\\z
3162
- If the issue persists it is likely a different bug in the LuaLS.")
3163
- plugin_args = {plugin_args}
3164
- end
3165
-
3166
- do -- Major trust issues.
3167
- local i = 1
3168
- local c = #plugin_args
3169
- local newI = 1
3170
- while i <= c do
3171
- local arg = plugin_args[i]
3172
- plugin_args[i] = nil
3173
- if type(arg) == "string" then
3174
- plugin_args[newI] = arg
3175
- newI = newI + 1
3176
- else
3177
- log_warn(string.format("FMTK plugin received non string plugin arg %s (type %s)", tostring(arg), type(arg)))
3178
- end
3179
- i = i + 1
3180
- end
3181
- end
3182
-
3183
- do
3184
- log_info("FMTK plugin workspace uri: "..workspace_uri)
3185
- local pretty_args = {}
3186
- for i = 1, #plugin_args do
3187
- pretty_args[i] = string.format("%q", plugin_args[i])
3188
- end
3189
- log_info(string.format("FMTK plugin args (%d): %s", #plugin_args, table.concat(pretty_args, ", ")))
3190
- end
3191
-
3192
- ---@class PluginArgs
3193
- ---@field ignore string[]?
3194
- ---@field clusterio_modules boolean
3195
-
3196
- ---@type PluginArgs
3197
- local args = parse_and_show_msg_on_error_or_help(plugin_args, {
3198
- options = {
3199
- {
3200
- field = "ignore",
3201
- long = "ignore",
3202
- description = "Completely disable the plugin for the given folders or files.\\n\\z
3203
- Either absolute or relative to the workspace root.",
3204
- type = "string",
3205
- min_params = 1,
3206
- optional = true,
3207
- },
3208
- {
3209
- field = "clusterio_modules",
3210
- long = "clusterio-modules",
3211
- description = "Enable the require module path modification for\\n\\z
3212
- \\"^modules/[^/]-/\\" to get replaced with \\"module/\\",\\n\\z
3213
- except for \\"^modules/clusterio/\\" which remains untouched.",
3214
- flag = true,
3215
- },
3216
- },
3217
- })--[[@as PluginArgs]]
3218
- args = args or {}
3219
-
3220
- ---@type table<string, true>
3221
- local ignored_paths = {}
3222
- for _, path in ipairs(args.ignore or {}) do
3223
- local full_path = workspace.getAbsolutePath(workspace_uri, path) -- Returns a normalized path.
3224
- log_info(string.format("FMTK plugin --ignore %q resolved to %q", path, full_path or "<nil>"))
3225
- if full_path then
3226
- ignored_paths[full_path] = true
3227
- end
3228
- end
3229
-
3230
- ---@param uri string @ The uri of file
3231
- ---@param text string @ The content of file
3232
- ---@return nil|Diff[]
3233
- function OnSetText(uri, text)
3234
- if not __plugin_dev then
3235
- local path = furi.decode(uri)
3236
- if path then
3237
- for ignored_path in pairs(ignored_paths) do
3238
- if path:sub(1, #ignored_path) == ignored_path then
3239
- -- log.info("Plugin ignoring "..path.." because of ignored path "..ignored_path)
3240
- return
3241
- end
3242
- end
3243
- end
3244
- end
3245
-
3246
- ---I can't see a reason to process ---@meta files
3247
- ---Speeds up loading by not reading annotation files
3248
- if text:sub(1, 8) == "---@meta" or text:sub(1, 4) == "--##" then return end
3249
-
3250
- local diffs = {count = 0} ---@type Diff.ArrayWithCount
3251
-
3252
- util.on_pre_process_file(text, diffs)
3253
-
3254
- require_module.replace(uri, text, diffs, args)
3255
- remote.replace(uri, text, diffs)
3256
- object_name.replace(uri, text, diffs)
3257
- command_line.replace(uri, text, diffs)
3258
- -- The following replacements require other diffs to be created already
3259
- -- to be able to check for their existence to prevent duplication/overlaps.
3260
- storage.replace(uri, text, diffs)
3261
-
3262
- util.on_post_process_file()
3263
-
3264
- diffs.count = nil
3265
- return diffs
3266
- end
3267
- `});var Yl={};Z(Yl,{default:()=>Qh,filenames:()=>Jh});var Yh,Qh,Jh,Ql=Q(()=>{"use strict";xl();Ll();Al();kl();Tl();Cl();Il();Dl();$l();Fl();Ol();Bl();ql();Ml();Nl();Ul();jl();Wl();Vl();zl();Hl();Kl();Gl();Xl();Yh=[gi,_i,bi,yi,wi,vi,Si,Ri,Pi,Ei,xi,Li,Ai,ki,Ti,Ci,Ii,Di,$i,Fi,Oi,Bi,qi,Mi],Qh=Yh,Jh=["../luals-addon/factorio/factorio-plugin/arg-parser.lua","../luals-addon/factorio/factorio-plugin/command-line.lua","../luals-addon/factorio/factorio-plugin/object-name.lua","../luals-addon/factorio/factorio-plugin/remote.lua","../luals-addon/factorio/factorio-plugin/require.lua","../luals-addon/factorio/factorio-plugin/storage.lua","../luals-addon/factorio/factorio-plugin/util.lua","../luals-addon/factorio/library/core/lualib/event_handler.lua","../luals-addon/factorio/library/core/lualib/meld.lua","../luals-addon/factorio/library/core/lualib/mod-gui.lua","../luals-addon/factorio/library/core/lualib/util.lua","../luals-addon/factorio/library/data/mod-settings.lua","../luals-addon/factorio/library/data/mods.lua","../luals-addon/factorio/library/lua/builtins.lua","../luals-addon/factorio/library/lua/debug.lua","../luals-addon/factorio/library/lua/math.lua","../luals-addon/factorio/library/lua/package.lua","../luals-addon/factorio/library/lua/serpent.lua","../luals-addon/factorio/library/lua/string.lua","../luals-addon/factorio/library/runtime/LuaObject.lua","../luals-addon/factorio/library/runtime/blueprint.lua","../luals-addon/factorio/library/runtime/deprecated_2.0.lua","../luals-addon/factorio/library/runtime/storage.lua","../luals-addon/factorio/plugin.lua"]});var Jl=F((Mb,Zh)=>{Zh.exports={name:"Factorio",files:["control%.lua","data%.lua","data%-updates%.lua","data%-final%-fixes%.lua","settings%.lua","settings%-updates%.lua","settings%-final%-fixes%.lua"],settings:{"Lua.runtime.version":"Lua 5.2","Lua.runtime.path":["?.lua"],"Lua.runtime.special":{__object_name:"type"},"Lua.runtime.builtin":{io:"disable",os:"disable",coroutine:"disable",package:"disable",math:"disable",debug:"disable"},"Lua.diagnostics.globals":["__DebugAdapter","__Profiler"],"Lua.diagnostics.disable":["lowercase-global"]}}});var tu=F((Vn,eu)=>{"use strict";(function(a,e){typeof Vn=="object"&&typeof eu<"u"?e(Vn):typeof define=="function"&&define.amd?define(["exports"],e):(a=typeof globalThis<"u"?globalThis:a||self,e(a.WebStreamsPolyfill={}))})(Vn,function(a){"use strict";function e(){}function t(r){return typeof r=="object"&&r!==null||typeof r=="function"}let n=e;function o(r,i){try{Object.defineProperty(r,"name",{value:i,configurable:!0})}catch{}}let s=Promise,u=Promise.prototype.then,f=Promise.reject.bind(s);function d(r){return new s(r)}function c(r){return d(i=>i(r))}function p(r){return f(r)}function m(r,i,l){return u.call(r,i,l)}function y(r,i,l){m(m(r,i,l),void 0,n)}function g(r,i){y(r,i)}function w(r,i){y(r,void 0,i)}function R(r,i,l){return m(r,i,l)}function k(r){m(r,void 0,n)}let C=r=>{if(typeof queueMicrotask=="function")C=queueMicrotask;else{let i=c(void 0);C=l=>m(i,l)}return C(r)};function E(r,i,l){if(typeof r!="function")throw new TypeError("Argument is not a function");return Function.prototype.apply.call(r,i,l)}function re(r,i,l){try{return c(E(r,i,l))}catch(h){return p(h)}}let G=16384;class X{constructor(){this._cursor=0,this._size=0,this._front={_elements:[],_next:void 0},this._back=this._front,this._cursor=0,this._size=0}get length(){return this._size}push(i){let l=this._back,h=l;l._elements.length===G-1&&(h={_elements:[],_next:void 0}),l._elements.push(i),h!==l&&(this._back=h,l._next=h),++this._size}shift(){let i=this._front,l=i,h=this._cursor,b=h+1,v=i._elements,S=v[h];return b===G&&(l=i._next,b=0),--this._size,this._cursor=b,i!==l&&(this._front=l),v[h]=void 0,S}forEach(i){let l=this._cursor,h=this._front,b=h._elements;for(;(l!==b.length||h._next!==void 0)&&!(l===b.length&&(h=h._next,b=h._elements,l=0,b.length===0));)i(b[l]),++l}peek(){let i=this._front,l=this._cursor;return i._elements[l]}}let J=Symbol("[[AbortSteps]]"),ze=Symbol("[[ErrorSteps]]"),He=Symbol("[[CancelSteps]]"),wt=Symbol("[[PullSteps]]"),Mt=Symbol("[[ReleaseSteps]]");function I(r,i){r._ownerReadableStream=i,i._reader=r,i._state==="readable"?Y(r):i._state==="closed"?V(r):H(r,i._storedError)}function P(r,i){let l=r._ownerReadableStream;return Ge(l,i)}function D(r){let i=r._ownerReadableStream;i._state==="readable"?we(r,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")):ve(r,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")),i._readableStreamController[Mt](),i._reader=void 0,r._ownerReadableStream=void 0}function $(r){return new TypeError("Cannot "+r+" a stream using a released reader")}function Y(r){r._closedPromise=d((i,l)=>{r._closedPromise_resolve=i,r._closedPromise_reject=l})}function H(r,i){Y(r),we(r,i)}function V(r){Y(r),ue(r)}function we(r,i){r._closedPromise_reject!==void 0&&(k(r._closedPromise),r._closedPromise_reject(i),r._closedPromise_resolve=void 0,r._closedPromise_reject=void 0)}function ve(r,i){H(r,i)}function ue(r){r._closedPromise_resolve!==void 0&&(r._closedPromise_resolve(void 0),r._closedPromise_resolve=void 0,r._closedPromise_reject=void 0)}let Nt=Number.isFinite||function(r){return typeof r=="number"&&isFinite(r)},sf=Math.trunc||function(r){return r<0?Math.ceil(r):Math.floor(r)};function lf(r){return typeof r=="object"||typeof r=="function"}function Ze(r,i){if(r!==void 0&&!lf(r))throw new TypeError(`${i} is not an object.`)}function qe(r,i){if(typeof r!="function")throw new TypeError(`${i} is not a function.`)}function uf(r){return typeof r=="object"&&r!==null||typeof r=="function"}function ps(r,i){if(!uf(r))throw new TypeError(`${i} is not an object.`)}function it(r,i,l){if(r===void 0)throw new TypeError(`Parameter ${i} is required in '${l}'.`)}function Io(r,i,l){if(r===void 0)throw new TypeError(`${i} is required in '${l}'.`)}function Do(r){return Number(r)}function hs(r){return r===0?0:r}function cf(r){return hs(sf(r))}function $o(r,i){let h=Number.MAX_SAFE_INTEGER,b=Number(r);if(b=hs(b),!Nt(b))throw new TypeError(`${i} is not a finite number`);if(b=cf(b),b<0||b>h)throw new TypeError(`${i} is outside the accepted range of 0 to ${h}, inclusive`);return!Nt(b)||b===0?0:b}function Fo(r,i){if(!Lt(r))throw new TypeError(`${i} is not a ReadableStream.`)}function ar(r){return new vt(r)}function ms(r,i){r._reader._readRequests.push(i)}function Oo(r,i,l){let b=r._reader._readRequests.shift();l?b._closeSteps():b._chunkSteps(i)}function cn(r){return r._reader._readRequests.length}function gs(r){let i=r._reader;return!(i===void 0||!St(i))}class vt{constructor(i){if(it(i,1,"ReadableStreamDefaultReader"),Fo(i,"First parameter"),At(i))throw new TypeError("This stream has already been locked for exclusive reading by another reader");I(this,i),this._readRequests=new X}get closed(){return St(this)?this._closedPromise:p(dn("closed"))}cancel(i=void 0){return St(this)?this._ownerReadableStream===void 0?p($("cancel")):P(this,i):p(dn("cancel"))}read(){if(!St(this))return p(dn("read"));if(this._ownerReadableStream===void 0)return p($("read from"));let i,l,h=d((v,S)=>{i=v,l=S});return Cr(this,{_chunkSteps:v=>i({value:v,done:!1}),_closeSteps:()=>i({value:void 0,done:!0}),_errorSteps:v=>l(v)}),h}releaseLock(){if(!St(this))throw dn("releaseLock");this._ownerReadableStream!==void 0&&df(this)}}Object.defineProperties(vt.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),o(vt.prototype.cancel,"cancel"),o(vt.prototype.read,"read"),o(vt.prototype.releaseLock,"releaseLock"),typeof Symbol.toStringTag=="symbol"&&Object.defineProperty(vt.prototype,Symbol.toStringTag,{value:"ReadableStreamDefaultReader",configurable:!0});function St(r){return!t(r)||!Object.prototype.hasOwnProperty.call(r,"_readRequests")?!1:r instanceof vt}function Cr(r,i){let l=r._ownerReadableStream;l._disturbed=!0,l._state==="closed"?i._closeSteps():l._state==="errored"?i._errorSteps(l._storedError):l._readableStreamController[wt](i)}function df(r){D(r);let i=new TypeError("Reader was released");_s(r,i)}function _s(r,i){let l=r._readRequests;r._readRequests=new X,l.forEach(h=>{h._errorSteps(i)})}function dn(r){return new TypeError(`ReadableStreamDefaultReader.prototype.${r} can only be used on a ReadableStreamDefaultReader`)}let ff=Object.getPrototypeOf(Object.getPrototypeOf(async function*(){}).prototype);class bs{constructor(i,l){this._ongoingPromise=void 0,this._isFinished=!1,this._reader=i,this._preventCancel=l}next(){let i=()=>this._nextSteps();return this._ongoingPromise=this._ongoingPromise?R(this._ongoingPromise,i,i):i(),this._ongoingPromise}return(i){let l=()=>this._returnSteps(i);return this._ongoingPromise?R(this._ongoingPromise,l,l):l()}_nextSteps(){if(this._isFinished)return Promise.resolve({value:void 0,done:!0});let i=this._reader,l,h,b=d((S,x)=>{l=S,h=x});return Cr(i,{_chunkSteps:S=>{this._ongoingPromise=void 0,C(()=>l({value:S,done:!1}))},_closeSteps:()=>{this._ongoingPromise=void 0,this._isFinished=!0,D(i),l({value:void 0,done:!0})},_errorSteps:S=>{this._ongoingPromise=void 0,this._isFinished=!0,D(i),h(S)}}),b}_returnSteps(i){if(this._isFinished)return Promise.resolve({value:i,done:!0});this._isFinished=!0;let l=this._reader;if(!this._preventCancel){let h=P(l,i);return D(l),R(h,()=>({value:i,done:!0}))}return D(l),c({value:i,done:!0})}}let ys={next(){return ws(this)?this._asyncIteratorImpl.next():p(vs("next"))},return(r){return ws(this)?this._asyncIteratorImpl.return(r):p(vs("return"))}};Object.setPrototypeOf(ys,ff);function pf(r,i){let l=ar(r),h=new bs(l,i),b=Object.create(ys);return b._asyncIteratorImpl=h,b}function ws(r){if(!t(r)||!Object.prototype.hasOwnProperty.call(r,"_asyncIteratorImpl"))return!1;try{return r._asyncIteratorImpl instanceof bs}catch{return!1}}function vs(r){return new TypeError(`ReadableStreamAsyncIterator.${r} can only be used on a ReadableSteamAsyncIterator`)}let Ss=Number.isNaN||function(r){return r!==r};var Bo,qo,Mo;function Ir(r){return r.slice()}function Rs(r,i,l,h,b){new Uint8Array(r).set(new Uint8Array(l,h,b),i)}let at=r=>(typeof r.transfer=="function"?at=i=>i.transfer():typeof structuredClone=="function"?at=i=>structuredClone(i,{transfer:[i]}):at=i=>i,at(r)),Rt=r=>(typeof r.detached=="boolean"?Rt=i=>i.detached:Rt=i=>i.byteLength===0,Rt(r));function Ps(r,i,l){if(r.slice)return r.slice(i,l);let h=l-i,b=new ArrayBuffer(h);return Rs(b,0,r,i,h),b}function fn(r,i){let l=r[i];if(l!=null){if(typeof l!="function")throw new TypeError(`${String(i)} is not a function`);return l}}function hf(r){let i={[Symbol.iterator]:()=>r.iterator},l=async function*(){return yield*i}(),h=l.next;return{iterator:l,nextMethod:h,done:!1}}let No=(Mo=(Bo=Symbol.asyncIterator)!==null&&Bo!==void 0?Bo:(qo=Symbol.for)===null||qo===void 0?void 0:qo.call(Symbol,"Symbol.asyncIterator"))!==null&&Mo!==void 0?Mo:"@@asyncIterator";function Es(r,i="sync",l){if(l===void 0)if(i==="async"){if(l=fn(r,No),l===void 0){let v=fn(r,Symbol.iterator),S=Es(r,"sync",v);return hf(S)}}else l=fn(r,Symbol.iterator);if(l===void 0)throw new TypeError("The object is not iterable");let h=E(l,r,[]);if(!t(h))throw new TypeError("The iterator method must return an object");let b=h.next;return{iterator:h,nextMethod:b,done:!1}}function mf(r){let i=E(r.nextMethod,r.iterator,[]);if(!t(i))throw new TypeError("The iterator.next() method must return an object");return i}function gf(r){return!!r.done}function _f(r){return r.value}function bf(r){return!(typeof r!="number"||Ss(r)||r<0)}function xs(r){let i=Ps(r.buffer,r.byteOffset,r.byteOffset+r.byteLength);return new Uint8Array(i)}function Uo(r){let i=r._queue.shift();return r._queueTotalSize-=i.size,r._queueTotalSize<0&&(r._queueTotalSize=0),i.value}function jo(r,i,l){if(!bf(l)||l===1/0)throw new RangeError("Size must be a finite, non-NaN, non-negative number.");r._queue.push({value:i,size:l}),r._queueTotalSize+=l}function yf(r){return r._queue.peek().value}function Pt(r){r._queue=new X,r._queueTotalSize=0}function Ls(r){return r===DataView}function wf(r){return Ls(r.constructor)}function vf(r){return Ls(r)?1:r.BYTES_PER_ELEMENT}class Ut{constructor(){throw new TypeError("Illegal constructor")}get view(){if(!Wo(this))throw Go("view");return this._view}respond(i){if(!Wo(this))throw Go("respond");if(it(i,1,"respond"),i=$o(i,"First parameter"),this._associatedReadableByteStreamController===void 0)throw new TypeError("This BYOB request has been invalidated");if(Rt(this._view.buffer))throw new TypeError("The BYOB request's buffer has been detached and so cannot be used as a response");gn(this._associatedReadableByteStreamController,i)}respondWithNewView(i){if(!Wo(this))throw Go("respondWithNewView");if(it(i,1,"respondWithNewView"),!ArrayBuffer.isView(i))throw new TypeError("You can only respond with array buffer views");if(this._associatedReadableByteStreamController===void 0)throw new TypeError("This BYOB request has been invalidated");if(Rt(i.buffer))throw new TypeError("The given view's buffer has been detached and so cannot be used as a response");_n(this._associatedReadableByteStreamController,i)}}Object.defineProperties(Ut.prototype,{respond:{enumerable:!0},respondWithNewView:{enumerable:!0},view:{enumerable:!0}}),o(Ut.prototype.respond,"respond"),o(Ut.prototype.respondWithNewView,"respondWithNewView"),typeof Symbol.toStringTag=="symbol"&&Object.defineProperty(Ut.prototype,Symbol.toStringTag,{value:"ReadableStreamBYOBRequest",configurable:!0});class st{constructor(){throw new TypeError("Illegal constructor")}get byobRequest(){if(!jt(this))throw $r("byobRequest");return Ko(this)}get desiredSize(){if(!jt(this))throw $r("desiredSize");return Bs(this)}close(){if(!jt(this))throw $r("close");if(this._closeRequested)throw new TypeError("The stream has already been closed; do not close it again!");let i=this._controlledReadableByteStream._state;if(i!=="readable")throw new TypeError(`The stream (in ${i} state) is not in the readable state and cannot be closed`);Dr(this)}enqueue(i){if(!jt(this))throw $r("enqueue");if(it(i,1,"enqueue"),!ArrayBuffer.isView(i))throw new TypeError("chunk must be an array buffer view");if(i.byteLength===0)throw new TypeError("chunk must have non-zero byteLength");if(i.buffer.byteLength===0)throw new TypeError("chunk's buffer must have non-zero byteLength");if(this._closeRequested)throw new TypeError("stream is closed or draining");let l=this._controlledReadableByteStream._state;if(l!=="readable")throw new TypeError(`The stream (in ${l} state) is not in the readable state and cannot be enqueued to`);mn(this,i)}error(i=void 0){if(!jt(this))throw $r("error");Me(this,i)}[He](i){As(this),Pt(this);let l=this._cancelAlgorithm(i);return hn(this),l}[wt](i){let l=this._controlledReadableByteStream;if(this._queueTotalSize>0){Os(this,i);return}let h=this._autoAllocateChunkSize;if(h!==void 0){let b;try{b=new ArrayBuffer(h)}catch(S){i._errorSteps(S);return}let v={buffer:b,bufferByteLength:h,byteOffset:0,byteLength:h,bytesFilled:0,minimumFill:1,elementSize:1,viewConstructor:Uint8Array,readerType:"default"};this._pendingPullIntos.push(v)}ms(l,i),_(this)}[Mt](){if(this._pendingPullIntos.length>0){let i=this._pendingPullIntos.peek();i.readerType="none",this._pendingPullIntos=new X,this._pendingPullIntos.push(i)}}}Object.defineProperties(st.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},byobRequest:{enumerable:!0},desiredSize:{enumerable:!0}}),o(st.prototype.close,"close"),o(st.prototype.enqueue,"enqueue"),o(st.prototype.error,"error"),typeof Symbol.toStringTag=="symbol"&&Object.defineProperty(st.prototype,Symbol.toStringTag,{value:"ReadableByteStreamController",configurable:!0});function jt(r){return!t(r)||!Object.prototype.hasOwnProperty.call(r,"_controlledReadableByteStream")?!1:r instanceof st}function Wo(r){return!t(r)||!Object.prototype.hasOwnProperty.call(r,"_associatedReadableByteStreamController")?!1:r instanceof Ut}function _(r){if(!xf(r))return;if(r._pulling){r._pullAgain=!0;return}r._pulling=!0;let l=r._pullAlgorithm();y(l,()=>(r._pulling=!1,r._pullAgain&&(r._pullAgain=!1,_(r)),null),h=>(Me(r,h),null))}function As(r){zo(r),r._pendingPullIntos=new X}function Vo(r,i){let l=!1;r._state==="closed"&&(l=!0);let h=ks(i);i.readerType==="default"?Oo(r,h,l):If(r,h,l)}function ks(r){let i=r.bytesFilled,l=r.elementSize;return new r.viewConstructor(r.buffer,r.byteOffset,i/l)}function pn(r,i,l,h){r._queue.push({buffer:i,byteOffset:l,byteLength:h}),r._queueTotalSize+=h}function Ts(r,i,l,h){let b;try{b=Ps(i,l,l+h)}catch(v){throw Me(r,v),v}pn(r,b,0,h)}function Cs(r,i){i.bytesFilled>0&&Ts(r,i.buffer,i.byteOffset,i.bytesFilled),sr(r)}function Is(r,i){let l=Math.min(r._queueTotalSize,i.byteLength-i.bytesFilled),h=i.bytesFilled+l,b=l,v=!1,S=h%i.elementSize,x=h-S;x>=i.minimumFill&&(b=x-i.bytesFilled,v=!0);let U=r._queue;for(;b>0;){let B=U.peek(),j=Math.min(b,B.byteLength),z=i.byteOffset+i.bytesFilled;Rs(i.buffer,z,B.buffer,B.byteOffset,j),B.byteLength===j?U.shift():(B.byteOffset+=j,B.byteLength-=j),r._queueTotalSize-=j,Ds(r,j,i),b-=j}return v}function Ds(r,i,l){l.bytesFilled+=i}function $s(r){r._queueTotalSize===0&&r._closeRequested?(hn(r),Nr(r._controlledReadableByteStream)):_(r)}function zo(r){r._byobRequest!==null&&(r._byobRequest._associatedReadableByteStreamController=void 0,r._byobRequest._view=null,r._byobRequest=null)}function Ho(r){for(;r._pendingPullIntos.length>0;){if(r._queueTotalSize===0)return;let i=r._pendingPullIntos.peek();Is(r,i)&&(sr(r),Vo(r._controlledReadableByteStream,i))}}function Sf(r){let i=r._controlledReadableByteStream._reader;for(;i._readRequests.length>0;){if(r._queueTotalSize===0)return;let l=i._readRequests.shift();Os(r,l)}}function Rf(r,i,l,h){let b=r._controlledReadableByteStream,v=i.constructor,S=vf(v),{byteOffset:x,byteLength:U}=i,B=l*S,j;try{j=at(i.buffer)}catch(ne){h._errorSteps(ne);return}let z={buffer:j,bufferByteLength:j.byteLength,byteOffset:x,byteLength:U,bytesFilled:0,minimumFill:B,elementSize:S,viewConstructor:v,readerType:"byob"};if(r._pendingPullIntos.length>0){r._pendingPullIntos.push(z),Ns(b,h);return}if(b._state==="closed"){let ne=new v(z.buffer,z.byteOffset,0);h._closeSteps(ne);return}if(r._queueTotalSize>0){if(Is(r,z)){let ne=ks(z);$s(r),h._chunkSteps(ne);return}if(r._closeRequested){let ne=new TypeError("Insufficient bytes to fill elements in the given buffer");Me(r,ne),h._errorSteps(ne);return}}r._pendingPullIntos.push(z),Ns(b,h),_(r)}function Pf(r,i){i.readerType==="none"&&sr(r);let l=r._controlledReadableByteStream;if(Xo(l))for(;Us(l)>0;){let h=sr(r);Vo(l,h)}}function Ef(r,i,l){if(Ds(r,i,l),l.readerType==="none"){Cs(r,l),Ho(r);return}if(l.bytesFilled<l.minimumFill)return;sr(r);let h=l.bytesFilled%l.elementSize;if(h>0){let b=l.byteOffset+l.bytesFilled;Ts(r,l.buffer,b-h,h)}l.bytesFilled-=h,Vo(r._controlledReadableByteStream,l),Ho(r)}function Fs(r,i){let l=r._pendingPullIntos.peek();zo(r),r._controlledReadableByteStream._state==="closed"?Pf(r,l):Ef(r,i,l),_(r)}function sr(r){return r._pendingPullIntos.shift()}function xf(r){let i=r._controlledReadableByteStream;return i._state!=="readable"||r._closeRequested||!r._started?!1:!!(gs(i)&&cn(i)>0||Xo(i)&&Us(i)>0||Bs(r)>0)}function hn(r){r._pullAlgorithm=void 0,r._cancelAlgorithm=void 0}function Dr(r){let i=r._controlledReadableByteStream;if(!(r._closeRequested||i._state!=="readable")){if(r._queueTotalSize>0){r._closeRequested=!0;return}if(r._pendingPullIntos.length>0){let l=r._pendingPullIntos.peek();if(l.bytesFilled%l.elementSize!==0){let h=new TypeError("Insufficient bytes to fill elements in the given buffer");throw Me(r,h),h}}hn(r),Nr(i)}}function mn(r,i){let l=r._controlledReadableByteStream;if(r._closeRequested||l._state!=="readable")return;let{buffer:h,byteOffset:b,byteLength:v}=i;if(Rt(h))throw new TypeError("chunk's buffer is detached and so cannot be enqueued");let S=at(h);if(r._pendingPullIntos.length>0){let x=r._pendingPullIntos.peek();if(Rt(x.buffer))throw new TypeError("The BYOB request's buffer has been detached and so cannot be filled with an enqueued chunk");zo(r),x.buffer=at(x.buffer),x.readerType==="none"&&Cs(r,x)}if(gs(l))if(Sf(r),cn(l)===0)pn(r,S,b,v);else{r._pendingPullIntos.length>0&&sr(r);let x=new Uint8Array(S,b,v);Oo(l,x,!1)}else Xo(l)?(pn(r,S,b,v),Ho(r)):pn(r,S,b,v);_(r)}function Me(r,i){let l=r._controlledReadableByteStream;l._state==="readable"&&(As(r),Pt(r),hn(r),dl(l,i))}function Os(r,i){let l=r._queue.shift();r._queueTotalSize-=l.byteLength,$s(r);let h=new Uint8Array(l.buffer,l.byteOffset,l.byteLength);i._chunkSteps(h)}function Ko(r){if(r._byobRequest===null&&r._pendingPullIntos.length>0){let i=r._pendingPullIntos.peek(),l=new Uint8Array(i.buffer,i.byteOffset+i.bytesFilled,i.byteLength-i.bytesFilled),h=Object.create(Ut.prototype);Af(h,r,l),r._byobRequest=h}return r._byobRequest}function Bs(r){let i=r._controlledReadableByteStream._state;return i==="errored"?null:i==="closed"?0:r._strategyHWM-r._queueTotalSize}function gn(r,i){let l=r._pendingPullIntos.peek();if(r._controlledReadableByteStream._state==="closed"){if(i!==0)throw new TypeError("bytesWritten must be 0 when calling respond() on a closed stream")}else{if(i===0)throw new TypeError("bytesWritten must be greater than 0 when calling respond() on a readable stream");if(l.bytesFilled+i>l.byteLength)throw new RangeError("bytesWritten out of range")}l.buffer=at(l.buffer),Fs(r,i)}function _n(r,i){let l=r._pendingPullIntos.peek();if(r._controlledReadableByteStream._state==="closed"){if(i.byteLength!==0)throw new TypeError("The view's length must be 0 when calling respondWithNewView() on a closed stream")}else if(i.byteLength===0)throw new TypeError("The view's length must be greater than 0 when calling respondWithNewView() on a readable stream");if(l.byteOffset+l.bytesFilled!==i.byteOffset)throw new RangeError("The region specified by view does not match byobRequest");if(l.bufferByteLength!==i.buffer.byteLength)throw new RangeError("The buffer of view has different capacity than byobRequest");if(l.bytesFilled+i.byteLength>l.byteLength)throw new RangeError("The region specified by view is larger than byobRequest");let b=i.byteLength;l.buffer=at(i.buffer),Fs(r,b)}function qs(r,i,l,h,b,v,S){i._controlledReadableByteStream=r,i._pullAgain=!1,i._pulling=!1,i._byobRequest=null,i._queue=i._queueTotalSize=void 0,Pt(i),i._closeRequested=!1,i._started=!1,i._strategyHWM=v,i._pullAlgorithm=h,i._cancelAlgorithm=b,i._autoAllocateChunkSize=S,i._pendingPullIntos=new X,r._readableStreamController=i;let x=l();y(c(x),()=>(i._started=!0,_(i),null),U=>(Me(i,U),null))}function Lf(r,i,l){let h=Object.create(st.prototype),b,v,S;i.start!==void 0?b=()=>i.start(h):b=()=>{},i.pull!==void 0?v=()=>i.pull(h):v=()=>c(void 0),i.cancel!==void 0?S=U=>i.cancel(U):S=()=>c(void 0);let x=i.autoAllocateChunkSize;if(x===0)throw new TypeError("autoAllocateChunkSize must be greater than 0");qs(r,h,b,v,S,l,x)}function Af(r,i,l){r._associatedReadableByteStreamController=i,r._view=l}function Go(r){return new TypeError(`ReadableStreamBYOBRequest.prototype.${r} can only be used on a ReadableStreamBYOBRequest`)}function $r(r){return new TypeError(`ReadableByteStreamController.prototype.${r} can only be used on a ReadableByteStreamController`)}function kf(r,i){Ze(r,i);let l=r?.mode;return{mode:l===void 0?void 0:Tf(l,`${i} has member 'mode' that`)}}function Tf(r,i){if(r=`${r}`,r!=="byob")throw new TypeError(`${i} '${r}' is not a valid enumeration value for ReadableStreamReaderMode`);return r}function Cf(r,i){var l;Ze(r,i);let h=(l=r?.min)!==null&&l!==void 0?l:1;return{min:$o(h,`${i} has member 'min' that`)}}function Ms(r){return new Et(r)}function Ns(r,i){r._reader._readIntoRequests.push(i)}function If(r,i,l){let b=r._reader._readIntoRequests.shift();l?b._closeSteps(i):b._chunkSteps(i)}function Us(r){return r._reader._readIntoRequests.length}function Xo(r){let i=r._reader;return!(i===void 0||!Wt(i))}class Et{constructor(i){if(it(i,1,"ReadableStreamBYOBReader"),Fo(i,"First parameter"),At(i))throw new TypeError("This stream has already been locked for exclusive reading by another reader");if(!jt(i._readableStreamController))throw new TypeError("Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte source");I(this,i),this._readIntoRequests=new X}get closed(){return Wt(this)?this._closedPromise:p(bn("closed"))}cancel(i=void 0){return Wt(this)?this._ownerReadableStream===void 0?p($("cancel")):P(this,i):p(bn("cancel"))}read(i,l={}){if(!Wt(this))return p(bn("read"));if(!ArrayBuffer.isView(i))return p(new TypeError("view must be an array buffer view"));if(i.byteLength===0)return p(new TypeError("view must have non-zero byteLength"));if(i.buffer.byteLength===0)return p(new TypeError("view's buffer must have non-zero byteLength"));if(Rt(i.buffer))return p(new TypeError("view's buffer has been detached"));let h;try{h=Cf(l,"options")}catch(B){return p(B)}let b=h.min;if(b===0)return p(new TypeError("options.min must be greater than 0"));if(wf(i)){if(b>i.byteLength)return p(new RangeError("options.min must be less than or equal to view's byteLength"))}else if(b>i.length)return p(new RangeError("options.min must be less than or equal to view's length"));if(this._ownerReadableStream===void 0)return p($("read from"));let v,S,x=d((B,j)=>{v=B,S=j});return js(this,i,b,{_chunkSteps:B=>v({value:B,done:!1}),_closeSteps:B=>v({value:B,done:!0}),_errorSteps:B=>S(B)}),x}releaseLock(){if(!Wt(this))throw bn("releaseLock");this._ownerReadableStream!==void 0&&Df(this)}}Object.defineProperties(Et.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),o(Et.prototype.cancel,"cancel"),o(Et.prototype.read,"read"),o(Et.prototype.releaseLock,"releaseLock"),typeof Symbol.toStringTag=="symbol"&&Object.defineProperty(Et.prototype,Symbol.toStringTag,{value:"ReadableStreamBYOBReader",configurable:!0});function Wt(r){return!t(r)||!Object.prototype.hasOwnProperty.call(r,"_readIntoRequests")?!1:r instanceof Et}function js(r,i,l,h){let b=r._ownerReadableStream;b._disturbed=!0,b._state==="errored"?h._errorSteps(b._storedError):Rf(b._readableStreamController,i,l,h)}function Df(r){D(r);let i=new TypeError("Reader was released");Ws(r,i)}function Ws(r,i){let l=r._readIntoRequests;r._readIntoRequests=new X,l.forEach(h=>{h._errorSteps(i)})}function bn(r){return new TypeError(`ReadableStreamBYOBReader.prototype.${r} can only be used on a ReadableStreamBYOBReader`)}function Fr(r,i){let{highWaterMark:l}=r;if(l===void 0)return i;if(Ss(l)||l<0)throw new RangeError("Invalid highWaterMark");return l}function yn(r){let{size:i}=r;return i||(()=>1)}function wn(r,i){Ze(r,i);let l=r?.highWaterMark,h=r?.size;return{highWaterMark:l===void 0?void 0:Do(l),size:h===void 0?void 0:$f(h,`${i} has member 'size' that`)}}function $f(r,i){return qe(r,i),l=>Do(r(l))}function Ff(r,i){Ze(r,i);let l=r?.abort,h=r?.close,b=r?.start,v=r?.type,S=r?.write;return{abort:l===void 0?void 0:Of(l,r,`${i} has member 'abort' that`),close:h===void 0?void 0:Bf(h,r,`${i} has member 'close' that`),start:b===void 0?void 0:qf(b,r,`${i} has member 'start' that`),write:S===void 0?void 0:Mf(S,r,`${i} has member 'write' that`),type:v}}function Of(r,i,l){return qe(r,l),h=>re(r,i,[h])}function Bf(r,i,l){return qe(r,l),()=>re(r,i,[])}function qf(r,i,l){return qe(r,l),h=>E(r,i,[h])}function Mf(r,i,l){return qe(r,l),(h,b)=>re(r,i,[h,b])}function Vs(r,i){if(!lr(r))throw new TypeError(`${i} is not a WritableStream.`)}function Nf(r){if(typeof r!="object"||r===null)return!1;try{return typeof r.aborted=="boolean"}catch{return!1}}let Uf=typeof AbortController=="function";function jf(){if(Uf)return new AbortController}class xt{constructor(i={},l={}){i===void 0?i=null:ps(i,"First parameter");let h=wn(l,"Second parameter"),b=Ff(i,"First parameter");if(Hs(this),b.type!==void 0)throw new RangeError("Invalid type is specified");let S=yn(h),x=Fr(h,1);rp(this,b,x,S)}get locked(){if(!lr(this))throw En("locked");return ur(this)}abort(i=void 0){return lr(this)?ur(this)?p(new TypeError("Cannot abort a stream that already has a writer")):vn(this,i):p(En("abort"))}close(){return lr(this)?ur(this)?p(new TypeError("Cannot close a stream that already has a writer")):et(this)?p(new TypeError("Cannot close an already-closing stream")):Ks(this):p(En("close"))}getWriter(){if(!lr(this))throw En("getWriter");return zs(this)}}Object.defineProperties(xt.prototype,{abort:{enumerable:!0},close:{enumerable:!0},getWriter:{enumerable:!0},locked:{enumerable:!0}}),o(xt.prototype.abort,"abort"),o(xt.prototype.close,"close"),o(xt.prototype.getWriter,"getWriter"),typeof Symbol.toStringTag=="symbol"&&Object.defineProperty(xt.prototype,Symbol.toStringTag,{value:"WritableStream",configurable:!0});function zs(r){return new lt(r)}function Wf(r,i,l,h,b=1,v=()=>1){let S=Object.create(xt.prototype);Hs(S);let x=Object.create(cr.prototype);return Zs(S,x,r,i,l,h,b,v),S}function Hs(r){r._state="writable",r._storedError=void 0,r._writer=void 0,r._writableStreamController=void 0,r._writeRequests=new X,r._inFlightWriteRequest=void 0,r._closeRequest=void 0,r._inFlightCloseRequest=void 0,r._pendingAbortRequest=void 0,r._backpressure=!1}function lr(r){return!t(r)||!Object.prototype.hasOwnProperty.call(r,"_writableStreamController")?!1:r instanceof xt}function ur(r){return r._writer!==void 0}function vn(r,i){var l;if(r._state==="closed"||r._state==="errored")return c(void 0);r._writableStreamController._abortReason=i,(l=r._writableStreamController._abortController)===null||l===void 0||l.abort(i);let h=r._state;if(h==="closed"||h==="errored")return c(void 0);if(r._pendingAbortRequest!==void 0)return r._pendingAbortRequest._promise;let b=!1;h==="erroring"&&(b=!0,i=void 0);let v=d((S,x)=>{r._pendingAbortRequest={_promise:void 0,_resolve:S,_reject:x,_reason:i,_wasAlreadyErroring:b}});return r._pendingAbortRequest._promise=v,b||Qo(r,i),v}function Ks(r){let i=r._state;if(i==="closed"||i==="errored")return p(new TypeError(`The stream (in ${i} state) is not in the writable state and cannot be closed`));let l=d((b,v)=>{let S={_resolve:b,_reject:v};r._closeRequest=S}),h=r._writer;return h!==void 0&&r._backpressure&&i==="writable"&&ii(h),np(r._writableStreamController),l}function Vf(r){return d((l,h)=>{let b={_resolve:l,_reject:h};r._writeRequests.push(b)})}function Yo(r,i){if(r._state==="writable"){Qo(r,i);return}Jo(r)}function Qo(r,i){let l=r._writableStreamController;r._state="erroring",r._storedError=i;let h=r._writer;h!==void 0&&Xs(h,i),!Xf(r)&&l._started&&Jo(r)}function Jo(r){r._state="errored",r._writableStreamController[ze]();let i=r._storedError;if(r._writeRequests.forEach(b=>{b._reject(i)}),r._writeRequests=new X,r._pendingAbortRequest===void 0){Sn(r);return}let l=r._pendingAbortRequest;if(r._pendingAbortRequest=void 0,l._wasAlreadyErroring){l._reject(i),Sn(r);return}let h=r._writableStreamController[J](l._reason);y(h,()=>(l._resolve(),Sn(r),null),b=>(l._reject(b),Sn(r),null))}function zf(r){r._inFlightWriteRequest._resolve(void 0),r._inFlightWriteRequest=void 0}function Hf(r,i){r._inFlightWriteRequest._reject(i),r._inFlightWriteRequest=void 0,Yo(r,i)}function Kf(r){r._inFlightCloseRequest._resolve(void 0),r._inFlightCloseRequest=void 0,r._state==="erroring"&&(r._storedError=void 0,r._pendingAbortRequest!==void 0&&(r._pendingAbortRequest._resolve(),r._pendingAbortRequest=void 0)),r._state="closed";let l=r._writer;l!==void 0&&nl(l)}function Gf(r,i){r._inFlightCloseRequest._reject(i),r._inFlightCloseRequest=void 0,r._pendingAbortRequest!==void 0&&(r._pendingAbortRequest._reject(i),r._pendingAbortRequest=void 0),Yo(r,i)}function et(r){return!(r._closeRequest===void 0&&r._inFlightCloseRequest===void 0)}function Xf(r){return!(r._inFlightWriteRequest===void 0&&r._inFlightCloseRequest===void 0)}function Yf(r){r._inFlightCloseRequest=r._closeRequest,r._closeRequest=void 0}function Qf(r){r._inFlightWriteRequest=r._writeRequests.shift()}function Sn(r){r._closeRequest!==void 0&&(r._closeRequest._reject(r._storedError),r._closeRequest=void 0);let i=r._writer;i!==void 0&&ni(i,r._storedError)}function Zo(r,i){let l=r._writer;l!==void 0&&i!==r._backpressure&&(i?cp(l):ii(l)),r._backpressure=i}class lt{constructor(i){if(it(i,1,"WritableStreamDefaultWriter"),Vs(i,"First parameter"),ur(i))throw new TypeError("This stream has already been locked for exclusive writing by another writer");this._ownerWritableStream=i,i._writer=this;let l=i._state;if(l==="writable")!et(i)&&i._backpressure?Ln(this):ol(this),xn(this);else if(l==="erroring")oi(this,i._storedError),xn(this);else if(l==="closed")ol(this),lp(this);else{let h=i._storedError;oi(this,h),rl(this,h)}}get closed(){return Vt(this)?this._closedPromise:p(zt("closed"))}get desiredSize(){if(!Vt(this))throw zt("desiredSize");if(this._ownerWritableStream===void 0)throw Br("desiredSize");return tp(this)}get ready(){return Vt(this)?this._readyPromise:p(zt("ready"))}abort(i=void 0){return Vt(this)?this._ownerWritableStream===void 0?p(Br("abort")):Jf(this,i):p(zt("abort"))}close(){if(!Vt(this))return p(zt("close"));let i=this._ownerWritableStream;return i===void 0?p(Br("close")):et(i)?p(new TypeError("Cannot close an already-closing stream")):Gs(this)}releaseLock(){if(!Vt(this))throw zt("releaseLock");this._ownerWritableStream!==void 0&&Ys(this)}write(i=void 0){return Vt(this)?this._ownerWritableStream===void 0?p(Br("write to")):Qs(this,i):p(zt("write"))}}Object.defineProperties(lt.prototype,{abort:{enumerable:!0},close:{enumerable:!0},releaseLock:{enumerable:!0},write:{enumerable:!0},closed:{enumerable:!0},desiredSize:{enumerable:!0},ready:{enumerable:!0}}),o(lt.prototype.abort,"abort"),o(lt.prototype.close,"close"),o(lt.prototype.releaseLock,"releaseLock"),o(lt.prototype.write,"write"),typeof Symbol.toStringTag=="symbol"&&Object.defineProperty(lt.prototype,Symbol.toStringTag,{value:"WritableStreamDefaultWriter",configurable:!0});function Vt(r){return!t(r)||!Object.prototype.hasOwnProperty.call(r,"_ownerWritableStream")?!1:r instanceof lt}function Jf(r,i){let l=r._ownerWritableStream;return vn(l,i)}function Gs(r){let i=r._ownerWritableStream;return Ks(i)}function Zf(r){let i=r._ownerWritableStream,l=i._state;return et(i)||l==="closed"?c(void 0):l==="errored"?p(i._storedError):Gs(r)}function ep(r,i){r._closedPromiseState==="pending"?ni(r,i):up(r,i)}function Xs(r,i){r._readyPromiseState==="pending"?il(r,i):dp(r,i)}function tp(r){let i=r._ownerWritableStream,l=i._state;return l==="errored"||l==="erroring"?null:l==="closed"?0:el(i._writableStreamController)}function Ys(r){let i=r._ownerWritableStream,l=new TypeError("Writer was released and can no longer be used to monitor the stream's closedness");Xs(r,l),ep(r,l),i._writer=void 0,r._ownerWritableStream=void 0}function Qs(r,i){let l=r._ownerWritableStream,h=l._writableStreamController,b=op(h,i);if(l!==r._ownerWritableStream)return p(Br("write to"));let v=l._state;if(v==="errored")return p(l._storedError);if(et(l)||v==="closed")return p(new TypeError("The stream is closing or closed and cannot be written to"));if(v==="erroring")return p(l._storedError);let S=Vf(l);return ip(h,i,b),S}let Js={};class cr{constructor(){throw new TypeError("Illegal constructor")}get abortReason(){if(!ei(this))throw ri("abortReason");return this._abortReason}get signal(){if(!ei(this))throw ri("signal");if(this._abortController===void 0)throw new TypeError("WritableStreamDefaultController.prototype.signal is not supported");return this._abortController.signal}error(i=void 0){if(!ei(this))throw ri("error");this._controlledWritableStream._state==="writable"&&tl(this,i)}[J](i){let l=this._abortAlgorithm(i);return Rn(this),l}[ze](){Pt(this)}}Object.defineProperties(cr.prototype,{abortReason:{enumerable:!0},signal:{enumerable:!0},error:{enumerable:!0}}),typeof Symbol.toStringTag=="symbol"&&Object.defineProperty(cr.prototype,Symbol.toStringTag,{value:"WritableStreamDefaultController",configurable:!0});function ei(r){return!t(r)||!Object.prototype.hasOwnProperty.call(r,"_controlledWritableStream")?!1:r instanceof cr}function Zs(r,i,l,h,b,v,S,x){i._controlledWritableStream=r,r._writableStreamController=i,i._queue=void 0,i._queueTotalSize=void 0,Pt(i),i._abortReason=void 0,i._abortController=jf(),i._started=!1,i._strategySizeAlgorithm=x,i._strategyHWM=S,i._writeAlgorithm=h,i._closeAlgorithm=b,i._abortAlgorithm=v;let U=ti(i);Zo(r,U);let B=l(),j=c(B);y(j,()=>(i._started=!0,Pn(i),null),z=>(i._started=!0,Yo(r,z),null))}function rp(r,i,l,h){let b=Object.create(cr.prototype),v,S,x,U;i.start!==void 0?v=()=>i.start(b):v=()=>{},i.write!==void 0?S=B=>i.write(B,b):S=()=>c(void 0),i.close!==void 0?x=()=>i.close():x=()=>c(void 0),i.abort!==void 0?U=B=>i.abort(B):U=()=>c(void 0),Zs(r,b,v,S,x,U,l,h)}function Rn(r){r._writeAlgorithm=void 0,r._closeAlgorithm=void 0,r._abortAlgorithm=void 0,r._strategySizeAlgorithm=void 0}function np(r){jo(r,Js,0),Pn(r)}function op(r,i){try{return r._strategySizeAlgorithm(i)}catch(l){return Or(r,l),1}}function el(r){return r._strategyHWM-r._queueTotalSize}function ip(r,i,l){try{jo(r,i,l)}catch(b){Or(r,b);return}let h=r._controlledWritableStream;if(!et(h)&&h._state==="writable"){let b=ti(r);Zo(h,b)}Pn(r)}function Pn(r){let i=r._controlledWritableStream;if(!r._started||i._inFlightWriteRequest!==void 0)return;if(i._state==="erroring"){Jo(i);return}if(r._queue.length===0)return;let h=yf(r);h===Js?ap(r):sp(r,h)}function Or(r,i){r._controlledWritableStream._state==="writable"&&tl(r,i)}function ap(r){let i=r._controlledWritableStream;Yf(i),Uo(r);let l=r._closeAlgorithm();Rn(r),y(l,()=>(Kf(i),null),h=>(Gf(i,h),null))}function sp(r,i){let l=r._controlledWritableStream;Qf(l);let h=r._writeAlgorithm(i);y(h,()=>{zf(l);let b=l._state;if(Uo(r),!et(l)&&b==="writable"){let v=ti(r);Zo(l,v)}return Pn(r),null},b=>(l._state==="writable"&&Rn(r),Hf(l,b),null))}function ti(r){return el(r)<=0}function tl(r,i){let l=r._controlledWritableStream;Rn(r),Qo(l,i)}function En(r){return new TypeError(`WritableStream.prototype.${r} can only be used on a WritableStream`)}function ri(r){return new TypeError(`WritableStreamDefaultController.prototype.${r} can only be used on a WritableStreamDefaultController`)}function zt(r){return new TypeError(`WritableStreamDefaultWriter.prototype.${r} can only be used on a WritableStreamDefaultWriter`)}function Br(r){return new TypeError("Cannot "+r+" a stream using a released writer")}function xn(r){r._closedPromise=d((i,l)=>{r._closedPromise_resolve=i,r._closedPromise_reject=l,r._closedPromiseState="pending"})}function rl(r,i){xn(r),ni(r,i)}function lp(r){xn(r),nl(r)}function ni(r,i){r._closedPromise_reject!==void 0&&(k(r._closedPromise),r._closedPromise_reject(i),r._closedPromise_resolve=void 0,r._closedPromise_reject=void 0,r._closedPromiseState="rejected")}function up(r,i){rl(r,i)}function nl(r){r._closedPromise_resolve!==void 0&&(r._closedPromise_resolve(void 0),r._closedPromise_resolve=void 0,r._closedPromise_reject=void 0,r._closedPromiseState="resolved")}function Ln(r){r._readyPromise=d((i,l)=>{r._readyPromise_resolve=i,r._readyPromise_reject=l}),r._readyPromiseState="pending"}function oi(r,i){Ln(r),il(r,i)}function ol(r){Ln(r),ii(r)}function il(r,i){r._readyPromise_reject!==void 0&&(k(r._readyPromise),r._readyPromise_reject(i),r._readyPromise_resolve=void 0,r._readyPromise_reject=void 0,r._readyPromiseState="rejected")}function cp(r){Ln(r)}function dp(r,i){oi(r,i)}function ii(r){r._readyPromise_resolve!==void 0&&(r._readyPromise_resolve(void 0),r._readyPromise_resolve=void 0,r._readyPromise_reject=void 0,r._readyPromiseState="fulfilled")}function fp(){if(typeof globalThis<"u")return globalThis;if(typeof self<"u")return self;if(typeof global<"u")return global}let ai=fp();function pp(r){if(!(typeof r=="function"||typeof r=="object")||r.name!=="DOMException")return!1;try{return new r,!0}catch{return!1}}function hp(){let r=ai?.DOMException;return pp(r)?r:void 0}function mp(){let r=function(l,h){this.message=l||"",this.name=h||"Error",Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)};return o(r,"DOMException"),r.prototype=Object.create(Error.prototype),Object.defineProperty(r.prototype,"constructor",{value:r,writable:!0,configurable:!0}),r}let gp=hp()||mp();function al(r,i,l,h,b,v){let S=ar(r),x=zs(i);r._disturbed=!0;let U=!1,B=c(void 0);return d((j,z)=>{let ne;if(v!==void 0){if(ne=()=>{let M=v.reason!==void 0?v.reason:new gp("Aborted","AbortError"),K=[];h||K.push(()=>i._state==="writable"?vn(i,M):c(void 0)),b||K.push(()=>r._state==="readable"?Ge(r,M):c(void 0)),Se(()=>Promise.all(K.map(oe=>oe())),!0,M)},v.aborted){ne();return}v.addEventListener("abort",ne)}function Xe(){return d((M,K)=>{function oe(ke){ke?M():m(hr(),oe,K)}oe(!1)})}function hr(){return U?c(!0):m(x._readyPromise,()=>d((M,K)=>{Cr(S,{_chunkSteps:oe=>{B=m(Qs(x,oe),void 0,e),M(!1)},_closeSteps:()=>M(!0),_errorSteps:K})}))}if(ct(r,S._closedPromise,M=>(h?Ne(!0,M):Se(()=>vn(i,M),!0,M),null)),ct(i,x._closedPromise,M=>(b?Ne(!0,M):Se(()=>Ge(r,M),!0,M),null)),_e(r,S._closedPromise,()=>(l?Ne():Se(()=>Zf(x)),null)),et(i)||i._state==="closed"){let M=new TypeError("the destination writable stream closed before all data could be piped to it");b?Ne(!0,M):Se(()=>Ge(r,M),!0,M)}k(Xe());function Tt(){let M=B;return m(B,()=>M!==B?Tt():void 0)}function ct(M,K,oe){M._state==="errored"?oe(M._storedError):w(K,oe)}function _e(M,K,oe){M._state==="closed"?oe():g(K,oe)}function Se(M,K,oe){if(U)return;U=!0,i._state==="writable"&&!et(i)?g(Tt(),ke):ke();function ke(){return y(M(),()=>dt(K,oe),mr=>dt(!0,mr)),null}}function Ne(M,K){U||(U=!0,i._state==="writable"&&!et(i)?g(Tt(),()=>dt(M,K)):dt(M,K))}function dt(M,K){return Ys(x),D(S),v!==void 0&&v.removeEventListener("abort",ne),M?z(K):j(void 0),null}})}class ut{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!An(this))throw Tn("desiredSize");return si(this)}close(){if(!An(this))throw Tn("close");if(!fr(this))throw new TypeError("The stream is not in a state that permits close");Ht(this)}enqueue(i=void 0){if(!An(this))throw Tn("enqueue");if(!fr(this))throw new TypeError("The stream is not in a state that permits enqueue");return dr(this,i)}error(i=void 0){if(!An(this))throw Tn("error");Ke(this,i)}[He](i){Pt(this);let l=this._cancelAlgorithm(i);return kn(this),l}[wt](i){let l=this._controlledReadableStream;if(this._queue.length>0){let h=Uo(this);this._closeRequested&&this._queue.length===0?(kn(this),Nr(l)):qr(this),i._chunkSteps(h)}else ms(l,i),qr(this)}[Mt](){}}Object.defineProperties(ut.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},desiredSize:{enumerable:!0}}),o(ut.prototype.close,"close"),o(ut.prototype.enqueue,"enqueue"),o(ut.prototype.error,"error"),typeof Symbol.toStringTag=="symbol"&&Object.defineProperty(ut.prototype,Symbol.toStringTag,{value:"ReadableStreamDefaultController",configurable:!0});function An(r){return!t(r)||!Object.prototype.hasOwnProperty.call(r,"_controlledReadableStream")?!1:r instanceof ut}function qr(r){if(!sl(r))return;if(r._pulling){r._pullAgain=!0;return}r._pulling=!0;let l=r._pullAlgorithm();y(l,()=>(r._pulling=!1,r._pullAgain&&(r._pullAgain=!1,qr(r)),null),h=>(Ke(r,h),null))}function sl(r){let i=r._controlledReadableStream;return!fr(r)||!r._started?!1:!!(At(i)&&cn(i)>0||si(r)>0)}function kn(r){r._pullAlgorithm=void 0,r._cancelAlgorithm=void 0,r._strategySizeAlgorithm=void 0}function Ht(r){if(!fr(r))return;let i=r._controlledReadableStream;r._closeRequested=!0,r._queue.length===0&&(kn(r),Nr(i))}function dr(r,i){if(!fr(r))return;let l=r._controlledReadableStream;if(At(l)&&cn(l)>0)Oo(l,i,!1);else{let h;try{h=r._strategySizeAlgorithm(i)}catch(b){throw Ke(r,b),b}try{jo(r,i,h)}catch(b){throw Ke(r,b),b}}qr(r)}function Ke(r,i){let l=r._controlledReadableStream;l._state==="readable"&&(Pt(r),kn(r),dl(l,i))}function si(r){let i=r._controlledReadableStream._state;return i==="errored"?null:i==="closed"?0:r._strategyHWM-r._queueTotalSize}function _p(r){return!sl(r)}function fr(r){let i=r._controlledReadableStream._state;return!r._closeRequested&&i==="readable"}function ll(r,i,l,h,b,v,S){i._controlledReadableStream=r,i._queue=void 0,i._queueTotalSize=void 0,Pt(i),i._started=!1,i._closeRequested=!1,i._pullAgain=!1,i._pulling=!1,i._strategySizeAlgorithm=S,i._strategyHWM=v,i._pullAlgorithm=h,i._cancelAlgorithm=b,r._readableStreamController=i;let x=l();y(c(x),()=>(i._started=!0,qr(i),null),U=>(Ke(i,U),null))}function bp(r,i,l,h){let b=Object.create(ut.prototype),v,S,x;i.start!==void 0?v=()=>i.start(b):v=()=>{},i.pull!==void 0?S=()=>i.pull(b):S=()=>c(void 0),i.cancel!==void 0?x=U=>i.cancel(U):x=()=>c(void 0),ll(r,b,v,S,x,l,h)}function Tn(r){return new TypeError(`ReadableStreamDefaultController.prototype.${r} can only be used on a ReadableStreamDefaultController`)}function yp(r,i){return jt(r._readableStreamController)?vp(r):wp(r)}function wp(r,i){let l=ar(r),h=!1,b=!1,v=!1,S=!1,x,U,B,j,z,ne=d(_e=>{z=_e});function Xe(){return h?(b=!0,c(void 0)):(h=!0,Cr(l,{_chunkSteps:Se=>{C(()=>{b=!1;let Ne=Se,dt=Se;v||dr(B._readableStreamController,Ne),S||dr(j._readableStreamController,dt),h=!1,b&&Xe()})},_closeSteps:()=>{h=!1,v||Ht(B._readableStreamController),S||Ht(j._readableStreamController),(!v||!S)&&z(void 0)},_errorSteps:()=>{h=!1}}),c(void 0))}function hr(_e){if(v=!0,x=_e,S){let Se=Ir([x,U]),Ne=Ge(r,Se);z(Ne)}return ne}function Tt(_e){if(S=!0,U=_e,v){let Se=Ir([x,U]),Ne=Ge(r,Se);z(Ne)}return ne}function ct(){}return B=Mr(ct,Xe,hr),j=Mr(ct,Xe,Tt),w(l._closedPromise,_e=>(Ke(B._readableStreamController,_e),Ke(j._readableStreamController,_e),(!v||!S)&&z(void 0),null)),[B,j]}function vp(r){let i=ar(r),l=!1,h=!1,b=!1,v=!1,S=!1,x,U,B,j,z,ne=d(M=>{z=M});function Xe(M){w(M._closedPromise,K=>(M!==i||(Me(B._readableStreamController,K),Me(j._readableStreamController,K),(!v||!S)&&z(void 0)),null))}function hr(){Wt(i)&&(D(i),i=ar(r),Xe(i)),Cr(i,{_chunkSteps:K=>{C(()=>{h=!1,b=!1;let oe=K,ke=K;if(!v&&!S)try{ke=xs(K)}catch(mr){Me(B._readableStreamController,mr),Me(j._readableStreamController,mr),z(Ge(r,mr));return}v||mn(B._readableStreamController,oe),S||mn(j._readableStreamController,ke),l=!1,h?ct():b&&_e()})},_closeSteps:()=>{l=!1,v||Dr(B._readableStreamController),S||Dr(j._readableStreamController),B._readableStreamController._pendingPullIntos.length>0&&gn(B._readableStreamController,0),j._readableStreamController._pendingPullIntos.length>0&&gn(j._readableStreamController,0),(!v||!S)&&z(void 0)},_errorSteps:()=>{l=!1}})}function Tt(M,K){St(i)&&(D(i),i=Ms(r),Xe(i));let oe=K?j:B,ke=K?B:j;js(i,M,1,{_chunkSteps:gr=>{C(()=>{h=!1,b=!1;let _r=K?S:v;if(K?v:S)_r||_n(oe._readableStreamController,gr);else{let Pl;try{Pl=xs(gr)}catch(fi){Me(oe._readableStreamController,fi),Me(ke._readableStreamController,fi),z(Ge(r,fi));return}_r||_n(oe._readableStreamController,gr),mn(ke._readableStreamController,Pl)}l=!1,h?ct():b&&_e()})},_closeSteps:gr=>{l=!1;let _r=K?S:v,qn=K?v:S;_r||Dr(oe._readableStreamController),qn||Dr(ke._readableStreamController),gr!==void 0&&(_r||_n(oe._readableStreamController,gr),!qn&&ke._readableStreamController._pendingPullIntos.length>0&&gn(ke._readableStreamController,0)),(!_r||!qn)&&z(void 0)},_errorSteps:()=>{l=!1}})}function ct(){if(l)return h=!0,c(void 0);l=!0;let M=Ko(B._readableStreamController);return M===null?hr():Tt(M._view,!1),c(void 0)}function _e(){if(l)return b=!0,c(void 0);l=!0;let M=Ko(j._readableStreamController);return M===null?hr():Tt(M._view,!0),c(void 0)}function Se(M){if(v=!0,x=M,S){let K=Ir([x,U]),oe=Ge(r,K);z(oe)}return ne}function Ne(M){if(S=!0,U=M,v){let K=Ir([x,U]),oe=Ge(r,K);z(oe)}return ne}function dt(){}return B=cl(dt,ct,Se),j=cl(dt,_e,Ne),Xe(i),[B,j]}function Sp(r){return t(r)&&typeof r.getReader<"u"}function Rp(r){return Sp(r)?Ep(r.getReader()):Pp(r)}function Pp(r){let i,l=Es(r,"async"),h=e;function b(){let S;try{S=mf(l)}catch(U){return p(U)}let x=c(S);return R(x,U=>{if(!t(U))throw new TypeError("The promise returned by the iterator.next() method must fulfill with an object");if(gf(U))Ht(i._readableStreamController);else{let j=_f(U);dr(i._readableStreamController,j)}})}function v(S){let x=l.iterator,U;try{U=fn(x,"return")}catch(z){return p(z)}if(U===void 0)return c(void 0);let B;try{B=E(U,x,[S])}catch(z){return p(z)}let j=c(B);return R(j,z=>{if(!t(z))throw new TypeError("The promise returned by the iterator.return() method must fulfill with an object")})}return i=Mr(h,b,v,0),i}function Ep(r){let i,l=e;function h(){let v;try{v=r.read()}catch(S){return p(S)}return R(v,S=>{if(!t(S))throw new TypeError("The promise returned by the reader.read() method must fulfill with an object");if(S.done)Ht(i._readableStreamController);else{let x=S.value;dr(i._readableStreamController,x)}})}function b(v){try{return c(r.cancel(v))}catch(S){return p(S)}}return i=Mr(l,h,b,0),i}function xp(r,i){Ze(r,i);let l=r,h=l?.autoAllocateChunkSize,b=l?.cancel,v=l?.pull,S=l?.start,x=l?.type;return{autoAllocateChunkSize:h===void 0?void 0:$o(h,`${i} has member 'autoAllocateChunkSize' that`),cancel:b===void 0?void 0:Lp(b,l,`${i} has member 'cancel' that`),pull:v===void 0?void 0:Ap(v,l,`${i} has member 'pull' that`),start:S===void 0?void 0:kp(S,l,`${i} has member 'start' that`),type:x===void 0?void 0:Tp(x,`${i} has member 'type' that`)}}function Lp(r,i,l){return qe(r,l),h=>re(r,i,[h])}function Ap(r,i,l){return qe(r,l),h=>re(r,i,[h])}function kp(r,i,l){return qe(r,l),h=>E(r,i,[h])}function Tp(r,i){if(r=`${r}`,r!=="bytes")throw new TypeError(`${i} '${r}' is not a valid enumeration value for ReadableStreamType`);return r}function Cp(r,i){return Ze(r,i),{preventCancel:!!r?.preventCancel}}function ul(r,i){Ze(r,i);let l=r?.preventAbort,h=r?.preventCancel,b=r?.preventClose,v=r?.signal;return v!==void 0&&Ip(v,`${i} has member 'signal' that`),{preventAbort:!!l,preventCancel:!!h,preventClose:!!b,signal:v}}function Ip(r,i){if(!Nf(r))throw new TypeError(`${i} is not an AbortSignal.`)}function Dp(r,i){Ze(r,i);let l=r?.readable;Io(l,"readable","ReadableWritablePair"),Fo(l,`${i} has member 'readable' that`);let h=r?.writable;return Io(h,"writable","ReadableWritablePair"),Vs(h,`${i} has member 'writable' that`),{readable:l,writable:h}}class me{constructor(i={},l={}){i===void 0?i=null:ps(i,"First parameter");let h=wn(l,"Second parameter"),b=xp(i,"First parameter");if(li(this),b.type==="bytes"){if(h.size!==void 0)throw new RangeError("The strategy for a byte stream cannot have a size function");let v=Fr(h,0);Lf(this,b,v)}else{let v=yn(h),S=Fr(h,1);bp(this,b,S,v)}}get locked(){if(!Lt(this))throw Kt("locked");return At(this)}cancel(i=void 0){return Lt(this)?At(this)?p(new TypeError("Cannot cancel a stream that already has a reader")):Ge(this,i):p(Kt("cancel"))}getReader(i=void 0){if(!Lt(this))throw Kt("getReader");return kf(i,"First parameter").mode===void 0?ar(this):Ms(this)}pipeThrough(i,l={}){if(!Lt(this))throw Kt("pipeThrough");it(i,1,"pipeThrough");let h=Dp(i,"First parameter"),b=ul(l,"Second parameter");if(At(this))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream");if(ur(h.writable))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream");let v=al(this,h.writable,b.preventClose,b.preventAbort,b.preventCancel,b.signal);return k(v),h.readable}pipeTo(i,l={}){if(!Lt(this))return p(Kt("pipeTo"));if(i===void 0)return p("Parameter 1 is required in 'pipeTo'.");if(!lr(i))return p(new TypeError("ReadableStream.prototype.pipeTo's first argument must be a WritableStream"));let h;try{h=ul(l,"Second parameter")}catch(b){return p(b)}return At(this)?p(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream")):ur(i)?p(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream")):al(this,i,h.preventClose,h.preventAbort,h.preventCancel,h.signal)}tee(){if(!Lt(this))throw Kt("tee");let i=yp(this);return Ir(i)}values(i=void 0){if(!Lt(this))throw Kt("values");let l=Cp(i,"First parameter");return pf(this,l.preventCancel)}[No](i){return this.values(i)}static from(i){return Rp(i)}}Object.defineProperties(me,{from:{enumerable:!0}}),Object.defineProperties(me.prototype,{cancel:{enumerable:!0},getReader:{enumerable:!0},pipeThrough:{enumerable:!0},pipeTo:{enumerable:!0},tee:{enumerable:!0},values:{enumerable:!0},locked:{enumerable:!0}}),o(me.from,"from"),o(me.prototype.cancel,"cancel"),o(me.prototype.getReader,"getReader"),o(me.prototype.pipeThrough,"pipeThrough"),o(me.prototype.pipeTo,"pipeTo"),o(me.prototype.tee,"tee"),o(me.prototype.values,"values"),typeof Symbol.toStringTag=="symbol"&&Object.defineProperty(me.prototype,Symbol.toStringTag,{value:"ReadableStream",configurable:!0}),Object.defineProperty(me.prototype,No,{value:me.prototype.values,writable:!0,configurable:!0});function Mr(r,i,l,h=1,b=()=>1){let v=Object.create(me.prototype);li(v);let S=Object.create(ut.prototype);return ll(v,S,r,i,l,h,b),v}function cl(r,i,l){let h=Object.create(me.prototype);li(h);let b=Object.create(st.prototype);return qs(h,b,r,i,l,0,void 0),h}function li(r){r._state="readable",r._reader=void 0,r._storedError=void 0,r._disturbed=!1}function Lt(r){return!t(r)||!Object.prototype.hasOwnProperty.call(r,"_readableStreamController")?!1:r instanceof me}function At(r){return r._reader!==void 0}function Ge(r,i){if(r._disturbed=!0,r._state==="closed")return c(void 0);if(r._state==="errored")return p(r._storedError);Nr(r);let l=r._reader;if(l!==void 0&&Wt(l)){let b=l._readIntoRequests;l._readIntoRequests=new X,b.forEach(v=>{v._closeSteps(void 0)})}let h=r._readableStreamController[He](i);return R(h,e)}function Nr(r){r._state="closed";let i=r._reader;if(i!==void 0&&(ue(i),St(i))){let l=i._readRequests;i._readRequests=new X,l.forEach(h=>{h._closeSteps()})}}function dl(r,i){r._state="errored",r._storedError=i;let l=r._reader;l!==void 0&&(we(l,i),St(l)?_s(l,i):Ws(l,i))}function Kt(r){return new TypeError(`ReadableStream.prototype.${r} can only be used on a ReadableStream`)}function fl(r,i){Ze(r,i);let l=r?.highWaterMark;return Io(l,"highWaterMark","QueuingStrategyInit"),{highWaterMark:Do(l)}}let pl=r=>r.byteLength;o(pl,"size");class Cn{constructor(i){it(i,1,"ByteLengthQueuingStrategy"),i=fl(i,"First parameter"),this._byteLengthQueuingStrategyHighWaterMark=i.highWaterMark}get highWaterMark(){if(!ml(this))throw hl("highWaterMark");return this._byteLengthQueuingStrategyHighWaterMark}get size(){if(!ml(this))throw hl("size");return pl}}Object.defineProperties(Cn.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),typeof Symbol.toStringTag=="symbol"&&Object.defineProperty(Cn.prototype,Symbol.toStringTag,{value:"ByteLengthQueuingStrategy",configurable:!0});function hl(r){return new TypeError(`ByteLengthQueuingStrategy.prototype.${r} can only be used on a ByteLengthQueuingStrategy`)}function ml(r){return!t(r)||!Object.prototype.hasOwnProperty.call(r,"_byteLengthQueuingStrategyHighWaterMark")?!1:r instanceof Cn}let gl=()=>1;o(gl,"size");class In{constructor(i){it(i,1,"CountQueuingStrategy"),i=fl(i,"First parameter"),this._countQueuingStrategyHighWaterMark=i.highWaterMark}get highWaterMark(){if(!bl(this))throw _l("highWaterMark");return this._countQueuingStrategyHighWaterMark}get size(){if(!bl(this))throw _l("size");return gl}}Object.defineProperties(In.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),typeof Symbol.toStringTag=="symbol"&&Object.defineProperty(In.prototype,Symbol.toStringTag,{value:"CountQueuingStrategy",configurable:!0});function _l(r){return new TypeError(`CountQueuingStrategy.prototype.${r} can only be used on a CountQueuingStrategy`)}function bl(r){return!t(r)||!Object.prototype.hasOwnProperty.call(r,"_countQueuingStrategyHighWaterMark")?!1:r instanceof In}function $p(r,i){Ze(r,i);let l=r?.cancel,h=r?.flush,b=r?.readableType,v=r?.start,S=r?.transform,x=r?.writableType;return{cancel:l===void 0?void 0:qp(l,r,`${i} has member 'cancel' that`),flush:h===void 0?void 0:Fp(h,r,`${i} has member 'flush' that`),readableType:b,start:v===void 0?void 0:Op(v,r,`${i} has member 'start' that`),transform:S===void 0?void 0:Bp(S,r,`${i} has member 'transform' that`),writableType:x}}function Fp(r,i,l){return qe(r,l),h=>re(r,i,[h])}function Op(r,i,l){return qe(r,l),h=>E(r,i,[h])}function Bp(r,i,l){return qe(r,l),(h,b)=>re(r,i,[h,b])}function qp(r,i,l){return qe(r,l),h=>re(r,i,[h])}class Dn{constructor(i={},l={},h={}){i===void 0&&(i=null);let b=wn(l,"Second parameter"),v=wn(h,"Third parameter"),S=$p(i,"First parameter");if(S.readableType!==void 0)throw new RangeError("Invalid readableType specified");if(S.writableType!==void 0)throw new RangeError("Invalid writableType specified");let x=Fr(v,0),U=yn(v),B=Fr(b,1),j=yn(b),z,ne=d(Xe=>{z=Xe});Mp(this,ne,B,j,x,U),Up(this,S),S.start!==void 0?z(S.start(this._transformStreamController)):z(void 0)}get readable(){if(!yl(this))throw Rl("readable");return this._readable}get writable(){if(!yl(this))throw Rl("writable");return this._writable}}Object.defineProperties(Dn.prototype,{readable:{enumerable:!0},writable:{enumerable:!0}}),typeof Symbol.toStringTag=="symbol"&&Object.defineProperty(Dn.prototype,Symbol.toStringTag,{value:"TransformStream",configurable:!0});function Mp(r,i,l,h,b,v){function S(){return i}function x(ne){return Vp(r,ne)}function U(ne){return zp(r,ne)}function B(){return Hp(r)}r._writable=Wf(S,x,B,U,l,h);function j(){return Kp(r)}function z(ne){return Gp(r,ne)}r._readable=Mr(S,j,z,b,v),r._backpressure=void 0,r._backpressureChangePromise=void 0,r._backpressureChangePromise_resolve=void 0,$n(r,!0),r._transformStreamController=void 0}function yl(r){return!t(r)||!Object.prototype.hasOwnProperty.call(r,"_transformStreamController")?!1:r instanceof Dn}function wl(r,i){Ke(r._readable._readableStreamController,i),ui(r,i)}function ui(r,i){On(r._transformStreamController),Or(r._writable._writableStreamController,i),ci(r)}function ci(r){r._backpressure&&$n(r,!1)}function $n(r,i){r._backpressureChangePromise!==void 0&&r._backpressureChangePromise_resolve(),r._backpressureChangePromise=d(l=>{r._backpressureChangePromise_resolve=l}),r._backpressure=i}class kt{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!Fn(this))throw Bn("desiredSize");let i=this._controlledTransformStream._readable._readableStreamController;return si(i)}enqueue(i=void 0){if(!Fn(this))throw Bn("enqueue");vl(this,i)}error(i=void 0){if(!Fn(this))throw Bn("error");jp(this,i)}terminate(){if(!Fn(this))throw Bn("terminate");Wp(this)}}Object.defineProperties(kt.prototype,{enqueue:{enumerable:!0},error:{enumerable:!0},terminate:{enumerable:!0},desiredSize:{enumerable:!0}}),o(kt.prototype.enqueue,"enqueue"),o(kt.prototype.error,"error"),o(kt.prototype.terminate,"terminate"),typeof Symbol.toStringTag=="symbol"&&Object.defineProperty(kt.prototype,Symbol.toStringTag,{value:"TransformStreamDefaultController",configurable:!0});function Fn(r){return!t(r)||!Object.prototype.hasOwnProperty.call(r,"_controlledTransformStream")?!1:r instanceof kt}function Np(r,i,l,h,b){i._controlledTransformStream=r,r._transformStreamController=i,i._transformAlgorithm=l,i._flushAlgorithm=h,i._cancelAlgorithm=b,i._finishPromise=void 0,i._finishPromise_resolve=void 0,i._finishPromise_reject=void 0}function Up(r,i){let l=Object.create(kt.prototype),h,b,v;i.transform!==void 0?h=S=>i.transform(S,l):h=S=>{try{return vl(l,S),c(void 0)}catch(x){return p(x)}},i.flush!==void 0?b=()=>i.flush(l):b=()=>c(void 0),i.cancel!==void 0?v=S=>i.cancel(S):v=()=>c(void 0),Np(r,l,h,b,v)}function On(r){r._transformAlgorithm=void 0,r._flushAlgorithm=void 0,r._cancelAlgorithm=void 0}function vl(r,i){let l=r._controlledTransformStream,h=l._readable._readableStreamController;if(!fr(h))throw new TypeError("Readable side is not in a state that permits enqueue");try{dr(h,i)}catch(v){throw ui(l,v),l._readable._storedError}_p(h)!==l._backpressure&&$n(l,!0)}function jp(r,i){wl(r._controlledTransformStream,i)}function Sl(r,i){let l=r._transformAlgorithm(i);return R(l,void 0,h=>{throw wl(r._controlledTransformStream,h),h})}function Wp(r){let i=r._controlledTransformStream,l=i._readable._readableStreamController;Ht(l);let h=new TypeError("TransformStream terminated");ui(i,h)}function Vp(r,i){let l=r._transformStreamController;if(r._backpressure){let h=r._backpressureChangePromise;return R(h,()=>{let b=r._writable;if(b._state==="erroring")throw b._storedError;return Sl(l,i)})}return Sl(l,i)}function zp(r,i){let l=r._transformStreamController;if(l._finishPromise!==void 0)return l._finishPromise;let h=r._readable;l._finishPromise=d((v,S)=>{l._finishPromise_resolve=v,l._finishPromise_reject=S});let b=l._cancelAlgorithm(i);return On(l),y(b,()=>(h._state==="errored"?pr(l,h._storedError):(Ke(h._readableStreamController,i),di(l)),null),v=>(Ke(h._readableStreamController,v),pr(l,v),null)),l._finishPromise}function Hp(r){let i=r._transformStreamController;if(i._finishPromise!==void 0)return i._finishPromise;let l=r._readable;i._finishPromise=d((b,v)=>{i._finishPromise_resolve=b,i._finishPromise_reject=v});let h=i._flushAlgorithm();return On(i),y(h,()=>(l._state==="errored"?pr(i,l._storedError):(Ht(l._readableStreamController),di(i)),null),b=>(Ke(l._readableStreamController,b),pr(i,b),null)),i._finishPromise}function Kp(r){return $n(r,!1),r._backpressureChangePromise}function Gp(r,i){let l=r._transformStreamController;if(l._finishPromise!==void 0)return l._finishPromise;let h=r._writable;l._finishPromise=d((v,S)=>{l._finishPromise_resolve=v,l._finishPromise_reject=S});let b=l._cancelAlgorithm(i);return On(l),y(b,()=>(h._state==="errored"?pr(l,h._storedError):(Or(h._writableStreamController,i),ci(r),di(l)),null),v=>(Or(h._writableStreamController,v),ci(r),pr(l,v),null)),l._finishPromise}function Bn(r){return new TypeError(`TransformStreamDefaultController.prototype.${r} can only be used on a TransformStreamDefaultController`)}function di(r){r._finishPromise_resolve!==void 0&&(r._finishPromise_resolve(),r._finishPromise_resolve=void 0,r._finishPromise_reject=void 0)}function pr(r,i){r._finishPromise_reject!==void 0&&(k(r._finishPromise),r._finishPromise_reject(i),r._finishPromise_resolve=void 0,r._finishPromise_reject=void 0)}function Rl(r){return new TypeError(`TransformStream.prototype.${r} can only be used on a TransformStream`)}a.ByteLengthQueuingStrategy=Cn,a.CountQueuingStrategy=In,a.ReadableByteStreamController=st,a.ReadableStream=me,a.ReadableStreamBYOBReader=Et,a.ReadableStreamBYOBRequest=Ut,a.ReadableStreamDefaultController=ut,a.ReadableStreamDefaultReader=vt,a.TransformStream=Dn,a.TransformStreamDefaultController=kt,a.WritableStream=xt,a.WritableStreamDefaultController=cr,a.WritableStreamDefaultWriter=lt})});var ru=F(()=>{"use strict";if(!globalThis.ReadableStream)try{let a=require("node:process"),{emitWarning:e}=a;try{a.emitWarning=()=>{},Object.assign(globalThis,require("node:stream/web")),a.emitWarning=e}catch(t){throw a.emitWarning=e,t}}catch{Object.assign(globalThis,tu())}try{let{Blob:a}=require("buffer");a&&!a.prototype.stream&&(a.prototype.stream=function(t){let n=0,o=this;return new ReadableStream({type:"bytes",async pull(s){let f=await o.slice(n,Math.min(o.size,n+65536)).arrayBuffer();n+=f.byteLength,s.enqueue(new Uint8Array(f)),n===o.size&&s.close()}})})}catch{}});async function*Ui(a,e=!0){for(let t of a)if("stream"in t)yield*t.stream();else if(ArrayBuffer.isView(t))if(e){let n=t.byteOffset,o=t.byteOffset+t.byteLength;for(;n!==o;){let s=Math.min(o-n,nu),u=t.buffer.slice(n,n+s);n+=u.byteLength,yield new Uint8Array(u)}}else yield t;else{let n=0,o=t;for(;n!==o.size;){let u=await o.slice(n,Math.min(o.size,n+nu)).arrayBuffer();n+=u.byteLength,yield new Uint8Array(u)}}}var Vb,nu,ou,nm,ft,jr=Q(()=>{"use strict";Vb=le(ru(),1);nu=65536;ou=class ji{#e=[];#t="";#r=0;#n="transparent";constructor(e=[],t={}){if(typeof e!="object"||e===null)throw new TypeError("Failed to construct 'Blob': The provided value cannot be converted to a sequence.");if(typeof e[Symbol.iterator]!="function")throw new TypeError("Failed to construct 'Blob': The object must have a callable @@iterator property.");if(typeof t!="object"&&typeof t!="function")throw new TypeError("Failed to construct 'Blob': parameter 2 cannot convert to dictionary.");t===null&&(t={});let n=new TextEncoder;for(let s of e){let u;ArrayBuffer.isView(s)?u=new Uint8Array(s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength)):s instanceof ArrayBuffer?u=new Uint8Array(s.slice(0)):s instanceof ji?u=s:u=n.encode(`${s}`),this.#r+=ArrayBuffer.isView(u)?u.byteLength:u.size,this.#e.push(u)}this.#n=`${t.endings===void 0?"transparent":t.endings}`;let o=t.type===void 0?"":String(t.type);this.#t=/^[\x20-\x7E]*$/.test(o)?o:""}get size(){return this.#r}get type(){return this.#t}async text(){let e=new TextDecoder,t="";for await(let n of Ui(this.#e,!1))t+=e.decode(n,{stream:!0});return t+=e.decode(),t}async arrayBuffer(){let e=new Uint8Array(this.size),t=0;for await(let n of Ui(this.#e,!1))e.set(n,t),t+=n.length;return e.buffer}stream(){let e=Ui(this.#e,!0);return new globalThis.ReadableStream({type:"bytes",async pull(t){let n=await e.next();n.done?t.close():t.enqueue(n.value)},async cancel(){await e.return()}})}slice(e=0,t=this.size,n=""){let{size:o}=this,s=e<0?Math.max(o+e,0):Math.min(e,o),u=t<0?Math.max(o+t,0):Math.min(t,o),f=Math.max(u-s,0),d=this.#e,c=[],p=0;for(let y of d){if(p>=f)break;let g=ArrayBuffer.isView(y)?y.byteLength:y.size;if(s&&g<=s)s-=g,u-=g;else{let w;ArrayBuffer.isView(y)?(w=y.subarray(s,Math.min(g,u)),p+=w.byteLength):(w=y.slice(s,Math.min(g,u)),p+=w.size),u-=g,c.push(w),s=0}}let m=new ji([],{type:String(n).toLowerCase()});return m.#r=f,m.#e=c,m}get[Symbol.toStringTag](){return"Blob"}static[Symbol.hasInstance](e){return e&&typeof e=="object"&&typeof e.constructor=="function"&&(typeof e.stream=="function"||typeof e.arrayBuffer=="function")&&/^(Blob|File)$/.test(e[Symbol.toStringTag])}};Object.defineProperties(ou.prototype,{size:{enumerable:!0},type:{enumerable:!0},slice:{enumerable:!0}});nm=ou,ft=nm});var om,im,br,Wi=Q(()=>{"use strict";jr();om=class extends ft{#e=0;#t="";constructor(e,t,n={}){if(arguments.length<2)throw new TypeError(`Failed to construct 'File': 2 arguments required, but only ${arguments.length} present.`);super(e,n),n===null&&(n={});let o=n.lastModified===void 0?Date.now():Number(n.lastModified);Number.isNaN(o)||(this.#e=o),this.#t=String(t)}get name(){return this.#t}get lastModified(){return this.#e}get[Symbol.toStringTag](){return"File"}static[Symbol.hasInstance](e){return!!e&&e instanceof ft&&/^(File)$/.test(e[Symbol.toStringTag])}},im=om,br=im});function su(a,e=ft){var t=`${iu()}${iu()}`.replace(/\./g,"").slice(-28).padStart(32,"-"),n=[],o=`--${t}\r
3268
- Content-Disposition: form-data; name="`;return a.forEach((s,u)=>typeof s=="string"?n.push(o+Vi(u)+`"\r
3269
- \r
3270
- ${s.replace(/\r(?!\n)|(?<!\r)\n/g,`\r
3271
- `)}\r
3272
- `):n.push(o+Vi(u)+`"; filename="${Vi(s.name,1)}"\r
3273
- Content-Type: ${s.type||"application/octet-stream"}\r
3274
- \r
3275
- `,s,`\r
3276
- `)),n.push(`--${t}--`),new e(n,{type:"multipart/form-data; boundary="+t})}var Wr,am,sm,iu,lm,au,Vi,Yt,Qt,zn=Q(()=>{"use strict";jr();Wi();({toStringTag:Wr,iterator:am,hasInstance:sm}=Symbol),iu=Math.random,lm="append,set,get,getAll,delete,keys,values,entries,forEach,constructor".split(","),au=(a,e,t)=>(a+="",/^(Blob|File)$/.test(e&&e[Wr])?[(t=t!==void 0?t+"":e[Wr]=="File"?e.name:"blob",a),e.name!==t||e[Wr]=="blob"?new br([e],t,e):e]:[a,e+""]),Vi=(a,e)=>(e?a:a.replace(/\r?\n|\r/g,`\r
3277
- `)).replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/"/g,"%22"),Yt=(a,e,t)=>{if(e.length<t)throw new TypeError(`Failed to execute '${a}' on 'FormData': ${t} arguments required, but only ${e.length} present.`)},Qt=class{#e=[];constructor(...e){if(e.length)throw new TypeError("Failed to construct 'FormData': parameter 1 is not of type 'HTMLFormElement'.")}get[Wr](){return"FormData"}[am](){return this.entries()}static[sm](e){return e&&typeof e=="object"&&e[Wr]==="FormData"&&!lm.some(t=>typeof e[t]!="function")}append(...e){Yt("append",arguments,2),this.#e.push(au(...e))}delete(e){Yt("delete",arguments,1),e+="",this.#e=this.#e.filter(([t])=>t!==e)}get(e){Yt("get",arguments,1),e+="";for(var t=this.#e,n=t.length,o=0;o<n;o++)if(t[o][0]===e)return t[o][1];return null}getAll(e,t){return Yt("getAll",arguments,1),t=[],e+="",this.#e.forEach(n=>n[0]===e&&t.push(n[1])),t}has(e){return Yt("has",arguments,1),e+="",this.#e.some(t=>t[0]===e)}forEach(e,t){Yt("forEach",arguments,1);for(var[n,o]of this)e.call(t,o,n,this)}set(...e){Yt("set",arguments,2);var t=[],n=!0;e=au(...e),this.#e.forEach(o=>{o[0]===e[0]?n&&(n=!t.push(e)):t.push(o)}),n&&t.push(e),this.#e=t}*entries(){yield*this.#e}*keys(){for(var[e]of this)yield e}*values(){for(var[,e]of this)yield e}}});var fu=F((ny,du)=>{"use strict";if(!globalThis.DOMException)try{let{MessageChannel:a}=require("worker_threads"),e=new a().port1,t=new ArrayBuffer;e.postMessage(t,[t,t])}catch(a){a.constructor.name==="DOMException"&&(globalThis.DOMException=a.constructor)}du.exports=globalThis.DOMException});var Kn,um,ay,Hi=Q(()=>{"use strict";Kn=require("node:fs"),um=le(fu(),1);Wi();jr();({stat:ay}=Kn.promises)});var hu={};Z(hu,{toFormData:()=>gm});function mm(a){let e=a.match(/\bfilename=("(.*?)"|([^()<>@,;:\\"/[\]?={}\s\t]+))($|;\s)/i);if(!e)return;let t=e[2]||e[3]||"",n=t.slice(t.lastIndexOf("\\")+1);return n=n.replace(/%22/g,'"'),n=n.replace(/&#(\d{4});/g,(o,s)=>String.fromCharCode(s)),n}async function gm(a,e){if(!/multipart/i.test(e))throw new TypeError("Failed to fetch");let t=e.match(/boundary=(?:"([^"]+)"|([^;]+))/i);if(!t)throw new TypeError("no or bad content-type header, no multipart boundary");let n=new Ki(t[1]||t[2]),o,s,u,f,d,c,p=[],m=new Qt,y=C=>{u+=k.decode(C,{stream:!0})},g=C=>{p.push(C)},w=()=>{let C=new br(p,c,{type:d});m.append(f,C)},R=()=>{m.append(f,u)},k=new TextDecoder("utf-8");k.decode(),n.onPartBegin=function(){n.onPartData=y,n.onPartEnd=R,o="",s="",u="",f="",d="",c=null,p.length=0},n.onHeaderField=function(C){o+=k.decode(C,{stream:!0})},n.onHeaderValue=function(C){s+=k.decode(C,{stream:!0})},n.onHeaderEnd=function(){if(s+=k.decode(),o=o.toLowerCase(),o==="content-disposition"){let C=s.match(/\bname=("([^"]*)"|([^()<>@,;:\\"/[\]?={}\s\t]+))/i);C&&(f=C[2]||C[3]||""),c=mm(s),c&&(n.onPartData=g,n.onPartEnd=w)}else o==="content-type"&&(d=s);s="",o=""};for await(let C of a)n.write(C);return n.end(),m}var tt,ie,pu,It,Gn,Xn,cm,zr,dm,fm,pm,hm,Jt,Ki,mu=Q(()=>{"use strict";Hi();zn();tt=0,ie={START_BOUNDARY:tt++,HEADER_FIELD_START:tt++,HEADER_FIELD:tt++,HEADER_VALUE_START:tt++,HEADER_VALUE:tt++,HEADER_VALUE_ALMOST_DONE:tt++,HEADERS_ALMOST_DONE:tt++,PART_DATA_START:tt++,PART_DATA:tt++,END:tt++},pu=1,It={PART_BOUNDARY:pu,LAST_BOUNDARY:pu*=2},Gn=10,Xn=13,cm=32,zr=45,dm=58,fm=97,pm=122,hm=a=>a|32,Jt=()=>{},Ki=class{constructor(e){this.index=0,this.flags=0,this.onHeaderEnd=Jt,this.onHeaderField=Jt,this.onHeadersEnd=Jt,this.onHeaderValue=Jt,this.onPartBegin=Jt,this.onPartData=Jt,this.onPartEnd=Jt,this.boundaryChars={},e=`\r
3278
- --`+e;let t=new Uint8Array(e.length);for(let n=0;n<e.length;n++)t[n]=e.charCodeAt(n),this.boundaryChars[t[n]]=!0;this.boundary=t,this.lookbehind=new Uint8Array(this.boundary.length+8),this.state=ie.START_BOUNDARY}write(e){let t=0,n=e.length,o=this.index,{lookbehind:s,boundary:u,boundaryChars:f,index:d,state:c,flags:p}=this,m=this.boundary.length,y=m-1,g=e.length,w,R,k=G=>{this[G+"Mark"]=t},C=G=>{delete this[G+"Mark"]},E=(G,X,J,ze)=>{(X===void 0||X!==J)&&this[G](ze&&ze.subarray(X,J))},re=(G,X)=>{let J=G+"Mark";J in this&&(X?(E(G,this[J],t,e),delete this[J]):(E(G,this[J],e.length,e),this[J]=0))};for(t=0;t<n;t++)switch(w=e[t],c){case ie.START_BOUNDARY:if(d===u.length-2){if(w===zr)p|=It.LAST_BOUNDARY;else if(w!==Xn)return;d++;break}else if(d-1===u.length-2){if(p&It.LAST_BOUNDARY&&w===zr)c=ie.END,p=0;else if(!(p&It.LAST_BOUNDARY)&&w===Gn)d=0,E("onPartBegin"),c=ie.HEADER_FIELD_START;else return;break}w!==u[d+2]&&(d=-2),w===u[d+2]&&d++;break;case ie.HEADER_FIELD_START:c=ie.HEADER_FIELD,k("onHeaderField"),d=0;case ie.HEADER_FIELD:if(w===Xn){C("onHeaderField"),c=ie.HEADERS_ALMOST_DONE;break}if(d++,w===zr)break;if(w===dm){if(d===1)return;re("onHeaderField",!0),c=ie.HEADER_VALUE_START;break}if(R=hm(w),R<fm||R>pm)return;break;case ie.HEADER_VALUE_START:if(w===cm)break;k("onHeaderValue"),c=ie.HEADER_VALUE;case ie.HEADER_VALUE:w===Xn&&(re("onHeaderValue",!0),E("onHeaderEnd"),c=ie.HEADER_VALUE_ALMOST_DONE);break;case ie.HEADER_VALUE_ALMOST_DONE:if(w!==Gn)return;c=ie.HEADER_FIELD_START;break;case ie.HEADERS_ALMOST_DONE:if(w!==Gn)return;E("onHeadersEnd"),c=ie.PART_DATA_START;break;case ie.PART_DATA_START:c=ie.PART_DATA,k("onPartData");case ie.PART_DATA:if(o=d,d===0){for(t+=y;t<g&&!(e[t]in f);)t+=m;t-=y,w=e[t]}if(d<u.length)u[d]===w?(d===0&&re("onPartData",!0),d++):d=0;else if(d===u.length)d++,w===Xn?p|=It.PART_BOUNDARY:w===zr?p|=It.LAST_BOUNDARY:d=0;else if(d-1===u.length)if(p&It.PART_BOUNDARY){if(d=0,w===Gn){p&=~It.PART_BOUNDARY,E("onPartEnd"),E("onPartBegin"),c=ie.HEADER_FIELD_START;break}}else p&It.LAST_BOUNDARY&&w===zr?(E("onPartEnd"),c=ie.END,p=0):d=0;if(d>0)s[d-1]=w;else if(o>0){let G=new Uint8Array(s.buffer,s.byteOffset,s.byteLength);E("onPartData",0,o,G),o=0,k("onPartData"),t--}break;case ie.END:break;default:throw new Error(`Unexpected state entered: ${c}`)}re("onHeaderField"),re("onHeaderValue"),re("onPartData"),this.index=d,this.state=c,this.flags=p}end(){if(this.state===ie.HEADER_FIELD_START&&this.index===0||this.state===ie.PART_DATA&&this.index===this.boundary.length)this.onPartEnd();else if(this.state!==ie.END)throw new Error("MultipartParser.end(): stream ended unexpectedly")}}});var Iu=F((Xy,Pm)=>{Pm.exports=Nn("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")});var Du=F((Qy,Em)=>{Em.exports=Nn("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hT0YZ4QbhbPCOeG8cEG4Sbgo3CxcEi4LV4SrwjXhunAH443wo/BWeCe8Fz4IPwkfhZ+FT8Jn4YvwVfgmfBf+YIIRYRTBiuBE8CIEESYRogizCEmELEIRoYrQROgiHMxkxDSKyYrJicmLKYhpElMU0yymJKYspiKmKqYmpi6mg4lGxFFEK6IT0YsYRJxEjCLOIiYRs4hFxCpiE7GLeDCzEfMoZitmJ2Yv5iDmScxRzLOYk5izmIuYq5ibmLuYDyYZkUaRrEhOJC9SEGkSKYo0i5REyiIVkapITaQu0sFkI/IoshXZiexFDiJPIkeRZ5GTyFnkInIVuYncRT6YYkQZRbGiOFG8KEGUSZQoyixKEiWLUkSpojRRuigHU42oo6hWVCeqFzWIOokaRZ1FTaJmUYuoVdQmahf1YJoRbRTNiuZE86IF0SbRomizaEm0LFoRrYrWROuiHUw3oo+iW9Gd6F70IPokehR9Fj2JnkUvolfRm+hd9INZjFhGsVixOLF4sQSxTGKJYpnFksSSxVLEUsXSxNLFstx9+hdQSwcI9rJDNzwDAAAJBgAAUEsBAi0DFAAIAAgABJFrWSVH6TG7AgAAeggAACQAAAAAAAAAAAAgALaBAAAAAGRlYnVnYWRhcHRlci10ZXN0c18yLjAuNS9jb250cm9sLmx1YVBLAQItAxQACAAIALS9RViOeo29BQEAABACAAAhAAAAAAAAAAAAIAC2gQ0DAABkZWJ1Z2FkYXB0ZXItdGVzdHNfMi4wLjUvZGF0YS5sdWFQSwECLQMUAAgACADIuJJZoCnVg5sAAADYAAAAIgAAAAAAAAAAACAAtoFhBAAAZGVidWdhZGFwdGVyLXRlc3RzXzIuMC41L2luZm8uanNvblBLAQItAxQACAAIACWtrVZSqPT1zgAAADABAAAyAAAAAAAAAAAAIAC2gUwFAABkZWJ1Z2FkYXB0ZXItdGVzdHNfMi4wLjUvc2NlbmFyaW9zL3J1bi9jb250cm9sLmx1YVBLAQItAxQACAAIAGmJMFaUjkZQPgAAAD4AAAA4AAAAAAAAAAAAIAC2gXoGAABkZWJ1Z2FkYXB0ZXItdGVzdHNfMi4wLjUvc2NlbmFyaW9zL3Rlcm1pbmF0ZS9jb250cm9sLmx1YVBLAQItAxQACAAIAE2Cilj0wecTJwEAAHIEAAA0AAAAAAAAAAAAIAC2gR4HAABkZWJ1Z2FkYXB0ZXItdGVzdHNfMi4wLjUvc2NlbmFyaW9zL3Rocm93L2NvbnRyb2wubHVhUEsBAi0DFAAIAAgADxN9V/ayQzc8AwAACQYAACUAAAAAAAAAAAAgALaBpwgAAGRlYnVnYWRhcHRlci10ZXN0c18yLjAuNS9zZXR0aW5ncy5sdWFQSwUGAAAAAAcABwBsAgAANgwAAAAA")});var oo=F(Bt=>{"use strict";Object.defineProperty(Bt,"__esModule",{value:!0});Bt.Event=Bt.Response=Bt.Message=void 0;var Qr=class{constructor(e){this.seq=0,this.type=e}};Bt.Message=Qr;var na=class extends Qr{constructor(e,t){super("response"),this.request_seq=e.seq,this.command=e.command,t?(this.success=!1,this.message=t):this.success=!0}};Bt.Response=na;var oa=class extends Qr{constructor(e,t){super("event"),this.event=e,t&&(this.body=t)}};Bt.Event=oa});var Ou=F(ao=>{"use strict";Object.defineProperty(ao,"__esModule",{value:!0});ao.ProtocolServer=void 0;var Am=require("events"),Jr=oo(),ia=class{get event(){return this._event||(this._event=(e,t)=>{this._listener=e,this._this=t;let n;return n={dispose:()=>{this._listener=void 0,this._this=void 0}},n}),this._event}fire(e){if(this._listener)try{this._listener.call(this._this,e)}catch{}}hasListener(){return!!this._listener}dispose(){this._listener=void 0,this._this=void 0}},io=class a extends Am.EventEmitter{constructor(){super(),this._sendMessage=new ia,this._sequence=1,this._pendingRequests=new Map,this.onDidSendMessage=this._sendMessage.event}dispose(){}handleMessage(e){if(e.type==="request")this.dispatchRequest(e);else if(e.type==="response"){let t=e,n=this._pendingRequests.get(t.request_seq);n&&(this._pendingRequests.delete(t.request_seq),n(t))}}_isRunningInline(){return this._sendMessage&&this._sendMessage.hasListener()}start(e,t){this._writableStream=t,this._rawData=Buffer.alloc(0),e.on("data",n=>this._handleData(n)),e.on("close",()=>{this._emitEvent(new Jr.Event("close"))}),e.on("error",n=>{this._emitEvent(new Jr.Event("error","inStream error: "+(n&&n.message)))}),t.on("error",n=>{this._emitEvent(new Jr.Event("error","outStream error: "+(n&&n.message)))}),e.resume()}stop(){this._writableStream&&this._writableStream.end()}sendEvent(e){this._send("event",e)}sendResponse(e){e.seq>0?console.error(`attempt to send more than one response for command ${e.command}`):this._send("response",e)}sendRequest(e,t,n,o){let s={command:e};if(t&&Object.keys(t).length>0&&(s.arguments=t),this._send("request",s),o){this._pendingRequests.set(s.seq,o);let u=setTimeout(()=>{clearTimeout(u);let f=this._pendingRequests.get(s.seq);f&&(this._pendingRequests.delete(s.seq),f(new Jr.Response(s,"timeout")))},n)}}dispatchRequest(e){}_emitEvent(e){this.emit(e.event,e)}_send(e,t){if(t.type=e,t.seq=this._sequence++,this._writableStream){let n=JSON.stringify(t);this._writableStream.write(`Content-Length: ${Buffer.byteLength(n,"utf8")}\r
3279
- \r
3280
- ${n}`,"utf8")}this._sendMessage.fire(t)}_handleData(e){for(this._rawData=Buffer.concat([this._rawData,e]);;){if(this._contentLength>=0){if(this._rawData.length>=this._contentLength){let t=this._rawData.toString("utf8",0,this._contentLength);if(this._rawData=this._rawData.slice(this._contentLength),this._contentLength=-1,t.length>0)try{let n=JSON.parse(t);this.handleMessage(n)}catch(n){this._emitEvent(new Jr.Event("error","Error handling data: "+(n&&n.message)))}continue}}else{let t=this._rawData.indexOf(a.TWO_CRLF);if(t!==-1){let o=this._rawData.toString("utf8",0,t).split(`\r
3281
- `);for(let s=0;s<o.length;s++){let u=o[s].split(/: +/);u[0]=="Content-Length"&&(this._contentLength=+u[1])}this._rawData=this._rawData.slice(t+a.TWO_CRLF.length);continue}}break}}};ao.ProtocolServer=io;io.TWO_CRLF=`\r
3282
- \r
3283
- `});var Bu=F(so=>{"use strict";Object.defineProperty(so,"__esModule",{value:!0});so.runDebugAdapter=void 0;var km=require("net");function Tm(a){let e=0;if(process.argv.slice(2).forEach(function(n,o,s){let u=/^--server=(\d{4,5})$/.exec(n);u&&(e=parseInt(u[1],10))}),e>0)console.error(`waiting for debug protocol on port ${e}`),km.createServer(n=>{console.error(">> accepted connection from client"),n.on("end",()=>{console.error(`>> client connection closed
3284
- `)});let o=new a(!1,!0);o.setRunAsServer(!0),o.start(n,n)}).listen(e);else{let n=new a(!1);process.on("SIGTERM",()=>{n.shutdown()}),n.start(process.stdin,process.stdout)}}so.runDebugAdapter=Tm});var uo=F(q=>{"use strict";Object.defineProperty(q,"__esModule",{value:!0});q.DebugSession=q.ErrorDestination=q.MemoryEvent=q.InvalidatedEvent=q.ProgressEndEvent=q.ProgressUpdateEvent=q.ProgressStartEvent=q.CapabilitiesEvent=q.LoadedSourceEvent=q.ModuleEvent=q.BreakpointEvent=q.ThreadEvent=q.OutputEvent=q.ExitedEvent=q.TerminatedEvent=q.InitializedEvent=q.ContinuedEvent=q.StoppedEvent=q.CompletionItem=q.Module=q.Breakpoint=q.Variable=q.Thread=q.StackFrame=q.Scope=q.Source=void 0;var Cm=Ou(),he=oo(),Im=Bu(),qu=require("url"),aa=class{constructor(e,t,n=0,o,s){this.name=e,this.path=t,this.sourceReference=n,o&&(this.origin=o),s&&(this.adapterData=s)}};q.Source=aa;var sa=class{constructor(e,t,n=!1){this.name=e,this.variablesReference=t,this.expensive=n}};q.Scope=sa;var la=class{constructor(e,t,n,o=0,s=0){this.id=e,this.source=n,this.line=o,this.column=s,this.name=t}};q.StackFrame=la;var ua=class{constructor(e,t){this.id=e,t?this.name=t:this.name="Thread #"+e}};q.Thread=ua;var ca=class{constructor(e,t,n=0,o,s){this.name=e,this.value=t,this.variablesReference=n,typeof s=="number"&&(this.namedVariables=s),typeof o=="number"&&(this.indexedVariables=o)}};q.Variable=ca;var da=class{constructor(e,t,n,o){this.verified=e;let s=this;typeof t=="number"&&(s.line=t),typeof n=="number"&&(s.column=n),o&&(s.source=o)}setId(e){this.id=e}};q.Breakpoint=da;var fa=class{constructor(e,t){this.id=e,this.name=t}};q.Module=fa;var pa=class{constructor(e,t,n=0){this.label=e,this.start=t,this.length=n}};q.CompletionItem=pa;var ha=class extends he.Event{constructor(e,t,n){super("stopped"),this.body={reason:e},typeof t=="number"&&(this.body.threadId=t),typeof n=="string"&&(this.body.text=n)}};q.StoppedEvent=ha;var ma=class extends he.Event{constructor(e,t){super("continued"),this.body={threadId:e},typeof t=="boolean"&&(this.body.allThreadsContinued=t)}};q.ContinuedEvent=ma;var ga=class extends he.Event{constructor(){super("initialized")}};q.InitializedEvent=ga;var _a=class extends he.Event{constructor(e){if(super("terminated"),typeof e=="boolean"||e){let t=this;t.body={restart:e}}}};q.TerminatedEvent=_a;var ba=class extends he.Event{constructor(e){super("exited"),this.body={exitCode:e}}};q.ExitedEvent=ba;var ya=class extends he.Event{constructor(e,t="console",n){super("output"),this.body={category:t,output:e},n!==void 0&&(this.body.data=n)}};q.OutputEvent=ya;var wa=class extends he.Event{constructor(e,t){super("thread"),this.body={reason:e,threadId:t}}};q.ThreadEvent=wa;var va=class extends he.Event{constructor(e,t){super("breakpoint"),this.body={reason:e,breakpoint:t}}};q.BreakpointEvent=va;var Sa=class extends he.Event{constructor(e,t){super("module"),this.body={reason:e,module:t}}};q.ModuleEvent=Sa;var Ra=class extends he.Event{constructor(e,t){super("loadedSource"),this.body={reason:e,source:t}}};q.LoadedSourceEvent=Ra;var Pa=class extends he.Event{constructor(e){super("capabilities"),this.body={capabilities:e}}};q.CapabilitiesEvent=Pa;var Ea=class extends he.Event{constructor(e,t,n){super("progressStart"),this.body={progressId:e,title:t},typeof n=="string"&&(this.body.message=n)}};q.ProgressStartEvent=Ea;var xa=class extends he.Event{constructor(e,t){super("progressUpdate"),this.body={progressId:e},typeof t=="string"&&(this.body.message=t)}};q.ProgressUpdateEvent=xa;var La=class extends he.Event{constructor(e,t){super("progressEnd"),this.body={progressId:e},typeof t=="string"&&(this.body.message=t)}};q.ProgressEndEvent=La;var Aa=class extends he.Event{constructor(e,t,n){super("invalidated"),this.body={},e&&(this.body.areas=e),t&&(this.body.threadId=t),n&&(this.body.stackFrameId=n)}};q.InvalidatedEvent=Aa;var ka=class extends he.Event{constructor(e,t,n){super("memory"),this.body={memoryReference:e,offset:t,count:n}}};q.MemoryEvent=ka;var rr;(function(a){a[a.User=1]="User",a[a.Telemetry=2]="Telemetry"})(rr=q.ErrorDestination||(q.ErrorDestination={}));var lo=class a extends Cm.ProtocolServer{constructor(e,t){super();let n=typeof e=="boolean"?e:!1;this._debuggerLinesStartAt1=n,this._debuggerColumnsStartAt1=n,this._debuggerPathsAreURIs=!1,this._clientLinesStartAt1=!0,this._clientColumnsStartAt1=!0,this._clientPathsAreURIs=!1,this._isServer=typeof t=="boolean"?t:!1,this.on("close",()=>{this.shutdown()}),this.on("error",o=>{this.shutdown()})}setDebuggerPathFormat(e){this._debuggerPathsAreURIs=e!=="path"}setDebuggerLinesStartAt1(e){this._debuggerLinesStartAt1=e}setDebuggerColumnsStartAt1(e){this._debuggerColumnsStartAt1=e}setRunAsServer(e){this._isServer=e}static run(e){(0,Im.runDebugAdapter)(e)}shutdown(){this._isServer||this._isRunningInline()||setTimeout(()=>{process.exit(0)},100)}sendErrorResponse(e,t,n,o,s=rr.User){let u;typeof t=="number"?(u={id:t,format:n},o&&(u.variables=o),s&rr.User&&(u.showUser=!0),s&rr.Telemetry&&(u.sendTelemetry=!0)):u=t,e.success=!1,e.message=a.formatPII(u.format,!0,u.variables),e.body||(e.body={}),e.body.error=u,this.sendResponse(e)}runInTerminalRequest(e,t,n){this.sendRequest("runInTerminal",e,t,n)}dispatchRequest(e){let t=new he.Response(e);try{if(e.command==="initialize"){var n=e.arguments;if(typeof n.linesStartAt1=="boolean"&&(this._clientLinesStartAt1=n.linesStartAt1),typeof n.columnsStartAt1=="boolean"&&(this._clientColumnsStartAt1=n.columnsStartAt1),n.pathFormat!=="path")this.sendErrorResponse(t,2018,"debug adapter only supports native paths",null,rr.Telemetry);else{let o=t;o.body={},this.initializeRequest(o,n)}}else e.command==="launch"?this.launchRequest(t,e.arguments,e):e.command==="attach"?this.attachRequest(t,e.arguments,e):e.command==="disconnect"?this.disconnectRequest(t,e.arguments,e):e.command==="terminate"?this.terminateRequest(t,e.arguments,e):e.command==="restart"?this.restartRequest(t,e.arguments,e):e.command==="setBreakpoints"?this.setBreakPointsRequest(t,e.arguments,e):e.command==="setFunctionBreakpoints"?this.setFunctionBreakPointsRequest(t,e.arguments,e):e.command==="setExceptionBreakpoints"?this.setExceptionBreakPointsRequest(t,e.arguments,e):e.command==="configurationDone"?this.configurationDoneRequest(t,e.arguments,e):e.command==="continue"?this.continueRequest(t,e.arguments,e):e.command==="next"?this.nextRequest(t,e.arguments,e):e.command==="stepIn"?this.stepInRequest(t,e.arguments,e):e.command==="stepOut"?this.stepOutRequest(t,e.arguments,e):e.command==="stepBack"?this.stepBackRequest(t,e.arguments,e):e.command==="reverseContinue"?this.reverseContinueRequest(t,e.arguments,e):e.command==="restartFrame"?this.restartFrameRequest(t,e.arguments,e):e.command==="goto"?this.gotoRequest(t,e.arguments,e):e.command==="pause"?this.pauseRequest(t,e.arguments,e):e.command==="stackTrace"?this.stackTraceRequest(t,e.arguments,e):e.command==="scopes"?this.scopesRequest(t,e.arguments,e):e.command==="variables"?this.variablesRequest(t,e.arguments,e):e.command==="setVariable"?this.setVariableRequest(t,e.arguments,e):e.command==="setExpression"?this.setExpressionRequest(t,e.arguments,e):e.command==="source"?this.sourceRequest(t,e.arguments,e):e.command==="threads"?this.threadsRequest(t,e):e.command==="terminateThreads"?this.terminateThreadsRequest(t,e.arguments,e):e.command==="evaluate"?this.evaluateRequest(t,e.arguments,e):e.command==="stepInTargets"?this.stepInTargetsRequest(t,e.arguments,e):e.command==="gotoTargets"?this.gotoTargetsRequest(t,e.arguments,e):e.command==="completions"?this.completionsRequest(t,e.arguments,e):e.command==="exceptionInfo"?this.exceptionInfoRequest(t,e.arguments,e):e.command==="loadedSources"?this.loadedSourcesRequest(t,e.arguments,e):e.command==="dataBreakpointInfo"?this.dataBreakpointInfoRequest(t,e.arguments,e):e.command==="setDataBreakpoints"?this.setDataBreakpointsRequest(t,e.arguments,e):e.command==="readMemory"?this.readMemoryRequest(t,e.arguments,e):e.command==="writeMemory"?this.writeMemoryRequest(t,e.arguments,e):e.command==="disassemble"?this.disassembleRequest(t,e.arguments,e):e.command==="cancel"?this.cancelRequest(t,e.arguments,e):e.command==="breakpointLocations"?this.breakpointLocationsRequest(t,e.arguments,e):e.command==="setInstructionBreakpoints"?this.setInstructionBreakpointsRequest(t,e.arguments,e):this.customRequest(e.command,t,e.arguments,e)}catch(o){this.sendErrorResponse(t,1104,"{_stack}",{_exception:o.message,_stack:o.stack},rr.Telemetry)}}initializeRequest(e,t){e.body.supportsConditionalBreakpoints=!1,e.body.supportsHitConditionalBreakpoints=!1,e.body.supportsFunctionBreakpoints=!1,e.body.supportsConfigurationDoneRequest=!0,e.body.supportsEvaluateForHovers=!1,e.body.supportsStepBack=!1,e.body.supportsSetVariable=!1,e.body.supportsRestartFrame=!1,e.body.supportsStepInTargetsRequest=!1,e.body.supportsGotoTargetsRequest=!1,e.body.supportsCompletionsRequest=!1,e.body.supportsRestartRequest=!1,e.body.supportsExceptionOptions=!1,e.body.supportsValueFormattingOptions=!1,e.body.supportsExceptionInfoRequest=!1,e.body.supportTerminateDebuggee=!1,e.body.supportsDelayedStackTraceLoading=!1,e.body.supportsLoadedSourcesRequest=!1,e.body.supportsLogPoints=!1,e.body.supportsTerminateThreadsRequest=!1,e.body.supportsSetExpression=!1,e.body.supportsTerminateRequest=!1,e.body.supportsDataBreakpoints=!1,e.body.supportsReadMemoryRequest=!1,e.body.supportsDisassembleRequest=!1,e.body.supportsCancelRequest=!1,e.body.supportsBreakpointLocationsRequest=!1,e.body.supportsClipboardContext=!1,e.body.supportsSteppingGranularity=!1,e.body.supportsInstructionBreakpoints=!1,e.body.supportsExceptionFilterOptions=!1,this.sendResponse(e)}disconnectRequest(e,t,n){this.sendResponse(e),this.shutdown()}launchRequest(e,t,n){this.sendResponse(e)}attachRequest(e,t,n){this.sendResponse(e)}terminateRequest(e,t,n){this.sendResponse(e)}restartRequest(e,t,n){this.sendResponse(e)}setBreakPointsRequest(e,t,n){this.sendResponse(e)}setFunctionBreakPointsRequest(e,t,n){this.sendResponse(e)}setExceptionBreakPointsRequest(e,t,n){this.sendResponse(e)}configurationDoneRequest(e,t,n){this.sendResponse(e)}continueRequest(e,t,n){this.sendResponse(e)}nextRequest(e,t,n){this.sendResponse(e)}stepInRequest(e,t,n){this.sendResponse(e)}stepOutRequest(e,t,n){this.sendResponse(e)}stepBackRequest(e,t,n){this.sendResponse(e)}reverseContinueRequest(e,t,n){this.sendResponse(e)}restartFrameRequest(e,t,n){this.sendResponse(e)}gotoRequest(e,t,n){this.sendResponse(e)}pauseRequest(e,t,n){this.sendResponse(e)}sourceRequest(e,t,n){this.sendResponse(e)}threadsRequest(e,t){this.sendResponse(e)}terminateThreadsRequest(e,t,n){this.sendResponse(e)}stackTraceRequest(e,t,n){this.sendResponse(e)}scopesRequest(e,t,n){this.sendResponse(e)}variablesRequest(e,t,n){this.sendResponse(e)}setVariableRequest(e,t,n){this.sendResponse(e)}setExpressionRequest(e,t,n){this.sendResponse(e)}evaluateRequest(e,t,n){this.sendResponse(e)}stepInTargetsRequest(e,t,n){this.sendResponse(e)}gotoTargetsRequest(e,t,n){this.sendResponse(e)}completionsRequest(e,t,n){this.sendResponse(e)}exceptionInfoRequest(e,t,n){this.sendResponse(e)}loadedSourcesRequest(e,t,n){this.sendResponse(e)}dataBreakpointInfoRequest(e,t,n){this.sendResponse(e)}setDataBreakpointsRequest(e,t,n){this.sendResponse(e)}readMemoryRequest(e,t,n){this.sendResponse(e)}writeMemoryRequest(e,t,n){this.sendResponse(e)}disassembleRequest(e,t,n){this.sendResponse(e)}cancelRequest(e,t,n){this.sendResponse(e)}breakpointLocationsRequest(e,t,n){this.sendResponse(e)}setInstructionBreakpointsRequest(e,t,n){this.sendResponse(e)}customRequest(e,t,n,o){this.sendErrorResponse(t,1014,"unrecognized request",null,rr.Telemetry)}convertClientLineToDebugger(e){return this._debuggerLinesStartAt1?this._clientLinesStartAt1?e:e+1:this._clientLinesStartAt1?e-1:e}convertDebuggerLineToClient(e){return this._debuggerLinesStartAt1?this._clientLinesStartAt1?e:e-1:this._clientLinesStartAt1?e+1:e}convertClientColumnToDebugger(e){return this._debuggerColumnsStartAt1?this._clientColumnsStartAt1?e:e+1:this._clientColumnsStartAt1?e-1:e}convertDebuggerColumnToClient(e){return this._debuggerColumnsStartAt1?this._clientColumnsStartAt1?e:e-1:this._clientColumnsStartAt1?e+1:e}convertClientPathToDebugger(e){return this._clientPathsAreURIs!==this._debuggerPathsAreURIs?this._clientPathsAreURIs?a.uri2path(e):a.path2uri(e):e}convertDebuggerPathToClient(e){return this._debuggerPathsAreURIs!==this._clientPathsAreURIs?this._debuggerPathsAreURIs?a.uri2path(e):a.path2uri(e):e}static path2uri(e){process.platform==="win32"&&(/^[A-Z]:/.test(e)&&(e=e[0].toLowerCase()+e.substr(1)),e=e.replace(/\\/g,"/")),e=encodeURI(e);let t=new qu.URL("file:");return t.pathname=e,t.toString()}static uri2path(e){let t=new qu.URL(e),n=decodeURIComponent(t.pathname);return process.platform==="win32"&&(/^\/[a-zA-Z]:/.test(n)&&(n=n[1].toLowerCase()+n.substr(2)),n=n.replace(/\//g,"\\")),n}static formatPII(e,t,n){return e.replace(a._formatPIIRegexp,function(o,s){return t&&s.length>0&&s[0]!=="_"?o:n[s]&&n.hasOwnProperty(s)?n[s]:o})}};q.DebugSession=lo;lo._formatPIIRegexp=/{([^}]+)}/g});var ju=F(fo=>{"use strict";Object.defineProperty(fo,"__esModule",{value:!0});fo.InternalLogger=void 0;var Mu=require("fs"),Nu=require("path"),Fe=po(),Ta=class{constructor(e,t){this.beforeExitCallback=()=>this.dispose(),this._logCallback=e,this._logToConsole=t,this._minLogLevel=Fe.LogLevel.Warn,this.disposeCallback=(n,o)=>{this.dispose(),o=o||2,o+=128,process.exit(o)}}async setup(e){if(this._minLogLevel=e.consoleMinLogLevel,this._prependTimestamp=e.prependTimestamp,e.logFilePath)if(!Nu.isAbsolute(e.logFilePath))this.log(`logFilePath must be an absolute path: ${e.logFilePath}`,Fe.LogLevel.Error);else{let t=n=>this.sendLog(`Error creating log file at path: ${e.logFilePath}. Error: ${n.toString()}
3285
- `,Fe.LogLevel.Error);try{await Mu.promises.mkdir(Nu.dirname(e.logFilePath),{recursive:!0}),this.log(`Verbose logs are written to:
3286
- `,Fe.LogLevel.Warn),this.log(e.logFilePath+`
3287
- `,Fe.LogLevel.Warn),this._logFileStream=Mu.createWriteStream(e.logFilePath),this.logDateTime(),this.setupShutdownListeners(),this._logFileStream.on("error",n=>{t(n)})}catch(n){t(n)}}}logDateTime(){let e=new Date,n=e.getUTCFullYear()+`-${e.getUTCMonth()+1}-`+e.getUTCDate()+", "+Uu();this.log(n+`
3288
- `,Fe.LogLevel.Verbose,!1)}setupShutdownListeners(){process.on("beforeExit",this.beforeExitCallback),process.on("SIGTERM",this.disposeCallback),process.on("SIGINT",this.disposeCallback)}removeShutdownListeners(){process.removeListener("beforeExit",this.beforeExitCallback),process.removeListener("SIGTERM",this.disposeCallback),process.removeListener("SIGINT",this.disposeCallback)}dispose(){return new Promise(e=>{this.removeShutdownListeners(),this._logFileStream?(this._logFileStream.end(e),this._logFileStream=null):e()})}log(e,t,n=!0){if(this._minLogLevel!==Fe.LogLevel.Stop){if(t>=this._minLogLevel&&this.sendLog(e,t),this._logToConsole){let o=t===Fe.LogLevel.Error?console.error:t===Fe.LogLevel.Warn?console.warn:null;o&&o((0,Fe.trimLastNewline)(e))}t===Fe.LogLevel.Error&&(e=`[${Fe.LogLevel[t]}] ${e}`),this._prependTimestamp&&n&&(e="["+Uu()+"] "+e),this._logFileStream&&this._logFileStream.write(e)}}sendLog(e,t){if(e.length>1500){let n=!!e.match(/(\n|\r\n)$/);e=e.substr(0,1500)+"[...]",n&&(e=e+`
3289
- `)}if(this._logCallback){let n=new Fe.LogOutputEvent(e,t);this._logCallback(n)}}};fo.InternalLogger=Ta;function Uu(){let a=new Date,e=co(2,String(a.getUTCHours())),t=co(2,String(a.getUTCMinutes())),n=co(2,String(a.getUTCSeconds())),o=co(3,String(a.getUTCMilliseconds()));return e+":"+t+":"+n+"."+o+" UTC"}function co(a,e){return e.length>=a?e:String("0".repeat(a)+e).slice(-a)}});var po=F(Oe=>{"use strict";Object.defineProperty(Oe,"__esModule",{value:!0});Oe.trimLastNewline=Oe.LogOutputEvent=Oe.logger=Oe.Logger=Oe.LogLevel=void 0;var Dm=ju(),$m=uo(),qt;(function(a){a[a.Verbose=0]="Verbose",a[a.Log=1]="Log",a[a.Warn=2]="Warn",a[a.Error=3]="Error",a[a.Stop=4]="Stop"})(qt=Oe.LogLevel||(Oe.LogLevel={}));var ho=class{constructor(){this._pendingLogQ=[]}log(e,t=qt.Log){e=e+`
3290
- `,this._write(e,t)}verbose(e){this.log(e,qt.Verbose)}warn(e){this.log(e,qt.Warn)}error(e){this.log(e,qt.Error)}dispose(){if(this._currentLogger){let e=this._currentLogger.dispose();return this._currentLogger=null,e}else return Promise.resolve()}_write(e,t=qt.Log){e=e+"",this._pendingLogQ?this._pendingLogQ.push({msg:e,level:t}):this._currentLogger&&this._currentLogger.log(e,t)}setup(e,t,n=!0){let o=typeof t=="string"?t:t&&this._logFilePathFromInit;if(this._currentLogger){let s={consoleMinLogLevel:e,logFilePath:o,prependTimestamp:n};this._currentLogger.setup(s).then(()=>{if(this._pendingLogQ){let u=this._pendingLogQ;this._pendingLogQ=null,u.forEach(f=>this._write(f.msg,f.level))}})}}init(e,t,n){this._pendingLogQ=this._pendingLogQ||[],this._currentLogger=new Dm.InternalLogger(e,n),this._logFilePathFromInit=t}};Oe.Logger=ho;Oe.logger=new ho;var Ca=class extends $m.OutputEvent{constructor(e,t){let n=t===qt.Error?"stderr":t===qt.Warn?"console":"stdout";super(e,n)}};Oe.LogOutputEvent=Ca;function Fm(a){return a.replace(/(\n|\r\n)$/,"")}Oe.trimLastNewline=Fm});var zu=F(mo=>{"use strict";Object.defineProperty(mo,"__esModule",{value:!0});mo.LoggingDebugSession=void 0;var Vu=po(),xr=Vu.logger,Wu=uo(),Ia=class extends Wu.DebugSession{constructor(e,t,n){super(t,n),this.obsolete_logFilePath=e,this.on("error",o=>{xr.error(o.body)})}start(e,t){super.start(e,t),xr.init(n=>this.sendEvent(n),this.obsolete_logFilePath,this._isServer)}sendEvent(e){if(!(e instanceof Vu.LogOutputEvent)){let t=e;e instanceof Wu.OutputEvent&&e.body&&e.body.data&&e.body.data.doNotLogOutput&&(delete e.body.data.doNotLogOutput,t={...e},t.body={...e.body,output:"<output not logged>"}),xr.verbose(`To client: ${JSON.stringify(t)}`)}super.sendEvent(e)}sendRequest(e,t,n,o){xr.verbose(`To client: ${JSON.stringify(e)}(${JSON.stringify(t)}), timeout: ${n}`),super.sendRequest(e,t,n,o)}sendResponse(e){xr.verbose(`To client: ${JSON.stringify(e)}`),super.sendResponse(e)}dispatchRequest(e){xr.verbose(`From client: ${e.command}(${JSON.stringify(e.arguments)})`),super.dispatchRequest(e)}};mo.LoggingDebugSession=Ia});var Hu=F(go=>{"use strict";Object.defineProperty(go,"__esModule",{value:!0});go.Handles=void 0;var Da=class{constructor(e){this.START_HANDLE=1e3,this._handleMap=new Map,this._nextHandle=typeof e=="number"?e:this.START_HANDLE}reset(){this._nextHandle=this.START_HANDLE,this._handleMap=new Map}create(e){var t=this._nextHandle++;return this._handleMap.set(t,e),t}get(e,t){return this._handleMap.get(e)||t}};go.Handles=Da});var Xu=F(T=>{"use strict";Object.defineProperty(T,"__esModule",{value:!0});T.Handles=T.Response=T.Event=T.ErrorDestination=T.CompletionItem=T.Module=T.Source=T.Breakpoint=T.Variable=T.Scope=T.StackFrame=T.Thread=T.MemoryEvent=T.InvalidatedEvent=T.ProgressEndEvent=T.ProgressUpdateEvent=T.ProgressStartEvent=T.CapabilitiesEvent=T.LoadedSourceEvent=T.ModuleEvent=T.BreakpointEvent=T.ThreadEvent=T.OutputEvent=T.ContinuedEvent=T.StoppedEvent=T.ExitedEvent=T.TerminatedEvent=T.InitializedEvent=T.logger=T.Logger=T.LoggingDebugSession=T.DebugSession=void 0;var ae=uo();Object.defineProperty(T,"DebugSession",{enumerable:!0,get:function(){return ae.DebugSession}});Object.defineProperty(T,"InitializedEvent",{enumerable:!0,get:function(){return ae.InitializedEvent}});Object.defineProperty(T,"TerminatedEvent",{enumerable:!0,get:function(){return ae.TerminatedEvent}});Object.defineProperty(T,"ExitedEvent",{enumerable:!0,get:function(){return ae.ExitedEvent}});Object.defineProperty(T,"StoppedEvent",{enumerable:!0,get:function(){return ae.StoppedEvent}});Object.defineProperty(T,"ContinuedEvent",{enumerable:!0,get:function(){return ae.ContinuedEvent}});Object.defineProperty(T,"OutputEvent",{enumerable:!0,get:function(){return ae.OutputEvent}});Object.defineProperty(T,"ThreadEvent",{enumerable:!0,get:function(){return ae.ThreadEvent}});Object.defineProperty(T,"BreakpointEvent",{enumerable:!0,get:function(){return ae.BreakpointEvent}});Object.defineProperty(T,"ModuleEvent",{enumerable:!0,get:function(){return ae.ModuleEvent}});Object.defineProperty(T,"LoadedSourceEvent",{enumerable:!0,get:function(){return ae.LoadedSourceEvent}});Object.defineProperty(T,"CapabilitiesEvent",{enumerable:!0,get:function(){return ae.CapabilitiesEvent}});Object.defineProperty(T,"ProgressStartEvent",{enumerable:!0,get:function(){return ae.ProgressStartEvent}});Object.defineProperty(T,"ProgressUpdateEvent",{enumerable:!0,get:function(){return ae.ProgressUpdateEvent}});Object.defineProperty(T,"ProgressEndEvent",{enumerable:!0,get:function(){return ae.ProgressEndEvent}});Object.defineProperty(T,"InvalidatedEvent",{enumerable:!0,get:function(){return ae.InvalidatedEvent}});Object.defineProperty(T,"MemoryEvent",{enumerable:!0,get:function(){return ae.MemoryEvent}});Object.defineProperty(T,"Thread",{enumerable:!0,get:function(){return ae.Thread}});Object.defineProperty(T,"StackFrame",{enumerable:!0,get:function(){return ae.StackFrame}});Object.defineProperty(T,"Scope",{enumerable:!0,get:function(){return ae.Scope}});Object.defineProperty(T,"Variable",{enumerable:!0,get:function(){return ae.Variable}});Object.defineProperty(T,"Breakpoint",{enumerable:!0,get:function(){return ae.Breakpoint}});Object.defineProperty(T,"Source",{enumerable:!0,get:function(){return ae.Source}});Object.defineProperty(T,"Module",{enumerable:!0,get:function(){return ae.Module}});Object.defineProperty(T,"CompletionItem",{enumerable:!0,get:function(){return ae.CompletionItem}});Object.defineProperty(T,"ErrorDestination",{enumerable:!0,get:function(){return ae.ErrorDestination}});var Om=zu();Object.defineProperty(T,"LoggingDebugSession",{enumerable:!0,get:function(){return Om.LoggingDebugSession}});var Ku=po();T.Logger=Ku;var Gu=oo();Object.defineProperty(T,"Event",{enumerable:!0,get:function(){return Gu.Event}});Object.defineProperty(T,"Response",{enumerable:!0,get:function(){return Gu.Response}});var Bm=Hu();Object.defineProperty(T,"Handles",{enumerable:!0,get:function(){return Bm.Handles}});var qm=Ku.logger;T.logger=qm});var Zr=F((Lw,Yu)=>{"use strict";var Mm="2.0.0",Nm=Number.MAX_SAFE_INTEGER||9007199254740991,Um=16,jm=250,Wm=["major","premajor","minor","preminor","patch","prepatch","prerelease"];Yu.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:Um,MAX_SAFE_BUILD_LENGTH:jm,MAX_SAFE_INTEGER:Nm,RELEASE_TYPES:Wm,SEMVER_SPEC_VERSION:Mm,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var en=F((Aw,Qu)=>{"use strict";var Vm=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...a)=>console.error("SEMVER",...a):()=>{};Qu.exports=Vm});var Lr=F((gt,Ju)=>{"use strict";var{MAX_SAFE_COMPONENT_LENGTH:$a,MAX_SAFE_BUILD_LENGTH:zm,MAX_LENGTH:Hm}=Zr(),Km=en();gt=Ju.exports={};var Gm=gt.re=[],Xm=gt.safeRe=[],L=gt.src=[],A=gt.t={},Ym=0,Fa="[a-zA-Z0-9-]",Qm=[["\\s",1],["\\d",Hm],[Fa,zm]],Jm=a=>{for(let[e,t]of Qm)a=a.split(`${e}*`).join(`${e}{0,${t}}`).split(`${e}+`).join(`${e}{1,${t}}`);return a},W=(a,e,t)=>{let n=Jm(e),o=Ym++;Km(a,o,e),A[a]=o,L[o]=e,Gm[o]=new RegExp(e,t?"g":void 0),Xm[o]=new RegExp(n,t?"g":void 0)};W("NUMERICIDENTIFIER","0|[1-9]\\d*");W("NUMERICIDENTIFIERLOOSE","\\d+");W("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${Fa}*`);W("MAINVERSION",`(${L[A.NUMERICIDENTIFIER]})\\.(${L[A.NUMERICIDENTIFIER]})\\.(${L[A.NUMERICIDENTIFIER]})`);W("MAINVERSIONLOOSE",`(${L[A.NUMERICIDENTIFIERLOOSE]})\\.(${L[A.NUMERICIDENTIFIERLOOSE]})\\.(${L[A.NUMERICIDENTIFIERLOOSE]})`);W("PRERELEASEIDENTIFIER",`(?:${L[A.NUMERICIDENTIFIER]}|${L[A.NONNUMERICIDENTIFIER]})`);W("PRERELEASEIDENTIFIERLOOSE",`(?:${L[A.NUMERICIDENTIFIERLOOSE]}|${L[A.NONNUMERICIDENTIFIER]})`);W("PRERELEASE",`(?:-(${L[A.PRERELEASEIDENTIFIER]}(?:\\.${L[A.PRERELEASEIDENTIFIER]})*))`);W("PRERELEASELOOSE",`(?:-?(${L[A.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${L[A.PRERELEASEIDENTIFIERLOOSE]})*))`);W("BUILDIDENTIFIER",`${Fa}+`);W("BUILD",`(?:\\+(${L[A.BUILDIDENTIFIER]}(?:\\.${L[A.BUILDIDENTIFIER]})*))`);W("FULLPLAIN",`v?${L[A.MAINVERSION]}${L[A.PRERELEASE]}?${L[A.BUILD]}?`);W("FULL",`^${L[A.FULLPLAIN]}$`);W("LOOSEPLAIN",`[v=\\s]*${L[A.MAINVERSIONLOOSE]}${L[A.PRERELEASELOOSE]}?${L[A.BUILD]}?`);W("LOOSE",`^${L[A.LOOSEPLAIN]}$`);W("GTLT","((?:<|>)?=?)");W("XRANGEIDENTIFIERLOOSE",`${L[A.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);W("XRANGEIDENTIFIER",`${L[A.NUMERICIDENTIFIER]}|x|X|\\*`);W("XRANGEPLAIN",`[v=\\s]*(${L[A.XRANGEIDENTIFIER]})(?:\\.(${L[A.XRANGEIDENTIFIER]})(?:\\.(${L[A.XRANGEIDENTIFIER]})(?:${L[A.PRERELEASE]})?${L[A.BUILD]}?)?)?`);W("XRANGEPLAINLOOSE",`[v=\\s]*(${L[A.XRANGEIDENTIFIERLOOSE]})(?:\\.(${L[A.XRANGEIDENTIFIERLOOSE]})(?:\\.(${L[A.XRANGEIDENTIFIERLOOSE]})(?:${L[A.PRERELEASELOOSE]})?${L[A.BUILD]}?)?)?`);W("XRANGE",`^${L[A.GTLT]}\\s*${L[A.XRANGEPLAIN]}$`);W("XRANGELOOSE",`^${L[A.GTLT]}\\s*${L[A.XRANGEPLAINLOOSE]}$`);W("COERCEPLAIN",`(^|[^\\d])(\\d{1,${$a}})(?:\\.(\\d{1,${$a}}))?(?:\\.(\\d{1,${$a}}))?`);W("COERCE",`${L[A.COERCEPLAIN]}(?:$|[^\\d])`);W("COERCEFULL",L[A.COERCEPLAIN]+`(?:${L[A.PRERELEASE]})?(?:${L[A.BUILD]})?(?:$|[^\\d])`);W("COERCERTL",L[A.COERCE],!0);W("COERCERTLFULL",L[A.COERCEFULL],!0);W("LONETILDE","(?:~>?)");W("TILDETRIM",`(\\s*)${L[A.LONETILDE]}\\s+`,!0);gt.tildeTrimReplace="$1~";W("TILDE",`^${L[A.LONETILDE]}${L[A.XRANGEPLAIN]}$`);W("TILDELOOSE",`^${L[A.LONETILDE]}${L[A.XRANGEPLAINLOOSE]}$`);W("LONECARET","(?:\\^)");W("CARETTRIM",`(\\s*)${L[A.LONECARET]}\\s+`,!0);gt.caretTrimReplace="$1^";W("CARET",`^${L[A.LONECARET]}${L[A.XRANGEPLAIN]}$`);W("CARETLOOSE",`^${L[A.LONECARET]}${L[A.XRANGEPLAINLOOSE]}$`);W("COMPARATORLOOSE",`^${L[A.GTLT]}\\s*(${L[A.LOOSEPLAIN]})$|^$`);W("COMPARATOR",`^${L[A.GTLT]}\\s*(${L[A.FULLPLAIN]})$|^$`);W("COMPARATORTRIM",`(\\s*)${L[A.GTLT]}\\s*(${L[A.LOOSEPLAIN]}|${L[A.XRANGEPLAIN]})`,!0);gt.comparatorTrimReplace="$1$2$3";W("HYPHENRANGE",`^\\s*(${L[A.XRANGEPLAIN]})\\s+-\\s+(${L[A.XRANGEPLAIN]})\\s*$`);W("HYPHENRANGELOOSE",`^\\s*(${L[A.XRANGEPLAINLOOSE]})\\s+-\\s+(${L[A.XRANGEPLAINLOOSE]})\\s*$`);W("STAR","(<|>)?=?\\s*\\*");W("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");W("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var _o=F((kw,Zu)=>{"use strict";var Zm=Object.freeze({loose:!0}),eg=Object.freeze({}),tg=a=>a?typeof a!="object"?Zm:a:eg;Zu.exports=tg});var Oa=F((Tw,rc)=>{"use strict";var ec=/^[0-9]+$/,tc=(a,e)=>{let t=ec.test(a),n=ec.test(e);return t&&n&&(a=+a,e=+e),a===e?0:t&&!n?-1:n&&!t?1:a<e?-1:1},rg=(a,e)=>tc(e,a);rc.exports={compareIdentifiers:tc,rcompareIdentifiers:rg}});var ge=F((Cw,ac)=>{"use strict";var bo=en(),{MAX_LENGTH:nc,MAX_SAFE_INTEGER:yo}=Zr(),{safeRe:oc,t:ic}=Lr(),ng=_o(),{compareIdentifiers:Ar}=Oa(),Ba=class a{constructor(e,t){if(t=ng(t),e instanceof a){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>nc)throw new TypeError(`version is longer than ${nc} characters`);bo("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let n=e.trim().match(t.loose?oc[ic.LOOSE]:oc[ic.FULL]);if(!n)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+n[1],this.minor=+n[2],this.patch=+n[3],this.major>yo||this.major<0)throw new TypeError("Invalid major version");if(this.minor>yo||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>yo||this.patch<0)throw new TypeError("Invalid patch version");n[4]?this.prerelease=n[4].split(".").map(o=>{if(/^[0-9]+$/.test(o)){let s=+o;if(s>=0&&s<yo)return s}return o}):this.prerelease=[],this.build=n[5]?n[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(e){if(bo("SemVer.compare",this.version,this.options,e),!(e instanceof a)){if(typeof e=="string"&&e===this.version)return 0;e=new a(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof a||(e=new a(e,this.options)),Ar(this.major,e.major)||Ar(this.minor,e.minor)||Ar(this.patch,e.patch)}comparePre(e){if(e instanceof a||(e=new a(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let t=0;do{let n=this.prerelease[t],o=e.prerelease[t];if(bo("prerelease compare",t,n,o),n===void 0&&o===void 0)return 0;if(o===void 0)return 1;if(n===void 0)return-1;if(n===o)continue;return Ar(n,o)}while(++t)}compareBuild(e){e instanceof a||(e=new a(e,this.options));let t=0;do{let n=this.build[t],o=e.build[t];if(bo("build compare",t,n,o),n===void 0&&o===void 0)return 0;if(o===void 0)return 1;if(n===void 0)return-1;if(n===o)continue;return Ar(n,o)}while(++t)}inc(e,t,n){switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",t,n);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",t,n);break;case"prepatch":this.prerelease.length=0,this.inc("patch",t,n),this.inc("pre",t,n);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",t,n),this.inc("pre",t,n);break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{let o=Number(n)?1:0;if(!t&&n===!1)throw new Error("invalid increment argument: identifier is empty");if(this.prerelease.length===0)this.prerelease=[o];else{let s=this.prerelease.length;for(;--s>=0;)typeof this.prerelease[s]=="number"&&(this.prerelease[s]++,s=-2);if(s===-1){if(t===this.prerelease.join(".")&&n===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(o)}}if(t){let s=[t,o];n===!1&&(s=[t]),Ar(this.prerelease[0],t)===0?isNaN(this.prerelease[1])&&(this.prerelease=s):this.prerelease=s}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};ac.exports=Ba});var nr=F((Iw,lc)=>{"use strict";var sc=ge(),og=(a,e,t=!1)=>{if(a instanceof sc)return a;try{return new sc(a,e)}catch(n){if(!t)return null;throw n}};lc.exports=og});var cc=F((Dw,uc)=>{"use strict";var ig=nr(),ag=(a,e)=>{let t=ig(a,e);return t?t.version:null};uc.exports=ag});var fc=F(($w,dc)=>{"use strict";var sg=nr(),lg=(a,e)=>{let t=sg(a.trim().replace(/^[=v]+/,""),e);return t?t.version:null};dc.exports=lg});var mc=F((Fw,hc)=>{"use strict";var pc=ge(),ug=(a,e,t,n,o)=>{typeof t=="string"&&(o=n,n=t,t=void 0);try{return new pc(a instanceof pc?a.version:a,t).inc(e,n,o).version}catch{return null}};hc.exports=ug});var bc=F((Ow,_c)=>{"use strict";var gc=nr(),cg=(a,e)=>{let t=gc(a,null,!0),n=gc(e,null,!0),o=t.compare(n);if(o===0)return null;let s=o>0,u=s?t:n,f=s?n:t,d=!!u.prerelease.length;if(!!f.prerelease.length&&!d)return!f.patch&&!f.minor?"major":u.patch?"patch":u.minor?"minor":"major";let p=d?"pre":"";return t.major!==n.major?p+"major":t.minor!==n.minor?p+"minor":t.patch!==n.patch?p+"patch":"prerelease"};_c.exports=cg});var wc=F((Bw,yc)=>{"use strict";var dg=ge(),fg=(a,e)=>new dg(a,e).major;yc.exports=fg});var Sc=F((qw,vc)=>{"use strict";var pg=ge(),hg=(a,e)=>new pg(a,e).minor;vc.exports=hg});var Pc=F((Mw,Rc)=>{"use strict";var mg=ge(),gg=(a,e)=>new mg(a,e).patch;Rc.exports=gg});var xc=F((Nw,Ec)=>{"use strict";var _g=nr(),bg=(a,e)=>{let t=_g(a,e);return t&&t.prerelease.length?t.prerelease:null};Ec.exports=bg});var We=F((Uw,Ac)=>{"use strict";var Lc=ge(),yg=(a,e,t)=>new Lc(a,t).compare(new Lc(e,t));Ac.exports=yg});var Tc=F((jw,kc)=>{"use strict";var wg=We(),vg=(a,e,t)=>wg(e,a,t);kc.exports=vg});var Ic=F((Ww,Cc)=>{"use strict";var Sg=We(),Rg=(a,e)=>Sg(a,e,!0);Cc.exports=Rg});var wo=F((Vw,$c)=>{"use strict";var Dc=ge(),Pg=(a,e,t)=>{let n=new Dc(a,t),o=new Dc(e,t);return n.compare(o)||n.compareBuild(o)};$c.exports=Pg});var Oc=F((zw,Fc)=>{"use strict";var Eg=wo(),xg=(a,e)=>a.sort((t,n)=>Eg(t,n,e));Fc.exports=xg});var qc=F((Hw,Bc)=>{"use strict";var Lg=wo(),Ag=(a,e)=>a.sort((t,n)=>Lg(n,t,e));Bc.exports=Ag});var tn=F((Kw,Mc)=>{"use strict";var kg=We(),Tg=(a,e,t)=>kg(a,e,t)>0;Mc.exports=Tg});var vo=F((Gw,Nc)=>{"use strict";var Cg=We(),Ig=(a,e,t)=>Cg(a,e,t)<0;Nc.exports=Ig});var qa=F((Xw,Uc)=>{"use strict";var Dg=We(),$g=(a,e,t)=>Dg(a,e,t)===0;Uc.exports=$g});var Ma=F((Yw,jc)=>{"use strict";var Fg=We(),Og=(a,e,t)=>Fg(a,e,t)!==0;jc.exports=Og});var So=F((Qw,Wc)=>{"use strict";var Bg=We(),qg=(a,e,t)=>Bg(a,e,t)>=0;Wc.exports=qg});var Ro=F((Jw,Vc)=>{"use strict";var Mg=We(),Ng=(a,e,t)=>Mg(a,e,t)<=0;Vc.exports=Ng});var Na=F((Zw,zc)=>{"use strict";var Ug=qa(),jg=Ma(),Wg=tn(),Vg=So(),zg=vo(),Hg=Ro(),Kg=(a,e,t,n)=>{switch(e){case"===":return typeof a=="object"&&(a=a.version),typeof t=="object"&&(t=t.version),a===t;case"!==":return typeof a=="object"&&(a=a.version),typeof t=="object"&&(t=t.version),a!==t;case"":case"=":case"==":return Ug(a,t,n);case"!=":return jg(a,t,n);case">":return Wg(a,t,n);case">=":return Vg(a,t,n);case"<":return zg(a,t,n);case"<=":return Hg(a,t,n);default:throw new TypeError(`Invalid operator: ${e}`)}};zc.exports=Kg});var Kc=F((ev,Hc)=>{"use strict";var Gg=ge(),Xg=nr(),{safeRe:Po,t:Eo}=Lr(),Yg=(a,e)=>{if(a instanceof Gg)return a;if(typeof a=="number"&&(a=String(a)),typeof a!="string")return null;e=e||{};let t=null;if(!e.rtl)t=a.match(e.includePrerelease?Po[Eo.COERCEFULL]:Po[Eo.COERCE]);else{let d=e.includePrerelease?Po[Eo.COERCERTLFULL]:Po[Eo.COERCERTL],c;for(;(c=d.exec(a))&&(!t||t.index+t[0].length!==a.length);)(!t||c.index+c[0].length!==t.index+t[0].length)&&(t=c),d.lastIndex=c.index+c[1].length+c[2].length;d.lastIndex=-1}if(t===null)return null;let n=t[2],o=t[3]||"0",s=t[4]||"0",u=e.includePrerelease&&t[5]?`-${t[5]}`:"",f=e.includePrerelease&&t[6]?`+${t[6]}`:"";return Xg(`${n}.${o}.${s}${u}${f}`,e)};Hc.exports=Yg});var Xc=F((tv,Gc)=>{"use strict";var Ua=class{constructor(){this.max=1e3,this.map=new Map}get(e){let t=this.map.get(e);if(t!==void 0)return this.map.delete(e),this.map.set(e,t),t}delete(e){return this.map.delete(e)}set(e,t){if(!this.delete(e)&&t!==void 0){if(this.map.size>=this.max){let o=this.map.keys().next().value;this.delete(o)}this.map.set(e,t)}return this}};Gc.exports=Ua});var Ve=F((rv,Zc)=>{"use strict";var Qg=/\s+/g,ja=class a{constructor(e,t){if(t=Zg(t),e instanceof a)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new a(e.raw,t);if(e instanceof Wa)return this.raw=e.value,this.set=[[e]],this.formatted=void 0,this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e.trim().replace(Qg," "),this.set=this.raw.split("||").map(n=>this.parseRange(n.trim())).filter(n=>n.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let n=this.set[0];if(this.set=this.set.filter(o=>!Qc(o[0])),this.set.length===0)this.set=[n];else if(this.set.length>1){for(let o of this.set)if(o.length===1&&a_(o[0])){this.set=[o];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let e=0;e<this.set.length;e++){e>0&&(this.formatted+="||");let t=this.set[e];for(let n=0;n<t.length;n++)n>0&&(this.formatted+=" "),this.formatted+=t[n].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(e){let n=((this.options.includePrerelease&&o_)|(this.options.loose&&i_))+":"+e,o=Yc.get(n);if(o)return o;let s=this.options.loose,u=s?Le[be.HYPHENRANGELOOSE]:Le[be.HYPHENRANGE];e=e.replace(u,g_(this.options.includePrerelease)),se("hyphen replace",e),e=e.replace(Le[be.COMPARATORTRIM],t_),se("comparator trim",e),e=e.replace(Le[be.TILDETRIM],r_),se("tilde trim",e),e=e.replace(Le[be.CARETTRIM],n_),se("caret trim",e);let f=e.split(" ").map(m=>s_(m,this.options)).join(" ").split(/\s+/).map(m=>m_(m,this.options));s&&(f=f.filter(m=>(se("loose invalid filter",m,this.options),!!m.match(Le[be.COMPARATORLOOSE])))),se("range list",f);let d=new Map,c=f.map(m=>new Wa(m,this.options));for(let m of c){if(Qc(m))return[m];d.set(m.value,m)}d.size>1&&d.has("")&&d.delete("");let p=[...d.values()];return Yc.set(n,p),p}intersects(e,t){if(!(e instanceof a))throw new TypeError("a Range is required");return this.set.some(n=>Jc(n,t)&&e.set.some(o=>Jc(o,t)&&n.every(s=>o.every(u=>s.intersects(u,t)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new e_(e,this.options)}catch{return!1}for(let t=0;t<this.set.length;t++)if(__(this.set[t],e,this.options))return!0;return!1}};Zc.exports=ja;var Jg=Xc(),Yc=new Jg,Zg=_o(),Wa=rn(),se=en(),e_=ge(),{safeRe:Le,t:be,comparatorTrimReplace:t_,tildeTrimReplace:r_,caretTrimReplace:n_}=Lr(),{FLAG_INCLUDE_PRERELEASE:o_,FLAG_LOOSE:i_}=Zr(),Qc=a=>a.value==="<0.0.0-0",a_=a=>a.value==="",Jc=(a,e)=>{let t=!0,n=a.slice(),o=n.pop();for(;t&&n.length;)t=n.every(s=>o.intersects(s,e)),o=n.pop();return t},s_=(a,e)=>(se("comp",a,e),a=c_(a,e),se("caret",a),a=l_(a,e),se("tildes",a),a=f_(a,e),se("xrange",a),a=h_(a,e),se("stars",a),a),ye=a=>!a||a.toLowerCase()==="x"||a==="*",l_=(a,e)=>a.trim().split(/\s+/).map(t=>u_(t,e)).join(" "),u_=(a,e)=>{let t=e.loose?Le[be.TILDELOOSE]:Le[be.TILDE];return a.replace(t,(n,o,s,u,f)=>{se("tilde",a,n,o,s,u,f);let d;return ye(o)?d="":ye(s)?d=`>=${o}.0.0 <${+o+1}.0.0-0`:ye(u)?d=`>=${o}.${s}.0 <${o}.${+s+1}.0-0`:f?(se("replaceTilde pr",f),d=`>=${o}.${s}.${u}-${f} <${o}.${+s+1}.0-0`):d=`>=${o}.${s}.${u} <${o}.${+s+1}.0-0`,se("tilde return",d),d})},c_=(a,e)=>a.trim().split(/\s+/).map(t=>d_(t,e)).join(" "),d_=(a,e)=>{se("caret",a,e);let t=e.loose?Le[be.CARETLOOSE]:Le[be.CARET],n=e.includePrerelease?"-0":"";return a.replace(t,(o,s,u,f,d)=>{se("caret",a,o,s,u,f,d);let c;return ye(s)?c="":ye(u)?c=`>=${s}.0.0${n} <${+s+1}.0.0-0`:ye(f)?s==="0"?c=`>=${s}.${u}.0${n} <${s}.${+u+1}.0-0`:c=`>=${s}.${u}.0${n} <${+s+1}.0.0-0`:d?(se("replaceCaret pr",d),s==="0"?u==="0"?c=`>=${s}.${u}.${f}-${d} <${s}.${u}.${+f+1}-0`:c=`>=${s}.${u}.${f}-${d} <${s}.${+u+1}.0-0`:c=`>=${s}.${u}.${f}-${d} <${+s+1}.0.0-0`):(se("no pr"),s==="0"?u==="0"?c=`>=${s}.${u}.${f}${n} <${s}.${u}.${+f+1}-0`:c=`>=${s}.${u}.${f}${n} <${s}.${+u+1}.0-0`:c=`>=${s}.${u}.${f} <${+s+1}.0.0-0`),se("caret return",c),c})},f_=(a,e)=>(se("replaceXRanges",a,e),a.split(/\s+/).map(t=>p_(t,e)).join(" ")),p_=(a,e)=>{a=a.trim();let t=e.loose?Le[be.XRANGELOOSE]:Le[be.XRANGE];return a.replace(t,(n,o,s,u,f,d)=>{se("xRange",a,n,o,s,u,f,d);let c=ye(s),p=c||ye(u),m=p||ye(f),y=m;return o==="="&&y&&(o=""),d=e.includePrerelease?"-0":"",c?o===">"||o==="<"?n="<0.0.0-0":n="*":o&&y?(p&&(u=0),f=0,o===">"?(o=">=",p?(s=+s+1,u=0,f=0):(u=+u+1,f=0)):o==="<="&&(o="<",p?s=+s+1:u=+u+1),o==="<"&&(d="-0"),n=`${o+s}.${u}.${f}${d}`):p?n=`>=${s}.0.0${d} <${+s+1}.0.0-0`:m&&(n=`>=${s}.${u}.0${d} <${s}.${+u+1}.0-0`),se("xRange return",n),n})},h_=(a,e)=>(se("replaceStars",a,e),a.trim().replace(Le[be.STAR],"")),m_=(a,e)=>(se("replaceGTE0",a,e),a.trim().replace(Le[e.includePrerelease?be.GTE0PRE:be.GTE0],"")),g_=a=>(e,t,n,o,s,u,f,d,c,p,m,y)=>(ye(n)?t="":ye(o)?t=`>=${n}.0.0${a?"-0":""}`:ye(s)?t=`>=${n}.${o}.0${a?"-0":""}`:u?t=`>=${t}`:t=`>=${t}${a?"-0":""}`,ye(c)?d="":ye(p)?d=`<${+c+1}.0.0-0`:ye(m)?d=`<${c}.${+p+1}.0-0`:y?d=`<=${c}.${p}.${m}-${y}`:a?d=`<${c}.${p}.${+m+1}-0`:d=`<=${d}`,`${t} ${d}`.trim()),__=(a,e,t)=>{for(let n=0;n<a.length;n++)if(!a[n].test(e))return!1;if(e.prerelease.length&&!t.includePrerelease){for(let n=0;n<a.length;n++)if(se(a[n].semver),a[n].semver!==Wa.ANY&&a[n].semver.prerelease.length>0){let o=a[n].semver;if(o.major===e.major&&o.minor===e.minor&&o.patch===e.patch)return!0}return!1}return!0}});var rn=F((nv,id)=>{"use strict";var nn=Symbol("SemVer ANY"),Ha=class a{static get ANY(){return nn}constructor(e,t){if(t=ed(t),e instanceof a){if(e.loose===!!t.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),za("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===nn?this.value="":this.value=this.operator+this.semver.version,za("comp",this)}parse(e){let t=this.options.loose?td[rd.COMPARATORLOOSE]:td[rd.COMPARATOR],n=e.match(t);if(!n)throw new TypeError(`Invalid comparator: ${e}`);this.operator=n[1]!==void 0?n[1]:"",this.operator==="="&&(this.operator=""),n[2]?this.semver=new nd(n[2],this.options.loose):this.semver=nn}toString(){return this.value}test(e){if(za("Comparator.test",e,this.options.loose),this.semver===nn||e===nn)return!0;if(typeof e=="string")try{e=new nd(e,this.options)}catch{return!1}return Va(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof a))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new od(e.value,t).test(this.value):e.operator===""?e.value===""?!0:new od(this.value,t).test(e.semver):(t=ed(t),t.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!t.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||Va(this.semver,"<",e.semver,t)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||Va(this.semver,">",e.semver,t)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};id.exports=Ha;var ed=_o(),{safeRe:td,t:rd}=Lr(),Va=Na(),za=en(),nd=ge(),od=Ve()});var on=F((ov,ad)=>{"use strict";var b_=Ve(),y_=(a,e,t)=>{try{e=new b_(e,t)}catch{return!1}return e.test(a)};ad.exports=y_});var ld=F((iv,sd)=>{"use strict";var w_=Ve(),v_=(a,e)=>new w_(a,e).set.map(t=>t.map(n=>n.value).join(" ").trim().split(" "));sd.exports=v_});var cd=F((av,ud)=>{"use strict";var S_=ge(),R_=Ve(),P_=(a,e,t)=>{let n=null,o=null,s=null;try{s=new R_(e,t)}catch{return null}return a.forEach(u=>{s.test(u)&&(!n||o.compare(u)===-1)&&(n=u,o=new S_(n,t))}),n};ud.exports=P_});var fd=F((sv,dd)=>{"use strict";var E_=ge(),x_=Ve(),L_=(a,e,t)=>{let n=null,o=null,s=null;try{s=new x_(e,t)}catch{return null}return a.forEach(u=>{s.test(u)&&(!n||o.compare(u)===1)&&(n=u,o=new E_(n,t))}),n};dd.exports=L_});var md=F((lv,hd)=>{"use strict";var Ka=ge(),A_=Ve(),pd=tn(),k_=(a,e)=>{a=new A_(a,e);let t=new Ka("0.0.0");if(a.test(t)||(t=new Ka("0.0.0-0"),a.test(t)))return t;t=null;for(let n=0;n<a.set.length;++n){let o=a.set[n],s=null;o.forEach(u=>{let f=new Ka(u.semver.version);switch(u.operator){case">":f.prerelease.length===0?f.patch++:f.prerelease.push(0),f.raw=f.format();case"":case">=":(!s||pd(f,s))&&(s=f);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${u.operator}`)}}),s&&(!t||pd(t,s))&&(t=s)}return t&&a.test(t)?t:null};hd.exports=k_});var _d=F((uv,gd)=>{"use strict";var T_=Ve(),C_=(a,e)=>{try{return new T_(a,e).range||"*"}catch{return null}};gd.exports=C_});var xo=F((cv,vd)=>{"use strict";var I_=ge(),wd=rn(),{ANY:D_}=wd,$_=Ve(),F_=on(),bd=tn(),yd=vo(),O_=Ro(),B_=So(),q_=(a,e,t,n)=>{a=new I_(a,n),e=new $_(e,n);let o,s,u,f,d;switch(t){case">":o=bd,s=O_,u=yd,f=">",d=">=";break;case"<":o=yd,s=B_,u=bd,f="<",d="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(F_(a,e,n))return!1;for(let c=0;c<e.set.length;++c){let p=e.set[c],m=null,y=null;if(p.forEach(g=>{g.semver===D_&&(g=new wd(">=0.0.0")),m=m||g,y=y||g,o(g.semver,m.semver,n)?m=g:u(g.semver,y.semver,n)&&(y=g)}),m.operator===f||m.operator===d||(!y.operator||y.operator===f)&&s(a,y.semver))return!1;if(y.operator===d&&u(a,y.semver))return!1}return!0};vd.exports=q_});var Rd=F((dv,Sd)=>{"use strict";var M_=xo(),N_=(a,e,t)=>M_(a,e,">",t);Sd.exports=N_});var Ed=F((fv,Pd)=>{"use strict";var U_=xo(),j_=(a,e,t)=>U_(a,e,"<",t);Pd.exports=j_});var Ad=F((pv,Ld)=>{"use strict";var xd=Ve(),W_=(a,e,t)=>(a=new xd(a,t),e=new xd(e,t),a.intersects(e,t));Ld.exports=W_});var Td=F((hv,kd)=>{"use strict";var V_=on(),z_=We();kd.exports=(a,e,t)=>{let n=[],o=null,s=null,u=a.sort((p,m)=>z_(p,m,t));for(let p of u)V_(p,e,t)?(s=p,o||(o=p)):(s&&n.push([o,s]),s=null,o=null);o&&n.push([o,null]);let f=[];for(let[p,m]of n)p===m?f.push(p):!m&&p===u[0]?f.push("*"):m?p===u[0]?f.push(`<=${m}`):f.push(`${p} - ${m}`):f.push(`>=${p}`);let d=f.join(" || "),c=typeof e.raw=="string"?e.raw:String(e);return d.length<c.length?d:e}});var Od=F((mv,Fd)=>{"use strict";var Cd=Ve(),Xa=rn(),{ANY:Ga}=Xa,an=on(),Ya=We(),H_=(a,e,t={})=>{if(a===e)return!0;a=new Cd(a,t),e=new Cd(e,t);let n=!1;e:for(let o of a.set){for(let s of e.set){let u=G_(o,s,t);if(n=n||u!==null,u)continue e}if(n)return!1}return!0},K_=[new Xa(">=0.0.0-0")],Id=[new Xa(">=0.0.0")],G_=(a,e,t)=>{if(a===e)return!0;if(a.length===1&&a[0].semver===Ga){if(e.length===1&&e[0].semver===Ga)return!0;t.includePrerelease?a=K_:a=Id}if(e.length===1&&e[0].semver===Ga){if(t.includePrerelease)return!0;e=Id}let n=new Set,o,s;for(let g of a)g.operator===">"||g.operator===">="?o=Dd(o,g,t):g.operator==="<"||g.operator==="<="?s=$d(s,g,t):n.add(g.semver);if(n.size>1)return null;let u;if(o&&s){if(u=Ya(o.semver,s.semver,t),u>0)return null;if(u===0&&(o.operator!==">="||s.operator!=="<="))return null}for(let g of n){if(o&&!an(g,String(o),t)||s&&!an(g,String(s),t))return null;for(let w of e)if(!an(g,String(w),t))return!1;return!0}let f,d,c,p,m=s&&!t.includePrerelease&&s.semver.prerelease.length?s.semver:!1,y=o&&!t.includePrerelease&&o.semver.prerelease.length?o.semver:!1;m&&m.prerelease.length===1&&s.operator==="<"&&m.prerelease[0]===0&&(m=!1);for(let g of e){if(p=p||g.operator===">"||g.operator===">=",c=c||g.operator==="<"||g.operator==="<=",o){if(y&&g.semver.prerelease&&g.semver.prerelease.length&&g.semver.major===y.major&&g.semver.minor===y.minor&&g.semver.patch===y.patch&&(y=!1),g.operator===">"||g.operator===">="){if(f=Dd(o,g,t),f===g&&f!==o)return!1}else if(o.operator===">="&&!an(o.semver,String(g),t))return!1}if(s){if(m&&g.semver.prerelease&&g.semver.prerelease.length&&g.semver.major===m.major&&g.semver.minor===m.minor&&g.semver.patch===m.patch&&(m=!1),g.operator==="<"||g.operator==="<="){if(d=$d(s,g,t),d===g&&d!==s)return!1}else if(s.operator==="<="&&!an(s.semver,String(g),t))return!1}if(!g.operator&&(s||o)&&u!==0)return!1}return!(o&&c&&!s&&u!==0||s&&p&&!o&&u!==0||y||m)},Dd=(a,e,t)=>{if(!a)return e;let n=Ya(a.semver,e.semver,t);return n>0?a:n<0||e.operator===">"&&a.operator===">="?e:a},$d=(a,e,t)=>{if(!a)return e;let n=Ya(a.semver,e.semver,t);return n<0?a:n>0||e.operator==="<"&&a.operator==="<="?e:a};Fd.exports=H_});var Nd=F((gv,Md)=>{"use strict";var Qa=Lr(),Bd=Zr(),X_=ge(),qd=Oa(),Y_=nr(),Q_=cc(),J_=fc(),Z_=mc(),eb=bc(),tb=wc(),rb=Sc(),nb=Pc(),ob=xc(),ib=We(),ab=Tc(),sb=Ic(),lb=wo(),ub=Oc(),cb=qc(),db=tn(),fb=vo(),pb=qa(),hb=Ma(),mb=So(),gb=Ro(),_b=Na(),bb=Kc(),yb=rn(),wb=Ve(),vb=on(),Sb=ld(),Rb=cd(),Pb=fd(),Eb=md(),xb=_d(),Lb=xo(),Ab=Rd(),kb=Ed(),Tb=Ad(),Cb=Td(),Ib=Od();Md.exports={parse:Y_,valid:Q_,clean:J_,inc:Z_,diff:eb,major:tb,minor:rb,patch:nb,prerelease:ob,compare:ib,rcompare:ab,compareLoose:sb,compareBuild:lb,sort:ub,rsort:cb,gt:db,lt:fb,eq:pb,neq:hb,gte:mb,lte:gb,cmp:_b,coerce:bb,Comparator:yb,Range:wb,satisfies:vb,toComparators:Sb,maxSatisfying:Rb,minSatisfying:Pb,minVersion:Eb,validRange:xb,outside:Lb,gtr:Ab,ltr:kb,intersects:Tb,simplifyRange:Cb,subset:Ib,SemVer:X_,re:Qa.re,src:Qa.src,tokens:Qa.t,SEMVER_SPEC_VERSION:Bd.SEMVER_SPEC_VERSION,RELEASE_TYPES:Bd.RELEASE_TYPES,compareIdentifiers:qd.compareIdentifiers,rcompareIdentifiers:qd.rcompareIdentifiers}});var Gd=F((yv,Kd)=>{"use strict";var Hd=require("child_process"),Wd=Hd.spawn,Db=Hd.exec;Kd.exports=function(a,e,t){if(typeof e=="function"&&t===void 0&&(t=e,e=void 0),a=parseInt(a),Number.isNaN(a)){if(t)return t(new Error("pid must be a number"));throw new Error("pid must be a number")}var n={},o={};switch(n[a]=[],o[a]=1,process.platform){case"win32":Db("taskkill /pid "+a+" /T /F",t);break;case"darwin":Ja(a,n,o,function(s){return Wd("pgrep",["-P",s])},function(){Vd(n,e,t)});break;default:Ja(a,n,o,function(s){return Wd("ps",["-o","pid","--no-headers","--ppid",s])},function(){Vd(n,e,t)});break}};function Vd(a,e,t){var n={};try{Object.keys(a).forEach(function(o){a[o].forEach(function(s){n[s]||(zd(s,e),n[s]=1)}),n[o]||(zd(o,e),n[o]=1)})}catch(o){if(t)return t(o);throw o}if(t)return t()}function zd(a,e){try{process.kill(parseInt(a,10),e)}catch(t){if(t.code!=="ESRCH")throw t}}function Ja(a,e,t,n,o){var s=n(a),u="";s.stdout.on("data",function(c){var c=c.toString("ascii");u+=c});var f=function(d){if(delete t[a],d!=0){Object.keys(t).length==0&&o();return}u.match(/\d+/g).forEach(function(c){c=parseInt(c,10),e[a].push(c),e[c]=[],t[c]=1,Ja(c,e,t,n,o)})};s.on("close",f)}});var of=F((Bv,nf)=>{"use strict";var{hasOwnProperty:cs}=Object.prototype,ds=(a,e={})=>{typeof e=="string"&&(e={section:e}),e.align=e.align===!0,e.newline=e.newline===!0,e.sort=e.sort===!0,e.whitespace=e.whitespace===!0||e.align===!0,e.platform=e.platform||typeof process<"u"&&process.platform,e.bracketedArray=e.bracketedArray!==!1;let t=e.platform==="win32"?`\r
3291
- `:`
3292
- `,n=e.whitespace?" = ":"=",o=[],s=e.sort?Object.keys(a).sort():Object.keys(a),u=0;e.align&&(u=yt(s.filter(c=>a[c]===null||Array.isArray(a[c])||typeof a[c]!="object").map(c=>Array.isArray(a[c])?`${c}[]`:c).concat([""]).reduce((c,p)=>yt(c).length>=yt(p).length?c:p)).length);let f="",d=e.bracketedArray?"[]":"";for(let c of s){let p=a[c];if(p&&Array.isArray(p))for(let m of p)f+=yt(`${c}${d}`).padEnd(u," ")+n+yt(m)+t;else p&&typeof p=="object"?o.push(c):f+=yt(c).padEnd(u," ")+n+yt(p)+t}e.section&&f.length&&(f="["+yt(e.section)+"]"+(e.newline?t+t:t)+f);for(let c of o){let p=tf(c,".").join("\\."),m=(e.section?e.section+".":"")+p,y=ds(a[c],{...e,section:m});f.length&&y.length&&(f+=t),f+=y}return f};function tf(a,e){var t=0,n=0,o=0,s=[];do if(o=a.indexOf(e,t),o!==-1){if(t=o+e.length,o>0&&a[o-1]==="\\")continue;s.push(a.slice(n,o)),n=o+e.length}while(o!==-1);return s.push(a.slice(n)),s}var ef=(a,e={})=>{e.bracketedArray=e.bracketedArray!==!1;let t=Object.create(null),n=t,o=null,s=/^\[([^\]]*)\]\s*$|^([^=]+)(=(.*))?$/i,u=a.split(/[\r\n]+/g),f={};for(let c of u){if(!c||c.match(/^\s*[;#]/)||c.match(/^\s*$/))continue;let p=c.match(s);if(!p)continue;if(p[1]!==void 0){if(o=To(p[1]),o==="__proto__"){n=Object.create(null);continue}n=t[o]=t[o]||Object.create(null);continue}let m=To(p[2]),y;e.bracketedArray?y=m.length>2&&m.slice(-2)==="[]":(f[m]=(f?.[m]||0)+1,y=f[m]>1);let g=y&&m.endsWith("[]")?m.slice(0,-2):m;if(g==="__proto__")continue;let w=p[3]?To(p[4]):!0,R=w==="true"||w==="false"||w==="null"?JSON.parse(w):w;y&&(cs.call(n,g)?Array.isArray(n[g])||(n[g]=[n[g]]):n[g]=[]),Array.isArray(n[g])?n[g].push(R):n[g]=R}let d=[];for(let c of Object.keys(t)){if(!cs.call(t,c)||typeof t[c]!="object"||Array.isArray(t[c]))continue;let p=tf(c,".");n=t;let m=p.pop(),y=m.replace(/\\\./g,".");for(let g of p)g!=="__proto__"&&((!cs.call(n,g)||typeof n[g]!="object")&&(n[g]=Object.create(null)),n=n[g]);n===t&&y===m||(n[y]=t[c],d.push(c))}for(let c of d)delete t[c];return t},rf=a=>a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"),yt=a=>typeof a!="string"||a.match(/[=\r\n]/)||a.match(/^\[/)||a.length>1&&rf(a)||a!==a.trim()?JSON.stringify(a):a.split(";").join("\\;").split("#").join("\\#"),To=a=>{if(a=(a||"").trim(),rf(a)){a.charAt(0)==="'"&&(a=a.slice(1,-1));try{a=JSON.parse(a)}catch{}}else{let e=!1,t="";for(let n=0,o=a.length;n<o;n++){let s=a.charAt(n);if(e)"\\;#".indexOf(s)!==-1?t+=s:t+="\\"+s,e=!1;else{if(";#".indexOf(s)!==-1)break;s==="\\"?e=!0:t+=s}}return e&&(t+="\\"),t.trim()}return a};nf.exports={parse:ef,decode:ef,stringify:ds,encode:ds,safe:yt,unsafe:To}});var Ob={};Z(Ob,{ActiveFactorioVersion:()=>fs,ApiDocGenerator:()=>ta,BufferSplitter:()=>kr,BufferStream:()=>ir,EncodingUtil:()=>mi,FactorioModDebugSession:()=>is,LuaControlBehaviorType:()=>us,LuaFlowStatisticsType:()=>ln,LuaItemStackType:()=>bt,LuaLSAddon:()=>Ni,LuaObjectType:()=>ls,MapVersion:()=>Dt,ModManager:()=>Sr,ModSettings:()=>Xr,PropertyTree:()=>Rr,PropertyTreeType:()=>Ji,ProtoDocGenerator:()=>ra,SavedLuaTypeTag:()=>ss,ScriptDat:()=>as,getModInfo:()=>$u,substitutePathVariables:()=>Co});module.exports=eh(Ob);var mi={};Z(mi,{bufferChunks:()=>pi,encodeBreakpoints:()=>hi,encodeVarInt:()=>Gt,luaBlockQuote:()=>Ct,objectToLua:()=>Ur});function Ct(a){let e=a.toString().match(/\]=*$/),t="=".repeat((a.toString().match(/\]=*\]/g)||[]).map(n=>n.length-1).reduce((n,o)=>Math.max(n,o),e?e[0].length:0));return Buffer.concat([Buffer.from(`[${t}[`),a,Buffer.from(`]${t}]`)])}function pi(a,e){let t=[],n=a.length,o=0;for(;o<n;)t.push(a.slice(o,o+=e));return t}function Ur(a){switch(typeof a){case"object":let e=[Buffer.from("{")];for(let t in a)Object.prototype.hasOwnProperty.call(a,t)&&(e.push(Buffer.from("[")),e.push(Ur(t)),e.push(Buffer.from("]=")),e.push(Ur(a[t])),e.push(Buffer.from(",")));return e.push(Buffer.from("}")),Buffer.concat(e);case"string":return Buffer.from(`"${a}"`);case"boolean":case"number":return Buffer.from(`${a}`)}}function Gt(a){if(a>4294967280)throw new Error("Values > 0xFFFFFFF0 are reserved");if(a<0)throw new Error("Value must be positive");a===10?a=4294967295:a===26?a=4294967294:a===13&&(a=4294967293);let e,t,n,o;if(a<128)return Buffer.from([a]);a<2048?(o=2,e=192,t=31,n=6):a<65536?(o=3,e=224,t=15,n=12):a<2097152?(o=4,e=240,t=7,n=18):a<67108864?(o=5,e=248,t=3,n=24):(o=6,e=252,t=3,n=30);let s=Buffer.alloc(o);s[0]=e|a>>n&t;for(let u=n-6,f=1;u>=0;u-=6,f++)s[f]=128|a>>u&63;return s}function jn(a){let e=Buffer.from(a,"utf8"),t=Gt(e.length);return Buffer.concat([t,e])}function Un(a){let e=Gt(a.line),t=0,n=new Array;return a.condition&&(t|=1,n.push(jn(a.condition.replace(/[\r\n]+/g," ")))),a.hitCondition&&(t|=2,n.push(jn(a.hitCondition.replace(/[\r\n]+/g," ")))),a.logMessage&&(t|=4,n.push(jn(a.logMessage.replace(/[\r\n]+/g," ")))),Buffer.concat([e,Buffer.from([t]),Buffer.concat(n)])}function hi(a,e){let t=jn(a),n=e.filter(f=>!f.condition&&!f.hitCondition&&!f.logMessage).map(f=>f.line),o;if(n.length===0)o=Buffer.from([255]);else if(n.length===10){let f=Buffer.from([254]);o=Buffer.concat([f,Buffer.concat(n.map(d=>Gt(d)))])}else if(n.length===26){let f=Buffer.from([253]);o=Buffer.concat([f,Buffer.concat(n.map(d=>Gt(d)))])}else if(n.length===13){let f=Buffer.from([252]);o=Buffer.concat([f,Buffer.concat(n.map(d=>Gt(d)))])}else{let f=Buffer.from([n.length]);o=Buffer.concat([f,Buffer.concat(n.map(d=>Gt(d)))])}let s=e.filter(f=>f.condition||f.hitCondition||f.logMessage),u;if(s.length===0)u=Buffer.from([255]);else if(s.length===10){let f=Buffer.from([254]);u=Buffer.concat([f,Buffer.concat(s.map(d=>Un(d)))])}else if(s.length===26){let f=Buffer.from([253]);u=Buffer.concat([f,Buffer.concat(s.map(d=>Un(d)))])}else if(s.length===13){let f=Buffer.from([252]);u=Buffer.concat([f,Buffer.concat(s.map(d=>Un(d)))])}else{let f=Buffer.from([s.length]);u=Buffer.concat([f,Buffer.concat(s.map(d=>Un(d)))])}return Buffer.concat([t,o,u])}var Ni={};Z(Ni,{getConfig:()=>tm,getLuaFiles:()=>em});var Xt="2.0.5";var Wn;async function em(){if(!Wn){Wn=[];let a=await Promise.resolve().then(()=>(Ql(),Yl)),e=a.default,t=a.filenames;for(let n=0;n<e.length;n++)Wn.push({name:t[n].replace("../luals-addon/",""),content:e[n].default})}return Wn}async function tm(a){return{name:"factorio/config.json",content:JSON.stringify(Object.assign(await Promise.resolve().then(()=>le(Jl())),{bundleVersion:Xt,factorioVersion:a}))}}var Ee=le(require("fs/promises")),nt=le(require("path"));var Tu=le(require("node:http"),1),Cu=le(require("node:https"),1),er=le(require("node:zlib"),1),Ie=le(require("node:stream"),1),Gr=require("node:buffer");function rm(a){if(!/^data:/i.test(a))throw new TypeError('`uri` does not appear to be a Data URI (must begin with "data:")');a=a.replace(/\r?\n/g,"");let e=a.indexOf(",");if(e===-1||e<=4)throw new TypeError("malformed data: URI");let t=a.substring(5,e).split(";"),n="",o=!1,s=t[0]||"text/plain",u=s;for(let p=1;p<t.length;p++)t[p]==="base64"?o=!0:t[p]&&(u+=`;${t[p]}`,t[p].indexOf("charset=")===0&&(n=t[p].substring(8)));!t[0]&&!n.length&&(u+=";charset=US-ASCII",n="US-ASCII");let f=o?"base64":"ascii",d=unescape(a.substring(e+1)),c=Buffer.from(d,f);return c.type=s,c.typeFull=u,c.charset=n,c}var Zl=rm;var Ue=le(require("node:stream"),1),ht=require("node:util"),Te=require("node:buffer");jr();zn();var pt=class extends Error{constructor(e,t){super(e),Error.captureStackTrace(this,this.constructor),this.type=t}get name(){return this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}};var Re=class extends pt{constructor(e,t,n){super(e,t),n&&(this.code=this.errno=n.code,this.erroredSysCall=n.syscall)}};var Hn=Symbol.toStringTag,zi=a=>typeof a=="object"&&typeof a.append=="function"&&typeof a.delete=="function"&&typeof a.get=="function"&&typeof a.getAll=="function"&&typeof a.has=="function"&&typeof a.set=="function"&&typeof a.sort=="function"&&a[Hn]==="URLSearchParams",Vr=a=>a&&typeof a=="object"&&typeof a.arrayBuffer=="function"&&typeof a.type=="string"&&typeof a.stream=="function"&&typeof a.constructor=="function"&&/^(Blob|File)$/.test(a[Hn]),lu=a=>typeof a=="object"&&(a[Hn]==="AbortSignal"||a[Hn]==="EventTarget"),uu=(a,e)=>{let t=new URL(e).hostname,n=new URL(a).hostname;return t===n||t.endsWith(`.${n}`)},cu=(a,e)=>{let t=new URL(e).protocol,n=new URL(a).protocol;return t===n};var _m=(0,ht.promisify)(Ue.default.pipeline),Pe=Symbol("Body internals"),rt=class{constructor(e,{size:t=0}={}){let n=null;e===null?e=null:zi(e)?e=Te.Buffer.from(e.toString()):Vr(e)||Te.Buffer.isBuffer(e)||(ht.types.isAnyArrayBuffer(e)?e=Te.Buffer.from(e):ArrayBuffer.isView(e)?e=Te.Buffer.from(e.buffer,e.byteOffset,e.byteLength):e instanceof Ue.default||(e instanceof Qt?(e=su(e),n=e.type.split("=")[1]):e=Te.Buffer.from(String(e))));let o=e;Te.Buffer.isBuffer(e)?o=Ue.default.Readable.from(e):Vr(e)&&(o=Ue.default.Readable.from(e.stream())),this[Pe]={body:e,stream:o,boundary:n,disturbed:!1,error:null},this.size=t,e instanceof Ue.default&&e.on("error",s=>{let u=s instanceof pt?s:new Re(`Invalid response body while trying to fetch ${this.url}: ${s.message}`,"system",s);this[Pe].error=u})}get body(){return this[Pe].stream}get bodyUsed(){return this[Pe].disturbed}async arrayBuffer(){let{buffer:e,byteOffset:t,byteLength:n}=await Gi(this);return e.slice(t,t+n)}async formData(){let e=this.headers.get("content-type");if(e.startsWith("application/x-www-form-urlencoded")){let n=new Qt,o=new URLSearchParams(await this.text());for(let[s,u]of o)n.append(s,u);return n}let{toFormData:t}=await Promise.resolve().then(()=>(mu(),hu));return t(this.body,e)}async blob(){let e=this.headers&&this.headers.get("content-type")||this[Pe].body&&this[Pe].body.type||"",t=await this.arrayBuffer();return new ft([t],{type:e})}async json(){let e=await this.text();return JSON.parse(e)}async text(){let e=await Gi(this);return new TextDecoder().decode(e)}buffer(){return Gi(this)}};rt.prototype.buffer=(0,ht.deprecate)(rt.prototype.buffer,"Please use 'response.arrayBuffer()' instead of 'response.buffer()'","node-fetch#buffer");Object.defineProperties(rt.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0},data:{get:(0,ht.deprecate)(()=>{},"data doesn't exist, use json(), text(), arrayBuffer(), or body instead","https://github.com/node-fetch/node-fetch/issues/1000 (response)")}});async function Gi(a){if(a[Pe].disturbed)throw new TypeError(`body used already for: ${a.url}`);if(a[Pe].disturbed=!0,a[Pe].error)throw a[Pe].error;let{body:e}=a;if(e===null)return Te.Buffer.alloc(0);if(!(e instanceof Ue.default))return Te.Buffer.alloc(0);let t=[],n=0;try{for await(let o of e){if(a.size>0&&n+o.length>a.size){let s=new Re(`content size at ${a.url} over limit: ${a.size}`,"max-size");throw e.destroy(s),s}n+=o.length,t.push(o)}}catch(o){throw o instanceof pt?o:new Re(`Invalid response body while trying to fetch ${a.url}: ${o.message}`,"system",o)}if(e.readableEnded===!0||e._readableState.ended===!0)try{return t.every(o=>typeof o=="string")?Te.Buffer.from(t.join("")):Te.Buffer.concat(t,n)}catch(o){throw new Re(`Could not create Buffer from response body for ${a.url}: ${o.message}`,"system",o)}else throw new Re(`Premature close of server response while trying to fetch ${a.url}`)}var yr=(a,e)=>{let t,n,{body:o}=a[Pe];if(a.bodyUsed)throw new Error("cannot clone body after it is used");return o instanceof Ue.default&&typeof o.getBoundary!="function"&&(t=new Ue.PassThrough({highWaterMark:e}),n=new Ue.PassThrough({highWaterMark:e}),o.pipe(t),o.pipe(n),a[Pe].stream=t,o=n),o},bm=(0,ht.deprecate)(a=>a.getBoundary(),"form-data doesn't follow the spec and requires special treatment. Use alternative package","https://github.com/node-fetch/node-fetch/issues/1167"),Yn=(a,e)=>a===null?null:typeof a=="string"?"text/plain;charset=UTF-8":zi(a)?"application/x-www-form-urlencoded;charset=UTF-8":Vr(a)?a.type||null:Te.Buffer.isBuffer(a)||ht.types.isAnyArrayBuffer(a)||ArrayBuffer.isView(a)?null:a instanceof Qt?`multipart/form-data; boundary=${e[Pe].boundary}`:a&&typeof a.getBoundary=="function"?`multipart/form-data;boundary=${bm(a)}`:a instanceof Ue.default?null:"text/plain;charset=UTF-8",gu=a=>{let{body:e}=a[Pe];return e===null?0:Vr(e)?e.size:Te.Buffer.isBuffer(e)?e.length:e&&typeof e.getLengthSync=="function"&&e.hasKnownLength&&e.hasKnownLength()?e.getLengthSync():null},_u=async(a,{body:e})=>{e===null?a.end():await _m(e,a)};var Xi=require("node:util"),Hr=le(require("node:http"),1),Qn=typeof Hr.default.validateHeaderName=="function"?Hr.default.validateHeaderName:a=>{if(!/^[\^`\-\w!#$%&'*+.|~]+$/.test(a)){let e=new TypeError(`Header name must be a valid HTTP token [${a}]`);throw Object.defineProperty(e,"code",{value:"ERR_INVALID_HTTP_TOKEN"}),e}},Yi=typeof Hr.default.validateHeaderValue=="function"?Hr.default.validateHeaderValue:(a,e)=>{if(/[^\t\u0020-\u007E\u0080-\u00FF]/.test(e)){let t=new TypeError(`Invalid character in header content ["${a}"]`);throw Object.defineProperty(t,"code",{value:"ERR_INVALID_CHAR"}),t}},Ce=class a extends URLSearchParams{constructor(e){let t=[];if(e instanceof a){let n=e.raw();for(let[o,s]of Object.entries(n))t.push(...s.map(u=>[o,u]))}else if(e!=null)if(typeof e=="object"&&!Xi.types.isBoxedPrimitive(e)){let n=e[Symbol.iterator];if(n==null)t.push(...Object.entries(e));else{if(typeof n!="function")throw new TypeError("Header pairs must be iterable");t=[...e].map(o=>{if(typeof o!="object"||Xi.types.isBoxedPrimitive(o))throw new TypeError("Each header pair must be an iterable object");return[...o]}).map(o=>{if(o.length!==2)throw new TypeError("Each header pair must be a name/value tuple");return[...o]})}}else throw new TypeError("Failed to construct 'Headers': The provided value is not of type '(sequence<sequence<ByteString>> or record<ByteString, ByteString>)");return t=t.length>0?t.map(([n,o])=>(Qn(n),Yi(n,String(o)),[String(n).toLowerCase(),String(o)])):void 0,super(t),new Proxy(this,{get(n,o,s){switch(o){case"append":case"set":return(u,f)=>(Qn(u),Yi(u,String(f)),URLSearchParams.prototype[o].call(n,String(u).toLowerCase(),String(f)));case"delete":case"has":case"getAll":return u=>(Qn(u),URLSearchParams.prototype[o].call(n,String(u).toLowerCase()));case"keys":return()=>(n.sort(),new Set(URLSearchParams.prototype.keys.call(n)).keys());default:return Reflect.get(n,o,s)}}})}get[Symbol.toStringTag](){return this.constructor.name}toString(){return Object.prototype.toString.call(this)}get(e){let t=this.getAll(e);if(t.length===0)return null;let n=t.join(", ");return/^content-encoding$/i.test(e)&&(n=n.toLowerCase()),n}forEach(e,t=void 0){for(let n of this.keys())Reflect.apply(e,t,[this.get(n),n,this])}*values(){for(let e of this.keys())yield this.get(e)}*entries(){for(let e of this.keys())yield[e,this.get(e)]}[Symbol.iterator](){return this.entries()}raw(){return[...this.keys()].reduce((e,t)=>(e[t]=this.getAll(t),e),{})}[Symbol.for("nodejs.util.inspect.custom")](){return[...this.keys()].reduce((e,t)=>{let n=this.getAll(t);return t==="host"?e[t]=n[0]:e[t]=n.length>1?n:n[0],e},{})}};Object.defineProperties(Ce.prototype,["get","entries","forEach","values"].reduce((a,e)=>(a[e]={enumerable:!0},a),{}));function bu(a=[]){return new Ce(a.reduce((e,t,n,o)=>(n%2===0&&e.push(o.slice(n,n+2)),e),[]).filter(([e,t])=>{try{return Qn(e),Yi(e,String(t)),!0}catch{return!1}}))}var ym=new Set([301,302,303,307,308]),Jn=a=>ym.has(a);var Ye=Symbol("Response internals"),je=class a extends rt{constructor(e=null,t={}){super(e,t);let n=t.status!=null?t.status:200,o=new Ce(t.headers);if(e!==null&&!o.has("Content-Type")){let s=Yn(e,this);s&&o.append("Content-Type",s)}this[Ye]={type:"default",url:t.url,status:n,statusText:t.statusText||"",headers:o,counter:t.counter,highWaterMark:t.highWaterMark}}get type(){return this[Ye].type}get url(){return this[Ye].url||""}get status(){return this[Ye].status}get ok(){return this[Ye].status>=200&&this[Ye].status<300}get redirected(){return this[Ye].counter>0}get statusText(){return this[Ye].statusText}get headers(){return this[Ye].headers}get highWaterMark(){return this[Ye].highWaterMark}clone(){return new a(yr(this,this.highWaterMark),{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size,highWaterMark:this.highWaterMark})}static redirect(e,t=302){if(!Jn(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');return new a(null,{headers:{location:new URL(e).toString()},status:t})}static error(){let e=new a(null,{status:0,statusText:""});return e[Ye].type="error",e}static json(e=void 0,t={}){let n=JSON.stringify(e);if(n===void 0)throw new TypeError("data is not JSON serializable");let o=new Ce(t&&t.headers);return o.has("content-type")||o.set("content-type","application/json"),new a(n,{...t,headers:o})}get[Symbol.toStringTag](){return"Response"}};Object.defineProperties(je.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var Lu=require("node:url"),Au=require("node:util");var yu=a=>{if(a.search)return a.search;let e=a.href.length-1,t=a.hash||(a.href[e]==="#"?"#":"");return a.href[e-t.length]==="?"?"?":""};var vu=require("node:net");function wu(a,e=!1){return a==null||(a=new URL(a),/^(about|blob|data):$/.test(a.protocol))?"no-referrer":(a.username="",a.password="",a.hash="",e&&(a.pathname="",a.search=""),a)}var Su=new Set(["","no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"]),Ru="strict-origin-when-cross-origin";function Pu(a){if(!Su.has(a))throw new TypeError(`Invalid referrerPolicy: ${a}`);return a}function wm(a){if(/^(http|ws)s:$/.test(a.protocol))return!0;let e=a.host.replace(/(^\[)|(]$)/g,""),t=(0,vu.isIP)(e);return t===4&&/^127\./.test(e)||t===6&&/^(((0+:){7})|(::(0+:){0,6}))0*1$/.test(e)?!0:a.host==="localhost"||a.host.endsWith(".localhost")?!1:a.protocol==="file:"}function wr(a){return/^about:(blank|srcdoc)$/.test(a)||a.protocol==="data:"||/^(blob|filesystem):$/.test(a.protocol)?!0:wm(a)}function Eu(a,{referrerURLCallback:e,referrerOriginCallback:t}={}){if(a.referrer==="no-referrer"||a.referrerPolicy==="")return null;let n=a.referrerPolicy;if(a.referrer==="about:client")return"no-referrer";let o=a.referrer,s=wu(o),u=wu(o,!0);s.toString().length>4096&&(s=u),e&&(s=e(s)),t&&(u=t(u));let f=new URL(a.url);switch(n){case"no-referrer":return"no-referrer";case"origin":return u;case"unsafe-url":return s;case"strict-origin":return wr(s)&&!wr(f)?"no-referrer":u.toString();case"strict-origin-when-cross-origin":return s.origin===f.origin?s:wr(s)&&!wr(f)?"no-referrer":u;case"same-origin":return s.origin===f.origin?s:"no-referrer";case"origin-when-cross-origin":return s.origin===f.origin?s:u;case"no-referrer-when-downgrade":return wr(s)&&!wr(f)?"no-referrer":s;default:throw new TypeError(`Invalid referrerPolicy: ${n}`)}}function xu(a){let e=(a.get("referrer-policy")||"").split(/[,\s]+/),t="";for(let n of e)n&&Su.has(n)&&(t=n);return t}var fe=Symbol("Request internals"),Kr=a=>typeof a=="object"&&typeof a[fe]=="object",vm=(0,Au.deprecate)(()=>{},".data is not a valid RequestInit property, use .body instead","https://github.com/node-fetch/node-fetch/issues/1000 (request)"),Zt=class a extends rt{constructor(e,t={}){let n;if(Kr(e)?n=new URL(e.url):(n=new URL(e),e={}),n.username!==""||n.password!=="")throw new TypeError(`${n} is an url with embedded credentials.`);let o=t.method||e.method||"GET";if(/^(delete|get|head|options|post|put)$/i.test(o)&&(o=o.toUpperCase()),!Kr(t)&&"data"in t&&vm(),(t.body!=null||Kr(e)&&e.body!==null)&&(o==="GET"||o==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body");let s=t.body?t.body:Kr(e)&&e.body!==null?yr(e):null;super(s,{size:t.size||e.size||0});let u=new Ce(t.headers||e.headers||{});if(s!==null&&!u.has("Content-Type")){let c=Yn(s,this);c&&u.set("Content-Type",c)}let f=Kr(e)?e.signal:null;if("signal"in t&&(f=t.signal),f!=null&&!lu(f))throw new TypeError("Expected signal to be an instanceof AbortSignal or EventTarget");let d=t.referrer==null?e.referrer:t.referrer;if(d==="")d="no-referrer";else if(d){let c=new URL(d);d=/^about:(\/\/)?client$/.test(c)?"client":c}else d=void 0;this[fe]={method:o,redirect:t.redirect||e.redirect||"follow",headers:u,parsedURL:n,signal:f,referrer:d},this.follow=t.follow===void 0?e.follow===void 0?20:e.follow:t.follow,this.compress=t.compress===void 0?e.compress===void 0?!0:e.compress:t.compress,this.counter=t.counter||e.counter||0,this.agent=t.agent||e.agent,this.highWaterMark=t.highWaterMark||e.highWaterMark||16384,this.insecureHTTPParser=t.insecureHTTPParser||e.insecureHTTPParser||!1,this.referrerPolicy=t.referrerPolicy||e.referrerPolicy||""}get method(){return this[fe].method}get url(){return(0,Lu.format)(this[fe].parsedURL)}get headers(){return this[fe].headers}get redirect(){return this[fe].redirect}get signal(){return this[fe].signal}get referrer(){if(this[fe].referrer==="no-referrer")return"";if(this[fe].referrer==="client")return"about:client";if(this[fe].referrer)return this[fe].referrer.toString()}get referrerPolicy(){return this[fe].referrerPolicy}set referrerPolicy(e){this[fe].referrerPolicy=Pu(e)}clone(){return new a(this)}get[Symbol.toStringTag](){return"Request"}};Object.defineProperties(Zt.prototype,{method:{enumerable:!0},url:{enumerable:!0},headers:{enumerable:!0},redirect:{enumerable:!0},clone:{enumerable:!0},signal:{enumerable:!0},referrer:{enumerable:!0},referrerPolicy:{enumerable:!0}});var ku=a=>{let{parsedURL:e}=a[fe],t=new Ce(a[fe].headers);t.has("Accept")||t.set("Accept","*/*");let n=null;if(a.body===null&&/^(post|put)$/i.test(a.method)&&(n="0"),a.body!==null){let f=gu(a);typeof f=="number"&&!Number.isNaN(f)&&(n=String(f))}n&&t.set("Content-Length",n),a.referrerPolicy===""&&(a.referrerPolicy=Ru),a.referrer&&a.referrer!=="no-referrer"?a[fe].referrer=Eu(a):a[fe].referrer="no-referrer",a[fe].referrer instanceof URL&&t.set("Referer",a.referrer),t.has("User-Agent")||t.set("User-Agent","node-fetch"),a.compress&&!t.has("Accept-Encoding")&&t.set("Accept-Encoding","gzip, deflate, br");let{agent:o}=a;typeof o=="function"&&(o=o(e));let s=yu(e),u={path:e.pathname+s,method:a.method,headers:t[Symbol.for("nodejs.util.inspect.custom")](),insecureHTTPParser:a.insecureHTTPParser,agent:o};return{parsedURL:e,options:u}};var Zn=class extends pt{constructor(e,t="aborted"){super(e,t)}};zn();Hi();var Sm=new Set(["data:","http:","https:"]);async function vr(a,e){return new Promise((t,n)=>{let o=new Zt(a,e),{parsedURL:s,options:u}=ku(o);if(!Sm.has(s.protocol))throw new TypeError(`node-fetch cannot load ${a}. URL scheme "${s.protocol.replace(/:$/,"")}" is not supported.`);if(s.protocol==="data:"){let w=Zl(o.url),R=new je(w,{headers:{"Content-Type":w.typeFull}});t(R);return}let f=(s.protocol==="https:"?Cu.default:Tu.default).request,{signal:d}=o,c=null,p=()=>{let w=new Zn("The operation was aborted.");n(w),o.body&&o.body instanceof Ie.default.Readable&&o.body.destroy(w),!(!c||!c.body)&&c.body.emit("error",w)};if(d&&d.aborted){p();return}let m=()=>{p(),g()},y=f(s.toString(),u);d&&d.addEventListener("abort",m);let g=()=>{y.abort(),d&&d.removeEventListener("abort",m)};y.on("error",w=>{n(new Re(`request to ${o.url} failed, reason: ${w.message}`,"system",w)),g()}),Rm(y,w=>{c&&c.body&&c.body.destroy(w)}),process.version<"v14"&&y.on("socket",w=>{let R;w.prependListener("end",()=>{R=w._eventsCount}),w.prependListener("close",k=>{if(c&&R<w._eventsCount&&!k){let C=new Error("Premature close");C.code="ERR_STREAM_PREMATURE_CLOSE",c.body.emit("error",C)}})}),y.on("response",w=>{y.setTimeout(0);let R=bu(w.rawHeaders);if(Jn(w.statusCode)){let G=R.get("Location"),X=null;try{X=G===null?null:new URL(G,o.url)}catch{if(o.redirect!=="manual"){n(new Re(`uri requested responds with an invalid redirect URL: ${G}`,"invalid-redirect")),g();return}}switch(o.redirect){case"error":n(new Re(`uri requested responds with a redirect, redirect mode is set to error: ${o.url}`,"no-redirect")),g();return;case"manual":break;case"follow":{if(X===null)break;if(o.counter>=o.follow){n(new Re(`maximum redirect reached at: ${o.url}`,"max-redirect")),g();return}let J={headers:new Ce(o.headers),follow:o.follow,counter:o.counter+1,agent:o.agent,compress:o.compress,method:o.method,body:yr(o),signal:o.signal,size:o.size,referrer:o.referrer,referrerPolicy:o.referrerPolicy};if(!uu(o.url,X)||!cu(o.url,X))for(let He of["authorization","www-authenticate","cookie","cookie2"])J.headers.delete(He);if(w.statusCode!==303&&o.body&&e.body instanceof Ie.default.Readable){n(new Re("Cannot follow redirect with body being a readable stream","unsupported-redirect")),g();return}(w.statusCode===303||(w.statusCode===301||w.statusCode===302)&&o.method==="POST")&&(J.method="GET",J.body=void 0,J.headers.delete("content-length"));let ze=xu(R);ze&&(J.referrerPolicy=ze),t(vr(new Zt(X,J))),g();return}default:return n(new TypeError(`Redirect option '${o.redirect}' is not a valid value of RequestRedirect`))}}d&&w.once("end",()=>{d.removeEventListener("abort",m)});let k=(0,Ie.pipeline)(w,new Ie.PassThrough,G=>{G&&n(G)});process.version<"v12.10"&&w.on("aborted",m);let C={url:o.url,status:w.statusCode,statusText:w.statusMessage,headers:R,size:o.size,counter:o.counter,highWaterMark:o.highWaterMark},E=R.get("Content-Encoding");if(!o.compress||o.method==="HEAD"||E===null||w.statusCode===204||w.statusCode===304){c=new je(k,C),t(c);return}let re={flush:er.default.Z_SYNC_FLUSH,finishFlush:er.default.Z_SYNC_FLUSH};if(E==="gzip"||E==="x-gzip"){k=(0,Ie.pipeline)(k,er.default.createGunzip(re),G=>{G&&n(G)}),c=new je(k,C),t(c);return}if(E==="deflate"||E==="x-deflate"){let G=(0,Ie.pipeline)(w,new Ie.PassThrough,X=>{X&&n(X)});G.once("data",X=>{(X[0]&15)===8?k=(0,Ie.pipeline)(k,er.default.createInflate(),J=>{J&&n(J)}):k=(0,Ie.pipeline)(k,er.default.createInflateRaw(),J=>{J&&n(J)}),c=new je(k,C),t(c)}),G.once("end",()=>{c||(c=new je(k,C),t(c))});return}if(E==="br"){k=(0,Ie.pipeline)(k,er.default.createBrotliDecompress(),G=>{G&&n(G)}),c=new je(k,C),t(c);return}c=new je(k,C),t(c)}),_u(y,o).catch(n)})}function Rm(a,e){let t=Gr.Buffer.from(`0\r
3293
- \r
3294
- `),n=!1,o=!1,s;a.on("response",u=>{let{headers:f}=u;n=f["transfer-encoding"]==="chunked"&&!f["content-length"]}),a.on("socket",u=>{let f=()=>{if(n&&!o){let c=new Error("Premature close");c.code="ERR_STREAM_PREMATURE_CLOSE",e(c)}},d=c=>{o=Gr.Buffer.compare(c.slice(-5),t)===0,!o&&s&&(o=Gr.Buffer.compare(s.slice(-3),t.slice(0,3))===0&&Gr.Buffer.compare(c.slice(-2),t.slice(3))===0),s=c};u.prependListener("close",f),u.on("data",d),a.on("close",()=>{u.removeListener("close",f),u.removeListener("data",d)})})}var xm={debugadapter:{version:Xt,zip:async()=>(await Promise.resolve().then(()=>le(Iu()))).default},"debugadapter-tests":{version:Xt,zip:async()=>(await Promise.resolve().then(()=>le(Du()))).default}};async function $u(a,e){let t=await vr(`https://mods.factorio.com/api/mods/${a}${e?"/full":""}`);if(!t.ok)throw new Error(t.statusText);return await t.json()}var Sr=class{constructor(e,t){this.modsPath=e;this.playerdataPath=t;this.Loaded=this.reload()}modList={mods:[]};Loaded;async reload(){let e=nt.resolve(this.modsPath,"./mod-list.json");try{this.modList=JSON.parse(await Ee.readFile(e,"utf8"))}catch{this.modList={mods:[]}}}async write(){let e=nt.resolve(this.modsPath,"./mod-list.json");return Ee.writeFile(e,JSON.stringify(this.modList,null,2),"utf8")}async getDownloadCredentials(e){let t=this.playerdataPath??nt.resolve(this.modsPath,"../player-data.json"),n=t?await Ee.readFile(t,"utf8").then(f=>JSON.parse(f)).catch(()=>{}):void 0;if(n?.["service-token"])return{username:n["service-username"],token:n["service-token"]};let o=await e(n?.["service-username"]),s=await vr("https://auth.factorio.com/api-login",{method:"POST",body:new URLSearchParams({username:o.username,password:o.password,api_version:"4",require_game_ownership:"true"})});if(!s.ok)throw new Error(s.statusText);let u=await s.json();return n&&(n["service-username"]=u.username,n["service-token"]=u.token,await Ee.writeFile(t,JSON.stringify(n,void 0,2))),u}async findInstallSource(e,t){if(t.origin!=="portal"){let s=xm[e];if(s)return s;if(t.origin==="bundle")throw new Error(`No bundled package for ${e}`)}let n=await $u(e),o=n.releases[n.releases.length-1];return{version:o.version,zip:async()=>{let s=await this.getDownloadCredentials(t.credentialPrompt),u=await vr(`https://mods.factorio.com/${o.download_url}?username=${s.username}&token=${s.token}`);if(!u.ok)throw new Error(u.statusText);return u.body}}}async installMod(e,t){let n=await this.findInstallSource(e,t),o=n.version,s=this.modList.mods.find(p=>p.name===e),u=s?.enabled?s.version??!0:s?.enabled;async function f(p){let m=nt.resolve(p,"info.json");try{let y=await Ee.readFile(m,"utf8");if(y){let g=JSON.parse(y);if(g.name===e&&g.version===o)return!0}}catch{}return!1}if(!t.force){if(await f(nt.resolve(this.modsPath,e)))return this.set(e,o),{using:o,from:"folder",previous:u};if(await f(nt.resolve(this.modsPath,`${e}_${o}`)))return this.set(e,o),{using:o,from:"versioned_folder",previous:u};try{return await Ee.access(nt.resolve(this.modsPath,`${e}_${o}.zip`)),this.set(e,o),{using:o,from:"existing",previous:u}}catch{}}let d=Ee.writeFile(nt.resolve(this.modsPath,`${e}_${o}.zip`),await n.zip()),c;if(!t.keepOld){let p=(await Ee.readdir(this.modsPath,"utf8")).filter(m=>m.startsWith(e)&&m.endsWith(".zip")&&m.substring(e.length,m.length-4).match(/^_[\d\.]+$/)&&m!==`${e}_${o}.zip`);p.length===1&&(await Ee.unlink(nt.resolve(this.modsPath,p[0])),c=p[0].substring(e.length+1,p[0].length-4))}return this.set(e,o),await d,{using:o,from:"installed",previous:u,replaced:c}}set(e,t){let n=!!t,o=typeof t=="string"?t:void 0,s=this.modList.mods.find(u=>u.name===e);s?(s.enabled=n,s.version=o):this.modList.mods.push({name:e,enabled:n,version:o})}disableAll(){this.modList.mods.forEach(e=>e.enabled=!1)}};var Ji=(d=>(d[d.none=0]="none",d[d.bool=1]="bool",d[d.number=2]="number",d[d.string=3]="string",d[d.list=4]="list",d[d.dictionary=5]="dictionary",d[d.signedinteger=6]="signedinteger",d[d.unsignedinteger=7]="unsignedinteger",d))(Ji||{});function Qi(a){if(a.readUInt8()!==0)return"";{let t=a.readPackedUInt_8_32();return a.readString(t)}}var Rr=class a{constructor(){}static load(e){let t=e.readUInt8();switch(e.readUInt8(),t){case 0:return{type:t};case 1:return{type:t,value:e.readUInt8()!==0};case 2:return{type:t,value:e.readDoubleLE()};case 3:return{type:t,value:Qi(e)};case 4:{let n=e.readUInt32LE(),o=[];for(let s=0;s<n;s++){Qi(e);let u=a.load(e);o.push(u)}return{type:t,value:o}}case 5:{let n=e.readUInt32LE(),o={};for(let s=0;s<n;s++){let u=Qi(e);if(!u)throw new Error("Missing key in PropertyTree Dictionary");let f=a.load(e);o[u]=f}return{type:t,value:o}}case 6:return{type:t,value:e.readBigInt64LE()};case 7:return{type:t,value:e.readBigUInt64LE()};default:throw new Error(`Invalid datatype in PropertyTree ${t}`)}}static saveString(e){if(!e)return Buffer.from([1]);let t=Buffer.from(e,"utf8"),n=Buffer.alloc(1);return t.length<255?n.writeUInt8(t.length):(n=Buffer.alloc(5),n.writeUInt8(255),n.writeUInt32LE(t.length,1)),Buffer.concat([Buffer.from([0]),n,t])}static typeTag(e){return Buffer.from([e,0])}static save(e){switch(e.type){case 3:return Buffer.concat([a.typeTag(3),a.saveString(e.value)]);case 1:return Buffer.concat([a.typeTag(1),Buffer.from([e.value?1:0])]);case 2:{let t=Buffer.alloc(8);return t.writeDoubleLE(e.value),Buffer.concat([a.typeTag(2),t])}case 6:{let t=Buffer.alloc(8);return t.writeBigInt64LE(e.value),Buffer.concat([a.typeTag(6),t])}case 7:{let t=Buffer.alloc(8);return t.writeBigUInt64LE(e.value),Buffer.concat([a.typeTag(7),t])}case 0:return a.typeTag(0);case 4:{let t=Buffer.alloc(4);return t.writeUInt32LE(e.value.length),Buffer.concat([a.typeTag(4),t,Buffer.concat(e.value.map(n=>Buffer.concat([a.saveString(""),a.save(n)])))])}case 5:{let t=[];for(let o in e.value)if(Object.prototype.hasOwnProperty.call(e.value,o)){let s=e.value[o];t.push(Buffer.concat([a.saveString(o),a.save(s)]))}let n=Buffer.alloc(4);return n.writeUInt32LE(t.length),Buffer.concat([a.typeTag(5),n,Buffer.concat(t)])}default:throw new Error(`Invalid datatype in PropertyTree ${e.type}`)}}};var Dt=class a{constructor(e,t,n,o,s){this.main=e;this.major=t;this.minor=n;this.patch=o;this.branch=s}static load(e){let t=e.readUInt16LE(0),n=e.readUInt16LE(2),o=e.readUInt16LE(4),s=e.readUInt16LE(6),u=e.readUInt8(8);return new a(t,n,o,s,u)}save(){let e=Buffer.alloc(9);return e.writeUInt16LE(this.main,0),e.writeUInt16LE(this.major,2),e.writeUInt16LE(this.minor,4),e.writeUInt16LE(this.patch,6),e.writeUInt8(this.branch,8),e}format(){return`${this.main}.${this.major}.${this.minor}-${this.patch}`}isBeyond(e,t,n,o){return this.main<e?!1:this.main>e||t===void 0?!0:this.major<t?!1:this.major>t||n===void 0?!0:this.minor<n?!1:this.minor>n||o===void 0?!0:this.patch<o?!1:(this.patch>o,!0)}};var eo=le(require("assert")),Fu=["startup","runtime-global","runtime-per-user"],Xr=class{version;_settings;constructor(e){this.version=Dt.load(e.read(9));let t=Rr.load(e);(0,eo.default)(t.type===5);let n={startup:{},"runtime-global":{},"runtime-per-user":{}};for(let o of Fu){let s=t.value[o];(0,eo.default)(s.type===5);let u=n[o];for(let f in s.value){let d=s.value[f];(0,eo.default)(d.type===5);let c=d.value.value;switch(c.type){case 3:u[f]={type:"string",value:c.value};break;case 2:u[f]={type:"number",value:c.value};break;case 6:u[f]={type:"int",value:c.value};break;case 1:u[f]={type:"bool",value:c.value};break;case 5:let p=c.value;if("r"in p&&p.r.type===2&&"g"in p&&p.g.type===2&&"b"in p&&p.b.type===2&&"a"in p&&p.a.type===2)u[f]={type:"color",value:{r:p.r.value,g:p.g.value,b:p.b.value,a:p.a.value}};else throw new Error(`Dictionary value in ModSettings Tree does not match any known structure at ${o} ${f}`);break;default:throw new Error(`Unexpected type in ModSettings Tree: ${c.type}`)}}}this._settings=n}get settings(){return this._settings}save(){let e={type:5,value:{}};for(let t of Fu){let n=this._settings[t],o={type:5,value:{}};e.value[t]=o;for(let s in n){let u=n[s];switch(u.type){case"string":o.value[s]={type:5,value:{value:{type:3,value:u.value}}};break;case"bool":o.value[s]={type:5,value:{value:{type:1,value:u.value}}};break;case"int":o.value[s]={type:5,value:{value:{type:6,value:u.value}}};break;case"number":o.value[s]={type:5,value:{value:{type:2,value:u.value}}};break;case"color":o.value[s]={type:5,value:{value:{type:5,value:{r:{type:2,value:u.value.r},g:{type:2,value:u.value.g},b:{type:2,value:u.value.b},a:{type:2,value:u.value.a}}}}};break;default:break}}}return Buffer.concat([this.version.save(),Rr.save(e)])}set(e,t,n){n===void 0?delete this._settings[e][t]:this._settings[e][t]=n}get(e,t){return this._settings[e][t]}*list(){for(let e in this._settings)for(let t in this._settings[e]){let n=this._settings[e][t];yield{scope:e,setting:t,value:n.value}}}};var de=1e5,$t={adjust:{table:{BlueprintEntity:{parameters:[{name:"orientation",order:de++,description:"",optional:!0,type:"number"},{name:"recipe",order:de++,description:"",optional:!0,type:"string"},{name:"inventory",order:de++,description:"",optional:!0,type:{complex_type:"table",parameters:[{name:"bar",order:de++,description:"",optional:!0,type:"number"},{name:"filters",order:de++,description:"",optional:!0,type:{complex_type:"array",value:"InventoryFilter"}}]}},{name:"bar",order:de++,description:"",optional:!0,type:"number"},{name:"filters",order:de++,description:"",optional:!0,type:{complex_type:"array",value:"InventoryFilter"}},{name:"type",order:de++,description:"",optional:!0,type:{complex_type:"union",options:[{complex_type:"literal",value:"input"},{complex_type:"literal",value:"output"}]}},{name:"input_priority",order:de++,description:"",optional:!0,type:{complex_type:"union",options:[{complex_type:"literal",value:"left"},{complex_type:"literal",value:"right"}]}},{name:"output_priority",order:de++,description:"",optional:!0,type:{complex_type:"union",options:[{complex_type:"literal",value:"left"},{complex_type:"literal",value:"right"}]}},{name:"filter",order:de++,description:"",optional:!0,type:"string"},{name:"filter_mode",order:de++,description:"",optional:!0,type:{complex_type:"union",options:[{complex_type:"literal",value:"whitelist"},{complex_type:"literal",value:"blacklist"}]}},{name:"override_stack_size",order:de++,description:"",optional:!0,type:"number"},{name:"request_filters",order:de++,description:"",optional:!0,type:{complex_type:"array",value:"LogisticFilter"}},{name:"request_from_buffers",order:de++,description:"",optional:!0,type:"boolean"},{name:"parameters",order:de++,description:"",optional:!0,type:"ProgrammableSpeakerParameters"},{name:"alert_parameters",order:de++,description:"",optional:!0,type:"ProgrammableSpeakerAlertParameters"},{name:"color",order:de++,description:"",optional:!0,type:"Color"},{name:"station",order:de++,description:"",optional:!0,type:"string"}]}},class:{LuaLazyLoadedValue:{generic_params:["T"],generic_parent:"{get:fun():T}"},LuaCustomTable:{generic_params:["K","V"],generic_parent:"{[K]:V}",no_index:!0},LuaGuiElement:{index_key:{complex_type:"union",options:["string","uint"]},split_funcs:!0}},define:{"defines.prototypes":{owntype:!0}}}};function Lm(a){return["and","break","do","else","elseif","end","false","for","function","goto","if","in","local","nil","not","or","repeat","return","then","true","until","while"].includes(a)?`${a}_`:a}function Er(a){return Lm(a.replace(/[^a-zA-Z0-9]/g,"_").replace(/^([0-9])/,"_$1"))}function Zi(a){return!!a.match(/^[a-zA-Z_][a-zA-Z_0-9]*$/)}async function Ot(a,e){if(!e)return;let t=await e;t&&a.write(`---${t.replace(/\n/g,`
3295
- ---`)}
3296
- `)}var De=class{constructor(e,t,n="_"){this.name=e;this.app_version=t;this.meta=n}members;add(e){this.members||(this.members=[]),this.members.push(e)}async write(e){if(typeof this.meta=="string"&&e.write(`---@meta ${this.meta}
3297
- `),e.write(`
3298
- `),e.write(`--$Factorio ${this.app_version}
3299
- `),e.write(`--$Generator ${Xt}
3300
- `),e.write(`--$Section ${this.name}
3301
- `),e.write(`-- This file is automatically generated. Edits will be overwritten without warning.
3302
- `),e.write(`
3303
- `),this.members)for(let t of this.members)await t.write(e)}},N=class{constructor(e,t){this.name=e;this.generic_args=t}format(){return this.generic_args?`${this.name}<${this.generic_args.map(e=>e.format()).join(", ")}>`:this.name}},ot=class{constructor(e){this.value=e}format(){switch(typeof this.value){case"string":return`"${this.value}"`;case"number":case"boolean":return this.value.toString();default:throw new Error("Invalid value")}}},tr=class{constructor(e,t){this.key=e;this.value=t}format(){return`{[${this.key.format()}]:${this.value.format()}}`}},Qe=class{constructor(e){this.member=e}format(){return`(${this.member.format()})[]`}},Pr=class{constructor(e){this.members=e}format(){return`{${this.members.map((e,t)=>`[${t+1}]:${e.format()}`).join(", ")}}`}},Ft=class{constructor(e){this.members=e}format(){return this.members.map(e=>`(${e.format()})`).join("|")}},mt=class{constructor(e,t,n){this.name=e;this.type=t;this.description=n}async write(e){await Ot(e,this.description),e.write(`---@alias ${this.name} ${this.type.format()}
3304
-
3305
- `)}},to=class{constructor(e,t,n,o){this.name=e;this.type_name=t;this.fields=n;this.description=o}async write(e){await Ot(e,this.description),e.write(`---@enum ${this.type_name}
3306
- `),e.write(`${this.name}={
3307
- `);for(let t of this.fields)await t.write(e);e.write(`}
3308
- `)}},ro=class{constructor(e,t,n,o){this.name=e;this.typename=t;this.description=n;this.value=o}async write(e){await Ot(e,this.description);let t=Zi(this.name)?this.name:`['${this.name}']`;e.write(`${t}=`),this.value?e.write(`${this.value.format()},
3309
- `):e.write(`#{} --[[@as ${this.typename.format()} ]],
3310
- `)}},pe=class{constructor(e){this.name=e}description;parents;generic_args;global_name;exact;operators;call_op;fields;functions;add(e){e instanceof Yr?(this.operators||(this.operators=[]),this.operators.push(e)):e instanceof $e?(this.call_op||(this.call_op=[]),this.call_op.push(e)):e instanceof ce?(this.fields||(this.fields=[]),this.fields.push(e)):e instanceof xe&&(this.functions||(this.functions=[]),this.functions.push(e))}async write(e){if(e.write(`do
3311
- `),await Ot(e,this.description),e.write("---@class "),this.exact&&e.write("(exact) "),e.write(`${this.name}`),this.generic_args&&this.generic_args.length>0&&e.write(`<${this.generic_args.join(",")}>`),this.parents&&this.parents.length>0&&e.write(`:${this.parents.map(t=>t.format()).join(", ")}`),e.write(`
3312
- `),this.fields)for(let t of this.fields)await t.write(e);if(this.call_op)for(let t of this.call_op)await t.write(e);if(this.operators)for(let t of this.operators)await t.write(e);if(e.write(`${this.global_name??"local "+Er(this.name)}={
3313
- `),this.functions)for(let t of this.functions)await t.write(e);e.write(`}
3314
- end
3315
-
3316
- `)}format(){if(this.description||this.parents||this.generic_args||this.global_name||this.functions||this.call_op)throw new Error("Can't inline table with unsupported features");return this.fields?`{${this.fields.map((e,t)=>typeof e.name=="string"?`${e.name}:${e.type.format()}`:`[${e.name.format()}]:${e.type.format()}`).join(", ")}}`:"{}"}},Yr=class{constructor(e,t,n){this.name=e;this.type=t;this.input_type=n}description;async write(e){await Ot(e,this.description),e.write(`---@operator ${this.name}`),this.input_type&&e.write(`(${this.input_type.format()})`),e.write(`:${this.type.format()}
3317
- `)}},ce=class{constructor(e,t,n,o){this.name=e;this.type=t;this.description=n;this.optional=o}async write(e){await Ot(e,this.description),e.write("---@field "),typeof this.name=="string"?e.write(this.name):e.write(`[${this.name.format()}]`),this.optional&&e.write("?"),e.write(` ${this.type.format()}
3318
- `)}},$e=class{constructor(e,t,n){this.description=e;this.params=t;this.returns=n}async write(e){await Ot(e,this.description);let t="";this.params&&(t=this.params.map(o=>`${o.name}${o.optional?"?":""}:${o.type.format()}`).join(", "));let n="";this.returns&&(n=`:${this.returns.map(o=>o.type.format()).join(", ")}`),e.write(`---@overload fun(${t})${n}
3319
- `)}},xe=class{constructor(e,t,n,o){this.name=e;this.params=t;this.returns=n;this.description=o}overloads;nodiscard;add(e){this.overloads||(this.overloads=[]),this.overloads.push(e)}async write(e){if(await Ot(e,this.description),this.params)for(let t of this.params)await t.write(e);if(this.returns)for(let t of this.returns)await t.write(e);if(this.nodiscard&&e.write(`---@nodiscard
3320
- `),this.overloads)for(let t of this.overloads)await t.write(e);e.write(`${this.name} = function(`),this.params&&e.write(this.params.map(t=>t.name).join(", ")),e.write(`) end;
3321
- `)}format(){if((!this.params||this.params.length===0)&&!this.returns)return"function";let e="";this.params&&(e=this.params.map(n=>`${n.name}${n.optional?"?":""}:${n.type.format()}`).join(", "));let t="";return this.returns&&(t=`:${this.returns.map(n=>n.type.format()).join(", ")}`),`fun(${e})${t}`}},ee=class{constructor(e,t,n,o){this.name=e;this.type=t;this.description=n;this.optional=o}async write(e){e.write(`---@param ${this.name}${this.optional?"?":""} ${this.type.format()} ${await this.description??""}
3322
- `)}},no=class{constructor(e,t,n,o){this.type=e;this.name=t;this.description=n;this.optional=o}async write(e){e.write(`---@return ${this.type.format()}${this.optional?"?":""} ${this.name??""}`);let t=await this.description;t&&e.write(` #${t}`),e.write(`
3323
- `)}};function ea(a,e){return a.order-e.order}var ta=class{docs;classes;events;concepts;globals;defines;constructor(e,t){if(this.docs=JSON.parse(e),this.docs.application!=="factorio")throw`Unknown application: ${this.docs.application}`;if(this.docs.api_version!==6)throw`Unsupported Runtime Docs JSON Version ${this.docs.api_version}`;if(this.docs.stage!=="runtime")throw`Wrong stage: ${this.docs.stage}`;this.classes=new Map(this.docs.classes.map(o=>[o.name,o])),this.events=new Map(this.docs.events.map(o=>[o.name,o])),this.concepts=new Map(this.docs.concepts.map(o=>[o.name,o])),this.globals=new Map(this.docs.global_objects.map(o=>[o.type,o]));let n=(o,s)=>{let u=`${s}${o.name}`;this.defines.add(u);let f=`${u}.`;o.values&&o.values.forEach(d=>{this.defines.add(`${f}${d.name}`)}),o.subkeys&&o.subkeys.forEach(d=>n(d,f))};this.defines=new Set,this.defines.add("defines"),this.docs.defines.forEach(o=>n(o,"defines."))}isVersion(e){return this.api_version===e}get api_version(){return this.docs.api_version}get stage(){return this.docs.stage}get application(){return this.docs.application}get application_version(){return this.docs.application_version}resolve_link(e,t){if(t=t?`#${t}`:"",["classes","events","concepts","defines"].includes(e))return`/${e}.html${t}`;if(e==="builtin_types")return`/builtin-types.html${t}`;if(["libraries","storage","migrations","data-lifecycle","prototype-tree","noise-expressions","instrument"].includes(e))return`/auxiliary/${e}.html${t}`;if(this.concepts.has(e))return`/concepts/${e}.html${t}`;if(this.classes.has(e))return`/classes/${e}.html${t}`;if(this.events.has(e))return`/events.html#${e}`;if(this.defines.has(e))return`/defines.html#${e}`;let n=e.match(/defines\.prototypes\[\'(.+)\'\]/);if(n&&this.defines.has(`defines.prototypes.${n[1]}`))return`/defines.html#defines.prototypes.${n[1]}`;console.warn(`Invalid Link: runtime:${e}${t}`)}with_base_classes(e,t){let n=[];return n.push(...t(e)),e.parent&&n.push(...t(this.classes.get(e.parent))),n}generate_debuginfo(){let e={alwaysValid:{},expandKeys:{}};return this.classes.forEach(t=>{if(["LuaCustomTable"].includes(t.name))return;let n={},o=!1;e.expandKeys[t.name]=n;for(let s of this.with_base_classes(t,u=>u.attributes))if(s.name==="valid")o=!0;else if(s.name!=="object_name"){if(s.read_type){n[s.name]={},s.write_type||(n[s.name].readOnly=!0);let u=s.read_type;typeof u=="string"&&u.startsWith("defines.")&&(n[s.name].enumFrom=u)}}o||(e.alwaysValid[t.name]=!0);for(let s of t.operators)switch(s.name){case"index":n["[]"]={readOnly:!s.write_type,thisAsTable:!0,iterMode:"count"};break;case"length":default:break}for(let s of this.with_base_classes(t,u=>u.methods))["help","generate_event_name"].includes(s.name)||s.parameters.length>0||s.return_values.length!==0&&(s.raises||(n[s.name]={readOnly:!0,fetchable:!0}))}),e}async generate_LuaLS_docs(e){return Promise.all([...await this.generate_LuaLS_classes(e),this.generate_LuaLS_concepts(e),this.generate_LuaLS_defines(e),this.generate_LuaLS_events(e),this.generate_LuaLS_LuaObjectNames(),this.generate_LuaLS_global_functions(e)])}async generate_LuaLS_classes(e){let t=[];for(let n of this.docs.classes)t.push(await this.generate_LuaLS_class(n,e));return t}async generate_LuaLS_class(e,t){let n=new De(`runtime-api/${e.name}`,this.docs.application_version),o=new pe(e.name),s=this.globals.get(e.name);s&&(o.global_name=s.name),o.description=t(this.collect_description(e,{scope:"runtime",member:e.name})),o.parents=e.parent?[new N(e.parent)]:[new N("LuaObject")],o.generic_args=$t.adjust.class[e.name]?.generic_params,$t.adjust.class[e.name]?.generic_parent&&o.parents.push(await this.LuaLS_type($t.adjust.class[e.name]?.generic_parent));for(let f of e.attributes)o.add(new ce(f.name,await this.LuaLS_type(f.write_type??f.read_type,{file:n,table_class_name:`${e.name}.${f.name}`,format_description:t}),t(this.collect_description(f,{scope:"runtime",member:e.name,part:f.name})),f.optional));for(let f of e.operators)switch(f.name){case"call":{o.add(new $e(t(this.collect_description(f,{scope:"runtime",member:e.name,part:"call_operator"})),await this.LuaLS_params(f.parameters,t),await this.LuaLS_returns(f.return_values,t)));break}case"length":{let d=new Yr("len",await this.LuaLS_type(f.read_type));d.description=t(this.collect_description(f,{scope:"runtime",member:e.name,part:"length_operator"})),o.add(d);break}case"index":{if($t.adjust.class[e.name]?.no_index)break;o.add(new ce(await this.LuaLS_type($t.adjust.class[e.name]?.index_key??"uint"),await this.LuaLS_type(f.write_type??f.read_type),t(this.collect_description(f,{scope:"runtime",member:e.name,part:"index_operator"}))));break}default:throw`Unkown operator: ${f.name}`}let u=o;$t.adjust.class[e.name]?.split_funcs&&(u=new pe(`${e.name}_funcs`),n.add(u),o.parents.push(new N(`${e.name}_funcs`)));for(let f of e.methods)u.add(await this.LuaLS_function(f,n,t,e.name));return n.add(o),n}async generate_LuaLS_concepts(e){let t=new De("runtime-api/concepts",this.docs.application_version);for(let n of this.docs.concepts){let o=e(this.collect_description(n,{scope:"runtime",member:n.name}));if(typeof n.type=="string")t.add(new mt(n.name,await this.LuaLS_type(n.type),o));else switch(n.type.complex_type){case"dictionary":let s=n.type.key,u=n.type.value;if(typeof u=="object"&&u.complex_type==="literal"&&u.value===!0&&typeof s=="object"&&s.complex_type==="union"){let f=new pe(n.name);f.exact=!0,f.description=o;for(let d of s.options)f.add(new ce(await this.LuaLS_type(d),await this.LuaLS_type(u)));t.add(f);break}case"union":case"array":case"table":case"tuple":case"LuaStruct":{let f=await this.LuaLS_type(n.type,{file:t,table_class_name:n.name,format_description:e});f instanceof N&&f.name===n.name||t.add(new mt(n.name,f,o));break}case"builtin":break;default:break}}return t}async generate_LuaLS_defines(e){let t=new De("runtime-api/defines",this.docs.application_version),n=new pe("defines");n.global_name="defines",n.description=e(void 0,{scope:"runtime",member:"defines"}),t.add(n);let o=(u,f)=>Zi(f)?`${u}.${f}`:`${u}['${f}']`,s=async(u,f,d,c)=>{let p=o(f,u.name),m=`${d}.${Er(u.name)}`,y=e(this.collect_description(u,{scope:"runtime",member:p}));if(p==="defines.prototypes"&&(c=new ot(0)),u.values)t.add(new to(p,m,u.values.map(g=>new ro(g.name,new N(`${m}.${Er(g.name)}`),g.description,c)),y));else{let g=new pe(p);if(g.global_name=p,g.description=y,$t.adjust.define[p]?.owntype&&(g.parents=[new N(`__${p}`)]),t.add(g),u.subkeys)for(let R of u.subkeys)await s(R,p,m,c)}};for(let u of this.docs.defines)await s(u,"defines","defines");return t}async generate_LuaLS_events(e){let t=new De("runtime-api/events",this.docs.application_version),n=new pe("event_handler.events");n.exact=!0;for(let[o,s]of this.events){let u=new pe(`EventData.${s.name}`);u.exact=!0,u.parents=[new N("EventData")],u.description=e(this.collect_description(s,{scope:"runtime",member:s.name}));for(let d of s.data)u.add(new ce(d.name,await this.LuaLS_type(d.type),e(this.collect_description(d,{scope:"runtime",member:s.name,part:d.name})),d.optional));if(t.add(u),s.name==="CustomInputEvent")continue;let f=new xe("handler",[new ee("event",new N(`EventData.${s.name}`))]);n.add(new ce(new N(`defines.events.${s.name}`),f))}return n.add(new ce(new N("defines.events"),new xe("handler",[new ee("event",new N("EventData"))]))),t.add(n),t}async generate_LuaLS_LuaObjectNames(){let e=new De("runtime-api/LuaObjectNames",this.docs.application_version);return e.add(new mt("LuaObject.object_name",new Ft(this.docs.classes.filter(t=>!t.abstract).map(t=>new ot(t.name))))),e}async generate_LuaLS_global_functions(e){let t=new De("runtime-api/global_functions",this.docs.application_version);for(let n of this.docs.global_functions)t.add(await this.LuaLS_function(n,t,e));return t}async LuaLS_params(e,t){return Promise.all(e.sort(ea).map(async n=>new ee(Er(n.name),await this.LuaLS_type(n.type),t(this.collect_description(n)),n.optional)))}async LuaLS_returns(e,t){return Promise.all(e.sort(ea).map(async n=>new no(await this.LuaLS_type(n.type),void 0,t(this.collect_description(n)),n.optional)))}async LuaLS_function(e,t,n,o){let s=e.format.takes_table?[new ee("param",await this.LuaLS_table_type(e,t,`${o??""}${o?".":""}${e.name}_param`,n),void 0,e.format.table_optional)]:await this.LuaLS_params(e.parameters,n);e.variadic_parameter&&s.push(new ee("...",await this.LuaLS_type(e.variadic_parameter.type),n(e.variadic_parameter.description)));let u=new xe(e.name,s,await this.LuaLS_returns(e.return_values,n),n(this.collect_description(e),{scope:"runtime",member:o??"libraries",part:o?e.name:"new-functions"}));if(o==="LuaBootstrap"&&e.name==="on_event"){s[1].type.members[0].params[0].name="event",u.add(new $e(void 0,[new ee("event",new N("string")),new ee("handler",new xe("handler",[new ee("event",new N("EventData"))]))])),u.add(new $e(void 0,[new ee("event",new N("LuaCustomEventPrototype")),new ee("handler",new xe("handler",[new ee("event",new N("EventData"))]))])),u.add(new $e(void 0,[new ee("event",new N("LuaCustomInputPrototype")),new ee("handler",new xe("handler",[new ee("event",new N("EventData.CustomInputEvent"))]))]));for(let[f,d]of this.events){let c=new N(`defines.events.${d.name}`),p=new N(`EventData.${d.name}`);if(d.name==="CustomInputEvent")continue;let m=[new ee("event",c),new ee("handler",new xe("handler",[new ee("event",p)]))];d.filter&&m.push(new ee("filters",new Qe(new N(d.filter)),void 0,!0)),u.add(new $e(void 0,m))}}return u}async LuaLS_table_type(e,t,n,o,s){let u=new pe(n);u.exact=!0,u.parents=s,t.add(u);let f=1;for(let d of e.parameters.sort(ea)){let c="complex_type"in e&&e.complex_type==="tuple";u.add(new ce(c?new ot(f++):d.name,await this.LuaLS_type(d.type),o(this.collect_description(d)),d.optional))}if(e.variant_parameter_groups){let d=[],c=new mt(u.name,new Ft(d));t.add(c),u.name+=".base";for(let p of e.variant_parameter_groups){let m=await this.LuaLS_table_type(p,t,`${n}.${Er(p.name)}`,o,[new N(u.name)]);d.push(m)}return d.push(new N(u.name)),new N(c.name)}return new N(u.name)}async LuaLS_type(e,t){if(!e)return new N("any");if(typeof e=="string")return new N(e);let n=o=>t&&{file:t.file,table_class_name:`${t.table_class_name}.${o}`,format_description:t.format_description};switch(e.complex_type){case"array":return new Qe(await this.LuaLS_type(e.value,n("member")));case"dictionary":return new tr(await this.LuaLS_type(e.key,n("key")),await this.LuaLS_type(e.value,n("value")));case"union":return new Ft(await Promise.all(e.options.map((o,s)=>this.LuaLS_type(o,n(`${s}`)))));case"LuaLazyLoadedValue":return new N("LuaLazyLoadedValue",[await this.LuaLS_type(e.value,n("value"))]);case"LuaCustomTable":return new N("LuaCustomTable",await Promise.all([this.LuaLS_type(e.key,n("key")),this.LuaLS_type(e.value,n("value"))]));case"literal":return new ot(e.value);case"function":return new xe(void 0,await Promise.all(e.parameters.map(async(o,s,u)=>new ee(`p${s+1}`,await this.LuaLS_type(o,n(`param${u.length>1?s:""}`))))));case"type":return this.LuaLS_type(e.value,t);case"tuple":return new Pr(await Promise.all(e.values.map((o,s)=>this.LuaLS_type(o,n(`${s}`)))));case"table":if(!t)throw new Error(`${e.complex_type} without parent`);return this.LuaLS_table_type(e,t.file,t.table_class_name,t.format_description);case"LuaStruct":{if(!t)throw new Error(`${e.complex_type} without parent`);let o=new pe(t.table_class_name);o.exact=!0;for(let s of e.attributes)o.add(new ce(s.name,await this.LuaLS_type(s.write_type??s.read_type,{file:t.file,table_class_name:`${t.table_class_name}.${s.name}`,format_description:t.format_description}),t.format_description(this.collect_description(s)),s.optional));return t.file.add(o),new N(t.table_class_name)}}throw new Error("Invalid Type")}collect_description(e,t,n){return n||(n=e.description),"read"in e&&(n=`[${e.read?"R":""}${e.write?"W":""}] ${n??""}`),[n,e.lists?.join(`
3324
-
3325
- `),e.raises&&`**Events:**
3326
- ${e.raises?.map(o=>` * ${o.optional?"May":"Will"} raise [${o.name}](runtime:events::${o.name}) ${{instantly:"instantly",current_tick:"later in the current tick",future_tick:"in a future tick"}[o.timeframe]}.${o.description?`
3327
- `+o.description:""}`)?.join(`
3328
-
3329
- `)}`,t&&`[View Documentation](${t.scope}:${t.member}${t.part?"::"+t.part:""})`,e.examples?.map(o=>`### Example
3330
- ${o}`)?.join(`
3331
-
3332
- `),e.subclasses&&`_Can only be used if this is ${e.subclasses.length===1?e.subclasses[0]:`${e.subclasses.slice(0,-1).join(", ")} or ${e.subclasses[e.subclasses.length-1]}`}_`].filter(o=>!!o).join(`
3333
-
3334
- `)}};var ra=class{docs;concepts;simple_structs;prototypes;type_prefix="data.";constructor(e,t){if(this.docs=JSON.parse(e),this.docs.application!=="factorio")throw`Unknown application: ${this.docs.application}`;if(this.docs.api_version!==6)throw`Unsupported Prototype Docs JSON Version ${this.docs.api_version}`;if(this.docs.stage!=="prototype")throw`Wrong stage: ${this.docs.stage}`;this.concepts=new Map(this.docs.types.map(n=>[n.name,n])),this.simple_structs=new Set;for(let[n,o]of this.concepts)typeof o.type=="object"&&o.type.complex_type==="struct"&&this.simple_structs.add(n);this.prototypes=new Map(this.docs.prototypes.map(n=>[n.name,n]))}get api_version(){return this.docs.api_version}get stage(){return this.docs.stage}get application(){return this.docs.application}get application_version(){return this.docs.application_version}resolve_link(e,t){if(t=t?`#${t}`:"",["prototypes","types"].includes(e))return`/${e}.html${t}`;if(["libraries","storage","migrations","data-lifecycle","prototype-tree","noise-expressions","instrument"].includes(e))return`/auxiliary/${e}.html${t}`;if(this.concepts.has(e))return`/types/${e}.html${t}`;if(this.prototypes.has(e))return`/prototypes/${e}.html${t}`;console.warn(`Invalid Link: prototype:${e}${t}`)}generate_LuaLS_docs(e){return[this.generate_LuaLS_concepts(e),this.generate_LuaLS_prototypes(e),this.generate_LuaLS_data(e)]}async generate_LuaLS_concepts(e){let t=new De("prototype-api/concepts",this.application_version);for(let[n,o]of this.concepts){if(o.type==="builtin")continue;let s=this.simple_structs.has(o.name),u=s?"":".struct";if(o.properties){let f=new pe(this.type_prefix+o.name+u);f.exact=!0,f.description=await e(o.description,{scope:"prototype",member:o.name}),o.parent&&(f.parents=[new N(this.type_prefix+o.parent+u)]);for(let d of o.properties)f.add(new ce(d.name,this.lua_proto_type(d.type),await e(d.description,{scope:"prototype",member:o.name,part:d.name}),d.optional));t.add(f)}if(!s){let f=o.type;o.name==="AnyPrototype"&&typeof f=="object"&&f.complex_type==="union"&&(f={complex_type:"union",options:f.options.filter(c=>typeof c=="object"?!(c.complex_type==="type"&&c.value==="MapGenPresets"):c!=="MapGenPresets")}),t.add(new mt(this.type_prefix+o.name,this.lua_proto_type(f,o),o.description))}}return t}generate_LuaLS_data(e){let t=new De("prototype-api/data",this.application_version),n=new pe("data");n.add(new ce("raw",new N("data.raw"))),n.add(new ce("is_demo",new N("boolean")));let o=new xe("extend",[new ee("otherdata",new Qe(new N("data.AnyPrototype")))]);o.add(new $e(void 0,[new ee("self",new N("data")),new ee("otherdata",new Qe(new N("data.AnyPrototype")))])),o.add(new $e(void 0,[new ee("otherdata",new Qe(new N("data.AnyModSettingPrototype")))])),o.add(new $e(void 0,[new ee("self",new N("data")),new ee("otherdata",new Qe(new N("data.AnyModSettingPrototype")))])),n.add(o),n.global_name="data",t.add(n);let s=new pe("data.raw");s.exact=!0,t.add(s);for(let[u,f]of this.prototypes)f.typename&&s.add(new ce(new ot(f.typename),new tr(new N("string"),new N(this.type_prefix+f.name))));return t}async generate_LuaLS_prototypes(e){let t=new De("prototype-api/prototypes",this.application_version);for(let[n,o]of this.prototypes){let s=new pe(this.type_prefix+o.name);s.exact=!0,s.description=await e(o.description,{scope:"prototype",member:o.name}),o.parent&&(s.parents=[new N(this.type_prefix+o.parent)]);for(let u of o.properties)s.add(new ce(u.name,this.lua_proto_type(u.type),await e(u.description,{scope:"prototype",member:o.name,part:u.name}),u.optional)),u.alt_name&&s.add(new ce(u.alt_name,this.lua_proto_type(u.type),await e(u.description,{scope:"prototype",member:o.name,part:u.alt_name}),u.optional));if(o.custom_properties){let u=o.custom_properties;s.add(new ce(this.lua_proto_type(u.key_type),this.lua_proto_type(u.value_type),await e(u.description,{scope:"prototype",member:o.name,part:"custom_properties"})))}t.add(s)}return t}lua_proto_type(e,t){switch(typeof e){case"string":switch(e){case"bool":return new N("boolean");case"boolean":case"string":case"float":case"double":case"int8":case"uint8":case"int16":case"uint16":case"int32":case"uint32":case"int64":case"uint64":return new N(e)}return new N(this.type_prefix+e);case"object":switch(e.complex_type){case"struct":if(!t)throw new Error("struct without parent");return this.simple_structs.has(t.name)?new N(this.type_prefix+t.name):new N(this.type_prefix+t.name+".struct");case"array":return new Qe(this.lua_proto_type(e.value,t));case"tuple":return new Pr(e.values.map(n=>this.lua_proto_type(n,t)));case"dictionary":return new tr(this.lua_proto_type(e.key,t),this.lua_proto_type(e.value,t));case"union":return new Ft(e.options.map(n=>this.lua_proto_type(n,t)));case"literal":return new ot(e.value);case"type":return this.lua_proto_type(e.value,t);default:throw new Error("Invalid Type")}default:throw new Error("Invalid Type")}}};var O=le(Xu()),_t=le(require("path")),Jd=le(require("fs/promises")),or=le(require("os")),os=le(Nd());var Ud;(()=>{"use strict";var a={470:o=>{function s(d){if(typeof d!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(d))}function u(d,c){for(var p,m="",y=0,g=-1,w=0,R=0;R<=d.length;++R){if(R<d.length)p=d.charCodeAt(R);else{if(p===47)break;p=47}if(p===47){if(!(g===R-1||w===1))if(g!==R-1&&w===2){if(m.length<2||y!==2||m.charCodeAt(m.length-1)!==46||m.charCodeAt(m.length-2)!==46){if(m.length>2){var k=m.lastIndexOf("/");if(k!==m.length-1){k===-1?(m="",y=0):y=(m=m.slice(0,k)).length-1-m.lastIndexOf("/"),g=R,w=0;continue}}else if(m.length===2||m.length===1){m="",y=0,g=R,w=0;continue}}c&&(m.length>0?m+="/..":m="..",y=2)}else m.length>0?m+="/"+d.slice(g+1,R):m=d.slice(g+1,R),y=R-g-1;g=R,w=0}else p===46&&w!==-1?++w:w=-1}return m}var f={resolve:function(){for(var d,c="",p=!1,m=arguments.length-1;m>=-1&&!p;m--){var y;m>=0?y=arguments[m]:(d===void 0&&(d=process.cwd()),y=d),s(y),y.length!==0&&(c=y+"/"+c,p=y.charCodeAt(0)===47)}return c=u(c,!p),p?c.length>0?"/"+c:"/":c.length>0?c:"."},normalize:function(d){if(s(d),d.length===0)return".";var c=d.charCodeAt(0)===47,p=d.charCodeAt(d.length-1)===47;return(d=u(d,!c)).length!==0||c||(d="."),d.length>0&&p&&(d+="/"),c?"/"+d:d},isAbsolute:function(d){return s(d),d.length>0&&d.charCodeAt(0)===47},join:function(){if(arguments.length===0)return".";for(var d,c=0;c<arguments.length;++c){var p=arguments[c];s(p),p.length>0&&(d===void 0?d=p:d+="/"+p)}return d===void 0?".":f.normalize(d)},relative:function(d,c){if(s(d),s(c),d===c||(d=f.resolve(d))===(c=f.resolve(c)))return"";for(var p=1;p<d.length&&d.charCodeAt(p)===47;++p);for(var m=d.length,y=m-p,g=1;g<c.length&&c.charCodeAt(g)===47;++g);for(var w=c.length-g,R=y<w?y:w,k=-1,C=0;C<=R;++C){if(C===R){if(w>R){if(c.charCodeAt(g+C)===47)return c.slice(g+C+1);if(C===0)return c.slice(g+C)}else y>R&&(d.charCodeAt(p+C)===47?k=C:C===0&&(k=0));break}var E=d.charCodeAt(p+C);if(E!==c.charCodeAt(g+C))break;E===47&&(k=C)}var re="";for(C=p+k+1;C<=m;++C)C!==m&&d.charCodeAt(C)!==47||(re.length===0?re+="..":re+="/..");return re.length>0?re+c.slice(g+k):(g+=k,c.charCodeAt(g)===47&&++g,c.slice(g))},_makeLong:function(d){return d},dirname:function(d){if(s(d),d.length===0)return".";for(var c=d.charCodeAt(0),p=c===47,m=-1,y=!0,g=d.length-1;g>=1;--g)if((c=d.charCodeAt(g))===47){if(!y){m=g;break}}else y=!1;return m===-1?p?"/":".":p&&m===1?"//":d.slice(0,m)},basename:function(d,c){if(c!==void 0&&typeof c!="string")throw new TypeError('"ext" argument must be a string');s(d);var p,m=0,y=-1,g=!0;if(c!==void 0&&c.length>0&&c.length<=d.length){if(c.length===d.length&&c===d)return"";var w=c.length-1,R=-1;for(p=d.length-1;p>=0;--p){var k=d.charCodeAt(p);if(k===47){if(!g){m=p+1;break}}else R===-1&&(g=!1,R=p+1),w>=0&&(k===c.charCodeAt(w)?--w==-1&&(y=p):(w=-1,y=R))}return m===y?y=R:y===-1&&(y=d.length),d.slice(m,y)}for(p=d.length-1;p>=0;--p)if(d.charCodeAt(p)===47){if(!g){m=p+1;break}}else y===-1&&(g=!1,y=p+1);return y===-1?"":d.slice(m,y)},extname:function(d){s(d);for(var c=-1,p=0,m=-1,y=!0,g=0,w=d.length-1;w>=0;--w){var R=d.charCodeAt(w);if(R!==47)m===-1&&(y=!1,m=w+1),R===46?c===-1?c=w:g!==1&&(g=1):c!==-1&&(g=-1);else if(!y){p=w+1;break}}return c===-1||m===-1||g===0||g===1&&c===m-1&&c===p+1?"":d.slice(c,m)},format:function(d){if(d===null||typeof d!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof d);return function(c,p){var m=p.dir||p.root,y=p.base||(p.name||"")+(p.ext||"");return m?m===p.root?m+y:m+"/"+y:y}(0,d)},parse:function(d){s(d);var c={root:"",dir:"",base:"",ext:"",name:""};if(d.length===0)return c;var p,m=d.charCodeAt(0),y=m===47;y?(c.root="/",p=1):p=0;for(var g=-1,w=0,R=-1,k=!0,C=d.length-1,E=0;C>=p;--C)if((m=d.charCodeAt(C))!==47)R===-1&&(k=!1,R=C+1),m===46?g===-1?g=C:E!==1&&(E=1):g!==-1&&(E=-1);else if(!k){w=C+1;break}return g===-1||R===-1||E===0||E===1&&g===R-1&&g===w+1?R!==-1&&(c.base=c.name=w===0&&y?d.slice(1,R):d.slice(w,R)):(w===0&&y?(c.name=d.slice(1,g),c.base=d.slice(1,R)):(c.name=d.slice(w,g),c.base=d.slice(w,R)),c.ext=d.slice(g,R)),w>0?c.dir=d.slice(0,w-1):y&&(c.dir="/"),c},sep:"/",delimiter:":",win32:null,posix:null};f.posix=f,o.exports=f}},e={};function t(o){var s=e[o];if(s!==void 0)return s.exports;var u=e[o]={exports:{}};return a[o](u,u.exports,t),u.exports}t.d=(o,s)=>{for(var u in s)t.o(s,u)&&!t.o(o,u)&&Object.defineProperty(o,u,{enumerable:!0,get:s[u]})},t.o=(o,s)=>Object.prototype.hasOwnProperty.call(o,s),t.r=o=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})};var n={};(()=>{let o;t.r(n),t.d(n,{URI:()=>y,Utils:()=>Mt}),typeof process=="object"?o=process.platform==="win32":typeof navigator=="object"&&(o=navigator.userAgent.indexOf("Windows")>=0);let s=/^\w[\w\d+.-]*$/,u=/^\//,f=/^\/\//;function d(I,P){if(!I.scheme&&P)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${I.authority}", path: "${I.path}", query: "${I.query}", fragment: "${I.fragment}"}`);if(I.scheme&&!s.test(I.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(I.path){if(I.authority){if(!u.test(I.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(f.test(I.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}let c="",p="/",m=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class y{static isUri(P){return P instanceof y||!!P&&typeof P.authority=="string"&&typeof P.fragment=="string"&&typeof P.path=="string"&&typeof P.query=="string"&&typeof P.scheme=="string"&&typeof P.fsPath=="string"&&typeof P.with=="function"&&typeof P.toString=="function"}scheme;authority;path;query;fragment;constructor(P,D,$,Y,H,V=!1){typeof P=="object"?(this.scheme=P.scheme||c,this.authority=P.authority||c,this.path=P.path||c,this.query=P.query||c,this.fragment=P.fragment||c):(this.scheme=function(we,ve){return we||ve?we:"file"}(P,V),this.authority=D||c,this.path=function(we,ve){switch(we){case"https":case"http":case"file":ve?ve[0]!==p&&(ve=p+ve):ve=p}return ve}(this.scheme,$||c),this.query=Y||c,this.fragment=H||c,d(this,V))}get fsPath(){return E(this,!1)}with(P){if(!P)return this;let{scheme:D,authority:$,path:Y,query:H,fragment:V}=P;return D===void 0?D=this.scheme:D===null&&(D=c),$===void 0?$=this.authority:$===null&&($=c),Y===void 0?Y=this.path:Y===null&&(Y=c),H===void 0?H=this.query:H===null&&(H=c),V===void 0?V=this.fragment:V===null&&(V=c),D===this.scheme&&$===this.authority&&Y===this.path&&H===this.query&&V===this.fragment?this:new w(D,$,Y,H,V)}static parse(P,D=!1){let $=m.exec(P);return $?new w($[2]||c,J($[4]||c),J($[5]||c),J($[7]||c),J($[9]||c),D):new w(c,c,c,c,c)}static file(P){let D=c;if(o&&(P=P.replace(/\\/g,p)),P[0]===p&&P[1]===p){let $=P.indexOf(p,2);$===-1?(D=P.substring(2),P=p):(D=P.substring(2,$),P=P.substring($)||p)}return new w("file",D,P,c,c)}static from(P){let D=new w(P.scheme,P.authority,P.path,P.query,P.fragment);return d(D,!0),D}toString(P=!1){return re(this,P)}toJSON(){return this}static revive(P){if(P){if(P instanceof y)return P;{let D=new w(P);return D._formatted=P.external,D._fsPath=P._sep===g?P.fsPath:null,D}}return P}}let g=o?1:void 0;class w extends y{_formatted=null;_fsPath=null;get fsPath(){return this._fsPath||(this._fsPath=E(this,!1)),this._fsPath}toString(P=!1){return P?re(this,!0):(this._formatted||(this._formatted=re(this,!1)),this._formatted)}toJSON(){let P={$mid:1};return this._fsPath&&(P.fsPath=this._fsPath,P._sep=g),this._formatted&&(P.external=this._formatted),this.path&&(P.path=this.path),this.scheme&&(P.scheme=this.scheme),this.authority&&(P.authority=this.authority),this.query&&(P.query=this.query),this.fragment&&(P.fragment=this.fragment),P}}let R={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function k(I,P,D){let $,Y=-1;for(let H=0;H<I.length;H++){let V=I.charCodeAt(H);if(V>=97&&V<=122||V>=65&&V<=90||V>=48&&V<=57||V===45||V===46||V===95||V===126||P&&V===47||D&&V===91||D&&V===93||D&&V===58)Y!==-1&&($+=encodeURIComponent(I.substring(Y,H)),Y=-1),$!==void 0&&($+=I.charAt(H));else{$===void 0&&($=I.substr(0,H));let we=R[V];we!==void 0?(Y!==-1&&($+=encodeURIComponent(I.substring(Y,H)),Y=-1),$+=we):Y===-1&&(Y=H)}}return Y!==-1&&($+=encodeURIComponent(I.substring(Y))),$!==void 0?$:I}function C(I){let P;for(let D=0;D<I.length;D++){let $=I.charCodeAt(D);$===35||$===63?(P===void 0&&(P=I.substr(0,D)),P+=R[$]):P!==void 0&&(P+=I[D])}return P!==void 0?P:I}function E(I,P){let D;return D=I.authority&&I.path.length>1&&I.scheme==="file"?`//${I.authority}${I.path}`:I.path.charCodeAt(0)===47&&(I.path.charCodeAt(1)>=65&&I.path.charCodeAt(1)<=90||I.path.charCodeAt(1)>=97&&I.path.charCodeAt(1)<=122)&&I.path.charCodeAt(2)===58?P?I.path.substr(1):I.path[1].toLowerCase()+I.path.substr(2):I.path,o&&(D=D.replace(/\//g,"\\")),D}function re(I,P){let D=P?C:k,$="",{scheme:Y,authority:H,path:V,query:we,fragment:ve}=I;if(Y&&($+=Y,$+=":"),(H||Y==="file")&&($+=p,$+=p),H){let ue=H.indexOf("@");if(ue!==-1){let Nt=H.substr(0,ue);H=H.substr(ue+1),ue=Nt.lastIndexOf(":"),ue===-1?$+=D(Nt,!1,!1):($+=D(Nt.substr(0,ue),!1,!1),$+=":",$+=D(Nt.substr(ue+1),!1,!0)),$+="@"}H=H.toLowerCase(),ue=H.lastIndexOf(":"),ue===-1?$+=D(H,!1,!0):($+=D(H.substr(0,ue),!1,!0),$+=H.substr(ue))}if(V){if(V.length>=3&&V.charCodeAt(0)===47&&V.charCodeAt(2)===58){let ue=V.charCodeAt(1);ue>=65&&ue<=90&&(V=`/${String.fromCharCode(ue+32)}:${V.substr(3)}`)}else if(V.length>=2&&V.charCodeAt(1)===58){let ue=V.charCodeAt(0);ue>=65&&ue<=90&&(V=`${String.fromCharCode(ue+32)}:${V.substr(2)}`)}$+=D(V,!0,!1)}return we&&($+="?",$+=D(we,!1,!1)),ve&&($+="#",$+=P?ve:k(ve,!1,!1)),$}function G(I){try{return decodeURIComponent(I)}catch{return I.length>3?I.substr(0,3)+G(I.substr(3)):I}}let X=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function J(I){return I.match(X)?I.replace(X,P=>G(P)):I}var ze=t(470);let He=ze.posix||ze,wt="/";var Mt;(function(I){I.joinPath=function(P,...D){return P.with({path:He.join(P.path,...D)})},I.resolvePath=function(P,...D){let $=P.path,Y=!1;$[0]!==wt&&($=wt+$,Y=!0);let H=He.resolve($,...D);return Y&&H[0]===wt&&!P.authority&&(H=H.substring(1)),P.with({path:H})},I.dirname=function(P){if(P.path.length===0||P.path===wt)return P;let D=He.dirname(P.path);return D.length===1&&D.charCodeAt(0)===46&&(D=""),P.with({path:D})},I.basename=function(P){return He.basename(P.path)},I.extname=function(P){return He.extname(P.path)}})(Mt||(Mt={}))})(),Ud=n})();var{URI:Ae,Utils:Je}=Ud;var Za=require("child_process"),Xd=require("events");var jd=require("events"),kr=class extends jd.EventEmitter{buf;matchers;constructor(e,t){super(),this.buf=Buffer.alloc(0),this.matchers=t instanceof Buffer?[t]:t,e.on("close",()=>{this.emit("close")}),e.on("end",()=>{this.emit("end")}),e.on("data",n=>{for(this.buf=Buffer.concat([this.buf,n]);this.buf.length>0;){let o=this.matchers.map(u=>this.buf.indexOf(u instanceof Buffer?u:u.start)),s=o.reduce((u,f)=>u===-1?f:f===-1?u:Math.min(u,f));if(s!==-1){let u=this.matchers[o.indexOf(s)];if(u instanceof Buffer)s>0&&this.emit("segment",this.buf.slice(0,s)),this.buf=this.buf.slice(s+u.length);else{s>0&&(this.emit("segment",this.buf.slice(0,s)),this.buf=this.buf.slice(s));let f=this.buf.indexOf(u.end,u.start.length);if(f!==-1)this.emit("segment",this.buf.slice(u.start.length,f)),this.buf=this.buf.slice(f+u.end.length);else return}}else return}})}};var Yd=le(require("path")),Qd=le(Gd()),$b=[Buffer.from(`
3335
- `),Buffer.from("lua_debug> ")],Fb=[Buffer.from(`
3336
- `),{start:Buffer.from([239,183,174]),end:Buffer.from([239,183,175])}],Lo=class extends Xd.EventEmitter{factorio;hasNativeDebug;constructor(e,t,n,o){super();let s={cwd:Yd.dirname(e),env:Object.assign({},process.env,o,{SteamAppId:"427520"})};n?(this.hasNativeDebug=!0,this.factorio=(0,Za.spawn)(n,[e,...t],s)):this.factorio=(0,Za.spawn)(e,t,s),this.factorio.on("exit",(...d)=>this.emit("exit",...d)),new kr(this.factorio.stderr,$b).on("segment",d=>{d.length===1&&d[0]===13||this.emit("stderr",d)}),new kr(this.factorio.stdout,Fb).on("segment",d=>{d.length===1&&d[0]===13||this.emit("stdout",d)})}writeStdin(e){return this.factorio.stdin.write(e)}kill(){if(this.hasNativeDebug)this.factorio.pid&&(0,Qd.default)(this.factorio.pid);else{this.factorio.kill();try{this.factorio.kill("SIGKILL")}catch{}}}};var es=Buffer.from([27,76,117,97,82,0,1,4,8,4,8,0,25,147,13,10,26,10]);function Ao(a,e){let t=a.readBigUInt64LE(e);e+=8;let n;return t>0?(n=a.subarray(e,e+Number(t)-1),e+=Number(t)):n=Buffer.alloc(0,0),[n,e]}var ts=class{constructor(e,t){this.raw=e;this.line=t}get Op(){return this.raw&63}get A(){return this.raw>>6&255}get B(){return this.raw>>23&511}get C(){return this.raw>>14&511}get Ax(){return this.raw>>6&67108863}get Bx(){return this.raw>>14&262143}get sBx(){return this.Bx-131071}},rs=class{name;instack;idx;constructor(e,t){this.instack=e.readUInt8(t)!==0,this.idx=e.readUInt8(t+1)}},ns=class{name;start;end;dumpsize;constructor(e,t){let n;[n,t]=Ao(e,t),this.name=n.toString("utf8"),this.start=e.readUInt32LE(t),t+=4,this.end=e.readUInt32LE(t),t+=4,this.dumpsize=(n.length===0?8:8+n.length+1)+8}},Tr=class{constructor(e,t){this.type=e;this.value=t;switch(e){case 0:if(t!==void 0)throw new Error(`Invalid Lua Constant: ${e} ${t}`);break;case 1:if(typeof t!="boolean")throw new Error(`Invalid Lua Constant: ${e} ${t}`);break;case 3:if(typeof t!="number")throw new Error(`Invalid Lua Constant: ${e} ${t}`);break;case 4:if(!(t instanceof Buffer))throw new Error(`Invalid Lua Constant: ${e} ${t}`);break;default:throw new Error(`Invalid Lua Constant Type: ${e}`)}}get label(){switch(this.type){case 0:return"nil";case 1:case 3:return this.value.toString();case 4:return`"${this.value.toString("utf8")}"`;default:throw new Error(`Invalid Lua Constant Type: ${this.type} ${this.value}`)}}},ko=class a{source;nparam;is_vararg;maxstack;locals=[];upvals=[];instruction_count;_instraw;_instlines;constants=[];inner_functions=[];firstline;lastline;nextbyte;constructor(e,t){if(t===void 0){if(!e.subarray(0,es.length).equals(es))throw new Error("Invalid Header");t=es.length}this.firstline=e.readUInt32LE(t),t+=4,this.lastline=e.readUInt32LE(t),t+=4,this.nparam=e[t++],this.is_vararg=e[t++]!==0,this.maxstack=e[t++],this.instruction_count=e.readUInt32LE(t),t+=4,this._instraw=e.subarray(t,t+this.instruction_count*4),t+=this.instruction_count*4;let n=e.readUInt32LE(t);t+=4;for(let c=0;c<n;c++){let p=e[t++];switch(p){case 0:this.constants.push(new Tr(0));break;case 1:this.constants.push(new Tr(1,e[t++]!==0));break;case 3:this.constants.push(new Tr(3,e.readDoubleLE(t))),t+=8;break;case 4:let m;[m,t]=Ao(e,t),this.constants.push(new Tr(4,m));break;default:throw new Error(`Invalid Lua Constant Type: ${p}`)}}let o=e.readUInt32LE(t);t+=4;for(let c=0;c<o;c++){let p=new a(e,t);t=p.nextbyte,this.inner_functions.push(p)}let s=e.readUInt32LE(t);t+=4;for(let c=0;c<s;c++)this.upvals.push(new rs(e,t)),t+=2;{let c;[c,t]=Ao(e,t),this.source=c.toString("utf8")}let u=e.readUInt32LE(t);if(t+=4,u!==this.instruction_count)throw new Error("line info count mismatch");this._instlines=e.subarray(t,t+this.instruction_count*4),t+=this.instruction_count*4;let f=e.readUInt32LE(t);t+=4;for(let c=0;c<f;c++){let p=new ns(e,t);t+=p.dumpsize,this.locals.push(p)}let d=e.readUInt32LE(t);t+=4;for(let c=0;c<d;c++){let p;[p,t]=Ao(e,t),this.upvals[c].name=p.toString("utf8")}this.nextbyte=t}_baseAddr;get baseAddr(){return this._baseAddr}rebase(e){let t=e;return this._baseAddr=t,t+=this.instruction_count,this.inner_functions.forEach(n=>{t=n.rebase(t)}),t}_instructions=[];instruction(e){if(e>this.instruction_count-1)return;let t=this._instructions[e];return t===void 0&&(t=new ts(this._instraw.readUint32LE(e*4),this._instlines.readUint32LE(e*4)),this._instructions[e]=t),t}get lines(){let e=[];for(let t=0;t<this.instruction_count;t++)e[t]=this._instlines.readUInt32LE(t*4);return e}walk_functions(e){e(this),this.inner_functions.forEach(t=>t.walk_functions(e))}getFunctionAtStartLine(e){if(this.firstline===e)return this;if(this.firstline<e&&(this.lastline===0||this.lastline>e)&&this.inner_functions)for(let t=0;t<this.inner_functions.length;t++){let n=this.inner_functions[t].getFunctionAtStartLine(e);if(n)return n}}getInstructionsAtBase(e,t){if(!(t===0||!this._baseAddr)&&this._baseAddr<=e&&this._baseAddr+this.instruction_count>e){let n=e-this._baseAddr,o=[];n+t>this.instruction_count&&(t=this.instruction_count-n);for(let s=0;s<t;s++){let u=this.instruction(s+n);o.push({address:"0x"+(this._baseAddr+n+s).toString(16),instruction:this.getInstructionLabel(s+n),line:u.line,instructionBytes:u.raw.toString(16).padStart(8,"0"),symbol:s+n===0?this.source+":"+this.firstline:void 0})}return o}}getInstructionLabel(e){let t=this.instruction(e);if(!t)throw new Error("Invalid PC");let n=this.instruction(e+1);switch(t.Op){case 1:return`LOADK ${this.getRegisterLabel(e,t.A)} := ${this.constants[t.Bx].label}`;case 2:if(!n)throw new Error("Invalid PC");return`LOADKX ${this.getRegisterLabel(e,t.A)} := ${this.constants[n.Ax].label}`;case 3:return`LOADBOOL ${this.getRegisterLabel(e,t.A)} := ${t.B!==0}${t.C!==0?" pc++":""}`;case 4:return`LOADNIL ${this.getRegisterLabel(e,t.A)}...${this.getRegisterLabel(e,t.A+t.B)})`;case 5:return`GETUPVAL ${this.getRegisterLabel(e,t.A)} := ${this.getUpvalLabel(t.B)}`;case 6:return`GETTABUP ${this.getRegisterLabel(e,t.A)} := ${this.getUpvalLabel(t.B)}[${this.getRegisterOrConstantLabel(e,t.C)}]`;case 7:return`GETTABLE ${this.getRegisterLabel(e,t.A)} := ${this.getRegisterLabel(e,t.B)}[${this.getRegisterOrConstantLabel(e,t.C)}]`;case 8:return`SETTABUP ${this.getUpvalLabel(t.A)}[${this.getRegisterOrConstantLabel(e,t.B)}] := ${this.getRegisterOrConstantLabel(e,t.C)}`;case 9:return`SETUPVAL ${this.getUpvalLabel(t.B)} := ${this.getRegisterLabel(e,t.A)}`;case 10:return`SETTABLE ${this.getRegisterLabel(e,t.A)}[${this.getRegisterOrConstantLabel(e,t.B)}] := ${this.getRegisterOrConstantLabel(e,t.C)}`;case 11:{let f=t.B,d=this.fb2int(f),c=t.C,p=this.fb2int(c),m=f===d?`${d}`:`${f}->${d}`,y=c===p?`${p}`:`${c}->${p}`;return`NEWTABLE ${this.getRegisterLabel(e,t.A)} := {} size(${m},${y})`}case 12:return`SELF ${this.getRegisterLabel(e,t.A+1)} := ${this.getRegisterLabel(e,t.B)}; ${this.getRegisterLabel(e,t.A)} := ${this.getRegisterLabel(e,t.B)}[${this.getRegisterOrConstantLabel(e,t.C)}]`;case 13:return`ADD ${this.getRegisterLabel(e,t.A)} := ${this.getRegisterOrConstantLabel(e,t.B)} + ${this.getRegisterOrConstantLabel(e,t.C)}`;case 14:return`SUB ${this.getRegisterLabel(e,t.A)} := ${this.getRegisterOrConstantLabel(e,t.B)} - ${this.getRegisterOrConstantLabel(e,t.C)}`;case 15:return`MUL ${this.getRegisterLabel(e,t.A)} := ${this.getRegisterOrConstantLabel(e,t.B)} * ${this.getRegisterOrConstantLabel(e,t.C)}`;case 16:return`DIV ${this.getRegisterLabel(e,t.A)} := ${this.getRegisterOrConstantLabel(e,t.B)} / ${this.getRegisterOrConstantLabel(e,t.C)}`;case 17:return`MOD ${this.getRegisterLabel(e,t.A)} := ${this.getRegisterOrConstantLabel(e,t.B)} % ${this.getRegisterOrConstantLabel(e,t.C)}`;case 18:return`POW ${this.getRegisterLabel(e,t.A)} := ${this.getRegisterOrConstantLabel(e,t.B)} ^ ${this.getRegisterOrConstantLabel(e,t.C)}`;case 0:return`MOVE ${this.getRegisterLabel(e,t.A)} := ${this.getRegisterLabel(e,t.B)}`;case 19:return`UNM ${this.getRegisterLabel(e,t.A)} := -${this.getRegisterLabel(e,t.B)}`;case 20:return`NOT ${this.getRegisterLabel(e,t.A)} := not ${this.getRegisterLabel(e,t.B)}`;case 21:return`LEN ${this.getRegisterLabel(e,t.A)} := length of ${this.getRegisterLabel(e,t.B)}`;case 22:return`CONCAT ${this.getRegisterLabel(e,t.A)} := ${this.getRegisterLabel(e,t.B)}.. ... ..${this.getRegisterLabel(e,t.C)}`;case 23:return`JMP pc+=${t.sBx}${t.A?`; close >= ${t.A-1}`:""}`;case 24:return`EQ if(${this.getRegisterOrConstantLabel(e,t.B)} ${t.A?"~=":"=="} ${this.getRegisterOrConstantLabel(e,t.B)}) then pc++`;case 25:return`LT if(${this.getRegisterOrConstantLabel(e,t.B)} ${t.A?">=":"<"} ${this.getRegisterOrConstantLabel(e,t.B)}) then pc++`;case 26:return`LE if(${this.getRegisterOrConstantLabel(e,t.B)} ${t.A?">":"<="} ${this.getRegisterOrConstantLabel(e,t.B)}) then pc++`;case 27:return`TEST if ${t.C?"not ":""}${this.getRegisterLabel(e,t.A)} then pc++`;case 28:return`TESTSET if ${t.C?"":"not "}${this.getRegisterLabel(e,t.A)} then ${this.getRegisterLabel(e,t.A)} := ${this.getRegisterLabel(e,t.B)} else pc++`;case 29:return`CALL ${this.getRegisterLabel(e,t.A)}(${t.B?t.B-1:"var"} args ${t.C?t.C-1:"var"} returns)`;case 30:return`TAILCALL return ${this.getRegisterLabel(e,t.A)}(${t.B?t.B-1:"var"} args)`;case 31:return`RETURN return ${t.B?t.B-1:"var"} results ${t.B>1?`starting at ${this.getRegisterLabel(e,t.A)}`:""}`;case 32:return`FORLOOP ${this.getRegisterLabel(e,t.A)} += ${this.getRegisterLabel(e,t.A+2)}; if ${this.getRegisterLabel(e,t.A)} <= ${this.getRegisterLabel(e,t.A+1)} then { pc+=${t.sBx}; ${this.getRegisterLabel(e,t.A+3)} := ${this.getRegisterLabel(e,t.A)} }`;case 33:return`FORPREP ${this.getRegisterLabel(e,t.A)} -= ${this.getRegisterLabel(e,t.A+2)}; pc += ${t.sBx}`;case 34:return`TFORCALL ${this.getRegisterLabel(e,t.A+3)}...${this.getRegisterLabel(e,t.A+2+t.C)} := ${this.getRegisterLabel(e,t.A)}(${this.getRegisterLabel(e,t.A+1)},${this.getRegisterLabel(e,t.A+2)})`;case 35:return`TFORLOOP if ${this.getRegisterLabel(e,t.A+1)} ~= nil then { ${this.getRegisterLabel(e,t.A)} := ${this.getRegisterLabel(e,t.A+1)}; pc += ${t.sBx} }`;case 36:let o=t.C-1;if(!t.C){if(!n)throw new Error("Invalid PC");o=n.Ax-1}let s=50;return`SETLIST ${this.getRegisterLabel(e,t.A)}[${o*s+1}...${t.B?o*s+t.B:""}] := ${this.getRegisterLabel(e,t.A+1)}...${t.B?this.getRegisterLabel(e,t.A+t.B):"top"}`;case 37:let u=this.inner_functions[t.Bx];return`CLOSURE ${this.getRegisterLabel(e,t.A)} := closure(${u.source}:${u.firstline}-${u.lastline})`;case 38:return`VARARG ${this.getRegisterLabel(e,t.A)}...${t.B?this.getRegisterLabel(e,t.A+t.B-2):"top"}`;case 39:return"EXTRAARG";default:return`UNKNOWN OP(${t.Op}) A(${t.A}) B(${t.B}) C(${t.C})`}}fb2int(e){let t=e>>3&31;return t===0?e:(e&7)+8<<t-1}getRegisterOrConstantLabel(e,t){return t&256?this.constants[t&255].label:this.getRegisterLabel(e,t)}getUpvalLabel(e){return`Up(${this.upvals[e]?.name??e})`}getRegisterLabel(e,t){let n=0;for(let o=0;o<this.locals.length;o++){let s=this.locals[o];if(s.start<=e+1){if(s.end>=e+1){if(n===t)return`R(${s.name})`;n++}}else break}return`R(${t})`}};var sn=class extends O.StoppedEvent{constructor(e,t,n){super(e,t,n),this.body.allThreadsStopped=!0}},is=class extends O.LoggingDebugSession{constructor(t,n,o){super();this.activeVersion=t;this.fs=n;this.editorInterface=o;this.objectInfoChunks=pi(Ur(this.activeVersion.docs.generate_debuginfo()),3500),this.setDebuggerLinesStartAt1(!0),this.setDebuggerColumnsStartAt1(!0),this.setDebuggerPathFormat("uri"),this.configDone=new Promise(s=>{this._configurationDone=s})}_configurationDone;configDone;nextBreakpointID=1;breakPoints=new Map;breakPointsChanged=new Set;exceptionFilters=new Set(["unhandled"]);_modules=new Map;_responses=new Map;_dumps=new Map;translations=new Map;buffers=new Map;nextRef=1;factorio;stdinQueue=[];launchArgs;inPrompt=0;pauseRequested=!1;workspaceModInfo=[];initializeRequest(t,n){t.body=t.body||{},t.body.supportsConditionalBreakpoints=!0,t.body.supportsHitConditionalBreakpoints=!0,t.body.supportsEvaluateForHovers=!0,t.body.exceptionBreakpointFilters=[{filter:"pcall",label:"Caught by pcall",default:!1},{filter:"xpcall",label:"Caught by xpcall",default:!1},{filter:"unhandled",label:"Unhandled Exceptions",default:!0}],t.body.supportsSetVariable=!0,t.body.supportsModulesRequest=!0,t.body.supportsLogPoints=!0,t.body.supportsConfigurationDoneRequest=!0,t.body.supportsLoadedSourcesRequest=!0,t.body.supportsBreakpointLocationsRequest=!0,t.body.supportsDisassembleRequest=!0,t.body.supportsSteppingGranularity=!0,t.body.supportsInstructionBreakpoints=!1,this.sendResponse(t)}configurationDoneRequest(t,n){super.configurationDoneRequest(t,n),this._configurationDone?.()}async terminateRequest(t,n){return this.sendResponse(t),this.terminate()}async disconnectRequest(t,n){return this.sendResponse(t),this.terminate()}async checkFactorioArgs(t){let n=t.factorioArgs;if(n){if(n.includes("--config"))return this.sendEvent(new O.OutputEvent(`Factorio --config option is set by configPath and should not be included in factorioArgs
3337
- `,"console")),!1;if(n.includes("--mod-directory"))return this.sendEvent(new O.OutputEvent(`Factorio --mod-directory option is set by modsPath and should not be included in factorioArgs
3338
- `,"console")),!1}return!0}async resolveModsPath(t){let n;if(t.modsPath){n="launch";let o=_t.posix.normalize(t.modsPath);o.match(/^~[\\\/]/)&&(o=_t.posix.join(or.homedir().replace(/\\/g,"/"),o.replace(/^~[\\\/]/,""))),o.match(/[\\\/]$/)&&(o=o.replace(/[\\\/]+$/,""));try{await Jd.access(o),t.modsPath=o}catch{return this.sendEvent(new O.OutputEvent(`modsPath specified in launch configuration does not exist
3339
- `,"console")),!1}}else{let o=await this.editorInterface.findWorkspaceFiles("**/mod-list.json");if(o.length===1)t.modsPath=_t.dirname(o[0].fsPath),n="workspace";else{if(o.length>1)return this.sendEvent(new O.OutputEvent(`multiple mod-list.json in workspace, please specify one as modsPath
3340
- `,"console")),!1;n="config",t.modsPath=await this.activeVersion.defaultModsPath()}}if(or.platform()==="win32"&&t.modsPath.startsWith("/")&&(t.modsPath=t.modsPath.substr(1)),t.modsPath=t.modsPath.replace(/\\/g,"/"),this.sendEvent(new O.OutputEvent(`using modsPath ${t.modsPath} (${n})
3341
- `,"console")),n!=="config"){let o=t.modsPath;o.endsWith("/")||(o+="/"),t.factorioArgs.push("--mod-directory",o)}return!0}async setupMods(t){if(t.manageMod===!1)this.sendEvent(new O.OutputEvent(`automatic management of mods disabled
3342
- `,"console"));else{t.adjustMods||(t.adjustMods={}),t.allowDisableBaseMod||(t.adjustMods.base=!0);let n=new Sr(t.modsPath);await n.Loaded,t.disableExtraMods&&n.disableAll();for(let o in t.adjustMods)if(t.adjustMods.hasOwnProperty(o)){let s=t.adjustMods[o];n.set(o,s)}if(t.noDebug)n.set("debugadapter",!1);else{n.set("coverage",!1),n.set("profiler",!1);let o=await n.installMod("debugadapter",{origin:"bundle"});this.sendEvent(new O.OutputEvent(`package install debugadapter ${JSON.stringify(o)}
3343
- `,"console"))}await n.write(),this.sendEvent(new O.OutputEvent(`debugadapter ${t.noDebug?"disabled":"enabled"} in mod-list.json
3344
- `,"console"))}}async launchRequest(t,n){if(O.logger.setup(n.trace?O.Logger.LogLevel.Verbose:O.Logger.LogLevel.Stop,_t.join(or.tmpdir(),"fmtk.log"),!0),this.launchArgs=n,n.hookSettings=n.hookSettings??!1,n.hookData=n.hookData??!1,n.hookControl=n.hookControl??!0,n.hookMode=n.hookMode??"debug",n.trace=n.trace??!1,n.factorioArgs=n.factorioArgs||[],n.env&&Object.keys(n.env).length>0&&this.sendEvent(new O.OutputEvent(`using custom environment variables: ${JSON.stringify(n.env)}
3345
- `,"console")),!await this.checkFactorioArgs(n)){this.sendEvent(new O.TerminatedEvent),this.sendErrorResponse(t,1),this._isRunningInline()||process.exit(1);return}if(!await this.resolveModsPath(n)){this.sendEvent(new O.TerminatedEvent),this.sendErrorResponse(t,1),this._isRunningInline()||process.exit(1);return}try{await this.setupMods(n)}catch(m){this.sendEvent(new O.OutputEvent(`Error setting up mods: ${m}
3346
- `,"console")),this.sendEvent(new O.TerminatedEvent),this.sendErrorResponse(t,1),this._isRunningInline()||process.exit(1);return}let o=await this.editorInterface.findWorkspaceFiles("**/info.json");if(await Promise.all(o.map(this.updateInfoJson,this)),n.noDebug||((n.useInstrumentMode??!0)&&n.factorioArgs.push("--instrument-mod","debugadapter"),n.factorioArgs.push("--enable-unsafe-lua-debug-api"),(n.checkPrototypes??!0)&&!n.factorioArgs.includes("--check-unused-prototype-data")&&n.factorioArgs.push("--check-unused-prototype-data")),this.activeVersion.configPathIsOverriden()&&n.factorioArgs.push("--config",await this.activeVersion.configPath()),n.adjustModSettings){let m=Je.joinPath(Ae.file(n.modsPath),"mod-settings.dat"),y=new Xr(new ir(await this.fs.readFile(m)));for(let g of n.adjustModSettings)if(g.value===void 0)y.set(g.scope,g.name);else switch(typeof g.value){case"string":y.set(g.scope,g.name,{type:"string",value:g.value});break;case"number":y.set(g.scope,g.name,{type:"number",value:g.value});break;case"boolean":y.set(g.scope,g.name,{type:"bool",value:g.value});break}await this.fs.writeFile(m,y.save())}this.factorio=new Lo(this.activeVersion.factorioPath,n.factorioArgs,this.activeVersion.nativeDebugger,n.env),this.factorio.on("exit",(m,y)=>{m&&this.sendEvent(new O.Event("exited",{exitCode:m})),this.sendEvent(new O.TerminatedEvent)});let s,u=new Promise(m=>{s=m});this.factorio.on("stderr",m=>{let y=m.toString();y&&this.sendEvent(new O.OutputEvent(y+`
3347
- `,"stderr"))});let f=(m,y)=>{switch(typeof y){case"string":switch(y.charCodeAt(0)){case 64976:return _t.basename(y.slice(1));case 64977:return this.convertDebuggerPathToClient(y.slice(1));case 64978:return this.convertDebuggerLineToClient(Number.parseInt(y.slice(1)));case 64980:{let g=Number.parseInt(y.slice(1));return this.translations.get(g)??`{Missing Translation ID ${g}}`}case 64981:{let g=Number.parseInt(y.slice(1));return this.buffers.get(g)??`{Missing Buffer ID ${g}}`}}}return y},d=m=>{let y=m.indexOf(1,3),g=Number.parseInt(m.subarray(3,y).toString().trim()),w=m.subarray(y+1),R=[],k=w.indexOf(239);for(;k>=0;){if(w[k+1]>=160&&w[k+1]<=163&&w[k+2]>=128&&w[k+2]<=191){let E=w.subarray(k,k+4).toString("utf8").charCodeAt(0)-63488;R.push(w.subarray(0,k),Buffer.from([E])),w=w.subarray(k+3)}else R.push(w.subarray(0,k+1)),w=w.subarray(k+1);k=w.indexOf(239)}R.push(w);let C=Buffer.concat(R);this.buffers.set(g,C)},c=async m=>{if(m[2]===151){d(m);return}let y=m.toString();switch(y.charCodeAt(0)){case 64976:switch(this.inPrompt++,y.charCodeAt(1)){case 57344:await u,this.clearQueuedStdin(),this.launchArgs.hookMode==="profile"?this.continueRequire(!1,"#settings"):this.continueRequire(this.launchArgs.hookSettings??!1,"#settings");return;case 57345:this.clearQueuedStdin(),this.launchArgs.hookMode==="profile"?this.continueRequire(!1,"#data"):this.continueRequire(this.launchArgs.hookData??!1,"#data");return;case 57346:{let g=y.slice(2).trim();this.clearQueuedStdin();let w=this.launchArgs.hookControl??!0,R=g==="debugadapter"?Array.isArray(w)&&w.includes(g):w!==!1&&(w===!0||w.includes(g));this.launchArgs.hookMode==="profile"?this.continueProfile(R):this.launchArgs.hookMode==="profile2"?this.continueProfile(R,2):this.continueRequire(R,g);return}case 57347:{let g=this.launchArgs.hookControl??!0,w=Array.isArray(g)&&g.includes("debugadapter")||g===!1;this.launchArgs.hookMode==="profile"?this.continueProfile(!w):this.launchArgs.hookMode==="profile2"?this.continueProfile(!w,2):this.continueRequire(!1,"debugadapter");return}case 57348:this.sendClassData(),this.writeStdin("cont"),this.inPrompt--;return;case 57349:this.allocateRefBlock(),this.continue();return;case 57351:await this.configDone;case 57352:this.clearQueuedStdin(),this.allocateRefBlock(),this.continue(!0);return;case 57350:case 57353:case 57354:await this.runQueuedStdin(),this.continue(!0);return;case 57356:await this.terminate();return;default:return}case 64977:{this.inPrompt++;let g=JSON.parse(y.slice(1),f);switch(g.event){case"source":let w=this.loadedSourceEvent(g.body),R=g.body.source;this.breakPoints.has(R.sourceReference??R.name)&&await w,this.continue();return;case"running":await this.runQueuedStdin(),this.pauseRequested?(this.pauseRequested=!1,this.breakPointsChanged.size!==0&&this.updateBreakpoints(),this.sendEvent(new sn("pause",g.body.threadId))):this.continue();return;case"exception":await this.runQueuedStdin(),g.body.filter==="manual"||this.exceptionFilters.has(g.body.filter)?this.sendEvent(new sn("exception",g.body.threadId,g.body.mesg)):this.continue();return;case"stopped":await this.runQueuedStdin(),this.breakPointsChanged.size!==0&&this.updateBreakpoints(),this.sendEvent(new sn(g.body.reason,g.body.threadId));return;default:return}}case 64980:{let g=y.indexOf(""),w=Number.parseInt(y.slice(1,g).trim()),R=y.slice(g+1);this.translations.set(w,R);return}case 64981:{let g=JSON.parse(y.slice(1),f);switch(g.event){case"modules":await this.updateModules(g.body),s(),this.sendEvent(new O.InitializedEvent);return;case"output":{let w=g;w.body.output.endsWith(`
3348
- `)||(w.body.output+=`
3349
- `),this.sendEvent(w);return}default:return}}case 64982:{let g=JSON.parse(y.slice(1),f);this._responses.get(g.seq)(g.body),this._responses.delete(g.seq);return}case 64984:{this.sendEvent(new O.InvalidatedEvent);return}}},p=m=>{switch(m.toString("utf8").charCodeAt(0)){case 64992:case 64993:case 64994:case 64995:return}};this.factorio.on("stdout",async m=>{if(m[0]===239&&m[1]===183)switch(m[2]){case 144:case 145:case 148:case 149:case 150:case 151:case 152:await c(m);return;case 160:case 161:case 162:case 163:p(m);return;case 173:this.sendEvent(new O.Event("x-Factorio-Profile",m.toString().slice(1)));return}m.toString()&&this.sendEvent(new O.OutputEvent(m.toString()+`
3350
- `,"stdout"))}),this.sendResponse(t)}allocateRefBlock(){let t=this.nextRef;this.nextRef+=4096,this.writeStdin(`__DebugAdapter.__dap.transferRef(${t})`)}convertClientPathToDebugger(t){if(t=Ae.parse(super.convertClientPathToDebugger(t)).toString(),t.startsWith("output:"))return t;let n;return this._modules.forEach(o=>{o.symbolFilePath&&t.startsWith(o.symbolFilePath)&&o.symbolFilePath.length>(n?.symbolFilePath||"").length&&(n=o)}),n?.name==="#user"&&t.startsWith(n.symbolFilePath+"/mods")&&(n=void 0),n?t.replace(n.symbolFilePath,"@__"+n.name+"__"):t}convertDebuggerPathToClient(t){let n=t.match(/^@__(.*?)__\/(.*)$/);if(n){let o=this._modules.get(n[1]);if(o?.symbolFilePath)return super.convertDebuggerPathToClient(Je.joinPath(Ae.parse(o.symbolFilePath),n[2]).toString())}return t}async customRequest(t,n,o,s){switch(t){case"x-Factorio-ConvertPath":n.body=this.convertDebuggerPathToClient(o.path);break;case"modules":return this.modulesRequest(n,o);default:n.success=!1,n.message="Unknown request";break}this.sendResponse(n)}setBreakPointsRequest(t,n){let o;if(n.source.path){let d=n.source.path;o=this.convertClientPathToDebugger(d)}else o=`&ref ${n.source.sourceReference}`;let s=this.lines_by_source.get(n.source.sourceReference??o),u=this.breakPoints.get(o)??[],f=(n.breakpoints??[]).map(d=>{d.line=this.convertClientLineToDebugger(d.line);let c=u.find(m=>d.line===m.line&&d.column===m.column);if(c)return c.condition=d.condition,c.hitCondition=d.hitCondition,c.logMessage=d.logMessage,c;let p=!1;if(s){let m=0;for(let y of s){if(y>=d.line){d.line=y,p=!0;break}y>m&&(m=y)}!p&&m>0&&(d.line=m,p=!0)}return Object.assign(d,{id:this.nextBreakpointID++,verified:p})});this.breakPoints.set(o,f),this.breakPointsChanged.add(o),t.body={breakpoints:f},this.sendResponse(t)}revalidateBreakpoints(t){let n=typeof t=="number"?`&ref ${t}`:t,o=this.breakPoints.get(n);if(!o)return;this.breakPointsChanged.add(n);let s=this.lines_by_source.get(t);for(let u of o){let f=0;for(let d of s){if(d>=u.line){u.line=d,u.verified=!0,this.sendEvent(new O.BreakpointEvent("changed",u));break}d>f&&(f=d)}!u.verified&&f>0&&(u.line=f,u.verified=!0,this.sendEvent(new O.BreakpointEvent("changed",u)))}}async threadsRequest(t){this.inPrompt>0?(t.body=await new Promise(n=>{this._responses.set(t.request_seq,n),this.writeStdin(`__DebugAdapter.__dap.threads(${t.request_seq})
3351
- `)}),this.sendResponse(t)):(t.body={threads:[{id:1,name:"thread"}]},this.sendResponse(t))}async stackTraceRequest(t,n){let o=typeof n.startFrame=="number"?n.startFrame:0,s=await new Promise(u=>{this._responses.set(t.request_seq,u),this.writeStdin(`__DebugAdapter.__dap.stackTrace(${n.threadId},${o},${t.request_seq})
3352
- `)});t.body={stackFrames:s.map(u=>{if(u&&u.source){u.source.path&&(u.source.path=this.convertDebuggerPathToClient(u.source.path));let f=u.source.sourceReference??u.source.name;if(f){let d=this.dumps_by_source.get(f)?.get(u.linedefined);d&&d.baseAddr&&(u.instructionPointerReference="0x"+(d.baseAddr+u.currentpc).toString(16))}}return u})},this.sendResponse(t)}async modulesRequest(t,n){let o=Array.from(this._modules.values());t.body={modules:o},this.sendResponse(t)}async scopesRequest(t,n){let o=new Promise(s=>{this._responses.set(t.request_seq,s),this.writeStdin(`__DebugAdapter.__dap.scopes(${n.frameId}, ${t.request_seq})
3353
- `)});t.body={scopes:await o},this.sendResponse(t)}async variablesRequest(t,n,o){let s,u=new Promise(c=>s=c),f=new AbortController,d=await Promise.race([new Promise(async c=>{this._responses.set(t.request_seq,c),await this.writeOrQueueStdin(`__DebugAdapter.__dap.variables(${n.variablesReference},${t.request_seq},${n.filter?`"${n.filter}"`:"nil"},${n.start||"nil"},${n.count||"nil"})
3354
- `,u,f.signal)||(this._responses.delete(t.request_seq),s(),c([{name:"",value:`Expired variablesReference ref=${n.variablesReference} seq=${t.request_seq}`,type:"error",variablesReference:0}]))}),new Promise(c=>{setTimeout(()=>{f.abort(),c([{name:"",value:`No Lua State Available ref=${n.variablesReference} seq=${t.request_seq}`,type:"error",variablesReference:0}])},this.launchArgs.runningTimeout??2e3)})]);s(),t.body={variables:d},d.length===1&&d[0].type==="error"&&(t.success=!1,t.message=d[0].value),this.sendResponse(t)}async setVariableRequest(t,n,o){let s=await new Promise(u=>{this._responses.set(t.request_seq,u),this.writeStdin(`__DebugAdapter.__dap.setVariable(${n.variablesReference},${Ct(Buffer.from(n.name))},${Ct(Buffer.from(n.value))},${t.request_seq})
3355
- `)});s.type==="error"?(t.success=!1,t.message=s.value):t.body=s,this.sendResponse(t)}async evaluateRequest(t,n,o){let s,u=new Promise(g=>s=g),f=new AbortController,d=n.expression.match(/^__(.+?)__ (.*)$/),c;d&&(c=d[1],n.expression=d[2]);let p=c?Ct(Buffer.from(c)):n.frameId?n.frameId:"nil",m=Ct(Buffer.from(n.expression.replace(/\n/g," "))),y=await Promise.race([new Promise(async g=>{this._responses.set(t.request_seq,g),await this.writeOrQueueStdin(`__DebugAdapter.__dap.evaluate(${p},"${n.context}",${m},${t.request_seq})
3356
- `,u,f.signal)||(this._responses.delete(t.request_seq),s(),g({result:`Expired evaluate seq=${t.request_seq}`,type:"error",variablesReference:0}))}),new Promise(g=>{setTimeout(()=>{f.abort(),g({result:`No Lua State Available seq=${t.request_seq}`,type:"error",variablesReference:0})},this.launchArgs.runningTimeout??2e3)})]);if(s(),y.type==="error"&&(t.success=!1,t.message=y.result),t.body=y,y.timer){let g=y.timer.replace(/^.*: /,"");y.result+=`
3357
- \u23F1\uFE0F `+g}this.sendResponse(t)}continueRequest(t,n){this.writeStdin("__DebugAdapter.__dap.step_enabled(false)"),this.continue(),this.sendResponse(t)}pauseRequest(t,n,o){this.pauseRequested=!0,this.sendResponse(t)}step(t="in",n="statement"){let o={in:-1,over:0,out:1};this.breakPointsChanged.size!==0&&this.updateBreakpoints(),this.writeStdin("__DebugAdapter.__dap.step_enabled(true)"),this.writeStdin(`__DebugAdapter.__dap.step(${o[t]},${n==="instruction"})`),this.writeStdin("cont"),this.inPrompt--}nextRequest(t,n){this.step("over",n.granularity),this.sendResponse(t)}stepInRequest(t,n){this.step("in",n.granularity),this.sendResponse(t)}stepOutRequest(t,n){this.step("out",n.granularity),this.sendResponse(t)}setExceptionBreakPointsRequest(t,n,o){this.exceptionFilters.clear(),n.filters.forEach(s=>this.exceptionFilters.add(s)),this.sendResponse(t)}nextdump=1;dumps_by_source=new Map;dumps_by_address=[];lines_by_source=new Map;loadedSources=[];async loadedSourceEvent(t){let n=t.source;if(t.dump){let o=n.sourceReference??n.name,s;s=new ko(t.dump),this.nextdump=s.rebase(this.nextdump);let u=new Set,f=new Map;s.walk_functions(d=>{if(d.baseAddr){let c=this.dumps_by_address.findIndex(p=>d.baseAddr<p.baseAddr);c===-1?this.dumps_by_address.push(d):this.dumps_by_address.splice(c,0,d)}f.set(d.firstline,d),d.lines.forEach(c=>u.add(c))}),this.dumps_by_source.set(o,f),this.lines_by_source.set(o,Array.from(u).sort((d,c)=>d-c)),this.revalidateBreakpoints(o)}this.loadedSources.push(n),this.sendEvent(new O.LoadedSourceEvent("new",n))}async disassembleRequest(t,n,o){let s=parseInt(n.memoryReference),u=[];t.body={instructions:u};let f=s+(n.instructionOffset??0),d=n.instructionCount;for(;f<1;)u.push({address:"0x"+f.toString(16),instruction:"<no instruction>"}),f++,d--;let c=this.dumps_by_address.findIndex(p=>p.baseAddr&&p.baseAddr<f&&p.baseAddr+p.instruction_count>=f);do{let m=this.dumps_by_address[c].getInstructionsAtBase(f,d);m&&(u.push(...m),d-=m.length,f+=m.length),c++}while(d>0&&f<this.nextdump&&c<this.dumps_by_address.length);for(;d>0;)u.push({address:"0x"+f.toString(16),instruction:"<no instruction>"}),d--;this.nextdump+=d,this.sendResponse(t)}async breakpointLocationsRequest(t,n,o){let s=n.source.sourceReference??n.source.path;if(s){typeof s=="string"&&(s=this.convertClientPathToDebugger(s));let u=this.lines_by_source?.get(s);u&&(t.body={breakpoints:u.map(f=>({line:f})).filter(f=>f.line>=n.line&&f.line<=(n.endLine??n.line))})}this.sendResponse(t)}async loadedSourcesRequest(t,n,o){t.body={sources:this.loadedSources},this.sendResponse(t)}async sourceRequest(t,n){let o=n.source?.sourceReference;if(o){let s,u=new Promise(c=>s=c),f=new AbortController,d=await Promise.race([new Promise(async c=>{this._responses.set(t.request_seq,c),await this.writeOrQueueStdin(`__DebugAdapter.__dap.source(${o},${t.request_seq})
3358
- `,u,f.signal)||(this._dumps.delete(o),s(),c(`Expired source ref=${o}`))}),new Promise(c=>{setTimeout(()=>{f.abort(),c(`No Lua State Available ref=${o} seq=${t.request_seq}`)},this.launchArgs.runningTimeout??2e3)})]);s(),t.body={content:d??"Invalid Source ID"}}this.sendResponse(t)}async updateInfoJson(t){try{let n=t.path;or.platform()==="win32"&&n.startsWith("/")&&(n=n.substr(1));let o=Buffer.from(await this.fs.readFile(t)).toString("utf8");if(o){let s=JSON.parse(o);if(s){let u={uri:Je.dirname(t),name:s.name,version:s.version,info:s};this.workspaceModInfo.push(u)}}}catch(n){this.sendEvent(new O.OutputEvent(`failed to read ${t} ${n}
3359
- `,"stderr"))}}objectInfoChunks;sendClassData(){for(let t of this.objectInfoChunks)this.writeStdin(Buffer.concat([Buffer.from("__DebugAdapter.loadObjectInfo("),Ct(t),Buffer.from(")")]));this.writeStdin("__DebugAdapter.loadObjectInfo()")}writeStdin(t){if(this.inPrompt<=0){this.sendEvent(new O.OutputEvent(`!! Attempted to writeStdin "${t instanceof Buffer?`Buffer[${t.length}]`:t}" while not in a prompt
3360
- `,"console"));return}this.factorio?.writeStdin(Buffer.concat([t instanceof Buffer?t:Buffer.from(t),Buffer.from(`
3361
- `)]))}async writeOrQueueStdin(t,n,o){return this.inPrompt>0?(this.writeStdin(t),n&&await n,!0):new Promise(u=>this.stdinQueue.push({mesg:t,resolve:u,consumed:n,signal:o}))}async runQueuedStdin(){if(this.stdinQueue.length>0){for await(let t of this.stdinQueue)t.signal?.aborted?t.resolve(!1):(this.writeStdin(t.mesg),t.resolve(!0),t.consumed&&await t.consumed);this.stdinQueue=[]}}clearQueuedStdin(){this.stdinQueue.length>0&&(this.stdinQueue.forEach(t=>{t.resolve(!1)}),this.stdinQueue=[])}continue(t){if(this.inPrompt<=0){this.sendEvent(new O.OutputEvent(`!! Attempted to continue while not in a prompt
3362
- `,"console"));return}(t||this.breakPointsChanged.size!==0)&&this.updateBreakpoints(t),this.writeStdin("cont"),this.inPrompt--}continueRequire(t,n){if(this.inPrompt<=0){this.sendEvent(new O.OutputEvent(`!! Attempted to continueRequire while not in a prompt
3363
- `,"console"));return}if(t){let o="";this.launchArgs.hookLog!==void 0&&(o+=`hooklog=${this.launchArgs.hookLog},`),this.launchArgs.keepOldLog!==void 0&&(o+=`keepoldlog=${this.launchArgs.keepOldLog},`),this.launchArgs.runningBreak!==void 0&&(o+=`runningBreak=${this.launchArgs.runningBreak},`),this.writeStdin(`__DebugAdapter={__config={${o}}}`)}this.writeStdin("cont"),this.inPrompt--}continueProfile(t,n){if(this.inPrompt<=0){this.sendEvent(new O.OutputEvent(`!! Attempted to continueProfile while not in a prompt
3364
- `,"console"));return}if(t){let o="";this.launchArgs.profileSlowStart!==void 0&&(o+=`slowStart=${this.launchArgs.profileSlowStart},`),this.launchArgs.profileUpdateRate!==void 0&&(o+=`updateRate=${this.launchArgs.profileUpdateRate},`),this.launchArgs.profileLines!==void 0&&(o+=`trackLines=${this.launchArgs.profileLines},`),this.launchArgs.profileFuncs!==void 0&&(o+=`trackFuncs=${this.launchArgs.profileFuncs},`),this.launchArgs.profileTree!==void 0&&(o+=`trackTree=${this.launchArgs.profileTree},`),this.writeStdin(`__Profiler${n||""}={${o}}`)}this.writeStdin("cont"),this.inPrompt--}async trydir(t,n){try{if((await this.fs.stat(t)).type&2){let s=JSON.parse(Buffer.from(await this.fs.readFile(Je.joinPath(t,"info.json"))).toString("utf8"));if(s.name===n.name&&os.eq(s.version,n.version,{loose:!0}))return n.symbolFilePath=t.toString(),n.symbolStatus="Loaded Mod Directory",this.sendEvent(new O.OutputEvent(`loaded ${n.name} ${n.version} from modspath ${n.symbolFilePath}
3365
- `,"console")),!0}}catch(o){return o.code!=="FileNotFound"&&o.code!=="ENOENT"&&this.sendEvent(new O.OutputEvent(`failed loading ${n.name} ${n.version} from modspath: ${o}
3366
- `,"console")),!1}return!1}async updateModules(t){let n=this.editorInterface.getExtension?.("slevesque.vscode-zipexplorer");n&&(await n.activate(),await this.editorInterface.executeCommand("zipexplorer.clear"));for(let o of t)try{if(this._modules.set(o.name,o),o.name==="#user"){o.symbolFilePath=Ae.file(await this.activeVersion.writeDataPath()).toString(),o.symbolStatus="Loaded Write Data Directory",this.sendEvent(new O.OutputEvent(`loaded ${o.name} from config ${o.symbolFilePath}
3367
- `,"console"));continue}if(o.name==="level"){o.symbolStatus="No Symbols (Level)";continue}try{let u=Je.joinPath(Ae.file(await this.activeVersion.dataPath()),o.name);if(JSON.parse(Buffer.from(await this.fs.readFile(Je.joinPath(u,"info.json"))).toString("utf8")).name===o.name){o.symbolFilePath=u.toString(),o.symbolStatus="Loaded Data Directory",this.sendEvent(new O.OutputEvent(`loaded ${o.name} from data ${o.symbolFilePath}
3368
- `,"console"));continue}}catch{}let s=this.workspaceModInfo.find(u=>u.name===o.name&&os.eq(u.version,o.version,{loose:!0}));if(s){o.symbolFilePath=s.uri.toString(),o.symbolStatus="Loaded Workspace Directory",this.sendEvent(new O.OutputEvent(`loaded ${o.name} ${o.version} from workspace ${o.symbolFilePath}
3369
- `,"console"));continue}if(this.launchArgs.modsPath){let u=Je.joinPath(Ae.file(this.launchArgs.modsPath),o.name);if(await this.trydir(u,o)||(u=Je.joinPath(Ae.file(this.launchArgs.modsPath),o.name+"_"+o.version),await this.trydir(u,o)))continue;if(n){let f=Je.joinPath(Ae.file(this.launchArgs.modsPath),o.name+"_"+o.version+".zip"),d;try{d=await this.fs.stat(f)}catch(c){c.code!=="FileNotFound"&&this.sendEvent(new O.OutputEvent(`${c}
3370
- `,"stderr"))}if(d&&d.type&1)try{await this.editorInterface.executeCommand("zipexplorer.exploreZipFile",f);let c=Je.joinPath(f,o.name+"_"+o.version).with({scheme:"zip"});o.symbolFilePath=c.toString(),o.symbolStatus="Loaded Zip",this.sendEvent(new O.OutputEvent(`loaded ${o.name} ${o.version} from mod zip ${f.toString()}
3371
- `,"console"));continue}catch(c){this.sendEvent(new O.OutputEvent(`failed loading ${o.name} ${o.version} from mod zip ${f.toString()}: ${c}
3372
- `,"console"))}}}o.symbolStatus="Unknown",this.sendEvent(new O.OutputEvent(`no source found for ${o.name} ${o.version}
3373
- `,"console"))}catch(s){o.symbolStatus="Error",this.sendEvent(new O.OutputEvent(`failed locating source for ${o.name} ${o.version}: ${s}
3374
- `,"console"))}this._modules.forEach(o=>{this.sendEvent(new O.ModuleEvent("new",o))})}updateBreakpoints(t=!1){let n=Array();this.breakPoints.forEach((o,s)=>{(t||this.breakPointsChanged.has(s))&&n.push(Buffer.concat([Buffer.from("__DebugAdapter.__dap.updateBreakpoints("),Ct(hi(s,o)),Buffer.from(`)
3375
- `)]))}),this.breakPointsChanged.clear(),this.writeStdin(Buffer.concat(n))}async terminate(){this.factorio?.kill?.();let t=this.launchArgs?.modsPath;if(t)if(this.launchArgs.manageMod===!1)this.sendEvent(new O.OutputEvent(`automatic management of mods disabled by launch config
3376
- `,"console"));else try{let n=new Sr(t);await n.Loaded,n.set("debugadapter",!1),await n.write(),this.sendEvent(new O.OutputEvent(`debugadapter disabled in mod-list.json
3377
- `,"console"))}catch(n){this.sendEvent(new O.OutputEvent(`failed to disable debugadapter in mod-list.json:
3378
- ${n}
3379
- `,"console"))}this.sendEvent(new O.TerminatedEvent),!this._isRunningInline()&&process.env.NODE_V8_COVERAGE&&process.exit()}};var ss=(c=>(c[c.Nil=0]="Nil",c[c.BoolFalse=1]="BoolFalse",c[c.BoolTrue=2]="BoolTrue",c[c.Number=3]="Number",c[c.String=4]="String",c[c.Table=5]="Table",c[c.ExistingGCObject=6]="ExistingGCObject",c[c.LuaObject=7]="LuaObject",c[c.TableWithMeta=8]="TableWithMeta",c))(ss||{}),ls=(_=>(_[_.LuaEntity=0]="LuaEntity",_[_.LuaInvalidObject=1]="LuaInvalidObject",_[_.LuaRecipe=2]="LuaRecipe",_[_.LuaTechnology=3]="LuaTechnology",_[_.LuaRandomGenerator=4]="LuaRandomGenerator",_[_.LuaForce=5]="LuaForce",_[_.LuaBurner=6]="LuaBurner",_[_.LuaLogisticPoint=7]="LuaLogisticPoint",_[_.LuaDecorativePrototype=8]="LuaDecorativePrototype",_[_.LuaCustomChartTag=9]="LuaCustomChartTag",_[_.LuaPermissionGroups=10]="LuaPermissionGroups",_[_.LuaPermissionGroup=11]="LuaPermissionGroup",_[_.LuaUnitGroup=12]="LuaUnitGroup",_[_.LuaTrain=13]="LuaTrain",_[_.LuaFluidBox=14]="LuaFluidBox",_[_.LuaEntityPrototype=15]="LuaEntityPrototype",_[_.LuaItemPrototype=16]="LuaItemPrototype",_[_.LuaEquipmentGrid=18]="LuaEquipmentGrid",_[_.LuaEquipment=19]="LuaEquipment",_[_.LuaItemStack=20]="LuaItemStack",_[_.LuaPlayer=21]="LuaPlayer",_[_.LuaGui=22]="LuaGui",_[_.LuaGuiElement=23]="LuaGuiElement",_[_.LuaStyle=24]="LuaStyle",_[_.LuaSurface=25]="LuaSurface",_[_.LuaFluidPrototype=26]="LuaFluidPrototype",_[_.LuaGroup=27]="LuaGroup",_[_.LuaTile=28]="LuaTile",_[_.LuaChunkIterator=29]="LuaChunkIterator",_[_.LuaStructMapSettings=30]="LuaStructMapSettings",_[_.LuaTransportLine=31]="LuaTransportLine",_[_.LuaLogisticNetwork=32]="LuaLogisticNetwork",_[_.LuaLogisticCell=33]="LuaLogisticCell",_[_.LuaInventory=34]="LuaInventory",_[_.LuaControlBehavior=35]="LuaControlBehavior",_[_.LuaFlowStatistics=36]="LuaFlowStatistics",_[_.LuaTilePrototype=37]="LuaTilePrototype",_[_.LuaEquipmentPrototype=38]="LuaEquipmentPrototype",_[_.LuaCircuitNetwork=39]="LuaCircuitNetwork",_[_.LuaDamagePrototype=40]="LuaDamagePrototype",_[_.LuaVirtualSignalPrototype=41]="LuaVirtualSignalPrototype",_[_.LuaEquipmentGridPrototype=42]="LuaEquipmentGridPrototype",_[_.LuaRecipePrototype=43]="LuaRecipePrototype",_[_.LuaTechnologyPrototype=44]="LuaTechnologyPrototype",_[_.LuaBurnerPrototype=45]="LuaBurnerPrototype",_[_.LuaElectricEnergySourcePrototype=46]="LuaElectricEnergySourcePrototype",_[_.LuaCustomInputPrototype=47]="LuaCustomInputPrototype",_[_.LuaNoiseLayerPrototype=48]="LuaNoiseLayerPrototype",_[_.LuaAutoplaceControlPrototype=49]="LuaAutoplaceControlPrototype",_[_.LuaModSettingPrototype=50]="LuaModSettingPrototype",_[_.LuaAmmoCategoryPrototype=51]="LuaAmmoCategoryPrototype",_[_.LuaRailPath=52]="LuaRailPath",_[_.LuaFluidBoxPrototype=53]="LuaFluidBoxPrototype",_[_.LuaAISettings=54]="LuaAISettings",_[_.LuaProfiler=55]="LuaProfiler",_[_.LuaNamedNoiseExpression=56]="LuaNamedNoiseExpression",_[_.LuaFuelCategoryPrototype=57]="LuaFuelCategoryPrototype",_[_.LuaResourceCategoryPrototype=58]="LuaResourceCategoryPrototype",_[_.LuaAchievementPrototype=59]="LuaAchievementPrototype",_[_.LuaModuleCategoryPrototype=60]="LuaModuleCategoryPrototype",_[_.LuaEquipmentCategoryPrototype=61]="LuaEquipmentCategoryPrototype",_[_.LuaTrivialSmokePrototype=62]="LuaTrivialSmokePrototype",_[_.LuaShortcutPrototype=63]="LuaShortcutPrototype",_[_.LuaRecipeCategoryPrototype=64]="LuaRecipeCategoryPrototype",_[_.LuaParticlePrototype=65]="LuaParticlePrototype",_[_.LuaFluidEnergySourcePrototype=66]="LuaFluidEnergySourcePrototype",_[_.LuaHeatEnergySourcePrototype=67]="LuaHeatEnergySourcePrototype",_[_.LuaVoidEnergySourcePrototype=68]="LuaVoidEnergySourcePrototype",_[_.LuaFontPrototype=69]="LuaFontPrototype",_[_.LuaQualityPrototype=70]="LuaQualityPrototype",_[_.LuaSpaceLocationPrototype=71]="LuaSpaceLocationPrototype",_[_.LuaPlanetType=72]="LuaPlanetType",_[_.LuaUndoRedoStackType=73]="LuaUndoRedoStackType",_[_.LuaSurfacePropertyPrototype=74]="LuaSurfacePropertyPrototype",_[_.LuaCustomEventPrototype=75]="LuaCustomEventPrototype",_[_.LuaSpaceConnectionPrototype=76]="LuaSpaceConnectionPrototype",_[_.LuaActiveTriggerPrototype=77]="LuaActiveTriggerPrototype",_[_.LuaSpacePlatformType=78]="LuaSpacePlatformType",_[_.LuaHeatBufferPrototype=79]="LuaHeatBufferPrototype",_[_.LuaWireConnectorType=80]="LuaWireConnectorType",_[_.LuaAsteroidChunkPrototype=81]="LuaAsteroidChunkPrototype",_[_.LuaLogisticSection=82]="LuaLogisticSection",_[_.LuaRailEnd=83]="LuaRailEnd",_[_.LuaNamedNoiseFunction=84]="LuaNamedNoiseFunction",_[_.LuaCollisionLayerPrototype=85]="LuaCollisionLayerPrototype",_[_.LuaSimulationType=86]="LuaSimulationType",_[_.LuaAirbornePollutionPrototype=87]="LuaAirbornePollutionPrototype",_[_.LuaItem=88]="LuaItem",_[_.LuaTrainManager=89]="LuaTrainManager",_[_.LuaRenderObject=90]="LuaRenderObject",_[_.LuaRecord=91]="LuaRecord",_[_.LuaBurnerUsagePrototype=92]="LuaBurnerUsagePrototype",_[_.LuaSurfacePrototype=93]="LuaSurfacePrototype",_[_.LuaProcessionPrototype=94]="LuaProcessionPrototype",_[_.LuaProcessionLayerInheritanceGroupPrototype=95]="LuaProcessionLayerInheritanceGroupPrototype",_[_.LuaLogisticSections=96]="LuaLogisticSections",_[_.xLuaFutureObject=-1]="xLuaFutureObject",_))(ls||{}),bt=(R=>(R[R.None=0]="None",R[R.EntityInventory=1]="EntityInventory",R[R.ControllerInventory=2]="ControllerInventory",R[R.ItemEntity=3]="ItemEntity",R[R.EntityCursorStack=4]="EntityCursorStack",R[R.ControllerCursorStack=5]="ControllerCursorStack",R[R.Inserter=6]="Inserter",R[R.ItemWithInventory=7]="ItemWithInventory",R[R.BeltConnectable=8]="BeltConnectable",R[R.Equipment=9]="Equipment",R[R.TargetableInventory=10]="TargetableInventory",R[R.TargetableItemStack=11]="TargetableItemStack",R[R.PlayerBlueprint=12]="PlayerBlueprint",R[R.ScriptInventory=13]="ScriptInventory",R[R.LinkedInventory=14]="LinkedInventory",R))(bt||{}),us=(E=>(E[E.Container=1]="Container",E[E.GenericOnOff=2]="GenericOnOff",E[E.Inserter=3]="Inserter",E[E.Lamp=4]="Lamp",E[E.LogisticContainer=5]="LogisticContainer",E[E.Roboport=6]="Roboport",E[E.StorageTank=7]="StorageTank",E[E.TrainStop=8]="TrainStop",E[E.DeciderCombinator=9]="DeciderCombinator",E[E.ArithmeticCombinator=10]="ArithmeticCombinator",E[E.ConstantCombinator=11]="ConstantCombinator",E[E.TransportBelt=12]="TransportBelt",E[E.Accumulator=13]="Accumulator",E[E.RailSignal=14]="RailSignal",E[E.Wall=15]="Wall",E[E.MiningDrill=16]="MiningDrill",E[E.ProgrammableSpeaker=17]="ProgrammableSpeaker",E[E.RailChainSignal=18]="RailChainSignal",E))(us||{}),ln=(u=>(u[u.ItemProduction=1]="ItemProduction",u[u.FluidProduction=2]="FluidProduction",u[u.KillCount=3]="KillCount",u[u.EntityBuild=6]="EntityBuild",u[u.ElectricNetwork=7]="ElectricNetwork",u[u.Pollution=8]="Pollution",u))(ln||{}),as=class{version;data;gcid=0;gcidmap=[];gcidmaps;constructor(e){this.version=Dt.load(e.read(9)),this.data={},this.gcidmaps={};let t=e.readUInt32LE();for(let n=0;n<t;n++){let o=e.readPackedUInt_8_32(),s=e.readString(o),u=e.readPackedUInt_8_32(),f=new ir(e.read(u));Dt.load(f.read(9)),this.gcid=0,this.gcidmap=[];let d=this.loadLuaValue(f);if(f.readableLength>0)throw new Error(`Data for ${s} not fully consumed, ${f.readableLength} bytes left`);e.readUInt8(),this.data[s]=d,this.gcidmaps[s]=this.gcidmap}}find(e,t){return this.gcidmaps[e][t]}loadLuaValue(e){let t=e.readUInt8(),n=ss[t];switch(n){case"Nil":case"BoolFalse":case"BoolTrue":return{type:n};case"Number":{let s=e.readDoubleLE();return{type:n,value:s}}case"String":{let s=e.readPackedUInt_8_32(),u=e.readString(s);return{type:n,value:u}}case"TableWithMeta":case"Table":{let s=this.gcid++,u;if(n==="TableWithMeta"){let p=e.readPackedUInt_8_32();u=e.readString(p)}let f=e.readPackedUInt_8_32(),d=[];for(let p=0;p<f;p++){let m=this.loadLuaValue(e),y=this.loadLuaValue(e);d.push({key:m,value:y})}let c={type:n,id:s,values:d,meta:u};return this.gcidmap[s]=c,c}case"ExistingGCObject":let o=e.readPackedUInt_16_32();return{type:n,id:o};case"LuaObject":{let s="LuaObject",u=this.gcid++,f=e.readUInt32LE(),d=ls[f],c=this.loadLuaObjectData(f,e);return{type:s,id:u,value:Object.assign({type:d},c)}}default:throw new Error(`Invalid type ${n} in saved lua value`)}}loadLuaObjectData(e,t){switch(e){case 0:case 11:case 12:case 13:case 14:case 18:case 19:case 21:case 22:case 32:case 33:case 52:case 54:return{target:t.readUInt32LE()};case 10:return{};case 2:case 3:{let n=t.readUInt8(),o=t.readUInt16LE();return{force:n,id:o}}case 4:return{seed:[t.readUInt32LE(),t.readUInt32LE(),t.readUInt32LE()]};case 6:{let n=t.readUInt32LE(),o=t.readUInt32LE();return{entity:n,equipment:o}}case 7:{let n=t.readUInt8(),o=t.readUInt32LE();return{index:n,owner:o}}case 9:{let n=t.readUInt8(),o=t.readPackedUInt_8_32(),s=t.readUInt32LE();return{force:n,surface:o,target:s}}case 8:return this.version.isBeyond(1,2,1,4)?{id:t.readUInt16LE()}:{id:t.readUInt8()};case 37:return this.version.isBeyond(1,2,0,3)?{id:t.readUInt16LE()}:{id:t.readUInt8()};case 5:case 40:case 42:case 49:case 51:case 57:case 58:case 60:case 61:case 62:return{id:t.readUInt8()};case 15:case 16:case 26:case 38:case 41:case 43:case 44:case 47:case 48:case 50:case 59:case 63:case 64:case 65:case 66:case 67:case 68:case 79:return{id:t.readUInt16LE()};case 56:case 84:return{id:t.readUInt32LE()};case 28:{let n={x:t.readInt32LE(),y:t.readInt32LE()},o=t.readPackedUInt_8_32();return{position:n,surface:o}}case 23:case 24:{let n=t.readUInt32LE(),o=t.readUInt32LE();return{player:n,index:o}}case 25:return this.version.isBeyond(1,2,7,1)?{target:t.readUInt32LE()}:{surface:t.readPackedUInt_8_32()};case 27:{let n=t.readUInt8(),o=t.readUInt16LE();return{group:n,subgroup:o}}case 29:{let n=t.readPackedUInt_8_32(),o={x:t.readInt32LE(),y:t.readInt32LE()};return{surface:n,position:o}}case 31:{let n=t.readUInt32LE(),o=t.readUInt8();return{target:n,index:o}}case 34:{let n=t.readUInt32LE(),o=t.readUInt32LE(),s=t.readUInt32LE(),u=t.readUInt32LE(),f=t.readUInt32LE(),d=t.readUInt8()!==0,c;if(d){let m=t.readUInt8(),y=t.readUInt16LE(),g=t.readUInt32LE();c={force:m,proto:y,linkid:g}}let p=t.readUInt8();return{entity:n,controller:o,item:s,equipment:u,scriptinv:f,link:c,index:p}}case 45:case 46:{let n=t.readUInt16LE(),o=t.readUInt16LE();return{entity:n,equipment:o}}case 53:{let n=t.readUInt16LE(),o=t.readUInt32LE(),s=t.readUInt8();return{entity:n,index:o,targettype:s}}case 55:return{stopped:t.readUInt8()!==0};case 69:{let n=t.readUInt8()!==0,o;if(n){let s=t.readPackedUInt_8_32();o=t.readString(s)}return{name:o}}case 39:{let n=t.readUInt32LE(),o=t.readUInt8(),s=t.readUInt8();return{target:n,connector:o,wire:s}}case 20:return this.loadLuaItemStack(t);case 35:return this.loadLuaControlBehavior(t);case 36:return this.loadLuaFlowStatistics(t);case 30:throw new Error(`LuaObject of type ${e} cannot have been saved`);default:throw new Error(`Unknown LuaObject type ${e}`)}}loadItemStackLocation(e){let t=this.version.isBeyond(1,2,0,33)?e.readUInt8():0;if(t!==0)return{standaloneStack:t};let n=e.readUInt8(),o=e.readUInt16LE();return{inventoryIndex:n,slotIndex:o}}loadLuaItemStack(e){let t=this.version.isBeyond(1,2,0,359)?e.readUInt8():e.readUInt32LE();switch(t){case 0:return{stacktype:bt[t]};case 1:case 2:case 7:case 9:{let n=e.readUInt32LE(),o;if(this.version.isBeyond(1,2,0,361))o=this.loadItemStackLocation(e);else{let s=e.readUInt8(),u=e.readUInt16LE();o={inventoryIndex:s,slotIndex:u}}return{stacktype:bt[t],target:n,location:o}}case 3:case 4:case 5:case 6:case 12:{let n=e.readUInt32LE();return{stacktype:bt[t],target:n}}case 8:{let n=e.readUInt32LE(),o=e.readUInt8(),s=e.readUInt8();return{stacktype:bt[t],target:n,line:o,item:s}}case 10:throw new Error(`LuaItemStack type ${t} cannot have been saved`);case 11:return{stacktype:bt[t]};case 13:{let n=e.readUInt32LE(),o=e.readUInt16LE();return{stacktype:bt[t],target:n,slot:o}}case 14:{let n=e.readUInt8(),o=e.readUInt16LE(),s=e.readUInt32LE();return{stacktype:bt[t],force:n,proto:o,linkid:s}}default:throw new Error(`Unknown LuaItemStack type ${t}`)}}loadLuaControlBehavior(e){let t=e.readUInt32LE(),n=e.readUInt32LE();return{behavior:us[t],target:n}}loadLuaFlowStatistics(e){let t=e.readUInt32LE();switch(t){case 1:case 2:case 3:case 6:let n=e.readUInt8();return{flow:ln[t],force:n};case 7:let o=e.readUInt32LE();return{flow:ln[t],target:o};case 8:return{flow:ln[t]};default:throw new Error(`Unknown LuaFlowStatistics type ${t}`)}}};var Zd=require("stream"),ir=class extends Zd.Readable{constructor(e){super(),this.push(e),this.push(null)}readUInt8(){return this.read(1).readUInt8()}readUInt16LE(){return this.read(2).readUInt16LE()}readUInt32LE(){return this.read(4).readUInt32LE()}readInt32LE(){return this.read(4).readInt32LE()}readBigInt64LE(){return this.read(8).readBigInt64LE()}readBigUInt64LE(){return this.read(8).readBigUInt64LE()}readDoubleLE(){return this.read(8).readDoubleLE()}readPackedUInt_8_32(){let e=this.readUInt8();return e===255&&(e=this.readUInt32LE()),e}readPackedUInt_16_32(){let e=this.readUInt16LE();return e===65535&&(e=this.readUInt32LE()),e}readString(e){return e===0?"":this.read(e).toString("utf8")}};var un=le(of()),Be=le(require("os")),te=le(require("path"));var af=require("child_process");function Co(a,e){return a.match(/^~[\\\/]/)&&(a=te.posix.join(Be.homedir().replace(/\\/g,"/"),a.replace(/^~[\\\/]/,""))),a=a.replace("${userHome}",Be.homedir()),e?.[0]&&(a=a.replace("${workspaceFolder}",e[0].uri.fsPath)),a=a.replace(/\$\{env:(\w+)}/g,(t,n)=>process.env[n]??t),a}var fs=class{constructor(e,t,n,o){this.fs=e;this.fv=t;this.docs=n;this.workspaceFolders=o}async getBinaryVersion(){return new Promise((e,t)=>{(0,af.execFile)(this.factorioPath,["--version"],{env:Object.assign({},process.env,{SteamAppId:"427520"})},(n,o,s)=>{n&&t(n);let u=o?.match(/^Version: ([0-9\.]+) /m);u&&e(u[1]),t(new Error(`Unable to read version:
3380
- stdout: ${o}
3381
- stderr: ${s}`))})})}async debugLaunchArgs(){let e=[];return e.push(this.factorioPath),this.fv.docsPath&&e.push("--docs",this.fv.docsPath),this.configPathIsOverriden()&&e.push("--config",await this.configPath()),this.workspaceFolders&&e.push("--workspace",...this.workspaceFolders.map(t=>t.uri.fsPath)),e}get name(){return this.fv.name}get factorioPath(){return Co(this.fv.factorioPath,this.workspaceFolders)}get docArgs(){return this.fv.onlineDocs?["luals-addon","-o",this.fv.onlineDocs===!0?"latest":this.fv.onlineDocs]:["luals-addon","-d",this.docsPath,"-p",this.protosPath]}get docsPath(){return te.join(this.factorioPath,this.fv.docsPath?this.fv.docsPath:Be.platform()==="darwin"?"../../doc-html/runtime-api.json":"../../../doc-html/runtime-api.json")}get protosPath(){return te.join(this.factorioPath,this.fv.protosPath?this.fv.protosPath:this.fv.docsPath?te.join(this.fv.docsPath,"../prototype-api.json"):Be.platform()==="darwin"?"../../doc-html/prototype-api.json":"../../../doc-html/prototype-api.json")}configPathIsOverriden(){return!!this.fv.configPath}async configPath(){if(this.fv.configPath)return Co(this.fv.configPath,this.workspaceFolders);let e=te.resolve(te.dirname(this.factorioPath),"../../config-path.cfg");try{let t=un.parse((await this.fs.readFile(Ae.file(e))).toString());return te.resolve(this.translatePath(t["config-path"]),"./config.ini")}catch{}return this.translatePath("__PATH__system-write-data__/config/config.ini")}get nativeDebugger(){return this.fv.nativeDebugger&&Co(this.fv.nativeDebugger,this.workspaceFolders)}get nativeDAP(){return this.fv.nativeDAP}iniData;async configIni(){return this.iniData||(this.iniData=this.fs.readFile(Ae.file(await this.configPath())).then(e=>un.parse(e.toString()))),this.iniData}async isPrototypeCacheEnabled(){try{return(await this.configIni()).other?.["cache-prototype-data"]}catch{return}}async disablePrototypeCache(){this.iniData=void 0;let e=Ae.file(await this.configPath()),t=(await this.fs.readFile(e)).toString();t=t.replace("cache-prototype-data=","; cache-prototype-data="),await this.fs.writeFile(e,Buffer.from(t)),this.iniData=un.parse(t)}async isMouseAutoCaptureDisabled(){try{return(await this.configIni()).other?.["disable-mouse-auto-capture"]}catch{return}}async disableMouseAutoCapture(){this.iniData=void 0;let e=Ae.file(await this.configPath()),t=(await this.fs.readFile(e)).toString(),n=t.match(/^;? *disable-mouse-auto-capture=.*$/m);if(n)t=t.slice(0,n.index)+`
3382
- disable-mouse-auto-capture=true
3383
- `+t.slice(n.index+n[0].length);else{let o=t.match(/^\[other\]$/m);t=t.slice(0,o.index+o[0].length)+`
3384
- disable-mouse-auto-capture=true
3385
- `+t.slice(o.index+o[0].length)}await this.fs.writeFile(e,Buffer.from(t)),this.iniData=un.parse(t)}async defaultModsPath(){let e=(await this.configIni())?.path?.["write-data"];if(!e)throw"path.write-data missing in config.ini";return te.posix.normalize(te.resolve(this.translatePath(e),"mods"))}async dataPath(){let e=(await this.configIni().catch(()=>({path:{"read-data":"__PATH__executable__/../../data"}}))).path?.["read-data"];if(!e)throw"path.read-data missing in config.ini";return te.posix.normalize(this.translatePath(e))}async lualibPath(){return te.posix.normalize(te.resolve(await this.dataPath(),"core","lualib"))}async writeDataPath(){let e=(await this.configIni()).path?.["write-data"];if(!e)throw"path.write-data missing in config.ini";return te.posix.normalize(this.translatePath(e))}translatePath(e){if(e.startsWith("__PATH__executable__"))return te.join(te.dirname(this.factorioPath),e.replace("__PATH__executable__",""));if(e.startsWith("__PATH__system-write-data__")){let t=Be.platform()==="win32"?te.resolve(process.env.APPDATA,"Factorio"):Be.platform()==="linux"?te.resolve(Be.homedir(),".factorio"):Be.platform()==="darwin"?te.resolve(Be.homedir(),"Library/Application Support/factorio"):"??";return te.join(t,e.replace("__PATH__system-write-data__",""))}if(e.startsWith("__PATH__system-read-data__")){let t=Be.platform()==="linux"?"/usr/share/factorio":Be.platform()==="darwin"?te.resolve(te.dirname(this.factorioPath),"../data"):te.resolve(te.dirname(this.factorioPath),"../../data");return te.join(t,e.replace("__PATH__system-read-data__",""))}return e}is(e){let t=this.fv;return t.name===e.name&&t.factorioPath===e.factorioPath&&t.nativeDebugger===e.nativeDebugger&&t.docsPath===e.docsPath&&t.protosPath===e.protosPath&&t.configPath===e.configPath}};0&&(module.exports={ActiveFactorioVersion,ApiDocGenerator,BufferSplitter,BufferStream,EncodingUtil,FactorioModDebugSession,LuaControlBehaviorType,LuaFlowStatisticsType,LuaItemStackType,LuaLSAddon,LuaObjectType,MapVersion,ModManager,ModSettings,PropertyTree,PropertyTreeType,ProtoDocGenerator,SavedLuaTypeTag,ScriptDat,getModInfo,substitutePathVariables});
3386
- /*! Bundled license information:
3387
-
3388
- web-streams-polyfill/dist/ponyfill.es2018.js:
3389
- (**
3390
- * @license
3391
- * web-streams-polyfill v3.3.3
3392
- * Copyright 2024 Mattias Buelens, Diwank Singh Tomer and other contributors.
3393
- * This code is released under the MIT license.
3394
- * SPDX-License-Identifier: MIT
3395
- *)
3396
-
3397
- fetch-blob/index.js:
3398
- (*! fetch-blob. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> *)
3399
-
3400
- formdata-polyfill/esm.min.js:
3401
- (*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> *)
3402
-
3403
- node-domexception/index.js:
3404
- (*! node-domexception. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> *)
3405
- */
3406
- //# sourceMappingURL=fmtk.js.map