@spinajs/intl-orm 2.0.96 → 2.0.98
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 +22 -2
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +46 -18
- package/lib/cjs/index.js.map +1 -1
- package/lib/mjs/index.d.ts +22 -2
- package/lib/mjs/index.d.ts.map +1 -1
- package/lib/mjs/index.js +46 -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
|
@@ -5,9 +5,19 @@ 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
7
|
declare module '@spinajs/orm' {
|
|
8
|
-
interface
|
|
8
|
+
interface ISelectQueryBuilder<T> {
|
|
9
|
+
/**
|
|
10
|
+
*
|
|
11
|
+
* Translates model to given language.
|
|
12
|
+
* Working only with queries thata are model related ( created by model orm functions )
|
|
13
|
+
* TODO: in future it should work with raw queries, by passing relation information for translation
|
|
14
|
+
* TODO: fallback for translation from normal sources ( like config files )
|
|
15
|
+
*
|
|
16
|
+
* @param lang translate to language
|
|
17
|
+
*/
|
|
9
18
|
translate(lang: string): SelectQueryBuilder<T>;
|
|
10
19
|
translated: boolean;
|
|
20
|
+
AllowTranslate: boolean;
|
|
11
21
|
}
|
|
12
22
|
interface IColumnDescriptor {
|
|
13
23
|
Translate: boolean;
|
|
@@ -25,14 +35,24 @@ export declare class IntlModelMiddleware implements IBuilderMiddleware {
|
|
|
25
35
|
protected _relationQuery: SelectQueryBuilder;
|
|
26
36
|
protected _description: IModelDescriptor;
|
|
27
37
|
protected _owner: IOrmRelation;
|
|
38
|
+
static COUNT: number;
|
|
39
|
+
protected instance: number;
|
|
28
40
|
constructor(_lang: string, _relationQuery: SelectQueryBuilder, _description: IModelDescriptor, _owner: IOrmRelation);
|
|
29
41
|
afterQueryCreation(_query: QueryBuilder<any>): void;
|
|
30
42
|
afterQuery(data: any[]): any[];
|
|
31
43
|
modelCreation(_: any): ModelBase;
|
|
32
44
|
afterHydration(data: ModelBase[]): Promise<any[]>;
|
|
33
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Middleware for automatic query translations
|
|
48
|
+
* for modes. If query is standalone ( not created by model related function )
|
|
49
|
+
* skips translation completely.
|
|
50
|
+
* When AsyncStorage is set & language property is present
|
|
51
|
+
*
|
|
52
|
+
*/
|
|
34
53
|
export declare class IntlQueryMiddleware extends QueryMiddleware {
|
|
35
|
-
|
|
54
|
+
beforeQueryExecution(builder: QueryBuilder<any>): void;
|
|
55
|
+
afterQueryCreation(_builder: QueryBuilder): void;
|
|
36
56
|
}
|
|
37
57
|
export declare class DbTranslationSource extends TranslationSource {
|
|
38
58
|
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;AAE5C,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;IAKhD,SAAS,CAAC,KAAK,EAAE,MAAM;IAAE,SAAS,CAAC,cAAc,EAAE,kBAAkB;IAAE,SAAS,CAAC,YAAY,EAAE,gBAAgB;IAAE,SAAS,CAAC,MAAM,EAAE,YAAY;IAH3J,OAAc,KAAK,SAAK;IACxB,SAAS,CAAC,QAAQ,SAAK;gBAED,KAAK,EAAE,MAAM,EAAY,cAAc,EAAE,kBAAkB,EAAY,YAAY,EAAE,gBAAgB,EAAY,MAAM,EAAE,YAAY;IAOpJ,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,12 @@ 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
|
-
const { SelectQueryBuilder: SQB } = require('@spinajs/orm');
|
|
41
42
|
let IntlModelRelation = class IntlModelRelation extends orm_1.OrmRelation {
|
|
42
43
|
constructor(_lang, _orm, _query, _mDescriptor, _parentRelation) {
|
|
43
44
|
super(_orm, _query, {
|
|
@@ -72,6 +73,9 @@ class IntlModelMiddleware {
|
|
|
72
73
|
this._relationQuery = _relationQuery;
|
|
73
74
|
this._description = _description;
|
|
74
75
|
this._owner = _owner;
|
|
76
|
+
this.instance = 0;
|
|
77
|
+
IntlModelMiddleware.COUNT = IntlModelMiddleware.COUNT + 1;
|
|
78
|
+
this.instance = IntlModelMiddleware.COUNT;
|
|
75
79
|
}
|
|
76
80
|
afterQueryCreation(_query) { }
|
|
77
81
|
afterQuery(data) {
|
|
@@ -95,30 +99,19 @@ class IntlModelMiddleware {
|
|
|
95
99
|
},
|
|
96
100
|
async afterHydration(relationData) {
|
|
97
101
|
data.forEach((d) => {
|
|
102
|
+
let val = d;
|
|
98
103
|
const relData = relationData.filter((rd) => {
|
|
99
|
-
return rd['ResourceId'] ===
|
|
104
|
+
return rd['ResourceId'] === val[self._description.PrimaryKey];
|
|
100
105
|
});
|
|
101
106
|
relData.forEach((rd) => {
|
|
102
107
|
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
108
|
val[rd.Column] = rd.Value;
|
|
115
|
-
val.setLanguage(self._lang);
|
|
116
109
|
}
|
|
117
110
|
else {
|
|
118
111
|
d[rd.Column] = rd.Value;
|
|
119
112
|
}
|
|
120
113
|
});
|
|
121
|
-
|
|
114
|
+
val.setLanguage(self._lang);
|
|
122
115
|
});
|
|
123
116
|
},
|
|
124
117
|
};
|
|
@@ -133,13 +126,17 @@ class IntlModelMiddleware {
|
|
|
133
126
|
}
|
|
134
127
|
}
|
|
135
128
|
exports.IntlModelMiddleware = IntlModelMiddleware;
|
|
136
|
-
|
|
129
|
+
IntlModelMiddleware.COUNT = 0;
|
|
130
|
+
orm_1.SelectQueryBuilder.prototype['translate'] = function (lang) {
|
|
137
131
|
/**
|
|
138
132
|
* Cannot translate query that cames from translation middleware !
|
|
139
133
|
*/
|
|
140
134
|
if (this.Owner !== null && this.Owner instanceof IntlModelRelation) {
|
|
141
135
|
return;
|
|
142
136
|
}
|
|
137
|
+
if (!this.Model) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
143
140
|
this.translated = true;
|
|
144
141
|
const descriptor = (0, orm_1.extractModelDescriptor)(this._model);
|
|
145
142
|
const relInstance = this._container.resolve(IntlModelRelation, [lang, this._container.get(orm_1.Orm), this, descriptor, this._owner]);
|
|
@@ -153,16 +150,47 @@ SQB.prototype['translate'] = function (lang) {
|
|
|
153
150
|
this._relations.push(relInstance);
|
|
154
151
|
return this;
|
|
155
152
|
};
|
|
153
|
+
/**
|
|
154
|
+
* Middleware for automatic query translations
|
|
155
|
+
* for modes. If query is standalone ( not created by model related function )
|
|
156
|
+
* skips translation completely.
|
|
157
|
+
* When AsyncStorage is set & language property is present
|
|
158
|
+
*
|
|
159
|
+
*/
|
|
156
160
|
let IntlQueryMiddleware = class IntlQueryMiddleware extends orm_1.QueryMiddleware {
|
|
157
|
-
|
|
158
|
-
if
|
|
161
|
+
beforeQueryExecution(builder) {
|
|
162
|
+
// if we dont have configuration module
|
|
163
|
+
// we cannot guess default language
|
|
164
|
+
// so skip trying to translate
|
|
165
|
+
if (!di_1.DI.has(configuration_1.Configuration)) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
// if something has set to no translate
|
|
169
|
+
// eg route decorator
|
|
170
|
+
const store = di_1.DI.get(node_async_hooks_1.AsyncLocalStorage);
|
|
171
|
+
if (store && store.noTranslate === false) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
// something has set to not translate manually for query
|
|
175
|
+
if (builder.AllowTranslate === false) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
// finaly, if its not query for model
|
|
179
|
+
if (!builder.Model) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
// and translate only selects
|
|
183
|
+
if (builder instanceof orm_1.SelectQueryBuilder && !builder.translated) {
|
|
159
184
|
const lang = (0, intl_1.guessLanguage)();
|
|
160
185
|
const dLang = (0, intl_1.defaultLanguage)();
|
|
186
|
+
// if we requested non-default language ?
|
|
187
|
+
// if not we should translate
|
|
161
188
|
if (lang && dLang !== lang) {
|
|
162
189
|
builder.translate(lang);
|
|
163
190
|
}
|
|
164
191
|
}
|
|
165
192
|
}
|
|
193
|
+
afterQueryCreation(_builder) { }
|
|
166
194
|
};
|
|
167
195
|
IntlQueryMiddleware = __decorate([
|
|
168
196
|
(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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oCAA0D;AAC1D,sCAAsP;AACtP,wCAAqG;AACrG,oDAAuB;AACvB,oEAA8D;AAC9D,8DAAwD;AACxD,0DAAuD;AACvD,uDAAqD;AAErD,kDAAgC;AAChC,8EAA4D;AAC5D,2DAAyC;AACzC,8DAA4C;AAuBrC,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,iBAAW;IAChD,YAAsB,KAAa,EAAE,IAAS,EAAE,MAA+B,EAAY,YAA8B,EAAE,eAA6B;QACtJ,KAAK,CACH,IAAI,EACJ,MAAM,EACN;YACE,WAAW,EAAE,8BAAY;YACzB,eAAe,EAAE,8BAAY;YAC7B,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,kBAAY,CAAC,IAAI;YACvB,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,EAAE;YACd,UAAU,EAAE,EAAE;YACd,SAAS,EAAE,KAAK;SACjB,EACD,eAAe,CAChB,CAAC;QAfkB,UAAK,GAAL,KAAK,CAAQ;QAAwD,iBAAY,GAAZ,YAAY,CAAkB;QAiBvH,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAC3H,CAAC;IAEM,SAAS,CAAC,KAAa;QAC5B,gDAAgD;IAClD,CAAC;CACF,CAAA;AA5BY,iBAAiB;IAD7B,IAAA,gBAAW,GAAE;6CAE+B,SAAG,EAAU,wBAAkB,UAAmE,iBAAW;GAD7I,iBAAiB,CA4B7B;AA5BY,8CAAiB;AA8B9B,MAAa,mBAAmB;IAK9B,YAAsB,KAAa,EAAY,cAAkC,EAAY,YAA8B,EAAY,MAAoB;QAArI,UAAK,GAAL,KAAK,CAAQ;QAAY,mBAAc,GAAd,cAAc,CAAoB;QAAY,iBAAY,GAAZ,YAAY,CAAkB;QAAY,WAAM,GAAN,MAAM,CAAc;QAFjJ,aAAQ,GAAG,CAAC,CAAC;QAGrB,mBAAmB,CAAC,KAAK,GAAG,mBAAmB,CAAC,KAAK,GAAG,CAAC,CAAC;QAE1D,IAAI,CAAC,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC;IAE5C,CAAC;IAEM,kBAAkB,CAAC,MAAyB,IAAS,CAAC;IAEtD,UAAU,CAAC,IAAW;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IACM,aAAa,CAAC,CAAM;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACM,KAAK,CAAC,cAAc,CAAC,IAAiB;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACzB,sBAAsB;YACtB,OAAQ,CAAS,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,MAAM,iBAAiB,GAAG;YACxB,UAAU,CAAC,IAAW;gBACpB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,aAAa;gBACX,OAAO,IAAI,CAAC;YACd,CAAC;YACD,KAAK,CAAC,cAAc,CAAC,YAAyB;gBAC5C,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;oBACjB,IAAI,GAAG,GAAG,CAAQ,CAAC;oBACnB,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE;wBACzC,OAAQ,EAAU,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;oBACzE,CAAC,CAAC,CAAC;oBAEH,OAAO,CAAC,OAAO,CAAC,CAAC,EAAgB,EAAE,EAAE;wBACnC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,YAAY,uBAAiB,EAAE;4BAC3D,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;yBAC3B;6BAAM;4BACJ,CAAS,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;yBAClC;oBACH,CAAC,CAAC,CAAC;oBAEH,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC,CAAC,CAAC;YACL,CAAC;SACF,CAAC;QAEF,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;YACpB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC9D,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;YAClD,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC;SAClC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;;AA/DH,kDAgEC;AA9De,yBAAK,GAAG,CAAC,CAAC;AAgEzB,wBAAG,CAAC,SAAiB,CAAC,WAAW,CAAC,GAAG,UAAoC,IAAY;IACpF;;OAEG;IACH,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,YAAY,iBAAiB,EAAE;QAClE,OAAO;KACR;IAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;QACf,OAAO;KACR;IAEA,IAAY,CAAC,UAAU,GAAG,IAAI,CAAC;IAChC,MAAM,UAAU,GAAG,IAAA,4BAAsB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAG,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAChI,WAAW,CAAC,OAAO,EAAE,CAAC;IAEtB,8CAA8C;IAC9C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAC5B,CAAC,CAAC,cAAc,CAAC;YACd,IAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;;;GAMG;AAEI,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,qBAAe;IACtD,oBAAoB,CAAC,OAA0B;QAC7C,uCAAuC;QACvC,mCAAmC;QACnC,8BAA8B;QAC9B,IAAI,CAAC,OAAE,CAAC,GAAG,CAAC,6BAAa,CAAC,EAAE;YAC1B,OAAO;SACR;QAED,uCAAuC;QACvC,qBAAqB;QACrB,MAAM,KAAK,GAAG,OAAE,CAAC,GAAG,CAAoB,oCAAiB,CAAC,CAAC;QAC3D,IAAI,KAAK,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,EAAE;YACxC,OAAO;SACR;QAED,wDAAwD;QACxD,IAAK,OAAe,CAAC,cAAc,KAAK,KAAK,EAAE;YAC7C,OAAO;SACR;QAED,qCAAqC;QACrC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAClB,OAAO;SACR;QAED,6BAA6B;QAC7B,IAAI,OAAO,YAAY,wBAAG,IAAI,CAAE,OAAe,CAAC,UAAU,EAAE;YAC1D,MAAM,IAAI,GAAG,IAAA,oBAAa,GAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAA,sBAAe,GAAE,CAAC;YAEhC,yCAAyC;YACzC,6BAA6B;YAC7B,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE;gBACzB,OAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;aAClC;SACF;IACH,CAAC;IACD,kBAAkB,CAAC,QAAsB,IAAG,CAAC;CAC9C,CAAA;AAvCY,mBAAmB;IAD/B,IAAA,eAAU,EAAC,qBAAe,CAAC;GACf,mBAAmB,CAuC/B;AAvCY,kDAAmB;AA0CzB,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,wBAAiB;IACjD,KAAK,CAAC,IAAI;QACf,MAAM,YAAY,GAAG,MAAM,oCAAe,CAAC,GAAG,EAAE,CAAC;QAEjD,OAAO,gBAAC,CAAC,SAAS,CAAC,gBAAC,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;YACxD,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;gBACxB,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC;YAChC,CAAC,CAAC,CAAC;YAEH,OAAO,gBAAC,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAC,EAAE,IAAI,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAZY,mBAAmB;IAD/B,IAAA,eAAU,EAAC,wBAAiB,CAAC;GACjB,mBAAmB,CAY/B;AAZY,kDAAmB"}
|
package/lib/mjs/index.d.ts
CHANGED
|
@@ -5,9 +5,19 @@ 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
7
|
declare module '@spinajs/orm' {
|
|
8
|
-
interface
|
|
8
|
+
interface ISelectQueryBuilder<T> {
|
|
9
|
+
/**
|
|
10
|
+
*
|
|
11
|
+
* Translates model to given language.
|
|
12
|
+
* Working only with queries thata are model related ( created by model orm functions )
|
|
13
|
+
* TODO: in future it should work with raw queries, by passing relation information for translation
|
|
14
|
+
* TODO: fallback for translation from normal sources ( like config files )
|
|
15
|
+
*
|
|
16
|
+
* @param lang translate to language
|
|
17
|
+
*/
|
|
9
18
|
translate(lang: string): SelectQueryBuilder<T>;
|
|
10
19
|
translated: boolean;
|
|
20
|
+
AllowTranslate: boolean;
|
|
11
21
|
}
|
|
12
22
|
interface IColumnDescriptor {
|
|
13
23
|
Translate: boolean;
|
|
@@ -25,14 +35,24 @@ export declare class IntlModelMiddleware implements IBuilderMiddleware {
|
|
|
25
35
|
protected _relationQuery: SelectQueryBuilder;
|
|
26
36
|
protected _description: IModelDescriptor;
|
|
27
37
|
protected _owner: IOrmRelation;
|
|
38
|
+
static COUNT: number;
|
|
39
|
+
protected instance: number;
|
|
28
40
|
constructor(_lang: string, _relationQuery: SelectQueryBuilder, _description: IModelDescriptor, _owner: IOrmRelation);
|
|
29
41
|
afterQueryCreation(_query: QueryBuilder<any>): void;
|
|
30
42
|
afterQuery(data: any[]): any[];
|
|
31
43
|
modelCreation(_: any): ModelBase;
|
|
32
44
|
afterHydration(data: ModelBase[]): Promise<any[]>;
|
|
33
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Middleware for automatic query translations
|
|
48
|
+
* for modes. If query is standalone ( not created by model related function )
|
|
49
|
+
* skips translation completely.
|
|
50
|
+
* When AsyncStorage is set & language property is present
|
|
51
|
+
*
|
|
52
|
+
*/
|
|
34
53
|
export declare class IntlQueryMiddleware extends QueryMiddleware {
|
|
35
|
-
|
|
54
|
+
beforeQueryExecution(builder: QueryBuilder<any>): void;
|
|
55
|
+
afterQueryCreation(_builder: QueryBuilder): void;
|
|
36
56
|
}
|
|
37
57
|
export declare class DbTranslationSource extends TranslationSource {
|
|
38
58
|
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;AAE5C,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;IAKhD,SAAS,CAAC,KAAK,EAAE,MAAM;IAAE,SAAS,CAAC,cAAc,EAAE,kBAAkB;IAAE,SAAS,CAAC,YAAY,EAAE,gBAAgB;IAAE,SAAS,CAAC,MAAM,EAAE,YAAY;IAH3J,OAAc,KAAK,SAAK;IACxB,SAAS,CAAC,QAAQ,SAAK;gBAED,KAAK,EAAE,MAAM,EAAY,cAAc,EAAE,kBAAkB,EAAY,YAAY,EAAE,gBAAgB,EAAY,MAAM,EAAE,YAAY;IAOpJ,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,18 @@ 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
|
-
const { SelectQueryBuilder: SQB } = require('@spinajs/orm');
|
|
21
22
|
let IntlModelRelation = class IntlModelRelation extends OrmRelation {
|
|
22
23
|
constructor(_lang, _orm, _query, _mDescriptor, _parentRelation) {
|
|
23
24
|
super(_orm, _query, {
|
|
@@ -52,6 +53,9 @@ export class IntlModelMiddleware {
|
|
|
52
53
|
this._relationQuery = _relationQuery;
|
|
53
54
|
this._description = _description;
|
|
54
55
|
this._owner = _owner;
|
|
56
|
+
this.instance = 0;
|
|
57
|
+
IntlModelMiddleware.COUNT = IntlModelMiddleware.COUNT + 1;
|
|
58
|
+
this.instance = IntlModelMiddleware.COUNT;
|
|
55
59
|
}
|
|
56
60
|
afterQueryCreation(_query) { }
|
|
57
61
|
afterQuery(data) {
|
|
@@ -75,30 +79,19 @@ export class IntlModelMiddleware {
|
|
|
75
79
|
},
|
|
76
80
|
async afterHydration(relationData) {
|
|
77
81
|
data.forEach((d) => {
|
|
82
|
+
let val = d;
|
|
78
83
|
const relData = relationData.filter((rd) => {
|
|
79
|
-
return rd['ResourceId'] ===
|
|
84
|
+
return rd['ResourceId'] === val[self._description.PrimaryKey];
|
|
80
85
|
});
|
|
81
86
|
relData.forEach((rd) => {
|
|
82
87
|
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
88
|
val[rd.Column] = rd.Value;
|
|
95
|
-
val.setLanguage(self._lang);
|
|
96
89
|
}
|
|
97
90
|
else {
|
|
98
91
|
d[rd.Column] = rd.Value;
|
|
99
92
|
}
|
|
100
93
|
});
|
|
101
|
-
|
|
94
|
+
val.setLanguage(self._lang);
|
|
102
95
|
});
|
|
103
96
|
},
|
|
104
97
|
};
|
|
@@ -112,6 +105,7 @@ export class IntlModelMiddleware {
|
|
|
112
105
|
return [];
|
|
113
106
|
}
|
|
114
107
|
}
|
|
108
|
+
IntlModelMiddleware.COUNT = 0;
|
|
115
109
|
SQB.prototype['translate'] = function (lang) {
|
|
116
110
|
/**
|
|
117
111
|
* Cannot translate query that cames from translation middleware !
|
|
@@ -119,6 +113,9 @@ SQB.prototype['translate'] = function (lang) {
|
|
|
119
113
|
if (this.Owner !== null && this.Owner instanceof IntlModelRelation) {
|
|
120
114
|
return;
|
|
121
115
|
}
|
|
116
|
+
if (!this.Model) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
122
119
|
this.translated = true;
|
|
123
120
|
const descriptor = extractModelDescriptor(this._model);
|
|
124
121
|
const relInstance = this._container.resolve(IntlModelRelation, [lang, this._container.get(Orm), this, descriptor, this._owner]);
|
|
@@ -132,16 +129,47 @@ SQB.prototype['translate'] = function (lang) {
|
|
|
132
129
|
this._relations.push(relInstance);
|
|
133
130
|
return this;
|
|
134
131
|
};
|
|
132
|
+
/**
|
|
133
|
+
* Middleware for automatic query translations
|
|
134
|
+
* for modes. If query is standalone ( not created by model related function )
|
|
135
|
+
* skips translation completely.
|
|
136
|
+
* When AsyncStorage is set & language property is present
|
|
137
|
+
*
|
|
138
|
+
*/
|
|
135
139
|
let IntlQueryMiddleware = class IntlQueryMiddleware extends QueryMiddleware {
|
|
136
|
-
|
|
140
|
+
beforeQueryExecution(builder) {
|
|
141
|
+
// if we dont have configuration module
|
|
142
|
+
// we cannot guess default language
|
|
143
|
+
// so skip trying to translate
|
|
144
|
+
if (!DI.has(Configuration)) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
// if something has set to no translate
|
|
148
|
+
// eg route decorator
|
|
149
|
+
const store = DI.get(AsyncLocalStorage);
|
|
150
|
+
if (store && store.noTranslate === false) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
// something has set to not translate manually for query
|
|
154
|
+
if (builder.AllowTranslate === false) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
// finaly, if its not query for model
|
|
158
|
+
if (!builder.Model) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
// and translate only selects
|
|
137
162
|
if (builder instanceof SQB && !builder.translated) {
|
|
138
163
|
const lang = guessLanguage();
|
|
139
164
|
const dLang = defaultLanguage();
|
|
165
|
+
// if we requested non-default language ?
|
|
166
|
+
// if not we should translate
|
|
140
167
|
if (lang && dLang !== lang) {
|
|
141
168
|
builder.translate(lang);
|
|
142
169
|
}
|
|
143
170
|
}
|
|
144
171
|
}
|
|
172
|
+
afterQueryCreation(_builder) { }
|
|
145
173
|
};
|
|
146
174
|
IntlQueryMiddleware = __decorate([
|
|
147
175
|
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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"}
|