expo 52.0.20 → 52.0.21
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/android/build.gradle +2 -2
- package/android/src/main/java/expo/modules/fetch/ExpoFetchModule.kt +1 -1
- package/android/src/main/java/expo/modules/fetch/NativeResponse.kt +4 -4
- package/build/winter/fetch/FetchResponse.d.ts +2 -1
- package/build/winter/fetch/FetchResponse.d.ts.map +1 -1
- package/build/winter/fetch/NativeRequest.d.ts +1 -1
- package/build/winter/fetch/NativeRequest.d.ts.map +1 -1
- package/ios/Fetch/ExpoFetchModule.swift +2 -2
- package/ios/Fetch/NativeResponse.swift +4 -4
- package/package.json +2 -2
- package/src/winter/fetch/FetchResponse.ts +41 -26
- package/src/winter/fetch/NativeRequest.ts +1 -1
package/android/build.gradle
CHANGED
|
@@ -33,7 +33,7 @@ def getRNVersion() {
|
|
|
33
33
|
ensureDependeciesWereEvaluated(project)
|
|
34
34
|
|
|
35
35
|
group = 'host.exp.exponent'
|
|
36
|
-
version = '52.0.
|
|
36
|
+
version = '52.0.21'
|
|
37
37
|
|
|
38
38
|
buildscript {
|
|
39
39
|
// Simple helper that allows the root project to override versions declared by this library.
|
|
@@ -46,7 +46,7 @@ android {
|
|
|
46
46
|
namespace "expo.core"
|
|
47
47
|
defaultConfig {
|
|
48
48
|
versionCode 1
|
|
49
|
-
versionName "52.0.
|
|
49
|
+
versionName "52.0.21"
|
|
50
50
|
consumerProguardFiles("proguard-rules.pro")
|
|
51
51
|
}
|
|
52
52
|
testOptions {
|
|
@@ -59,7 +59,7 @@ class ExpoFetchModule : Module() {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
AsyncFunction("startStreaming") { response: NativeResponse ->
|
|
62
|
-
response.startStreaming()
|
|
62
|
+
return@AsyncFunction response.startStreaming()
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
AsyncFunction("cancelStreaming") { response: NativeResponse ->
|
|
@@ -49,9 +49,9 @@ internal class NativeResponse(appContext: AppContext, private val coroutineScope
|
|
|
49
49
|
state = ResponseState.STARTED
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
fun startStreaming() {
|
|
52
|
+
fun startStreaming(): ByteArray? {
|
|
53
53
|
if (isInvalidState(ResponseState.RESPONSE_RECEIVED, ResponseState.BODY_COMPLETED)) {
|
|
54
|
-
return
|
|
54
|
+
return null
|
|
55
55
|
}
|
|
56
56
|
if (state == ResponseState.RESPONSE_RECEIVED) {
|
|
57
57
|
state = ResponseState.BODY_STREAMING_STARTED
|
|
@@ -59,9 +59,9 @@ internal class NativeResponse(appContext: AppContext, private val coroutineScope
|
|
|
59
59
|
emit("didReceiveResponseData", queuedData)
|
|
60
60
|
} else if (state == ResponseState.BODY_COMPLETED) {
|
|
61
61
|
val queuedData = this.sink.finalize()
|
|
62
|
-
|
|
63
|
-
emit("didComplete")
|
|
62
|
+
return queuedData
|
|
64
63
|
}
|
|
64
|
+
return null
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
fun cancelStreaming() {
|
|
@@ -7,7 +7,8 @@ export type AbortSubscriptionCleanupFunction = () => void;
|
|
|
7
7
|
*/
|
|
8
8
|
export declare class FetchResponse extends ConcreteNativeResponse implements Response {
|
|
9
9
|
private readonly abortCleanupFunction;
|
|
10
|
-
private
|
|
10
|
+
private streamingState;
|
|
11
|
+
private bodyStream;
|
|
11
12
|
constructor(abortCleanupFunction: AbortSubscriptionCleanupFunction);
|
|
12
13
|
get body(): ReadableStream<Uint8Array> | null;
|
|
13
14
|
get headers(): Headers;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FetchResponse.d.ts","sourceRoot":"","sources":["../../../src/winter/fetch/FetchResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,QAAA,MAAM,sBAAsB,uBAA0D,CAAC;AAEvF,MAAM,MAAM,gCAAgC,GAAG,MAAM,IAAI,CAAC;AAE1D;;GAEG;AACH,qBAAa,aAAc,SAAQ,sBAAuB,YAAW,QAAQ;
|
|
1
|
+
{"version":3,"file":"FetchResponse.d.ts","sourceRoot":"","sources":["../../../src/winter/fetch/FetchResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,QAAA,MAAM,sBAAsB,uBAA0D,CAAC;AAEvF,MAAM,MAAM,gCAAgC,GAAG,MAAM,IAAI,CAAC;AAE1D;;GAEG;AACH,qBAAa,aAAc,SAAQ,sBAAuB,YAAW,QAAQ;IAI/D,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IAHjD,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,UAAU,CAA2C;gBAEhC,oBAAoB,EAAE,gCAAgC;IAKnF,IAAI,IAAI,IAAI,cAAc,CAAC,UAAU,CAAC,GAAG,IAAI,CAwC5C;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,EAAE,IAAI,OAAO,CAEhB;IAED,SAAgB,IAAI,aAAa;IAE3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IAY7B,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC;IAK1B,QAAQ,IAAI,MAAM;IAIlB,MAAM,IAAI,MAAM;IAShB,KAAK,IAAI,aAAa;IAItB,OAAO,CAAC,QAAQ,CAQd;CACH"}
|
|
@@ -22,7 +22,7 @@ export declare class NativeResponse extends SharedObject<NativeResponseEvents> {
|
|
|
22
22
|
readonly statusText: string;
|
|
23
23
|
readonly url: string;
|
|
24
24
|
readonly redirected: boolean;
|
|
25
|
-
startStreaming():
|
|
25
|
+
startStreaming(): Promise<Uint8Array | null>;
|
|
26
26
|
cancelStreaming(reason: string): void;
|
|
27
27
|
arrayBuffer(): Promise<ArrayBuffer>;
|
|
28
28
|
text(): Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeRequest.d.ts","sourceRoot":"","sources":["../../../src/winter/fetch/NativeRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,YAAY;IAC9C,KAAK,CACV,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,iBAAiB,EAC9B,WAAW,EAAE,UAAU,GAAG,IAAI,GAC7B,OAAO,CAAC,cAAc,CAAC;IACnB,MAAM,IAAI,IAAI;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,sBAAsB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/C,WAAW,IAAI,IAAI,CAAC;IACpB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,sBAAsB,IAAI,IAAI,CAAC;CAChC,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,YAAY,CAAC,oBAAoB,CAAC;IAC5E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,cAAc,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"NativeRequest.d.ts","sourceRoot":"","sources":["../../../src/winter/fetch/NativeRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,YAAY;IAC9C,KAAK,CACV,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,iBAAiB,EAC9B,WAAW,EAAE,UAAU,GAAG,IAAI,GAC7B,OAAO,CAAC,cAAc,CAAC;IACnB,MAAM,IAAI,IAAI;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,sBAAsB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/C,WAAW,IAAI,IAAI,CAAC;IACpB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,sBAAsB,IAAI,IAAI,CAAC;CAChC,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,YAAY,CAAC,oBAAoB,CAAC;IAC5E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,cAAc,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAC5C,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IACrC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IACnC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;CACxB"}
|
|
@@ -27,8 +27,8 @@ public final class ExpoFetchModule: Module {
|
|
|
27
27
|
return NativeResponse(dispatchQueue: fetchRequestQueue)
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
AsyncFunction("startStreaming") { (response: NativeResponse) in
|
|
31
|
-
response.startStreaming()
|
|
30
|
+
AsyncFunction("startStreaming") { (response: NativeResponse) -> Data? in
|
|
31
|
+
return response.startStreaming()
|
|
32
32
|
}.runOnQueue(fetchRequestQueue)
|
|
33
33
|
|
|
34
34
|
AsyncFunction("cancelStreaming") { (response: NativeResponse, _ reason: String) in
|
|
@@ -36,9 +36,9 @@ internal final class NativeResponse: SharedObject, ExpoURLSessionTaskDelegate {
|
|
|
36
36
|
self.dispatchQueue = dispatchQueue
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
func startStreaming() {
|
|
39
|
+
func startStreaming() -> Data? {
|
|
40
40
|
if isInvalidState(.responseReceived, .bodyCompleted) {
|
|
41
|
-
return
|
|
41
|
+
return nil
|
|
42
42
|
}
|
|
43
43
|
if state == .responseReceived {
|
|
44
44
|
state = .bodyStreamingStarted
|
|
@@ -46,9 +46,9 @@ internal final class NativeResponse: SharedObject, ExpoURLSessionTaskDelegate {
|
|
|
46
46
|
emit(event: "didReceiveResponseData", arguments: queuedData)
|
|
47
47
|
} else if state == .bodyCompleted {
|
|
48
48
|
let queuedData = self.sink.finalize()
|
|
49
|
-
|
|
50
|
-
emit(event: "didComplete")
|
|
49
|
+
return queuedData
|
|
51
50
|
}
|
|
51
|
+
return nil
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
func cancelStreaming() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo",
|
|
3
|
-
"version": "52.0.
|
|
3
|
+
"version": "52.0.21",
|
|
4
4
|
"description": "The Expo SDK",
|
|
5
5
|
"main": "src/Expo.ts",
|
|
6
6
|
"module": "src/Expo.ts",
|
|
@@ -112,5 +112,5 @@
|
|
|
112
112
|
"optional": true
|
|
113
113
|
}
|
|
114
114
|
},
|
|
115
|
-
"gitHead": "
|
|
115
|
+
"gitHead": "71f2c55ff3f11e43ab43761bb5cece2e48eae0bf"
|
|
116
116
|
}
|
|
@@ -11,7 +11,8 @@ export type AbortSubscriptionCleanupFunction = () => void;
|
|
|
11
11
|
* A response implementation for the `fetch.Response` API.
|
|
12
12
|
*/
|
|
13
13
|
export class FetchResponse extends ConcreteNativeResponse implements Response {
|
|
14
|
-
private
|
|
14
|
+
private streamingState: 'none' | 'started' | 'completed' = 'none';
|
|
15
|
+
private bodyStream: ReadableStream<Uint8Array> | null = null;
|
|
15
16
|
|
|
16
17
|
constructor(private readonly abortCleanupFunction: AbortSubscriptionCleanupFunction) {
|
|
17
18
|
super();
|
|
@@ -19,31 +20,45 @@ export class FetchResponse extends ConcreteNativeResponse implements Response {
|
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
get body(): ReadableStream<Uint8Array> | null {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
23
|
+
if (this.bodyStream == null) {
|
|
24
|
+
const response = this;
|
|
25
|
+
this.bodyStream = new ReadableStream({
|
|
26
|
+
start(controller) {
|
|
27
|
+
if (response.streamingState === 'completed') {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
response.addListener('didReceiveResponseData', (data: Uint8Array) => {
|
|
31
|
+
controller.enqueue(data);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
response.addListener('didComplete', () => {
|
|
35
|
+
controller.close();
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
response.addListener('didFailWithError', (error: string) => {
|
|
39
|
+
controller.error(new Error(error));
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
async pull(controller) {
|
|
43
|
+
if (response.streamingState === 'none') {
|
|
44
|
+
const completedData = await response.startStreaming();
|
|
45
|
+
if (completedData != null) {
|
|
46
|
+
controller.enqueue(completedData);
|
|
47
|
+
controller.close();
|
|
48
|
+
response.streamingState = 'completed';
|
|
49
|
+
} else {
|
|
50
|
+
response.streamingState = 'started';
|
|
51
|
+
}
|
|
52
|
+
} else if (response.streamingState === 'completed') {
|
|
53
|
+
controller.close();
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
cancel(reason) {
|
|
57
|
+
response.cancelStreaming(String(reason));
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return this.bodyStream;
|
|
47
62
|
}
|
|
48
63
|
|
|
49
64
|
get headers(): Headers {
|
|
@@ -31,7 +31,7 @@ export declare class NativeResponse extends SharedObject<NativeResponseEvents> {
|
|
|
31
31
|
readonly statusText: string;
|
|
32
32
|
readonly url: string;
|
|
33
33
|
readonly redirected: boolean;
|
|
34
|
-
startStreaming():
|
|
34
|
+
startStreaming(): Promise<Uint8Array | null>;
|
|
35
35
|
cancelStreaming(reason: string): void;
|
|
36
36
|
arrayBuffer(): Promise<ArrayBuffer>;
|
|
37
37
|
text(): Promise<string>;
|