@base44-preview/cli 0.0.41-pr.382.359de3c → 0.0.41-pr.386.60085e2

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.
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Deno Function Wrapper
3
+ *
4
+ * This script is executed by Deno to run user functions.
5
+ * It patches Deno.serve to inject a dynamic port before importing the user's function.
6
+ *
7
+ * Environment variables:
8
+ * - FUNCTION_PATH: Absolute path to the user's function entry file
9
+ * - FUNCTION_PORT: Port number for the function to listen on
10
+ * - FUNCTION_NAME: Name of the function (for logging)
11
+ */
12
+
13
+ // Make this file a module for top-level await support
14
+ export {};
15
+
16
+ const functionPath = Deno.env.get("FUNCTION_PATH");
17
+ const port = parseInt(Deno.env.get("FUNCTION_PORT") || "8000", 10);
18
+ const functionName = Deno.env.get("FUNCTION_NAME") || "unknown";
19
+
20
+ if (!functionPath) {
21
+ console.error("[wrapper] FUNCTION_PATH environment variable is required");
22
+ Deno.exit(1);
23
+ }
24
+
25
+ // Store the original Deno.serve
26
+ const originalServe = Deno.serve.bind(Deno);
27
+
28
+ // Patch Deno.serve to inject our port and add onListen callback
29
+ // @ts-expect-error - We're intentionally overriding Deno.serve
30
+ Deno.serve = (
31
+ optionsOrHandler:
32
+ | Deno.ServeOptions
33
+ | Deno.ServeHandler
34
+ | (Deno.ServeOptions & { handler: Deno.ServeHandler }),
35
+ maybeHandler?: Deno.ServeHandler,
36
+ ): Deno.HttpServer<Deno.NetAddr> => {
37
+ const onListen = () => {
38
+ // This message is used by FunctionManager to detect when the function is ready
39
+ console.log(`[${functionName}] Listening on http://localhost:${port}`);
40
+ };
41
+
42
+ // Handle the different Deno.serve signatures:
43
+ // 1. Deno.serve(handler)
44
+ // 2. Deno.serve(options, handler)
45
+ // 3. Deno.serve({ ...options, handler })
46
+ if (typeof optionsOrHandler === "function") {
47
+ // Signature: Deno.serve(handler)
48
+ return originalServe({ port, onListen }, optionsOrHandler);
49
+ }
50
+
51
+ if (maybeHandler) {
52
+ // Signature: Deno.serve(options, handler)
53
+ return originalServe({ ...optionsOrHandler, port, onListen }, maybeHandler);
54
+ }
55
+
56
+ // Signature: Deno.serve({ ...options, handler })
57
+ const options = optionsOrHandler as Deno.ServeOptions & {
58
+ handler: Deno.ServeHandler;
59
+ };
60
+ return originalServe({ ...options, port, onListen });
61
+ };
62
+
63
+ console.log(`[${functionName}] Starting function from ${functionPath}`);
64
+
65
+ // Dynamically import the user's function
66
+ // The function will call Deno.serve which is now patched to use our port
67
+ try {
68
+ await import(functionPath);
69
+ } catch (error) {
70
+ console.error(`[${functionName}] Failed to load function:`, error);
71
+ Deno.exit(1);
72
+ }
package/dist/cli/index.js CHANGED
@@ -18040,7 +18040,7 @@ var require_lodash = __commonJS((exports, module) => {
18040
18040
  }
18041
18041
  return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, undefined2, comparator) : [];
18042
18042
  });
18043
- function join15(array2, separator) {
18043
+ function join13(array2, separator) {
18044
18044
  return array2 == null ? "" : nativeJoin.call(array2, separator);
18045
18045
  }
18046
18046
  function last(array2) {
@@ -18062,7 +18062,7 @@ var require_lodash = __commonJS((exports, module) => {
18062
18062
  function nth(array2, n2) {
18063
18063
  return array2 && array2.length ? baseNth(array2, toInteger(n2)) : undefined2;
18064
18064
  }
18065
- var pull2 = baseRest(pullAll);
18065
+ var pull = baseRest(pullAll);
18066
18066
  function pullAll(array2, values2) {
18067
18067
  return array2 && array2.length && values2 && values2.length ? basePullAll(array2, values2) : array2;
18068
18068
  }
@@ -19827,7 +19827,7 @@ __p += '`;
19827
19827
  lodash.pickBy = pickBy;
19828
19828
  lodash.property = property;
19829
19829
  lodash.propertyOf = propertyOf;
19830
- lodash.pull = pull2;
19830
+ lodash.pull = pull;
19831
19831
  lodash.pullAll = pullAll;
19832
19832
  lodash.pullAllBy = pullAllBy;
19833
19833
  lodash.pullAllWith = pullAllWith;
@@ -19972,7 +19972,7 @@ __p += '`;
19972
19972
  lodash.isUndefined = isUndefined;
19973
19973
  lodash.isWeakMap = isWeakMap;
19974
19974
  lodash.isWeakSet = isWeakSet;
19975
- lodash.join = join15;
19975
+ lodash.join = join13;
19976
19976
  lodash.kebabCase = kebabCase2;
19977
19977
  lodash.last = last;
19978
19978
  lodash.lastIndexOf = lastIndexOf;
@@ -20601,7 +20601,7 @@ function cleanDoc(doc2) {
20601
20601
  return mapDoc(doc2, (currentDoc) => cleanDocFn(currentDoc));
20602
20602
  }
20603
20603
  function replaceEndOfLine(doc2, replacement = literalline) {
20604
- return mapDoc(doc2, (currentDoc) => typeof currentDoc === "string" ? join15(replacement, currentDoc.split(`
20604
+ return mapDoc(doc2, (currentDoc) => typeof currentDoc === "string" ? join13(replacement, currentDoc.split(`
20605
20605
  `)) : currentDoc);
20606
20606
  }
20607
20607
  function canBreakFn(doc2) {
@@ -20681,7 +20681,7 @@ function indentIfBreak(contents, options) {
20681
20681
  negate: options.negate
20682
20682
  };
20683
20683
  }
20684
- function join15(separator, docs) {
20684
+ function join13(separator, docs) {
20685
20685
  assertDoc(separator);
20686
20686
  assertDocArray(docs);
20687
20687
  const parts = [];
@@ -21392,7 +21392,7 @@ var init_doc = __esm(() => {
21392
21392
  MODE_FLAT = Symbol("MODE_FLAT");
21393
21393
  DOC_FILL_PRINTED_LENGTH = Symbol("DOC_FILL_PRINTED_LENGTH");
21394
21394
  builders = {
21395
- join: join15,
21395
+ join: join13,
21396
21396
  line,
21397
21397
  softline,
21398
21398
  hardline,
@@ -126306,7 +126306,7 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
126306
126306
  return mapDoc2(doc2, (currentDoc) => cleanDocFn2(currentDoc));
126307
126307
  }
126308
126308
  function replaceEndOfLine2(doc2, replacement = literalline2) {
126309
- return mapDoc2(doc2, (currentDoc) => typeof currentDoc === "string" ? join17(replacement, currentDoc.split(`
126309
+ return mapDoc2(doc2, (currentDoc) => typeof currentDoc === "string" ? join15(replacement, currentDoc.split(`
126310
126310
  `)) : currentDoc);
126311
126311
  }
126312
126312
  function canBreakFn2(doc2) {
@@ -126392,7 +126392,7 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
126392
126392
  negate: options8.negate
126393
126393
  };
126394
126394
  }
126395
- function join17(separator, docs) {
126395
+ function join15(separator, docs) {
126396
126396
  assertDoc2(separator);
126397
126397
  assertDocArray2(docs);
126398
126398
  const parts = [];
@@ -127057,7 +127057,7 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
127057
127057
  }
127058
127058
  }
127059
127059
  var builders2 = {
127060
- join: join17,
127060
+ join: join15,
127061
127061
  line: line3,
127062
127062
  softline: softline2,
127063
127063
  hardline: hardline4,
@@ -153497,10 +153497,10 @@ var require_view = __commonJS((exports, module) => {
153497
153497
  var debug = require_src4()("express:view");
153498
153498
  var path18 = __require("node:path");
153499
153499
  var fs28 = __require("node:fs");
153500
- var dirname12 = path18.dirname;
153500
+ var dirname11 = path18.dirname;
153501
153501
  var basename4 = path18.basename;
153502
153502
  var extname2 = path18.extname;
153503
- var join18 = path18.join;
153503
+ var join16 = path18.join;
153504
153504
  var resolve6 = path18.resolve;
153505
153505
  module.exports = View;
153506
153506
  function View(name2, options8) {
@@ -153536,7 +153536,7 @@ var require_view = __commonJS((exports, module) => {
153536
153536
  for (var i5 = 0;i5 < roots.length && !path19; i5++) {
153537
153537
  var root2 = roots[i5];
153538
153538
  var loc = resolve6(root2, name2);
153539
- var dir = dirname12(loc);
153539
+ var dir = dirname11(loc);
153540
153540
  var file2 = basename4(loc);
153541
153541
  path19 = this.resolve(dir, file2);
153542
153542
  }
@@ -153562,12 +153562,12 @@ var require_view = __commonJS((exports, module) => {
153562
153562
  };
153563
153563
  View.prototype.resolve = function resolve7(dir, file2) {
153564
153564
  var ext = this.ext;
153565
- var path19 = join18(dir, file2);
153565
+ var path19 = join16(dir, file2);
153566
153566
  var stat2 = tryStat(path19);
153567
153567
  if (stat2 && stat2.isFile()) {
153568
153568
  return path19;
153569
153569
  }
153570
- path19 = join18(dir, basename4(file2, ext), "index" + ext);
153570
+ path19 = join16(dir, basename4(file2, ext), "index" + ext);
153571
153571
  stat2 = tryStat(path19);
153572
153572
  if (stat2 && stat2.isFile()) {
153573
153573
  return path19;
@@ -157262,7 +157262,7 @@ var require_send = __commonJS((exports, module) => {
157262
157262
  var Stream2 = __require("stream");
157263
157263
  var util2 = __require("util");
157264
157264
  var extname2 = path18.extname;
157265
- var join18 = path18.join;
157265
+ var join16 = path18.join;
157266
157266
  var normalize = path18.normalize;
157267
157267
  var resolve6 = path18.resolve;
157268
157268
  var sep = path18.sep;
@@ -157434,7 +157434,7 @@ var require_send = __commonJS((exports, module) => {
157434
157434
  return res;
157435
157435
  }
157436
157436
  parts = path19.split(sep);
157437
- path19 = normalize(join18(root2, path19));
157437
+ path19 = normalize(join16(root2, path19));
157438
157438
  } else {
157439
157439
  if (UP_PATH_REGEXP.test(path19)) {
157440
157440
  debug('malicious path "%s"', path19);
@@ -157574,7 +157574,7 @@ var require_send = __commonJS((exports, module) => {
157574
157574
  return self2.onStatError(err);
157575
157575
  return self2.error(404);
157576
157576
  }
157577
- var p4 = join18(path19, self2._index[i5]);
157577
+ var p4 = join16(path19, self2._index[i5]);
157578
157578
  debug('stat "%s"', p4);
157579
157579
  fs28.stat(p4, function(err2, stat2) {
157580
157580
  if (err2)
@@ -204169,7 +204169,7 @@ var require_buffer_list = __commonJS((exports, module) => {
204169
204169
  }
204170
204170
  }, {
204171
204171
  key: "join",
204172
- value: function join18(s5) {
204172
+ value: function join16(s5) {
204173
204173
  if (this.length === 0)
204174
204174
  return "";
204175
204175
  var p4 = this.head;
@@ -207880,7 +207880,7 @@ var require_dist5 = __commonJS((exports, module) => {
207880
207880
  });
207881
207881
 
207882
207882
  // src/cli/index.ts
207883
- import { dirname as dirname16, join as join21 } from "node:path";
207883
+ import { dirname as dirname15, join as join19 } from "node:path";
207884
207884
  import { fileURLToPath as fileURLToPath6 } from "node:url";
207885
207885
 
207886
207886
  // ../../node_modules/commander/esm.mjs
@@ -207900,7 +207900,7 @@ var {
207900
207900
  } = import__.default;
207901
207901
 
207902
207902
  // src/cli/commands/agents/pull.ts
207903
- import { dirname as dirname7, join as join11 } from "node:path";
207903
+ import { dirname as dirname7, join as join10 } from "node:path";
207904
207904
 
207905
207905
  // ../../node_modules/@clack/core/dist/index.mjs
207906
207906
  var import_picocolors = __toESM(require_picocolors(), 1);
@@ -230396,7 +230396,7 @@ var generateGlobTasks = normalizeArguments(generateTasks);
230396
230396
  var generateGlobTasksSync = normalizeArgumentsSync(generateTasksSync);
230397
230397
 
230398
230398
  // src/core/project/config.ts
230399
- import { dirname as dirname5, join as join7 } from "node:path";
230399
+ import { dirname as dirname5, join as join6 } from "node:path";
230400
230400
 
230401
230401
  // src/core/resources/agent/schema.ts
230402
230402
  var EntityOperationSchema = exports_external.enum(["create", "update", "delete", "read"]);
@@ -231132,21 +231132,6 @@ var DeployFunctionsResponseSchema = exports_external.object({
231132
231132
  skipped: exports_external.array(exports_external.string()).optional().nullable(),
231133
231133
  errors: exports_external.array(exports_external.object({ name: exports_external.string(), message: exports_external.string() })).nullable()
231134
231134
  });
231135
- var FunctionAutomationInfoSchema = exports_external.object({
231136
- name: exports_external.string(),
231137
- type: exports_external.string(),
231138
- is_active: exports_external.boolean()
231139
- });
231140
- var FunctionInfoSchema = exports_external.object({
231141
- name: exports_external.string(),
231142
- deployment_id: exports_external.string(),
231143
- entry: exports_external.string(),
231144
- files: exports_external.array(FunctionFileSchema),
231145
- automations: exports_external.array(FunctionAutomationInfoSchema)
231146
- });
231147
- var ListFunctionsResponseSchema = exports_external.object({
231148
- functions: exports_external.array(FunctionInfoSchema)
231149
- });
231150
231135
  var LogLevelSchema = exports_external.enum(["info", "warning", "error", "debug"]);
231151
231136
  var FunctionLogEntrySchema = exports_external.object({
231152
231137
  time: exports_external.string(),
@@ -231220,20 +231205,6 @@ async function fetchFunctionLogs(functionName, filters = {}) {
231220
231205
  }
231221
231206
  return result.data;
231222
231207
  }
231223
- async function listDeployedFunctions() {
231224
- const appClient = getAppClient();
231225
- let response;
231226
- try {
231227
- response = await appClient.get("backend-functions", { timeout: 30000 });
231228
- } catch (error48) {
231229
- throw await ApiError.fromHttpError(error48, "listing deployed functions");
231230
- }
231231
- const result = ListFunctionsResponseSchema.safeParse(await response.json());
231232
- if (!result.success) {
231233
- throw new SchemaValidationError("Invalid response from server", result.error);
231234
- }
231235
- return result.data;
231236
- }
231237
231208
  // src/core/resources/function/config.ts
231238
231209
  import { basename as basename2, dirname as dirname3, join as join5, relative } from "node:path";
231239
231210
  async function readFunctionConfig(configPath) {
@@ -231329,67 +231300,6 @@ async function pushFunctions(functions) {
231329
231300
  const functionsWithCode = await Promise.all(functions.map(loadFunctionCode));
231330
231301
  return deployFunctions(functionsWithCode);
231331
231302
  }
231332
- // src/core/resources/function/pull.ts
231333
- import { join as join6 } from "node:path";
231334
- async function writeFunctions(functionsDir, functions) {
231335
- const written = [];
231336
- const skipped = [];
231337
- for (const fn of functions) {
231338
- const functionDir = join6(functionsDir, fn.name);
231339
- const configPath = join6(functionDir, "function.jsonc");
231340
- if (await isFunctionUnchanged(functionDir, fn)) {
231341
- skipped.push(fn.name);
231342
- continue;
231343
- }
231344
- const config5 = {
231345
- name: fn.name,
231346
- entry: fn.entry
231347
- };
231348
- if (fn.automations.length > 0) {
231349
- config5.automations = fn.automations;
231350
- }
231351
- await writeJsonFile(configPath, config5);
231352
- for (const file2 of fn.files) {
231353
- await writeFile(join6(functionDir, file2.path), file2.content);
231354
- }
231355
- written.push(fn.name);
231356
- }
231357
- return { written, skipped };
231358
- }
231359
- async function isFunctionUnchanged(functionDir, fn) {
231360
- if (!await pathExists(functionDir)) {
231361
- return false;
231362
- }
231363
- const configPath = join6(functionDir, "function.jsonc");
231364
- try {
231365
- const localConfig = await readJsonFile(configPath);
231366
- if (localConfig.entry !== fn.entry) {
231367
- return false;
231368
- }
231369
- const localAuto = JSON.stringify(localConfig.automations ?? []);
231370
- const remoteAuto = JSON.stringify(fn.automations);
231371
- if (localAuto !== remoteAuto) {
231372
- return false;
231373
- }
231374
- } catch {
231375
- return false;
231376
- }
231377
- for (const file2 of fn.files) {
231378
- const filePath = join6(functionDir, file2.path);
231379
- if (!await pathExists(filePath)) {
231380
- return false;
231381
- }
231382
- try {
231383
- const localContent = await readTextFile(filePath);
231384
- if (localContent !== file2.content) {
231385
- return false;
231386
- }
231387
- } catch {
231388
- return false;
231389
- }
231390
- }
231391
- return true;
231392
- }
231393
231303
  // src/core/resources/function/resource.ts
231394
231304
  var functionResource = {
231395
231305
  readAll: readAllFunctions,
@@ -231434,10 +231344,10 @@ async function readProjectConfig(projectRoot) {
231434
231344
  const project = result.data;
231435
231345
  const configDir = dirname5(configPath);
231436
231346
  const [entities, functions, agents, connectors] = await Promise.all([
231437
- entityResource.readAll(join7(configDir, project.entitiesDir)),
231438
- functionResource.readAll(join7(configDir, project.functionsDir)),
231439
- agentResource.readAll(join7(configDir, project.agentsDir)),
231440
- connectorResource.readAll(join7(configDir, project.connectorsDir))
231347
+ entityResource.readAll(join6(configDir, project.entitiesDir)),
231348
+ functionResource.readAll(join6(configDir, project.functionsDir)),
231349
+ agentResource.readAll(join6(configDir, project.agentsDir)),
231350
+ connectorResource.readAll(join6(configDir, project.connectorsDir))
231441
231351
  ]);
231442
231352
  return {
231443
231353
  project: { ...project, root, configPath },
@@ -231534,12 +231444,12 @@ async function readAppConfig(projectRoot) {
231534
231444
  // src/core/project/template.ts
231535
231445
  var import_ejs = __toESM(require_ejs(), 1);
231536
231446
  var import_front_matter = __toESM(require_front_matter(), 1);
231537
- import { dirname as dirname6, join as join9 } from "node:path";
231447
+ import { dirname as dirname6, join as join8 } from "node:path";
231538
231448
 
231539
231449
  // src/core/assets.ts
231540
231450
  import { cpSync, existsSync } from "node:fs";
231541
231451
  import { homedir as homedir2 } from "node:os";
231542
- import { join as join8 } from "node:path";
231452
+ import { join as join7 } from "node:path";
231543
231453
  // package.json
231544
231454
  var package_default = {
231545
231455
  name: "base44",
@@ -231631,15 +231541,15 @@ var package_default = {
231631
231541
  };
231632
231542
 
231633
231543
  // src/core/assets.ts
231634
- var ASSETS_DIR = join8(homedir2(), ".base44", "assets", package_default.version);
231544
+ var ASSETS_DIR = join7(homedir2(), ".base44", "assets", package_default.version);
231635
231545
  function getTemplatesDir() {
231636
- return join8(ASSETS_DIR, "templates");
231546
+ return join7(ASSETS_DIR, "templates");
231637
231547
  }
231638
231548
  function getTemplatesIndexPath() {
231639
- return join8(ASSETS_DIR, "templates", "templates.json");
231549
+ return join7(ASSETS_DIR, "templates", "templates.json");
231640
231550
  }
231641
231551
  function getDenoWrapperPath() {
231642
- return join8(ASSETS_DIR, "deno-runtime", "main.js");
231552
+ return join7(ASSETS_DIR, "deno-runtime", "main.ts");
231643
231553
  }
231644
231554
  function ensureNpmAssets(sourceDir) {
231645
231555
  if (existsSync(ASSETS_DIR))
@@ -231660,23 +231570,23 @@ async function listTemplates() {
231660
231570
  return result.data.templates;
231661
231571
  }
231662
231572
  async function renderTemplate(template, destPath, data) {
231663
- const templateDir = join9(getTemplatesDir(), template.path);
231573
+ const templateDir = join8(getTemplatesDir(), template.path);
231664
231574
  const files = await globby("**/*", {
231665
231575
  cwd: templateDir,
231666
231576
  dot: true,
231667
231577
  onlyFiles: true
231668
231578
  });
231669
231579
  for (const file2 of files) {
231670
- const srcPath = join9(templateDir, file2);
231580
+ const srcPath = join8(templateDir, file2);
231671
231581
  try {
231672
231582
  if (file2.endsWith(".ejs")) {
231673
231583
  const rendered = await import_ejs.default.renderFile(srcPath, data);
231674
231584
  const { attributes, body } = import_front_matter.default(rendered);
231675
- const destFile = attributes.outputFileName ? join9(dirname6(file2), attributes.outputFileName) : file2.replace(/\.ejs$/, "");
231676
- const destFilePath = join9(destPath, destFile);
231585
+ const destFile = attributes.outputFileName ? join8(dirname6(file2), attributes.outputFileName) : file2.replace(/\.ejs$/, "");
231586
+ const destFilePath = join8(destPath, destFile);
231677
231587
  await writeFile(destFilePath, body);
231678
231588
  } else {
231679
- const destFilePath = join9(destPath, file2);
231589
+ const destFilePath = join8(destPath, file2);
231680
231590
  await copyFile(srcPath, destFilePath);
231681
231591
  }
231682
231592
  } catch (error48) {
@@ -231775,7 +231685,7 @@ async function getSiteFilePaths(outputDir) {
231775
231685
  // src/core/site/deploy.ts
231776
231686
  import { randomUUID } from "node:crypto";
231777
231687
  import { tmpdir } from "node:os";
231778
- import { join as join10 } from "node:path";
231688
+ import { join as join9 } from "node:path";
231779
231689
  async function deploySite(siteOutputDir) {
231780
231690
  if (!await pathExists(siteOutputDir)) {
231781
231691
  throw new InvalidInputError(`Output directory does not exist: ${siteOutputDir}. Make sure to build your project first.`, {
@@ -231792,7 +231702,7 @@ async function deploySite(siteOutputDir) {
231792
231702
  ]
231793
231703
  });
231794
231704
  }
231795
- const archivePath = join10(tmpdir(), `base44-site-${randomUUID()}.tar.gz`);
231705
+ const archivePath = join9(tmpdir(), `base44-site-${randomUUID()}.tar.gz`);
231796
231706
  try {
231797
231707
  await createArchive(siteOutputDir, archivePath);
231798
231708
  return await uploadSite(archivePath);
@@ -239481,7 +239391,7 @@ function getDashboardUrl(projectId) {
239481
239391
  async function pullAgentsAction() {
239482
239392
  const { project: project2 } = await readProjectConfig();
239483
239393
  const configDir = dirname7(project2.configPath);
239484
- const agentsDir = join11(configDir, project2.agentsDir);
239394
+ const agentsDir = join10(configDir, project2.agentsDir);
239485
239395
  const remoteAgents = await runTask("Fetching agents from Base44", async () => {
239486
239396
  return await fetchAgents();
239487
239397
  }, {
@@ -239575,11 +239485,11 @@ function getWhoamiCommand(context) {
239575
239485
  }
239576
239486
 
239577
239487
  // src/cli/commands/connectors/pull.ts
239578
- import { dirname as dirname8, join as join12 } from "node:path";
239488
+ import { dirname as dirname8, join as join11 } from "node:path";
239579
239489
  async function pullConnectorsAction() {
239580
239490
  const { project: project2 } = await readProjectConfig();
239581
239491
  const configDir = dirname8(project2.configPath);
239582
- const connectorsDir = join12(configDir, project2.connectorsDir);
239492
+ const connectorsDir = join11(configDir, project2.connectorsDir);
239583
239493
  const remoteConnectors = await runTask("Fetching connectors from Base44", async () => {
239584
239494
  return await listConnectors();
239585
239495
  }, {
@@ -240459,63 +240369,14 @@ async function deployFunctionsAction() {
240459
240369
  }
240460
240370
  return { outroMessage: "Functions deployed to Base44" };
240461
240371
  }
240462
- function getDeployCommand(context) {
240463
- return new Command("deploy").description("Deploy local functions to Base44").action(async () => {
240372
+ function getFunctionsDeployCommand(context) {
240373
+ return new Command("functions").description("Manage project functions").addCommand(new Command("deploy").description("Deploy local functions to Base44").action(async () => {
240464
240374
  await runCommand(deployFunctionsAction, { requireAuth: true }, context);
240465
- });
240466
- }
240467
-
240468
- // src/cli/commands/functions/pull.ts
240469
- import { dirname as dirname9, join as join13 } from "node:path";
240470
- async function pullFunctionsAction(name2) {
240471
- const { project: project2 } = await readProjectConfig();
240472
- const configDir = dirname9(project2.configPath);
240473
- const functionsDir = join13(configDir, project2.functionsDir);
240474
- const remoteFunctions = await runTask("Fetching functions from Base44", async () => {
240475
- const { functions } = await listDeployedFunctions();
240476
- return functions;
240477
- }, {
240478
- successMessage: "Functions fetched successfully",
240479
- errorMessage: "Failed to fetch functions"
240480
- });
240481
- const toPull = name2 ? remoteFunctions.filter((f) => f.name === name2) : remoteFunctions;
240482
- if (name2 && toPull.length === 0) {
240483
- return {
240484
- outroMessage: `Function "${name2}" not found on remote`
240485
- };
240486
- }
240487
- if (toPull.length === 0) {
240488
- return { outroMessage: "No functions found on remote" };
240489
- }
240490
- const { written, skipped } = await runTask("Writing function files", async () => {
240491
- return await writeFunctions(functionsDir, toPull);
240492
- }, {
240493
- successMessage: "Function files written successfully",
240494
- errorMessage: "Failed to write function files"
240495
- });
240496
- for (const name3 of written) {
240497
- R2.success(`${name3.padEnd(25)} written`);
240498
- }
240499
- for (const name3 of skipped) {
240500
- R2.info(`${name3.padEnd(25)} unchanged`);
240501
- }
240502
- return {
240503
- outroMessage: `Pulled ${toPull.length} function${toPull.length !== 1 ? "s" : ""} to ${functionsDir}`
240504
- };
240505
- }
240506
- function getPullCommand(context) {
240507
- return new Command("pull").description("Pull deployed functions from Base44").argument("[name]", "Pull a single function by name").action(async (name2) => {
240508
- await runCommand(() => pullFunctionsAction(name2), { requireAuth: true }, context);
240509
- });
240510
- }
240511
-
240512
- // src/cli/commands/functions/index.ts
240513
- function getFunctionsCommand(context) {
240514
- return new Command("functions").description("Manage backend functions").addCommand(getDeployCommand(context)).addCommand(getPullCommand(context));
240375
+ }));
240515
240376
  }
240516
240377
 
240517
240378
  // src/cli/commands/project/create.ts
240518
- import { basename as basename3, join as join14, resolve as resolve2 } from "node:path";
240379
+ import { basename as basename3, join as join12, resolve as resolve2 } from "node:path";
240519
240380
  var import_kebabCase = __toESM(require_kebabCase(), 1);
240520
240381
  var DEFAULT_TEMPLATE_ID = "backend-only";
240521
240382
  async function getTemplateById(templateId) {
@@ -240651,7 +240512,7 @@ async function executeCreate({
240651
240512
  updateMessage("Building project...");
240652
240513
  await execa({ cwd: resolvedPath, shell: true })`${buildCommand}`;
240653
240514
  updateMessage("Deploying site...");
240654
- return await deploySite(join14(resolvedPath, outputDirectory));
240515
+ return await deploySite(join12(resolvedPath, outputDirectory));
240655
240516
  }, {
240656
240517
  successMessage: theme.colors.base44Orange("Site deployed successfully"),
240657
240518
  errorMessage: "Failed to deploy site"
@@ -240753,7 +240614,7 @@ ${summaryLines.join(`
240753
240614
  }
240754
240615
  return { outroMessage: "App deployed successfully" };
240755
240616
  }
240756
- function getDeployCommand2(context) {
240617
+ function getDeployCommand(context) {
240757
240618
  return new Command("deploy").description("Deploy all project resources (entities, functions, agents, connectors, and site)").option("-y, --yes", "Skip confirmation prompt").action(async (options) => {
240758
240619
  await runCommand(() => deployAction({
240759
240620
  ...options,
@@ -241277,10 +241138,10 @@ function toPascalCase(name2) {
241277
241138
  return name2.split(/[-_\s]+/).map((w8) => w8.charAt(0).toUpperCase() + w8.slice(1)).join("");
241278
241139
  }
241279
241140
  // src/core/types/update-project.ts
241280
- import { join as join17 } from "node:path";
241141
+ import { join as join15 } from "node:path";
241281
241142
  var TYPES_INCLUDE_PATH = `${PROJECT_SUBDIR}/${TYPES_OUTPUT_SUBDIR}/*.d.ts`;
241282
241143
  async function updateProjectConfig(projectRoot) {
241283
- const tsconfigPath = join17(projectRoot, "tsconfig.json");
241144
+ const tsconfigPath = join15(projectRoot, "tsconfig.json");
241284
241145
  if (!await pathExists(tsconfigPath)) {
241285
241146
  return false;
241286
241147
  }
@@ -241323,7 +241184,7 @@ function getTypesCommand(context) {
241323
241184
  }
241324
241185
 
241325
241186
  // src/cli/dev/dev-server/main.ts
241326
- import { dirname as dirname14, join as join20 } from "node:path";
241187
+ import { dirname as dirname13, join as join18 } from "node:path";
241327
241188
  var import_cors = __toESM(require_lib4(), 1);
241328
241189
  var import_express4 = __toESM(require_express(), 1);
241329
241190
 
@@ -242787,9 +242648,9 @@ class NodeFsHandler {
242787
242648
  if (this.fsw.closed) {
242788
242649
  return;
242789
242650
  }
242790
- const dirname13 = sp2.dirname(file2);
242651
+ const dirname12 = sp2.dirname(file2);
242791
242652
  const basename5 = sp2.basename(file2);
242792
- const parent = this.fsw._getWatchedDir(dirname13);
242653
+ const parent = this.fsw._getWatchedDir(dirname12);
242793
242654
  let prevStats = stats;
242794
242655
  if (parent.has(basename5))
242795
242656
  return;
@@ -242816,7 +242677,7 @@ class NodeFsHandler {
242816
242677
  prevStats = newStats2;
242817
242678
  }
242818
242679
  } catch (error48) {
242819
- this.fsw._remove(dirname13, basename5);
242680
+ this.fsw._remove(dirname12, basename5);
242820
242681
  }
242821
242682
  } else if (parent.has(basename5)) {
242822
242683
  const at13 = newStats.atimeMs;
@@ -243819,8 +243680,8 @@ async function createDevServer(options8) {
243819
243680
  broadcastEntityEvent(io6, appId, entityName, event);
243820
243681
  };
243821
243682
  const base44ConfigWatcher = new WatchBase44({
243822
- functions: join20(dirname14(project2.configPath), project2.functionsDir),
243823
- entities: join20(dirname14(project2.configPath), project2.entitiesDir)
243683
+ functions: join18(dirname13(project2.configPath), project2.functionsDir),
243684
+ entities: join18(dirname13(project2.configPath), project2.entitiesDir)
243824
243685
  }, devLogger);
243825
243686
  base44ConfigWatcher.on("change", async (name2) => {
243826
243687
  try {
@@ -243990,13 +243851,13 @@ function createProgram(context) {
243990
243851
  program2.addCommand(getLogoutCommand(context));
243991
243852
  program2.addCommand(getCreateCommand(context));
243992
243853
  program2.addCommand(getDashboardCommand(context));
243993
- program2.addCommand(getDeployCommand2(context));
243854
+ program2.addCommand(getDeployCommand(context));
243994
243855
  program2.addCommand(getLinkCommand(context));
243995
243856
  program2.addCommand(getEjectCommand(context));
243996
243857
  program2.addCommand(getEntitiesPushCommand(context));
243997
243858
  program2.addCommand(getAgentsCommand(context));
243998
243859
  program2.addCommand(getConnectorsCommand(context));
243999
- program2.addCommand(getFunctionsCommand(context));
243860
+ program2.addCommand(getFunctionsDeployCommand(context));
244000
243861
  program2.addCommand(getSecretsCommand(context));
244001
243862
  program2.addCommand(getSiteCommand(context));
244002
243863
  program2.addCommand(getTypesCommand(context));
@@ -244010,7 +243871,7 @@ var import_detect_agent = __toESM(require_dist5(), 1);
244010
243871
  import { release, type } from "node:os";
244011
243872
 
244012
243873
  // ../../node_modules/posthog-node/dist/extensions/error-tracking/modifiers/module.node.mjs
244013
- import { dirname as dirname15, posix, sep } from "path";
243874
+ import { dirname as dirname14, posix, sep } from "path";
244014
243875
  function createModulerModifier() {
244015
243876
  const getModuleFromFileName = createGetModuleFromFilename();
244016
243877
  return async (frames) => {
@@ -244019,7 +243880,7 @@ function createModulerModifier() {
244019
243880
  return frames;
244020
243881
  };
244021
243882
  }
244022
- function createGetModuleFromFilename(basePath = process.argv[1] ? dirname15(process.argv[1]) : process.cwd(), isWindows5 = sep === "\\") {
243883
+ function createGetModuleFromFilename(basePath = process.argv[1] ? dirname14(process.argv[1]) : process.cwd(), isWindows5 = sep === "\\") {
244023
243884
  const normalizedBase = isWindows5 ? normalizeWindowsPath2(basePath) : basePath;
244024
243885
  return (filename) => {
244025
243886
  if (!filename)
@@ -248208,9 +248069,9 @@ function addCommandInfoToErrorReporter(program2, errorReporter) {
248208
248069
  });
248209
248070
  }
248210
248071
  // src/cli/index.ts
248211
- var __dirname4 = dirname16(fileURLToPath6(import.meta.url));
248072
+ var __dirname4 = dirname15(fileURLToPath6(import.meta.url));
248212
248073
  async function runCLI() {
248213
- ensureNpmAssets(join21(__dirname4, "../assets"));
248074
+ ensureNpmAssets(join19(__dirname4, "../assets"));
248214
248075
  const errorReporter = new ErrorReporter;
248215
248076
  errorReporter.registerProcessErrorHandlers();
248216
248077
  const isNonInteractive = !process.stdin.isTTY || !process.stdout.isTTY;
@@ -248242,4 +248103,4 @@ export {
248242
248103
  CLIExitError
248243
248104
  };
248244
248105
 
248245
- //# debugId=38B21C5048857CD664756E2164756E21
248106
+ //# debugId=56DB991BD2BD39CD64756E2164756E21