firefly-compiler 0.4.50 → 0.4.52
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/.hintrc +4 -4
- package/.vscode/settings.json +4 -4
- package/bin/Release.ff +153 -155
- package/bin/firefly.mjs +1 -1
- package/compiler/Builder.ff +257 -257
- package/compiler/Compiler.ff +227 -227
- package/compiler/Dependencies.ff +186 -186
- package/compiler/DependencyLock.ff +17 -17
- package/compiler/JsEmitter.ff +946 -946
- package/compiler/LspHook.ff +202 -202
- package/compiler/ModuleCache.ff +178 -178
- package/compiler/Workspace.ff +88 -88
- package/core/.firefly/include/package-lock.json +394 -394
- package/core/.firefly/include/package.json +5 -5
- package/core/.firefly/include/prepare.sh +1 -1
- package/core/.firefly/package.ff +2 -2
- package/core/Array.ff +265 -265
- package/core/Atomic.ff +64 -64
- package/core/Box.ff +7 -7
- package/core/BrowserSystem.ff +40 -40
- package/core/BuildSystem.ff +148 -148
- package/core/Crypto.ff +96 -96
- package/core/Equal.ff +36 -36
- package/core/HttpClient.ff +87 -87
- package/core/JsSystem.ff +69 -69
- package/core/Json.ff +434 -434
- package/core/List.ff +486 -486
- package/core/Lock.ff +144 -144
- package/core/NodeSystem.ff +195 -189
- package/core/Ordering.ff +161 -161
- package/core/Path.ff +401 -401
- package/core/Random.ff +134 -134
- package/core/RbMap.ff +216 -216
- package/core/Show.ff +43 -43
- package/core/SourceLocation.ff +68 -68
- package/core/Task.ff +141 -141
- package/experimental/benchmarks/ListGrab.ff +23 -23
- package/experimental/benchmarks/ListGrab.java +55 -55
- package/experimental/benchmarks/Pyrotek45.ff +30 -30
- package/experimental/benchmarks/Pyrotek45.java +64 -64
- package/experimental/bidirectional/Bidi.ff +88 -88
- package/experimental/random/Index.ff +53 -53
- package/experimental/random/Process.ff +120 -120
- package/experimental/random/Scrape.ff +51 -51
- package/experimental/random/Symbols.ff +73 -73
- package/experimental/random/Tensor.ff +52 -52
- package/experimental/random/Units.ff +36 -36
- package/experimental/s3/S3TestAuthorizationHeader.ff +38 -38
- package/experimental/s3/S3TestPut.ff +15 -15
- package/experimental/tests/TestJson.ff +26 -26
- package/firefly.sh +0 -0
- package/fireflysite/Main.ff +13 -13
- package/lsp/.firefly/package.ff +1 -1
- package/lsp/CompletionHandler.ff +808 -808
- package/lsp/Handler.ff +714 -714
- package/lsp/HoverHandler.ff +79 -79
- package/lsp/LanguageServer.ff +272 -272
- package/lsp/SignatureHelpHandler.ff +55 -55
- package/lsp/SymbolHandler.ff +181 -181
- package/lsp/TestReferences.ff +16 -16
- package/lsp/TestReferencesCase.ff +7 -7
- package/lsp/stderr.txt +1 -1
- package/lsp/stdin.txt +10 -10
- package/lsp/stdout.txt +40 -40
- package/lux/.firefly/package.ff +1 -1
- package/lux/Css.ff +648 -648
- package/lux/CssTest.ff +48 -48
- package/lux/Lux.ff +487 -487
- package/lux/LuxEvent.ff +116 -116
- package/lux/Main.ff +128 -128
- package/lux/Main2.ff +144 -144
- package/output/js/ff/compiler/Builder.mjs +43 -43
- package/output/js/ff/compiler/Dependencies.mjs +3 -3
- package/output/js/ff/core/Array.mjs +59 -59
- package/output/js/ff/core/Atomic.mjs +36 -36
- package/output/js/ff/core/BrowserSystem.mjs +11 -11
- package/output/js/ff/core/BuildSystem.mjs +30 -30
- package/output/js/ff/core/Crypto.mjs +40 -40
- package/output/js/ff/core/HttpClient.mjs +24 -24
- package/output/js/ff/core/Json.mjs +147 -147
- package/output/js/ff/core/List.mjs +50 -50
- package/output/js/ff/core/Lock.mjs +97 -97
- package/output/js/ff/core/NodeSystem.mjs +83 -77
- package/output/js/ff/core/Ordering.mjs +8 -8
- package/output/js/ff/core/Path.mjs +231 -231
- package/output/js/ff/core/Random.mjs +56 -56
- package/output/js/ff/core/Task.mjs +31 -31
- package/package.json +1 -1
- package/rpc/.firefly/package.ff +1 -1
- package/rpc/Rpc.ff +69 -69
- package/s3/.firefly/package.ff +1 -1
- package/s3/S3.ff +90 -93
- package/unsafejs/UnsafeJs.ff +19 -19
- package/vscode/LICENSE.txt +21 -21
- package/vscode/Prepublish.ff +15 -15
- package/vscode/README.md +16 -16
- package/vscode/client/package.json +22 -22
- package/vscode/client/src/extension.ts +104 -104
- package/vscode/icons/firefly-icon.svg +10 -10
- package/vscode/language-configuration.json +61 -61
- package/vscode/package-lock.json +3623 -3623
- package/vscode/package.json +1 -1
- package/vscode/snippets.json +241 -241
- package/webserver/.firefly/include/package-lock.json +16 -16
- package/webserver/.firefly/include/package.json +5 -5
- package/webserver/.firefly/package.ff +2 -2
- package/webserver/WebServer.ff +685 -685
- package/websocket/.firefly/package.ff +1 -1
- package/websocket/WebSocket.ff +131 -131
|
@@ -1 +1 @@
|
|
|
1
|
-
package ff:websocket:0.0.0
|
|
1
|
+
package ff:websocket:0.0.0
|
package/websocket/WebSocket.ff
CHANGED
|
@@ -1,131 +1,131 @@
|
|
|
1
|
-
capability WebSocket {}
|
|
2
|
-
|
|
3
|
-
open(browserSystem: BrowserSystem, url: String): WebSocket {
|
|
4
|
-
internalOpenBrowserWebSocket(browserSystem, url)
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
extend self: WebSocket {
|
|
8
|
-
|
|
9
|
-
readText(encoding: String = "utf8"): Option[String] {
|
|
10
|
-
self.readAny {_} {_.toString(encoding)}
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
readBuffer(): Option[Buffer] {
|
|
14
|
-
self.readAny {_.toBuffer()} {_}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
readAny[T](fromText: String => T, fromBuffer: Buffer => T): Option[T]
|
|
18
|
-
target browser async """
|
|
19
|
-
ff_core_Task.Task_throwIfAborted($task);
|
|
20
|
-
while(self_.ffFront.length === 0) {
|
|
21
|
-
while(self_.ffBack.length !== 0) {
|
|
22
|
-
self_.ffFront.push(self_.ffBack.pop());
|
|
23
|
-
}
|
|
24
|
-
if(self_.ffFront.length !== 0) break;
|
|
25
|
-
if(self_.readyState === 3) return ff_core_Option.None();
|
|
26
|
-
let abort = null;
|
|
27
|
-
try {
|
|
28
|
-
await new Promise((resolve, reject) => {
|
|
29
|
-
self_.ffListeners.push(resolve);
|
|
30
|
-
if($task !== self_.ffTask) {
|
|
31
|
-
abort = () => {
|
|
32
|
-
self_.ffListeners = self_.ffListeners.filter(l => l != resolve);
|
|
33
|
-
reject();
|
|
34
|
-
};
|
|
35
|
-
$task.controller.signal.addEventListener('abort', abort);
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
} finally {
|
|
39
|
-
if($task !== self_.ffTask) {
|
|
40
|
-
$task.controller.signal.removeEventListener('abort', abort);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
const message = self_.ffFront.pop();
|
|
45
|
-
if(!(message instanceof MessageEvent)) throw new Error("WebSocket error");
|
|
46
|
-
const data = message.data;
|
|
47
|
-
if(typeof data === 'string') return ff_core_Option.Some(await fromText_(data));
|
|
48
|
-
return ff_core_Option.Some(await fromBuffer_(new DataView(data)));
|
|
49
|
-
"""
|
|
50
|
-
|
|
51
|
-
writeBuffer(data: Buffer): Unit
|
|
52
|
-
target browser async """
|
|
53
|
-
ff_core_Task.Task_throwIfAborted($task);
|
|
54
|
-
self_.send(data_);
|
|
55
|
-
"""
|
|
56
|
-
|
|
57
|
-
writeText(data: String): Unit
|
|
58
|
-
target browser async """
|
|
59
|
-
ff_core_Task.Task_throwIfAborted($task);
|
|
60
|
-
self_.send(data_);
|
|
61
|
-
"""
|
|
62
|
-
|
|
63
|
-
close(code: Int = 1000, reason: String = ""): Unit
|
|
64
|
-
target browser async """
|
|
65
|
-
if(self_.readyState === 2 || self_.readyState === 3) return;
|
|
66
|
-
await new Promise((resolve, reject) => {
|
|
67
|
-
self_.addEventListener('close', resolve);
|
|
68
|
-
self_.close(code_, reason !== "" ? reason : void 0);
|
|
69
|
-
});
|
|
70
|
-
return;
|
|
71
|
-
"""
|
|
72
|
-
|
|
73
|
-
isOpen(): Bool
|
|
74
|
-
target browser async """
|
|
75
|
-
return self_.readyState === 1;
|
|
76
|
-
"""
|
|
77
|
-
|
|
78
|
-
isClosing(): Bool
|
|
79
|
-
target browser async """
|
|
80
|
-
return self_.readyState === 2;
|
|
81
|
-
"""
|
|
82
|
-
|
|
83
|
-
isClosed(): Bool
|
|
84
|
-
target browser async """
|
|
85
|
-
return self_.readyState === 3;
|
|
86
|
-
"""
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
internalOpenBrowserWebSocket(browserSystem: BrowserSystem, url: String): WebSocket
|
|
91
|
-
target browser async """
|
|
92
|
-
if(typeof location !== 'undefined' && !url_.includes("://")) {
|
|
93
|
-
if(location.href && location.href.startsWith("http")) {
|
|
94
|
-
url_ = new URL(url_, location.href).href.replace(/^http/, 'ws');
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
const socket = new WebSocket(url_);
|
|
98
|
-
socket.binaryType = "arraybuffer";
|
|
99
|
-
socket.ffFront = [];
|
|
100
|
-
socket.ffBack = [];
|
|
101
|
-
socket.ffListeners = [];
|
|
102
|
-
socket.ffTask = $task;
|
|
103
|
-
$task.controller.signal.addEventListener('message', m => socket.ffBack.push(m));
|
|
104
|
-
const abort = () => socket.close();
|
|
105
|
-
try {
|
|
106
|
-
await new Promise((resolve, reject) => {
|
|
107
|
-
socket.onopen = resolve;
|
|
108
|
-
socket.onerror = reject;
|
|
109
|
-
$task.controller.signal.addEventListener('abort', abort);
|
|
110
|
-
});
|
|
111
|
-
} finally {
|
|
112
|
-
socket.onopen = null;
|
|
113
|
-
socket.onerror = null;
|
|
114
|
-
}
|
|
115
|
-
socket.addEventListener('close', () => {
|
|
116
|
-
$task.controller.signal.removeEventListener('abort', abort);
|
|
117
|
-
for(let i = 0; i < socket.ffListeners.length; i++) socket.ffListeners[i]();
|
|
118
|
-
socket.ffListeners.length = 0;
|
|
119
|
-
});
|
|
120
|
-
socket.addEventListener('message', m => {
|
|
121
|
-
socket.ffBack.push(m);
|
|
122
|
-
for(let i = 0; i < socket.ffListeners.length; i++) socket.ffListeners[i]();
|
|
123
|
-
socket.ffListeners.length = 0;
|
|
124
|
-
});
|
|
125
|
-
socket.addEventListener('error', e => {
|
|
126
|
-
socket.ffBack.push(e);
|
|
127
|
-
for(let i = 0; i < socket.ffListeners.length; i++) socket.ffListeners[i]();
|
|
128
|
-
socket.ffListeners.length = 0;
|
|
129
|
-
});
|
|
130
|
-
return socket;
|
|
131
|
-
"""
|
|
1
|
+
capability WebSocket {}
|
|
2
|
+
|
|
3
|
+
open(browserSystem: BrowserSystem, url: String): WebSocket {
|
|
4
|
+
internalOpenBrowserWebSocket(browserSystem, url)
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
extend self: WebSocket {
|
|
8
|
+
|
|
9
|
+
readText(encoding: String = "utf8"): Option[String] {
|
|
10
|
+
self.readAny {_} {_.toString(encoding)}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
readBuffer(): Option[Buffer] {
|
|
14
|
+
self.readAny {_.toBuffer()} {_}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
readAny[T](fromText: String => T, fromBuffer: Buffer => T): Option[T]
|
|
18
|
+
target browser async """
|
|
19
|
+
ff_core_Task.Task_throwIfAborted($task);
|
|
20
|
+
while(self_.ffFront.length === 0) {
|
|
21
|
+
while(self_.ffBack.length !== 0) {
|
|
22
|
+
self_.ffFront.push(self_.ffBack.pop());
|
|
23
|
+
}
|
|
24
|
+
if(self_.ffFront.length !== 0) break;
|
|
25
|
+
if(self_.readyState === 3) return ff_core_Option.None();
|
|
26
|
+
let abort = null;
|
|
27
|
+
try {
|
|
28
|
+
await new Promise((resolve, reject) => {
|
|
29
|
+
self_.ffListeners.push(resolve);
|
|
30
|
+
if($task !== self_.ffTask) {
|
|
31
|
+
abort = () => {
|
|
32
|
+
self_.ffListeners = self_.ffListeners.filter(l => l != resolve);
|
|
33
|
+
reject();
|
|
34
|
+
};
|
|
35
|
+
$task.controller.signal.addEventListener('abort', abort);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
} finally {
|
|
39
|
+
if($task !== self_.ffTask) {
|
|
40
|
+
$task.controller.signal.removeEventListener('abort', abort);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const message = self_.ffFront.pop();
|
|
45
|
+
if(!(message instanceof MessageEvent)) throw new Error("WebSocket error");
|
|
46
|
+
const data = message.data;
|
|
47
|
+
if(typeof data === 'string') return ff_core_Option.Some(await fromText_(data));
|
|
48
|
+
return ff_core_Option.Some(await fromBuffer_(new DataView(data)));
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
writeBuffer(data: Buffer): Unit
|
|
52
|
+
target browser async """
|
|
53
|
+
ff_core_Task.Task_throwIfAborted($task);
|
|
54
|
+
self_.send(data_);
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
writeText(data: String): Unit
|
|
58
|
+
target browser async """
|
|
59
|
+
ff_core_Task.Task_throwIfAborted($task);
|
|
60
|
+
self_.send(data_);
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
close(code: Int = 1000, reason: String = ""): Unit
|
|
64
|
+
target browser async """
|
|
65
|
+
if(self_.readyState === 2 || self_.readyState === 3) return;
|
|
66
|
+
await new Promise((resolve, reject) => {
|
|
67
|
+
self_.addEventListener('close', resolve);
|
|
68
|
+
self_.close(code_, reason !== "" ? reason : void 0);
|
|
69
|
+
});
|
|
70
|
+
return;
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
isOpen(): Bool
|
|
74
|
+
target browser async """
|
|
75
|
+
return self_.readyState === 1;
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
isClosing(): Bool
|
|
79
|
+
target browser async """
|
|
80
|
+
return self_.readyState === 2;
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
isClosed(): Bool
|
|
84
|
+
target browser async """
|
|
85
|
+
return self_.readyState === 3;
|
|
86
|
+
"""
|
|
87
|
+
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
internalOpenBrowserWebSocket(browserSystem: BrowserSystem, url: String): WebSocket
|
|
91
|
+
target browser async """
|
|
92
|
+
if(typeof location !== 'undefined' && !url_.includes("://")) {
|
|
93
|
+
if(location.href && location.href.startsWith("http")) {
|
|
94
|
+
url_ = new URL(url_, location.href).href.replace(/^http/, 'ws');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const socket = new WebSocket(url_);
|
|
98
|
+
socket.binaryType = "arraybuffer";
|
|
99
|
+
socket.ffFront = [];
|
|
100
|
+
socket.ffBack = [];
|
|
101
|
+
socket.ffListeners = [];
|
|
102
|
+
socket.ffTask = $task;
|
|
103
|
+
$task.controller.signal.addEventListener('message', m => socket.ffBack.push(m));
|
|
104
|
+
const abort = () => socket.close();
|
|
105
|
+
try {
|
|
106
|
+
await new Promise((resolve, reject) => {
|
|
107
|
+
socket.onopen = resolve;
|
|
108
|
+
socket.onerror = reject;
|
|
109
|
+
$task.controller.signal.addEventListener('abort', abort);
|
|
110
|
+
});
|
|
111
|
+
} finally {
|
|
112
|
+
socket.onopen = null;
|
|
113
|
+
socket.onerror = null;
|
|
114
|
+
}
|
|
115
|
+
socket.addEventListener('close', () => {
|
|
116
|
+
$task.controller.signal.removeEventListener('abort', abort);
|
|
117
|
+
for(let i = 0; i < socket.ffListeners.length; i++) socket.ffListeners[i]();
|
|
118
|
+
socket.ffListeners.length = 0;
|
|
119
|
+
});
|
|
120
|
+
socket.addEventListener('message', m => {
|
|
121
|
+
socket.ffBack.push(m);
|
|
122
|
+
for(let i = 0; i < socket.ffListeners.length; i++) socket.ffListeners[i]();
|
|
123
|
+
socket.ffListeners.length = 0;
|
|
124
|
+
});
|
|
125
|
+
socket.addEventListener('error', e => {
|
|
126
|
+
socket.ffBack.push(e);
|
|
127
|
+
for(let i = 0; i < socket.ffListeners.length; i++) socket.ffListeners[i]();
|
|
128
|
+
socket.ffListeners.length = 0;
|
|
129
|
+
});
|
|
130
|
+
return socket;
|
|
131
|
+
"""
|