packages feed

convex-schema-parser-0.1.3.0: app/Init.hs

module Init (runInit) where

defaultConfig :: String
defaultConfig =
  unlines
    [ "# Configuration for the Convex Client Generator.",
      "",
      "# (Required) The absolute path to the root of your Convex project.",
      "# This is the directory that contains the `convex/` folder and `package.json`.",
      "# NOTE: The parser expands `~` and `$HOME` environment variables.",
      "project_path: \"/path/to/your/convex/project\"",
      "",
      "# (Required) The absolute path to the generated TypeScript declarations.",
      "declarations_dir: \"/path/to/your/tmp/declarations\"",
      "",
      "# (Optional) The path where validation sandbox projects will be created.",
      "# Defaults to `~/.config/convex-schema-parser` if omitted.",
      "validation_path: \"~/.config/convex-schema-parser\"",
      "",
      "# (Required) A list of generation targets. You can have one or more.",
      "targets:",
      "  # Example 1: Generate a Rust client for a backend service.",
      "  - lang: Rust",
      "    # A list of one or more output files for this target.",
      "    output:",
      "      - /path/to/my-rust-app/src/convex_api.rs",
      "",
      "  # Example 2: Generate a Python client for data scripts.",
      "  - lang: Python",
      "    output:",
      "      - /path/to/scripts/lib/convex_client.py"
    ]

-- | Creates a default configuration file at the specified path.
runInit :: FilePath -> IO ()
runInit configPath = do
  putStrLn $ "Creating default configuration file at: " ++ configPath
  writeFile configPath defaultConfig
  putStrLn "Configuration file created successfully. Please edit it with your project paths."
  mapM_
    putStrLn
    [ "You will also need a `tsconfig.declarations.json` file next to your `package.json`.",
      "",
      "Example `tsconfig.declarations.json`:",
      "",
      "```",
      "{",
      "  \"compilerOptions\": {",
      "    // --- Output Configuration ---",
      "    \"outDir\": \"./tmp/declarations\", // Output all files to a temporary directory",
      "    \"rootDir\": \"./convex\",          // The root of the source files we care about",
      "",
      "    // --- Generation Settings ---",
      "    \"declaration\": true,            // Generate .d.ts files",
      "    \"emitDeclarationOnly\": true,    // Don't generate any .js files",
      "    \"skipLibCheck\": true,           // Speeds up compilation by not checking library files",
      "",
      "    // --- Module Settings (to match Convex) ---",
      "    \"module\": \"commonjs\",",
      "    \"target\": \"es2020\"",
      "  },",
      "  // Tell tsc where to find the files to compile",
      "  \"include\": [\"convex/**/*.ts\"]",
      "}",
      "```",
      "",
      "Also, adapt your `package.config` with a script that is called by this generator:",
      "",
      "```",
      "  \"scripts\": {",
      "    \"declarations:clean\": \"rm -rf tmp\",",
      "    \"declarations:build\": \"tsc -p tsconfig.declarations.json\",",
      "    \"declarations:copy-generated\": \"cp -r convex/_generated tmp/declarations/\",",
      "    \"declarations\": \"npm run declarations:clean && npm run declarations:build && npm run declarations:copy-generated\",",
      "  },",
      "```",
      "",
      "If that is done, you are all set to use `dev`. (:"
    ]