fix(core): update

This commit is contained in:
Philipp Kunz 2023-11-24 19:15:41 +01:00
parent 3b05aab39b
commit 9935fe2d3c
5 changed files with 489 additions and 325 deletions

View File

@ -26,7 +26,7 @@
}, },
"homepage": "https://gitlab.com/push.rocks/smartfile#readme", "homepage": "https://gitlab.com/push.rocks/smartfile#readme",
"dependencies": { "dependencies": {
"@push.rocks/lik": "^6.0.5", "@push.rocks/lik": "^6.0.12",
"@push.rocks/smartdelay": "^3.0.5", "@push.rocks/smartdelay": "^3.0.5",
"@push.rocks/smartfile-interfaces": "^1.0.7", "@push.rocks/smartfile-interfaces": "^1.0.7",
"@push.rocks/smarthash": "^3.0.4", "@push.rocks/smarthash": "^3.0.4",
@ -34,11 +34,11 @@
"@push.rocks/smartmime": "^1.0.5", "@push.rocks/smartmime": "^1.0.5",
"@push.rocks/smartpath": "^5.0.11", "@push.rocks/smartpath": "^5.0.11",
"@push.rocks/smartpromise": "^4.0.2", "@push.rocks/smartpromise": "^4.0.2",
"@push.rocks/smartrequest": "^2.0.20", "@push.rocks/smartrequest": "^2.0.21",
"@push.rocks/smartstream": "^3.0.7", "@push.rocks/smartstream": "^3.0.30",
"@types/fs-extra": "^11.0.3", "@types/fs-extra": "^11.0.4",
"@types/glob": "^8.1.0", "@types/glob": "^8.1.0",
"@types/js-yaml": "^4.0.8", "@types/js-yaml": "^4.0.9",
"fs-extra": "^11.1.1", "fs-extra": "^11.1.1",
"glob": "^10.3.10", "glob": "^10.3.10",
"js-yaml": "^4.1.0" "js-yaml": "^4.1.0"
@ -46,9 +46,9 @@
"devDependencies": { "devDependencies": {
"@git.zone/tsbuild": "^2.1.70", "@git.zone/tsbuild": "^2.1.70",
"@git.zone/tsrun": "^1.2.46", "@git.zone/tsrun": "^1.2.46",
"@git.zone/tstest": "^1.0.81", "@git.zone/tstest": "^1.0.84",
"@push.rocks/tapbundle": "^5.0.15", "@push.rocks/tapbundle": "^5.0.15",
"@types/node": "^20.8.10" "@types/node": "^20.10.0"
}, },
"files": [ "files": [
"ts/**/*", "ts/**/*",

736
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@push.rocks/smartfile', name: '@push.rocks/smartfile',
version: '11.0.2', version: '11.0.3',
description: 'offers smart ways to work with files in nodejs' description: 'offers smart ways to work with files in nodejs'
} }

View File

@ -91,6 +91,12 @@ export class SmartFile extends plugins.smartjson.Smartjson {
}); });
} }
public async fromUrl (urlArg: string) {
const response = await plugins.smartrequest.getBinary(urlArg);
const smartfile = await SmartFile.fromBuffer(urlArg, response.body);
return smartfile;
}
// ======== // ========
// INSTANCE // INSTANCE
// ======== // ========

View File

@ -392,44 +392,50 @@ export const listFileTree = async (
* Watches for file stability before resolving the promise. * Watches for file stability before resolving the promise.
*/ */
export const waitForFileToBeReady = (filePathArg: string): Promise<void> => { export const waitForFileToBeReady = (filePathArg: string): Promise<void> => {
return new Promise((resolve, reject) => { return new Promise(async (resolve, reject) => {
let lastSize = -1; let lastFileSize = -1;
let stableCheckTimeout: NodeJS.Timeout | null = null; let fileIsStable = false;
const clearStableCheckTimeout = () => { const checkFileStability = async () => {
if (stableCheckTimeout) { let currentFileSize: number;
clearTimeout(stableCheckTimeout); const deferred = plugins.smartpromise.defer();
stableCheckTimeout = null; plugins.fs.stat(filePathArg, (err, stats) => {
if (err) {
fileIsStable = true;
watcher.close();
reject(err);
return;
} }
currentFileSize = stats.size;
deferred.resolve();
});
await deferred.promise;
if (currentFileSize === lastFileSize) {
fileIsStable = true;
await plugins.smartdelay.delayFor(100);
resolve();
}
lastFileSize = currentFileSize;
}; };
const watcher = plugins.fs.watch(filePathArg, (eventType, filename) => { const watcher = plugins.fs.watch(filePathArg, (eventType, filename) => {
if (eventType === 'change') { if (eventType === 'change') {
plugins.fs.stat(filePathArg, (err, stats) => { checkFileStability();
if (err) {
watcher.close();
clearStableCheckTimeout();
reject(err);
return;
}
if (stats.size === lastSize) {
clearStableCheckTimeout();
stableCheckTimeout = setTimeout(() => {
watcher.close();
resolve();
}, 5000); // stability duration
} else {
lastSize = stats.size;
}
});
} }
}); });
watcher.on('error', (error) => { watcher.on('error', (error) => {
clearStableCheckTimeout();
watcher.close(); watcher.close();
reject(error); reject(error);
}); });
while (!fileIsStable) {
await checkFileStability();
if (!fileIsStable) {
await plugins.smartdelay.delayFor(5000);
}
}
watcher.close();
}); });
}; };