diff --git a/local-cli/bundle/output/bundle.js b/local-cli/bundle/output/bundle.js index e4247982f5..2cbb7be08e 100644 --- a/local-cli/bundle/output/bundle.js +++ b/local-cli/bundle/output/bundle.js @@ -9,7 +9,7 @@ 'use strict'; const Promise = require('promise'); -const sign = require('../sign'); +const hash = require('./hash'); const writeFile = require('./writeFile'); function buildBundle(packagerClient, requestOptions) { @@ -36,7 +36,9 @@ function saveBundleAndMap(bundle, options, log) { log('finish'); log('Writing bundle output to:', bundleOutput); - const writeBundle = writeFile(bundleOutput, sign(codeWithMap.code), encoding); + + const code = hash.appendToString(codeWithMap.code, encoding); + const writeBundle = writeFile(bundleOutput, code, encoding); writeBundle.then(() => log('Done writing bundle output')); if (sourcemapOutput) { diff --git a/local-cli/bundle/output/hash.js b/local-cli/bundle/output/hash.js new file mode 100644 index 0000000000..c02c957461 --- /dev/null +++ b/local-cli/bundle/output/hash.js @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ +'use strict'; + +const crypto = require('crypto'); + +const createHash = () => crypto.createHash('sha1'); +const isUTF8 = encoding => /^utf-?8$/i.test(encoding); + +exports.appendToString = (string, encoding) => { + const hash = createHash(); + hash.update(string, encoding); + encoding = tryAsciiPromotion(string, encoding); + return string + formatSignature(encoding, hash); +}; + +function tryAsciiPromotion(string, encoding) { + if (!isUTF8(encoding)) { return encoding; } + for (let i = 0, n = string.length; i < n; i++) { + if (string.charCodeAt(i) > 0x7f) { return encoding; } + } + return 'ascii'; +} + +function formatSignature(encoding, hash) { + return `/*${encoding}:${hash.digest('hex')}*/`; +}