Просмотр исходного кода

Merge pull request #6355 from weseek/support/omit-mongoose-from-bundles

support: Omit mongoose from bundles
Yuki Takei 3 лет назад
Родитель
Сommit
fe34b5c528
67 измененных файлов с 137 добавлено и 97 удалено
  1. 0 1
      .github/workflows/reusable-app-prod.yml
  2. 7 2
      packages/app/config/migrate-mongo-config.ts
  3. 0 1
      packages/app/docker/Dockerfile
  4. 1 0
      packages/app/next.config.js
  5. 7 6
      packages/app/package.json
  6. 3 4
      packages/app/src/interfaces/in-app-notification.ts
  7. 1 1
      packages/app/src/migrations/20180926134048-make-email-unique.js
  8. 1 1
      packages/app/src/migrations/20180927102719-init-serverurl.js
  9. 2 2
      packages/app/src/migrations/20181019114028-abolish-page-group-relation.js
  10. 1 1
      packages/app/src/migrations/20190618055300-abolish-crowi-classic-auth.js
  11. 1 1
      packages/app/src/migrations/20190618104011-add-config-app-installed.js
  12. 2 2
      packages/app/src/migrations/20190619055421-adjust-page-grant.js
  13. 2 2
      packages/app/src/migrations/20190624110950-fill-last-update-user.js
  14. 2 2
      packages/app/src/migrations/20190629193445-make-root-page-public.js
  15. 1 1
      packages/app/src/migrations/20191102223900-drop-configs-indices.js
  16. 1 1
      packages/app/src/migrations/20191102223901-drop-pages-indices.js
  17. 3 2
      packages/app/src/migrations/20191126173016-adjust-pages-path.js
  18. 1 1
      packages/app/src/migrations/20191127023815-drop-wrong-index-of-page-tag-relation.js
  19. 1 1
      packages/app/src/migrations/20200402160380-remove-deleteduser-from-relationgroup.js
  20. 1 1
      packages/app/src/migrations/20200420160390-remove-crowi-layout.js
  21. 1 1
      packages/app/src/migrations/20200512005851-remove-behavior-type.js
  22. 1 1
      packages/app/src/migrations/20200514001356-update-theme-color-for-dark.js
  23. 1 1
      packages/app/src/migrations/20200620203632-normalize-locale-id.js
  24. 1 1
      packages/app/src/migrations/20200827045151-remove-layout-setting.js
  25. 1 1
      packages/app/src/migrations/20200828024025-copy-aws-setting.js
  26. 1 1
      packages/app/src/migrations/20200901034313-update-mail-transmission.js
  27. 1 2
      packages/app/src/migrations/20200903080025-remove-timeline-type.js.js
  28. 1 2
      packages/app/src/migrations/20200915035234-rename-s3-config.js
  29. 2 2
      packages/app/src/migrations/20210420160380-convert-double-to-date.js
  30. 1 1
      packages/app/src/migrations/20210830074539-update-configs-for-slackbot.js
  31. 1 1
      packages/app/src/migrations/20210906194521-slack-app-integration-set-default-value.js
  32. 2 2
      packages/app/src/migrations/20210913153942-migrate-slack-app-integration-schema.js
  33. 2 2
      packages/app/src/migrations/20210921173042-add-is-trashed-field.js
  34. 1 1
      packages/app/src/migrations/20211005120030-slack-app-integration-rename-keys.js
  35. 1 1
      packages/app/src/migrations/20211005131430-config-without-proxy-command-permission-for-renaming.js
  36. 2 2
      packages/app/src/migrations/20211129125654-initialize-private-legacy-pages-named-query.js
  37. 4 3
      packages/app/src/migrations/20211227060705-revision-path-to-page-id-schema-migration.js
  38. 1 1
      packages/app/src/migrations/20220131001218-convert-redirect-to-pages-to-page-redirect-documents.js
  39. 2 3
      packages/app/src/migrations/20220311011114-convert-page-delete-config.js
  40. 1 1
      packages/app/src/migrations/20220411114257-set-sparse-option-to-slack-member-id.js
  41. 1 1
      packages/app/src/migrations/20220613064207-add-attachment-type-to-existing-attachments.js
  42. 13 4
      packages/app/src/pages/utils/objectid-transformer.ts
  43. 4 2
      packages/app/src/server/console.js
  44. 1 1
      packages/app/src/server/crowi/index.js
  45. 2 1
      packages/app/src/server/models/activity.ts
  46. 2 1
      packages/app/src/server/models/config.ts
  47. 2 1
      packages/app/src/server/models/editor-settings.ts
  48. 6 3
      packages/app/src/server/models/in-app-notification-settings.ts
  49. 2 1
      packages/app/src/server/models/in-app-notification.ts
  50. 4 2
      packages/app/src/server/models/named-query.ts
  51. 2 1
      packages/app/src/server/models/page-operation.ts
  52. 2 1
      packages/app/src/server/models/page-redirect.ts
  53. 2 1
      packages/app/src/server/models/page.ts
  54. 2 1
      packages/app/src/server/models/password-reset-order.ts
  55. 3 1
      packages/app/src/server/models/subscription.ts
  56. 1 1
      packages/app/src/server/models/tag.ts
  57. 2 1
      packages/app/src/server/models/update-post.ts
  58. 2 1
      packages/app/src/server/models/user-group.ts
  59. 2 1
      packages/app/src/server/models/user-registration-order.ts
  60. 3 1
      packages/app/src/server/models/user-ui-settings.ts
  61. 1 1
      packages/app/src/server/service/comment.ts
  62. 0 0
      packages/app/src/server/util/mongoose-utils.ts
  63. 2 1
      packages/app/test/integration/global-setup.js
  64. 1 1
      packages/app/test/integration/setup.js
  65. 2 2
      packages/core/src/index.ts
  66. 2 2
      packages/core/src/utils/page-path-utils.ts
  67. 5 0
      yarn.lock

+ 0 - 1
.github/workflows/reusable-app-prod.yml

@@ -67,7 +67,6 @@ jobs:
           packages/app/public \
           packages/app/resource \
           packages/app/tmp \
-          packages/app/migrate-mongo-config.js \
           packages/app/.env.production* \
           packages/*/package.json \
           packages/*/dist

+ 7 - 2
packages/app/migrate-mongo-config.js → packages/app/config/migrate-mongo-config.ts

@@ -5,7 +5,13 @@
  * @author Yuki Takei <yuki@weseek.co.jp>
  */
 
-const { URL } = require('url');
+import { URL } from 'url';
+
+const isProduction = process.env.NODE_ENV === 'production';
+
+const { initMongooseGlobalSettings, getMongoUri, mongoOptions } = isProduction
+  ? require('../dist/server/util/mongoose-utils')
+  : require('../src/server/util/mongoose-utils');
 
 // get migrationsDir from env var
 const migrationsDir = process.env.MIGRATIONS_DIR;
@@ -13,7 +19,6 @@ if (migrationsDir == null) {
   throw new Error('An env var MIGRATIONS_DIR must be set.');
 }
 
-const { initMongooseGlobalSettings, getMongoUri, mongoOptions } = require('@growi/core');
 
 initMongooseGlobalSettings();
 

+ 0 - 1
packages/app/docker/Dockerfile

@@ -116,7 +116,6 @@ RUN tar -cf packages.tar \
   packages/app/public \
   packages/app/resource \
   packages/app/tmp \
-  packages/app/migrate-mongo-config.js \
   packages/app/.env.production* \
   packages/*/package.json \
   packages/*/dist

+ 1 - 0
packages/app/next.config.js

@@ -81,6 +81,7 @@ module.exports = async(phase, { defaultConfig }) => {
       // See: https://webpack.js.org/configuration/externals/
       // This provides a way of excluding dependencies from the output bundles
       config.externals.push('dtrace-provider');
+      config.externals.push('mongoose');
 
       // configure additional entries
       const orgEntry = config.entry;

+ 7 - 6
packages/app/package.json

@@ -15,17 +15,17 @@
     "server": "yarn cross-env NODE_ENV=production node -r dotenv-flow/config dist/server/app.js",
     "server:ci": "yarn server --ci",
     "preserver": "yarn cross-env NODE_ENV=production yarn migrate",
-    "migrate": "node -r dotenv-flow/config node_modules/.bin/migrate-mongo up",
+    "migrate": "node -r dotenv-flow/config node_modules/.bin/migrate-mongo up -f config/migrate-mongo-config.js",
     "//// for development": "",
     "dev": "yarn cross-env NODE_ENV=development ts-node-dev -r tsconfig-paths/register -r dotenv-flow/config --inspect --transpile-only src/server/app.ts",
     "predev": "yarn cross-env NODE_ENV=development run-p resources:* dev:migrate:up",
     "dev:analyze": "yarn cross-env ANALYZE=true yarn dev",
     "dev:migrate-mongo": "yarn cross-env NODE_ENV=development yarn ts-node node_modules/.bin/migrate-mongo",
-    "dev:migrate": "yarn dev:migrate:up",
-    "dev:migrate:create": "yarn dev:migrate-mongo create",
-    "dev:migrate:status": "yarn dev:migrate-mongo status",
-    "dev:migrate:up": "yarn dev:migrate-mongo up",
-    "dev:migrate:down": "yarn dev:migrate-mongo down",
+    "dev:migrate": "yarn dev:migrate:up -f config/migrate-mongo-config.ts",
+    "dev:migrate:create": "yarn dev:migrate-mongo create -f config/migrate-mongo-config.ts",
+    "dev:migrate:status": "yarn dev:migrate-mongo status -f config/migrate-mongo-config.ts",
+    "dev:migrate:up": "yarn dev:migrate-mongo up -f config/migrate-mongo-config.ts",
+    "dev:migrate:down": "yarn dev:migrate-mongo down -f config/migrate-mongo-config.ts",
     "cy:run": "cypress run --browser chrome",
     "//// for CI": "",
     "dev:ci": "yarn dev --ci",
@@ -82,6 +82,7 @@
     "axios-retry": "^3.2.4",
     "body-parser": "^1.18.2",
     "browser-bunyan": "^1.6.3",
+    "bson-objectid": "^2.0.3",
     "bunyan": "^1.8.15",
     "check-node-version": "^4.1.0",
     "compression": "^1.7.4",

+ 3 - 4
packages/app/src/interfaces/in-app-notification.ts

@@ -1,6 +1,5 @@
-import { Types } from 'mongoose';
-import { IUser } from './user';
 import { IPage } from './page';
+import { IUser } from './user';
 
 export enum InAppNotificationStatuses {
   STATUS_UNREAD = 'UNREAD',
@@ -54,7 +53,7 @@ export interface ISubscribeRule {
   name: subscribeRuleNames;
   isEnabled: boolean;
 }
-export interface IInAppNotificationSettings {
-  userId: Types.ObjectId;
+export interface IInAppNotificationSettings<UserID> {
+  userId: UserID | string;
   subscribeRules: ISubscribeRule[];
 }

+ 1 - 1
packages/app/src/migrations/20180926134048-make-email-unique.js

@@ -1,6 +1,6 @@
 import mongoose from 'mongoose';
 
-import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
+import { getModelSafely, getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:make-email-unique');

+ 1 - 1
packages/app/src/migrations/20180927102719-init-serverurl.js

@@ -1,8 +1,8 @@
-import { getMongoUri, mongoOptions } from '@growi/core';
 import mongoose from 'mongoose';
 
 // eslint-disable-next-line import/no-named-as-default
 import Config from '~/server/models/config';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:init-serverurl');

+ 2 - 2
packages/app/src/migrations/20181019114028-abolish-page-group-relation.js

@@ -1,8 +1,8 @@
 import mongoose from 'mongoose';
 
-import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
-import loggerFactory from '~/utils/logger';
 import getPageModel from '~/server/models/page';
+import { getModelSafely, getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
+import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:abolish-page-group-relation');
 

+ 1 - 1
packages/app/src/migrations/20190618055300-abolish-crowi-classic-auth.js

@@ -1,8 +1,8 @@
-import { getMongoUri, mongoOptions } from '@growi/core';
 import mongoose from 'mongoose';
 
 // eslint-disable-next-line import/no-named-as-default
 import Config from '~/server/models/config';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:abolish-crowi-classic-auth');

+ 1 - 1
packages/app/src/migrations/20190618104011-add-config-app-installed.js

@@ -1,8 +1,8 @@
-import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
 import mongoose from 'mongoose';
 
 // eslint-disable-next-line import/no-named-as-default
 import Config from '~/server/models/config';
+import { getModelSafely, getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:add-config-app-installed');

+ 2 - 2
packages/app/src/migrations/20190619055421-adjust-page-grant.js

@@ -1,8 +1,8 @@
 import mongoose from 'mongoose';
 
-import { getMongoUri, mongoOptions } from '@growi/core';
-import loggerFactory from '~/utils/logger';
 import getPageModel from '~/server/models/page';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
+import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:adjust-page-grant');
 

+ 2 - 2
packages/app/src/migrations/20190624110950-fill-last-update-user.js

@@ -1,8 +1,8 @@
 import mongoose from 'mongoose';
 
-import { getMongoUri, mongoOptions } from '@growi/core';
-import loggerFactory from '~/utils/logger';
 import getPageModel from '~/server/models/page';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
+import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:abolish-page-group-relation');
 

+ 2 - 2
packages/app/src/migrations/20190629193445-make-root-page-public.js

@@ -1,8 +1,8 @@
 import mongoose from 'mongoose';
 
-import { getMongoUri, mongoOptions } from '@growi/core';
-import loggerFactory from '~/utils/logger';
 import getPageModel from '~/server/models/page';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
+import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:make-root-page-public');
 

+ 1 - 1
packages/app/src/migrations/20191102223900-drop-configs-indices.js

@@ -1,6 +1,6 @@
 import mongoose from 'mongoose';
 
-import { getMongoUri, mongoOptions } from '@growi/core';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:drop-configs-indices');

+ 1 - 1
packages/app/src/migrations/20191102223901-drop-pages-indices.js

@@ -1,6 +1,6 @@
 import mongoose from 'mongoose';
 
-import { getMongoUri, mongoOptions } from '@growi/core';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:drop-pages-indices');

+ 3 - 2
packages/app/src/migrations/20191126173016-adjust-pages-path.js

@@ -1,7 +1,8 @@
+import { pathUtils } from '@growi/core';
 import mongoose from 'mongoose';
-import { pathUtils, getMongoUri, mongoOptions } from '@growi/core';
-import getPageModel from '~/server/models/page';
 
+import getPageModel from '~/server/models/page';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:adjust-pages-path');

+ 1 - 1
packages/app/src/migrations/20191127023815-drop-wrong-index-of-page-tag-relation.js

@@ -1,6 +1,6 @@
 import mongoose from 'mongoose';
 
-import { getMongoUri, mongoOptions } from '@growi/core';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:drop-wrong-index-of-page-tag-relation');

+ 1 - 1
packages/app/src/migrations/20200402160380-remove-deleteduser-from-relationgroup.js

@@ -1,6 +1,6 @@
 import mongoose from 'mongoose';
 
-import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
+import { getModelSafely, getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:remove-deleteduser-from-relationgroup');

+ 1 - 1
packages/app/src/migrations/20200420160390-remove-crowi-layout.js

@@ -1,8 +1,8 @@
-import { getMongoUri, mongoOptions } from '@growi/core';
 import mongoose from 'mongoose';
 
 // eslint-disable-next-line import/no-named-as-default
 import Config from '~/server/models/config';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:remove-crowi-lauout');

+ 1 - 1
packages/app/src/migrations/20200512005851-remove-behavior-type.js

@@ -1,8 +1,8 @@
-import { getMongoUri, mongoOptions } from '@growi/core';
 import mongoose from 'mongoose';
 
 // eslint-disable-next-line import/no-named-as-default
 import Config from '~/server/models/config';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:remove-behavior-type');

+ 1 - 1
packages/app/src/migrations/20200514001356-update-theme-color-for-dark.js

@@ -1,8 +1,8 @@
-import { getMongoUri, mongoOptions } from '@growi/core';
 import mongoose from 'mongoose';
 
 // eslint-disable-next-line import/no-named-as-default
 import Config from '~/server/models/config';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:update-theme-color-for-dark');

+ 1 - 1
packages/app/src/migrations/20200620203632-normalize-locale-id.js

@@ -1,8 +1,8 @@
-import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
 import mongoose from 'mongoose';
 
 // eslint-disable-next-line import/no-named-as-default
 import Config from '~/server/models/config';
+import { getModelSafely, getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:normalize-locale-id');

+ 1 - 1
packages/app/src/migrations/20200827045151-remove-layout-setting.js

@@ -1,8 +1,8 @@
-import { getMongoUri, mongoOptions } from '@growi/core';
 import mongoose from 'mongoose';
 
 // eslint-disable-next-line import/no-named-as-default
 import Config from '~/server/models/config';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:remove-layout-setting');

+ 1 - 1
packages/app/src/migrations/20200828024025-copy-aws-setting.js

@@ -1,8 +1,8 @@
-import { getMongoUri, mongoOptions } from '@growi/core';
 import mongoose from 'mongoose';
 
 // eslint-disable-next-line import/no-named-as-default
 import Config from '~/server/models/config';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:remove-layout-setting');

+ 1 - 1
packages/app/src/migrations/20200901034313-update-mail-transmission.js

@@ -1,8 +1,8 @@
-import { getMongoUri, mongoOptions } from '@growi/core';
 import mongoose from 'mongoose';
 
 // eslint-disable-next-line import/no-named-as-default
 import Config from '~/server/models/config';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:update-mail-transmission');

+ 1 - 2
packages/app/src/migrations/20200903080025-remove-timeline-type.js.js

@@ -1,7 +1,6 @@
-import { getMongoUri, mongoOptions } from '@growi/core';
-
 // eslint-disable-next-line import/no-named-as-default
 import Config from '~/server/models/config';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 

+ 1 - 2
packages/app/src/migrations/20200915035234-rename-s3-config.js

@@ -1,7 +1,6 @@
-import { getMongoUri, mongoOptions } from '@growi/core';
-
 // eslint-disable-next-line import/no-named-as-default
 import Config from '~/server/models/config';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 

+ 2 - 2
packages/app/src/migrations/20210420160380-convert-double-to-date.js

@@ -1,8 +1,8 @@
 import mongoose from 'mongoose';
 
-import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
-import loggerFactory from '~/utils/logger';
 import getPageModel from '~/server/models/page';
+import { getModelSafely, getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
+import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:remove-crowi-lauout');
 

+ 1 - 1
packages/app/src/migrations/20210830074539-update-configs-for-slackbot.js

@@ -1,8 +1,8 @@
-import { getMongoUri, mongoOptions } from '@growi/core';
 import mongoose from 'mongoose';
 
 // eslint-disable-next-line import/no-named-as-default
 import Config from '~/server/models/config';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:update-configs-for-slackbot');

+ 1 - 1
packages/app/src/migrations/20210906194521-slack-app-integration-set-default-value.js

@@ -1,6 +1,6 @@
 import mongoose from 'mongoose';
 
-import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
+import { getModelSafely, getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:slack-app-integration-set-default-value');

+ 2 - 2
packages/app/src/migrations/20210913153942-migrate-slack-app-integration-schema.js

@@ -1,7 +1,7 @@
-import mongoose from 'mongoose';
 import { defaultSupportedCommandsNameForBroadcastUse, defaultSupportedCommandsNameForSingleUse } from '@growi/slack';
+import mongoose from 'mongoose';
 
-import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
+import { getModelSafely, getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 

+ 2 - 2
packages/app/src/migrations/20210921173042-add-is-trashed-field.js

@@ -1,8 +1,8 @@
 import mongoose from 'mongoose';
 
-import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
-import loggerFactory from '~/utils/logger';
 import getPageModel from '~/server/models/page';
+import { getModelSafely, getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
+import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:add-column-is-trashed');
 

+ 1 - 1
packages/app/src/migrations/20211005120030-slack-app-integration-rename-keys.js

@@ -1,6 +1,6 @@
 import mongoose from 'mongoose';
 
-import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
+import { getModelSafely, getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 

+ 1 - 1
packages/app/src/migrations/20211005131430-config-without-proxy-command-permission-for-renaming.js

@@ -1,8 +1,8 @@
-import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
 import mongoose from 'mongoose';
 
 // eslint-disable-next-line import/no-named-as-default
 import Config from '~/server/models/config';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 

+ 2 - 2
packages/app/src/migrations/20211129125654-initialize-private-legacy-pages-named-query.js

@@ -1,8 +1,8 @@
 import mongoose from 'mongoose';
 
-import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
-import NamedQuery from '~/server/models/named-query';
 import { SearchDelegatorName } from '~/interfaces/named-query';
+import NamedQuery from '~/server/models/named-query';
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 

+ 4 - 3
packages/app/src/migrations/20211227060705-revision-path-to-page-id-schema-migration.js

@@ -1,11 +1,12 @@
-import mongoose from 'mongoose';
 import { Writable } from 'stream';
+
+import mongoose from 'mongoose';
 import streamToPromise from 'stream-to-promise';
 
-import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
-import loggerFactory from '~/utils/logger';
 import getPageModel from '~/server/models/page';
 import { createBatchStream } from '~/server/util/batch-stream';
+import { getModelSafely, getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
+import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:revision-path-to-page-id-schema-migration');

+ 1 - 1
packages/app/src/migrations/20220131001218-convert-redirect-to-pages-to-page-redirect-documents.js

@@ -1,9 +1,9 @@
-import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
 import mongoose from 'mongoose';
 
 // eslint-disable-next-line import/no-named-as-default
 import PageRedirectModel from '~/server/models/page-redirect';
 import { createBatchStream } from '~/server/util/batch-stream';
+import { getModelSafely, getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:convert-redirect-to-pages-to-page-redirect-documents');

+ 2 - 3
packages/app/src/migrations/20220311011114-convert-page-delete-config.js

@@ -1,11 +1,10 @@
 import mongoose from 'mongoose';
-import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
 
-import ConfigModel from '~/server/models/config';
 import {
   PageRecursiveDeleteConfigValue, PageRecursiveDeleteCompConfigValue,
 } from '~/interfaces/page-delete-config';
-
+import ConfigModel from '~/server/models/config';
+import { getModelSafely, getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:convert-page-delete-config');

+ 1 - 1
packages/app/src/migrations/20220411114257-set-sparse-option-to-slack-member-id.js

@@ -1,6 +1,6 @@
-import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
 import mongoose from 'mongoose';
 
+import { getModelSafely, getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:set-sparse-option-to-slack-member-id');

+ 1 - 1
packages/app/src/migrations/20220613064207-add-attachment-type-to-existing-attachments.js

@@ -1,8 +1,8 @@
-import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
 import mongoose from 'mongoose';
 
 import { AttachmentType } from '~/server/interfaces/attachment';
 import attachmentModel from '~/server/models/attachment';
+import { getModelSafely, getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import loggerFactory from '~/utils/logger';
 
 const logger = loggerFactory('growi:migrate:add-attachment-type-to-existing-attachments');

+ 13 - 4
packages/app/src/pages/utils/objectid-transformer.ts

@@ -1,11 +1,20 @@
-import { Types as MongooseTypes } from 'mongoose';
+// !!! Do NOT import 'mongoose' to reduce bundle size !!!
+import ObjectId from 'bson-objectid';
 import superjson from 'superjson';
 
 export const registerTransformerForObjectId = (): void => {
-  superjson.registerCustom<MongooseTypes.ObjectId|string, string>(
+  superjson.registerCustom<ObjectId|string, string>(
     {
-      isApplicable: (v): v is MongooseTypes.ObjectId => v instanceof MongooseTypes.ObjectId,
-      serialize: v => (v instanceof MongooseTypes.ObjectId ? v.toHexString() : v),
+      isApplicable: (v): v is ObjectId => {
+        if (typeof v === 'string') {
+          return ObjectId.isValid(v);
+        }
+        if (typeof v.toHexString === 'function') {
+          return ObjectId.isValid(v.toHexString());
+        }
+        return false;
+      },
+      serialize: v => (typeof v === 'string' ? v : v.toHexString()),
       deserialize: v => v,
     },
     'ObjectidTransformer',

+ 4 - 2
packages/app/src/server/console.js

@@ -1,8 +1,10 @@
-const repl = require('repl');
 const fs = require('fs');
 const path = require('path');
+const repl = require('repl');
+
 const mongoose = require('mongoose');
-const { initMongooseGlobalSettings, getMongoUri, mongoOptions } = require('@growi/core');
+
+const { initMongooseGlobalSettings, getMongoUri, mongoOptions } = require('~/server/util/mongoose-utils');
 
 const models = require('./models');
 

+ 1 - 1
packages/app/src/server/crowi/index.js

@@ -3,7 +3,6 @@ import http from 'http';
 import path from 'path';
 
 import { createTerminus } from '@godaddy/terminus';
-import { initMongooseGlobalSettings, getMongoUri, mongoOptions } from '@growi/core';
 import mongoose from 'mongoose';
 import next from 'next';
 
@@ -29,6 +28,7 @@ import PageOperationService from '../service/page-operation';
 import SearchService from '../service/search';
 import { SlackIntegrationService } from '../service/slack-integration';
 import { UserNotificationService } from '../service/user-notification';
+import { initMongooseGlobalSettings, getMongoUri, mongoOptions } from '../util/mongoose-utils';
 
 const logger = loggerFactory('growi:crowi');
 const httpErrorHandler = require('../middlewares/http-error-handler');

+ 2 - 1
packages/app/src/server/models/activity.ts

@@ -1,4 +1,3 @@
-import { getOrCreateModel, getModelSafely } from '@growi/core';
 import {
   Types, Document, Model, Schema,
 } from 'mongoose';
@@ -11,6 +10,8 @@ import {
 } from '~/interfaces/activity';
 
 import loggerFactory from '../../utils/logger';
+import { getOrCreateModel, getModelSafely } from '../util/mongoose-utils';
+
 
 import Subscription from './subscription';
 

+ 2 - 1
packages/app/src/server/models/config.ts

@@ -1,9 +1,10 @@
-import { getOrCreateModel } from '@growi/core';
 import { Types, Schema } from 'mongoose';
 import uniqueValidator from 'mongoose-unique-validator';
 
 import { GrowiThemes } from '~/interfaces/theme';
 
+import { getOrCreateModel } from '../util/mongoose-utils';
+
 
 export interface Config {
   _id: Types.ObjectId;

+ 2 - 1
packages/app/src/server/models/editor-settings.ts

@@ -1,10 +1,11 @@
-import { getOrCreateModel } from '@growi/core';
 import {
   Schema, Model, Document,
 } from 'mongoose';
 
 import { IEditorSettings, ITextlintSettings } from '~/interfaces/editor-settings';
 
+import { getOrCreateModel } from '../util/mongoose-utils';
+
 
 export interface EditorSettingsDocument extends IEditorSettings, Document {
   userId: Schema.Types.ObjectId,

+ 6 - 3
packages/app/src/server/models/in-app-notification-settings.ts

@@ -1,9 +1,12 @@
-import { getOrCreateModel } from '@growi/core';
-import { Schema, Model, Document } from 'mongoose';
+import {
+  Schema, Model, Document, Types,
+} from 'mongoose';
 
 import { IInAppNotificationSettings, subscribeRuleNames } from '~/interfaces/in-app-notification';
 
-export interface InAppNotificationSettingsDocument extends IInAppNotificationSettings, Document {}
+import { getOrCreateModel } from '../util/mongoose-utils';
+
+export interface InAppNotificationSettingsDocument extends IInAppNotificationSettings<Types.ObjectId>, Document {}
 export type InAppNotificationSettingsModel = Model<InAppNotificationSettingsDocument>
 
 const inAppNotificationSettingsSchema = new Schema<InAppNotificationSettingsDocument, InAppNotificationSettingsModel>({

+ 2 - 1
packages/app/src/server/models/in-app-notification.ts

@@ -1,4 +1,3 @@
-import { getOrCreateModel } from '@growi/core';
 import {
   Types, Document, Schema, Model,
 } from 'mongoose';
@@ -7,6 +6,8 @@ import mongoosePaginate from 'mongoose-paginate-v2';
 import { AllSupportedTargetModels, AllSupportedActions } from '~/interfaces/activity';
 import { InAppNotificationStatuses } from '~/interfaces/in-app-notification';
 
+import { getOrCreateModel } from '../util/mongoose-utils';
+
 import { ActivityDocument } from './activity';
 
 

+ 4 - 2
packages/app/src/server/models/named-query.ts

@@ -4,10 +4,12 @@ import mongoose, {
   Schema, Model, Document,
 } from 'mongoose';
 
-import { getOrCreateModel } from '@growi/core';
-import loggerFactory from '../../utils/logger';
 import { INamedQuery, SearchDelegatorName } from '~/interfaces/named-query';
 
+import loggerFactory from '../../utils/logger';
+import { getOrCreateModel } from '../util/mongoose-utils';
+
+
 const logger = loggerFactory('growi:models:named-query');
 
 export interface NamedQueryDocument extends INamedQuery, Document {}

+ 2 - 1
packages/app/src/server/models/page-operation.ts

@@ -1,4 +1,3 @@
-import { getOrCreateModel } from '@growi/core';
 import { addSeconds } from 'date-fns';
 import mongoose, {
   Schema, Model, Document, QueryOptions, FilterQuery,
@@ -8,8 +7,10 @@ import {
   IPageForResuming, IUserForResuming, IOptionsForResuming,
 } from '~/server/models/interfaces/page-operation';
 
+
 import loggerFactory from '../../utils/logger';
 import { ObjectIdLike } from '../interfaces/mongoose-utils';
+import { getOrCreateModel } from '../util/mongoose-utils';
 
 const TIME_TO_ADD_SEC = 10;
 

+ 2 - 1
packages/app/src/server/models/page-redirect.ts

@@ -3,7 +3,8 @@
 import {
   Schema, Model, Document,
 } from 'mongoose';
-import { getOrCreateModel } from '@growi/core';
+
+import { getOrCreateModel } from '../util/mongoose-utils';
 
 export interface IPageRedirect {
   fromPath: string,

+ 2 - 1
packages/app/src/server/models/page.ts

@@ -2,7 +2,7 @@
 
 import nodePath from 'path';
 
-import { getOrCreateModel, pagePathUtils, pathUtils } from '@growi/core';
+import { pagePathUtils, pathUtils } from '@growi/core';
 import escapeStringRegexp from 'escape-string-regexp';
 import mongoose, {
   Schema, Model, Document, AnyObject,
@@ -15,6 +15,7 @@ import { IUserHasId } from '~/interfaces/user';
 import { ObjectIdLike } from '~/server/interfaces/mongoose-utils';
 
 import loggerFactory from '../../utils/logger';
+import { getOrCreateModel } from '../util/mongoose-utils';
 
 import { getPageSchema, extractToAncestorsPaths, populateDataToShowRevision } from './obsolete-page';
 

+ 2 - 1
packages/app/src/server/models/password-reset-order.ts

@@ -1,12 +1,13 @@
 import crypto from 'crypto';
 
-import { getOrCreateModel } from '@growi/core';
 import { addMinutes } from 'date-fns';
 import mongoose, {
   Schema, Model, Document,
 } from 'mongoose';
 import uniqueValidator from 'mongoose-unique-validator';
 
+import { getOrCreateModel } from '../util/mongoose-utils';
+
 
 const ObjectId = mongoose.Schema.Types.ObjectId;
 

+ 3 - 1
packages/app/src/server/models/subscription.ts

@@ -1,10 +1,12 @@
-import { getOrCreateModel, SubscriptionStatusType, AllSubscriptionStatusType } from '@growi/core';
+import { SubscriptionStatusType, AllSubscriptionStatusType } from '@growi/core';
 import {
   Types, Document, Model, Schema,
 } from 'mongoose';
 
 import { AllSupportedTargetModels } from '~/interfaces/activity';
 
+import { getOrCreateModel } from '../util/mongoose-utils';
+
 
 export interface ISubscription {
   user: Types.ObjectId

+ 1 - 1
packages/app/src/server/models/tag.ts

@@ -1,9 +1,9 @@
-import { getOrCreateModel } from '@growi/core';
 import {
   Types, Model, Schema,
 } from 'mongoose';
 
 import { ObjectIdLike } from '../interfaces/mongoose-utils';
+import { getOrCreateModel } from '../util/mongoose-utils';
 
 const mongoosePaginate = require('mongoose-paginate-v2');
 const uniqueValidator = require('mongoose-unique-validator');

+ 2 - 1
packages/app/src/server/models/update-post.ts

@@ -1,10 +1,11 @@
 /* eslint-disable @typescript-eslint/no-explicit-any */
 
-import { getOrCreateModel } from '@growi/core';
 import {
   Types, Schema, Model, Document,
 } from 'mongoose';
 
+import { getOrCreateModel } from '../util/mongoose-utils';
+
 export interface IUpdatePost {
   pathPattern: string
   patternPrefix: string

+ 2 - 1
packages/app/src/server/models/user-group.ts

@@ -1,4 +1,3 @@
-import { getOrCreateModel } from '@growi/core';
 import mongoose, {
   Schema, Model, Document,
 } from 'mongoose';
@@ -6,6 +5,8 @@ import mongoosePaginate from 'mongoose-paginate-v2';
 
 import { IUserGroup } from '~/interfaces/user';
 
+import { getOrCreateModel } from '../util/mongoose-utils';
+
 
 export interface UserGroupDocument extends IUserGroup, Document {}
 

+ 2 - 1
packages/app/src/server/models/user-registration-order.ts

@@ -1,12 +1,13 @@
 import crypto from 'crypto';
 
-import { getOrCreateModel } from '@growi/core';
 import { addHours } from 'date-fns';
 import {
   Schema, Model, Document,
 } from 'mongoose';
 import uniqueValidator from 'mongoose-unique-validator';
 
+import { getOrCreateModel } from '../util/mongoose-utils';
+
 
 export interface IUserRegistrationOrder {
   token: string,

+ 3 - 1
packages/app/src/server/models/user-ui-settings.ts

@@ -1,4 +1,4 @@
-import { getOrCreateModel, Ref, IUser } from '@growi/core';
+import { Ref, IUser } from '@growi/core';
 import {
   Schema, Model, Document,
 } from 'mongoose';
@@ -7,6 +7,8 @@ import {
 import { SidebarContentsType } from '~/interfaces/ui';
 import { IUserUISettings } from '~/interfaces/user-ui-settings';
 
+import { getOrCreateModel } from '../util/mongoose-utils';
+
 
 export interface UserUISettingsDocument extends IUserUISettings, Document {
   user: Ref<IUser>,

+ 1 - 1
packages/app/src/server/service/comment.ts

@@ -1,8 +1,8 @@
-import { getModelSafely } from '@growi/core';
 import { Types } from 'mongoose';
 
 import loggerFactory from '../../utils/logger';
 import Crowi from '../crowi';
+import { getModelSafely } from '../util/mongoose-utils';
 
 // https://regex101.com/r/Ztxj2j/1
 const USERNAME_PATTERN = new RegExp(/\B@[\w@.-]+/g);

+ 0 - 0
packages/core/src/utils/mongoose-utils.ts → packages/app/src/server/util/mongoose-utils.ts


+ 2 - 1
packages/app/test/integration/global-setup.js

@@ -7,9 +7,10 @@
 
 import 'tsconfig-paths/register';
 
-import { initMongooseGlobalSettings, getMongoUri, mongoOptions } from '@growi/core';
 import mongoose from 'mongoose';
 
+import { initMongooseGlobalSettings, getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
+
 // check env
 if (process.env.NODE_ENV !== 'test') {
   throw new Error('\'process.env.NODE_ENV\' must be \'test\'');

+ 1 - 1
packages/app/test/integration/setup.js

@@ -7,7 +7,7 @@
 
 const mongoose = require('mongoose');
 
-const { initMongooseGlobalSettings, getMongoUri, mongoOptions } = require('@growi/core');
+const { initMongooseGlobalSettings, getMongoUri, mongoOptions } = require('~/server/util/mongoose-utils');
 
 mongoose.Promise = global.Promise;
 

+ 2 - 2
packages/core/src/index.ts

@@ -5,12 +5,13 @@ import * as _envUtils from './utils/env-utils';
 export const envUtils = _envUtils;
 export const customTagUtils = _customTagUtils;
 
-// export utils
+// export utils with namespace
 export * as templateChecker from './utils/template-checker';
 export * as pagePathUtils from './utils/page-path-utils';
 export * as pathUtils from './utils/path-utils';
 export * as pageUtils from './utils/page-utils';
 
+// export all
 export * from './interfaces/attachment';
 export * from './interfaces/common';
 export * from './interfaces/has-object-id';
@@ -26,5 +27,4 @@ export * from './models/devided-page-path';
 export * from './service/localstorage-manager';
 export * from './utils/basic-interceptor';
 export * from './utils/browser-utils';
-export * from './utils/mongoose-utils';
 export * from './utils/with-utils';

+ 2 - 2
packages/core/src/utils/page-path-utils.ts

@@ -1,7 +1,7 @@
 import nodePath from 'path';
 
+import ObjectId from 'bson-objectid';
 import escapeStringRegexp from 'escape-string-regexp';
-import { isValidObjectId } from 'mongoose';
 
 
 import { addTrailingSlash } from './path-utils';
@@ -28,7 +28,7 @@ export const isUsersTopPage = (path: string): boolean => {
  */
 export const isPermalink = (path: string): boolean => {
   const pageIdStr = path.substring(1);
-  return isValidObjectId(pageIdStr);
+  return ObjectId.isValid(pageIdStr);
 };
 
 /**

+ 5 - 0
yarn.lock

@@ -6023,6 +6023,11 @@ bser@^2.0.0:
   dependencies:
     node-int64 "^0.4.0"
 
+bson-objectid@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/bson-objectid/-/bson-objectid-2.0.3.tgz#d840185172846b2f10c42ce2bcdb4a50956a9db5"
+  integrity sha512-WYwVtY9yqk179EPMNuF3vcxufdrGLEo2XwqdRVbfLVe9X6jLt7WKZQgP+ObOcprakBGbHxzl76tgTaieqsH29g==
+
 bson@^4.2.2:
   version "4.5.4"
   resolved "https://registry.yarnpkg.com/bson/-/bson-4.5.4.tgz#5f74f1e11f743ea8aec30b5e24bfddae82846873"