%PDF- %PDF-
| Direktori : /home/opti/workflow/node_modules/aws-sdk/dist-tools/strategies/ |
| Current File : /home/opti/workflow/node_modules/aws-sdk/dist-tools/strategies/default.js |
var fs = require('fs');
var util = require('util');
var path = require('path');
function DefaultStrategy(builder) {
this.builder = builder;
this.libPath = this.builder.options.libPath;
this.isCached = this.builder.options.writeCache;
this.isMinified = this.builder.options.minify;
this.minifyOptions = this.builder.options.minifyOptions || {};
this.minifyOptions.fromString = true;
this.AWS = require(this.libPath + '/lib/aws');
this.apis = require('aws-sdk-apis');
this.license = [
'// AWS SDK for JavaScript v' + this.AWS.VERSION,
'// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.',
'// License at https://sdk.amazonaws.com/js/BUNDLE_LICENSE.txt'
].join('\n') + '\n';
this.setServiceClasses();
if (this.isCached && !this.builder.cacheExists()) {
fs.mkdirSync(this.builder.cachePath());
}
}
DefaultStrategy.prototype.setServiceClasses = function() {
this.serviceClasses = {};
this.AWS.util.each.call(this, this.AWS, function(name, serviceClass) {
if (serviceClass.serviceIdentifier) {
this.serviceClasses[serviceClass.serviceIdentifier] = serviceClass;
}
});
};
DefaultStrategy.prototype.minify = function(code) {
var uglify = require('uglify-js');
var minified = uglify.minify(code, this.minifyOptions);
return minified.code;
};
DefaultStrategy.prototype.stripComments = function(code) {
var lines = code.split(/\r?\n/);
var multiLine = false;
lines = lines.map(function (line) {
var rLine = line;
if (line.match(/^\s*\/\//)) {
rLine = null;
} else if (line.match(/^\s*\/\*/)) {
multiLine = true;
rLine = null;
}
if (multiLine) {
var multiLineEnd = line.match(/\*\/(.*)/);
if (multiLineEnd) {
multiLine = false;
rLine = multiLineEnd[1];
} else {
rLine = null;
}
}
return rLine;
}).filter(function(l) { return l !== null; });
var newCode = lines.join('\n');
newCode = newCode.replace(/\/\*\*[\s\S]+?Copyright\s+.+?Amazon[\s\S]+?\*\//g, '');
return newCode;
};
DefaultStrategy.prototype.getServiceHeader = function(service) {
if (service === 'all') {
return Object.keys(this.serviceClasses).map(function(service) {
return this.getServiceHeader(service);
}.bind(this)).join('\n');
}
var file = util.format(
'AWS.%s = AWS.Service.defineService(\'%s\');\n',
this.apis.serviceName(service), service);
var svcPath = this.libPath + '/lib/services/' + service + '.js';
if (fs.existsSync(svcPath)) {
var lines = fs.readFileSync(svcPath).toString().split(/\r?\n/);
file += lines.map(function (line) {
line = line.replace(/^var\s*.*\s*=\s*require\s*\(.+\).*/, '');
line = line.replace(/^module.exports\s*=.*/, '');
return line;
}).join('\n');
}
if (this.isMinified) file = this.minify(file);
else file = this.stripComments(file);
if (this.isCached) {
fs.writeFileSync(this.builder.cachePath(service), file);
}
return file;
};
DefaultStrategy.prototype.getService = function(service, version) {
if (service === 'all') {
return Object.keys(this.serviceClasses).map(function(service) {
var out = this.serviceClasses[service].apiVersions.map(function(version) {
if (version.indexOf('*') >= 0) return null;
return this.getService(service, version);
}.bind(this)).filter(function(c) { return c !== null; }).join('\n');
if (this.isCached) {
// build 'latest', but don't add it to code (for caching)
this.getService(service, 'latest');
}
return out;
}.bind(this)).join('\n');
}
var svc, api;
if (!this.serviceClasses[service]) {
return null;
}
try {
var ClassName = this.serviceClasses[service];
svc = new ClassName({apiVersion: version, endpoint: 'localhost'});
api = this.apis.load(service, svc.api.apiVersion);
} catch (e) {
return null;
}
var line = util.format(
'AWS.Service.defineServiceApi(AWS.%s, "%s", %s);',
this.apis.serviceName(service), svc.api.apiVersion, JSON.stringify(api));
if (this.isCached) {
fs.writeFileSync(this.builder.cachePath(service + '-' + version), line);
}
return line;
};
DefaultStrategy.prototype.getCore = function(callback) {
var img = require('browserify/node_modules/insert-module-globals');
img.vars.process = function() { return '{browser:true}'; };
var browserify = require('browserify');
var opts = { basedir: this.libPath };
browserify(opts).add('./lib/browser').
ignore('domain').bundle(function (err, data) {
if (err) return callback(err);
var code = (data || '').toString();
if (this.isMinified) code = this.minify(code);
else code = this.stripComments(code);
code = this.license + code;
if (this.isCached) {
fs.writeFileSync(this.builder.cachePath('_core'), code);
}
callback(null, code);
}.bind(this));
};
module.exports = DefaultStrategy;