From 499303b9fe137ad03cb09f162ac1f1520cf17f38 Mon Sep 17 00:00:00 2001 From: Izaak Schroeder Date: Thu, 10 Nov 2016 17:25:41 -0800 Subject: [PATCH 1/3] Pass `dirname` as extra metadata to preset constructor. Sometimes a preset would like to know where it should resolve relative paths from (e.g. https://github.com/tleunen/babel-plugin-module-resolver) and this extra information makes that possible. --- .../src/transformation/file/options/option-manager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-core/src/transformation/file/options/option-manager.js b/packages/babel-core/src/transformation/file/options/option-manager.js index d492eeda6638..f649341305fe 100644 --- a/packages/babel-core/src/transformation/file/options/option-manager.js +++ b/packages/babel-core/src/transformation/file/options/option-manager.js @@ -308,7 +308,7 @@ export default class OptionManager { (presetLoc || "a preset") + " which does not accept options."); } - if (typeof val === "function") val = val(context, options); + if (typeof val === "function") val = val(context, options, {dirname}); if (typeof val !== "object") { throw new Error(`Unsupported preset format: ${val}.`); From 29fcb7806ab51aba88ae9eff5fc938ce7a6321d9 Mon Sep 17 00:00:00 2001 From: Moti Zilberman Date: Sun, 19 Feb 2017 09:52:34 +0000 Subject: [PATCH 2/3] Lint fix --- .../src/transformation/file/options/option-manager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-core/src/transformation/file/options/option-manager.js b/packages/babel-core/src/transformation/file/options/option-manager.js index a0cfc68e2960..4746260a3685 100644 --- a/packages/babel-core/src/transformation/file/options/option-manager.js +++ b/packages/babel-core/src/transformation/file/options/option-manager.js @@ -299,7 +299,7 @@ export default class OptionManager { (presetLoc || "a preset") + " which does not accept options."); } - if (typeof val === "function") val = val(context, options, {dirname}); + if (typeof val === "function") val = val(context, options, { dirname }); if (typeof val !== "object") { throw new Error(`Unsupported preset format: ${val}.`); From cc860310568495bc92c7ba31b52fe5270a0f976a Mon Sep 17 00:00:00 2001 From: Moti Zilberman Date: Sun, 19 Feb 2017 10:53:03 +0000 Subject: [PATCH 3/3] Test for `dirname` passed into preset constructor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This adds a check for `dirname`’s existence and correctness to the `resolve-addons-relative-to-file` test, and serves as a minimal example of a path-aware preset. --- .../node_modules/addons/preset.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/babel-core/test/fixtures/resolution/resolve-addons-relative-to-file/node_modules/addons/preset.js b/packages/babel-core/test/fixtures/resolution/resolve-addons-relative-to-file/node_modules/addons/preset.js index a1af16e41fac..e08f4b1c612d 100644 --- a/packages/babel-core/test/fixtures/resolution/resolve-addons-relative-to-file/node_modules/addons/preset.js +++ b/packages/babel-core/test/fixtures/resolution/resolve-addons-relative-to-file/node_modules/addons/preset.js @@ -1,5 +1,10 @@ -module.exports = { - plugins: [plugin], +module.exports = function preset (context, options, fileContext) { + if (/resolve-addons-relative-to-file$/.test(fileContext.dirname)) { + return { + plugins: [plugin], + }; + } + return {}; }; function plugin () {