vxrn 2.0.0-beta.65.1 → 2.0.0-beta.82.1
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/config/getBaseVitePlugins.mjs +5 -1
- package/dist/config/getBaseVitePlugins.mjs.map +1 -1
- package/dist/config/getBaseVitePlugins.native.js +5 -1
- package/dist/config/getBaseVitePlugins.native.js.map +1 -1
- package/dist/config/getOptimizeDeps.mjs +1 -0
- package/dist/config/getOptimizeDeps.mjs.map +1 -1
- package/dist/config/getOptimizeDeps.native.js +1 -0
- package/dist/config/getOptimizeDeps.native.js.map +1 -1
- package/dist/exports/prebuildWithoutExpo.mjs +102 -2
- package/dist/exports/prebuildWithoutExpo.mjs.map +1 -1
- package/dist/exports/prebuildWithoutExpo.native.js +182 -10
- package/dist/exports/prebuildWithoutExpo.native.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.mjs +4 -0
- package/dist/index.native.js +4 -0
- package/dist/utils/nearestPackageJson.mjs +16 -0
- package/dist/utils/nearestPackageJson.mjs.map +1 -0
- package/dist/utils/nearestPackageJson.native.js +16 -0
- package/dist/utils/nearestPackageJson.native.js.map +1 -0
- package/dist/utils/swiftPackageId.mjs +14 -0
- package/dist/utils/swiftPackageId.mjs.map +1 -0
- package/dist/utils/swiftPackageId.native.js +14 -0
- package/dist/utils/swiftPackageId.native.js.map +1 -0
- package/expo-plugin.cjs +3 -0
- package/native-project-patches.cjs +52 -0
- package/package.json +11 -11
- package/src/config/getBaseVitePlugins.ts +2 -1
- package/src/config/getOptimizeDeps.test.ts +7 -0
- package/src/config/getOptimizeDeps.ts +15 -0
- package/src/exports/expoPlugin.test.mjs +4 -0
- package/src/exports/prebuildWithoutExpo.test.ts +65 -4
- package/src/exports/prebuildWithoutExpo.ts +127 -2
- package/src/index.ts +2 -0
- package/src/utils/nearestPackageJson.ts +24 -0
- package/src/utils/swiftPackageId.ts +14 -0
- package/types/config/getBaseVitePlugins.d.ts.map +1 -1
- package/types/config/getOptimizeDeps.d.ts +5 -0
- package/types/config/getOptimizeDeps.d.ts.map +1 -1
- package/types/exports/prebuildWithoutExpo.d.ts +1 -0
- package/types/exports/prebuildWithoutExpo.d.ts.map +1 -1
- package/types/index.d.ts +2 -0
- package/types/index.d.ts.map +1 -1
- package/types/utils/nearestPackageJson.d.ts +2 -0
- package/types/utils/nearestPackageJson.d.ts.map +1 -0
- package/types/utils/swiftPackageId.d.ts +3 -0
- package/types/utils/swiftPackageId.d.ts.map +1 -0
|
@@ -2,6 +2,7 @@ import { createVXRNCompilerPlugin } from "@vxrn/compiler";
|
|
|
2
2
|
import { existsSync } from "node:fs";
|
|
3
3
|
import { dirname, extname, resolve } from "node:path";
|
|
4
4
|
import { ssrExtensions, webExtensions } from "../constants.mjs";
|
|
5
|
+
import { nearestPackageJson } from "../utils/nearestPackageJson.mjs";
|
|
5
6
|
|
|
6
7
|
const JS_EXTENSION_RE = /\.[cm]?[jt]sx?$/;
|
|
7
8
|
const PLATFORM_RESOLVE_SOURCE_RE = /(?:\.[cm]?[jt]sx?|\.server)$/;
|
|
@@ -84,7 +85,10 @@ function getBaseVitePlugins() {
|
|
|
84
85
|
for (const platformExtension of platformSpecificExtension) {
|
|
85
86
|
const fullPath = `${withoutExt}.${platformExtension}${jsExtension}`;
|
|
86
87
|
if (cachedPathExists(fullPath)) {
|
|
87
|
-
return {
|
|
88
|
+
return {
|
|
89
|
+
id: fullPath,
|
|
90
|
+
packageJsonPath: nearestPackageJson(fullPath)
|
|
91
|
+
};
|
|
88
92
|
}
|
|
89
93
|
}
|
|
90
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getBaseVitePlugins.js","names":[],"sources":["config/getBaseVitePlugins.js"],"sourcesContent":["import { createVXRNCompilerPlugin } from \"@vxrn/compiler\";\nimport { existsSync } from \"node:fs\";\nimport { dirname, extname, resolve } from \"node:path\";\nimport { ssrExtensions, webExtensions } from \"../constants\";\nconst JS_EXTENSION_RE = /\\.[cm]?[jt]sx?$/;\nconst PLATFORM_RESOLVE_SOURCE_RE = /(?:\\.[cm]?[jt]sx?|\\.server)$/;\nconst PLATFORM_EXTENSIONS_BY_ENVIRONMENT = {\n client: [\"web\"],\n ssr: [\"server\", \"web\"],\n worker: [\"server\", \"web\"],\n ios: [\"ios\", \"native\"],\n android: [\"android\", \"native\"]\n};\nfunction getBaseVitePlugins() {\n const pathExistsCache = /* @__PURE__ */ new Map();\n let isBuild = false;\n function cachedPathExists(path) {\n if (!isBuild) return existsSync(path);\n const cached = pathExistsCache.get(path);\n if (cached !== void 0) return cached;\n const exists = existsSync(path);\n pathExistsCache.set(path, exists);\n return exists;\n }\n return [\n {\n name: \"platform-specific-resolve\",\n enforce: \"pre\",\n config(_, { command }) {\n isBuild = command === \"build\";\n return {\n resolve: {\n // if this is on it breaks resolveId below\n // optimizeDeps config should apply to packages in monorepo\n // https://vite.dev/config/shared-options#resolve-preservesymlinks\n // preserveSymlinks: true,\n },\n environments: {\n ssr: {\n resolve: {\n extensions: ssrExtensions,\n conditions: [\"vxrn-web\"],\n externalConditions: [\"vxrn-web\"]\n }\n },\n client: {\n resolve: {\n extensions: webExtensions,\n conditions: [\"vxrn-web\"]\n }\n }\n }\n };\n },\n load: {\n filter: { id: /^\\0server-only-stub:/ },\n handler(id) {\n const source = id.slice(\"\\0server-only-stub:\".length);\n return `throw new Error(\"[one] .server file cannot be imported on client: ${source}\")`;\n }\n },\n // vite's resolve.extensions already prefers platform variants for\n // extensionless imports in every environment (webExtensions /\n // ssrExtensions here, getNativeExtensions for ios+android), verified by\n // building with this hook disabled. the only thing left for this hook is\n // an import that already carries an extension, since resolve.extensions\n // only ever appends. so filter to those rust-side, plus bare `.server`\n // which still needs an extension appended to be recognised as a server\n // file. measured on onestack.dev this takes the hook from 25422 calls to\n // 6880.\n resolveId: {\n filter: { id: PLATFORM_RESOLVE_SOURCE_RE },\n async handler(source, importer, options) {\n if (options?.scan) return;\n let resolvedId;\n if (JS_EXTENSION_RE.test(source)) {\n if (source[0] === \"/\") {\n resolvedId = source;\n } else if (source[0] === \".\" && importer) {\n resolvedId = resolve(dirname(importer), source);\n }\n }\n if (!resolvedId) {\n const resolved = await this.resolve(source, importer, options);\n if (!resolved) return resolved;\n resolvedId = resolved.id;\n }\n if (resolvedId.includes(\"node_modules\")) {\n return;\n }\n if (this.environment.name !== \"ssr\" && this.environment.name !== \"worker\" && /\\.server\\.\\w+$/.test(resolvedId)) {\n return { id: `\\0server-only-stub:${source}` };\n }\n if (process.env.VXRN_SKIP_STRICTER_PLATFORM_RESOLVE) {\n return void 0;\n }\n const jsExtension = extname(resolvedId);\n const withoutExt = resolvedId.slice(0, resolvedId.length - jsExtension.length);\n const platformSpecificExtension = PLATFORM_EXTENSIONS_BY_ENVIRONMENT[this.environment.name];\n if (platformSpecificExtension) {\n for (const platformExtension of platformSpecificExtension) {\n const fullPath = `${withoutExt}.${platformExtension}${jsExtension}`;\n if (cachedPathExists(fullPath)) {\n return { id: fullPath };\n }\n }\n }\n }\n },\n // adding or deleting a .web/.native sibling changes what a source\n // resolves to, so drop the exists cache when the watcher sees a change\n watchChange() {\n pathExistsCache.clear();\n }\n },\n // temp fix\n // avoid logging the optimizeDeps we add that aren't in the app:\n // likely we need a whole better solution to optimize deps\n {\n name: `avoid-optimize-logs`,\n configureServer() {\n const ogWarn = console.warn;\n console.warn = (...args) => {\n if (typeof args[0] === \"string\" && args[0].startsWith(`Failed to resolve dependency:`)) {\n return;\n }\n return ogWarn(...args);\n };\n }\n },\n createVXRNCompilerPlugin({})\n ];\n}\nexport {\n getBaseVitePlugins\n};\n//# sourceMappingURL=getBaseVitePlugins.js.map\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"getBaseVitePlugins.js","names":[],"sources":["config/getBaseVitePlugins.js"],"sourcesContent":["import { createVXRNCompilerPlugin } from \"@vxrn/compiler\";\nimport { existsSync } from \"node:fs\";\nimport { dirname, extname, resolve } from \"node:path\";\nimport { ssrExtensions, webExtensions } from \"../constants\";\nimport { nearestPackageJson } from \"../utils/nearestPackageJson\";\nconst JS_EXTENSION_RE = /\\.[cm]?[jt]sx?$/;\nconst PLATFORM_RESOLVE_SOURCE_RE = /(?:\\.[cm]?[jt]sx?|\\.server)$/;\nconst PLATFORM_EXTENSIONS_BY_ENVIRONMENT = {\n client: [\"web\"],\n ssr: [\"server\", \"web\"],\n worker: [\"server\", \"web\"],\n ios: [\"ios\", \"native\"],\n android: [\"android\", \"native\"]\n};\nfunction getBaseVitePlugins() {\n const pathExistsCache = /* @__PURE__ */ new Map();\n let isBuild = false;\n function cachedPathExists(path) {\n if (!isBuild) return existsSync(path);\n const cached = pathExistsCache.get(path);\n if (cached !== void 0) return cached;\n const exists = existsSync(path);\n pathExistsCache.set(path, exists);\n return exists;\n }\n return [\n {\n name: \"platform-specific-resolve\",\n enforce: \"pre\",\n config(_, { command }) {\n isBuild = command === \"build\";\n return {\n resolve: {\n // if this is on it breaks resolveId below\n // optimizeDeps config should apply to packages in monorepo\n // https://vite.dev/config/shared-options#resolve-preservesymlinks\n // preserveSymlinks: true,\n },\n environments: {\n ssr: {\n resolve: {\n extensions: ssrExtensions,\n conditions: [\"vxrn-web\"],\n externalConditions: [\"vxrn-web\"]\n }\n },\n client: {\n resolve: {\n extensions: webExtensions,\n conditions: [\"vxrn-web\"]\n }\n }\n }\n };\n },\n load: {\n filter: { id: /^\\0server-only-stub:/ },\n handler(id) {\n const source = id.slice(\"\\0server-only-stub:\".length);\n return `throw new Error(\"[one] .server file cannot be imported on client: ${source}\")`;\n }\n },\n // vite's resolve.extensions already prefers platform variants for\n // extensionless imports in every environment (webExtensions /\n // ssrExtensions here, getNativeExtensions for ios+android), verified by\n // building with this hook disabled. the only thing left for this hook is\n // an import that already carries an extension, since resolve.extensions\n // only ever appends. so filter to those rust-side, plus bare `.server`\n // which still needs an extension appended to be recognised as a server\n // file. measured on onestack.dev this takes the hook from 25422 calls to\n // 6880.\n resolveId: {\n filter: { id: PLATFORM_RESOLVE_SOURCE_RE },\n async handler(source, importer, options) {\n if (options?.scan) return;\n let resolvedId;\n if (JS_EXTENSION_RE.test(source)) {\n if (source[0] === \"/\") {\n resolvedId = source;\n } else if (source[0] === \".\" && importer) {\n resolvedId = resolve(dirname(importer), source);\n }\n }\n if (!resolvedId) {\n const resolved = await this.resolve(source, importer, options);\n if (!resolved) return resolved;\n resolvedId = resolved.id;\n }\n if (resolvedId.includes(\"node_modules\")) {\n return;\n }\n if (this.environment.name !== \"ssr\" && this.environment.name !== \"worker\" && /\\.server\\.\\w+$/.test(resolvedId)) {\n return { id: `\\0server-only-stub:${source}` };\n }\n if (process.env.VXRN_SKIP_STRICTER_PLATFORM_RESOLVE) {\n return void 0;\n }\n const jsExtension = extname(resolvedId);\n const withoutExt = resolvedId.slice(0, resolvedId.length - jsExtension.length);\n const platformSpecificExtension = PLATFORM_EXTENSIONS_BY_ENVIRONMENT[this.environment.name];\n if (platformSpecificExtension) {\n for (const platformExtension of platformSpecificExtension) {\n const fullPath = `${withoutExt}.${platformExtension}${jsExtension}`;\n if (cachedPathExists(fullPath)) {\n return { id: fullPath, packageJsonPath: nearestPackageJson(fullPath) };\n }\n }\n }\n }\n },\n // adding or deleting a .web/.native sibling changes what a source\n // resolves to, so drop the exists cache when the watcher sees a change\n watchChange() {\n pathExistsCache.clear();\n }\n },\n // temp fix\n // avoid logging the optimizeDeps we add that aren't in the app:\n // likely we need a whole better solution to optimize deps\n {\n name: `avoid-optimize-logs`,\n configureServer() {\n const ogWarn = console.warn;\n console.warn = (...args) => {\n if (typeof args[0] === \"string\" && args[0].startsWith(`Failed to resolve dependency:`)) {\n return;\n }\n return ogWarn(...args);\n };\n }\n },\n createVXRNCompilerPlugin({})\n ];\n}\nexport {\n getBaseVitePlugins\n};\n//# sourceMappingURL=getBaseVitePlugins.js.map\n"],"mappings":";;;;;;;AAKA,MAAM,kBAAkB;AACxB,MAAM,6BAA6B;AACnC,MAAM,qCAAqC;CACzC,QAAQ,CAAC,KAAK;CACd,KAAK,CAAC,UAAU,KAAK;CACrB,QAAQ,CAAC,UAAU,KAAK;CACxB,KAAK,CAAC,OAAO,QAAQ;CACrB,SAAS,CAAC,WAAW,QAAQ;AAC/B;AACA,SAAS,qBAAqB;CAC5B,MAAM,kCAAkC,IAAI,IAAI;CAChD,IAAI,UAAU;CACd,SAAS,iBAAiB,MAAM;EAC9B,IAAI,CAAC,SAAS,OAAO,WAAW,IAAI;EACpC,MAAM,SAAS,gBAAgB,IAAI,IAAI;EACvC,IAAI,WAAW,KAAK,GAAG,OAAO;EAC9B,MAAM,SAAS,WAAW,IAAI;EAC9B,gBAAgB,IAAI,MAAM,MAAM;EAChC,OAAO;CACT;CACA,OAAO;EACL;GACE,MAAM;GACN,SAAS;GACT,OAAO,GAAG,EAAE,WAAW;IACrB,UAAU,YAAY;IACtB,OAAO;KACL,SAAS,CAKT;KACA,cAAc;MACZ,KAAK,EACH,SAAS;OACP,YAAY;OACZ,YAAY,CAAC,UAAU;OACvB,oBAAoB,CAAC,UAAU;MACjC,EACF;MACA,QAAQ,EACN,SAAS;OACP,YAAY;OACZ,YAAY,CAAC,UAAU;MACzB,EACF;KACF;IACF;GACF;GACA,MAAM;IACJ,QAAQ,EAAE,IAAI,uBAAuB;IACrC,QAAQ,IAAI;KACV,MAAM,SAAS,GAAG,MAAM,sBAAsB,MAAM;KACpD,OAAO,qEAAqE,OAAO;IACrF;GACF;GAUA,WAAW;IACT,QAAQ,EAAE,IAAI,2BAA2B;IACzC,MAAM,QAAQ,QAAQ,UAAU,SAAS;KACvC,IAAI,SAAS,MAAM;KACnB,IAAI;KACJ,IAAI,gBAAgB,KAAK,MAAM,GAAG;MAChC,IAAI,OAAO,OAAO,KAAK;OACrB,aAAa;MACf,OAAO,IAAI,OAAO,OAAO,OAAO,UAAU;OACxC,aAAa,QAAQ,QAAQ,QAAQ,GAAG,MAAM;MAChD;KACF;KACA,IAAI,CAAC,YAAY;MACf,MAAM,WAAW,MAAM,KAAK,QAAQ,QAAQ,UAAU,OAAO;MAC7D,IAAI,CAAC,UAAU,OAAO;MACtB,aAAa,SAAS;KACxB;KACA,IAAI,WAAW,SAAS,cAAc,GAAG;MACvC;KACF;KACA,IAAI,KAAK,YAAY,SAAS,SAAS,KAAK,YAAY,SAAS,YAAY,iBAAiB,KAAK,UAAU,GAAG;MAC9G,OAAO,EAAE,IAAI,sBAAsB,SAAS;KAC9C;KACA,IAAI,QAAQ,IAAI,qCAAqC;MACnD,OAAO,KAAK;KACd;KACA,MAAM,cAAc,QAAQ,UAAU;KACtC,MAAM,aAAa,WAAW,MAAM,GAAG,WAAW,SAAS,YAAY,MAAM;KAC7E,MAAM,4BAA4B,mCAAmC,KAAK,YAAY;KACtF,IAAI,2BAA2B;MAC7B,KAAK,MAAM,qBAAqB,2BAA2B;OACzD,MAAM,WAAW,GAAG,WAAW,GAAG,oBAAoB;OACtD,IAAI,iBAAiB,QAAQ,GAAG;QAC9B,OAAO;SAAE,IAAI;SAAU,iBAAiB,mBAAmB,QAAQ;QAAE;OACvE;MACF;KACF;IACF;GACF;GAGA,cAAc;IACZ,gBAAgB,MAAM;GACxB;EACF;EAIA;GACE,MAAM;GACN,kBAAkB;IAChB,MAAM,SAAS,QAAQ;IACvB,QAAQ,QAAQ,GAAG,SAAS;KAC1B,IAAI,OAAO,KAAK,OAAO,YAAY,KAAK,EAAE,CAAC,WAAW,+BAA+B,GAAG;MACtF;KACF;KACA,OAAO,OAAO,GAAG,IAAI;IACvB;GACF;EACF;EACA,yBAAyB,CAAC,CAAC;CAC7B;AACF"}
|
|
@@ -2,6 +2,7 @@ import { createVXRNCompilerPlugin } from "@vxrn/compiler";
|
|
|
2
2
|
import { existsSync } from "fs";
|
|
3
3
|
import { dirname, extname, resolve } from "path";
|
|
4
4
|
import { ssrExtensions, webExtensions } from "../constants.native.js";
|
|
5
|
+
import { nearestPackageJson } from "../utils/nearestPackageJson.native.js";
|
|
5
6
|
|
|
6
7
|
var JS_EXTENSION_RE = /\.[cm]?[jt]sx?$/;
|
|
7
8
|
var PLATFORM_RESOLVE_SOURCE_RE = /(?:\.[cm]?[jt]sx?|\.server)$/;
|
|
@@ -88,7 +89,10 @@ function getBaseVitePlugins() {
|
|
|
88
89
|
var platformExtension = _step.value;
|
|
89
90
|
var fullPath = `${withoutExt}.${platformExtension}${jsExtension}`;
|
|
90
91
|
if (cachedPathExists(fullPath)) {
|
|
91
|
-
return {
|
|
92
|
+
return {
|
|
93
|
+
id: fullPath,
|
|
94
|
+
packageJsonPath: nearestPackageJson(fullPath)
|
|
95
|
+
};
|
|
92
96
|
}
|
|
93
97
|
}
|
|
94
98
|
} catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getBaseVitePlugins.native.js","names":[],"sources":["config/getBaseVitePlugins.native.js"],"sourcesContent":["import { createVXRNCompilerPlugin } from \"@vxrn/compiler\";\nimport { existsSync } from \"fs\";\nimport { dirname, extname, resolve } from \"path\";\nimport { ssrExtensions, webExtensions } from \"../constants\";\nvar JS_EXTENSION_RE = /\\.[cm]?[jt]sx?$/;\nvar PLATFORM_RESOLVE_SOURCE_RE = /(?:\\.[cm]?[jt]sx?|\\.server)$/;\nvar PLATFORM_EXTENSIONS_BY_ENVIRONMENT = {\n client: [\n \"web\"\n ],\n ssr: [\n \"server\",\n \"web\"\n ],\n worker: [\n \"server\",\n \"web\"\n ],\n ios: [\n \"ios\",\n \"native\"\n ],\n android: [\n \"android\",\n \"native\"\n ]\n};\nfunction getBaseVitePlugins() {\n var pathExistsCache = /* @__PURE__ */ new Map();\n var isBuild = false;\n function cachedPathExists(path) {\n if (!isBuild) return existsSync(path);\n var cached = pathExistsCache.get(path);\n if (cached !== void 0) return cached;\n var exists = existsSync(path);\n pathExistsCache.set(path, exists);\n return exists;\n }\n return [\n {\n name: \"platform-specific-resolve\",\n enforce: \"pre\",\n config(_, param) {\n var { command } = param;\n isBuild = command === \"build\";\n return {\n resolve: {},\n // if this is on it breaks resolveId below\n // optimizeDeps config should apply to packages in monorepo\n // https://vite.dev/config/shared-options#resolve-preservesymlinks\n // preserveSymlinks: true,\n environments: {\n ssr: {\n resolve: {\n extensions: ssrExtensions,\n conditions: [\n \"vxrn-web\"\n ],\n externalConditions: [\n \"vxrn-web\"\n ]\n }\n },\n client: {\n resolve: {\n extensions: webExtensions,\n conditions: [\n \"vxrn-web\"\n ]\n }\n }\n }\n };\n },\n load: {\n filter: {\n id: /^\\0server-only-stub:/\n },\n handler(id) {\n var source = id.slice(\"\\0server-only-stub:\".length);\n return `throw new Error(\"[one] .server file cannot be imported on client: ${source}\")`;\n }\n },\n // vite's resolve.extensions already prefers platform variants for\n // extensionless imports in every environment (webExtensions /\n // ssrExtensions here, getNativeExtensions for ios+android), verified by\n // building with this hook disabled. the only thing left for this hook is\n // an import that already carries an extension, since resolve.extensions\n // only ever appends. so filter to those rust-side, plus bare `.server`\n // which still needs an extension appended to be recognised as a server\n // file. measured on onestack.dev this takes the hook from 25422 calls to\n // 6880.\n resolveId: {\n filter: {\n id: PLATFORM_RESOLVE_SOURCE_RE\n },\n async handler(source, importer, options) {\n if (options === null || options === void 0 ? void 0 : options.scan) return;\n var resolvedId;\n if (JS_EXTENSION_RE.test(source)) {\n if (source[0] === \"/\") {\n resolvedId = source;\n } else if (source[0] === \".\" && importer) {\n resolvedId = resolve(dirname(importer), source);\n }\n }\n if (!resolvedId) {\n var resolved = await this.resolve(source, importer, options);\n if (!resolved) return resolved;\n resolvedId = resolved.id;\n }\n if (resolvedId.includes(\"node_modules\")) {\n return;\n }\n if (this.environment.name !== \"ssr\" && this.environment.name !== \"worker\" && /\\.server\\.\\w+$/.test(resolvedId)) {\n return {\n id: `\\0server-only-stub:${source}`\n };\n }\n if (process.env.VXRN_SKIP_STRICTER_PLATFORM_RESOLVE) {\n return void 0;\n }\n var jsExtension = extname(resolvedId);\n var withoutExt = resolvedId.slice(0, resolvedId.length - jsExtension.length);\n var platformSpecificExtension = PLATFORM_EXTENSIONS_BY_ENVIRONMENT[this.environment.name];\n if (platformSpecificExtension) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = platformSpecificExtension[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var platformExtension = _step.value;\n var fullPath = `${withoutExt}.${platformExtension}${jsExtension}`;\n if (cachedPathExists(fullPath)) {\n return {\n id: fullPath\n };\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n }\n },\n // adding or deleting a .web/.native sibling changes what a source\n // resolves to, so drop the exists cache when the watcher sees a change\n watchChange() {\n pathExistsCache.clear();\n }\n },\n // temp fix\n // avoid logging the optimizeDeps we add that aren't in the app:\n // likely we need a whole better solution to optimize deps\n {\n name: `avoid-optimize-logs`,\n configureServer() {\n var ogWarn = console.warn;\n console.warn = function() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (typeof args[0] === \"string\" && args[0].startsWith(`Failed to resolve dependency:`)) {\n return;\n }\n return ogWarn(...args);\n };\n }\n },\n createVXRNCompilerPlugin({})\n ];\n}\nexport {\n getBaseVitePlugins\n};\n//# sourceMappingURL=getBaseVitePlugins.js.map\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"getBaseVitePlugins.native.js","names":[],"sources":["config/getBaseVitePlugins.native.js"],"sourcesContent":["import { createVXRNCompilerPlugin } from \"@vxrn/compiler\";\nimport { existsSync } from \"fs\";\nimport { dirname, extname, resolve } from \"path\";\nimport { ssrExtensions, webExtensions } from \"../constants\";\nimport { nearestPackageJson } from \"../utils/nearestPackageJson\";\nvar JS_EXTENSION_RE = /\\.[cm]?[jt]sx?$/;\nvar PLATFORM_RESOLVE_SOURCE_RE = /(?:\\.[cm]?[jt]sx?|\\.server)$/;\nvar PLATFORM_EXTENSIONS_BY_ENVIRONMENT = {\n client: [\n \"web\"\n ],\n ssr: [\n \"server\",\n \"web\"\n ],\n worker: [\n \"server\",\n \"web\"\n ],\n ios: [\n \"ios\",\n \"native\"\n ],\n android: [\n \"android\",\n \"native\"\n ]\n};\nfunction getBaseVitePlugins() {\n var pathExistsCache = /* @__PURE__ */ new Map();\n var isBuild = false;\n function cachedPathExists(path) {\n if (!isBuild) return existsSync(path);\n var cached = pathExistsCache.get(path);\n if (cached !== void 0) return cached;\n var exists = existsSync(path);\n pathExistsCache.set(path, exists);\n return exists;\n }\n return [\n {\n name: \"platform-specific-resolve\",\n enforce: \"pre\",\n config(_, param) {\n var { command } = param;\n isBuild = command === \"build\";\n return {\n resolve: {},\n // if this is on it breaks resolveId below\n // optimizeDeps config should apply to packages in monorepo\n // https://vite.dev/config/shared-options#resolve-preservesymlinks\n // preserveSymlinks: true,\n environments: {\n ssr: {\n resolve: {\n extensions: ssrExtensions,\n conditions: [\n \"vxrn-web\"\n ],\n externalConditions: [\n \"vxrn-web\"\n ]\n }\n },\n client: {\n resolve: {\n extensions: webExtensions,\n conditions: [\n \"vxrn-web\"\n ]\n }\n }\n }\n };\n },\n load: {\n filter: {\n id: /^\\0server-only-stub:/\n },\n handler(id) {\n var source = id.slice(\"\\0server-only-stub:\".length);\n return `throw new Error(\"[one] .server file cannot be imported on client: ${source}\")`;\n }\n },\n // vite's resolve.extensions already prefers platform variants for\n // extensionless imports in every environment (webExtensions /\n // ssrExtensions here, getNativeExtensions for ios+android), verified by\n // building with this hook disabled. the only thing left for this hook is\n // an import that already carries an extension, since resolve.extensions\n // only ever appends. so filter to those rust-side, plus bare `.server`\n // which still needs an extension appended to be recognised as a server\n // file. measured on onestack.dev this takes the hook from 25422 calls to\n // 6880.\n resolveId: {\n filter: {\n id: PLATFORM_RESOLVE_SOURCE_RE\n },\n async handler(source, importer, options) {\n if (options === null || options === void 0 ? void 0 : options.scan) return;\n var resolvedId;\n if (JS_EXTENSION_RE.test(source)) {\n if (source[0] === \"/\") {\n resolvedId = source;\n } else if (source[0] === \".\" && importer) {\n resolvedId = resolve(dirname(importer), source);\n }\n }\n if (!resolvedId) {\n var resolved = await this.resolve(source, importer, options);\n if (!resolved) return resolved;\n resolvedId = resolved.id;\n }\n if (resolvedId.includes(\"node_modules\")) {\n return;\n }\n if (this.environment.name !== \"ssr\" && this.environment.name !== \"worker\" && /\\.server\\.\\w+$/.test(resolvedId)) {\n return {\n id: `\\0server-only-stub:${source}`\n };\n }\n if (process.env.VXRN_SKIP_STRICTER_PLATFORM_RESOLVE) {\n return void 0;\n }\n var jsExtension = extname(resolvedId);\n var withoutExt = resolvedId.slice(0, resolvedId.length - jsExtension.length);\n var platformSpecificExtension = PLATFORM_EXTENSIONS_BY_ENVIRONMENT[this.environment.name];\n if (platformSpecificExtension) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = platformSpecificExtension[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var platformExtension = _step.value;\n var fullPath = `${withoutExt}.${platformExtension}${jsExtension}`;\n if (cachedPathExists(fullPath)) {\n return {\n id: fullPath,\n packageJsonPath: nearestPackageJson(fullPath)\n };\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n }\n },\n // adding or deleting a .web/.native sibling changes what a source\n // resolves to, so drop the exists cache when the watcher sees a change\n watchChange() {\n pathExistsCache.clear();\n }\n },\n // temp fix\n // avoid logging the optimizeDeps we add that aren't in the app:\n // likely we need a whole better solution to optimize deps\n {\n name: `avoid-optimize-logs`,\n configureServer() {\n var ogWarn = console.warn;\n console.warn = function() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (typeof args[0] === \"string\" && args[0].startsWith(`Failed to resolve dependency:`)) {\n return;\n }\n return ogWarn(...args);\n };\n }\n },\n createVXRNCompilerPlugin({})\n ];\n}\nexport {\n getBaseVitePlugins\n};\n//# sourceMappingURL=getBaseVitePlugins.js.map\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getOptimizeDeps.js","names":[],"sources":["config/getOptimizeDeps.js"],"sourcesContent":["import { webExtensions } from \"../constants\";\nfunction getOptimizeDeps(mode) {\n const needsInterop = [\n \"nativewind\",\n \"react-native-css-interop/jsx-runtime\",\n \"react-native-css-interop/jsx-dev-runtime\",\n \"react-native-css-interop\",\n \"secure-json-parse\",\n \"@react-native/normalize-colors\",\n \"@vxrn/safe-area\",\n \"@vxrn/vendor/react-19-prod\",\n \"@vxrn/vendor/react-19\",\n \"@vxrn/vendor/react-19-compiler-runtime\",\n \"@vxrn/vendor/react-dom-19\",\n \"@vxrn/vendor/react-dom-client-19\",\n \"@vxrn/vendor/react-dom-server.browser-19\",\n \"@vxrn/vendor/react-jsx-19\",\n \"@vxrn/vendor/react-jsx-dev-19\",\n \"react\",\n \"react/jsx-runtime\",\n \"react/jsx-dev-runtime\",\n \"react/compiler-runtime\",\n \"react-dom\",\n \"react-dom/server\",\n \"react-dom/client\",\n \"react-native-web-internals\",\n \"@react-native-masked-view/masked-view\",\n \"url-parse\",\n \"query-string\",\n \"escape-string-regexp\",\n \"use-latest-callback\",\n \"react-is\",\n \"fast-deep-equal\",\n \"@supabase/auth-helpers-react\",\n \"@supabase/postgres-js\",\n \"core-js\",\n \"parse-numeric-range\",\n \"use-sync-external-store\",\n \"use-sync-external-store/shim\",\n \"inline-style-prefixer\",\n \"@docsearch/react\",\n \"@algolia/autocomplete-core\",\n \"@algolia/autocomplete-plugin-algolia-insights\",\n \"@algolia/autocomplete-shared\",\n \"moti\"\n ];\n const depsToOptimize = [\n ...needsInterop,\n \"fast-xml-parser\",\n \"set-cookie-parser\",\n \"ipaddr.js\",\n \"cross-fetch\",\n \"pg\",\n \"react-native-svg\",\n \"react-native-screens\",\n \"ws\",\n \"lodash\",\n // added these when using a worker env\n \"reading-time\",\n \"mdx-bundler/client\",\n \"gray-matter\",\n \"glob\",\n \"memoize-one\",\n \"css-in-js-utils\",\n \"hyphenate-style-name\",\n \"use-sync-external-store\",\n \"react-native-reanimated\",\n // uses .web.js extensions\n \"@react-navigation/core\",\n \"@react-navigation/native\",\n \"@react-navigation/elements\",\n \"@react-navigation/bottom-tabs\",\n \"@react-navigation/native-stack\",\n \"one\",\n \"styleq\",\n \"fbjs\",\n \"@vxrn/universal-color-scheme\",\n \"@vxrn/color-scheme\",\n \"requires-port\",\n \"querystringify\",\n \"compare-versions\",\n \"strict-uri-encode\",\n \"decode-uri-component\",\n \"split-on-first\",\n \"filter-obj\",\n \"scheduler\",\n \"warn-once\",\n \"@radix-ui/react-compose-refs\",\n \"@radix-ui/react-slot\",\n \"nanoid\",\n \"swr\",\n \"swr/mutation\",\n \"one\",\n \"one/zero\",\n \"refractor/lang/tsx\",\n \"invariant\",\n \"tamagui/linear-gradient\",\n \"@react-native/normalize-color\",\n \"react-native\",\n \"@floating-ui/react\",\n \"@floating-ui/react-dom\",\n \"tamagui\",\n \"reforest\"\n ];\n if (mode === \"build\") {\n depsToOptimize.push(\"@babel/runtime\");\n }\n return {\n needsInterop,\n depsToOptimize,\n optimizeDeps: {\n include: depsToOptimize,\n exclude: [\n \"util\",\n \"@swc/wasm\",\n \"@swc/core-darwin-arm64\",\n \"moti/author\",\n \"@hot-updater/cli-tools\"\n ],\n needsInterop,\n // Enable lazy optimization - don't wait for all deps before starting server\n // This allows browser to process requests in parallel for faster initial load\n holdUntilCrawlEnd: false,\n rolldownOptions: {\n resolve: {\n extensions: webExtensions\n },\n // some packages ship JSX in .js files (e.g., react-native-css-interop/dist/doctor.js).\n // .ts/.tsx must be declared too. when es-module-lexer can't read a dep entry,\n // vite's extractExportsData retries it as `moduleTypes[extname] || 'jsx'`, and\n // lexer always fails on TS syntax, so an undeclared .ts entry gets re-parsed as\n // JSX and dies on the first inline type specifier (`import { type Foo }`).\n moduleTypes: { \".js\": \"jsx\", \".ts\": \"ts\", \".tsx\": \"tsx\" },\n // react-native packages import native-only exports (TurboModuleRegistry etc.)\n // from react-native, which is aliased to react-native-web on web. react-native-web\n // doesn't export these, so rolldown would error. shimMissingExports creates\n // undefined shims instead, matching esbuild's lenient behavior.\n shimMissingExports: true\n }\n }\n };\n}\nexport {\n getOptimizeDeps\n};\n//# sourceMappingURL=getOptimizeDeps.js.map\n"],"mappings":";;;AACA,SAAS,gBAAgB,MAAM;CAC7B,MAAM,eAAe;EACnB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,MAAM,iBAAiB;EACrB,GAAG;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,IAAI,SAAS,SAAS;EACpB,eAAe,KAAK,gBAAgB;CACtC;CACA,OAAO;EACL;EACA;EACA,cAAc;GACZ,SAAS;GACT,SAAS;IACP;IACA;IACA;IACA;IACA;GACF;GACA;GAGA,mBAAmB;GACnB,iBAAiB;IACf,SAAS,EACP,YAAY,cACd;IAMA,aAAa;KAAE,OAAO;KAAO,OAAO;KAAM,QAAQ;IAAM;IAKxD,oBAAoB;GACtB;EACF;CACF;AACF"}
|
|
1
|
+
{"version":3,"file":"getOptimizeDeps.js","names":[],"sources":["config/getOptimizeDeps.js"],"sourcesContent":["import { webExtensions } from \"../constants\";\nfunction getOptimizeDeps(mode) {\n const needsInterop = [\n \"nativewind\",\n \"react-native-css-interop/jsx-runtime\",\n \"react-native-css-interop/jsx-dev-runtime\",\n \"react-native-css-interop\",\n \"secure-json-parse\",\n \"@react-native/normalize-colors\",\n \"@vxrn/safe-area\",\n \"@vxrn/vendor/react-19-prod\",\n \"@vxrn/vendor/react-19\",\n \"@vxrn/vendor/react-19-compiler-runtime\",\n \"@vxrn/vendor/react-dom-19\",\n \"@vxrn/vendor/react-dom-client-19\",\n \"@vxrn/vendor/react-dom-server.browser-19\",\n \"@vxrn/vendor/react-jsx-19\",\n \"@vxrn/vendor/react-jsx-dev-19\",\n \"react\",\n \"react/jsx-runtime\",\n \"react/jsx-dev-runtime\",\n \"react/compiler-runtime\",\n \"react-dom\",\n \"react-dom/server\",\n \"react-dom/client\",\n \"react-native-web-internals\",\n \"@react-native-masked-view/masked-view\",\n \"url-parse\",\n \"query-string\",\n \"escape-string-regexp\",\n \"use-latest-callback\",\n \"react-is\",\n \"fast-deep-equal\",\n \"@supabase/auth-helpers-react\",\n \"@supabase/postgres-js\",\n \"core-js\",\n \"parse-numeric-range\",\n \"use-sync-external-store\",\n \"use-sync-external-store/shim\",\n \"inline-style-prefixer\",\n \"@docsearch/react\",\n \"@algolia/autocomplete-core\",\n \"@algolia/autocomplete-plugin-algolia-insights\",\n \"@algolia/autocomplete-shared\",\n \"moti\"\n ];\n const depsToOptimize = [\n ...needsInterop,\n \"fast-xml-parser\",\n \"set-cookie-parser\",\n \"ipaddr.js\",\n \"cross-fetch\",\n \"pg\",\n \"react-native-svg\",\n \"react-native-screens\",\n \"ws\",\n \"lodash\",\n // added these when using a worker env\n \"reading-time\",\n \"mdx-bundler/client\",\n \"gray-matter\",\n \"glob\",\n \"memoize-one\",\n \"css-in-js-utils\",\n \"hyphenate-style-name\",\n \"use-sync-external-store\",\n \"react-native-reanimated\",\n // uses .web.js extensions\n \"@react-navigation/core\",\n \"@react-navigation/native\",\n \"@react-navigation/elements\",\n \"@react-navigation/bottom-tabs\",\n \"@react-navigation/native-stack\",\n \"one\",\n \"styleq\",\n \"fbjs\",\n \"@vxrn/universal-color-scheme\",\n \"@vxrn/color-scheme\",\n \"requires-port\",\n \"querystringify\",\n \"compare-versions\",\n \"strict-uri-encode\",\n \"decode-uri-component\",\n \"split-on-first\",\n \"filter-obj\",\n \"scheduler\",\n \"warn-once\",\n \"@radix-ui/react-compose-refs\",\n \"@radix-ui/react-slot\",\n \"nanoid\",\n \"swr\",\n \"swr/mutation\",\n \"one\",\n \"one/zero\",\n \"refractor/lang/tsx\",\n \"invariant\",\n \"tamagui/linear-gradient\",\n \"@react-native/normalize-color\",\n \"react-native\",\n \"@floating-ui/react\",\n \"@floating-ui/react-dom\",\n \"tamagui\",\n \"reforest\"\n ];\n if (mode === \"build\") {\n depsToOptimize.push(\"@babel/runtime\");\n }\n return {\n needsInterop,\n depsToOptimize,\n optimizeDeps: {\n include: depsToOptimize,\n exclude: [\n \"util\",\n \"@swc/wasm\",\n \"@swc/core-darwin-arm64\",\n \"moti/author\",\n \"@hot-updater/cli-tools\"\n ],\n needsInterop,\n // Enable lazy optimization - don't wait for all deps before starting server\n // This allows browser to process requests in parallel for faster initial load\n holdUntilCrawlEnd: false,\n rolldownOptions: {\n resolve: {\n extensions: webExtensions\n },\n // expo reads its platform from this constant, which babel-preset-expo\n // inlines during transform. a pre-bundled dep never goes through babel,\n // so the constant has to be defined here or it reads as undefined and\n // every expo module in a client chunk takes its native branch. expo's\n // dev HMR client is the one that bites: setupHMR calls\n // HMRClient.setup({ isEnabled: true }), the web form, and the native\n // branch asserts a string platform, so the whole client fails to\n // initialize and every route renders blank. rolldown takes define under\n // `transform`, and vite's dep optimizer merges that one key into its own\n // define; a top-level `define` is typed `never` and is rejected outright.\n transform: {\n define: {\n \"process.env.EXPO_OS\": '\"web\"'\n }\n },\n // some packages ship JSX in .js files (e.g., react-native-css-interop/dist/doctor.js).\n // .ts/.tsx must be declared too. when es-module-lexer can't read a dep entry,\n // vite's extractExportsData retries it as `moduleTypes[extname] || 'jsx'`, and\n // lexer always fails on TS syntax, so an undeclared .ts entry gets re-parsed as\n // JSX and dies on the first inline type specifier (`import { type Foo }`).\n moduleTypes: { \".js\": \"jsx\", \".ts\": \"ts\", \".tsx\": \"tsx\" },\n // react-native packages import native-only exports (TurboModuleRegistry etc.)\n // from react-native, which is aliased to react-native-web on web. react-native-web\n // doesn't export these, so rolldown would error. shimMissingExports creates\n // undefined shims instead, matching esbuild's lenient behavior.\n shimMissingExports: true\n }\n }\n };\n}\nexport {\n getOptimizeDeps\n};\n//# sourceMappingURL=getOptimizeDeps.js.map\n"],"mappings":";;;AACA,SAAS,gBAAgB,MAAM;CAC7B,MAAM,eAAe;EACnB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,MAAM,iBAAiB;EACrB,GAAG;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,IAAI,SAAS,SAAS;EACpB,eAAe,KAAK,gBAAgB;CACtC;CACA,OAAO;EACL;EACA;EACA,cAAc;GACZ,SAAS;GACT,SAAS;IACP;IACA;IACA;IACA;IACA;GACF;GACA;GAGA,mBAAmB;GACnB,iBAAiB;IACf,SAAS,EACP,YAAY,cACd;IAWA,WAAW,EACT,QAAQ,EACN,uBAAuB,UACzB,EACF;IAMA,aAAa;KAAE,OAAO;KAAO,OAAO;KAAM,QAAQ;IAAM;IAKxD,oBAAoB;GACtB;EACF;CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getOptimizeDeps.native.js","names":[],"sources":["config/getOptimizeDeps.native.js"],"sourcesContent":["import { webExtensions } from \"../constants\";\nfunction getOptimizeDeps(mode) {\n var needsInterop = [\n \"nativewind\",\n \"react-native-css-interop/jsx-runtime\",\n \"react-native-css-interop/jsx-dev-runtime\",\n \"react-native-css-interop\",\n \"secure-json-parse\",\n \"@react-native/normalize-colors\",\n \"@vxrn/safe-area\",\n \"@vxrn/vendor/react-19-prod\",\n \"@vxrn/vendor/react-19\",\n \"@vxrn/vendor/react-19-compiler-runtime\",\n \"@vxrn/vendor/react-dom-19\",\n \"@vxrn/vendor/react-dom-client-19\",\n \"@vxrn/vendor/react-dom-server.browser-19\",\n \"@vxrn/vendor/react-jsx-19\",\n \"@vxrn/vendor/react-jsx-dev-19\",\n \"react\",\n \"react/jsx-runtime\",\n \"react/jsx-dev-runtime\",\n \"react/compiler-runtime\",\n \"react-dom\",\n \"react-dom/server\",\n \"react-dom/client\",\n \"react-native-web-internals\",\n \"@react-native-masked-view/masked-view\",\n \"url-parse\",\n \"query-string\",\n \"escape-string-regexp\",\n \"use-latest-callback\",\n \"react-is\",\n \"fast-deep-equal\",\n \"@supabase/auth-helpers-react\",\n \"@supabase/postgres-js\",\n \"core-js\",\n \"parse-numeric-range\",\n \"use-sync-external-store\",\n \"use-sync-external-store/shim\",\n \"inline-style-prefixer\",\n \"@docsearch/react\",\n \"@algolia/autocomplete-core\",\n \"@algolia/autocomplete-plugin-algolia-insights\",\n \"@algolia/autocomplete-shared\",\n \"moti\"\n ];\n var depsToOptimize = [\n ...needsInterop,\n \"fast-xml-parser\",\n \"set-cookie-parser\",\n \"ipaddr.js\",\n \"cross-fetch\",\n \"pg\",\n \"react-native-svg\",\n \"react-native-screens\",\n \"ws\",\n \"lodash\",\n // added these when using a worker env\n \"reading-time\",\n \"mdx-bundler/client\",\n \"gray-matter\",\n \"glob\",\n \"memoize-one\",\n \"css-in-js-utils\",\n \"hyphenate-style-name\",\n \"use-sync-external-store\",\n \"react-native-reanimated\",\n // uses .web.js extensions\n \"@react-navigation/core\",\n \"@react-navigation/native\",\n \"@react-navigation/elements\",\n \"@react-navigation/bottom-tabs\",\n \"@react-navigation/native-stack\",\n \"one\",\n \"styleq\",\n \"fbjs\",\n \"@vxrn/universal-color-scheme\",\n \"@vxrn/color-scheme\",\n \"requires-port\",\n \"querystringify\",\n \"compare-versions\",\n \"strict-uri-encode\",\n \"decode-uri-component\",\n \"split-on-first\",\n \"filter-obj\",\n \"scheduler\",\n \"warn-once\",\n \"@radix-ui/react-compose-refs\",\n \"@radix-ui/react-slot\",\n \"nanoid\",\n \"swr\",\n \"swr/mutation\",\n \"one\",\n \"one/zero\",\n \"refractor/lang/tsx\",\n \"invariant\",\n \"tamagui/linear-gradient\",\n \"@react-native/normalize-color\",\n \"react-native\",\n \"@floating-ui/react\",\n \"@floating-ui/react-dom\",\n \"tamagui\",\n \"reforest\"\n ];\n if (mode === \"build\") {\n depsToOptimize.push(\"@babel/runtime\");\n }\n return {\n needsInterop,\n depsToOptimize,\n optimizeDeps: {\n include: depsToOptimize,\n exclude: [\n \"util\",\n \"@swc/wasm\",\n \"@swc/core-darwin-arm64\",\n \"moti/author\",\n \"@hot-updater/cli-tools\"\n ],\n needsInterop,\n // Enable lazy optimization - don't wait for all deps before starting server\n // This allows browser to process requests in parallel for faster initial load\n holdUntilCrawlEnd: false,\n rolldownOptions: {\n resolve: {\n extensions: webExtensions\n },\n // some packages ship JSX in .js files (e.g., react-native-css-interop/dist/doctor.js).\n // .ts/.tsx must be declared too. when es-module-lexer can't read a dep entry,\n // vite's extractExportsData retries it as `moduleTypes[extname] || 'jsx'`, and\n // lexer always fails on TS syntax, so an undeclared .ts entry gets re-parsed as\n // JSX and dies on the first inline type specifier (`import { type Foo }`).\n moduleTypes: {\n \".js\": \"jsx\",\n \".ts\": \"ts\",\n \".tsx\": \"tsx\"\n },\n // react-native packages import native-only exports (TurboModuleRegistry etc.)\n // from react-native, which is aliased to react-native-web on web. react-native-web\n // doesn't export these, so rolldown would error. shimMissingExports creates\n // undefined shims instead, matching esbuild's lenient behavior.\n shimMissingExports: true\n }\n }\n };\n}\nexport {\n getOptimizeDeps\n};\n//# sourceMappingURL=getOptimizeDeps.js.map\n"],"mappings":";;;AACA,SAAS,gBAAgB,MAAM;CAC7B,IAAI,eAAe;EACjB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,IAAI,iBAAiB;EACnB,GAAG;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,IAAI,SAAS,SAAS;EACpB,eAAe,KAAK,gBAAgB;CACtC;CACA,OAAO;EACL;EACA;EACA,cAAc;GACZ,SAAS;GACT,SAAS;IACP;IACA;IACA;IACA;IACA;GACF;GACA;GAGA,mBAAmB;GACnB,iBAAiB;IACf,SAAS,EACP,YAAY,cACd;IAMA,aAAa;KACX,OAAO;KACP,OAAO;KACP,QAAQ;IACV;IAKA,oBAAoB;GACtB;EACF;CACF;AACF"}
|
|
1
|
+
{"version":3,"file":"getOptimizeDeps.native.js","names":[],"sources":["config/getOptimizeDeps.native.js"],"sourcesContent":["import { webExtensions } from \"../constants\";\nfunction getOptimizeDeps(mode) {\n var needsInterop = [\n \"nativewind\",\n \"react-native-css-interop/jsx-runtime\",\n \"react-native-css-interop/jsx-dev-runtime\",\n \"react-native-css-interop\",\n \"secure-json-parse\",\n \"@react-native/normalize-colors\",\n \"@vxrn/safe-area\",\n \"@vxrn/vendor/react-19-prod\",\n \"@vxrn/vendor/react-19\",\n \"@vxrn/vendor/react-19-compiler-runtime\",\n \"@vxrn/vendor/react-dom-19\",\n \"@vxrn/vendor/react-dom-client-19\",\n \"@vxrn/vendor/react-dom-server.browser-19\",\n \"@vxrn/vendor/react-jsx-19\",\n \"@vxrn/vendor/react-jsx-dev-19\",\n \"react\",\n \"react/jsx-runtime\",\n \"react/jsx-dev-runtime\",\n \"react/compiler-runtime\",\n \"react-dom\",\n \"react-dom/server\",\n \"react-dom/client\",\n \"react-native-web-internals\",\n \"@react-native-masked-view/masked-view\",\n \"url-parse\",\n \"query-string\",\n \"escape-string-regexp\",\n \"use-latest-callback\",\n \"react-is\",\n \"fast-deep-equal\",\n \"@supabase/auth-helpers-react\",\n \"@supabase/postgres-js\",\n \"core-js\",\n \"parse-numeric-range\",\n \"use-sync-external-store\",\n \"use-sync-external-store/shim\",\n \"inline-style-prefixer\",\n \"@docsearch/react\",\n \"@algolia/autocomplete-core\",\n \"@algolia/autocomplete-plugin-algolia-insights\",\n \"@algolia/autocomplete-shared\",\n \"moti\"\n ];\n var depsToOptimize = [\n ...needsInterop,\n \"fast-xml-parser\",\n \"set-cookie-parser\",\n \"ipaddr.js\",\n \"cross-fetch\",\n \"pg\",\n \"react-native-svg\",\n \"react-native-screens\",\n \"ws\",\n \"lodash\",\n // added these when using a worker env\n \"reading-time\",\n \"mdx-bundler/client\",\n \"gray-matter\",\n \"glob\",\n \"memoize-one\",\n \"css-in-js-utils\",\n \"hyphenate-style-name\",\n \"use-sync-external-store\",\n \"react-native-reanimated\",\n // uses .web.js extensions\n \"@react-navigation/core\",\n \"@react-navigation/native\",\n \"@react-navigation/elements\",\n \"@react-navigation/bottom-tabs\",\n \"@react-navigation/native-stack\",\n \"one\",\n \"styleq\",\n \"fbjs\",\n \"@vxrn/universal-color-scheme\",\n \"@vxrn/color-scheme\",\n \"requires-port\",\n \"querystringify\",\n \"compare-versions\",\n \"strict-uri-encode\",\n \"decode-uri-component\",\n \"split-on-first\",\n \"filter-obj\",\n \"scheduler\",\n \"warn-once\",\n \"@radix-ui/react-compose-refs\",\n \"@radix-ui/react-slot\",\n \"nanoid\",\n \"swr\",\n \"swr/mutation\",\n \"one\",\n \"one/zero\",\n \"refractor/lang/tsx\",\n \"invariant\",\n \"tamagui/linear-gradient\",\n \"@react-native/normalize-color\",\n \"react-native\",\n \"@floating-ui/react\",\n \"@floating-ui/react-dom\",\n \"tamagui\",\n \"reforest\"\n ];\n if (mode === \"build\") {\n depsToOptimize.push(\"@babel/runtime\");\n }\n return {\n needsInterop,\n depsToOptimize,\n optimizeDeps: {\n include: depsToOptimize,\n exclude: [\n \"util\",\n \"@swc/wasm\",\n \"@swc/core-darwin-arm64\",\n \"moti/author\",\n \"@hot-updater/cli-tools\"\n ],\n needsInterop,\n // Enable lazy optimization - don't wait for all deps before starting server\n // This allows browser to process requests in parallel for faster initial load\n holdUntilCrawlEnd: false,\n rolldownOptions: {\n resolve: {\n extensions: webExtensions\n },\n // expo reads its platform from this constant, which babel-preset-expo\n // inlines during transform. a pre-bundled dep never goes through babel,\n // so the constant has to be defined here or it reads as undefined and\n // every expo module in a client chunk takes its native branch. expo's\n // dev HMR client is the one that bites: setupHMR calls\n // HMRClient.setup({ isEnabled: true }), the web form, and the native\n // branch asserts a string platform, so the whole client fails to\n // initialize and every route renders blank. rolldown takes define under\n // `transform`, and vite's dep optimizer merges that one key into its own\n // define; a top-level `define` is typed `never` and is rejected outright.\n transform: {\n define: {\n \"process.env.EXPO_OS\": '\"web\"'\n }\n },\n // some packages ship JSX in .js files (e.g., react-native-css-interop/dist/doctor.js).\n // .ts/.tsx must be declared too. when es-module-lexer can't read a dep entry,\n // vite's extractExportsData retries it as `moduleTypes[extname] || 'jsx'`, and\n // lexer always fails on TS syntax, so an undeclared .ts entry gets re-parsed as\n // JSX and dies on the first inline type specifier (`import { type Foo }`).\n moduleTypes: {\n \".js\": \"jsx\",\n \".ts\": \"ts\",\n \".tsx\": \"tsx\"\n },\n // react-native packages import native-only exports (TurboModuleRegistry etc.)\n // from react-native, which is aliased to react-native-web on web. react-native-web\n // doesn't export these, so rolldown would error. shimMissingExports creates\n // undefined shims instead, matching esbuild's lenient behavior.\n shimMissingExports: true\n }\n }\n };\n}\nexport {\n getOptimizeDeps\n};\n//# sourceMappingURL=getOptimizeDeps.js.map\n"],"mappings":";;;AACA,SAAS,gBAAgB,MAAM;CAC7B,IAAI,eAAe;EACjB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,IAAI,iBAAiB;EACnB,GAAG;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,IAAI,SAAS,SAAS;EACpB,eAAe,KAAK,gBAAgB;CACtC;CACA,OAAO;EACL;EACA;EACA,cAAc;GACZ,SAAS;GACT,SAAS;IACP;IACA;IACA;IACA;IACA;GACF;GACA;GAGA,mBAAmB;GACnB,iBAAiB;IACf,SAAS,EACP,YAAY,cACd;IAWA,WAAW,EACT,QAAQ,EACN,uBAAuB,UACzB,EACF;IAMA,aAAa;KACX,OAAO;KACP,OAAO;KACP,QAAQ;IACV;IAKA,oBAAoB;GACtB;EACF;CACF;AACF"}
|
|
@@ -5,6 +5,7 @@ import { pathToFileURL } from "node:url";
|
|
|
5
5
|
import { validateNativeApp } from "@vxrn/utils/nativeAppManifest";
|
|
6
6
|
import FSExtra from "fs-extra";
|
|
7
7
|
import sharp from "sharp";
|
|
8
|
+
import { swiftPackageId } from "../utils/swiftPackageId.mjs";
|
|
8
9
|
|
|
9
10
|
const nativeProjectPatches = module.createRequire(import.meta.url)("../../native-project-patches.cjs");
|
|
10
11
|
const validatePrebuildApp = validateNativeApp;
|
|
@@ -382,7 +383,7 @@ async function generateSplashScreen(args) {
|
|
|
382
383
|
`);
|
|
383
384
|
}
|
|
384
385
|
function renderPrebuildFile(args) {
|
|
385
|
-
const { relativePath, content, platform, app } = args;
|
|
386
|
+
const { relativePath, content, platform, app, nitroWebImage } = args;
|
|
386
387
|
const appName = app.name;
|
|
387
388
|
const schemes = app.scheme === void 0 ? [] : Array.isArray(app.scheme) ? app.scheme : [app.scheme];
|
|
388
389
|
let destRelativePath = transformPath(relativePath);
|
|
@@ -444,6 +445,25 @@ ${anchor}`);
|
|
|
444
445
|
rendered = rendered.replace(anchor, `${anchor}
|
|
445
446
|
<uses-permission android:name="android.permission.CAMERA" />`);
|
|
446
447
|
}
|
|
448
|
+
if (platform === "android" && relativePath === "app/src/main/AndroidManifest.xml" && app.android?.googleMapsApiKey !== void 0) {
|
|
449
|
+
const anchor = " </application>";
|
|
450
|
+
if (!rendered.includes(anchor)) {
|
|
451
|
+
throw new Error("[vxrn] cannot stamp the maps api key: expected </application> in app/src/main/AndroidManifest.xml");
|
|
452
|
+
}
|
|
453
|
+
rendered = rendered.replace(anchor, ` <meta-data android:name="com.google.android.geo.API_KEY" android:value="${escapeXml(app.android.googleMapsApiKey)}" />
|
|
454
|
+
${anchor}`);
|
|
455
|
+
}
|
|
456
|
+
if (platform === "android" && relativePath === "gradle.properties" && app.android?.googleMapsApiKey !== void 0) {
|
|
457
|
+
const line = "oneNativeMaps=true";
|
|
458
|
+
if (!rendered.includes(line)) {
|
|
459
|
+
const trailed = rendered.endsWith("\n") ? rendered : `${rendered}
|
|
460
|
+
`;
|
|
461
|
+
rendered = `${trailed}
|
|
462
|
+
# One.UI.Map: set by native.app.android.googleMapsApiKey.
|
|
463
|
+
${line}
|
|
464
|
+
`;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
447
467
|
if (platform === "android" && relativePath === "app/src/main/AndroidManifest.xml" && schemes.length) {
|
|
448
468
|
rendered = rendered.replace(" </activity>", ` <intent-filter>
|
|
449
469
|
<action android:name="android.intent.action.VIEW" />
|
|
@@ -508,6 +528,8 @@ use_frameworks! :linkage => :${app.ios.useFrameworks}`);
|
|
|
508
528
|
rendered = nativeProjectPatches.injectReactNativeScreensGammaIntoPodfile(rendered);
|
|
509
529
|
}
|
|
510
530
|
rendered = nativeProjectPatches.injectFmtCxx17FixIntoPodfile(rendered);
|
|
531
|
+
rendered = nativeProjectPatches.injectOneSwiftPackagesIntoPodfile(rendered);
|
|
532
|
+
if (nitroWebImage) rendered = nativeProjectPatches.injectNitroWebImageModularHeaderIntoPodfile(rendered);
|
|
511
533
|
rendered = nativeProjectPatches.injectHermesMinificationPatchIntoPodfile(rendered);
|
|
512
534
|
if (!rendered.includes("[vxrn/one] fmt c++17 fix") || !rendered.includes("[vxrn/one] minify iOS Hermes Release bundle input")) {
|
|
513
535
|
throw new Error("[vxrn] failed to apply required iOS Podfile patches");
|
|
@@ -554,6 +576,7 @@ const generateForPlatform = async (root, platform, app, outDir = path.resolve(ro
|
|
|
554
576
|
throw new Error("[vxrn] could not resolve the community template walker");
|
|
555
577
|
}
|
|
556
578
|
const files = [...walkFn(src)].sort();
|
|
579
|
+
const nitroWebImage = platform === "ios" && nativeProjectPatches.hasNitroWebImage(root);
|
|
557
580
|
FSExtra.removeSync(dest);
|
|
558
581
|
for (const absoluteSrc of files) {
|
|
559
582
|
const relativeFilePath = path.relative(src, absoluteSrc);
|
|
@@ -569,7 +592,8 @@ const generateForPlatform = async (root, platform, app, outDir = path.resolve(ro
|
|
|
569
592
|
relativePath: relativeFilePath,
|
|
570
593
|
content: raw,
|
|
571
594
|
platform,
|
|
572
|
-
app
|
|
595
|
+
app,
|
|
596
|
+
nitroWebImage
|
|
573
597
|
});
|
|
574
598
|
const destPath = path.resolve(dest, destRelativePath);
|
|
575
599
|
FSExtra.mkdirSync(path.dirname(destPath), { recursive: true });
|
|
@@ -600,7 +624,83 @@ const generateForPlatform = async (root, platform, app, outDir = path.resolve(ro
|
|
|
600
624
|
platform,
|
|
601
625
|
app
|
|
602
626
|
});
|
|
627
|
+
if (platform === "ios") generateSwiftPackages({
|
|
628
|
+
root,
|
|
629
|
+
dest
|
|
630
|
+
});
|
|
603
631
|
};
|
|
632
|
+
function generateSwiftPackages({ root, dest }) {
|
|
633
|
+
const skip = /* @__PURE__ */ new Set([
|
|
634
|
+
"node_modules",
|
|
635
|
+
"ios",
|
|
636
|
+
"android",
|
|
637
|
+
"dist",
|
|
638
|
+
"types",
|
|
639
|
+
"build"
|
|
640
|
+
]);
|
|
641
|
+
const packageDirs = [];
|
|
642
|
+
const walk = (dir) => {
|
|
643
|
+
const entries = FSExtra.readdirSync(dir, { withFileTypes: true });
|
|
644
|
+
if (entries.some((entry) => entry.isFile() && entry.name === "Package.swift")) {
|
|
645
|
+
packageDirs.push(dir);
|
|
646
|
+
return;
|
|
647
|
+
}
|
|
648
|
+
for (const entry of entries) {
|
|
649
|
+
if (!entry.isDirectory() || entry.name.startsWith(".") || skip.has(entry.name)) continue;
|
|
650
|
+
walk(path.join(dir, entry.name));
|
|
651
|
+
}
|
|
652
|
+
};
|
|
653
|
+
walk(root);
|
|
654
|
+
for (const packageDir of packageDirs) {
|
|
655
|
+
const id = swiftPackageId(packageDir);
|
|
656
|
+
const podDir = path.join(dest, "OneSwiftPackages", id);
|
|
657
|
+
const sources = [];
|
|
658
|
+
const collect = (dir) => {
|
|
659
|
+
for (const entry of FSExtra.readdirSync(dir, { withFileTypes: true })) {
|
|
660
|
+
if (entry.name.startsWith(".") || entry.name === "node_modules") continue;
|
|
661
|
+
const full = path.join(dir, entry.name);
|
|
662
|
+
if (entry.isDirectory()) collect(full);
|
|
663
|
+
else if (entry.name.endsWith(".swift") && entry.name !== "Package.swift") sources.push(full);
|
|
664
|
+
}
|
|
665
|
+
};
|
|
666
|
+
collect(packageDir);
|
|
667
|
+
for (const source of sources) {
|
|
668
|
+
const link = path.join(podDir, "Sources", path.relative(packageDir, source));
|
|
669
|
+
FSExtra.mkdirSync(path.dirname(link), { recursive: true });
|
|
670
|
+
FSExtra.symlinkSync(FSExtra.realpathSync(source), link);
|
|
671
|
+
}
|
|
672
|
+
FSExtra.writeFileSync(path.join(podDir, `${id}.podspec`), `Pod::Spec.new do |s|
|
|
673
|
+
s.name = '${id}'
|
|
674
|
+
s.version = '0.0.0'
|
|
675
|
+
s.summary = 'swift package ${path.relative(root, packageDir) || "."}'
|
|
676
|
+
s.homepage = 'https://onestack.dev'
|
|
677
|
+
s.license = 'MIT'
|
|
678
|
+
s.author = 'one'
|
|
679
|
+
s.source = { :path => '.' }
|
|
680
|
+
s.swift_version = '6.0'
|
|
681
|
+
s.source_files = 'Sources/**/*.swift', 'Register.m'
|
|
682
|
+
s.dependency 'VxrnNative'
|
|
683
|
+
s.pod_target_xcconfig = {
|
|
684
|
+
'OTHER_SWIFT_FLAGS' => '$(inherited) -Xfrontend -import-module -Xfrontend VxrnNative -Xfrontend -entry-point-function-name -Xfrontend ${id}_main',
|
|
685
|
+
}
|
|
686
|
+
end
|
|
687
|
+
`);
|
|
688
|
+
FSExtra.writeFileSync(path.join(podDir, "Register.m"), `#import <Foundation/Foundation.h>
|
|
689
|
+
|
|
690
|
+
extern int ${id}_main(int argc, char **argv);
|
|
691
|
+
extern void OneSwiftRegisterPackage(const char *name, int (*entry)(int, char **));
|
|
692
|
+
|
|
693
|
+
@interface OneSwiftPackage_${id} : NSObject
|
|
694
|
+
@end
|
|
695
|
+
|
|
696
|
+
@implementation OneSwiftPackage_${id}
|
|
697
|
+
+ (void)load {
|
|
698
|
+
OneSwiftRegisterPackage("${id}", ${id}_main);
|
|
699
|
+
}
|
|
700
|
+
@end
|
|
701
|
+
`);
|
|
702
|
+
}
|
|
703
|
+
}
|
|
604
704
|
function applyAndroidDependencyPatches(args) {
|
|
605
705
|
const { root, app, inventory } = args;
|
|
606
706
|
if (!app.android || !inventory.some((dependency) => dependency.name === "react-native-screens" && dependency.platforms.includes("android"))) {
|