@lenne.tech/nest-server 11.32.3 → 11.32.4
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/FRAMEWORK-API.md +1 -1
- package/bin/migrate.js +13 -3
- package/dist/core/common/helpers/file.helper.d.ts +14 -2
- package/dist/core/common/helpers/file.helper.js +48 -9
- package/dist/core/common/helpers/file.helper.js.map +1 -1
- package/dist/core/modules/file/core-file.controller.d.ts +4 -1
- package/dist/core/modules/file/core-file.controller.js +39 -6
- package/dist/core/modules/file/core-file.controller.js.map +1 -1
- package/dist/core/modules/migrate/cli/migrate-cli.d.ts +3 -1
- package/dist/core/modules/migrate/cli/migrate-cli.js +29 -4
- package/dist/core/modules/migrate/cli/migrate-cli.js.map +1 -1
- package/dist/core/modules/migrate/helpers/migration.helper.d.ts +1 -0
- package/dist/core/modules/migrate/helpers/migration.helper.js +51 -4
- package/dist/core/modules/migrate/helpers/migration.helper.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/docs/security-overrides.md +9 -2
- package/migration-guides/11.32.3-to-11.32.4.md +323 -0
- package/package.json +1 -1
- package/src/core/common/helpers/file.helper.spec.ts +145 -0
- package/src/core/common/helpers/file.helper.ts +148 -10
- package/src/core/modules/file/README.md +59 -0
- package/src/core/modules/file/core-file.controller.spec.ts +164 -0
- package/src/core/modules/file/core-file.controller.ts +100 -8
- package/src/core/modules/migrate/README.md +35 -0
- package/src/core/modules/migrate/cli/migrate-cli.ts +69 -6
- package/src/core/modules/migrate/helpers/migration.helper.spec.ts +85 -0
- package/src/core/modules/migrate/helpers/migration.helper.ts +131 -4
package/FRAMEWORK-API.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @lenne.tech/nest-server — Framework API Reference
|
|
2
2
|
|
|
3
|
-
> Auto-generated from source code on 2026-07-
|
|
3
|
+
> Auto-generated from source code on 2026-07-30 (v11.32.4)
|
|
4
4
|
> File: `FRAMEWORK-API.md` — compact, machine-readable API surface for Claude Code
|
|
5
5
|
|
|
6
6
|
## CoreModule.forRoot()
|
package/bin/migrate.js
CHANGED
|
@@ -93,7 +93,17 @@ if (require.main === module) {
|
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
// Load and run the CLI
|
|
97
|
-
|
|
98
|
-
|
|
96
|
+
// Load and run the CLI.
|
|
97
|
+
//
|
|
98
|
+
// Prefer runCli(): it drains stdout and then exits explicitly, so a handle left
|
|
99
|
+
// behind by MongoDB/GridFS cannot keep the process alive after the work is done
|
|
100
|
+
// (a migration step that never returns blocks the container before the server
|
|
101
|
+
// ever starts). main() is the fallback for a dist built before runCli existed —
|
|
102
|
+
// it resolves normally but relies on the event loop draining by itself.
|
|
103
|
+
const cli = require(cliPath);
|
|
104
|
+
const run = cli.runCli || cli.main;
|
|
105
|
+
Promise.resolve(run()).catch((error) => {
|
|
106
|
+
console.error('Fatal error:', error);
|
|
107
|
+
process.exitCode = 1;
|
|
108
|
+
});
|
|
99
109
|
}
|
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
import { MulterOptions } from '@nestjs/platform-express/multer/interfaces/multer-options.interface';
|
|
2
|
+
export interface UploadAllowList {
|
|
3
|
+
extensions: readonly string[];
|
|
4
|
+
mimeTypes: readonly string[];
|
|
5
|
+
}
|
|
6
|
+
export declare const IMAGE_UPLOAD_ALLOW_LIST: UploadAllowList;
|
|
7
|
+
export declare const SCRIPTABLE_UPLOAD_MIME_TYPES: readonly string[];
|
|
8
|
+
export declare const SCRIPTABLE_UPLOAD_EXTENSIONS: readonly string[];
|
|
9
|
+
export interface MulterFileFilterOptions {
|
|
10
|
+
allowScriptableTypes?: boolean;
|
|
11
|
+
}
|
|
2
12
|
export default class FileHelper {
|
|
3
13
|
static multerRandomFileName(numberOfDigits?: number): (req: any, file: any, cb: any) => void;
|
|
4
|
-
static multerFileFilter(
|
|
14
|
+
static multerFileFilter(accept?: RegExp | UploadAllowList, options?: MulterFileFilterOptions): (req: any, file: any, cb: any) => any;
|
|
5
15
|
static multerOptionsForImageUpload(options: {
|
|
16
|
+
allowList?: UploadAllowList;
|
|
6
17
|
destination?: string;
|
|
7
18
|
fileSize?: number;
|
|
8
19
|
fileTypeRegex?: RegExp;
|
|
9
20
|
}): MulterOptions;
|
|
10
21
|
}
|
|
11
|
-
export declare function multerFileFilter(
|
|
22
|
+
export declare function multerFileFilter(accept?: RegExp | UploadAllowList, options?: MulterFileFilterOptions): (req: any, file: any, cb: any) => any;
|
|
12
23
|
export declare function multerOptionsForImageUpload(options: {
|
|
24
|
+
allowList?: UploadAllowList;
|
|
13
25
|
destination?: string;
|
|
14
26
|
fileSize?: number;
|
|
15
27
|
fileTypeRegex?: RegExp;
|
|
@@ -1,40 +1,79 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SCRIPTABLE_UPLOAD_EXTENSIONS = exports.SCRIPTABLE_UPLOAD_MIME_TYPES = exports.IMAGE_UPLOAD_ALLOW_LIST = void 0;
|
|
3
4
|
exports.multerFileFilter = multerFileFilter;
|
|
4
5
|
exports.multerOptionsForImageUpload = multerOptionsForImageUpload;
|
|
5
6
|
exports.multerRandomFileName = multerRandomFileName;
|
|
6
7
|
const multer_1 = require("multer");
|
|
7
8
|
const path_1 = require("path");
|
|
9
|
+
exports.IMAGE_UPLOAD_ALLOW_LIST = {
|
|
10
|
+
extensions: ['.jpeg', '.jpg', '.png'],
|
|
11
|
+
mimeTypes: ['image/jpeg', 'image/png'],
|
|
12
|
+
};
|
|
13
|
+
exports.SCRIPTABLE_UPLOAD_MIME_TYPES = [
|
|
14
|
+
'application/javascript',
|
|
15
|
+
'application/xhtml+xml',
|
|
16
|
+
'application/xml',
|
|
17
|
+
'image/svg+xml',
|
|
18
|
+
'text/html',
|
|
19
|
+
'text/javascript',
|
|
20
|
+
'text/xml',
|
|
21
|
+
];
|
|
22
|
+
exports.SCRIPTABLE_UPLOAD_EXTENSIONS = [
|
|
23
|
+
'.htm',
|
|
24
|
+
'.html',
|
|
25
|
+
'.js',
|
|
26
|
+
'.mjs',
|
|
27
|
+
'.svg',
|
|
28
|
+
'.xhtml',
|
|
29
|
+
'.xml',
|
|
30
|
+
];
|
|
8
31
|
class FileHelper {
|
|
9
32
|
static multerRandomFileName(numberOfDigits = 32) {
|
|
10
33
|
return multerRandomFileName(numberOfDigits);
|
|
11
34
|
}
|
|
12
|
-
static multerFileFilter(
|
|
13
|
-
return multerFileFilter(
|
|
35
|
+
static multerFileFilter(accept = exports.IMAGE_UPLOAD_ALLOW_LIST, options) {
|
|
36
|
+
return multerFileFilter(accept, options);
|
|
14
37
|
}
|
|
15
38
|
static multerOptionsForImageUpload(options) {
|
|
16
39
|
return multerOptionsForImageUpload(options);
|
|
17
40
|
}
|
|
18
41
|
}
|
|
19
42
|
exports.default = FileHelper;
|
|
20
|
-
function
|
|
43
|
+
function normalizeMimeType(value) {
|
|
44
|
+
return String(value || '')
|
|
45
|
+
.split(';')[0]
|
|
46
|
+
.trim()
|
|
47
|
+
.toLowerCase();
|
|
48
|
+
}
|
|
49
|
+
function multerFileFilter(accept = exports.IMAGE_UPLOAD_ALLOW_LIST, options) {
|
|
21
50
|
return (req, file, cb) => {
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
if (
|
|
51
|
+
const mimeType = normalizeMimeType(file?.mimetype);
|
|
52
|
+
const extension = (0, path_1.extname)(String(file?.originalname || '')).toLowerCase();
|
|
53
|
+
if (!options?.allowScriptableTypes &&
|
|
54
|
+
(exports.SCRIPTABLE_UPLOAD_MIME_TYPES.includes(mimeType) || exports.SCRIPTABLE_UPLOAD_EXTENSIONS.includes(extension))) {
|
|
55
|
+
return cb(new Error(`File upload rejected: ${mimeType || 'unknown type'} may execute as script`));
|
|
56
|
+
}
|
|
57
|
+
const accepted = accept instanceof RegExp
|
|
58
|
+
? accept.test(mimeType) && accept.test(extension)
|
|
59
|
+
: accept.mimeTypes.includes(mimeType) && accept.extensions.includes(extension);
|
|
60
|
+
if (accepted) {
|
|
25
61
|
return cb(null, true);
|
|
26
62
|
}
|
|
27
|
-
cb(`
|
|
63
|
+
cb(new Error(`File upload only supports the following filetypes - ${describeAccept(accept)}`));
|
|
28
64
|
};
|
|
29
65
|
}
|
|
66
|
+
function describeAccept(accept) {
|
|
67
|
+
return accept instanceof RegExp ? String(accept) : accept.extensions.join(', ');
|
|
68
|
+
}
|
|
30
69
|
function multerOptionsForImageUpload(options) {
|
|
31
70
|
const config = {
|
|
32
71
|
fileSize: 1024 * 1024,
|
|
33
|
-
fileTypeRegex: /jpeg|jpg|png/,
|
|
34
72
|
...options,
|
|
35
73
|
};
|
|
74
|
+
const accept = config.fileTypeRegex ?? config.allowList ?? exports.IMAGE_UPLOAD_ALLOW_LIST;
|
|
36
75
|
return {
|
|
37
|
-
fileFilter:
|
|
76
|
+
fileFilter: multerFileFilter(accept),
|
|
38
77
|
limits: {
|
|
39
78
|
fileSize: config.fileSize ? config.fileSize : undefined,
|
|
40
79
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.helper.js","sourceRoot":"","sources":["../../../../src/core/common/helpers/file.helper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file.helper.js","sourceRoot":"","sources":["../../../../src/core/common/helpers/file.helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import { Response } from 'express';
|
|
1
|
+
import type { Response } from 'express';
|
|
2
|
+
import type { Readable } from 'stream';
|
|
2
3
|
import { CoreFileService } from './core-file.service';
|
|
4
|
+
export declare function pipeFileToResponse(stream: Readable, res: Response): Response;
|
|
3
5
|
export declare abstract class CoreFileController {
|
|
4
6
|
protected fileService: CoreFileService;
|
|
5
7
|
protected constructor(fileService: CoreFileService);
|
|
8
|
+
protected pipeFileToResponse(stream: Readable, res: Response): Response;
|
|
6
9
|
getFileById(id: string, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
7
10
|
getFile(filename: string, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
8
11
|
}
|
|
@@ -13,40 +13,73 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.CoreFileController = void 0;
|
|
16
|
+
exports.pipeFileToResponse = pipeFileToResponse;
|
|
16
17
|
const common_1 = require("@nestjs/common");
|
|
17
18
|
const roles_decorator_1 = require("../../common/decorators/roles.decorator");
|
|
18
19
|
const role_enum_1 = require("../../common/enums/role.enum");
|
|
20
|
+
const error_codes_1 = require("../error-code/error-codes");
|
|
19
21
|
const core_file_service_1 = require("./core-file.service");
|
|
22
|
+
const fileStreamLogger = new common_1.Logger('CoreFileController');
|
|
23
|
+
const FILE_DELIVERY_HEADERS = ['Cache-Control', 'Content-Disposition', 'Content-Type', 'ETag'];
|
|
24
|
+
function pipeFileToResponse(stream, res) {
|
|
25
|
+
res.on('close', () => {
|
|
26
|
+
if (!stream.destroyed) {
|
|
27
|
+
stream.destroy();
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
stream.on('error', (err) => {
|
|
31
|
+
fileStreamLogger.error(`GridFS download failed: ${err.message}`, err.stack);
|
|
32
|
+
if (res.headersSent) {
|
|
33
|
+
res.destroy();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
for (const header of FILE_DELIVERY_HEADERS) {
|
|
37
|
+
res.removeHeader(header);
|
|
38
|
+
}
|
|
39
|
+
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
40
|
+
res.status(404).json({ error: 'Not Found', message: error_codes_1.ErrorCode.FILE_NOT_FOUND, statusCode: 404 });
|
|
41
|
+
});
|
|
42
|
+
return stream.pipe(res);
|
|
43
|
+
}
|
|
20
44
|
let CoreFileController = class CoreFileController {
|
|
21
45
|
fileService;
|
|
22
46
|
constructor(fileService) {
|
|
23
47
|
this.fileService = fileService;
|
|
24
48
|
}
|
|
49
|
+
pipeFileToResponse(stream, res) {
|
|
50
|
+
return pipeFileToResponse(stream, res);
|
|
51
|
+
}
|
|
25
52
|
async getFileById(id, res) {
|
|
26
53
|
if (!id) {
|
|
27
|
-
throw new common_1.BadRequestException(
|
|
54
|
+
throw new common_1.BadRequestException(error_codes_1.ErrorCode.REQUIRED_FIELD_MISSING);
|
|
28
55
|
}
|
|
29
56
|
const file = await this.fileService.getFileInfo(id);
|
|
30
57
|
if (!file) {
|
|
31
|
-
throw new common_1.NotFoundException(
|
|
58
|
+
throw new common_1.NotFoundException(error_codes_1.ErrorCode.FILE_NOT_FOUND);
|
|
32
59
|
}
|
|
33
60
|
const filestream = await this.fileService.getFileStream(id);
|
|
61
|
+
if (!filestream) {
|
|
62
|
+
throw new common_1.NotFoundException(error_codes_1.ErrorCode.FILE_NOT_FOUND);
|
|
63
|
+
}
|
|
34
64
|
res.header('Content-Type', file.contentType || 'application/octet-stream');
|
|
35
65
|
res.header('Content-Disposition', `attachment; filename=${file.filename}`);
|
|
36
|
-
return
|
|
66
|
+
return this.pipeFileToResponse(filestream, res);
|
|
37
67
|
}
|
|
38
68
|
async getFile(filename, res) {
|
|
39
69
|
if (!filename) {
|
|
40
|
-
throw new common_1.BadRequestException(
|
|
70
|
+
throw new common_1.BadRequestException(error_codes_1.ErrorCode.REQUIRED_FIELD_MISSING);
|
|
41
71
|
}
|
|
42
72
|
const file = await this.fileService.getFileInfoByName(filename);
|
|
43
73
|
if (!file) {
|
|
44
|
-
throw new common_1.NotFoundException(
|
|
74
|
+
throw new common_1.NotFoundException(error_codes_1.ErrorCode.FILE_NOT_FOUND);
|
|
45
75
|
}
|
|
46
76
|
const filestream = await this.fileService.getFileStream(file.id);
|
|
77
|
+
if (!filestream) {
|
|
78
|
+
throw new common_1.NotFoundException(error_codes_1.ErrorCode.FILE_NOT_FOUND);
|
|
79
|
+
}
|
|
47
80
|
res.header('Content-Type', file.contentType || 'application/octet-stream');
|
|
48
81
|
res.header('Content-Disposition', `attachment; filename=${file.filename}`);
|
|
49
|
-
return
|
|
82
|
+
return this.pipeFileToResponse(filestream, res);
|
|
50
83
|
}
|
|
51
84
|
};
|
|
52
85
|
exports.CoreFileController = CoreFileController;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-file.controller.js","sourceRoot":"","sources":["../../../../src/core/modules/file/core-file.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"core-file.controller.js","sourceRoot":"","sources":["../../../../src/core/modules/file/core-file.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,4 +12,6 @@ declare function parseArgs(): {
|
|
|
12
12
|
name?: string;
|
|
13
13
|
options: CliOptions;
|
|
14
14
|
};
|
|
15
|
-
|
|
15
|
+
declare const flushAndExit: (code: number) => Promise<void>;
|
|
16
|
+
declare const runCli: () => Promise<void>;
|
|
17
|
+
export { flushAndExit, main, parseArgs, runCli };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.runCli = exports.flushAndExit = void 0;
|
|
4
5
|
exports.main = main;
|
|
5
6
|
exports.parseArgs = parseArgs;
|
|
6
7
|
const fs = require("fs");
|
|
@@ -227,10 +228,34 @@ Environment Variables:
|
|
|
227
228
|
NSC__MIGRATE__STRICT 1|true|yes → fail on a missing recorded migration file (default: tolerate)
|
|
228
229
|
`);
|
|
229
230
|
}
|
|
230
|
-
|
|
231
|
-
|
|
231
|
+
const flushAndExit = async (code) => {
|
|
232
|
+
process.exitCode = code;
|
|
233
|
+
const guard = setTimeout(() => process.exit(code), 5000);
|
|
234
|
+
guard.unref();
|
|
235
|
+
await Promise.all([process.stdout, process.stderr].map((stream) => new Promise((resolve) => {
|
|
236
|
+
if (!stream.writableLength) {
|
|
237
|
+
resolve();
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
stream.write('', () => resolve());
|
|
241
|
+
})));
|
|
242
|
+
clearTimeout(guard);
|
|
243
|
+
process.exit(code);
|
|
244
|
+
};
|
|
245
|
+
exports.flushAndExit = flushAndExit;
|
|
246
|
+
const runCli = async () => {
|
|
247
|
+
try {
|
|
248
|
+
await main();
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
232
251
|
console.error('Fatal error:', error);
|
|
233
|
-
|
|
234
|
-
|
|
252
|
+
await flushAndExit(1);
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
await flushAndExit(0);
|
|
256
|
+
};
|
|
257
|
+
exports.runCli = runCli;
|
|
258
|
+
if (require.main === module) {
|
|
259
|
+
void runCli();
|
|
235
260
|
}
|
|
236
261
|
//# sourceMappingURL=migrate-cli.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate-cli.js","sourceRoot":"","sources":["../../../../../src/core/modules/migrate/cli/migrate-cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"migrate-cli.js","sourceRoot":"","sources":["../../../../../src/core/modules/migrate/cli/migrate-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { Db, ObjectId } from 'mongodb';
|
|
|
2
2
|
export declare const _startMigration: () => void;
|
|
3
3
|
export declare const _endMigration: () => Promise<void>;
|
|
4
4
|
export declare const getDb: (mongoUrl: string) => Promise<Db>;
|
|
5
|
+
export declare const assertGridFsFileComplete: (db: Db, bucketName: string, id: ObjectId, label?: string) => Promise<void>;
|
|
5
6
|
export declare const uploadFileToGridFS: (mongoUrl: string, relativePath: string, options?: {
|
|
6
7
|
bucketName?: string;
|
|
7
8
|
filename?: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createMigrationStore = exports.uploadFileToGridFS = exports.getDb = exports._endMigration = exports._startMigration = void 0;
|
|
3
|
+
exports.createMigrationStore = exports.uploadFileToGridFS = exports.assertGridFsFileComplete = exports.getDb = exports._endMigration = exports._startMigration = void 0;
|
|
4
4
|
const fs = require("fs");
|
|
5
5
|
const mongodb_1 = require("mongodb");
|
|
6
6
|
const path = require("path");
|
|
@@ -25,6 +25,22 @@ const getDb = async (mongoUrl) => {
|
|
|
25
25
|
return client.db();
|
|
26
26
|
};
|
|
27
27
|
exports.getDb = getDb;
|
|
28
|
+
const assertGridFsFileComplete = async (db, bucketName, id, label) => {
|
|
29
|
+
const name = label || String(id);
|
|
30
|
+
const fileDoc = await db.collection(`${bucketName}.files`).findOne({ _id: id });
|
|
31
|
+
if (!fileDoc) {
|
|
32
|
+
throw new Error(`GridFS file '${name}' has no file document (id ${String(id)})`);
|
|
33
|
+
}
|
|
34
|
+
const chunkSize = fileDoc.chunkSize || 255 * 1024;
|
|
35
|
+
const expected = Math.ceil((fileDoc.length || 0) / chunkSize);
|
|
36
|
+
const actual = await db
|
|
37
|
+
.collection(`${bucketName}.chunks`)
|
|
38
|
+
.countDocuments({ files_id: id }, { readPreference: 'primary' });
|
|
39
|
+
if (actual < expected) {
|
|
40
|
+
throw new Error(`GridFS file '${name}' is incomplete: ${actual} of ${expected} chunks stored (id ${String(id)})`);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
exports.assertGridFsFileComplete = assertGridFsFileComplete;
|
|
28
44
|
const uploadFileToGridFS = async (mongoUrl, relativePath, options) => {
|
|
29
45
|
if (!relativePath) {
|
|
30
46
|
throw new Error('relativePath is required');
|
|
@@ -35,16 +51,47 @@ const uploadFileToGridFS = async (mongoUrl, relativePath, options) => {
|
|
|
35
51
|
...options,
|
|
36
52
|
};
|
|
37
53
|
const client = await mongodb_1.MongoClient.connect(mongoUrl);
|
|
54
|
+
activeConnections.add(client);
|
|
38
55
|
const db = client.db();
|
|
39
56
|
const bucket = new mongodb_1.GridFSBucket(db, { bucketName });
|
|
40
57
|
const writeStream = bucket.openUploadStream(filename);
|
|
41
|
-
const
|
|
58
|
+
const readStream = fs.createReadStream(path.resolve(__dirname, relativePath));
|
|
59
|
+
const rs = readStream.pipe(writeStream);
|
|
60
|
+
readStream.on('error', (err) => {
|
|
61
|
+
writeStream.destroy(err);
|
|
62
|
+
});
|
|
63
|
+
let settled = false;
|
|
64
|
+
const settle = async (action) => {
|
|
65
|
+
if (!settled) {
|
|
66
|
+
settled = true;
|
|
67
|
+
try {
|
|
68
|
+
await client.close();
|
|
69
|
+
}
|
|
70
|
+
catch (closeErr) {
|
|
71
|
+
console.warn('Failed to close migration connection:', closeErr);
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
activeConnections.delete(client);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return action();
|
|
78
|
+
};
|
|
42
79
|
return new Promise((resolve, reject) => {
|
|
43
80
|
rs.on('finish', () => {
|
|
44
|
-
|
|
81
|
+
const id = writeStream.id;
|
|
82
|
+
(0, exports.assertGridFsFileComplete)(db, bucketName, id, filename)
|
|
83
|
+
.then(() => settle(() => id))
|
|
84
|
+
.then(resolve)
|
|
85
|
+
.catch((err) => {
|
|
86
|
+
bucket
|
|
87
|
+
.delete(id)
|
|
88
|
+
.catch(() => undefined)
|
|
89
|
+
.then(() => settle(() => undefined))
|
|
90
|
+
.finally(() => reject(err));
|
|
91
|
+
});
|
|
45
92
|
});
|
|
46
93
|
rs.on('error', (err) => {
|
|
47
|
-
reject(err);
|
|
94
|
+
settle(() => undefined).finally(() => reject(err));
|
|
48
95
|
});
|
|
49
96
|
});
|
|
50
97
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.helper.js","sourceRoot":"","sources":["../../../../../src/core/modules/migrate/helpers/migration.helper.ts"],"names":[],"mappings":";;;AAAA,yBAAyB;AACzB,qCAAkE;AAClE,6BAA6B;AAO7B,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAe,CAAC;AAGjD,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAMxB,MAAM,eAAe,GAAG,GAAG,EAAE;IAClC,kBAAkB,GAAG,IAAI,CAAC;AAC5B,CAAC,CAAC;AAFW,QAAA,eAAe,mBAE1B;AAMK,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;IACtC,kBAAkB,GAAG,KAAK,CAAC;IAE3B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/E,iBAAiB,CAAC,KAAK,EAAE,CAAC;IAC1B,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC,CAAC;AANW,QAAA,aAAa,iBAMxB;AA0BK,MAAM,KAAK,GAAG,KAAK,EAAE,QAAgB,EAAe,EAAE;IAC3D,MAAM,MAAM,GAAgB,MAAM,qBAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAGhE,IAAI,kBAAkB,EAAE,CAAC;QACvB,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,MAAM,CAAC,EAAE,EAAE,CAAC;AACrB,CAAC,CAAC;AATW,QAAA,KAAK,SAShB;
|
|
1
|
+
{"version":3,"file":"migration.helper.js","sourceRoot":"","sources":["../../../../../src/core/modules/migrate/helpers/migration.helper.ts"],"names":[],"mappings":"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"}
|