@tamagui/metro-plugin 1.85.0

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.
@@ -0,0 +1,45 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: !0 });
9
+ }, __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from == "object" || typeof from == "function")
11
+ for (let key of __getOwnPropNames(from))
12
+ !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ return to;
14
+ };
15
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
16
+ // If the importer is in node compatibility mode or this is not an ESM
17
+ // file that has been converted to a CommonJS file using a Babel-
18
+ // compatible transform (i.e. "__esModule" has not been set), then set
19
+ // "default" to the CommonJS "module.exports" for node compatibility.
20
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
21
+ mod
22
+ )), __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
23
+ var src_exports = {};
24
+ __export(src_exports, {
25
+ withTamagui: () => withTamagui
26
+ });
27
+ module.exports = __toCommonJS(src_exports);
28
+ var import_static = require("@tamagui/static"), import_metro = require("react-native-css-interop/metro");
29
+ function withTamagui(metroConfig, options) {
30
+ return metroConfig = (0, import_metro.withCssInterop)(metroConfig, {
31
+ ignorePropertyWarningRegex: ["^--"]
32
+ // grouping: ['^group(/.*)?'],
33
+ }), (0, import_static.createExtractor)().loadTamagui(options), metroConfig.transformerPath = require.resolve("./transformer"), metroConfig.transformer = {
34
+ ...metroConfig.transformer,
35
+ tamagui: {
36
+ ...options,
37
+ disableInitialBuild: !0
38
+ }
39
+ }, metroConfig;
40
+ }
41
+ // Annotate the CommonJS export names for ESM import in node:
42
+ 0 && (module.exports = {
43
+ withTamagui
44
+ });
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAqD,4BACrD,eAGO;AAEA,SAAS,YACd,aACA,SACA;AACA,2BAAc,6BAAe,aAAa;AAAA,IACxC,4BAA4B,CAAC,KAAK;AAAA;AAAA,EAEpC,CAAC,OAGiB,+BAAgB,EAGnB,YAAY,OAAO,GAElC,YAAY,kBAAkB,gBAAgB,eAAe,GAC7D,YAAY,cAAc;AAAA,IACxB,GAAG,YAAY;AAAA,IACf,SAAS;AAAA,MACP,GAAG;AAAA,MACH,qBAAqB;AAAA,IACvB;AAAA,EACF,GACO;AACT;",
5
+ "names": []
6
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: !0 });
10
+ }, __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from == "object" || typeof from == "function")
12
+ for (let key of __getOwnPropNames(from))
13
+ !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
22
+ mod
23
+ )), __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
24
+ var src_exports = {};
25
+ __export(src_exports, {
26
+ withTamagui: () => withTamagui
27
+ });
28
+ module.exports = __toCommonJS(src_exports);
29
+ var import_static = require("@tamagui/static"), import_metro = require("react-native-css-interop/metro");
30
+ function withTamagui(metroConfig, options) {
31
+ return metroConfig = (0, import_metro.withCssInterop)(metroConfig, {
32
+ ignorePropertyWarningRegex: ["^--"]
33
+ // grouping: ['^group(/.*)?'],
34
+ }), (0, import_static.createExtractor)().loadTamagui(options), metroConfig.transformerPath = require.resolve("./transformer"), metroConfig.transformer = {
35
+ ...metroConfig.transformer,
36
+ tamagui: {
37
+ ...options,
38
+ disableInitialBuild: !0
39
+ }
40
+ }, metroConfig;
41
+ }
42
+ // Annotate the CommonJS export names for ESM import in node:
43
+ 0 && (module.exports = {
44
+ withTamagui
45
+ });
46
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAqD,4BACrD,eAGO;AAEA,SAAS,YACd,aACA,SACA;AACA,2BAAc,6BAAe,aAAa;AAAA,IACxC,4BAA4B,CAAC,KAAK;AAAA;AAAA,EAEpC,CAAC,OAGiB,+BAAgB,EAGnB,YAAY,OAAO,GAElC,YAAY,kBAAkB,gBAAgB,eAAe,GAC7D,YAAY,cAAc;AAAA,IACxB,GAAG,YAAY;AAAA,IACf,SAAS;AAAA,MACP,GAAG;AAAA,MACH,qBAAqB;AAAA,IACvB;AAAA,EACF,GACO;AACT;",
5
+ "names": []
6
+ }
@@ -0,0 +1,74 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: !0 });
9
+ }, __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from == "object" || typeof from == "function")
11
+ for (let key of __getOwnPropNames(from))
12
+ !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ return to;
14
+ };
15
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
16
+ // If the importer is in node compatibility mode or this is not an ESM
17
+ // file that has been converted to a CommonJS file using a Babel-
18
+ // compatible transform (i.e. "__esModule" has not been set), then set
19
+ // "default" to the CommonJS "module.exports" for node compatibility.
20
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
21
+ mod
22
+ )), __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
23
+ var transformer_exports = {};
24
+ __export(transformer_exports, {
25
+ transform: () => transform
26
+ });
27
+ module.exports = __toCommonJS(transformer_exports);
28
+ var import_metro_transform_worker = __toESM(require("metro-transform-worker")), import_path = require("path"), import_promises = require("fs/promises"), import_static = require("@tamagui/static");
29
+ const extractor = (0, import_static.createExtractor)();
30
+ async function transform(config, projectRoot, filename, data, options) {
31
+ const transformer = config.transformerPath ? require(config.transformerPath).transform : import_metro_transform_worker.default.transform;
32
+ if (options.platform !== "web" || filename.includes("node_modules"))
33
+ return transformer(config, projectRoot, filename, data, options);
34
+ if (filename.endsWith(".tsx") || filename.endsWith(".jsx")) {
35
+ const tmpDir = (0, import_path.join)(projectRoot, ".tamagui", "css");
36
+ try {
37
+ await (0, import_promises.mkdir)(tmpDir, {
38
+ recursive: !0
39
+ });
40
+ } catch {
41
+ }
42
+ const sourcePath = (0, import_path.join)(projectRoot, filename), source = `${data}`, out = await (0, import_static.extractToClassNames)({
43
+ extractor,
44
+ options: {
45
+ // @ts-ignore
46
+ platform: "web",
47
+ ...config.tamagui
48
+ },
49
+ shouldPrintDebug: source.startsWith("// debug-verbose") ? "verbose" : source.startsWith("// debug"),
50
+ source,
51
+ sourcePath
52
+ });
53
+ if (out != null && out.styles) {
54
+ const outStylePath = (0, import_path.join)(
55
+ tmpDir,
56
+ `${filename}`.replace(/[^a-zA-Z0-9]/gi, "") + ".css"
57
+ );
58
+ return console.info(" \u{1F95A}", outStylePath), await (0, import_promises.writeFile)(outStylePath, out.styles), transformer(
59
+ config,
60
+ projectRoot,
61
+ filename,
62
+ Buffer.from(`${out.js}
63
+ require("${outStylePath}")`),
64
+ options
65
+ );
66
+ }
67
+ }
68
+ return transformer(config, projectRoot, filename, data, options);
69
+ }
70
+ // Annotate the CommonJS export names for ESM import in node:
71
+ 0 && (module.exports = {
72
+ transform
73
+ });
74
+ //# sourceMappingURL=transformer.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/transformer.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAIO,4CACP,cAAqB,iBACrB,kBAAiC,wBAEjC,gBAAqE;AAOrE,MAAM,gBAAY,+BAAgB;AAElC,eAAsB,UACpB,QACA,aACA,UACA,MACA,SAC4B;AAC5B,QAAM,cAAc,OAAO,kBACvB,QAAQ,OAAO,eAAe,EAAE,YAChC,8BAAAA,QAAO;AAEX,MAAI,QAAQ,aAAa,SAAS,SAAS,SAAS,cAAc;AAChE,WAAO,YAAY,QAAQ,aAAa,UAAU,MAAM,OAAO;AAGjE,MAAI,SAAS,SAAS,MAAM,KAAK,SAAS,SAAS,MAAM,GAAG;AAC1D,UAAM,aAAS,kBAAK,aAAa,YAAY,KAAK;AAClD,QAAI;AACF,gBAAM,uBAAM,QAAQ;AAAA,QAClB,WAAW;AAAA,MACb,CAAC;AAAA,IACH,QAAQ;AAAA,IAAC;AAET,UAAM,iBAAa,kBAAK,aAAa,QAAQ,GAGvC,SAAS,GAAG,IAAI,IAChB,MAAM,UAAM,mCAAoB;AAAA,MACpC;AAAA,MACA,SAAS;AAAA;AAAA,QAEP,UAAU;AAAA,QACV,GAAG,OAAO;AAAA,MACZ;AAAA,MACA,kBAAkB,OAAO,WAAW,kBAAkB,IAClD,YACA,OAAO,WAAW,UAAU;AAAA,MAChC;AAAA,MACA;AAAA,IACF,CAAC;AAGD,QAAI,mBAAK,QAAQ;AACf,YAAM,mBAAe;AAAA,QACnB;AAAA,QACA,GAAG,QAAQ,GAAG,QAAQ,kBAAkB,EAAE,IAAI;AAAA,MAChD;AACA,qBAAQ,KAAK,cAAO,YAAY,GAChC,UAAM,2BAAU,cAAc,IAAI,MAAM,GACjC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,KAAK,GAAG,IAAI,EAAE;AAAA,WAAc,YAAY,IAAI;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,YAAY,QAAQ,aAAa,UAAU,MAAM,OAAO;AACjE;",
5
+ "names": ["worker"]
6
+ }
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: !0 });
10
+ }, __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from == "object" || typeof from == "function")
12
+ for (let key of __getOwnPropNames(from))
13
+ !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
22
+ mod
23
+ )), __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
24
+ var transformer_exports = {};
25
+ __export(transformer_exports, {
26
+ transform: () => transform
27
+ });
28
+ module.exports = __toCommonJS(transformer_exports);
29
+ var import_metro_transform_worker = __toESM(require("metro-transform-worker")), import_path = require("path"), import_promises = require("fs/promises"), import_static = require("@tamagui/static");
30
+ const extractor = (0, import_static.createExtractor)();
31
+ async function transform(config, projectRoot, filename, data, options) {
32
+ const transformer = config.transformerPath ? require(config.transformerPath).transform : import_metro_transform_worker.default.transform;
33
+ if (options.platform !== "web" || filename.includes("node_modules"))
34
+ return transformer(config, projectRoot, filename, data, options);
35
+ if (filename.endsWith(".tsx") || filename.endsWith(".jsx")) {
36
+ const tmpDir = (0, import_path.join)(projectRoot, ".tamagui", "css");
37
+ try {
38
+ await (0, import_promises.mkdir)(tmpDir, {
39
+ recursive: !0
40
+ });
41
+ } catch {
42
+ }
43
+ const sourcePath = (0, import_path.join)(projectRoot, filename), source = `${data}`, out = await (0, import_static.extractToClassNames)({
44
+ extractor,
45
+ options: {
46
+ // @ts-ignore
47
+ platform: "web",
48
+ ...config.tamagui
49
+ },
50
+ shouldPrintDebug: source.startsWith("// debug-verbose") ? "verbose" : source.startsWith("// debug"),
51
+ source,
52
+ sourcePath
53
+ });
54
+ if (out != null && out.styles) {
55
+ const outStylePath = (0, import_path.join)(
56
+ tmpDir,
57
+ `${filename}`.replace(/[^a-zA-Z0-9]/gi, "") + ".css"
58
+ );
59
+ return console.info(" \u{1F95A}", outStylePath), await (0, import_promises.writeFile)(outStylePath, out.styles), transformer(
60
+ config,
61
+ projectRoot,
62
+ filename,
63
+ Buffer.from(`${out.js}
64
+ require("${outStylePath}")`),
65
+ options
66
+ );
67
+ }
68
+ }
69
+ return transformer(config, projectRoot, filename, data, options);
70
+ }
71
+ // Annotate the CommonJS export names for ESM import in node:
72
+ 0 && (module.exports = {
73
+ transform
74
+ });
75
+ //# sourceMappingURL=transformer.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/transformer.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAIO,4CACP,cAAqB,iBACrB,kBAAiC,wBAEjC,gBAAqE;AAOrE,MAAM,gBAAY,+BAAgB;AAElC,eAAsB,UACpB,QACA,aACA,UACA,MACA,SAC4B;AAC5B,QAAM,cAAc,OAAO,kBACvB,QAAQ,OAAO,eAAe,EAAE,YAChC,8BAAAA,QAAO;AAEX,MAAI,QAAQ,aAAa,SAAS,SAAS,SAAS,cAAc;AAChE,WAAO,YAAY,QAAQ,aAAa,UAAU,MAAM,OAAO;AAGjE,MAAI,SAAS,SAAS,MAAM,KAAK,SAAS,SAAS,MAAM,GAAG;AAC1D,UAAM,aAAS,kBAAK,aAAa,YAAY,KAAK;AAClD,QAAI;AACF,gBAAM,uBAAM,QAAQ;AAAA,QAClB,WAAW;AAAA,MACb,CAAC;AAAA,IACH,QAAQ;AAAA,IAAC;AAET,UAAM,iBAAa,kBAAK,aAAa,QAAQ,GAGvC,SAAS,GAAG,IAAI,IAChB,MAAM,UAAM,mCAAoB;AAAA,MACpC;AAAA,MACA,SAAS;AAAA;AAAA,QAEP,UAAU;AAAA,QACV,GAAG,OAAO;AAAA,MACZ;AAAA,MACA,kBAAkB,OAAO,WAAW,kBAAkB,IAClD,YACA,OAAO,WAAW,UAAU;AAAA,MAChC;AAAA,MACA;AAAA,IACF,CAAC;AAGD,QAAI,mBAAK,QAAQ;AACf,YAAM,mBAAe;AAAA,QACnB;AAAA,QACA,GAAG,QAAQ,GAAG,QAAQ,kBAAkB,EAAE,IAAI;AAAA,MAChD;AACA,qBAAQ,KAAK,cAAO,YAAY,GAChC,UAAM,2BAAU,cAAc,IAAI,MAAM,GACjC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,KAAK,GAAG,IAAI,EAAE;AAAA,WAAc,YAAY,IAAI;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,YAAY,QAAQ,aAAa,UAAU,MAAM,OAAO;AACjE;",
5
+ "names": ["worker"]
6
+ }
@@ -0,0 +1,20 @@
1
+ import { createExtractor } from "@tamagui/static";
2
+ import {
3
+ withCssInterop
4
+ } from "react-native-css-interop/metro";
5
+ function withTamagui(metroConfig, options) {
6
+ return metroConfig = withCssInterop(metroConfig, {
7
+ ignorePropertyWarningRegex: ["^--"]
8
+ // grouping: ['^group(/.*)?'],
9
+ }), createExtractor().loadTamagui(options), metroConfig.transformerPath = require.resolve("./transformer"), metroConfig.transformer = {
10
+ ...metroConfig.transformer,
11
+ tamagui: {
12
+ ...options,
13
+ disableInitialBuild: !0
14
+ }
15
+ }, metroConfig;
16
+ }
17
+ export {
18
+ withTamagui
19
+ };
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "mappings": "AAAA,SAAS,uBAA4C;AACrD;AAAA,EACE;AAAA,OAEK;AAEA,SAAS,YACd,aACA,SACA;AACA,uBAAc,eAAe,aAAa;AAAA,IACxC,4BAA4B,CAAC,KAAK;AAAA;AAAA,EAEpC,CAAC,GAGiB,gBAAgB,EAGnB,YAAY,OAAO,GAElC,YAAY,kBAAkB,gBAAgB,eAAe,GAC7D,YAAY,cAAc;AAAA,IACxB,GAAG,YAAY;AAAA,IACf,SAAS;AAAA,MACP,GAAG;AAAA,MACH,qBAAqB;AAAA,IACvB;AAAA,EACF,GACO;AACT;",
5
+ "names": []
6
+ }
@@ -0,0 +1,20 @@
1
+ import { createExtractor } from "@tamagui/static";
2
+ import {
3
+ withCssInterop
4
+ } from "react-native-css-interop/metro";
5
+ function withTamagui(metroConfig, options) {
6
+ return metroConfig = withCssInterop(metroConfig, {
7
+ ignorePropertyWarningRegex: ["^--"]
8
+ // grouping: ['^group(/.*)?'],
9
+ }), createExtractor().loadTamagui(options), metroConfig.transformerPath = require.resolve("./transformer"), metroConfig.transformer = {
10
+ ...metroConfig.transformer,
11
+ tamagui: {
12
+ ...options,
13
+ disableInitialBuild: !0
14
+ }
15
+ }, metroConfig;
16
+ }
17
+ export {
18
+ withTamagui
19
+ };
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "mappings": "AAAA,SAAS,uBAA4C;AACrD;AAAA,EACE;AAAA,OAEK;AAEA,SAAS,YACd,aACA,SACA;AACA,uBAAc,eAAe,aAAa;AAAA,IACxC,4BAA4B,CAAC,KAAK;AAAA;AAAA,EAEpC,CAAC,GAGiB,gBAAgB,EAGnB,YAAY,OAAO,GAElC,YAAY,kBAAkB,gBAAgB,eAAe,GAC7D,YAAY,cAAc;AAAA,IACxB,GAAG,YAAY;AAAA,IACf,SAAS;AAAA,MACP,GAAG;AAAA,MACH,qBAAqB;AAAA,IACvB;AAAA,EACF,GACO;AACT;",
5
+ "names": []
6
+ }
@@ -0,0 +1,49 @@
1
+ import worker from "metro-transform-worker";
2
+ import { join } from "path";
3
+ import { writeFile, mkdir } from "fs/promises";
4
+ import { createExtractor, extractToClassNames } from "@tamagui/static";
5
+ const extractor = createExtractor();
6
+ async function transform(config, projectRoot, filename, data, options) {
7
+ const transformer = config.transformerPath ? require(config.transformerPath).transform : worker.transform;
8
+ if (options.platform !== "web" || filename.includes("node_modules"))
9
+ return transformer(config, projectRoot, filename, data, options);
10
+ if (filename.endsWith(".tsx") || filename.endsWith(".jsx")) {
11
+ const tmpDir = join(projectRoot, ".tamagui", "css");
12
+ try {
13
+ await mkdir(tmpDir, {
14
+ recursive: !0
15
+ });
16
+ } catch {
17
+ }
18
+ const sourcePath = join(projectRoot, filename), source = `${data}`, out = await extractToClassNames({
19
+ extractor,
20
+ options: {
21
+ // @ts-ignore
22
+ platform: "web",
23
+ ...config.tamagui
24
+ },
25
+ shouldPrintDebug: source.startsWith("// debug-verbose") ? "verbose" : source.startsWith("// debug"),
26
+ source,
27
+ sourcePath
28
+ });
29
+ if (out?.styles) {
30
+ const outStylePath = join(
31
+ tmpDir,
32
+ `${filename}`.replace(/[^a-zA-Z0-9]/gi, "") + ".css"
33
+ );
34
+ return console.info(" \u{1F95A}", outStylePath), await writeFile(outStylePath, out.styles), transformer(
35
+ config,
36
+ projectRoot,
37
+ filename,
38
+ Buffer.from(`${out.js}
39
+ require("${outStylePath}")`),
40
+ options
41
+ );
42
+ }
43
+ }
44
+ return transformer(config, projectRoot, filename, data, options);
45
+ }
46
+ export {
47
+ transform
48
+ };
49
+ //# sourceMappingURL=transformer.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/transformer.ts"],
4
+ "mappings": "AAAA,OAAO,YAIA;AACP,SAAS,YAAY;AACrB,SAAS,WAAW,aAAa;AAEjC,SAAS,iBAAiB,2BAA2C;AAOrE,MAAM,YAAY,gBAAgB;AAElC,eAAsB,UACpB,QACA,aACA,UACA,MACA,SAC4B;AAC5B,QAAM,cAAc,OAAO,kBACvB,QAAQ,OAAO,eAAe,EAAE,YAChC,OAAO;AAEX,MAAI,QAAQ,aAAa,SAAS,SAAS,SAAS,cAAc;AAChE,WAAO,YAAY,QAAQ,aAAa,UAAU,MAAM,OAAO;AAGjE,MAAI,SAAS,SAAS,MAAM,KAAK,SAAS,SAAS,MAAM,GAAG;AAC1D,UAAM,SAAS,KAAK,aAAa,YAAY,KAAK;AAClD,QAAI;AACF,YAAM,MAAM,QAAQ;AAAA,QAClB,WAAW;AAAA,MACb,CAAC;AAAA,IACH,QAAQ;AAAA,IAAC;AAET,UAAM,aAAa,KAAK,aAAa,QAAQ,GAGvC,SAAS,GAAG,IAAI,IAChB,MAAM,MAAM,oBAAoB;AAAA,MACpC;AAAA,MACA,SAAS;AAAA;AAAA,QAEP,UAAU;AAAA,QACV,GAAG,OAAO;AAAA,MACZ;AAAA,MACA,kBAAkB,OAAO,WAAW,kBAAkB,IAClD,YACA,OAAO,WAAW,UAAU;AAAA,MAChC;AAAA,MACA;AAAA,IACF,CAAC;AAGD,QAAI,KAAK,QAAQ;AACf,YAAM,eAAe;AAAA,QACnB;AAAA,QACA,GAAG,QAAQ,GAAG,QAAQ,kBAAkB,EAAE,IAAI;AAAA,MAChD;AACA,qBAAQ,KAAK,cAAO,YAAY,GAChC,MAAM,UAAU,cAAc,IAAI,MAAM,GACjC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,KAAK,GAAG,IAAI,EAAE;AAAA,WAAc,YAAY,IAAI;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,YAAY,QAAQ,aAAa,UAAU,MAAM,OAAO;AACjE;",
5
+ "names": []
6
+ }
@@ -0,0 +1,49 @@
1
+ import worker from "metro-transform-worker";
2
+ import { join } from "path";
3
+ import { writeFile, mkdir } from "fs/promises";
4
+ import { createExtractor, extractToClassNames } from "@tamagui/static";
5
+ const extractor = createExtractor();
6
+ async function transform(config, projectRoot, filename, data, options) {
7
+ const transformer = config.transformerPath ? require(config.transformerPath).transform : worker.transform;
8
+ if (options.platform !== "web" || filename.includes("node_modules"))
9
+ return transformer(config, projectRoot, filename, data, options);
10
+ if (filename.endsWith(".tsx") || filename.endsWith(".jsx")) {
11
+ const tmpDir = join(projectRoot, ".tamagui", "css");
12
+ try {
13
+ await mkdir(tmpDir, {
14
+ recursive: !0
15
+ });
16
+ } catch {
17
+ }
18
+ const sourcePath = join(projectRoot, filename), source = `${data}`, out = await extractToClassNames({
19
+ extractor,
20
+ options: {
21
+ // @ts-ignore
22
+ platform: "web",
23
+ ...config.tamagui
24
+ },
25
+ shouldPrintDebug: source.startsWith("// debug-verbose") ? "verbose" : source.startsWith("// debug"),
26
+ source,
27
+ sourcePath
28
+ });
29
+ if (out?.styles) {
30
+ const outStylePath = join(
31
+ tmpDir,
32
+ `${filename}`.replace(/[^a-zA-Z0-9]/gi, "") + ".css"
33
+ );
34
+ return console.info(" \u{1F95A}", outStylePath), await writeFile(outStylePath, out.styles), transformer(
35
+ config,
36
+ projectRoot,
37
+ filename,
38
+ Buffer.from(`${out.js}
39
+ require("${outStylePath}")`),
40
+ options
41
+ );
42
+ }
43
+ }
44
+ return transformer(config, projectRoot, filename, data, options);
45
+ }
46
+ export {
47
+ transform
48
+ };
49
+ //# sourceMappingURL=transformer.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/transformer.ts"],
4
+ "mappings": "AAAA,OAAO,YAIA;AACP,SAAS,YAAY;AACrB,SAAS,WAAW,aAAa;AAEjC,SAAS,iBAAiB,2BAA2C;AAOrE,MAAM,YAAY,gBAAgB;AAElC,eAAsB,UACpB,QACA,aACA,UACA,MACA,SAC4B;AAC5B,QAAM,cAAc,OAAO,kBACvB,QAAQ,OAAO,eAAe,EAAE,YAChC,OAAO;AAEX,MAAI,QAAQ,aAAa,SAAS,SAAS,SAAS,cAAc;AAChE,WAAO,YAAY,QAAQ,aAAa,UAAU,MAAM,OAAO;AAGjE,MAAI,SAAS,SAAS,MAAM,KAAK,SAAS,SAAS,MAAM,GAAG;AAC1D,UAAM,SAAS,KAAK,aAAa,YAAY,KAAK;AAClD,QAAI;AACF,YAAM,MAAM,QAAQ;AAAA,QAClB,WAAW;AAAA,MACb,CAAC;AAAA,IACH,QAAQ;AAAA,IAAC;AAET,UAAM,aAAa,KAAK,aAAa,QAAQ,GAGvC,SAAS,GAAG,IAAI,IAChB,MAAM,MAAM,oBAAoB;AAAA,MACpC;AAAA,MACA,SAAS;AAAA;AAAA,QAEP,UAAU;AAAA,QACV,GAAG,OAAO;AAAA,MACZ;AAAA,MACA,kBAAkB,OAAO,WAAW,kBAAkB,IAClD,YACA,OAAO,WAAW,UAAU;AAAA,MAChC;AAAA,MACA;AAAA,IACF,CAAC;AAGD,QAAI,KAAK,QAAQ;AACf,YAAM,eAAe;AAAA,QACnB;AAAA,QACA,GAAG,QAAQ,GAAG,QAAQ,kBAAkB,EAAE,IAAI;AAAA,MAChD;AACA,qBAAQ,KAAK,cAAO,YAAY,GAChC,MAAM,UAAU,cAAc,IAAI,MAAM,GACjC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,KAAK,GAAG,IAAI,EAAE;AAAA,WAAc,YAAY,IAAI;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,YAAY,QAAQ,aAAa,UAAU,MAAM,OAAO;AACjE;",
5
+ "names": []
6
+ }
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@tamagui/metro-plugin",
3
+ "version": "1.85.0",
4
+ "source": "src/index.ts",
5
+ "types": "./types/index.d.ts",
6
+ "main": "dist/cjs",
7
+ "module": "dist/esm",
8
+ "files": [
9
+ "src",
10
+ "types",
11
+ "dist"
12
+ ],
13
+ "license": "MIT",
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "scripts": {
18
+ "build": "tamagui-build",
19
+ "watch": "tamagui-build --watch",
20
+ "lint": "../../node_modules/.bin/biome check src",
21
+ "lint:fix": "../../node_modules/.bin/biome check --apply-unsafe src",
22
+ "clean": "tamagui-build clean",
23
+ "clean:build": "tamagui-build clean:build"
24
+ },
25
+ "dependencies": {
26
+ "@tamagui/static": "1.85.0",
27
+ "metro-config": "^0.80.4",
28
+ "metro-transform-worker": "^0.80.4",
29
+ "react-native-css-interop": "~0.0.21"
30
+ },
31
+ "devDependencies": {
32
+ "@tamagui/build": "1.85.0"
33
+ }
34
+ }
package/src/index.ts ADDED
@@ -0,0 +1,31 @@
1
+ import { createExtractor, type TamaguiOptions } from '@tamagui/static'
2
+ import {
3
+ withCssInterop,
4
+ ComposableIntermediateConfigT,
5
+ } from 'react-native-css-interop/metro'
6
+
7
+ export function withTamagui(
8
+ metroConfig: ComposableIntermediateConfigT,
9
+ options: TamaguiOptions
10
+ ) {
11
+ metroConfig = withCssInterop(metroConfig, {
12
+ ignorePropertyWarningRegex: ['^--'],
13
+ // grouping: ['^group(/.*)?'],
14
+ })
15
+
16
+ // run one build up front
17
+ const extractor = createExtractor()
18
+
19
+ // need to await this somehow.. but generally this starts like 10 seconds before any request
20
+ void extractor.loadTamagui(options)
21
+
22
+ metroConfig.transformerPath = require.resolve('./transformer')
23
+ metroConfig.transformer = {
24
+ ...metroConfig.transformer,
25
+ tamagui: {
26
+ ...options,
27
+ disableInitialBuild: true,
28
+ },
29
+ }
30
+ return metroConfig
31
+ }
@@ -0,0 +1,78 @@
1
+ import worker, {
2
+ JsTransformerConfig,
3
+ JsTransformOptions,
4
+ TransformResponse,
5
+ } from 'metro-transform-worker'
6
+ import { join } from 'path'
7
+ import { writeFile, mkdir } from 'fs/promises'
8
+
9
+ import { createExtractor, extractToClassNames, TamaguiOptions } from '@tamagui/static'
10
+
11
+ interface NativeWindJsTransformerConfig extends JsTransformerConfig {
12
+ transformerPath?: string
13
+ tamagui: TamaguiOptions
14
+ }
15
+
16
+ const extractor = createExtractor()
17
+
18
+ export async function transform(
19
+ config: NativeWindJsTransformerConfig,
20
+ projectRoot: string,
21
+ filename: string,
22
+ data: Buffer,
23
+ options: JsTransformOptions
24
+ ): Promise<TransformResponse> {
25
+ const transformer = config.transformerPath
26
+ ? require(config.transformerPath).transform
27
+ : worker.transform
28
+
29
+ if (options.platform !== 'web' || filename.includes('node_modules')) {
30
+ return transformer(config, projectRoot, filename, data, options)
31
+ }
32
+
33
+ if (filename.endsWith('.tsx') || filename.endsWith('.jsx')) {
34
+ const tmpDir = join(projectRoot, '.tamagui', 'css')
35
+ try {
36
+ await mkdir(tmpDir, {
37
+ recursive: true,
38
+ })
39
+ } catch {}
40
+
41
+ const sourcePath = join(projectRoot, filename)
42
+
43
+ // extract css
44
+ const source = `${data}`
45
+ const out = await extractToClassNames({
46
+ extractor,
47
+ options: {
48
+ // @ts-ignore
49
+ platform: 'web',
50
+ ...config.tamagui,
51
+ },
52
+ shouldPrintDebug: source.startsWith('// debug-verbose')
53
+ ? 'verbose'
54
+ : source.startsWith('// debug'),
55
+ source,
56
+ sourcePath,
57
+ })
58
+
59
+ // just write it out to our tmp dir and require it for metro to do the rest of the css work
60
+ if (out?.styles) {
61
+ const outStylePath = join(
62
+ tmpDir,
63
+ `${filename}`.replace(/[^a-zA-Z0-9]/gi, '') + '.css'
64
+ )
65
+ console.info(' 🥚', outStylePath)
66
+ await writeFile(outStylePath, out.styles)
67
+ return transformer(
68
+ config,
69
+ projectRoot,
70
+ filename,
71
+ Buffer.from(`${out.js}\nrequire("${outStylePath}")`),
72
+ options
73
+ )
74
+ }
75
+ }
76
+
77
+ return transformer(config, projectRoot, filename, data, options)
78
+ }
@@ -0,0 +1,4 @@
1
+ import { type TamaguiOptions } from '@tamagui/static';
2
+ import { ComposableIntermediateConfigT } from 'react-native-css-interop/metro';
3
+ export declare function withTamagui(metroConfig: ComposableIntermediateConfigT, options: TamaguiOptions): ComposableIntermediateConfigT;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAEL,6BAA6B,EAC9B,MAAM,gCAAgC,CAAA;AAEvC,wBAAgB,WAAW,CACzB,WAAW,EAAE,6BAA6B,EAC1C,OAAO,EAAE,cAAc,iCAsBxB"}
@@ -0,0 +1,10 @@
1
+ /// <reference types="node" />
2
+ import { JsTransformerConfig, JsTransformOptions, TransformResponse } from 'metro-transform-worker';
3
+ import { TamaguiOptions } from '@tamagui/static';
4
+ interface NativeWindJsTransformerConfig extends JsTransformerConfig {
5
+ transformerPath?: string;
6
+ tamagui: TamaguiOptions;
7
+ }
8
+ export declare function transform(config: NativeWindJsTransformerConfig, projectRoot: string, filename: string, data: Buffer, options: JsTransformOptions): Promise<TransformResponse>;
9
+ export {};
10
+ //# sourceMappingURL=transformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../src/transformer.ts"],"names":[],"mappings":";AAAA,OAAe,EACb,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,wBAAwB,CAAA;AAI/B,OAAO,EAAwC,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEtF,UAAU,6BAA8B,SAAQ,mBAAmB;IACjE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,cAAc,CAAA;CACxB;AAID,wBAAsB,SAAS,CAC7B,MAAM,EAAE,6BAA6B,EACrC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAsD5B"}