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 ADDED
@@ -0,0 +1,46 @@
1
+ [![npm version](https://badge.fury.io/js/mock-aws-s3-v3.svg)](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,3 @@
1
+ import { S3Client } from '@aws-sdk/client-s3';
2
+ export declare function createS3Client(localDirectory: string, s3Client?: S3Client): S3Client;
3
+ //# sourceMappingURL=mockS3.d.ts.map
@@ -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
+ }