qalita 2.5.4__py3-none-any.whl → 2.6.1__py3-none-any.whl

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 (213) hide show
  1. qalita/_frontend/.next/static/_0oyfpC7N2IGDMa04TT9R/_clientMiddlewareManifest.json +6 -0
  2. qalita/_frontend/.next/static/chunks/236f7e5abd6f09ff.js +4 -0
  3. qalita/_frontend/.next/static/chunks/30ea11065999f7ac.js +1 -0
  4. qalita/_frontend/.next/static/chunks/4dd28bc3f722184a.js +2 -0
  5. qalita/_frontend/.next/static/chunks/711d597b816a80c1.js +1 -0
  6. qalita/_frontend/.next/static/chunks/7340adf74ff47ec0.js +1 -0
  7. qalita/_frontend/.next/static/chunks/a6dad97d9634a72d.js.map +1 -0
  8. qalita/_frontend/.next/static/chunks/{e393fec0d8ba175d.js → ecf559101be0ae12.js} +3 -3
  9. qalita/_frontend/.next/static/chunks/turbopack-25186fc8e1264445.js +4 -0
  10. qalita/_frontend/node_modules/@img/sharp-libvips-linux-x64/versions.json +30 -0
  11. qalita/_frontend/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +30 -0
  12. qalita/_frontend/node_modules/@next/env/package.json +4 -4
  13. qalita/_frontend/node_modules/next/dist/build/analyze/index.js +242 -0
  14. qalita/_frontend/node_modules/next/dist/build/define-env.js +22 -13
  15. qalita/_frontend/node_modules/next/dist/build/entries.js +5 -5
  16. qalita/_frontend/node_modules/next/dist/build/generate-routes-manifest.js +91 -0
  17. qalita/_frontend/node_modules/next/dist/build/index.js +172 -223
  18. qalita/_frontend/node_modules/next/dist/build/output/log.js +4 -7
  19. qalita/_frontend/node_modules/next/dist/build/segment-config/app/app-segments.js +23 -99
  20. qalita/_frontend/node_modules/next/dist/build/segment-config/app/collect-root-param-keys.js +3 -3
  21. qalita/_frontend/node_modules/next/dist/build/spinner.js +3 -3
  22. qalita/_frontend/node_modules/next/dist/build/static-paths/app/extract-pathname-route-param-segments-from-loader-tree.js +137 -0
  23. qalita/_frontend/node_modules/next/dist/build/static-paths/app.js +69 -210
  24. qalita/_frontend/node_modules/next/dist/build/static-paths/utils.js +83 -11
  25. qalita/_frontend/node_modules/next/dist/build/swc/index.js +10 -6
  26. qalita/_frontend/node_modules/next/dist/build/templates/app-page.js +21 -14
  27. qalita/_frontend/node_modules/next/dist/build/templates/app-route.js +8 -10
  28. qalita/_frontend/node_modules/next/dist/build/templates/edge-app-route.js +7 -10
  29. qalita/_frontend/node_modules/next/dist/build/templates/edge-ssr-app.js +16 -20
  30. qalita/_frontend/node_modules/next/dist/build/templates/edge-ssr.js +20 -14
  31. qalita/_frontend/node_modules/next/dist/build/templates/edge-wrapper.js +24 -0
  32. qalita/_frontend/node_modules/next/dist/build/templates/middleware.js +7 -6
  33. qalita/_frontend/node_modules/next/dist/build/templates/pages-edge-api.js +3 -2
  34. qalita/_frontend/node_modules/next/dist/build/turbopack-analyze/index.js +116 -0
  35. qalita/_frontend/node_modules/next/dist/build/turbopack-build/impl.js +2 -1
  36. qalita/_frontend/node_modules/next/dist/build/type-check.js +7 -8
  37. qalita/_frontend/node_modules/next/dist/build/utils.js +45 -4
  38. qalita/_frontend/node_modules/next/dist/build/validate-app-paths.js +242 -0
  39. qalita/_frontend/node_modules/next/dist/build/webpack/loaders/next-app-loader/index.js +20 -2
  40. qalita/_frontend/node_modules/next/dist/build/webpack/loaders/next-edge-app-route-loader/index.js +2 -5
  41. qalita/_frontend/node_modules/next/dist/build/webpack/loaders/next-edge-ssr-loader/index.js +4 -11
  42. qalita/_frontend/node_modules/next/dist/build/webpack/loaders/next-root-params-loader.js +1 -1
  43. qalita/_frontend/node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.js +1 -1
  44. qalita/_frontend/node_modules/next/dist/build/webpack/plugins/middleware-plugin.js +3 -0
  45. qalita/_frontend/node_modules/next/dist/build/webpack-build/impl.js +1 -0
  46. qalita/_frontend/node_modules/next/dist/build/webpack-config.js +35 -3
  47. qalita/_frontend/node_modules/next/dist/cli/next-test.js +3 -5
  48. qalita/_frontend/node_modules/next/dist/client/components/app-router-headers.js +5 -0
  49. qalita/_frontend/node_modules/next/dist/client/components/app-router-instance.js +3 -11
  50. qalita/_frontend/node_modules/next/dist/client/components/app-router.js +8 -28
  51. qalita/_frontend/node_modules/next/dist/client/components/navigation-devtools.js +5 -7
  52. qalita/_frontend/node_modules/next/dist/client/components/navigation.js +4 -3
  53. qalita/_frontend/node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js +3 -22
  54. qalita/_frontend/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js +6 -18
  55. qalita/_frontend/node_modules/next/dist/client/components/router-reducer/ppr-navigations.js +844 -590
  56. qalita/_frontend/node_modules/next/dist/client/components/router-reducer/reducers/hmr-refresh-reducer.js +4 -76
  57. qalita/_frontend/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js +21 -18
  58. qalita/_frontend/node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js +48 -85
  59. qalita/_frontend/node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js +25 -10
  60. qalita/_frontend/node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js +126 -113
  61. qalita/_frontend/node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js +30 -39
  62. qalita/_frontend/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js +0 -1
  63. qalita/_frontend/node_modules/next/dist/client/components/router-reducer/router-reducer.js +2 -2
  64. qalita/_frontend/node_modules/next/dist/client/components/segment-cache/cache-map.js +13 -18
  65. qalita/_frontend/node_modules/next/dist/client/components/segment-cache/cache.js +27 -14
  66. qalita/_frontend/node_modules/next/dist/client/components/segment-cache/lru.js +3 -1
  67. qalita/_frontend/node_modules/next/dist/client/components/segment-cache/navigation.js +176 -133
  68. qalita/_frontend/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +12 -12
  69. qalita/_frontend/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +12 -12
  70. qalita/_frontend/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js +3 -3
  71. qalita/_frontend/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +10 -10
  72. qalita/_frontend/node_modules/next/dist/compiled/react-is/package.json +1 -1
  73. qalita/_frontend/node_modules/next/dist/lib/build-custom-route.js +4 -4
  74. qalita/_frontend/node_modules/next/dist/lib/constants.js +0 -5
  75. qalita/_frontend/node_modules/next/dist/lib/default-transpiled-packages.json +1 -0
  76. qalita/_frontend/node_modules/next/dist/lib/generate-interception-routes-rewrites.js +0 -1
  77. qalita/_frontend/node_modules/next/dist/lib/helpers/get-npx-command.js +3 -3
  78. qalita/_frontend/node_modules/next/dist/lib/inline-static-env.js +1 -1
  79. qalita/_frontend/node_modules/next/dist/lib/known-edge-safe-packages.json +1 -0
  80. qalita/_frontend/node_modules/next/dist/lib/metadata/metadata.js +17 -11
  81. qalita/_frontend/node_modules/next/dist/lib/needs-experimental-react.js +2 -2
  82. qalita/_frontend/node_modules/next/dist/lib/resolve-build-paths.js +44 -76
  83. qalita/_frontend/node_modules/next/dist/lib/server-external-packages.jsonc +103 -0
  84. qalita/_frontend/node_modules/next/dist/lib/static-env.js +6 -6
  85. qalita/_frontend/node_modules/next/dist/lib/turbopack-warning.js +3 -5
  86. qalita/_frontend/node_modules/next/dist/lib/typescript/runTypeCheck.js +61 -5
  87. qalita/_frontend/node_modules/next/dist/lib/typescript/type-paths.js +56 -0
  88. qalita/_frontend/node_modules/next/dist/lib/typescript/writeConfigurationDefaults.js +6 -17
  89. qalita/_frontend/node_modules/next/dist/lib/verify-typescript-setup.js +10 -2
  90. qalita/_frontend/node_modules/next/dist/lib/worker.js +17 -9
  91. qalita/_frontend/node_modules/next/dist/server/app-render/action-handler.js +113 -77
  92. qalita/_frontend/node_modules/next/dist/server/app-render/app-render-prerender-utils.js +36 -15
  93. qalita/_frontend/node_modules/next/dist/server/app-render/app-render-render-utils.js +36 -15
  94. qalita/_frontend/node_modules/next/dist/server/app-render/app-render-scheduling.js +188 -0
  95. qalita/_frontend/node_modules/next/dist/server/app-render/app-render.js +804 -748
  96. qalita/_frontend/node_modules/next/dist/server/app-render/collect-segment-data.js +8 -2
  97. qalita/_frontend/node_modules/next/dist/server/app-render/create-component-styles-and-scripts.js +1 -1
  98. qalita/_frontend/node_modules/next/dist/server/app-render/create-error-handler.js +42 -75
  99. qalita/_frontend/node_modules/next/dist/server/app-render/dynamic-rendering.js +127 -14
  100. qalita/_frontend/node_modules/next/dist/server/app-render/encryption-utils.js +3 -108
  101. qalita/_frontend/node_modules/next/dist/server/app-render/encryption.js +4 -3
  102. qalita/_frontend/node_modules/next/dist/server/app-render/flight-render-result.js +3 -2
  103. qalita/_frontend/node_modules/next/dist/server/app-render/get-css-inlined-link-tags.js +9 -8
  104. qalita/_frontend/node_modules/next/dist/server/app-render/get-layer-assets.js +1 -1
  105. qalita/_frontend/node_modules/next/dist/server/app-render/manifests-singleton.js +257 -0
  106. qalita/_frontend/node_modules/next/dist/server/app-render/prospective-render-utils.js +25 -8
  107. qalita/_frontend/node_modules/next/dist/server/app-render/staged-rendering.js +161 -15
  108. qalita/_frontend/node_modules/next/dist/server/app-render/use-flight-response.js +67 -20
  109. qalita/_frontend/node_modules/next/dist/server/app-render/walk-tree-with-flight-router-state.js +2 -2
  110. qalita/_frontend/node_modules/next/dist/server/async-storage/work-store.js +2 -1
  111. qalita/_frontend/node_modules/next/dist/server/base-server.js +32 -23
  112. qalita/_frontend/node_modules/next/dist/server/capsize-font-metrics.json +181516 -0
  113. qalita/_frontend/node_modules/next/dist/server/config-schema.js +8 -1
  114. qalita/_frontend/node_modules/next/dist/server/config-shared.js +83 -2
  115. qalita/_frontend/node_modules/next/dist/server/config.js +24 -17
  116. qalita/_frontend/node_modules/next/dist/server/dev/hot-reloader-rspack.js +171 -0
  117. qalita/_frontend/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +37 -25
  118. qalita/_frontend/node_modules/next/dist/server/dev/hot-reloader-types.js +1 -0
  119. qalita/_frontend/node_modules/next/dist/server/dev/hot-reloader-webpack.js +62 -57
  120. qalita/_frontend/node_modules/next/dist/server/dev/log-requests.js +11 -3
  121. qalita/_frontend/node_modules/next/dist/server/dev/messages.js +10 -0
  122. qalita/_frontend/node_modules/next/dist/server/dev/serialized-errors.js +67 -0
  123. qalita/_frontend/node_modules/next/dist/server/dev/static-paths-worker.js +10 -0
  124. qalita/_frontend/node_modules/next/dist/server/lib/app-info-log.js +1 -1
  125. qalita/_frontend/node_modules/next/dist/server/lib/chrome-devtools-workspace.js +2 -2
  126. qalita/_frontend/node_modules/next/dist/server/lib/dev-bundler-service.js +6 -10
  127. qalita/_frontend/node_modules/next/dist/server/lib/incremental-cache/file-system-cache.js +4 -4
  128. qalita/_frontend/node_modules/next/dist/server/lib/lazy-result.js +1 -1
  129. qalita/_frontend/node_modules/next/dist/server/lib/patch-fetch.js +9 -9
  130. qalita/_frontend/node_modules/next/dist/server/lib/router-server.js +43 -29
  131. qalita/_frontend/node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.js +0 -21
  132. qalita/_frontend/node_modules/next/dist/server/lib/router-utils/filesystem.js +2 -7
  133. qalita/_frontend/node_modules/next/dist/server/lib/router-utils/resolve-routes.js +8 -4
  134. qalita/_frontend/node_modules/next/dist/server/lib/start-server.js +3 -3
  135. qalita/_frontend/node_modules/next/dist/server/lib/trace/tracer.js +4 -0
  136. qalita/_frontend/node_modules/next/dist/server/load-components.js +3 -9
  137. qalita/_frontend/node_modules/next/dist/server/next-server.js +19 -18
  138. qalita/_frontend/node_modules/next/dist/server/next.js +1 -1
  139. qalita/_frontend/node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js +570 -0
  140. qalita/_frontend/node_modules/next/dist/server/node-environment-extensions/utils.js +60 -3
  141. qalita/_frontend/node_modules/next/dist/server/node-environment.js +1 -0
  142. qalita/_frontend/node_modules/next/dist/server/patch-error-inspect.js +7 -4
  143. qalita/_frontend/node_modules/next/dist/server/request/fallback-params.js +23 -66
  144. qalita/_frontend/node_modules/next/dist/server/route-modules/app-route/module.js +2 -2
  145. qalita/_frontend/node_modules/next/dist/server/route-modules/pages/pages-handler.js +6 -3
  146. qalita/_frontend/node_modules/next/dist/server/route-modules/route-module.js +79 -18
  147. qalita/_frontend/node_modules/next/dist/server/stream-utils/node-web-streams-helper.js +28 -4
  148. qalita/_frontend/node_modules/next/dist/server/typescript/rules/config.js +50 -6
  149. qalita/_frontend/node_modules/next/dist/server/use-cache/use-cache-wrapper.js +68 -23
  150. qalita/_frontend/node_modules/next/dist/server/web/edge-route-module-wrapper.js +7 -5
  151. qalita/_frontend/node_modules/next/dist/server/web/sandbox/context.js +8 -9
  152. qalita/_frontend/node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.js +2 -1
  153. qalita/_frontend/node_modules/next/dist/server/web/spec-extension/revalidate.js +7 -3
  154. qalita/_frontend/node_modules/next/dist/shared/lib/action-revalidation-kind.js +31 -0
  155. qalita/_frontend/node_modules/next/dist/shared/lib/constants.js +6 -1
  156. qalita/_frontend/node_modules/next/dist/shared/lib/deployment-id.js +36 -0
  157. qalita/_frontend/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +1 -1
  158. qalita/_frontend/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js +5 -0
  159. qalita/_frontend/node_modules/next/dist/shared/lib/router/routes/app.js +122 -0
  160. qalita/_frontend/node_modules/next/dist/shared/lib/router/utils/get-dynamic-param.js +20 -49
  161. qalita/_frontend/node_modules/next/dist/shared/lib/router/utils/get-segment-param.js +6 -6
  162. qalita/_frontend/node_modules/next/dist/shared/lib/router/utils/interception-prefix-from-param-type.js +33 -0
  163. qalita/_frontend/node_modules/next/dist/shared/lib/router/utils/resolve-param-value.js +116 -0
  164. qalita/_frontend/node_modules/next/dist/shared/lib/segment-cache/output-export-prefetch-encoding.js +3 -24
  165. qalita/_frontend/node_modules/next/dist/shared/lib/segment.js +5 -0
  166. qalita/_frontend/node_modules/next/dist/shared/lib/turbopack/utils.js +6 -5
  167. qalita/_frontend/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
  168. qalita/_frontend/node_modules/next/dist/telemetry/events/build.js +11 -0
  169. qalita/_frontend/node_modules/next/dist/telemetry/events/version.js +2 -2
  170. qalita/_frontend/node_modules/next/package.json +20 -18
  171. qalita/_frontend/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +2122 -0
  172. qalita/_frontend/node_modules/typescript/lib/de/diagnosticMessages.generated.json +2122 -0
  173. qalita/_frontend/node_modules/typescript/lib/es/diagnosticMessages.generated.json +2122 -0
  174. qalita/_frontend/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +2122 -0
  175. qalita/_frontend/node_modules/typescript/lib/it/diagnosticMessages.generated.json +2122 -0
  176. qalita/_frontend/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +2122 -0
  177. qalita/_frontend/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +2122 -0
  178. qalita/_frontend/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +2122 -0
  179. qalita/_frontend/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +2122 -0
  180. qalita/_frontend/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +2122 -0
  181. qalita/_frontend/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +2122 -0
  182. qalita/_frontend/node_modules/typescript/lib/typesMap.json +497 -0
  183. qalita/_frontend/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +2122 -0
  184. qalita/_frontend/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +2122 -0
  185. qalita/_frontend/package.json +3 -3
  186. qalita/_frontend/server.js +1 -1
  187. qalita/commands/pack.py +3 -3
  188. qalita/commands/source.py +1 -1
  189. qalita/internal/utils.py +11 -7
  190. qalita/web/app.py +20 -4
  191. {qalita-2.5.4.dist-info → qalita-2.6.1.dist-info}/METADATA +1 -1
  192. {qalita-2.5.4.dist-info → qalita-2.6.1.dist-info}/RECORD +197 -168
  193. qalita/_frontend/.next/static/chunks/023d923a37d494fc.js +0 -1
  194. qalita/_frontend/.next/static/chunks/247eb132b7f7b574.js +0 -1
  195. qalita/_frontend/.next/static/chunks/bba035711c7e37a2.js +0 -4
  196. qalita/_frontend/.next/static/chunks/c903f9580a4b6572.js +0 -2
  197. qalita/_frontend/.next/static/chunks/cbd55ab9639e1e66.js +0 -1
  198. qalita/_frontend/.next/static/chunks/turbopack-1ad58da399056f41.js +0 -3
  199. qalita/_frontend/node_modules/next/dist/build/deployment-id.js +0 -18
  200. qalita/_frontend/node_modules/next/dist/client/components/router-reducer/apply-flight-data.js +0 -53
  201. qalita/_frontend/node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js +0 -105
  202. qalita/_frontend/node_modules/next/dist/client/components/router-reducer/fill-cache-with-new-subtree-data.js +0 -110
  203. qalita/_frontend/node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js +0 -131
  204. qalita/_frontend/node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js +0 -25
  205. qalita/_frontend/node_modules/next/dist/client/components/router-reducer/invalidate-cache-by-router-state.js +0 -32
  206. qalita/_frontend/node_modules/next/dist/client/components/router-reducer/refetch-inactive-parallel-segments.js +0 -104
  207. qalita/_frontend/node_modules/next/dist/server/app-render/action-utils.js +0 -90
  208. qalita/_frontend/node_modules/next/dist/server/normalizers/request/prefetch-rsc.js +0 -31
  209. /qalita/_frontend/.next/static/{X4_AlYMbCyee-ZVLjCYMg → _0oyfpC7N2IGDMa04TT9R}/_buildManifest.js +0 -0
  210. /qalita/_frontend/.next/static/{X4_AlYMbCyee-ZVLjCYMg → _0oyfpC7N2IGDMa04TT9R}/_ssgManifest.js +0 -0
  211. {qalita-2.5.4.dist-info → qalita-2.6.1.dist-info}/WHEEL +0 -0
  212. {qalita-2.5.4.dist-info → qalita-2.6.1.dist-info}/entry_points.txt +0 -0
  213. {qalita-2.5.4.dist-info → qalita-2.6.1.dist-info}/licenses/LICENSE +0 -0
@@ -41,6 +41,8 @@ _export(exports, {
41
41
  }
42
42
  });
43
43
  const _invarianterror = require("../../shared/lib/invariant-error");
44
+ const _apprenderscheduling = require("./app-render-scheduling");
45
+ const _fastsetimmediateexternal = require("../node-environment-extensions/fast-set-immediate.external");
44
46
  function prerenderAndAbortInSequentialTasks(prerender, abort) {
45
47
  if (process.env.NEXT_RUNTIME === 'edge') {
46
48
  throw Object.defineProperty(new _invarianterror.InvariantError('`prerenderAndAbortInSequentialTasks` should not be called in edge runtime.'), "__NEXT_ERROR_CODE", {
@@ -50,19 +52,26 @@ function prerenderAndAbortInSequentialTasks(prerender, abort) {
50
52
  });
51
53
  } else {
52
54
  return new Promise((resolve, reject)=>{
55
+ const scheduleTimeout = (0, _apprenderscheduling.createAtomicTimerGroup)();
53
56
  let pendingResult;
54
- setTimeout(()=>{
57
+ scheduleTimeout(()=>{
55
58
  try {
59
+ (0, _fastsetimmediateexternal.DANGEROUSLY_runPendingImmediatesAfterCurrentTask)();
56
60
  pendingResult = prerender();
57
61
  pendingResult.catch(()=>{});
58
62
  } catch (err) {
59
63
  reject(err);
60
64
  }
61
- }, 0);
62
- setTimeout(()=>{
63
- abort();
64
- resolve(pendingResult);
65
- }, 0);
65
+ });
66
+ scheduleTimeout(()=>{
67
+ try {
68
+ (0, _fastsetimmediateexternal.expectNoPendingImmediates)();
69
+ abort();
70
+ resolve(pendingResult);
71
+ } catch (err) {
72
+ reject(err);
73
+ }
74
+ });
66
75
  });
67
76
  }
68
77
  }
@@ -75,22 +84,34 @@ function prerenderAndAbortInSequentialTasksWithStages(prerender, advanceStage, a
75
84
  });
76
85
  } else {
77
86
  return new Promise((resolve, reject)=>{
87
+ const scheduleTimeout = (0, _apprenderscheduling.createAtomicTimerGroup)();
78
88
  let pendingResult;
79
- setTimeout(()=>{
89
+ scheduleTimeout(()=>{
80
90
  try {
91
+ (0, _fastsetimmediateexternal.DANGEROUSLY_runPendingImmediatesAfterCurrentTask)();
81
92
  pendingResult = prerender();
82
93
  pendingResult.catch(()=>{});
83
94
  } catch (err) {
84
95
  reject(err);
85
96
  }
86
- }, 0);
87
- setTimeout(()=>{
88
- advanceStage();
89
- }, 0);
90
- setTimeout(()=>{
91
- abort();
92
- resolve(pendingResult);
93
- }, 0);
97
+ });
98
+ scheduleTimeout(()=>{
99
+ try {
100
+ (0, _fastsetimmediateexternal.DANGEROUSLY_runPendingImmediatesAfterCurrentTask)();
101
+ advanceStage();
102
+ } catch (err) {
103
+ reject(err);
104
+ }
105
+ });
106
+ scheduleTimeout(()=>{
107
+ try {
108
+ (0, _fastsetimmediateexternal.expectNoPendingImmediates)();
109
+ abort();
110
+ resolve(pendingResult);
111
+ } catch (err) {
112
+ reject(err);
113
+ }
114
+ });
94
115
  });
95
116
  }
96
117
  }
@@ -21,6 +21,8 @@ _export(exports, {
21
21
  }
22
22
  });
23
23
  const _invarianterror = require("../../shared/lib/invariant-error");
24
+ const _apprenderscheduling = require("./app-render-scheduling");
25
+ const _fastsetimmediateexternal = require("../node-environment-extensions/fast-set-immediate.external");
24
26
  function scheduleInSequentialTasks(render, followup) {
25
27
  if (process.env.NEXT_RUNTIME === 'edge') {
26
28
  throw Object.defineProperty(new _invarianterror.InvariantError('`scheduleInSequentialTasks` should not be called in edge runtime.'), "__NEXT_ERROR_CODE", {
@@ -30,18 +32,25 @@ function scheduleInSequentialTasks(render, followup) {
30
32
  });
31
33
  } else {
32
34
  return new Promise((resolve, reject)=>{
35
+ const scheduleTimeout = (0, _apprenderscheduling.createAtomicTimerGroup)();
33
36
  let pendingResult;
34
- setTimeout(()=>{
37
+ scheduleTimeout(()=>{
35
38
  try {
39
+ (0, _fastsetimmediateexternal.DANGEROUSLY_runPendingImmediatesAfterCurrentTask)();
36
40
  pendingResult = render();
37
41
  } catch (err) {
38
42
  reject(err);
39
43
  }
40
- }, 0);
41
- setTimeout(()=>{
42
- followup();
43
- resolve(pendingResult);
44
- }, 0);
44
+ });
45
+ scheduleTimeout(()=>{
46
+ try {
47
+ (0, _fastsetimmediateexternal.expectNoPendingImmediates)();
48
+ followup();
49
+ resolve(pendingResult);
50
+ } catch (err) {
51
+ reject(err);
52
+ }
53
+ });
45
54
  });
46
55
  }
47
56
  }
@@ -54,36 +63,48 @@ function pipelineInSequentialTasks(one, two, three) {
54
63
  });
55
64
  } else {
56
65
  return new Promise((resolve, reject)=>{
57
- let oneResult = undefined;
58
- setTimeout(()=>{
66
+ const scheduleTimeout = (0, _apprenderscheduling.createAtomicTimerGroup)();
67
+ let oneResult;
68
+ scheduleTimeout(()=>{
59
69
  try {
70
+ (0, _fastsetimmediateexternal.DANGEROUSLY_runPendingImmediatesAfterCurrentTask)();
60
71
  oneResult = one();
61
72
  } catch (err) {
62
73
  clearTimeout(twoId);
63
74
  clearTimeout(threeId);
75
+ clearTimeout(fourId);
64
76
  reject(err);
65
77
  }
66
- }, 0);
67
- let twoResult = undefined;
68
- const twoId = setTimeout(()=>{
78
+ });
79
+ let twoResult;
80
+ const twoId = scheduleTimeout(()=>{
69
81
  // if `one` threw, then this timeout would've been cleared,
70
82
  // so if we got here, we're guaranteed to have a value.
71
83
  try {
84
+ (0, _fastsetimmediateexternal.DANGEROUSLY_runPendingImmediatesAfterCurrentTask)();
72
85
  twoResult = two(oneResult);
73
86
  } catch (err) {
74
87
  clearTimeout(threeId);
88
+ clearTimeout(fourId);
75
89
  reject(err);
76
90
  }
77
- }, 0);
78
- const threeId = setTimeout(()=>{
91
+ });
92
+ let threeResult;
93
+ const threeId = scheduleTimeout(()=>{
79
94
  // if `two` threw, then this timeout would've been cleared,
80
95
  // so if we got here, we're guaranteed to have a value.
81
96
  try {
82
- resolve(three(twoResult));
97
+ (0, _fastsetimmediateexternal.expectNoPendingImmediates)();
98
+ threeResult = three(twoResult);
83
99
  } catch (err) {
100
+ clearTimeout(fourId);
84
101
  reject(err);
85
102
  }
86
- }, 0);
103
+ });
104
+ // We wait a task before resolving/rejecting
105
+ const fourId = scheduleTimeout(()=>{
106
+ resolve(threeResult);
107
+ });
87
108
  });
88
109
  }
89
110
  }
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "createAtomicTimerGroup", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return createAtomicTimerGroup;
9
+ }
10
+ });
11
+ const _invarianterror = require("../../shared/lib/invariant-error");
12
+ const _fastsetimmediateexternal = require("../node-environment-extensions/fast-set-immediate.external");
13
+ /*
14
+ ==========================
15
+ | Background |
16
+ ==========================
17
+
18
+ Node.js does not guarantee that two timers scheduled back to back will run
19
+ on the same iteration of the event loop:
20
+
21
+ ```ts
22
+ setTimeout(one, 0)
23
+ setTimeout(two, 0)
24
+ ```
25
+
26
+ Internally, each timer is assigned a `_idleStart` property that holds
27
+ an internal libuv timestamp in millisecond resolution.
28
+ This will be used to determine if the timer is already "expired" and should be executed.
29
+ However, even in sync code, it's possible for two timers to get different `_idleStart` values.
30
+ This can cause one of the timers to be executed, and the other to be delayed until the next timer phase.
31
+
32
+ The delaying happens [here](https://github.com/nodejs/node/blob/c208ffc66bb9418ff026c4e3fa82e5b4387bd147/lib/internal/timers.js#L556-L564).
33
+ and can be debugged by running node with `NODE_DEBUG=timer`.
34
+
35
+ The easiest way to observe it is to run this program in a loop until it exits with status 1:
36
+
37
+ ```
38
+ // test.js
39
+
40
+ let immediateRan = false
41
+ const t1 = setTimeout(() => {
42
+ console.log('timeout 1')
43
+ setImmediate(() => {
44
+ console.log('immediate 1')
45
+ immediateRan = true
46
+ })
47
+ })
48
+
49
+ const t2 = setTimeout(() => {
50
+ console.log('timeout 2')
51
+ if (immediateRan) {
52
+ console.log('immediate ran before the second timeout!')
53
+ console.log(
54
+ `t1._idleStart: ${t1._idleStart}, t2_idleStart: ${t2._idleStart}`
55
+ );
56
+ process.exit(1)
57
+ }
58
+ })
59
+ ```
60
+
61
+ ```bash
62
+ #!/usr/bin/env bash
63
+
64
+ i=1;
65
+ while true; do
66
+ output="$(NODE_DEBUG=timer node test.js 2>&1)";
67
+ if [ "$?" -eq 1 ]; then
68
+ echo "failed after $i iterations";
69
+ echo "$output";
70
+ break;
71
+ fi;
72
+ i=$((i+1));
73
+ done
74
+ ```
75
+
76
+ If `t2` is deferred to the next iteration of the event loop,
77
+ then the immediate scheduled from inside `t1` will run first.
78
+ When this occurs, `_idleStart` is reliably different between `t1` and `t2`.
79
+
80
+ ==========================
81
+ | Solution |
82
+ ==========================
83
+
84
+ We can guarantee that multiple timers (with the same delay, usually `0`)
85
+ run together without any delays by making sure that their `_idleStart`s are the same,
86
+ because that's what's used to determine if a timer should be deferred or not.
87
+ Luckily, this property is currently exposed to userland and mutable,
88
+ so we can patch it.
89
+
90
+ Another related trick we could potentially apply is making
91
+ a timer immediately be considered expired by doing `timer._idleStart -= 2`.
92
+ (the value must be more than `1`, the delay that actually gets set for `setTimeout(cb, 0)`).
93
+ This makes node view this timer as "a 1ms timer scheduled 2ms ago",
94
+ meaning that it should definitely run in the next timer phase.
95
+ However, I'm not confident we know all the side effects of doing this,
96
+ so for now, simply ensuring coordination is enough.
97
+ */ let shouldAttemptPatching = true;
98
+ function warnAboutTimers() {
99
+ console.warn("Next.js cannot guarantee that Cache Components will run as expected due to the current runtime's implementation of `setTimeout()`.\nPlease report a github issue here: https://github.com/vercel/next.js/issues/new/");
100
+ }
101
+ function createAtomicTimerGroup(delayMs = 0) {
102
+ if (process.env.NEXT_RUNTIME === 'edge') {
103
+ throw Object.defineProperty(new _invarianterror.InvariantError('createAtomicTimerGroup cannot be called in the edge runtime'), "__NEXT_ERROR_CODE", {
104
+ value: "E934",
105
+ enumerable: false,
106
+ configurable: true
107
+ });
108
+ } else {
109
+ let isFirstCallback = true;
110
+ let firstTimerIdleStart = null;
111
+ let didFirstTimerRun = false;
112
+ // As a sanity check, we schedule an immediate from the first timeout
113
+ // to check if the execution was interrupted (i.e. if it ran between the timeouts).
114
+ // Note that we're deliberately bypassing the "fast setImmediate" patch here --
115
+ // otherwise, this check would always fail, because the immediate
116
+ // would always run before the second timeout.
117
+ let didImmediateRun = false;
118
+ function runFirstCallback(callback) {
119
+ didFirstTimerRun = true;
120
+ if (shouldAttemptPatching) {
121
+ (0, _fastsetimmediateexternal.unpatchedSetImmediate)(()=>{
122
+ didImmediateRun = true;
123
+ });
124
+ }
125
+ return callback();
126
+ }
127
+ function runSubsequentCallback(callback) {
128
+ if (shouldAttemptPatching) {
129
+ if (didImmediateRun) {
130
+ // If the immediate managed to run between the timers, then we're not
131
+ // able to provide the guarantees that we're supposed to
132
+ shouldAttemptPatching = false;
133
+ warnAboutTimers();
134
+ }
135
+ }
136
+ return callback();
137
+ }
138
+ return function scheduleTimeout(callback) {
139
+ if (didFirstTimerRun) {
140
+ throw Object.defineProperty(new _invarianterror.InvariantError('Cannot schedule more timers into a group that already executed'), "__NEXT_ERROR_CODE", {
141
+ value: "E935",
142
+ enumerable: false,
143
+ configurable: true
144
+ });
145
+ }
146
+ const timer = setTimeout(isFirstCallback ? runFirstCallback : runSubsequentCallback, delayMs, callback);
147
+ isFirstCallback = false;
148
+ if (!shouldAttemptPatching) {
149
+ // We already tried patching some timers, and it didn't work.
150
+ // No point trying again.
151
+ return timer;
152
+ }
153
+ // NodeJS timers have a `_idleStart` property, but it doesn't exist e.g. in Bun.
154
+ // If it's not present, we'll warn and try to continue.
155
+ try {
156
+ if ('_idleStart' in timer && typeof timer._idleStart === 'number') {
157
+ // If this is the first timer that was scheduled, save its `_idleStart`.
158
+ // We'll copy it onto subsequent timers to guarantee that they'll all be
159
+ // considered expired in the same iteration of the event loop
160
+ // and thus will all be executed in the same timer phase.
161
+ if (firstTimerIdleStart === null) {
162
+ firstTimerIdleStart = timer._idleStart;
163
+ } else {
164
+ timer._idleStart = firstTimerIdleStart;
165
+ }
166
+ } else {
167
+ shouldAttemptPatching = false;
168
+ warnAboutTimers();
169
+ }
170
+ } catch (err) {
171
+ // This should never fail in current Node, but it might start failing in the future.
172
+ // We might be okay even without tweaking the timers, so warn and try to continue.
173
+ console.error(Object.defineProperty(new _invarianterror.InvariantError('An unexpected error occurred while adjusting `_idleStart` on an atomic timer', {
174
+ cause: err
175
+ }), "__NEXT_ERROR_CODE", {
176
+ value: "E933",
177
+ enumerable: false,
178
+ configurable: true
179
+ }));
180
+ shouldAttemptPatching = false;
181
+ warnAboutTimers();
182
+ }
183
+ return timer;
184
+ };
185
+ }
186
+ }
187
+
188
+ //# sourceMappingURL=app-render-scheduling.js.map