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

use bson-objectid to transform

Yuki Takei 3 лет назад
Родитель
Сommit
2896250df7
3 измененных файлов с 19 добавлено и 4 удалено
  1. 1 0
      packages/app/package.json
  2. 13 4
      packages/app/src/pages/utils/objectid-transformer.ts
  3. 5 0
      yarn.lock

+ 1 - 0
packages/app/package.json

@@ -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",

+ 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',

+ 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"