@vxrn/vite-plugin-metro 1.25.4 → 1.25.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/cjs/transformer/babel-core.cjs +1 -0
  2. package/dist/cjs/transformer/babel-core.native.js +1 -0
  3. package/dist/cjs/transformer/babel-core.native.js.map +1 -1
  4. package/dist/cjs/transformer/transformSync.cjs +17 -4
  5. package/dist/cjs/transformer/transformSync.native.js +19 -4
  6. package/dist/cjs/transformer/transformSync.native.js.map +1 -1
  7. package/dist/cjs/transformer/transformSync.test.cjs +36 -0
  8. package/dist/cjs/transformer/transformSync.test.native.js +49 -0
  9. package/dist/cjs/transformer/transformSync.test.native.js.map +1 -0
  10. package/dist/esm/transformer/babel-core.mjs +2 -2
  11. package/dist/esm/transformer/babel-core.mjs.map +1 -1
  12. package/dist/esm/transformer/babel-core.native.js +2 -2
  13. package/dist/esm/transformer/babel-core.native.js.map +1 -1
  14. package/dist/esm/transformer/transformSync.mjs +17 -4
  15. package/dist/esm/transformer/transformSync.mjs.map +1 -1
  16. package/dist/esm/transformer/transformSync.native.js +19 -4
  17. package/dist/esm/transformer/transformSync.native.js.map +1 -1
  18. package/dist/esm/transformer/transformSync.test.mjs +37 -0
  19. package/dist/esm/transformer/transformSync.test.mjs.map +1 -0
  20. package/dist/esm/transformer/transformSync.test.native.js +47 -0
  21. package/dist/esm/transformer/transformSync.test.native.js.map +1 -0
  22. package/package.json +6 -4
  23. package/src/transformer/babel-core.ts +1 -0
  24. package/src/transformer/transformSync.test.ts +50 -0
  25. package/src/transformer/transformSync.ts +29 -4
  26. package/types/transformer/babel-core.d.ts +1 -1
  27. package/types/transformer/babel-core.d.ts.map +1 -1
  28. package/types/transformer/transformSync.d.ts.map +1 -1
  29. package/types/transformer/transformSync.test.d.ts +2 -0
  30. package/types/transformer/transformSync.test.d.ts.map +1 -0
@@ -22,6 +22,7 @@ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
22
22
  }), mod);
23
23
  var babel_core_exports = {};
24
24
  __export(babel_core_exports, {
25
+ loadOptions: () => import_core.loadOptions,
25
26
  transformFromAstSync: () => import_core.transformFromAstSync,
26
27
  transformSync: () => import_core.transformSync
27
28
  });
@@ -24,6 +24,7 @@ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
24
24
  }), mod);
25
25
  var babel_core_exports = {};
26
26
  __export(babel_core_exports, {
27
+ loadOptions: () => import_core.loadOptions,
27
28
  transformFromAstSync: () => import_core.transformFromAstSync,
28
29
  transformSync: () => import_core.transformSync
29
30
  });
@@ -1 +1 @@
1
- {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","babel_core_exports","__export","transformFromAstSync","import_core","transformSync","module","exports"],"sources":["../../../src/transformer/babel-core.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,kBAAA;AAAAC,QAAA,CAAAD,kBAAA;EAAAE,oBAAA,EAAAA,CAAA,KAAAC,WAAA,CAAAD,oBAAA;EAAAE,aAAA,EAAAA,CAAA,KAAAD,WAAA,CAAAC;AAAA;AACAC,MAAA,CAAAC,OAAA,GAAAX,YAKO,CAAAK,kBAAA","ignoreList":[]}
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","babel_core_exports","__export","loadOptions","import_core","transformFromAstSync","transformSync","module","exports"],"sources":["../../../src/transformer/babel-core.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,kBAAA;AAAAC,QAAA,CAAAD,kBAAA;EAAAE,WAAA,EAAAA,CAAA,KAAAC,WAAA,CAAAD,WAAA;EAAAE,oBAAA,EAAAA,CAAA,KAAAD,WAAA,CAAAC,oBAAA;EAAAC,aAAA,EAAAA,CAAA,KAAAF,WAAA,CAAAE;AAAA;AACAC,MAAA,CAAAC,OAAA,GAAAZ,YAMO,CAAAK,kBAAA","ignoreList":[]}
@@ -46,9 +46,22 @@ function isTSXSource(fileName) {
46
46
  function transformSync(src, babelConfig, {
47
47
  hermesParser
48
48
  }) {
49
- const isTypeScript = isTypeScriptSource(babelConfig.filename) || isTSXSource(babelConfig.filename);
49
+ const loadedBabelConfig = babel.loadOptions(babelConfig);
50
+ if (!loadedBabelConfig) return null;
51
+ let hasWorkletsPlugin = false;
52
+ loadedBabelConfig.plugins = loadedBabelConfig.plugins?.filter(plugin => {
53
+ const workletsPlugin = plugin;
54
+ if (workletsPlugin.key !== "worklets") return true;
55
+ if (workletsPlugin.options && "workletizableModules" in workletsPlugin.options) {
56
+ throw new Error("[vxrn] `workletizableModules` was removed from react-native-worklets. use `importForwarding.moduleNames`.");
57
+ }
58
+ if (hasWorkletsPlugin) return false;
59
+ hasWorkletsPlugin = true;
60
+ return true;
61
+ });
62
+ const isTypeScript = isTypeScriptSource(loadedBabelConfig.filename ?? "") || isTSXSource(loadedBabelConfig.filename ?? "");
50
63
  if (isTypeScript) {
51
- return parseWithBabel(src, babelConfig);
64
+ return parseWithBabel(src, loadedBabelConfig);
52
65
  }
53
66
  if (!isTypeScript && (
54
67
  // The Hermes parser doesn't support comments or babel proposals such as export default from, meaning it has lower compatibility with larger parts
@@ -56,9 +69,9 @@ function transformSync(src, babelConfig, {
56
69
  // However, React Native ships with flow syntax that isn't supported in Babel so we need to use Hermes for those files.
57
70
  // We can try to quickly detect if the file uses flow syntax by checking for the @flow pragma which is present in every React Native file.
58
71
  hermesParser || src.includes(" @flow"))) {
59
- return parseWithHermes(src, babelConfig);
72
+ return parseWithHermes(src, loadedBabelConfig);
60
73
  }
61
- return parseWithBabel(src, babelConfig);
74
+ return parseWithBabel(src, loadedBabelConfig);
62
75
  }
63
76
  function parseWithHermes(src, babelConfig) {
64
77
  const sourceAst = require("hermes-parser").parse(src, {
@@ -49,9 +49,24 @@ function transformSync(src, babelConfig, param) {
49
49
  var {
50
50
  hermesParser
51
51
  } = param;
52
- var isTypeScript = isTypeScriptSource(babelConfig.filename) || isTSXSource(babelConfig.filename);
52
+ var _loadedBabelConfig_filename, _loadedBabelConfig_filename1;
53
+ var _loadedBabelConfig_plugins;
54
+ var loadedBabelConfig = babel.loadOptions(babelConfig);
55
+ if (!loadedBabelConfig) return null;
56
+ var hasWorkletsPlugin = false;
57
+ loadedBabelConfig.plugins = (_loadedBabelConfig_plugins = loadedBabelConfig.plugins) === null || _loadedBabelConfig_plugins === void 0 ? void 0 : _loadedBabelConfig_plugins.filter(function (plugin) {
58
+ var workletsPlugin = plugin;
59
+ if (workletsPlugin.key !== "worklets") return true;
60
+ if (workletsPlugin.options && "workletizableModules" in workletsPlugin.options) {
61
+ throw new Error("[vxrn] `workletizableModules` was removed from react-native-worklets. use `importForwarding.moduleNames`.");
62
+ }
63
+ if (hasWorkletsPlugin) return false;
64
+ hasWorkletsPlugin = true;
65
+ return true;
66
+ });
67
+ var isTypeScript = isTypeScriptSource((_loadedBabelConfig_filename = loadedBabelConfig.filename) !== null && _loadedBabelConfig_filename !== void 0 ? _loadedBabelConfig_filename : "") || isTSXSource((_loadedBabelConfig_filename1 = loadedBabelConfig.filename) !== null && _loadedBabelConfig_filename1 !== void 0 ? _loadedBabelConfig_filename1 : "");
53
68
  if (isTypeScript) {
54
- return parseWithBabel(src, babelConfig);
69
+ return parseWithBabel(src, loadedBabelConfig);
55
70
  }
56
71
  if (!isTypeScript && (
57
72
  // The Hermes parser doesn't support comments or babel proposals such as export default from, meaning it has lower compatibility with larger parts
@@ -59,9 +74,9 @@ function transformSync(src, babelConfig, param) {
59
74
  // However, React Native ships with flow syntax that isn't supported in Babel so we need to use Hermes for those files.
60
75
  // We can try to quickly detect if the file uses flow syntax by checking for the @flow pragma which is present in every React Native file.
61
76
  hermesParser || src.includes(" @flow"))) {
62
- return parseWithHermes(src, babelConfig);
77
+ return parseWithHermes(src, loadedBabelConfig);
63
78
  }
64
- return parseWithBabel(src, babelConfig);
79
+ return parseWithBabel(src, loadedBabelConfig);
65
80
  }
66
81
  function parseWithHermes(src, babelConfig) {
67
82
  var sourceAst = require("hermes-parser").parse(src, {
@@ -1 +1 @@
1
- {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","transformSync_exports","__export","transformSync","module","exports","babel","__toESM","require","isTypeScriptSource","fileName","endsWith","isTSXSource","src","babelConfig","param","hermesParser","isTypeScript","filename","parseWithBabel","includes","parseWithHermes","sourceAst","parse","sourceType","transformFromAstSync"],"sources":["../../../src/transformer/transformSync.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,qBAAA;AAAAC,QAAA,CAAAD,qBAAA;EAAAE,aAAA,EAAAA,CAAA,KAAAA;AAAA;AAMAC,MAAA,CAAAC,OAAuB,GAAAT,YAAA,CAAAK,qBAAA;AAGvB,IAAAK,KAAS,GAAAC,OAAA,CAAAC,OAAA,CAAmB,wBAA2B;AACrD,SAAOC,kBAAUA,CAASC,QAAK;EACjC,OAAAA,QAAA,aAAAA,QAAA,uBAAAA,QAAA,CAAAC,QAAA;AAEA;AACE,SAAOC,WAAUA,CAAAF,QAAS;EAC5B,OAAAA,QAAA,aAAAA,QAAA,uBAAAA,QAAA,CAAAC,QAAA;AAEO;AAKL,SAAMR,cACJU,GAAA,EAAAC,WAAA,EAAAC,KAAmB;EAErB,IAAI;IAAAC;EAAc,IAAAD,KAAA;EAChB,IAAAE,YAAO,GAAAR,kBAAoB,CAAAK,WAAW,CAAAI,QAAA,KAAAN,WAAA,CAAAE,WAAA,CAAAI,QAAA;EACxC,IAAAD,YAAA;IAEA,OACGE,cAAA,CAAAN,GAAA,EAAAC,WAAA;EAAA;EAAA,KAAAG,YAAA;EAAA;EAAA;EAAA;EAOD;EACFD,YAAA,IAAAH,GAAA,CAAAO,QAAA;IAEA,OAAOC,eAAe,CAAAR,GAAK,EAAAC,WAAW;EACxC;EAEA,OAASK,cAAA,CAAAN,GAAgB,EAAAC,WAAa;AACpC;AAAsD,SACpDO,eAAOA,CAAAR,GAAA,EAAAC,WAAA;EAAA,IACPQ,SAAA,GAAYd,OAAA,gBAAY,EAAAe,KAAA,CAAAV,GAAA;IACzBP,KAAA;IACDkB,UAAO,EAAMV,WAAA,CAAAU;EACf;EAEA,OAASlB,KAAA,CAAAmB,oBAA4B,CAAAH,SAAqC,EAAAT,GAAA,EAAAC,WAAA;AACxE;AACF,SAAAK,eAAAN,GAAA,EAAAC,WAAA","ignoreList":[]}
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","transformSync_exports","__export","transformSync","module","exports","babel","__toESM","require","isTypeScriptSource","fileName","endsWith","isTSXSource","src","babelConfig","param","hermesParser","_loadedBabelConfig_filename","_loadedBabelConfig_filename1","_loadedBabelConfig_plugins","loadedBabelConfig","loadOptions","hasWorkletsPlugin","plugins","filter","plugin","workletsPlugin","key","options","Error","isTypeScript","filename","parseWithBabel","includes","parseWithHermes","sourceAst","parse","sourceType","transformFromAstSync"],"sources":["../../../src/transformer/transformSync.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,qBAAA;AAAAC,QAAA,CAAAD,qBAAA;EAAAE,aAAA,EAAAA,CAAA,KAAAA;AAAA;AAMAC,MAAA,CAAAC,OAAuB,GAAAT,YAAA,CAAAK,qBAAA;AAGvB,IAAAK,KAAS,GAAAC,OAAA,CAAAC,OAAA,CAAmB,wBAA2B;AACrD,SAAOC,kBAAUA,CAASC,QAAK;EACjC,OAAAA,QAAA,aAAAA,QAAA,uBAAAA,QAAA,CAAAC,QAAA;AAEA;AACE,SAAOC,WAAUA,CAAAF,QAAS;EAC5B,OAAAA,QAAA,aAAAA,QAAA,uBAAAA,QAAA,CAAAC,QAAA;AAEO;AAKL,SAAMR,cAAAU,GAAA,EAAoBC,WAAM,EAAAC,KAAA;EAAA,IAC9B;IAAAC;EAAA,IAAAD,KAAA;EACF,IAAAE,2BAAA,EAAAC,4BAAA;EACA,IAAIC,0BAAoB;EAIxB,IAAIC,iBAAA,GAAoBd,KAAA,CAAAe,WAAA,CAAAP,WAAA;EACxB,KAAAM,iBAAkB,SAAU;EAC1B,IAAAE,iBAAM,QAAiB;EAIvBF,iBAAI,CAAAG,OAAe,IAAQJ,0BAAmB,GAAAC,iBAAA,CAAAG,OAAA,cAAAJ,0BAAA,uBAAAA,0BAAA,CAAAK,MAAA,WAAAC,MAAA;IAC9C,IAAIC,cAAA,GAAeD,MAAA;IACjB,IAAAC,cAAU,CAAAC,GAAA;IAAA,IACRD,cAAA,CAAAE,OAAA,8BAAAF,cAAA,CAAAE,OAAA;MACF,UAAAC,KAAA;IACF;IACA,IAAIP,iBAAA,EAAmB,OAAO;IAC9BA,iBAAA,GAAoB;IACpB,OAAO;EACT,CAAC;EAED,IAAAQ,YAAM,GAAArB,kBACJ,EAAAQ,2BAAqC,GAAAG,iBACrC,CAAAW,QAAY,cAAkBd,2BAAc,cAAAA,2BAAA,UAAAL,WAAA,EAAAM,4BAAA,GAAAE,iBAAA,CAAAW,QAAA,cAAAb,4BAAA,cAAAA,4BAAA;EAE9C,IAAIY,YAAA,EAAc;IAChB,OAAOE,cAAA,CAAenB,GAAA,EAAKO,iBAAiB;EAC9C;EAEA,IACE,CAACU,YAAA;EAAA;EAAA;EAAA;EAAA;EAKAd,YAAA,IAAgBH,GAAA,CAAIoB,QAAA,CAAS,QAAQ,IACtC;IACA,OAAOC,eAAA,CAAgBrB,GAAA,EAAKO,iBAAiB;EAC/C;EAEA,OAAOY,cAAA,CAAenB,GAAA,EAAKO,iBAAiB;AAC9C;AAEA,SAASc,gBAAgBrB,GAAA,EAAaC,WAAA,EAAqC;EACzE,IAAAqB,SAAM,GAAA3B,OAAY,gBAAQ,EAAe4B,KAAE,CAAAvB,GAAM;IAC/CP,KAAA,EAAO;IACP+B,UAAA,EAAYvB,WAAA,CAAYuB;EAC1B,CAAC;EACD,OAAO/B,KAAA,CAAMgC,oBAAA,CAAqBH,SAAA,EAAWtB,GAAA,EAAKC,WAAW;AAC/D;AAEA,SAASkB,eAAenB,GAAA,EAAaC,WAAA,EAAqC;EACxE,OAAOR,KAAA,CAAMH,aAAA,CAAcU,GAAA,EAAKC,WAAW;AAC7C","ignoreList":[]}
@@ -0,0 +1,36 @@
1
+ var import_vitest = require("vitest");
2
+ var import_transformSync = require("./transformSync.cjs");
3
+ const workletsPlugin = marker => () => ({
4
+ name: "worklets",
5
+ visitor: {
6
+ Program(_, state) {
7
+ const passes = state.file.metadata.workletsPasses ?? [];
8
+ state.file.metadata.workletsPasses = passes;
9
+ passes.push(marker);
10
+ }
11
+ }
12
+ });
13
+ (0, import_vitest.describe)("transformSync", () => {
14
+ (0, import_vitest.it)("runs an app-configured Worklets plugin only once when a preset adds another", () => {
15
+ const result = (0, import_transformSync.transformSync)("export const value = 1", {
16
+ filename: "/project/input.ts",
17
+ babelrc: false,
18
+ configFile: false,
19
+ plugins: [workletsPlugin("app")],
20
+ presets: [() => ({
21
+ plugins: [workletsPlugin("preset")]
22
+ })]
23
+ }, {});
24
+ (0, import_vitest.expect)(result?.metadata?.workletsPasses).toEqual(["app"]);
25
+ });
26
+ (0, import_vitest.it)("rejects the removed workletizableModules option before transforming", () => {
27
+ (0, import_vitest.expect)(() => (0, import_transformSync.transformSync)("export const value = 1", {
28
+ filename: "/project/input.ts",
29
+ babelrc: false,
30
+ configFile: false,
31
+ plugins: [[workletsPlugin("app"), {
32
+ workletizableModules: ["remend"]
33
+ }]]
34
+ }, {})).toThrow("use `importForwarding.moduleNames`");
35
+ });
36
+ });
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ var import_vitest = require("vitest");
4
+ var import_transformSync = require("./transformSync.native.js");
5
+ var workletsPlugin = function (marker) {
6
+ return function () {
7
+ return {
8
+ name: "worklets",
9
+ visitor: {
10
+ Program(_, state) {
11
+ var _state_file_metadata_workletsPasses;
12
+ var passes = (_state_file_metadata_workletsPasses = state.file.metadata.workletsPasses) !== null && _state_file_metadata_workletsPasses !== void 0 ? _state_file_metadata_workletsPasses : [];
13
+ state.file.metadata.workletsPasses = passes;
14
+ passes.push(marker);
15
+ }
16
+ }
17
+ };
18
+ };
19
+ };
20
+ (0, import_vitest.describe)("transformSync", function () {
21
+ (0, import_vitest.it)("runs an app-configured Worklets plugin only once when a preset adds another", function () {
22
+ var _result_metadata;
23
+ var result = (0, import_transformSync.transformSync)("export const value = 1", {
24
+ filename: "/project/input.ts",
25
+ babelrc: false,
26
+ configFile: false,
27
+ plugins: [workletsPlugin("app")],
28
+ presets: [function () {
29
+ return {
30
+ plugins: [workletsPlugin("preset")]
31
+ };
32
+ }]
33
+ }, {});
34
+ (0, import_vitest.expect)(result === null || result === void 0 ? void 0 : (_result_metadata = result.metadata) === null || _result_metadata === void 0 ? void 0 : _result_metadata.workletsPasses).toEqual(["app"]);
35
+ });
36
+ (0, import_vitest.it)("rejects the removed workletizableModules option before transforming", function () {
37
+ (0, import_vitest.expect)(function () {
38
+ return (0, import_transformSync.transformSync)("export const value = 1", {
39
+ filename: "/project/input.ts",
40
+ babelrc: false,
41
+ configFile: false,
42
+ plugins: [[workletsPlugin("app"), {
43
+ workletizableModules: ["remend"]
44
+ }]]
45
+ }, {});
46
+ }).toThrow("use `importForwarding.moduleNames`");
47
+ });
48
+ });
49
+ //# sourceMappingURL=transformSync.test.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["import_vitest","require","import_transformSync","workletsPlugin","marker","name","visitor","Program","_","state","_state_file_metadata_workletsPasses","passes","file","metadata","workletsPasses","push","describe","it","_result_metadata","result","transformSync","filename","babelrc","configFile","plugins","presets","expect","toEqual"],"sources":["../../../src/transformer/transformSync.test.ts"],"sourcesContent":[null],"mappings":"AAAA;;AACA,IAAAA,aAAA,GAAAC,OAA8B;AAI9B,IAAAC,oBAAwB,GAAAD,OAAA,CAAmB,2BAAO;AAAA,IAChDE,cAAM,YAAAA,CAAAC,MAAA;EACN,mBAAS;IACP;MACEC,IAAA,EAAM,UAAS;MACfC,OAAM;QACNC,OAAOA,CAAAC,CAAA,EAAKC,KAAM;UACpB,IAAAC,mCAAA;UACF,IAAAC,MAAA,IAAAD,mCAAA,GAAAD,KAAA,CAAAG,IAAA,CAAAC,QAAA,CAAAC,cAAA,cAAAJ,mCAAA,cAAAA,mCAAA;UACFD,KAAA,CAAAG,IAAA,CAAAC,QAAA,CAAAC,cAAA,GAAAH,MAAA;UAEAA,MAAA,CAAAI,IAAA,CAAAX,MAAS;QACP;MACE;IAAe;EACb;AACA;AACY,IAAAJ,aACD,CAAAgB,QAAA;EAAA,IAAAhB,aACT,CAAYiB,EAAA;IAAA,IACZC,gBAAU;IAAqB,IAC/BC,MAAA,GAAS,CAAC,GAAAjB,oBAAmB,CAAAkB,aAAe,0BAAa;MAC3DC,QAAA;MACAC,OAAC;MACHC,UAAA;MAEAC,OAAA,GACErB,cAAA,QACD;MACFsB,OAAA,GAED;QACE;UAAOD,OACL,GACErB,cAAA;QAEE;MAAU;IAEE,MACZ;IAAuE,IACzEH,aAAA,CAAA0B,MAAA,EAAAP,MAAA,aAAAA,MAAA,wBAAAD,gBAAA,GAAAC,MAAA,CAAAN,QAAA,cAAAK,gBAAA,uBAAAA,gBAAA,CAAAJ,cAAA,EAAAa,OAAA,OACC,EACH;EAAA,EACF;EACF,CAAC,GAAA3B,aAAA,CAAAiB,EAAA;IACF,IAAAjB,aAAA,CAAA0B,MAAA","ignoreList":[]}
@@ -1,3 +1,3 @@
1
- import { transformFromAstSync, transformSync } from "@babel/core";
2
- export { transformFromAstSync, transformSync };
1
+ import { loadOptions, transformFromAstSync, transformSync } from "@babel/core";
2
+ export { loadOptions, transformFromAstSync, transformSync };
3
3
  //# sourceMappingURL=babel-core.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["transformFromAstSync","transformSync"],"sources":["../../../src/transformer/babel-core.ts"],"sourcesContent":[null],"mappings":"AACA,SAGEA,oBAAA,EACAC,aAAA,QACK","ignoreList":[]}
1
+ {"version":3,"names":["loadOptions","transformFromAstSync","transformSync"],"sources":["../../../src/transformer/babel-core.ts"],"sourcesContent":[null],"mappings":"AACA,SACEA,WAAA,EAGAC,oBAAA,EACAC,aAAA,QACK","ignoreList":[]}
@@ -1,3 +1,3 @@
1
- import { transformFromAstSync, transformSync } from "@babel/core";
2
- export { transformFromAstSync, transformSync };
1
+ import { loadOptions, transformFromAstSync, transformSync } from "@babel/core";
2
+ export { loadOptions, transformFromAstSync, transformSync };
3
3
  //# sourceMappingURL=babel-core.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["transformFromAstSync","transformSync"],"sources":["../../../src/transformer/babel-core.ts"],"sourcesContent":[null],"mappings":"AACA,SAAAA,oBAAA,EAAAC,aAAA;AAAA,SAIED,oBAAA,EAAAC,aACK","ignoreList":[]}
1
+ {"version":3,"names":["loadOptions","transformFromAstSync","transformSync"],"sources":["../../../src/transformer/babel-core.ts"],"sourcesContent":[null],"mappings":"AACA,SAAAA,WAAA,EAAAC,oBAAA,EAAAC,aAAA;AAAA,SAIEF,WAAA,EACAC,oBAAA,EAAAC,aACK","ignoreList":[]}
@@ -8,9 +8,22 @@ function isTSXSource(fileName) {
8
8
  function transformSync(src, babelConfig, {
9
9
  hermesParser
10
10
  }) {
11
- const isTypeScript = isTypeScriptSource(babelConfig.filename) || isTSXSource(babelConfig.filename);
11
+ const loadedBabelConfig = babel.loadOptions(babelConfig);
12
+ if (!loadedBabelConfig) return null;
13
+ let hasWorkletsPlugin = false;
14
+ loadedBabelConfig.plugins = loadedBabelConfig.plugins?.filter(plugin => {
15
+ const workletsPlugin = plugin;
16
+ if (workletsPlugin.key !== "worklets") return true;
17
+ if (workletsPlugin.options && "workletizableModules" in workletsPlugin.options) {
18
+ throw new Error("[vxrn] `workletizableModules` was removed from react-native-worklets. use `importForwarding.moduleNames`.");
19
+ }
20
+ if (hasWorkletsPlugin) return false;
21
+ hasWorkletsPlugin = true;
22
+ return true;
23
+ });
24
+ const isTypeScript = isTypeScriptSource(loadedBabelConfig.filename ?? "") || isTSXSource(loadedBabelConfig.filename ?? "");
12
25
  if (isTypeScript) {
13
- return parseWithBabel(src, babelConfig);
26
+ return parseWithBabel(src, loadedBabelConfig);
14
27
  }
15
28
  if (!isTypeScript && (
16
29
  // The Hermes parser doesn't support comments or babel proposals such as export default from, meaning it has lower compatibility with larger parts
@@ -18,9 +31,9 @@ function transformSync(src, babelConfig, {
18
31
  // However, React Native ships with flow syntax that isn't supported in Babel so we need to use Hermes for those files.
19
32
  // We can try to quickly detect if the file uses flow syntax by checking for the @flow pragma which is present in every React Native file.
20
33
  hermesParser || src.includes(" @flow"))) {
21
- return parseWithHermes(src, babelConfig);
34
+ return parseWithHermes(src, loadedBabelConfig);
22
35
  }
23
- return parseWithBabel(src, babelConfig);
36
+ return parseWithBabel(src, loadedBabelConfig);
24
37
  }
25
38
  function parseWithHermes(src, babelConfig) {
26
39
  const sourceAst = require("hermes-parser").parse(src, {
@@ -1 +1 @@
1
- {"version":3,"names":["babel","isTypeScriptSource","fileName","endsWith","isTSXSource","transformSync","src","babelConfig","hermesParser","isTypeScript","filename","parseWithBabel","includes","parseWithHermes","sourceAst","require","parse","sourceType","transformFromAstSync"],"sources":["../../../src/transformer/transformSync.ts"],"sourcesContent":[null],"mappings":"AAMA,YAAYA,KAAA,MAAW;AAGvB,SAASC,mBAAmBC,QAAA,EAA2B;EACrD,OAAOA,QAAA,EAAUC,QAAA,CAAS,KAAK;AACjC;AAEA,SAASC,YAAYF,QAAA,EAA2B;EAC9C,OAAOA,QAAA,EAAUC,QAAA,CAAS,MAAM;AAClC;AAEO,SAASE,cACdC,GAAA,EACAC,WAAA,EACA;EAAEC;AAAa,GACf;EACA,MAAMC,YAAA,GACJR,kBAAA,CAAmBM,WAAA,CAAYG,QAAS,KAAKN,WAAA,CAAYG,WAAA,CAAYG,QAAS;EAEhF,IAAID,YAAA,EAAc;IAChB,OAAOE,cAAA,CAAeL,GAAA,EAAKC,WAAW;EACxC;EAEA,IACE,CAACE,YAAA;EAAA;EAAA;EAAA;EAAA;EAKAD,YAAA,IAAgBF,GAAA,CAAIM,QAAA,CAAS,QAAQ,IACtC;IACA,OAAOC,eAAA,CAAgBP,GAAA,EAAKC,WAAW;EACzC;EAEA,OAAOI,cAAA,CAAeL,GAAA,EAAKC,WAAW;AACxC;AAEA,SAASM,gBAAgBP,GAAA,EAAaC,WAAA,EAAqC;EACzE,MAAMO,SAAA,GAAYC,OAAA,CAAQ,eAAe,EAAEC,KAAA,CAAMV,GAAA,EAAK;IACpDN,KAAA,EAAO;IACPiB,UAAA,EAAYV,WAAA,CAAYU;EAC1B,CAAC;EACD,OAAOjB,KAAA,CAAMkB,oBAAA,CAAqBJ,SAAA,EAAWR,GAAA,EAAKC,WAAW;AAC/D;AAEA,SAASI,eAAeL,GAAA,EAAaC,WAAA,EAAqC;EACxE,OAAOP,KAAA,CAAMK,aAAA,CAAcC,GAAA,EAAKC,WAAW;AAC7C","ignoreList":[]}
1
+ {"version":3,"names":["babel","isTypeScriptSource","fileName","endsWith","isTSXSource","transformSync","src","babelConfig","hermesParser","loadedBabelConfig","loadOptions","hasWorkletsPlugin","plugins","filter","plugin","workletsPlugin","key","options","Error","isTypeScript","filename","parseWithBabel","includes","parseWithHermes","sourceAst","require","parse","sourceType","transformFromAstSync"],"sources":["../../../src/transformer/transformSync.ts"],"sourcesContent":[null],"mappings":"AAMA,YAAYA,KAAA,MAAW;AAGvB,SAASC,mBAAmBC,QAAA,EAA2B;EACrD,OAAOA,QAAA,EAAUC,QAAA,CAAS,KAAK;AACjC;AAEA,SAASC,YAAYF,QAAA,EAA2B;EAC9C,OAAOA,QAAA,EAAUC,QAAA,CAAS,MAAM;AAClC;AAEO,SAASE,cACdC,GAAA,EACAC,WAAA,EACA;EAAEC;AAAa,GACf;EACA,MAAMC,iBAAA,GAAoBT,KAAA,CAAMU,WAAA,CAC9BH,WACF;EACA,IAAI,CAACE,iBAAA,EAAmB,OAAO;EAI/B,IAAIE,iBAAA,GAAoB;EACxBF,iBAAA,CAAkBG,OAAA,GAAUH,iBAAA,CAAkBG,OAAA,EAASC,MAAA,CAAQC,MAAA,IAAW;IACxE,MAAMC,cAAA,GAAiBD,MAAA;IAIvB,IAAIC,cAAA,CAAeC,GAAA,KAAQ,YAAY,OAAO;IAC9C,IAAID,cAAA,CAAeE,OAAA,IAAW,0BAA0BF,cAAA,CAAeE,OAAA,EAAS;MAC9E,MAAM,IAAIC,KAAA,CACR,2GACF;IACF;IACA,IAAIP,iBAAA,EAAmB,OAAO;IAC9BA,iBAAA,GAAoB;IACpB,OAAO;EACT,CAAC;EAED,MAAMQ,YAAA,GACJlB,kBAAA,CAAmBQ,iBAAA,CAAkBW,QAAA,IAAY,EAAE,KACnDhB,WAAA,CAAYK,iBAAA,CAAkBW,QAAA,IAAY,EAAE;EAE9C,IAAID,YAAA,EAAc;IAChB,OAAOE,cAAA,CAAef,GAAA,EAAKG,iBAAiB;EAC9C;EAEA,IACE,CAACU,YAAA;EAAA;EAAA;EAAA;EAAA;EAKAX,YAAA,IAAgBF,GAAA,CAAIgB,QAAA,CAAS,QAAQ,IACtC;IACA,OAAOC,eAAA,CAAgBjB,GAAA,EAAKG,iBAAiB;EAC/C;EAEA,OAAOY,cAAA,CAAef,GAAA,EAAKG,iBAAiB;AAC9C;AAEA,SAASc,gBAAgBjB,GAAA,EAAaC,WAAA,EAAqC;EACzE,MAAMiB,SAAA,GAAYC,OAAA,CAAQ,eAAe,EAAEC,KAAA,CAAMpB,GAAA,EAAK;IACpDN,KAAA,EAAO;IACP2B,UAAA,EAAYpB,WAAA,CAAYoB;EAC1B,CAAC;EACD,OAAO3B,KAAA,CAAM4B,oBAAA,CAAqBJ,SAAA,EAAWlB,GAAA,EAAKC,WAAW;AAC/D;AAEA,SAASc,eAAef,GAAA,EAAaC,WAAA,EAAqC;EACxE,OAAOP,KAAA,CAAMK,aAAA,CAAcC,GAAA,EAAKC,WAAW;AAC7C","ignoreList":[]}
@@ -9,9 +9,24 @@ function transformSync(src, babelConfig, param) {
9
9
  var {
10
10
  hermesParser
11
11
  } = param;
12
- var isTypeScript = isTypeScriptSource(babelConfig.filename) || isTSXSource(babelConfig.filename);
12
+ var _loadedBabelConfig_filename, _loadedBabelConfig_filename1;
13
+ var _loadedBabelConfig_plugins;
14
+ var loadedBabelConfig = babel.loadOptions(babelConfig);
15
+ if (!loadedBabelConfig) return null;
16
+ var hasWorkletsPlugin = false;
17
+ loadedBabelConfig.plugins = (_loadedBabelConfig_plugins = loadedBabelConfig.plugins) === null || _loadedBabelConfig_plugins === void 0 ? void 0 : _loadedBabelConfig_plugins.filter(function (plugin) {
18
+ var workletsPlugin = plugin;
19
+ if (workletsPlugin.key !== "worklets") return true;
20
+ if (workletsPlugin.options && "workletizableModules" in workletsPlugin.options) {
21
+ throw new Error("[vxrn] `workletizableModules` was removed from react-native-worklets. use `importForwarding.moduleNames`.");
22
+ }
23
+ if (hasWorkletsPlugin) return false;
24
+ hasWorkletsPlugin = true;
25
+ return true;
26
+ });
27
+ var isTypeScript = isTypeScriptSource((_loadedBabelConfig_filename = loadedBabelConfig.filename) !== null && _loadedBabelConfig_filename !== void 0 ? _loadedBabelConfig_filename : "") || isTSXSource((_loadedBabelConfig_filename1 = loadedBabelConfig.filename) !== null && _loadedBabelConfig_filename1 !== void 0 ? _loadedBabelConfig_filename1 : "");
13
28
  if (isTypeScript) {
14
- return parseWithBabel(src, babelConfig);
29
+ return parseWithBabel(src, loadedBabelConfig);
15
30
  }
16
31
  if (!isTypeScript && (
17
32
  // The Hermes parser doesn't support comments or babel proposals such as export default from, meaning it has lower compatibility with larger parts
@@ -19,9 +34,9 @@ function transformSync(src, babelConfig, param) {
19
34
  // However, React Native ships with flow syntax that isn't supported in Babel so we need to use Hermes for those files.
20
35
  // We can try to quickly detect if the file uses flow syntax by checking for the @flow pragma which is present in every React Native file.
21
36
  hermesParser || src.includes(" @flow"))) {
22
- return parseWithHermes(src, babelConfig);
37
+ return parseWithHermes(src, loadedBabelConfig);
23
38
  }
24
- return parseWithBabel(src, babelConfig);
39
+ return parseWithBabel(src, loadedBabelConfig);
25
40
  }
26
41
  function parseWithHermes(src, babelConfig) {
27
42
  var sourceAst = require("hermes-parser").parse(src, {
@@ -1 +1 @@
1
- {"version":3,"names":["babel","isTypeScriptSource","fileName","endsWith","isTSXSource","transformSync","src","babelConfig","param","hermesParser","isTypeScript","filename","parseWithBabel","includes","parseWithHermes","sourceAst","require","parse","sourceType","transformFromAstSync"],"sources":["../../../src/transformer/transformSync.ts"],"sourcesContent":[null],"mappings":"AAMA,YAAYA,KAAA,MAAW;AAGvB,SAASC,mBAAmBC,QAAA,EAA2B;EACrD,OAAOA,QAAA,KAAU,QAASA,QAAK,uBAAAA,QAAA,CAAAC,QAAA;AACjC;AAEA,SAASC,YAAYF,QAAA,EAA2B;EAC9C,OAAOA,QAAA,KAAU,QAASA,QAAM,uBAAAA,QAAA,CAAAC,QAAA;AAClC;AAEO,SAASE,cACdC,GAAA,EACAC,WAAA,EACAC,KAAE;EAEF;IAAMC;EAAA,IACJD,KAAA;EAEF,IAAIE,YAAA,GAAcT,kBAAA,CAAAM,WAAA,CAAAI,QAAA,KAAAP,WAAA,CAAAG,WAAA,CAAAI,QAAA;EAChB,IAAAD,YAAO;IACT,OAAAE,cAAA,CAAAN,GAAA,EAAAC,WAAA;EAEA;EACG,KAAAG,YAAA;EAAA;EAAA;EAAA;EAAA;EAODD,YAAO,IAAAH,GAAA,CAAAO,QAAgB,CAAK,YAAW;IACzC,OAAAC,eAAA,CAAAR,GAAA,EAAAC,WAAA;EAEA;EACF,OAAAK,cAAA,CAAAN,GAAA,EAAAC,WAAA;AAEA;AACE,SAAMO,eAAYA,CAAAR,GAAQ,EAAAC,WAAA,EAAe;EAAa,IACpDQ,SAAO,GAAAC,OAAA,kBAAAC,KAAA,CAAAX,GAAA;IACPN,KAAA;IACDkB,UAAA,EAAAX,WAAA,CAAAW;EACD;EACF,OAAAlB,KAAA,CAAAmB,oBAAA,CAAAJ,SAAA,EAAAT,GAAA,EAAAC,WAAA;AAEA;AACE,SAAOK,cAAMA,CAAAN,GAAA,EAAcC,WAAK;EAClC,OAAAP,KAAA,CAAAK,aAAA,CAAAC,GAAA,EAAAC,WAAA","ignoreList":[]}
1
+ {"version":3,"names":["babel","isTypeScriptSource","fileName","endsWith","isTSXSource","transformSync","src","babelConfig","param","hermesParser","_loadedBabelConfig_filename","_loadedBabelConfig_filename1","_loadedBabelConfig_plugins","loadedBabelConfig","loadOptions","hasWorkletsPlugin","plugins","filter","plugin","workletsPlugin","key","options","Error","isTypeScript","filename","parseWithBabel","includes","parseWithHermes","sourceAst","require","parse","sourceType","transformFromAstSync"],"sources":["../../../src/transformer/transformSync.ts"],"sourcesContent":[null],"mappings":"AAMA,YAAYA,KAAA,MAAW;AAGvB,SAASC,mBAAmBC,QAAA,EAA2B;EACrD,OAAOA,QAAA,KAAU,QAASA,QAAK,uBAAAA,QAAA,CAAAC,QAAA;AACjC;AAEA,SAASC,YAAYF,QAAA,EAA2B;EAC9C,OAAOA,QAAA,KAAU,QAASA,QAAM,uBAAAA,QAAA,CAAAC,QAAA;AAClC;AAEO,SAASE,cACdC,GAAA,EACAC,WAAA,EACAC,KAAE;EAEF;IAAMC;EAAA,IAAAD,KAAoB;EAAM,IAC9BE,2BAAA,EAAAC,4BAAA;EACF,IAAAC,0BAAA;EACA,IAAIC,iBAAC,GAAmBb,KAAA,CAAAc,WAAO,CAAAP,WAAA;EAI/B,IAAI,CAAAM,iBAAA,EAAoB;EACxB,IAAAE,iBAAkB,QAAU;EAC1BF,iBAAM,CAAAG,OAAiB,IAAAJ,0BAAA,GAAAC,iBAAA,CAAAG,OAAA,cAAAJ,0BAAA,uBAAAA,0BAAA,CAAAK,MAAA,WAAAC,MAAA;IAIvB,IAAIC,cAAA,GAAeD,MAAQ;IAC3B,IAAIC,cAAA,CAAeC,GAAA,eAAW;IAC5B,IAAAD,cAAU,CAAAE,OAAA,8BAAAF,cAAA,CAAAE,OAAA;MAAA,MACR,IAAAC,KAAA;IAAA;IAEJ,IAAAP,iBAAA;IACAA,iBAAI,OAAmB;IACvB;EACA;EACF,IAACQ,YAAA,GAAAtB,kBAAA,EAAAS,2BAAA,GAAAG,iBAAA,CAAAW,QAAA,cAAAd,2BAAA,cAAAA,2BAAA,UAAAN,WAAA,EAAAO,4BAAA,GAAAE,iBAAA,CAAAW,QAAA,cAAAb,4BAAA,cAAAA,4BAAA;EAED,IAAAY,YAAM;IAIN,OAAIE,cAAc,CAAAnB,GAAA,EAAAO,iBAAA;EAChB;EACF,KAAAU,YAAA;EAAA;EAEA;EACG;EAAA;EAAAd,YAAA,IAAAH,GAAA,CAAAoB,QAAA;IAKA,OAAAC,eAAoB,CAAArB,GAAA,EAASO,iBAC9B;EACA;EACF,OAAAY,cAAA,CAAAnB,GAAA,EAAAO,iBAAA;AAEA;AACF,SAAAc,gBAAArB,GAAA,EAAAC,WAAA;EAEA,IAAAqB,SAAS,GAAAC,OAAgB,gBAAa,EAAqCC,KAAA,CAAAxB,GAAA;IACzEN,KAAM;IACJ+B,UAAO,EAAAxB,WAAA,CAAAwB;EAAA,EACP;EACF,OAAC/B,KAAA,CAAAgC,oBAAA,CAAAJ,SAAA,EAAAtB,GAAA,EAAAC,WAAA;AACD;AACF,SAAAkB,eAAAnB,GAAA,EAAAC,WAAA;EAEA,OAASP,KAAA,CAAAK,aAAe,CAAaC,GAAA,EAAAC,WAAqC;AACxE;AACF,S","ignoreList":[]}
@@ -0,0 +1,37 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { transformSync } from "./transformSync.mjs";
3
+ const workletsPlugin = marker => () => ({
4
+ name: "worklets",
5
+ visitor: {
6
+ Program(_, state) {
7
+ const passes = state.file.metadata.workletsPasses ?? [];
8
+ state.file.metadata.workletsPasses = passes;
9
+ passes.push(marker);
10
+ }
11
+ }
12
+ });
13
+ describe("transformSync", () => {
14
+ it("runs an app-configured Worklets plugin only once when a preset adds another", () => {
15
+ const result = transformSync("export const value = 1", {
16
+ filename: "/project/input.ts",
17
+ babelrc: false,
18
+ configFile: false,
19
+ plugins: [workletsPlugin("app")],
20
+ presets: [() => ({
21
+ plugins: [workletsPlugin("preset")]
22
+ })]
23
+ }, {});
24
+ expect(result?.metadata?.workletsPasses).toEqual(["app"]);
25
+ });
26
+ it("rejects the removed workletizableModules option before transforming", () => {
27
+ expect(() => transformSync("export const value = 1", {
28
+ filename: "/project/input.ts",
29
+ babelrc: false,
30
+ configFile: false,
31
+ plugins: [[workletsPlugin("app"), {
32
+ workletizableModules: ["remend"]
33
+ }]]
34
+ }, {})).toThrow("use `importForwarding.moduleNames`");
35
+ });
36
+ });
37
+ //# sourceMappingURL=transformSync.test.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["describe","expect","it","transformSync","workletsPlugin","marker","name","visitor","Program","_","state","passes","file","metadata","workletsPasses","push","result","filename","babelrc","configFile","plugins","presets","toEqual","workletizableModules","toThrow"],"sources":["../../../src/transformer/transformSync.test.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAA,EAAUC,MAAA,EAAQC,EAAA,QAAU;AACrC,SAASC,aAAA,QAAqB;AAI9B,MAAMC,cAAA,GAAkBC,MAAA,IAAmB,OAAO;EAChDC,IAAA,EAAM;EACNC,OAAA,EAAS;IACPC,QAAQC,CAAA,EAAYC,KAAA,EAAiD;MACnE,MAAMC,MAAA,GAASD,KAAA,CAAME,IAAA,CAAKC,QAAA,CAASC,cAAA,IAAkB,EAAC;MACtDJ,KAAA,CAAME,IAAA,CAAKC,QAAA,CAASC,cAAA,GAAiBH,MAAA;MACrCA,MAAA,CAAOI,IAAA,CAAKV,MAAM;IACpB;EACF;AACF;AAEAL,QAAA,CAAS,iBAAiB,MAAM;EAC9BE,EAAA,CAAG,+EAA+E,MAAM;IACtF,MAAMc,MAAA,GAASb,aAAA,CACb,0BACA;MACEc,QAAA,EAAU;MACVC,OAAA,EAAS;MACTC,UAAA,EAAY;MACZC,OAAA,EAAS,CAAChB,cAAA,CAAe,KAAK,CAAC;MAC/BiB,OAAA,EAAS,CAAC,OAAO;QAAED,OAAA,EAAS,CAAChB,cAAA,CAAe,QAAQ,CAAC;MAAE,EAAE;IAC3D,GACA,CAAC,CACH;IAEAH,MAAA,CAAQe,MAAA,EAAQH,QAAA,EAA2CC,cAAc,EAAEQ,OAAA,CAAQ,CACjF,MACD;EACH,CAAC;EAEDpB,EAAA,CAAG,uEAAuE,MAAM;IAC9ED,MAAA,CAAO,MACLE,aAAA,CACE,0BACA;MACEc,QAAA,EAAU;MACVC,OAAA,EAAS;MACTC,UAAA,EAAY;MACZC,OAAA,EAAS,CAAC,CAAChB,cAAA,CAAe,KAAK,GAAG;QAAEmB,oBAAA,EAAsB,CAAC,QAAQ;MAAE,CAAC,CAAC;IACzE,GACA,CAAC,CACH,CACF,EAAEC,OAAA,CAAQ,oCAAoC;EAChD,CAAC;AACH,CAAC","ignoreList":[]}
@@ -0,0 +1,47 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { transformSync } from "./transformSync.native.js";
3
+ var workletsPlugin = function (marker) {
4
+ return function () {
5
+ return {
6
+ name: "worklets",
7
+ visitor: {
8
+ Program(_, state) {
9
+ var _state_file_metadata_workletsPasses;
10
+ var passes = (_state_file_metadata_workletsPasses = state.file.metadata.workletsPasses) !== null && _state_file_metadata_workletsPasses !== void 0 ? _state_file_metadata_workletsPasses : [];
11
+ state.file.metadata.workletsPasses = passes;
12
+ passes.push(marker);
13
+ }
14
+ }
15
+ };
16
+ };
17
+ };
18
+ describe("transformSync", function () {
19
+ it("runs an app-configured Worklets plugin only once when a preset adds another", function () {
20
+ var _result_metadata;
21
+ var result = transformSync("export const value = 1", {
22
+ filename: "/project/input.ts",
23
+ babelrc: false,
24
+ configFile: false,
25
+ plugins: [workletsPlugin("app")],
26
+ presets: [function () {
27
+ return {
28
+ plugins: [workletsPlugin("preset")]
29
+ };
30
+ }]
31
+ }, {});
32
+ expect(result === null || result === void 0 ? void 0 : (_result_metadata = result.metadata) === null || _result_metadata === void 0 ? void 0 : _result_metadata.workletsPasses).toEqual(["app"]);
33
+ });
34
+ it("rejects the removed workletizableModules option before transforming", function () {
35
+ expect(function () {
36
+ return transformSync("export const value = 1", {
37
+ filename: "/project/input.ts",
38
+ babelrc: false,
39
+ configFile: false,
40
+ plugins: [[workletsPlugin("app"), {
41
+ workletizableModules: ["remend"]
42
+ }]]
43
+ }, {});
44
+ }).toThrow("use `importForwarding.moduleNames`");
45
+ });
46
+ });
47
+ //# sourceMappingURL=transformSync.test.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["describe","expect","it","transformSync","workletsPlugin","marker","name","visitor","Program","_","state","_state_file_metadata_workletsPasses","passes","file","metadata","workletsPasses","push","_result_metadata","result","filename","babelrc","configFile","plugins","presets","toEqual"],"sources":["../../../src/transformer/transformSync.test.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAA,EAAUC,MAAA,EAAQC,EAAA,QAAU;AACrC,SAASC,aAAA,QAAqB;AAI9B,IAAAC,cAAM,YAAAA,CAAkBC,MAAmB;EACzC,OAAM;IACN,OAAS;MACPC,IAAA,EAAQ,UAA6D;MACnEC,OAAM;QACNC,OAAMA,CAAAC,CAAK,EAAAC,KAAA,EAAS;UACpB,IAAOC,mCAAW;UACpB,IAAAC,MAAA,IAAAD,mCAAA,GAAAD,KAAA,CAAAG,IAAA,CAAAC,QAAA,CAAAC,cAAA,cAAAJ,mCAAA,cAAAA,mCAAA;UACFD,KAAA,CAAAG,IAAA,CAAAC,QAAA,CAAAC,cAAA,GAAAH,MAAA;UACFA,MAAA,CAAAI,IAAA,CAAAX,MAAA;QAEA;MACK;IACD;EAAe;AACb;AACAL,QACE,gBAAU;EAAAE,EAAA,8EACD;IAAA,IACTe,gBAAY;IAAA,IACZC,MAAA,GAASf,aAAC,yBAAqB;MAAAgB,QAC/B,qBAAmB;MACrBC,OAAA;MACAC,UAAC;MACHC,OAAA,GAEAlB,cAAgB,OAA2C,CACzD;MACDmB,OAAA,GACF;QAEE;UACDD,OAAA,GACElB,cAAA;QAEE;MAAA;IAEW,MACT;IAAYH,MACZ,CAAAiB,MAAA,KAAW,QAAAA,MAAe,KAAK,KAAK,cAAAD,gBAAuB,GAAUC,MAAE,CAAAJ,QAAA,cAAAG,gBAAA,uBAAAA,gBAAA,CAAAF,cAAA,EAAAS,OAAA,OACzE;EACC;EACHtB,EACF,sEAA8C;IAC/CD,MAAA;MACF,OAAAE,aAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vxrn/vite-plugin-metro",
3
- "version": "1.25.4",
3
+ "version": "1.25.6",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "main": "dist/cjs",
@@ -47,6 +47,7 @@
47
47
  "check": "depcheck",
48
48
  "clean": "tamagui-build clean",
49
49
  "clean:build": "tamagui-build clean:build",
50
+ "test": "vitest run --dir src",
50
51
  "typecheck": "tsc --noEmit"
51
52
  },
52
53
  "peerDependencies": {
@@ -61,8 +62,8 @@
61
62
  "@babel/core": "^7.28.5",
62
63
  "@babel/helper-plugin-utils": "^7.27.1",
63
64
  "@babel/types": "^7.28.5",
64
- "@vxrn/debug": "1.25.4",
65
- "@vxrn/utils": "1.25.4",
65
+ "@vxrn/debug": "1.25.6",
66
+ "@vxrn/utils": "1.25.6",
66
67
  "babel-preset-expo": "~57.0.5",
67
68
  "launch-editor": "^2.10.0",
68
69
  "micromatch": "^4.0.8",
@@ -80,7 +81,8 @@
80
81
  "metro": "^0.84.3",
81
82
  "metro-config": "^0.84.3",
82
83
  "react-native": "0.86.2",
83
- "vite": "^8.2.2"
84
+ "vite": "^8.2.2",
85
+ "vitest": "^4.1.0"
84
86
  },
85
87
  "publishConfig": {
86
88
  "access": "public"
@@ -1,5 +1,6 @@
1
1
  // re-exported because babel/core is hard to mock.
2
2
  export {
3
+ loadOptions,
3
4
  type PluginItem,
4
5
  type TransformOptions,
5
6
  transformFromAstSync,
@@ -0,0 +1,50 @@
1
+ import { describe, expect, it } from 'vitest'
2
+ import { transformSync } from './transformSync'
3
+
4
+ type WorkletsMetadata = { workletsPasses?: string[] }
5
+
6
+ const workletsPlugin = (marker: string) => () => ({
7
+ name: 'worklets',
8
+ visitor: {
9
+ Program(_: unknown, state: { file: { metadata: WorkletsMetadata } }) {
10
+ const passes = state.file.metadata.workletsPasses ?? []
11
+ state.file.metadata.workletsPasses = passes
12
+ passes.push(marker)
13
+ },
14
+ },
15
+ })
16
+
17
+ describe('transformSync', () => {
18
+ it('runs an app-configured Worklets plugin only once when a preset adds another', () => {
19
+ const result = transformSync(
20
+ 'export const value = 1',
21
+ {
22
+ filename: '/project/input.ts',
23
+ babelrc: false,
24
+ configFile: false,
25
+ plugins: [workletsPlugin('app')],
26
+ presets: [() => ({ plugins: [workletsPlugin('preset')] })],
27
+ },
28
+ {}
29
+ )
30
+
31
+ expect((result?.metadata as WorkletsMetadata | undefined)?.workletsPasses).toEqual([
32
+ 'app',
33
+ ])
34
+ })
35
+
36
+ it('rejects the removed workletizableModules option before transforming', () => {
37
+ expect(() =>
38
+ transformSync(
39
+ 'export const value = 1',
40
+ {
41
+ filename: '/project/input.ts',
42
+ babelrc: false,
43
+ configFile: false,
44
+ plugins: [[workletsPlugin('app'), { workletizableModules: ['remend'] }]],
45
+ },
46
+ {}
47
+ )
48
+ ).toThrow('use `importForwarding.moduleNames`')
49
+ })
50
+ })
@@ -20,11 +20,36 @@ export function transformSync(
20
20
  babelConfig: babel.TransformOptions,
21
21
  { hermesParser }: { hermesParser?: boolean }
22
22
  ) {
23
+ const loadedBabelConfig = babel.loadOptions(
24
+ babelConfig
25
+ ) as babel.TransformOptions | null
26
+ if (!loadedBabelConfig) return null
27
+
28
+ // expo adds worklets automatically. keep the app's earlier configured pass so a
29
+ // later preset pass cannot serialize the closure with different options.
30
+ let hasWorkletsPlugin = false
31
+ loadedBabelConfig.plugins = loadedBabelConfig.plugins?.filter((plugin) => {
32
+ const workletsPlugin = plugin as {
33
+ key?: string
34
+ options?: Record<string, unknown>
35
+ }
36
+ if (workletsPlugin.key !== 'worklets') return true
37
+ if (workletsPlugin.options && 'workletizableModules' in workletsPlugin.options) {
38
+ throw new Error(
39
+ '[vxrn] `workletizableModules` was removed from react-native-worklets. use `importForwarding.moduleNames`.'
40
+ )
41
+ }
42
+ if (hasWorkletsPlugin) return false
43
+ hasWorkletsPlugin = true
44
+ return true
45
+ })
46
+
23
47
  const isTypeScript =
24
- isTypeScriptSource(babelConfig.filename!) || isTSXSource(babelConfig.filename!)
48
+ isTypeScriptSource(loadedBabelConfig.filename ?? '') ||
49
+ isTSXSource(loadedBabelConfig.filename ?? '')
25
50
 
26
51
  if (isTypeScript) {
27
- return parseWithBabel(src, babelConfig)
52
+ return parseWithBabel(src, loadedBabelConfig)
28
53
  }
29
54
 
30
55
  if (
@@ -35,10 +60,10 @@ export function transformSync(
35
60
  // We can try to quickly detect if the file uses flow syntax by checking for the @flow pragma which is present in every React Native file.
36
61
  (hermesParser || src.includes(' @flow'))
37
62
  ) {
38
- return parseWithHermes(src, babelConfig)
63
+ return parseWithHermes(src, loadedBabelConfig)
39
64
  }
40
65
 
41
- return parseWithBabel(src, babelConfig)
66
+ return parseWithBabel(src, loadedBabelConfig)
42
67
  }
43
68
 
44
69
  function parseWithHermes(src: string, babelConfig: babel.TransformOptions) {
@@ -1,2 +1,2 @@
1
- export { type PluginItem, type TransformOptions, transformFromAstSync, transformSync, } from '@babel/core';
1
+ export { loadOptions, type PluginItem, type TransformOptions, transformFromAstSync, transformSync, } from '@babel/core';
2
2
  //# sourceMappingURL=babel-core.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"babel-core.d.ts","sourceRoot":"","sources":["../../src/transformer/babel-core.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,oBAAoB,EACpB,aAAa,GACd,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"babel-core.d.ts","sourceRoot":"","sources":["../../src/transformer/babel-core.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,oBAAoB,EACpB,aAAa,GACd,MAAM,aAAa,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"transformSync.d.ts","sourceRoot":"","sources":["../../src/transformer/transformSync.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAWrC,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,KAAK,CAAC,gBAAgB,EACnC,EAAE,YAAY,EAAE,EAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,gDAqB7C"}
1
+ {"version":3,"file":"transformSync.d.ts","sourceRoot":"","sources":["../../src/transformer/transformSync.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAWrC,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,KAAK,CAAC,gBAAgB,EACnC,EAAE,YAAY,EAAE,EAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,gDA8C7C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transformSync.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformSync.test.d.ts","sourceRoot":"","sources":["../../src/transformer/transformSync.test.ts"],"names":[],"mappings":""}