@farm.js/create-app 0.1.0-beta.31 → 0.1.0-beta.32
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/README.md +12 -2
- package/dist/index.js +84 -22
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +84 -22
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/templates/_integrations/better-auth/preact/farm.config.ts +17 -0
- package/templates/_integrations/better-auth/preact/src/app/dashboard/page.tsx +73 -0
- package/templates/_integrations/better-auth/preact/src/app/layout.tsx +14 -0
- package/templates/_integrations/better-auth/preact/src/app/page.tsx +36 -0
- package/templates/_integrations/better-auth/preact/src/app/sign-in/page.tsx +10 -0
- package/templates/_integrations/better-auth/preact/src/app/sign-up/page.tsx +10 -0
- package/templates/_integrations/better-auth/preact/src/components/auth-form.tsx +92 -0
- package/templates/_integrations/better-auth/preact/src/components/auth-shell.tsx +16 -0
- package/templates/_integrations/better-auth/preact/src/lib/auth-client.ts +5 -0
- package/templates/_integrations/better-auth/solid/farm.config.ts +17 -0
- package/templates/_integrations/better-auth/solid/src/app/dashboard/page.tsx +67 -0
- package/templates/_integrations/better-auth/solid/src/app/layout.tsx +14 -0
- package/templates/_integrations/better-auth/solid/src/app/page.tsx +36 -0
- package/templates/_integrations/better-auth/solid/src/app/sign-in/page.tsx +10 -0
- package/templates/_integrations/better-auth/solid/src/app/sign-up/page.tsx +10 -0
- package/templates/_integrations/better-auth/solid/src/components/auth-form.tsx +91 -0
- package/templates/_integrations/better-auth/solid/src/components/auth-shell.tsx +16 -0
- package/templates/_integrations/better-auth/solid/src/lib/auth-client.ts +5 -0
- package/templates/_integrations/better-auth/svelte/farm.config.ts +17 -0
- package/templates/_integrations/better-auth/svelte/src/app/dashboard/page.svelte +62 -0
- package/templates/_integrations/better-auth/svelte/src/app/layout.svelte +20 -0
- package/templates/_integrations/better-auth/svelte/src/app/page.svelte +32 -0
- package/templates/_integrations/better-auth/svelte/src/app/sign-in/page.svelte +10 -0
- package/templates/_integrations/better-auth/svelte/src/app/sign-up/page.svelte +10 -0
- package/templates/_integrations/better-auth/svelte/src/components/auth-form.svelte +83 -0
- package/templates/_integrations/better-auth/svelte/src/components/auth-shell.svelte +16 -0
- package/templates/_integrations/better-auth/svelte/src/components/resource-links.svelte +47 -0
- package/templates/_integrations/better-auth/svelte/src/lib/auth-client.ts +5 -0
- package/templates/_integrations/better-auth/vue/farm.config.ts +17 -0
- package/templates/_integrations/better-auth/vue/src/app/dashboard/page.vue +62 -0
- package/templates/_integrations/better-auth/vue/src/app/layout.vue +20 -0
- package/templates/_integrations/better-auth/vue/src/app/page.vue +34 -0
- package/templates/_integrations/better-auth/vue/src/app/sign-in/page.vue +12 -0
- package/templates/_integrations/better-auth/vue/src/app/sign-up/page.vue +12 -0
- package/templates/_integrations/better-auth/vue/src/components/auth-form.vue +86 -0
- package/templates/_integrations/better-auth/vue/src/components/auth-shell.vue +15 -0
- package/templates/_integrations/better-auth/vue/src/components/resource-links.vue +43 -0
- package/templates/_integrations/better-auth/vue/src/lib/auth-client.ts +5 -0
- package/templates/_renderers/preact/package.json +2 -2
- package/templates/_renderers/preact/src/app/api/greeting/route.ts +1 -1
- package/templates/_renderers/solid/package.json +2 -2
- package/templates/_renderers/solid/src/app/api/greeting/route.ts +1 -1
- package/templates/_renderers/svelte/farm.config.ts +1 -1
- package/templates/_renderers/svelte/package.json +2 -2
- package/templates/_renderers/svelte/src/app/api/greeting/route.ts +1 -1
- package/templates/_renderers/vue/package.json +2 -2
- package/templates/_renderers/vue/src/app/api/greeting/route.ts +1 -1
- package/templates/auth/package.json +3 -3
- package/templates/basic/package.json +2 -2
- package/templates/better-auth/README.md +5 -3
- package/templates/better-auth/package.json +3 -3
package/dist/index.mjs
CHANGED
|
@@ -2720,7 +2720,7 @@ async function createApp(projectName, options = {}) {
|
|
|
2720
2720
|
logger.error(`Unknown renderer "${options.renderer}". Available: "react", "preact", "solid", "vue", "svelte".`);
|
|
2721
2721
|
process.exit(1);
|
|
2722
2722
|
}
|
|
2723
|
-
if (!renderer && !options.template && template === "basic") {
|
|
2723
|
+
if (!renderer && !options.template && (template === "basic" || template === "better-auth")) {
|
|
2724
2724
|
const response = await prompts({
|
|
2725
2725
|
type: "select",
|
|
2726
2726
|
name: "renderer",
|
|
@@ -2761,8 +2761,8 @@ async function createApp(projectName, options = {}) {
|
|
|
2761
2761
|
renderer = response.renderer;
|
|
2762
2762
|
}
|
|
2763
2763
|
renderer ||= "react";
|
|
2764
|
-
if (renderer !== "react" && template !== "basic") {
|
|
2765
|
-
logger.error(`The "${template}" integration starter currently targets React. Use --template basic with --renderer ${renderer}.`);
|
|
2764
|
+
if (renderer !== "react" && template !== "basic" && !await hasRendererIntegrationTemplate(template, renderer)) {
|
|
2765
|
+
logger.error(`The "${template}" integration starter currently targets React. Use --template basic or --template better-auth with --renderer ${renderer}.`);
|
|
2766
2766
|
process.exit(1);
|
|
2767
2767
|
}
|
|
2768
2768
|
let useTypeScript = options.typescript;
|
|
@@ -2819,29 +2819,18 @@ async function createApp(projectName, options = {}) {
|
|
|
2819
2819
|
async function copyTemplate(template, projectPath, useTypeScript, renderer) {
|
|
2820
2820
|
const details = templateDetails[template];
|
|
2821
2821
|
await copyDir(path.join(__dirname, "..", "templates", details?.integration ? "basic" : template), projectPath);
|
|
2822
|
+
const basePackageJson = await readPackageJson(projectPath);
|
|
2822
2823
|
if (useTypeScript) {
|
|
2823
2824
|
const tsTemplatePath = path.join(__dirname, "..", "templates", "_typescript");
|
|
2824
2825
|
if (await dirExists(tsTemplatePath)) await copyDir(tsTemplatePath, projectPath);
|
|
2825
2826
|
}
|
|
2826
|
-
if (renderer
|
|
2827
|
-
|
|
2828
|
-
|
|
2829
|
-
|
|
2830
|
-
|
|
2831
|
-
|
|
2832
|
-
|
|
2833
|
-
fs.rm(path.join(projectPath, "src", "components", "resource-links.tsx"), { force: true })
|
|
2834
|
-
]);
|
|
2835
|
-
await copyDir(rendererTemplatePath, projectPath);
|
|
2836
|
-
}
|
|
2837
|
-
if (renderer === "svelte") {
|
|
2838
|
-
const rendererTemplatePath = path.join(__dirname, "..", "templates", "_renderers", "svelte");
|
|
2839
|
-
await Promise.all([
|
|
2840
|
-
fs.rm(path.join(projectPath, "src", "app", "page.tsx"), { force: true }),
|
|
2841
|
-
fs.rm(path.join(projectPath, "src", "app", "layout.tsx"), { force: true }),
|
|
2842
|
-
fs.rm(path.join(projectPath, "src", "components", "resource-links.tsx"), { force: true })
|
|
2843
|
-
]);
|
|
2844
|
-
await copyDir(rendererTemplatePath, projectPath);
|
|
2827
|
+
if (renderer !== "react") {
|
|
2828
|
+
await applyRendererTemplate(projectPath, renderer, basePackageJson);
|
|
2829
|
+
const integrationRendererPath = getRendererIntegrationTemplatePath(template, renderer);
|
|
2830
|
+
if (await dirExists(integrationRendererPath)) {
|
|
2831
|
+
await removeRendererIntegrationConflicts(projectPath);
|
|
2832
|
+
await copyDir(integrationRendererPath, projectPath);
|
|
2833
|
+
}
|
|
2845
2834
|
}
|
|
2846
2835
|
if (!details?.integration) return;
|
|
2847
2836
|
const result = await addFarmIntegration({
|
|
@@ -2854,6 +2843,79 @@ async function copyTemplate(template, projectPath, useTypeScript, renderer) {
|
|
|
2854
2843
|
await writeIntegrationReadme(projectPath, details.integration, result.env);
|
|
2855
2844
|
return result;
|
|
2856
2845
|
}
|
|
2846
|
+
async function applyRendererTemplate(projectPath, renderer, basePackageJson) {
|
|
2847
|
+
const rendererTemplatePath = path.join(__dirname, "..", "templates", "_renderers", renderer);
|
|
2848
|
+
if (renderer === "vue" || renderer === "svelte") await Promise.all([
|
|
2849
|
+
fs.rm(path.join(projectPath, "src", "app", "page.tsx"), { force: true }),
|
|
2850
|
+
fs.rm(path.join(projectPath, "src", "app", "layout.tsx"), { force: true }),
|
|
2851
|
+
fs.rm(path.join(projectPath, "src", "components", "resource-links.tsx"), { force: true })
|
|
2852
|
+
]);
|
|
2853
|
+
await copyDir(rendererTemplatePath, projectPath);
|
|
2854
|
+
await writePackageJson(projectPath, mergeRendererPackageJson(basePackageJson, await readPackageJson(projectPath)));
|
|
2855
|
+
}
|
|
2856
|
+
function mergeRendererPackageJson(base, renderer) {
|
|
2857
|
+
const dependencies = {
|
|
2858
|
+
...base.dependencies,
|
|
2859
|
+
...renderer.dependencies
|
|
2860
|
+
};
|
|
2861
|
+
const devDependencies = {
|
|
2862
|
+
...base.devDependencies,
|
|
2863
|
+
...renderer.devDependencies
|
|
2864
|
+
};
|
|
2865
|
+
for (const name of ["react", "react-dom"]) delete dependencies[name];
|
|
2866
|
+
for (const name of ["@types/react", "@types/react-dom"]) delete devDependencies[name];
|
|
2867
|
+
return {
|
|
2868
|
+
...base,
|
|
2869
|
+
...renderer.type ? { type: renderer.type } : {},
|
|
2870
|
+
scripts: {
|
|
2871
|
+
...base.scripts,
|
|
2872
|
+
...renderer.scripts
|
|
2873
|
+
},
|
|
2874
|
+
dependencies,
|
|
2875
|
+
devDependencies
|
|
2876
|
+
};
|
|
2877
|
+
}
|
|
2878
|
+
async function readPackageJson(projectPath) {
|
|
2879
|
+
return JSON.parse(await fs.readFile(path.join(projectPath, "package.json"), "utf8"));
|
|
2880
|
+
}
|
|
2881
|
+
async function writePackageJson(projectPath, packageJson) {
|
|
2882
|
+
await fs.writeFile(path.join(projectPath, "package.json"), `${JSON.stringify(packageJson, null, 2)}\n`, "utf8");
|
|
2883
|
+
}
|
|
2884
|
+
function getRendererIntegrationTemplatePath(template, renderer) {
|
|
2885
|
+
return path.join(__dirname, "..", "templates", "_integrations", template, renderer);
|
|
2886
|
+
}
|
|
2887
|
+
async function hasRendererIntegrationTemplate(template, renderer) {
|
|
2888
|
+
return dirExists(getRendererIntegrationTemplatePath(template, renderer));
|
|
2889
|
+
}
|
|
2890
|
+
async function removeRendererIntegrationConflicts(projectPath) {
|
|
2891
|
+
const appFiles = [
|
|
2892
|
+
"page.tsx",
|
|
2893
|
+
"layout.tsx",
|
|
2894
|
+
"loading.tsx",
|
|
2895
|
+
"error.tsx",
|
|
2896
|
+
"not-found.tsx",
|
|
2897
|
+
"sign-in/page.tsx",
|
|
2898
|
+
"sign-up/page.tsx",
|
|
2899
|
+
"dashboard/page.tsx",
|
|
2900
|
+
"preact.css",
|
|
2901
|
+
"solid.css",
|
|
2902
|
+
"vue.css",
|
|
2903
|
+
"svelte.css",
|
|
2904
|
+
"api/greeting/route.ts"
|
|
2905
|
+
];
|
|
2906
|
+
const componentFiles = [
|
|
2907
|
+
"auth-form.tsx",
|
|
2908
|
+
"auth-shell.tsx",
|
|
2909
|
+
"sign-out-button.tsx",
|
|
2910
|
+
"site-header.tsx"
|
|
2911
|
+
];
|
|
2912
|
+
await Promise.all([
|
|
2913
|
+
...appFiles.map((file) => fs.rm(path.join(projectPath, "src", "app", file), { force: true })),
|
|
2914
|
+
...componentFiles.map((file) => fs.rm(path.join(projectPath, "src", "components", file), { force: true })),
|
|
2915
|
+
fs.rm(path.join(projectPath, "src", "lib", "api-client.ts"), { force: true }),
|
|
2916
|
+
fs.rm(path.join(projectPath, "src", "lib", "api.generated.ts"), { force: true })
|
|
2917
|
+
]);
|
|
2918
|
+
}
|
|
2857
2919
|
async function writeEnvironmentExample(projectPath, keys) {
|
|
2858
2920
|
if (keys.length === 0) return;
|
|
2859
2921
|
const envPath = path.join(projectPath, ".env.example");
|