@clairejs/server 3.19.2 → 3.19.4

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/README.md CHANGED
@@ -1,7 +1,9 @@
1
1
  ## Change Log
2
2
 
3
- #### 3.19.2:
3
+ #### 3.19.4:
4
4
 
5
+ - fix uri mapper with vector props
6
+ - update claire orm and fix
5
7
  - fix isEndpoint
6
8
  - fix ModelRepository getMany
7
9
  - adapt interface with new claire orm
@@ -1 +1 @@
1
- export type UriMapperHandler = (tmpUri: string, locale?: string) => string;
1
+ export type UriMapperHandler = (tmpUri: string, index: number, locale?: string) => string;
@@ -1,5 +1,5 @@
1
- import { DataType, getModelById, getServiceProvider, RangeQueryDto, uniqueReducer, leanData, getSystemLocale, Errors, omitData, } from "@clairejs/core";
2
- import { getDirectFields, } from "@clairejs/orm";
1
+ import { DataType, getModelById, getServiceProvider, RangeQueryDto, uniqueReducer, leanData, getSystemLocale, Errors, omitData, MODEL_FIELD_SEPARATOR, } from "@clairejs/core";
2
+ import { getDirectFields } from "@clairejs/orm";
3
3
  import { AbstractFileUploadHandler } from "../file-upload/AbstractFileUploadHandler";
4
4
  import { AbstractRepository } from "./AbstractRepository";
5
5
  import { LocaleTranslation } from "../../system/locale/LocaleTranslation";
@@ -41,7 +41,7 @@ export class ModelRepository extends AbstractRepository {
41
41
  getRequestQueryConditionFromQuery(queries, modelMetadata) {
42
42
  const result = [];
43
43
  for (const fieldMetadata of getDirectFields(modelMetadata)) {
44
- const fieldName = `${modelMetadata.id}.${fieldMetadata.name}`;
44
+ const fieldName = `${modelMetadata.id}${MODEL_FIELD_SEPARATOR}${fieldMetadata.name}`;
45
45
  const queryValue = queries[fieldMetadata.name];
46
46
  if (queryValue === undefined) {
47
47
  continue;
@@ -121,8 +121,8 @@ export class ModelRepository extends AbstractRepository {
121
121
  const modified = [];
122
122
  const fileUploadHandler = await this.getUploadHandler();
123
123
  const operations = [];
124
- const uriHandler = async (tmpUri, uriMapper, locale, newUriCb) => {
125
- const newUri = uriMapper(tmpUri, locale);
124
+ const uriHandler = async (tmpUri, index, uriMapper, locale, newUriCb) => {
125
+ const newUri = uriMapper(tmpUri, index, locale);
126
126
  if (!newUri) {
127
127
  return;
128
128
  }
@@ -134,30 +134,36 @@ export class ModelRepository extends AbstractRepository {
134
134
  if (fileUploadHandler) {
135
135
  for (const field of this.modelMetadata.fields) {
136
136
  for (const record of records) {
137
- if (field.uriMapper) {
138
- const tmpUri = record[field.name];
139
- if (!tmpUri) {
137
+ if (field.uriMapper && record[field.name]) {
138
+ const mapper = field.uriMapper;
139
+ const tmpUri = field.vectorProps
140
+ ? record[field.name]
141
+ : [record[field.name]];
142
+ if (!tmpUri.length) {
140
143
  continue;
141
144
  }
142
145
  if (!field.mimeProps?.keepOnRemove) {
143
- modified.push(tmpUri);
146
+ modified.push(...tmpUri);
144
147
  }
145
- operations.push(uriHandler(tmpUri, field.uriMapper, getSystemLocale(), (newUri) => (record[field.name] = newUri)));
148
+ operations.push(...tmpUri.map((uri, index) => uriHandler(uri, index, mapper, getSystemLocale(), (newUri) => (record[field.name] = newUri))));
146
149
  }
147
150
  else if (field.multiLocaleColumn) {
148
151
  const targetField = this.modelMetadata.fields.find((f) => f.name === field.multiLocaleColumn);
149
152
  if (targetField?.uriMapper && record[field.name]) {
153
+ const mapper = targetField.uriMapper;
150
154
  //-- this field is locale for targetField, which has uri mapper
151
155
  const localeUris = Object.keys(record[field.name]).map((lang) => [
152
156
  lang,
153
- record[field.name][lang],
157
+ targetField.vectorProps
158
+ ? record[field.name][lang]
159
+ : [record[field.name][lang]],
154
160
  ]);
155
161
  //-- for each pair or locale and tmp uri, invoke handle logic
156
162
  for (const localeUri of localeUris) {
157
163
  if (!targetField.mimeProps?.keepOnRemove) {
158
- modified.push(localeUri[1]);
164
+ modified.push(...localeUri[1]);
159
165
  }
160
- operations.push(uriHandler(localeUri[1], targetField.uriMapper, localeUri[0], (newUri) => (record[field.name][localeUri[0]] = newUri)));
166
+ operations.push(...localeUri[1].map((uri, index) => uriHandler(uri, index, mapper, localeUri[0], (newUri) => (record[field.name][localeUri[0]] = newUri))));
161
167
  }
162
168
  }
163
169
  }
@@ -182,13 +188,18 @@ export class ModelRepository extends AbstractRepository {
182
188
  for (const record of records) {
183
189
  for (const field of this.modelMetadata.fields) {
184
190
  if (field.uriMapper) {
185
- if (!record[field.name]) {
191
+ const uri = record[field.name];
192
+ if (!uri) {
186
193
  continue;
187
194
  }
195
+ const uris = field.vectorProps ? uri : [uri];
188
196
  mappingOperations.push((async () => {
189
- record[field.name] = field.mimeProps?.public
190
- ? await fileUploadHandler.resolvePublicUrl(record[field.name])
191
- : await fileUploadHandler.resolvePrivateUrl(record[field.name]);
197
+ const urls = await Promise.all(uris.map(async (uri) => {
198
+ return field.mimeProps?.public
199
+ ? await fileUploadHandler.resolvePublicUrl(uri)
200
+ : await fileUploadHandler.resolvePrivateUrl(uri);
201
+ }));
202
+ record[field.name] = field.vectorProps ? urls : urls[0];
192
203
  })());
193
204
  }
194
205
  else if (field.multiLocaleColumn) {
@@ -200,9 +211,16 @@ export class ModelRepository extends AbstractRepository {
200
211
  }
201
212
  for (const locale of Object.keys(localeObject)) {
202
213
  mappingOperations.push((async () => {
203
- localeObject[locale] = targetField.mimeProps?.public
204
- ? await fileUploadHandler.resolvePublicUrl(localeObject[locale])
205
- : await fileUploadHandler.resolvePrivateUrl(localeObject[locale]);
214
+ const uri = localeObject[locale];
215
+ if (!uri)
216
+ return;
217
+ const uris = targetField.vectorProps ? uri : [uri];
218
+ const urls = await Promise.all(uris.map(async (uri) => {
219
+ return targetField.mimeProps?.public
220
+ ? await fileUploadHandler.resolvePublicUrl(uri)
221
+ : await fileUploadHandler.resolvePrivateUrl(uri);
222
+ }));
223
+ localeObject[locale] = targetField.vectorProps ? urls : urls[0];
206
224
  })());
207
225
  }
208
226
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clairejs/server",
3
- "version": "3.19.2",
3
+ "version": "3.19.4",
4
4
  "description": "Claire server NodeJs framework written in Typescript.",
5
5
  "types": "dist/index.d.ts",
6
6
  "main": "dist/index.js",
@@ -15,6 +15,7 @@
15
15
  "author": "immort",
16
16
  "license": "ISC",
17
17
  "dependencies": {
18
+ "@clairejs/client": "^3.4.1",
18
19
  "aws-sdk": "^2.841.0",
19
20
  "axios": "^0.21.4",
20
21
  "cookie-parser": "^1.4.6",
@@ -33,8 +34,8 @@
33
34
  "ws": "^7.5.5"
34
35
  },
35
36
  "peerDependencies": {
36
- "@clairejs/core": "^3.7.9",
37
- "@clairejs/orm": "^3.15.2"
37
+ "@clairejs/core": "^3.8.2",
38
+ "@clairejs/orm": "^3.15.9"
38
39
  },
39
40
  "devDependencies": {
40
41
  "@types/cookie-parser": "^1.4.3",