@webda/fs 4.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +166 -0
- package/README.md +130 -0
- package/lib/filebinary.service.d.ts +184 -0
- package/lib/filebinary.service.d.ts.map +1 -0
- package/lib/filebinary.service.js +467 -0
- package/lib/filebinary.service.js.map +1 -0
- package/lib/filequeue.service.d.ts +62 -0
- package/lib/filequeue.service.d.ts.map +1 -0
- package/lib/filequeue.service.js +138 -0
- package/lib/filequeue.service.js.map +1 -0
- package/lib/filestore.service.d.ts +133 -0
- package/lib/filestore.service.d.ts.map +1 -0
- package/lib/filestore.service.js +423 -0
- package/lib/filestore.service.js.map +1 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +5 -0
- package/lib/index.js.map +1 -0
- package/lib/socketpubsub.service.d.ts +150 -0
- package/lib/socketpubsub.service.d.ts.map +1 -0
- package/lib/socketpubsub.service.js +348 -0
- package/lib/socketpubsub.service.js.map +1 -0
- package/package.json +50 -0
- package/webda.module.json +304 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { randomUUID } from "crypto";
|
|
4
|
+
import { Queue, QueueParameters } from "@webda/core";
|
|
5
|
+
import { JSONUtils } from "@webda/utils";
|
|
6
|
+
/** Configuration parameters for the filesystem-backed FIFO queue. */
|
|
7
|
+
export class FileQueueParameters extends QueueParameters {
|
|
8
|
+
/**
|
|
9
|
+
* Number of seconds before dropping message
|
|
10
|
+
*
|
|
11
|
+
* @default 30
|
|
12
|
+
*/
|
|
13
|
+
expire;
|
|
14
|
+
/**
|
|
15
|
+
* Where to store the queue
|
|
16
|
+
*/
|
|
17
|
+
folder;
|
|
18
|
+
/** Set default expiration to 30 seconds and convert to milliseconds. */
|
|
19
|
+
default() {
|
|
20
|
+
this.expire = this.expire ?? 30;
|
|
21
|
+
this.expire *= 1000;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* FIFO Queue on filesystem
|
|
26
|
+
* @category CoreServices
|
|
27
|
+
* @WebdaModda
|
|
28
|
+
*/
|
|
29
|
+
export class FileQueue extends Queue {
|
|
30
|
+
/**
|
|
31
|
+
* @override
|
|
32
|
+
*/
|
|
33
|
+
loadParameters(params) {
|
|
34
|
+
return new FileQueueParameters().load(params);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Create the storage folder if does not exist
|
|
38
|
+
*/
|
|
39
|
+
computeParameters() {
|
|
40
|
+
super.computeParameters();
|
|
41
|
+
this.parameters.default?.();
|
|
42
|
+
if (!fs.existsSync(this.parameters.folder)) {
|
|
43
|
+
fs.mkdirSync(this.parameters.folder);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* @override
|
|
48
|
+
*/
|
|
49
|
+
async size() {
|
|
50
|
+
return fs.readdirSync(this.parameters.folder).filter(f => f.endsWith(".json")).length;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Return file
|
|
54
|
+
*
|
|
55
|
+
* @param uid - the message unique identifier
|
|
56
|
+
* @returns the file path
|
|
57
|
+
*/
|
|
58
|
+
getFile(uid) {
|
|
59
|
+
return join(this.parameters.folder, `${uid}.json`);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @override
|
|
63
|
+
*/
|
|
64
|
+
async sendMessage(params) {
|
|
65
|
+
let uid = randomUUID();
|
|
66
|
+
let file = this.getFile(uid);
|
|
67
|
+
while (fs.existsSync(file)) {
|
|
68
|
+
uid = randomUUID();
|
|
69
|
+
file = this.getFile(uid);
|
|
70
|
+
}
|
|
71
|
+
JSONUtils.saveFile(params, file);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* @override
|
|
75
|
+
*/
|
|
76
|
+
async receiveMessage(proto) {
|
|
77
|
+
const files = fs
|
|
78
|
+
.readdirSync(this.parameters.folder)
|
|
79
|
+
.filter(f => f.endsWith(".json"))
|
|
80
|
+
.map(f => {
|
|
81
|
+
const lockFile = join(this.parameters.folder, f + ".lock");
|
|
82
|
+
const res = {
|
|
83
|
+
...fs.lstatSync(join(this.parameters.folder, f)),
|
|
84
|
+
path: join(this.parameters.folder, f),
|
|
85
|
+
hasLock: fs.existsSync(lockFile),
|
|
86
|
+
uid: f.substring(0, f.length - 5)
|
|
87
|
+
};
|
|
88
|
+
if (res.hasLock) {
|
|
89
|
+
const lock = fs.lstatSync(lockFile);
|
|
90
|
+
if (lock.birthtimeMs < Date.now() - this.parameters.expire) {
|
|
91
|
+
res.hasLock = false;
|
|
92
|
+
fs.unlinkSync(lockFile);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return res;
|
|
96
|
+
})
|
|
97
|
+
.filter(f => !f.hasLock)
|
|
98
|
+
.sort((a, b) => {
|
|
99
|
+
if (a.birthtimeMs > b.birthtimeMs) {
|
|
100
|
+
return 1;
|
|
101
|
+
}
|
|
102
|
+
return -1;
|
|
103
|
+
});
|
|
104
|
+
if (files.length) {
|
|
105
|
+
const el = files.shift();
|
|
106
|
+
fs.writeFileSync(el.path + ".lock", "");
|
|
107
|
+
return [
|
|
108
|
+
{
|
|
109
|
+
ReceiptHandle: el.uid,
|
|
110
|
+
Message: this.unserialize(fs.readFileSync(el.path).toString(), proto)
|
|
111
|
+
}
|
|
112
|
+
];
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
await new Promise(resolve => setTimeout(resolve, 10000));
|
|
116
|
+
}
|
|
117
|
+
return [];
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* @override
|
|
121
|
+
*/
|
|
122
|
+
async deleteMessage(receipt) {
|
|
123
|
+
const file = this.getFile(receipt);
|
|
124
|
+
if (fs.existsSync(file)) {
|
|
125
|
+
fs.unlinkSync(file);
|
|
126
|
+
if (fs.existsSync(file + ".lock")) {
|
|
127
|
+
fs.unlinkSync(file + ".lock");
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* @inheritdoc
|
|
133
|
+
*/
|
|
134
|
+
async __clean() {
|
|
135
|
+
(await import("fs-extra")).emptyDirSync(this.parameters.folder);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=filequeue.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filequeue.service.js","sourceRoot":"","sources":["../src/filequeue.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { Store, StoreFindResult, StoreParameters, ModelClass, Repository } from "@webda/core";
|
|
2
|
+
import * as WebdaQL from "@webda/ql";
|
|
3
|
+
/** Configuration parameters for the JSON-file-backed store. */
|
|
4
|
+
export declare class FileStoreParameters extends StoreParameters {
|
|
5
|
+
/**
|
|
6
|
+
* Local path where to store all `json` files
|
|
7
|
+
*/
|
|
8
|
+
folder: string;
|
|
9
|
+
/**
|
|
10
|
+
* Parameter sent to JSON.stringify when storing the json
|
|
11
|
+
*/
|
|
12
|
+
beautify?: string | number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Simple file storage of object
|
|
16
|
+
*
|
|
17
|
+
* Storage structure
|
|
18
|
+
* /folder/{uuid}
|
|
19
|
+
*
|
|
20
|
+
* Parameters:
|
|
21
|
+
* folder: to store to
|
|
22
|
+
*
|
|
23
|
+
* @category CoreServices
|
|
24
|
+
* @WebdaModda
|
|
25
|
+
*/
|
|
26
|
+
export declare class FileStore<K extends FileStoreParameters = FileStoreParameters> extends Store<K> {
|
|
27
|
+
static EXTENSION: string;
|
|
28
|
+
/**
|
|
29
|
+
* Load the parameters for a service
|
|
30
|
+
*
|
|
31
|
+
* @param params - raw parameter values
|
|
32
|
+
* @returns the loaded parameters
|
|
33
|
+
*/
|
|
34
|
+
loadParameters(params: any): K;
|
|
35
|
+
/**
|
|
36
|
+
* Create the storage folder if does not exist
|
|
37
|
+
*/
|
|
38
|
+
computeParameters(): void;
|
|
39
|
+
/**
|
|
40
|
+
* Get the file path of an object
|
|
41
|
+
*
|
|
42
|
+
* @param uid - the object unique identifier
|
|
43
|
+
* @returns the file path
|
|
44
|
+
*/
|
|
45
|
+
file(uid: any): string;
|
|
46
|
+
/**
|
|
47
|
+
* @override
|
|
48
|
+
*/
|
|
49
|
+
_exists(uid: any): Promise<boolean>;
|
|
50
|
+
/**
|
|
51
|
+
* @override
|
|
52
|
+
*/
|
|
53
|
+
find(query: WebdaQL.Query): Promise<StoreFindResult<any>>;
|
|
54
|
+
/**
|
|
55
|
+
* @override
|
|
56
|
+
*/
|
|
57
|
+
_create(uuid: string, object: any): Promise<any>;
|
|
58
|
+
/**
|
|
59
|
+
* Store in file the object
|
|
60
|
+
*
|
|
61
|
+
* @param uuid - the object unique identifier
|
|
62
|
+
* @param object - the object to persist
|
|
63
|
+
* @returns the persisted object
|
|
64
|
+
*/
|
|
65
|
+
protected persist(uuid: string, object: any): Promise<any>;
|
|
66
|
+
/**
|
|
67
|
+
* Verify optimistic locking update condition
|
|
68
|
+
*
|
|
69
|
+
* @param uuid - the object unique identifier
|
|
70
|
+
* @param stored - the currently stored object
|
|
71
|
+
* @param writeConditionField - field to check for condition
|
|
72
|
+
* @param writeCondition - expected value of the field
|
|
73
|
+
*/
|
|
74
|
+
protected checkUpdateCondition(uuid: string, stored: any, writeConditionField?: string, writeCondition?: any): void;
|
|
75
|
+
/**
|
|
76
|
+
* Verify collection item update condition
|
|
77
|
+
*
|
|
78
|
+
* @param stored - the currently stored object
|
|
79
|
+
* @param prop - the collection property name
|
|
80
|
+
* @param itemWriteConditionField - field to check on the item
|
|
81
|
+
* @param itemWriteCondition - expected value of the field
|
|
82
|
+
* @param index - index of the item in the collection
|
|
83
|
+
*/
|
|
84
|
+
protected checkCollectionUpdateCondition(stored: any, prop: string, itemWriteConditionField: string, itemWriteCondition: any, index: number): void;
|
|
85
|
+
/**
|
|
86
|
+
* @override
|
|
87
|
+
*/
|
|
88
|
+
_upsertItemToCollection(uid: string, prop: string, item: any, index: number, itemWriteCondition: any, itemWriteConditionField: string, updateDate: Date): Promise<any>;
|
|
89
|
+
/**
|
|
90
|
+
* @override
|
|
91
|
+
*/
|
|
92
|
+
_removeAttribute(uuid: string, attribute: string, writeCondition?: any, writeConditionField?: string): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* @override
|
|
95
|
+
*/
|
|
96
|
+
_deleteItemFromCollection(uid: string, prop: string, index: number, itemWriteCondition: any, itemWriteConditionField: string, updateDate: Date): Promise<any>;
|
|
97
|
+
/**
|
|
98
|
+
* @override
|
|
99
|
+
*/
|
|
100
|
+
_delete(uid: string): Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* @override
|
|
103
|
+
*/
|
|
104
|
+
_patch(object: any, uid: string, writeCondition?: any, writeConditionField?: string): Promise<any>;
|
|
105
|
+
/**
|
|
106
|
+
* @override
|
|
107
|
+
*/
|
|
108
|
+
_update(object: any, uid: string, writeCondition?: any, writeConditionField?: string): Promise<any>;
|
|
109
|
+
/**
|
|
110
|
+
* @override
|
|
111
|
+
*/
|
|
112
|
+
getAll(uids?: string[]): Promise<any>;
|
|
113
|
+
/**
|
|
114
|
+
* @override
|
|
115
|
+
*/
|
|
116
|
+
_get(uid: string, raiseIfNotFound?: boolean): Promise<any>;
|
|
117
|
+
/**
|
|
118
|
+
* @override
|
|
119
|
+
*/
|
|
120
|
+
_incrementAttributes(uid: string, params: {
|
|
121
|
+
property: string;
|
|
122
|
+
value: number;
|
|
123
|
+
}[], updateDate: Date): Promise<any>;
|
|
124
|
+
/**
|
|
125
|
+
* @override
|
|
126
|
+
*/
|
|
127
|
+
getRepository<T extends ModelClass>(model: T): Repository<T>;
|
|
128
|
+
/**
|
|
129
|
+
* @override
|
|
130
|
+
*/
|
|
131
|
+
__clean(): Promise<void>;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=filestore.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filestore.service.d.ts","sourceRoot":"","sources":["../src/filestore.service.ts"],"names":[],"mappings":"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"}
|