luaut-parser 1.2.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +103 -28
- package/dist/index.cjs +769 -59
- package/dist/index.d.cts +127 -25
- package/dist/index.d.ts +127 -25
- package/dist/index.js +760 -49
- package/package.json +2 -2
- package/dist/luau.d.luaut +0 -245
- package/dist/roblox.d.luaut +0 -503
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "luaut-parser",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "luaut parser for roblox",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
25
|
"scripts": {
|
|
26
|
-
"test": "tsx scripts/test.ts",
|
|
26
|
+
"test": "tsx scripts/test.ts && tsx scripts/project.test.ts",
|
|
27
27
|
"build": "tsup",
|
|
28
28
|
"typecheck": "tsc --noEmit"
|
|
29
29
|
},
|
package/dist/luau.d.luaut
DELETED
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
-- Core Luau ambient definitions, written in luaut.
|
|
2
|
-
--
|
|
3
|
-
-- This file is the *only* place the analyzer learns what `type` and `typeof`
|
|
4
|
-
-- mean. There is no built-in table of result strings and no special case for
|
|
5
|
-
-- these names anywhere in `analyzeTypes` — narrowing is derived from the
|
|
6
|
-
-- overloads below, and any function you declare the same way narrows the same
|
|
7
|
-
-- way. Load it with `analyzeTypes(program, scopes, { libs: [luauLib] })`, or
|
|
8
|
-
-- `defaultLibs` for these plus the Roblox definitions.
|
|
9
|
-
--
|
|
10
|
-
-- Roblox-only globals (`game`, `task`, `Vector3`, ...) live in
|
|
11
|
-
-- `roblox.d.luaut`, which also adds the `typeof` overloads for the Roblox data
|
|
12
|
-
-- types. Overloads of one name accumulate across definitions files.
|
|
13
|
-
|
|
14
|
-
-- ============================================================
|
|
15
|
-
-- Truthiness
|
|
16
|
-
-- ------------------------------------------------------------
|
|
17
|
-
-- In Luau **only `nil` and `false` are falsy** — `0`, `0/0` and `""` are all
|
|
18
|
-
-- truthy, unlike JavaScript. `if x then` therefore tells you nothing about a
|
|
19
|
-
-- `number` or a `string`, and everything about a `T | nil`.
|
|
20
|
-
--
|
|
21
|
-
-- These two names are what the analyzer's truthiness narrowing computes, made
|
|
22
|
-
-- available to write down:
|
|
23
|
-
--
|
|
24
|
-
-- const function f(v: string | nil)
|
|
25
|
-
-- if v then ... end -- v: string (Truthy<string | nil>)
|
|
26
|
-
-- if not v then ... end -- v: nil (Extract<string | nil, Falsy>)
|
|
27
|
-
-- end
|
|
28
|
-
-- ============================================================
|
|
29
|
-
|
|
30
|
-
type Falsy = nil | false
|
|
31
|
-
type Truthy<T> = T - Falsy
|
|
32
|
-
|
|
33
|
-
-- ============================================================
|
|
34
|
-
-- Utility types
|
|
35
|
-
-- ------------------------------------------------------------
|
|
36
|
-
-- Written in luaut on top of `keyof`, `T[K]`, conditional types with `infer`,
|
|
37
|
-
-- and mapped types. None of these names is known to the analyzer.
|
|
38
|
-
-- ============================================================
|
|
39
|
-
|
|
40
|
-
-- `-` is set difference. Over a union it drops members; over a concrete type
|
|
41
|
-
-- it simplifies away; over an opaque type (`unknown`, an unresolved parameter)
|
|
42
|
-
-- it is *kept*, so `Exclude<unknown, 1>` stays `unknown - 1` rather than
|
|
43
|
-
-- forgetting what was ruled out.
|
|
44
|
-
type Exclude<T, U> = T - U
|
|
45
|
-
type Extract<T, U> = T extends U ? T : never
|
|
46
|
-
type NonNullable<T> = T - nil
|
|
47
|
-
|
|
48
|
-
type ReturnType<T> = T extends (...unknown) -> infer R ? R : never
|
|
49
|
-
type Parameters<T> = T extends (...infer P) -> unknown ? P : never
|
|
50
|
-
|
|
51
|
-
type Partial<T> = { [K in keyof T]?: T[K] }
|
|
52
|
-
type Required<T> = { [K in keyof T]-?: T[K] }
|
|
53
|
-
type Readonly<T> = { readonly [K in keyof T]: T[K] }
|
|
54
|
-
type Mutable<T> = { -readonly [K in keyof T]: T[K] }
|
|
55
|
-
|
|
56
|
-
type Pick<T, K> = { [P in K]: T[P] }
|
|
57
|
-
type Omit<T, K> = Pick<T, Exclude<keyof T, K>>
|
|
58
|
-
type Record<K, V> = { [P in K]: V }
|
|
59
|
-
|
|
60
|
-
-- ============================================================
|
|
61
|
-
-- The narrowing built-ins
|
|
62
|
-
-- ------------------------------------------------------------
|
|
63
|
-
-- Each result string gets its own overload returning that string as a
|
|
64
|
-
-- *literal* type. For `typeof(x) == "number"` the analyzer keeps the parameter
|
|
65
|
-
-- types of the overloads that can return `"number"` and narrows `x` to their
|
|
66
|
-
-- union; the `else` branch excludes them. The trailing generic signature is the
|
|
67
|
-
-- catch-all, tried only after every concrete one, so it never steals a match.
|
|
68
|
-
-- ============================================================
|
|
69
|
-
|
|
70
|
-
-- `type()`: the Lua base types.
|
|
71
|
-
declare function type(value: nil): "nil"
|
|
72
|
-
declare function type(value: boolean): "boolean"
|
|
73
|
-
declare function type(value: number): "number"
|
|
74
|
-
declare function type(value: string): "string"
|
|
75
|
-
declare function type(value: thread): "thread"
|
|
76
|
-
declare function type(value: buffer): "buffer"
|
|
77
|
-
declare function type(value: (...unknown) -> ...unknown): "function"
|
|
78
|
-
declare function type(value: { [unknown]: unknown }): "table"
|
|
79
|
-
declare function type<T>(value: T): string
|
|
80
|
-
|
|
81
|
-
-- `typeof()`: the same, plus (in `roblox.d.luaut`) the Roblox data types,
|
|
82
|
-
-- which it reports by name rather than as `userdata`.
|
|
83
|
-
declare function typeof(value: nil): "nil"
|
|
84
|
-
declare function typeof(value: boolean): "boolean"
|
|
85
|
-
declare function typeof(value: number): "number"
|
|
86
|
-
declare function typeof(value: string): "string"
|
|
87
|
-
declare function typeof(value: thread): "thread"
|
|
88
|
-
declare function typeof(value: buffer): "buffer"
|
|
89
|
-
declare function typeof(value: (...unknown) -> ...unknown): "function"
|
|
90
|
-
declare function typeof(value: { [unknown]: unknown }): "table"
|
|
91
|
-
declare function typeof<T>(value: T): string
|
|
92
|
-
|
|
93
|
-
-- ============================================================
|
|
94
|
-
-- Base library
|
|
95
|
-
-- ============================================================
|
|
96
|
-
|
|
97
|
-
declare _G: { [string]: unknown }
|
|
98
|
-
|
|
99
|
-
declare function require(module: unknown): unknown
|
|
100
|
-
declare function tostring(value: unknown): string
|
|
101
|
-
declare function tonumber(value: unknown, base?: number): number | nil
|
|
102
|
-
declare function print(...: unknown): ()
|
|
103
|
-
declare function warn(...: unknown): ()
|
|
104
|
-
-- `error` never returns, which is what lets
|
|
105
|
-
-- `if v == nil then error("...") end` narrow the rest of the block.
|
|
106
|
-
declare function error(message: unknown, level?: number): never
|
|
107
|
-
|
|
108
|
-
-- `asserts value` — narrows the *rest of the enclosing block*, the way
|
|
109
|
-
-- TypeScript's assertion signatures do:
|
|
110
|
-
--
|
|
111
|
-
-- const part = workspace:FindFirstChild("Part") -- Instance | nil
|
|
112
|
-
-- assert(part)
|
|
113
|
-
-- part.Name -- Instance, no `?`
|
|
114
|
-
|
|
115
|
-
declare function assert<T>(value: T, message?: string): asserts value
|
|
116
|
-
|
|
117
|
-
declare function pcall<T>(fn: (...unknown) -> T, ...: unknown): (boolean, T)
|
|
118
|
-
declare function xpcall<T>(fn: (...unknown) -> T, handler: (err: unknown) -> unknown, ...: unknown): (boolean, T)
|
|
119
|
-
declare function select(n: unknown, ...: unknown): unknown
|
|
120
|
-
declare function unpack<V>(list: V[], i?: number, j?: number): ...V
|
|
121
|
-
declare function rawget(t: unknown, key: unknown): unknown
|
|
122
|
-
declare function rawset<T>(t: T, key: unknown, value: unknown): T
|
|
123
|
-
declare function rawequal(a: unknown, b: unknown): boolean
|
|
124
|
-
declare function rawlen(t: unknown): number
|
|
125
|
-
declare function setmetatable<T>(t: T, mt: unknown): T
|
|
126
|
-
declare function getmetatable(t: unknown): unknown
|
|
127
|
-
declare function newproxy(addMeta?: boolean): unknown
|
|
128
|
-
declare function next<K, V>(t: { [K]: V }, key?: K): (K, V)
|
|
129
|
-
|
|
130
|
-
declare string: {
|
|
131
|
-
format: (fmt: string, ...unknown) -> string,
|
|
132
|
-
sub: (s: string, i: number, j?: number) -> string,
|
|
133
|
-
len: (s: string) -> number,
|
|
134
|
-
upper: (s: string) -> string,
|
|
135
|
-
lower: (s: string) -> string,
|
|
136
|
-
rep: (s: string, n: number, sep?: string) -> string,
|
|
137
|
-
reverse: (s: string) -> string,
|
|
138
|
-
split: (s: string, separator?: string) -> string[],
|
|
139
|
-
find: (s: string, pattern: string, init?: number, plain?: boolean) -> (number | nil, number | nil),
|
|
140
|
-
match: (s: string, pattern: string, init?: number) -> ...unknown,
|
|
141
|
-
gmatch: (s: string, pattern: string) -> () -> ...string,
|
|
142
|
-
gsub: (s: string, pattern: string, repl: unknown, n?: number) -> (string, number),
|
|
143
|
-
byte: (s: string, i?: number, j?: number) -> ...number,
|
|
144
|
-
char: (...number) -> string,
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
declare math: {
|
|
148
|
-
floor: (x: number) -> number,
|
|
149
|
-
ceil: (x: number) -> number,
|
|
150
|
-
abs: (x: number) -> number,
|
|
151
|
-
sqrt: (x: number) -> number,
|
|
152
|
-
min: (...number) -> number,
|
|
153
|
-
max: (...number) -> number,
|
|
154
|
-
clamp: (x: number, min: number, max: number) -> number,
|
|
155
|
-
round: (x: number) -> number,
|
|
156
|
-
sign: (x: number) -> number,
|
|
157
|
-
random: (m?: number, n?: number) -> number,
|
|
158
|
-
pow: (x: number, y: number) -> number,
|
|
159
|
-
log: (x: number, base?: number) -> number,
|
|
160
|
-
sin: (x: number) -> number,
|
|
161
|
-
cos: (x: number) -> number,
|
|
162
|
-
tan: (x: number) -> number,
|
|
163
|
-
atan2: (y: number, x: number) -> number,
|
|
164
|
-
rad: (deg: number) -> number,
|
|
165
|
-
deg: (rad: number) -> number,
|
|
166
|
-
huge: number,
|
|
167
|
-
pi: number,
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
declare table: {
|
|
171
|
-
insert: (t: unknown[], a: unknown, b?: unknown) -> (),
|
|
172
|
-
remove: (t: unknown[], pos?: number) -> unknown,
|
|
173
|
-
concat: (t: unknown[], sep?: string, i?: number, j?: number) -> string,
|
|
174
|
-
find: (t: unknown[], value: unknown, init?: number) -> number | nil,
|
|
175
|
-
sort: (t: unknown[], comp?: unknown) -> (),
|
|
176
|
-
clear: (t: unknown) -> (),
|
|
177
|
-
clone: (t: unknown) -> unknown,
|
|
178
|
-
freeze: (t: unknown) -> unknown,
|
|
179
|
-
isfrozen: (t: unknown) -> boolean,
|
|
180
|
-
create: (count: number, value?: unknown) -> unknown[],
|
|
181
|
-
pack: (...unknown) -> { n: number, [number]: unknown },
|
|
182
|
-
unpack: (list: unknown[], i?: number, j?: number) -> ...unknown,
|
|
183
|
-
move: (src: unknown[], a: number, b: number, t: number, dst?: unknown[]) -> unknown[],
|
|
184
|
-
keys: (t: unknown) -> unknown[],
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
declare os: {
|
|
188
|
-
time: (t?: unknown) -> number,
|
|
189
|
-
clock: () -> number,
|
|
190
|
-
date: (format?: string, time?: number) -> unknown,
|
|
191
|
-
difftime: (a: number, b: number) -> number,
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
declare coroutine: {
|
|
195
|
-
create: (fn: (...unknown) -> ...unknown) -> thread,
|
|
196
|
-
resume: (co: thread, ...unknown) -> ...unknown,
|
|
197
|
-
yield: (...unknown) -> ...unknown,
|
|
198
|
-
wrap: (fn: (...unknown) -> ...unknown) -> (...unknown) -> ...unknown,
|
|
199
|
-
status: (co: thread) -> string,
|
|
200
|
-
running: () -> thread,
|
|
201
|
-
isyieldable: () -> boolean,
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
declare utf8: {
|
|
205
|
-
char: (...number) -> string,
|
|
206
|
-
codepoint: (s: string, i?: number, j?: number) -> ...number,
|
|
207
|
-
len: (s: string, i?: number, j?: number) -> number | nil,
|
|
208
|
-
offset: (s: string, n: number, i?: number) -> number | nil,
|
|
209
|
-
nfdnormalize: (s: string) -> string,
|
|
210
|
-
nfcnormalize: (s: string) -> string,
|
|
211
|
-
charpattern: string,
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
declare bit32: {
|
|
215
|
-
band: (...number) -> number,
|
|
216
|
-
bor: (...number) -> number,
|
|
217
|
-
bxor: (...number) -> number,
|
|
218
|
-
bnot: (x: number) -> number,
|
|
219
|
-
lshift: (x: number, disp: number) -> number,
|
|
220
|
-
rshift: (x: number, disp: number) -> number,
|
|
221
|
-
arshift: (x: number, disp: number) -> number,
|
|
222
|
-
extract: (n: number, field: number, width?: number) -> number,
|
|
223
|
-
replace: (n: number, v: number, field: number, width?: number) -> number,
|
|
224
|
-
countlz: (n: number) -> number,
|
|
225
|
-
countrz: (n: number) -> number,
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
declare buffer: {
|
|
229
|
-
create: (size: number) -> buffer,
|
|
230
|
-
fromstring: (s: string) -> buffer,
|
|
231
|
-
tostring: (b: buffer) -> string,
|
|
232
|
-
len: (b: buffer) -> number,
|
|
233
|
-
readi8: (b: buffer, offset: number) -> number,
|
|
234
|
-
readu8: (b: buffer, offset: number) -> number,
|
|
235
|
-
readi32: (b: buffer, offset: number) -> number,
|
|
236
|
-
readu32: (b: buffer, offset: number) -> number,
|
|
237
|
-
readf64: (b: buffer, offset: number) -> number,
|
|
238
|
-
writei8: (b: buffer, offset: number, value: number) -> (),
|
|
239
|
-
writeu8: (b: buffer, offset: number, value: number) -> (),
|
|
240
|
-
writei32: (b: buffer, offset: number, value: number) -> (),
|
|
241
|
-
writeu32: (b: buffer, offset: number, value: number) -> (),
|
|
242
|
-
writef64: (b: buffer, offset: number, value: number) -> (),
|
|
243
|
-
copy: (dst: buffer, dstOffset: number, src: buffer, srcOffset?: number, count?: number) -> (),
|
|
244
|
-
fill: (b: buffer, offset: number, value: number, count?: number) -> (),
|
|
245
|
-
}
|