@tamagui/vite-plugin 1.52.4 → 1.52.5

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/index.js CHANGED
@@ -17,13 +17,13 @@ var src_exports = {};
17
17
  module.exports = __toCommonJS(src_exports);
18
18
  __reExport(src_exports, require("./plugin"), module.exports);
19
19
  __reExport(src_exports, require("./extract"), module.exports);
20
- __reExport(src_exports, require("./native"), module.exports);
20
+ __reExport(src_exports, require("./nativePlugin"), module.exports);
21
21
  __reExport(src_exports, require("./nativePrebuild"), module.exports);
22
22
  // Annotate the CommonJS export names for ESM import in node:
23
23
  0 && (module.exports = {
24
24
  ...require("./plugin"),
25
25
  ...require("./extract"),
26
- ...require("./native"),
26
+ ...require("./nativePlugin"),
27
27
  ...require("./nativePrebuild")
28
28
  });
29
29
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wBAAc,qBAAd;AACA,wBAAc,sBADd;AAEA,wBAAc,qBAFd;AAGA,wBAAc,6BAHd;",
4
+ "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wBAAc,qBAAd;AACA,wBAAc,sBADd;AAEA,wBAAc,2BAFd;AAGA,wBAAc,6BAHd;",
5
5
  "names": []
6
6
  }
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,19 +17,172 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
  var nativePrebuild_exports = {};
20
30
  __export(nativePrebuild_exports, {
31
+ nativeBabelFlowTransform: () => nativeBabelFlowTransform,
32
+ nativeBabelTransform: () => nativeBabelTransform,
21
33
  nativePrebuild: () => nativePrebuild
22
34
  });
23
35
  module.exports = __toCommonJS(nativePrebuild_exports);
36
+ var import_promises = require("fs/promises");
37
+ var import_path = require("path");
38
+ var babel = __toESM(require("@babel/core"));
39
+ var import_esbuild = require("esbuild");
40
+ var import_extensions = require("./extensions");
41
+ async function nativeBabelTransform(input) {
42
+ return await new Promise((res, rej) => {
43
+ babel.transform(
44
+ input,
45
+ {
46
+ plugins: ["@babel/plugin-transform-modules-commonjs"]
47
+ },
48
+ (err, { code }) => {
49
+ if (err) {
50
+ console.error("error", err);
51
+ }
52
+ if (err)
53
+ rej(err);
54
+ res(code);
55
+ }
56
+ );
57
+ });
58
+ }
59
+ async function nativeBabelFlowTransform(input) {
60
+ return await new Promise((res, rej) => {
61
+ babel.transform(
62
+ input,
63
+ {
64
+ presets: ["module:metro-react-native-babel-preset"]
65
+ },
66
+ (err, { code }) => {
67
+ if (err)
68
+ rej(err);
69
+ res(code);
70
+ }
71
+ );
72
+ });
73
+ }
24
74
  async function nativePrebuild() {
75
+ if (process.env.SKIP_PREBUILD_RN) {
76
+ console.log(`\u26A0\uFE0F skipping pre build of rn`);
77
+ return;
78
+ }
25
79
  console.log(`Prebuilding React Native (one time cost...)`);
26
- console.log("disabled as its working and committed");
27
- return null;
80
+ const outdir = (0, import_path.join)(process.cwd(), "testing-area");
81
+ await Promise.all([
82
+ // react
83
+ (0, import_esbuild.build)({
84
+ bundle: true,
85
+ entryPoints: ["react"],
86
+ outfile: (0, import_path.join)(outdir, "react.js"),
87
+ format: "cjs",
88
+ target: "node20",
89
+ jsx: "transform",
90
+ jsxFactory: "react",
91
+ allowOverwrite: true,
92
+ platform: "node",
93
+ define: {
94
+ __DEV__: "true",
95
+ "process.env.NODE_ENV": `"development"`
96
+ },
97
+ logLevel: "warning",
98
+ resolveExtensions: import_extensions.extensions
99
+ }),
100
+ // react-jsx-runtime
101
+ (0, import_esbuild.build)({
102
+ bundle: true,
103
+ entryPoints: ["react/jsx-runtime"],
104
+ outfile: (0, import_path.join)(outdir, "react-jsx-runtime.js"),
105
+ format: "cjs",
106
+ target: "node20",
107
+ jsx: "transform",
108
+ jsxFactory: "react",
109
+ external: ["react"],
110
+ allowOverwrite: true,
111
+ platform: "node",
112
+ define: {
113
+ // metro serves this in production mode
114
+ __DEV__: "false",
115
+ "process.env.NODE_ENV": `"production"`
116
+ },
117
+ logLevel: "warning",
118
+ resolveExtensions: import_extensions.extensions
119
+ }),
120
+ // react native
121
+ (0, import_esbuild.build)({
122
+ bundle: true,
123
+ entryPoints: ["/Users/n8/tamagui/node_modules/react-native/index.js"],
124
+ outfile: (0, import_path.join)(outdir, "react-native.js"),
125
+ format: "cjs",
126
+ target: "node20",
127
+ jsx: "transform",
128
+ jsxFactory: "react",
129
+ allowOverwrite: true,
130
+ platform: "node",
131
+ loader: {
132
+ ".png": "dataurl",
133
+ ".jpg": "dataurl",
134
+ ".jpeg": "dataurl",
135
+ ".gif": "dataurl"
136
+ },
137
+ define: {
138
+ __DEV__: "true",
139
+ "process.env.NODE_ENV": `"development"`,
140
+ // TODO
141
+ "process.env.REACT_NATIVE_SERVER_PUBLIC_PORT": JSON.stringify("8081")
142
+ },
143
+ logLevel: "warning",
144
+ resolveExtensions: import_extensions.extensions,
145
+ external: ["react", "react/jsx-runtime.js", "react/jsx-runtime"],
146
+ plugins: [
147
+ {
148
+ name: "remove-flow",
149
+ setup(build2) {
150
+ build2.onResolve(
151
+ {
152
+ filter: /HMRClient/
153
+ },
154
+ async (input) => {
155
+ return {
156
+ path: require.resolve("@tamagui/vite-native-hmr")
157
+ };
158
+ }
159
+ );
160
+ build2.onLoad(
161
+ {
162
+ filter: /.*.js/
163
+ },
164
+ async (input) => {
165
+ if (!input.path.includes("react-native") && !input.path.includes(`vite-native-hmr`)) {
166
+ return;
167
+ }
168
+ const code = await (0, import_promises.readFile)(input.path, "utf-8");
169
+ const outagain = await nativeBabelFlowTransform(code);
170
+ return {
171
+ contents: outagain,
172
+ loader: "jsx"
173
+ };
174
+ }
175
+ );
176
+ }
177
+ }
178
+ ]
179
+ })
180
+ ]);
28
181
  }
29
182
  // Annotate the CommonJS export names for ESM import in node:
30
183
  0 && (module.exports = {
184
+ nativeBabelFlowTransform,
185
+ nativeBabelTransform,
31
186
  nativePrebuild
32
187
  });
33
188
  //# sourceMappingURL=nativePrebuild.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/nativePrebuild.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,eAAsB,iBAAiB;AAErC,UAAQ,IAAI,6CAA6C;AAGzD,UAAQ,IAAI,uCAAuC;AACnD,SAAO;AAmGT;",
5
- "names": []
4
+ "mappings": "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",
5
+ "names": ["build"]
6
6
  }
package/dist/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export * from "./plugin";
2
2
  export * from "./extract";
3
- export * from "./native";
3
+ export * from "./nativePlugin";
4
4
  export * from "./nativePrebuild";
5
5
  //# sourceMappingURL=index.js.map
@@ -1,9 +1,152 @@
1
+ import { readFile } from "fs/promises";
2
+ import { join } from "path";
3
+ import * as babel from "@babel/core";
4
+ import { build } from "esbuild";
5
+ import { extensions } from "./extensions";
6
+ async function nativeBabelTransform(input) {
7
+ return await new Promise((res, rej) => {
8
+ babel.transform(
9
+ input,
10
+ {
11
+ plugins: ["@babel/plugin-transform-modules-commonjs"]
12
+ },
13
+ (err, { code }) => {
14
+ if (err) {
15
+ console.error("error", err);
16
+ }
17
+ if (err)
18
+ rej(err);
19
+ res(code);
20
+ }
21
+ );
22
+ });
23
+ }
24
+ async function nativeBabelFlowTransform(input) {
25
+ return await new Promise((res, rej) => {
26
+ babel.transform(
27
+ input,
28
+ {
29
+ presets: ["module:metro-react-native-babel-preset"]
30
+ },
31
+ (err, { code }) => {
32
+ if (err)
33
+ rej(err);
34
+ res(code);
35
+ }
36
+ );
37
+ });
38
+ }
1
39
  async function nativePrebuild() {
40
+ if (process.env.SKIP_PREBUILD_RN) {
41
+ console.log(`\u26A0\uFE0F skipping pre build of rn`);
42
+ return;
43
+ }
2
44
  console.log(`Prebuilding React Native (one time cost...)`);
3
- console.log("disabled as its working and committed");
4
- return null;
45
+ const outdir = join(process.cwd(), "testing-area");
46
+ await Promise.all([
47
+ // react
48
+ build({
49
+ bundle: true,
50
+ entryPoints: ["react"],
51
+ outfile: join(outdir, "react.js"),
52
+ format: "cjs",
53
+ target: "node20",
54
+ jsx: "transform",
55
+ jsxFactory: "react",
56
+ allowOverwrite: true,
57
+ platform: "node",
58
+ define: {
59
+ __DEV__: "true",
60
+ "process.env.NODE_ENV": `"development"`
61
+ },
62
+ logLevel: "warning",
63
+ resolveExtensions: extensions
64
+ }),
65
+ // react-jsx-runtime
66
+ build({
67
+ bundle: true,
68
+ entryPoints: ["react/jsx-runtime"],
69
+ outfile: join(outdir, "react-jsx-runtime.js"),
70
+ format: "cjs",
71
+ target: "node20",
72
+ jsx: "transform",
73
+ jsxFactory: "react",
74
+ external: ["react"],
75
+ allowOverwrite: true,
76
+ platform: "node",
77
+ define: {
78
+ // metro serves this in production mode
79
+ __DEV__: "false",
80
+ "process.env.NODE_ENV": `"production"`
81
+ },
82
+ logLevel: "warning",
83
+ resolveExtensions: extensions
84
+ }),
85
+ // react native
86
+ build({
87
+ bundle: true,
88
+ entryPoints: ["/Users/n8/tamagui/node_modules/react-native/index.js"],
89
+ outfile: join(outdir, "react-native.js"),
90
+ format: "cjs",
91
+ target: "node20",
92
+ jsx: "transform",
93
+ jsxFactory: "react",
94
+ allowOverwrite: true,
95
+ platform: "node",
96
+ loader: {
97
+ ".png": "dataurl",
98
+ ".jpg": "dataurl",
99
+ ".jpeg": "dataurl",
100
+ ".gif": "dataurl"
101
+ },
102
+ define: {
103
+ __DEV__: "true",
104
+ "process.env.NODE_ENV": `"development"`,
105
+ // TODO
106
+ "process.env.REACT_NATIVE_SERVER_PUBLIC_PORT": JSON.stringify("8081")
107
+ },
108
+ logLevel: "warning",
109
+ resolveExtensions: extensions,
110
+ external: ["react", "react/jsx-runtime.js", "react/jsx-runtime"],
111
+ plugins: [
112
+ {
113
+ name: "remove-flow",
114
+ setup(build2) {
115
+ build2.onResolve(
116
+ {
117
+ filter: /HMRClient/
118
+ },
119
+ async (input) => {
120
+ return {
121
+ path: require.resolve("@tamagui/vite-native-hmr")
122
+ };
123
+ }
124
+ );
125
+ build2.onLoad(
126
+ {
127
+ filter: /.*.js/
128
+ },
129
+ async (input) => {
130
+ if (!input.path.includes("react-native") && !input.path.includes(`vite-native-hmr`)) {
131
+ return;
132
+ }
133
+ const code = await readFile(input.path, "utf-8");
134
+ const outagain = await nativeBabelFlowTransform(code);
135
+ return {
136
+ contents: outagain,
137
+ loader: "jsx"
138
+ };
139
+ }
140
+ );
141
+ }
142
+ }
143
+ ]
144
+ })
145
+ ]);
5
146
  }
6
147
  export {
148
+ nativeBabelFlowTransform,
149
+ nativeBabelTransform,
7
150
  nativePrebuild
8
151
  };
9
152
  //# sourceMappingURL=nativePrebuild.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/nativePrebuild.ts"],
4
- "mappings": "AAQA,eAAsB,iBAAiB;AAErC,UAAQ,IAAI,6CAA6C;AAGzD,UAAQ,IAAI,uCAAuC;AACnD,SAAO;AAmGT;",
5
- "names": []
4
+ "mappings": "AAAA,SAAS,gBAAgB;AACzB,SAAS,YAAY;AAErB,YAAY,WAAW;AACvB,SAAS,aAAa;AAEtB,SAAS,kBAAkB;AAE3B,eAAsB,qBAAqB,OAAe;AACxD,SAAO,MAAM,IAAI,QAAgB,CAAC,KAAK,QAAQ;AAC7C,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,QACE,SAAS,CAAC,0CAA0C;AAAA,MACtD;AAAA,MACA,CAAC,KAAU,EAAE,KAAK,MAAM;AACtB,YAAI,KAAK;AACP,kBAAQ,MAAM,SAAS,GAAG;AAAA,QAC5B;AAEA,YAAI;AAAK,cAAI,GAAG;AAChB,YAAI,IAAI;AAAA,MACV;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,yBAAyB,OAAe;AAC5D,SAAO,MAAM,IAAI,QAAgB,CAAC,KAAK,QAAQ;AAC7C,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,QACE,SAAS,CAAC,wCAAwC;AAAA,MACpD;AAAA,MACA,CAAC,KAAU,EAAE,KAAK,MAAM;AACtB,YAAI;AAAK,cAAI,GAAG;AAChB,YAAI,IAAI;AAAA,MACV;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,iBAAiB;AAGrC,MAAI,QAAQ,IAAI,kBAAkB;AAChC,YAAQ,IAAI,uCAA6B;AAEzC;AAAA,EACF;AAEA,UAAQ,IAAI,6CAA6C;AAEzD,QAAM,SAAS,KAAK,QAAQ,IAAI,GAAG,cAAc;AAEjD,QAAM,QAAQ,IAAI;AAAA;AAAA,IAEhB,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,aAAa,CAAC,OAAO;AAAA,MACrB,SAAS,KAAK,QAAQ,UAAU;AAAA,MAChC,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,SAAS;AAAA,QACT,wBAAwB;AAAA,MAC1B;AAAA,MACA,UAAU;AAAA,MACV,mBAAmB;AAAA,IACrB,CAAC;AAAA;AAAA,IAED,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,aAAa,CAAC,mBAAmB;AAAA,MACjC,SAAS,KAAK,QAAQ,sBAAsB;AAAA,MAC5C,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,YAAY;AAAA,MACZ,UAAU,CAAC,OAAO;AAAA,MAClB,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,QAAQ;AAAA;AAAA,QAEN,SAAS;AAAA,QACT,wBAAwB;AAAA,MAC1B;AAAA,MACA,UAAU;AAAA,MACV,mBAAmB;AAAA,IACrB,CAAC;AAAA;AAAA,IAED,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,aAAa,CAAC,sDAAsD;AAAA,MACpE,SAAS,KAAK,QAAQ,iBAAiB;AAAA,MACvC,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,QAAQ;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,QACN,SAAS;AAAA,QACT,wBAAwB;AAAA;AAAA,QAExB,+CAA+C,KAAK,UAAU,MAAM;AAAA,MACtE;AAAA,MACA,UAAU;AAAA,MACV,mBAAmB;AAAA,MACnB,UAAU,CAAC,SAAS,wBAAwB,mBAAmB;AAAA,MAC/D,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAMA,QAAO;AACX,YAAAA,OAAM;AAAA,cACJ;AAAA,gBACE,QAAQ;AAAA,cACV;AAAA,cACA,OAAO,UAAU;AACf,uBAAO;AAAA,kBACL,MAAM,gBAAgB,0BAA0B;AAAA,gBAClD;AAAA,cACF;AAAA,YACF;AAEA,YAAAA,OAAM;AAAA,cACJ;AAAA,gBACE,QAAQ;AAAA,cACV;AAAA,cACA,OAAO,UAAU;AACf,oBACE,CAAC,MAAM,KAAK,SAAS,cAAc,KACnC,CAAC,MAAM,KAAK,SAAS,iBAAiB,GACtC;AACA;AAAA,gBACF;AAEA,sBAAM,OAAO,MAAM,SAAS,MAAM,MAAM,OAAO;AAG/C,sBAAM,WAAW,MAAM,yBAAyB,IAAI;AAEpD,uBAAO;AAAA,kBACL,UAAU;AAAA,kBACV,QAAQ;AAAA,gBACV;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;",
5
+ "names": ["build"]
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/vite-plugin",
3
- "version": "1.52.4",
3
+ "version": "1.52.5",
4
4
  "types": "./types/index.d.ts",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -29,10 +29,10 @@
29
29
  "@rollup/plugin-babel": "^6.0.3",
30
30
  "@rollup/plugin-commonjs": "^24.0.1",
31
31
  "@rollup/plugin-node-resolve": "^15.0.1",
32
- "@tamagui/fake-react-native": "1.52.4",
33
- "@tamagui/proxy-worm": "1.52.4",
34
- "@tamagui/react-native-svg": "1.52.4",
35
- "@tamagui/static": "1.52.4",
32
+ "@tamagui/fake-react-native": "1.52.5",
33
+ "@tamagui/proxy-worm": "1.52.5",
34
+ "@tamagui/react-native-svg": "1.52.5",
35
+ "@tamagui/static": "1.52.5",
36
36
  "esbuild": "^0.19.0",
37
37
  "fs-extra": "^11.1.0",
38
38
  "lodash": "^4.17.21",
@@ -41,7 +41,7 @@
41
41
  "rollup": ">=3.7.0"
42
42
  },
43
43
  "devDependencies": {
44
- "@tamagui/build": "1.52.4"
44
+ "@tamagui/build": "1.52.5"
45
45
  },
46
46
  "publishConfig": {
47
47
  "access": "public"
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export * from './plugin'
2
2
  export * from './extract'
3
- export * from './native'
3
+ export * from './nativePlugin'
4
4
  export * from './nativePrebuild'
@@ -1,18 +1,29 @@
1
- import { readFile } from 'fs/promises'
2
- import { join } from 'path'
3
-
4
1
  import { esbuildFlowPlugin } from '@bunchtogether/vite-plugin-flow'
5
2
  import { OutputOptions } from 'rollup'
6
3
  import type { Plugin } from 'vite'
7
4
 
8
5
  import { extensions } from './extensions'
9
6
 
10
- export function nativePlugin(): Plugin {
7
+ export function nativePlugin(options: { port: number }): Plugin {
11
8
  return {
12
9
  name: 'tamagui-native',
13
10
  enforce: 'post',
14
11
 
15
12
  config: (config) => {
13
+ // // add hmr client
14
+ // config.plugins.push({
15
+ // name: 'add-hmr-client',
16
+ // generateBundle(x) {
17
+ // x.
18
+ // }
19
+ // })
20
+
21
+ config.define ||= {}
22
+ config.define['process.env.REACT_NATIVE_SERVER_PUBLIC_PORT'] = JSON.stringify(
23
+ `${options.port}`
24
+ )
25
+ config.define['process.env.REACT_NATIVE_PLATFORM'] = JSON.stringify(`ios`)
26
+
16
27
  if (!config.build) config.build = {}
17
28
 
18
29
  config.build.modulePreload = { polyfill: false }
@@ -31,19 +42,23 @@ export function nativePlugin(): Plugin {
31
42
 
32
43
  config.resolve.extensions = extensions
33
44
 
34
- config.resolve.alias ??= {}
35
- config.resolve.alias = {
36
- ...config.resolve.alias,
37
- // 'react-native/Libraries/Renderer/shims/ReactFabric':
38
- // 'react-native/Libraries/Renderer/shims/ReactFabric',
39
- // 'react-native/Libraries/Utilities/codegenNativeComponent':
40
- // 'react-native/Libraries/Utilities/codegenNativeComponent',
41
- // 'react-native-svg': 'react-native-svg',
42
- // // 'react-native-web': 'react-native',
43
- // 'react-native': 'react-native',
44
- }
45
+ // config.resolve.alias ??= {}
46
+ // config.resolve.alias = {
47
+ // ...config.resolve.alias,
48
+ // // 'react-native/Libraries/Renderer/shims/ReactFabric':
49
+ // // 'react-native/Libraries/Renderer/shims/ReactFabric',
50
+ // // 'react-native/Libraries/Utilities/codegenNativeComponent':
51
+ // // 'react-native/Libraries/Utilities/codegenNativeComponent',
52
+ // // 'react-native-svg': 'react-native-svg',
53
+ // // // 'react-native-web': 'react-native',
54
+ // // 'react-native': 'react-native',
55
+ // }
45
56
 
46
57
  config.optimizeDeps ??= {}
58
+
59
+ config.optimizeDeps.needsInterop ??= []
60
+ config.optimizeDeps.needsInterop.push('react-native')
61
+
47
62
  config.optimizeDeps.esbuildOptions ??= {}
48
63
  config.optimizeDeps.esbuildOptions.resolveExtensions = extensions
49
64
 
@@ -109,38 +124,6 @@ export function nativePlugin(): Plugin {
109
124
  include: /node_modules\/react\//,
110
125
  }
111
126
 
112
- config.build.rollupOptions.plugins.push({
113
- name: `swap-react-native`,
114
- async load(id) {
115
- if (id.endsWith('react-native/index.js')) {
116
- const bundled = await readFile(
117
- join(process.cwd(), 'react-native.js'),
118
- 'utf-8'
119
- )
120
- const code = bundled
121
- return {
122
- code: `
123
- const run = () => {
124
- ${bundled.replace(
125
- `module.exports = require_react_native();`,
126
- `return require_react_native();`
127
- )}
128
- }
129
-
130
- const RN = run()
131
-
132
- ${RNExportNames.map(
133
- (name) =>
134
- // adding exports
135
- `export const ${name} = RN.${name}`
136
- ).join('\n')}
137
-
138
- `,
139
- }
140
- }
141
- },
142
- })
143
-
144
127
  const updateOutputOptions = (out: OutputOptions) => {
145
128
  // Ensure that as many resources as possible are inlined.
146
129
  out.inlineDynamicImports = true
@@ -6,109 +6,159 @@ import { build } from 'esbuild'
6
6
 
7
7
  import { extensions } from './extensions'
8
8
 
9
+ export async function nativeBabelTransform(input: string) {
10
+ return await new Promise<string>((res, rej) => {
11
+ babel.transform(
12
+ input,
13
+ {
14
+ plugins: ['@babel/plugin-transform-modules-commonjs'],
15
+ },
16
+ (err: any, { code }) => {
17
+ if (err) {
18
+ console.error('error', err)
19
+ }
20
+
21
+ if (err) rej(err)
22
+ res(code)
23
+ }
24
+ )
25
+ })
26
+ }
27
+
28
+ export async function nativeBabelFlowTransform(input: string) {
29
+ return await new Promise<string>((res, rej) => {
30
+ babel.transform(
31
+ input,
32
+ {
33
+ presets: ['module:metro-react-native-babel-preset'],
34
+ },
35
+ (err: any, { code }) => {
36
+ if (err) rej(err)
37
+ res(code)
38
+ }
39
+ )
40
+ })
41
+ }
42
+
9
43
  export async function nativePrebuild() {
10
44
  // rome-ignore lint/nursery/noConsoleLog: <explanation>
45
+
46
+ if (process.env.SKIP_PREBUILD_RN) {
47
+ console.log(`⚠️ skipping pre build of rn`)
48
+
49
+ return
50
+ }
51
+
11
52
  console.log(`Prebuilding React Native (one time cost...)`)
12
53
 
13
- // rome-ignore lint/nursery/noConsoleLog: <explanation>
14
- console.log('disabled as its working and committed')
15
- return null
54
+ const outdir = join(process.cwd(), 'testing-area')
16
55
 
17
- // const outdir = join(process.cwd(), 'testing-area')
56
+ await Promise.all([
57
+ // react
58
+ build({
59
+ bundle: true,
60
+ entryPoints: ['react'],
61
+ outfile: join(outdir, 'react.js'),
62
+ format: 'cjs',
63
+ target: 'node20',
64
+ jsx: 'transform',
65
+ jsxFactory: 'react',
66
+ allowOverwrite: true,
67
+ platform: 'node',
68
+ define: {
69
+ __DEV__: 'true',
70
+ 'process.env.NODE_ENV': `"development"`,
71
+ },
72
+ logLevel: 'warning',
73
+ resolveExtensions: extensions,
74
+ }),
75
+ // react-jsx-runtime
76
+ build({
77
+ bundle: true,
78
+ entryPoints: ['react/jsx-runtime'],
79
+ outfile: join(outdir, 'react-jsx-runtime.js'),
80
+ format: 'cjs',
81
+ target: 'node20',
82
+ jsx: 'transform',
83
+ jsxFactory: 'react',
84
+ external: ['react'],
85
+ allowOverwrite: true,
86
+ platform: 'node',
87
+ define: {
88
+ // metro serves this in production mode
89
+ __DEV__: 'false',
90
+ 'process.env.NODE_ENV': `"production"`,
91
+ },
92
+ logLevel: 'warning',
93
+ resolveExtensions: extensions,
94
+ }),
95
+ // react native
96
+ build({
97
+ bundle: true,
98
+ entryPoints: ['/Users/n8/tamagui/node_modules/react-native/index.js'],
99
+ outfile: join(outdir, 'react-native.js'),
100
+ format: 'cjs',
101
+ target: 'node20',
102
+ jsx: 'transform',
103
+ jsxFactory: 'react',
104
+ allowOverwrite: true,
105
+ platform: 'node',
106
+ loader: {
107
+ '.png': 'dataurl',
108
+ '.jpg': 'dataurl',
109
+ '.jpeg': 'dataurl',
110
+ '.gif': 'dataurl',
111
+ },
112
+ define: {
113
+ __DEV__: 'true',
114
+ 'process.env.NODE_ENV': `"development"`,
115
+ // TODO
116
+ 'process.env.REACT_NATIVE_SERVER_PUBLIC_PORT': JSON.stringify('8081'),
117
+ },
118
+ logLevel: 'warning',
119
+ resolveExtensions: extensions,
120
+ external: ['react', 'react/jsx-runtime.js', 'react/jsx-runtime'],
121
+ plugins: [
122
+ {
123
+ name: 'remove-flow',
124
+ setup(build) {
125
+ build.onResolve(
126
+ {
127
+ filter: /HMRClient/,
128
+ },
129
+ async (input) => {
130
+ return {
131
+ path: require.resolve('@tamagui/vite-native-hmr'),
132
+ }
133
+ }
134
+ )
18
135
 
19
- // await Promise.all([
20
- // // react
21
- // build({
22
- // bundle: true,
23
- // entryPoints: ['react'],
24
- // outfile: join(outdir, 'react.js'),
25
- // format: 'cjs',
26
- // target: 'node20',
27
- // jsx: 'transform',
28
- // jsxFactory: 'react',
29
- // allowOverwrite: true,
30
- // platform: 'node',
31
- // define: {
32
- // __DEV__: 'true',
33
- // 'process.env.NODE_ENV': `"development"`,
34
- // },
35
- // logLevel: 'warning',
36
- // resolveExtensions: extensions,
37
- // }),
38
- // // react-jsx-runtime
39
- // build({
40
- // bundle: true,
41
- // entryPoints: ['react/jsx-runtime'],
42
- // outfile: join(outdir, 'react-jsx-runtime.js'),
43
- // format: 'cjs',
44
- // target: 'node20',
45
- // jsx: 'transform',
46
- // jsxFactory: 'react',
47
- // external: ['react'],
48
- // allowOverwrite: true,
49
- // platform: 'node',
50
- // define: {
51
- // // metro serves this in production mode
52
- // __DEV__: 'false',
53
- // 'process.env.NODE_ENV': `"production"`,
54
- // },
55
- // logLevel: 'warning',
56
- // resolveExtensions: extensions,
57
- // }),
58
- // // react native
59
- // build({
60
- // bundle: true,
61
- // entryPoints: ['/Users/n8/tamagui/node_modules/react-native/index.js'],
62
- // outfile: join(outdir, 'react-native.js'),
63
- // format: 'cjs',
64
- // target: 'node20',
65
- // jsx: 'transform',
66
- // jsxFactory: 'react',
67
- // allowOverwrite: true,
68
- // platform: 'node',
69
- // loader: {
70
- // '.png': 'dataurl',
71
- // '.jpg': 'dataurl',
72
- // '.jpeg': 'dataurl',
73
- // '.gif': 'dataurl',
74
- // },
75
- // define: {
76
- // __DEV__: 'true',
77
- // 'process.env.NODE_ENV': `"development"`,
78
- // },
79
- // logLevel: 'warning',
80
- // resolveExtensions: extensions,
81
- // external: ['react', 'react/jsx-runtime.js', 'react/jsx-runtime'],
82
- // plugins: [
83
- // {
84
- // name: 'remove-flow',
85
- // setup(build) {
86
- // build.onLoad(
87
- // {
88
- // filter: /.*.js/,
89
- // },
90
- // async (input) => {
91
- // if (!input.path.includes('react-native')) {
92
- // return
93
- // }
136
+ build.onLoad(
137
+ {
138
+ filter: /.*.js/,
139
+ },
140
+ async (input) => {
141
+ if (
142
+ !input.path.includes('react-native') &&
143
+ !input.path.includes(`vite-native-hmr`)
144
+ ) {
145
+ return
146
+ }
94
147
 
95
- // const code = await readFile(input.path, 'utf-8')
148
+ const code = await readFile(input.path, 'utf-8')
96
149
 
97
- // // omg so ugly but no class support?
98
- // const outagain = babel.transformSync(code, {
99
- // presets: ['module:metro-react-native-babel-preset'],
100
- // })
150
+ // omg so ugly but no class support?
151
+ const outagain = await nativeBabelFlowTransform(code)
101
152
 
102
- // // const contents = output.toString().replace(/static\s+\+/g, 'static ')
103
- // return {
104
- // contents: outagain.code,
105
- // loader: 'jsx',
106
- // }
107
- // }
108
- // )
109
- // },
110
- // },
111
- // ],
112
- // }),
113
- // ])
153
+ return {
154
+ contents: outagain,
155
+ loader: 'jsx',
156
+ }
157
+ }
158
+ )
159
+ },
160
+ },
161
+ ],
162
+ }),
163
+ ])
114
164
  }
package/types/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export * from './plugin';
2
2
  export * from './extract';
3
- export * from './native';
3
+ export * from './nativePlugin';
4
4
  export * from './nativePrebuild';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { Plugin } from 'vite';
2
+ export declare function nativePlugin(options: {
3
+ port: number;
4
+ }): Plugin;
5
+ //# sourceMappingURL=nativePlugin.d.ts.map
@@ -1,2 +1,4 @@
1
- export declare function nativePrebuild(): Promise<null>;
1
+ export declare function nativeBabelTransform(input: string): Promise<string>;
2
+ export declare function nativeBabelFlowTransform(input: string): Promise<string>;
3
+ export declare function nativePrebuild(): Promise<void>;
2
4
  //# sourceMappingURL=nativePrebuild.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nativePrebuild.d.ts","sourceRoot":"","sources":["../src/nativePrebuild.ts"],"names":[],"mappings":"AAQA,wBAAsB,cAAc,kBAyGnC"}
1
+ {"version":3,"file":"nativePrebuild.d.ts","sourceRoot":"","sources":["../src/nativePrebuild.ts"],"names":[],"mappings":"AAQA,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,mBAiBvD;AAED,wBAAsB,wBAAwB,CAAC,KAAK,EAAE,MAAM,mBAa3D;AAED,wBAAsB,cAAc,kBAyHnC"}