@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
package/dist/index.mjs CHANGED
@@ -2715,6 +2715,46 @@ async function createApp(projectName, options = {}) {
2715
2715
  logger.error(`Unknown template "${template}". Available: ${templates.map((t) => `"${t}"`).join(", ")}`);
2716
2716
  process.exit(1);
2717
2717
  }
2718
+ let renderer = options.renderer?.toLowerCase();
2719
+ if (renderer && renderer !== "react" && renderer !== "solid" && renderer !== "vue") {
2720
+ logger.error(`Unknown renderer "${options.renderer}". Available: "react", "solid", "vue".`);
2721
+ process.exit(1);
2722
+ }
2723
+ if (!renderer && !options.template && template === "basic") {
2724
+ const response = await prompts({
2725
+ type: "select",
2726
+ name: "renderer",
2727
+ message: "Which rendering library would you like to use?",
2728
+ choices: [
2729
+ {
2730
+ title: "React",
2731
+ value: "react",
2732
+ description: "The default FARMJS renderer"
2733
+ },
2734
+ {
2735
+ title: "Solid",
2736
+ value: "solid",
2737
+ description: "Fine-grained reactivity with Solid"
2738
+ },
2739
+ {
2740
+ title: "Vue",
2741
+ value: "vue",
2742
+ description: "Vue SFCs with server rendering and hydration"
2743
+ }
2744
+ ],
2745
+ initial: 0
2746
+ });
2747
+ if (!response.renderer) {
2748
+ logger.error("Operation cancelled.");
2749
+ process.exit(1);
2750
+ }
2751
+ renderer = response.renderer;
2752
+ }
2753
+ renderer ||= "react";
2754
+ if (renderer !== "react" && template !== "basic") {
2755
+ logger.error(`The "${template}" integration starter currently targets React. Use --template basic with --renderer ${renderer}.`);
2756
+ process.exit(1);
2757
+ }
2718
2758
  let useTypeScript = options.typescript;
2719
2759
  if (useTypeScript === void 0) {
2720
2760
  const response = await prompts({
@@ -2744,7 +2784,7 @@ async function createApp(projectName, options = {}) {
2744
2784
  }
2745
2785
  logger.info(`Creating FARMJS app in ${projectPath}`);
2746
2786
  await fs.mkdir(projectPath, { recursive: true });
2747
- const integrationResult = await copyTemplate(template, projectPath, useTypeScript);
2787
+ const integrationResult = await copyTemplate(template, projectPath, useTypeScript, renderer);
2748
2788
  await updatePackageJson(projectPath, projectName, packageManager);
2749
2789
  logger.success(`🚜 Created ${projectName}`);
2750
2790
  if (!options.skipInstall) {
@@ -2766,13 +2806,23 @@ async function createApp(projectName, options = {}) {
2766
2806
  for (const note of integrationResult.notes) logger.info(note);
2767
2807
  }
2768
2808
  }
2769
- async function copyTemplate(template, projectPath, useTypeScript) {
2809
+ async function copyTemplate(template, projectPath, useTypeScript, renderer) {
2770
2810
  const details = templateDetails[template];
2771
2811
  await copyDir(path.join(__dirname, "..", "templates", details?.integration ? "basic" : template), projectPath);
2772
2812
  if (useTypeScript) {
2773
2813
  const tsTemplatePath = path.join(__dirname, "..", "templates", "_typescript");
2774
2814
  if (await dirExists(tsTemplatePath)) await copyDir(tsTemplatePath, projectPath);
2775
2815
  }
2816
+ if (renderer === "solid") await copyDir(path.join(__dirname, "..", "templates", "_renderers", "solid"), projectPath);
2817
+ if (renderer === "vue") {
2818
+ const rendererTemplatePath = path.join(__dirname, "..", "templates", "_renderers", "vue");
2819
+ await Promise.all([
2820
+ fs.rm(path.join(projectPath, "src", "app", "page.tsx"), { force: true }),
2821
+ fs.rm(path.join(projectPath, "src", "app", "layout.tsx"), { force: true }),
2822
+ fs.rm(path.join(projectPath, "src", "components", "resource-links.tsx"), { force: true })
2823
+ ]);
2824
+ await copyDir(rendererTemplatePath, projectPath);
2825
+ }
2776
2826
  if (!details?.integration) return;
2777
2827
  const result = await addFarmIntegration({
2778
2828
  root: projectPath,