@tblabs/storage 5.7.2 → 5.8.1
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/Dataset.d.ts +2 -1
- package/Dataset.js +6 -3
- package/Datasets.d.ts +22 -0
- package/Datasets.js +147 -0
- package/IRepos.d.ts +11 -0
- package/IRepos.js +1 -0
- package/OnlineStorage.d.ts +0 -3
- package/OnlineStorage.js +0 -6
- package/index.d.ts +2 -0
- package/index.js +2 -0
- package/package.json +1 -1
- package/tblabs-storage-5.8.1.tgz +0 -0
- package/tblabs-storage-5.7.2.tgz +0 -0
package/Dataset.d.ts
CHANGED
|
@@ -7,8 +7,9 @@ export declare class Dataset<T extends object> implements IRepo<T> {
|
|
|
7
7
|
private _db;
|
|
8
8
|
private _converter;
|
|
9
9
|
private dataset;
|
|
10
|
-
get Name(): string;
|
|
11
10
|
constructor(_db: OnlineStorage, _converter: IConverter<any, T>, dataset: dir);
|
|
11
|
+
get Name(): string;
|
|
12
|
+
get Database(): OnlineStorage;
|
|
12
13
|
private get DatasetPath();
|
|
13
14
|
CanUserDo(action: keyof IStorageUserPrivileges): boolean;
|
|
14
15
|
GetOne(id: string): Promise<T>;
|
package/Dataset.js
CHANGED
|
@@ -9,14 +9,17 @@ export class Dataset {
|
|
|
9
9
|
_db;
|
|
10
10
|
_converter;
|
|
11
11
|
dataset;
|
|
12
|
-
get Name() {
|
|
13
|
-
return this.dataset;
|
|
14
|
-
}
|
|
15
12
|
constructor(_db, _converter, dataset) {
|
|
16
13
|
this._db = _db;
|
|
17
14
|
this._converter = _converter;
|
|
18
15
|
this.dataset = dataset;
|
|
19
16
|
}
|
|
17
|
+
get Name() {
|
|
18
|
+
return this.dataset;
|
|
19
|
+
}
|
|
20
|
+
get Database() {
|
|
21
|
+
return this._db;
|
|
22
|
+
}
|
|
20
23
|
get DatasetPath() {
|
|
21
24
|
return this._db.DatabaseDir + "/Datasets/" + this.dataset;
|
|
22
25
|
}
|
package/Datasets.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { IConverter } from "./IConverter";
|
|
2
|
+
import { IRepos } from "./IRepos";
|
|
3
|
+
import { IStorageUserPrivileges } from "./IStorageUserPrivileges";
|
|
4
|
+
import { OnlineStorage } from "./OnlineStorage";
|
|
5
|
+
import { dir } from "./Types/dir";
|
|
6
|
+
export declare class Datasets<T extends object> implements IRepos<T> {
|
|
7
|
+
private _db;
|
|
8
|
+
private _converter;
|
|
9
|
+
private datasets;
|
|
10
|
+
constructor(_db: OnlineStorage, _converter: IConverter<any, T>, datasets: dir[]);
|
|
11
|
+
get Names(): string[];
|
|
12
|
+
get Database(): OnlineStorage;
|
|
13
|
+
CanUserDo(action: keyof IStorageUserPrivileges): boolean;
|
|
14
|
+
GetOne(dataset: dir, id: string): Promise<T>;
|
|
15
|
+
GetAll(dataset: dir): Promise<T[]>;
|
|
16
|
+
GetAllIds(dataset: dir): Promise<string[]>;
|
|
17
|
+
Add(dataset: dir, id: string, item: T): Promise<void>;
|
|
18
|
+
Update(dataset: dir, id: string, item: T): Promise<void>;
|
|
19
|
+
Move(id: string, sourceDataset: dir, targetDataset: dir): Promise<void>;
|
|
20
|
+
Delete(dataset: dir, id: string): Promise<void>;
|
|
21
|
+
Drop(datasets?: dir[]): Promise<void>;
|
|
22
|
+
}
|
package/Datasets.js
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { AddFileCommand } from "./Messages/AddFileCommand";
|
|
2
|
+
import { DeleteFileCommand } from "./Messages/DeleteFileCommand";
|
|
3
|
+
import { DropDatasetCommand } from "./Messages/DropDatasetCommand";
|
|
4
|
+
import { GetFileQuery } from "./Messages/GetFileQuery";
|
|
5
|
+
import { ListFilesIdsQuery } from "./Messages/ListFilesIdsQuery";
|
|
6
|
+
import { ListFilesQuery } from "./Messages/ListFilesQuery";
|
|
7
|
+
import { MoveFileCommand } from "./Messages/MoveFileCommand";
|
|
8
|
+
import { UpdateFileCommand } from "./Messages/UpdateFileCommand";
|
|
9
|
+
export class Datasets {
|
|
10
|
+
_db;
|
|
11
|
+
_converter;
|
|
12
|
+
datasets;
|
|
13
|
+
constructor(_db, _converter, datasets) {
|
|
14
|
+
this._db = _db;
|
|
15
|
+
this._converter = _converter;
|
|
16
|
+
this.datasets = datasets;
|
|
17
|
+
if (datasets.length <= 1) {
|
|
18
|
+
throw new Error("Datasets must have at least 2 datasets. If one - use Dataset<T> instead.");
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
get Names() {
|
|
22
|
+
return this.datasets;
|
|
23
|
+
}
|
|
24
|
+
get Database() {
|
|
25
|
+
return this._db;
|
|
26
|
+
}
|
|
27
|
+
CanUserDo(action) {
|
|
28
|
+
if (!this._db.User.Privileges) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
const privilege = this._db.User.Privileges[action];
|
|
32
|
+
if (!privilege) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
// ex. AddFile: { Datasets: "all" } or AddFile: { Datasets: ["Public"] }
|
|
36
|
+
if (typeof privilege === "object") {
|
|
37
|
+
const allowedDatasets = privilege.Datasets;
|
|
38
|
+
// ex. AddFile: { Datasets: "all" }
|
|
39
|
+
if (typeof allowedDatasets === "string") {
|
|
40
|
+
if (allowedDatasets == "all") {
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
else if (allowedDatasets == "none") {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// ex. AddFile: { Datasets: ["Public"] }
|
|
51
|
+
else if (typeof allowedDatasets === "object") {
|
|
52
|
+
if (Array.isArray(allowedDatasets)) {
|
|
53
|
+
for (const dataset of this.datasets) {
|
|
54
|
+
if (allowedDatasets.includes(dataset)) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// ex. CreateUser: true
|
|
63
|
+
else if (typeof privilege === "boolean") {
|
|
64
|
+
return privilege;
|
|
65
|
+
}
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
async GetOne(dataset, id) {
|
|
69
|
+
this._db.Log(`Fetching "${id}" from "${dataset}"...`);
|
|
70
|
+
const queryResult = await this._db.Send(new GetFileQuery(this._db.DatabaseDir, dataset, id));
|
|
71
|
+
if (!queryResult.IsSuccess) {
|
|
72
|
+
throw new Error("Failed to get one item: " + queryResult.ErrorMessage);
|
|
73
|
+
}
|
|
74
|
+
const rawItem = queryResult.Result;
|
|
75
|
+
const item = this._converter.FromRaw(rawItem);
|
|
76
|
+
this._db.Log(`Fetched "${id}" from "${dataset}".`);
|
|
77
|
+
return item;
|
|
78
|
+
}
|
|
79
|
+
async GetAll(dataset) {
|
|
80
|
+
this._db.Log(`Fetching all from "${dataset}"...`);
|
|
81
|
+
const queryResult = await this._db.Send(new ListFilesQuery(this._db.DatabaseDir, dataset));
|
|
82
|
+
if (!queryResult.IsSuccess) {
|
|
83
|
+
throw new Error("Failed to fetch all items: " + queryResult.ErrorMessage);
|
|
84
|
+
}
|
|
85
|
+
const rawItems = queryResult.Result;
|
|
86
|
+
const items = rawItems.map((raw) => this._converter.FromRaw(raw));
|
|
87
|
+
this._db.Log(`Fetched ${items.length} items from "${dataset}".`);
|
|
88
|
+
return items;
|
|
89
|
+
}
|
|
90
|
+
async GetAllIds(dataset) {
|
|
91
|
+
this._db.Log(`Fetching all files IDs from "${dataset}"...`);
|
|
92
|
+
const queryResult = await this._db.Send(new ListFilesIdsQuery(this._db.DatabaseDir, dataset));
|
|
93
|
+
if (!queryResult.IsSuccess) {
|
|
94
|
+
throw new Error("Failed to fetch all items ids: " + queryResult.ErrorMessage);
|
|
95
|
+
}
|
|
96
|
+
const ids = queryResult.Result;
|
|
97
|
+
this._db.Log(`Found ${ids.length} files in "${dataset}".`);
|
|
98
|
+
return ids;
|
|
99
|
+
}
|
|
100
|
+
async Add(dataset, id, item) {
|
|
101
|
+
this._db.Log(`Adding "${id}" to "${dataset}"...`);
|
|
102
|
+
const rawItem = this._converter.ToRaw(item);
|
|
103
|
+
const result = await this._db.Send(new AddFileCommand(this._db.DatabaseDir, dataset, id, rawItem));
|
|
104
|
+
if (!result.IsSuccess) {
|
|
105
|
+
throw new Error("Failed to add item: " + result.ErrorMessage);
|
|
106
|
+
}
|
|
107
|
+
this._db.Log(`"${id}" added to "${dataset}".`);
|
|
108
|
+
}
|
|
109
|
+
;
|
|
110
|
+
async Update(dataset, id, item) {
|
|
111
|
+
this._db.Log(`Updating "${id}"...`);
|
|
112
|
+
const rawItem = this._converter.ToRaw(item);
|
|
113
|
+
const result = await this._db.Send(new UpdateFileCommand(this._db.DatabaseDir, dataset, id, rawItem));
|
|
114
|
+
if (!result.IsSuccess) {
|
|
115
|
+
throw new Error("Failed to update item: " + result.ErrorMessage);
|
|
116
|
+
}
|
|
117
|
+
this._db.Log(`"${id}" updated in "${dataset}".`);
|
|
118
|
+
}
|
|
119
|
+
;
|
|
120
|
+
async Move(id, sourceDataset, targetDataset) {
|
|
121
|
+
this._db.Log(`Moving "${id}" from "${sourceDataset}" to "${targetDataset}"...`);
|
|
122
|
+
const result = await this._db.Send(new MoveFileCommand(this._db.DatabaseDir, id, sourceDataset, targetDataset));
|
|
123
|
+
if (!result.IsSuccess) {
|
|
124
|
+
throw new Error("Failed to move item: " + result.ErrorMessage);
|
|
125
|
+
}
|
|
126
|
+
this._db.Log(`"${id}" moved from "${sourceDataset}" to "${targetDataset}".`);
|
|
127
|
+
}
|
|
128
|
+
async Delete(dataset, id) {
|
|
129
|
+
this._db.Log(`Deleting "${id}" from "${dataset}"...`);
|
|
130
|
+
const result = await this._db.Send(new DeleteFileCommand(this._db.DatabaseDir, dataset, id));
|
|
131
|
+
if (!result.IsSuccess) {
|
|
132
|
+
throw new Error("Failed to delete item: " + result.ErrorMessage);
|
|
133
|
+
}
|
|
134
|
+
this._db.Log(`Deleted "${id}" from "${dataset}".`);
|
|
135
|
+
}
|
|
136
|
+
async Drop(datasets) {
|
|
137
|
+
this._db.Log(`Dropping "${(datasets ? datasets.join(", ") : "all")}" datasets...`);
|
|
138
|
+
for (const dataset of datasets ?? this.datasets) {
|
|
139
|
+
const result = await this._db.Send(new DropDatasetCommand(this._db.DatabaseDir, dataset));
|
|
140
|
+
if (!result.IsSuccess) {
|
|
141
|
+
throw new Error("Failed to drop dataset: " + result.ErrorMessage);
|
|
142
|
+
}
|
|
143
|
+
this._db.Log(`"${dataset}" dropped.`);
|
|
144
|
+
}
|
|
145
|
+
;
|
|
146
|
+
}
|
|
147
|
+
}
|
package/IRepos.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { IStorageUserPrivileges } from "./IStorageUserPrivileges";
|
|
2
|
+
export interface IRepos<T> {
|
|
3
|
+
CanUserDo(action: keyof IStorageUserPrivileges): boolean;
|
|
4
|
+
Add(dataset: string, id: string, item: T): Promise<void>;
|
|
5
|
+
GetAll(dataset: string): Promise<T[]>;
|
|
6
|
+
GetOne(dataset: string, id: string): Promise<T | null>;
|
|
7
|
+
Update(dataset: string, id: string, item: T): Promise<void>;
|
|
8
|
+
Delete(dataset: string, id: string): Promise<void>;
|
|
9
|
+
Drop(datasets?: string[]): Promise<void>;
|
|
10
|
+
Move(id: string, sourceDataset: string, targetDataset: string): Promise<void>;
|
|
11
|
+
}
|
package/IRepos.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/OnlineStorage.d.ts
CHANGED
|
@@ -34,9 +34,6 @@ export declare class OnlineStorage {
|
|
|
34
34
|
private LoadUserFromLocalStorage;
|
|
35
35
|
get User(): IStorageUser;
|
|
36
36
|
Login(password: string, login?: string): Promise<IStorageUser>;
|
|
37
|
-
SetLoginPolicy(): void;
|
|
38
|
-
GetNextPassword(): void;
|
|
39
|
-
SetDefaultPrivileges(byRole: Record<string, IStorageUserPrivileges>): void;
|
|
40
37
|
private SaveUserInLocalStorage;
|
|
41
38
|
OnUserChange(handler: (user: IStorageUser, isAuthorized: boolean, appStart: boolean) => void): this;
|
|
42
39
|
Logout(): this;
|
package/OnlineStorage.js
CHANGED
|
@@ -124,12 +124,6 @@ export class OnlineStorage {
|
|
|
124
124
|
this.CallOnUserChanged(false);
|
|
125
125
|
return this.user;
|
|
126
126
|
}
|
|
127
|
-
SetLoginPolicy() {
|
|
128
|
-
}
|
|
129
|
-
GetNextPassword() {
|
|
130
|
-
}
|
|
131
|
-
SetDefaultPrivileges(byRole) {
|
|
132
|
-
}
|
|
133
127
|
SaveUserInLocalStorage() {
|
|
134
128
|
if (this.IsBrowserEnvironment()) {
|
|
135
129
|
window.localStorage.setItem(this.USER_LOCAL_STORAGE_KEY, JSON.stringify(this.user));
|
package/index.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ export * from "./IStorageUser";
|
|
|
5
5
|
export * from "./IConverter";
|
|
6
6
|
export * from "./Converter";
|
|
7
7
|
export * from "./IRepo";
|
|
8
|
+
export * from "./IRepos";
|
|
8
9
|
export * from "./Dataset";
|
|
10
|
+
export * from "./Datasets";
|
|
9
11
|
export * from "./OnlineStorage";
|
|
10
12
|
export * from "./Utils/OperationRepeater";
|
package/index.js
CHANGED
|
@@ -5,6 +5,8 @@ export * from "./IStorageUser";
|
|
|
5
5
|
export * from "./IConverter";
|
|
6
6
|
export * from "./Converter";
|
|
7
7
|
export * from "./IRepo";
|
|
8
|
+
export * from "./IRepos";
|
|
8
9
|
export * from "./Dataset";
|
|
10
|
+
export * from "./Datasets";
|
|
9
11
|
export * from "./OnlineStorage";
|
|
10
12
|
export * from "./Utils/OperationRepeater";
|
package/package.json
CHANGED
|
Binary file
|
package/tblabs-storage-5.7.2.tgz
DELETED
|
Binary file
|