s3-test-server 0.0.0-stage → 1.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/lib/cli.js ADDED
@@ -0,0 +1,142 @@
1
+ 'use strict';
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const S3TestServer = require('./index');
6
+
7
+ const HELP = `Usage: s3-test-server [options]
8
+
9
+ A lightweight Amazon S3 emulator for development and testing.
10
+
11
+ Options:
12
+ -a, --address <host> Hostname or IP to bind to (default: localhost)
13
+ -p, --port <n> Port of the server (default: 4568)
14
+ -d, --directory <path> Data directory (default: a temporary directory)
15
+ --access-key-id <id> Access key clients must sign with (default: S3TEST)
16
+ --secret-access-key <key> Matching secret access key (default: S3TEST)
17
+ --region <region> Region reported by the server (default: us-east-1)
18
+ --key <path> Path to a private key file for HTTPS
19
+ --cert <path> Path to a certificate file for HTTPS
20
+ --service-endpoint <host> Root domain for virtual-host-style access
21
+ (default: amazonaws.com)
22
+ --no-vhost-buckets Disable virtual-host-style bucket addressing
23
+ --allow-mismatched-signatures Accept well-formed but incorrect signatures
24
+ --reset-on-start Clear the data directory when the server starts
25
+ --reset-on-close Delete all bucket data when the server closes
26
+ --configure-bucket <name[,config,...]>
27
+ Create a bucket at startup; optional paths to
28
+ CORS/website/tagging XML files (repeatable)
29
+ -s, --silent Suppress log output
30
+ -v, --version Print the version and exit
31
+ -h, --help Show this help
32
+
33
+ Example:
34
+ s3-test-server -d ./s3-data -p 9000 \\
35
+ --configure-bucket "website,./cors.xml,./website.xml"
36
+ `;
37
+
38
+ function parseArgs(argv) {
39
+ const options = { configureBuckets: [] };
40
+ for (let i = 0; i < argv.length; i++) {
41
+ const arg = argv[i];
42
+ const next = () => {
43
+ i += 1;
44
+ if (i >= argv.length) {
45
+ console.error(`Missing value for ${arg}`);
46
+ process.exit(1);
47
+ }
48
+ return argv[i];
49
+ };
50
+ switch (arg) {
51
+ case '-a':
52
+ case '--address':
53
+ options.address = next();
54
+ break;
55
+ case '-p':
56
+ case '--port':
57
+ options.port = parseInt(next(), 10);
58
+ break;
59
+ case '-d':
60
+ case '--directory':
61
+ options.directory = path.resolve(next());
62
+ break;
63
+ case '--access-key-id':
64
+ options.accessKeyId = next();
65
+ break;
66
+ case '--secret-access-key':
67
+ options.secretAccessKey = next();
68
+ break;
69
+ case '--region':
70
+ options.region = next();
71
+ break;
72
+ case '--key':
73
+ options.key = fs.readFileSync(next());
74
+ break;
75
+ case '--cert':
76
+ options.cert = fs.readFileSync(next());
77
+ break;
78
+ case '--service-endpoint':
79
+ options.serviceEndpoint = next();
80
+ break;
81
+ case '--no-vhost-buckets':
82
+ options.vhostBuckets = false;
83
+ break;
84
+ case '--allow-mismatched-signatures':
85
+ options.allowMismatchedSignatures = true;
86
+ break;
87
+ case '--reset-on-start':
88
+ options.resetOnStart = true;
89
+ break;
90
+ case '--reset-on-close':
91
+ options.resetOnClose = true;
92
+ break;
93
+ case '--configure-bucket': {
94
+ const [name, ...configPaths] = next().split(',');
95
+ options.configureBuckets.push({
96
+ name: name.trim(),
97
+ configs: configPaths.map((configPath) =>
98
+ fs.readFileSync(path.resolve(configPath.trim()))
99
+ ),
100
+ });
101
+ break;
102
+ }
103
+ case '-s':
104
+ case '--silent':
105
+ options.silent = true;
106
+ break;
107
+ case '-v':
108
+ case '--version':
109
+ console.log(require('../package.json').version);
110
+ process.exit(0);
111
+ break;
112
+ case '-h':
113
+ case '--help':
114
+ console.log(HELP);
115
+ process.exit(0);
116
+ break;
117
+ default:
118
+ console.error(`Unknown option: ${arg}\n`);
119
+ console.error(HELP);
120
+ process.exit(1);
121
+ }
122
+ }
123
+ return options;
124
+ }
125
+
126
+ async function main() {
127
+ const options = parseArgs(process.argv.slice(2));
128
+ const server = new S3TestServer(options);
129
+ const shutdown = () => {
130
+ server.close().finally(() => process.exit(0));
131
+ };
132
+ process.on('SIGINT', shutdown);
133
+ process.on('SIGTERM', shutdown);
134
+ try {
135
+ await server.run();
136
+ } catch (err) {
137
+ console.error(err.message);
138
+ process.exit(1);
139
+ }
140
+ }
141
+
142
+ module.exports = { main };