@swf2es/codegen 0.0.0-stage → 0.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.
@@ -0,0 +1,315 @@
1
+ /**
2
+ * Compiles ABC and AVM1 bytecode to ES modules.
3
+ *
4
+ * The compiler itself is AssemblyScript (assembly/), built to codegen.wasm.
5
+ * This wrapper instantiates it and gives its exports their types. The same wasm runs as the browser JIT
6
+ * (a module per ABC as its SWF loads) and as the ahead-of-time compiler,
7
+ * so both produce identical output. See docs/architecture/overview.md.
8
+ */
9
+ import { AIR_API_VERSION, API_VERSION } from "@swf2es/format";
10
+ /** Bumped whenever generated code or the runtime ABI it calls changes. */
11
+ export declare const COMPILER_VERSION = "0.0.0";
12
+ export { AIR_API_VERSION, API_VERSION };
13
+ /** The ABCs added to a compiler, by their indices: each one's hash, and whether it was added as a library. */
14
+ export interface AddedAbcs {
15
+ readonly hashes: readonly string[];
16
+ readonly builtins: readonly boolean[];
17
+ }
18
+ /**
19
+ * The log's entries made while only the first `count` ABCs, the libraries,
20
+ * were added, as a key names them: by the SHA-256 of libraryLog's text,
21
+ * taken once, since they are the same in every later module's context.
22
+ */
23
+ export interface LibraryDigest {
24
+ count: number;
25
+ digest: string;
26
+ }
27
+ /** The text whose SHA-256 is a LibraryDigest's, for ABC `index`, any added after the first `count`. */
28
+ export declare function libraryLog(codegen: Codegen, index: number, count: number): string;
29
+ /**
30
+ * The text of ABC `index`'s module cache key, whose UTF-8's SHA-256 is the
31
+ * key: what the module depends on, the compiler's identity, the API
32
+ * version, every ABC its domain sees, by hash and whether it is a library,
33
+ * those added after it included, its own place among them, and the
34
+ * compiler's log about them (see Codegen.context), the libraries' part by
35
+ * its digest once taken. The player's module cache and the swf2es command
36
+ * both key by it, so that the command's modules are the cache's. Null
37
+ * where there is no context.
38
+ */
39
+ export declare function moduleKey(codegen: Codegen, index: number, abcs: AddedAbcs, libraries: LibraryDigest | null): string | null;
40
+ /**
41
+ * A SWF's AVM1 action blocks, as format's readActions lists them: the SWF's
42
+ * version and each block's range in its decompressed bytes.
43
+ */
44
+ export interface ActionBlocks {
45
+ readonly version: number;
46
+ readonly blocks: readonly {
47
+ readonly offset: number;
48
+ readonly length: number;
49
+ }[];
50
+ }
51
+ /** What a SWF's action blocks compile to: one module, and each block's entry in it. */
52
+ export interface CompiledActions {
53
+ module: string;
54
+ /** By block index: the block's entry in the module, as it compiles alone. */
55
+ entries: string[];
56
+ /** By key, each unit in the module's units, as it compiles alone. */
57
+ units: Map<string, ModuleUnit>;
58
+ }
59
+ /**
60
+ * Where control goes on in a unit, as V.far is called: an offset in the
61
+ * SWF's decompressed bytes, where the region it goes on in ends, where its
62
+ * actions' bytes end, and whether it runs as a SWF 5's function. The
63
+ * module's units are keyed by these, joined with commas.
64
+ */
65
+ export interface ActionUnit {
66
+ readonly at: number;
67
+ readonly end: number;
68
+ readonly bound: number;
69
+ readonly five: boolean;
70
+ }
71
+ /**
72
+ * A unit's code, and what it depends on: it runs as well for any region
73
+ * that ends at or past `high` whose actions' bytes end at or past `reach`,
74
+ * -1 for only the one it was compiled for.
75
+ */
76
+ export interface CompiledUnit {
77
+ code: string;
78
+ high: number;
79
+ reach: number;
80
+ }
81
+ /** A unit of a module's units, and what it was compiled for. */
82
+ export interface ModuleUnit extends CompiledUnit {
83
+ unit: ActionUnit;
84
+ }
85
+ /**
86
+ * The text of the module cache key of a SWF's AVM1 module, whose UTF-8's
87
+ * SHA-256 is the key: the compiler's identity, the SWF's version, which
88
+ * picks the operations its code calls, and `hash`, the SHA-256 of the
89
+ * SWF's decompressed bytes, which hold its blocks. An AVM1 module links to
90
+ * nothing, so nothing else goes in.
91
+ */
92
+ export declare function actionsKey(codegen: Codegen, hash: string, version: number): string;
93
+ /**
94
+ * A definition an application domain has found by name, or as a type,
95
+ * which is not the first one from the root down, as the runtime reports it:
96
+ * what the domain's later ABCs compile against (see Codegen.found).
97
+ */
98
+ export interface FoundDefinition {
99
+ /** The application domain that found it. */
100
+ domain: number;
101
+ /** The name's namespace: its kind (0 public, 1 package-internal, ...) and URI. */
102
+ nsKind: number;
103
+ uri: string;
104
+ name: string;
105
+ /** The ABC that defines it, by its position among those added. */
106
+ abc: number;
107
+ /** Found as a type (avmplus' cached traits), else by name (cached scripts). */
108
+ asType: boolean;
109
+ }
110
+ export interface AbcVersion {
111
+ major: number;
112
+ minor: number;
113
+ }
114
+ /** What an ABC compiles to: its module, the module's source map, and each compiled method body's entry in it. */
115
+ export interface Compiled {
116
+ module: string;
117
+ /** JSON: the module's lines mapped to the AS3 lines debugline names. */
118
+ sourceMap: string;
119
+ /** By method body index: the body's entry in the module's F, as the JIT compiles it alone. */
120
+ entries: Map<number, string>;
121
+ }
122
+ /**
123
+ * What ABC `index`'s module depends on in the domain beyond the ABCs'
124
+ * bytes (see Codegen.context).
125
+ */
126
+ export interface ModuleContext {
127
+ /** The ABCs its application domain sees, by their positions among those added, in load order. */
128
+ abcs: number[];
129
+ /** Its own place in `abcs`. */
130
+ own: number;
131
+ /**
132
+ * The domain's log about those ABCs, in order: the lazy answers fixed so
133
+ * far and the findings recorded, each with how many of `abcs` there were.
134
+ */
135
+ log: string;
136
+ }
137
+ /** A module compiled, and what compiling it fixed in the domain, to replay in its place (Codegen.replay); null where it cannot be. */
138
+ export interface LoggedModule {
139
+ module: string;
140
+ log: string | null;
141
+ }
142
+ /**
143
+ * The compiler. ABCs are added to a domain in the order the SWF loads them
144
+ * (the builtins first), and the last one added compiles, whole or a method
145
+ * at a time, to code that is byte for byte the same either way.
146
+ */
147
+ export interface Codegen {
148
+ /**
149
+ * The identity of this codegen.wasm, a hash of its bytes that its build
150
+ * stamps it with; null for one built without it.
151
+ */
152
+ readonly identity: string | null;
153
+ /** The version at the start of an ABC block, or null if it is too short. */
154
+ abcVersion(abc: Uint8Array): AbcVersion | null;
155
+ /**
156
+ * Start a domain whose user ABCs have API version `apiVersion`: Flash
157
+ * Player's, API_VERSION, by default, or AIR's, AIR_API_VERSION; one
158
+ * that is neither series' (checkApiVersion) is a RangeError.
159
+ */
160
+ reset(apiVersion?: number): void;
161
+ /** The API version of the last reset. */
162
+ readonly apiVersion: number;
163
+ /**
164
+ * Add an ABC, loaded into application domain `appDomain` (0, the root, by
165
+ * default), linking it against what that domain sees of those before it;
166
+ * 0, or the VerifyError it was rejected with (then it is not added).
167
+ * Throws for an application domain never made, or dropped.
168
+ */
169
+ add(abc: Uint8Array, builtin?: boolean, appDomain?: number): number;
170
+ /** A new application domain, a child of `parent`: its number. Throws for a `parent` never made, or dropped. */
171
+ childDomain(parent: number): number;
172
+ /**
173
+ * Drop application domain `appDomain` and its descendants once nothing
174
+ * can run their code: no other sees their ABCs, which compile no more,
175
+ * and compact reuses the memory they took. The indices of the ABCs added
176
+ * after them do not change, and neither does what those compile to.
177
+ * Nothing, if `epoch` is given and the domain was reset since.
178
+ */
179
+ dropDomain(appDomain: number, epoch?: number): void;
180
+ /**
181
+ * How many times `reset` has started a domain: a host that keeps the
182
+ * number a domain had passes it to dropDomain, which then drops nothing
183
+ * if the domain was reset since, as when another player took the Codegen
184
+ * over and its numbers are another domain's.
185
+ */
186
+ readonly epoch: number;
187
+ /**
188
+ * Rebuild the domain without the ABCs of dropped and evicted domains, if
189
+ * memory would otherwise grow and they hold enough to keep it from
190
+ * growing: whether it did. A rebuild links every live ABC again, tens of
191
+ * milliseconds for a large application, so a host calls this when it has
192
+ * time, as when idle; nothing else does.
193
+ */
194
+ compact(): boolean;
195
+ /**
196
+ * What the ABCs hold of codegen's memory, roughly, in bytes: the live
197
+ * ones', and the dropped and evicted domains' that compact would free;
198
+ * and the size of codegen's memory, which never shrinks.
199
+ */
200
+ usage(): {
201
+ live: number;
202
+ dead: number;
203
+ memory: number;
204
+ };
205
+ /**
206
+ * Evict application domain `appDomain` and its descendants while the host
207
+ * has no use for them, as once their ABCs are compiled: as dropped, but
208
+ * reviveDomain makes one live again. compact reuses what they took
209
+ * meanwhile, all but their findings, what was first resolved of them,
210
+ * and their ABCs' places.
211
+ */
212
+ evictDomain(appDomain: number): void;
213
+ /** Whether application domain `appDomain` is live: made, and neither evicted nor dropped. */
214
+ isLive(appDomain: number): boolean;
215
+ /**
216
+ * Make evicted application domain `appDomain` live again, with its evicted
217
+ * ancestors, the first of them a child of a live domain: given all their
218
+ * ABCs again by their indices, as they were added, their ABCs link as
219
+ * they did, by one rebuild at most, and what they found holds. Throws if
220
+ * they cannot be.
221
+ */
222
+ reviveDomain(appDomain: number, abcs: Map<number, Uint8Array>): void;
223
+ /** Record a definition an application domain has found; it holds for the ABCs added after. */
224
+ found(definition: FoundDefinition): void;
225
+ /**
226
+ * ABC `index` compiled whole, the last added by default, against every ABC
227
+ * added so far, later ones included, so a SWF's DoABCs may all be added
228
+ * before any compiles; `hashes` are the ABCs' hashes in load order, as
229
+ * the cache key names them.
230
+ */
231
+ compile(hashes?: string[], index?: number): Compiled;
232
+ /**
233
+ * ABC `index`'s module alone, as `compile` writes it, for a host that
234
+ * loads it and needs neither its source map nor its entries: writing
235
+ * those too would add a large ABC's worth to codegen's memory, which
236
+ * never shrinks.
237
+ */
238
+ compileModule(hashes?: string[], index?: number): string;
239
+ /**
240
+ * An opt-in JIT module's tables and lazy factories. Its default export
241
+ * takes (rt, jit); jit(body, bindings) returns that body's factory.
242
+ * Verification still runs now to fix scopes against the current domain.
243
+ * This module is not an AOT module and must not enter the module cache.
244
+ */
245
+ compileLazyModule(hashes?: string[], index?: number): string;
246
+ /**
247
+ * Method bodies of ABC `index` (the last added by default) compiled
248
+ * alone, as the optional lazy JIT compiles each on first factory use;
249
+ * a native, unverified or unknown one is left out. Each is byte for byte
250
+ * its entry in the whole module.
251
+ */
252
+ compileMethods(bodies: number[], index?: number): Map<number, string>;
253
+ /**
254
+ * What ABC `index`'s module depends on beyond the ABCs' bytes, for a
255
+ * cache key: besides the ABCs its domain sees, what the domain has
256
+ * fixed of what resolves lazily, which a later ABC in an ancestor would
257
+ * change were it first asked now. Its log only of the entries made with
258
+ * more than `after` ABCs added, and `upTo` at most unless negative. Null
259
+ * for an ABC never added.
260
+ */
261
+ context(index?: number, after?: number, upTo?: number): ModuleContext | null;
262
+ /**
263
+ * A string that changes whenever a context might: a host that took one
264
+ * and finds this the same since need not take it again.
265
+ */
266
+ revision(): string;
267
+ /** compileModule, with what the compile fixed in the domain (see replay). */
268
+ compileModuleLogged(hashes?: string[], index?: number): LoggedModule;
269
+ /**
270
+ * Fix in the domain what compiling ABC `index` did, from the log
271
+ * compileModuleLogged gave with its module, in place of compiling it:
272
+ * the domain is then as the compile would have left it, if its context
273
+ * is the one that compile had. False if the log is malformed or an
274
+ * entry fails, after doing those before it.
275
+ */
276
+ replay(log: string, index?: number): boolean;
277
+ /**
278
+ * A SWF's AVM1 action blocks compiled to one module, `bytes` the SWF's
279
+ * decompressed bytes, which the blocks' ranges are of (format's
280
+ * `Swf.bytes`), with each block's entry in it. Needs no domain: AVM1 code
281
+ * links to nothing.
282
+ */
283
+ compileActions(bytes: Uint8Array, actions: ActionBlocks): CompiledActions;
284
+ /** compileActions' module alone. */
285
+ compileActionsModule(bytes: Uint8Array, actions: ActionBlocks): string;
286
+ /**
287
+ * Blocks of a SWF compiled alone, by index, as a JIT may compile each
288
+ * when it first runs: each byte for byte its entry in the SWF's module.
289
+ * An index with no block is left out.
290
+ */
291
+ compileActionBlocks(bytes: Uint8Array, actions: ActionBlocks, blocks: number[]): Map<number, string>;
292
+ /**
293
+ * A unit of a SWF compiled alone, as V.far asks for it when control first
294
+ * goes on there: byte for byte its entry in the module's units.
295
+ */
296
+ compileActionUnit(bytes: Uint8Array, actions: ActionBlocks, unit: ActionUnit): CompiledUnit;
297
+ /**
298
+ * Let go of the copy of a SWF compileActionBlocks and compileActionUnit
299
+ * keep, as the host lets the SWF go; it is let go too once `bytes` are
300
+ * collected, and when blocks or units of other SWFs are asked for since.
301
+ */
302
+ releaseActions(bytes: Uint8Array): void;
303
+ /** How many SWFs compileActionBlocks and compileActionUnit keep a copy of, and how many times they have copied one in. */
304
+ heldActions(): {
305
+ held: number;
306
+ copies: number;
307
+ };
308
+ }
309
+ /**
310
+ * Instantiate the compiler from a compiled codegen.wasm module. Loading the
311
+ * bytes is left to the caller (fetch in browsers, fs in node), which keeps
312
+ * this package free of I/O. The file ships as `@swf2es/codegen/codegen.wasm`.
313
+ */
314
+ export declare function createCodegen(module: WebAssembly.Module): Promise<Codegen>;
315
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}