@reliverse/rse-sdk
Version:
@reliverse/rse-sdk without cli. @reliverse/rse-sdk allows you to create new plugins for @reliverse/rse CLI, interact with reliverse.org, and even extend your own CLI functionality (you may also try @reliverse/dler-sdk for this case).
73 lines (72 loc) • 2.83 kB
JavaScript
import { re } from "@reliverse/relico";
import fs from "@reliverse/relifso";
import { relinka } from "@reliverse/relinka";
import { spinner } from "@reliverse/rempts";
import { execa } from "execa";
import path from "node:path";
import { addPackageDependency } from "../../utils/add-package-deps.js";
import { getPackageExecutionCommand } from "../../utils/get-package-execution-command.js";
export async function setupTauri(config) {
const { packageManager, frontend, projectDir } = config;
const s = spinner();
const clientPackageDir = path.join(projectDir, "apps/web");
if (!await fs.pathExists(clientPackageDir)) {
return;
}
try {
s.start("Setting up Tauri desktop app support...");
await addPackageDependency({
devDependencies: ["@tauri-apps/cli"],
projectDir: clientPackageDir
});
const clientPackageJsonPath = path.join(clientPackageDir, "package.json");
if (await fs.pathExists(clientPackageJsonPath)) {
const packageJson = await fs.readJson(
clientPackageJsonPath
);
packageJson.scripts = {
...packageJson.scripts,
tauri: "tauri",
"desktop:dev": "tauri dev",
"desktop:build": "tauri build"
};
await fs.writeJson(clientPackageJsonPath, packageJson, { spaces: 2 });
}
const _hasTanstackRouter = frontend.includes("tanstack-router");
const hasReactRouter = frontend.includes("react-router");
const hasNuxt = frontend.includes("nuxt");
const hasSvelte = frontend.includes("svelte");
const _hasSolid = frontend.includes("solid");
const hasNext = frontend.includes("next");
const devUrl = hasReactRouter || hasSvelte ? "http://localhost:5173" : hasNext ? "http://localhost:3001" : "http://localhost:3001";
const frontendDist = hasNuxt ? "../.output/public" : hasSvelte ? "../build" : hasNext ? "../.next" : hasReactRouter ? "../build/client" : "../dist";
const tauriArgs = [
"init",
`--app-name=${path.basename(projectDir)}`,
`--window-title=${path.basename(projectDir)}`,
`--frontend-dist=${frontendDist}`,
`--dev-url=${devUrl}`,
`--before-dev-command="${packageManager} run dev"`,
`--before-build-command="${packageManager} run build"`
];
const tauriArgsString = tauriArgs.join(" ");
const commandWithArgs = `@tauri-apps/cli@latest ${tauriArgsString}`;
const tauriInitCommand = getPackageExecutionCommand(
packageManager,
commandWithArgs
);
await execa(tauriInitCommand, {
cwd: clientPackageDir,
env: {
CI: "true"
},
shell: true
});
s.stop("Tauri desktop app support configured successfully!");
} catch (error) {
s.stop(re.red("Failed to set up Tauri"));
if (error instanceof Error) {
relinka("error", error.message);
}
}
}