@dr_nikson/effect-grpc 0.2.0-mvp-9971208edee70b39058f12d8c2a1fcfaeecd3b51 → 3.0.0-alpha.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 +928 -0
- package/dist/client.d.ts +38 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.internal.d.ts.map +1 -1
- package/dist/client.internal.js +36 -9
- package/dist/client.internal.js.map +1 -1
- package/dist/client.js +2 -0
- package/dist/client.js.map +1 -1
- package/dist/grpcException.d.ts +243 -0
- package/dist/grpcException.d.ts.map +1 -0
- package/dist/grpcException.internal.d.ts +28 -0
- package/dist/grpcException.internal.d.ts.map +1 -0
- package/dist/grpcException.internal.js +72 -0
- package/dist/grpcException.internal.js.map +1 -0
- package/dist/grpcException.js +218 -0
- package/dist/grpcException.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/protoRuntime.d.ts +5 -4
- package/dist/protoRuntime.d.ts.map +1 -1
- package/dist/protoRuntime.internal.d.ts +4 -3
- package/dist/protoRuntime.internal.d.ts.map +1 -1
- package/dist/protoRuntime.internal.js +16 -2
- package/dist/protoRuntime.internal.js.map +1 -1
- package/dist/protoRuntime.js +2 -0
- package/dist/protoRuntime.js.map +1 -1
- package/dist/protocGenPlugin.d.ts.map +1 -1
- package/dist/protocGenPlugin.js +6 -5
- package/dist/protocGenPlugin.js.map +1 -1
- package/dist/server.d.ts +8 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.internal.d.ts +5 -4
- package/dist/server.internal.d.ts.map +1 -1
- package/dist/server.internal.js +49 -12
- package/dist/server.internal.js.map +1 -1
- package/dist/server.js +4 -0
- package/dist/server.js.map +1 -1
- package/dist/typeUtils.js +1 -1
- package/dist/typeUtils.js.map +1 -1
- package/package.json +1 -1
package/dist/server.internal.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// packages/effect-grpc/src/server.internal.ts
|
|
2
|
-
import { Effect } from "effect";
|
|
2
|
+
import { Effect, Scope, Types } from "effect";
|
|
3
3
|
import http2 from "node:http2";
|
|
4
|
-
import { createContextValues
|
|
4
|
+
import { createContextValues } from "@connectrpc/connect";
|
|
5
5
|
import { connectNodeAdapter } from "@connectrpc/connect-node";
|
|
6
|
+
import * as GrpcException from "./grpcException.js";
|
|
6
7
|
import * as ProtoRuntime from "./protoRuntime.js";
|
|
7
8
|
/**
|
|
8
9
|
* @internal
|
|
@@ -37,11 +38,9 @@ class EffectGrpcServerLive {
|
|
|
37
38
|
this.transformation = transformation;
|
|
38
39
|
}
|
|
39
40
|
_Services = (a) => a;
|
|
40
|
-
run() {
|
|
41
|
+
run(options) {
|
|
41
42
|
const routes = this.routes.bind(this);
|
|
42
43
|
const makeExecutor = this.makeExecutor.bind(this);
|
|
43
|
-
const HOST = "localhost";
|
|
44
|
-
const PORT = 8000;
|
|
45
44
|
return Effect.gen(function* () {
|
|
46
45
|
const executor = yield* makeExecutor();
|
|
47
46
|
const handler = yield* Effect.sync(() => connectNodeAdapter({
|
|
@@ -53,14 +52,47 @@ class EffectGrpcServerLive {
|
|
|
53
52
|
return createContextValues();
|
|
54
53
|
},
|
|
55
54
|
}));
|
|
56
|
-
const startServer = Effect.async((resume) => {
|
|
55
|
+
const startServer = Effect.async((resume, signal) => {
|
|
57
56
|
const server = http2
|
|
58
57
|
.createServer(handler)
|
|
59
58
|
.addListener("connect", (req, socket, head) => {
|
|
60
59
|
console.log("Connected to server", req.url, socket, head);
|
|
61
60
|
})
|
|
62
61
|
.addListener("connection", (socket) => {
|
|
63
|
-
console.log("New connection", socket.remoteAddress, socket.remotePort);
|
|
62
|
+
console.log("New TCP connection:", socket.remoteAddress, socket.remotePort);
|
|
63
|
+
// Track when TCP socket closes
|
|
64
|
+
socket.on("close", (hadError) => {
|
|
65
|
+
console.log("TCP connection closed:", socket.remoteAddress, socket.remotePort, hadError ? "(with error)" : "(clean)");
|
|
66
|
+
});
|
|
67
|
+
// Track socket errors
|
|
68
|
+
socket.on("error", (err) => {
|
|
69
|
+
console.error("TCP socket error:", socket.remoteAddress, err);
|
|
70
|
+
});
|
|
71
|
+
})
|
|
72
|
+
.addListener("sessionError", (err) => {
|
|
73
|
+
console.error("Session Error", err);
|
|
74
|
+
})
|
|
75
|
+
.addListener("session", (session) => {
|
|
76
|
+
console.log("New HTTP/2 session created");
|
|
77
|
+
// Track when session closes
|
|
78
|
+
session.on("close", () => {
|
|
79
|
+
console.log("HTTP/2 session closed");
|
|
80
|
+
});
|
|
81
|
+
// Track session errors
|
|
82
|
+
session.on("error", (err) => {
|
|
83
|
+
console.error("HTTP/2 session error:", err);
|
|
84
|
+
});
|
|
85
|
+
// Track when session is going away
|
|
86
|
+
session.on("goaway", (errorCode, lastStreamID) => {
|
|
87
|
+
console.log("HTTP/2 session GOAWAY:", { errorCode, lastStreamID });
|
|
88
|
+
});
|
|
89
|
+
// Track individual streams (requests)
|
|
90
|
+
session.on("stream", (stream, headers) => {
|
|
91
|
+
console.log("New stream on session:", headers[":path"]);
|
|
92
|
+
stream.on("close", () => {
|
|
93
|
+
console.log("Stream closed:", headers[":path"]);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
64
96
|
})
|
|
65
97
|
.addListener("error", (err) => {
|
|
66
98
|
console.error("Server error", err);
|
|
@@ -71,13 +103,18 @@ class EffectGrpcServerLive {
|
|
|
71
103
|
.addListener("dropRequest", (req, socket) => {
|
|
72
104
|
console.warn("Dropped request", req.url, socket);
|
|
73
105
|
})
|
|
74
|
-
.listen({
|
|
75
|
-
resume(Effect.logInfo(`gRPC server listening on http://${
|
|
106
|
+
.listen({ ...options, signal }, () => {
|
|
107
|
+
resume(Effect.logInfo(`gRPC server listening on http://${options.host}:${options.port}`).pipe(Effect.as(server)));
|
|
76
108
|
});
|
|
77
109
|
});
|
|
78
|
-
const stopServer = (server) => Effect.
|
|
79
|
-
|
|
80
|
-
|
|
110
|
+
const stopServer = (server) => Effect.gen(function* () {
|
|
111
|
+
yield* Effect.logInfo("gRPC server is stopping...");
|
|
112
|
+
yield* Effect.async((resume) => {
|
|
113
|
+
// Then close the server
|
|
114
|
+
server.close(() => {
|
|
115
|
+
return resume(Effect.logInfo("gRPC server stopped"));
|
|
116
|
+
});
|
|
117
|
+
});
|
|
81
118
|
});
|
|
82
119
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
83
120
|
const server = yield* Effect.acquireRelease(startServer, stopServer);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.internal.js","sourceRoot":"","sources":["../src/server.internal.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"server.internal.js","sourceRoot":"","sources":["../src/server.internal.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,MAAM,YAAY,CAAC;AAS/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAC;AAGlD;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,oCAAoC,CAAC,CAAC;AAE9E;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAI7B,GAAQ,EAAE,UAAiB;IAC3B,OAAO,CAAM,cAA8E,EAAE,EAAE;QAC7F,OAAO;YACL,IAAI,EAAE,iBAAiB;YACvB,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,IAAW;YAEjB,cAAc;YACd,UAAU;SACuB,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,oBAAoB;IAEN;IACA;IAFlB,YACkB,QAAiE,EACjE,cAEqB;QAHrB,aAAQ,GAAR,QAAQ,CAAyD;QACjE,mBAAc,GAAd,cAAc,CAEO;IACpC,CAAC;IAEK,SAAS,GAAkC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAE7D,GAAG,CAAC,OAAuC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAElD,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,YAAY,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CACtC,kBAAkB,CAAC;gBACjB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;gBACxB,YAAY,EAAE,EAAE;gBAChB,aAAa,CAAC,GAAG;oBACf,iDAAiD;oBACjD,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;oBAE5D,OAAO,mBAAmB,EAAE,CAAC;gBAC/B,CAAC;aACF,CAAC,CACH,CAAC;YAYF,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;gBACvD,MAAM,MAAM,GAAG,KAAK;qBACjB,YAAY,CAAC,OAAO,CAAC;qBACrB,WAAW,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;oBAC5C,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC5D,CAAC,CAAC;qBACD,WAAW,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;oBACpC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;oBAE5E,+BAA+B;oBAC/B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,QAAiB,EAAE,EAAE;wBACvC,OAAO,CAAC,GAAG,CACT,wBAAwB,EACxB,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,UAAU,EACjB,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CACtC,CAAC;oBACJ,CAAC,CAAC,CAAC;oBAEH,sBAAsB;oBACtB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;wBAChC,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;oBAChE,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC;qBACD,WAAW,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE;oBACnC,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;gBACtC,CAAC,CAAC;qBACD,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;oBAClC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;oBAE1C,4BAA4B;oBAC5B,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;wBACvB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;oBACvC,CAAC,CAAC,CAAC;oBAEH,uBAAuB;oBACvB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;wBAC1B,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;oBAC9C,CAAC,CAAC,CAAC;oBAEH,mCAAmC;oBACnC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE;wBAC/C,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;oBACrE,CAAC,CAAC,CAAC;oBAEH,sCAAsC;oBACtC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;wBACvC,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;wBAExD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;4BACtB,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;wBAClD,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC;qBACD,WAAW,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;oBAC5B,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;gBACrC,CAAC,CAAC;qBACD,WAAW,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE;oBAClC,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;gBACrC,CAAC,CAAC;qBACD,WAAW,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;oBAC1C,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACnD,CAAC,CAAC;qBACD,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE;oBACnC,MAAM,CACJ,MAAM,CAAC,OAAO,CACZ,mCAAmC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAClE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAC1B,CAAC;gBACJ,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,CAAC,MAAyB,EAAE,EAAE,CAC/C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAClB,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;gBAEpD,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC7B,wBAAwB;oBACxB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;wBAChB,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;oBACvD,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEL,6DAA6D;YAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YAErE,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CACZ,QAA0C;QAE1C,MAAM,WAAW,GAAmC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEjF,OAAO,CAAC,MAAqB,EAAE,EAAE;YAC/B,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,OAAqC,EAAE,EAAE;gBAC1E,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9E,CAAC,EAAE,MAAM,CAAC,CAAC;QACb,CAAC,CAAC;IACJ,CAAC;IAEO,YAAY;QAClB,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;QAEhC,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACzB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACxC,MAAM,aAAa,GAAG,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC3D,MAAM,mBAAmB,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;YAE1D,OAAO,mBAAmB,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,0BAA0B;IAInB;IAGA;IAJlB,YACkB,YAEoC,EACpC,QAAsD;QAHtD,iBAAY,GAAZ,YAAY,CAEwB;QACpC,aAAQ,GAAR,QAAQ,CAA8C;IACrE,CAAC;IAEJ,MAAM,KAAK,KAAK;QACd,OAAO,IAAI,0BAA0B,CAAwB,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,sBAAsB,CAEpB,CAAiE;QAEjE,OAAO,IAAI,0BAA0B,CACnC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAClD,EAAE,CACH,CAAC;IACJ,CAAC;IAED,WAAW,CACT,OAAiC;QAEjC,OAAO,IAAI,0BAA0B,CAAC,IAAI,CAAC,YAAY,EAAE;YACvD,GAAG,IAAI,CAAC,QAAQ;YAChB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO;SACxB,CAAC,CAAC;IACL,CAAC;IAED,KAAK;QACH,MAAM,sBAAsB,GAAG,YAAY,CAAC,yBAAyB,EAAE,CAAC,gBAAgB,CACtF,IAAI,CAAC,YAAY,CAClB,CAAC;QAEF,OAAO,IAAI,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAC;IACxF,CAAC;CACF"}
|
package/dist/server.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
// packages/effect-grpc/src/server.ts
|
|
2
|
+
import { Effect, Scope, Types } from "effect";
|
|
3
|
+
import * as GrpcException from "./grpcException.js";
|
|
4
|
+
import * as ProtoRuntime from "./protoRuntime.js";
|
|
1
5
|
import * as internal from "./server.internal.js";
|
|
2
6
|
/**
|
|
3
7
|
* Creates a new GrpcServerBuilder instance with default HandlerContext.
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAK9C,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AA2IjD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAE1B,GAAG,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,KAAK,CAAC;AAgDpD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,MAAM,WAAW,GAOpB,QAAQ,CAAC,eAAe,CAAC"}
|
package/dist/typeUtils.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { Effect } from "effect";
|
|
2
2
|
//# sourceMappingURL=typeUtils.js.map
|
package/dist/typeUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeUtils.js","sourceRoot":"","sources":["../src/typeUtils.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"typeUtils.js","sourceRoot":"","sources":["../src/typeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC"}
|
package/package.json
CHANGED