@scriptc/compiler 0.3.4 → 0.3.6
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/ambient/scriptc-node-fallback.d.ts +409 -42
- package/dist/backend/llvm/array-search.js +1 -1
- package/dist/backend/llvm/array-search.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.d.ts +6 -0
- package/dist/backend/llvm/call-lifetimes.js +19 -0
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +2 -21
- package/dist/backend/llvm/constant-callbacks.js +36 -219
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +22 -0
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +9 -0
- package/dist/backend/llvm/dense-array-access.js +27 -1
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +6 -0
- package/dist/backend/llvm/dyn.js +71 -7
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +120 -2
- package/dist/backend/llvm/emitter.js +820 -142
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +17 -7
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +1 -1
- package/dist/backend/llvm/expr-callbacks.d.ts +11 -0
- package/dist/backend/llvm/expr-callbacks.js +53 -0
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +88 -2
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +50 -27
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-dispatch.js +1 -0
- package/dist/backend/llvm/expr-dispatch.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +25 -1
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.d.ts +1 -1
- package/dist/backend/llvm/expr-primitives.js +20 -1
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +4 -0
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/integer-clones.d.ts +103 -0
- package/dist/backend/llvm/integer-clones.js +1336 -0
- package/dist/backend/llvm/integer-clones.js.map +1 -0
- package/dist/backend/llvm/integer-clones.test.d.ts +1 -0
- package/dist/backend/llvm/integer-clones.test.js +219 -0
- package/dist/backend/llvm/integer-clones.test.js.map +1 -0
- package/dist/backend/llvm/lib-datagram.js +14 -0
- package/dist/backend/llvm/lib-datagram.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +32 -1
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +61 -1
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +21 -3
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +34 -0
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +77 -2
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-test.js +16 -3
- package/dist/backend/llvm/lib-test.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +6 -0
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +1 -1
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/map-entry-fusion.d.ts +28 -0
- package/dist/backend/llvm/map-entry-fusion.js +233 -0
- package/dist/backend/llvm/map-entry-fusion.js.map +1 -0
- package/dist/backend/llvm/map-entry-fusion.test.d.ts +1 -0
- package/dist/backend/llvm/map-entry-fusion.test.js +183 -0
- package/dist/backend/llvm/map-entry-fusion.test.js.map +1 -0
- package/dist/backend/llvm/map-number-lookup.d.ts +2 -0
- package/dist/backend/llvm/map-number-lookup.js +1 -1
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +10 -11
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.d.ts +2 -0
- package/dist/backend/llvm/map-read-lifetimes.js +3 -0
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
- package/dist/backend/llvm/nullable-unions.d.ts +6 -3
- package/dist/backend/llvm/nullable-unions.js +2 -0
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +16 -0
- package/dist/backend/llvm/publish.js +81 -10
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/publish.test.d.ts +1 -0
- package/dist/backend/llvm/publish.test.js +94 -0
- package/dist/backend/llvm/publish.test.js.map +1 -0
- package/dist/backend/llvm/record-results.d.ts +1 -1
- package/dist/backend/llvm/record-results.js +78 -4
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/record-sources.d.ts +7 -0
- package/dist/backend/llvm/record-sources.js +14 -0
- package/dist/backend/llvm/record-sources.js.map +1 -0
- package/dist/backend/llvm/reference-writes.js +1 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +12 -3
- package/dist/backend/llvm/shapes.js +23 -14
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +5 -3
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.d.ts +74 -0
- package/dist/backend/llvm/speculative-integers.js +571 -0
- package/dist/backend/llvm/speculative-integers.js.map +1 -0
- package/dist/backend/llvm/speculative-integers.test.d.ts +1 -0
- package/dist/backend/llvm/speculative-integers.test.js +148 -0
- package/dist/backend/llvm/speculative-integers.test.js.map +1 -0
- package/dist/backend/llvm/string-lifetimes.test.js +75 -1
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +17 -0
- package/dist/backend/llvm/walkers.js +123 -0
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.js +2 -0
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +2 -1
- package/dist/backend/native/executable.js +6 -1
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +1 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack.d.ts +7 -3
- package/dist/backend/runtime-pack.js +12 -6
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +16 -7
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/contracts/check.js +1 -0
- package/dist/contracts/check.js.map +1 -1
- package/dist/coverage/surface-manifest.js +3 -3
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +1 -1
- package/dist/diagnostics/diagnostic.js +6 -2
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/frontend/lowering/builtin-calls.js +13 -0
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/callable-aliases.js +82 -8
- package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-async.d.ts +8 -6
- package/dist/frontend/lowering/builtins/child-process-async.js +45 -29
- package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
- package/dist/frontend/lowering/builtins/compression.d.ts +9 -0
- package/dist/frontend/lowering/builtins/compression.js +145 -30
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.js +12 -1
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.js +5 -3
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +6 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +16 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.d.ts +8 -0
- package/dist/frontend/lowering/builtins/filesystem.js +199 -2
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-streams.d.ts +26 -0
- package/dist/frontend/lowering/builtins/fs-streams.js +131 -0
- package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -0
- package/dist/frontend/lowering/builtins/hash-stream.d.ts +12 -0
- package/dist/frontend/lowering/builtins/hash-stream.js +80 -0
- package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-calls.js +17 -3
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.js +9 -2
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +45 -13
- package/dist/frontend/lowering/builtins/readline.js +812 -47
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/workers.d.ts +4 -0
- package/dist/frontend/lowering/builtins/workers.js +58 -0
- package/dist/frontend/lowering/builtins/workers.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.js +150 -8
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +55 -0
- package/dist/frontend/lowering/class-protocols.js +735 -0
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/containers/array-from-async.d.ts +18 -0
- package/dist/frontend/lowering/containers/array-from-async.js +282 -0
- package/dist/frontend/lowering/containers/array-from-async.js.map +1 -0
- package/dist/frontend/lowering/containers/bytes.js +33 -12
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.js +2 -1
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +27 -23
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/devirtualize.js +20 -7
- package/dist/frontend/lowering/devirtualize.js.map +1 -1
- package/dist/frontend/lowering/divergences.js +188 -15
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +129 -25
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.js +46 -1
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +55 -15
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +9 -1
- package/dist/frontend/lowering/lower-event-emitter.js +88 -1
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +4 -0
- package/dist/frontend/lowering/lower-exprs.js +239 -71
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +49 -3
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mock.d.ts +11 -1
- package/dist/frontend/lowering/lower-mock.js +377 -61
- package/dist/frontend/lowering/lower-mock.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +1 -0
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +2 -1
- package/dist/frontend/lowering/lower-server.js +234 -21
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +60 -13
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +1 -3
- package/dist/frontend/lowering/lower-stream.js +325 -20
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-test.js +147 -48
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +13 -1
- package/dist/frontend/lowering/lowerer.js +10 -2
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/null-prototype.d.ts +13 -0
- package/dist/frontend/lowering/null-prototype.js +33 -0
- package/dist/frontend/lowering/null-prototype.js.map +1 -0
- package/dist/frontend/lowering/record-sources.d.ts +15 -0
- package/dist/frontend/lowering/record-sources.js +46 -0
- package/dist/frontend/lowering/record-sources.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +3 -3
- package/dist/frontend/lowering/surfaces.js +59 -5
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/mock-shapes.d.ts +5 -0
- package/dist/frontend/mock-shapes.js +27 -2
- package/dist/frontend/mock-shapes.js.map +1 -1
- package/dist/frontend/program.js +5 -4
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +3 -0
- package/dist/frontend/type-mapper.js +148 -4
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.js +18 -8
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.d.ts +10 -0
- package/dist/ir/analysis.js +35 -0
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/analysis.test.js +69 -1
- package/dist/ir/analysis.test.js.map +1 -1
- package/dist/ir/builtin-effects.js +72 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +258 -13
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/capture-values.d.ts +107 -0
- package/dist/ir/capture-values.js +850 -0
- package/dist/ir/capture-values.js.map +1 -0
- package/dist/ir/capture-values.test.d.ts +1 -0
- package/dist/ir/capture-values.test.js +268 -0
- package/dist/ir/capture-values.test.js.map +1 -0
- package/dist/ir/field-values.d.ts +16 -0
- package/dist/ir/field-values.js +128 -0
- package/dist/ir/field-values.js.map +1 -0
- package/dist/ir/field-values.test.d.ts +1 -0
- package/dist/ir/field-values.test.js +160 -0
- package/dist/ir/field-values.test.js.map +1 -0
- package/dist/ir/final-fields.d.ts +4 -1
- package/dist/ir/final-fields.js +11 -3
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.test.js +2 -1
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/init-only-globals.d.ts +16 -0
- package/dist/ir/init-only-globals.js +121 -0
- package/dist/ir/init-only-globals.js.map +1 -0
- package/dist/ir/init-only-globals.test.d.ts +1 -0
- package/dist/ir/init-only-globals.test.js +115 -0
- package/dist/ir/init-only-globals.test.js.map +1 -0
- package/dist/ir/initializer-bindings.d.ts +18 -1
- package/dist/ir/initializer-bindings.js +91 -1
- package/dist/ir/initializer-bindings.js.map +1 -1
- package/dist/ir/initializer-bindings.test.js +57 -2
- package/dist/ir/initializer-bindings.test.js.map +1 -1
- package/dist/ir/int32-slots.d.ts +22 -0
- package/dist/ir/int32-slots.js +398 -13
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +119 -8
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loop-facts.d.ts +27 -1
- package/dist/ir/integer-loop-facts.js +239 -7
- package/dist/ir/integer-loop-facts.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +8 -5
- package/dist/ir/integer-ranges.js +147 -59
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +285 -7
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +22 -1
- package/dist/ir/ir.js +4 -0
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/property-bags.d.ts +14 -0
- package/dist/ir/property-bags.js +121 -0
- package/dist/ir/property-bags.js.map +1 -0
- package/dist/ir/receiver-readers.d.ts +21 -0
- package/dist/ir/receiver-readers.js +217 -0
- package/dist/ir/receiver-readers.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +3 -1
- package/dist/ir/runtime-features.js +102 -7
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/runtime-features.test.js +62 -0
- package/dist/ir/runtime-features.test.js.map +1 -1
- package/dist/ir/traverse.js +4 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +71 -3
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +59 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/int-infer.js +3 -0
- package/dist/library/int-infer.js.map +1 -1
- package/dist/library/ir-policy.js +5 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +57 -19
|
@@ -3,6 +3,7 @@ import {} from "../lowerer.js";
|
|
|
3
3
|
import { isJsSourceFile } from "../../program.js";
|
|
4
4
|
import { builtinModuleFnOf } from "../surfaces.js";
|
|
5
5
|
import { registerHttpClientFnBinding } from "../lower-server.js";
|
|
6
|
+
import { isPromisifiedZlibMember } from "./compression.js";
|
|
6
7
|
/** Compile-time util.promisify projections. The immutable result binding
|
|
7
8
|
* owns no runtime slot: calls rewrite to the target's promise lowering,
|
|
8
9
|
* while value uses remain explicit fences. Unsupported targets report at
|
|
@@ -13,9 +14,13 @@ export function isPromisifyCall(lowerer, init) {
|
|
|
13
14
|
e = e.expression;
|
|
14
15
|
if (!ts.isCallExpression(e) || e.questionDotToken)
|
|
15
16
|
return null;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const bi =
|
|
17
|
+
// `promisify(...)` over a named import, `util.promisify(...)` over a
|
|
18
|
+
// namespace or default import.
|
|
19
|
+
const bi = ts.isIdentifier(e.expression)
|
|
20
|
+
? lowerer.builtinImportOf(e.expression)
|
|
21
|
+
: ts.isPropertyAccessExpression(e.expression)
|
|
22
|
+
? lowerer.builtinMemberOf(e.expression)
|
|
23
|
+
: null;
|
|
19
24
|
if (!bi || bi.module !== "util" || bi.member !== "promisify")
|
|
20
25
|
return null;
|
|
21
26
|
return e;
|
|
@@ -57,6 +62,49 @@ export function registerBuiltinCallableAlias(lowerer, nameNode, init) {
|
|
|
57
62
|
});
|
|
58
63
|
return true;
|
|
59
64
|
}
|
|
65
|
+
/** The fs callback functions whose promisified form is the fs/promises
|
|
66
|
+
* member of the same name: the callback's single result is the promise's
|
|
67
|
+
* value and the errors are the same. fs.open (an fd number, where
|
|
68
|
+
* fs/promises.open gives a FileHandle), fs.exists (a custom promisify),
|
|
69
|
+
* and fs.read/fs.write (multi-value callbacks) are not in the set. */
|
|
70
|
+
const PROMISIFIED_FS_MEMBERS = new Set([
|
|
71
|
+
"access",
|
|
72
|
+
"appendFile",
|
|
73
|
+
"chmod",
|
|
74
|
+
"chown",
|
|
75
|
+
"copyFile",
|
|
76
|
+
"lchown",
|
|
77
|
+
"link",
|
|
78
|
+
"lstat",
|
|
79
|
+
"lutimes",
|
|
80
|
+
"mkdir",
|
|
81
|
+
"mkdtemp",
|
|
82
|
+
"readFile",
|
|
83
|
+
"readdir",
|
|
84
|
+
"readlink",
|
|
85
|
+
"realpath",
|
|
86
|
+
"rename",
|
|
87
|
+
"rm",
|
|
88
|
+
"rmdir",
|
|
89
|
+
"stat",
|
|
90
|
+
"statfs",
|
|
91
|
+
"symlink",
|
|
92
|
+
"truncate",
|
|
93
|
+
"unlink",
|
|
94
|
+
"utimes",
|
|
95
|
+
"writeFile",
|
|
96
|
+
]);
|
|
97
|
+
/** The global setTimeout/setImmediate as a promisify target, keyed like
|
|
98
|
+
* the node:timers exports they are. Node's util.promisify returns their
|
|
99
|
+
* custom promisified form, which is timers/promises' function of the same
|
|
100
|
+
* name. */
|
|
101
|
+
function globalTimerOf(lowerer, ident) {
|
|
102
|
+
if (ident.text !== "setTimeout" && ident.text !== "setImmediate")
|
|
103
|
+
return null;
|
|
104
|
+
if (!lowerer.isStdlibSymbol(lowerer.resolveValueSymbol(ident) ?? undefined))
|
|
105
|
+
return null;
|
|
106
|
+
return { module: "timers", member: ident.text };
|
|
107
|
+
}
|
|
60
108
|
export function registerPromisifiedBuiltinDecl(lowerer, nameNode, init) {
|
|
61
109
|
if (!init)
|
|
62
110
|
return false;
|
|
@@ -70,14 +118,40 @@ export function registerPromisifiedBuiltinDecl(lowerer, nameNode, init) {
|
|
|
70
118
|
if (!e)
|
|
71
119
|
return false;
|
|
72
120
|
const argNode = e.arguments.length === 1 ? e.arguments[0] : null;
|
|
73
|
-
|
|
121
|
+
// `promisify(exec)` over a named import, or `promisify(cp.exec)` over a
|
|
122
|
+
// namespace import.
|
|
123
|
+
const target = !argNode
|
|
124
|
+
? null
|
|
125
|
+
: ts.isIdentifier(argNode)
|
|
126
|
+
? (lowerer.builtinImportOf(argNode) ?? globalTimerOf(lowerer, argNode))
|
|
127
|
+
: ts.isPropertyAccessExpression(argNode)
|
|
128
|
+
? lowerer.builtinMemberOf(argNode)
|
|
129
|
+
: null;
|
|
74
130
|
const projection = target?.module === "child_process" && target.member === "execFile"
|
|
75
131
|
? { kind: "promisified-exec-file" }
|
|
76
|
-
: target?.module === "
|
|
77
|
-
? { kind: "promisified-
|
|
78
|
-
:
|
|
132
|
+
: target?.module === "child_process" && target.member === "exec"
|
|
133
|
+
? { kind: "promisified-exec" }
|
|
134
|
+
: target?.module === "fs" && PROMISIFIED_FS_MEMBERS.has(target.member)
|
|
135
|
+
? { kind: "promisified-builtin", module: "fs/promises", member: target.member }
|
|
136
|
+
: target?.module === "timers" &&
|
|
137
|
+
(target.member === "setTimeout" || target.member === "setImmediate")
|
|
138
|
+
? {
|
|
139
|
+
kind: "promisified-builtin",
|
|
140
|
+
module: "timers/promises",
|
|
141
|
+
member: target.member,
|
|
142
|
+
}
|
|
143
|
+
: target?.module === "stream" &&
|
|
144
|
+
(target.member === "finished" || target.member === "pipeline")
|
|
145
|
+
? {
|
|
146
|
+
kind: "promisified-builtin",
|
|
147
|
+
module: "stream/promises",
|
|
148
|
+
member: target.member,
|
|
149
|
+
}
|
|
150
|
+
: target?.module === "zlib" && isPromisifiedZlibMember(target.member)
|
|
151
|
+
? { kind: "promisified-zlib", member: target.member }
|
|
152
|
+
: null;
|
|
79
153
|
if (!projection) {
|
|
80
|
-
lowerer.noLowering("util.promisify of this target", argNode ?? e, "child_process.execFile and fs
|
|
154
|
+
lowerer.noLowering("util.promisify of this target", argNode ?? e, "child_process.exec, child_process.execFile, setTimeout, setImmediate, stream.finished, stream.pipeline, the zlib callback one-shots and the fs callback functions with an fs/promises counterpart are the supported targets");
|
|
81
155
|
}
|
|
82
156
|
const symbol = lowerer.checker.getSymbolAtLocation(nameNode);
|
|
83
157
|
if (symbol)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callable-aliases.js","sourceRoot":"","sources":["../../../../src/frontend/lowering/builtins/callable-aliases.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3C,OAAO,EAAgB,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"callable-aliases.js","sourceRoot":"","sources":["../../../../src/frontend/lowering/builtins/callable-aliases.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,11 +3,13 @@ import { type Lowerer } from "../lowerer.js";
|
|
|
3
3
|
import { type IrExpr, type SrcLoc } from "../../../ir/ir.js";
|
|
4
4
|
/** A call THROUGH a promisified-execFile binding:
|
|
5
5
|
* `execFileAsync(file, args?, options?)` → one call of the interned
|
|
6
|
-
* %execFileAsync helper
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
6
|
+
* %execFileAsync helper (with `shell`, a promisified-exec binding:
|
|
7
|
+
* `execAsync(command, options?)` → %execAsync, the command line run by
|
|
8
|
+
* /bin/sh -c as execSync runs it) — an ASYNC IR function (a throw
|
|
9
|
+
* becomes a rejection automatically) that runs the exec core
|
|
10
|
+
* synchronously and returns `{ stdout, stderr }`, exactly Node's
|
|
11
|
+
* promisified execFile/exec behind an already-settled promise (the
|
|
12
|
+
* fs/promises stance, divergence 23). Options are the exec-sync slice minus stdio (the async form always
|
|
11
13
|
* captures both streams, no echo): encoding must spell utf8, cwd/env/
|
|
12
14
|
* timeout lower, maxBuffer/windowsHide are accepted no-ops, killSignal
|
|
13
15
|
* only as its SIGTERM default. Rejections carry Node's async messages
|
|
@@ -15,4 +17,4 @@ import { type IrExpr, type SrcLoc } from "../../../ir/ir.js";
|
|
|
15
17
|
* and "spawn <file> ENOENT" with .code); Node's numeric `.code` on a
|
|
16
18
|
* Command-failed rejection (the exit status) is NOT carried —
|
|
17
19
|
* SEMANTICS.md divergence 50's stance. */
|
|
18
|
-
export declare function lowerExecFileAsyncCall(lowerer: Lowerer, expr: ts.CallExpression, loc: SrcLoc): IrExpr;
|
|
20
|
+
export declare function lowerExecFileAsyncCall(lowerer: Lowerer, expr: ts.CallExpression, loc: SrcLoc, shell?: boolean): IrExpr;
|
|
@@ -6,13 +6,16 @@ import {} from "../lowerer.js";
|
|
|
6
6
|
import { conditionalSpreadOf } from "../expressions/object-literals.js";
|
|
7
7
|
import { BOOL, F64, SPAWNRES_T, STRING, arrayOf, } from "../../../ir/ir.js";
|
|
8
8
|
import { optionMember } from "./arguments.js";
|
|
9
|
+
import { execResultShape } from "../../type-mapper.js";
|
|
9
10
|
/** A call THROUGH a promisified-execFile binding:
|
|
10
11
|
* `execFileAsync(file, args?, options?)` → one call of the interned
|
|
11
|
-
* %execFileAsync helper
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
12
|
+
* %execFileAsync helper (with `shell`, a promisified-exec binding:
|
|
13
|
+
* `execAsync(command, options?)` → %execAsync, the command line run by
|
|
14
|
+
* /bin/sh -c as execSync runs it) — an ASYNC IR function (a throw
|
|
15
|
+
* becomes a rejection automatically) that runs the exec core
|
|
16
|
+
* synchronously and returns `{ stdout, stderr }`, exactly Node's
|
|
17
|
+
* promisified execFile/exec behind an already-settled promise (the
|
|
18
|
+
* fs/promises stance, divergence 23). Options are the exec-sync slice minus stdio (the async form always
|
|
16
19
|
* captures both streams, no echo): encoding must spell utf8, cwd/env/
|
|
17
20
|
* timeout lower, maxBuffer/windowsHide are accepted no-ops, killSignal
|
|
18
21
|
* only as its SIGTERM default. Rejections carry Node's async messages
|
|
@@ -20,17 +23,31 @@ import { optionMember } from "./arguments.js";
|
|
|
20
23
|
* and "spawn <file> ENOENT" with .code); Node's numeric `.code` on a
|
|
21
24
|
* Command-failed rejection (the exit status) is NOT carried —
|
|
22
25
|
* SEMANTICS.md divergence 50's stance. */
|
|
23
|
-
export function lowerExecFileAsyncCall(lowerer, expr, loc) {
|
|
26
|
+
export function lowerExecFileAsyncCall(lowerer, expr, loc, shell = false) {
|
|
27
|
+
const what = shell ? "the promisified exec" : "the promisified execFile";
|
|
24
28
|
if (expr.arguments.length < 1 ||
|
|
25
|
-
expr.arguments.length > 3 ||
|
|
29
|
+
expr.arguments.length > (shell ? 2 : 3) ||
|
|
26
30
|
expr.arguments.some(ts.isSpreadElement)) {
|
|
27
|
-
lowerer.noLowering(
|
|
31
|
+
lowerer.noLowering(`${what} with this argument shape`, expr, shell
|
|
32
|
+
? "the supported form is execAsync(command, options?)"
|
|
33
|
+
: "the supported form is execFileAsync(file, args?, options?)");
|
|
28
34
|
}
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
35
|
+
const command = lowerer.lowerExprExpecting(expr.arguments[0], STRING);
|
|
36
|
+
// exec: /bin/sh -c <command>, execSync's lowering (the command string
|
|
37
|
+
// rides as the argv[1] the failure display reads); execFile: file + its
|
|
38
|
+
// args list.
|
|
39
|
+
const cmd = shell ? { kind: "strLit", value: "/bin/sh", type: STRING, loc } : command;
|
|
40
|
+
const argv = shell
|
|
41
|
+
? {
|
|
42
|
+
kind: "arrayLit",
|
|
43
|
+
elems: [{ kind: "strLit", value: "-c", type: STRING, loc }, command],
|
|
44
|
+
type: arrayOf(STRING),
|
|
45
|
+
loc,
|
|
46
|
+
}
|
|
47
|
+
: lowerChildArgsArg(lowerer, expr.arguments[1], loc);
|
|
48
|
+
const optsNode = expr.arguments[shell ? 1 : 2];
|
|
32
49
|
const emptyStr = { kind: "strLit", value: "", type: STRING, loc };
|
|
33
|
-
const helper = execFileAsyncHelper(lowerer, loc);
|
|
50
|
+
const helper = execFileAsyncHelper(lowerer, loc, shell);
|
|
34
51
|
const envRecT = { kind: "record", shapeId: helper.envShapeId };
|
|
35
52
|
const envRec = (has, pairs) => ({
|
|
36
53
|
kind: "recordLit",
|
|
@@ -47,7 +64,7 @@ export function lowerExecFileAsyncCall(lowerer, expr, loc) {
|
|
|
47
64
|
let timeout = numLit(0, loc);
|
|
48
65
|
if (optsNode) {
|
|
49
66
|
if (!ts.isObjectLiteralExpression(optsNode)) {
|
|
50
|
-
lowerer.noLowering(
|
|
67
|
+
lowerer.noLowering(`${what} with a non-literal options argument`, optsNode, "pass the options inline so each member can be checked");
|
|
51
68
|
}
|
|
52
69
|
for (const p of optsNode.properties) {
|
|
53
70
|
// The conditional-spread idiom carrying `env` — the portless
|
|
@@ -76,17 +93,17 @@ export function lowerExecFileAsyncCall(lowerer, expr, loc) {
|
|
|
76
93
|
};
|
|
77
94
|
continue;
|
|
78
95
|
}
|
|
79
|
-
lowerer.noLowering(
|
|
96
|
+
lowerer.noLowering(`${what} with this options spread`, p, "the one supported spread is the conditional `...(c ? { env: ... } : {})` (either orientation) — write other members inline");
|
|
80
97
|
}
|
|
81
98
|
const m = optionMember(p);
|
|
82
99
|
if (!m) {
|
|
83
|
-
lowerer.noLowering(
|
|
100
|
+
lowerer.noLowering(`${what} with this options shape`, p, "spreads and computed keys have no lowering — write each member inline");
|
|
84
101
|
}
|
|
85
102
|
switch (m.name) {
|
|
86
103
|
case "encoding": {
|
|
87
104
|
const t = lowerer.typeOf(m.value);
|
|
88
105
|
if (!t.isStringLiteralType() || (t.value !== "utf8" && t.value !== "utf-8")) {
|
|
89
|
-
lowerer.noLowering(
|
|
106
|
+
lowerer.noLowering(`${what} with a non-utf8 encoding`, m.value, 'outputs are captured as utf8 — pass { encoding: "utf8" } (Node\'s own default here)');
|
|
90
107
|
}
|
|
91
108
|
break;
|
|
92
109
|
}
|
|
@@ -108,12 +125,12 @@ export function lowerExecFileAsyncCall(lowerer, expr, loc) {
|
|
|
108
125
|
case "killSignal": {
|
|
109
126
|
const t = lowerer.typeOf(m.value);
|
|
110
127
|
if (!t.isStringLiteralType() || t.value !== "SIGTERM") {
|
|
111
|
-
lowerer.noLowering(
|
|
128
|
+
lowerer.noLowering(`${what} with a non-default killSignal`, m.value, "only the SIGTERM default is implemented for the timeout kill");
|
|
112
129
|
}
|
|
113
130
|
break;
|
|
114
131
|
}
|
|
115
132
|
default:
|
|
116
|
-
lowerer.noLowering(
|
|
133
|
+
lowerer.noLowering(`${what} option '${m.name}'`, p, "encoding, cwd, env, timeout, and maxBuffer are the supported options");
|
|
117
134
|
}
|
|
118
135
|
}
|
|
119
136
|
}
|
|
@@ -126,16 +143,14 @@ export function lowerExecFileAsyncCall(lowerer, expr, loc) {
|
|
|
126
143
|
};
|
|
127
144
|
}
|
|
128
145
|
/** The interned `%execFileAsync` helper behind promisified-execFile
|
|
129
|
-
* calls
|
|
130
|
-
*
|
|
131
|
-
*
|
|
146
|
+
* calls (`%execAsync`, with `shell`, behind promisified-exec ones): an
|
|
147
|
+
* ASYNC IR function (params: cmd, argv, cwd, env {has, pairs}, timeoutMs)
|
|
148
|
+
* whose body runs the may-throw cp.execCapture libCall — the async
|
|
149
|
+
* machinery turns a throw into the rejection, Node's promisified
|
|
132
150
|
* behavior — and returns the `{ stdout, stderr }` record built from the
|
|
133
|
-
* capture. One helper per program (the shape is fixed). */
|
|
134
|
-
function execFileAsyncHelper(lowerer, loc) {
|
|
135
|
-
const shapeId = lowerer.shapes
|
|
136
|
-
{ name: "stderr", type: STRING },
|
|
137
|
-
{ name: "stdout", type: STRING },
|
|
138
|
-
]);
|
|
151
|
+
* capture. One helper per program and form (the shape is fixed). */
|
|
152
|
+
function execFileAsyncHelper(lowerer, loc, shell) {
|
|
153
|
+
const shapeId = execResultShape(lowerer.shapes);
|
|
139
154
|
// The env choice travels as ONE {has, pairs} record so a conditional
|
|
140
155
|
// env spread's condition evaluates exactly once at the call site (has
|
|
141
156
|
// and pairs both derive from it).
|
|
@@ -143,11 +158,11 @@ function execFileAsyncHelper(lowerer, loc) {
|
|
|
143
158
|
{ name: "has", type: BOOL },
|
|
144
159
|
{ name: "pairs", type: arrayOf(STRING) },
|
|
145
160
|
]);
|
|
146
|
-
const key = "execFileAsync";
|
|
161
|
+
const key = shell ? "execAsync" : "execFileAsync";
|
|
147
162
|
const existing = lowerer.valueHelpers.get(key);
|
|
148
163
|
if (existing)
|
|
149
164
|
return { name: existing, shapeId, envShapeId };
|
|
150
|
-
const name =
|
|
165
|
+
const name = `%${key}.${lowerer.valueHelpers.size}`;
|
|
151
166
|
lowerer.valueHelpers.set(key, name);
|
|
152
167
|
const recT = { kind: "record", shapeId };
|
|
153
168
|
const envRecT = { kind: "record", shapeId: envShapeId };
|
|
@@ -162,6 +177,7 @@ function execFileAsyncHelper(lowerer, loc) {
|
|
|
162
177
|
args: [
|
|
163
178
|
varRef("cmd.0", STRING, loc),
|
|
164
179
|
varRef("argv.0", strArrT, loc),
|
|
180
|
+
boolLit(shell, loc),
|
|
165
181
|
varRef("cwd.0", STRING, loc),
|
|
166
182
|
{
|
|
167
183
|
kind: "recordGet",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"child-process-async.js","sourceRoot":"","sources":["../../../../src/frontend/lowering/builtins/child-process-async.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3C,OAAO,EAAgB,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EACL,IAAI,EACJ,GAAG,EAIH,UAAU,EACV,MAAM,EAEN,OAAO,GACR,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"child-process-async.js","sourceRoot":"","sources":["../../../../src/frontend/lowering/builtins/child-process-async.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,15 @@ export declare function lowerZlibStreamBytesWritten(lowerer: Lowerer, access: ts
|
|
|
19
19
|
* the write-callback rule; numeric operands cross as dyn values for the
|
|
20
20
|
* runtime's range checks. */
|
|
21
21
|
export declare function lowerZlibStreamMethodCall(lowerer: Lowerer, call: ts.CallExpression, access: ts.PropertyAccessExpression): IrExpr;
|
|
22
|
+
/** True for a zlib callback one-shot util.promisify converts (deflate,
|
|
23
|
+
* inflate, deflateRaw, inflateRaw, gzip, gunzip and unzip). */
|
|
24
|
+
export declare function isPromisifiedZlibMember(member: string): boolean;
|
|
25
|
+
/** A call through `promisify(zlib.gzip)` and the other callback one-shots:
|
|
26
|
+
* `gzipAsync(data, options?)` runs the callback form's work and returns a
|
|
27
|
+
* promise that settles where the callback would run, with the Buffer or the
|
|
28
|
+
* callback form's Error. An options or input error rejects the promise, as
|
|
29
|
+
* the throw inside Node's promisify wrapper does. */
|
|
30
|
+
export declare function lowerPromisifiedZlibCall(lowerer: Lowerer, expr: ts.CallExpression, member: string, loc: SrcLoc): IrExpr;
|
|
22
31
|
export declare function lowerZlibModuleCall(lowerer: Lowerer, expr: ts.CallExpression, bi: {
|
|
23
32
|
module: string;
|
|
24
33
|
member: string;
|
|
@@ -5,7 +5,7 @@ import * as ts from "../../ts7/adapter.js";
|
|
|
5
5
|
import {} from "../lowerer.js";
|
|
6
6
|
import { locOf } from "../../program.js";
|
|
7
7
|
import { isNodeTypesPath } from "../../dts-paths.js";
|
|
8
|
-
import { BYTES_U8, DYN, F64, funcOf, VOID, ZLIB_STREAM_MODES, } from "../../../ir/ir.js";
|
|
8
|
+
import { BYTES_U8, DYN, F64, funcOf, STRING, VOID, ZLIB_STREAM_MODES, } from "../../../ir/ir.js";
|
|
9
9
|
const ZLIB_SYNC_FNS = {
|
|
10
10
|
deflateSync: "zlib.deflateSync",
|
|
11
11
|
inflateSync: "zlib.inflateSync",
|
|
@@ -25,6 +25,40 @@ const ZLIB_CALLBACK_FNS = {
|
|
|
25
25
|
unzip: "zlib.unzipCb",
|
|
26
26
|
};
|
|
27
27
|
const ZLIB_STREAM_T = { kind: "object", className: "%Transform" };
|
|
28
|
+
/** A zlib data argument, lowered once: Buffer/Uint8Array bytes, a string
|
|
29
|
+
* (UTF-8 encoded here), or a checked-dynamic value (the JS lane's untyped
|
|
30
|
+
* data, which the runtime converts after validating the options — Node's
|
|
31
|
+
* order). Other static types keep the byte-input fence. */
|
|
32
|
+
function zlibInput(lowerer, node, loc) {
|
|
33
|
+
const value = lowerer.lowerExpr(node);
|
|
34
|
+
if (value.type.kind === "dyn")
|
|
35
|
+
return { value, dyn: true };
|
|
36
|
+
if (value.type.kind === "bytes" && value.type.elem === "u8")
|
|
37
|
+
return { value, dyn: false };
|
|
38
|
+
if (value.type.kind === "string") {
|
|
39
|
+
return {
|
|
40
|
+
value: {
|
|
41
|
+
kind: "libCall",
|
|
42
|
+
fn: "buffer.fromStr",
|
|
43
|
+
args: [value, { kind: "strLit", value: "utf8", type: STRING, loc }],
|
|
44
|
+
type: BYTES_U8,
|
|
45
|
+
loc,
|
|
46
|
+
},
|
|
47
|
+
dyn: false,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
lowerer.noLowering(`zlib byte input of '${lowerer.fmt(value.type)}' values`, node, "string and Buffer/Uint8Array values are supported");
|
|
51
|
+
}
|
|
52
|
+
/** A zlib options argument as the dyn value the runtime ladder reads. */
|
|
53
|
+
function zlibOptionsValue(lowerer, node, what, loc) {
|
|
54
|
+
const raw = lowerer.lowerExpr(node);
|
|
55
|
+
if (raw.type.kind === "dyn")
|
|
56
|
+
return raw;
|
|
57
|
+
if (raw.kind === "unitLit" || lowerer.dynConvertible(raw.type)) {
|
|
58
|
+
return { kind: "dynFrom", value: raw, type: DYN, loc };
|
|
59
|
+
}
|
|
60
|
+
lowerer.noLowering(`${what} with a '${lowerer.fmt(raw.type)}' options value`, node, "zlib options are a plain object of numbers, booleans and Buffers");
|
|
61
|
+
}
|
|
28
62
|
/** `zlib.createGzip(options?)` and `new zlib.Gzip(options?)`: the runtime
|
|
29
63
|
* Transform stream (scr_zlib_stream.c). The options value crosses as a dyn
|
|
30
64
|
* value and is validated at runtime with Node's ladder, so literal and
|
|
@@ -35,18 +69,7 @@ export function lowerZlibStreamNew(lowerer, args, mode, what, site, loc) {
|
|
|
35
69
|
if (args.length > 1) {
|
|
36
70
|
lowerer.noLowering(`${what} with ${args.length} arguments`, args[1], "the supported form takes one options object");
|
|
37
71
|
}
|
|
38
|
-
|
|
39
|
-
if (args[0] !== undefined) {
|
|
40
|
-
const raw = lowerer.lowerExpr(args[0]);
|
|
41
|
-
if (raw.type.kind === "dyn")
|
|
42
|
-
options = raw;
|
|
43
|
-
else if (raw.kind === "unitLit" || lowerer.dynConvertible(raw.type)) {
|
|
44
|
-
options = { kind: "dynFrom", value: raw, type: DYN, loc };
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
lowerer.noLowering(`${what} with a '${lowerer.fmt(raw.type)}' options value`, args[0], "zlib stream options are a plain object of numbers, booleans and Buffers");
|
|
48
|
-
}
|
|
49
|
-
}
|
|
72
|
+
const options = args[0] !== undefined ? zlibOptionsValue(lowerer, args[0], what, loc) : dynUndefinedExpr(loc);
|
|
50
73
|
return {
|
|
51
74
|
kind: "libCall",
|
|
52
75
|
fn: "zlib.streamNew",
|
|
@@ -182,6 +205,55 @@ export function lowerZlibStreamMethodCall(lowerer, call, access) {
|
|
|
182
205
|
lowerer.noLowering(`zlib stream member '${member}'`, access);
|
|
183
206
|
}
|
|
184
207
|
}
|
|
208
|
+
/** node_zlib_mode of each one-shot form (the options-taking runtime entry). */
|
|
209
|
+
const ZLIB_ONE_SHOT_MODES = {
|
|
210
|
+
deflateSync: 1,
|
|
211
|
+
inflateSync: 2,
|
|
212
|
+
gzipSync: 3,
|
|
213
|
+
gunzipSync: 4,
|
|
214
|
+
deflateRawSync: 5,
|
|
215
|
+
inflateRawSync: 6,
|
|
216
|
+
unzipSync: 7,
|
|
217
|
+
deflate: 1,
|
|
218
|
+
inflate: 2,
|
|
219
|
+
gzip: 3,
|
|
220
|
+
gunzip: 4,
|
|
221
|
+
deflateRaw: 5,
|
|
222
|
+
inflateRaw: 6,
|
|
223
|
+
unzip: 7,
|
|
224
|
+
};
|
|
225
|
+
/** True for a zlib callback one-shot util.promisify converts (deflate,
|
|
226
|
+
* inflate, deflateRaw, inflateRaw, gzip, gunzip and unzip). */
|
|
227
|
+
export function isPromisifiedZlibMember(member) {
|
|
228
|
+
return ZLIB_CALLBACK_FNS[member] !== undefined;
|
|
229
|
+
}
|
|
230
|
+
/** A call through `promisify(zlib.gzip)` and the other callback one-shots:
|
|
231
|
+
* `gzipAsync(data, options?)` runs the callback form's work and returns a
|
|
232
|
+
* promise that settles where the callback would run, with the Buffer or the
|
|
233
|
+
* callback form's Error. An options or input error rejects the promise, as
|
|
234
|
+
* the throw inside Node's promisify wrapper does. */
|
|
235
|
+
export function lowerPromisifiedZlibCall(lowerer, expr, member, loc) {
|
|
236
|
+
if (expr.arguments.some(ts.isSpreadElement)) {
|
|
237
|
+
lowerer.noLowering(`the promisified zlib.${member} with spread arguments`, expr);
|
|
238
|
+
}
|
|
239
|
+
if (expr.arguments.length !== 1 && expr.arguments.length !== 2) {
|
|
240
|
+
lowerer.noLowering(`the promisified zlib.${member} with ${expr.arguments.length} arguments`, expr, `the supported forms are ${member}Async(data) and ${member}Async(data, options)`);
|
|
241
|
+
}
|
|
242
|
+
const input = zlibInput(lowerer, expr.arguments[0], loc);
|
|
243
|
+
return {
|
|
244
|
+
kind: "libCall",
|
|
245
|
+
fn: input.dyn ? "zlib.promiseDyn" : "zlib.promise",
|
|
246
|
+
args: [
|
|
247
|
+
numLit(ZLIB_ONE_SHOT_MODES[member], loc),
|
|
248
|
+
input.value,
|
|
249
|
+
expr.arguments[1] !== undefined
|
|
250
|
+
? zlibOptionsValue(lowerer, expr.arguments[1], `zlib.${member}`, loc)
|
|
251
|
+
: dynUndefinedExpr(loc),
|
|
252
|
+
],
|
|
253
|
+
type: { kind: "promise", inner: BYTES_U8 },
|
|
254
|
+
loc,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
185
257
|
const ZLIB_STREAM_FACTORIES = {
|
|
186
258
|
createDeflate: 1,
|
|
187
259
|
createInflate: 2,
|
|
@@ -201,13 +273,31 @@ export function lowerZlibModuleCall(lowerer, expr, bi, loc) {
|
|
|
201
273
|
}
|
|
202
274
|
const syncFn = ZLIB_SYNC_FNS[bi.member];
|
|
203
275
|
if (syncFn !== undefined) {
|
|
276
|
+
if (expr.arguments.length === 0 || expr.arguments.length > 2) {
|
|
277
|
+
lowerer.noLowering(`${bi.member} with ${expr.arguments.length} arguments`, expr);
|
|
278
|
+
}
|
|
279
|
+
const input = zlibInput(lowerer, expr.arguments[0], loc);
|
|
280
|
+
if (input.dyn) {
|
|
281
|
+
return {
|
|
282
|
+
kind: "libCall",
|
|
283
|
+
fn: "zlib.syncOptsDyn",
|
|
284
|
+
args: [
|
|
285
|
+
numLit(ZLIB_ONE_SHOT_MODES[bi.member], loc),
|
|
286
|
+
input.value,
|
|
287
|
+
expr.arguments[1] !== undefined
|
|
288
|
+
? zlibOptionsValue(lowerer, expr.arguments[1], `zlib.${bi.member}`, loc)
|
|
289
|
+
: dynUndefinedExpr(loc),
|
|
290
|
+
],
|
|
291
|
+
type: BYTES_U8,
|
|
292
|
+
loc,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
204
295
|
if (expr.arguments.length === 2 &&
|
|
205
296
|
(bi.member === "deflateSync" || bi.member === "deflateRawSync" || bi.member === "gzipSync")) {
|
|
206
297
|
const options = expr.arguments[1];
|
|
207
|
-
// A literal level
|
|
208
|
-
// emitters
|
|
209
|
-
//
|
|
210
|
-
// wire bytes.
|
|
298
|
+
// A lone literal level keeps the direct compression entry (build-time
|
|
299
|
+
// compression in the native emitters uses it); other options take the
|
|
300
|
+
// runtime option ladder below.
|
|
211
301
|
if (ts.isObjectLiteralExpression(options) && options.properties.length === 1) {
|
|
212
302
|
const prop = options.properties[0];
|
|
213
303
|
if (ts.isPropertyAssignment(prop) &&
|
|
@@ -226,7 +316,7 @@ export function lowerZlibModuleCall(lowerer, expr, bi, loc) {
|
|
|
226
316
|
kind: "libCall",
|
|
227
317
|
fn: "zlib.deflateLevelSync",
|
|
228
318
|
args: [
|
|
229
|
-
|
|
319
|
+
input.value,
|
|
230
320
|
numLit(bi.member === "deflateSync" ? 0 : bi.member === "deflateRawSync" ? 1 : 2, loc),
|
|
231
321
|
numLit(level, loc),
|
|
232
322
|
],
|
|
@@ -236,33 +326,58 @@ export function lowerZlibModuleCall(lowerer, expr, bi, loc) {
|
|
|
236
326
|
}
|
|
237
327
|
}
|
|
238
328
|
}
|
|
239
|
-
lowerer.noLowering(`${bi.member} with these options`, options, "the static compression options form is { level: <integer literal from -1 through 9> }");
|
|
240
329
|
}
|
|
241
|
-
if (expr.arguments.length
|
|
242
|
-
|
|
243
|
-
|
|
330
|
+
if (expr.arguments.length === 2) {
|
|
331
|
+
return {
|
|
332
|
+
kind: "libCall",
|
|
333
|
+
fn: "zlib.syncOpts",
|
|
334
|
+
args: [
|
|
335
|
+
numLit(ZLIB_ONE_SHOT_MODES[bi.member], loc),
|
|
336
|
+
input.value,
|
|
337
|
+
zlibOptionsValue(lowerer, expr.arguments[1], `zlib.${bi.member}`, loc),
|
|
338
|
+
],
|
|
339
|
+
type: BYTES_U8,
|
|
340
|
+
loc,
|
|
341
|
+
};
|
|
244
342
|
}
|
|
245
343
|
return {
|
|
246
344
|
kind: "libCall",
|
|
247
345
|
fn: syncFn,
|
|
248
|
-
args: [
|
|
346
|
+
args: [input.value],
|
|
249
347
|
type: BYTES_U8,
|
|
250
348
|
loc,
|
|
251
349
|
};
|
|
252
350
|
}
|
|
253
351
|
const callbackFn = ZLIB_CALLBACK_FNS[bi.member];
|
|
254
352
|
if (callbackFn !== undefined) {
|
|
255
|
-
if (expr.arguments.length !== 2) {
|
|
256
|
-
|
|
257
|
-
|
|
353
|
+
if (expr.arguments.length !== 2 && expr.arguments.length !== 3) {
|
|
354
|
+
lowerer.noLowering(`${bi.member} with ${expr.arguments.length} arguments`, expr, `${bi.member}(data, callback) and ${bi.member}(data, options, callback) are supported`);
|
|
355
|
+
}
|
|
356
|
+
const input = zlibInput(lowerer, expr.arguments[0], loc);
|
|
357
|
+
const dynData = input.dyn;
|
|
358
|
+
if (expr.arguments.length === 3 || dynData) {
|
|
359
|
+
// (data, options, callback): Node validates the options before the
|
|
360
|
+
// callback and the input, so the runtime ladder runs first.
|
|
361
|
+
const withOptions = expr.arguments.length === 3;
|
|
362
|
+
return {
|
|
363
|
+
kind: "libCall",
|
|
364
|
+
fn: dynData ? "zlib.cbOptsDyn" : "zlib.cbOpts",
|
|
365
|
+
args: [
|
|
366
|
+
numLit(ZLIB_ONE_SHOT_MODES[bi.member], loc),
|
|
367
|
+
input.value,
|
|
368
|
+
withOptions
|
|
369
|
+
? zlibOptionsValue(lowerer, expr.arguments[1], `zlib.${bi.member}`, loc)
|
|
370
|
+
: dynUndefinedExpr(loc),
|
|
371
|
+
errorFirstBytesCallback(lowerer, expr.arguments[withOptions ? 2 : 1], "zlib"),
|
|
372
|
+
],
|
|
373
|
+
type: VOID,
|
|
374
|
+
loc,
|
|
375
|
+
};
|
|
258
376
|
}
|
|
259
377
|
return {
|
|
260
378
|
kind: "libCall",
|
|
261
379
|
fn: callbackFn,
|
|
262
|
-
args: [
|
|
263
|
-
lowerBuiltinByteInput(lowerer, expr.arguments[0], loc, "zlib"),
|
|
264
|
-
errorFirstBytesCallback(lowerer, expr.arguments[1], "zlib"),
|
|
265
|
-
],
|
|
380
|
+
args: [input.value, errorFirstBytesCallback(lowerer, expr.arguments[1], "zlib")],
|
|
266
381
|
type: VOID,
|
|
267
382
|
loc,
|
|
268
383
|
};
|