@kwiz/node 1.0.10 → 1.0.11
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/__azurite_db_table__.json +1 -1
- package/dist/exports-index.d.ts +1 -0
- package/dist/exports-index.js +1 -0
- package/dist/exports-index.js.map +1 -1
- package/dist/storage/common.d.ts +1 -0
- package/dist/storage/common.js +30 -0
- package/dist/storage/common.js.map +1 -0
- package/dist/storage/exports-index.d.ts +3 -0
- package/dist/storage/exports-index.js +20 -0
- package/dist/storage/exports-index.js.map +1 -0
- package/dist/storage/odata.d.ts +27 -0
- package/dist/storage/odata.js +78 -0
- package/dist/storage/odata.js.map +1 -0
- package/dist/storage/table-storage.d.ts +58 -0
- package/dist/storage/table-storage.js +337 -0
- package/dist/storage/table-storage.js.map +1 -0
- package/package.json +1 -1
- package/src/storage/common.ts +15 -0
- package/src/storage/exports-index.ts +1 -0
- package/src/storage/table-storage.test.js +7 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"filename":"C:\\Repos\\@kwiz\\node\\__azurite_db_table__.json","collections":[{"name":"$TABLES_COLLECTION$","data":[],"idIndex":[],"binaryIndices":{"account":{"name":"account","dirty":false,"values":[]},"table":{"name":"table","dirty":false,"values":[]}},"constraints":null,"uniqueNames":[],"transforms":{},"objType":"$TABLES_COLLECTION$","dirty":false,"cachedIndex":null,"cachedBinaryIndex":null,"cachedData":null,"adaptiveBinaryIndices":true,"transactional":false,"cloneObjects":false,"cloneMethod":"parse-stringify","asyncListeners":false,"disableMeta":false,"disableChangesApi":true,"disableDeltaChangesApi":true,"autoupdate":false,"serializableIndices":true,"disableFreeze":true,"ttl":null,"maxId":
|
|
1
|
+
{"filename":"C:\\Repos\\@kwiz\\node\\__azurite_db_table__.json","collections":[{"name":"$TABLES_COLLECTION$","data":[],"idIndex":[],"binaryIndices":{"account":{"name":"account","dirty":false,"values":[]},"table":{"name":"table","dirty":false,"values":[]}},"constraints":null,"uniqueNames":[],"transforms":{},"objType":"$TABLES_COLLECTION$","dirty":false,"cachedIndex":null,"cachedBinaryIndex":null,"cachedData":null,"adaptiveBinaryIndices":true,"transactional":false,"cloneObjects":false,"cloneMethod":"parse-stringify","asyncListeners":false,"disableMeta":false,"disableChangesApi":true,"disableDeltaChangesApi":true,"autoupdate":false,"serializableIndices":true,"disableFreeze":true,"ttl":null,"maxId":12,"DynamicViews":[],"events":{"insert":[],"update":[],"pre-insert":[],"pre-update":[],"close":[],"flushbuffer":[],"error":[],"delete":[null],"warning":[null]},"changes":[],"dirtyIds":[]},{"name":"$SERVICES_COLLECTION$","data":[],"idIndex":null,"binaryIndices":{},"constraints":null,"uniqueNames":["accountName"],"transforms":{},"objType":"$SERVICES_COLLECTION$","dirty":false,"cachedIndex":null,"cachedBinaryIndex":null,"cachedData":null,"adaptiveBinaryIndices":true,"transactional":false,"cloneObjects":false,"cloneMethod":"parse-stringify","asyncListeners":false,"disableMeta":false,"disableChangesApi":true,"disableDeltaChangesApi":true,"autoupdate":false,"serializableIndices":true,"disableFreeze":true,"ttl":null,"maxId":0,"DynamicViews":[],"events":{"insert":[],"update":[],"pre-insert":[],"pre-update":[],"close":[],"flushbuffer":[],"error":[],"delete":[null],"warning":[null]},"changes":[],"dirtyIds":[]}],"databaseVersion":1.5,"engineVersion":1.5,"autosave":true,"autosaveInterval":5000,"autosaveHandle":null,"throttledSaves":true,"options":{"persistenceMethod":"fs","autosave":true,"autosaveInterval":5000,"serializationMethod":"normal","destructureDelimiter":"$<\n"},"persistenceMethod":"fs","persistenceAdapter":null,"verbose":false,"events":{"init":[null],"loaded":[],"flushChanges":[],"close":[],"changes":[],"warning":[]},"ENV":"NODEJS"}
|
package/dist/exports-index.d.ts
CHANGED
package/dist/exports-index.js
CHANGED
|
@@ -17,5 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./auth/exports-index"), exports);
|
|
18
18
|
__exportStar(require("./graph/exports-index"), exports);
|
|
19
19
|
__exportStar(require("./spo/exports-index"), exports);
|
|
20
|
+
__exportStar(require("./storage/exports-index"), exports);
|
|
20
21
|
__exportStar(require("./axios"), exports);
|
|
21
22
|
//# sourceMappingURL=exports-index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports-index.js","sourceRoot":"","sources":["../src/exports-index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,wDAAsC;AACtC,sDAAoC;AACpC,0CAAwB"}
|
|
1
|
+
{"version":3,"file":"exports-index.js","sourceRoot":"","sources":["../src/exports-index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,wDAAsC;AACtC,sDAAoC;AACpC,0DAAwC;AACxC,0CAAwB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function IsAzuriteRunning(): Promise<boolean>;
|
|
@@ -0,0 +1,30 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.IsAzuriteRunning = void 0;
|
|
13
|
+
const common_1 = require("@kwiz/common");
|
|
14
|
+
const axios_1 = require("axios");
|
|
15
|
+
function IsAzuriteRunning() {
|
|
16
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
17
|
+
let responseServer = "";
|
|
18
|
+
try {
|
|
19
|
+
//make a request for http://127.0.0.1:10000/ expect response headers "Server" to contain "Azurite"
|
|
20
|
+
const result = yield axios_1.default.get("http://127.0.0.1:10000/");
|
|
21
|
+
responseServer = result.headers.server;
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
responseServer = e.response && e.response.headers && e.response.headers.server;
|
|
25
|
+
}
|
|
26
|
+
return (0, common_1.isNullOrEmptyString)(responseServer) ? false : responseServer.toLowerCase().indexOf("azurite") >= 0;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
exports.IsAzuriteRunning = IsAzuriteRunning;
|
|
30
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/storage/common.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAmD;AACnD,iCAA0B;AAE1B,SAAsB,gBAAgB;;QAClC,IAAI,cAAc,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC;YACD,kGAAkG;YAClG,MAAM,MAAM,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YAC1D,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAC3C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,cAAc,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;QACnF,CAAC;QAED,OAAO,IAAA,4BAAmB,EAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9G,CAAC;CAAA;AAXD,4CAWC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./common"), exports);
|
|
18
|
+
__exportStar(require("./odata"), exports);
|
|
19
|
+
__exportStar(require("./table-storage"), exports);
|
|
20
|
+
//# sourceMappingURL=exports-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exports-index.js","sourceRoot":"","sources":["../../src/storage/exports-index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,0CAAwB;AACxB,kDAAgC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export declare enum ODataOperators {
|
|
2
|
+
equal = "eq",
|
|
3
|
+
notEqual = "ne",
|
|
4
|
+
greater = "gt",
|
|
5
|
+
greaterOrEqual = "ge",
|
|
6
|
+
less = "lt",
|
|
7
|
+
lessOrEqual = "le",
|
|
8
|
+
contains = "in",
|
|
9
|
+
startswith = "startswith"
|
|
10
|
+
}
|
|
11
|
+
export declare enum ODataJoinOperators {
|
|
12
|
+
and = "and",
|
|
13
|
+
or = "or"
|
|
14
|
+
}
|
|
15
|
+
export interface IOdataFilter<DataType> {
|
|
16
|
+
property: keyof DataType;
|
|
17
|
+
operator: ODataOperators;
|
|
18
|
+
value: string | Date | number | boolean;
|
|
19
|
+
not?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface IOdataFilterStatement<DataType> {
|
|
22
|
+
filters: (IOdataFilter<DataType> | IOdataFilterStatement<DataType>)[];
|
|
23
|
+
/** default: or */
|
|
24
|
+
join?: ODataJoinOperators;
|
|
25
|
+
not?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export declare function getOdataFilter<DataType>(statement: IOdataFilterStatement<DataType>): string;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getOdataFilter = exports.ODataJoinOperators = exports.ODataOperators = void 0;
|
|
4
|
+
const common_1 = require("@kwiz/common");
|
|
5
|
+
var ODataOperators;
|
|
6
|
+
(function (ODataOperators) {
|
|
7
|
+
ODataOperators["equal"] = "eq";
|
|
8
|
+
ODataOperators["notEqual"] = "ne";
|
|
9
|
+
ODataOperators["greater"] = "gt";
|
|
10
|
+
ODataOperators["greaterOrEqual"] = "ge";
|
|
11
|
+
ODataOperators["less"] = "lt";
|
|
12
|
+
ODataOperators["lessOrEqual"] = "le";
|
|
13
|
+
ODataOperators["contains"] = "in";
|
|
14
|
+
ODataOperators["startswith"] = "startswith";
|
|
15
|
+
})(ODataOperators || (exports.ODataOperators = ODataOperators = {}));
|
|
16
|
+
var ODataJoinOperators;
|
|
17
|
+
(function (ODataJoinOperators) {
|
|
18
|
+
ODataJoinOperators["and"] = "and";
|
|
19
|
+
ODataJoinOperators["or"] = "or";
|
|
20
|
+
})(ODataJoinOperators || (exports.ODataJoinOperators = ODataJoinOperators = {}));
|
|
21
|
+
function isIOdataFilter(f) {
|
|
22
|
+
if (typeof f.property === "string")
|
|
23
|
+
return true;
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
function isIOdataFilterStatement(f) {
|
|
27
|
+
if (typeof f.filters === "object" && Array.isArray(f.filters))
|
|
28
|
+
return true;
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
var TableStorageKnownColumns;
|
|
32
|
+
(function (TableStorageKnownColumns) {
|
|
33
|
+
TableStorageKnownColumns["partitionKey"] = "PartitionKey";
|
|
34
|
+
TableStorageKnownColumns["rowKey"] = "RowKey";
|
|
35
|
+
})(TableStorageKnownColumns || (TableStorageKnownColumns = {}));
|
|
36
|
+
function getPropNameForFilter(prop) {
|
|
37
|
+
return TableStorageKnownColumns[prop] || prop;
|
|
38
|
+
}
|
|
39
|
+
function getOdataFilterStatement(filter) {
|
|
40
|
+
let filterValue = (0, common_1.isNullOrUndefined)(filter.value)
|
|
41
|
+
? `null`
|
|
42
|
+
: typeof filter.value === "string"
|
|
43
|
+
? `'${filter.value.replace(/'/g, "''")}'`
|
|
44
|
+
: filter.value instanceof Date
|
|
45
|
+
? `datetime'${filter.value.toISOString()}'`
|
|
46
|
+
: `${filter.value}`;
|
|
47
|
+
if (filter.operator === ODataOperators.startswith)
|
|
48
|
+
return `${filter.not ? 'not ' : ''}${filter.operator}(${getPropNameForFilter(filter.property)}, ${filterValue})`;
|
|
49
|
+
return `${filter.not ? 'not ' : ''}${getPropNameForFilter(filter.property)} ${filter.operator} ${filterValue}`;
|
|
50
|
+
}
|
|
51
|
+
function getOdataFilter(statement) {
|
|
52
|
+
if ((0, common_1.isNullOrUndefined)(statement) || (0, common_1.isNullOrEmptyArray)(statement.filters))
|
|
53
|
+
return "";
|
|
54
|
+
if ((0, common_1.isNullOrEmptyString)(statement.join))
|
|
55
|
+
statement.join = ODataJoinOperators.or;
|
|
56
|
+
let filterStatements = [];
|
|
57
|
+
statement.filters.forEach(filter => {
|
|
58
|
+
if (isIOdataFilter(filter)) {
|
|
59
|
+
filterStatements.push(getOdataFilterStatement(filter));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
let subStatement = getOdataFilter(filter);
|
|
63
|
+
if (!(0, common_1.isNullOrEmptyString)(subStatement))
|
|
64
|
+
filterStatements.push(subStatement);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
if (filterStatements.length === 0)
|
|
68
|
+
return "";
|
|
69
|
+
let result = "";
|
|
70
|
+
if (filterStatements.length === 1)
|
|
71
|
+
result = filterStatements[0];
|
|
72
|
+
else if (filterStatements.length > 1) {
|
|
73
|
+
result = `(${filterStatements.join(` ${statement.join} `)})`;
|
|
74
|
+
}
|
|
75
|
+
return `${statement.not ? '(not ' : ''}${result}${statement.not ? ')' : ''}`;
|
|
76
|
+
}
|
|
77
|
+
exports.getOdataFilter = getOdataFilter;
|
|
78
|
+
//# sourceMappingURL=odata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"odata.js","sourceRoot":"","sources":["../../src/storage/odata.ts"],"names":[],"mappings":";;;AAAA,yCAA0F;AAE1F,IAAY,cASX;AATD,WAAY,cAAc;IACtB,8BAAY,CAAA;IACZ,iCAAe,CAAA;IACf,gCAAc,CAAA;IACd,uCAAqB,CAAA;IACrB,6BAAW,CAAA;IACX,oCAAkB,CAAA;IAClB,iCAAe,CAAA;IACf,2CAAyB,CAAA;AAC7B,CAAC,EATW,cAAc,8BAAd,cAAc,QASzB;AACD,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC1B,iCAAW,CAAA;IACX,+BAAS,CAAA;AACb,CAAC,EAHW,kBAAkB,kCAAlB,kBAAkB,QAG7B;AAcD,SAAS,cAAc,CAAW,CAA2D;IACzF,IAAI,OAAQ,CAA4B,CAAC,QAAQ,KAAK,QAAQ;QAC1D,OAAO,IAAI,CAAC;IAChB,OAAO,KAAK,CAAC;AACjB,CAAC;AACD,SAAS,uBAAuB,CAAW,CAA2D;IAClG,IAAI,OAAQ,CAAqC,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAE,CAAqC,CAAC,OAAO,CAAC;QACnI,OAAO,IAAI,CAAC;IAChB,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,IAAK,wBAGJ;AAHD,WAAK,wBAAwB;IACzB,yDAA6B,CAAA;IAC7B,6CAAiB,CAAA;AACrB,CAAC,EAHI,wBAAwB,KAAxB,wBAAwB,QAG5B;AAED,SAAS,oBAAoB,CAAC,IAA8B;IACxD,OAAO,wBAAwB,CAAC,IAAI,CAAC,IAAI,IAAc,CAAC;AAC5D,CAAC;AACD,SAAS,uBAAuB,CAAW,MAA8B;IACrE,IAAI,WAAW,GAAG,IAAA,0BAAiB,EAAC,MAAM,CAAC,KAAK,CAAC;QAC7C,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;YAC9B,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG;YACzC,CAAC,CAAC,MAAM,CAAC,KAAK,YAAY,IAAI;gBAC1B,CAAC,CAAC,YAAY,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG;gBAC3C,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IAEhC,IAAI,MAAM,CAAC,QAAQ,KAAK,cAAc,CAAC,UAAU;QAC7C,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,IAAI,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,WAAW,GAAG,CAAC;IACrH,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,IAAI,WAAW,EAAE,CAAC;AACnH,CAAC;AAED,SAAgB,cAAc,CAAW,SAA0C;IAC/E,IAAI,IAAA,0BAAiB,EAAC,SAAS,CAAC,IAAI,IAAA,2BAAkB,EAAC,SAAS,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACrF,IAAI,IAAA,4BAAmB,EAAC,SAAS,CAAC,IAAI,CAAC;QAAE,SAAS,CAAC,IAAI,GAAG,kBAAkB,CAAC,EAAE,CAAC;IAEhF,IAAI,gBAAgB,GAAa,EAAE,CAAC;IACpC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAC/B,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,gBAAgB,CAAC,IAAI,CAAC,uBAAuB,CAAW,MAAM,CAAC,CAAC,CAAC;QACrE,CAAC;aACI,CAAC;YACF,IAAI,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAA,4BAAmB,EAAC,YAAY,CAAC;gBAClC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC,CAAC,CAAC;IACH,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE7C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC;IACjE,CAAC;IAED,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACjF,CAAC;AAxBD,wCAwBC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { UpdateMode } from "@azure/data-tables";
|
|
2
|
+
import { IOdataFilterStatement } from "./odata";
|
|
3
|
+
export declare function ConfigureTableStorage(config: {
|
|
4
|
+
connectionString: string;
|
|
5
|
+
}): void;
|
|
6
|
+
type TableEntityBase = {
|
|
7
|
+
/**
|
|
8
|
+
* The PartitionKey property of the entity.
|
|
9
|
+
* Does not allow / \ # ? any control characted (like \n)
|
|
10
|
+
*/
|
|
11
|
+
partitionKey: string;
|
|
12
|
+
/**
|
|
13
|
+
* The RowKey property of the entity.
|
|
14
|
+
*/
|
|
15
|
+
rowKey: string;
|
|
16
|
+
};
|
|
17
|
+
export type TableEntityType<DataType extends TableEntityBase> = {
|
|
18
|
+
[P in keyof DataType]: string | boolean | Date | number;
|
|
19
|
+
};
|
|
20
|
+
export declare function findTable(tableName: string): Promise<boolean>;
|
|
21
|
+
export declare function listTables(): Promise<string[]>;
|
|
22
|
+
export declare function ensureTable(tableName: string): Promise<boolean>;
|
|
23
|
+
export declare function deleteTable(tableName: string): Promise<boolean>;
|
|
24
|
+
export declare function getItems<DataType extends TableEntityBase & TableEntityType<DataType>>(tableName: string, options?: {
|
|
25
|
+
filterStatment?: IOdataFilterStatement<DataType>;
|
|
26
|
+
postFilter?: (item: DataType) => boolean;
|
|
27
|
+
}): Promise<DataType[]>;
|
|
28
|
+
export declare function addItem<DataType extends TableEntityBase & TableEntityType<DataType>>(tableName: string, item: DataType): Promise<boolean>;
|
|
29
|
+
export declare function deleteItem(tableName: string, partitionKey: string, rowKey: string): Promise<boolean>;
|
|
30
|
+
export declare function upsertItem<DataType extends TableEntityBase & TableEntityType<DataType>>(tableName: string, item: DataType, options?: {
|
|
31
|
+
mode?: UpdateMode;
|
|
32
|
+
}): Promise<boolean>;
|
|
33
|
+
export declare class Table<KeysType extends TableEntityBase, GetKeysParam, SavedRow extends KeysType & TableEntityType<SavedRow>, ParsedRow = SavedRow> {
|
|
34
|
+
private tableName;
|
|
35
|
+
private transform;
|
|
36
|
+
getKeys: (p: GetKeysParam) => KeysType;
|
|
37
|
+
/** If your type contains complex values, provide a transforer to serialize/deserialize those complex columns */
|
|
38
|
+
constructor(tableName: string, options: {
|
|
39
|
+
getKeys: (p: GetKeysParam) => KeysType;
|
|
40
|
+
transform?: {
|
|
41
|
+
save: (parsed: ParsedRow, table: Table<KeysType, GetKeysParam, SavedRow, ParsedRow>) => SavedRow;
|
|
42
|
+
load: (saved: SavedRow, table: Table<KeysType, GetKeysParam, SavedRow, ParsedRow>) => ParsedRow;
|
|
43
|
+
};
|
|
44
|
+
});
|
|
45
|
+
delete(): Promise<boolean>;
|
|
46
|
+
ensure(): Promise<boolean>;
|
|
47
|
+
getItems(options?: {
|
|
48
|
+
filterStatment?: IOdataFilterStatement<SavedRow>;
|
|
49
|
+
postFilter?: (item: SavedRow) => boolean;
|
|
50
|
+
}): Promise<ParsedRow[]>;
|
|
51
|
+
addItem(item: ParsedRow): Promise<boolean>;
|
|
52
|
+
upsertItem(item: ParsedRow, options?: {
|
|
53
|
+
mode?: UpdateMode;
|
|
54
|
+
}): Promise<boolean>;
|
|
55
|
+
deleteItemByKey(param: GetKeysParam): Promise<boolean>;
|
|
56
|
+
deleteItem(item: KeysType): Promise<boolean>;
|
|
57
|
+
}
|
|
58
|
+
export {};
|
|
@@ -0,0 +1,337 @@
|
|
|
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 __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
12
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
13
|
+
var m = o[Symbol.asyncIterator], i;
|
|
14
|
+
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
15
|
+
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
16
|
+
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
17
|
+
};
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.Table = exports.upsertItem = exports.deleteItem = exports.addItem = exports.getItems = exports.deleteTable = exports.ensureTable = exports.listTables = exports.findTable = exports.ConfigureTableStorage = void 0;
|
|
20
|
+
const data_tables_1 = require("@azure/data-tables");
|
|
21
|
+
const common_1 = require("@kwiz/common");
|
|
22
|
+
const odata_1 = require("./odata");
|
|
23
|
+
var connectionString = null;
|
|
24
|
+
function ConfigureTableStorage(config) {
|
|
25
|
+
connectionString = config.connectionString;
|
|
26
|
+
}
|
|
27
|
+
exports.ConfigureTableStorage = ConfigureTableStorage;
|
|
28
|
+
function getTableService() {
|
|
29
|
+
if ((0, common_1.isNullOrEmptyString)(connectionString))
|
|
30
|
+
throw Error("Call ConfigureTableStorage first");
|
|
31
|
+
return data_tables_1.TableServiceClient.fromConnectionString(connectionString);
|
|
32
|
+
}
|
|
33
|
+
function getTableClient(tableName) {
|
|
34
|
+
if ((0, common_1.isNullOrEmptyString)(connectionString))
|
|
35
|
+
throw Error("Call ConfigureTableStorage first");
|
|
36
|
+
return data_tables_1.TableClient.fromConnectionString(connectionString, tableName);
|
|
37
|
+
}
|
|
38
|
+
function findTable(tableName) {
|
|
39
|
+
var _a, e_1, _b, _c;
|
|
40
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
const tableService = getTableService();
|
|
42
|
+
let found = false;
|
|
43
|
+
try {
|
|
44
|
+
const tables = tableService.listTables({
|
|
45
|
+
queryOptions: {
|
|
46
|
+
//Tag function - read more https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
|
|
47
|
+
filter: (0, data_tables_1.odata) `TableName eq ${tableName}`
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
try {
|
|
51
|
+
for (var _d = true, tables_1 = __asyncValues(tables), tables_1_1; tables_1_1 = yield tables_1.next(), _a = tables_1_1.done, !_a; _d = true) {
|
|
52
|
+
_c = tables_1_1.value;
|
|
53
|
+
_d = false;
|
|
54
|
+
const table = _c;
|
|
55
|
+
found = true;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
59
|
+
finally {
|
|
60
|
+
try {
|
|
61
|
+
if (!_d && !_a && (_b = tables_1.return)) yield _b.call(tables_1);
|
|
62
|
+
}
|
|
63
|
+
finally { if (e_1) throw e_1.error; }
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
//console.log(e);
|
|
68
|
+
}
|
|
69
|
+
return found;
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
exports.findTable = findTable;
|
|
73
|
+
function listTables() {
|
|
74
|
+
var _a, e_2, _b, _c;
|
|
75
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
76
|
+
const tableService = getTableService();
|
|
77
|
+
let arr = [];
|
|
78
|
+
try {
|
|
79
|
+
const tables = tableService.listTables();
|
|
80
|
+
try {
|
|
81
|
+
for (var _d = true, tables_2 = __asyncValues(tables), tables_2_1; tables_2_1 = yield tables_2.next(), _a = tables_2_1.done, !_a; _d = true) {
|
|
82
|
+
_c = tables_2_1.value;
|
|
83
|
+
_d = false;
|
|
84
|
+
const table = _c;
|
|
85
|
+
arr.push(table.name);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
89
|
+
finally {
|
|
90
|
+
try {
|
|
91
|
+
if (!_d && !_a && (_b = tables_2.return)) yield _b.call(tables_2);
|
|
92
|
+
}
|
|
93
|
+
finally { if (e_2) throw e_2.error; }
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
//console.log(e);
|
|
98
|
+
}
|
|
99
|
+
return arr;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
exports.listTables = listTables;
|
|
103
|
+
// async function ensureTableObsolete(name: string) {
|
|
104
|
+
// const tableService = getTableService();
|
|
105
|
+
// //create table
|
|
106
|
+
// // If the table 'newTable' already exists, createTable doesn't throw
|
|
107
|
+
// let success = false;
|
|
108
|
+
// try {
|
|
109
|
+
// await tableService.createTable(name, {
|
|
110
|
+
// onResponse: raw => {
|
|
111
|
+
// let error = isError(raw);
|
|
112
|
+
// success = error.isError !== true;
|
|
113
|
+
// if (error.isError) console.log(error.message);
|
|
114
|
+
// }
|
|
115
|
+
// });
|
|
116
|
+
// }
|
|
117
|
+
// catch (e) {
|
|
118
|
+
// success = false;
|
|
119
|
+
// }
|
|
120
|
+
// return success;
|
|
121
|
+
// }
|
|
122
|
+
function ensureTable(tableName) {
|
|
123
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
124
|
+
const table = getTableClient(tableName);
|
|
125
|
+
let success = false;
|
|
126
|
+
try {
|
|
127
|
+
yield table.createTable({
|
|
128
|
+
onResponse: raw => {
|
|
129
|
+
let error = isError(raw);
|
|
130
|
+
success = error.isError !== true || error.message === "TableAlreadyExists";
|
|
131
|
+
//if (error.isError) console.error(error.message);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
catch (e) {
|
|
136
|
+
//console.error(e);
|
|
137
|
+
}
|
|
138
|
+
return success;
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
exports.ensureTable = ensureTable;
|
|
142
|
+
function deleteTable(tableName) {
|
|
143
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
144
|
+
const table = getTableClient(tableName);
|
|
145
|
+
let success = false;
|
|
146
|
+
try {
|
|
147
|
+
yield table.deleteTable({
|
|
148
|
+
onResponse: raw => {
|
|
149
|
+
let error = isError(raw);
|
|
150
|
+
success = error.isError !== true;
|
|
151
|
+
//if (error.isError) console.log(error.message);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
catch (e) {
|
|
156
|
+
//console.log(e);
|
|
157
|
+
}
|
|
158
|
+
return success;
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
exports.deleteTable = deleteTable;
|
|
162
|
+
//https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/tables/data-tables/samples/v13/typescript/src/queryEntities.ts
|
|
163
|
+
function getItems(tableName, options) {
|
|
164
|
+
var _a, e_3, _b, _c;
|
|
165
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
166
|
+
const table = getTableClient(tableName);
|
|
167
|
+
let result = [];
|
|
168
|
+
try {
|
|
169
|
+
let o;
|
|
170
|
+
if (options) {
|
|
171
|
+
if (!(0, common_1.isNullOrUndefined)(options.filterStatment)) {
|
|
172
|
+
let filterStatment = (0, odata_1.getOdataFilter)(options.filterStatment);
|
|
173
|
+
if (!(0, common_1.isNullOrEmptyString)(filterStatment))
|
|
174
|
+
o = {
|
|
175
|
+
queryOptions: {
|
|
176
|
+
filter: filterStatment
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
let items = table.listEntities(o);
|
|
182
|
+
try {
|
|
183
|
+
for (var _d = true, items_1 = __asyncValues(items), items_1_1; items_1_1 = yield items_1.next(), _a = items_1_1.done, !_a; _d = true) {
|
|
184
|
+
_c = items_1_1.value;
|
|
185
|
+
_d = false;
|
|
186
|
+
const item = _c;
|
|
187
|
+
//console.dir(item);
|
|
188
|
+
if (!options || typeof options.postFilter !== "function" || options.postFilter(item))
|
|
189
|
+
result.push(item);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
193
|
+
finally {
|
|
194
|
+
try {
|
|
195
|
+
if (!_d && !_a && (_b = items_1.return)) yield _b.call(items_1);
|
|
196
|
+
}
|
|
197
|
+
finally { if (e_3) throw e_3.error; }
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch (e) {
|
|
201
|
+
//console.log(e);
|
|
202
|
+
}
|
|
203
|
+
return result;
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
exports.getItems = getItems;
|
|
207
|
+
function addItem(tableName, item) {
|
|
208
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
209
|
+
const table = getTableClient(tableName);
|
|
210
|
+
let success = false;
|
|
211
|
+
try {
|
|
212
|
+
let result = yield table.createEntity(item, {
|
|
213
|
+
onResponse: raw => {
|
|
214
|
+
let error = isError(raw);
|
|
215
|
+
success = error.isError !== true;
|
|
216
|
+
//if (error.isError) console.log(error.message);
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
//console.log(result);
|
|
220
|
+
success = true;
|
|
221
|
+
}
|
|
222
|
+
catch (e) {
|
|
223
|
+
success = false;
|
|
224
|
+
}
|
|
225
|
+
return success;
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
exports.addItem = addItem;
|
|
229
|
+
function deleteItem(tableName, partitionKey, rowKey) {
|
|
230
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
231
|
+
const table = getTableClient(tableName);
|
|
232
|
+
let success = false;
|
|
233
|
+
try {
|
|
234
|
+
let result = yield table.deleteEntity(partitionKey, rowKey, {
|
|
235
|
+
onResponse: raw => {
|
|
236
|
+
let error = isError(raw);
|
|
237
|
+
success = error.isError !== true || error.message === "ResourceNotFound";
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
//console.log(result);
|
|
241
|
+
success = true;
|
|
242
|
+
}
|
|
243
|
+
catch (e) {
|
|
244
|
+
//success = false;
|
|
245
|
+
}
|
|
246
|
+
return success;
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
exports.deleteItem = deleteItem;
|
|
250
|
+
function upsertItem(tableName, item, options) {
|
|
251
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
252
|
+
const table = getTableClient(tableName);
|
|
253
|
+
let success = false;
|
|
254
|
+
try {
|
|
255
|
+
let result = yield table.upsertEntity(item, (options === null || options === void 0 ? void 0 : options.mode) || "Replace", {
|
|
256
|
+
onResponse: raw => {
|
|
257
|
+
let error = isError(raw);
|
|
258
|
+
success = error.isError !== true;
|
|
259
|
+
//if (error.isError) console.log(error.message);
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
//console.log(result);
|
|
263
|
+
success = true;
|
|
264
|
+
}
|
|
265
|
+
catch (e) {
|
|
266
|
+
console.error(e);
|
|
267
|
+
success = false;
|
|
268
|
+
}
|
|
269
|
+
return success;
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
exports.upsertItem = upsertItem;
|
|
273
|
+
class Table {
|
|
274
|
+
/** If your type contains complex values, provide a transforer to serialize/deserialize those complex columns */
|
|
275
|
+
constructor(tableName, options) {
|
|
276
|
+
this.getKeys = null;
|
|
277
|
+
this.tableName = tableName;
|
|
278
|
+
this.getKeys = options.getKeys;
|
|
279
|
+
this.transform = options.transform || {
|
|
280
|
+
save: v => v,
|
|
281
|
+
load: v => v
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
delete() {
|
|
285
|
+
return deleteTable(this.tableName);
|
|
286
|
+
}
|
|
287
|
+
ensure() {
|
|
288
|
+
return ensureTable(this.tableName);
|
|
289
|
+
}
|
|
290
|
+
getItems(options) {
|
|
291
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
292
|
+
let items = yield getItems(this.tableName, options);
|
|
293
|
+
return items.map(i => this.transform.load(i, this));
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
addItem(item) {
|
|
297
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
298
|
+
yield this.ensure();
|
|
299
|
+
return addItem(this.tableName, this.transform.save(item, this));
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
upsertItem(item, options) {
|
|
303
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
304
|
+
yield this.ensure();
|
|
305
|
+
return upsertItem(this.tableName, this.transform.save(item, this), options);
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
deleteItemByKey(param) {
|
|
309
|
+
let keys = this.getKeys(param);
|
|
310
|
+
return this.deleteItem(keys);
|
|
311
|
+
}
|
|
312
|
+
deleteItem(item) {
|
|
313
|
+
return deleteItem(this.tableName, item.partitionKey, item.rowKey);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
exports.Table = Table;
|
|
317
|
+
function isError(raw) {
|
|
318
|
+
let isError = false;
|
|
319
|
+
let message = null;
|
|
320
|
+
//201 - table created successfully
|
|
321
|
+
//204 - entity created successfully
|
|
322
|
+
//409 - table/entity already exists
|
|
323
|
+
//400 - table name not allowed
|
|
324
|
+
//404 - TableNotFound when adding item
|
|
325
|
+
if (raw.status >= 400) {
|
|
326
|
+
isError = true;
|
|
327
|
+
let error = raw.parsedBody;
|
|
328
|
+
message = error && error.odataError && !(0, common_1.isNullOrEmptyString)(error.odataError.code)
|
|
329
|
+
? error.odataError.code
|
|
330
|
+
: `Unknown error`; //for some errors like table name too short, error code is empty
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
isError = false;
|
|
334
|
+
}
|
|
335
|
+
return { isError, message };
|
|
336
|
+
}
|
|
337
|
+
//# sourceMappingURL=table-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-storage.js","sourceRoot":"","sources":["../../src/storage/table-storage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { isNullOrEmptyString } from "@kwiz/common";
|
|
2
|
+
import axios from "axios";
|
|
3
|
+
|
|
4
|
+
export async function IsAzuriteRunning() {
|
|
5
|
+
let responseServer = "";
|
|
6
|
+
try {
|
|
7
|
+
//make a request for http://127.0.0.1:10000/ expect response headers "Server" to contain "Azurite"
|
|
8
|
+
const result = await axios.get("http://127.0.0.1:10000/");
|
|
9
|
+
responseServer = result.headers.server;
|
|
10
|
+
} catch (e) {
|
|
11
|
+
responseServer = e.response && e.response.headers && e.response.headers.server;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return isNullOrEmptyString(responseServer) ? false : responseServer.toLowerCase().indexOf("azurite") >= 0;
|
|
15
|
+
}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import assert from 'assert/strict';
|
|
2
2
|
import test from 'node:test';
|
|
3
|
+
import { IsAzuriteRunning } from "./common";
|
|
3
4
|
import { ODataOperators } from "./odata";
|
|
4
5
|
import { ConfigureTableStorage, Table, addItem, ensureTable } from "./table-storage";
|
|
5
6
|
|
|
6
7
|
test('testTableStorage', async t => {
|
|
8
|
+
if (!(await IsAzuriteRunning())) {
|
|
9
|
+
console.log('Skipping table-storage tests - azurite is not running.');
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
7
12
|
//configure storage
|
|
8
13
|
ConfigureTableStorage({ connectionString: "UseDevelopmentStorage=true" });
|
|
9
14
|
|
|
@@ -21,7 +26,8 @@ test('testTableStorage', async t => {
|
|
|
21
26
|
const rowKey2 = "0b8612bb-377d-4897-be8f-a532a1ad3e73|cd24aa15-0d03-4892-bb46-af32e5fb9361";
|
|
22
27
|
//start fresh
|
|
23
28
|
let result = await table.delete();
|
|
24
|
-
|
|
29
|
+
//don't test this - it might have a table to delete and might not... depending if cleanup didn't work last run
|
|
30
|
+
//await t.test("Delete table", t => assert.strictEqual(result, true));
|
|
25
31
|
|
|
26
32
|
//provoke table name not allowed
|
|
27
33
|
result = await ensureTable("T2");
|