vercel 59.3.0 → 59.4.0

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.
Files changed (82) hide show
  1. package/dist/chunks/{add-4L46WVRT.js → add-73X2SKBH.js} +3 -3
  2. package/dist/chunks/{add-BBWVXE2R.js → add-FQMB3XPM.js} +3 -3
  3. package/dist/chunks/{add-KOD24LEM.js → add-QJ3WT4FW.js} +6 -6
  4. package/dist/chunks/{build-2SX3XIRI.js → build-YUYCLCXD.js} +3 -3
  5. package/dist/chunks/{chunk-YPPWGI3F.js → chunk-2PX6N4FE.js} +3 -3
  6. package/dist/chunks/{chunk-G55RLNFE.js → chunk-BLYBHFIE.js} +4 -4
  7. package/dist/chunks/{chunk-Q6QCRFTC.js → chunk-CHEZBD7H.js} +2 -2
  8. package/dist/chunks/{chunk-DAA5RXUK.js → chunk-DDIZGOCK.js} +1 -1
  9. package/dist/chunks/{chunk-NN2W7WFC.js → chunk-EB5NBVTV.js} +2 -2
  10. package/dist/chunks/{chunk-ANIKVXGZ.js → chunk-EB7NJKPL.js} +1 -1
  11. package/dist/chunks/{chunk-P3BFTZXW.js → chunk-HJVTLJHO.js} +2 -2
  12. package/dist/chunks/{chunk-KDL2L4KL.js → chunk-HMJVUXE6.js} +13577 -13772
  13. package/dist/chunks/{chunk-7GE2K2WR.js → chunk-HURL5EBN.js} +312 -23
  14. package/dist/chunks/{chunk-VTP6WIQA.js → chunk-J5Y2QGGU.js} +257 -4
  15. package/dist/chunks/{chunk-ZHRZMQGN.js → chunk-KSZ4MNHO.js} +1 -1
  16. package/dist/chunks/{chunk-WNS53IOA.js → chunk-LKTQR5JE.js} +1 -1
  17. package/dist/chunks/{chunk-D35JUCTC.js → chunk-NP6BQPCN.js} +3 -3
  18. package/dist/chunks/{chunk-WODLA275.js → chunk-O5DLWLT7.js} +1 -1
  19. package/dist/chunks/{chunk-QKO2DGWR.js → chunk-PD4DYNSB.js} +3 -3
  20. package/dist/chunks/{chunk-AAMJ4ZU4.js → chunk-RI7KKKII.js} +1 -1
  21. package/dist/chunks/{chunk-J5ZEHLFM.js → chunk-TH2XUVDP.js} +10 -1
  22. package/dist/chunks/{chunk-OISTYQGR.js → chunk-UV2ZMFVG.js} +1 -1
  23. package/dist/chunks/{chunk-6GWLC2IP.js → chunk-VCE6QKFE.js} +2 -2
  24. package/dist/chunks/{chunk-KBUCAAG6.js → chunk-X6O6XJEA.js} +5 -5
  25. package/dist/chunks/{chunk-7PEQVFHI.js → chunk-Y3J4VU2H.js} +1 -1
  26. package/dist/chunks/{chunk-CURHMEJX.js → chunk-Y42SPI2H.js} +2 -2
  27. package/dist/chunks/{chunk-Z2G6SO5B.js → chunk-ZFWNMVNR.js} +2 -2
  28. package/dist/chunks/{clear-2DMDKLWZ.js → clear-USQM5VW5.js} +3 -3
  29. package/dist/chunks/{compile-vercel-config-7HZ4UN6R.js → compile-vercel-config-2JNYMI6W.js} +2 -2
  30. package/dist/chunks/{config-CVZ25C54.js → config-VTRIDLY4.js} +3 -3
  31. package/dist/chunks/{delete-4LQKP5DG.js → delete-ILLSBCVQ.js} +3 -3
  32. package/dist/chunks/{delete-QNAGJM6C.js → delete-VTPHK3EB.js} +3 -3
  33. package/dist/chunks/{disable-2RBFIZUB.js → disable-VTOMO64V.js} +3 -3
  34. package/dist/chunks/{discard-UCOSPSUU.js → discard-ZIOZ34ZI.js} +3 -3
  35. package/dist/chunks/{edit-JX73BG3V.js → edit-E3AMR4KM.js} +4 -4
  36. package/dist/chunks/{edit-QSAO74S4.js → edit-JMZ5XWVW.js} +3 -3
  37. package/dist/chunks/{enable-NDSB4T26.js → enable-A4PMZ7QZ.js} +3 -3
  38. package/dist/chunks/{export-DB6BIYQJ.js → export-Y6AJ3WRZ.js} +3 -3
  39. package/dist/chunks/{image-MKB6II6L.js → image-26BKPAUB.js} +4 -4
  40. package/dist/chunks/{import-builders-FIQ7QTVG.js → import-builders-3H7J2SEK.js} +3 -3
  41. package/dist/chunks/{inspect-QWTWAYLS.js → inspect-7DGKYHKW.js} +4 -4
  42. package/dist/chunks/{inspect-NY6QRX5W.js → inspect-GJFVAZIJ.js} +3 -3
  43. package/dist/chunks/{inspect-IYRKEWTM.js → inspect-N3E2PO6K.js} +3 -3
  44. package/dist/chunks/{inspect-XS2TC7TC.js → inspect-OEY4DJRI.js} +3 -3
  45. package/dist/chunks/{inspect-REJXLWLL.js → inspect-ZW5N6O5P.js} +3 -3
  46. package/dist/chunks/{list-CDCITV4K.js → list-2VTCNQEB.js} +2 -2
  47. package/dist/chunks/{list-PXKVKXHG.js → list-DTJBW7OQ.js} +4 -4
  48. package/dist/chunks/{list-VQHBVY3Q.js → list-MIQ5D6PM.js} +3 -3
  49. package/dist/chunks/{login-PE4JK7A2.js → login-L34UHAU5.js} +3 -3
  50. package/dist/chunks/{ls-3GRHYFDM.js → ls-NCPQY4FV.js} +3 -3
  51. package/dist/chunks/{ls-SKOQOPK4.js → ls-OBUDC4SB.js} +3 -3
  52. package/dist/chunks/{ls-DL2POAY2.js → ls-OKO4IHWB.js} +4 -4
  53. package/dist/chunks/{ls-YHS5IEBJ.js → ls-SXJFBLUT.js} +3 -3
  54. package/dist/chunks/{ls-S67TNMEG.js → ls-VDYUFSSC.js} +3 -3
  55. package/dist/chunks/{open-DUN3BTDH.js → open-V5JDGXUP.js} +3 -3
  56. package/dist/chunks/{permissions-VLIZYINB.js → permissions-6CPRPPBY.js} +5 -5
  57. package/dist/chunks/{publish-36BIJPLN.js → publish-R27DPHFO.js} +3 -3
  58. package/dist/chunks/{push-5NTQV3EC.js → push-VLVTBS42.js} +3 -3
  59. package/dist/chunks/{query-ONR2W7HS.js → query-IVVRYMJN.js} +2 -2
  60. package/dist/chunks/{reorder-YKAT4XG3.js → reorder-LJ2RBZM2.js} +3 -3
  61. package/dist/chunks/{reply-DH4ZPEXT.js → reply-USAISZYC.js} +3 -3
  62. package/dist/chunks/{resolve-446IVH6V.js → resolve-CRCJYVS5.js} +3 -3
  63. package/dist/chunks/{restore-HA6TSOOE.js → restore-6PBPEAMU.js} +3 -3
  64. package/dist/chunks/{rm-EG35766L.js → rm-EOD7RDSO.js} +3 -3
  65. package/dist/chunks/{rm-BCPJUK2C.js → rm-HHELZB7R.js} +3 -3
  66. package/dist/chunks/{rm-COV73VE4.js → rm-KGOEOWVK.js} +4 -4
  67. package/dist/chunks/{rm-IKYJI7MP.js → rm-TWU3JR6Z.js} +3 -3
  68. package/dist/chunks/{rule-inspect-FQ2635LY.js → rule-inspect-WFTVRK6B.js} +4 -4
  69. package/dist/chunks/{rules-PBOQISWV.js → rules-AQYTFJI6.js} +7 -7
  70. package/dist/chunks/{schema-4CDJVH7T.js → schema-ZCDCJC7E.js} +2 -2
  71. package/dist/chunks/{tags-HNOL4JXL.js → tags-RCNRFX7U.js} +3 -3
  72. package/dist/chunks/{update-ZIGVLUYG.js → update-I7QGAOYF.js} +6 -6
  73. package/dist/commands/build/index.js +21 -17
  74. package/dist/commands/deploy/index.js +9 -9
  75. package/dist/commands/dev/index.js +70 -31
  76. package/dist/commands/env/index.js +146 -223
  77. package/dist/commands/link/index.js +4 -4
  78. package/dist/commands/list/index.js +3 -3
  79. package/dist/commands-bulk.js +3873 -1925
  80. package/dist/index.js +9 -9
  81. package/dist/version.mjs +1 -1
  82. package/package.json +49 -48
@@ -9,7 +9,7 @@ import {
9
9
  } from "../../chunks/chunk-2HSQ7YUK.js";
10
10
  import {
11
11
  getUpdateCommand
12
- } from "../../chunks/chunk-ANIKVXGZ.js";
12
+ } from "../../chunks/chunk-EB7NJKPL.js";
13
13
  import {
14
14
  getGlobalPathConfig,
15
15
  highlight
@@ -22,18 +22,19 @@ import {
22
22
  } from "../../chunks/chunk-7QVJTI5H.js";
23
23
  import {
24
24
  import_write_build_result,
25
+ require_detect_builders_with_services,
25
26
  require_get_files,
26
27
  require_mime_types,
27
28
  require_service_schedules
28
- } from "../../chunks/chunk-VTP6WIQA.js";
29
+ } from "../../chunks/chunk-J5Y2QGGU.js";
29
30
  import {
30
31
  importBuilders,
31
32
  require_npa
32
- } from "../../chunks/chunk-D35JUCTC.js";
33
+ } from "../../chunks/chunk-NP6BQPCN.js";
33
34
  import "../../chunks/chunk-IB5L4LKZ.js";
34
35
  import {
35
36
  pickOverrides
36
- } from "../../chunks/chunk-ZHRZMQGN.js";
37
+ } from "../../chunks/chunk-KSZ4MNHO.js";
37
38
  import "../../chunks/chunk-R6IGDGX3.js";
38
39
  import {
39
40
  help
@@ -68,14 +69,14 @@ import {
68
69
  setupAndLink,
69
70
  tryDetectServices,
70
71
  validateConfig
71
- } from "../../chunks/chunk-KDL2L4KL.js";
72
+ } from "../../chunks/chunk-HMJVUXE6.js";
72
73
  import {
73
74
  TelemetryClient
74
75
  } from "../../chunks/chunk-CYNB6LL4.js";
75
76
  import {
76
77
  buildCommandWithYes,
77
78
  outputActionRequired
78
- } from "../../chunks/chunk-J5ZEHLFM.js";
79
+ } from "../../chunks/chunk-TH2XUVDP.js";
79
80
  import {
80
81
  require_ms
81
82
  } from "../../chunks/chunk-GGP5R3FU.js";
@@ -16755,6 +16756,8 @@ import path5 from "path";
16755
16756
  var import_chalk3 = __toESM(require_source(), 1);
16756
16757
  var import_ms6 = __toESM(require_ms(), 1);
16757
16758
  var import_fs_extra2 = __toESM(require_lib(), 1);
16759
+ var import_fs_detectors3 = __toESM(require_dist3(), 1);
16760
+ var import_frameworks3 = __toESM(require_frameworks(), 1);
16758
16761
  import { resolve, join as join5 } from "path";
16759
16762
 
16760
16763
  // src/util/dev/server.ts
@@ -16812,13 +16815,16 @@ async function checkForPort(port, timeout) {
16812
16815
  var import_npm_package_arg = __toESM(require_npa(), 1);
16813
16816
  var import_json_parse_better_errors = __toESM(require_json_parse_better_errors(), 1);
16814
16817
  var import_client = __toESM(require_dist2(), 1);
16815
- var import_routing_utils3 = __toESM(require_dist3(), 1);
16816
- var import_fs_detectors3 = __toESM(require_dist4(), 1);
16818
+ var import_routing_utils3 = __toESM(require_dist4(), 1);
16819
+ var import_fs_detectors2 = __toESM(require_dist3(), 1);
16820
+ var import_detect_builders_with_services = __toESM(require_detect_builders_with_services(), 1);
16817
16821
  var import_frameworks2 = __toESM(require_frameworks(), 1);
16818
16822
  import {
16819
16823
  cloneEnv as cloneEnv2,
16820
16824
  getNodeBinPaths as getNodeBinPaths2,
16821
16825
  isQueueBackedService as isQueueBackedService3,
16826
+ isExperimentalService as isExperimentalService2,
16827
+ isExperimentalServiceV2 as isExperimentalServiceV22,
16822
16828
  FileFsRef as FileFsRef2,
16823
16829
  spawnCommand as spawnCommand2,
16824
16830
  shouldUseExperimentalBackends
@@ -16847,7 +16853,7 @@ function isURL(str) {
16847
16853
  }
16848
16854
 
16849
16855
  // src/util/dev/router.ts
16850
- var import_routing_utils = __toESM(require_dist3(), 1);
16856
+ var import_routing_utils = __toESM(require_dist4(), 1);
16851
16857
 
16852
16858
  // src/util/dev/parse-query-string.ts
16853
16859
  function parseQueryString(querystring) {
@@ -17450,7 +17456,7 @@ function getMimeType(fileName) {
17450
17456
  // src/util/dev/builder.ts
17451
17457
  var import_ms = __toESM(require_ms(), 1);
17452
17458
  var import_bytes = __toESM(require_bytes(), 1);
17453
- var import_fs_detectors = __toESM(require_dist4(), 1);
17459
+ var import_fs_detectors = __toESM(require_dist3(), 1);
17454
17460
  var import_pluralize = __toESM(require_pluralize(), 1);
17455
17461
  var import_minimatch = __toESM(require_minimatch(), 1);
17456
17462
  import { readFileSync, unlinkSync } from "fs";
@@ -17480,7 +17486,7 @@ function treeKill(pid, signal = "SIGTERM") {
17480
17486
  }
17481
17487
 
17482
17488
  // src/util/dev/builder.ts
17483
- var import_routing_utils2 = __toESM(require_dist3(), 1);
17489
+ var import_routing_utils2 = __toESM(require_dist4(), 1);
17484
17490
  async function deserializeOutput(obj) {
17485
17491
  switch (obj.type) {
17486
17492
  case "FileFsRef": {
@@ -18046,7 +18052,6 @@ function redirect(it) {
18046
18052
  var import_ms2 = __toESM(require_ms(), 1);
18047
18053
  var import_get_port = __toESM(require_get_port(), 1);
18048
18054
  var import_chalk = __toESM(require_source(), 1);
18049
- var import_fs_detectors2 = __toESM(require_dist4(), 1);
18050
18055
  var import_frameworks = __toESM(require_frameworks(), 1);
18051
18056
  import path2 from "path";
18052
18057
  import { Transform, Writable } from "stream";
@@ -18161,6 +18166,10 @@ function getNextCronDelay(expression, now = /* @__PURE__ */ new Date()) {
18161
18166
 
18162
18167
  // src/util/dev/services-orchestrator.ts
18163
18168
  import {
18169
+ getInternalServiceCronPath,
18170
+ getInternalServiceCronPathPrefix,
18171
+ getInternalServiceWorkerPathPrefix,
18172
+ isExperimentalServiceV2,
18164
18173
  isExperimentalService,
18165
18174
  isQueueBackedService,
18166
18175
  isQueueTriggeredService,
@@ -18368,10 +18377,10 @@ function createServiceLogger(serviceName, colorIndex, maxNameLength) {
18368
18377
  }
18369
18378
  function getServiceRoutePrefixes(service) {
18370
18379
  if (isQueueTriggeredService(service) || isWorkflowTriggeredService(service)) {
18371
- return [(0, import_fs_detectors2.getInternalServiceWorkerPathPrefix)(service.name)];
18380
+ return [getInternalServiceWorkerPathPrefix(service.name)];
18372
18381
  }
18373
18382
  if (isScheduleTriggeredService(service)) {
18374
- return [(0, import_fs_detectors2.getInternalServiceCronPathPrefix)(service.name)];
18383
+ return [getInternalServiceCronPathPrefix(service.name)];
18375
18384
  }
18376
18385
  if (service.type === "web") {
18377
18386
  return [service.routePrefix || "/"];
@@ -18457,7 +18466,7 @@ var ServicesOrchestrator = class {
18457
18466
  const pythonWorkspaces = options.services.filter((service) => service.runtime === "python").map(
18458
18467
  (service) => path2.resolve(
18459
18468
  this.cwd,
18460
- (0, import_fs_detectors2.isExperimentalServiceV2)(service) ? service.root || "." : service.workspace || "."
18469
+ isExperimentalServiceV2(service) ? service.root || "." : service.workspace || "."
18461
18470
  )
18462
18471
  );
18463
18472
  this.pythonServiceCount = new Set(pythonWorkspaces).size;
@@ -18666,7 +18675,7 @@ var ServicesOrchestrator = class {
18666
18675
  colorIndex,
18667
18676
  this.maxNameLength
18668
18677
  );
18669
- const spec = (0, import_fs_detectors2.isExperimentalServiceV2)(service) ? this.getV2StartSpec(service) : this.getV1StartSpec(service);
18678
+ const spec = isExperimentalServiceV2(service) ? this.getV2StartSpec(service) : this.getV1StartSpec(service);
18670
18679
  const port = this.servicePorts.get(service.name);
18671
18680
  if (port !== void 0) {
18672
18681
  spec.env.VERCEL_DEV_PORT = String(port);
@@ -19073,7 +19082,7 @@ var ServicesOrchestrator = class {
19073
19082
  for (const [name, managed] of this.managedServices) {
19074
19083
  const service = this.services.find((candidate) => candidate.name === name);
19075
19084
  const crons = managed.crons && managed.crons.length > 0 ? managed.crons : service && isExperimentalService(service) && isScheduleTriggeredService(service) && service.schedule ? (0, import_service_schedules.getStaticServiceSchedules)(service.schedule).map((schedule) => ({
19076
- path: (0, import_fs_detectors2.getInternalServiceCronPath)(
19085
+ path: getInternalServiceCronPath(
19077
19086
  name,
19078
19087
  service.entrypoint || service.builder.src || "index",
19079
19088
  service.handlerFunction || "cron"
@@ -19764,10 +19773,10 @@ function isApiDirBuild(build) {
19764
19773
  return typeof src === "string" && src.startsWith("api/");
19765
19774
  }
19766
19775
  function sortBuilders(buildA, buildB) {
19767
- if (buildA && buildA.use && (0, import_fs_detectors3.isOfficialRuntime)("static-build", buildA.use)) {
19776
+ if (buildA && buildA.use && (0, import_fs_detectors2.isOfficialRuntime)("static-build", buildA.use)) {
19768
19777
  return 1;
19769
19778
  }
19770
- if (buildB && buildB.use && (0, import_fs_detectors3.isOfficialRuntime)("static-build", buildB.use)) {
19779
+ if (buildB && buildB.use && (0, import_fs_detectors2.isOfficialRuntime)("static-build", buildB.use)) {
19771
19780
  return -1;
19772
19781
  }
19773
19782
  return 0;
@@ -21109,7 +21118,7 @@ Please ensure that ${cmd(err.path)} is properly installed`;
21109
21118
  return void 0;
21110
21119
  }
21111
21120
  async _getVercelConfig() {
21112
- const { compileVercelConfig } = await import("../../chunks/compile-vercel-config-7HZ4UN6R.js");
21121
+ const { compileVercelConfig } = await import("../../chunks/compile-vercel-config-2JNYMI6W.js");
21113
21122
  await compileVercelConfig(this.cwd);
21114
21123
  const configPath = getLocalPathConfig(this.cwd);
21115
21124
  const [
@@ -21140,7 +21149,7 @@ Please ensure that ${cmd(err.path)} is properly installed`;
21140
21149
  const files = (await staticFiles(this.cwd, {})).map(
21141
21150
  (f) => relative2(this.cwd, f)
21142
21151
  );
21143
- const detectedBuilders = await (0, import_fs_detectors3.detectBuilders)(files, pkg, {
21152
+ const detectedBuilders = await (0, import_detect_builders_with_services.detectBuildersWithServices)(files, pkg, {
21144
21153
  tag: "latest",
21145
21154
  bunVersion: vercelConfig.bunVersion,
21146
21155
  functions: vercelConfig.functions,
@@ -21211,11 +21220,11 @@ Please ensure that ${cmd(err.path)} is properly installed`;
21211
21220
  }
21212
21221
  vercelConfig.builds = vercelConfig.builds || [];
21213
21222
  vercelConfig.builds.push(
21214
- (0, import_fs_detectors3.getProxyBuilder)(vercelConfig.proxy, "latest", vercelConfig.functions)
21223
+ (0, import_fs_detectors2.getProxyBuilder)(vercelConfig.proxy, "latest", vercelConfig.functions)
21215
21224
  );
21216
21225
  }
21217
21226
  if (this.sidecars === void 0) {
21218
- const services = (this.services ?? []).filter(import_fs_detectors3.isExperimentalServiceV2);
21227
+ const services = (this.services ?? []).filter(isExperimentalServiceV22);
21219
21228
  this.sidecars = await collectBuilderDevSidecars({
21220
21229
  builds: this.shouldUseServicesOrchestrator() ? services.map((service) => service.builder) : vercelConfig.builds ?? [],
21221
21230
  workPath: this.cwd,
@@ -21241,8 +21250,8 @@ Please ensure that ${cmd(err.path)} is properly installed`;
21241
21250
  return true;
21242
21251
  });
21243
21252
  this.caseSensitive = hasNewRoutingProperties(vercelConfig);
21244
- this.apiDir = (0, import_fs_detectors3.detectApiDirectory)(vercelConfig.builds || []);
21245
- this.apiExtensions = (0, import_fs_detectors3.detectApiExtensions)(vercelConfig.builds || []);
21253
+ this.apiDir = (0, import_fs_detectors2.detectApiDirectory)(vercelConfig.builds || []);
21254
+ this.apiExtensions = (0, import_fs_detectors2.detectApiExtensions)(vercelConfig.builds || []);
21246
21255
  let [runEnv, buildEnv] = await Promise.all([
21247
21256
  this.getLocalEnv(".env", vercelConfig.env),
21248
21257
  this.getLocalEnv(".env.build", vercelConfig.build?.env)
@@ -21380,6 +21389,18 @@ Please ensure that ${cmd(err.path)} is properly installed`;
21380
21389
  resolveBuildFiles(files) {
21381
21390
  return Object.keys(files).filter(this.filter);
21382
21391
  }
21392
+ /**
21393
+ * `this.filter` expects gitignore-style relative paths but chokidar reports
21394
+ * absolute ones, so without relativizing, anchored patterns never match —
21395
+ * including the default `/target` rule for Cargo projects.
21396
+ */
21397
+ isWatcherIgnored(fsPath) {
21398
+ const relativePath = relative2(this.cwd, fsPath);
21399
+ if (relativePath === "") {
21400
+ return false;
21401
+ }
21402
+ return !this.filter(relativePath);
21403
+ }
21383
21404
  start(...listenSpec) {
21384
21405
  if (!this.startPromise) {
21385
21406
  this.startPromise = this._start(...listenSpec).catch((err) => {
@@ -21458,7 +21479,7 @@ Please ensure that ${cmd(err.path)} is properly installed`;
21458
21479
  });
21459
21480
  devCommandPromise = this.orchestrator.startAll();
21460
21481
  this.devProcessOrigin = void 0;
21461
- const queueServices = orchestratorServices.filter(import_fs_detectors3.isExperimentalService).filter(isQueueBackedService3);
21482
+ const queueServices = orchestratorServices.filter(isExperimentalService2).filter(isQueueBackedService3);
21462
21483
  if (queueServices.length > 0) {
21463
21484
  this.queueBroker = new QueueBroker(
21464
21485
  queueServices,
@@ -21471,7 +21492,7 @@ Please ensure that ${cmd(err.path)} is properly installed`;
21471
21492
  }
21472
21493
  output_manager_default.print(`${import_chalk2.default.cyan(">")} Available at:
21473
21494
  `);
21474
- const v1WebServices = (this.services || []).filter(import_fs_detectors3.isExperimentalService).filter((service) => service.type === "web");
21495
+ const v1WebServices = (this.services || []).filter(isExperimentalService2).filter((service) => service.type === "web");
21475
21496
  if (v1WebServices.length > 0) {
21476
21497
  for (const service of v1WebServices) {
21477
21498
  const servicePath = service.routePrefix || "/";
@@ -21514,7 +21535,7 @@ Please ensure that ${cmd(err.path)} is properly installed`;
21514
21535
  }
21515
21536
  await import_fs_extra.default.mkdirp(this.devCacheDir);
21516
21537
  this.watcher = watch(this.cwd, {
21517
- ignored: (path6) => !this.filter(path6),
21538
+ ignored: (fsPath) => this.isWatcherIgnored(fsPath),
21518
21539
  ignoreInitial: true,
21519
21540
  usePolling: false,
21520
21541
  persistent: true
@@ -21835,7 +21856,7 @@ ${error_code}
21835
21856
  if (!this.serviceRoutesTable) {
21836
21857
  this.serviceRoutesTable = /* @__PURE__ */ new Map();
21837
21858
  for (const service of this.services || []) {
21838
- if (!(0, import_fs_detectors3.isExperimentalServiceV2)(service))
21859
+ if (!isExperimentalServiceV22(service))
21839
21860
  continue;
21840
21861
  const { routes, error: error2 } = (0, import_routing_utils3.getTransformedRoutes)({
21841
21862
  routes: service.routes,
@@ -22564,7 +22585,7 @@ function releaseDevLock(projectRoot) {
22564
22585
  }
22565
22586
 
22566
22587
  // src/commands/dev/dev.ts
22567
- async function dev(client, opts, args2, telemetry) {
22588
+ async function dev(client, opts, args2, telemetry, localConfig) {
22568
22589
  const [dir = "."] = args2;
22569
22590
  let cwd = resolve(dir);
22570
22591
  const listen2 = parseListen(opts["--listen"] || "3000");
@@ -22666,6 +22687,24 @@ To link your project, run ${getCommandName("dev")} without \`-L\` or \`--local\`
22666
22687
  displayDetectedServices(services);
22667
22688
  useImplicitServicesEnvInjection = servicesResult.useImplicitEnvInjection;
22668
22689
  }
22690
+ const hasExplicitBuilds = Boolean(localConfig?.builds?.length);
22691
+ const hasExplicitFramework = localConfig?.framework !== void 0;
22692
+ const hasServicesConfig = Boolean(
22693
+ localConfig?.services ?? localConfig?.experimentalServicesV2 ?? localConfig?.experimentalServices
22694
+ );
22695
+ const shouldDetectFramework = link.status === "not_linked" && Boolean(opts["--local"]) && !foundServices && !hasServicesConfig && !hasExplicitBuilds && !hasExplicitFramework;
22696
+ if (shouldDetectFramework) {
22697
+ const detectedFramework = await (0, import_fs_detectors3.detectFramework)({
22698
+ fs: new import_fs_detectors3.LocalFileSystemDetector(cwd),
22699
+ frameworkList: import_frameworks3.frameworkList
22700
+ });
22701
+ if (detectedFramework) {
22702
+ output_manager_default.debug(
22703
+ `Detected framework ${detectedFramework} for unlinked local dev`
22704
+ );
22705
+ projectSettings = { framework: detectedFramework };
22706
+ }
22707
+ }
22669
22708
  let lockAcquired = false;
22670
22709
  if (foundServices) {
22671
22710
  const port = typeof listen2[0] === "number" ? listen2[0] : 0;
@@ -22927,7 +22966,7 @@ async function main(client) {
22927
22966
  return 1;
22928
22967
  }
22929
22968
  try {
22930
- return await dev(client, parsedArgs.flags, args2, telemetry);
22969
+ return await dev(client, parsedArgs.flags, args2, telemetry, vercelConfig);
22931
22970
  } catch (err) {
22932
22971
  if (err instanceof DevCommandExitError || err instanceof ServiceStartError) {
22933
22972
  output_manager_default.error(err.message);