prostgles-server 4.0.16 → 4.0.18
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/dist/AuthHandler.js +214 -210
- package/dist/AuthHandler.js.map +1 -1
- package/dist/DBEventsManager.js +34 -31
- package/dist/DBEventsManager.js.map +1 -1
- package/dist/DBSchemaBuilder.js +3 -2
- package/dist/DBSchemaBuilder.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts +19 -14
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.js +159 -151
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.js.map +1 -1
- package/dist/DboBuilder/TableHandler.d.ts +9 -14
- package/dist/DboBuilder/TableHandler.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler.js +21 -41
- package/dist/DboBuilder/TableHandler.js.map +1 -1
- package/dist/DboBuilder/ViewHandler.d.ts +3 -3
- package/dist/DboBuilder/ViewHandler.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler.js +24 -9
- package/dist/DboBuilder/ViewHandler.js.map +1 -1
- package/dist/DboBuilder/getSubscribeRelatedTables.d.ts +1 -1
- package/dist/DboBuilder/getSubscribeRelatedTables.d.ts.map +1 -1
- package/dist/DboBuilder/parseUpdateRules.d.ts.map +1 -1
- package/dist/DboBuilder/parseUpdateRules.js.map +1 -1
- package/dist/DboBuilder/runSQL.js +5 -5
- package/dist/DboBuilder/runSQL.js.map +1 -1
- package/dist/DboBuilder.d.ts.map +1 -1
- package/dist/DboBuilder.js +85 -78
- package/dist/DboBuilder.js.map +1 -1
- package/dist/FileManager/FileManager.d.ts +143 -0
- package/dist/FileManager/FileManager.d.ts.map +1 -0
- package/dist/FileManager/FileManager.js +278 -0
- package/dist/FileManager/FileManager.js.map +1 -0
- package/dist/FileManager/initFileManager.d.ts +4 -0
- package/dist/FileManager/initFileManager.d.ts.map +1 -0
- package/dist/FileManager/initFileManager.js +209 -0
- package/dist/FileManager/initFileManager.js.map +1 -0
- package/dist/FileManager/parseFile.d.ts +15 -0
- package/dist/FileManager/parseFile.d.ts.map +1 -0
- package/dist/FileManager/parseFile.js +59 -0
- package/dist/FileManager/parseFile.js.map +1 -0
- package/dist/FileManager/upload.d.ts +6 -0
- package/dist/FileManager/upload.d.ts.map +1 -0
- package/dist/FileManager/upload.js +76 -0
- package/dist/FileManager/upload.js.map +1 -0
- package/dist/FileManager/uploadStream.d.ts +5 -0
- package/dist/FileManager/uploadStream.d.ts.map +1 -0
- package/dist/FileManager/uploadStream.js +70 -0
- package/dist/FileManager/uploadStream.js.map +1 -0
- package/dist/Filtering.d.ts +1 -1
- package/dist/Filtering.d.ts.map +1 -1
- package/dist/PostgresNotifListenManager.js +26 -20
- package/dist/PostgresNotifListenManager.js.map +1 -1
- package/dist/Prostgles.d.ts +2 -2
- package/dist/Prostgles.d.ts.map +1 -1
- package/dist/Prostgles.js +192 -172
- package/dist/Prostgles.js.map +1 -1
- package/dist/PubSubManager/PubSubManager.d.ts +3 -3
- package/dist/PubSubManager/PubSubManager.js +164 -154
- package/dist/PubSubManager/PubSubManager.js.map +1 -1
- package/dist/PublishParser.d.ts +13 -13
- package/dist/PublishParser.d.ts.map +1 -1
- package/dist/PublishParser.js +8 -2
- package/dist/PublishParser.js.map +1 -1
- package/dist/SchemaWatch.js +2 -1
- package/dist/SchemaWatch.js.map +1 -1
- package/dist/TableConfig/TableConfig.d.ts.map +1 -1
- package/dist/TableConfig/TableConfig.js +100 -92
- package/dist/TableConfig/TableConfig.js.map +1 -1
- package/lib/AuthHandler.js +1 -1
- package/lib/AuthHandler.ts +1 -1
- package/lib/DBSchemaBuilder.js +3 -2
- package/lib/DBSchemaBuilder.ts +3 -2
- package/lib/DboBuilder/TableHandler.d.ts +4 -9
- package/lib/DboBuilder/TableHandler.d.ts.map +1 -1
- package/lib/DboBuilder/TableHandler.js +1 -22
- package/lib/DboBuilder/TableHandler.ts +3 -31
- package/lib/DboBuilder/ViewHandler.ts +1 -1
- package/lib/DboBuilder/getSubscribeRelatedTables.d.ts +1 -1
- package/lib/DboBuilder/getSubscribeRelatedTables.d.ts.map +1 -1
- package/lib/DboBuilder/getSubscribeRelatedTables.ts +1 -1
- package/lib/DboBuilder/parseUpdateRules.d.ts.map +1 -1
- package/lib/DboBuilder/parseUpdateRules.ts +2 -2
- package/lib/DboBuilder.d.ts.map +1 -1
- package/lib/DboBuilder.js +0 -13
- package/lib/DboBuilder.ts +1 -16
- package/lib/{FileManager.d.ts → FileManager/FileManager.d.ts} +12 -20
- package/lib/FileManager/FileManager.d.ts.map +1 -0
- package/lib/FileManager/FileManager.js +303 -0
- package/lib/FileManager/FileManager.ts +378 -0
- package/lib/FileManager/initFileManager.d.ts +4 -0
- package/lib/FileManager/initFileManager.d.ts.map +1 -0
- package/lib/FileManager/initFileManager.js +231 -0
- package/lib/FileManager/initFileManager.ts +236 -0
- package/lib/FileManager/parseFile.d.ts +15 -0
- package/lib/FileManager/parseFile.d.ts.map +1 -0
- package/lib/FileManager/parseFile.js +58 -0
- package/lib/FileManager/parseFile.ts +69 -0
- package/lib/FileManager/upload.d.ts +6 -0
- package/lib/FileManager/upload.d.ts.map +1 -0
- package/lib/FileManager/upload.js +98 -0
- package/lib/FileManager/upload.ts +83 -0
- package/lib/FileManager/uploadStream.d.ts +5 -0
- package/lib/FileManager/uploadStream.d.ts.map +1 -0
- package/lib/FileManager/uploadStream.js +92 -0
- package/lib/FileManager/uploadStream.ts +80 -0
- package/lib/Filtering.d.ts +1 -1
- package/lib/Filtering.d.ts.map +1 -1
- package/lib/Filtering.ts +1 -1
- package/lib/JSONBValidation/validate_jsonb_schema_sql.ts +1 -1
- package/lib/Prostgles.d.ts +2 -2
- package/lib/Prostgles.d.ts.map +1 -1
- package/lib/Prostgles.js +8 -5
- package/lib/Prostgles.ts +10 -6
- package/lib/PublishParser.d.ts +13 -13
- package/lib/PublishParser.d.ts.map +1 -1
- package/lib/PublishParser.js +1 -0
- package/lib/PublishParser.ts +13 -12
- package/lib/TableConfig/TableConfig.d.ts.map +1 -1
- package/lib/TableConfig/TableConfig.js +12 -7
- package/lib/TableConfig/TableConfig.ts +13 -8
- package/package.json +3 -3
- package/tests/client/PID.txt +1 -1
- package/tests/client/index.d.ts.map +1 -1
- package/tests/client/index.ts +1 -3
- package/tests/client/package-lock.json +31 -4561
- package/tests/client/package.json +2 -2
- package/tests/client/tsconfig.json +1 -0
- package/tests/isomorphic_queries.d.ts.map +1 -1
- package/tests/isomorphic_queries.ts +3 -3
- package/tests/server/package-lock.json +13 -13
- package/tests/server/package.json +1 -1
- package/tests/server/tsconfig.json +1 -0
- package/tsconfig.json +3 -2
- package/lib/FileManager.d.ts.map +0 -1
- package/lib/FileManager.js +0 -676
- package/lib/FileManager.ts +0 -811
|
@@ -21,45 +21,17 @@ type ValidatedParams = {
|
|
|
21
21
|
fixIssues: boolean;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
export class TableHandler extends ViewHandler {
|
|
25
|
-
io_stats: {
|
|
26
|
-
throttle_queries_per_sec: number;
|
|
27
|
-
since: number,
|
|
28
|
-
queries: number,
|
|
29
|
-
batching: string[] | null
|
|
30
|
-
}
|
|
24
|
+
export class TableHandler extends ViewHandler {
|
|
31
25
|
|
|
32
26
|
constructor(db: DB, tableOrViewInfo: TableSchema, dboBuilder: DboBuilder, t?: pgPromise.ITask<{}>, dbTX?: TableHandlers, joinPaths?: JoinPaths) {
|
|
33
27
|
super(db, tableOrViewInfo, dboBuilder, t, dbTX, joinPaths);
|
|
34
28
|
|
|
35
29
|
this.remove = this.delete;
|
|
36
30
|
|
|
37
|
-
this.io_stats = {
|
|
38
|
-
since: Date.now(),
|
|
39
|
-
queries: 0,
|
|
40
|
-
throttle_queries_per_sec: 500,
|
|
41
|
-
batching: null
|
|
42
|
-
};
|
|
43
31
|
this.is_view = false;
|
|
44
32
|
this.is_media = dboBuilder.prostgles.isMedia(this.name)
|
|
45
33
|
}
|
|
46
34
|
|
|
47
|
-
/* TO DO: Maybe finished query batching */
|
|
48
|
-
willBatch(query: string) {
|
|
49
|
-
const now = Date.now();
|
|
50
|
-
if (this.io_stats.since < Date.now()) {
|
|
51
|
-
this.io_stats.since = Date.now();
|
|
52
|
-
this.io_stats.queries = 0;
|
|
53
|
-
} else {
|
|
54
|
-
this.io_stats.queries++;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
if (this.io_stats.queries > this.io_stats.throttle_queries_per_sec) {
|
|
58
|
-
|
|
59
|
-
return true;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
35
|
|
|
64
36
|
async updateBatch(data: [Filter, AnyObject][], params?: UpdateParams, tableRules?: TableRule, localParams?: LocalParams): Promise<any> {
|
|
65
37
|
try {
|
|
@@ -181,7 +153,7 @@ export class TableHandler extends ViewHandler {
|
|
|
181
153
|
}
|
|
182
154
|
|
|
183
155
|
/* External request. Cannot sync from server */
|
|
184
|
-
async sync(filter: Filter, params:
|
|
156
|
+
async sync(filter: Filter, params: { select?: FieldFilter }, param3_unused: undefined, table_rules: TableRule, localParams: LocalParams) {
|
|
185
157
|
if (!localParams) throw "Sync not allowed within the same server code";
|
|
186
158
|
const { socket } = localParams;
|
|
187
159
|
if (!socket) throw "INTERNAL ERROR: socket missing";
|
|
@@ -214,7 +186,7 @@ export class TableHandler extends ViewHandler {
|
|
|
214
186
|
throw `INTERNAL ERROR: sync field missing from publish.${this.name}.select.fields`;
|
|
215
187
|
}
|
|
216
188
|
const select = this.getAllowedSelectFields(
|
|
217
|
-
|
|
189
|
+
params?.select ?? "*",
|
|
218
190
|
allowedSelect,
|
|
219
191
|
false
|
|
220
192
|
);
|
|
@@ -4,7 +4,7 @@ import { TableRule } from "../PublishParser";
|
|
|
4
4
|
import { ViewSubscriptionOptions } from "../PubSubManager/PubSubManager";
|
|
5
5
|
import { ViewHandler } from "./ViewHandler";
|
|
6
6
|
type Args = {
|
|
7
|
-
selectParams: Omit<SubscribeParams
|
|
7
|
+
selectParams: Omit<SubscribeParams, "throttle">;
|
|
8
8
|
filter: Filter;
|
|
9
9
|
table_rules: TableRule<AnyObject, void> | undefined;
|
|
10
10
|
localParams: LocalParams | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSubscribeRelatedTables.d.ts","sourceRoot":"","sources":["getSubscribeRelatedTables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW,EAAwB,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAO,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE9E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,KAAK,IAAI,GAAG;IACV,YAAY,EAAE,IAAI,CAAC,eAAe,
|
|
1
|
+
{"version":3,"file":"getSubscribeRelatedTables.d.ts","sourceRoot":"","sources":["getSubscribeRelatedTables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW,EAAwB,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAO,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE9E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,KAAK,IAAI,GAAG;IACV,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC;IACpD,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,SAAS,CAAC;QAClB,MAAM,EAAE,kBAAkB,EAAE,CAAC;KAC9B,CAAC;CACH,CAAA;AACD,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,IAAI,oCAmKjJ"}
|
|
@@ -6,7 +6,7 @@ import { NewQuery } from "./QueryBuilder/QueryBuilder";
|
|
|
6
6
|
import { ViewHandler } from "./ViewHandler";
|
|
7
7
|
|
|
8
8
|
type Args = {
|
|
9
|
-
selectParams: Omit<SubscribeParams
|
|
9
|
+
selectParams: Omit<SubscribeParams, "throttle">;
|
|
10
10
|
filter: Filter;
|
|
11
11
|
table_rules: TableRule<AnyObject, void> | undefined;
|
|
12
12
|
localParams: LocalParams | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseUpdateRules.d.ts","sourceRoot":"","sources":["parseUpdateRules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"parseUpdateRules.d.ts","sourceRoot":"","sources":["parseUpdateRules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAyB,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,SAAS,EAAc,WAAW,EAAqB,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,EAClB,MAAM,CAAC,EAAE,YAAY,EACrB,UAAU,CAAC,EAAE,SAAS,EACtB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC;IACT,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iBAAiB,EAAE,SAAS,CAAC;IAC7B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,eAAe,EAAE,WAAW,CAAC;IAC7B,YAAY,CAAC,EAAE,WAAW,CAAC;CAC5B,CAAC,CA2ID"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AnyObject, FieldFilter, isDefined, UpdateParams } from "prostgles-types";
|
|
1
|
+
import { AnyObject, FieldFilter, FullFilter, isDefined, UpdateParams } from "prostgles-types";
|
|
2
2
|
import { Filter, LocalParams } from "../DboBuilder";
|
|
3
3
|
import { TableRule, UpdateRule, ValidateRow, ValidateUpdateRow } from "../PublishParser";
|
|
4
4
|
import { TableHandler } from "./TableHandler";
|
|
@@ -100,7 +100,7 @@ export async function parseUpdateRules(
|
|
|
100
100
|
/** Pick dynamicFields.fields if matching filter */
|
|
101
101
|
let matchedRule: Required<UpdateRule>["dynamicFields"][number] | undefined;
|
|
102
102
|
for await (const dfRule of tableRules.update.dynamicFields) {
|
|
103
|
-
const match = await this.findOne({ $and: [finalUpdateFilter, dfRule.filter].filter(isDefined) });
|
|
103
|
+
const match = await this.findOne({ $and: ([finalUpdateFilter, dfRule.filter] as AnyObject[]).filter(isDefined) });
|
|
104
104
|
|
|
105
105
|
if (match) {
|
|
106
106
|
|
package/lib/DboBuilder.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DboBuilder.d.ts","sourceRoot":"","sources":["DboBuilder.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,SAAS,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,GAAG,QAAQ,iCAAiC,CAAC,CAAC;AACvD,OAAO,EACL,UAAU,EAAE,UAAU,EACtB,WAAW,EACX,uBAAuB,EACvB,WAAW,EACX,SAAS,IAAI,KAAK,EAClB,UAAU,EACV,SAAS,EAGU,cAAc,EAAiB,UAAU,EAC7D,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,GAAG,CAAC;IACH,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG;IACF,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC;AAE9E,MAAM,MAAM,KAAK,GAAG;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC,CAAA;AAED,MAAM,MAAM,IAAI,CAAC,EAAE,GAAG,aAAa,IAAI;IACrC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;CAC/E,CAAA;AACD,MAAM,MAAM,EAAE,CAAC,EAAE,GAAG,aAAa,IAAI;IACnC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;CACtC,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC;CACrD,CAAA;AAED,MAAM,MAAM,eAAe,CAAC,EAAE,GAAG,aAAa,IAC5C,EAAE,GACF,OAAO,CAAC,WAAW,CAAC,GAAG;IACrB,GAAG,CAAC,EAAE,UAAU,CAAA;CACjB,GAAG;IACF,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;CACZ,CAAA;
|
|
1
|
+
{"version":3,"file":"DboBuilder.d.ts","sourceRoot":"","sources":["DboBuilder.ts"],"names":[],"mappings":"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"}
|
package/lib/DboBuilder.js
CHANGED
|
@@ -32,19 +32,6 @@ const Bluebird = __importStar(require("bluebird"));
|
|
|
32
32
|
const pgPromise = __importStar(require("pg-promise"));
|
|
33
33
|
const runSQL_1 = require("./DboBuilder/runSQL");
|
|
34
34
|
const prostgles_types_1 = require("prostgles-types");
|
|
35
|
-
// export const getFilterFields = (f: Filter | any, $and_key: string, $or_key: string, prevFields: string[] = []): string[] => {
|
|
36
|
-
// if(Array.isArray(f)){
|
|
37
|
-
// return f.flatMap(_f => getFilterFields(_f, $and_key, $or_key, prevFields) );
|
|
38
|
-
// }
|
|
39
|
-
// if($and_key in f && Array.isArray(f[$and_key]) ){
|
|
40
|
-
// return f[$and_key].flatMap((_f: any) => getFilterFields(_f, $and_key, $or_key, prevFields) );
|
|
41
|
-
// } else if($or_key in f && Array.isArray(f[$or_key]) ){
|
|
42
|
-
// return f[$or_key].flatMap((_f: any) => getFilterFields(_f, $and_key, $or_key, prevFields) );
|
|
43
|
-
// } else if(isObject(f)){
|
|
44
|
-
// const filter:
|
|
45
|
-
// }
|
|
46
|
-
// return []
|
|
47
|
-
// }
|
|
48
35
|
const utils_1 = require("./utils");
|
|
49
36
|
const PubSubManager_1 = require("./PubSubManager/PubSubManager");
|
|
50
37
|
const ViewHandler_1 = require("./DboBuilder/ViewHandler");
|
package/lib/DboBuilder.ts
CHANGED
|
@@ -69,22 +69,7 @@ export type DBHandlerServer<TH = TableHandlers> =
|
|
|
69
69
|
} & {
|
|
70
70
|
tx?: TX<TH>
|
|
71
71
|
}
|
|
72
|
-
|
|
73
|
-
// export const getFilterFields = (f: Filter | any, $and_key: string, $or_key: string, prevFields: string[] = []): string[] => {
|
|
74
|
-
// if(Array.isArray(f)){
|
|
75
|
-
// return f.flatMap(_f => getFilterFields(_f, $and_key, $or_key, prevFields) );
|
|
76
|
-
// }
|
|
77
|
-
// if($and_key in f && Array.isArray(f[$and_key]) ){
|
|
78
|
-
// return f[$and_key].flatMap((_f: any) => getFilterFields(_f, $and_key, $or_key, prevFields) );
|
|
79
|
-
// } else if($or_key in f && Array.isArray(f[$or_key]) ){
|
|
80
|
-
// return f[$or_key].flatMap((_f: any) => getFilterFields(_f, $and_key, $or_key, prevFields) );
|
|
81
|
-
// } else if(isObject(f)){
|
|
82
|
-
// const filter:
|
|
83
|
-
// }
|
|
84
|
-
|
|
85
|
-
// return []
|
|
86
|
-
// }
|
|
87
|
-
|
|
72
|
+
|
|
88
73
|
|
|
89
74
|
import { clone } from "./utils";
|
|
90
75
|
import { FieldSpec, } from "./DboBuilder/QueryBuilder/Functions";
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
/// <reference types="node" />
|
|
3
3
|
import { S3 } from 'aws-sdk';
|
|
4
4
|
import * as stream from 'stream';
|
|
5
|
-
import { DB, DBHandlerServer, ExpressApp, Prostgles } from '
|
|
5
|
+
import { DB, DBHandlerServer, ExpressApp, Prostgles } from '../Prostgles';
|
|
6
6
|
import { ALLOWED_CONTENT_TYPE, ALLOWED_EXTENSION, ValidatedColumnInfo } from 'prostgles-types';
|
|
7
|
+
import AWS from 'aws-sdk';
|
|
8
|
+
export declare const HOUR: number;
|
|
7
9
|
export declare const asSQLIdentifier: (name: string, db: DB) => Promise<string>;
|
|
8
|
-
type OnProgress = (progress: S3.ManagedUpload.Progress) => void;
|
|
10
|
+
export type OnProgress = (progress: S3.ManagedUpload.Progress) => void;
|
|
9
11
|
export type ImageOptions = {
|
|
10
12
|
keepMetadata?: boolean;
|
|
11
13
|
compression?:
|
|
@@ -65,8 +67,7 @@ export type UploadedItem = {
|
|
|
65
67
|
*/
|
|
66
68
|
content_length: number;
|
|
67
69
|
};
|
|
68
|
-
|
|
69
|
-
export default class FileManager {
|
|
70
|
+
export declare class FileManager {
|
|
70
71
|
static testCredentials: (accessKeyId: string, secretAccessKey: string) => Promise<import("aws-sdk/lib/request").PromiseResult<AWS.STS.GetCallerIdentityResponse, AWS.AWSError>>;
|
|
71
72
|
s3Client?: S3;
|
|
72
73
|
config: S3Config | LocalConfig;
|
|
@@ -75,25 +76,17 @@ export default class FileManager {
|
|
|
75
76
|
get dbo(): DBHandlerServer;
|
|
76
77
|
get db(): DB;
|
|
77
78
|
tableName?: string;
|
|
78
|
-
|
|
79
|
+
fileRoute?: string;
|
|
79
80
|
get fileRouteExpress(): string;
|
|
80
81
|
private checkInterval?;
|
|
81
82
|
constructor(config: FileManager["config"], imageOptions?: ImageOptions);
|
|
82
83
|
getFileStream(name: string): Promise<stream.Readable>;
|
|
83
84
|
deleteFile(name: string): Promise<true | import("aws-sdk/lib/request").PromiseResult<S3.DeleteObjectOutput, AWS.AWSError>>;
|
|
84
|
-
parseFile
|
|
85
|
-
|
|
86
|
-
fileName: string;
|
|
87
|
-
colName?: string;
|
|
88
|
-
tableName?: string;
|
|
89
|
-
}): Promise<{
|
|
90
|
-
mime: string | ALLOWED_CONTENT_TYPE;
|
|
91
|
-
ext: string | ALLOWED_EXTENSION;
|
|
92
|
-
}>;
|
|
93
|
-
getFileUrl: (name: string) => string;
|
|
85
|
+
parseFile: any;
|
|
86
|
+
getLocalFileUrl: (name: string) => string;
|
|
94
87
|
checkFreeSpace: (folderPath: string, fileSize?: number) => Promise<void>;
|
|
95
|
-
uploadStream:
|
|
96
|
-
|
|
88
|
+
uploadStream: any;
|
|
89
|
+
upload: any;
|
|
97
90
|
uploadAsMedia: (params: {
|
|
98
91
|
item: UploadItem;
|
|
99
92
|
allowedExtensions?: Array<ALLOWED_EXTENSION>;
|
|
@@ -101,12 +94,12 @@ export default class FileManager {
|
|
|
101
94
|
imageOptions?: ImageOptions;
|
|
102
95
|
}) => Promise<UploadedItem>;
|
|
103
96
|
getFileS3URL(fileName: string, expiresInSeconds?: number): Promise<string>;
|
|
104
|
-
|
|
97
|
+
parseSQLIdentifier: (name: string) => Promise<string>;
|
|
105
98
|
getColInfo: (args: {
|
|
106
99
|
tableName: string;
|
|
107
100
|
colName: string;
|
|
108
101
|
}) => ValidatedColumnInfo["file"] | undefined;
|
|
109
|
-
init:
|
|
102
|
+
init: any;
|
|
110
103
|
destroy: () => void;
|
|
111
104
|
}
|
|
112
105
|
export declare const removeExpressRoute: (app: ExpressApp | undefined, routePaths: (string | undefined)[]) => void;
|
|
@@ -119,7 +112,6 @@ export declare const getFileType: (file: Buffer | string, fileName: string) => P
|
|
|
119
112
|
ext: ALLOWED_EXTENSION;
|
|
120
113
|
}>;
|
|
121
114
|
export declare function bytesToSize(bytes: number): string;
|
|
122
|
-
export {};
|
|
123
115
|
/**
|
|
124
116
|
*
|
|
125
117
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileManager.d.ts","sourceRoot":"","sources":["FileManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,303 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.bytesToSize = exports.getFileType = exports.getFileTypeFromFilename = exports.removeExpressRoute = exports.FileManager = exports.asSQLIdentifier = exports.HOUR = void 0;
|
|
30
|
+
const aws_sdk_1 = require("aws-sdk");
|
|
31
|
+
// import { PutObjectCommand, S3 } from "@aws-sdk/client-s3";
|
|
32
|
+
const fs = __importStar(require("fs"));
|
|
33
|
+
const sharp = __importStar(require("sharp"));
|
|
34
|
+
const check_disk_space_1 = __importDefault(require("check-disk-space"));
|
|
35
|
+
const prostgles_types_1 = require("prostgles-types");
|
|
36
|
+
const aws_sdk_2 = __importDefault(require("aws-sdk"));
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const initFileManager_1 = require("./initFileManager");
|
|
39
|
+
const parseFile_1 = require("./parseFile");
|
|
40
|
+
const upload_1 = require("./upload");
|
|
41
|
+
const uploadStream_1 = require("./uploadStream");
|
|
42
|
+
exports.HOUR = 3600 * 1000;
|
|
43
|
+
const asSQLIdentifier = async (name, db) => {
|
|
44
|
+
return (await db.one("select format('%I', $1) as name", [name]))?.name;
|
|
45
|
+
};
|
|
46
|
+
exports.asSQLIdentifier = asSQLIdentifier;
|
|
47
|
+
class FileManager {
|
|
48
|
+
static testCredentials = async (accessKeyId, secretAccessKey) => {
|
|
49
|
+
const sts = new aws_sdk_2.default.STS();
|
|
50
|
+
aws_sdk_2.default.config.credentials = {
|
|
51
|
+
accessKeyId,
|
|
52
|
+
secretAccessKey
|
|
53
|
+
};
|
|
54
|
+
const ident = await sts.getCallerIdentity({}).promise();
|
|
55
|
+
return ident;
|
|
56
|
+
};
|
|
57
|
+
s3Client;
|
|
58
|
+
config;
|
|
59
|
+
imageOptions;
|
|
60
|
+
prostgles;
|
|
61
|
+
get dbo() {
|
|
62
|
+
if (!this.prostgles?.dbo) {
|
|
63
|
+
// this.prostgles?.refreshDBO();
|
|
64
|
+
throw "this.prostgles.dbo missing";
|
|
65
|
+
}
|
|
66
|
+
return this.prostgles.dbo;
|
|
67
|
+
}
|
|
68
|
+
get db() {
|
|
69
|
+
if (!this.prostgles?.db)
|
|
70
|
+
throw "this.prostgles.db missing";
|
|
71
|
+
return this.prostgles.db;
|
|
72
|
+
}
|
|
73
|
+
tableName;
|
|
74
|
+
fileRoute;
|
|
75
|
+
get fileRouteExpress() {
|
|
76
|
+
return this.fileRoute + "/:name";
|
|
77
|
+
}
|
|
78
|
+
checkInterval;
|
|
79
|
+
constructor(config, imageOptions) {
|
|
80
|
+
this.config = config;
|
|
81
|
+
this.imageOptions = imageOptions;
|
|
82
|
+
if ("region" in config) {
|
|
83
|
+
const { region, accessKeyId, secretAccessKey } = config;
|
|
84
|
+
this.s3Client = new aws_sdk_1.S3({
|
|
85
|
+
region,
|
|
86
|
+
credentials: { accessKeyId, secretAccessKey },
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
const fullConfig = this.prostgles?.opts.fileTable;
|
|
90
|
+
if (fullConfig?.delayedDelete) {
|
|
91
|
+
this.checkInterval = setInterval(async () => {
|
|
92
|
+
const fileTable = fullConfig.tableName;
|
|
93
|
+
const daysDelay = fullConfig.delayedDelete?.deleteAfterNDays ?? 0;
|
|
94
|
+
if (fileTable && this.dbo[fileTable]?.delete && daysDelay) {
|
|
95
|
+
const filesToDelete = await this.dbo[fileTable]?.find?.({ deleted_from_storage: null, deleted: { ">": Date.now() - (daysDelay * exports.HOUR * 24) } }) ?? [];
|
|
96
|
+
for await (const file of filesToDelete) {
|
|
97
|
+
await this.deleteFile(file.name);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
console.error("FileManager checkInterval delayedDelete FAIL: Could not access file table tableHandler.delete()");
|
|
102
|
+
}
|
|
103
|
+
}, Math.max(10000, (fullConfig.delayedDelete.checkIntervalHours || 0) * exports.HOUR));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
async getFileStream(name) {
|
|
107
|
+
if ("bucket" in this.config && this.s3Client) {
|
|
108
|
+
return this.s3Client.getObject({ Key: name, Bucket: this.config.bucket }).createReadStream();
|
|
109
|
+
}
|
|
110
|
+
else if ("localFolderPath" in this.config) {
|
|
111
|
+
const filePath = path.resolve(`${this.config.localFolderPath}/${name}`);
|
|
112
|
+
if (!fs.existsSync(filePath)) {
|
|
113
|
+
throw `File ${filePath} could not be found`;
|
|
114
|
+
}
|
|
115
|
+
return fs.createReadStream(filePath, { encoding: undefined });
|
|
116
|
+
}
|
|
117
|
+
else
|
|
118
|
+
throw new Error("Not expected");
|
|
119
|
+
}
|
|
120
|
+
async deleteFile(name) {
|
|
121
|
+
if ("bucket" in this.config && this.s3Client) {
|
|
122
|
+
const res = await this.s3Client?.deleteObject({ Bucket: this.config.bucket, Key: name }).promise();
|
|
123
|
+
return res;
|
|
124
|
+
}
|
|
125
|
+
else if ("localFolderPath" in this.config) {
|
|
126
|
+
const path = `${this.config.localFolderPath}/${name}`;
|
|
127
|
+
if (!fs.existsSync(path)) {
|
|
128
|
+
throw `File ${path} could not be found`;
|
|
129
|
+
}
|
|
130
|
+
fs.unlinkSync(path);
|
|
131
|
+
if (fs.existsSync(path))
|
|
132
|
+
throw new Error("Could not delete file");
|
|
133
|
+
}
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
parseFile = parseFile_1.parseFile.bind(this);
|
|
137
|
+
getLocalFileUrl = (name) => this.fileRoute ? `${this.fileRoute}/${name}` : "";
|
|
138
|
+
checkFreeSpace = async (folderPath, fileSize = 0) => {
|
|
139
|
+
if (!this.s3Client && "localFolderPath" in this.config) {
|
|
140
|
+
const { minFreeBytes = 1.048e6 } = this.config;
|
|
141
|
+
const required = Math.max(fileSize, minFreeBytes);
|
|
142
|
+
if (required) {
|
|
143
|
+
const diskSpace = await (0, check_disk_space_1.default)(folderPath);
|
|
144
|
+
if (diskSpace.free < required) {
|
|
145
|
+
const err = `There is not enough space on the server to save files.\nTotal: ${bytesToSize(diskSpace.size)} \nRemaning: ${bytesToSize(diskSpace.free)} \nRequired: ${bytesToSize(required)}`;
|
|
146
|
+
throw new Error(err);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
uploadStream = uploadStream_1.uploadStream.bind(this);
|
|
152
|
+
upload = upload_1.upload.bind(this);
|
|
153
|
+
uploadAsMedia = async (params) => {
|
|
154
|
+
const { item, imageOptions } = params;
|
|
155
|
+
const { name, data, content_type, extension } = item;
|
|
156
|
+
if (!data)
|
|
157
|
+
throw "No file provided";
|
|
158
|
+
if (!name || typeof name !== "string")
|
|
159
|
+
throw "Expecting a string name";
|
|
160
|
+
// const type = await this.getMIME(data, name, allowedExtensions, dissallowedExtensions);
|
|
161
|
+
let _data = data;
|
|
162
|
+
/** Resize/compress/remove exif from photos */
|
|
163
|
+
if (content_type.startsWith("image") && extension.toLowerCase() !== "gif") {
|
|
164
|
+
const compression = imageOptions?.compression;
|
|
165
|
+
if (compression) {
|
|
166
|
+
console.log("Resizing image");
|
|
167
|
+
let opts;
|
|
168
|
+
if ("contain" in compression) {
|
|
169
|
+
opts = {
|
|
170
|
+
fit: sharp.fit.contain,
|
|
171
|
+
...compression.contain
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
else if ("inside" in compression) {
|
|
175
|
+
opts = {
|
|
176
|
+
fit: sharp.fit.inside,
|
|
177
|
+
...compression.inside
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
_data = await sharp(data)
|
|
181
|
+
.resize(opts)
|
|
182
|
+
.withMetadata(Boolean(imageOptions?.keepMetadata))
|
|
183
|
+
// .jpeg({ quality: 80 })
|
|
184
|
+
.toBuffer();
|
|
185
|
+
}
|
|
186
|
+
else if (!imageOptions?.keepMetadata) {
|
|
187
|
+
/**
|
|
188
|
+
* Remove exif
|
|
189
|
+
*/
|
|
190
|
+
// const metadata = await simg.metadata();
|
|
191
|
+
// const simg = await sharp(data);
|
|
192
|
+
_data = await sharp(data).clone().withMetadata({
|
|
193
|
+
exif: {}
|
|
194
|
+
})
|
|
195
|
+
.toBuffer();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
const res = await this.upload(_data, name, content_type);
|
|
199
|
+
return res;
|
|
200
|
+
};
|
|
201
|
+
async getFileS3URL(fileName, expiresInSeconds = 30 * 60) {
|
|
202
|
+
const params = {
|
|
203
|
+
Bucket: this.config.bucket,
|
|
204
|
+
Key: fileName,
|
|
205
|
+
Expires: Math.round(expiresInSeconds || 30 * 60) // Error if float
|
|
206
|
+
};
|
|
207
|
+
return await this.s3Client?.getSignedUrlPromise("getObject", params);
|
|
208
|
+
}
|
|
209
|
+
parseSQLIdentifier = async (name) => (0, exports.asSQLIdentifier)(name, this.prostgles.db); // this.prostgles.dbo.sql<"value">("select format('%I', $1)", [name], { returnType: "value" } )
|
|
210
|
+
getColInfo = (args) => {
|
|
211
|
+
const { colName, tableName } = args;
|
|
212
|
+
const tableConfig = this.prostgles?.opts.fileTable?.referencedTables?.[tableName];
|
|
213
|
+
const isReferencingFileTable = this.dbo[tableName]?.columns?.some(c => c.name === colName && c.references && c.references?.some(({ ftable }) => ftable === this.tableName));
|
|
214
|
+
if (isReferencingFileTable) {
|
|
215
|
+
if (tableConfig && typeof tableConfig !== "string") {
|
|
216
|
+
return tableConfig.referenceColumns[colName];
|
|
217
|
+
}
|
|
218
|
+
return { acceptedContent: "*" };
|
|
219
|
+
}
|
|
220
|
+
return undefined;
|
|
221
|
+
};
|
|
222
|
+
init = initFileManager_1.initFileManager.bind(this);
|
|
223
|
+
destroy = () => {
|
|
224
|
+
(0, exports.removeExpressRoute)(this.prostgles?.opts.fileTable?.expressApp, [this.fileRouteExpress]);
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
exports.FileManager = FileManager;
|
|
228
|
+
const removeExpressRoute = (app, routePaths) => {
|
|
229
|
+
const routes = app?._router?.stack;
|
|
230
|
+
if (routes) {
|
|
231
|
+
routes.forEach((route, i) => {
|
|
232
|
+
if (routePaths.filter(prostgles_types_1.isDefined).includes(route.route?.path)) {
|
|
233
|
+
routes.splice(i, 1);
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
exports.removeExpressRoute = removeExpressRoute;
|
|
239
|
+
const getFileTypeFromFilename = (fileName) => {
|
|
240
|
+
const nameParts = fileName.split(".");
|
|
241
|
+
if (nameParts.length < 2)
|
|
242
|
+
return undefined;
|
|
243
|
+
const nameExt = nameParts.at(-1).toLowerCase(), mime = (0, prostgles_types_1.getKeys)(prostgles_types_1.CONTENT_TYPE_TO_EXT).find(k => prostgles_types_1.CONTENT_TYPE_TO_EXT[k].includes(nameExt));
|
|
244
|
+
if (!mime)
|
|
245
|
+
return undefined;
|
|
246
|
+
return {
|
|
247
|
+
mime,
|
|
248
|
+
ext: nameExt,
|
|
249
|
+
};
|
|
250
|
+
};
|
|
251
|
+
exports.getFileTypeFromFilename = getFileTypeFromFilename;
|
|
252
|
+
// const fileType = require("file-type");
|
|
253
|
+
// const res = await fileType.fromBuffer(typeof file === "string"? Buffer.from(file, 'utf8') : file);
|
|
254
|
+
const getFileType = async (file, fileName) => {
|
|
255
|
+
const { fileTypeFromBuffer } = await eval('import("file-type")');
|
|
256
|
+
const fileNameMime = (0, exports.getFileTypeFromFilename)(fileName);
|
|
257
|
+
if (!fileNameMime?.ext)
|
|
258
|
+
throw new Error("File name must contain extenion");
|
|
259
|
+
const res = await fileTypeFromBuffer(typeof file === "string" ? Buffer.from(file, 'utf8') : file);
|
|
260
|
+
if (!res) {
|
|
261
|
+
/* Set correct/missing extension */
|
|
262
|
+
const nameExt = fileNameMime?.ext;
|
|
263
|
+
if (["xml", "txt", "csv", "tsv", "svg", "sql"].includes(nameExt) && fileNameMime.mime) {
|
|
264
|
+
return fileNameMime;
|
|
265
|
+
}
|
|
266
|
+
throw new Error("Could not get the file type from file buffer");
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
if (!res.ext || fileNameMime?.ext.toLowerCase() !== res.ext.toLowerCase()) {
|
|
270
|
+
throw new Error(`There is a mismatch between file name extension and actual buffer extension: ${fileNameMime?.ext} vs ${res.ext}`);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return res;
|
|
274
|
+
};
|
|
275
|
+
exports.getFileType = getFileType;
|
|
276
|
+
function bytesToSize(bytes) {
|
|
277
|
+
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
|
|
278
|
+
if (bytes == 0)
|
|
279
|
+
return '0 Byte';
|
|
280
|
+
const i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)) + "");
|
|
281
|
+
return (bytes / Math.pow(1024, i)).toFixed(1) + ' ' + sizes[i];
|
|
282
|
+
}
|
|
283
|
+
exports.bytesToSize = bytesToSize;
|
|
284
|
+
/**
|
|
285
|
+
*
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
// if(content_type && typeof content_type !== "string") throw "Invalid content_type provided";
|
|
289
|
+
// if(title && typeof title !== "string") throw "Invalid title provided";
|
|
290
|
+
// let fExt = name.split(".").pop()
|
|
291
|
+
// if(content_type && name.split(".").length > 1 && fExt && fExt.length <= 4){
|
|
292
|
+
// type = {
|
|
293
|
+
// mime: content_type,
|
|
294
|
+
// ext: fExt,
|
|
295
|
+
// fileName: name,
|
|
296
|
+
// }
|
|
297
|
+
// } else {
|
|
298
|
+
// type = await this.getMIME(data, name);//, ["png", "jpg", "ogg", "webm", "pdf", "doc"]);
|
|
299
|
+
// }
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
*/
|