@tblabs/storage 5.15.3 → 5.15.4

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.
@@ -1,6 +1,4 @@
1
- import { IStorageUserPrivileges } from "../../Models/IStorageUserPrivileges";
2
1
  export interface IRepos<T> {
3
- CanUserDo(action: keyof IStorageUserPrivileges): boolean;
4
2
  Add(dataset: string, id: string, item: T): Promise<void>;
5
3
  GetAll(dataset: string): Promise<T[]>;
6
4
  GetOne(dataset: string, id: string): Promise<T | null>;
@@ -1 +1,2 @@
1
+ // import { IStorageUserPrivileges } from "../../Models/IStorageUserPrivileges";
1
2
  export {};
@@ -0,0 +1,20 @@
1
+ import { IConverter } from "../../Converters/IConverter";
2
+ import { IRepos } from "./IRepos";
3
+ import { OnlineStorage } from "../../Services/OnlineStorage";
4
+ import { dir } from "../../Types/dir";
5
+ export declare class ObjectDatasets<T extends object> implements IRepos<T> {
6
+ private _db;
7
+ private datasets;
8
+ private _converter;
9
+ constructor(_db: OnlineStorage, datasets: dir[], _converter?: IConverter<any, T>);
10
+ get Names(): string[];
11
+ get Database(): OnlineStorage;
12
+ GetOne(dataset: dir, id: string): Promise<T>;
13
+ GetAll(dataset: dir): Promise<T[]>;
14
+ GetAllIds(dataset: dir): Promise<string[]>;
15
+ Add(dataset: dir, id: string, item: T): Promise<void>;
16
+ Update(dataset: dir, id: string, item: T): Promise<void>;
17
+ Move(id: string, sourceDataset: dir, targetDataset: dir): Promise<void>;
18
+ Delete(dataset: dir, id: string): Promise<void>;
19
+ Drop(datasets?: dir[]): Promise<void>;
20
+ }
@@ -0,0 +1,161 @@
1
+ import { DropDatasetCommand } from "../../Messages/DropDatasetCommand";
2
+ import { MoveObjectCommand } from "../../Messages/MoveObjectCommand";
3
+ import { DummyConverter } from "../../Converters/DummyConverter";
4
+ import { AddObjectCommand } from "../../Messages/AddObjectCommand";
5
+ import { UpdateObjectCommand } from "../../Messages/UpdateObjectCommand";
6
+ import { ListObjectsIdsQuery } from "../../Messages/ListObjectsIdsQuery";
7
+ import { ListObjectsQuery } from "../../Messages/ListObjectsQuery";
8
+ import { GetObjectQuery } from "../../Messages/GetObjectQuery";
9
+ import { DeleteObjectCommand } from "../../Messages/DeleteObjectCommand";
10
+ export class ObjectDatasets {
11
+ _db;
12
+ datasets;
13
+ _converter;
14
+ constructor(_db, datasets, _converter = new DummyConverter()) {
15
+ this._db = _db;
16
+ this.datasets = datasets;
17
+ this._converter = _converter;
18
+ if (datasets.length <= 1) {
19
+ throw new Error("Datasets must have at least 2 datasets. If one - use ObjectDataset<T> instead.");
20
+ }
21
+ }
22
+ get Names() {
23
+ return this.datasets;
24
+ }
25
+ get Database() {
26
+ return this._db;
27
+ }
28
+ // public CanUserDo(action: keyof IStorageUserPrivileges): boolean
29
+ // {
30
+ // if (!this._db.User.Privileges)
31
+ // {
32
+ // return false;
33
+ // }
34
+ // const privilege = this._db.User.Privileges[action];
35
+ // if (!privilege)
36
+ // {
37
+ // return false;
38
+ // }
39
+ // // ex. AddFile: { Datasets: "all" } or AddFile: { Datasets: ["Public"] }
40
+ // if (typeof privilege === "object")
41
+ // {
42
+ // const allowedDatasets = privilege.Datasets;
43
+ // // ex. AddFile: { Datasets: "all" }
44
+ // if (typeof allowedDatasets === "string")
45
+ // {
46
+ // if (allowedDatasets == "all")
47
+ // {
48
+ // return true;
49
+ // }
50
+ // else if (allowedDatasets == "none")
51
+ // {
52
+ // return false;
53
+ // }
54
+ // else
55
+ // {
56
+ // return false;
57
+ // }
58
+ // }
59
+ // // ex. AddFile: { Datasets: ["Public"] }
60
+ // else if (typeof allowedDatasets === "object")
61
+ // {
62
+ // if (Array.isArray(allowedDatasets))
63
+ // {
64
+ // for (const dataset of this.datasets)
65
+ // {
66
+ // if (allowedDatasets.includes(dataset))
67
+ // {
68
+ // return true;
69
+ // }
70
+ // }
71
+ // return false;
72
+ // }
73
+ // }
74
+ // }
75
+ // // ex. CreateUser: true
76
+ // else if (typeof privilege === "boolean")
77
+ // {
78
+ // return privilege;
79
+ // }
80
+ // return false;
81
+ // }
82
+ async GetOne(dataset, id) {
83
+ this._db.Log(`Fetching "${id}" from "${dataset}"...`);
84
+ const queryResult = await this._db.Send(new GetObjectQuery(this._db.DatabaseDir, dataset, id));
85
+ if (!queryResult.IsSuccess) {
86
+ throw new Error("Failed to get one object: " + queryResult.ErrorMessage);
87
+ }
88
+ const rawItem = queryResult.Result;
89
+ const item = this._converter.FromRaw(rawItem);
90
+ this._db.Log(`Fetched "${id}" from "${dataset}".`);
91
+ return item;
92
+ }
93
+ async GetAll(dataset) {
94
+ this._db.Log(`Fetching all from "${dataset}"...`);
95
+ const queryResult = await this._db.Send(new ListObjectsQuery(this._db.DatabaseDir, dataset));
96
+ if (!queryResult.IsSuccess) {
97
+ throw new Error("Failed to fetch all objects: " + queryResult.ErrorMessage);
98
+ }
99
+ const rawItems = queryResult.Result;
100
+ const items = rawItems.map((raw) => this._converter.FromRaw(raw));
101
+ this._db.Log(`Fetched ${items.length} items from "${dataset}".`);
102
+ return items;
103
+ }
104
+ async GetAllIds(dataset) {
105
+ this._db.Log(`Fetching all objects IDs from "${dataset}"...`);
106
+ const queryResult = await this._db.Send(new ListObjectsIdsQuery(this._db.DatabaseDir, dataset));
107
+ if (!queryResult.IsSuccess) {
108
+ throw new Error("Failed to fetch all objects ids: " + queryResult.ErrorMessage);
109
+ }
110
+ const ids = queryResult.Result;
111
+ this._db.Log(`Found ${ids.length} objects in "${dataset}".`);
112
+ return ids;
113
+ }
114
+ async Add(dataset, id, item) {
115
+ this._db.Log(`Adding "${id}" to "${dataset}"...`);
116
+ const rawItem = this._converter.ToRaw(item);
117
+ const result = await this._db.Send(new AddObjectCommand(this._db.DatabaseDir, dataset, id, rawItem));
118
+ if (!result.IsSuccess) {
119
+ throw new Error("Failed to add item: " + result.ErrorMessage);
120
+ }
121
+ this._db.Log(`"${id}" added to "${dataset}".`);
122
+ }
123
+ ;
124
+ async Update(dataset, id, item) {
125
+ this._db.Log(`Updating "${id}"...`);
126
+ const rawItem = this._converter.ToRaw(item);
127
+ const result = await this._db.Send(new UpdateObjectCommand(this._db.DatabaseDir, dataset, id, rawItem));
128
+ if (!result.IsSuccess) {
129
+ throw new Error("Failed to update item: " + result.ErrorMessage);
130
+ }
131
+ this._db.Log(`"${id}" updated in "${dataset}".`);
132
+ }
133
+ ;
134
+ async Move(id, sourceDataset, targetDataset) {
135
+ this._db.Log(`Moving "${id}" from "${sourceDataset}" to "${targetDataset}"...`);
136
+ const result = await this._db.Send(new MoveObjectCommand(this._db.DatabaseDir, id, sourceDataset, targetDataset));
137
+ if (!result.IsSuccess) {
138
+ throw new Error("Failed to move item: " + result.ErrorMessage);
139
+ }
140
+ this._db.Log(`"${id}" moved from "${sourceDataset}" to "${targetDataset}".`);
141
+ }
142
+ async Delete(dataset, id) {
143
+ this._db.Log(`Deleting "${id}" from "${dataset}"...`);
144
+ const result = await this._db.Send(new DeleteObjectCommand(this._db.DatabaseDir, dataset, id));
145
+ if (!result.IsSuccess) {
146
+ throw new Error("Failed to delete object: " + result.ErrorMessage);
147
+ }
148
+ this._db.Log(`Deleted "${id}" from "${dataset}".`);
149
+ }
150
+ async Drop(datasets) {
151
+ this._db.Log(`Dropping "${(datasets ? datasets.join(", ") : "all")}" datasets...`);
152
+ for (const dataset of datasets ?? this.datasets) {
153
+ const result = await this._db.Send(new DropDatasetCommand(this._db.DatabaseDir, dataset));
154
+ if (!result.IsSuccess) {
155
+ throw new Error("Failed to drop dataset: " + result.ErrorMessage);
156
+ }
157
+ this._db.Log(`"${dataset}" dropped.`);
158
+ }
159
+ ;
160
+ }
161
+ }
@@ -17,6 +17,7 @@ import { PictureDataset } from "../Datasets/Picture/PictureDataset";
17
17
  import { PicsConfig } from "../Datasets/Picture/PicsConfig";
18
18
  import { FileDataset } from "../Datasets/File/FileDataset";
19
19
  import { FilesUploadConfig } from "../Models/FilesUploadConfig";
20
+ import { ObjectDatasets } from "../Datasets/Object/ObjectDatasets";
20
21
  export declare class OnlineStorage {
21
22
  private server;
22
23
  private database;
@@ -41,6 +42,7 @@ export declare class OnlineStorage {
41
42
  UpdateUser(user: IStorageUser): Promise<void>;
42
43
  DeleteUser(user: IStorageUser): Promise<void>;
43
44
  GetObjectDataset<T extends object>(datasetName: string, converter?: IConverter<any, T>): ObjectDataset<T>;
45
+ GetObjectDatasets<T extends object>(datasestNames: string[], converter?: IConverter<any, T>): ObjectDatasets<T>;
44
46
  GetTextDataset(datasetName: string, converter?: ITextConverter<any>): TextDataset<any> | RawTextDataset;
45
47
  GetPictureDataset(datasetName: string, picsConfig?: PicsConfig): PictureDataset;
46
48
  GetFileDataset(datasetName: string, config?: Partial<FilesUploadConfig>): FileDataset;
@@ -20,6 +20,7 @@ import { RawTextDataset } from "../Datasets/Text/RawTextDataset";
20
20
  import { TextDataset } from "../Datasets/Text/TextDataset";
21
21
  import { PictureDataset } from "../Datasets/Picture/PictureDataset";
22
22
  import { FileDataset } from "../Datasets/File/FileDataset";
23
+ import { ObjectDatasets } from "../Datasets/Object/ObjectDatasets";
23
24
  export class OnlineStorage {
24
25
  server;
25
26
  database;
@@ -111,6 +112,9 @@ export class OnlineStorage {
111
112
  GetObjectDataset(datasetName, converter) {
112
113
  return new ObjectDataset(this, datasetName, converter);
113
114
  }
115
+ GetObjectDatasets(datasestNames, converter) {
116
+ return new ObjectDatasets(this, datasestNames, converter);
117
+ }
114
118
  GetTextDataset(datasetName, converter) {
115
119
  return converter
116
120
  ? new TextDataset(this, datasetName, converter)
package/index.d.ts CHANGED
@@ -13,6 +13,7 @@ export * from "./Services/DatasetType";
13
13
  export * from "./Converters/IConverter";
14
14
  export * from "./Converters/Converter";
15
15
  export * from "./Datasets/Object/ObjectDataset";
16
+ export * from "./Datasets/Object/ObjectDatasets";
16
17
  export * from "./Converters/DummyConverter";
17
18
  export * from "./Datasets/Text/RawTextDataset";
18
19
  export * from "./Datasets/Text/TextDataset";
package/index.js CHANGED
@@ -15,6 +15,7 @@ export * from "./Converters/IConverter";
15
15
  export * from "./Converters/Converter";
16
16
  // Object datasets
17
17
  export * from "./Datasets/Object/ObjectDataset";
18
+ export * from "./Datasets/Object/ObjectDatasets";
18
19
  export * from "./Converters/DummyConverter";
19
20
  // Text datasets
20
21
  export * from "./Datasets/Text/RawTextDataset";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tblabs/storage",
3
- "version": "5.15.3",
3
+ "version": "5.15.4",
4
4
  "description": "online storage module with auth",
5
5
  "license": "beerware",
6
6
  "main": "index.js",
Binary file
Binary file