@spinajs/intl-orm 2.0.96 → 2.0.99
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/lib/cjs/index.d.ts +21 -2
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +43 -18
- package/lib/cjs/index.js.map +1 -1
- package/lib/mjs/index.d.ts +21 -2
- package/lib/mjs/index.d.ts.map +1 -1
- package/lib/mjs/index.js +43 -18
- package/lib/mjs/index.js.map +1 -1
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -9
package/lib/cjs/index.d.ts
CHANGED
|
@@ -4,10 +4,21 @@ export * from './decorators.js';
|
|
|
4
4
|
export * from './migrations/IntlOrm_2022_06_28_01_13_00.js';
|
|
5
5
|
export * from './models/IntlResource.js';
|
|
6
6
|
export * from './models/IntlTranslation.js';
|
|
7
|
+
export * from './model.js';
|
|
7
8
|
declare module '@spinajs/orm' {
|
|
8
|
-
interface
|
|
9
|
+
interface ISelectQueryBuilder<T> {
|
|
10
|
+
/**
|
|
11
|
+
*
|
|
12
|
+
* Translates model to given language.
|
|
13
|
+
* Working only with queries thata are model related ( created by model orm functions )
|
|
14
|
+
* TODO: in future it should work with raw queries, by passing relation information for translation
|
|
15
|
+
* TODO: fallback for translation from normal sources ( like config files )
|
|
16
|
+
*
|
|
17
|
+
* @param lang translate to language
|
|
18
|
+
*/
|
|
9
19
|
translate(lang: string): SelectQueryBuilder<T>;
|
|
10
20
|
translated: boolean;
|
|
21
|
+
AllowTranslate: boolean;
|
|
11
22
|
}
|
|
12
23
|
interface IColumnDescriptor {
|
|
13
24
|
Translate: boolean;
|
|
@@ -31,8 +42,16 @@ export declare class IntlModelMiddleware implements IBuilderMiddleware {
|
|
|
31
42
|
modelCreation(_: any): ModelBase;
|
|
32
43
|
afterHydration(data: ModelBase[]): Promise<any[]>;
|
|
33
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Middleware for automatic query translations
|
|
47
|
+
* for modes. If query is standalone ( not created by model related function )
|
|
48
|
+
* skips translation completely.
|
|
49
|
+
* When AsyncStorage is set & language property is present
|
|
50
|
+
*
|
|
51
|
+
*/
|
|
34
52
|
export declare class IntlQueryMiddleware extends QueryMiddleware {
|
|
35
|
-
|
|
53
|
+
beforeQueryExecution(builder: QueryBuilder<any>): void;
|
|
54
|
+
afterQueryCreation(_builder: QueryBuilder): void;
|
|
36
55
|
}
|
|
37
56
|
export declare class DbTranslationSource extends TranslationSource {
|
|
38
57
|
load(): Promise<{
|
package/lib/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAqD,gBAAgB,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAgB,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,YAAY,EAAqB,MAAM,cAAc,CAAC;AACtP,OAAO,EAAE,iBAAiB,EAAqD,MAAM,eAAe,CAAC;AAOrG,cAAc,iBAAiB,CAAC;AAChC,cAAc,6CAA6C,CAAC;AAC5D,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,YAAY,CAAC;AAE3B,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,mBAAmB,CAAC,CAAC;QAC7B;;;;;;;;WAQG;QACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAC/C,UAAU,EAAE,OAAO,CAAC;QACpB,cAAc,EAAE,OAAO,CAAC;KACzB;IACD,UAAU,iBAAiB;QACzB,SAAS,EAAE,OAAO,CAAC;KACpB;CACF;AAED,qBACa,iBAAkB,SAAQ,WAAW;IACpC,SAAS,CAAC,KAAK,EAAE,MAAM;IAA8C,SAAS,CAAC,YAAY,EAAE,gBAAgB;gBAAnG,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAY,YAAY,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAE,WAAW;IAoBjJ,OAAO,IAAI,IAAI;IAIf,SAAS,CAAC,KAAK,EAAE,MAAM;CAG/B;AAED,qBAAa,mBAAoB,YAAW,kBAAkB;IAChD,SAAS,CAAC,KAAK,EAAE,MAAM;IAAE,SAAS,CAAC,cAAc,EAAE,kBAAkB;IAAE,SAAS,CAAC,YAAY,EAAE,gBAAgB;IAAE,SAAS,CAAC,MAAM,EAAE,YAAY;gBAArI,KAAK,EAAE,MAAM,EAAY,cAAc,EAAE,kBAAkB,EAAY,YAAY,EAAE,gBAAgB,EAAY,MAAM,EAAE,YAAY;IAEpJ,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI;IAEnD,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE;IAG9B,aAAa,CAAC,CAAC,EAAE,GAAG,GAAG,SAAS;IAG1B,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;CA4C/D;AA8BD;;;;;;GAMG;AACH,qBACa,mBAAoB,SAAQ,eAAe;IACtD,oBAAoB,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI;IAqCtD,kBAAkB,CAAC,QAAQ,EAAE,YAAY;CAC1C;AAED,qBACa,mBAAoB,SAAQ,iBAAiB;IAC3C,IAAI;;;CAWlB"}
|
package/lib/cjs/index.js
CHANGED
|
@@ -33,11 +33,13 @@ const intl_1 = require("@spinajs/intl");
|
|
|
33
33
|
const lodash_1 = __importDefault(require("lodash"));
|
|
34
34
|
const IntlTranslation_js_1 = require("./models/IntlTranslation.js");
|
|
35
35
|
const IntlResource_js_1 = require("./models/IntlResource.js");
|
|
36
|
+
const configuration_1 = require("@spinajs/configuration");
|
|
37
|
+
const node_async_hooks_1 = require("node:async_hooks");
|
|
36
38
|
__exportStar(require("./decorators.js"), exports);
|
|
37
39
|
__exportStar(require("./migrations/IntlOrm_2022_06_28_01_13_00.js"), exports);
|
|
38
40
|
__exportStar(require("./models/IntlResource.js"), exports);
|
|
39
41
|
__exportStar(require("./models/IntlTranslation.js"), exports);
|
|
40
|
-
|
|
42
|
+
__exportStar(require("./model.js"), exports);
|
|
41
43
|
let IntlModelRelation = class IntlModelRelation extends orm_1.OrmRelation {
|
|
42
44
|
constructor(_lang, _orm, _query, _mDescriptor, _parentRelation) {
|
|
43
45
|
super(_orm, _query, {
|
|
@@ -95,30 +97,19 @@ class IntlModelMiddleware {
|
|
|
95
97
|
},
|
|
96
98
|
async afterHydration(relationData) {
|
|
97
99
|
data.forEach((d) => {
|
|
100
|
+
let val = d;
|
|
98
101
|
const relData = relationData.filter((rd) => {
|
|
99
|
-
return rd['ResourceId'] ===
|
|
102
|
+
return rd['ResourceId'] === val[self._description.PrimaryKey];
|
|
100
103
|
});
|
|
101
104
|
relData.forEach((rd) => {
|
|
102
105
|
if (self._owner && self._owner instanceof orm_1.BelongsToRelation) {
|
|
103
|
-
let val = d;
|
|
104
|
-
let rel = self._owner;
|
|
105
|
-
let relArr = [];
|
|
106
|
-
while (rel) {
|
|
107
|
-
relArr.push(rel);
|
|
108
|
-
rel = rel.parentRelation;
|
|
109
|
-
}
|
|
110
|
-
relArr = relArr.reverse();
|
|
111
|
-
relArr.forEach((r) => {
|
|
112
|
-
val = val[r.Name].Value;
|
|
113
|
-
});
|
|
114
106
|
val[rd.Column] = rd.Value;
|
|
115
|
-
val.setLanguage(self._lang);
|
|
116
107
|
}
|
|
117
108
|
else {
|
|
118
109
|
d[rd.Column] = rd.Value;
|
|
119
110
|
}
|
|
120
111
|
});
|
|
121
|
-
|
|
112
|
+
val.setLanguage(self._lang);
|
|
122
113
|
});
|
|
123
114
|
},
|
|
124
115
|
};
|
|
@@ -133,13 +124,16 @@ class IntlModelMiddleware {
|
|
|
133
124
|
}
|
|
134
125
|
}
|
|
135
126
|
exports.IntlModelMiddleware = IntlModelMiddleware;
|
|
136
|
-
|
|
127
|
+
orm_1.SelectQueryBuilder.prototype['translate'] = function (lang) {
|
|
137
128
|
/**
|
|
138
129
|
* Cannot translate query that cames from translation middleware !
|
|
139
130
|
*/
|
|
140
131
|
if (this.Owner !== null && this.Owner instanceof IntlModelRelation) {
|
|
141
132
|
return;
|
|
142
133
|
}
|
|
134
|
+
if (!this.Model) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
143
137
|
this.translated = true;
|
|
144
138
|
const descriptor = (0, orm_1.extractModelDescriptor)(this._model);
|
|
145
139
|
const relInstance = this._container.resolve(IntlModelRelation, [lang, this._container.get(orm_1.Orm), this, descriptor, this._owner]);
|
|
@@ -153,16 +147,47 @@ SQB.prototype['translate'] = function (lang) {
|
|
|
153
147
|
this._relations.push(relInstance);
|
|
154
148
|
return this;
|
|
155
149
|
};
|
|
150
|
+
/**
|
|
151
|
+
* Middleware for automatic query translations
|
|
152
|
+
* for modes. If query is standalone ( not created by model related function )
|
|
153
|
+
* skips translation completely.
|
|
154
|
+
* When AsyncStorage is set & language property is present
|
|
155
|
+
*
|
|
156
|
+
*/
|
|
156
157
|
let IntlQueryMiddleware = class IntlQueryMiddleware extends orm_1.QueryMiddleware {
|
|
157
|
-
|
|
158
|
-
if
|
|
158
|
+
beforeQueryExecution(builder) {
|
|
159
|
+
// if we dont have configuration module
|
|
160
|
+
// we cannot guess default language
|
|
161
|
+
// so skip trying to translate
|
|
162
|
+
if (!di_1.DI.has(configuration_1.Configuration)) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
// if something has set to no translate
|
|
166
|
+
// eg route decorator
|
|
167
|
+
const store = di_1.DI.get(node_async_hooks_1.AsyncLocalStorage);
|
|
168
|
+
if (store && store.noTranslate === false) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
// something has set to not translate manually for query
|
|
172
|
+
if (builder.AllowTranslate === false) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
// finaly, if its not query for model
|
|
176
|
+
if (!builder.Model) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
// and translate only selects
|
|
180
|
+
if (builder instanceof orm_1.SelectQueryBuilder && !builder.translated) {
|
|
159
181
|
const lang = (0, intl_1.guessLanguage)();
|
|
160
182
|
const dLang = (0, intl_1.defaultLanguage)();
|
|
183
|
+
// if we requested non-default language ?
|
|
184
|
+
// if not we should translate
|
|
161
185
|
if (lang && dLang !== lang) {
|
|
162
186
|
builder.translate(lang);
|
|
163
187
|
}
|
|
164
188
|
}
|
|
165
189
|
}
|
|
190
|
+
afterQueryCreation(_builder) { }
|
|
166
191
|
};
|
|
167
192
|
IntlQueryMiddleware = __decorate([
|
|
168
193
|
(0, di_1.Injectable)(orm_1.QueryMiddleware)
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/mjs/index.d.ts
CHANGED
|
@@ -4,10 +4,21 @@ export * from './decorators.js';
|
|
|
4
4
|
export * from './migrations/IntlOrm_2022_06_28_01_13_00.js';
|
|
5
5
|
export * from './models/IntlResource.js';
|
|
6
6
|
export * from './models/IntlTranslation.js';
|
|
7
|
+
export * from './model.js';
|
|
7
8
|
declare module '@spinajs/orm' {
|
|
8
|
-
interface
|
|
9
|
+
interface ISelectQueryBuilder<T> {
|
|
10
|
+
/**
|
|
11
|
+
*
|
|
12
|
+
* Translates model to given language.
|
|
13
|
+
* Working only with queries thata are model related ( created by model orm functions )
|
|
14
|
+
* TODO: in future it should work with raw queries, by passing relation information for translation
|
|
15
|
+
* TODO: fallback for translation from normal sources ( like config files )
|
|
16
|
+
*
|
|
17
|
+
* @param lang translate to language
|
|
18
|
+
*/
|
|
9
19
|
translate(lang: string): SelectQueryBuilder<T>;
|
|
10
20
|
translated: boolean;
|
|
21
|
+
AllowTranslate: boolean;
|
|
11
22
|
}
|
|
12
23
|
interface IColumnDescriptor {
|
|
13
24
|
Translate: boolean;
|
|
@@ -31,8 +42,16 @@ export declare class IntlModelMiddleware implements IBuilderMiddleware {
|
|
|
31
42
|
modelCreation(_: any): ModelBase;
|
|
32
43
|
afterHydration(data: ModelBase[]): Promise<any[]>;
|
|
33
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Middleware for automatic query translations
|
|
47
|
+
* for modes. If query is standalone ( not created by model related function )
|
|
48
|
+
* skips translation completely.
|
|
49
|
+
* When AsyncStorage is set & language property is present
|
|
50
|
+
*
|
|
51
|
+
*/
|
|
34
52
|
export declare class IntlQueryMiddleware extends QueryMiddleware {
|
|
35
|
-
|
|
53
|
+
beforeQueryExecution(builder: QueryBuilder<any>): void;
|
|
54
|
+
afterQueryCreation(_builder: QueryBuilder): void;
|
|
36
55
|
}
|
|
37
56
|
export declare class DbTranslationSource extends TranslationSource {
|
|
38
57
|
load(): Promise<{
|
package/lib/mjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAqD,gBAAgB,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAgB,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,YAAY,EAAqB,MAAM,cAAc,CAAC;AACtP,OAAO,EAAE,iBAAiB,EAAqD,MAAM,eAAe,CAAC;AAOrG,cAAc,iBAAiB,CAAC;AAChC,cAAc,6CAA6C,CAAC;AAC5D,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,YAAY,CAAC;AAE3B,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,mBAAmB,CAAC,CAAC;QAC7B;;;;;;;;WAQG;QACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAC/C,UAAU,EAAE,OAAO,CAAC;QACpB,cAAc,EAAE,OAAO,CAAC;KACzB;IACD,UAAU,iBAAiB;QACzB,SAAS,EAAE,OAAO,CAAC;KACpB;CACF;AAED,qBACa,iBAAkB,SAAQ,WAAW;IACpC,SAAS,CAAC,KAAK,EAAE,MAAM;IAA8C,SAAS,CAAC,YAAY,EAAE,gBAAgB;gBAAnG,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAY,YAAY,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAE,WAAW;IAoBjJ,OAAO,IAAI,IAAI;IAIf,SAAS,CAAC,KAAK,EAAE,MAAM;CAG/B;AAED,qBAAa,mBAAoB,YAAW,kBAAkB;IAChD,SAAS,CAAC,KAAK,EAAE,MAAM;IAAE,SAAS,CAAC,cAAc,EAAE,kBAAkB;IAAE,SAAS,CAAC,YAAY,EAAE,gBAAgB;IAAE,SAAS,CAAC,MAAM,EAAE,YAAY;gBAArI,KAAK,EAAE,MAAM,EAAY,cAAc,EAAE,kBAAkB,EAAY,YAAY,EAAE,gBAAgB,EAAY,MAAM,EAAE,YAAY;IAEpJ,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI;IAEnD,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE;IAG9B,aAAa,CAAC,CAAC,EAAE,GAAG,GAAG,SAAS;IAG1B,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;CA4C/D;AA8BD;;;;;;GAMG;AACH,qBACa,mBAAoB,SAAQ,eAAe;IACtD,oBAAoB,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI;IAqCtD,kBAAkB,CAAC,QAAQ,EAAE,YAAY;CAC1C;AAED,qBACa,mBAAoB,SAAQ,iBAAiB;IAC3C,IAAI;;;CAWlB"}
|
package/lib/mjs/index.js
CHANGED
|
@@ -7,17 +7,19 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
-
import { Injectable, NewInstance } from '@spinajs/di';
|
|
11
|
-
import { extractModelDescriptor, Orm, OrmRelation, RelationType, SelectQueryBuilder, QueryMiddleware, BelongsToRelation } from '@spinajs/orm';
|
|
10
|
+
import { DI, Injectable, NewInstance } from '@spinajs/di';
|
|
11
|
+
import { SelectQueryBuilder as SQB, extractModelDescriptor, Orm, OrmRelation, RelationType, SelectQueryBuilder, QueryMiddleware, BelongsToRelation } from '@spinajs/orm';
|
|
12
12
|
import { TranslationSource, guessLanguage, defaultLanguage } from '@spinajs/intl';
|
|
13
13
|
import _ from 'lodash';
|
|
14
14
|
import { IntlTranslation } from './models/IntlTranslation.js';
|
|
15
15
|
import { IntlResource } from './models/IntlResource.js';
|
|
16
|
+
import { Configuration } from '@spinajs/configuration';
|
|
17
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
16
18
|
export * from './decorators.js';
|
|
17
19
|
export * from './migrations/IntlOrm_2022_06_28_01_13_00.js';
|
|
18
20
|
export * from './models/IntlResource.js';
|
|
19
21
|
export * from './models/IntlTranslation.js';
|
|
20
|
-
|
|
22
|
+
export * from './model.js';
|
|
21
23
|
let IntlModelRelation = class IntlModelRelation extends OrmRelation {
|
|
22
24
|
constructor(_lang, _orm, _query, _mDescriptor, _parentRelation) {
|
|
23
25
|
super(_orm, _query, {
|
|
@@ -75,30 +77,19 @@ export class IntlModelMiddleware {
|
|
|
75
77
|
},
|
|
76
78
|
async afterHydration(relationData) {
|
|
77
79
|
data.forEach((d) => {
|
|
80
|
+
let val = d;
|
|
78
81
|
const relData = relationData.filter((rd) => {
|
|
79
|
-
return rd['ResourceId'] ===
|
|
82
|
+
return rd['ResourceId'] === val[self._description.PrimaryKey];
|
|
80
83
|
});
|
|
81
84
|
relData.forEach((rd) => {
|
|
82
85
|
if (self._owner && self._owner instanceof BelongsToRelation) {
|
|
83
|
-
let val = d;
|
|
84
|
-
let rel = self._owner;
|
|
85
|
-
let relArr = [];
|
|
86
|
-
while (rel) {
|
|
87
|
-
relArr.push(rel);
|
|
88
|
-
rel = rel.parentRelation;
|
|
89
|
-
}
|
|
90
|
-
relArr = relArr.reverse();
|
|
91
|
-
relArr.forEach((r) => {
|
|
92
|
-
val = val[r.Name].Value;
|
|
93
|
-
});
|
|
94
86
|
val[rd.Column] = rd.Value;
|
|
95
|
-
val.setLanguage(self._lang);
|
|
96
87
|
}
|
|
97
88
|
else {
|
|
98
89
|
d[rd.Column] = rd.Value;
|
|
99
90
|
}
|
|
100
91
|
});
|
|
101
|
-
|
|
92
|
+
val.setLanguage(self._lang);
|
|
102
93
|
});
|
|
103
94
|
},
|
|
104
95
|
};
|
|
@@ -119,6 +110,9 @@ SQB.prototype['translate'] = function (lang) {
|
|
|
119
110
|
if (this.Owner !== null && this.Owner instanceof IntlModelRelation) {
|
|
120
111
|
return;
|
|
121
112
|
}
|
|
113
|
+
if (!this.Model) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
122
116
|
this.translated = true;
|
|
123
117
|
const descriptor = extractModelDescriptor(this._model);
|
|
124
118
|
const relInstance = this._container.resolve(IntlModelRelation, [lang, this._container.get(Orm), this, descriptor, this._owner]);
|
|
@@ -132,16 +126,47 @@ SQB.prototype['translate'] = function (lang) {
|
|
|
132
126
|
this._relations.push(relInstance);
|
|
133
127
|
return this;
|
|
134
128
|
};
|
|
129
|
+
/**
|
|
130
|
+
* Middleware for automatic query translations
|
|
131
|
+
* for modes. If query is standalone ( not created by model related function )
|
|
132
|
+
* skips translation completely.
|
|
133
|
+
* When AsyncStorage is set & language property is present
|
|
134
|
+
*
|
|
135
|
+
*/
|
|
135
136
|
let IntlQueryMiddleware = class IntlQueryMiddleware extends QueryMiddleware {
|
|
136
|
-
|
|
137
|
+
beforeQueryExecution(builder) {
|
|
138
|
+
// if we dont have configuration module
|
|
139
|
+
// we cannot guess default language
|
|
140
|
+
// so skip trying to translate
|
|
141
|
+
if (!DI.has(Configuration)) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
// if something has set to no translate
|
|
145
|
+
// eg route decorator
|
|
146
|
+
const store = DI.get(AsyncLocalStorage);
|
|
147
|
+
if (store && store.noTranslate === false) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
// something has set to not translate manually for query
|
|
151
|
+
if (builder.AllowTranslate === false) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
// finaly, if its not query for model
|
|
155
|
+
if (!builder.Model) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
// and translate only selects
|
|
137
159
|
if (builder instanceof SQB && !builder.translated) {
|
|
138
160
|
const lang = guessLanguage();
|
|
139
161
|
const dLang = defaultLanguage();
|
|
162
|
+
// if we requested non-default language ?
|
|
163
|
+
// if not we should translate
|
|
140
164
|
if (lang && dLang !== lang) {
|
|
141
165
|
builder.translate(lang);
|
|
142
166
|
}
|
|
143
167
|
}
|
|
144
168
|
}
|
|
169
|
+
afterQueryCreation(_builder) { }
|
|
145
170
|
};
|
|
146
171
|
IntlQueryMiddleware = __decorate([
|
|
147
172
|
Injectable(QueryMiddleware)
|
package/lib/mjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|