@crowi/api 2.0.0-alpha.1 → 2.0.0-alpha.3

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 (439) hide show
  1. package/dist/collab/attach.d.ts +34 -10
  2. package/dist/collab/attach.js +77 -1
  3. package/dist/collab/attach.js.map +1 -1
  4. package/dist/crowi/index.js +7 -6
  5. package/dist/crowi/index.js.map +1 -1
  6. package/dist/hono/handlers/activation.d.ts +3 -3
  7. package/dist/hono/handlers/admin/users.d.ts +118 -0
  8. package/dist/hono/handlers/admin/users.js +28 -0
  9. package/dist/hono/handlers/admin/users.js.map +1 -1
  10. package/dist/hono/handlers/app.d.ts +1 -0
  11. package/dist/hono/handlers/app.js +11 -0
  12. package/dist/hono/handlers/app.js.map +1 -1
  13. package/dist/hono/handlers/attachment-stream.js +23 -0
  14. package/dist/hono/handlers/attachment-stream.js.map +1 -1
  15. package/dist/hono/handlers/draft.js +10 -0
  16. package/dist/hono/handlers/draft.js.map +1 -1
  17. package/dist/hono/handlers/emailChange.d.ts +4 -4
  18. package/dist/hono/handlers/inviteAccept.d.ts +6 -6
  19. package/dist/hono/handlers/page-collab.js +4 -0
  20. package/dist/hono/handlers/page-collab.js.map +1 -1
  21. package/dist/hono/handlers/page.d.ts +251 -0
  22. package/dist/hono/handlers/page.js +123 -6
  23. package/dist/hono/handlers/page.js.map +1 -1
  24. package/dist/hono/handlers/passwordReset.d.ts +5 -5
  25. package/dist/hono/handlers/tokenAuth.d.ts +7 -7
  26. package/dist/mcp/result.d.ts +42 -16
  27. package/dist/mcp/result.js +56 -10
  28. package/dist/mcp/result.js.map +1 -1
  29. package/dist/mcp/tools/page.js +21 -1
  30. package/dist/mcp/tools/page.js.map +1 -1
  31. package/dist/mcp/tools/search.d.ts +12 -0
  32. package/dist/mcp/tools/search.js +21 -5
  33. package/dist/mcp/tools/search.js.map +1 -1
  34. package/dist/migration/cli-api.d.ts +8 -1
  35. package/dist/migration/cli-api.js +2 -0
  36. package/dist/migration/cli-api.js.map +1 -1
  37. package/dist/migration/helpers.d.ts +13 -0
  38. package/dist/migration/helpers.js +29 -0
  39. package/dist/migration/helpers.js.map +1 -0
  40. package/dist/migration/migrations/code-mask.d.ts +76 -0
  41. package/dist/migration/migrations/code-mask.js +224 -0
  42. package/dist/migration/migrations/code-mask.js.map +1 -0
  43. package/dist/migration/migrations/files-url-to-attachments.d.ts +99 -0
  44. package/dist/migration/migrations/files-url-to-attachments.js +305 -0
  45. package/dist/migration/migrations/files-url-to-attachments.js.map +1 -0
  46. package/dist/migration/migrations/index.js +4 -0
  47. package/dist/migration/migrations/index.js.map +1 -1
  48. package/dist/migration/migrations/page-status-default.d.ts +31 -1
  49. package/dist/migration/migrations/published-current-revision.d.ts +47 -0
  50. package/dist/migration/migrations/published-current-revision.js +90 -0
  51. package/dist/migration/migrations/published-current-revision.js.map +1 -0
  52. package/dist/migration/migrations/relocate-reserved-api-paths.d.ts +37 -1
  53. package/dist/migration/migrations/relocate-reserved-api-paths.js +11 -3
  54. package/dist/migration/migrations/relocate-reserved-api-paths.js.map +1 -1
  55. package/dist/migration/migrations/revisions-schema-unify.d.ts +35 -1
  56. package/dist/migration/migrations/user-unique-prepare.d.ts +55 -1
  57. package/dist/migration/migrations/user-unique-prepare.js +5 -0
  58. package/dist/migration/migrations/user-unique-prepare.js.map +1 -1
  59. package/dist/migration/migrations/wikilink-format.d.ts +75 -12
  60. package/dist/migration/migrations/wikilink-format.js +23 -157
  61. package/dist/migration/migrations/wikilink-format.js.map +1 -1
  62. package/dist/migration/migrations/wikilink-html-recover.d.ts +191 -0
  63. package/dist/migration/migrations/wikilink-html-recover.js +340 -0
  64. package/dist/migration/migrations/wikilink-html-recover.js.map +1 -0
  65. package/dist/migration/registry.d.ts +8 -2
  66. package/dist/migration/registry.js +5 -1
  67. package/dist/migration/registry.js.map +1 -1
  68. package/dist/migration/run-boot-migrations.d.ts +4 -1
  69. package/dist/migration/run-boot-migrations.js +55 -23
  70. package/dist/migration/run-boot-migrations.js.map +1 -1
  71. package/dist/migration/runner.js +8 -1
  72. package/dist/migration/runner.js.map +1 -1
  73. package/dist/migration/types.d.ts +57 -5
  74. package/dist/migration/types.js.map +1 -1
  75. package/dist/models/page.d.ts +23 -3
  76. package/dist/models/page.js +91 -5
  77. package/dist/models/page.js.map +1 -1
  78. package/dist/models/user.d.ts +1 -0
  79. package/dist/models/user.js +40 -21
  80. package/dist/models/user.js.map +1 -1
  81. package/dist/plugin/plugin-manager.js +1 -1
  82. package/dist/renderer/core/headings.d.ts +12 -1
  83. package/dist/renderer/core/headings.js +48 -8
  84. package/dist/renderer/core/headings.js.map +1 -1
  85. package/dist/renderer/pipeline.d.ts +6 -0
  86. package/dist/renderer/pipeline.js.map +1 -1
  87. package/dist/renderer/registry.js +1 -1
  88. package/dist/util/page-response.js +19 -2
  89. package/dist/util/page-response.js.map +1 -1
  90. package/dist/util/ws-token.d.ts +13 -0
  91. package/dist/util/ws-token.js +43 -3
  92. package/dist/util/ws-token.js.map +1 -1
  93. package/package.json +13 -7
  94. package/views/mail/layout.mjml +7 -5
  95. package/dist/common/functions/path2name.d.ts +0 -1
  96. package/dist/common/functions/path2name.js +0 -22
  97. package/dist/common/functions/path2name.js.map +0 -1
  98. package/dist/common/functions/renderIcon.d.ts +0 -1
  99. package/dist/common/functions/renderIcon.js +0 -9
  100. package/dist/common/functions/renderIcon.js.map +0 -1
  101. package/dist/controllers/admin.d.ts +0 -3
  102. package/dist/controllers/admin.js +0 -474
  103. package/dist/controllers/admin.js.map +0 -1
  104. package/dist/controllers/attachment.d.ts +0 -4
  105. package/dist/controllers/attachment.js +0 -200
  106. package/dist/controllers/attachment.js.map +0 -1
  107. package/dist/controllers/backlink.d.ts +0 -3
  108. package/dist/controllers/backlink.js +0 -42
  109. package/dist/controllers/backlink.js.map +0 -1
  110. package/dist/controllers/bookmark.d.ts +0 -3
  111. package/dist/controllers/bookmark.js +0 -100
  112. package/dist/controllers/bookmark.js.map +0 -1
  113. package/dist/controllers/comment.d.ts +0 -3
  114. package/dist/controllers/comment.js +0 -111
  115. package/dist/controllers/comment.js.map +0 -1
  116. package/dist/controllers/index.d.ts +0 -25
  117. package/dist/controllers/index.js +0 -44
  118. package/dist/controllers/index.js.map +0 -1
  119. package/dist/controllers/installer.d.ts +0 -3
  120. package/dist/controllers/installer.js +0 -48
  121. package/dist/controllers/installer.js.map +0 -1
  122. package/dist/controllers/login.d.ts +0 -4
  123. package/dist/controllers/login.js +0 -438
  124. package/dist/controllers/login.js.map +0 -1
  125. package/dist/controllers/logout.d.ts +0 -5
  126. package/dist/controllers/logout.js +0 -11
  127. package/dist/controllers/logout.js.map +0 -1
  128. package/dist/controllers/me.d.ts +0 -4
  129. package/dist/controllers/me.js +0 -369
  130. package/dist/controllers/me.js.map +0 -1
  131. package/dist/controllers/notification.d.ts +0 -3
  132. package/dist/controllers/notification.js +0 -88
  133. package/dist/controllers/notification.js.map +0 -1
  134. package/dist/controllers/page.d.ts +0 -3
  135. package/dist/controllers/page.js +0 -881
  136. package/dist/controllers/page.js.map +0 -1
  137. package/dist/controllers/revision.d.ts +0 -3
  138. package/dist/controllers/revision.js +0 -91
  139. package/dist/controllers/revision.js.map +0 -1
  140. package/dist/controllers/search.d.ts +0 -3
  141. package/dist/controllers/search.js +0 -93
  142. package/dist/controllers/search.js.map +0 -1
  143. package/dist/controllers/share.d.ts +0 -3
  144. package/dist/controllers/share.js +0 -207
  145. package/dist/controllers/share.js.map +0 -1
  146. package/dist/controllers/shareAccess.d.ts +0 -3
  147. package/dist/controllers/shareAccess.js +0 -28
  148. package/dist/controllers/shareAccess.js.map +0 -1
  149. package/dist/controllers/slack.d.ts +0 -3
  150. package/dist/controllers/slack.js +0 -87
  151. package/dist/controllers/slack.js.map +0 -1
  152. package/dist/controllers/tokenAuth.d.ts +0 -10
  153. package/dist/controllers/tokenAuth.js +0 -292
  154. package/dist/controllers/tokenAuth.js.map +0 -1
  155. package/dist/controllers/user.d.ts +0 -3
  156. package/dist/controllers/user.js +0 -67
  157. package/dist/controllers/user.js.map +0 -1
  158. package/dist/controllers/version.d.ts +0 -4
  159. package/dist/controllers/version.js +0 -19
  160. package/dist/controllers/version.js.map +0 -1
  161. package/dist/crowi/express-init.d.ts +0 -4
  162. package/dist/crowi/express-init.js +0 -101
  163. package/dist/crowi/express-init.js.map +0 -1
  164. package/dist/form/admin/app.d.ts +0 -2
  165. package/dist/form/admin/app.js +0 -9
  166. package/dist/form/admin/app.js.map +0 -1
  167. package/dist/form/admin/auth.d.ts +0 -2
  168. package/dist/form/admin/auth.js +0 -9
  169. package/dist/form/admin/auth.js.map +0 -1
  170. package/dist/form/admin/aws.d.ts +0 -2
  171. package/dist/form/admin/aws.js +0 -13
  172. package/dist/form/admin/aws.js.map +0 -1
  173. package/dist/form/admin/github.d.ts +0 -2
  174. package/dist/form/admin/github.js +0 -15
  175. package/dist/form/admin/github.js.map +0 -1
  176. package/dist/form/admin/google.d.ts +0 -2
  177. package/dist/form/admin/google.js +0 -13
  178. package/dist/form/admin/google.js.map +0 -1
  179. package/dist/form/admin/mail.d.ts +0 -2
  180. package/dist/form/admin/mail.js +0 -13
  181. package/dist/form/admin/mail.js.map +0 -1
  182. package/dist/form/admin/sec.d.ts +0 -2
  183. package/dist/form/admin/sec.js +0 -10
  184. package/dist/form/admin/sec.js.map +0 -1
  185. package/dist/form/admin/slackSetting.d.ts +0 -2
  186. package/dist/form/admin/slackSetting.js +0 -13
  187. package/dist/form/admin/slackSetting.js.map +0 -1
  188. package/dist/form/admin/userEdit.d.ts +0 -2
  189. package/dist/form/admin/userEdit.js +0 -9
  190. package/dist/form/admin/userEdit.js.map +0 -1
  191. package/dist/form/admin/userInvite.d.ts +0 -2
  192. package/dist/form/admin/userInvite.js +0 -9
  193. package/dist/form/admin/userInvite.js.map +0 -1
  194. package/dist/form/comment.d.ts +0 -2
  195. package/dist/form/comment.js +0 -9
  196. package/dist/form/comment.js.map +0 -1
  197. package/dist/form/index.d.ts +0 -25
  198. package/dist/form/index.js +0 -48
  199. package/dist/form/index.js.map +0 -1
  200. package/dist/form/invited.d.ts +0 -2
  201. package/dist/form/invited.js +0 -13
  202. package/dist/form/invited.js.map +0 -1
  203. package/dist/form/login.d.ts +0 -2
  204. package/dist/form/login.js +0 -11
  205. package/dist/form/login.js.map +0 -1
  206. package/dist/form/me/apiToken.d.ts +0 -2
  207. package/dist/form/me/apiToken.js +0 -9
  208. package/dist/form/me/apiToken.js.map +0 -1
  209. package/dist/form/me/password.d.ts +0 -2
  210. package/dist/form/me/password.js +0 -11
  211. package/dist/form/me/password.js.map +0 -1
  212. package/dist/form/me/user.d.ts +0 -2
  213. package/dist/form/me/user.js +0 -9
  214. package/dist/form/me/user.js.map +0 -1
  215. package/dist/form/register.d.ts +0 -2
  216. package/dist/form/register.js +0 -13
  217. package/dist/form/register.js.map +0 -1
  218. package/dist/form/revision.d.ts +0 -2
  219. package/dist/form/revision.js +0 -13
  220. package/dist/form/revision.js.map +0 -1
  221. package/dist/hono/handlers/admin/share.d.ts +0 -106
  222. package/dist/hono/handlers/admin/share.js +0 -55
  223. package/dist/hono/handlers/admin/share.js.map +0 -1
  224. package/dist/middlewares/accessTokenParser.d.ts +0 -4
  225. package/dist/middlewares/accessTokenParser.js +0 -29
  226. package/dist/middlewares/accessTokenParser.js.map +0 -1
  227. package/dist/middlewares/adminRequired.d.ts +0 -10
  228. package/dist/middlewares/adminRequired.js +0 -35
  229. package/dist/middlewares/adminRequired.js.map +0 -1
  230. package/dist/middlewares/applicationInstalled.d.ts +0 -3
  231. package/dist/middlewares/applicationInstalled.js +0 -20
  232. package/dist/middlewares/applicationInstalled.js.map +0 -1
  233. package/dist/middlewares/applicationNotInstalled.d.ts +0 -3
  234. package/dist/middlewares/applicationNotInstalled.js +0 -13
  235. package/dist/middlewares/applicationNotInstalled.js.map +0 -1
  236. package/dist/middlewares/basicAuth.d.ts +0 -4
  237. package/dist/middlewares/basicAuth.js +0 -23
  238. package/dist/middlewares/basicAuth.js.map +0 -1
  239. package/dist/middlewares/csrfVerify.d.ts +0 -4
  240. package/dist/middlewares/csrfVerify.js +0 -24
  241. package/dist/middlewares/csrfVerify.js.map +0 -1
  242. package/dist/middlewares/encodeSpace.d.ts +0 -3
  243. package/dist/middlewares/encodeSpace.js +0 -14
  244. package/dist/middlewares/encodeSpace.js.map +0 -1
  245. package/dist/middlewares/fileAccessRightOrLoginRequired.d.ts +0 -4
  246. package/dist/middlewares/fileAccessRightOrLoginRequired.js +0 -29
  247. package/dist/middlewares/fileAccessRightOrLoginRequired.js.map +0 -1
  248. package/dist/middlewares/index.d.ts +0 -16
  249. package/dist/middlewares/index.js +0 -30
  250. package/dist/middlewares/index.js.map +0 -1
  251. package/dist/middlewares/jwtAdminRequired.d.ts +0 -8
  252. package/dist/middlewares/jwtAdminRequired.js +0 -35
  253. package/dist/middlewares/jwtAdminRequired.js.map +0 -1
  254. package/dist/middlewares/jwtAuth.d.ts +0 -4
  255. package/dist/middlewares/jwtAuth.js +0 -104
  256. package/dist/middlewares/jwtAuth.js.map +0 -1
  257. package/dist/middlewares/loginChecker.d.ts +0 -4
  258. package/dist/middlewares/loginChecker.js +0 -32
  259. package/dist/middlewares/loginChecker.js.map +0 -1
  260. package/dist/middlewares/loginRequired.d.ts +0 -4
  261. package/dist/middlewares/loginRequired.js +0 -88
  262. package/dist/middlewares/loginRequired.js.map +0 -1
  263. package/dist/routes/admin.d.ts +0 -4
  264. package/dist/routes/admin.js +0 -17
  265. package/dist/routes/admin.js.map +0 -1
  266. package/dist/routes/api/admin.d.ts +0 -4
  267. package/dist/routes/api/admin.js +0 -37
  268. package/dist/routes/api/admin.js.map +0 -1
  269. package/dist/routes/api/attachment.d.ts +0 -4
  270. package/dist/routes/api/attachment.js +0 -19
  271. package/dist/routes/api/attachment.js.map +0 -1
  272. package/dist/routes/api/bookmark.d.ts +0 -4
  273. package/dist/routes/api/bookmark.js +0 -15
  274. package/dist/routes/api/bookmark.js.map +0 -1
  275. package/dist/routes/api/comment.d.ts +0 -4
  276. package/dist/routes/api/comment.js +0 -14
  277. package/dist/routes/api/comment.js.map +0 -1
  278. package/dist/routes/api/index.d.ts +0 -4
  279. package/dist/routes/api/index.js +0 -36
  280. package/dist/routes/api/index.js.map +0 -1
  281. package/dist/routes/api/like.d.ts +0 -4
  282. package/dist/routes/api/like.js +0 -13
  283. package/dist/routes/api/like.js.map +0 -1
  284. package/dist/routes/api/notification.d.ts +0 -4
  285. package/dist/routes/api/notification.js +0 -15
  286. package/dist/routes/api/notification.js.map +0 -1
  287. package/dist/routes/api/page.d.ts +0 -4
  288. package/dist/routes/api/page.js +0 -24
  289. package/dist/routes/api/page.js.map +0 -1
  290. package/dist/routes/api/revision.d.ts +0 -4
  291. package/dist/routes/api/revision.js +0 -14
  292. package/dist/routes/api/revision.js.map +0 -1
  293. package/dist/routes/api/share.d.ts +0 -4
  294. package/dist/routes/api/share.js +0 -16
  295. package/dist/routes/api/share.js.map +0 -1
  296. package/dist/routes/api/version.d.ts +0 -4
  297. package/dist/routes/api/version.js +0 -10
  298. package/dist/routes/api/version.js.map +0 -1
  299. package/dist/routes/index.d.ts +0 -4
  300. package/dist/routes/index.js +0 -71
  301. package/dist/routes/index.js.map +0 -1
  302. package/dist/routes/login.d.ts +0 -4
  303. package/dist/routes/login.js +0 -18
  304. package/dist/routes/login.js.map +0 -1
  305. package/dist/routes/me.d.ts +0 -4
  306. package/dist/routes/me.js +0 -24
  307. package/dist/routes/me.js.map +0 -1
  308. package/dist/routes/ts-rest/admin/app.d.ts +0 -4
  309. package/dist/routes/ts-rest/admin/app.js +0 -67
  310. package/dist/routes/ts-rest/admin/app.js.map +0 -1
  311. package/dist/routes/ts-rest/admin/auth.d.ts +0 -4
  312. package/dist/routes/ts-rest/admin/auth.js +0 -95
  313. package/dist/routes/ts-rest/admin/auth.js.map +0 -1
  314. package/dist/routes/ts-rest/admin/index.d.ts +0 -10
  315. package/dist/routes/ts-rest/admin/index.js +0 -35
  316. package/dist/routes/ts-rest/admin/index.js.map +0 -1
  317. package/dist/routes/ts-rest/admin/mail.d.ts +0 -4
  318. package/dist/routes/ts-rest/admin/mail.js +0 -156
  319. package/dist/routes/ts-rest/admin/mail.js.map +0 -1
  320. package/dist/routes/ts-rest/admin/plugins.d.ts +0 -4
  321. package/dist/routes/ts-rest/admin/plugins.js +0 -317
  322. package/dist/routes/ts-rest/admin/plugins.js.map +0 -1
  323. package/dist/routes/ts-rest/admin/search.d.ts +0 -4
  324. package/dist/routes/ts-rest/admin/search.js +0 -67
  325. package/dist/routes/ts-rest/admin/search.js.map +0 -1
  326. package/dist/routes/ts-rest/admin/security.d.ts +0 -4
  327. package/dist/routes/ts-rest/admin/security.js +0 -114
  328. package/dist/routes/ts-rest/admin/security.js.map +0 -1
  329. package/dist/routes/ts-rest/admin/share.d.ts +0 -4
  330. package/dist/routes/ts-rest/admin/share.js +0 -69
  331. package/dist/routes/ts-rest/admin/share.js.map +0 -1
  332. package/dist/routes/ts-rest/admin/storage.d.ts +0 -4
  333. package/dist/routes/ts-rest/admin/storage.js +0 -59
  334. package/dist/routes/ts-rest/admin/storage.js.map +0 -1
  335. package/dist/routes/ts-rest/admin/users.d.ts +0 -4
  336. package/dist/routes/ts-rest/admin/users.js +0 -215
  337. package/dist/routes/ts-rest/admin/users.js.map +0 -1
  338. package/dist/routes/ts-rest/adminCrypto.d.ts +0 -4
  339. package/dist/routes/ts-rest/adminCrypto.js +0 -111
  340. package/dist/routes/ts-rest/adminCrypto.js.map +0 -1
  341. package/dist/routes/ts-rest/app.d.ts +0 -4
  342. package/dist/routes/ts-rest/app.js +0 -23
  343. package/dist/routes/ts-rest/app.js.map +0 -1
  344. package/dist/routes/ts-rest/attachment.d.ts +0 -4
  345. package/dist/routes/ts-rest/attachment.js +0 -830
  346. package/dist/routes/ts-rest/attachment.js.map +0 -1
  347. package/dist/routes/ts-rest/auth.d.ts +0 -4
  348. package/dist/routes/ts-rest/auth.js +0 -70
  349. package/dist/routes/ts-rest/auth.js.map +0 -1
  350. package/dist/routes/ts-rest/autocomplete.d.ts +0 -30
  351. package/dist/routes/ts-rest/autocomplete.js +0 -189
  352. package/dist/routes/ts-rest/autocomplete.js.map +0 -1
  353. package/dist/routes/ts-rest/backlink.d.ts +0 -4
  354. package/dist/routes/ts-rest/backlink.js +0 -106
  355. package/dist/routes/ts-rest/backlink.js.map +0 -1
  356. package/dist/routes/ts-rest/bookmark.d.ts +0 -4
  357. package/dist/routes/ts-rest/bookmark.js +0 -189
  358. package/dist/routes/ts-rest/bookmark.js.map +0 -1
  359. package/dist/routes/ts-rest/comment.d.ts +0 -4
  360. package/dist/routes/ts-rest/comment.js +0 -217
  361. package/dist/routes/ts-rest/comment.js.map +0 -1
  362. package/dist/routes/ts-rest/draft.d.ts +0 -22
  363. package/dist/routes/ts-rest/draft.js +0 -200
  364. package/dist/routes/ts-rest/draft.js.map +0 -1
  365. package/dist/routes/ts-rest/index.d.ts +0 -4
  366. package/dist/routes/ts-rest/index.js +0 -103
  367. package/dist/routes/ts-rest/index.js.map +0 -1
  368. package/dist/routes/ts-rest/installer.d.ts +0 -4
  369. package/dist/routes/ts-rest/installer.js +0 -77
  370. package/dist/routes/ts-rest/installer.js.map +0 -1
  371. package/dist/routes/ts-rest/me.d.ts +0 -4
  372. package/dist/routes/ts-rest/me.js +0 -410
  373. package/dist/routes/ts-rest/me.js.map +0 -1
  374. package/dist/routes/ts-rest/notification.d.ts +0 -4
  375. package/dist/routes/ts-rest/notification.js +0 -241
  376. package/dist/routes/ts-rest/notification.js.map +0 -1
  377. package/dist/routes/ts-rest/page-collab.d.ts +0 -29
  378. package/dist/routes/ts-rest/page-collab.js +0 -90
  379. package/dist/routes/ts-rest/page-collab.js.map +0 -1
  380. package/dist/routes/ts-rest/page-preview.d.ts +0 -26
  381. package/dist/routes/ts-rest/page-preview.js +0 -80
  382. package/dist/routes/ts-rest/page-preview.js.map +0 -1
  383. package/dist/routes/ts-rest/page.d.ts +0 -4
  384. package/dist/routes/ts-rest/page.js +0 -676
  385. package/dist/routes/ts-rest/page.js.map +0 -1
  386. package/dist/routes/ts-rest/presence.d.ts +0 -30
  387. package/dist/routes/ts-rest/presence.js +0 -155
  388. package/dist/routes/ts-rest/presence.js.map +0 -1
  389. package/dist/routes/ts-rest/revision.d.ts +0 -4
  390. package/dist/routes/ts-rest/revision.js +0 -240
  391. package/dist/routes/ts-rest/revision.js.map +0 -1
  392. package/dist/routes/ts-rest/search.d.ts +0 -4
  393. package/dist/routes/ts-rest/search.js +0 -121
  394. package/dist/routes/ts-rest/search.js.map +0 -1
  395. package/dist/routes/ts-rest/tokenAuth.d.ts +0 -4
  396. package/dist/routes/ts-rest/tokenAuth.js +0 -94
  397. package/dist/routes/ts-rest/tokenAuth.js.map +0 -1
  398. package/dist/routes/ts-rest/user.d.ts +0 -4
  399. package/dist/routes/ts-rest/user.js +0 -307
  400. package/dist/routes/ts-rest/user.js.map +0 -1
  401. package/dist/types/express.d.ts +0 -34
  402. package/dist/types/express.js +0 -50
  403. package/dist/types/express.js.map +0 -1
  404. package/dist/util/accessTokenParser.d.ts +0 -1
  405. package/dist/util/accessTokenParser.js +0 -34
  406. package/dist/util/accessTokenParser.js.map +0 -1
  407. package/dist/util/apiPaginate.d.ts +0 -11
  408. package/dist/util/apiPaginate.js +0 -33
  409. package/dist/util/apiPaginate.js.map +0 -1
  410. package/dist/util/apiResponse.d.ts +0 -9
  411. package/dist/util/apiResponse.js +0 -23
  412. package/dist/util/apiResponse.js.map +0 -1
  413. package/dist/util/auth.d.ts +0 -11
  414. package/dist/util/auth.js +0 -48
  415. package/dist/util/auth.js.map +0 -1
  416. package/dist/util/aws-config-migration.d.ts +0 -11
  417. package/dist/util/aws-config-migration.js +0 -68
  418. package/dist/util/aws-config-migration.js.map +0 -1
  419. package/dist/util/formUtil.d.ts +0 -2
  420. package/dist/util/formUtil.js +0 -15
  421. package/dist/util/formUtil.js.map +0 -1
  422. package/dist/util/githubAuth.d.ts +0 -2
  423. package/dist/util/githubAuth.js +0 -82
  424. package/dist/util/githubAuth.js.map +0 -1
  425. package/dist/util/googleAuth.d.ts +0 -2
  426. package/dist/util/googleAuth.js +0 -85
  427. package/dist/util/googleAuth.js.map +0 -1
  428. package/dist/util/mailer.d.ts +0 -7
  429. package/dist/util/mailer.js +0 -98
  430. package/dist/util/mailer.js.map +0 -1
  431. package/dist/util/page-status-migration.d.ts +0 -23
  432. package/dist/util/page-status-migration.js +0 -48
  433. package/dist/util/page-status-migration.js.map +0 -1
  434. package/dist/util/ssr.d.ts +0 -3
  435. package/dist/util/ssr.js +0 -9
  436. package/dist/util/ssr.js.map +0 -1
  437. package/dist/util/view.d.ts +0 -10
  438. package/dist/util/view.js +0 -99
  439. package/dist/util/view.js.map +0 -1
@@ -0,0 +1,340 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.wikilinkHtmlRecover = exports.WIKILINK_HTML_CANDIDATE_REGEX = exports.RECOVERABLE_DEPRECATED_TAGS = void 0;
4
+ exports.shouldRecoverSegment = shouldRecoverSegment;
5
+ exports.detectRecoverable = detectRecoverable;
6
+ exports.detectRecoverableOutsideCode = detectRecoverableOutsideCode;
7
+ exports.rewriteBody = rewriteBody;
8
+ exports.formatCollisions = formatCollisions;
9
+ const page_1 = require("../../models/page");
10
+ const types_1 = require("../types");
11
+ const code_mask_1 = require("./code-mask");
12
+ const published_current_revision_1 = require("./published-current-revision");
13
+ const helpers_1 = require("../helpers");
14
+ /**
15
+ * `wikilink-html-recover` (preflight layer) — undo the `wikilink-format`
16
+ * close-tag misfire.
17
+ *
18
+ * Before `font` / `center` / `marquee` / `blink` / `applet` were added to
19
+ * `KNOWN_HTML_ELEMENTS`, `wikilink-format` mistook the deprecated HTML close
20
+ * tags `</font>` etc. for v1 angle-bracket wikilinks and rewrote them to
21
+ * `[[/font]]` (§A). `wikilink-format` is recorded as applied and never
22
+ * re-runs, and the corrupted `[[/font]]` form no longer matches its detection
23
+ * regex, so it does not self-heal. This migration walks every published page
24
+ * and reverts the corrupted form `[[/<x>]]` back to the close tag `</x>` when:
25
+ *
26
+ * - `x` is a single path segment (no `/` inside), AND
27
+ * - `x` has no `|alias` segment, AND
28
+ * - `x` is one of the FIVE deprecated tags the misfire could have produced.
29
+ *
30
+ * Scope is the 5 tags, NOT every known HTML element: those 5 were the ONLY
31
+ * names absent from `KNOWN_HTML_ELEMENTS` when `wikilink-format` ran, so they
32
+ * are the only `</x>` that could ever have been mis-rewritten to `[[/x]]`.
33
+ * `section` / `div` / `br` / `img` / etc. were always known and never rewritten,
34
+ * so a `[[/section]]` in real data is a GENUINE wikilink and must be preserved.
35
+ *
36
+ * Genuine wikilinks are otherwise preserved too: `[[/foo/bar]]` (multi-segment),
37
+ * `[[/font|alias]]` (aliased), `[[/Font]]` (uppercase → case-sensitive page
38
+ * name), and `[[/wiki-page]]` (non-recoverable name) are all left untouched.
39
+ *
40
+ * ── Inherent ambiguity ───────────────────────────────────────────────
41
+ * `[[/font]]` could be a corrupted `</font>` OR a genuine wikilink to a real
42
+ * page literally at `/font`. They are indistinguishable from the text alone.
43
+ * We resolve this conservatively: a `[[/<x>]]` whose `/<x>` matches a **live
44
+ * content page** (published, not a redirect stub) is NOT reverted — it is
45
+ * reported by `detect` so an operator can decide manually. The revert therefore
46
+ * only touches occurrences that have no same-named live page to be mistaken for.
47
+ * Pages literally named after a deprecated tag (`/font`, `/center`, …) are very
48
+ * rare, but an absent-page `[[/font]]` is still reverted — see the docs Caution.
49
+ * ─────────────────────────────────────────────────────────────────────
50
+ *
51
+ * Like `wikilink-format`, every body rewrite routes through
52
+ * `ctx.rewritePageBody` (the `updatePage`-equivalent path) so `yjsState` /
53
+ * `yjsCheckpointAt` are nulled and an active editor's stale `Y.Doc` cannot
54
+ * silently revert the recovery (RFC-0008 §4.3.1).
55
+ *
56
+ * Idempotent: once reverted, `</x>` no longer matches this migration's
57
+ * detection regex (it scans for `[[/...]]`, not `</...>`), and a re-run of
58
+ * `wikilink-format` leaves `</x>` alone because `x` is now in
59
+ * `KNOWN_HTML_ELEMENTS`.
60
+ */
61
+ /**
62
+ * The five deprecated/obsolete presentational tags absent from
63
+ * `KNOWN_HTML_ELEMENTS` when `wikilink-format` first ran — the ONLY close tags
64
+ * the misfire could have rewritten to `[[/x]]`. Recovery is scoped to exactly
65
+ * these so a genuine single-segment wikilink to any other element-named page
66
+ * (`[[/section]]`, `[[/div]]`, `[[/br]]`) is never destroyed.
67
+ */
68
+ exports.RECOVERABLE_DEPRECATED_TAGS = new Set(['font', 'center', 'marquee', 'blink', 'applet']);
69
+ /**
70
+ * Matches a corrupted-wikilink candidate `[[/<segment>]]` with a single
71
+ * path segment and no alias. The capture group grabs the bare segment
72
+ * (`font` in `[[/font]]`). The `[^[\]|/]+` class excludes `[`, `]`, `|`, and
73
+ * `/`, so multi-segment (`[[/foo/bar]]`) and aliased (`[[/font|x]]`) forms
74
+ * never match here — only `shouldRecoverSegment` then filters by tag name.
75
+ */
76
+ exports.WIKILINK_HTML_CANDIDATE_REGEX = /\[\[\/([^[\]|/]+)\]\]/g;
77
+ /**
78
+ * True iff `[[/<segment>]]` should be reverted to `</segment>`: the segment is
79
+ * a lowercase-ASCII identifier that is one of the FIVE deprecated tags the
80
+ * misfire could have produced. Uppercase (`/Font`), non-deprecated element
81
+ * names (`/section`, `/div`), and non-HTML names (`/wiki`) are genuine
82
+ * wikilinks and are left alone.
83
+ */
84
+ function shouldRecoverSegment(segment) {
85
+ if (!/^[a-z][a-z0-9]*$/.test(segment))
86
+ return false;
87
+ return exports.RECOVERABLE_DEPRECATED_TAGS.has(segment);
88
+ }
89
+ /**
90
+ * Single-pass scan: locate every recoverable `[[/<deprecated-tag>]]` occurrence
91
+ * in `body`. Pure — no rewrite is applied here (the rewrite happens in
92
+ * `rewriteBody` after same-name page collisions have been resolved
93
+ * per-occurrence).
94
+ */
95
+ function detectRecoverable(body) {
96
+ const occurrences = [];
97
+ exports.WIKILINK_HTML_CANDIDATE_REGEX.lastIndex = 0;
98
+ let match = exports.WIKILINK_HTML_CANDIDATE_REGEX.exec(body);
99
+ while (match !== null) {
100
+ const segment = match[1];
101
+ if (shouldRecoverSegment(segment)) {
102
+ occurrences.push({ raw: match[0], element: segment });
103
+ }
104
+ match = exports.WIKILINK_HTML_CANDIDATE_REGEX.exec(body);
105
+ }
106
+ return occurrences;
107
+ }
108
+ /**
109
+ * `detectRecoverable` restricted to the non-code segments of `body`: a
110
+ * `[[/font]]` written as a code example (inside a fence or inline span) is NOT
111
+ * reported, so it never reaches the collision probe / pending verdict and is
112
+ * never reverted to `</font>`. This is the detect-side counterpart of routing
113
+ * the rewrite through `rewriteOutsideCode`; `rewrite` and `detect` are
114
+ * asymmetric (an async per-element collision probe sits between them), so they
115
+ * cannot share one `fn` — `detect` materialises occurrences here instead.
116
+ *
117
+ * `detectRecoverable` resets `lastIndex` at entry, so calling it once per
118
+ * non-code segment is safe (no cross-segment state). AD-1 (a stray backtick
119
+ * straddling `[[/font]]` so the token is absorbed into an inline-code span) is
120
+ * documented in the spec — an accepted false-negative.
121
+ */
122
+ function detectRecoverableOutsideCode(body) {
123
+ return (0, code_mask_1.splitCodeSegments)(body)
124
+ .filter((s) => !s.code)
125
+ .flatMap((s) => detectRecoverable(s.text));
126
+ }
127
+ /**
128
+ * Rewrite `body`, reverting `[[/<x>]]` → `</x>` for every recoverable element.
129
+ * Elements in `skip` (those that collide with a live same-named page) are left
130
+ * untouched. Returns the input by reference when nothing changed so callers can
131
+ * cheap-skip.
132
+ *
133
+ * Code regions (fenced blocks + inline spans) are excluded via the shared
134
+ * `rewriteOutsideCode` primitive: a `[[/font]]` written as a code example is
135
+ * left byte-identical (never reverted) so a migration-doc example cannot be
136
+ * corrupted. The detect side mirrors this via `detectRecoverableOutsideCode`.
137
+ */
138
+ function rewriteBody(body, skip) {
139
+ return (0, code_mask_1.rewriteOutsideCode)(body, (text) => text.replace(exports.WIKILINK_HTML_CANDIDATE_REGEX, (whole, segment) => {
140
+ if (!shouldRecoverSegment(segment))
141
+ return whole;
142
+ if (skip.has(segment))
143
+ return whole;
144
+ return `</${segment}>`;
145
+ }));
146
+ }
147
+ /**
148
+ * A memoised live-content `/<element>` existence probe. The probe restricts to
149
+ * a **published, non-redirect** page so a leftover redirect stub (deleting
150
+ * `/font` leaves a published `redirect /trash/font` at `/font`) does NOT shadow
151
+ * a genuinely corrupted `[[/font]]`. `{ redirectTo: null }` matches both a
152
+ * missing field and an explicit null. `Page.exists` results are cached per
153
+ * element so a widely-used corrupted tag costs one probe across the whole walk.
154
+ *
155
+ * The status filter mirrors the walk itself (`forEachPublishedCurrentRevision`
156
+ * + `Page.isPublished`): `status: published` OR legacy `status: null`. As a
157
+ * PREFLIGHT run against a raw v1 DB (before any v2 boot writes `status`),
158
+ * a genuine `/font` page still carries `status: null`; matching only
159
+ * `STATUS_PUBLISHED` would miss it and let a real collision's `[[/font]]` be
160
+ * destroyed. The looser `$or` keeps the collision-skip firing in that window.
161
+ */
162
+ function makePageExistsProbe(Page) {
163
+ const cache = new Map();
164
+ return async (element) => {
165
+ const cached = cache.get(element);
166
+ if (cached !== undefined)
167
+ return cached;
168
+ const exists = Boolean(await Page.exists({ path: `/${element}`, redirectTo: null, $or: [{ status: page_1.STATUS_PUBLISHED }, { status: null }] }));
169
+ cache.set(element, exists);
170
+ return exists;
171
+ };
172
+ }
173
+ /**
174
+ * Walk every published page's current revision body, detect corrupted
175
+ * `[[/<deprecated-tag>]]` occurrences, and for each candidate element check
176
+ * whether a live same-named page (`/<element>`) exists. Colliding elements are
177
+ * reported (not reverted); the rest are staged for rewrite.
178
+ */
179
+ async function scan(ctx) {
180
+ const Page = ctx.crowi.model('Page');
181
+ const pageExists = makePageExistsProbe(Page);
182
+ const work = [];
183
+ const collidingElements = new Set();
184
+ const collisions = [];
185
+ let revertibleOccurrences = 0;
186
+ await (0, published_current_revision_1.forEachPublishedCurrentRevision)(ctx, { projection: 'body path' }, async ({ revision, pageId }) => {
187
+ const body = revision.body;
188
+ if (typeof body !== 'string' || !body.includes('[[/'))
189
+ return;
190
+ const pagePath = typeof revision.path === 'string' ? revision.path : undefined;
191
+ const occurrences = detectRecoverableOutsideCode(body);
192
+ if (occurrences.length === 0)
193
+ return;
194
+ // Partition this page's elements into collide-skip vs revertible. Each
195
+ // colliding element is recorded once per holding page so the report can
196
+ // name the page(s) an operator has to resolve by hand (a page may hold
197
+ // several colliding tags — dedupe within this page).
198
+ const skip = new Set();
199
+ let pageReverted = 0;
200
+ for (const occ of occurrences) {
201
+ if (await pageExists(occ.element)) {
202
+ if (!skip.has(occ.element))
203
+ collisions.push({ element: occ.element, pageId, pagePath });
204
+ skip.add(occ.element);
205
+ collidingElements.add(occ.element);
206
+ }
207
+ else {
208
+ pageReverted += 1;
209
+ }
210
+ }
211
+ if (pageReverted === 0)
212
+ return;
213
+ const newBody = rewriteBody(body, skip);
214
+ work.push({ pageId, newBody });
215
+ revertibleOccurrences += pageReverted;
216
+ });
217
+ return { work, revertibleOccurrences, collidingElements, collisions };
218
+ }
219
+ /**
220
+ * Render collision records into an operator-actionable string that names the
221
+ * holding page(s) per element, e.g.
222
+ * `/font (in /docs/setup, /guide); /center (in /notes)`. The element→pages
223
+ * mapping is preserved so the operator knows exactly which pages to open from
224
+ * the `migrate plan` output / boot warn log. Elements are sorted; per-element
225
+ * pages prefer the page path, falling back to the page id when the revision
226
+ * carried no path.
227
+ */
228
+ function formatCollisions(collisions) {
229
+ const byElement = new Map();
230
+ for (const c of collisions) {
231
+ const label = c.pagePath ?? c.pageId;
232
+ const list = byElement.get(c.element);
233
+ if (list) {
234
+ if (!list.includes(label))
235
+ list.push(label);
236
+ }
237
+ else {
238
+ byElement.set(c.element, [label]);
239
+ }
240
+ }
241
+ return [...byElement.entries()]
242
+ .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
243
+ .map(([element, pages]) => `/${element} (in ${pages.join(', ')})`)
244
+ .join('; ');
245
+ }
246
+ exports.wikilinkHtmlRecover = (0, types_1.defineMigration)({
247
+ id: 'wikilink-html-recover',
248
+ fromVersion: '2.1',
249
+ toVersion: '2.1',
250
+ layer: 'preflight',
251
+ // HTML close-tag repair only; no index impact. `isPending` walks the live
252
+ // corpus → re-triggers on new content. Cosmetic (see `severity`).
253
+ severity: 'cosmetic',
254
+ // `fromVersion: '2.1'` already sequences this after `wikilink-format`
255
+ // (`fromVersion: '1.x'`) — the registry orders by `fromVersion` FIRST
256
+ // (registry.ts compareMigrations), so the misfire's source is registered
257
+ // before this recovery regardless of `order`. No other `2.1` migration
258
+ // exists today, so `order` is cosmetic here.
259
+ order: 100,
260
+ description: 'Recover deprecated HTML close tags (</font> etc.) corrupted to wikilinks by the wikilink-format misfire',
261
+ /**
262
+ * Pending iff at least one published page's current revision body still
263
+ * carries a revertible `[[/<deprecated-tag>]]` whose element has no live
264
+ * same-named page. There is no index on `revision.body`, so this walks
265
+ * published pages (projecting `body`) and short-circuits at the first
266
+ * revertible occurrence.
267
+ *
268
+ * Colliding occurrences (`[[/font]]` with a live `/font` page) do NOT count
269
+ * as pending: this migration will never revert them, so reporting pending
270
+ * for them would block boot forever under preflight + `block`.
271
+ */
272
+ isPending: async (ctx) => {
273
+ const Page = ctx.crowi.model('Page');
274
+ const pageExists = makePageExistsProbe(Page);
275
+ let pending = false;
276
+ await (0, published_current_revision_1.forEachPublishedCurrentRevision)(ctx, { projection: 'body' }, async ({ revision }) => {
277
+ const body = revision.body;
278
+ if (typeof body !== 'string' || !body.includes('[[/'))
279
+ return;
280
+ for (const occ of detectRecoverableOutsideCode(body)) {
281
+ if (!(await pageExists(occ.element))) {
282
+ pending = true;
283
+ return published_current_revision_1.STOP;
284
+ }
285
+ }
286
+ });
287
+ return pending;
288
+ },
289
+ /**
290
+ * Full scan for `plan`: report how many pages / occurrences would be
291
+ * reverted plus, separately, the deprecated-tag names that were left alone
292
+ * because a live same-named page exists (the operator must resolve those
293
+ * by hand). Not called at boot.
294
+ */
295
+ detect: async (ctx) => {
296
+ const { work, revertibleOccurrences, collidingElements, collisions } = await scan(ctx);
297
+ const colliding = [...collidingElements].sort();
298
+ const collisionNote = colliding.length > 0 ? `; ${colliding.length} element(s) skipped due to same-named pages: ${formatCollisions(collisions)}` : '';
299
+ return {
300
+ summary: `${work.length} page(s) hold ${revertibleOccurrences} recoverable HTML close tag(s)${collisionNote}`,
301
+ counts: {
302
+ pages: work.length,
303
+ occurrences: revertibleOccurrences,
304
+ collisions: colliding.length,
305
+ },
306
+ };
307
+ },
308
+ stages: [
309
+ {
310
+ name: 'recover-html-close-tags',
311
+ fn: async (ctx) => {
312
+ if (ctx.dryRun) {
313
+ const { work, revertibleOccurrences, collidingElements } = await scan(ctx);
314
+ return {
315
+ name: 'recover-html-close-tags',
316
+ transformed: 0,
317
+ stats: { wouldRevert: work.length, occurrences: revertibleOccurrences, collisions: collidingElements.size },
318
+ };
319
+ }
320
+ const actingUserId = await (0, helpers_1.resolveActingUserId)(ctx, 'wikilink-html-recover');
321
+ const { work, collidingElements, collisions } = await scan(ctx);
322
+ ctx.progress.setTotal(work.length);
323
+ let reverted = 0;
324
+ for (const page of work) {
325
+ await ctx.rewritePageBody(page.pageId, page.newBody, { userId: actingUserId });
326
+ reverted += 1;
327
+ ctx.progress.increment();
328
+ }
329
+ if (reverted > 0) {
330
+ ctx.logger.info(`wikilink-html-recover: reverted HTML close tags on ${reverted} page(s) via the updatePage path (yjsState invalidated)`);
331
+ }
332
+ if (collidingElements.size > 0) {
333
+ ctx.logger.warn(`wikilink-html-recover: left ${collidingElements.size} element(s) untouched because a same-named page exists: ${formatCollisions(collisions)} — open these pages and resolve them manually`);
334
+ }
335
+ return { name: 'recover-html-close-tags', transformed: reverted, stats: { collisions: collidingElements.size } };
336
+ },
337
+ },
338
+ ],
339
+ });
340
+ //# sourceMappingURL=wikilink-html-recover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wikilink-html-recover.js","sourceRoot":"","sources":["../../../src/migration/migrations/wikilink-html-recover.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,14 @@ export declare class MigrationRegistry {
4
4
  constructor(defs: MigrationDefinition[]);
5
5
  /** All migrations in version-range + `order` sequence. */
6
6
  all(): readonly MigrationDefinition[];
7
- /** Migrations of a given layer, in order. */
8
- byLayer(layer: MigrationLayer): readonly MigrationDefinition[];
7
+ /**
8
+ * Migrations of a given layer, in order. The return type narrows by the
9
+ * `layer` literal so `byLayer('preflight')` yields `severity`-bearing
10
+ * definitions (and `byLayer('boot')` ones without).
11
+ */
12
+ byLayer<L extends MigrationLayer>(layer: L): readonly Extract<MigrationDefinition, {
13
+ layer: L;
14
+ }>[];
9
15
  /** Look up a migration by id, or undefined. */
10
16
  get(id: string): MigrationDefinition | undefined;
11
17
  /** The latest reachable target version across all registered migrations. */
@@ -73,7 +73,11 @@ class MigrationRegistry {
73
73
  all() {
74
74
  return this.migrations;
75
75
  }
76
- /** Migrations of a given layer, in order. */
76
+ /**
77
+ * Migrations of a given layer, in order. The return type narrows by the
78
+ * `layer` literal so `byLayer('preflight')` yields `severity`-bearing
79
+ * definitions (and `byLayer('boot')` ones without).
80
+ */
77
81
  byLayer(layer) {
78
82
  return this.migrations.filter((m) => m.layer === layer);
79
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/migration/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/migration/registry.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,10 @@ export interface RunBootMigrationsOptions {
25
25
  }
26
26
  export interface RunBootMigrationsResult {
27
27
  appliedBootIds: string[];
28
- pendingPreflightIds: string[];
28
+ /** Pending `severity:'blocking'` preflight migrations (gate boot under `block`). */
29
+ pendingBlockingIds: string[];
30
+ /** Pending `severity:'cosmetic'` preflight migrations (never gate boot). */
31
+ pendingCosmeticIds: string[];
29
32
  policy: PreflightUnappliedPolicy;
30
33
  }
31
34
  export declare function runBootMigrations(crowi: Crowi, options?: RunBootMigrationsOptions): Promise<RunBootMigrationsResult>;
@@ -13,21 +13,25 @@ const runner_1 = require("./runner");
13
13
  * 1. Apply every `layer:'boot'` migration that `isPending` flags, in
14
14
  * version-range + `order` sequence, appending each result to the
15
15
  * `migrationApplications` audit log.
16
- * 2. Probe every `layer:'preflight'` migration with `isPending` (cheap)
17
- * and, when any is unapplied, either refuse boot (`block`, default) or
18
- * log loudly and continue (`warn`) — per `preflightUnappliedPolicy`.
16
+ * 2. Probe every `layer:'preflight'` migration with `isPending` (cheap) and
17
+ * split the pending ones by `severity` (§4.2.7 amendment / §12.7):
18
+ * - `cosmetic` pending → always warn-and-continue (policy ignored);
19
+ * - `blocking` pending → refuse boot under `block` (the default), or
20
+ * warn-and-continue under `warn` — per `preflightUnappliedPolicy`.
19
21
  *
20
- * `block` is the safe default (§4.2.7): if a preflight migration hasn't run
21
- * before v2 boot, *every replica fail-fasts* with a clear error before
22
- * autoIndex would otherwise hit E11000 (§9) on not-yet-deduped data. The
23
- * operator then runs `crowi-admin migrate apply` once and brings the cluster
24
- * up.
25
- *
26
- * Phase 1 ships with an empty registry, so this is a fast no-op; the wiring
27
- * is what matters. Phase 2 adds `page-status-default` as the first boot
28
- * migration.
22
+ * `block` is the safe default (§4.2.7) for `blocking` migrations: if
23
+ * `user-unique-prepare` hasn't run before v2 boot, *every replica fail-fasts*
24
+ * with a clear error before autoIndex would otherwise hit E11000 (§9) on
25
+ * not-yet-deduped data. The operator then runs `crowi-admin migrate apply`
26
+ * once and brings the cluster up. A pending `cosmetic` migration never blocks
27
+ * boot: its `isPending` re-scans the live corpus, so new content could keep it
28
+ * pending forever and a uniform block would deadlock the cluster (BUG 2).
29
29
  */
30
30
  const POLICY_ENV_VAR = 'MIGRATION_PREFLIGHT_UNAPPLIED_POLICY';
31
+ /** Compile-time exhaustiveness guard (throws if a future `severity` reaches it). */
32
+ function assertNever(value) {
33
+ throw new Error(`[crowi:migration] unhandled migration severity: ${String(value)}`);
34
+ }
31
35
  /** Error thrown when boot is refused under the `block` policy. */
32
36
  class PreflightBlockedError extends Error {
33
37
  pendingIds;
@@ -74,22 +78,50 @@ async function runBootMigrations(crowi, options = {}) {
74
78
  appliedBootIds.push(def.id);
75
79
  }
76
80
  }
77
- // ── 2. Probe preflight migrations (cheap isPending) ──
78
- const pendingPreflightIds = [];
81
+ // ── 2. Probe preflight migrations (cheap isPending), split by severity ──
82
+ //
83
+ // Every preflight migration is still probed (RFC-0008 §6.1/§6.2: inspection
84
+ // = source of truth). What changed is only the *consequence* of a pending
85
+ // verdict, decided per-migration by `severity`:
86
+ // - `cosmetic` pending → always warn-and-continue (global knob ignored);
87
+ // - `blocking` pending → refuse boot under `block`, warn-and-continue under
88
+ // `warn` (the existing emergency override).
89
+ const pendingBlockingIds = [];
90
+ const pendingCosmeticIds = [];
79
91
  for (const def of registry.byLayer('preflight')) {
80
- if (await runner.isPending(def)) {
81
- pendingPreflightIds.push(def.id);
92
+ if (!(await runner.isPending(def)))
93
+ continue;
94
+ switch (def.severity) {
95
+ case 'blocking':
96
+ pendingBlockingIds.push(def.id);
97
+ break;
98
+ case 'cosmetic':
99
+ pendingCosmeticIds.push(def.id);
100
+ break;
101
+ default:
102
+ // Exhaustive: a new severity must consciously pick a boot-gate side
103
+ // rather than silently fall through to non-blocking (fail-open).
104
+ assertNever(def.severity);
82
105
  }
83
106
  }
84
- if (pendingPreflightIds.length > 0) {
107
+ // Cosmetic pending always warns and continues, regardless of policy. Emitted
108
+ // before the blocking decision so it is observable even on the block-throw
109
+ // path (the result object is not returned then). A distinct message per
110
+ // severity keeps operator grep / alert rules simple.
111
+ if (pendingCosmeticIds.length > 0) {
112
+ console.warn(`[crowi:migration] WARNING: ${pendingCosmeticIds.length} cosmetic preflight migration(s) unapplied ` +
113
+ `[${pendingCosmeticIds.join(', ')}] — body display only; boot continues.`);
114
+ }
115
+ if (pendingBlockingIds.length > 0) {
85
116
  if (policy === 'block') {
86
- // Whole-cluster fail-fast (§4.2.7).
87
- throw new PreflightBlockedError(pendingPreflightIds);
117
+ // Whole-cluster fail-fast for blocking migrations only (§4.2.7). The
118
+ // result object (and its severity split) is not returned on this path.
119
+ throw new PreflightBlockedError(pendingBlockingIds);
88
120
  }
89
- // warn: operator explicitly accepts the risk.
90
- console.warn(`[crowi:migration] WARNING: ${pendingPreflightIds.length} preflight migration(s) unapplied [${pendingPreflightIds.join(', ')}] ` +
91
- `but ${POLICY_ENV_VAR}=warncontinuing boot. Data may not be in the target shape; autoIndex may fail with E11000.`);
121
+ // warn: operator explicitly accepts the data-integrity risk.
122
+ console.warn(`[crowi:migration] WARNING: ${pendingBlockingIds.length} preflight migration(s) unapplied ` +
123
+ `[${pendingBlockingIds.join(', ')}]data-integrity risk; autoIndex may fail with E11000.`);
92
124
  }
93
- return { appliedBootIds, pendingPreflightIds, policy };
125
+ return { appliedBootIds, pendingBlockingIds, pendingCosmeticIds, policy };
94
126
  }
95
127
  //# sourceMappingURL=run-boot-migrations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-boot-migrations.js","sourceRoot":"","sources":["../../src/migration/run-boot-migrations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-boot-migrations.js","sourceRoot":"","sources":["../../src/migration/run-boot-migrations.ts"],"names":[],"mappings":"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"}
@@ -44,7 +44,14 @@ function buildContext(crowi, opts) {
44
44
  // next onLoadDocument rebuilds the Y.Doc from the new body (§4.3.1).
45
45
  const actingUserId = options?.userId ?? page.lastUpdateUser?.toString?.() ?? page.creator?.toString?.();
46
46
  const user = actingUserId ? await User.findById(actingUserId).exec() : null;
47
- await Page.updatePage(page, newBody, user, {});
47
+ // preserveTimestamps: a body-rewrite migration is a non-destructive,
48
+ // forward-only fixup. It must NOT bump the page's `updatedAt` (which would
49
+ // reorder recently-updated lists) nor overwrite `lastUpdateUser` with the
50
+ // migration bot. Preserving in place (rather than bumping then restoring)
51
+ // also keeps the search index consistent: the `update` event fires with the
52
+ // original `updatedAt`, so `indexPageInSearch` indexes the original value
53
+ // and never diverges from Mongo (RFC-0008 follow-up — see the migration spec).
54
+ await Page.updatePage(page, newBody, user, { preserveTimestamps: true });
48
55
  };
49
56
  const invalidateYjsPersistence = async (pageIds) => {
50
57
  if (opts.dryRun || pageIds.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/migration/runner.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAyB;AACzB,kDAA0B;AAgB1B,MAAM,KAAK,GAAG,IAAA,eAAK,EAAC,wBAAwB,CAAC,CAAC;AA2C9C,mFAAmF;AACtE,QAAA,YAAY,GAAqB;IAC5C,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS;IACzB,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS;IAC1B,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS;CAC1B,CAAC;AAEF,gFAAgF;AAChF,SAAS,aAAa;IACpB,OAAO;QACL,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;QACnD,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;QACpD,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC;QACjF,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC;KACpF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CACnB,KAAY,EACZ,IAAmH;IAEnH,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAiB,CAAC;IAEzD,MAAM,eAAe,GAAG,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,OAAgC,EAAiB,EAAE;QACjH,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,MAAM,sBAAsB,CAAC,CAAC;YACxE,OAAO;QACT,CAAC;QACD,4DAA4D;QAC5D,yEAAyE;QACzE,qEAAqE;QACrE,MAAM,YAAY,GAAG,OAAO,EAAE,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC;QACxG,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5E,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC;IAEF,MAAM,wBAAwB,GAAG,KAAK,EAAE,OAAiB,EAAiB,EAAE;QAC1E,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAChD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,uEAAuE;QACvE,0EAA0E;QAC1E,iEAAiE;QACjE,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/G,CAAC,CAAC;IAEF,OAAO;QACL,EAAE;QACF,KAAK;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,eAAe;QACf,wBAAwB;QACxB,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;KAChD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,IAAmB;IAEnB,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;QAC5B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC;QAClC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,aAAa,iBAAE,CAAC,QAAQ,EAAE,EAAE;QACzD,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,oBAAY;QACvC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,aAAa,EAAE;QACtC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;KAChD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAa,mBAAmB;IACX,KAAK,CAAQ;IACb,IAAI,CAAoC;IAC1C,GAAG,CAAmB;IAC7B,cAAc,GAAG,KAAK,CAAC;IACzB,aAAa,GAAwB,IAAI,CAAC;IAElD,YAAY,KAAY,EAAE,UAAyB,EAAE;QACnD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,0EAA0E;IAC1E,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,0EAA0E;IAC1E,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,oBAAoB;QAClB,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChE,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,IAAI,CAAC,cAAc;gBAAE,OAAO,CAAC,8CAA8C;YAC/E,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;QAC9F,CAAC,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAC7B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC1C,CAAC;IAEO,mBAAmB;QACzB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAI,KAAmB,EAAE,MAAiD;QACxF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,SAAS,GAAG,KAAK,IAAmB,EAAE;YAC1C,OAAO,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACrD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC;gBACvB,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;gBAClC,SAAS,EAAE,CAAC;YACd,CAAC;QACH,CAAC,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;QACpF,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IACzD,CAAC;CACF;AAvED,kDAuEC;AAED;;;;;GAKG;AACH,MAAa,eAAgB,SAAQ,mBAAmB;IACtD,8EAA8E;IAC9E,KAAK,CAAC,SAAS,CAAC,GAAwB;QACtC,OAAO,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,yFAAyF;IACzF,KAAK,CAAC,MAAM,CAAC,GAAwB;QACnC,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC7B,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,KAAK,CAAC,GAAwB;QAClC,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAA8B,CAAC;QACnG,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5D,MAAM,eAAe,GAAG,MAAM,EAAE,MAAM,KAAK,SAAS,IAAI,MAAM,EAAE,MAAM,KAAK,YAAY,CAAC;QAExF,oEAAoE;QACpE,IAAI,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,8CAA8C,CAAC,CAAC;YAChF,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACrE,CAAC;QAED,6EAA6E;QAC7E,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACtB,MAAM,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,GAAG,EAAE,gBAAgB,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;YAC5F,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,uCAAuC,CAAC,CAAC;YACxE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACzE,CAAC;QAED,oEAAoE;QACpE,6CAA6C;QAC7C,MAAM,MAAM,GAAoB,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3E,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,6FAA6F,CAAC,CAAC;QAChI,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACrB,oEAAoE;YACpE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,eAAe,MAAM,EAAE,OAAO,IAAI,iCAAiC,EAAE,CAAC,CAAC;YACtG,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC;QACjG,CAAC;QAED,MAAM,KAAK,GAA4B,EAAE,CAAC;QAC1C,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC;YACH,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC/B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;oBACxB,WAAW,GAAG,IAAI,CAAC;oBACnB,MAAM;gBACR,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBACvD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,WAAW,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;gBAC1D,MAAM,WAAW,GAAgB,MAAM,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC9D,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;YAClG,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAC1C,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,MAAM,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YAC9F,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAC1C,IAAI,WAAW,EAAE,CAAC;YAChB,2DAA2D;YAC3D,kEAAkE;YAClE,yCAAyC;YACzC,MAAM,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7G,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,qEAAqE,CAAC,CAAC;YACtG,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QACtE,CAAC;QAED,MAAM,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QACnF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,MAAM,KAAK,UAAU,KAAK,CAAC,CAAC;QAChE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACnD,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,oBAA+C,EAC/C,GAAwB,EACxB,MAAuB,EACvB,UAAkB,EAClB,KAA8B,EAC9B,KAAc;QAEd,MAAM,oBAAoB,CAAC,MAAM,CAAC;YAChC,WAAW,EAAE,GAAG,CAAC,EAAE;YACnB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,MAAM;YACN,UAAU;YACV,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;YAC9B,KAAK;SACN,CAAC,CAAC;IACL,CAAC;CACF;AAtHD,0CAsHC"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/migration/runner.ts"],"names":[],"mappings":"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"}