@vercube/storage 0.0.22 → 0.0.24
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 +10 -6
- package/dist/Drivers/MemoryStorage.d.mts +1 -1
- package/dist/Drivers/MemoryStorage.mjs +3 -1
- package/dist/Drivers/S3Storage.d.mts +56 -56
- package/dist/Drivers/S3Storage.mjs +4627 -5048
- package/dist/Storage-Cr72sGff.mjs +16 -0
- package/dist/event-streams-CEo-hsfG.mjs +179 -0
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +18 -44
- package/dist/schema-DfAlCaU9.mjs +1176 -0
- package/package.json +4 -4
- package/dist/chunk-UoOzN6Vc.mjs +0 -40
- /package/dist/{Storage-DZ-jzAK_.d.mts → Storage-D-QyQ5of.d.mts} +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/Service/Storage.ts
|
|
2
|
+
/**
|
|
3
|
+
* Abstract base class for storage implementations
|
|
4
|
+
* Provides a common interface for different storage providers
|
|
5
|
+
*
|
|
6
|
+
* @abstract
|
|
7
|
+
* @class Storage
|
|
8
|
+
* @description
|
|
9
|
+
* The Storage class defines a standard interface for storing and retrieving data.
|
|
10
|
+
* It supports basic operations like get, set, delete, and querying storage state.
|
|
11
|
+
* Concrete implementations must provide the actual storage mechanism.
|
|
12
|
+
*/
|
|
13
|
+
var Storage = class {};
|
|
14
|
+
|
|
15
|
+
//#endregion
|
|
16
|
+
export { Storage };
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { SCHEMA, __esm, __toESM, init_schema, require_dist_cjs } from "./schema-DfAlCaU9.mjs";
|
|
2
|
+
|
|
3
|
+
//#region ../../node_modules/.pnpm/@smithy+core@3.11.1/node_modules/@smithy/core/dist-es/submodules/event-streams/EventStreamSerde.js
|
|
4
|
+
var import_dist_cjs, EventStreamSerde;
|
|
5
|
+
var init_EventStreamSerde = __esm({ "../../node_modules/.pnpm/@smithy+core@3.11.1/node_modules/@smithy/core/dist-es/submodules/event-streams/EventStreamSerde.js": (() => {
|
|
6
|
+
init_schema();
|
|
7
|
+
import_dist_cjs = /* @__PURE__ */ __toESM(require_dist_cjs());
|
|
8
|
+
EventStreamSerde = class {
|
|
9
|
+
constructor({ marshaller, serializer, deserializer, serdeContext, defaultContentType }) {
|
|
10
|
+
this.marshaller = marshaller;
|
|
11
|
+
this.serializer = serializer;
|
|
12
|
+
this.deserializer = deserializer;
|
|
13
|
+
this.serdeContext = serdeContext;
|
|
14
|
+
this.defaultContentType = defaultContentType;
|
|
15
|
+
}
|
|
16
|
+
async serializeEventStream({ eventStream, requestSchema, initialRequest }) {
|
|
17
|
+
const marshaller = this.marshaller;
|
|
18
|
+
const eventStreamMember = requestSchema.getEventStreamMember();
|
|
19
|
+
const unionSchema = requestSchema.getMemberSchema(eventStreamMember);
|
|
20
|
+
unionSchema.getMemberSchemas();
|
|
21
|
+
const serializer = this.serializer;
|
|
22
|
+
const defaultContentType = this.defaultContentType;
|
|
23
|
+
const initialRequestMarker = Symbol("initialRequestMarker");
|
|
24
|
+
const eventStreamIterable = { async *[Symbol.asyncIterator]() {
|
|
25
|
+
if (initialRequest) {
|
|
26
|
+
const headers = {
|
|
27
|
+
":event-type": {
|
|
28
|
+
type: "string",
|
|
29
|
+
value: "initial-request"
|
|
30
|
+
},
|
|
31
|
+
":message-type": {
|
|
32
|
+
type: "string",
|
|
33
|
+
value: "event"
|
|
34
|
+
},
|
|
35
|
+
":content-type": {
|
|
36
|
+
type: "string",
|
|
37
|
+
value: defaultContentType
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
serializer.write(requestSchema, initialRequest);
|
|
41
|
+
const body = serializer.flush();
|
|
42
|
+
yield {
|
|
43
|
+
[initialRequestMarker]: true,
|
|
44
|
+
headers,
|
|
45
|
+
body
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
for await (const page of eventStream) yield page;
|
|
49
|
+
} };
|
|
50
|
+
return marshaller.serialize(eventStreamIterable, (event) => {
|
|
51
|
+
if (event[initialRequestMarker]) return {
|
|
52
|
+
headers: event.headers,
|
|
53
|
+
body: event.body
|
|
54
|
+
};
|
|
55
|
+
const unionMember = Object.keys(event).find((key) => {
|
|
56
|
+
return key !== "__type";
|
|
57
|
+
}) ?? "";
|
|
58
|
+
const { additionalHeaders, body, eventType, explicitPayloadContentType } = this.writeEventBody(unionMember, unionSchema, event);
|
|
59
|
+
return {
|
|
60
|
+
headers: {
|
|
61
|
+
":event-type": {
|
|
62
|
+
type: "string",
|
|
63
|
+
value: eventType
|
|
64
|
+
},
|
|
65
|
+
":message-type": {
|
|
66
|
+
type: "string",
|
|
67
|
+
value: "event"
|
|
68
|
+
},
|
|
69
|
+
":content-type": {
|
|
70
|
+
type: "string",
|
|
71
|
+
value: explicitPayloadContentType ?? defaultContentType
|
|
72
|
+
},
|
|
73
|
+
...additionalHeaders
|
|
74
|
+
},
|
|
75
|
+
body
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
async deserializeEventStream({ response, responseSchema, initialResponseContainer }) {
|
|
80
|
+
const marshaller = this.marshaller;
|
|
81
|
+
const eventStreamMember = responseSchema.getEventStreamMember();
|
|
82
|
+
const memberSchemas = responseSchema.getMemberSchema(eventStreamMember).getMemberSchemas();
|
|
83
|
+
const initialResponseMarker = Symbol("initialResponseMarker");
|
|
84
|
+
const asyncIterable = marshaller.deserialize(response.body, async (event) => {
|
|
85
|
+
const unionMember = Object.keys(event).find((key) => {
|
|
86
|
+
return key !== "__type";
|
|
87
|
+
}) ?? "";
|
|
88
|
+
if (unionMember === "initial-response") {
|
|
89
|
+
const dataObject = await this.deserializer.read(responseSchema, event[unionMember].body);
|
|
90
|
+
delete dataObject[eventStreamMember];
|
|
91
|
+
return {
|
|
92
|
+
[initialResponseMarker]: true,
|
|
93
|
+
...dataObject
|
|
94
|
+
};
|
|
95
|
+
} else if (unionMember in memberSchemas) {
|
|
96
|
+
const eventStreamSchema = memberSchemas[unionMember];
|
|
97
|
+
return { [unionMember]: await this.deserializer.read(eventStreamSchema, event[unionMember].body) };
|
|
98
|
+
} else return { $unknown: event };
|
|
99
|
+
});
|
|
100
|
+
const asyncIterator = asyncIterable[Symbol.asyncIterator]();
|
|
101
|
+
const firstEvent = await asyncIterator.next();
|
|
102
|
+
if (firstEvent.done) return asyncIterable;
|
|
103
|
+
if (firstEvent.value?.[initialResponseMarker]) {
|
|
104
|
+
if (!responseSchema) throw new Error("@smithy::core/protocols - initial-response event encountered in event stream but no response schema given.");
|
|
105
|
+
for (const [key, value] of Object.entries(firstEvent.value)) initialResponseContainer[key] = value;
|
|
106
|
+
}
|
|
107
|
+
return { async *[Symbol.asyncIterator]() {
|
|
108
|
+
if (!firstEvent?.value?.[initialResponseMarker]) yield firstEvent.value;
|
|
109
|
+
while (true) {
|
|
110
|
+
const { done, value } = await asyncIterator.next();
|
|
111
|
+
if (done) break;
|
|
112
|
+
yield value;
|
|
113
|
+
}
|
|
114
|
+
} };
|
|
115
|
+
}
|
|
116
|
+
writeEventBody(unionMember, unionSchema, event) {
|
|
117
|
+
const serializer = this.serializer;
|
|
118
|
+
let eventType = unionMember;
|
|
119
|
+
let explicitPayloadMember = null;
|
|
120
|
+
let explicitPayloadContentType;
|
|
121
|
+
const isKnownSchema = unionSchema.hasMemberSchema(unionMember);
|
|
122
|
+
const additionalHeaders = {};
|
|
123
|
+
if (!isKnownSchema) {
|
|
124
|
+
const [type, value] = event[unionMember];
|
|
125
|
+
eventType = type;
|
|
126
|
+
serializer.write(SCHEMA.DOCUMENT, value);
|
|
127
|
+
} else {
|
|
128
|
+
const eventSchema = unionSchema.getMemberSchema(unionMember);
|
|
129
|
+
if (eventSchema.isStructSchema()) {
|
|
130
|
+
for (const [memberName, memberSchema] of eventSchema.structIterator()) {
|
|
131
|
+
const { eventHeader, eventPayload } = memberSchema.getMergedTraits();
|
|
132
|
+
if (eventPayload) {
|
|
133
|
+
explicitPayloadMember = memberName;
|
|
134
|
+
break;
|
|
135
|
+
} else if (eventHeader) {
|
|
136
|
+
const value = event[unionMember][memberName];
|
|
137
|
+
let type = "binary";
|
|
138
|
+
if (memberSchema.isNumericSchema()) if ((-2) ** 31 <= value && value <= 2 ** 31 - 1) type = "integer";
|
|
139
|
+
else type = "long";
|
|
140
|
+
else if (memberSchema.isTimestampSchema()) type = "timestamp";
|
|
141
|
+
else if (memberSchema.isStringSchema()) type = "string";
|
|
142
|
+
else if (memberSchema.isBooleanSchema()) type = "boolean";
|
|
143
|
+
if (value != null) {
|
|
144
|
+
additionalHeaders[memberName] = {
|
|
145
|
+
type,
|
|
146
|
+
value
|
|
147
|
+
};
|
|
148
|
+
delete event[unionMember][memberName];
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (explicitPayloadMember !== null) {
|
|
153
|
+
const payloadSchema = eventSchema.getMemberSchema(explicitPayloadMember);
|
|
154
|
+
if (payloadSchema.isBlobSchema()) explicitPayloadContentType = "application/octet-stream";
|
|
155
|
+
else if (payloadSchema.isStringSchema()) explicitPayloadContentType = "text/plain";
|
|
156
|
+
serializer.write(payloadSchema, event[unionMember][explicitPayloadMember]);
|
|
157
|
+
} else serializer.write(eventSchema, event[unionMember]);
|
|
158
|
+
} else throw new Error("@smithy/core/event-streams - non-struct member not supported in event stream union.");
|
|
159
|
+
}
|
|
160
|
+
const messageSerialization = serializer.flush();
|
|
161
|
+
return {
|
|
162
|
+
body: typeof messageSerialization === "string" ? (this.serdeContext?.utf8Decoder ?? import_dist_cjs.fromUtf8)(messageSerialization) : messageSerialization,
|
|
163
|
+
eventType,
|
|
164
|
+
explicitPayloadContentType,
|
|
165
|
+
additionalHeaders
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
}) });
|
|
170
|
+
|
|
171
|
+
//#endregion
|
|
172
|
+
//#region ../../node_modules/.pnpm/@smithy+core@3.11.1/node_modules/@smithy/core/dist-es/submodules/event-streams/index.js
|
|
173
|
+
var init_event_streams = __esm({ "../../node_modules/.pnpm/@smithy+core@3.11.1/node_modules/@smithy/core/dist-es/submodules/event-streams/index.js": (() => {
|
|
174
|
+
init_EventStreamSerde();
|
|
175
|
+
}) });
|
|
176
|
+
|
|
177
|
+
//#endregion
|
|
178
|
+
init_event_streams();
|
|
179
|
+
export { EventStreamSerde };
|
package/dist/index.d.mts
CHANGED
package/dist/index.mjs
CHANGED
|
@@ -1,21 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Storage } from "./Storage-Cr72sGff.mjs";
|
|
2
2
|
import { Container, Init, Inject, InjectOptional } from "@vercube/di";
|
|
3
3
|
import { Logger } from "@vercube/logger";
|
|
4
4
|
|
|
5
|
-
//#region
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
module.exports = __decorate, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
14
|
-
}) });
|
|
5
|
+
//#region \0@oxc-project+runtime@0.90.0/helpers/decorate.js
|
|
6
|
+
function __decorate(decorators, target, key, desc) {
|
|
7
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
9
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
10
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
11
|
+
}
|
|
15
12
|
|
|
16
13
|
//#endregion
|
|
17
14
|
//#region src/Service/StorageManager.ts
|
|
18
|
-
var import_decorate = /* @__PURE__ */ __toESM(require_decorate(), 1);
|
|
19
15
|
/**
|
|
20
16
|
* Manages multiple storage instances and provides a unified interface for storage operations.
|
|
21
17
|
* Each storage instance is identified by a unique name and implements the Storage interface.
|
|
@@ -58,8 +54,7 @@ var StorageManager = class {
|
|
|
58
54
|
* @returns {Promise<T | null>} A promise that resolves with the stored value or null if not found
|
|
59
55
|
*/
|
|
60
56
|
async getItem({ storage, key }) {
|
|
61
|
-
|
|
62
|
-
return storageInstance?.getItem(key) ?? null;
|
|
57
|
+
return this.getStorage(storage)?.getItem(key) ?? null;
|
|
63
58
|
}
|
|
64
59
|
/**
|
|
65
60
|
* Stores an item in the specified storage
|
|
@@ -71,8 +66,7 @@ var StorageManager = class {
|
|
|
71
66
|
* @returns {Promise<void>} A promise that resolves when the value is stored
|
|
72
67
|
*/
|
|
73
68
|
async setItem({ storage, key, value, options }) {
|
|
74
|
-
|
|
75
|
-
storageInstance?.setItem(key, value, options);
|
|
69
|
+
this.getStorage(storage)?.setItem(key, value, options);
|
|
76
70
|
}
|
|
77
71
|
/**
|
|
78
72
|
* Deletes an item from the specified storage
|
|
@@ -82,8 +76,7 @@ var StorageManager = class {
|
|
|
82
76
|
* @returns {Promise<void>} A promise that resolves when the item is deleted
|
|
83
77
|
*/
|
|
84
78
|
async deleteItem({ storage, key }) {
|
|
85
|
-
|
|
86
|
-
storageInstance?.deleteItem(key);
|
|
79
|
+
this.getStorage(storage)?.deleteItem(key);
|
|
87
80
|
}
|
|
88
81
|
/**
|
|
89
82
|
* Checks if an item exists in the specified storage
|
|
@@ -93,8 +86,7 @@ var StorageManager = class {
|
|
|
93
86
|
* @returns {Promise<boolean>} A promise that resolves to true if the item exists, false otherwise
|
|
94
87
|
*/
|
|
95
88
|
async hasItem({ storage, key }) {
|
|
96
|
-
|
|
97
|
-
return storageInstance?.hasItem(key) ?? false;
|
|
89
|
+
return this.getStorage(storage)?.hasItem(key) ?? false;
|
|
98
90
|
}
|
|
99
91
|
/**
|
|
100
92
|
* Retrieves all keys from the specified storage
|
|
@@ -103,8 +95,7 @@ var StorageManager = class {
|
|
|
103
95
|
* @returns {Promise<string[]>} A promise that resolves with an array of all keys
|
|
104
96
|
*/
|
|
105
97
|
async getKeys({ storage }) {
|
|
106
|
-
|
|
107
|
-
return storageInstance?.getKeys() ?? [];
|
|
98
|
+
return this.getStorage(storage)?.getKeys() ?? [];
|
|
108
99
|
}
|
|
109
100
|
/**
|
|
110
101
|
* Clears all items from the specified storage
|
|
@@ -113,8 +104,7 @@ var StorageManager = class {
|
|
|
113
104
|
* @returns {Promise<void>} A promise that resolves when the storage is cleared
|
|
114
105
|
*/
|
|
115
106
|
async clear({ storage }) {
|
|
116
|
-
|
|
117
|
-
storageInstance?.clear();
|
|
107
|
+
this.getStorage(storage)?.clear();
|
|
118
108
|
}
|
|
119
109
|
/**
|
|
120
110
|
* Gets the number of items in the specified storage
|
|
@@ -123,8 +113,7 @@ var StorageManager = class {
|
|
|
123
113
|
* @returns {Promise<number>} A promise that resolves with the number of items
|
|
124
114
|
*/
|
|
125
115
|
async size({ storage }) {
|
|
126
|
-
|
|
127
|
-
return storageInstance?.size() ?? 0;
|
|
116
|
+
return this.getStorage(storage)?.size() ?? 0;
|
|
128
117
|
}
|
|
129
118
|
/**
|
|
130
119
|
* Initializes all registered storage instances
|
|
@@ -139,24 +128,9 @@ var StorageManager = class {
|
|
|
139
128
|
}
|
|
140
129
|
}
|
|
141
130
|
};
|
|
142
|
-
(
|
|
143
|
-
(
|
|
144
|
-
(
|
|
145
|
-
|
|
146
|
-
//#endregion
|
|
147
|
-
//#region src/Service/Storage.ts
|
|
148
|
-
/**
|
|
149
|
-
* Abstract base class for storage implementations
|
|
150
|
-
* Provides a common interface for different storage providers
|
|
151
|
-
*
|
|
152
|
-
* @abstract
|
|
153
|
-
* @class Storage
|
|
154
|
-
* @description
|
|
155
|
-
* The Storage class defines a standard interface for storing and retrieving data.
|
|
156
|
-
* It supports basic operations like get, set, delete, and querying storage state.
|
|
157
|
-
* Concrete implementations must provide the actual storage mechanism.
|
|
158
|
-
*/
|
|
159
|
-
var Storage = class {};
|
|
131
|
+
__decorate([Inject(Container)], StorageManager.prototype, "gContainer", void 0);
|
|
132
|
+
__decorate([InjectOptional(Logger)], StorageManager.prototype, "gLogger", void 0);
|
|
133
|
+
__decorate([Init()], StorageManager.prototype, "init", null);
|
|
160
134
|
|
|
161
135
|
//#endregion
|
|
162
136
|
export { Storage, StorageManager };
|