@farm.js/cli 0.1.0-beta.1 → 0.1.0-beta.4

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/dist/index.mjs CHANGED
@@ -59,9 +59,7 @@ async function deployPlatform(platform, root, outputDir, deployConfig, prod) {
59
59
  case "cloudflare":
60
60
  await deployCloudflare(root, outputDir, deployConfig.cloudflare?.projectName || deployConfig.projectName);
61
61
  break;
62
- case "netlify":
63
- await deployNetlify(root, outputDir, deployConfig.netlify?.site);
64
- break;
62
+ case "netlify": await deployNetlify(root, outputDir, deployConfig.netlify?.site);
65
63
  }
66
64
  }
67
65
  /**
@@ -282,7 +280,8 @@ async function deployNetlify(root, outputDir, site) {
282
280
  }
283
281
  try {
284
282
  process.chdir(outputDir);
285
- execSync(`netlify deploy --prod --dir=.${site ? ` --site=${site}` : ""}`, { stdio: "inherit" });
283
+ const siteFlag = site ? ` --site=${site}` : "";
284
+ execSync(`netlify deploy --prod --dir=.${siteFlag}`, { stdio: "inherit" });
286
285
  logger.success("✅ Deployed to Netlify successfully!");
287
286
  } catch (error) {
288
287
  logger.error(`❌ Failed to deploy to Netlify: ${error.message}`);
@@ -765,7 +764,7 @@ function commandExists(command) {
765
764
  return !result.error && result.status === 0;
766
765
  }
767
766
  function expandTunnelTemplate(template, target, requestedName, requestedHostname) {
768
- return template.replaceAll("{url}", shellQuote(target.localUrl)).replaceAll("{port}", shellQuote(String(target.port))).replaceAll("{host}", shellQuote(target.host)).replaceAll("{name}", shellQuote(requestedName)).replaceAll("{hostname}", shellQuote(requestedHostname));
767
+ return template.split("{url}").join(shellQuote(target.localUrl)).split("{port}").join(shellQuote(String(target.port))).split("{host}").join(shellQuote(target.host)).split("{name}").join(shellQuote(requestedName)).split("{hostname}").join(shellQuote(requestedHostname));
769
768
  }
770
769
  function shellQuote(value) {
771
770
  return `"${value.replace(/(["\\$`])/g, "\\$1")}"`;
@@ -808,7 +807,7 @@ async function generateFarmArtifacts(options = {}) {
808
807
  if (!userConfig && hasSchemaOptions(options)) throw new Error("No Farm config found. Please create farm.config.ts or config.ts.");
809
808
  const resolvedConfig = await resolveConfig({
810
809
  root,
811
- ...userConfig || {}
810
+ ...userConfig
812
811
  }, "development");
813
812
  const extraRoutes = [...resolvedConfig.openapi?.enabled && resolvedConfig.openapi.route ? [resolvedConfig.openapi.route] : [], ...getFarmDocsRouteTypeEntries(resolvedConfig.docs)];
814
813
  await generateRouteTypes({
@@ -822,7 +821,8 @@ async function generateFarmArtifacts(options = {}) {
822
821
  srcDir: resolvedConfig.srcDir,
823
822
  configPath: options.configPath
824
823
  });
825
- const apiGenerator = new APITypeGenerator(path.join(resolvedConfig.root, resolvedConfig.srcDir, "app"));
824
+ const appDir = path.join(resolvedConfig.root, resolvedConfig.srcDir, "app");
825
+ const apiGenerator = new APITypeGenerator(appDir);
826
826
  const apiRoutes = apiGenerator.scanAPIRoutes();
827
827
  const apiTypesPath = path.join(resolvedConfig.root, resolvedConfig.srcDir, "lib", "api.generated.ts");
828
828
  await mkdir(path.dirname(apiTypesPath), { recursive: true });
@@ -1071,7 +1071,8 @@ async function writePrismaSchema(schemaPath, models) {
1071
1071
  const source = await readFile(schemaPath, "utf8");
1072
1072
  const generated = createPrismaGeneratedBlock(generatePrismaSchema(models));
1073
1073
  const pattern = new RegExp(`${escapeRegExp(PRISMA_GENERATED_START)}[\\s\\S]*?${escapeRegExp(PRISMA_GENERATED_END)}`, "m");
1074
- await writeFile(schemaPath, pattern.test(source) ? source.replace(pattern, generated) : `${source.trimEnd()}\n\n${generated}\n`, "utf8");
1074
+ const nextSource = pattern.test(source) ? source.replace(pattern, generated) : `${source.trimEnd()}\n\n${generated}\n`;
1075
+ await writeFile(schemaPath, nextSource, "utf8");
1075
1076
  }
1076
1077
  function generatePrismaSchema(models) {
1077
1078
  return models.map((model) => renderPrismaModel(model)).join("\n\n");
@@ -2066,7 +2067,7 @@ async function createFrameworkMigrationPlan(root, source, options = {}) {
2066
2067
  };
2067
2068
  if (source === "next") await planNextMigration(root, packageJson, plan, options);
2068
2069
  else await planTanStackMigration(root, packageJson, plan, options);
2069
- addSharedFarmFiles(root, packageJson, plan, source, options);
2070
+ addSharedFarmFiles(root, packageJson, plan, options);
2070
2071
  return plan;
2071
2072
  }
2072
2073
  async function planNextMigration(root, packageJson, plan, options) {
@@ -2146,32 +2147,22 @@ async function planTanStackMigration(root, packageJson, plan, options) {
2146
2147
  plan.manual.push("Review loaders, beforeLoad hooks, search params, and Route.use* calls; Farm page modules should move that logic into props, API routes, or server helpers.");
2147
2148
  if (packageJson) addPackageOperation(root, plan, createMigratedPackageJson(packageJson, "tanstack"));
2148
2149
  }
2149
- function addSharedFarmFiles(root, packageJson, plan, source, options) {
2150
+ function addSharedFarmFiles(root, packageJson, plan, options) {
2150
2151
  if (![
2151
2152
  "farm.config.ts",
2152
2153
  "farm.config.mts",
2153
2154
  "farm.config.js",
2154
2155
  "farm.config.mjs"
2155
- ].map((file) => path.join(root, file)).find((file) => existsSync(file))) {
2156
- const output = source === "next" ? `import { defineConfig } from "@farm.js/core";
2157
-
2158
- export default defineConfig({
2159
- srcDir: "src",
2160
- });
2161
- ` : `import { defineConfig } from "@farm.js/core";
2156
+ ].map((file) => path.join(root, file)).find((file) => existsSync(file))) plan.operations.push({
2157
+ kind: "write-file",
2158
+ path: path.join(root, "farm.config.ts"),
2159
+ description: "Create farm.config.ts",
2160
+ content: `import { defineConfig } from "@farm.js/core";
2162
2161
 
2163
- export default defineConfig({
2164
- srcDir: "src",
2165
- });
2166
- `;
2167
- plan.operations.push({
2168
- kind: "write-file",
2169
- path: path.join(root, "farm.config.ts"),
2170
- description: "Create farm.config.ts",
2171
- content: output,
2172
- skipped: false
2173
- });
2174
- }
2162
+ export default defineConfig({});
2163
+ `,
2164
+ skipped: false
2165
+ });
2175
2166
  const layoutPath = path.join(root, "src", "app", "layout.tsx");
2176
2167
  if (!existsSync(layoutPath)) plan.operations.push({
2177
2168
  kind: "write-file",