@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.
- package/dist/cjs/transformer/babel-core.cjs +1 -0
- package/dist/cjs/transformer/babel-core.native.js +1 -0
- package/dist/cjs/transformer/babel-core.native.js.map +1 -1
- package/dist/cjs/transformer/transformSync.cjs +17 -4
- package/dist/cjs/transformer/transformSync.native.js +19 -4
- package/dist/cjs/transformer/transformSync.native.js.map +1 -1
- package/dist/cjs/transformer/transformSync.test.cjs +36 -0
- package/dist/cjs/transformer/transformSync.test.native.js +49 -0
- package/dist/cjs/transformer/transformSync.test.native.js.map +1 -0
- package/dist/esm/transformer/babel-core.mjs +2 -2
- package/dist/esm/transformer/babel-core.mjs.map +1 -1
- package/dist/esm/transformer/babel-core.native.js +2 -2
- package/dist/esm/transformer/babel-core.native.js.map +1 -1
- package/dist/esm/transformer/transformSync.mjs +17 -4
- package/dist/esm/transformer/transformSync.mjs.map +1 -1
- package/dist/esm/transformer/transformSync.native.js +19 -4
- package/dist/esm/transformer/transformSync.native.js.map +1 -1
- package/dist/esm/transformer/transformSync.test.mjs +37 -0
- package/dist/esm/transformer/transformSync.test.mjs.map +1 -0
- package/dist/esm/transformer/transformSync.test.native.js +47 -0
- package/dist/esm/transformer/transformSync.test.native.js.map +1 -0
- package/package.json +6 -4
- package/src/transformer/babel-core.ts +1 -0
- package/src/transformer/transformSync.test.ts +50 -0
- package/src/transformer/transformSync.ts +29 -4
- package/types/transformer/babel-core.d.ts +1 -1
- package/types/transformer/babel-core.d.ts.map +1 -1
- package/types/transformer/transformSync.d.ts.map +1 -1
- package/types/transformer/transformSync.test.d.ts +2 -0
- 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","
|
|
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
|
|
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,
|
|
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,
|
|
72
|
+
return parseWithHermes(src, loadedBabelConfig);
|
|
60
73
|
}
|
|
61
|
-
return parseWithBabel(src,
|
|
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
|
|
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,
|
|
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,
|
|
77
|
+
return parseWithHermes(src, loadedBabelConfig);
|
|
63
78
|
}
|
|
64
|
-
return parseWithBabel(src,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
34
|
+
return parseWithHermes(src, loadedBabelConfig);
|
|
22
35
|
}
|
|
23
|
-
return parseWithBabel(src,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
37
|
+
return parseWithHermes(src, loadedBabelConfig);
|
|
23
38
|
}
|
|
24
|
-
return parseWithBabel(src,
|
|
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,
|
|
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.
|
|
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.
|
|
65
|
-
"@vxrn/utils": "1.25.
|
|
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"
|
|
@@ -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(
|
|
48
|
+
isTypeScriptSource(loadedBabelConfig.filename ?? '') ||
|
|
49
|
+
isTSXSource(loadedBabelConfig.filename ?? '')
|
|
25
50
|
|
|
26
51
|
if (isTypeScript) {
|
|
27
|
-
return parseWithBabel(src,
|
|
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,
|
|
63
|
+
return parseWithHermes(src, loadedBabelConfig)
|
|
39
64
|
}
|
|
40
65
|
|
|
41
|
-
return parseWithBabel(src,
|
|
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,
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"transformSync.test.d.ts","sourceRoot":"","sources":["../../src/transformer/transformSync.test.ts"],"names":[],"mappings":""}
|