sonamu 0.7.26 → 0.7.27
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.
|
@@ -7,6 +7,7 @@ export declare class UploadedFile {
|
|
|
7
7
|
private _file;
|
|
8
8
|
private _buffer?;
|
|
9
9
|
private _url?;
|
|
10
|
+
private _signedUrl?;
|
|
10
11
|
constructor(file: MultipartFile);
|
|
11
12
|
/** 원본 파일명 */
|
|
12
13
|
get filename(): string;
|
|
@@ -16,8 +17,10 @@ export declare class UploadedFile {
|
|
|
16
17
|
get size(): number;
|
|
17
18
|
/** 확장자 (점 제외) */
|
|
18
19
|
get extname(): string | false;
|
|
19
|
-
/** saveToDisk 후 저장된 URL */
|
|
20
|
+
/** saveToDisk 후 저장된 URL (Unsigned) */
|
|
20
21
|
get url(): string | undefined;
|
|
22
|
+
/** saveToDisk 후 저장된 URL (Signed) */
|
|
23
|
+
get signedUrl(): string | undefined;
|
|
21
24
|
/** Buffer로 변환 (캐싱됨) */
|
|
22
25
|
toBuffer(): Promise<Buffer>;
|
|
23
26
|
/** MD5 해시 계산 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploaded-file.d.ts","sourceRoot":"","sources":["../../src/storage/uploaded-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,IAAI,CAAC,CAAS;
|
|
1
|
+
{"version":3,"file":"uploaded-file.d.ts","sourceRoot":"","sources":["../../src/storage/uploaded-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,IAAI,CAAC,CAAS;IACtB,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,IAAI,EAAE,aAAa;IAI/B,aAAa;IACb,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,cAAc;IACd,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,oBAAoB;IACpB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,iBAAiB;IACjB,IAAI,OAAO,IAAI,MAAM,GAAG,KAAK,CAE5B;IAED,sCAAsC;IACtC,IAAI,GAAG,IAAI,MAAM,GAAG,SAAS,CAE5B;IAED,oCAAoC;IACpC,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAElC;IAED,uBAAuB;IACjB,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAOjC,gBAAgB;IACV,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;IAK5B;;;;;OAKG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBpE,0BAA0B;IAC1B,IAAI,GAAG,IAAI,aAAa,CAEvB;CACF"}
|
|
@@ -6,6 +6,7 @@ import mime from "mime-types";
|
|
|
6
6
|
_file;
|
|
7
7
|
_buffer;
|
|
8
8
|
_url;
|
|
9
|
+
_signedUrl;
|
|
9
10
|
constructor(file){
|
|
10
11
|
this._file = file;
|
|
11
12
|
}
|
|
@@ -21,9 +22,12 @@ import mime from "mime-types";
|
|
|
21
22
|
/** 확장자 (점 제외) */ get extname() {
|
|
22
23
|
return mime.extension(this._file.mimetype);
|
|
23
24
|
}
|
|
24
|
-
/** saveToDisk 후 저장된 URL */ get url() {
|
|
25
|
+
/** saveToDisk 후 저장된 URL (Unsigned) */ get url() {
|
|
25
26
|
return this._url;
|
|
26
27
|
}
|
|
28
|
+
/** saveToDisk 후 저장된 URL (Signed) */ get signedUrl() {
|
|
29
|
+
return this._signedUrl;
|
|
30
|
+
}
|
|
27
31
|
/** Buffer로 변환 (캐싱됨) */ async toBuffer() {
|
|
28
32
|
if (!this._buffer) {
|
|
29
33
|
this._buffer = await this._file.toBuffer();
|
|
@@ -47,7 +51,9 @@ import mime from "mime-types";
|
|
|
47
51
|
await disk.put(key, new Uint8Array(buffer), {
|
|
48
52
|
contentType: this.mimetype
|
|
49
53
|
});
|
|
50
|
-
this._url = await disk.
|
|
54
|
+
this._url = await disk.getUrl(key);
|
|
55
|
+
this._signedUrl = await disk.getSignedUrl(key);
|
|
56
|
+
// signed url은 만료 시간이 있기 때문에, unsigned url을 반환합니다.
|
|
51
57
|
return this._url;
|
|
52
58
|
}
|
|
53
59
|
/** 원본 MultipartFile 접근 */ get raw() {
|
|
@@ -55,4 +61,4 @@ import mime from "mime-types";
|
|
|
55
61
|
}
|
|
56
62
|
}
|
|
57
63
|
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yYWdlL3VwbG9hZGVkLWZpbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBNdWx0aXBhcnRGaWxlIH0gZnJvbSBcIkBmYXN0aWZ5L211bHRpcGFydFwiO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCBtaW1lIGZyb20gXCJtaW1lLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERyaXZlcktleSB9IGZyb20gXCIuL2RyaXZlcnNcIjtcblxuLyoqXG4gKiDsl4XroZzrk5zrkJwg7YyM7J28IOuemO2NvFxuICovXG5leHBvcnQgY2xhc3MgVXBsb2FkZWRGaWxlIHtcbiAgcHJpdmF0ZSBfZmlsZTogTXVsdGlwYXJ0RmlsZTtcbiAgcHJpdmF0ZSBfYnVmZmVyPzogQnVmZmVyO1xuICBwcml2YXRlIF91cmw/
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yYWdlL3VwbG9hZGVkLWZpbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBNdWx0aXBhcnRGaWxlIH0gZnJvbSBcIkBmYXN0aWZ5L211bHRpcGFydFwiO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCBtaW1lIGZyb20gXCJtaW1lLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERyaXZlcktleSB9IGZyb20gXCIuL2RyaXZlcnNcIjtcblxuLyoqXG4gKiDsl4XroZzrk5zrkJwg7YyM7J28IOuemO2NvFxuICovXG5leHBvcnQgY2xhc3MgVXBsb2FkZWRGaWxlIHtcbiAgcHJpdmF0ZSBfZmlsZTogTXVsdGlwYXJ0RmlsZTtcbiAgcHJpdmF0ZSBfYnVmZmVyPzogQnVmZmVyO1xuICBwcml2YXRlIF91cmw/OiBzdHJpbmc7XG4gIHByaXZhdGUgX3NpZ25lZFVybD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihmaWxlOiBNdWx0aXBhcnRGaWxlKSB7XG4gICAgdGhpcy5fZmlsZSA9IGZpbGU7XG4gIH1cblxuICAvKiog7JuQ67O4IO2MjOydvOuqhSAqL1xuICBnZXQgZmlsZW5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZS5maWxlbmFtZTtcbiAgfVxuXG4gIC8qKiBNSU1FIO2DgOyehSAqL1xuICBnZXQgbWltZXR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZS5taW1ldHlwZTtcbiAgfVxuXG4gIC8qKiDtjIzsnbwg7YGs6riwIChieXRlcykgKi9cbiAgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZS5maWxlLmJ5dGVzUmVhZDtcbiAgfVxuXG4gIC8qKiDtmZXsnqXsnpAgKOygkCDsoJzsmbgpICovXG4gIGdldCBleHRuYW1lKCk6IHN0cmluZyB8IGZhbHNlIHtcbiAgICByZXR1cm4gbWltZS5leHRlbnNpb24odGhpcy5fZmlsZS5taW1ldHlwZSk7XG4gIH1cblxuICAvKiogc2F2ZVRvRGlzayDtm4Qg7KCA7J6l65CcIFVSTCAoVW5zaWduZWQpICovXG4gIGdldCB1cmwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgLyoqIHNhdmVUb0Rpc2sg7ZuEIOyggOyepeuQnCBVUkwgKFNpZ25lZCkgKi9cbiAgZ2V0IHNpZ25lZFVybCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zaWduZWRVcmw7XG4gIH1cblxuICAvKiogQnVmZmVy66GcIOuzgO2ZmCAo7LqQ7Iux65CoKSAqL1xuICBhc3luYyB0b0J1ZmZlcigpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGlmICghdGhpcy5fYnVmZmVyKSB7XG4gICAgICB0aGlzLl9idWZmZXIgPSBhd2FpdCB0aGlzLl9maWxlLnRvQnVmZmVyKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG4gIH1cblxuICAvKiogTUQ1IO2VtOyLnCDqs4TsgrAgKi9cbiAgYXN5bmMgbWQ1KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgdGhpcy50b0J1ZmZlcigpO1xuICAgIHJldHVybiBjcmVhdGVIYXNoKFwibWQ1XCIpLnVwZGF0ZShidWZmZXIpLmRpZ2VzdChcImhleFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtjIzsnbzsnYQg65SU7Iqk7YGs7JeQIOyggOyepVxuICAgKiBAcGFyYW0ga2V5IOyggOyepSDqsr3roZwgKOyYiDogJ3VwbG9hZHMvYXZhdGFyLnBuZycpXG4gICAqIEBwYXJhbSBkaXNrTmFtZSDrlJTsiqTtgawg7J2066aEICjquLDrs7g6IGRlZmF1bHQgZGlzaylcbiAgICogQHJldHVybnMg7KCA7J6l65CcIO2MjOydvOydmCBVUkxcbiAgICovXG4gIGFzeW5jIHNhdmVUb0Rpc2soa2V5OiBzdHJpbmcsIGRpc2tOYW1lPzogRHJpdmVyS2V5KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyDsiJztmZgg7J2Y7KG07ISxIOuwqeyngOulvCDsnITtlbQg64+Z7KCBIGltcG9ydFxuICAgIGNvbnN0IHsgU29uYW11IH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9hcGkvc29uYW11XCIpO1xuICAgIGNvbnN0IGRpc2sgPSBTb25hbXUuc3RvcmFnZS51c2UoZGlza05hbWUpO1xuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHRoaXMudG9CdWZmZXIoKTtcblxuICAgIGF3YWl0IGRpc2sucHV0KGtleSwgbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSwge1xuICAgICAgY29udGVudFR5cGU6IHRoaXMubWltZXR5cGUsXG4gICAgfSk7XG5cbiAgICB0aGlzLl91cmwgPSBhd2FpdCBkaXNrLmdldFVybChrZXkpO1xuICAgIHRoaXMuX3NpZ25lZFVybCA9IGF3YWl0IGRpc2suZ2V0U2lnbmVkVXJsKGtleSk7XG5cbiAgICAvLyBzaWduZWQgdXJs7J2AIOunjOujjCDsi5zqsITsnbQg7J6I6riwIOuVjOusuOyXkCwgdW5zaWduZWQgdXJs7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgLyoqIOybkOuzuCBNdWx0aXBhcnRGaWxlIOygkeq3vCAqL1xuICBnZXQgcmF3KCk6IE11bHRpcGFydEZpbGUge1xuICAgIHJldHVybiB0aGlzLl9maWxlO1xuICB9XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlSGFzaCIsIm1pbWUiLCJVcGxvYWRlZEZpbGUiLCJfZmlsZSIsIl9idWZmZXIiLCJfdXJsIiwiX3NpZ25lZFVybCIsImZpbGUiLCJmaWxlbmFtZSIsIm1pbWV0eXBlIiwic2l6ZSIsImJ5dGVzUmVhZCIsImV4dG5hbWUiLCJleHRlbnNpb24iLCJ1cmwiLCJzaWduZWRVcmwiLCJ0b0J1ZmZlciIsIm1kNSIsImJ1ZmZlciIsInVwZGF0ZSIsImRpZ2VzdCIsInNhdmVUb0Rpc2siLCJrZXkiLCJkaXNrTmFtZSIsIlNvbmFtdSIsImRpc2siLCJzdG9yYWdlIiwidXNlIiwicHV0IiwiVWludDhBcnJheSIsImNvbnRlbnRUeXBlIiwiZ2V0VXJsIiwiZ2V0U2lnbmVkVXJsIiwicmF3Il0sIm1hcHBpbmdzIjoiQUFDQSxTQUFTQSxVQUFVLFFBQVEsU0FBUztBQUNwQyxPQUFPQyxVQUFVLGFBQWE7QUFHOUI7O0NBRUMsR0FDRCxPQUFPLE1BQU1DO0lBQ0hDLE1BQXFCO0lBQ3JCQyxRQUFpQjtJQUNqQkMsS0FBYztJQUNkQyxXQUFvQjtJQUU1QixZQUFZQyxJQUFtQixDQUFFO1FBQy9CLElBQUksQ0FBQ0osS0FBSyxHQUFHSTtJQUNmO0lBRUEsV0FBVyxHQUNYLElBQUlDLFdBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDTCxLQUFLLENBQUNLLFFBQVE7SUFDNUI7SUFFQSxZQUFZLEdBQ1osSUFBSUMsV0FBbUI7UUFDckIsT0FBTyxJQUFJLENBQUNOLEtBQUssQ0FBQ00sUUFBUTtJQUM1QjtJQUVBLGtCQUFrQixHQUNsQixJQUFJQyxPQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDUCxLQUFLLENBQUNJLElBQUksQ0FBQ0ksU0FBUztJQUNsQztJQUVBLGVBQWUsR0FDZixJQUFJQyxVQUEwQjtRQUM1QixPQUFPWCxLQUFLWSxTQUFTLENBQUMsSUFBSSxDQUFDVixLQUFLLENBQUNNLFFBQVE7SUFDM0M7SUFFQSxvQ0FBb0MsR0FDcEMsSUFBSUssTUFBMEI7UUFDNUIsT0FBTyxJQUFJLENBQUNULElBQUk7SUFDbEI7SUFFQSxrQ0FBa0MsR0FDbEMsSUFBSVUsWUFBZ0M7UUFDbEMsT0FBTyxJQUFJLENBQUNULFVBQVU7SUFDeEI7SUFFQSxxQkFBcUIsR0FDckIsTUFBTVUsV0FBNEI7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQ1osT0FBTyxFQUFFO1lBQ2pCLElBQUksQ0FBQ0EsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDRCxLQUFLLENBQUNhLFFBQVE7UUFDMUM7UUFDQSxPQUFPLElBQUksQ0FBQ1osT0FBTztJQUNyQjtJQUVBLGNBQWMsR0FDZCxNQUFNYSxNQUF1QjtRQUMzQixNQUFNQyxTQUFTLE1BQU0sSUFBSSxDQUFDRixRQUFRO1FBQ2xDLE9BQU9oQixXQUFXLE9BQU9tQixNQUFNLENBQUNELFFBQVFFLE1BQU0sQ0FBQztJQUNqRDtJQUVBOzs7OztHQUtDLEdBQ0QsTUFBTUMsV0FBV0MsR0FBVyxFQUFFQyxRQUFvQixFQUFtQjtRQUNuRSwwQkFBMEI7UUFDMUIsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQztRQUNoQyxNQUFNQyxPQUFPRCxPQUFPRSxPQUFPLENBQUNDLEdBQUcsQ0FBQ0o7UUFDaEMsTUFBTUwsU0FBUyxNQUFNLElBQUksQ0FBQ0YsUUFBUTtRQUVsQyxNQUFNUyxLQUFLRyxHQUFHLENBQUNOLEtBQUssSUFBSU8sV0FBV1gsU0FBUztZQUMxQ1ksYUFBYSxJQUFJLENBQUNyQixRQUFRO1FBQzVCO1FBRUEsSUFBSSxDQUFDSixJQUFJLEdBQUcsTUFBTW9CLEtBQUtNLE1BQU0sQ0FBQ1Q7UUFDOUIsSUFBSSxDQUFDaEIsVUFBVSxHQUFHLE1BQU1tQixLQUFLTyxZQUFZLENBQUNWO1FBRTFDLGtEQUFrRDtRQUNsRCxPQUFPLElBQUksQ0FBQ2pCLElBQUk7SUFDbEI7SUFFQSx3QkFBd0IsR0FDeEIsSUFBSTRCLE1BQXFCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDOUIsS0FBSztJQUNuQjtBQUNGIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sonamu",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.27",
|
|
4
4
|
"description": "Sonamu — TypeScript Fullstack API Framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -106,10 +106,10 @@
|
|
|
106
106
|
"vite": "7.3.0",
|
|
107
107
|
"vitest": "^4.0.10",
|
|
108
108
|
"zod": "^4.1.12",
|
|
109
|
-
"@sonamu-kit/hmr-
|
|
109
|
+
"@sonamu-kit/hmr-hook": "^0.4.1",
|
|
110
110
|
"@sonamu-kit/tasks": "^0.1.2",
|
|
111
111
|
"@sonamu-kit/ts-loader": "^2.1.3",
|
|
112
|
-
"@sonamu-kit/hmr-
|
|
112
|
+
"@sonamu-kit/hmr-runner": "^0.1.1"
|
|
113
113
|
},
|
|
114
114
|
"devDependencies": {
|
|
115
115
|
"@biomejs/biome": "^2.3.10",
|
|
@@ -10,6 +10,7 @@ export class UploadedFile {
|
|
|
10
10
|
private _file: MultipartFile;
|
|
11
11
|
private _buffer?: Buffer;
|
|
12
12
|
private _url?: string;
|
|
13
|
+
private _signedUrl?: string;
|
|
13
14
|
|
|
14
15
|
constructor(file: MultipartFile) {
|
|
15
16
|
this._file = file;
|
|
@@ -35,11 +36,16 @@ export class UploadedFile {
|
|
|
35
36
|
return mime.extension(this._file.mimetype);
|
|
36
37
|
}
|
|
37
38
|
|
|
38
|
-
/** saveToDisk 후 저장된 URL */
|
|
39
|
+
/** saveToDisk 후 저장된 URL (Unsigned) */
|
|
39
40
|
get url(): string | undefined {
|
|
40
41
|
return this._url;
|
|
41
42
|
}
|
|
42
43
|
|
|
44
|
+
/** saveToDisk 후 저장된 URL (Signed) */
|
|
45
|
+
get signedUrl(): string | undefined {
|
|
46
|
+
return this._signedUrl;
|
|
47
|
+
}
|
|
48
|
+
|
|
43
49
|
/** Buffer로 변환 (캐싱됨) */
|
|
44
50
|
async toBuffer(): Promise<Buffer> {
|
|
45
51
|
if (!this._buffer) {
|
|
@@ -70,7 +76,10 @@ export class UploadedFile {
|
|
|
70
76
|
contentType: this.mimetype,
|
|
71
77
|
});
|
|
72
78
|
|
|
73
|
-
this._url = await disk.
|
|
79
|
+
this._url = await disk.getUrl(key);
|
|
80
|
+
this._signedUrl = await disk.getSignedUrl(key);
|
|
81
|
+
|
|
82
|
+
// signed url은 만료 시간이 있기 때문에, unsigned url을 반환합니다.
|
|
74
83
|
return this._url;
|
|
75
84
|
}
|
|
76
85
|
|