@rebasepro/server-core 0.0.1-canary.4d4fb3e → 0.0.1-canary.ca2cb6e
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/dist/common/src/collections/CollectionRegistry.d.ts +8 -0
- package/dist/common/src/util/entities.d.ts +22 -0
- package/dist/common/src/util/relations.d.ts +14 -4
- package/dist/common/src/util/resolutions.d.ts +1 -1
- package/dist/index-DXVBFp5V.js +37 -0
- package/dist/index-DXVBFp5V.js.map +1 -0
- package/dist/index.es.js +49931 -55
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +28475 -34569
- package/dist/index.umd.js.map +1 -1
- package/dist/server-core/src/api/openapi-generator.d.ts +15 -1
- package/dist/server-core/src/api/types.d.ts +1 -1
- package/dist/server-core/src/auth/admin-routes.d.ts +10 -1
- package/dist/server-core/src/auth/apple-oauth.d.ts +30 -0
- package/dist/server-core/src/auth/bitbucket-oauth.d.ts +11 -0
- package/dist/server-core/src/auth/discord-oauth.d.ts +14 -0
- package/dist/server-core/src/auth/facebook-oauth.d.ts +14 -0
- package/dist/server-core/src/auth/github-oauth.d.ts +15 -0
- package/dist/server-core/src/auth/gitlab-oauth.d.ts +13 -0
- package/dist/server-core/src/auth/google-oauth.d.ts +5 -11
- package/dist/server-core/src/auth/index.d.ts +13 -2
- package/dist/server-core/src/auth/interfaces.d.ts +45 -6
- package/dist/server-core/src/auth/jwt.d.ts +1 -0
- package/dist/server-core/src/auth/linkedin-oauth.d.ts +18 -0
- package/dist/server-core/src/auth/microsoft-oauth.d.ts +16 -0
- package/dist/server-core/src/auth/middleware.d.ts +36 -11
- package/dist/server-core/src/auth/rate-limiter.d.ts +2 -2
- package/dist/server-core/src/auth/routes.d.ts +13 -3
- package/dist/server-core/src/auth/slack-oauth.d.ts +12 -0
- package/dist/server-core/src/auth/spotify-oauth.d.ts +12 -0
- package/dist/server-core/src/auth/twitter-oauth.d.ts +18 -0
- package/dist/server-core/src/cron/cron-loader.d.ts +17 -0
- package/dist/server-core/src/cron/cron-routes.d.ts +14 -0
- package/dist/server-core/src/cron/cron-scheduler.d.ts +61 -0
- package/dist/server-core/src/cron/cron-store.d.ts +32 -0
- package/dist/server-core/src/cron/index.d.ts +6 -0
- package/dist/server-core/src/email/index.d.ts +2 -2
- package/dist/server-core/src/email/templates.d.ts +9 -0
- package/dist/server-core/src/email/types.d.ts +20 -23
- package/dist/server-core/src/history/history-routes.d.ts +2 -2
- package/dist/server-core/src/index.d.ts +5 -0
- package/dist/server-core/src/init.d.ts +112 -2
- package/dist/server-core/src/singleton.d.ts +35 -0
- package/dist/server-core/src/storage/LocalStorageController.d.ts +9 -9
- package/dist/server-core/src/storage/S3StorageController.d.ts +8 -8
- package/dist/server-core/src/storage/index.d.ts +18 -11
- package/dist/server-core/src/storage/routes.d.ts +3 -3
- package/dist/server-core/src/storage/types.d.ts +28 -16
- package/dist/server-core/src/utils/dev-port.d.ts +35 -0
- package/dist/server-core/src/utils/logger.d.ts +31 -0
- package/dist/server-core/src/utils/request-logger.d.ts +19 -0
- package/dist/types/src/controllers/auth.d.ts +2 -0
- package/dist/types/src/controllers/client.d.ts +119 -7
- package/dist/types/src/controllers/collection_registry.d.ts +4 -3
- package/dist/types/src/controllers/customization_controller.d.ts +7 -1
- package/dist/types/src/controllers/data.d.ts +34 -7
- package/dist/types/src/controllers/data_driver.d.ts +20 -28
- package/dist/types/src/controllers/database_admin.d.ts +2 -2
- package/dist/types/src/controllers/email.d.ts +34 -0
- package/dist/types/src/controllers/index.d.ts +1 -0
- package/dist/types/src/controllers/local_config_persistence.d.ts +4 -4
- package/dist/types/src/controllers/navigation.d.ts +5 -5
- package/dist/types/src/controllers/registry.d.ts +6 -3
- package/dist/types/src/controllers/side_entity_controller.d.ts +7 -6
- package/dist/types/src/controllers/storage.d.ts +24 -26
- package/dist/types/src/rebase_context.d.ts +8 -4
- package/dist/types/src/types/backend.d.ts +4 -1
- package/dist/types/src/types/builders.d.ts +5 -4
- package/dist/types/src/types/chips.d.ts +1 -1
- package/dist/types/src/types/collections.d.ts +169 -125
- package/dist/types/src/types/cron.d.ts +102 -0
- package/dist/types/src/types/data_source.d.ts +1 -1
- package/dist/types/src/types/entity_actions.d.ts +8 -8
- package/dist/types/src/types/entity_callbacks.d.ts +15 -15
- package/dist/types/src/types/entity_link_builder.d.ts +1 -1
- package/dist/types/src/types/entity_overrides.d.ts +2 -1
- package/dist/types/src/types/entity_views.d.ts +8 -8
- package/dist/types/src/types/export_import.d.ts +3 -3
- package/dist/types/src/types/index.d.ts +1 -0
- package/dist/types/src/types/plugins.d.ts +72 -18
- package/dist/types/src/types/properties.d.ts +118 -33
- package/dist/types/src/types/relations.d.ts +1 -1
- package/dist/types/src/types/slots.d.ts +30 -6
- package/dist/types/src/types/translations.d.ts +44 -0
- package/dist/types/src/types/user_management_delegate.d.ts +1 -0
- package/package.json +84 -84
- package/scratch.ts +6 -5
- package/src/api/ast-schema-editor.ts +11 -11
- package/src/api/collections_for_test/callbacks_test_collection.ts +5 -2
- package/src/api/errors.ts +38 -14
- package/src/api/graphql/graphql-schema-generator.ts +5 -3
- package/src/api/openapi-generator.ts +613 -58
- package/src/api/rest/api-generator.ts +17 -11
- package/src/api/rest/query-parser.ts +1 -1
- package/src/api/schema-editor-routes.ts +2 -0
- package/src/api/server.ts +8 -5
- package/src/api/types.ts +1 -1
- package/src/auth/admin-routes.ts +58 -17
- package/src/auth/apple-oauth.ts +130 -0
- package/src/auth/bitbucket-oauth.ts +82 -0
- package/src/auth/discord-oauth.ts +83 -0
- package/src/auth/facebook-oauth.ts +72 -0
- package/src/auth/github-oauth.ts +110 -0
- package/src/auth/gitlab-oauth.ts +70 -0
- package/src/auth/google-oauth.ts +34 -46
- package/src/auth/index.ts +15 -2
- package/src/auth/interfaces.ts +54 -7
- package/src/auth/jwt.ts +22 -5
- package/src/auth/linkedin-oauth.ts +81 -0
- package/src/auth/microsoft-oauth.ts +88 -0
- package/src/auth/middleware.ts +194 -45
- package/src/auth/password.ts +3 -1
- package/src/auth/rate-limiter.ts +4 -4
- package/src/auth/routes.ts +197 -139
- package/src/auth/slack-oauth.ts +71 -0
- package/src/auth/spotify-oauth.ts +67 -0
- package/src/auth/twitter-oauth.ts +120 -0
- package/src/collections/loader.ts +6 -6
- package/src/cron/cron-loader.ts +89 -0
- package/src/cron/cron-routes.test.ts +265 -0
- package/src/cron/cron-routes.ts +85 -0
- package/src/cron/cron-scheduler.test.ts +421 -0
- package/src/cron/cron-scheduler.ts +413 -0
- package/src/cron/cron-store.ts +163 -0
- package/src/cron/index.ts +6 -0
- package/src/db/interfaces.ts +2 -2
- package/src/email/index.ts +3 -2
- package/src/email/smtp-email-service.ts +5 -2
- package/src/email/templates.ts +93 -6
- package/src/email/types.ts +17 -24
- package/src/functions/function-loader.ts +34 -6
- package/src/functions/function-routes.ts +2 -2
- package/src/history/history-routes.ts +4 -3
- package/src/index.ts +10 -0
- package/src/init.ts +475 -57
- package/src/services/driver-registry.ts +1 -1
- package/src/singleton.test.ts +28 -0
- package/src/singleton.ts +70 -0
- package/src/storage/LocalStorageController.ts +50 -53
- package/src/storage/S3StorageController.ts +49 -46
- package/src/storage/index.ts +27 -16
- package/src/storage/routes.ts +76 -59
- package/src/storage/storage-registry.ts +5 -5
- package/src/storage/types.ts +44 -32
- package/src/types/index.ts +4 -4
- package/src/utils/dev-port.ts +176 -0
- package/src/utils/logger.ts +143 -0
- package/src/utils/logging.ts +5 -2
- package/src/utils/request-logger.ts +66 -0
- package/test/admin-routes.test.ts +114 -65
- package/test/api-generator.test.ts +73 -30
- package/test/ast-schema-editor.test.ts +5 -3
- package/test/auth-middleware-hono.test.ts +268 -33
- package/test/auth-routes.test.ts +325 -146
- package/test/driver-registry.test.ts +4 -2
- package/test/error-propagation.test.ts +226 -0
- package/test/errors.test.ts +12 -7
- package/test/jwt-security.test.ts +18 -9
- package/test/jwt.test.ts +26 -13
- package/test/middleware.test.ts +13 -8
- package/test/query-parser.test.ts +13 -8
- package/test/rate-limiter.test.ts +7 -7
- package/test/safe-compare.test.ts +66 -0
- package/test/singleton.test.ts +59 -0
- package/test/storage-local.test.ts +36 -43
- package/test/storage-registry.test.ts +38 -36
- package/test/storage-routes.test.ts +9 -5
- package/test/storage-s3.test.ts +51 -48
- package/test.ts +6 -0
- package/tsconfig.json +1 -1
- package/vite.config.ts +7 -5
- package/dist/index-BeMqpmfQ.js +0 -239
- package/dist/index-BeMqpmfQ.js.map +0 -1
- package/dist/index-bl4J3lNb.js +0 -55823
- package/dist/index-bl4J3lNb.js.map +0 -1
- package/vite.config.ts.timestamp-1775065397568-8a853255edf6e.mjs +0 -46
package/test/storage-s3.test.ts
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, jest as vi } from "@jest/globals";
|
|
1
2
|
import { S3StorageController } from "../src/storage/S3StorageController";
|
|
2
3
|
|
|
3
4
|
// Mock the AWS SDK before importing the controller
|
|
4
|
-
|
|
5
|
-
S3Client:
|
|
6
|
-
send:
|
|
7
|
-
})
|
|
8
|
-
PutObjectCommand:
|
|
9
|
-
GetObjectCommand:
|
|
10
|
-
DeleteObjectCommand:
|
|
11
|
-
ListObjectsV2Command:
|
|
12
|
-
HeadObjectCommand:
|
|
5
|
+
vi.mock("@aws-sdk/client-s3", () => ({
|
|
6
|
+
S3Client: vi.fn().mockImplementation(function() {
|
|
7
|
+
return { send: vi.fn() };
|
|
8
|
+
}),
|
|
9
|
+
PutObjectCommand: vi.fn(),
|
|
10
|
+
GetObjectCommand: vi.fn(),
|
|
11
|
+
DeleteObjectCommand: vi.fn(),
|
|
12
|
+
ListObjectsV2Command: vi.fn(),
|
|
13
|
+
HeadObjectCommand: vi.fn()
|
|
13
14
|
}));
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
getSignedUrl:
|
|
16
|
+
vi.mock("@aws-sdk/s3-request-presigner", () => ({
|
|
17
|
+
getSignedUrl: vi.fn().mockResolvedValue("https://presigned-url.example.com")
|
|
17
18
|
}));
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const { getSignedUrl } = require("@aws-sdk/s3-request-presigner");
|
|
20
|
+
import { S3Client, PutObjectCommand, GetObjectCommand, DeleteObjectCommand, ListObjectsV2Command } from "@aws-sdk/client-s3";
|
|
21
|
+
import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
|
|
22
22
|
|
|
23
23
|
describe("S3StorageController", () => {
|
|
24
24
|
let controller: S3StorageController;
|
|
25
|
-
let mockSend:
|
|
25
|
+
let mockSend: vi.Mock;
|
|
26
26
|
|
|
27
27
|
const defaultConfig = {
|
|
28
28
|
bucket: "test-bucket",
|
|
@@ -32,11 +32,11 @@ describe("S3StorageController", () => {
|
|
|
32
32
|
};
|
|
33
33
|
|
|
34
34
|
beforeEach(() => {
|
|
35
|
-
|
|
36
|
-
mockSend =
|
|
37
|
-
(S3Client
|
|
38
|
-
send: mockSend
|
|
39
|
-
})
|
|
35
|
+
vi.clearAllMocks();
|
|
36
|
+
mockSend = vi.fn();
|
|
37
|
+
vi.mocked(S3Client).mockImplementation(function() {
|
|
38
|
+
return { send: mockSend };
|
|
39
|
+
} as any);
|
|
40
40
|
controller = new S3StorageController(defaultConfig);
|
|
41
41
|
});
|
|
42
42
|
|
|
@@ -52,7 +52,7 @@ describe("S3StorageController", () => {
|
|
|
52
52
|
});
|
|
53
53
|
|
|
54
54
|
it("should initialize with endpoint for S3-compatible services", () => {
|
|
55
|
-
|
|
55
|
+
vi.clearAllMocks();
|
|
56
56
|
new S3StorageController({
|
|
57
57
|
...defaultConfig,
|
|
58
58
|
endpoint: "https://minio.example.com",
|
|
@@ -70,17 +70,16 @@ describe("S3StorageController", () => {
|
|
|
70
70
|
});
|
|
71
71
|
});
|
|
72
72
|
|
|
73
|
-
describe("
|
|
73
|
+
describe("putObject", () => {
|
|
74
74
|
it("should upload file using PutObjectCommand", async () => {
|
|
75
75
|
const content = Buffer.from("Test content");
|
|
76
76
|
const file = new File([content], "test.txt", { type: "text/plain" });
|
|
77
77
|
|
|
78
78
|
mockSend.mockResolvedValueOnce({});
|
|
79
79
|
|
|
80
|
-
const result = await controller.
|
|
80
|
+
const result = await controller.putObject({
|
|
81
81
|
file,
|
|
82
|
-
|
|
83
|
-
path: "uploads"
|
|
82
|
+
key: "uploads/test.txt"
|
|
84
83
|
});
|
|
85
84
|
|
|
86
85
|
expect(PutObjectCommand).toHaveBeenCalledWith(expect.objectContaining({
|
|
@@ -89,7 +88,7 @@ describe("S3StorageController", () => {
|
|
|
89
88
|
ContentType: "text/plain"
|
|
90
89
|
}));
|
|
91
90
|
expect(mockSend).toHaveBeenCalled();
|
|
92
|
-
expect(result.
|
|
91
|
+
expect(result.key).toBe("uploads/test.txt");
|
|
93
92
|
});
|
|
94
93
|
|
|
95
94
|
it("should include metadata in upload", async () => {
|
|
@@ -97,10 +96,9 @@ describe("S3StorageController", () => {
|
|
|
97
96
|
|
|
98
97
|
mockSend.mockResolvedValueOnce({});
|
|
99
98
|
|
|
100
|
-
await controller.
|
|
99
|
+
await controller.putObject({
|
|
101
100
|
file,
|
|
102
|
-
|
|
103
|
-
path: "uploads",
|
|
101
|
+
key: "uploads/test.txt",
|
|
104
102
|
metadata: { customKey: "customValue" }
|
|
105
103
|
});
|
|
106
104
|
|
|
@@ -116,10 +114,9 @@ describe("S3StorageController", () => {
|
|
|
116
114
|
|
|
117
115
|
mockSend.mockResolvedValueOnce({});
|
|
118
116
|
|
|
119
|
-
await controller.
|
|
117
|
+
await controller.putObject({
|
|
120
118
|
file,
|
|
121
|
-
|
|
122
|
-
path: "uploads",
|
|
119
|
+
key: "uploads/test.txt",
|
|
123
120
|
bucket: "custom-bucket"
|
|
124
121
|
});
|
|
125
122
|
|
|
@@ -129,7 +126,7 @@ describe("S3StorageController", () => {
|
|
|
129
126
|
});
|
|
130
127
|
});
|
|
131
128
|
|
|
132
|
-
describe("
|
|
129
|
+
describe("getSignedUrl", () => {
|
|
133
130
|
it("should generate presigned URL", async () => {
|
|
134
131
|
mockSend.mockResolvedValueOnce({
|
|
135
132
|
ContentType: "text/plain",
|
|
@@ -138,7 +135,7 @@ describe("S3StorageController", () => {
|
|
|
138
135
|
Metadata: {}
|
|
139
136
|
});
|
|
140
137
|
|
|
141
|
-
const result = await controller.
|
|
138
|
+
const result = await controller.getSignedUrl("uploads/test.txt");
|
|
142
139
|
|
|
143
140
|
expect(getSignedUrl).toHaveBeenCalled();
|
|
144
141
|
expect(result.url).toBe("https://presigned-url.example.com");
|
|
@@ -153,30 +150,30 @@ describe("S3StorageController", () => {
|
|
|
153
150
|
Metadata: { originalName: "photo.png" }
|
|
154
151
|
});
|
|
155
152
|
|
|
156
|
-
const result = await controller.
|
|
153
|
+
const result = await controller.getSignedUrl("images/photo.png");
|
|
157
154
|
|
|
158
155
|
expect(result.metadata).toBeDefined();
|
|
159
156
|
expect(result.metadata?.contentType).toBe("image/png");
|
|
160
157
|
});
|
|
161
158
|
});
|
|
162
159
|
|
|
163
|
-
describe("
|
|
160
|
+
describe("getObject", () => {
|
|
164
161
|
it("should return null for non-existent file", async () => {
|
|
165
162
|
const error = new Error("NoSuchKey");
|
|
166
163
|
(error as any).name = "NoSuchKey";
|
|
167
164
|
mockSend.mockRejectedValueOnce(error);
|
|
168
165
|
|
|
169
|
-
const result = await controller.
|
|
166
|
+
const result = await controller.getObject("nonexistent.txt");
|
|
170
167
|
|
|
171
168
|
expect(result).toBeNull();
|
|
172
169
|
});
|
|
173
170
|
});
|
|
174
171
|
|
|
175
|
-
describe("
|
|
172
|
+
describe("deleteObject", () => {
|
|
176
173
|
it("should delete file from S3", async () => {
|
|
177
174
|
mockSend.mockResolvedValueOnce({});
|
|
178
175
|
|
|
179
|
-
await controller.
|
|
176
|
+
await controller.deleteObject("uploads/test.txt");
|
|
180
177
|
|
|
181
178
|
expect(DeleteObjectCommand).toHaveBeenCalledWith(expect.objectContaining({
|
|
182
179
|
Bucket: "test-bucket",
|
|
@@ -187,7 +184,7 @@ describe("S3StorageController", () => {
|
|
|
187
184
|
it("should not throw for non-existent file", async () => {
|
|
188
185
|
mockSend.mockResolvedValueOnce({});
|
|
189
186
|
|
|
190
|
-
await expect(controller.
|
|
187
|
+
await expect(controller.deleteObject("nonexistent.txt")).resolves.not.toThrow();
|
|
191
188
|
});
|
|
192
189
|
});
|
|
193
190
|
|
|
@@ -195,18 +192,22 @@ describe("S3StorageController", () => {
|
|
|
195
192
|
it("should list objects in S3 bucket", async () => {
|
|
196
193
|
mockSend.mockResolvedValueOnce({
|
|
197
194
|
Contents: [
|
|
198
|
-
{ Key: "uploads/file1.txt",
|
|
199
|
-
|
|
195
|
+
{ Key: "uploads/file1.txt",
|
|
196
|
+
Size: 100,
|
|
197
|
+
LastModified: new Date() },
|
|
198
|
+
{ Key: "uploads/file2.txt",
|
|
199
|
+
Size: 200,
|
|
200
|
+
LastModified: new Date() }
|
|
200
201
|
],
|
|
201
202
|
CommonPrefixes: [],
|
|
202
203
|
IsTruncated: false
|
|
203
204
|
});
|
|
204
205
|
|
|
205
|
-
const result = await controller.
|
|
206
|
+
const result = await controller.listObjects("uploads");
|
|
206
207
|
|
|
207
208
|
expect(ListObjectsV2Command).toHaveBeenCalledWith(expect.objectContaining({
|
|
208
209
|
Bucket: "test-bucket",
|
|
209
|
-
Prefix: "uploads"
|
|
210
|
+
Prefix: "uploads" // Implementation doesn't add trailing slash
|
|
210
211
|
}));
|
|
211
212
|
expect(result.items).toHaveLength(2);
|
|
212
213
|
});
|
|
@@ -214,14 +215,16 @@ describe("S3StorageController", () => {
|
|
|
214
215
|
it("should handle pagination with maxResults", async () => {
|
|
215
216
|
mockSend.mockResolvedValueOnce({
|
|
216
217
|
Contents: [
|
|
217
|
-
{ Key: "uploads/file1.txt",
|
|
218
|
+
{ Key: "uploads/file1.txt",
|
|
219
|
+
Size: 100,
|
|
220
|
+
LastModified: new Date() }
|
|
218
221
|
],
|
|
219
222
|
CommonPrefixes: [],
|
|
220
223
|
IsTruncated: true,
|
|
221
224
|
NextContinuationToken: "token123"
|
|
222
225
|
});
|
|
223
226
|
|
|
224
|
-
const result = await controller.
|
|
227
|
+
const result = await controller.listObjects("uploads", { maxResults: 1 });
|
|
225
228
|
|
|
226
229
|
expect(ListObjectsV2Command).toHaveBeenCalledWith(expect.objectContaining({
|
|
227
230
|
MaxKeys: 1
|
|
@@ -239,7 +242,7 @@ describe("S3StorageController", () => {
|
|
|
239
242
|
IsTruncated: false
|
|
240
243
|
});
|
|
241
244
|
|
|
242
|
-
const result = await controller.
|
|
245
|
+
const result = await controller.listObjects("uploads");
|
|
243
246
|
|
|
244
247
|
expect(result.prefixes).toHaveLength(2);
|
|
245
248
|
});
|
|
@@ -251,7 +254,7 @@ describe("S3StorageController", () => {
|
|
|
251
254
|
IsTruncated: false
|
|
252
255
|
});
|
|
253
256
|
|
|
254
|
-
await controller.
|
|
257
|
+
await controller.listObjects("uploads", { pageToken: "continue-token" });
|
|
255
258
|
|
|
256
259
|
expect(ListObjectsV2Command).toHaveBeenCalledWith(expect.objectContaining({
|
|
257
260
|
ContinuationToken: "continue-token"
|
package/test.ts
ADDED
package/tsconfig.json
CHANGED
package/vite.config.ts
CHANGED
|
@@ -17,17 +17,19 @@ const CONSUMER_EXTERNALS = [
|
|
|
17
17
|
"hono",
|
|
18
18
|
"drizzle-orm",
|
|
19
19
|
"@hono/node-server",
|
|
20
|
+
"@aws-sdk/client-s3",
|
|
21
|
+
"@aws-sdk/s3-request-presigner",
|
|
20
22
|
"dotenv",
|
|
21
23
|
"pg",
|
|
22
24
|
"chokidar",
|
|
23
25
|
"fsevents",
|
|
24
26
|
"ws",
|
|
25
|
-
"ts-morph"
|
|
27
|
+
"ts-morph"
|
|
26
28
|
];
|
|
27
29
|
const isExternal = (id: string) => {
|
|
28
30
|
if (id.startsWith(".") || path.isAbsolute(id)) return false;
|
|
29
31
|
// Inline all @rebasepro/* packages
|
|
30
|
-
|
|
32
|
+
|
|
31
33
|
// Externalize only deps the consumer app explicitly installs
|
|
32
34
|
if (CONSUMER_EXTERNALS.some(ext => id === ext || id.startsWith(ext + "/"))) return true;
|
|
33
35
|
// Externalize Node built-ins
|
|
@@ -63,15 +65,15 @@ export default defineConfig(() => ({
|
|
|
63
65
|
resolve: {
|
|
64
66
|
alias: {
|
|
65
67
|
"@rebasepro/common": path.resolve(__dirname, "../common/src"),
|
|
66
|
-
"@rebasepro/types": path.resolve(__dirname, "../types/src")
|
|
68
|
+
"@rebasepro/types": path.resolve(__dirname, "../types/src")
|
|
67
69
|
}
|
|
68
70
|
},
|
|
69
71
|
plugins: [
|
|
70
72
|
react({
|
|
71
73
|
babel: {
|
|
72
74
|
plugins: [
|
|
73
|
-
["babel-plugin-react-compiler", ReactCompilerConfig]
|
|
74
|
-
]
|
|
75
|
+
["babel-plugin-react-compiler", ReactCompilerConfig]
|
|
76
|
+
]
|
|
75
77
|
}
|
|
76
78
|
})
|
|
77
79
|
]
|
package/dist/index-BeMqpmfQ.js
DELETED
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
import { t as toUtf8, f as fromUtf8 } from "./index-bl4J3lNb.js";
|
|
2
|
-
class EventStreamSerde {
|
|
3
|
-
marshaller;
|
|
4
|
-
serializer;
|
|
5
|
-
deserializer;
|
|
6
|
-
serdeContext;
|
|
7
|
-
defaultContentType;
|
|
8
|
-
constructor({ marshaller, serializer, deserializer, serdeContext, defaultContentType }) {
|
|
9
|
-
this.marshaller = marshaller;
|
|
10
|
-
this.serializer = serializer;
|
|
11
|
-
this.deserializer = deserializer;
|
|
12
|
-
this.serdeContext = serdeContext;
|
|
13
|
-
this.defaultContentType = defaultContentType;
|
|
14
|
-
}
|
|
15
|
-
async serializeEventStream({ eventStream, requestSchema, initialRequest }) {
|
|
16
|
-
const marshaller = this.marshaller;
|
|
17
|
-
const eventStreamMember = requestSchema.getEventStreamMember();
|
|
18
|
-
const unionSchema = requestSchema.getMemberSchema(eventStreamMember);
|
|
19
|
-
const serializer = this.serializer;
|
|
20
|
-
const defaultContentType = this.defaultContentType;
|
|
21
|
-
const initialRequestMarker = Symbol("initialRequestMarker");
|
|
22
|
-
const eventStreamIterable = {
|
|
23
|
-
async *[Symbol.asyncIterator]() {
|
|
24
|
-
if (initialRequest) {
|
|
25
|
-
const headers = {
|
|
26
|
-
":event-type": { type: "string", value: "initial-request" },
|
|
27
|
-
":message-type": { type: "string", value: "event" },
|
|
28
|
-
":content-type": { type: "string", value: defaultContentType }
|
|
29
|
-
};
|
|
30
|
-
serializer.write(requestSchema, initialRequest);
|
|
31
|
-
const body = serializer.flush();
|
|
32
|
-
yield {
|
|
33
|
-
[initialRequestMarker]: true,
|
|
34
|
-
headers,
|
|
35
|
-
body
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
for await (const page of eventStream) {
|
|
39
|
-
yield page;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
return marshaller.serialize(eventStreamIterable, (event) => {
|
|
44
|
-
if (event[initialRequestMarker]) {
|
|
45
|
-
return {
|
|
46
|
-
headers: event.headers,
|
|
47
|
-
body: event.body
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
const unionMember = Object.keys(event).find((key) => {
|
|
51
|
-
return key !== "__type";
|
|
52
|
-
}) ?? "";
|
|
53
|
-
const { additionalHeaders, body, eventType, explicitPayloadContentType } = this.writeEventBody(unionMember, unionSchema, event);
|
|
54
|
-
const headers = {
|
|
55
|
-
":event-type": { type: "string", value: eventType },
|
|
56
|
-
":message-type": { type: "string", value: "event" },
|
|
57
|
-
":content-type": { type: "string", value: explicitPayloadContentType ?? defaultContentType },
|
|
58
|
-
...additionalHeaders
|
|
59
|
-
};
|
|
60
|
-
return {
|
|
61
|
-
headers,
|
|
62
|
-
body
|
|
63
|
-
};
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
async deserializeEventStream({ response, responseSchema, initialResponseContainer }) {
|
|
67
|
-
const marshaller = this.marshaller;
|
|
68
|
-
const eventStreamMember = responseSchema.getEventStreamMember();
|
|
69
|
-
const unionSchema = responseSchema.getMemberSchema(eventStreamMember);
|
|
70
|
-
const memberSchemas = unionSchema.getMemberSchemas();
|
|
71
|
-
const initialResponseMarker = Symbol("initialResponseMarker");
|
|
72
|
-
const asyncIterable = marshaller.deserialize(response.body, async (event) => {
|
|
73
|
-
const unionMember = Object.keys(event).find((key) => {
|
|
74
|
-
return key !== "__type";
|
|
75
|
-
}) ?? "";
|
|
76
|
-
const body = event[unionMember].body;
|
|
77
|
-
if (unionMember === "initial-response") {
|
|
78
|
-
const dataObject = await this.deserializer.read(responseSchema, body);
|
|
79
|
-
delete dataObject[eventStreamMember];
|
|
80
|
-
return {
|
|
81
|
-
[initialResponseMarker]: true,
|
|
82
|
-
...dataObject
|
|
83
|
-
};
|
|
84
|
-
} else if (unionMember in memberSchemas) {
|
|
85
|
-
const eventStreamSchema = memberSchemas[unionMember];
|
|
86
|
-
if (eventStreamSchema.isStructSchema()) {
|
|
87
|
-
const out = {};
|
|
88
|
-
let hasBindings = false;
|
|
89
|
-
for (const [name, member] of eventStreamSchema.structIterator()) {
|
|
90
|
-
const { eventHeader, eventPayload } = member.getMergedTraits();
|
|
91
|
-
hasBindings = hasBindings || Boolean(eventHeader || eventPayload);
|
|
92
|
-
if (eventPayload) {
|
|
93
|
-
if (member.isBlobSchema()) {
|
|
94
|
-
out[name] = body;
|
|
95
|
-
} else if (member.isStringSchema()) {
|
|
96
|
-
out[name] = (this.serdeContext?.utf8Encoder ?? toUtf8)(body);
|
|
97
|
-
} else if (member.isStructSchema()) {
|
|
98
|
-
out[name] = await this.deserializer.read(member, body);
|
|
99
|
-
}
|
|
100
|
-
} else if (eventHeader) {
|
|
101
|
-
const value = event[unionMember].headers[name]?.value;
|
|
102
|
-
if (value != null) {
|
|
103
|
-
if (member.isNumericSchema()) {
|
|
104
|
-
if (value && typeof value === "object" && "bytes" in value) {
|
|
105
|
-
out[name] = BigInt(value.toString());
|
|
106
|
-
} else {
|
|
107
|
-
out[name] = Number(value);
|
|
108
|
-
}
|
|
109
|
-
} else {
|
|
110
|
-
out[name] = value;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
if (hasBindings) {
|
|
116
|
-
return {
|
|
117
|
-
[unionMember]: out
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
if (body.byteLength === 0) {
|
|
121
|
-
return {
|
|
122
|
-
[unionMember]: {}
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
return {
|
|
127
|
-
[unionMember]: await this.deserializer.read(eventStreamSchema, body)
|
|
128
|
-
};
|
|
129
|
-
} else {
|
|
130
|
-
return {
|
|
131
|
-
$unknown: event
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
const asyncIterator = asyncIterable[Symbol.asyncIterator]();
|
|
136
|
-
const firstEvent = await asyncIterator.next();
|
|
137
|
-
if (firstEvent.done) {
|
|
138
|
-
return asyncIterable;
|
|
139
|
-
}
|
|
140
|
-
if (firstEvent.value?.[initialResponseMarker]) {
|
|
141
|
-
if (!responseSchema) {
|
|
142
|
-
throw new Error("@smithy::core/protocols - initial-response event encountered in event stream but no response schema given.");
|
|
143
|
-
}
|
|
144
|
-
for (const [key, value] of Object.entries(firstEvent.value)) {
|
|
145
|
-
initialResponseContainer[key] = value;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return {
|
|
149
|
-
async *[Symbol.asyncIterator]() {
|
|
150
|
-
if (!firstEvent?.value?.[initialResponseMarker]) {
|
|
151
|
-
yield firstEvent.value;
|
|
152
|
-
}
|
|
153
|
-
while (true) {
|
|
154
|
-
const { done, value } = await asyncIterator.next();
|
|
155
|
-
if (done) {
|
|
156
|
-
break;
|
|
157
|
-
}
|
|
158
|
-
yield value;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
writeEventBody(unionMember, unionSchema, event) {
|
|
164
|
-
const serializer = this.serializer;
|
|
165
|
-
let eventType = unionMember;
|
|
166
|
-
let explicitPayloadMember = null;
|
|
167
|
-
let explicitPayloadContentType;
|
|
168
|
-
const isKnownSchema = (() => {
|
|
169
|
-
const struct = unionSchema.getSchema();
|
|
170
|
-
return struct[4].includes(unionMember);
|
|
171
|
-
})();
|
|
172
|
-
const additionalHeaders = {};
|
|
173
|
-
if (!isKnownSchema) {
|
|
174
|
-
const [type, value] = event[unionMember];
|
|
175
|
-
eventType = type;
|
|
176
|
-
serializer.write(15, value);
|
|
177
|
-
} else {
|
|
178
|
-
const eventSchema = unionSchema.getMemberSchema(unionMember);
|
|
179
|
-
if (eventSchema.isStructSchema()) {
|
|
180
|
-
for (const [memberName, memberSchema] of eventSchema.structIterator()) {
|
|
181
|
-
const { eventHeader, eventPayload } = memberSchema.getMergedTraits();
|
|
182
|
-
if (eventPayload) {
|
|
183
|
-
explicitPayloadMember = memberName;
|
|
184
|
-
} else if (eventHeader) {
|
|
185
|
-
const value = event[unionMember][memberName];
|
|
186
|
-
let type = "binary";
|
|
187
|
-
if (memberSchema.isNumericSchema()) {
|
|
188
|
-
if ((-2) ** 31 <= value && value <= 2 ** 31 - 1) {
|
|
189
|
-
type = "integer";
|
|
190
|
-
} else {
|
|
191
|
-
type = "long";
|
|
192
|
-
}
|
|
193
|
-
} else if (memberSchema.isTimestampSchema()) {
|
|
194
|
-
type = "timestamp";
|
|
195
|
-
} else if (memberSchema.isStringSchema()) {
|
|
196
|
-
type = "string";
|
|
197
|
-
} else if (memberSchema.isBooleanSchema()) {
|
|
198
|
-
type = "boolean";
|
|
199
|
-
}
|
|
200
|
-
if (value != null) {
|
|
201
|
-
additionalHeaders[memberName] = {
|
|
202
|
-
type,
|
|
203
|
-
value
|
|
204
|
-
};
|
|
205
|
-
delete event[unionMember][memberName];
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
if (explicitPayloadMember !== null) {
|
|
210
|
-
const payloadSchema = eventSchema.getMemberSchema(explicitPayloadMember);
|
|
211
|
-
if (payloadSchema.isBlobSchema()) {
|
|
212
|
-
explicitPayloadContentType = "application/octet-stream";
|
|
213
|
-
} else if (payloadSchema.isStringSchema()) {
|
|
214
|
-
explicitPayloadContentType = "text/plain";
|
|
215
|
-
}
|
|
216
|
-
serializer.write(payloadSchema, event[unionMember][explicitPayloadMember]);
|
|
217
|
-
} else {
|
|
218
|
-
serializer.write(eventSchema, event[unionMember]);
|
|
219
|
-
}
|
|
220
|
-
} else if (eventSchema.isUnitSchema()) {
|
|
221
|
-
serializer.write(eventSchema, {});
|
|
222
|
-
} else {
|
|
223
|
-
throw new Error("@smithy/core/event-streams - non-struct member not supported in event stream union.");
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
const messageSerialization = serializer.flush() ?? new Uint8Array();
|
|
227
|
-
const body = typeof messageSerialization === "string" ? (this.serdeContext?.utf8Decoder ?? fromUtf8)(messageSerialization) : messageSerialization;
|
|
228
|
-
return {
|
|
229
|
-
body,
|
|
230
|
-
eventType,
|
|
231
|
-
explicitPayloadContentType,
|
|
232
|
-
additionalHeaders
|
|
233
|
-
};
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
export {
|
|
237
|
-
EventStreamSerde
|
|
238
|
-
};
|
|
239
|
-
//# sourceMappingURL=index-BeMqpmfQ.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-BeMqpmfQ.js","sources":["../../../node_modules/@smithy/core/dist-es/submodules/event-streams/EventStreamSerde.js"],"sourcesContent":["import { fromUtf8, toUtf8 } from \"@smithy/util-utf8\";\nexport class EventStreamSerde {\n marshaller;\n serializer;\n deserializer;\n serdeContext;\n defaultContentType;\n constructor({ marshaller, serializer, deserializer, serdeContext, defaultContentType, }) {\n this.marshaller = marshaller;\n this.serializer = serializer;\n this.deserializer = deserializer;\n this.serdeContext = serdeContext;\n this.defaultContentType = defaultContentType;\n }\n async serializeEventStream({ eventStream, requestSchema, initialRequest, }) {\n const marshaller = this.marshaller;\n const eventStreamMember = requestSchema.getEventStreamMember();\n const unionSchema = requestSchema.getMemberSchema(eventStreamMember);\n const serializer = this.serializer;\n const defaultContentType = this.defaultContentType;\n const initialRequestMarker = Symbol(\"initialRequestMarker\");\n const eventStreamIterable = {\n async *[Symbol.asyncIterator]() {\n if (initialRequest) {\n const headers = {\n \":event-type\": { type: \"string\", value: \"initial-request\" },\n \":message-type\": { type: \"string\", value: \"event\" },\n \":content-type\": { type: \"string\", value: defaultContentType },\n };\n serializer.write(requestSchema, initialRequest);\n const body = serializer.flush();\n yield {\n [initialRequestMarker]: true,\n headers,\n body,\n };\n }\n for await (const page of eventStream) {\n yield page;\n }\n },\n };\n return marshaller.serialize(eventStreamIterable, (event) => {\n if (event[initialRequestMarker]) {\n return {\n headers: event.headers,\n body: event.body,\n };\n }\n const unionMember = Object.keys(event).find((key) => {\n return key !== \"__type\";\n }) ?? \"\";\n const { additionalHeaders, body, eventType, explicitPayloadContentType } = this.writeEventBody(unionMember, unionSchema, event);\n const headers = {\n \":event-type\": { type: \"string\", value: eventType },\n \":message-type\": { type: \"string\", value: \"event\" },\n \":content-type\": { type: \"string\", value: explicitPayloadContentType ?? defaultContentType },\n ...additionalHeaders,\n };\n return {\n headers,\n body,\n };\n });\n }\n async deserializeEventStream({ response, responseSchema, initialResponseContainer, }) {\n const marshaller = this.marshaller;\n const eventStreamMember = responseSchema.getEventStreamMember();\n const unionSchema = responseSchema.getMemberSchema(eventStreamMember);\n const memberSchemas = unionSchema.getMemberSchemas();\n const initialResponseMarker = Symbol(\"initialResponseMarker\");\n const asyncIterable = marshaller.deserialize(response.body, async (event) => {\n const unionMember = Object.keys(event).find((key) => {\n return key !== \"__type\";\n }) ?? \"\";\n const body = event[unionMember].body;\n if (unionMember === \"initial-response\") {\n const dataObject = await this.deserializer.read(responseSchema, body);\n delete dataObject[eventStreamMember];\n return {\n [initialResponseMarker]: true,\n ...dataObject,\n };\n }\n else if (unionMember in memberSchemas) {\n const eventStreamSchema = memberSchemas[unionMember];\n if (eventStreamSchema.isStructSchema()) {\n const out = {};\n let hasBindings = false;\n for (const [name, member] of eventStreamSchema.structIterator()) {\n const { eventHeader, eventPayload } = member.getMergedTraits();\n hasBindings = hasBindings || Boolean(eventHeader || eventPayload);\n if (eventPayload) {\n if (member.isBlobSchema()) {\n out[name] = body;\n }\n else if (member.isStringSchema()) {\n out[name] = (this.serdeContext?.utf8Encoder ?? toUtf8)(body);\n }\n else if (member.isStructSchema()) {\n out[name] = await this.deserializer.read(member, body);\n }\n }\n else if (eventHeader) {\n const value = event[unionMember].headers[name]?.value;\n if (value != null) {\n if (member.isNumericSchema()) {\n if (value && typeof value === \"object\" && \"bytes\" in value) {\n out[name] = BigInt(value.toString());\n }\n else {\n out[name] = Number(value);\n }\n }\n else {\n out[name] = value;\n }\n }\n }\n }\n if (hasBindings) {\n return {\n [unionMember]: out,\n };\n }\n if (body.byteLength === 0) {\n return {\n [unionMember]: {},\n };\n }\n }\n return {\n [unionMember]: await this.deserializer.read(eventStreamSchema, body),\n };\n }\n else {\n return {\n $unknown: event,\n };\n }\n });\n const asyncIterator = asyncIterable[Symbol.asyncIterator]();\n const firstEvent = await asyncIterator.next();\n if (firstEvent.done) {\n return asyncIterable;\n }\n if (firstEvent.value?.[initialResponseMarker]) {\n if (!responseSchema) {\n throw new Error(\"@smithy::core/protocols - initial-response event encountered in event stream but no response schema given.\");\n }\n for (const [key, value] of Object.entries(firstEvent.value)) {\n initialResponseContainer[key] = value;\n }\n }\n return {\n async *[Symbol.asyncIterator]() {\n if (!firstEvent?.value?.[initialResponseMarker]) {\n yield firstEvent.value;\n }\n while (true) {\n const { done, value } = await asyncIterator.next();\n if (done) {\n break;\n }\n yield value;\n }\n },\n };\n }\n writeEventBody(unionMember, unionSchema, event) {\n const serializer = this.serializer;\n let eventType = unionMember;\n let explicitPayloadMember = null;\n let explicitPayloadContentType;\n const isKnownSchema = (() => {\n const struct = unionSchema.getSchema();\n return struct[4].includes(unionMember);\n })();\n const additionalHeaders = {};\n if (!isKnownSchema) {\n const [type, value] = event[unionMember];\n eventType = type;\n serializer.write(15, value);\n }\n else {\n const eventSchema = unionSchema.getMemberSchema(unionMember);\n if (eventSchema.isStructSchema()) {\n for (const [memberName, memberSchema] of eventSchema.structIterator()) {\n const { eventHeader, eventPayload } = memberSchema.getMergedTraits();\n if (eventPayload) {\n explicitPayloadMember = memberName;\n }\n else if (eventHeader) {\n const value = event[unionMember][memberName];\n let type = \"binary\";\n if (memberSchema.isNumericSchema()) {\n if ((-2) ** 31 <= value && value <= 2 ** 31 - 1) {\n type = \"integer\";\n }\n else {\n type = \"long\";\n }\n }\n else if (memberSchema.isTimestampSchema()) {\n type = \"timestamp\";\n }\n else if (memberSchema.isStringSchema()) {\n type = \"string\";\n }\n else if (memberSchema.isBooleanSchema()) {\n type = \"boolean\";\n }\n if (value != null) {\n additionalHeaders[memberName] = {\n type,\n value,\n };\n delete event[unionMember][memberName];\n }\n }\n }\n if (explicitPayloadMember !== null) {\n const payloadSchema = eventSchema.getMemberSchema(explicitPayloadMember);\n if (payloadSchema.isBlobSchema()) {\n explicitPayloadContentType = \"application/octet-stream\";\n }\n else if (payloadSchema.isStringSchema()) {\n explicitPayloadContentType = \"text/plain\";\n }\n serializer.write(payloadSchema, event[unionMember][explicitPayloadMember]);\n }\n else {\n serializer.write(eventSchema, event[unionMember]);\n }\n }\n else if (eventSchema.isUnitSchema()) {\n serializer.write(eventSchema, {});\n }\n else {\n throw new Error(\"@smithy/core/event-streams - non-struct member not supported in event stream union.\");\n }\n }\n const messageSerialization = serializer.flush() ?? new Uint8Array();\n const body = typeof messageSerialization === \"string\"\n ? (this.serdeContext?.utf8Decoder ?? fromUtf8)(messageSerialization)\n : messageSerialization;\n return {\n body,\n eventType,\n explicitPayloadContentType,\n additionalHeaders,\n };\n }\n}\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
|