You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
1.1 KiB
33 lines
1.1 KiB
/** |
|
* Copyright (c) 2015-present, Facebook, Inc. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
'use strict'; |
|
|
|
const crypto = require('crypto'); |
|
|
|
const macroCheck = new RegExp('[./]macro'); |
|
|
|
module.exports = function () { |
|
return { |
|
// This function transforms the Babel configuration on a per-file basis |
|
config(config, { source }) { |
|
// Babel Macros are notoriously hard to cache, so they shouldn't be |
|
// https://github.com/babel/babel/issues/8497 |
|
// We naively detect macros using their package suffix and add a random token |
|
// to the caller, a valid option accepted by Babel, to compose a one-time |
|
// cacheIdentifier for the file. We cannot tune the loader options on a per |
|
// file basis. |
|
if (macroCheck.test(source)) { |
|
return Object.assign({}, config.options, { |
|
caller: Object.assign({}, config.options.caller, { |
|
craInvalidationToken: crypto.randomBytes(32).toString('hex'), |
|
}), |
|
}); |
|
} |
|
return config.options; |
|
}, |
|
}; |
|
};
|
|
|