@hot-updater/aws 0.36.11 → 0.36.13
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/lambda/index.cjs +1 -1
- package/dist/lambda/index.d.cts +341 -1
- package/package.json +8 -9
package/dist/lambda/index.cjs
CHANGED
|
@@ -35,7 +35,7 @@ let _aws_sdk_client_ssm = require("@aws-sdk/client-ssm");
|
|
|
35
35
|
let _aws_sdk_cloudfront_signer = require("@aws-sdk/cloudfront-signer");
|
|
36
36
|
//#endregion
|
|
37
37
|
//#region ../../packages/server/dist/version.mjs
|
|
38
|
-
const HOT_UPDATER_SERVER_VERSION = "0.36.
|
|
38
|
+
const HOT_UPDATER_SERVER_VERSION = "0.36.13";
|
|
39
39
|
//#endregion
|
|
40
40
|
//#region ../../packages/server/dist/internalRouter.mjs
|
|
41
41
|
const normalizePath = (path) => {
|
package/dist/lambda/index.d.cts
CHANGED
|
@@ -1,5 +1,345 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Writable } from "node:stream";
|
|
2
2
|
|
|
3
|
+
//#region ../../node_modules/.pnpm/@types+aws-lambda@8.10.162/node_modules/@types/aws-lambda/common/cloudfront.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* CloudFront events
|
|
6
|
+
* http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-event-structure.html
|
|
7
|
+
* Bear in mind that the "example" event structure in the page above includes
|
|
8
|
+
* both an S3 and a Custom origin, which is not strictly allowed. Only one
|
|
9
|
+
* of these per event may be present.
|
|
10
|
+
*/
|
|
11
|
+
interface CloudFrontHeaders {
|
|
12
|
+
[name: string]: Array<{
|
|
13
|
+
key?: string | undefined;
|
|
14
|
+
value: string;
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
17
|
+
type CloudFrontOrigin = {
|
|
18
|
+
s3: CloudFrontS3Origin;
|
|
19
|
+
custom?: never | undefined;
|
|
20
|
+
} | {
|
|
21
|
+
custom: CloudFrontCustomOrigin;
|
|
22
|
+
s3?: never | undefined;
|
|
23
|
+
};
|
|
24
|
+
interface CloudFrontCustomOrigin {
|
|
25
|
+
customHeaders: CloudFrontHeaders;
|
|
26
|
+
domainName: string;
|
|
27
|
+
keepaliveTimeout: number;
|
|
28
|
+
path: string;
|
|
29
|
+
port: number;
|
|
30
|
+
protocol: "http" | "https";
|
|
31
|
+
readTimeout: number;
|
|
32
|
+
sslProtocols: string[];
|
|
33
|
+
}
|
|
34
|
+
type CloudFrontS3Origin = CloudFrontS3OriginAuthMethodNone | CloudFrontS3OriginAuthMethodOriginAccessIdentity;
|
|
35
|
+
interface CloudFrontS3OriginBase {
|
|
36
|
+
authMethod: "origin-access-identity" | "none";
|
|
37
|
+
customHeaders: CloudFrontHeaders;
|
|
38
|
+
domainName: string;
|
|
39
|
+
path: string;
|
|
40
|
+
}
|
|
41
|
+
interface CloudFrontS3OriginAuthMethodNone extends CloudFrontS3OriginBase {
|
|
42
|
+
authMethod: "none";
|
|
43
|
+
region?: never;
|
|
44
|
+
}
|
|
45
|
+
interface CloudFrontS3OriginAuthMethodOriginAccessIdentity extends CloudFrontS3OriginBase {
|
|
46
|
+
authMethod: "origin-access-identity";
|
|
47
|
+
region: string;
|
|
48
|
+
}
|
|
49
|
+
interface CloudFrontRequest {
|
|
50
|
+
body?: {
|
|
51
|
+
action: "read-only" | "replace";
|
|
52
|
+
data: string;
|
|
53
|
+
encoding: "base64" | "text";
|
|
54
|
+
readonly inputTruncated: boolean;
|
|
55
|
+
} | undefined;
|
|
56
|
+
readonly clientIp: string;
|
|
57
|
+
readonly method: string;
|
|
58
|
+
uri: string;
|
|
59
|
+
querystring: string;
|
|
60
|
+
headers: CloudFrontHeaders;
|
|
61
|
+
origin?: CloudFrontOrigin | undefined;
|
|
62
|
+
}
|
|
63
|
+
interface CloudFrontEvent {
|
|
64
|
+
config: {
|
|
65
|
+
readonly distributionDomainName: string;
|
|
66
|
+
readonly distributionId: string;
|
|
67
|
+
readonly eventType: "origin-request" | "origin-response" | "viewer-request" | "viewer-response";
|
|
68
|
+
readonly requestId: string;
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Generated HTTP response in viewer request event or origin request event
|
|
73
|
+
*
|
|
74
|
+
* https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-generating-http-responses-in-requests.html#lambda-generating-http-responses-object
|
|
75
|
+
*/
|
|
76
|
+
interface CloudFrontResultResponse {
|
|
77
|
+
status: string;
|
|
78
|
+
statusDescription?: string | undefined;
|
|
79
|
+
headers?: CloudFrontHeaders | undefined;
|
|
80
|
+
bodyEncoding?: "text" | "base64" | undefined;
|
|
81
|
+
body?: string | undefined;
|
|
82
|
+
}
|
|
83
|
+
//#endregion
|
|
84
|
+
//#region ../../node_modules/.pnpm/@types+aws-lambda@8.10.162/node_modules/@types/aws-lambda/handler.d.ts
|
|
85
|
+
/**
|
|
86
|
+
* The interface that AWS Lambda will invoke your handler with.
|
|
87
|
+
* There are more specialized types for many cases where AWS services
|
|
88
|
+
* invoke your lambda, but you can directly use this type for when you are invoking
|
|
89
|
+
* your lambda directly.
|
|
90
|
+
*
|
|
91
|
+
* See the {@link http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html AWS documentation}
|
|
92
|
+
* for more information about the runtime behavior, and the
|
|
93
|
+
* {@link https://aws.amazon.com/blogs/compute/node-js-8-10-runtime-now-available-in-aws-lambda/ AWS Blog post}
|
|
94
|
+
* introducing the async handler behavior in the 8.10 runtime.
|
|
95
|
+
*
|
|
96
|
+
* @example <caption>Defining a custom handler type</caption>
|
|
97
|
+
* import { Handler } from 'aws-lambda'
|
|
98
|
+
*
|
|
99
|
+
* interface NameEvent {
|
|
100
|
+
* fullName: string
|
|
101
|
+
* }
|
|
102
|
+
* interface NameResult {
|
|
103
|
+
* firstName: string
|
|
104
|
+
* middleNames: string
|
|
105
|
+
* lastName: string
|
|
106
|
+
* }
|
|
107
|
+
* type PersonHandler = Handler<NameEvent, NameResult>
|
|
108
|
+
*
|
|
109
|
+
* export const handler: PersonHandler = async (event) => {
|
|
110
|
+
* const names = event.fullName.split(' ')
|
|
111
|
+
* const firstName = names.shift()
|
|
112
|
+
* const lastName = names.pop()
|
|
113
|
+
* return { firstName, middleNames: names, lastName }
|
|
114
|
+
* }
|
|
115
|
+
*
|
|
116
|
+
* @example <caption>Logs the contents of the event object and returns the location of the logs</caption>
|
|
117
|
+
* import { Handler } from 'aws-lambda'
|
|
118
|
+
*
|
|
119
|
+
* export const handler: Handler = async (event, context) => {
|
|
120
|
+
* console.log("EVENT: \n" + JSON.stringify(event, null, 2))
|
|
121
|
+
* return context.logStreamName
|
|
122
|
+
* }
|
|
123
|
+
*
|
|
124
|
+
* @example <caption>AWS SDK with Async Function and Promises</caption>
|
|
125
|
+
* import { Handler } from 'aws-lambda'
|
|
126
|
+
* import AWS from 'aws-sdk'
|
|
127
|
+
*
|
|
128
|
+
* const s3 = new AWS.S3()
|
|
129
|
+
*
|
|
130
|
+
* export const handler: Handler = async (event) => {
|
|
131
|
+
* const response = await s3.listBuckets().promise()
|
|
132
|
+
* return response?.Buckets.map((bucket) => bucket.Name)
|
|
133
|
+
* }
|
|
134
|
+
*
|
|
135
|
+
* @example <caption>HTTP Request with Callback</caption>
|
|
136
|
+
* import { Handler } from 'aws-lambda'
|
|
137
|
+
* import https from 'https'
|
|
138
|
+
*
|
|
139
|
+
* let url = "https://docs.aws.amazon.com/lambda/latest/dg/welcome.html"
|
|
140
|
+
*
|
|
141
|
+
* export const handler: Handler<void, number> = (event, context, callback) => {
|
|
142
|
+
* https.get(url, (res) => {
|
|
143
|
+
* callback(null, res.statusCode)
|
|
144
|
+
* }).on('error', (e) => {
|
|
145
|
+
* callback(Error(e))
|
|
146
|
+
* })
|
|
147
|
+
* }
|
|
148
|
+
*
|
|
149
|
+
* @param event
|
|
150
|
+
* Parsed JSON data in the lambda request payload. For an AWS service triggered
|
|
151
|
+
* lambda this should be in the format of a type ending in Event, for example the
|
|
152
|
+
* S3Handler receives an event of type S3Event.
|
|
153
|
+
* @param context
|
|
154
|
+
* Runtime contextual information of the current invocation, for example the caller
|
|
155
|
+
* identity, available memory and time remaining, legacy completion callbacks, and
|
|
156
|
+
* a mutable property controlling when the lambda execution completes.
|
|
157
|
+
* @param callback
|
|
158
|
+
* NodeJS-style completion callback that the AWS Lambda runtime will provide that can
|
|
159
|
+
* be used to provide the lambda result payload value, or any execution error. Can
|
|
160
|
+
* instead return a promise that resolves with the result payload value or rejects
|
|
161
|
+
* with the execution error.
|
|
162
|
+
* @return
|
|
163
|
+
* A promise that resolves with the lambda result payload value, or rejects with the
|
|
164
|
+
* execution error. Note that if you implement your handler as an async function,
|
|
165
|
+
* you will automatically return a promise that will resolve with a returned value,
|
|
166
|
+
* or reject with a thrown value.
|
|
167
|
+
*/
|
|
168
|
+
type Handler<TEvent = any, TResult = any> = (event: TEvent, context: Context, callback: Callback<TResult>) => void | Promise<TResult> // eslint-disable-next-line @typescript-eslint/no-invalid-void-type
|
|
169
|
+
;
|
|
170
|
+
/**
|
|
171
|
+
* {@link Handler} context parameter.
|
|
172
|
+
* See {@link https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html AWS documentation}.
|
|
173
|
+
*/
|
|
174
|
+
interface Context {
|
|
175
|
+
callbackWaitsForEmptyEventLoop: boolean;
|
|
176
|
+
functionName: string;
|
|
177
|
+
functionVersion: string;
|
|
178
|
+
invokedFunctionArn: string;
|
|
179
|
+
memoryLimitInMB: string;
|
|
180
|
+
awsRequestId: string;
|
|
181
|
+
logGroupName: string;
|
|
182
|
+
logStreamName: string;
|
|
183
|
+
identity?: CognitoIdentity | undefined;
|
|
184
|
+
clientContext?: ClientContext | undefined;
|
|
185
|
+
tenantId?: string | undefined;
|
|
186
|
+
getRemainingTimeInMillis(): number; // Functions for compatibility with earlier Node.js Runtime v0.10.42
|
|
187
|
+
// No longer documented, so they are deprecated, but they still work
|
|
188
|
+
// as of the 12.x runtime, so they are not removed from the types.
|
|
189
|
+
/** @deprecated Use handler callback or promise result */
|
|
190
|
+
done(error?: Error, result?: any): void;
|
|
191
|
+
/** @deprecated Use handler callback with first argument or reject a promise result */
|
|
192
|
+
fail(error: Error | string): void;
|
|
193
|
+
/** @deprecated Use handler callback with second argument or resolve a promise result */
|
|
194
|
+
succeed(messageOrObject: any): void; // Unclear what behavior this is supposed to have, I couldn't find any still extant reference,
|
|
195
|
+
// and it behaves like the above, ignoring the object parameter.
|
|
196
|
+
/** @deprecated Use handler callback or promise result */
|
|
197
|
+
succeed(message: string, object: any): void;
|
|
198
|
+
}
|
|
199
|
+
interface CognitoIdentity {
|
|
200
|
+
cognitoIdentityId: string;
|
|
201
|
+
cognitoIdentityPoolId: string;
|
|
202
|
+
}
|
|
203
|
+
interface ClientContext {
|
|
204
|
+
client: ClientContextClient;
|
|
205
|
+
custom?: any;
|
|
206
|
+
env: ClientContextEnv;
|
|
207
|
+
}
|
|
208
|
+
interface ClientContextClient {
|
|
209
|
+
installationId: string;
|
|
210
|
+
appTitle: string;
|
|
211
|
+
appVersionName: string;
|
|
212
|
+
appVersionCode: string;
|
|
213
|
+
appPackageName: string;
|
|
214
|
+
}
|
|
215
|
+
interface ClientContextEnv {
|
|
216
|
+
platformVersion: string;
|
|
217
|
+
platform: string;
|
|
218
|
+
make: string;
|
|
219
|
+
model: string;
|
|
220
|
+
locale: string;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* NodeJS-style callback parameter for the {@link Handler} type.
|
|
224
|
+
* Can be used instead of returning a promise, see the
|
|
225
|
+
* {@link https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html AWS documentation}
|
|
226
|
+
* for the handler programming model.
|
|
227
|
+
*
|
|
228
|
+
* @param error
|
|
229
|
+
* Parameter to use to provide the error payload for a failed lambda execution.
|
|
230
|
+
* See {@link https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-mode-exceptions.html AWS documentation}
|
|
231
|
+
* for error handling.
|
|
232
|
+
* If an Error instance is passed, the error payload uses the `name` property as the `errorType`,
|
|
233
|
+
* the `message` property as the `errorMessage`, and parses the `stack` property string into
|
|
234
|
+
* the `trace` array.
|
|
235
|
+
* For other values, the `errorType` is `typeof value`, the `errorMessage` is `String(value)`, and
|
|
236
|
+
* `trace` is an empty array.
|
|
237
|
+
*
|
|
238
|
+
* @param result
|
|
239
|
+
* Parameter to use to provide the result payload for a successful lambda execution.
|
|
240
|
+
* Pass `null` or `undefined` for the `error` parameter to use this parameter.
|
|
241
|
+
*/
|
|
242
|
+
type Callback<TResult = any> = (error?: Error | string | null, result?: TResult) => void;
|
|
243
|
+
/**
|
|
244
|
+
* Interface for using response streaming from AWS Lambda.
|
|
245
|
+
* To indicate to the runtime that Lambda should stream your function’s responses, you must wrap your function handler with the `awslambda.streamifyResponse()` decorator.
|
|
246
|
+
*
|
|
247
|
+
* The `streamifyResponse` decorator accepts the following additional parameter, `responseStream`, besides the default node handler parameters, `event`, and `context`.
|
|
248
|
+
* The new `responseStream` object provides a stream object that your function can write data to. Data written to this stream is sent immediately to the client. You can optionally set the Content-Type header of the response to pass additional metadata to your client about the contents of the stream.
|
|
249
|
+
*
|
|
250
|
+
* {@link https://aws.amazon.com/blogs/compute/introducing-aws-lambda-response-streaming/ AWS blog post}
|
|
251
|
+
* {@link https://docs.aws.amazon.com/lambda/latest/dg/config-rs-write-functions.html AWS documentation}
|
|
252
|
+
*
|
|
253
|
+
* @example <caption>Writing to the response stream</caption>
|
|
254
|
+
* import 'aws-lambda';
|
|
255
|
+
*
|
|
256
|
+
* export const handler = awslambda.streamifyResponse(
|
|
257
|
+
* async (event, responseStream, context) => {
|
|
258
|
+
* responseStream.setContentType("text/plain");
|
|
259
|
+
* responseStream.write("Hello, world!");
|
|
260
|
+
* responseStream.end();
|
|
261
|
+
* }
|
|
262
|
+
* );
|
|
263
|
+
*
|
|
264
|
+
* @example <caption>Using pipeline</caption>
|
|
265
|
+
* import 'aws-lambda';
|
|
266
|
+
* import { Readable } from 'stream';
|
|
267
|
+
* import { pipeline } from 'stream/promises';
|
|
268
|
+
* import zlib from 'zlib';
|
|
269
|
+
*
|
|
270
|
+
* export const handler = awslambda.streamifyResponse(
|
|
271
|
+
* async (event, responseStream, context) => {
|
|
272
|
+
* // As an example, convert event to a readable stream.
|
|
273
|
+
* const requestStream = Readable.from(Buffer.from(JSON.stringify(event)));
|
|
274
|
+
*
|
|
275
|
+
* await pipeline(requestStream, zlib.createGzip(), responseStream);
|
|
276
|
+
* }
|
|
277
|
+
* );
|
|
278
|
+
*/
|
|
279
|
+
type StreamifyHandler<TEvent = any, TResult = any> = (event: TEvent, responseStream: awslambda.HttpResponseStream, context: Context) => TResult | Promise<TResult>;
|
|
280
|
+
declare global {
|
|
281
|
+
namespace awslambda {
|
|
282
|
+
class HttpResponseStream extends Writable {
|
|
283
|
+
static from(writable: Writable, metadata: Record<string, unknown>): HttpResponseStream;
|
|
284
|
+
setContentType: (contentType: string) => void;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Decorator for using response streaming from AWS Lambda.
|
|
288
|
+
* To indicate to the runtime that Lambda should stream your function’s responses, you must wrap your function handler with the `awslambda.streamifyResponse()` decorator.
|
|
289
|
+
*
|
|
290
|
+
* The `streamifyResponse` decorator accepts the following additional parameter, `responseStream`, besides the default node handler parameters, `event`, and `context`.
|
|
291
|
+
* The new `responseStream` object provides a stream object that your function can write data to. Data written to this stream is sent immediately to the client. You can optionally set the Content-Type header of the response to pass additional metadata to your client about the contents of the stream.
|
|
292
|
+
*
|
|
293
|
+
* {@link https://aws.amazon.com/blogs/compute/introducing-aws-lambda-response-streaming/ AWS blog post}
|
|
294
|
+
* {@link https://docs.aws.amazon.com/lambda/latest/dg/config-rs-write-functions.html AWS documentation}
|
|
295
|
+
*
|
|
296
|
+
* @example <caption>Writing to the response stream</caption>
|
|
297
|
+
* import 'aws-lambda';
|
|
298
|
+
*
|
|
299
|
+
* export const handler = awslambda.streamifyResponse(
|
|
300
|
+
* async (event, responseStream, context) => {
|
|
301
|
+
* responseStream.setContentType("text/plain");
|
|
302
|
+
* responseStream.write("Hello, world!");
|
|
303
|
+
* responseStream.end();
|
|
304
|
+
* }
|
|
305
|
+
* );
|
|
306
|
+
*
|
|
307
|
+
* @example <caption>Using pipeline</caption>
|
|
308
|
+
* import 'aws-lambda';
|
|
309
|
+
* import { Readable } from 'stream';
|
|
310
|
+
* import { pipeline } from 'stream/promises';
|
|
311
|
+
* import zlib from 'zlib';
|
|
312
|
+
*
|
|
313
|
+
* export const handler = awslambda.streamifyResponse(
|
|
314
|
+
* async (event, responseStream, context) => {
|
|
315
|
+
* // As an example, convert event to a readable stream.
|
|
316
|
+
* const requestStream = Readable.from(Buffer.from(JSON.stringify(event)));
|
|
317
|
+
*
|
|
318
|
+
* await pipeline(requestStream, zlib.createGzip(), responseStream);
|
|
319
|
+
* }
|
|
320
|
+
* );
|
|
321
|
+
*/
|
|
322
|
+
function streamifyResponse<TEvent = any, TResult = void>(handler: StreamifyHandler<TEvent, TResult>): StreamifyHandler<TEvent, TResult>;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
//#endregion
|
|
326
|
+
//#region ../../node_modules/.pnpm/@types+aws-lambda@8.10.162/node_modules/@types/aws-lambda/trigger/cloudfront-request.d.ts
|
|
327
|
+
type CloudFrontRequestHandler = Handler<CloudFrontRequestEvent, CloudFrontRequestResult>;
|
|
328
|
+
interface CloudFrontRequestEventRecord {
|
|
329
|
+
cf: CloudFrontEvent & {
|
|
330
|
+
request: CloudFrontRequest;
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* CloudFront viewer request or origin request event
|
|
335
|
+
*
|
|
336
|
+
* https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-event-structure.html#lambda-event-structure-request
|
|
337
|
+
*/
|
|
338
|
+
interface CloudFrontRequestEvent {
|
|
339
|
+
Records: CloudFrontRequestEventRecord[];
|
|
340
|
+
}
|
|
341
|
+
type CloudFrontRequestResult = undefined | null | CloudFrontResultResponse | CloudFrontRequest;
|
|
342
|
+
//#endregion
|
|
3
343
|
//#region lambda/index.d.ts
|
|
4
344
|
declare global {
|
|
5
345
|
var HotUpdater: {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hot-updater/aws",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.36.
|
|
4
|
+
"version": "0.36.13",
|
|
5
5
|
"description": "React Native OTA solution for self-hosted",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
7
7
|
"module": "dist/index.mjs",
|
|
@@ -50,10 +50,10 @@
|
|
|
50
50
|
"es-toolkit": "^1.32.0",
|
|
51
51
|
"execa": "9.5.2",
|
|
52
52
|
"mime": "^4.0.4",
|
|
53
|
-
"@hot-updater/core": "0.36.
|
|
54
|
-
"@hot-updater/js": "0.36.
|
|
55
|
-
"@hot-updater/mock": "0.36.
|
|
56
|
-
"@hot-updater/test-utils": "0.36.
|
|
53
|
+
"@hot-updater/core": "0.36.13",
|
|
54
|
+
"@hot-updater/js": "0.36.13",
|
|
55
|
+
"@hot-updater/mock": "0.36.13",
|
|
56
|
+
"@hot-updater/test-utils": "0.36.13"
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
59
|
"@aws-sdk/client-cloudfront": "3.1066.0",
|
|
@@ -67,10 +67,9 @@
|
|
|
67
67
|
"@aws-sdk/credential-providers": "3.1066.0",
|
|
68
68
|
"@aws-sdk/lib-storage": "3.1066.0",
|
|
69
69
|
"hono": "4.12.34",
|
|
70
|
-
"
|
|
71
|
-
"@hot-updater/plugin-core": "0.36.
|
|
72
|
-
"@hot-updater/
|
|
73
|
-
"@hot-updater/server": "0.36.11"
|
|
70
|
+
"@hot-updater/cli-tools": "0.36.13",
|
|
71
|
+
"@hot-updater/plugin-core": "0.36.13",
|
|
72
|
+
"@hot-updater/server": "0.36.13"
|
|
74
73
|
},
|
|
75
74
|
"scripts": {
|
|
76
75
|
"build": "tsdown",
|