@base44-preview/cli 0.0.50-pr.471.f3b3ba8 → 0.0.50-pr.475.6fca043

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/cli/index.js CHANGED
@@ -219926,7 +219926,8 @@ var theme = {
219926
219926
  bold: source_default.bold,
219927
219927
  dim: source_default.dim,
219928
219928
  error: source_default.red,
219929
- warn: source_default.yellow
219929
+ warn: source_default.yellow,
219930
+ info: source_default.cyan
219930
219931
  },
219931
219932
  format: {
219932
219933
  errorContext(ctx) {
@@ -242594,40 +242595,11 @@ var EntityAutomationSchema = AutomationBaseSchema.extend({
242594
242595
  entity_name: exports_external.string().min(1, "Entity name cannot be empty"),
242595
242596
  event_types: exports_external.array(exports_external.enum(["create", "update", "delete"])).min(1, "At least one event type is required")
242596
242597
  });
242597
- var TriggerConditionSchema = exports_external.object({
242598
- field: exports_external.string().min(1),
242599
- operator: exports_external.string().min(1),
242600
- value: exports_external.unknown().nullable().optional()
242601
- });
242602
- var TriggerLogicSchema = exports_external.enum(["and", "or"]);
242603
- var TriggerConditionGroupSchema = exports_external.lazy(() => exports_external.object({
242604
- logic: TriggerLogicSchema.optional(),
242605
- conditions: exports_external.array(exports_external.union([TriggerConditionSchema, TriggerConditionGroupSchema])).min(1)
242606
- }).strict());
242607
- var EmptyTriggerConditionsSchema = exports_external.union([
242608
- exports_external.object({}).strict(),
242609
- exports_external.object({
242610
- logic: TriggerLogicSchema.optional(),
242611
- conditions: exports_external.array(exports_external.unknown()).length(0)
242612
- }).strict()
242613
- ]);
242614
- var TriggerConditionsSchema = exports_external.union([
242615
- EmptyTriggerConditionsSchema,
242616
- TriggerConditionGroupSchema
242617
- ]);
242618
- var ConnectorAutomationSchema = AutomationBaseSchema.extend({
242619
- type: exports_external.literal("connector"),
242620
- integration_type: exports_external.string().min(1, "Integration type cannot be empty"),
242621
- events: exports_external.array(exports_external.string()),
242622
- resource_id: exports_external.string().nullable().optional(),
242623
- trigger_conditions: TriggerConditionsSchema.nullable().optional()
242624
- });
242625
242598
  var AutomationSchema = exports_external.union([
242626
242599
  ScheduledOneTimeSchema,
242627
242600
  ScheduledCronSchema,
242628
242601
  ScheduledSimpleSchema,
242629
- EntityAutomationSchema,
242630
- ConnectorAutomationSchema
242602
+ EntityAutomationSchema
242631
242603
  ]);
242632
242604
  var FunctionConfigSchema = exports_external.object({
242633
242605
  name: FunctionNameSchema,
@@ -243272,6 +243244,7 @@ var package_default = {
243272
243244
  typescript: "^5.7.2",
243273
243245
  vitest: "^4.0.16",
243274
243246
  yaml: "^2.8.2",
243247
+ qs: "^6.12.3",
243275
243248
  zod: "^4.3.5"
243276
243249
  },
243277
243250
  engines: {
@@ -252784,9 +252757,12 @@ function getTypesCommand() {
252784
252757
  return new Command("types").description("Manage TypeScript type generation").addCommand(getTypesGenerateCommand());
252785
252758
  }
252786
252759
 
252760
+ // src/cli/commands/dev.ts
252761
+ import process21 from "node:process";
252762
+
252787
252763
  // src/cli/dev/dev-server/main.ts
252788
252764
  var import_cors = __toESM(require_lib4(), 1);
252789
- var import_express5 = __toESM(require_express(), 1);
252765
+ var import_express6 = __toESM(require_express(), 1);
252790
252766
  import { dirname as dirname16, join as join23 } from "node:path";
252791
252767
 
252792
252768
  // ../../node_modules/get-port/index.js
@@ -253345,7 +253321,9 @@ class Validator {
253345
253321
  }
253346
253322
 
253347
253323
  // src/cli/dev/dev-server/db/database.ts
253324
+ var PRIVATE_COLLECTION_PREFIX = "$";
253348
253325
  var USER_COLLECTION = "user";
253326
+ var PRIVATE_USER_COLLECTION = PRIVATE_COLLECTION_PREFIX + USER_COLLECTION;
253349
253327
 
253350
253328
  class Database {
253351
253329
  collections = new Map;
@@ -253367,6 +253345,7 @@ class Database {
253367
253345
  this.schemas.set(USER_COLLECTION, this.buildUserSchema(userEntity));
253368
253346
  const collection = new import_nedb.default;
253369
253347
  this.collections.set(USER_COLLECTION, collection);
253348
+ this.collections.set(PRIVATE_USER_COLLECTION, new import_nedb.default);
253370
253349
  const userInfo = await readAuth();
253371
253350
  const now = getNowISOTimestamp();
253372
253351
  await collection.insertAsync({
@@ -253408,7 +253387,9 @@ class Database {
253408
253387
  return this.collections.get(this.normalizeName(name2));
253409
253388
  }
253410
253389
  getCollectionNames() {
253411
- return Array.from(this.collections.keys());
253390
+ return Array.from(this.collections.keys()).filter((name2) => {
253391
+ return !name2.startsWith(PRIVATE_COLLECTION_PREFIX);
253392
+ });
253412
253393
  }
253413
253394
  dropAll() {
253414
253395
  for (const collection of this.collections.values()) {
@@ -253472,15 +253453,219 @@ function broadcastEntityEvent(io6, appId, entityName, event) {
253472
253453
  });
253473
253454
  }
253474
253455
 
253475
- // src/cli/dev/dev-server/routes/entities/entities-router.ts
253476
- var import_express3 = __toESM(require_express(), 1);
253477
-
253478
- // src/cli/dev/dev-server/routes/entities/entities-user-router.ts
253456
+ // src/cli/dev/dev-server/routes/auth-router.ts
253479
253457
  var import_express2 = __toESM(require_express(), 1);
253480
253458
  var import_jsonwebtoken = __toESM(require_jsonwebtoken(), 1);
253481
- function createUserRouter(db2, logger2) {
253459
+ import { randomInt } from "node:crypto";
253460
+ var LOCAL_DEV_SECRET = "LOCAL_DEV_SECRET";
253461
+ var generateCode = () => {
253462
+ return randomInt(1e5, 1e6).toString();
253463
+ };
253464
+ var createJwtToken = (email3) => {
253465
+ return import_jsonwebtoken.default.sign({ sub: email3 }, LOCAL_DEV_SECRET, {
253466
+ expiresIn: "360d"
253467
+ });
253468
+ };
253469
+ function createAuthRouter(db2, logger2) {
253482
253470
  const router = import_express2.Router({ mergeParams: true });
253483
253471
  const parseBody = import_express2.json();
253472
+ router.post("/login", parseBody, async (req, res) => {
253473
+ const { email: email3, password } = req.body;
253474
+ const result = await db2.getCollection(USER_COLLECTION)?.findOneAsync({ email: email3 });
253475
+ if (result) {
253476
+ const privateUserData = await db2.getCollection(PRIVATE_USER_COLLECTION)?.findOneAsync({ email: email3 });
253477
+ if (result.role === "admin" || privateUserData?.password === password) {
253478
+ res.json({
253479
+ access_token: createJwtToken(email3),
253480
+ success: true,
253481
+ user: {}
253482
+ });
253483
+ } else {
253484
+ res.status(400).json({
253485
+ detail: "Invalid email or password",
253486
+ error_type: "HTTPException",
253487
+ message: "Invalid email or password",
253488
+ request_id: null,
253489
+ traceback: ""
253490
+ });
253491
+ }
253492
+ return;
253493
+ }
253494
+ res.status(401).json({ error: "Unauthorized" });
253495
+ });
253496
+ router.post("/register", parseBody, async (req, res) => {
253497
+ const { email: email3, password } = req.body;
253498
+ if ((password || "").length < 8) {
253499
+ res.status(400).json({
253500
+ detail: "Password must be at least 8 characters long",
253501
+ error_type: "HTTPException",
253502
+ message: "Password must be at least 8 characters long",
253503
+ request_id: null,
253504
+ traceback: ""
253505
+ });
253506
+ return;
253507
+ }
253508
+ const result = await db2.getCollection(USER_COLLECTION)?.findOneAsync({ email: email3 });
253509
+ if (result) {
253510
+ res.status(400).json({
253511
+ detail: "A user with this email already exists",
253512
+ error_type: "HTTPException",
253513
+ message: "A user with this email already exists",
253514
+ request_id: null,
253515
+ traceback: ""
253516
+ });
253517
+ return;
253518
+ }
253519
+ const privateUserCollection = db2.getCollection(PRIVATE_USER_COLLECTION);
253520
+ const privateUserData = await privateUserCollection?.findOneAsync({
253521
+ email: email3
253522
+ });
253523
+ const otpCode = privateUserData ? privateUserData.otpCode : generateCode();
253524
+ const id2 = privateUserData ? privateUserData.id : nanoid3();
253525
+ if (!privateUserData) {
253526
+ await privateUserCollection?.insertAsync({
253527
+ id: id2,
253528
+ email: email3,
253529
+ otpCode,
253530
+ password,
253531
+ createdAt: +Date.now()
253532
+ });
253533
+ }
253534
+ logger2.log(theme.styles.info(`
253535
+ In order to complete registration use this verification code: ${otpCode}
253536
+ `));
253537
+ res.json({
253538
+ id: id2,
253539
+ message: "Registration successful. Please check your email for the verification code.",
253540
+ otp_expires_in_minutes: 10
253541
+ });
253542
+ });
253543
+ router.post("/verify-otp", parseBody, async (req, res) => {
253544
+ const { email: email3, otp_code } = req.body;
253545
+ const privateUserCollection = db2.getCollection(PRIVATE_USER_COLLECTION);
253546
+ const privateUserData = await privateUserCollection?.findOneAsync({
253547
+ email: email3
253548
+ });
253549
+ if (privateUserData && privateUserData.otpCode === otp_code) {
253550
+ if (+Date.now() - privateUserData.createdAt < 10 * 60 * 1000) {
253551
+ privateUserCollection?.updateAsync({
253552
+ email: email3
253553
+ }, {
253554
+ $set: {
253555
+ otpCode: undefined
253556
+ }
253557
+ });
253558
+ const collection = db2.getCollection(USER_COLLECTION);
253559
+ const now = getNowISOTimestamp();
253560
+ const nameFromEmailMatch = /^([^@]+)/.exec(email3);
253561
+ const fullName = nameFromEmailMatch ? nameFromEmailMatch[1] : email3;
253562
+ await collection?.insertAsync({
253563
+ id: privateUserData.id,
253564
+ email: email3,
253565
+ full_name: fullName,
253566
+ is_service: false,
253567
+ is_verified: true,
253568
+ disabled: null,
253569
+ role: "user",
253570
+ collaborator_role: "editor",
253571
+ created_date: now,
253572
+ updated_date: now
253573
+ });
253574
+ res.json({
253575
+ id: privateUserData.id,
253576
+ access_token: createJwtToken(email3),
253577
+ message: "Email verified successfully. You are now logged in.",
253578
+ success: true
253579
+ });
253580
+ } else {
253581
+ res.status(400).json({
253582
+ detail: "Verification code has expired",
253583
+ error_type: "HTTPException",
253584
+ message: "Verification code has expired",
253585
+ request_id: null,
253586
+ traceback: ""
253587
+ });
253588
+ }
253589
+ } else {
253590
+ const appId = req.params.appId;
253591
+ res.status(500).json({
253592
+ detail: `{'email': '${email3}', 'app_id': '${appId}}'} -> Object not found`,
253593
+ error_type: "ObjectNotFoundError",
253594
+ message: `{'email': '${email3}', 'app_id': '${appId}}'} -> Object not found`,
253595
+ request_id: null,
253596
+ traceback: ""
253597
+ });
253598
+ }
253599
+ });
253600
+ return router;
253601
+ }
253602
+
253603
+ // src/cli/dev/dev-server/routes/entities/entities-router.ts
253604
+ var import_express4 = __toESM(require_express(), 1);
253605
+
253606
+ // src/cli/dev/dev-server/db/entity-queries.ts
253607
+ function parseSort(sort) {
253608
+ if (!sort) {
253609
+ return;
253610
+ }
253611
+ if (sort.startsWith("-")) {
253612
+ return { [sort.slice(1)]: -1 };
253613
+ }
253614
+ return { [sort]: 1 };
253615
+ }
253616
+ function parseFields(fields) {
253617
+ if (!fields) {
253618
+ return;
253619
+ }
253620
+ const projection = {};
253621
+ for (const field of fields.split(",")) {
253622
+ const trimmed = field.trim();
253623
+ if (trimmed) {
253624
+ projection[trimmed] = 1;
253625
+ }
253626
+ }
253627
+ return Object.keys(projection).length > 0 ? projection : undefined;
253628
+ }
253629
+ var queryEntity = async (collection, reqQuery) => {
253630
+ const { sort, limit, skip: skip2, fields, q: q13 } = reqQuery;
253631
+ let query = {};
253632
+ if (q13 && typeof q13 === "string") {
253633
+ try {
253634
+ query = JSON.parse(q13);
253635
+ } catch {
253636
+ throw new InvalidInputError("Invalid query parameter 'q'");
253637
+ }
253638
+ }
253639
+ let cursor3 = collection.findAsync(query);
253640
+ const sortObj = parseSort(sort);
253641
+ if (sortObj) {
253642
+ cursor3 = cursor3.sort(sortObj);
253643
+ }
253644
+ if (skip2) {
253645
+ const skipNum = Number.parseInt(skip2, 10);
253646
+ if (!Number.isNaN(skipNum)) {
253647
+ cursor3 = cursor3.skip(skipNum);
253648
+ }
253649
+ }
253650
+ if (limit) {
253651
+ const limitNum = Number.parseInt(limit, 10);
253652
+ if (!Number.isNaN(limitNum)) {
253653
+ cursor3 = cursor3.limit(limitNum);
253654
+ }
253655
+ }
253656
+ const projection = parseFields(fields);
253657
+ if (projection) {
253658
+ cursor3 = cursor3.projection(projection);
253659
+ }
253660
+ return cursor3;
253661
+ };
253662
+
253663
+ // src/cli/dev/dev-server/routes/entities/entities-user-router.ts
253664
+ var import_express3 = __toESM(require_express(), 1);
253665
+ var import_jsonwebtoken2 = __toESM(require_jsonwebtoken(), 1);
253666
+ function createUserRouter(db2, logger2) {
253667
+ const router = import_express3.Router({ mergeParams: true });
253668
+ const parseBody = import_express3.json();
253484
253669
  function withAuth(handler) {
253485
253670
  return async (req, res) => {
253486
253671
  const auth2 = req.headers.authorization;
@@ -253489,7 +253674,7 @@ function createUserRouter(db2, logger2) {
253489
253674
  return;
253490
253675
  }
253491
253676
  try {
253492
- const { payload } = import_jsonwebtoken.default.decode(auth2.replace("Bearer ", ""), { complete: true }) ?? {};
253677
+ const { payload } = import_jsonwebtoken2.default.decode(auth2.replace("Bearer ", ""), { complete: true }) ?? {};
253493
253678
  const result = await db2.getCollection(USER_COLLECTION)?.findOneAsync({ email: payload?.sub });
253494
253679
  if (!result) {
253495
253680
  res.status(404).json({ error: "Unable to read data for the current user" });
@@ -253522,6 +253707,28 @@ function createUserRouter(db2, logger2) {
253522
253707
  ...req.body
253523
253708
  });
253524
253709
  }));
253710
+ router.get("/", withAuth(async (req, res, currentUser) => {
253711
+ const collection = db2.getCollection(USER_COLLECTION);
253712
+ if (!collection) {
253713
+ res.status(404).json({ error: `Entity "${USER_COLLECTION}" not found` });
253714
+ return;
253715
+ }
253716
+ try {
253717
+ if (currentUser.role === "admin") {
253718
+ const result = await queryEntity(collection, req.query);
253719
+ res.json(stripInternalFields(result));
253720
+ } else {
253721
+ res.json([stripInternalFields(currentUser)]);
253722
+ }
253723
+ } catch (error48) {
253724
+ if (error48 instanceof InvalidInputError) {
253725
+ res.status(400).json({ error: error48.message });
253726
+ } else {
253727
+ logger2.error(`Error in GET /${USER_COLLECTION}:`, error48);
253728
+ res.status(500).json({ error: "Internal server error" });
253729
+ }
253730
+ }
253731
+ }));
253525
253732
  router.post("/bulk", async (_req, res) => {
253526
253733
  res.json({});
253527
253734
  });
@@ -253571,31 +253778,9 @@ function createUserRouter(db2, logger2) {
253571
253778
  }
253572
253779
 
253573
253780
  // src/cli/dev/dev-server/routes/entities/entities-router.ts
253574
- function parseSort(sort) {
253575
- if (!sort) {
253576
- return;
253577
- }
253578
- if (sort.startsWith("-")) {
253579
- return { [sort.slice(1)]: -1 };
253580
- }
253581
- return { [sort]: 1 };
253582
- }
253583
- function parseFields(fields) {
253584
- if (!fields) {
253585
- return;
253586
- }
253587
- const projection = {};
253588
- for (const field of fields.split(",")) {
253589
- const trimmed = field.trim();
253590
- if (trimmed) {
253591
- projection[trimmed] = 1;
253592
- }
253593
- }
253594
- return Object.keys(projection).length > 0 ? projection : undefined;
253595
- }
253596
253781
  async function createEntityRoutes(db2, logger2, broadcast) {
253597
- const router = import_express3.Router({ mergeParams: true });
253598
- const parseBody = import_express3.json();
253782
+ const router = import_express4.Router({ mergeParams: true });
253783
+ const parseBody = import_express4.json();
253599
253784
  function withCollection(handler) {
253600
253785
  return async (req, res) => {
253601
253786
  const collection = db2.getCollection(req.params.entityName);
@@ -253640,42 +253825,14 @@ async function createEntityRoutes(db2, logger2, broadcast) {
253640
253825
  router.get("/:entityName", withCollection(async (req, res, collection) => {
253641
253826
  const { entityName } = req.params;
253642
253827
  try {
253643
- const { sort, limit, skip: skip2, fields, q: q13 } = req.query;
253644
- let query = {};
253645
- if (q13 && typeof q13 === "string") {
253646
- try {
253647
- query = JSON.parse(q13);
253648
- } catch {
253649
- res.status(400).json({ error: "Invalid query parameter 'q'" });
253650
- return;
253651
- }
253652
- }
253653
- let cursor3 = collection.findAsync(query);
253654
- const sortObj = parseSort(sort);
253655
- if (sortObj) {
253656
- cursor3 = cursor3.sort(sortObj);
253657
- }
253658
- if (skip2) {
253659
- const skipNum = Number.parseInt(skip2, 10);
253660
- if (!Number.isNaN(skipNum)) {
253661
- cursor3 = cursor3.skip(skipNum);
253662
- }
253663
- }
253664
- if (limit) {
253665
- const limitNum = Number.parseInt(limit, 10);
253666
- if (!Number.isNaN(limitNum)) {
253667
- cursor3 = cursor3.limit(limitNum);
253668
- }
253669
- }
253670
- const projection = parseFields(fields);
253671
- if (projection) {
253672
- cursor3 = cursor3.projection(projection);
253673
- }
253674
- const docs = await cursor3;
253675
- res.json(stripInternalFields(docs));
253828
+ res.json(stripInternalFields(await queryEntity(collection, req.query)));
253676
253829
  } catch (error48) {
253677
- logger2.error(`Error in GET /${entityName}:`, error48);
253678
- res.status(500).json({ error: "Internal server error" });
253830
+ if (error48 instanceof InvalidInputError) {
253831
+ res.status(400).json({ error: error48.message });
253832
+ } else {
253833
+ logger2.error(`Error in GET /${entityName}:`, error48);
253834
+ res.status(500).json({ error: "Internal server error" });
253835
+ }
253679
253836
  }
253680
253837
  }));
253681
253838
  router.post("/:entityName", parseBody, withCollection(async (req, res, collection) => {
@@ -253794,7 +253951,7 @@ async function createEntityRoutes(db2, logger2, broadcast) {
253794
253951
  }
253795
253952
 
253796
253953
  // src/cli/dev/dev-server/routes/integrations.ts
253797
- var import_express4 = __toESM(require_express(), 1);
253954
+ var import_express5 = __toESM(require_express(), 1);
253798
253955
  var import_multer = __toESM(require_multer(), 1);
253799
253956
  import { createHash, randomUUID as randomUUID4 } from "node:crypto";
253800
253957
  import fs28 from "node:fs";
@@ -253803,8 +253960,8 @@ function createFileToken(fileUri) {
253803
253960
  return createHash("sha256").update(fileUri).digest("hex");
253804
253961
  }
253805
253962
  function createIntegrationRoutes(mediaFilesDir, baseUrl, remoteProxy, logger2) {
253806
- const router = import_express4.Router({ mergeParams: true });
253807
- const parseBody = import_express4.json();
253963
+ const router = import_express5.Router({ mergeParams: true });
253964
+ const parseBody = import_express5.json();
253808
253965
  const privateFilesDir = path18.join(mediaFilesDir, "private");
253809
253966
  fs28.mkdirSync(mediaFilesDir, { recursive: true });
253810
253967
  fs28.mkdirSync(privateFilesDir, { recursive: true });
@@ -253874,7 +254031,7 @@ function createIntegrationRoutes(mediaFilesDir, baseUrl, remoteProxy, logger2) {
253874
254031
  return router;
253875
254032
  }
253876
254033
  function createCustomIntegrationRoutes(remoteProxy, logger2) {
253877
- const router = import_express4.Router({ mergeParams: true });
254034
+ const router = import_express5.Router({ mergeParams: true });
253878
254035
  router.post("/:slug/:operationId", (req, res, next) => {
253879
254036
  logger2.warn(`"${req.originalUrl}" is not supported in local development, passing call to production`);
253880
254037
  req.url = req.originalUrl;
@@ -255587,7 +255744,7 @@ async function createDevServer(options8) {
255587
255744
  const port = userPort ?? await getPorts({ port: DEFAULT_PORT });
255588
255745
  const baseUrl = `http://localhost:${port}`;
255589
255746
  const { functions, entities, project: project2 } = await options8.loadResources();
255590
- const app = import_express5.default();
255747
+ const app = import_express6.default();
255591
255748
  const remoteProxy = import_http_proxy_middleware2.createProxyMiddleware({
255592
255749
  target: BASE44_APP_URL,
255593
255750
  changeOrigin: true
@@ -255619,6 +255776,8 @@ async function createDevServer(options8) {
255619
255776
  let emitEntityEvent = () => {};
255620
255777
  const entityRoutes = await createEntityRoutes(db2, devLogger, (...args) => emitEntityEvent(...args));
255621
255778
  app.use("/api/apps/:appId/entities", entityRoutes);
255779
+ const authRouter = createAuthRouter(db2, devLogger);
255780
+ app.use("/api/apps/:appId/auth", authRouter);
255622
255781
  const { path: mediaFilesDir } = await $dir();
255623
255782
  app.use("/media/private/:fileUri", (req, res, next) => {
255624
255783
  const { fileUri } = req.params;
@@ -255638,13 +255797,15 @@ async function createDevServer(options8) {
255638
255797
  }
255639
255798
  next();
255640
255799
  });
255641
- app.use("/media", import_express5.default.static(mediaFilesDir));
255800
+ app.use("/media", import_express6.default.static(mediaFilesDir));
255642
255801
  const integrationRoutes = createIntegrationRoutes(mediaFilesDir, baseUrl, remoteProxy, devLogger);
255643
255802
  app.use("/api/apps/:appId/integration-endpoints", integrationRoutes);
255644
255803
  const customIntegrationRoutes = createCustomIntegrationRoutes(remoteProxy, devLogger);
255645
255804
  app.use("/api/apps/:appId/integrations/custom", customIntegrationRoutes);
255646
255805
  app.use((req, res, next) => {
255647
- devLogger.warn(`"${req.originalUrl}" is not supported in local development, passing call to production`);
255806
+ if (!req.originalUrl.endsWith("analytics/track/batch")) {
255807
+ devLogger.warn(`"${req.originalUrl}" is not supported in local development, passing call to production`);
255808
+ }
255648
255809
  remoteProxy(req, res, next);
255649
255810
  });
255650
255811
  const server = await new Promise((resolve8, reject) => {
@@ -255715,6 +255876,7 @@ async function devAction({ log }, options8) {
255715
255876
  const { port: resolvedPort } = await createDevServer({
255716
255877
  log,
255717
255878
  port,
255879
+ cwd: process21.cwd(),
255718
255880
  denoWrapperPath: getDenoWrapperPath(),
255719
255881
  loadResources: async () => {
255720
255882
  const { functions, entities, project: project2 } = await readProjectConfig();
@@ -260222,4 +260384,4 @@ export {
260222
260384
  CLIExitError
260223
260385
  };
260224
260386
 
260225
- //# debugId=CB0E8B897F77942264756E2164756E21
260387
+ //# debugId=00A0741C1AAAE2DF64756E2164756E21