@farm.js/create-app 0.1.0-beta.100 → 0.1.0-beta.102
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 +17 -6
- package/dist/index.js +46 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +46 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/templates/_renderers/preact/package.json +2 -2
- package/templates/_renderers/preact/src/lib/api.ts +1 -1
- package/templates/_renderers/solid/package.json +2 -2
- package/templates/_renderers/solid/src/lib/api.ts +1 -1
- package/templates/_renderers/svelte/package.json +2 -2
- package/templates/_renderers/svelte/src/lib/api.ts +1 -1
- package/templates/_renderers/vue/package.json +2 -2
- package/templates/_renderers/vue/src/lib/api.ts +1 -1
- package/templates/auth/README.md +1 -1
- package/templates/auth/package.json +3 -3
- package/templates/auth/pnpm-workspace.yaml +1 -3
- package/templates/basic/package.json +2 -2
- package/templates/basic/pnpm-workspace.yaml +3 -0
- package/templates/better-auth/README.md +1 -1
- package/templates/better-auth/package.json +3 -3
- package/templates/better-auth/pnpm-workspace.yaml +1 -4
- package/templates/react-compiler/README.md +1 -1
- package/templates/react-compiler/package.json +2 -2
- package/templates/react-compiler/pnpm-workspace.yaml +3 -0
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ Create a new FARMJS application
|
|
|
5
5
|
FARMJS is currently in beta.
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
|
|
8
|
+
PNPM_CONFIG_DLX_CACHE_MAX_AGE=0 PNPM_CONFIG_MINIMUM_RELEASE_AGE_EXCLUDE='["@farm.js/*"]' pnpm create @farm.js/app@beta my-app --template basic
|
|
9
9
|
cd my-app
|
|
10
10
|
pnpm dev
|
|
11
11
|
```
|
|
@@ -15,13 +15,24 @@ automatically. Every starter also registers the official
|
|
|
15
15
|
[`@farm.js/devtools`](https://farmjs.dev/docs/plugins/devtools) workspace, available at
|
|
16
16
|
`/__farm/devtools` (or `Command/Ctrl + Shift + .`) during `pnpm dev`. The command explicitly selects the minimal Basic starter. Use `pnpm create`, not
|
|
17
17
|
`pnpm add`; pnpm resolves this initializer command to the published `@farm.js/create-app` package.
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
`PNPM_CONFIG_DLX_CACHE_MAX_AGE=0` refreshes pnpm's one-day `create`/`dlx` cache so the `beta`
|
|
19
|
+
dist-tag is resolved on every run. `PNPM_CONFIG_MINIMUM_RELEASE_AGE_EXCLUDE` keeps pnpm's default
|
|
20
|
+
release-age protection enabled for third-party packages while allowing newly published
|
|
21
|
+
`@farm.js/*` betas. Generated pnpm projects preserve that scoped exclusion. Pass `--skip-install`
|
|
22
|
+
when you only want to generate the project files.
|
|
23
|
+
|
|
24
|
+
In PowerShell, set the same variables before running the command:
|
|
25
|
+
|
|
26
|
+
```powershell
|
|
27
|
+
$env:PNPM_CONFIG_DLX_CACHE_MAX_AGE = "0"
|
|
28
|
+
$env:PNPM_CONFIG_MINIMUM_RELEASE_AGE_EXCLUDE = '["@farm.js/*"]'
|
|
29
|
+
pnpm create @farm.js/app@beta my-app --template basic
|
|
30
|
+
```
|
|
20
31
|
|
|
21
32
|
Choose React, Preact, Solid, Vue, or Svelte for the Basic and Better Auth starters:
|
|
22
33
|
|
|
23
34
|
```bash
|
|
24
|
-
|
|
35
|
+
PNPM_CONFIG_DLX_CACHE_MAX_AGE=0 PNPM_CONFIG_MINIMUM_RELEASE_AGE_EXCLUDE='["@farm.js/*"]' pnpm create @farm.js/app@beta my-app --template better-auth --renderer solid
|
|
25
36
|
```
|
|
26
37
|
|
|
27
38
|
React remains the default when `--renderer` is omitted. The interactive Basic and Better Auth
|
|
@@ -30,7 +41,7 @@ flows also offer a renderer chooser.
|
|
|
30
41
|
List every starter:
|
|
31
42
|
|
|
32
43
|
```bash
|
|
33
|
-
|
|
44
|
+
PNPM_CONFIG_DLX_CACHE_MAX_AGE=0 PNPM_CONFIG_MINIMUM_RELEASE_AGE_EXCLUDE='["@farm.js/*"]' pnpm create @farm.js/app@beta --list-templates
|
|
34
45
|
```
|
|
35
46
|
|
|
36
47
|
Available templates:
|
|
@@ -45,7 +56,7 @@ home page, and setup documentation. Better Auth has renderer-native UI for all f
|
|
|
45
56
|
other integration templates currently use React. For example:
|
|
46
57
|
|
|
47
58
|
```bash
|
|
48
|
-
|
|
59
|
+
PNPM_CONFIG_DLX_CACHE_MAX_AGE=0 PNPM_CONFIG_MINIMUM_RELEASE_AGE_EXCLUDE='["@farm.js/*"]' pnpm create @farm.js/app@beta stripe-app --template stripe
|
|
49
60
|
```
|
|
50
61
|
|
|
51
62
|
See the [FARMJS repository](https://github.com/farming-labs/farm.js) for documentation, examples, and support.
|
package/dist/index.js
CHANGED
|
@@ -3164,6 +3164,7 @@ async function createApp(projectName, options = {}) {
|
|
|
3164
3164
|
await fs_promises.default.mkdir(projectPath, { recursive: true });
|
|
3165
3165
|
const integrationResult = await copyTemplate(template, projectPath, renderer);
|
|
3166
3166
|
await updatePackageJson(projectPath, projectName, packageManager);
|
|
3167
|
+
await updatePackageManagerInstructions(projectPath, packageManager.name);
|
|
3167
3168
|
require_utils.logger.success(`🚜 Created ${projectName}`);
|
|
3168
3169
|
if (!options.skipInstall) {
|
|
3169
3170
|
require_utils.logger.info(`Installing dependencies with ${packageManager.name}...`);
|
|
@@ -3176,7 +3177,7 @@ async function createApp(projectName, options = {}) {
|
|
|
3176
3177
|
if (options.skipInstall) require_utils.logger.info(` ${packageManager.name} install`);
|
|
3177
3178
|
require_utils.logger.info(` ${getDevCommand(packageManager.name)}`);
|
|
3178
3179
|
require_utils.logger.info("");
|
|
3179
|
-
for (const instruction of templateDetails[template]?.instructions ?? []) require_utils.logger.info(instruction);
|
|
3180
|
+
for (const instruction of templateDetails[template]?.instructions ?? []) require_utils.logger.info(rewritePackageManagerCommands(instruction, packageManager.name));
|
|
3180
3181
|
if (integrationResult) {
|
|
3181
3182
|
const details = templateDetails[template].integration;
|
|
3182
3183
|
require_utils.logger.info(`Open ${details.route} for the ${details.label} starter.`);
|
|
@@ -3217,6 +3218,14 @@ async function copyTemplate(template, projectPath, renderer) {
|
|
|
3217
3218
|
}
|
|
3218
3219
|
async function applyRendererTemplate(projectPath, renderer, basePackageJson) {
|
|
3219
3220
|
const rendererTemplatePath = path.default.join(__dirname, "..", "templates", "_renderers", renderer);
|
|
3221
|
+
await Promise.all([
|
|
3222
|
+
fs_promises.default.rm(path.default.join(projectPath, "docs.config.ts"), { force: true }),
|
|
3223
|
+
fs_promises.default.rm(path.default.join(projectPath, "docs.json"), { force: true }),
|
|
3224
|
+
fs_promises.default.rm(path.default.join(projectPath, "src", "app", "docs"), {
|
|
3225
|
+
recursive: true,
|
|
3226
|
+
force: true
|
|
3227
|
+
})
|
|
3228
|
+
]);
|
|
3220
3229
|
if (renderer === "vue" || renderer === "svelte") await Promise.all([
|
|
3221
3230
|
fs_promises.default.rm(path.default.join(projectPath, "src", "app", "page.tsx"), { force: true }),
|
|
3222
3231
|
fs_promises.default.rm(path.default.join(projectPath, "src", "app", "layout.tsx"), { force: true }),
|
|
@@ -3234,7 +3243,13 @@ function mergeRendererPackageJson(base, renderer) {
|
|
|
3234
3243
|
...base.devDependencies,
|
|
3235
3244
|
...renderer.devDependencies
|
|
3236
3245
|
};
|
|
3237
|
-
for (const name of [
|
|
3246
|
+
for (const name of [
|
|
3247
|
+
"@farming-labs/docs",
|
|
3248
|
+
"@farming-labs/farmjs",
|
|
3249
|
+
"@farming-labs/theme",
|
|
3250
|
+
"react",
|
|
3251
|
+
"react-dom"
|
|
3252
|
+
]) delete dependencies[name];
|
|
3238
3253
|
for (const name of ["@types/react", "@types/react-dom"]) delete devDependencies[name];
|
|
3239
3254
|
return {
|
|
3240
3255
|
...base,
|
|
@@ -3460,6 +3475,35 @@ function getDevCommand(packageManager) {
|
|
|
3460
3475
|
if (packageManager === "npm" || packageManager === "bun") return `${packageManager} run dev`;
|
|
3461
3476
|
return `${packageManager} dev`;
|
|
3462
3477
|
}
|
|
3478
|
+
function getRunCommand(packageManager, script) {
|
|
3479
|
+
if (packageManager === "npm" || packageManager === "bun") return `${packageManager} run ${script}`;
|
|
3480
|
+
return `${packageManager} ${script}`;
|
|
3481
|
+
}
|
|
3482
|
+
function rewritePackageManagerCommands(content, packageManager) {
|
|
3483
|
+
let output = content.replace(/\bpnpm install\b/g, `${packageManager} install`);
|
|
3484
|
+
output = output.replace(/\bpnpm run (dev|auth:migrate|type-check|build|check|deploy|experiment)\b/g, (match, script) => packageManager === "pnpm" ? match : getRunCommand(packageManager, script));
|
|
3485
|
+
return output.replace(/\bpnpm (dev|auth:migrate|type-check|build|check|deploy|experiment)\b/g, (_match, script) => getRunCommand(packageManager, script));
|
|
3486
|
+
}
|
|
3487
|
+
async function updatePackageManagerInstructions(projectPath, packageManager) {
|
|
3488
|
+
await Promise.all([
|
|
3489
|
+
"package.json",
|
|
3490
|
+
"README.md",
|
|
3491
|
+
"farm.config.ts",
|
|
3492
|
+
"src/app/page.tsx",
|
|
3493
|
+
"src/app/page.jsx",
|
|
3494
|
+
"src/app/page.vue",
|
|
3495
|
+
"src/app/page.svelte"
|
|
3496
|
+
].map(async (file) => {
|
|
3497
|
+
const entryPath = path.default.join(projectPath, file);
|
|
3498
|
+
try {
|
|
3499
|
+
const content = await fs_promises.default.readFile(entryPath, "utf8");
|
|
3500
|
+
const nextContent = rewritePackageManagerCommands(content, packageManager);
|
|
3501
|
+
if (nextContent !== content) await fs_promises.default.writeFile(entryPath, nextContent, "utf8");
|
|
3502
|
+
} catch (error) {
|
|
3503
|
+
if (error.code !== "ENOENT") throw error;
|
|
3504
|
+
}
|
|
3505
|
+
}));
|
|
3506
|
+
}
|
|
3463
3507
|
//#endregion
|
|
3464
3508
|
exports.createApp = createApp;
|
|
3465
3509
|
exports.detectPackageManager = detectPackageManager;
|