Skip to content
Snippets Groups Projects
create-app.ts 1.87 KiB
Newer Older
  • Learn to ignore specific revisions
  • /* eslint-disable import/no-extraneous-dependencies */
    
    Marcus Schiesser's avatar
    Marcus Schiesser committed
    import path from "path";
    
    import { green } from "picocolors";
    
    Marcus Schiesser's avatar
    Marcus Schiesser committed
    import type { PackageManager } from "./helpers/get-pkg-manager";
    import { tryGitInit } from "./helpers/git";
    import { isFolderEmpty } from "./helpers/is-folder-empty";
    import { getOnline } from "./helpers/is-online";
    import { isWriteable } from "./helpers/is-writeable";
    import { makeDir } from "./helpers/make-dir";
    
    import type {
      TemplateEngine,
      TemplateFramework,
      TemplateType,
    
    import { installTemplate } from "./templates";
    
    
    export async function createApp({
    
      appPath,
      packageManager,
      eslint,
    }: {
    
      template: TemplateType;
    
    Marcus Schiesser's avatar
    Marcus Schiesser committed
      appPath: string;
      packageManager: PackageManager;
      eslint: boolean;
    
    }): Promise<void> {
    
    Marcus Schiesser's avatar
    Marcus Schiesser committed
      const root = path.resolve(appPath);
    
    
      if (!(await isWriteable(path.dirname(root)))) {
        console.error(
    
    Marcus Schiesser's avatar
    Marcus Schiesser committed
          "The application path is not writable, please check folder permissions and try again.",
        );
    
        console.error(
    
    Marcus Schiesser's avatar
    Marcus Schiesser committed
          "It is likely you do not have write permissions for this folder.",
        );
        process.exit(1);
    
    Marcus Schiesser's avatar
    Marcus Schiesser committed
      const appName = path.basename(root);
    
    Marcus Schiesser's avatar
    Marcus Schiesser committed
      await makeDir(root);
    
      if (!isFolderEmpty(root, appName)) {
    
    Marcus Schiesser's avatar
    Marcus Schiesser committed
        process.exit(1);
    
    Marcus Schiesser's avatar
    Marcus Schiesser committed
      const useYarn = packageManager === "yarn";
      const isOnline = !useYarn || (await getOnline());
    
    Marcus Schiesser's avatar
    Marcus Schiesser committed
      console.log(`Creating a new LlamaIndex app in ${green(root)}.`);
      console.log();
    
    Marcus Schiesser's avatar
    Marcus Schiesser committed
      process.chdir(root);
    
      await installTemplate({
        appName,
        root,
        template,
    
        packageManager,
        isOnline,
        eslint,
      });
    
    
      if (tryGitInit(root)) {
    
    Marcus Schiesser's avatar
    Marcus Schiesser committed
        console.log("Initialized a git repository.");
        console.log();
    
    Marcus Schiesser's avatar
    Marcus Schiesser committed
      console.log(`${green("Success!")} Created ${appName} at ${appPath}`);
      console.log();