@skroz/profile-api 1.0.27 → 1.0.28

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/index.d.ts CHANGED
@@ -9,3 +9,4 @@ export * from './resolvers/AuthResolver';
9
9
  export * from './resolvers/ProfileResolver';
10
10
  export * from './resolvers/createOauthResolver';
11
11
  export * from './oauth';
12
+ export { default as createEntityDataLoader } from './utils/createEntityDataLoader';
package/dist/index.js CHANGED
@@ -13,7 +13,11 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
13
13
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
16
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.createEntityDataLoader = void 0;
17
21
  __exportStar(require("./types"), exports);
18
22
  __exportStar(require("./adapters/TypeOrmProfileAdapter"), exports);
19
23
  __exportStar(require("./entities/TypeOrmBaseEntity"), exports);
@@ -25,3 +29,5 @@ __exportStar(require("./resolvers/AuthResolver"), exports);
25
29
  __exportStar(require("./resolvers/ProfileResolver"), exports);
26
30
  __exportStar(require("./resolvers/createOauthResolver"), exports);
27
31
  __exportStar(require("./oauth"), exports);
32
+ var createEntityDataLoader_1 = require("./utils/createEntityDataLoader");
33
+ Object.defineProperty(exports, "createEntityDataLoader", { enumerable: true, get: function () { return __importDefault(createEntityDataLoader_1).default; } });
@@ -0,0 +1,5 @@
1
+ import DataLoader from 'dataloader';
2
+ import { Connection, ObjectType } from 'typeorm';
3
+ import { TypeOrmBaseEntity as BaseEntity } from '../entities/TypeOrmBaseEntity';
4
+ declare const createEntityDataLoader: <T extends BaseEntity>(conn: Connection, target: ObjectType<T>) => DataLoader<number, T, number>;
5
+ export default createEntityDataLoader;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const dataloader_1 = __importDefault(require("dataloader"));
16
+ const batch = (conn, target) => (ids) => __awaiter(void 0, void 0, void 0, function* () {
17
+ const entities = yield conn.getRepository(target).findByIds(ids);
18
+ const entitiesMap = {};
19
+ entities.forEach((item) => {
20
+ entitiesMap[item.id] = item;
21
+ });
22
+ return ids.map((id) => entitiesMap[id] || null);
23
+ });
24
+ const createEntityDataLoader = (conn, target) => new dataloader_1.default(batch(conn, target));
25
+ exports.default = createEntityDataLoader;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skroz/profile-api",
3
- "version": "1.0.27",
3
+ "version": "1.0.28",
4
4
  "license": "MIT",
5
5
  "repository": "git@gitlab.com:skroz/libs/utils.git",
6
6
  "main": "dist/index.js",
@@ -26,6 +26,7 @@
26
26
  "@os-team/session": "1.0.32",
27
27
  "argon2": "0.30.2",
28
28
  "class-validator": "0.13.2",
29
+ "dataloader": "2.1.0",
29
30
  "isomorphic-unfetch": "4.0.2",
30
31
  "nanoid": "3.3.4",
31
32
  "pug": "3.0.2"
@@ -44,5 +45,5 @@
44
45
  "type-graphql": "^1.1.1",
45
46
  "typeorm": "^0.2.45"
46
47
  },
47
- "gitHead": "fe4ee603e441d8e65f1c77eebdd2359b2b99a789"
48
+ "gitHead": "47d38c667bd718863616823d46460c74ad2fc5eb"
48
49
  }
package/src/index.ts CHANGED
@@ -9,3 +9,4 @@ export * from './resolvers/AuthResolver';
9
9
  export * from './resolvers/ProfileResolver';
10
10
  export * from './resolvers/createOauthResolver';
11
11
  export * from './oauth';
12
+ export { default as createEntityDataLoader } from './utils/createEntityDataLoader';
@@ -0,0 +1,23 @@
1
+ import DataLoader from 'dataloader';
2
+ import { Connection, ObjectType } from 'typeorm';
3
+ import { TypeOrmBaseEntity as BaseEntity } from '../entities/TypeOrmBaseEntity';
4
+
5
+ const batch =
6
+ <T extends BaseEntity>(conn: Connection, target: ObjectType<T>) =>
7
+ async (ids: readonly number[]) => {
8
+ const entities = await conn.getRepository(target).findByIds(ids as number[]);
9
+
10
+ const entitiesMap: { [key: number]: T } = {};
11
+ entities.forEach((item) => {
12
+ entitiesMap[item.id] = item;
13
+ });
14
+
15
+ return ids.map((id) => entitiesMap[id] || null);
16
+ };
17
+
18
+ const createEntityDataLoader = <T extends BaseEntity>(
19
+ conn: Connection,
20
+ target: ObjectType<T>
21
+ ) => new DataLoader<number, T>(batch(conn, target));
22
+
23
+ export default createEntityDataLoader;