UNPKG

parse-cos-adapter

Version:
100 lines (88 loc) 3.85 kB
'use strict'; const DEFAULT_COS_REGION = 'ap-guangzhou'; function requiredOrFromEnvironment(options, key, env) { options[key] = options[key] || process.env[env]; if (!options[key]) { throw `S3Adapter requires option '${key}' or env. variable ${env}`; } return options; } function fromEnvironmentOrDefault(options, key, env, defaultValue) { options[key] = options[key] || process.env[env] || defaultValue; // If we used the overrides, // make sure they take priority if(options.s3overrides){ if(options.s3overrides[key]){ options[key] = options.s3overrides[key]; }else if (options.s3overrides.params && options.s3overrides.params.Bucket) { options.bucket = options.s3overrides.params.Bucket; } } return options; } function fromOptionsDictionaryOrDefault(options, key, defaultValue) { options[key] = options[key] || defaultValue; return options; } const optionsFromArguments = function optionsFromArguments(args) { const stringOrOptions = args[0]; let options = {}; let s3overrides = {}; let otherOptions; if (typeof stringOrOptions == 'string') { if (args.length == 1) { options.bucket = stringOrOptions; } else if (args.length == 2) { options.bucket = stringOrOptions; if (typeof args[1] != 'object') { throw new Error('Failed to configure S3Adapter. Arguments don\'t make sense'); } otherOptions = args[1]; } else if (args.length > 2) { if (typeof args[1] != 'string' || typeof args[2] != 'string') { throw new Error('Failed to configure S3Adapter. Arguments don\'t make sense'); } options.SecretId = args[0]; options.SecretKey = args[1]; options.Bucket = args[2]; options.Region = args[3]; otherOptions = args[4]; } if (otherOptions) { options.bucketPrefix = otherOptions.bucketPrefix; options.directAccess = otherOptions.directAccess; options.baseUrl = otherOptions.baseUrl; options.baseUrlDirect = otherOptions.baseUrlDirect; options.signatureVersion = otherOptions.signatureVersion; options.globalCacheControl = otherOptions.globalCacheControl; options.ServerSideEncryption = otherOptions.ServerSideEncryption; } } else { if (args.length == 1) { Object.assign(options, stringOrOptions); } else if (args.length == 2) { Object.assign(options, stringOrOptions); s3overrides = args[1]; if (s3overrides.params) { options.bucket = s3overrides.params.Bucket; } } else if (args.length > 2) { throw new Error('Failed to configure S3Adapter. Arguments don\'t make sense'); } } options = fromOptionsDictionaryOrDefault(options, 's3overrides', s3overrides); options = requiredOrFromEnvironment(options, 'Bucket', 'COS_BUCKET'); options = fromEnvironmentOrDefault(options, 'Region', 'COS_REGION', DEFAULT_COS_REGION); options = fromEnvironmentOrDefault(options, 'SecretId', 'COS_SECRET_ID', null); options = fromEnvironmentOrDefault(options, 'SecretKey', 'COS_SECRET_KEY', null); options = fromEnvironmentOrDefault(options, 'accessKey', 'S3_ACCESS_KEY', null); options = fromEnvironmentOrDefault(options, 'secretKey', 'S3_SECRET_KEY', null); options = fromEnvironmentOrDefault(options, 'bucketPrefix', 'S3_BUCKET_PREFIX', ''); options = fromEnvironmentOrDefault(options, 'directAccess', 'S3_DIRECT_ACCESS', false); options = fromEnvironmentOrDefault(options, 'baseUrl', 'S3_BASE_URL', null); options = fromEnvironmentOrDefault(options, 'baseUrlDirect', 'S3_BASE_URL_DIRECT', false); options = fromEnvironmentOrDefault(options, 'signatureVersion', 'S3_SIGNATURE_VERSION', 'v4'); options = fromEnvironmentOrDefault(options, 'globalCacheControl', 'COS_GLOBAL_CACHE_CONTROL', null); return options; } module.exports = optionsFromArguments;