@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,11 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.allMigrations = void 0;
|
|
4
|
+
const files_url_to_attachments_1 = require("./files-url-to-attachments");
|
|
4
5
|
const page_status_default_1 = require("./page-status-default");
|
|
5
6
|
const relocate_reserved_api_paths_1 = require("./relocate-reserved-api-paths");
|
|
6
7
|
const revisions_schema_unify_1 = require("./revisions-schema-unify");
|
|
7
8
|
const user_unique_prepare_1 = require("./user-unique-prepare");
|
|
8
9
|
const wikilink_format_1 = require("./wikilink-format");
|
|
10
|
+
const wikilink_html_recover_1 = require("./wikilink-html-recover");
|
|
9
11
|
/**
|
|
10
12
|
* RFC-0008 §5.5 — the migration barrel.
|
|
11
13
|
*
|
|
@@ -22,5 +24,7 @@ exports.allMigrations = [
|
|
|
22
24
|
user_unique_prepare_1.userUniquePrepare, // phase 5 (preflight)
|
|
23
25
|
revisions_schema_unify_1.revisionsSchemaUnify, // phase 6 (boot — RFC-classified preflight, see migration JSDoc)
|
|
24
26
|
relocate_reserved_api_paths_1.relocateReservedApiPaths, // fix/mcp-endpoint (preflight) — v2 /api namespace reservation
|
|
27
|
+
files_url_to_attachments_1.filesUrlToAttachments, // feature-migration-files-url-rewrite (preflight) — v1 /files/<id> body rewrite (independent regex from wikilink-format/html-tag-fixes)
|
|
28
|
+
wikilink_html_recover_1.wikilinkHtmlRecover, // migration-html-tag-fixes (preflight) — recover </font> etc. corrupted by wikilink-format
|
|
25
29
|
];
|
|
26
30
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/migration/migrations/index.ts"],"names":[],"mappings":";;;AACA,+DAA0D;AAC1D,+EAAyE;AACzE,qEAAgE;AAChE,+DAA0D;AAC1D,uDAAmD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/migration/migrations/index.ts"],"names":[],"mappings":";;;AACA,yEAAmE;AACnE,+DAA0D;AAC1D,+EAAyE;AACzE,qEAAgE;AAChE,+DAA0D;AAC1D,uDAAmD;AACnD,mEAA8D;AAE9D;;;;;;;;;GASG;AACU,QAAA,aAAa,GAA0B;IAClD,uCAAiB,EAAE,iBAAiB;IACpC,gCAAc,EAAE,sBAAsB;IACtC,uCAAiB,EAAE,sBAAsB;IACzC,6CAAoB,EAAE,iEAAiE;IACvF,sDAAwB,EAAE,+DAA+D;IACzF,gDAAqB,EAAE,wIAAwI;IAC/J,2CAAmB,EAAE,2FAA2F;CACjH,CAAC"}
|
|
@@ -22,4 +22,34 @@
|
|
|
22
22
|
* `draft` back to `published`, which would violate the one-way
|
|
23
23
|
* transition rule.
|
|
24
24
|
*/
|
|
25
|
-
export declare const pageStatusDefault:
|
|
25
|
+
export declare const pageStatusDefault: {
|
|
26
|
+
id: string;
|
|
27
|
+
fromVersion: string;
|
|
28
|
+
toVersion: string;
|
|
29
|
+
layer: "boot";
|
|
30
|
+
description: string;
|
|
31
|
+
/**
|
|
32
|
+
* Cheap, index-backed probe: `Page.status` is declared `index: true`
|
|
33
|
+
* (models/page.ts), so a single `findOne({ status: null })` lookup is
|
|
34
|
+
* covered by that index and never scans the collection. Pending iff at
|
|
35
|
+
* least one legacy page is still missing a status.
|
|
36
|
+
*/
|
|
37
|
+
isPending: (ctx: import("../types").MigrationContext) => Promise<boolean>;
|
|
38
|
+
/**
|
|
39
|
+
* Optional `plan` detail: count the remaining legacy rows. Not called at
|
|
40
|
+
* boot — only `isPending` runs there.
|
|
41
|
+
*/
|
|
42
|
+
detect: (ctx: import("../types").MigrationContext) => Promise<{
|
|
43
|
+
summary: string;
|
|
44
|
+
counts: {
|
|
45
|
+
remaining: number;
|
|
46
|
+
};
|
|
47
|
+
}>;
|
|
48
|
+
stages: {
|
|
49
|
+
name: string;
|
|
50
|
+
fn: (ctx: import("../types").MigrationContext) => Promise<{
|
|
51
|
+
name: string;
|
|
52
|
+
transformed: number;
|
|
53
|
+
}>;
|
|
54
|
+
}[];
|
|
55
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { MigrationContext } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Shared "walk every published page's current revision" helper for the
|
|
4
|
+
* preflight migrations that have to project a revision field (no index on
|
|
5
|
+
* `meta.toc.text` / `revision.body`, so an index-backed O(1) probe is
|
|
6
|
+
* impossible — matches `wikilink-format`'s accepted tradeoff). It exists so the
|
|
7
|
+
* walk skeleton + the page→revision pairing are defined once and cannot drift
|
|
8
|
+
* between `isPending` (early-stop verdict) and `detect`/stage (full scan).
|
|
9
|
+
*
|
|
10
|
+
* Streaming + batching:
|
|
11
|
+
* - streams the published-page collection projecting only `_id revision`
|
|
12
|
+
* (`status: published` or legacy `null`, treated as published — trash /
|
|
13
|
+
* deprecated pages are read-only fixtures and out of scope), and
|
|
14
|
+
* - batch-fetches the paired current revisions with a single
|
|
15
|
+
* `Revision.find({ _id: { $in: batch } })` per `batchSize` pages instead of
|
|
16
|
+
* one `findById` per page (eliminates the per-page N+1).
|
|
17
|
+
*
|
|
18
|
+
* Early stop: `visit` may return `STOP` to abort the walk at the first hit, so
|
|
19
|
+
* `isPending` can short-circuit without reading every page.
|
|
20
|
+
*
|
|
21
|
+
* NOTE: `wikilink-format` predates this helper and keeps its own copy on
|
|
22
|
+
* purpose (its tests pin the existing walk); it can adopt this later.
|
|
23
|
+
*/
|
|
24
|
+
/** Sentinel a `visit` callback returns to abort the walk early. */
|
|
25
|
+
export declare const STOP: unique symbol;
|
|
26
|
+
/** A current revision, with the `select(projection)` fields plus its page. */
|
|
27
|
+
export interface RevisionVisit {
|
|
28
|
+
/** The projected revision fields (`select`-ed by `projection`). */
|
|
29
|
+
revision: Record<string, unknown>;
|
|
30
|
+
/** The owning page's `_id`, as a string. */
|
|
31
|
+
pageId: string;
|
|
32
|
+
}
|
|
33
|
+
export interface WalkOptions {
|
|
34
|
+
/**
|
|
35
|
+
* Mongoose `.select(...)` projection string for the revision fetch
|
|
36
|
+
* (e.g. `'meta.toc'`, `'body'`). `_id` is always available on the result.
|
|
37
|
+
*/
|
|
38
|
+
projection: string;
|
|
39
|
+
/** Pages per `$in` revision batch. Defaults to 200. */
|
|
40
|
+
batchSize?: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Stream published pages, batch-fetch their current revisions with the given
|
|
44
|
+
* projection, and invoke `visit(revision)` for each. Returning `STOP` from
|
|
45
|
+
* `visit` aborts the walk immediately.
|
|
46
|
+
*/
|
|
47
|
+
export declare function forEachPublishedCurrentRevision(ctx: MigrationContext, options: WalkOptions, visit: (entry: RevisionVisit) => typeof STOP | void | Promise<typeof STOP | void>): Promise<void>;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.STOP = void 0;
|
|
4
|
+
exports.forEachPublishedCurrentRevision = forEachPublishedCurrentRevision;
|
|
5
|
+
const page_1 = require("../../models/page");
|
|
6
|
+
/**
|
|
7
|
+
* Shared "walk every published page's current revision" helper for the
|
|
8
|
+
* preflight migrations that have to project a revision field (no index on
|
|
9
|
+
* `meta.toc.text` / `revision.body`, so an index-backed O(1) probe is
|
|
10
|
+
* impossible — matches `wikilink-format`'s accepted tradeoff). It exists so the
|
|
11
|
+
* walk skeleton + the page→revision pairing are defined once and cannot drift
|
|
12
|
+
* between `isPending` (early-stop verdict) and `detect`/stage (full scan).
|
|
13
|
+
*
|
|
14
|
+
* Streaming + batching:
|
|
15
|
+
* - streams the published-page collection projecting only `_id revision`
|
|
16
|
+
* (`status: published` or legacy `null`, treated as published — trash /
|
|
17
|
+
* deprecated pages are read-only fixtures and out of scope), and
|
|
18
|
+
* - batch-fetches the paired current revisions with a single
|
|
19
|
+
* `Revision.find({ _id: { $in: batch } })` per `batchSize` pages instead of
|
|
20
|
+
* one `findById` per page (eliminates the per-page N+1).
|
|
21
|
+
*
|
|
22
|
+
* Early stop: `visit` may return `STOP` to abort the walk at the first hit, so
|
|
23
|
+
* `isPending` can short-circuit without reading every page.
|
|
24
|
+
*
|
|
25
|
+
* NOTE: `wikilink-format` predates this helper and keeps its own copy on
|
|
26
|
+
* purpose (its tests pin the existing walk); it can adopt this later.
|
|
27
|
+
*/
|
|
28
|
+
/** Sentinel a `visit` callback returns to abort the walk early. */
|
|
29
|
+
exports.STOP = Symbol('stop-walk');
|
|
30
|
+
const DEFAULT_BATCH_SIZE = 200;
|
|
31
|
+
/**
|
|
32
|
+
* Stream published pages, batch-fetch their current revisions with the given
|
|
33
|
+
* projection, and invoke `visit(revision)` for each. Returning `STOP` from
|
|
34
|
+
* `visit` aborts the walk immediately.
|
|
35
|
+
*/
|
|
36
|
+
async function forEachPublishedCurrentRevision(ctx, options, visit) {
|
|
37
|
+
const Page = ctx.crowi.model('Page');
|
|
38
|
+
const Revision = ctx.crowi.model('Revision');
|
|
39
|
+
const projection = options.projection;
|
|
40
|
+
const batchSize = options.batchSize ?? DEFAULT_BATCH_SIZE;
|
|
41
|
+
const cursor = Page.find({ $or: [{ status: page_1.STATUS_PUBLISHED }, { status: null }] })
|
|
42
|
+
.select('_id revision')
|
|
43
|
+
.lean()
|
|
44
|
+
.cursor();
|
|
45
|
+
// Buffer of pages whose current revision still needs fetching.
|
|
46
|
+
let batch = [];
|
|
47
|
+
// Fetch the batch's revisions in one `$in` round-trip and pair each back to
|
|
48
|
+
// its page (preserving page order). Returns STOP if `visit` asked to abort.
|
|
49
|
+
const flush = async () => {
|
|
50
|
+
if (batch.length === 0)
|
|
51
|
+
return;
|
|
52
|
+
const ids = batch.map((p) => p.revision);
|
|
53
|
+
const revisions = await Revision.find({ _id: { $in: ids } })
|
|
54
|
+
.select(projection)
|
|
55
|
+
.lean()
|
|
56
|
+
.exec();
|
|
57
|
+
const byId = new Map();
|
|
58
|
+
for (const rev of revisions) {
|
|
59
|
+
if (rev?._id != null)
|
|
60
|
+
byId.set(String(rev._id), rev);
|
|
61
|
+
}
|
|
62
|
+
const pages = batch;
|
|
63
|
+
batch = [];
|
|
64
|
+
for (const page of pages) {
|
|
65
|
+
const revision = byId.get(String(page.revision));
|
|
66
|
+
if (!revision)
|
|
67
|
+
continue;
|
|
68
|
+
const result = await visit({ revision, pageId: String(page._id) });
|
|
69
|
+
if (result === exports.STOP)
|
|
70
|
+
return exports.STOP;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
try {
|
|
74
|
+
for await (const raw of cursor) {
|
|
75
|
+
const page = raw;
|
|
76
|
+
if (!page.revision)
|
|
77
|
+
continue;
|
|
78
|
+
batch.push(page);
|
|
79
|
+
if (batch.length >= batchSize) {
|
|
80
|
+
if ((await flush()) === exports.STOP)
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
await flush();
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
await cursor.close();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=published-current-revision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"published-current-revision.js","sourceRoot":"","sources":["../../../src/migration/migrations/published-current-revision.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,39 @@
|
|
|
1
|
+
import type { MigrationContext } from '../types';
|
|
1
2
|
/** `/api` → `/api-legacy`, `/api/foo` → `/api-legacy/foo`, `/api/` → `/api-legacy/`. */
|
|
2
3
|
export declare function relocatedApiPath(oldPath: string): string;
|
|
3
|
-
export declare const relocateReservedApiPaths:
|
|
4
|
+
export declare const relocateReservedApiPaths: {
|
|
5
|
+
id: string;
|
|
6
|
+
fromVersion: string;
|
|
7
|
+
toVersion: string;
|
|
8
|
+
layer: "preflight";
|
|
9
|
+
severity: "cosmetic";
|
|
10
|
+
description: string;
|
|
11
|
+
/**
|
|
12
|
+
* Pending iff any page still lives under `/api/*`. The anchored regex on
|
|
13
|
+
* the unique-indexed `path` field lets the planner use the index for the
|
|
14
|
+
* `/api` literal prefix, so this stays an index-assisted existence probe
|
|
15
|
+
* rather than a full-collection scan (§4.2.1).
|
|
16
|
+
*/
|
|
17
|
+
isPending: (ctx: MigrationContext) => Promise<boolean>;
|
|
18
|
+
/** Full scan for `plan`: count the pages that would move. Not called at boot. */
|
|
19
|
+
detect: (ctx: MigrationContext) => Promise<{
|
|
20
|
+
summary: string;
|
|
21
|
+
counts: {
|
|
22
|
+
pages: number;
|
|
23
|
+
};
|
|
24
|
+
}>;
|
|
25
|
+
stages: {
|
|
26
|
+
name: string;
|
|
27
|
+
fn: (ctx: MigrationContext) => Promise<{
|
|
28
|
+
name: string;
|
|
29
|
+
transformed: number;
|
|
30
|
+
stats: {
|
|
31
|
+
wouldMove: number;
|
|
32
|
+
};
|
|
33
|
+
} | {
|
|
34
|
+
name: string;
|
|
35
|
+
transformed: number;
|
|
36
|
+
stats?: undefined;
|
|
37
|
+
}>;
|
|
38
|
+
}[];
|
|
39
|
+
};
|
|
@@ -22,9 +22,12 @@ const types_1 = require("../types");
|
|
|
22
22
|
* so `api-legacy` does not collide). A pre-existing page at the relocation
|
|
23
23
|
* target is avoided by appending a `-N` suffix.
|
|
24
24
|
*
|
|
25
|
-
* It is `preflight` because it rewrites user-visible page paths
|
|
26
|
-
*
|
|
27
|
-
*
|
|
25
|
+
* It is `preflight` because it rewrites user-visible page paths, so it runs
|
|
26
|
+
* explicitly from `crowi-admin migrate apply` in a maintenance window rather
|
|
27
|
+
* than auto-applying at boot. Its `severity` is `cosmetic`: a stranded
|
|
28
|
+
* `/api/*` page is a display / availability issue, not an autoIndex E11000
|
|
29
|
+
* hazard, so a pending probe only warns and never refuses boot (§4.2.7
|
|
30
|
+
* amendment). The move is done with plain `updateOne` /
|
|
28
31
|
* `updateMany` on the Page + Revision collections rather than
|
|
29
32
|
* `Page.rename`, deliberately bypassing the `pageEvent('update')` chain
|
|
30
33
|
* (mention dispatch / render-cache / backlink) — a path-only relocation of
|
|
@@ -73,6 +76,11 @@ exports.relocateReservedApiPaths = (0, types_1.defineMigration)({
|
|
|
73
76
|
fromVersion: '1.x',
|
|
74
77
|
toVersion: '2.0',
|
|
75
78
|
layer: 'preflight',
|
|
79
|
+
// Path move only; no E11000 hazard. `isPending` is `Page.exists({path:/^\/api/})`
|
|
80
|
+
// and stabilises post-apply (does not re-trigger). Unapplied means old
|
|
81
|
+
// `/api/*` pages 404, which is a recommended pre-go-live fix, not a
|
|
82
|
+
// data-integrity risk. Cosmetic.
|
|
83
|
+
severity: 'cosmetic',
|
|
76
84
|
description: 'Relocate v1 pages out of the v2-reserved /api namespace into /api-legacy',
|
|
77
85
|
/**
|
|
78
86
|
* Pending iff any page still lives under `/api/*`. The anchored regex on
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relocate-reserved-api-paths.js","sourceRoot":"","sources":["../../../src/migration/migrations/relocate-reserved-api-paths.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"relocate-reserved-api-paths.js","sourceRoot":"","sources":["../../../src/migration/migrations/relocate-reserved-api-paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,4 +30,38 @@
|
|
|
30
30
|
* already omits an undefined `contributors`). `renderedAst` is the
|
|
31
31
|
* `rebuild renderer` task's responsibility per RFC-0008.
|
|
32
32
|
*/
|
|
33
|
-
export declare const revisionsSchemaUnify:
|
|
33
|
+
export declare const revisionsSchemaUnify: {
|
|
34
|
+
id: string;
|
|
35
|
+
fromVersion: string;
|
|
36
|
+
toVersion: string;
|
|
37
|
+
layer: "boot";
|
|
38
|
+
description: string;
|
|
39
|
+
/**
|
|
40
|
+
* Cheap, index-backed probe: `Revision.type` is declared `index: true`
|
|
41
|
+
* (models/revision.ts), so `findOne({ type: null })` is covered by that
|
|
42
|
+
* index and never scans the collection. `{ type: null }` matches both a
|
|
43
|
+
* missing field and an explicit `null` in MongoDB query semantics, so a
|
|
44
|
+
* single condition covers every legacy shape. Pending iff at least one
|
|
45
|
+
* legacy revision is still missing a type. After apply (and because new
|
|
46
|
+
* revisions are filled by the schema `default`) this stays false — no
|
|
47
|
+
* permanent boot block.
|
|
48
|
+
*/
|
|
49
|
+
isPending: (ctx: import("../types").MigrationContext) => Promise<boolean>;
|
|
50
|
+
/**
|
|
51
|
+
* Optional `plan` detail: count the remaining legacy rows. Not called at
|
|
52
|
+
* boot — only `isPending` runs there. Index-backed count on `type`.
|
|
53
|
+
*/
|
|
54
|
+
detect: (ctx: import("../types").MigrationContext) => Promise<{
|
|
55
|
+
summary: string;
|
|
56
|
+
counts: {
|
|
57
|
+
remaining: number;
|
|
58
|
+
};
|
|
59
|
+
}>;
|
|
60
|
+
stages: {
|
|
61
|
+
name: string;
|
|
62
|
+
fn: (ctx: import("../types").MigrationContext) => Promise<{
|
|
63
|
+
name: string;
|
|
64
|
+
transformed: number;
|
|
65
|
+
}>;
|
|
66
|
+
}[];
|
|
67
|
+
};
|
|
@@ -1 +1,55 @@
|
|
|
1
|
-
|
|
1
|
+
import type { MigrationContext } from '../types';
|
|
2
|
+
export declare const userUniquePrepare: {
|
|
3
|
+
id: string;
|
|
4
|
+
fromVersion: string;
|
|
5
|
+
toVersion: string;
|
|
6
|
+
layer: "preflight";
|
|
7
|
+
severity: "blocking";
|
|
8
|
+
description: string;
|
|
9
|
+
/**
|
|
10
|
+
* Pending iff a plain unique index build would fail E11000. Two residual
|
|
11
|
+
* conditions (both folded to the index collation):
|
|
12
|
+
*
|
|
13
|
+
* - a living-vs-living duplicate on username or email, or
|
|
14
|
+
* - a not-yet-tombstoned DELETED user colliding with a living user.
|
|
15
|
+
*
|
|
16
|
+
* Conservative (§6.2): once `dedup-*` + `tombstone-deleted` run, every group
|
|
17
|
+
* is resolved and this returns false, so boot under preflight+block clears
|
|
18
|
+
* (no permanent block). Short-circuits at the first collision found.
|
|
19
|
+
*/
|
|
20
|
+
isPending: (ctx: MigrationContext) => Promise<boolean>;
|
|
21
|
+
/** Full-scan report for `plan`: duplicate group counts + tombstone targets. */
|
|
22
|
+
detect: (ctx: MigrationContext) => Promise<{
|
|
23
|
+
summary: string;
|
|
24
|
+
counts: {
|
|
25
|
+
usernameGroups: number;
|
|
26
|
+
emailGroups: number;
|
|
27
|
+
tombstoneTargets: number;
|
|
28
|
+
};
|
|
29
|
+
}>;
|
|
30
|
+
stages: ({
|
|
31
|
+
name: string;
|
|
32
|
+
fn: (ctx: MigrationContext) => Promise<{
|
|
33
|
+
name: string;
|
|
34
|
+
transformed: number;
|
|
35
|
+
stats: {
|
|
36
|
+
groups: number;
|
|
37
|
+
reassigned: Record<string, number>;
|
|
38
|
+
deletedConflicting: number;
|
|
39
|
+
};
|
|
40
|
+
}>;
|
|
41
|
+
} | {
|
|
42
|
+
name: string;
|
|
43
|
+
fn: (ctx: MigrationContext) => Promise<{
|
|
44
|
+
name: string;
|
|
45
|
+
transformed: number;
|
|
46
|
+
stats: {
|
|
47
|
+
wouldTombstone: number;
|
|
48
|
+
};
|
|
49
|
+
} | {
|
|
50
|
+
name: string;
|
|
51
|
+
transformed: number;
|
|
52
|
+
stats?: undefined;
|
|
53
|
+
}>;
|
|
54
|
+
})[];
|
|
55
|
+
};
|
|
@@ -109,6 +109,11 @@ exports.userUniquePrepare = (0, types_1.defineMigration)({
|
|
|
109
109
|
fromVersion: '1.x',
|
|
110
110
|
toVersion: '2.0',
|
|
111
111
|
layer: 'preflight',
|
|
112
|
+
// The ONLY blocking migration: dedups so the unique index can build without
|
|
113
|
+
// E11000 (RFC §9/§11). Booting unapplied risks an autoIndex failure, so a
|
|
114
|
+
// pending verdict must refuse boot under the `block` policy. Do NOT
|
|
115
|
+
// reclassify to cosmetic — that would re-expose E11000.
|
|
116
|
+
severity: 'blocking',
|
|
112
117
|
description: 'Deduplicate users (unique index via autoIndex)',
|
|
113
118
|
/**
|
|
114
119
|
* Pending iff a plain unique index build would fail E11000. Two residual
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-unique-prepare.js","sourceRoot":"","sources":["../../../src/migration/migrations/user-unique-prepare.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"user-unique-prepare.js","sourceRoot":"","sources":["../../../src/migration/migrations/user-unique-prepare.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { MigrationContext } from '../types';
|
|
1
2
|
/**
|
|
2
3
|
* RFC-0008 §10.2 step 4 / §4.3.1 — `wikilink-format` (preflight layer).
|
|
3
4
|
*
|
|
@@ -20,17 +21,6 @@
|
|
|
20
21
|
* The textual conversion logic below is moved verbatim from the old command so
|
|
21
22
|
* the rewrite output is byte-identical to the legacy migrator.
|
|
22
23
|
*/
|
|
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
24
|
/**
|
|
35
25
|
* v1 angle-bracket internal link form. The capture group grabs the path-style
|
|
36
26
|
* payload (starts with `/`, no whitespace, no `<` / `>` / `|` other than the
|
|
@@ -83,6 +73,13 @@ export interface WikilinkOccurrence {
|
|
|
83
73
|
* occurrence list so callers don't walk the regex twice. `body` is returned by
|
|
84
74
|
* reference when nothing changed, letting callers cheap-skip via
|
|
85
75
|
* `result.body === body`. Pure function — no side effects, no I/O.
|
|
76
|
+
*
|
|
77
|
+
* Code regions (fenced blocks + inline spans) are excluded: `</…>` written as a
|
|
78
|
+
* code example is left byte-identical, so it is never misdetected as a v1
|
|
79
|
+
* wikilink. We run the detection regex only on the non-`code` segments via the
|
|
80
|
+
* shared `rewriteOutsideCode` primitive, re-joining in original order
|
|
81
|
+
* (segment-and-rewrite — see `code-mask.ts` for why this beats a fill/restore
|
|
82
|
+
* scheme). Indented code blocks are an accepted divergence (still rewritten).
|
|
86
83
|
*/
|
|
87
84
|
export declare function rewriteAndDetect(body: string): {
|
|
88
85
|
body: string;
|
|
@@ -94,4 +91,70 @@ export declare function rewriteAndDetect(body: string): {
|
|
|
94
91
|
* twice.
|
|
95
92
|
*/
|
|
96
93
|
export declare function rewriteWikilinks(body: string): string;
|
|
97
|
-
export declare const wikilinkFormat:
|
|
94
|
+
export declare const wikilinkFormat: {
|
|
95
|
+
id: string;
|
|
96
|
+
fromVersion: string;
|
|
97
|
+
toVersion: string;
|
|
98
|
+
layer: "preflight";
|
|
99
|
+
severity: "cosmetic";
|
|
100
|
+
description: string;
|
|
101
|
+
/**
|
|
102
|
+
* Pending verdict = at least one published page whose **current** revision
|
|
103
|
+
* body still contains a genuine legacy wikilink. Two constraints shape this:
|
|
104
|
+
*
|
|
105
|
+
* 1. The verdict uses the **full detection rule**, not the bare substring.
|
|
106
|
+
* A v1 wikilink (`</docs/api>`) and an HTML close tag (`</div>`) both
|
|
107
|
+
* start with `</`, and there is no index on `revision.body`, so an
|
|
108
|
+
* index-backed O(1) probe is impossible without a text index (which §9
|
|
109
|
+
* says the framework does not own). We therefore walk published pages and
|
|
110
|
+
* run `bodyHasRewritableWikilink` (the same `shouldRewriteWikilink` filter
|
|
111
|
+
* used by `detect`/stage) on each current-revision body. `</` is kept only
|
|
112
|
+
* as a cheap prefilter inside that helper to skip the regex on bodies that
|
|
113
|
+
* obviously cannot contain a legacy link.
|
|
114
|
+
*
|
|
115
|
+
* This is load-bearing for boot under preflight + `block` (the default):
|
|
116
|
+
* the substring alone would over-match `</div>` and report pending forever
|
|
117
|
+
* even after `migrate apply` — apply rewrites only genuine wikilinks, so
|
|
118
|
+
* HTML close tags survive and a substring verdict would never clear,
|
|
119
|
+
* deadlocking boot (§6.2: a false positive blocks every cluster boot, and
|
|
120
|
+
* here it would be unrecoverable). Using the full rule means once the
|
|
121
|
+
* migration rewrites the genuine wikilinks, a body left with only `</div>`
|
|
122
|
+
* reports false and boot clears.
|
|
123
|
+
* 2. We scan only each page's **current** revision, never the whole
|
|
124
|
+
* `revisions` collection. Historical revisions keep their original
|
|
125
|
+
* `</path>` text forever (revisions are immutable), so a collection-wide
|
|
126
|
+
* scan would report pending permanently after any wikilink page ever
|
|
127
|
+
* existed — even once every live page was rewritten. So we read only the
|
|
128
|
+
* body each page's editor seeds from.
|
|
129
|
+
*
|
|
130
|
+
* We short-circuit at the first page carrying a genuine wikilink, so this
|
|
131
|
+
* stops early rather than reading every page.
|
|
132
|
+
*/
|
|
133
|
+
isPending: (ctx: MigrationContext) => Promise<boolean>;
|
|
134
|
+
/**
|
|
135
|
+
* Full scan for `plan`: count the pages that actually contain a rewritable
|
|
136
|
+
* occurrence (applying the full `shouldRewriteWikilink` rule, not just the
|
|
137
|
+
* substring pre-filter), plus the total occurrence count. Not called at boot.
|
|
138
|
+
*/
|
|
139
|
+
detect: (ctx: MigrationContext) => Promise<{
|
|
140
|
+
summary: string;
|
|
141
|
+
counts: {
|
|
142
|
+
pages: number;
|
|
143
|
+
occurrences: number;
|
|
144
|
+
};
|
|
145
|
+
}>;
|
|
146
|
+
stages: {
|
|
147
|
+
name: string;
|
|
148
|
+
fn: (ctx: MigrationContext) => Promise<{
|
|
149
|
+
name: string;
|
|
150
|
+
transformed: number;
|
|
151
|
+
stats: {
|
|
152
|
+
wouldRewrite: number;
|
|
153
|
+
};
|
|
154
|
+
} | {
|
|
155
|
+
name: string;
|
|
156
|
+
transformed: number;
|
|
157
|
+
stats?: undefined;
|
|
158
|
+
}>;
|
|
159
|
+
}[];
|
|
160
|
+
};
|