UNPKG

@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).

106 lines (105 loc) 3.61 kB
import fs from "@reliverse/relifso"; import path from "node:path"; import { addPackageDependency } from "../../utils/add-package-deps.js"; import { setupStarlight } from "./starlight-setup.js"; import { setupTauri } from "./tauri-setup.js"; export async function setupAddons(config) { const { addons, frontend, projectDir } = config; const hasReactWebFrontend = frontend.includes("react-router") || frontend.includes("tanstack-router") || frontend.includes("next"); const hasNuxtFrontend = frontend.includes("nuxt"); const hasSvelteFrontend = frontend.includes("svelte"); const hasSolidFrontend = frontend.includes("solid"); const hasNextFrontend = frontend.includes("next"); if (addons.includes("turborepo")) { await addPackageDependency({ devDependencies: ["turbo"], projectDir }); } if (addons.includes("pwa") && (hasReactWebFrontend || hasSolidFrontend)) { await setupPwa(projectDir, frontend); } if (addons.includes("tauri") && (hasReactWebFrontend || hasNuxtFrontend || hasSvelteFrontend || hasSolidFrontend || hasNextFrontend)) { await setupTauri(config); } if (addons.includes("biome")) { await setupBiome(projectDir); } if (addons.includes("husky")) { await setupHusky(projectDir); } if (addons.includes("starlight")) { await setupStarlight(config); } } function getWebAppDir(projectDir, frontends) { if (frontends.some( (f) => ["react-router", "tanstack-router", "nuxt", "svelte", "solid"].includes( f ) )) { return path.join(projectDir, "apps/web"); } return path.join(projectDir, "apps/web"); } async function setupBiome(projectDir) { await addPackageDependency({ devDependencies: ["@biomejs/biome"], projectDir }); const packageJsonPath = path.join(projectDir, "package.json"); if (await fs.pathExists(packageJsonPath)) { const packageJson = await fs.readJson(packageJsonPath); packageJson.scripts = { ...packageJson.scripts, check: "biome check --write ." }; await fs.writeJson(packageJsonPath, packageJson, { spaces: 2 }); } } async function setupHusky(projectDir) { await addPackageDependency({ devDependencies: ["husky", "lint-staged"], projectDir }); const packageJsonPath = path.join(projectDir, "package.json"); if (await fs.pathExists(packageJsonPath)) { const packageJson = await fs.readJson(packageJsonPath); packageJson.scripts = { ...packageJson.scripts, prepare: "husky" }; packageJson["lint-staged"] = { "*.{js,ts,cjs,mjs,d.cts,d.mts,jsx,tsx,json,jsonc}": [ "biome check --write ." ] }; await fs.writeJson(packageJsonPath, packageJson, { spaces: 2 }); } } async function setupPwa(projectDir, frontends) { const isCompatibleFrontend = frontends.some( (f) => ["react-router", "tanstack-router", "solid"].includes(f) ); if (!isCompatibleFrontend) return; const clientPackageDir = getWebAppDir(projectDir, frontends); if (!await fs.pathExists(clientPackageDir)) { return; } await addPackageDependency({ dependencies: ["vite-plugin-pwa"], devDependencies: ["@vite-pwa/assets-generator"], projectDir: clientPackageDir }); const clientPackageJsonPath = path.join(clientPackageDir, "package.json"); if (await fs.pathExists(clientPackageJsonPath)) { const packageJson = await fs.readJson( clientPackageJsonPath ); packageJson.scripts = { ...packageJson.scripts, "generate-pwa-assets": "pwa-assets-generator" }; await fs.writeJson(clientPackageJsonPath, packageJson, { spaces: 2 }); } }