contentful-migration
Version:
Migration tooling for contentful
125 lines • 4.41 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getConfig = void 0;
const path = __importStar(require("path"));
const os = __importStar(require("os"));
const uuid_1 = require("uuid");
// TODO: I'm ugly, maybe change me
const homedir = process.env.NODE_ENV === 'test' ? '/tmp' : os.homedir();
const configPath = path.resolve(homedir, '.contentfulrc.json');
function getFileConfig() {
try {
const config = require(configPath);
let clientConfig = {};
if (config.host) {
clientConfig.host = config.host;
}
if (config.managementToken) {
clientConfig.accessToken = config.managementToken;
}
if (config.cmaToken) {
clientConfig.accessToken = config.cmaToken;
}
return clientConfig;
}
catch (e) {
return {};
}
}
function getEnvConfig() {
const envKey = 'CONTENTFUL_MANAGEMENT_ACCESS_TOKEN';
return process.env[envKey] ? { accessToken: process.env[envKey] } : {};
}
function getArgvConfig({ spaceId, environmentId = 'master', accessToken, proxy, rawProxy, requestBatchSize, headers, host, retryLimit }) {
const config = {
spaceId,
environmentId,
accessToken,
proxy,
rawProxy,
requestBatchSize,
headers: addSequenceHeader(headers),
host,
retryLimit
};
if (config.retryLimit && (config.retryLimit < 0 || config.retryLimit > 60)) {
throw new Error('retryLimit must be between 0 and 60');
}
if (!config.accessToken) {
delete config.accessToken;
}
return config;
}
/**
* Turn header option into an object. Invalid header values
* are ignored.
*
* @example
* getHeadersConfig('Accept: Any')
* // -> {Accept: 'Any'}
*
* @example
* getHeadersConfig(['Accept: Any', 'X-Version: 1'])
* // -> {Accept: 'Any', 'X-Version': '1'}
*/
function getHeadersConfig(value) {
if (!value) {
return {};
}
const values = Array.isArray(value) ? value : [value];
return values.reduce((headers, value) => {
value = value.trim();
const separatorIndex = value.indexOf(':');
// Invalid header format
if (separatorIndex === -1) {
return headers;
}
const headerKey = value.slice(0, separatorIndex).trim();
const headerValue = value.slice(separatorIndex + 1).trim();
return Object.assign(Object.assign({}, headers), { [headerKey]: headerValue });
}, {});
}
function getConfig(argv) {
const fileConfig = getFileConfig();
const envConfig = getEnvConfig();
const argvConfig = getArgvConfig(Object.assign(Object.assign({}, argv), { headers: (argv === null || argv === void 0 ? void 0 : argv.headers) || getHeadersConfig(argv === null || argv === void 0 ? void 0 : argv.header) }));
return Object.assign(fileConfig, envConfig, argvConfig);
}
exports.getConfig = getConfig;
/**
* Adds a sequence header to a header object
* @param {object} headers
*/
function addSequenceHeader(headers) {
if (typeof headers !== 'object') {
throw new Error('addSequence function expects an object as input');
}
return Object.assign(Object.assign({}, headers), {
// Unique sequence header
'CF-Sequence': (0, uuid_1.v4)() });
}
exports.default = getConfig;
//# sourceMappingURL=config.js.map