mythik-server 0.1.2 → 0.1.3
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 +45 -27
- package/dist/audit.js +1 -1
- package/dist/audit.js.map +1 -1
- package/dist/auth/db-auth-provider.d.ts +2 -2
- package/dist/auth/db-auth-provider.d.ts.map +1 -1
- package/dist/auth/db-auth-provider.js +17 -15
- package/dist/auth/db-auth-provider.js.map +1 -1
- package/dist/auth/scope-filter.d.ts +7 -1
- package/dist/auth/scope-filter.d.ts.map +1 -1
- package/dist/auth/scope-filter.js +24 -4
- package/dist/auth/scope-filter.js.map +1 -1
- package/dist/catalog-builder.d.ts +2 -1
- package/dist/catalog-builder.d.ts.map +1 -1
- package/dist/catalog-builder.js +24 -13
- package/dist/catalog-builder.js.map +1 -1
- package/dist/connection.d.ts +4 -2
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +74 -7
- package/dist/connection.js.map +1 -1
- package/dist/crud-builder.d.ts +8 -3
- package/dist/crud-builder.d.ts.map +1 -1
- package/dist/crud-builder.js +40 -16
- package/dist/crud-builder.js.map +1 -1
- package/dist/middleware/error-handler.js +1 -1
- package/dist/middleware/error-handler.js.map +1 -1
- package/dist/query-engine.d.ts +12 -4
- package/dist/query-engine.d.ts.map +1 -1
- package/dist/query-engine.js +12 -17
- package/dist/query-engine.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +111 -159
- package/dist/server.js.map +1 -1
- package/dist/spec-serving.d.ts +7 -3
- package/dist/spec-serving.d.ts.map +1 -1
- package/dist/spec-serving.js +36 -12
- package/dist/spec-serving.js.map +1 -1
- package/dist/types.d.ts +34 -11
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -3
package/dist/crud-builder.js
CHANGED
|
@@ -9,35 +9,59 @@ export function filterFields(body, allowedFields) {
|
|
|
9
9
|
}
|
|
10
10
|
return filtered;
|
|
11
11
|
}
|
|
12
|
-
export function buildInsertQuery(table, fields
|
|
12
|
+
export function buildInsertQuery(driver, table, fields) {
|
|
13
13
|
assertValidIdentifier(table, 'crud.table');
|
|
14
14
|
const columns = Object.keys(fields);
|
|
15
15
|
for (const col of columns) {
|
|
16
16
|
assertValidIdentifier(col, 'crud field');
|
|
17
17
|
}
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
// Trigger-safe: INSERT + SELECT back by SCOPE_IDENTITY() instead of OUTPUT INSERTED.*
|
|
21
|
-
const selectBack = primaryKey
|
|
22
|
-
? `; SELECT * FROM [${table}] WHERE [${primaryKey}] = SCOPE_IDENTITY()`
|
|
23
|
-
: '';
|
|
24
|
-
const sql = `INSERT INTO [${table}] (${columnsList}) VALUES (${paramsList})${selectBack}`;
|
|
25
|
-
return { sql, params: { ...fields } };
|
|
18
|
+
const statement = driver.buildInsertReturning(table, fields);
|
|
19
|
+
return { sql: statement.sql, params: objectParams(statement) };
|
|
26
20
|
}
|
|
27
|
-
export function buildUpdateQuery(table, primaryKey, pkValue, fields) {
|
|
21
|
+
export function buildUpdateQuery(driver, table, primaryKey, pkValue, fields, extraWhere) {
|
|
28
22
|
assertValidIdentifier(table, 'crud.table');
|
|
29
23
|
assertValidIdentifier(primaryKey, 'crud.primaryKey');
|
|
30
24
|
for (const col of Object.keys(fields)) {
|
|
31
25
|
assertValidIdentifier(col, 'crud field');
|
|
32
26
|
}
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
return { sql, params: { ...fields, _pkValue: pkValue } };
|
|
27
|
+
const statement = driver.buildUpdateReturning(table, fields, primaryKeyWhere(driver, primaryKey, pkValue, extraWhere));
|
|
28
|
+
return { sql: statement.sql, params: objectParams(statement) };
|
|
36
29
|
}
|
|
37
|
-
export function buildDeleteQuery(table, primaryKey, pkValue) {
|
|
30
|
+
export function buildDeleteQuery(driver, table, primaryKey, pkValue, extraWhere) {
|
|
38
31
|
assertValidIdentifier(table, 'crud.table');
|
|
39
32
|
assertValidIdentifier(primaryKey, 'crud.primaryKey');
|
|
40
|
-
const
|
|
41
|
-
return { sql, params:
|
|
33
|
+
const statement = driver.buildDelete(table, primaryKeyWhere(driver, primaryKey, pkValue, extraWhere));
|
|
34
|
+
return { sql: statement.sql, params: objectParams(statement) };
|
|
35
|
+
}
|
|
36
|
+
export function buildSelectByPrimaryKeyQuery(driver, table, primaryKey, pkValue, extraWhere) {
|
|
37
|
+
assertValidIdentifier(table, 'crud.table');
|
|
38
|
+
assertValidIdentifier(primaryKey, 'crud.primaryKey');
|
|
39
|
+
const where = primaryKeyWhere(driver, primaryKey, pkValue, extraWhere);
|
|
40
|
+
return {
|
|
41
|
+
sql: `SELECT * FROM ${driver.quoteIdent(table)} ${where.sql}`,
|
|
42
|
+
params: objectParams(where),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function primaryKeyWhere(driver, primaryKey, pkValue, extraWhere) {
|
|
46
|
+
const params = { _pkValue: pkValue };
|
|
47
|
+
if (extraWhere) {
|
|
48
|
+
return {
|
|
49
|
+
sql: `WHERE (${extraWhere.sql}) AND ${driver.quoteIdent(primaryKey)} = @_pkValue`,
|
|
50
|
+
params: { ...objectParams(extraWhere), ...params },
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
sql: `WHERE ${driver.quoteIdent(primaryKey)} = @_pkValue`,
|
|
55
|
+
params,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function objectParams(statement) {
|
|
59
|
+
const params = statement.params;
|
|
60
|
+
if (!params)
|
|
61
|
+
return {};
|
|
62
|
+
if (Array.isArray(params)) {
|
|
63
|
+
throw new Error('CRUD statements require named object parameters.');
|
|
64
|
+
}
|
|
65
|
+
return params;
|
|
42
66
|
}
|
|
43
67
|
//# sourceMappingURL=crud-builder.js.map
|
package/dist/crud-builder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud-builder.js","sourceRoot":"","sources":["../src/crud-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"crud-builder.js","sourceRoot":"","sources":["../src/crud-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,7 @@ export function createErrorHandler(devMode) {
|
|
|
28
28
|
});
|
|
29
29
|
return;
|
|
30
30
|
}
|
|
31
|
-
// SQL
|
|
31
|
+
// SQL Server driver errors expose a numeric code.
|
|
32
32
|
if ('number' in err && typeof err.number === 'number') {
|
|
33
33
|
const message = devMode ? err.message : 'Database error';
|
|
34
34
|
res.status(400).json({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/middleware/error-handler.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO,SAAS,YAAY,CAAC,GAAa,EAAE,IAAa,EAAE,GAAa,EAAE,KAAmB;QAC3F,oBAAoB;QACpB,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;aACjF,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,YAAY;QACZ,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;aACnD,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,cAAc;QACd,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACxB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,YAAY,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;aAChE,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,YAAY;QACZ,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE;aAC3F,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/middleware/error-handler.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO,SAAS,YAAY,CAAC,GAAa,EAAE,IAAa,EAAE,GAAa,EAAE,KAAmB;QAC3F,oBAAoB;QACpB,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;aACjF,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,YAAY;QACZ,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;aACnD,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,cAAc;QACd,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACxB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,YAAY,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;aAChE,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,YAAY;QACZ,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE;aAC3F,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,kDAAkD;QAClD,IAAI,QAAQ,IAAI,GAAG,IAAI,OAAQ,GAA+B,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACnF,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC;YACzD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE;aACxC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,+BAA+B;QAC/B,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;gBAC1B,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;aAC3D,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,YAAY;QACZ,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC;QAChE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE;SAC3C,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/query-engine.d.ts
CHANGED
|
@@ -1,17 +1,25 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { SqlDriver } from 'mythik/server';
|
|
2
2
|
import type { ParamConfig } from './types.js';
|
|
3
3
|
export declare function parseParamValue(raw: string | undefined, type: ParamConfig['type'], max?: number): unknown;
|
|
4
|
-
export
|
|
5
|
-
|
|
4
|
+
export interface PaginationQueryOptions {
|
|
5
|
+
driver: SqlDriver;
|
|
6
|
+
limit: number;
|
|
7
|
+
offset: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function buildPaginatedQuery(query: string, options: PaginationQueryOptions): string;
|
|
6
10
|
export interface CountQueryOptions {
|
|
7
11
|
scopeClause?: {
|
|
8
12
|
sql: string;
|
|
9
13
|
} | null;
|
|
14
|
+
driver?: SqlDriver;
|
|
10
15
|
}
|
|
11
16
|
export interface EndpointCountQueryOptions extends CountQueryOptions {
|
|
12
17
|
customCount?: string;
|
|
13
18
|
}
|
|
14
19
|
export declare function buildCountQuery(query: string, options?: CountQueryOptions): string;
|
|
15
20
|
export declare function buildEndpointCountQuery(query: string, options?: EndpointCountQueryOptions): string;
|
|
16
|
-
export
|
|
21
|
+
export interface TotalsQueryOptions {
|
|
22
|
+
driver?: SqlDriver;
|
|
23
|
+
}
|
|
24
|
+
export declare function buildTotalsQuery(query: string, totals: string[], options?: TotalsQueryOptions): string | null;
|
|
17
25
|
//# sourceMappingURL=query-engine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-engine.d.ts","sourceRoot":"","sources":["../src/query-engine.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"query-engine.d.ts","sourceRoot":"","sources":["../src/query-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAqBT;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAE1F;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACrC,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA0BD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAgBtF;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,yBAA8B,GACtC,MAAM,CAUR;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAMD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,kBAAuB,GAAG,MAAM,GAAG,IAAI,CAmBjH"}
|
package/dist/query-engine.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import sql from 'mssql';
|
|
2
1
|
import { SCOPE_ALIAS } from './auth/scope-filter.js';
|
|
3
2
|
import { assertValidIdentifier } from './validation/identifier-guard.js';
|
|
4
3
|
export function parseParamValue(raw, type, max) {
|
|
@@ -24,18 +23,8 @@ export function parseParamValue(raw, type, max) {
|
|
|
24
23
|
return raw;
|
|
25
24
|
}
|
|
26
25
|
}
|
|
27
|
-
export function
|
|
28
|
-
|
|
29
|
-
case 'int': return sql.Int;
|
|
30
|
-
case 'float': return sql.Float;
|
|
31
|
-
case 'boolean': return sql.Bit;
|
|
32
|
-
case 'date': return sql.NVarChar;
|
|
33
|
-
case 'string':
|
|
34
|
-
default: return sql.NVarChar;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
export function buildPaginatedQuery(query) {
|
|
38
|
-
return `${query}\nOFFSET @_offset ROWS FETCH NEXT @_pageSize ROWS ONLY`;
|
|
26
|
+
export function buildPaginatedQuery(query, options) {
|
|
27
|
+
return options.driver.paginate(query, options.limit, options.offset);
|
|
39
28
|
}
|
|
40
29
|
function stripTrailingOrderBy(query) {
|
|
41
30
|
return query.replace(/\s+ORDER\s+BY\s+[\s\S]+$/i, '').trim();
|
|
@@ -76,18 +65,24 @@ export function buildEndpointCountQuery(query, options = {}) {
|
|
|
76
65
|
if (options.customCount) {
|
|
77
66
|
return renderCountScopeMacros(options.customCount, options.scopeClause);
|
|
78
67
|
}
|
|
68
|
+
if (options.driver && !options.scopeClause) {
|
|
69
|
+
return options.driver.countQuery(query);
|
|
70
|
+
}
|
|
79
71
|
return buildCountQuery(query, options);
|
|
80
72
|
}
|
|
81
|
-
|
|
73
|
+
function quoteAlias(alias, driver) {
|
|
74
|
+
return driver ? driver.quoteIdent(alias) : `[${alias.replace(/]/g, ']]')}]`;
|
|
75
|
+
}
|
|
76
|
+
export function buildTotalsQuery(query, totals, options = {}) {
|
|
82
77
|
if (!totals || totals.length === 0)
|
|
83
78
|
return null;
|
|
84
79
|
const aggregations = totals.map(t => {
|
|
85
80
|
if (t === 'COUNT:*')
|
|
86
|
-
return
|
|
81
|
+
return `COUNT(*) as ${quoteAlias('COUNT:*', options.driver)}`;
|
|
87
82
|
const [fn, field] = t.split(':');
|
|
88
83
|
if (fn === 'COUNT_DISTINCT')
|
|
89
|
-
return `COUNT(DISTINCT ${field}) as
|
|
90
|
-
return `${fn}(${field}) as
|
|
84
|
+
return `COUNT(DISTINCT ${field}) as ${quoteAlias(`COUNT_DISTINCT:${field}`, options.driver)}`;
|
|
85
|
+
return `${fn}(${field}) as ${quoteAlias(`${fn}:${field}`, options.driver)}`;
|
|
91
86
|
});
|
|
92
87
|
const selectClause = aggregations.join(', ');
|
|
93
88
|
const fromMatch = query.match(/\bFROM\b/i);
|
package/dist/query-engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-engine.js","sourceRoot":"","sources":["../src/query-engine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"query-engine.js","sourceRoot":"","sources":["../src/query-engine.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAW,YAAY,EAAE,kBAAkB,EAAqD,MAAM,YAAY,CAAC;AAmD/H,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CA8OrE"}
|