create-w3-app
Version:
Create ethereum dApps with w3 stack
74 lines (69 loc) • 1.93 kB
text/typescript
import { privyInstaller } from "~/installers/privy.js";
import { rainbowInstaller } from "~/installers/rainbow.js";
import { shadcnInstaller } from "~/installers/shadcn.js";
import { tailwindInstaller } from "~/installers/tailwind.js";
import { type PackageManager } from "~/utils/getUserPkgManager.js";
import { biomeInstaller } from "./biome.js";
import { envVariablesInstaller } from "./envVars.js";
import { dynamicEslintInstaller } from "./eslint.js";
// Turning this into a const allows the list to be iterated over for programmatically creating prompt options
// Should increase extensibility in the future
export const availablePackages = [
"tailwind",
"shadcn",
"privy",
"rainbow",
"envVariables",
"eslint",
"biome",
] as const;
export type AvailablePackages = (typeof availablePackages)[number];
export interface InstallerOptions {
projectDir: string;
pkgManager: PackageManager;
noInstall: boolean;
packages?: PkgInstallerMap;
appRouter?: boolean;
projectName: string;
scopedAppName: string;
}
export type Installer = (opts: InstallerOptions) => void;
export type PkgInstallerMap = Record<
AvailablePackages,
{
inUse: boolean;
installer: Installer;
}
>;
export const buildPkgInstallerMap = (
packages: AvailablePackages[]
): PkgInstallerMap => ({
tailwind: {
inUse: packages.includes("tailwind"),
installer: tailwindInstaller,
},
shadcn: {
inUse: packages.includes("shadcn"),
installer: shadcnInstaller,
},
privy: {
inUse: packages.includes("privy"),
installer: privyInstaller,
},
rainbow: {
inUse: packages.includes("rainbow"),
installer: rainbowInstaller,
},
envVariables: {
inUse: true,
installer: envVariablesInstaller,
},
eslint: {
inUse: packages.includes("eslint"),
installer: dynamicEslintInstaller,
},
biome: {
inUse: packages.includes("biome"),
installer: biomeInstaller,
},
});