UNPKG

3.39 kBJavaScriptView Raw
1"use strict";
2
3var _fs = _interopRequireDefault(require("fs"));
4
5var _getCredentials = require("@commercetools/get-credentials");
6
7var _pino = _interopRequireDefault(require("pino"));
8
9var _prettyError = _interopRequireDefault(require("pretty-error"));
10
11var _yargs = _interopRequireDefault(require("yargs"));
12
13var _main = _interopRequireDefault(require("./main"));
14
15var _package = require("../package.json");
16
17function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
19process.title = 'customer-groups-exporter';
20
21const args = _yargs.default.usage(`
22Usage: $0 [options]
23${_package.description}`).showHelpOnFail(false).option('output', {
24 alias: 'o',
25 default: 'stdout',
26 describe: 'Path to output file.'
27}).coerce('output', arg => {
28 if (arg !== 'stdout') return _fs.default.createWriteStream(String(arg));
29 return process.stdout;
30}).option('apiUrl', {
31 default: 'https://api.sphere.io',
32 describe: 'The host URL of the HTTP API service.'
33}).option('authUrl', {
34 default: 'https://auth.sphere.io',
35 describe: 'The host URL of the OAuth API service.'
36}).option('accessToken', {
37 describe: 'CTP client access token.'
38}).option('projectKey', {
39 alias: 'p',
40 describe: 'API project key.',
41 demand: true
42}).option('where', {
43 alias: 'w',
44 describe: 'Specify where predicate.'
45}).option('logLevel', {
46 default: 'info',
47 describe: 'Logging level: error, warn, info or debug.'
48}).option('prettyLogs ', {
49 describe: 'Pretty print logs to the terminal',
50 type: 'boolean'
51}).option('logFile', {
52 default: 'customer-groups-export.log',
53 describe: 'Path to where to save logs file.',
54 type: 'string'
55}).argv; // instantiate logger
56
57
58const loggerConfig = {
59 level: args.logLevel,
60 prettyPrint: args.prettyLogs // If the stdout is used for a data output, save all logs to a log file.
61 // pino writes logs to stdout by default
62
63};
64let logDestination;
65if (args.output === process.stdout) logDestination = _fs.default.createWriteStream(args.logFile);
66const logger = (0, _pino.default)(loggerConfig, logDestination); // print errors to stderr if we use stdout for data output
67// if we save data to output file errors are already logged by pino
68
69const logError = error => {
70 const errorFormatter = new _prettyError.default();
71 if (args.logLevel === 'debug') process.stderr.write(`ERR: ${errorFormatter.render(error)}`);else process.stderr.write(`ERR: ${error.message || error}`);
72};
73
74const errorHandler = errors => {
75 if (Array.isArray(errors)) errors.forEach(logError);else logError(errors);
76 process.exitCode = 1;
77};
78
79const resolveCredentials = _args => {
80 if (_args.accessToken) return Promise.resolve({});
81 return (0, _getCredentials.getCredentials)(_args.projectKey);
82}; // Register error listener
83
84
85args.output.on('error', errorHandler);
86resolveCredentials(args).then(credentials => {
87 const apiConfig = {
88 host: args.authUrl,
89 apiUrl: args.apiUrl,
90 projectKey: args.projectKey,
91 credentials
92 };
93 const exporterOptions = {
94 apiConfig,
95 accessToken: args.accessToken,
96 predicate: args.where,
97 logger: {
98 error: logger.error.bind(logger),
99 warn: logger.warn.bind(logger),
100 info: logger.info.bind(logger),
101 debug: logger.debug.bind(logger)
102 }
103 };
104 return new _main.default(exporterOptions);
105}).then(customerGroupsExporter => customerGroupsExporter.run(args.output)).catch(errorHandler);
\No newline at end of file