@crowi/api 2.0.0-alpha.0 → 2.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hono/handlers/access-token.d.ts +55 -55
- package/dist/hono/handlers/activation.d.ts +27 -27
- package/dist/hono/handlers/admin/app.d.ts +26 -26
- package/dist/hono/handlers/admin/auth.d.ts +24 -24
- package/dist/hono/handlers/admin/mail.d.ts +30 -30
- package/dist/hono/handlers/admin/plugins.d.ts +112 -112
- package/dist/hono/handlers/admin/search.d.ts +21 -21
- package/dist/hono/handlers/admin/security.d.ts +24 -24
- package/dist/hono/handlers/admin/storage.d.ts +19 -19
- package/dist/hono/handlers/admin/users.d.ts +399 -281
- package/dist/hono/handlers/admin/users.js +28 -0
- package/dist/hono/handlers/admin/users.js.map +1 -1
- package/dist/hono/handlers/adminCrypto.d.ts +32 -32
- package/dist/hono/handlers/app.d.ts +12 -8
- package/dist/hono/handlers/app.js +42 -1
- package/dist/hono/handlers/app.js.map +1 -1
- package/dist/hono/handlers/attachment-stream.js +23 -0
- package/dist/hono/handlers/attachment-stream.js.map +1 -1
- package/dist/hono/handlers/attachment.d.ts +180 -180
- package/dist/hono/handlers/autocomplete.d.ts +45 -45
- package/dist/hono/handlers/backlink.d.ts +33 -33
- package/dist/hono/handlers/bookmark.d.ts +95 -95
- package/dist/hono/handlers/comment.d.ts +55 -55
- package/dist/hono/handlers/draft.d.ts +27 -27
- package/dist/hono/handlers/draft.js +10 -0
- package/dist/hono/handlers/draft.js.map +1 -1
- package/dist/hono/handlers/emailChange.d.ts +25 -25
- package/dist/hono/handlers/installer.d.ts +16 -16
- package/dist/hono/handlers/inviteAccept.d.ts +37 -37
- package/dist/hono/handlers/me.d.ts +92 -92
- package/dist/hono/handlers/notification.d.ts +94 -94
- package/dist/hono/handlers/oauth.d.ts +58 -58
- package/dist/hono/handlers/page-collab.d.ts +20 -20
- package/dist/hono/handlers/page-preview.d.ts +7 -7
- package/dist/hono/handlers/page.d.ts +575 -324
- package/dist/hono/handlers/page.js +123 -6
- package/dist/hono/handlers/page.js.map +1 -1
- package/dist/hono/handlers/passwordReset.d.ts +37 -37
- package/dist/hono/handlers/presence.d.ts +44 -44
- package/dist/hono/handlers/revision.d.ts +99 -99
- package/dist/hono/handlers/search.d.ts +64 -64
- package/dist/hono/handlers/tokenAuth.d.ts +80 -80
- package/dist/hono/handlers/user.d.ts +102 -102
- package/dist/hono/handlers/user.js +15 -5
- package/dist/hono/handlers/user.js.map +1 -1
- package/dist/hono/index.d.ts +94 -94
- package/dist/mcp/result.d.ts +52 -11
- package/dist/mcp/result.js +66 -1
- package/dist/mcp/result.js.map +1 -1
- package/dist/mcp/tools/page.js +30 -5
- package/dist/mcp/tools/page.js.map +1 -1
- package/dist/mcp/tools/search.d.ts +12 -0
- package/dist/mcp/tools/search.js +21 -5
- package/dist/mcp/tools/search.js.map +1 -1
- package/dist/migration/helpers.d.ts +13 -0
- package/dist/migration/helpers.js +29 -0
- package/dist/migration/helpers.js.map +1 -0
- package/dist/migration/migrations/files-url-to-attachments.d.ts +35 -0
- package/dist/migration/migrations/files-url-to-attachments.js +291 -0
- package/dist/migration/migrations/files-url-to-attachments.js.map +1 -0
- package/dist/migration/migrations/index.js +6 -0
- package/dist/migration/migrations/index.js.map +1 -1
- package/dist/migration/migrations/published-current-revision.d.ts +47 -0
- package/dist/migration/migrations/published-current-revision.js +90 -0
- package/dist/migration/migrations/published-current-revision.js.map +1 -0
- package/dist/migration/migrations/relocate-reserved-api-paths.d.ts +3 -0
- package/dist/migration/migrations/relocate-reserved-api-paths.js +135 -0
- package/dist/migration/migrations/relocate-reserved-api-paths.js.map +1 -0
- package/dist/migration/migrations/wikilink-format.d.ts +0 -11
- package/dist/migration/migrations/wikilink-format.js +5 -156
- package/dist/migration/migrations/wikilink-format.js.map +1 -1
- package/dist/migration/migrations/wikilink-html-recover.d.ts +116 -0
- package/dist/migration/migrations/wikilink-html-recover.js +314 -0
- package/dist/migration/migrations/wikilink-html-recover.js.map +1 -0
- package/dist/models/page.d.ts +3 -0
- package/dist/models/page.js +40 -2
- package/dist/models/page.js.map +1 -1
- package/dist/models/user.d.ts +1 -0
- package/dist/models/user.js +40 -21
- package/dist/models/user.js.map +1 -1
- package/dist/renderer/core/headings.d.ts +12 -1
- package/dist/renderer/core/headings.js +48 -8
- package/dist/renderer/core/headings.js.map +1 -1
- package/dist/renderer/pipeline.d.ts +6 -0
- package/dist/renderer/pipeline.js.map +1 -1
- package/dist/util/page-response.js +19 -2
- package/dist/util/page-response.js.map +1 -1
- package/dist/util/replace-url.d.ts +85 -0
- package/dist/util/replace-url.js +251 -0
- package/dist/util/replace-url.js.map +1 -0
- package/package.json +13 -5
- package/public/images/file-not-found.png +0 -0
- package/views/mail/activation.mjml +9 -0
- package/views/mail/activation.text +13 -0
- package/views/mail/adminApprovalPending.mjml +7 -0
- package/views/mail/adminApprovalPending.text +11 -0
- package/views/mail/emailChange.mjml +9 -0
- package/views/mail/emailChange.text +13 -0
- package/views/mail/invite.mjml +9 -0
- package/views/mail/invite.text +13 -0
- package/views/mail/layout.mjml +38 -0
- package/views/mail/passwordChanged.mjml +4 -0
- package/views/mail/passwordChanged.text +9 -0
- package/views/mail/passwordReset.mjml +9 -0
- package/views/mail/passwordReset.text +13 -0
- package/views/mail/test.mjml +2 -0
- package/views/mail/test.text +7 -0
- package/dist/common/functions/path2name.d.ts +0 -1
- package/dist/common/functions/path2name.js +0 -22
- package/dist/common/functions/path2name.js.map +0 -1
- package/dist/common/functions/renderIcon.d.ts +0 -1
- package/dist/common/functions/renderIcon.js +0 -9
- package/dist/common/functions/renderIcon.js.map +0 -1
- package/dist/controllers/admin.d.ts +0 -3
- package/dist/controllers/admin.js +0 -474
- package/dist/controllers/admin.js.map +0 -1
- package/dist/controllers/attachment.d.ts +0 -4
- package/dist/controllers/attachment.js +0 -200
- package/dist/controllers/attachment.js.map +0 -1
- package/dist/controllers/backlink.d.ts +0 -3
- package/dist/controllers/backlink.js +0 -42
- package/dist/controllers/backlink.js.map +0 -1
- package/dist/controllers/bookmark.d.ts +0 -3
- package/dist/controllers/bookmark.js +0 -100
- package/dist/controllers/bookmark.js.map +0 -1
- package/dist/controllers/comment.d.ts +0 -3
- package/dist/controllers/comment.js +0 -111
- package/dist/controllers/comment.js.map +0 -1
- package/dist/controllers/index.d.ts +0 -25
- package/dist/controllers/index.js +0 -44
- package/dist/controllers/index.js.map +0 -1
- package/dist/controllers/installer.d.ts +0 -3
- package/dist/controllers/installer.js +0 -48
- package/dist/controllers/installer.js.map +0 -1
- package/dist/controllers/login.d.ts +0 -4
- package/dist/controllers/login.js +0 -438
- package/dist/controllers/login.js.map +0 -1
- package/dist/controllers/logout.d.ts +0 -5
- package/dist/controllers/logout.js +0 -11
- package/dist/controllers/logout.js.map +0 -1
- package/dist/controllers/me.d.ts +0 -4
- package/dist/controllers/me.js +0 -369
- package/dist/controllers/me.js.map +0 -1
- package/dist/controllers/notification.d.ts +0 -3
- package/dist/controllers/notification.js +0 -88
- package/dist/controllers/notification.js.map +0 -1
- package/dist/controllers/page.d.ts +0 -3
- package/dist/controllers/page.js +0 -881
- package/dist/controllers/page.js.map +0 -1
- package/dist/controllers/revision.d.ts +0 -3
- package/dist/controllers/revision.js +0 -91
- package/dist/controllers/revision.js.map +0 -1
- package/dist/controllers/search.d.ts +0 -3
- package/dist/controllers/search.js +0 -93
- package/dist/controllers/search.js.map +0 -1
- package/dist/controllers/share.d.ts +0 -3
- package/dist/controllers/share.js +0 -207
- package/dist/controllers/share.js.map +0 -1
- package/dist/controllers/shareAccess.d.ts +0 -3
- package/dist/controllers/shareAccess.js +0 -28
- package/dist/controllers/shareAccess.js.map +0 -1
- package/dist/controllers/slack.d.ts +0 -3
- package/dist/controllers/slack.js +0 -87
- package/dist/controllers/slack.js.map +0 -1
- package/dist/controllers/tokenAuth.d.ts +0 -10
- package/dist/controllers/tokenAuth.js +0 -292
- package/dist/controllers/tokenAuth.js.map +0 -1
- package/dist/controllers/user.d.ts +0 -3
- package/dist/controllers/user.js +0 -67
- package/dist/controllers/user.js.map +0 -1
- package/dist/controllers/version.d.ts +0 -4
- package/dist/controllers/version.js +0 -19
- package/dist/controllers/version.js.map +0 -1
- package/dist/crowi/express-init.d.ts +0 -4
- package/dist/crowi/express-init.js +0 -101
- package/dist/crowi/express-init.js.map +0 -1
- package/dist/form/admin/app.d.ts +0 -2
- package/dist/form/admin/app.js +0 -9
- package/dist/form/admin/app.js.map +0 -1
- package/dist/form/admin/auth.d.ts +0 -2
- package/dist/form/admin/auth.js +0 -9
- package/dist/form/admin/auth.js.map +0 -1
- package/dist/form/admin/aws.d.ts +0 -2
- package/dist/form/admin/aws.js +0 -13
- package/dist/form/admin/aws.js.map +0 -1
- package/dist/form/admin/github.d.ts +0 -2
- package/dist/form/admin/github.js +0 -15
- package/dist/form/admin/github.js.map +0 -1
- package/dist/form/admin/google.d.ts +0 -2
- package/dist/form/admin/google.js +0 -13
- package/dist/form/admin/google.js.map +0 -1
- package/dist/form/admin/mail.d.ts +0 -2
- package/dist/form/admin/mail.js +0 -13
- package/dist/form/admin/mail.js.map +0 -1
- package/dist/form/admin/sec.d.ts +0 -2
- package/dist/form/admin/sec.js +0 -10
- package/dist/form/admin/sec.js.map +0 -1
- package/dist/form/admin/slackSetting.d.ts +0 -2
- package/dist/form/admin/slackSetting.js +0 -13
- package/dist/form/admin/slackSetting.js.map +0 -1
- package/dist/form/admin/userEdit.d.ts +0 -2
- package/dist/form/admin/userEdit.js +0 -9
- package/dist/form/admin/userEdit.js.map +0 -1
- package/dist/form/admin/userInvite.d.ts +0 -2
- package/dist/form/admin/userInvite.js +0 -9
- package/dist/form/admin/userInvite.js.map +0 -1
- package/dist/form/comment.d.ts +0 -2
- package/dist/form/comment.js +0 -9
- package/dist/form/comment.js.map +0 -1
- package/dist/form/index.d.ts +0 -25
- package/dist/form/index.js +0 -48
- package/dist/form/index.js.map +0 -1
- package/dist/form/invited.d.ts +0 -2
- package/dist/form/invited.js +0 -13
- package/dist/form/invited.js.map +0 -1
- package/dist/form/login.d.ts +0 -2
- package/dist/form/login.js +0 -11
- package/dist/form/login.js.map +0 -1
- package/dist/form/me/apiToken.d.ts +0 -2
- package/dist/form/me/apiToken.js +0 -9
- package/dist/form/me/apiToken.js.map +0 -1
- package/dist/form/me/password.d.ts +0 -2
- package/dist/form/me/password.js +0 -11
- package/dist/form/me/password.js.map +0 -1
- package/dist/form/me/user.d.ts +0 -2
- package/dist/form/me/user.js +0 -9
- package/dist/form/me/user.js.map +0 -1
- package/dist/form/register.d.ts +0 -2
- package/dist/form/register.js +0 -13
- package/dist/form/register.js.map +0 -1
- package/dist/form/revision.d.ts +0 -2
- package/dist/form/revision.js +0 -13
- package/dist/form/revision.js.map +0 -1
- package/dist/hono/handlers/admin/share.d.ts +0 -106
- package/dist/hono/handlers/admin/share.js +0 -55
- package/dist/hono/handlers/admin/share.js.map +0 -1
- package/dist/middlewares/accessTokenParser.d.ts +0 -4
- package/dist/middlewares/accessTokenParser.js +0 -29
- package/dist/middlewares/accessTokenParser.js.map +0 -1
- package/dist/middlewares/adminRequired.d.ts +0 -10
- package/dist/middlewares/adminRequired.js +0 -35
- package/dist/middlewares/adminRequired.js.map +0 -1
- package/dist/middlewares/applicationInstalled.d.ts +0 -3
- package/dist/middlewares/applicationInstalled.js +0 -20
- package/dist/middlewares/applicationInstalled.js.map +0 -1
- package/dist/middlewares/applicationNotInstalled.d.ts +0 -3
- package/dist/middlewares/applicationNotInstalled.js +0 -13
- package/dist/middlewares/applicationNotInstalled.js.map +0 -1
- package/dist/middlewares/basicAuth.d.ts +0 -4
- package/dist/middlewares/basicAuth.js +0 -23
- package/dist/middlewares/basicAuth.js.map +0 -1
- package/dist/middlewares/csrfVerify.d.ts +0 -4
- package/dist/middlewares/csrfVerify.js +0 -24
- package/dist/middlewares/csrfVerify.js.map +0 -1
- package/dist/middlewares/encodeSpace.d.ts +0 -3
- package/dist/middlewares/encodeSpace.js +0 -14
- package/dist/middlewares/encodeSpace.js.map +0 -1
- package/dist/middlewares/fileAccessRightOrLoginRequired.d.ts +0 -4
- package/dist/middlewares/fileAccessRightOrLoginRequired.js +0 -29
- package/dist/middlewares/fileAccessRightOrLoginRequired.js.map +0 -1
- package/dist/middlewares/index.d.ts +0 -16
- package/dist/middlewares/index.js +0 -30
- package/dist/middlewares/index.js.map +0 -1
- package/dist/middlewares/jwtAdminRequired.d.ts +0 -8
- package/dist/middlewares/jwtAdminRequired.js +0 -35
- package/dist/middlewares/jwtAdminRequired.js.map +0 -1
- package/dist/middlewares/jwtAuth.d.ts +0 -4
- package/dist/middlewares/jwtAuth.js +0 -104
- package/dist/middlewares/jwtAuth.js.map +0 -1
- package/dist/middlewares/loginChecker.d.ts +0 -4
- package/dist/middlewares/loginChecker.js +0 -32
- package/dist/middlewares/loginChecker.js.map +0 -1
- package/dist/middlewares/loginRequired.d.ts +0 -4
- package/dist/middlewares/loginRequired.js +0 -88
- package/dist/middlewares/loginRequired.js.map +0 -1
- package/dist/routes/admin.d.ts +0 -4
- package/dist/routes/admin.js +0 -17
- package/dist/routes/admin.js.map +0 -1
- package/dist/routes/api/admin.d.ts +0 -4
- package/dist/routes/api/admin.js +0 -37
- package/dist/routes/api/admin.js.map +0 -1
- package/dist/routes/api/attachment.d.ts +0 -4
- package/dist/routes/api/attachment.js +0 -19
- package/dist/routes/api/attachment.js.map +0 -1
- package/dist/routes/api/bookmark.d.ts +0 -4
- package/dist/routes/api/bookmark.js +0 -15
- package/dist/routes/api/bookmark.js.map +0 -1
- package/dist/routes/api/comment.d.ts +0 -4
- package/dist/routes/api/comment.js +0 -14
- package/dist/routes/api/comment.js.map +0 -1
- package/dist/routes/api/index.d.ts +0 -4
- package/dist/routes/api/index.js +0 -36
- package/dist/routes/api/index.js.map +0 -1
- package/dist/routes/api/like.d.ts +0 -4
- package/dist/routes/api/like.js +0 -13
- package/dist/routes/api/like.js.map +0 -1
- package/dist/routes/api/notification.d.ts +0 -4
- package/dist/routes/api/notification.js +0 -15
- package/dist/routes/api/notification.js.map +0 -1
- package/dist/routes/api/page.d.ts +0 -4
- package/dist/routes/api/page.js +0 -24
- package/dist/routes/api/page.js.map +0 -1
- package/dist/routes/api/revision.d.ts +0 -4
- package/dist/routes/api/revision.js +0 -14
- package/dist/routes/api/revision.js.map +0 -1
- package/dist/routes/api/share.d.ts +0 -4
- package/dist/routes/api/share.js +0 -16
- package/dist/routes/api/share.js.map +0 -1
- package/dist/routes/api/version.d.ts +0 -4
- package/dist/routes/api/version.js +0 -10
- package/dist/routes/api/version.js.map +0 -1
- package/dist/routes/index.d.ts +0 -4
- package/dist/routes/index.js +0 -71
- package/dist/routes/index.js.map +0 -1
- package/dist/routes/login.d.ts +0 -4
- package/dist/routes/login.js +0 -18
- package/dist/routes/login.js.map +0 -1
- package/dist/routes/me.d.ts +0 -4
- package/dist/routes/me.js +0 -24
- package/dist/routes/me.js.map +0 -1
- package/dist/routes/ts-rest/admin/app.d.ts +0 -4
- package/dist/routes/ts-rest/admin/app.js +0 -67
- package/dist/routes/ts-rest/admin/app.js.map +0 -1
- package/dist/routes/ts-rest/admin/auth.d.ts +0 -4
- package/dist/routes/ts-rest/admin/auth.js +0 -95
- package/dist/routes/ts-rest/admin/auth.js.map +0 -1
- package/dist/routes/ts-rest/admin/index.d.ts +0 -10
- package/dist/routes/ts-rest/admin/index.js +0 -35
- package/dist/routes/ts-rest/admin/index.js.map +0 -1
- package/dist/routes/ts-rest/admin/mail.d.ts +0 -4
- package/dist/routes/ts-rest/admin/mail.js +0 -156
- package/dist/routes/ts-rest/admin/mail.js.map +0 -1
- package/dist/routes/ts-rest/admin/plugins.d.ts +0 -4
- package/dist/routes/ts-rest/admin/plugins.js +0 -317
- package/dist/routes/ts-rest/admin/plugins.js.map +0 -1
- package/dist/routes/ts-rest/admin/search.d.ts +0 -4
- package/dist/routes/ts-rest/admin/search.js +0 -67
- package/dist/routes/ts-rest/admin/search.js.map +0 -1
- package/dist/routes/ts-rest/admin/security.d.ts +0 -4
- package/dist/routes/ts-rest/admin/security.js +0 -114
- package/dist/routes/ts-rest/admin/security.js.map +0 -1
- package/dist/routes/ts-rest/admin/share.d.ts +0 -4
- package/dist/routes/ts-rest/admin/share.js +0 -69
- package/dist/routes/ts-rest/admin/share.js.map +0 -1
- package/dist/routes/ts-rest/admin/storage.d.ts +0 -4
- package/dist/routes/ts-rest/admin/storage.js +0 -59
- package/dist/routes/ts-rest/admin/storage.js.map +0 -1
- package/dist/routes/ts-rest/admin/users.d.ts +0 -4
- package/dist/routes/ts-rest/admin/users.js +0 -215
- package/dist/routes/ts-rest/admin/users.js.map +0 -1
- package/dist/routes/ts-rest/adminCrypto.d.ts +0 -4
- package/dist/routes/ts-rest/adminCrypto.js +0 -111
- package/dist/routes/ts-rest/adminCrypto.js.map +0 -1
- package/dist/routes/ts-rest/app.d.ts +0 -4
- package/dist/routes/ts-rest/app.js +0 -23
- package/dist/routes/ts-rest/app.js.map +0 -1
- package/dist/routes/ts-rest/attachment.d.ts +0 -4
- package/dist/routes/ts-rest/attachment.js +0 -830
- package/dist/routes/ts-rest/attachment.js.map +0 -1
- package/dist/routes/ts-rest/auth.d.ts +0 -4
- package/dist/routes/ts-rest/auth.js +0 -70
- package/dist/routes/ts-rest/auth.js.map +0 -1
- package/dist/routes/ts-rest/autocomplete.d.ts +0 -30
- package/dist/routes/ts-rest/autocomplete.js +0 -189
- package/dist/routes/ts-rest/autocomplete.js.map +0 -1
- package/dist/routes/ts-rest/backlink.d.ts +0 -4
- package/dist/routes/ts-rest/backlink.js +0 -106
- package/dist/routes/ts-rest/backlink.js.map +0 -1
- package/dist/routes/ts-rest/bookmark.d.ts +0 -4
- package/dist/routes/ts-rest/bookmark.js +0 -189
- package/dist/routes/ts-rest/bookmark.js.map +0 -1
- package/dist/routes/ts-rest/comment.d.ts +0 -4
- package/dist/routes/ts-rest/comment.js +0 -217
- package/dist/routes/ts-rest/comment.js.map +0 -1
- package/dist/routes/ts-rest/draft.d.ts +0 -22
- package/dist/routes/ts-rest/draft.js +0 -200
- package/dist/routes/ts-rest/draft.js.map +0 -1
- package/dist/routes/ts-rest/index.d.ts +0 -4
- package/dist/routes/ts-rest/index.js +0 -103
- package/dist/routes/ts-rest/index.js.map +0 -1
- package/dist/routes/ts-rest/installer.d.ts +0 -4
- package/dist/routes/ts-rest/installer.js +0 -77
- package/dist/routes/ts-rest/installer.js.map +0 -1
- package/dist/routes/ts-rest/me.d.ts +0 -4
- package/dist/routes/ts-rest/me.js +0 -410
- package/dist/routes/ts-rest/me.js.map +0 -1
- package/dist/routes/ts-rest/notification.d.ts +0 -4
- package/dist/routes/ts-rest/notification.js +0 -241
- package/dist/routes/ts-rest/notification.js.map +0 -1
- package/dist/routes/ts-rest/page-collab.d.ts +0 -29
- package/dist/routes/ts-rest/page-collab.js +0 -90
- package/dist/routes/ts-rest/page-collab.js.map +0 -1
- package/dist/routes/ts-rest/page-preview.d.ts +0 -26
- package/dist/routes/ts-rest/page-preview.js +0 -80
- package/dist/routes/ts-rest/page-preview.js.map +0 -1
- package/dist/routes/ts-rest/page.d.ts +0 -4
- package/dist/routes/ts-rest/page.js +0 -676
- package/dist/routes/ts-rest/page.js.map +0 -1
- package/dist/routes/ts-rest/presence.d.ts +0 -30
- package/dist/routes/ts-rest/presence.js +0 -155
- package/dist/routes/ts-rest/presence.js.map +0 -1
- package/dist/routes/ts-rest/revision.d.ts +0 -4
- package/dist/routes/ts-rest/revision.js +0 -240
- package/dist/routes/ts-rest/revision.js.map +0 -1
- package/dist/routes/ts-rest/search.d.ts +0 -4
- package/dist/routes/ts-rest/search.js +0 -121
- package/dist/routes/ts-rest/search.js.map +0 -1
- package/dist/routes/ts-rest/tokenAuth.d.ts +0 -4
- package/dist/routes/ts-rest/tokenAuth.js +0 -94
- package/dist/routes/ts-rest/tokenAuth.js.map +0 -1
- package/dist/routes/ts-rest/user.d.ts +0 -4
- package/dist/routes/ts-rest/user.js +0 -307
- package/dist/routes/ts-rest/user.js.map +0 -1
- package/dist/types/express.d.ts +0 -34
- package/dist/types/express.js +0 -50
- package/dist/types/express.js.map +0 -1
- package/dist/util/accessTokenParser.d.ts +0 -1
- package/dist/util/accessTokenParser.js +0 -34
- package/dist/util/accessTokenParser.js.map +0 -1
- package/dist/util/apiPaginate.d.ts +0 -11
- package/dist/util/apiPaginate.js +0 -33
- package/dist/util/apiPaginate.js.map +0 -1
- package/dist/util/apiResponse.d.ts +0 -9
- package/dist/util/apiResponse.js +0 -23
- package/dist/util/apiResponse.js.map +0 -1
- package/dist/util/auth.d.ts +0 -11
- package/dist/util/auth.js +0 -48
- package/dist/util/auth.js.map +0 -1
- package/dist/util/aws-config-migration.d.ts +0 -11
- package/dist/util/aws-config-migration.js +0 -68
- package/dist/util/aws-config-migration.js.map +0 -1
- package/dist/util/formUtil.d.ts +0 -2
- package/dist/util/formUtil.js +0 -15
- package/dist/util/formUtil.js.map +0 -1
- package/dist/util/githubAuth.d.ts +0 -2
- package/dist/util/githubAuth.js +0 -82
- package/dist/util/githubAuth.js.map +0 -1
- package/dist/util/googleAuth.d.ts +0 -2
- package/dist/util/googleAuth.js +0 -85
- package/dist/util/googleAuth.js.map +0 -1
- package/dist/util/mailer.d.ts +0 -7
- package/dist/util/mailer.js +0 -98
- package/dist/util/mailer.js.map +0 -1
- package/dist/util/page-status-migration.d.ts +0 -23
- package/dist/util/page-status-migration.js +0 -48
- package/dist/util/page-status-migration.js.map +0 -1
- package/dist/util/ssr.d.ts +0 -3
- package/dist/util/ssr.js +0 -9
- package/dist/util/ssr.js.map +0 -1
- package/dist/util/view.d.ts +0 -10
- package/dist/util/view.js +0 -99
- package/dist/util/view.js.map +0 -1
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.relocateReservedApiPaths = void 0;
|
|
4
|
+
exports.relocatedApiPath = relocatedApiPath;
|
|
5
|
+
const types_1 = require("../types");
|
|
6
|
+
/**
|
|
7
|
+
* v1 → v2.0 — `relocate-reserved-api-paths` (preflight layer).
|
|
8
|
+
*
|
|
9
|
+
* v2 reserves the `/api` namespace as the reverse-proxied backend route
|
|
10
|
+
* surface: the front proxy forwards `/api/v2/*` to the api, and
|
|
11
|
+
* `Page.isCreatableName` now refuses to create / rename a page under
|
|
12
|
+
* `/api`. v1, however, served its API at `/_api/*` (note the leading
|
|
13
|
+
* underscore — reserved by the `/_*` rule in `Page.isCreatableName`), so
|
|
14
|
+
* `/api/*` was a perfectly ordinary wiki page path. An upgraded wiki may hold
|
|
15
|
+
* legitimate v1 pages under `/api/*` that v2 would strand: the web app
|
|
16
|
+
* 404s the reserved namespace, and any page that happened to live at
|
|
17
|
+
* `/api/v2/*` is shadowed by the proxy entirely.
|
|
18
|
+
*
|
|
19
|
+
* This migration moves every surviving page out of `/api/*` into
|
|
20
|
+
* `/api-legacy/*` (preserving the rest of the path) so nothing is lost.
|
|
21
|
+
* `/api-legacy` is itself creatable (the reserved match is segment-bounded,
|
|
22
|
+
* so `api-legacy` does not collide). A pre-existing page at the relocation
|
|
23
|
+
* target is avoided by appending a `-N` suffix.
|
|
24
|
+
*
|
|
25
|
+
* It is `preflight` because it rewrites user-visible page paths: boot
|
|
26
|
+
* blocks until an operator runs `crowi-admin migrate apply` in a
|
|
27
|
+
* maintenance window. The move is done with plain `updateOne` /
|
|
28
|
+
* `updateMany` on the Page + Revision collections rather than
|
|
29
|
+
* `Page.rename`, deliberately bypassing the `pageEvent('update')` chain
|
|
30
|
+
* (mention dispatch / render-cache / backlink) — a path-only relocation of
|
|
31
|
+
* a legacy page must not re-notify mentioned users. No redirect stub is
|
|
32
|
+
* left at the old path: it sits inside the reserved namespace (unreachable
|
|
33
|
+
* by the web app, and `createPage` would itself reject it).
|
|
34
|
+
*/
|
|
35
|
+
/**
|
|
36
|
+
* The reserved backend namespace, segment-bounded: matches `/api` and
|
|
37
|
+
* `/api/...` but never `/apiary`. Mirrors the `api` arm of the server's
|
|
38
|
+
* `Page.isCreatableName` forbidden list.
|
|
39
|
+
*/
|
|
40
|
+
const RESERVED_API_PATH = /^\/api(\/|$)/;
|
|
41
|
+
/** Relocation root for displaced `/api/*` pages. */
|
|
42
|
+
const RELOCATE_ROOT = '/api-legacy';
|
|
43
|
+
/** Cap on suffix probing when the relocation target is already taken. */
|
|
44
|
+
const MAX_SUFFIX_ATTEMPTS = 1000;
|
|
45
|
+
/** `/api` → `/api-legacy`, `/api/foo` → `/api-legacy/foo`, `/api/` → `/api-legacy/`. */
|
|
46
|
+
function relocatedApiPath(oldPath) {
|
|
47
|
+
return RELOCATE_ROOT + oldPath.slice('/api'.length);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The first relocation target not already occupied by another page. Tries
|
|
51
|
+
* the bare relocated path, then `-1`, `-2`, … . Collisions are near-
|
|
52
|
+
* impossible in practice (`/api-legacy` is a fresh namespace), so this is
|
|
53
|
+
* defensive; it throws rather than loop unboundedly.
|
|
54
|
+
*/
|
|
55
|
+
async function findFreeTarget(Page, candidate) {
|
|
56
|
+
if (!(await Page.exists({ path: candidate })))
|
|
57
|
+
return candidate;
|
|
58
|
+
for (let i = 1; i <= MAX_SUFFIX_ATTEMPTS; i++) {
|
|
59
|
+
const next = `${candidate}-${i}`;
|
|
60
|
+
if (!(await Page.exists({ path: next })))
|
|
61
|
+
return next;
|
|
62
|
+
}
|
|
63
|
+
throw new Error(`relocate-reserved-api-paths: could not find a free relocation target for '${candidate}' after ${MAX_SUFFIX_ATTEMPTS} attempts`);
|
|
64
|
+
}
|
|
65
|
+
/** Pages still living under the reserved `/api` namespace, `_id` + `path` only. */
|
|
66
|
+
async function collectApiPages(ctx) {
|
|
67
|
+
const Page = ctx.crowi.model('Page');
|
|
68
|
+
const rows = await Page.find({ path: RESERVED_API_PATH }).select('_id path').lean().exec();
|
|
69
|
+
return rows.map((r) => ({ _id: r._id, path: r.path }));
|
|
70
|
+
}
|
|
71
|
+
exports.relocateReservedApiPaths = (0, types_1.defineMigration)({
|
|
72
|
+
id: 'relocate-reserved-api-paths',
|
|
73
|
+
fromVersion: '1.x',
|
|
74
|
+
toVersion: '2.0',
|
|
75
|
+
layer: 'preflight',
|
|
76
|
+
description: 'Relocate v1 pages out of the v2-reserved /api namespace into /api-legacy',
|
|
77
|
+
/**
|
|
78
|
+
* Pending iff any page still lives under `/api/*`. The anchored regex on
|
|
79
|
+
* the unique-indexed `path` field lets the planner use the index for the
|
|
80
|
+
* `/api` literal prefix, so this stays an index-assisted existence probe
|
|
81
|
+
* rather than a full-collection scan (§4.2.1).
|
|
82
|
+
*/
|
|
83
|
+
isPending: async (ctx) => {
|
|
84
|
+
const Page = ctx.crowi.model('Page');
|
|
85
|
+
// Crowi's `Page.exists` resolves to a boolean (see `checkPagesRenamable`),
|
|
86
|
+
// not Mongoose's `{ _id } | null` — `Boolean(...)` is correct either way.
|
|
87
|
+
return Boolean(await Page.exists({ path: RESERVED_API_PATH }));
|
|
88
|
+
},
|
|
89
|
+
/** Full scan for `plan`: count the pages that would move. Not called at boot. */
|
|
90
|
+
detect: async (ctx) => {
|
|
91
|
+
const pages = await collectApiPages(ctx);
|
|
92
|
+
return {
|
|
93
|
+
summary: `${pages.length} page(s) under the reserved /api namespace would move to ${RELOCATE_ROOT}/*`,
|
|
94
|
+
counts: { pages: pages.length },
|
|
95
|
+
};
|
|
96
|
+
},
|
|
97
|
+
stages: [
|
|
98
|
+
{
|
|
99
|
+
name: 'relocate-api-pages',
|
|
100
|
+
fn: async (ctx) => {
|
|
101
|
+
const Page = ctx.crowi.model('Page');
|
|
102
|
+
const Revision = ctx.crowi.model('Revision');
|
|
103
|
+
// Materialise the work-list up front: moving a page out of `/api/*`
|
|
104
|
+
// removes it from the query, so a live cursor could skip or double-
|
|
105
|
+
// count mid-iteration. The set is small (pages under one namespace).
|
|
106
|
+
const pages = await collectApiPages(ctx);
|
|
107
|
+
ctx.progress.setTotal(pages.length);
|
|
108
|
+
if (ctx.dryRun) {
|
|
109
|
+
// Preview only — resolve targets (read-only) so the report reflects
|
|
110
|
+
// collision handling, but perform no writes.
|
|
111
|
+
let wouldMove = 0;
|
|
112
|
+
for (const page of pages) {
|
|
113
|
+
await findFreeTarget(Page, relocatedApiPath(page.path));
|
|
114
|
+
wouldMove += 1;
|
|
115
|
+
ctx.progress.increment();
|
|
116
|
+
}
|
|
117
|
+
return { name: 'relocate-api-pages', transformed: 0, stats: { wouldMove } };
|
|
118
|
+
}
|
|
119
|
+
let moved = 0;
|
|
120
|
+
for (const page of pages) {
|
|
121
|
+
const target = await findFreeTarget(Page, relocatedApiPath(page.path));
|
|
122
|
+
// Page + its revisions both carry `path`; update both. Plain
|
|
123
|
+
// updateOne/updateMany so no pageEvent fires (see module JSDoc).
|
|
124
|
+
await Page.updateOne({ _id: page._id }, { $set: { path: target } });
|
|
125
|
+
await Revision.updateMany({ path: page.path }, { $set: { path: target } });
|
|
126
|
+
ctx.logger.info(`relocate-reserved-api-paths: moved '${page.path}' -> '${target}'`);
|
|
127
|
+
moved += 1;
|
|
128
|
+
ctx.progress.increment();
|
|
129
|
+
}
|
|
130
|
+
return { name: 'relocate-api-pages', transformed: moved };
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
});
|
|
135
|
+
//# sourceMappingURL=relocate-reserved-api-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relocate-reserved-api-paths.js","sourceRoot":"","sources":["../../../src/migration/migrations/relocate-reserved-api-paths.ts"],"names":[],"mappings":";;;AA+CA,4CAEC;AAjDD,oCAA2C;AAG3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH;;;;GAIG;AACH,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAEzC,oDAAoD;AACpD,MAAM,aAAa,GAAG,aAAa,CAAC;AAEpC,yEAAyE;AACzE,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,wFAAwF;AACxF,SAAgB,gBAAgB,CAAC,OAAe;IAC9C,OAAO,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,cAAc,CAAC,IAAkE,EAAE,SAAiB;IACjH,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAChE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,mBAAmB,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,GAAG,SAAS,IAAI,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACxD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,6EAA6E,SAAS,WAAW,mBAAmB,WAAW,CAAC,CAAC;AACnJ,CAAC;AAED,mFAAmF;AACnF,KAAK,UAAU,eAAe,CAAC,GAAqB;IAClD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;IAC3F,OAAQ,IAAyC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/F,CAAC;AAEY,QAAA,wBAAwB,GAAG,IAAA,uBAAe,EAAC;IACtD,EAAE,EAAE,6BAA6B;IACjC,WAAW,EAAE,KAAK;IAClB,SAAS,EAAE,KAAK;IAChB,KAAK,EAAE,WAAW;IAClB,WAAW,EAAE,0EAA0E;IAEvF;;;;;OAKG;IACH,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrC,2EAA2E;QAC3E,0EAA0E;QAC1E,OAAO,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,iFAAiF;IACjF,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACpB,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO;YACL,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,4DAA4D,aAAa,IAAI;YACrG,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE;SAChC,CAAC;IACJ,CAAC;IAED,MAAM,EAAE;QACN;YACE,IAAI,EAAE,oBAAoB;YAC1B,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBAChB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC7C,oEAAoE;gBACpE,oEAAoE;gBACpE,qEAAqE;gBACrE,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;gBACzC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAEpC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBACf,oEAAoE;oBACpE,6CAA6C;oBAC7C,IAAI,SAAS,GAAG,CAAC,CAAC;oBAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACzB,MAAM,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;wBACxD,SAAS,IAAI,CAAC,CAAC;wBACf,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;oBAC3B,CAAC;oBACD,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC;gBAC9E,CAAC;gBAED,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oBACvE,6DAA6D;oBAC7D,iEAAiE;oBACjE,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;oBACpE,MAAM,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;oBAC3E,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,IAAI,CAAC,IAAI,SAAS,MAAM,GAAG,CAAC,CAAC;oBACpF,KAAK,IAAI,CAAC,CAAC;oBACX,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAC3B,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;YAC5D,CAAC;SACF;KACF;CACF,CAAC,CAAC"}
|
|
@@ -20,17 +20,6 @@
|
|
|
20
20
|
* The textual conversion logic below is moved verbatim from the old command so
|
|
21
21
|
* the rewrite output is byte-identical to the legacy migrator.
|
|
22
22
|
*/
|
|
23
|
-
/**
|
|
24
|
-
* HTML5 element name set used to reject `</foo>` matches whose first path
|
|
25
|
-
* segment is actually a closing HTML tag. Source:
|
|
26
|
-
* https://developer.mozilla.org/en-US/docs/Web/HTML/Element — the full
|
|
27
|
-
* standard element list as of the HTML Living Standard.
|
|
28
|
-
*
|
|
29
|
-
* Kept as a top-level `Set<string>` so detection runs O(1) per match.
|
|
30
|
-
* `h1`..`h6` are listed explicitly because the regex captures `foo` for
|
|
31
|
-
* `</foo>` and we want both `</h1>` and `</h6>` to be rejected.
|
|
32
|
-
*/
|
|
33
|
-
export declare const KNOWN_HTML_ELEMENTS: ReadonlySet<string>;
|
|
34
23
|
/**
|
|
35
24
|
* v1 angle-bracket internal link form. The capture group grabs the path-style
|
|
36
25
|
* payload (starts with `/`, no whitespace, no `<` / `>` / `|` other than the
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.wikilinkFormat = exports.WIKILINK_DETECTION_REGEX =
|
|
3
|
+
exports.wikilinkFormat = exports.WIKILINK_DETECTION_REGEX = void 0;
|
|
4
4
|
exports.bodyHasRewritableWikilink = bodyHasRewritableWikilink;
|
|
5
5
|
exports.shouldRewriteWikilink = shouldRewriteWikilink;
|
|
6
6
|
exports.rewriteAndDetect = rewriteAndDetect;
|
|
7
7
|
exports.rewriteWikilinks = rewriteWikilinks;
|
|
8
|
+
const api_contract_1 = require("@crowi/api-contract");
|
|
8
9
|
const page_1 = require("../../models/page");
|
|
10
|
+
const helpers_1 = require("../helpers");
|
|
9
11
|
const types_1 = require("../types");
|
|
10
12
|
/**
|
|
11
13
|
* RFC-0008 §10.2 step 4 / §4.3.1 — `wikilink-format` (preflight layer).
|
|
@@ -29,129 +31,6 @@ const types_1 = require("../types");
|
|
|
29
31
|
* The textual conversion logic below is moved verbatim from the old command so
|
|
30
32
|
* the rewrite output is byte-identical to the legacy migrator.
|
|
31
33
|
*/
|
|
32
|
-
/**
|
|
33
|
-
* HTML5 element name set used to reject `</foo>` matches whose first path
|
|
34
|
-
* segment is actually a closing HTML tag. Source:
|
|
35
|
-
* https://developer.mozilla.org/en-US/docs/Web/HTML/Element — the full
|
|
36
|
-
* standard element list as of the HTML Living Standard.
|
|
37
|
-
*
|
|
38
|
-
* Kept as a top-level `Set<string>` so detection runs O(1) per match.
|
|
39
|
-
* `h1`..`h6` are listed explicitly because the regex captures `foo` for
|
|
40
|
-
* `</foo>` and we want both `</h1>` and `</h6>` to be rejected.
|
|
41
|
-
*/
|
|
42
|
-
exports.KNOWN_HTML_ELEMENTS = new Set([
|
|
43
|
-
'a',
|
|
44
|
-
'abbr',
|
|
45
|
-
'address',
|
|
46
|
-
'area',
|
|
47
|
-
'article',
|
|
48
|
-
'aside',
|
|
49
|
-
'audio',
|
|
50
|
-
'b',
|
|
51
|
-
'base',
|
|
52
|
-
'bdi',
|
|
53
|
-
'bdo',
|
|
54
|
-
'blockquote',
|
|
55
|
-
'body',
|
|
56
|
-
'br',
|
|
57
|
-
'button',
|
|
58
|
-
'canvas',
|
|
59
|
-
'caption',
|
|
60
|
-
'cite',
|
|
61
|
-
'code',
|
|
62
|
-
'col',
|
|
63
|
-
'colgroup',
|
|
64
|
-
'data',
|
|
65
|
-
'datalist',
|
|
66
|
-
'dd',
|
|
67
|
-
'del',
|
|
68
|
-
'details',
|
|
69
|
-
'dfn',
|
|
70
|
-
'dialog',
|
|
71
|
-
'div',
|
|
72
|
-
'dl',
|
|
73
|
-
'dt',
|
|
74
|
-
'em',
|
|
75
|
-
'embed',
|
|
76
|
-
'fieldset',
|
|
77
|
-
'figcaption',
|
|
78
|
-
'figure',
|
|
79
|
-
'footer',
|
|
80
|
-
'form',
|
|
81
|
-
'h1',
|
|
82
|
-
'h2',
|
|
83
|
-
'h3',
|
|
84
|
-
'h4',
|
|
85
|
-
'h5',
|
|
86
|
-
'h6',
|
|
87
|
-
'head',
|
|
88
|
-
'header',
|
|
89
|
-
'hgroup',
|
|
90
|
-
'hr',
|
|
91
|
-
'html',
|
|
92
|
-
'i',
|
|
93
|
-
'iframe',
|
|
94
|
-
'img',
|
|
95
|
-
'input',
|
|
96
|
-
'ins',
|
|
97
|
-
'kbd',
|
|
98
|
-
'label',
|
|
99
|
-
'legend',
|
|
100
|
-
'li',
|
|
101
|
-
'link',
|
|
102
|
-
'main',
|
|
103
|
-
'map',
|
|
104
|
-
'mark',
|
|
105
|
-
'menu',
|
|
106
|
-
'meta',
|
|
107
|
-
'meter',
|
|
108
|
-
'nav',
|
|
109
|
-
'noscript',
|
|
110
|
-
'object',
|
|
111
|
-
'ol',
|
|
112
|
-
'optgroup',
|
|
113
|
-
'option',
|
|
114
|
-
'output',
|
|
115
|
-
'p',
|
|
116
|
-
'picture',
|
|
117
|
-
'pre',
|
|
118
|
-
'progress',
|
|
119
|
-
'q',
|
|
120
|
-
'rp',
|
|
121
|
-
'rt',
|
|
122
|
-
'ruby',
|
|
123
|
-
's',
|
|
124
|
-
'samp',
|
|
125
|
-
'script',
|
|
126
|
-
'section',
|
|
127
|
-
'select',
|
|
128
|
-
'slot',
|
|
129
|
-
'small',
|
|
130
|
-
'source',
|
|
131
|
-
'span',
|
|
132
|
-
'strong',
|
|
133
|
-
'style',
|
|
134
|
-
'sub',
|
|
135
|
-
'summary',
|
|
136
|
-
'sup',
|
|
137
|
-
'table',
|
|
138
|
-
'tbody',
|
|
139
|
-
'td',
|
|
140
|
-
'template',
|
|
141
|
-
'textarea',
|
|
142
|
-
'tfoot',
|
|
143
|
-
'th',
|
|
144
|
-
'thead',
|
|
145
|
-
'time',
|
|
146
|
-
'title',
|
|
147
|
-
'tr',
|
|
148
|
-
'track',
|
|
149
|
-
'u',
|
|
150
|
-
'ul',
|
|
151
|
-
'var',
|
|
152
|
-
'video',
|
|
153
|
-
'wbr',
|
|
154
|
-
]);
|
|
155
34
|
/**
|
|
156
35
|
* v1 angle-bracket internal link form. The capture group grabs the path-style
|
|
157
36
|
* payload (starts with `/`, no whitespace, no `<` / `>` / `|` other than the
|
|
@@ -215,7 +94,7 @@ function shouldRewriteWikilink(innerPath) {
|
|
|
215
94
|
// Only reject lowercase-ASCII first segments that are real HTML elements.
|
|
216
95
|
if (!/^[a-z][a-z0-9]*$/.test(firstSegment))
|
|
217
96
|
return true;
|
|
218
|
-
return !
|
|
97
|
+
return !api_contract_1.KNOWN_HTML_ELEMENTS.has(firstSegment);
|
|
219
98
|
}
|
|
220
99
|
/**
|
|
221
100
|
* Single-pass detect-and-rewrite. Returns the rewritten body together with the
|
|
@@ -246,36 +125,6 @@ function rewriteAndDetect(body) {
|
|
|
246
125
|
function rewriteWikilinks(body) {
|
|
247
126
|
return rewriteAndDetect(body).body;
|
|
248
127
|
}
|
|
249
|
-
/**
|
|
250
|
-
* Resolve which user is recorded as the author of every rewritten revision.
|
|
251
|
-
* The `updatePage`-equivalent path (`rewritePageBody`) ultimately calls
|
|
252
|
-
* `Revision.prepareRevision`, which **throws** when handed a falsy user, so a
|
|
253
|
-
* preflight rewrite MUST resolve a real acting user up front rather than rely
|
|
254
|
-
* on per-page `lastUpdateUser`/`creator` (those can dangle to a deleted user).
|
|
255
|
-
*
|
|
256
|
-
* Order, mirroring the legacy `migrate-wikilink` command:
|
|
257
|
-
* 1. `process.env.CROWI_MIGRATE_USER` — interpreted as an email; the named
|
|
258
|
-
* user must exist.
|
|
259
|
-
* 2. otherwise the oldest admin user (`{ admin: true }` sorted by createdAt),
|
|
260
|
-
* deterministic across re-runs.
|
|
261
|
-
*
|
|
262
|
-
* Throws when neither yields a user so the operator gets a clear error instead
|
|
263
|
-
* of a per-page `user should have _id` failure deep inside the rewrite.
|
|
264
|
-
*/
|
|
265
|
-
async function resolveActingUserId(ctx) {
|
|
266
|
-
const User = ctx.crowi.model('User');
|
|
267
|
-
const explicit = process.env.CROWI_MIGRATE_USER;
|
|
268
|
-
if (explicit) {
|
|
269
|
-
const named = await User.findOne({ email: explicit }).select('_id').lean().exec();
|
|
270
|
-
if (named)
|
|
271
|
-
return String(named._id);
|
|
272
|
-
throw new Error(`CROWI_MIGRATE_USER='${explicit}' but no user with that email exists.`);
|
|
273
|
-
}
|
|
274
|
-
const admin = await User.findOne({ admin: true }).sort({ createdAt: 1 }).select('_id').lean().exec();
|
|
275
|
-
if (admin)
|
|
276
|
-
return String(admin._id);
|
|
277
|
-
throw new Error('wikilink-format: no admin user found; set CROWI_MIGRATE_USER=<email> or create an admin user first.');
|
|
278
|
-
}
|
|
279
128
|
/**
|
|
280
129
|
* Walk every published page, keep those whose current revision body holds a
|
|
281
130
|
* genuine legacy wikilink (`bodyHasRewritableWikilink` — the same full
|
|
@@ -394,7 +243,7 @@ exports.wikilinkFormat = (0, types_1.defineMigration)({
|
|
|
394
243
|
const pages = await collectRewritablePages(ctx);
|
|
395
244
|
return { name: 'rewrite-wikilink', transformed: 0, stats: { wouldRewrite: pages.length } };
|
|
396
245
|
}
|
|
397
|
-
const actingUserId = await resolveActingUserId(ctx);
|
|
246
|
+
const actingUserId = await (0, helpers_1.resolveActingUserId)(ctx, 'wikilink-format');
|
|
398
247
|
const pages = await collectRewritablePages(ctx);
|
|
399
248
|
ctx.progress.setTotal(pages.length);
|
|
400
249
|
let rewritten = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wikilink-format.js","sourceRoot":"","sources":["../../../src/migration/migrations/wikilink-format.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"wikilink-format.js","sourceRoot":"","sources":["../../../src/migration/migrations/wikilink-format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `wikilink-html-recover` (preflight layer) — undo the `wikilink-format`
|
|
3
|
+
* close-tag misfire.
|
|
4
|
+
*
|
|
5
|
+
* Before `font` / `center` / `marquee` / `blink` / `applet` were added to
|
|
6
|
+
* `KNOWN_HTML_ELEMENTS`, `wikilink-format` mistook the deprecated HTML close
|
|
7
|
+
* tags `</font>` etc. for v1 angle-bracket wikilinks and rewrote them to
|
|
8
|
+
* `[[/font]]` (§A). `wikilink-format` is recorded as applied and never
|
|
9
|
+
* re-runs, and the corrupted `[[/font]]` form no longer matches its detection
|
|
10
|
+
* regex, so it does not self-heal. This migration walks every published page
|
|
11
|
+
* and reverts the corrupted form `[[/<x>]]` back to the close tag `</x>` when:
|
|
12
|
+
*
|
|
13
|
+
* - `x` is a single path segment (no `/` inside), AND
|
|
14
|
+
* - `x` has no `|alias` segment, AND
|
|
15
|
+
* - `x` is one of the FIVE deprecated tags the misfire could have produced.
|
|
16
|
+
*
|
|
17
|
+
* Scope is the 5 tags, NOT every known HTML element: those 5 were the ONLY
|
|
18
|
+
* names absent from `KNOWN_HTML_ELEMENTS` when `wikilink-format` ran, so they
|
|
19
|
+
* are the only `</x>` that could ever have been mis-rewritten to `[[/x]]`.
|
|
20
|
+
* `section` / `div` / `br` / `img` / etc. were always known and never rewritten,
|
|
21
|
+
* so a `[[/section]]` in real data is a GENUINE wikilink and must be preserved.
|
|
22
|
+
*
|
|
23
|
+
* Genuine wikilinks are otherwise preserved too: `[[/foo/bar]]` (multi-segment),
|
|
24
|
+
* `[[/font|alias]]` (aliased), `[[/Font]]` (uppercase → case-sensitive page
|
|
25
|
+
* name), and `[[/wiki-page]]` (non-recoverable name) are all left untouched.
|
|
26
|
+
*
|
|
27
|
+
* ── Inherent ambiguity ───────────────────────────────────────────────
|
|
28
|
+
* `[[/font]]` could be a corrupted `</font>` OR a genuine wikilink to a real
|
|
29
|
+
* page literally at `/font`. They are indistinguishable from the text alone.
|
|
30
|
+
* We resolve this conservatively: a `[[/<x>]]` whose `/<x>` matches a **live
|
|
31
|
+
* content page** (published, not a redirect stub) is NOT reverted — it is
|
|
32
|
+
* reported by `detect` so an operator can decide manually. The revert therefore
|
|
33
|
+
* only touches occurrences that have no same-named live page to be mistaken for.
|
|
34
|
+
* Pages literally named after a deprecated tag (`/font`, `/center`, …) are very
|
|
35
|
+
* rare, but an absent-page `[[/font]]` is still reverted — see the docs Caution.
|
|
36
|
+
* ─────────────────────────────────────────────────────────────────────
|
|
37
|
+
*
|
|
38
|
+
* Like `wikilink-format`, every body rewrite routes through
|
|
39
|
+
* `ctx.rewritePageBody` (the `updatePage`-equivalent path) so `yjsState` /
|
|
40
|
+
* `yjsCheckpointAt` are nulled and an active editor's stale `Y.Doc` cannot
|
|
41
|
+
* silently revert the recovery (RFC-0008 §4.3.1).
|
|
42
|
+
*
|
|
43
|
+
* Idempotent: once reverted, `</x>` no longer matches this migration's
|
|
44
|
+
* detection regex (it scans for `[[/...]]`, not `</...>`), and a re-run of
|
|
45
|
+
* `wikilink-format` leaves `</x>` alone because `x` is now in
|
|
46
|
+
* `KNOWN_HTML_ELEMENTS`.
|
|
47
|
+
*/
|
|
48
|
+
/**
|
|
49
|
+
* The five deprecated/obsolete presentational tags absent from
|
|
50
|
+
* `KNOWN_HTML_ELEMENTS` when `wikilink-format` first ran — the ONLY close tags
|
|
51
|
+
* the misfire could have rewritten to `[[/x]]`. Recovery is scoped to exactly
|
|
52
|
+
* these so a genuine single-segment wikilink to any other element-named page
|
|
53
|
+
* (`[[/section]]`, `[[/div]]`, `[[/br]]`) is never destroyed.
|
|
54
|
+
*/
|
|
55
|
+
export declare const RECOVERABLE_DEPRECATED_TAGS: ReadonlySet<string>;
|
|
56
|
+
/**
|
|
57
|
+
* Matches a corrupted-wikilink candidate `[[/<segment>]]` with a single
|
|
58
|
+
* path segment and no alias. The capture group grabs the bare segment
|
|
59
|
+
* (`font` in `[[/font]]`). The `[^[\]|/]+` class excludes `[`, `]`, `|`, and
|
|
60
|
+
* `/`, so multi-segment (`[[/foo/bar]]`) and aliased (`[[/font|x]]`) forms
|
|
61
|
+
* never match here — only `shouldRecoverSegment` then filters by tag name.
|
|
62
|
+
*/
|
|
63
|
+
export declare const WIKILINK_HTML_CANDIDATE_REGEX: RegExp;
|
|
64
|
+
/**
|
|
65
|
+
* True iff `[[/<segment>]]` should be reverted to `</segment>`: the segment is
|
|
66
|
+
* a lowercase-ASCII identifier that is one of the FIVE deprecated tags the
|
|
67
|
+
* misfire could have produced. Uppercase (`/Font`), non-deprecated element
|
|
68
|
+
* names (`/section`, `/div`), and non-HTML names (`/wiki`) are genuine
|
|
69
|
+
* wikilinks and are left alone.
|
|
70
|
+
*/
|
|
71
|
+
export declare function shouldRecoverSegment(segment: string): boolean;
|
|
72
|
+
/** A single corrupted occurrence located in a body. */
|
|
73
|
+
export interface RecoverableOccurrence {
|
|
74
|
+
/** The full raw match, e.g. `[[/font]]`. */
|
|
75
|
+
raw: string;
|
|
76
|
+
/** The deprecated HTML tag name, e.g. `font`. */
|
|
77
|
+
element: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Single-pass scan: locate every recoverable `[[/<deprecated-tag>]]` occurrence
|
|
81
|
+
* in `body`. Pure — no rewrite is applied here (the rewrite happens in
|
|
82
|
+
* `rewriteBody` after same-name page collisions have been resolved
|
|
83
|
+
* per-occurrence).
|
|
84
|
+
*/
|
|
85
|
+
export declare function detectRecoverable(body: string): RecoverableOccurrence[];
|
|
86
|
+
/**
|
|
87
|
+
* Rewrite `body`, reverting `[[/<x>]]` → `</x>` for every recoverable element.
|
|
88
|
+
* Elements in `skip` (those that collide with a live same-named page) are left
|
|
89
|
+
* untouched. Returns the input by reference when nothing changed so callers can
|
|
90
|
+
* cheap-skip.
|
|
91
|
+
*/
|
|
92
|
+
export declare function rewriteBody(body: string, skip: ReadonlySet<string>): string;
|
|
93
|
+
/**
|
|
94
|
+
* A skipped (collision) occurrence: the deprecated tag that was left as
|
|
95
|
+
* `[[/<element>]]` because a live same-named page exists, plus the page that
|
|
96
|
+
* holds the corrupted markup so an operator can open it from the report.
|
|
97
|
+
*/
|
|
98
|
+
export interface CollisionRecord {
|
|
99
|
+
/** The deprecated tag name left untouched, e.g. `font`. */
|
|
100
|
+
element: string;
|
|
101
|
+
/** `_id` of the page whose body still carries `[[/<element>]]`. */
|
|
102
|
+
pageId: string;
|
|
103
|
+
/** Path of that holding page (from the current revision), if available. */
|
|
104
|
+
pagePath?: string;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Render collision records into an operator-actionable string that names the
|
|
108
|
+
* holding page(s) per element, e.g.
|
|
109
|
+
* `/font (in /docs/setup, /guide); /center (in /notes)`. The element→pages
|
|
110
|
+
* mapping is preserved so the operator knows exactly which pages to open from
|
|
111
|
+
* the `migrate plan` output / boot warn log. Elements are sorted; per-element
|
|
112
|
+
* pages prefer the page path, falling back to the page id when the revision
|
|
113
|
+
* carried no path.
|
|
114
|
+
*/
|
|
115
|
+
export declare function formatCollisions(collisions: readonly CollisionRecord[]): string;
|
|
116
|
+
export declare const wikilinkHtmlRecover: import("../types").MigrationDefinition;
|