mock-aws-s3-v3 5.0.1
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 +46 -0
- package/dist/src/mockS3.d.ts +3 -0
- package/dist/src/mockS3.d.ts.map +1 -0
- package/dist/src/mockS3.js +69 -0
- package/dist/src/mockS3.js.map +1 -0
- package/package.json +56 -0
package/README.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
[](https://badge.fury.io/js/mock-aws-s3-v3)
|
|
2
|
+
|
|
3
|
+
# Mock AWS S3 SDK v3
|
|
4
|
+
|
|
5
|
+
Local file-based mock for AWS S3 for unit and local testing for AWS JavaScript SDK v3+.
|
|
6
|
+
|
|
7
|
+
Based on [mock-aws-s3](https://www.npmjs.com/package/mock-aws-s3) and [aws-sdk-mock](https://www.npmjs.com/package/aws-sdk-mock).
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
import { createS3Client } from 'mock-aws-s3-v3';
|
|
13
|
+
import { GetObjectCommand } from '@aws-sdk/client-s3';
|
|
14
|
+
|
|
15
|
+
const client = createS3Client('./local-folder'); // of type S3Client
|
|
16
|
+
|
|
17
|
+
client.send(new PutObjectCommand({
|
|
18
|
+
Bucket: 'test-bucket',
|
|
19
|
+
Key: 'test-key',
|
|
20
|
+
Body: 'hello',
|
|
21
|
+
});
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
This will create:
|
|
25
|
+
|
|
26
|
+
- Folder `./local-folder/test-bucket`
|
|
27
|
+
- File `./local-folder/test-key` with content 'hello'
|
|
28
|
+
|
|
29
|
+
## Supported Operations
|
|
30
|
+
|
|
31
|
+
The following operations are currently supported in this mock:
|
|
32
|
+
|
|
33
|
+
- CreateBucketCommand
|
|
34
|
+
- DeleteBucketCommand
|
|
35
|
+
- ListObjectsCommand
|
|
36
|
+
- ListObjectsV2Command
|
|
37
|
+
- DeleteObjectsCommand
|
|
38
|
+
- DeleteObjectCommand
|
|
39
|
+
- GetObjectCommand
|
|
40
|
+
- HeadObjectCommand
|
|
41
|
+
- PutObjectCommand
|
|
42
|
+
- CopyObjectCommand
|
|
43
|
+
- GetObjectTaggingCommand
|
|
44
|
+
- PutObjectTaggingCommand
|
|
45
|
+
|
|
46
|
+
Same as [mock-aws-s3](https://www.npmjs.com/package/mock-aws-s3) minus `getSignedUrl`. For an example of how `getSignedUrl` could be mocked, see [templateS3Bucket.ts](https://github.com/goldstack/goldstack/blob/5842322ed4f5165da56fc2ab899f11bd9e1821e3/workspaces/templates-lib/packages/template-s3/src/templateS3Bucket.ts#L64).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockS3.d.ts","sourceRoot":"","sources":["../../src/mockS3.ts"],"names":[],"mappings":"AAAA,OAAO,EAeL,QAAQ,EACT,MAAM,oBAAoB,CAAC;AAO5B,wBAAgB,cAAc,CAC5B,cAAc,EAAE,MAAM,EACtB,QAAQ,CAAC,EAAE,QAAQ,GAClB,QAAQ,CAwDV"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createS3Client = void 0;
|
|
7
|
+
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
8
|
+
const aws_sdk_client_mock_1 = require("aws-sdk-client-mock");
|
|
9
|
+
const mock_aws_s3_1 = __importDefault(require("mock-aws-s3"));
|
|
10
|
+
function createS3Client(localDirectory, s3Client) {
|
|
11
|
+
if (!s3Client) {
|
|
12
|
+
s3Client = new client_s3_1.S3Client();
|
|
13
|
+
}
|
|
14
|
+
const client = (0, aws_sdk_client_mock_1.mockClient)(client_s3_1.S3Client);
|
|
15
|
+
mock_aws_s3_1.default.config.basePath = localDirectory;
|
|
16
|
+
const mockS3 = new mock_aws_s3_1.default.S3({
|
|
17
|
+
params: {},
|
|
18
|
+
});
|
|
19
|
+
client.on(client_s3_1.PutObjectCommand).callsFake(async (input) => {
|
|
20
|
+
return await mockS3.putObject(input).promise();
|
|
21
|
+
});
|
|
22
|
+
client.on(client_s3_1.GetObjectCommand).callsFake(async (input) => {
|
|
23
|
+
const resOperation = mockS3.getObject(input);
|
|
24
|
+
try {
|
|
25
|
+
const res = await resOperation.promise();
|
|
26
|
+
const output = { ...res };
|
|
27
|
+
const body = {
|
|
28
|
+
toString: () => { var _a; return (_a = res.Body) === null || _a === void 0 ? void 0 : _a.toString(); },
|
|
29
|
+
transformToString: async () => { var _a; return ((_a = res.Body) === null || _a === void 0 ? void 0 : _a.toString()) || ''; },
|
|
30
|
+
pipe: (destination, options) => {
|
|
31
|
+
return resOperation.createReadStream().pipe(destination, options);
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
output.Body = body;
|
|
35
|
+
return output;
|
|
36
|
+
}
|
|
37
|
+
catch (e) {
|
|
38
|
+
const awsError = e;
|
|
39
|
+
if (awsError.code === 'NoSuchKey') {
|
|
40
|
+
throw new client_s3_1.NoSuchKey({
|
|
41
|
+
message: e.message,
|
|
42
|
+
$metadata: {},
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
throw e;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
wrappedAsIs(client, mockS3, client_s3_1.CreateBucketCommand, 'createBucket');
|
|
49
|
+
wrappedAsIs(client, mockS3, client_s3_1.DeleteBucketCommand, 'deleteBucket');
|
|
50
|
+
wrappedAsIs(client, mockS3, client_s3_1.ListObjectsCommand, 'listObjects');
|
|
51
|
+
wrappedAsIs(client, mockS3, client_s3_1.DeleteObjectsCommand, 'deleteObjects');
|
|
52
|
+
wrappedAsIs(client, mockS3, client_s3_1.DeleteObjectCommand, 'deleteObject');
|
|
53
|
+
wrappedAsIs(client, mockS3, client_s3_1.HeadObjectCommand, 'headObject');
|
|
54
|
+
wrappedAsIs(client, mockS3, client_s3_1.CopyObjectCommand, 'copyObject');
|
|
55
|
+
wrappedAsIs(client, mockS3, client_s3_1.GetObjectTaggingCommand, 'getObjectTagging');
|
|
56
|
+
wrappedAsIs(client, mockS3, client_s3_1.PutObjectTaggingCommand, 'putObjectTagging');
|
|
57
|
+
notSupported(client, client_s3_1.ListBucketsCommand);
|
|
58
|
+
return s3Client;
|
|
59
|
+
}
|
|
60
|
+
exports.createS3Client = createS3Client;
|
|
61
|
+
function wrappedAsIs(client, mockS3, command, methodName) {
|
|
62
|
+
client.on(command).callsFake(async (input) => {
|
|
63
|
+
return await mockS3[methodName](input).promise();
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
function notSupported(client, command) {
|
|
67
|
+
client.on(command).rejects('Method ' + command.name + ' not implemented.');
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=mockS3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockS3.js","sourceRoot":"","sources":["../../src/mockS3.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mock-aws-s3-v3",
|
|
3
|
+
"version": "5.0.1",
|
|
4
|
+
"description": "Local in-memory Mock for AWS S3 for unit and local testing for AWS JavaScript SDK v3+.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"node",
|
|
7
|
+
"javascript",
|
|
8
|
+
"s3",
|
|
9
|
+
"jest"
|
|
10
|
+
],
|
|
11
|
+
"homepage": "https://github.com/goldstack/goldstack/tree/master/workspaces/utils/packages/mock-aws-s3-v3#readme",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/goldstack/goldstack/issues"
|
|
14
|
+
},
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "https://github.com/goldstack/goldstack.git"
|
|
18
|
+
},
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"author": "Max Rohde",
|
|
21
|
+
"sideEffects": false,
|
|
22
|
+
"main": "dist/src/mockS3.js",
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "yarn clean && yarn compile",
|
|
25
|
+
"build:watch": "yarn clean && yarn compile-watch",
|
|
26
|
+
"clean": "rimraf ./dist",
|
|
27
|
+
"compile": "tsc -p tsconfig.json",
|
|
28
|
+
"compile-watch": "tsc -p tsconfig.json --watch",
|
|
29
|
+
"compile-watch:light": "nodemon --watch ./src/ -e '*' --exec 'yarn compile'",
|
|
30
|
+
"coverage": "jest --collect-coverage --passWithNoTests --config=./jest.config.js --runInBand",
|
|
31
|
+
"prepublishOnly": "yarn run build",
|
|
32
|
+
"publish": "utils-git changed --exec \"yarn npm publish $@\"",
|
|
33
|
+
"test-ci": "jest --passWithNoTests --config=./jest.config.js --runInBand",
|
|
34
|
+
"version:apply": "utils-git changed --exec \"yarn version $@ && yarn version apply\""
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@aws-sdk/client-s3": "3.485.0",
|
|
38
|
+
"@smithy/types": "^2.8.0",
|
|
39
|
+
"aws-sdk-client-mock": "^3.0.1",
|
|
40
|
+
"mock-aws-s3": "^4.0.2"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@goldstack/utils-git": "0.2.9",
|
|
44
|
+
"@swc/core": "^1.3.74",
|
|
45
|
+
"@swc/jest": "^0.2.27",
|
|
46
|
+
"@types/jest": "^29.0.1",
|
|
47
|
+
"@types/mock-aws-s3": "^2.6.3",
|
|
48
|
+
"@types/node": "^18.7.13",
|
|
49
|
+
"jest": "^29.3.1",
|
|
50
|
+
"rimraf": "^3.0.2",
|
|
51
|
+
"typescript": "^4.8.4"
|
|
52
|
+
},
|
|
53
|
+
"publishConfig": {
|
|
54
|
+
"main": "dist/src/mockS3.js"
|
|
55
|
+
}
|
|
56
|
+
}
|