@farm.js/create-app 0.1.0-beta.26 → 0.1.0-beta.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/bin/create-farm-app.js +1 -0
  2. package/dist/index.js +52 -2
  3. package/dist/index.js.map +1 -1
  4. package/dist/index.mjs +52 -2
  5. package/dist/index.mjs.map +1 -1
  6. package/package.json +1 -1
  7. package/templates/_renderers/solid/farm.config.ts +12 -0
  8. package/templates/_renderers/solid/package.json +26 -0
  9. package/templates/_renderers/solid/src/app/api/greeting/route.ts +15 -0
  10. package/templates/_renderers/solid/src/app/layout.tsx +15 -0
  11. package/templates/_renderers/solid/src/app/page.tsx +56 -0
  12. package/templates/_renderers/solid/src/app/solid.css +22 -0
  13. package/templates/_renderers/solid/src/components/resource-links.tsx +71 -0
  14. package/templates/_renderers/solid/src/lib/api-client.ts +4 -0
  15. package/templates/_renderers/solid/src/lib/api.generated.ts +7 -0
  16. package/templates/_renderers/solid/tsconfig.json +25 -0
  17. package/templates/_renderers/vue/farm.config.ts +12 -0
  18. package/templates/_renderers/vue/package.json +27 -0
  19. package/templates/_renderers/vue/src/app/api/greeting/route.ts +15 -0
  20. package/templates/_renderers/vue/src/app/layout.vue +21 -0
  21. package/templates/_renderers/vue/src/app/page.vue +69 -0
  22. package/templates/_renderers/vue/src/app/vue.css +26 -0
  23. package/templates/_renderers/vue/src/components/resource-links.vue +33 -0
  24. package/templates/_renderers/vue/src/env.d.ts +7 -0
  25. package/templates/_renderers/vue/src/lib/api-client.ts +4 -0
  26. package/templates/_renderers/vue/src/lib/api.generated.ts +7 -0
  27. package/templates/_renderers/vue/tsconfig.json +23 -0
  28. package/templates/auth/package.json +3 -3
  29. package/templates/basic/package.json +2 -2
  30. package/templates/better-auth/package.json +3 -3
@@ -10,6 +10,7 @@ program
10
10
  .version(version)
11
11
  .argument("[project-name]", "Name of the project")
12
12
  .option("-t, --template <template>", "Template to use")
13
+ .option("-r, --renderer <renderer>", "Rendering library to use (react, solid, or vue)")
13
14
  .option("--list-templates", "List all available starter templates")
14
15
  .option("--typescript", "Use TypeScript template")
15
16
  .option("--skip-install", "Skip installing dependencies")
package/dist/index.js CHANGED
@@ -2721,6 +2721,46 @@ async function createApp(projectName, options = {}) {
2721
2721
  require_utils.logger.error(`Unknown template "${template}". Available: ${templates.map((t) => `"${t}"`).join(", ")}`);
2722
2722
  process.exit(1);
2723
2723
  }
2724
+ let renderer = options.renderer?.toLowerCase();
2725
+ if (renderer && renderer !== "react" && renderer !== "solid" && renderer !== "vue") {
2726
+ require_utils.logger.error(`Unknown renderer "${options.renderer}". Available: "react", "solid", "vue".`);
2727
+ process.exit(1);
2728
+ }
2729
+ if (!renderer && !options.template && template === "basic") {
2730
+ const response = await (0, prompts.default)({
2731
+ type: "select",
2732
+ name: "renderer",
2733
+ message: "Which rendering library would you like to use?",
2734
+ choices: [
2735
+ {
2736
+ title: "React",
2737
+ value: "react",
2738
+ description: "The default FARMJS renderer"
2739
+ },
2740
+ {
2741
+ title: "Solid",
2742
+ value: "solid",
2743
+ description: "Fine-grained reactivity with Solid"
2744
+ },
2745
+ {
2746
+ title: "Vue",
2747
+ value: "vue",
2748
+ description: "Vue SFCs with server rendering and hydration"
2749
+ }
2750
+ ],
2751
+ initial: 0
2752
+ });
2753
+ if (!response.renderer) {
2754
+ require_utils.logger.error("Operation cancelled.");
2755
+ process.exit(1);
2756
+ }
2757
+ renderer = response.renderer;
2758
+ }
2759
+ renderer ||= "react";
2760
+ if (renderer !== "react" && template !== "basic") {
2761
+ require_utils.logger.error(`The "${template}" integration starter currently targets React. Use --template basic with --renderer ${renderer}.`);
2762
+ process.exit(1);
2763
+ }
2724
2764
  let useTypeScript = options.typescript;
2725
2765
  if (useTypeScript === void 0) {
2726
2766
  const response = await (0, prompts.default)({
@@ -2750,7 +2790,7 @@ async function createApp(projectName, options = {}) {
2750
2790
  }
2751
2791
  require_utils.logger.info(`Creating FARMJS app in ${projectPath}`);
2752
2792
  await fs_promises.default.mkdir(projectPath, { recursive: true });
2753
- const integrationResult = await copyTemplate(template, projectPath, useTypeScript);
2793
+ const integrationResult = await copyTemplate(template, projectPath, useTypeScript, renderer);
2754
2794
  await updatePackageJson(projectPath, projectName, packageManager);
2755
2795
  require_utils.logger.success(`🚜 Created ${projectName}`);
2756
2796
  if (!options.skipInstall) {
@@ -2772,13 +2812,23 @@ async function createApp(projectName, options = {}) {
2772
2812
  for (const note of integrationResult.notes) require_utils.logger.info(note);
2773
2813
  }
2774
2814
  }
2775
- async function copyTemplate(template, projectPath, useTypeScript) {
2815
+ async function copyTemplate(template, projectPath, useTypeScript, renderer) {
2776
2816
  const details = templateDetails[template];
2777
2817
  await copyDir(path.default.join(__dirname, "..", "templates", details?.integration ? "basic" : template), projectPath);
2778
2818
  if (useTypeScript) {
2779
2819
  const tsTemplatePath = path.default.join(__dirname, "..", "templates", "_typescript");
2780
2820
  if (await dirExists(tsTemplatePath)) await copyDir(tsTemplatePath, projectPath);
2781
2821
  }
2822
+ if (renderer === "solid") await copyDir(path.default.join(__dirname, "..", "templates", "_renderers", "solid"), projectPath);
2823
+ if (renderer === "vue") {
2824
+ const rendererTemplatePath = path.default.join(__dirname, "..", "templates", "_renderers", "vue");
2825
+ await Promise.all([
2826
+ fs_promises.default.rm(path.default.join(projectPath, "src", "app", "page.tsx"), { force: true }),
2827
+ fs_promises.default.rm(path.default.join(projectPath, "src", "app", "layout.tsx"), { force: true }),
2828
+ fs_promises.default.rm(path.default.join(projectPath, "src", "components", "resource-links.tsx"), { force: true })
2829
+ ]);
2830
+ await copyDir(rendererTemplatePath, projectPath);
2831
+ }
2782
2832
  if (!details?.integration) return;
2783
2833
  const result = await addFarmIntegration({
2784
2834
  root: projectPath,