@tamagui/native-ci 2.0.0-rc.9 → 2.1.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.
@@ -1,43 +0,0 @@
1
- import { execSync } from "node:child_process";
2
- import { createHash } from "node:crypto";
3
- import { existsSync, readFileSync } from "node:fs";
4
- import { join } from "node:path";
5
- async function generateFingerprint(options) {
6
- const { platform, projectRoot = process.cwd(), debug = !1 } = options, appJsonPath = join(projectRoot, "app.json");
7
- if (!existsSync(appJsonPath))
8
- throw new Error(`No app.json found at ${projectRoot}. Is this an Expo project?`);
9
- const execOptions = {
10
- cwd: projectRoot,
11
- encoding: "utf-8",
12
- stdio: debug ? "inherit" : ["pipe", "pipe", "pipe"]
13
- };
14
- try {
15
- const result = execSync(
16
- `npx @expo/fingerprint fingerprint:generate --platform ${platform}`,
17
- execOptions
18
- ), parsed = JSON.parse(result);
19
- return {
20
- hash: parsed.hash,
21
- sources: parsed.sources || []
22
- };
23
- } catch (error) {
24
- const err = error;
25
- throw new Error(
26
- `Failed to generate ${platform} fingerprint: ${err.message}${err.stderr ? `
27
- ${err.stderr}` : ""}`
28
- );
29
- }
30
- }
31
- function generatePreFingerprintHash(files, projectRoot = process.cwd()) {
32
- const hash = createHash("sha256");
33
- for (const file of files) {
34
- const filePath = join(projectRoot, file);
35
- existsSync(filePath) && hash.update(readFileSync(filePath));
36
- }
37
- return hash.digest("hex").slice(0, 16);
38
- }
39
- export {
40
- generateFingerprint,
41
- generatePreFingerprintHash
42
- };
43
- //# sourceMappingURL=fingerprint.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/fingerprint.ts"],
4
- "mappings": "AAAA,SAAS,gBAAsC;AAC/C,SAAS,kBAAkB;AAC3B,SAAS,YAAY,oBAAoB;AACzC,SAAS,YAAY;AAkBrB,eAAsB,oBACpB,SAC4B;AAC5B,QAAM,EAAE,UAAU,cAAc,QAAQ,IAAI,GAAG,QAAQ,GAAM,IAAI,SAG3D,cAAc,KAAK,aAAa,UAAU;AAChD,MAAI,CAAC,WAAW,WAAW;AACzB,UAAM,IAAI,MAAM,wBAAwB,WAAW,4BAA4B;AAGjF,QAAM,cAA+B;AAAA,IACnC,KAAK;AAAA,IACL,UAAU;AAAA,IACV,OAAO,QAAQ,YAAY,CAAC,QAAQ,QAAQ,MAAM;AAAA,EACpD;AAEA,MAAI;AACF,UAAM,SAAS;AAAA,MACb,yDAAyD,QAAQ;AAAA,MACjE;AAAA,IACF,GAEM,SAAS,KAAK,MAAM,MAAM;AAEhC,WAAO;AAAA,MACL,MAAM,OAAO;AAAA,MACb,SAAS,OAAO,WAAW,CAAC;AAAA,IAC9B;AAAA,EACF,SAAS,OAAO;AACd,UAAM,MAAM;AACZ,UAAM,IAAI;AAAA,MACR,sBAAsB,QAAQ,iBAAiB,IAAI,OAAO,GAAG,IAAI,SAAS;AAAA,EAAK,IAAI,MAAM,KAAK,EAAE;AAAA,IAClG;AAAA,EACF;AACF;AAMO,SAAS,2BACd,OACA,cAAsB,QAAQ,IAAI,GAC1B;AACR,QAAM,OAAO,WAAW,QAAQ;AAEhC,aAAW,QAAQ,OAAO;AACxB,UAAM,WAAW,KAAK,aAAa,IAAI;AACvC,IAAI,WAAW,QAAQ,KACrB,KAAK,OAAO,aAAa,QAAQ,CAAC;AAAA,EAEtC;AAEA,SAAO,KAAK,OAAO,KAAK,EAAE,MAAM,GAAG,EAAE;AACvC;",
5
- "names": []
6
- }
package/dist/metro.js DELETED
@@ -1,114 +0,0 @@
1
- import { execSync } from "node:child_process";
2
- import {
3
- METRO_URL,
4
- METRO_PORT,
5
- DEFAULT_METRO_WAIT_ATTEMPTS,
6
- DEFAULT_METRO_WAIT_INTERVAL_MS
7
- } from "./constants";
8
- async function waitForMetro(options) {
9
- const {
10
- platform,
11
- maxAttempts = DEFAULT_METRO_WAIT_ATTEMPTS,
12
- intervalMs = DEFAULT_METRO_WAIT_INTERVAL_MS
13
- } = options;
14
- console.info("Waiting for Metro to start...");
15
- for (let i = 1; i <= maxAttempts; i++) {
16
- try {
17
- if ((await fetch(`${METRO_URL}/`, {
18
- headers: { "Expo-Platform": platform }
19
- })).ok)
20
- return console.info("Metro is responding!"), !0;
21
- } catch {
22
- }
23
- console.info(`Waiting for Metro... (${i}/${maxAttempts})`), await Bun.sleep(intervalMs);
24
- }
25
- return !1;
26
- }
27
- async function prewarmBundle(platform) {
28
- console.info("Pre-warming bundle...");
29
- try {
30
- const response = await fetch(`${METRO_URL}/`, {
31
- headers: { "Expo-Platform": platform }
32
- });
33
- if (response.ok) {
34
- const bundleUrl = (await response.json())?.launchAsset?.url;
35
- bundleUrl ? (console.info(`Fetching bundle from: ${bundleUrl}`), await fetch(bundleUrl), console.info("Bundle pre-warmed!")) : console.info("No bundle URL found in manifest, skipping pre-warm");
36
- }
37
- } catch {
38
- console.info("Bundle pre-warm completed (with error, continuing)");
39
- }
40
- }
41
- function startMetro() {
42
- console.info(`
43
- --- Starting Metro bundler ---`);
44
- const isCI = !!process.env.CI, args = ["bun", "expo", "start", "--dev-client", "--offline"];
45
- isCI && (args.push("--clear"), console.info("CI detected: clearing Metro cache"));
46
- const proc = Bun.spawn(args, {
47
- env: { ...process.env, EXPO_NO_TELEMETRY: "true" },
48
- stdout: "inherit",
49
- stderr: "inherit"
50
- });
51
- return {
52
- proc,
53
- kill: async () => {
54
- const pid = proc.pid;
55
- if (pid)
56
- try {
57
- await Bun.spawn(["pkill", "-P", String(pid)], {
58
- stdout: "ignore",
59
- stderr: "ignore"
60
- }).exited;
61
- } catch {
62
- }
63
- proc.kill("SIGKILL"), console.info("Metro stopped");
64
- }
65
- };
66
- }
67
- function setupSignalHandlers(metro) {
68
- const cleanup = async (signal) => {
69
- console.info(`
70
- Received ${signal}, cleaning up...`), await metro.kill(), process.exit(signal === "SIGINT" ? 130 : 143);
71
- };
72
- process.on("SIGINT", () => cleanup("SIGINT")), process.on("SIGTERM", () => cleanup("SIGTERM"));
73
- }
74
- async function isMetroRunning(platform) {
75
- try {
76
- return (await fetch(`${METRO_URL}/`, {
77
- headers: { "Expo-Platform": platform }
78
- })).ok;
79
- } catch {
80
- return !1;
81
- }
82
- }
83
- function killPortProcess() {
84
- try {
85
- const pid = execSync(`lsof -ti tcp:${METRO_PORT} -sTCP:LISTEN`, {
86
- encoding: "utf-8"
87
- }).trim();
88
- pid && (console.info(`Killing process ${pid} on port ${METRO_PORT}...`), process.kill(Number(pid), "SIGTERM"));
89
- } catch {
90
- }
91
- }
92
- async function withMetro(platform, fn) {
93
- if (await isMetroRunning(platform))
94
- return console.info(`
95
- --- Metro already running, reusing existing instance ---`), await prewarmBundle(platform), await fn();
96
- killPortProcess();
97
- const metro = startMetro();
98
- setupSignalHandlers(metro);
99
- try {
100
- if (!await waitForMetro({ platform }))
101
- throw new Error("Metro failed to start within timeout");
102
- return await prewarmBundle(platform), await fn();
103
- } finally {
104
- await metro.kill();
105
- }
106
- }
107
- export {
108
- prewarmBundle,
109
- setupSignalHandlers,
110
- startMetro,
111
- waitForMetro,
112
- withMetro
113
- };
114
- //# sourceMappingURL=metro.js.map
package/dist/metro.js.map DELETED
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/metro.ts"],
4
- "mappings": "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",
5
- "names": []
6
- }
package/dist/runner.js DELETED
@@ -1,73 +0,0 @@
1
- import { execSync } from "node:child_process";
2
- import { appendFileSync } from "node:fs";
3
- import { createCacheKey, loadCache, saveCache } from "./cache";
4
- import { generateFingerprint } from "./fingerprint";
5
- async function runWithCache(options) {
6
- const {
7
- platform,
8
- buildCommand,
9
- outputPaths,
10
- projectRoot = process.cwd(),
11
- cachePrefix = "native-build",
12
- debug = !1
13
- } = options, log = debug ? console.log : () => {
14
- };
15
- log(`Generating ${platform} fingerprint...`);
16
- const { hash: fingerprint } = await generateFingerprint({
17
- platform,
18
- projectRoot,
19
- debug
20
- });
21
- log(`Fingerprint: ${fingerprint}`);
22
- const cacheKey = createCacheKey({ platform, fingerprint, prefix: cachePrefix });
23
- log(`Cache key: ${cacheKey}`);
24
- const cached = loadCache(cacheKey);
25
- if (cached && cached.fingerprint === fingerprint)
26
- return log("Cache hit! Skipping build."), {
27
- cacheHit: !0,
28
- fingerprint,
29
- cacheKey,
30
- outputPaths
31
- };
32
- log(`Running build: ${buildCommand}`);
33
- const execOptions = {
34
- cwd: projectRoot,
35
- stdio: debug ? "inherit" : ["pipe", "pipe", "pipe"]
36
- };
37
- try {
38
- execSync(buildCommand, execOptions);
39
- } catch (error) {
40
- const err = error;
41
- throw new Error(`Build failed: ${err.message}${err.stderr ? `
42
- ${err.stderr}` : ""}`);
43
- }
44
- return saveCache(cacheKey, {
45
- fingerprint,
46
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
47
- platform,
48
- outputPaths
49
- }), {
50
- cacheHit: !1,
51
- fingerprint,
52
- cacheKey,
53
- outputPaths
54
- };
55
- }
56
- function setGitHubOutput(name, value) {
57
- const outputFile = process.env.GITHUB_OUTPUT;
58
- outputFile ? appendFileSync(outputFile, `${name}=${value}
59
- `) : console.info(`[GitHub Output] ${name}=${value}`);
60
- }
61
- function isGitHubActions() {
62
- return !!process.env.GITHUB_ACTIONS;
63
- }
64
- function isCI() {
65
- return !!process.env.CI;
66
- }
67
- export {
68
- isCI,
69
- isGitHubActions,
70
- runWithCache,
71
- setGitHubOutput
72
- };
73
- //# sourceMappingURL=runner.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/runner.ts"],
4
- "mappings": "AAAA,SAAS,gBAAsC;AAC/C,SAAS,sBAAsB;AAC/B,SAAS,gBAAgB,WAAW,iBAAiB;AACrD,SAAS,2BAA2B;AAwBpC,eAAsB,aACpB,SAC6B;AAC7B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc,QAAQ,IAAI;AAAA,IAC1B,cAAc;AAAA,IACd,QAAQ;AAAA,EACV,IAAI,SAEE,MAAM,QAAQ,QAAQ,MAAM,MAAM;AAAA,EAAC;AAGzC,MAAI,cAAc,QAAQ,iBAAiB;AAC3C,QAAM,EAAE,MAAM,YAAY,IAAI,MAAM,oBAAoB;AAAA,IACtD;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,MAAI,gBAAgB,WAAW,EAAE;AAGjC,QAAM,WAAW,eAAe,EAAE,UAAU,aAAa,QAAQ,YAAY,CAAC;AAC9E,MAAI,cAAc,QAAQ,EAAE;AAE5B,QAAM,SAAS,UAAsD,QAAQ;AAE7E,MAAI,UAAU,OAAO,gBAAgB;AACnC,eAAI,4BAA4B,GACzB;AAAA,MACL,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAIF,MAAI,kBAAkB,YAAY,EAAE;AACpC,QAAM,cAA+B;AAAA,IACnC,KAAK;AAAA,IACL,OAAO,QAAQ,YAAY,CAAC,QAAQ,QAAQ,MAAM;AAAA,EACpD;AAEA,MAAI;AACF,aAAS,cAAc,WAAW;AAAA,EACpC,SAAS,OAAO;AACd,UAAM,MAAM;AACZ,UAAM,IAAI,MAAM,iBAAiB,IAAI,OAAO,GAAG,IAAI,SAAS;AAAA,EAAK,IAAI,MAAM,KAAK,EAAE,EAAE;AAAA,EACtF;AAGA,mBAAU,UAAU;AAAA,IAClB;AAAA,IACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IAClC;AAAA,IACA;AAAA,EACF,CAAC,GAEM;AAAA,IACL,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAMO,SAAS,gBAAgB,MAAc,OAAqB;AACjE,QAAM,aAAa,QAAQ,IAAI;AAC/B,EAAI,aACF,eAAe,YAAY,GAAG,IAAI,IAAI,KAAK;AAAA,CAAI,IAG/C,QAAQ,KAAK,mBAAmB,IAAI,IAAI,KAAK,EAAE;AAEnD;AAKO,SAAS,kBAA2B;AACzC,SAAO,CAAC,CAAC,QAAQ,IAAI;AACvB;AAKO,SAAS,OAAgB;AAC9B,SAAO,CAAC,CAAC,QAAQ,IAAI;AACvB;",
5
- "names": []
6
- }