@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.
- package/dist/collab/attach.d.ts +34 -10
- package/dist/collab/attach.js +77 -1
- package/dist/collab/attach.js.map +1 -1
- package/dist/crowi/index.js +7 -6
- package/dist/crowi/index.js.map +1 -1
- package/dist/hono/handlers/activation.d.ts +3 -3
- package/dist/hono/handlers/admin/users.d.ts +118 -0
- package/dist/hono/handlers/admin/users.js +28 -0
- package/dist/hono/handlers/admin/users.js.map +1 -1
- package/dist/hono/handlers/app.d.ts +1 -0
- package/dist/hono/handlers/app.js +11 -0
- 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/draft.js +10 -0
- package/dist/hono/handlers/draft.js.map +1 -1
- package/dist/hono/handlers/emailChange.d.ts +4 -4
- package/dist/hono/handlers/inviteAccept.d.ts +6 -6
- package/dist/hono/handlers/page-collab.js +4 -0
- package/dist/hono/handlers/page-collab.js.map +1 -1
- package/dist/hono/handlers/page.d.ts +251 -0
- package/dist/hono/handlers/page.js +123 -6
- package/dist/hono/handlers/page.js.map +1 -1
- package/dist/hono/handlers/passwordReset.d.ts +5 -5
- package/dist/hono/handlers/tokenAuth.d.ts +7 -7
- package/dist/mcp/result.d.ts +42 -16
- package/dist/mcp/result.js +56 -10
- package/dist/mcp/result.js.map +1 -1
- package/dist/mcp/tools/page.js +21 -1
- 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/cli-api.d.ts +8 -1
- package/dist/migration/cli-api.js +2 -0
- package/dist/migration/cli-api.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/code-mask.d.ts +76 -0
- package/dist/migration/migrations/code-mask.js +224 -0
- package/dist/migration/migrations/code-mask.js.map +1 -0
- package/dist/migration/migrations/files-url-to-attachments.d.ts +99 -0
- package/dist/migration/migrations/files-url-to-attachments.js +305 -0
- package/dist/migration/migrations/files-url-to-attachments.js.map +1 -0
- package/dist/migration/migrations/index.js +4 -0
- package/dist/migration/migrations/index.js.map +1 -1
- package/dist/migration/migrations/page-status-default.d.ts +31 -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 +37 -1
- package/dist/migration/migrations/relocate-reserved-api-paths.js +11 -3
- package/dist/migration/migrations/relocate-reserved-api-paths.js.map +1 -1
- package/dist/migration/migrations/revisions-schema-unify.d.ts +35 -1
- package/dist/migration/migrations/user-unique-prepare.d.ts +55 -1
- package/dist/migration/migrations/user-unique-prepare.js +5 -0
- package/dist/migration/migrations/user-unique-prepare.js.map +1 -1
- package/dist/migration/migrations/wikilink-format.d.ts +75 -12
- package/dist/migration/migrations/wikilink-format.js +23 -157
- package/dist/migration/migrations/wikilink-format.js.map +1 -1
- package/dist/migration/migrations/wikilink-html-recover.d.ts +191 -0
- package/dist/migration/migrations/wikilink-html-recover.js +340 -0
- package/dist/migration/migrations/wikilink-html-recover.js.map +1 -0
- package/dist/migration/registry.d.ts +8 -2
- package/dist/migration/registry.js +5 -1
- package/dist/migration/registry.js.map +1 -1
- package/dist/migration/run-boot-migrations.d.ts +4 -1
- package/dist/migration/run-boot-migrations.js +55 -23
- package/dist/migration/run-boot-migrations.js.map +1 -1
- package/dist/migration/runner.js +8 -1
- package/dist/migration/runner.js.map +1 -1
- package/dist/migration/types.d.ts +57 -5
- package/dist/migration/types.js.map +1 -1
- package/dist/models/page.d.ts +23 -3
- package/dist/models/page.js +91 -5
- 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/plugin/plugin-manager.js +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/renderer/registry.js +1 -1
- package/dist/util/page-response.js +19 -2
- package/dist/util/page-response.js.map +1 -1
- package/dist/util/ws-token.d.ts +13 -0
- package/dist/util/ws-token.js +43 -3
- package/dist/util/ws-token.js.map +1 -1
- package/package.json +13 -7
- package/views/mail/layout.mjml +7 -5
- 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
|
@@ -1,12 +1,15 @@
|
|
|
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");
|
|
12
|
+
const code_mask_1 = require("./code-mask");
|
|
10
13
|
/**
|
|
11
14
|
* RFC-0008 §10.2 step 4 / §4.3.1 — `wikilink-format` (preflight layer).
|
|
12
15
|
*
|
|
@@ -29,129 +32,6 @@ const types_1 = require("../types");
|
|
|
29
32
|
* The textual conversion logic below is moved verbatim from the old command so
|
|
30
33
|
* the rewrite output is byte-identical to the legacy migrator.
|
|
31
34
|
*/
|
|
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
35
|
/**
|
|
156
36
|
* v1 angle-bracket internal link form. The capture group grabs the path-style
|
|
157
37
|
* payload (starts with `/`, no whitespace, no `<` / `>` / `|` other than the
|
|
@@ -215,17 +95,24 @@ function shouldRewriteWikilink(innerPath) {
|
|
|
215
95
|
// Only reject lowercase-ASCII first segments that are real HTML elements.
|
|
216
96
|
if (!/^[a-z][a-z0-9]*$/.test(firstSegment))
|
|
217
97
|
return true;
|
|
218
|
-
return !
|
|
98
|
+
return !api_contract_1.KNOWN_HTML_ELEMENTS.has(firstSegment);
|
|
219
99
|
}
|
|
220
100
|
/**
|
|
221
101
|
* Single-pass detect-and-rewrite. Returns the rewritten body together with the
|
|
222
102
|
* occurrence list so callers don't walk the regex twice. `body` is returned by
|
|
223
103
|
* reference when nothing changed, letting callers cheap-skip via
|
|
224
104
|
* `result.body === body`. Pure function — no side effects, no I/O.
|
|
105
|
+
*
|
|
106
|
+
* Code regions (fenced blocks + inline spans) are excluded: `</…>` written as a
|
|
107
|
+
* code example is left byte-identical, so it is never misdetected as a v1
|
|
108
|
+
* wikilink. We run the detection regex only on the non-`code` segments via the
|
|
109
|
+
* shared `rewriteOutsideCode` primitive, re-joining in original order
|
|
110
|
+
* (segment-and-rewrite — see `code-mask.ts` for why this beats a fill/restore
|
|
111
|
+
* scheme). Indented code blocks are an accepted divergence (still rewritten).
|
|
225
112
|
*/
|
|
226
113
|
function rewriteAndDetect(body) {
|
|
227
114
|
const occurrences = [];
|
|
228
|
-
const
|
|
115
|
+
const rewriteSegment = (text) => text.replace(exports.WIKILINK_DETECTION_REGEX, (whole, innerPath, aliasWithPipe) => {
|
|
229
116
|
if (!shouldRewriteWikilink(innerPath))
|
|
230
117
|
return whole;
|
|
231
118
|
occurrences.push({
|
|
@@ -236,6 +123,10 @@ function rewriteAndDetect(body) {
|
|
|
236
123
|
const aliasSegment = aliasWithPipe ?? '';
|
|
237
124
|
return `[[${innerPath}${aliasSegment}]]`;
|
|
238
125
|
});
|
|
126
|
+
const rewritten = (0, code_mask_1.rewriteOutsideCode)(body, rewriteSegment);
|
|
127
|
+
// `rewriteOutsideCode` already returns `body` by reference when nothing
|
|
128
|
+
// changed; the `occurrences.length === 0` guard keeps that explicit so the
|
|
129
|
+
// detect / isPending cheap-skip (`result.body === body`) is unmistakable.
|
|
239
130
|
return { body: occurrences.length === 0 ? body : rewritten, occurrences };
|
|
240
131
|
}
|
|
241
132
|
/**
|
|
@@ -246,36 +137,6 @@ function rewriteAndDetect(body) {
|
|
|
246
137
|
function rewriteWikilinks(body) {
|
|
247
138
|
return rewriteAndDetect(body).body;
|
|
248
139
|
}
|
|
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
140
|
/**
|
|
280
141
|
* Walk every published page, keep those whose current revision body holds a
|
|
281
142
|
* genuine legacy wikilink (`bodyHasRewritableWikilink` — the same full
|
|
@@ -319,6 +180,11 @@ exports.wikilinkFormat = (0, types_1.defineMigration)({
|
|
|
319
180
|
fromVersion: '1.x',
|
|
320
181
|
toVersion: '2.1',
|
|
321
182
|
layer: 'preflight',
|
|
183
|
+
// Body display syntax only; no index / integrity impact. `isPending` scans
|
|
184
|
+
// the live corpus, so new v1-syntax content re-triggers it forever — the
|
|
185
|
+
// BUG 2 deadlock. Cosmetic so a pending verdict only warns, never refuses
|
|
186
|
+
// boot.
|
|
187
|
+
severity: 'cosmetic',
|
|
322
188
|
description: 'Migrate wikilink syntax',
|
|
323
189
|
/**
|
|
324
190
|
* Pending verdict = at least one published page whose **current** revision
|
|
@@ -394,7 +260,7 @@ exports.wikilinkFormat = (0, types_1.defineMigration)({
|
|
|
394
260
|
const pages = await collectRewritablePages(ctx);
|
|
395
261
|
return { name: 'rewrite-wikilink', transformed: 0, stats: { wouldRewrite: pages.length } };
|
|
396
262
|
}
|
|
397
|
-
const actingUserId = await resolveActingUserId(ctx);
|
|
263
|
+
const actingUserId = await (0, helpers_1.resolveActingUserId)(ctx, 'wikilink-format');
|
|
398
264
|
const pages = await collectRewritablePages(ctx);
|
|
399
265
|
ctx.progress.setTotal(pages.length);
|
|
400
266
|
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,191 @@
|
|
|
1
|
+
import type { MigrationContext } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* `wikilink-html-recover` (preflight layer) — undo the `wikilink-format`
|
|
4
|
+
* close-tag misfire.
|
|
5
|
+
*
|
|
6
|
+
* Before `font` / `center` / `marquee` / `blink` / `applet` were added to
|
|
7
|
+
* `KNOWN_HTML_ELEMENTS`, `wikilink-format` mistook the deprecated HTML close
|
|
8
|
+
* tags `</font>` etc. for v1 angle-bracket wikilinks and rewrote them to
|
|
9
|
+
* `[[/font]]` (§A). `wikilink-format` is recorded as applied and never
|
|
10
|
+
* re-runs, and the corrupted `[[/font]]` form no longer matches its detection
|
|
11
|
+
* regex, so it does not self-heal. This migration walks every published page
|
|
12
|
+
* and reverts the corrupted form `[[/<x>]]` back to the close tag `</x>` when:
|
|
13
|
+
*
|
|
14
|
+
* - `x` is a single path segment (no `/` inside), AND
|
|
15
|
+
* - `x` has no `|alias` segment, AND
|
|
16
|
+
* - `x` is one of the FIVE deprecated tags the misfire could have produced.
|
|
17
|
+
*
|
|
18
|
+
* Scope is the 5 tags, NOT every known HTML element: those 5 were the ONLY
|
|
19
|
+
* names absent from `KNOWN_HTML_ELEMENTS` when `wikilink-format` ran, so they
|
|
20
|
+
* are the only `</x>` that could ever have been mis-rewritten to `[[/x]]`.
|
|
21
|
+
* `section` / `div` / `br` / `img` / etc. were always known and never rewritten,
|
|
22
|
+
* so a `[[/section]]` in real data is a GENUINE wikilink and must be preserved.
|
|
23
|
+
*
|
|
24
|
+
* Genuine wikilinks are otherwise preserved too: `[[/foo/bar]]` (multi-segment),
|
|
25
|
+
* `[[/font|alias]]` (aliased), `[[/Font]]` (uppercase → case-sensitive page
|
|
26
|
+
* name), and `[[/wiki-page]]` (non-recoverable name) are all left untouched.
|
|
27
|
+
*
|
|
28
|
+
* ── Inherent ambiguity ───────────────────────────────────────────────
|
|
29
|
+
* `[[/font]]` could be a corrupted `</font>` OR a genuine wikilink to a real
|
|
30
|
+
* page literally at `/font`. They are indistinguishable from the text alone.
|
|
31
|
+
* We resolve this conservatively: a `[[/<x>]]` whose `/<x>` matches a **live
|
|
32
|
+
* content page** (published, not a redirect stub) is NOT reverted — it is
|
|
33
|
+
* reported by `detect` so an operator can decide manually. The revert therefore
|
|
34
|
+
* only touches occurrences that have no same-named live page to be mistaken for.
|
|
35
|
+
* Pages literally named after a deprecated tag (`/font`, `/center`, …) are very
|
|
36
|
+
* rare, but an absent-page `[[/font]]` is still reverted — see the docs Caution.
|
|
37
|
+
* ─────────────────────────────────────────────────────────────────────
|
|
38
|
+
*
|
|
39
|
+
* Like `wikilink-format`, every body rewrite routes through
|
|
40
|
+
* `ctx.rewritePageBody` (the `updatePage`-equivalent path) so `yjsState` /
|
|
41
|
+
* `yjsCheckpointAt` are nulled and an active editor's stale `Y.Doc` cannot
|
|
42
|
+
* silently revert the recovery (RFC-0008 §4.3.1).
|
|
43
|
+
*
|
|
44
|
+
* Idempotent: once reverted, `</x>` no longer matches this migration's
|
|
45
|
+
* detection regex (it scans for `[[/...]]`, not `</...>`), and a re-run of
|
|
46
|
+
* `wikilink-format` leaves `</x>` alone because `x` is now in
|
|
47
|
+
* `KNOWN_HTML_ELEMENTS`.
|
|
48
|
+
*/
|
|
49
|
+
/**
|
|
50
|
+
* The five deprecated/obsolete presentational tags absent from
|
|
51
|
+
* `KNOWN_HTML_ELEMENTS` when `wikilink-format` first ran — the ONLY close tags
|
|
52
|
+
* the misfire could have rewritten to `[[/x]]`. Recovery is scoped to exactly
|
|
53
|
+
* these so a genuine single-segment wikilink to any other element-named page
|
|
54
|
+
* (`[[/section]]`, `[[/div]]`, `[[/br]]`) is never destroyed.
|
|
55
|
+
*/
|
|
56
|
+
export declare const RECOVERABLE_DEPRECATED_TAGS: ReadonlySet<string>;
|
|
57
|
+
/**
|
|
58
|
+
* Matches a corrupted-wikilink candidate `[[/<segment>]]` with a single
|
|
59
|
+
* path segment and no alias. The capture group grabs the bare segment
|
|
60
|
+
* (`font` in `[[/font]]`). The `[^[\]|/]+` class excludes `[`, `]`, `|`, and
|
|
61
|
+
* `/`, so multi-segment (`[[/foo/bar]]`) and aliased (`[[/font|x]]`) forms
|
|
62
|
+
* never match here — only `shouldRecoverSegment` then filters by tag name.
|
|
63
|
+
*/
|
|
64
|
+
export declare const WIKILINK_HTML_CANDIDATE_REGEX: RegExp;
|
|
65
|
+
/**
|
|
66
|
+
* True iff `[[/<segment>]]` should be reverted to `</segment>`: the segment is
|
|
67
|
+
* a lowercase-ASCII identifier that is one of the FIVE deprecated tags the
|
|
68
|
+
* misfire could have produced. Uppercase (`/Font`), non-deprecated element
|
|
69
|
+
* names (`/section`, `/div`), and non-HTML names (`/wiki`) are genuine
|
|
70
|
+
* wikilinks and are left alone.
|
|
71
|
+
*/
|
|
72
|
+
export declare function shouldRecoverSegment(segment: string): boolean;
|
|
73
|
+
/** A single corrupted occurrence located in a body. */
|
|
74
|
+
export interface RecoverableOccurrence {
|
|
75
|
+
/** The full raw match, e.g. `[[/font]]`. */
|
|
76
|
+
raw: string;
|
|
77
|
+
/** The deprecated HTML tag name, e.g. `font`. */
|
|
78
|
+
element: string;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Single-pass scan: locate every recoverable `[[/<deprecated-tag>]]` occurrence
|
|
82
|
+
* in `body`. Pure — no rewrite is applied here (the rewrite happens in
|
|
83
|
+
* `rewriteBody` after same-name page collisions have been resolved
|
|
84
|
+
* per-occurrence).
|
|
85
|
+
*/
|
|
86
|
+
export declare function detectRecoverable(body: string): RecoverableOccurrence[];
|
|
87
|
+
/**
|
|
88
|
+
* `detectRecoverable` restricted to the non-code segments of `body`: a
|
|
89
|
+
* `[[/font]]` written as a code example (inside a fence or inline span) is NOT
|
|
90
|
+
* reported, so it never reaches the collision probe / pending verdict and is
|
|
91
|
+
* never reverted to `</font>`. This is the detect-side counterpart of routing
|
|
92
|
+
* the rewrite through `rewriteOutsideCode`; `rewrite` and `detect` are
|
|
93
|
+
* asymmetric (an async per-element collision probe sits between them), so they
|
|
94
|
+
* cannot share one `fn` — `detect` materialises occurrences here instead.
|
|
95
|
+
*
|
|
96
|
+
* `detectRecoverable` resets `lastIndex` at entry, so calling it once per
|
|
97
|
+
* non-code segment is safe (no cross-segment state). AD-1 (a stray backtick
|
|
98
|
+
* straddling `[[/font]]` so the token is absorbed into an inline-code span) is
|
|
99
|
+
* documented in the spec — an accepted false-negative.
|
|
100
|
+
*/
|
|
101
|
+
export declare function detectRecoverableOutsideCode(body: string): RecoverableOccurrence[];
|
|
102
|
+
/**
|
|
103
|
+
* Rewrite `body`, reverting `[[/<x>]]` → `</x>` for every recoverable element.
|
|
104
|
+
* Elements in `skip` (those that collide with a live same-named page) are left
|
|
105
|
+
* untouched. Returns the input by reference when nothing changed so callers can
|
|
106
|
+
* cheap-skip.
|
|
107
|
+
*
|
|
108
|
+
* Code regions (fenced blocks + inline spans) are excluded via the shared
|
|
109
|
+
* `rewriteOutsideCode` primitive: a `[[/font]]` written as a code example is
|
|
110
|
+
* left byte-identical (never reverted) so a migration-doc example cannot be
|
|
111
|
+
* corrupted. The detect side mirrors this via `detectRecoverableOutsideCode`.
|
|
112
|
+
*/
|
|
113
|
+
export declare function rewriteBody(body: string, skip: ReadonlySet<string>): string;
|
|
114
|
+
/**
|
|
115
|
+
* A skipped (collision) occurrence: the deprecated tag that was left as
|
|
116
|
+
* `[[/<element>]]` because a live same-named page exists, plus the page that
|
|
117
|
+
* holds the corrupted markup so an operator can open it from the report.
|
|
118
|
+
*/
|
|
119
|
+
export interface CollisionRecord {
|
|
120
|
+
/** The deprecated tag name left untouched, e.g. `font`. */
|
|
121
|
+
element: string;
|
|
122
|
+
/** `_id` of the page whose body still carries `[[/<element>]]`. */
|
|
123
|
+
pageId: string;
|
|
124
|
+
/** Path of that holding page (from the current revision), if available. */
|
|
125
|
+
pagePath?: string;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Render collision records into an operator-actionable string that names the
|
|
129
|
+
* holding page(s) per element, e.g.
|
|
130
|
+
* `/font (in /docs/setup, /guide); /center (in /notes)`. The element→pages
|
|
131
|
+
* mapping is preserved so the operator knows exactly which pages to open from
|
|
132
|
+
* the `migrate plan` output / boot warn log. Elements are sorted; per-element
|
|
133
|
+
* pages prefer the page path, falling back to the page id when the revision
|
|
134
|
+
* carried no path.
|
|
135
|
+
*/
|
|
136
|
+
export declare function formatCollisions(collisions: readonly CollisionRecord[]): string;
|
|
137
|
+
export declare const wikilinkHtmlRecover: {
|
|
138
|
+
id: string;
|
|
139
|
+
fromVersion: string;
|
|
140
|
+
toVersion: string;
|
|
141
|
+
layer: "preflight";
|
|
142
|
+
severity: "cosmetic";
|
|
143
|
+
order: number;
|
|
144
|
+
description: string;
|
|
145
|
+
/**
|
|
146
|
+
* Pending iff at least one published page's current revision body still
|
|
147
|
+
* carries a revertible `[[/<deprecated-tag>]]` whose element has no live
|
|
148
|
+
* same-named page. There is no index on `revision.body`, so this walks
|
|
149
|
+
* published pages (projecting `body`) and short-circuits at the first
|
|
150
|
+
* revertible occurrence.
|
|
151
|
+
*
|
|
152
|
+
* Colliding occurrences (`[[/font]]` with a live `/font` page) do NOT count
|
|
153
|
+
* as pending: this migration will never revert them, so reporting pending
|
|
154
|
+
* for them would block boot forever under preflight + `block`.
|
|
155
|
+
*/
|
|
156
|
+
isPending: (ctx: MigrationContext) => Promise<false>;
|
|
157
|
+
/**
|
|
158
|
+
* Full scan for `plan`: report how many pages / occurrences would be
|
|
159
|
+
* reverted plus, separately, the deprecated-tag names that were left alone
|
|
160
|
+
* because a live same-named page exists (the operator must resolve those
|
|
161
|
+
* by hand). Not called at boot.
|
|
162
|
+
*/
|
|
163
|
+
detect: (ctx: MigrationContext) => Promise<{
|
|
164
|
+
summary: string;
|
|
165
|
+
counts: {
|
|
166
|
+
pages: number;
|
|
167
|
+
occurrences: number;
|
|
168
|
+
collisions: number;
|
|
169
|
+
};
|
|
170
|
+
}>;
|
|
171
|
+
stages: {
|
|
172
|
+
name: string;
|
|
173
|
+
fn: (ctx: MigrationContext) => Promise<{
|
|
174
|
+
name: string;
|
|
175
|
+
transformed: number;
|
|
176
|
+
stats: {
|
|
177
|
+
wouldRevert: number;
|
|
178
|
+
occurrences: number;
|
|
179
|
+
collisions: number;
|
|
180
|
+
};
|
|
181
|
+
} | {
|
|
182
|
+
name: string;
|
|
183
|
+
transformed: number;
|
|
184
|
+
stats: {
|
|
185
|
+
collisions: number;
|
|
186
|
+
wouldRevert?: undefined;
|
|
187
|
+
occurrences?: undefined;
|
|
188
|
+
};
|
|
189
|
+
}>;
|
|
190
|
+
}[];
|
|
191
|
+
};
|