@farm.js/create-app 0.1.0-beta.26 → 0.1.0-beta.29
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.
- package/bin/create-farm-app.js +1 -0
- package/dist/index.js +52 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +52 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/templates/_renderers/solid/farm.config.ts +12 -0
- package/templates/_renderers/solid/package.json +26 -0
- package/templates/_renderers/solid/src/app/api/greeting/route.ts +15 -0
- package/templates/_renderers/solid/src/app/layout.tsx +15 -0
- package/templates/_renderers/solid/src/app/page.tsx +56 -0
- package/templates/_renderers/solid/src/app/solid.css +22 -0
- package/templates/_renderers/solid/src/components/resource-links.tsx +71 -0
- package/templates/_renderers/solid/src/lib/api-client.ts +4 -0
- package/templates/_renderers/solid/src/lib/api.generated.ts +7 -0
- package/templates/_renderers/solid/tsconfig.json +25 -0
- package/templates/_renderers/vue/farm.config.ts +12 -0
- package/templates/_renderers/vue/package.json +27 -0
- package/templates/_renderers/vue/src/app/api/greeting/route.ts +15 -0
- package/templates/_renderers/vue/src/app/layout.vue +21 -0
- package/templates/_renderers/vue/src/app/page.vue +69 -0
- package/templates/_renderers/vue/src/app/vue.css +26 -0
- package/templates/_renderers/vue/src/components/resource-links.vue +33 -0
- package/templates/_renderers/vue/src/env.d.ts +7 -0
- package/templates/_renderers/vue/src/lib/api-client.ts +4 -0
- package/templates/_renderers/vue/src/lib/api.generated.ts +7 -0
- package/templates/_renderers/vue/tsconfig.json +23 -0
- package/templates/auth/package.json +3 -3
- package/templates/basic/package.json +2 -2
- package/templates/better-auth/package.json +3 -3
package/bin/create-farm-app.js
CHANGED
|
@@ -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,
|