@stackable-labs/cli-app-extension 1.5.0 → 1.6.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.
- package/dist/index.js +36 -8
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1787,12 +1787,23 @@ var writeDevContext = async (projectRoot, ctx) => {
|
|
|
1787
1787
|
};
|
|
1788
1788
|
|
|
1789
1789
|
// src/lib/tunnel.ts
|
|
1790
|
-
import {
|
|
1791
|
-
var startTunnel =
|
|
1792
|
-
const
|
|
1793
|
-
const
|
|
1794
|
-
|
|
1795
|
-
|
|
1790
|
+
import { Tunnel } from "cloudflared";
|
|
1791
|
+
var startTunnel = (port) => new Promise((resolve, reject) => {
|
|
1792
|
+
const tunnel = Tunnel.quick(`http://localhost:${port}`);
|
|
1793
|
+
const timeout = setTimeout(() => {
|
|
1794
|
+
tunnel.stop();
|
|
1795
|
+
reject(new Error("Tunnel connection timed out after 30s"));
|
|
1796
|
+
}, 3e4);
|
|
1797
|
+
tunnel.once("url", (url) => {
|
|
1798
|
+
console.log(`>>> > startTunnel > url:`, { url });
|
|
1799
|
+
clearTimeout(timeout);
|
|
1800
|
+
resolve({ url, stop: () => tunnel.stop() });
|
|
1801
|
+
});
|
|
1802
|
+
tunnel.once("error", (err) => {
|
|
1803
|
+
clearTimeout(timeout);
|
|
1804
|
+
reject(err);
|
|
1805
|
+
});
|
|
1806
|
+
});
|
|
1796
1807
|
|
|
1797
1808
|
// src/lib/devServer.ts
|
|
1798
1809
|
import { spawn } from "child_process";
|
|
@@ -1935,38 +1946,49 @@ var DevApp = ({ options = {} }) => {
|
|
|
1935
1946
|
const useRestore = options.restore !== false;
|
|
1936
1947
|
useEffect6(() => {
|
|
1937
1948
|
const projectRoot = options.dir || process.cwd();
|
|
1949
|
+
console.log(`[dev] Reading context from ${projectRoot}`);
|
|
1938
1950
|
readDevContext(projectRoot).then((ctx) => {
|
|
1951
|
+
console.log(`[dev] Context loaded: extension="${ctx.extensionName}" appId=${ctx.appId ?? "(missing)"} extensionId=${ctx.extensionId ?? "(missing)"}`);
|
|
1939
1952
|
setDevContext(ctx);
|
|
1940
1953
|
});
|
|
1941
1954
|
}, [options.dir]);
|
|
1942
1955
|
const handleSetupReady = useCallback2(async (resolved) => {
|
|
1943
1956
|
if (!devContext) return;
|
|
1944
1957
|
setResolvedContext(resolved);
|
|
1958
|
+
console.log(`[dev] Saving context: appId=${resolved.appId} extensionId=${resolved.extensionId}`);
|
|
1945
1959
|
await writeDevContext(devContext.projectRoot, {
|
|
1946
1960
|
...devContext,
|
|
1947
1961
|
appId: resolved.appId,
|
|
1948
1962
|
extensionId: resolved.extensionId
|
|
1949
1963
|
});
|
|
1950
1964
|
const extensionPort = options.extensionPort ? parseInt(options.extensionPort, 10) : devContext.extensionPort;
|
|
1965
|
+
console.log(`[dev] Starting dev server in ${devContext.projectRoot}`);
|
|
1951
1966
|
const serverHandle = startDevServer(devContext.projectRoot);
|
|
1952
1967
|
setDevServerHandle(serverHandle);
|
|
1953
1968
|
if (useTunnel) {
|
|
1954
1969
|
try {
|
|
1970
|
+
console.log(`[dev] Starting tunnel on port ${extensionPort}...`);
|
|
1955
1971
|
const tunnelResult = await startTunnel(extensionPort);
|
|
1972
|
+
console.log(`[dev] Tunnel ready: ${tunnelResult.url}`);
|
|
1956
1973
|
setTunnelHandle(tunnelResult);
|
|
1957
1974
|
setTunnelUrl(tunnelResult.url);
|
|
1958
1975
|
if (useUpdate) {
|
|
1959
1976
|
const originalUrl = `http://localhost:${extensionPort}`;
|
|
1960
1977
|
setOriginalBundleUrl(originalUrl);
|
|
1978
|
+
console.log(`[dev] Updating bundleUrl to ${tunnelResult.url}`);
|
|
1961
1979
|
await updateExtension(resolved.appId, resolved.extensionId, {
|
|
1962
1980
|
bundleUrl: tunnelResult.url
|
|
1963
1981
|
});
|
|
1982
|
+
console.log("[dev] bundleUrl updated successfully");
|
|
1964
1983
|
setBundleUrlUpdated(true);
|
|
1965
1984
|
}
|
|
1966
1985
|
} catch (err) {
|
|
1967
|
-
console.error("Failed to start tunnel:", err);
|
|
1986
|
+
console.error("[dev] Failed to start tunnel:", err);
|
|
1968
1987
|
}
|
|
1988
|
+
} else {
|
|
1989
|
+
console.log("[dev] Tunnel disabled (--no-tunnel)");
|
|
1969
1990
|
}
|
|
1991
|
+
console.log("[dev] Ready");
|
|
1970
1992
|
setState("running");
|
|
1971
1993
|
}, [devContext, options.extensionPort, useTunnel, useUpdate]);
|
|
1972
1994
|
useEffect6(() => {
|
|
@@ -1980,21 +2002,27 @@ var DevApp = ({ options = {} }) => {
|
|
|
1980
2002
|
const handleQuit = async () => {
|
|
1981
2003
|
if (!devContext || !resolvedContext) return;
|
|
1982
2004
|
setState("stopping");
|
|
2005
|
+
console.log("[dev] Shutting down...");
|
|
1983
2006
|
try {
|
|
1984
2007
|
if (useRestore && originalBundleUrl) {
|
|
2008
|
+
console.log(`[dev] Restoring bundleUrl to ${originalBundleUrl}`);
|
|
1985
2009
|
await updateExtension(resolvedContext.appId, resolvedContext.extensionId, {
|
|
1986
2010
|
bundleUrl: originalBundleUrl
|
|
1987
2011
|
});
|
|
2012
|
+
console.log("[dev] bundleUrl restored");
|
|
1988
2013
|
}
|
|
1989
2014
|
if (tunnelHandle) {
|
|
2015
|
+
console.log("[dev] Stopping tunnel");
|
|
1990
2016
|
tunnelHandle.stop();
|
|
1991
2017
|
}
|
|
1992
2018
|
if (devServerHandle) {
|
|
2019
|
+
console.log("[dev] Stopping dev server");
|
|
1993
2020
|
devServerHandle.stop();
|
|
1994
2021
|
}
|
|
1995
2022
|
} catch (err) {
|
|
1996
|
-
console.error("Error during cleanup:", err);
|
|
2023
|
+
console.error("[dev] Error during cleanup:", err);
|
|
1997
2024
|
}
|
|
2025
|
+
console.log("[dev] Done");
|
|
1998
2026
|
process.exit(0);
|
|
1999
2027
|
};
|
|
2000
2028
|
if (state === "setup" && devContext) {
|