Compare commits
22 Commits
Author | SHA1 | Date | |
---|---|---|---|
0ca38c109e | |||
4e2321e1ee | |||
a640ab3d7b | |||
37d6d56287 | |||
443a026502 | |||
9644c5b7e3 | |||
25faa8c697 | |||
982387aaa3 | |||
4a11f50efe | |||
0ddec29392 | |||
df484d54e8 | |||
f637c20241 | |||
ed0c1a9181 | |||
0e22999f69 | |||
38f001ab23 | |||
d1429c5a41 | |||
403a0f4fae | |||
91ade8a4d4 | |||
1a571bba90 | |||
bcb66b2ccf | |||
0000984e4b | |||
b391e54083 |
@ -12,40 +12,35 @@ stages:
|
||||
- release
|
||||
- metadata
|
||||
|
||||
before_script:
|
||||
- pnpm install -g pnpm
|
||||
- pnpm install -g @shipzone/pnpm
|
||||
- npmci npm prepare
|
||||
|
||||
# ====================
|
||||
# security stage
|
||||
# ====================
|
||||
# ====================
|
||||
# security stage
|
||||
# ====================
|
||||
mirror:
|
||||
stage: security
|
||||
script:
|
||||
- npmci git mirror
|
||||
only:
|
||||
- tags
|
||||
tags:
|
||||
- lossless
|
||||
- docker
|
||||
- notpriv
|
||||
|
||||
auditProductionDependencies:
|
||||
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
||||
stage: security
|
||||
script:
|
||||
- npmci npm prepare
|
||||
- npmci command npm install --production --ignore-scripts
|
||||
- npmci command npm config set registry https://registry.npmjs.org
|
||||
- npmci command npm audit --audit-level=high --only=prod --production
|
||||
- npmci command npm config set registry https://registry.npmjs.org
|
||||
- npmci command pnpm audit --audit-level=high --prod
|
||||
tags:
|
||||
- lossless
|
||||
- docker
|
||||
|
||||
auditDevDependencies:
|
||||
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
||||
stage: security
|
||||
script:
|
||||
- npmci npm prepare
|
||||
- npmci command npm install --ignore-scripts
|
||||
- npmci command npm config set registry https://registry.npmjs.org
|
||||
- npmci command npm audit --audit-level=high --only=dev
|
||||
- npmci command pnpm audit --audit-level=high --dev
|
||||
tags:
|
||||
- lossless
|
||||
- docker
|
||||
allow_failure: true
|
||||
|
||||
@ -56,7 +51,6 @@ auditDevDependencies:
|
||||
testStable:
|
||||
stage: test
|
||||
script:
|
||||
- npmci npm prepare
|
||||
- npmci node install stable
|
||||
- npmci npm install
|
||||
- npmci npm test
|
||||
@ -67,7 +61,6 @@ testStable:
|
||||
testBuild:
|
||||
stage: test
|
||||
script:
|
||||
- npmci npm prepare
|
||||
- npmci node install stable
|
||||
- npmci npm install
|
||||
- npmci command npm run build
|
||||
@ -96,10 +89,9 @@ codequality:
|
||||
only:
|
||||
- tags
|
||||
script:
|
||||
- npmci command npm install -g tslint typescript
|
||||
- npmci command npm install -g typescript
|
||||
- npmci npm prepare
|
||||
- npmci npm install
|
||||
- npmci command "tslint -c tslint.json ./ts/**/*.ts"
|
||||
tags:
|
||||
- lossless
|
||||
- docker
|
||||
@ -119,11 +111,9 @@ trigger:
|
||||
pages:
|
||||
stage: metadata
|
||||
script:
|
||||
- npmci node install lts
|
||||
- npmci command npm install -g @gitzone/tsdoc
|
||||
- npmci npm prepare
|
||||
- npmci node install stable
|
||||
- npmci npm install
|
||||
- npmci command tsdoc
|
||||
- npmci command npm run buildDocs
|
||||
tags:
|
||||
- lossless
|
||||
- docker
|
||||
|
4
.snyk
4
.snyk
@ -1,4 +0,0 @@
|
||||
# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities.
|
||||
version: v1.13.1
|
||||
ignore: {}
|
||||
patch: {}
|
24
.vscode/launch.json
vendored
24
.vscode/launch.json
vendored
@ -2,28 +2,10 @@
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "current file",
|
||||
"type": "node",
|
||||
"command": "npm test",
|
||||
"name": "Run npm test",
|
||||
"request": "launch",
|
||||
"args": [
|
||||
"${relativeFile}"
|
||||
],
|
||||
"runtimeArgs": ["-r", "@gitzone/tsrun"],
|
||||
"cwd": "${workspaceRoot}",
|
||||
"protocol": "inspector",
|
||||
"internalConsoleOptions": "openOnSessionStart"
|
||||
},
|
||||
{
|
||||
"name": "test.ts",
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"args": [
|
||||
"test/test.ts"
|
||||
],
|
||||
"runtimeArgs": ["-r", "@gitzone/tsrun"],
|
||||
"cwd": "${workspaceRoot}",
|
||||
"protocol": "inspector",
|
||||
"internalConsoleOptions": "openOnSessionStart"
|
||||
"type": "node-terminal"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -1,8 +1,4 @@
|
||||
{
|
||||
"npmts": {
|
||||
"mode": "default",
|
||||
"coverageTreshold": 70
|
||||
},
|
||||
"npmdocker": {},
|
||||
"npmci": {
|
||||
"npmGlobalTools": [],
|
||||
@ -14,7 +10,7 @@
|
||||
"githost": "gitlab.com",
|
||||
"gitscope": "pushrocks",
|
||||
"gitrepo": "smartfile",
|
||||
"shortDescription": "smart ways to work with files in nodejs",
|
||||
"description": "smart ways to work with files in nodejs",
|
||||
"npmPackagename": "@pushrocks/smartfile",
|
||||
"license": "MIT"
|
||||
}
|
||||
|
26989
package-lock.json
generated
26989
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
40
package.json
40
package.json
@ -1,13 +1,15 @@
|
||||
{
|
||||
"name": "@pushrocks/smartfile",
|
||||
"private": false,
|
||||
"version": "9.0.3",
|
||||
"version": "10.0.6",
|
||||
"description": "offers smart ways to work with files in nodejs",
|
||||
"main": "dist_ts/index.js",
|
||||
"typings": "dist_ts/index.d.ts",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"test": "(tstest test/)",
|
||||
"build": "(tsbuild --web)"
|
||||
"build": "(tsbuild --web --allowimplicitany)",
|
||||
"buildDocs": "tsdoc"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -24,30 +26,30 @@
|
||||
},
|
||||
"homepage": "https://gitlab.com/pushrocks/smartfile",
|
||||
"dependencies": {
|
||||
"@pushrocks/lik": "^5.0.0",
|
||||
"@pushrocks/lik": "^6.0.0",
|
||||
"@pushrocks/smartdelay": "^2.0.13",
|
||||
"@pushrocks/smartfile-interfaces": "^1.0.7",
|
||||
"@pushrocks/smarthash": "^2.1.10",
|
||||
"@pushrocks/smartjson": "^4.0.6",
|
||||
"@pushrocks/smarthash": "^3.0.1",
|
||||
"@pushrocks/smartjson": "^5.0.5",
|
||||
"@pushrocks/smartmime": "^1.0.5",
|
||||
"@pushrocks/smartpath": "^4.0.3",
|
||||
"@pushrocks/smartpath": "^5.0.5",
|
||||
"@pushrocks/smartpromise": "^3.1.6",
|
||||
"@pushrocks/smartrequest": "^1.1.52",
|
||||
"@types/fs-extra": "^9.0.13",
|
||||
"@types/glob": "^7.2.0",
|
||||
"@pushrocks/smartrequest": "^2.0.11",
|
||||
"@pushrocks/smartstream": "^2.0.3",
|
||||
"@pushrocks/streamfunction": "^4.0.4",
|
||||
"@types/fs-extra": "^11.0.0",
|
||||
"@types/glob": "^8.0.0",
|
||||
"@types/js-yaml": "^4.0.5",
|
||||
"fs-extra": "^10.0.0",
|
||||
"glob": "^7.2.0",
|
||||
"fs-extra": "^11.1.0",
|
||||
"glob": "^8.0.3",
|
||||
"js-yaml": "^4.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@gitzone/tsbuild": "^2.1.28",
|
||||
"@gitzone/tsrun": "^1.2.18",
|
||||
"@gitzone/tstest": "^1.0.60",
|
||||
"@pushrocks/tapbundle": "^3.2.14",
|
||||
"@types/node": "^16.11.11",
|
||||
"gulp-function": "^2.2.14",
|
||||
"tslint": "^6.1.3",
|
||||
"tslint-config-prettier": "^1.18.0"
|
||||
"@gitzone/tsbuild": "^2.1.65",
|
||||
"@gitzone/tsrun": "^1.2.39",
|
||||
"@gitzone/tstest": "^1.0.74",
|
||||
"@pushrocks/tapbundle": "^5.0.4",
|
||||
"@types/node": "^18.11.18"
|
||||
},
|
||||
"files": [
|
||||
"ts/**/*",
|
||||
|
4396
pnpm-lock.yaml
generated
Normal file
4396
pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load Diff
92
test/test.ts
92
test/test.ts
@ -1,4 +1,4 @@
|
||||
import * as smartfile from '../ts/index';
|
||||
import * as smartfile from '../ts/index.js';
|
||||
import * as path from 'path';
|
||||
|
||||
import { expect, tap } from '@pushrocks/tapbundle';
|
||||
@ -9,47 +9,45 @@ import { expect, tap } from '@pushrocks/tapbundle';
|
||||
|
||||
tap.test('.fs.fileExistsSync -> should return an accurate boolean', async () => {
|
||||
// tslint:disable-next-line: no-unused-expression
|
||||
expect(smartfile.fs.fileExistsSync('./test/testassets/mytest.json')).to.be.true;
|
||||
expect(smartfile.fs.fileExistsSync('./test/testassets/mytest.json')).toBeTrue();
|
||||
// tslint:disable-next-line: no-unused-expression
|
||||
expect(smartfile.fs.fileExistsSync('./test/testassets/notthere.json')).be.false;
|
||||
expect(smartfile.fs.fileExistsSync('./test/testassets/notthere.json')).toBeFalse();
|
||||
});
|
||||
|
||||
tap.test('.fs.fileExists -> should resolve or reject a promise', async () => {
|
||||
expect(smartfile.fs.fileExists('./test/testassets/mytest.json')).to.be.instanceof(Promise);
|
||||
expect(smartfile.fs.fileExists('./test/testassets/mytest.json')).toBeInstanceOf(Promise);
|
||||
await smartfile.fs.fileExists('./test/testassets/mytest.json');
|
||||
await smartfile.fs.fileExists('./test/testassets/notthere.json').catch((err) => {
|
||||
return expect(err.message).to.equal(
|
||||
return expect(err.message).toEqual(
|
||||
"ENOENT: no such file or directory, access './test/testassets/notthere.json'"
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
tap.test('.fs.listFoldersSync() -> should get the file type from a string', async () => {
|
||||
expect(smartfile.fs.listFoldersSync('./test/testassets/')).to.include('testfolder');
|
||||
expect(smartfile.fs.listFoldersSync('./test/testassets/')).to.not.include('notExistentFolder');
|
||||
expect(smartfile.fs.listFoldersSync('./test/testassets/')).toContain('testfolder');
|
||||
expect(smartfile.fs.listFoldersSync('./test/testassets/')).not.toContain('notExistentFolder');
|
||||
});
|
||||
|
||||
tap.test('.fs.listFolders() -> should get the file type from a string', async () => {
|
||||
const folderArrayArg = await smartfile.fs.listFolders('./test/testassets/');
|
||||
expect(folderArrayArg).to.include('testfolder');
|
||||
expect(folderArrayArg).to.not.include('notExistentFolder');
|
||||
expect(folderArrayArg).toContain('testfolder');
|
||||
expect(folderArrayArg).not.toContain('notExistentFolder');
|
||||
});
|
||||
|
||||
tap.test('.fs.listFilesSync() -> should get the file type from a string', async () => {
|
||||
expect(smartfile.fs.listFilesSync('./test/testassets/')).to.include('mytest.json');
|
||||
expect(smartfile.fs.listFilesSync('./test/testassets/')).to.not.include('notExistentFile');
|
||||
expect(smartfile.fs.listFilesSync('./test/testassets/', /mytest\.json/)).to.include(
|
||||
'mytest.json'
|
||||
);
|
||||
expect(smartfile.fs.listFilesSync('./test/testassets/', /mytests.json/)).to.not.include(
|
||||
expect(smartfile.fs.listFilesSync('./test/testassets/')).toContain('mytest.json');
|
||||
expect(smartfile.fs.listFilesSync('./test/testassets/')).not.toContain('notExistentFile');
|
||||
expect(smartfile.fs.listFilesSync('./test/testassets/', /mytest\.json/)).toContain('mytest.json');
|
||||
expect(smartfile.fs.listFilesSync('./test/testassets/', /mytests.json/)).not.toContain(
|
||||
'mytest.json'
|
||||
);
|
||||
});
|
||||
|
||||
tap.test('.fs.listFiles() -> should get the file type from a string', async () => {
|
||||
const folderArrayArg = await smartfile.fs.listFiles('./test/testassets/');
|
||||
expect(folderArrayArg).to.include('mytest.json');
|
||||
expect(folderArrayArg).to.not.include('notExistentFile');
|
||||
expect(folderArrayArg).toContain('mytest.json');
|
||||
expect(folderArrayArg).not.toContain('notExistentFile');
|
||||
});
|
||||
|
||||
tap.test('.fs.listFileTree() -> should get a file tree', async () => {
|
||||
@ -57,8 +55,8 @@ tap.test('.fs.listFileTree() -> should get a file tree', async () => {
|
||||
path.resolve('./test/testassets/'),
|
||||
'**/*.txt'
|
||||
);
|
||||
expect(folderArrayArg).to.include('testfolder/testfile1.txt');
|
||||
expect(folderArrayArg).to.not.include('mytest.json');
|
||||
expect(folderArrayArg).toContain('testfolder/testfile1.txt');
|
||||
expect(folderArrayArg).not.toContain('mytest.json');
|
||||
});
|
||||
|
||||
tap.test('.fs.fileTreeToObject -> should read a file tree into an Object', async () => {
|
||||
@ -66,8 +64,8 @@ tap.test('.fs.fileTreeToObject -> should read a file tree into an Object', async
|
||||
path.resolve('./test/testassets/'),
|
||||
'**/*.txt'
|
||||
);
|
||||
expect(fileArrayArg[0]).to.be.instanceof(smartfile.Smartfile);
|
||||
expect(fileArrayArg[0].contents.toString()).to.equal(fileArrayArg[0].contentBuffer.toString());
|
||||
expect(fileArrayArg[0]).toBeInstanceOf(smartfile.Smartfile);
|
||||
expect(fileArrayArg[0].contents.toString()).toEqual(fileArrayArg[0].contentBuffer.toString());
|
||||
});
|
||||
|
||||
tap.test('.fs.copy() -> should copy a directory', async () => {
|
||||
@ -93,15 +91,15 @@ tap.test('.fs.remove -> should remove single files', async () => {
|
||||
|
||||
tap.test('.fs.removeSync -> should remove single files synchronouly', async () => {
|
||||
smartfile.fs.removeSync('./test/testassets/temp/testfile1.txt');
|
||||
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile1.txt')).to.be.false;
|
||||
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile1.txt')).toBeFalse();
|
||||
});
|
||||
|
||||
tap.test('.fs.removeMany -> should remove and array of files', async () => {
|
||||
smartfile.fs
|
||||
.removeMany(['./test/testassets/temp/testfile1.txt', './test/testassets/temp/testfile2.txt'])
|
||||
.then(() => {
|
||||
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile1.txt')).to.be.false;
|
||||
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile2.txt')).to.be.false;
|
||||
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile1.txt')).toBeFalse();
|
||||
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile2.txt')).toBeFalse();
|
||||
});
|
||||
});
|
||||
|
||||
@ -110,14 +108,14 @@ tap.test('.fs.removeManySync -> should remove and array of single files synchron
|
||||
'./test/testassets/temp/testfile1.txt',
|
||||
'./test/testassets/temp/testfile2.txt',
|
||||
]);
|
||||
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile1.txt')).to.be.false;
|
||||
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile2.txt')).to.be.false;
|
||||
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile1.txt')).toBeFalse();
|
||||
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile2.txt')).toBeFalse();
|
||||
});
|
||||
|
||||
tap.test('.fs.toObjectSync() -> should read an ' + '.yaml' + ' file to an object', async () => {
|
||||
tap.test('.fs.toObjectSync() -> should read an .yaml file to an object', async () => {
|
||||
const testData = smartfile.fs.toObjectSync('./test/testassets/mytest.yaml');
|
||||
expect(testData).to.include({ key1: 'this works' });
|
||||
expect(testData).to.include({ key2: 'this works too' });
|
||||
expect(testData.key1).toEqual('this works');
|
||||
expect(testData.key2).toEqual('this works too');
|
||||
});
|
||||
tap.test(
|
||||
'.fs.toObjectSync() -> should state unknown file type for unknown file types',
|
||||
@ -126,16 +124,14 @@ tap.test(
|
||||
}
|
||||
);
|
||||
|
||||
tap.test('.fs.toObjectSync() -> should read an ' + '.json' + ' file to an object', async () => {
|
||||
tap.test('.fs.toObjectSync() -> should read an .json file to an object', async () => {
|
||||
const testData = smartfile.fs.toObjectSync('./test/testassets/mytest.json');
|
||||
expect(testData).to.include({ key1: 'this works' });
|
||||
expect(testData).to.include({ key2: 'this works too' });
|
||||
expect(testData.key1).toEqual('this works');
|
||||
expect(testData.key2).toEqual('this works too');
|
||||
});
|
||||
|
||||
tap.test('.fs.toStringSync() -> should read a file to a string', async () => {
|
||||
expect(smartfile.fs.toStringSync('./test/testassets/mytest.txt')).to.equal(
|
||||
'Some TestString &&%$'
|
||||
);
|
||||
expect(smartfile.fs.toStringSync('./test/testassets/mytest.txt')).toEqual('Some TestString &&%$');
|
||||
});
|
||||
|
||||
// ---------------------------
|
||||
@ -143,7 +139,7 @@ tap.test('.fs.toStringSync() -> should read a file to a string', async () => {
|
||||
// ---------------------------
|
||||
|
||||
tap.test('.interpreter.filetype() -> should get the file type from a string', async () => {
|
||||
expect(smartfile.interpreter.filetype('./somefolder/data.json')).equal('json');
|
||||
expect(smartfile.interpreter.filetype('./somefolder/data.json')).toEqual('json');
|
||||
});
|
||||
|
||||
// ---------------------------
|
||||
@ -179,14 +175,14 @@ tap.test('.Smartfile -> should produce vinyl compatible files', async () => {
|
||||
'./test/testassets/testfolder/**/*'
|
||||
);
|
||||
const localSmartfile = smartfileArray[0];
|
||||
expect(localSmartfile).to.be.instanceof(smartfile.Smartfile);
|
||||
expect(localSmartfile.contents).to.be.instanceof(Buffer);
|
||||
expect(localSmartfile).toBeInstanceOf(smartfile.Smartfile);
|
||||
expect(localSmartfile.contents).toBeInstanceOf(Buffer);
|
||||
// tslint:disable-next-line:no-unused-expression
|
||||
expect(localSmartfile.isBuffer()).to.be.true;
|
||||
expect(localSmartfile.isBuffer()).toBeTrue();
|
||||
// tslint:disable-next-line:no-unused-expression
|
||||
expect(localSmartfile.isDirectory()).to.be.false;
|
||||
expect(localSmartfile.isDirectory()).toBeFalse();
|
||||
// tslint:disable-next-line:no-unused-expression
|
||||
expect(localSmartfile.isNull()).to.be.false;
|
||||
expect(localSmartfile.isNull()).toBeFalse();
|
||||
});
|
||||
|
||||
tap.test('should output a smartfile array to disk', async () => {
|
||||
@ -210,7 +206,19 @@ tap.test('should create, store and retrieve valid smartfiles', async () => {
|
||||
smartfileInstance.write();
|
||||
const smartfileInstance2 = await smartfile.Smartfile.fromFilePath(filePath);
|
||||
const retrievedString = smartfileInstance.contents.toString();
|
||||
expect(retrievedString).to.equal(fileString);
|
||||
expect(retrievedString).toEqual(fileString);
|
||||
});
|
||||
|
||||
tap.test('should get a hash', async () => {
|
||||
const fileString = 'hi there';
|
||||
const filePath = './test/testassets/utf8.txt';
|
||||
const smartfileInstance = await smartfile.Smartfile.fromString(filePath, fileString, 'utf8');
|
||||
const hash = await smartfileInstance.getHash();
|
||||
console.log(hash);
|
||||
});
|
||||
|
||||
tap.test('should wait for file to be ready', async () => {
|
||||
await smartfile.fs.waitForFileToBeReady('./test/testassets/mytest.json');
|
||||
});
|
||||
|
||||
tap.start();
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { tap, expect } from '@pushrocks/tapbundle';
|
||||
|
||||
import * as smartfile from '../ts';
|
||||
import * as smartfile from '../ts/index.js';
|
||||
|
||||
tap.test('should create a virtualdirectory', async () => {
|
||||
const virtualDir = await smartfile.VirtualDirectory.fromFsDirPath('./test/testassets/testfolder');
|
||||
expect(virtualDir.smartfileArray.length).to.equal(4);
|
||||
expect(virtualDir.smartfileArray.length).toEqual(4);
|
||||
});
|
||||
|
||||
tap.test('should write to a directory', async () => {
|
||||
@ -12,4 +12,4 @@ tap.test('should write to a directory', async () => {
|
||||
virtualDir.saveToDisk('./test/testassets/test');
|
||||
});
|
||||
|
||||
tap.start();
|
||||
tap.start();
|
||||
|
8
ts/00_commitinfo_data.ts
Normal file
8
ts/00_commitinfo_data.ts
Normal file
@ -0,0 +1,8 @@
|
||||
/**
|
||||
* autocreated commitinfo by @pushrocks/commitinfo
|
||||
*/
|
||||
export const commitinfo = {
|
||||
name: '@pushrocks/smartfile',
|
||||
version: '10.0.6',
|
||||
description: 'offers smart ways to work with files in nodejs'
|
||||
}
|
21
ts/index.ts
21
ts/index.ts
@ -1,12 +1,13 @@
|
||||
import * as plugins from './smartfile.plugins';
|
||||
import * as fsMod from './smartfile.fs';
|
||||
import * as interpreterMod from './smartfile.interpreter';
|
||||
import * as memoryMod from './smartfile.memory';
|
||||
import * as plugins from './smartfile.plugins.js';
|
||||
import * as fsMod from './smartfile.fs.js';
|
||||
import * as fsStreamMod from './smartfile.fsstream.js';
|
||||
import * as interpreterMod from './smartfile.interpreter.js';
|
||||
import * as memoryMod from './smartfile.memory.js';
|
||||
|
||||
export { Smartfile, ISmartfileConstructorOptions } from './smartfile.classes.smartfile';
|
||||
export { VirtualDirectory } from './smartfile.classes.virtualdirectory';
|
||||
export * from './smartfile.classes.smartfile.js';
|
||||
export * from './smartfile.classes.virtualdirectory.js';
|
||||
|
||||
|
||||
export let fs = fsMod;
|
||||
export let interpreter = interpreterMod;
|
||||
export let memory = memoryMod;
|
||||
export const fs = fsMod;
|
||||
export const fsStream = fsStreamMod;
|
||||
export const interpreter = interpreterMod;
|
||||
export const memory = memoryMod;
|
||||
|
@ -1,6 +1,6 @@
|
||||
import * as plugins from './smartfile.plugins';
|
||||
import * as fs from './smartfile.fs';
|
||||
import * as memory from './smartfile.memory';
|
||||
import * as plugins from './smartfile.plugins.js';
|
||||
import * as fs from './smartfile.fs.js';
|
||||
import * as memory from './smartfile.memory.js';
|
||||
|
||||
export interface ISmartfileConstructorOptions {
|
||||
path: string;
|
||||
@ -77,10 +77,10 @@ export class Smartfile extends plugins.smartjson.Smartjson {
|
||||
/**
|
||||
* a parsed path
|
||||
*/
|
||||
public get parsedPath (): plugins.path.ParsedPath {
|
||||
public get parsedPath(): plugins.path.ParsedPath {
|
||||
return plugins.path.parse(this.path);
|
||||
};
|
||||
public get absolutePath () {
|
||||
}
|
||||
public get absolutePath() {
|
||||
return plugins.path.join(this.base, this.path);
|
||||
}
|
||||
|
||||
@ -158,7 +158,7 @@ export class Smartfile extends plugins.smartjson.Smartjson {
|
||||
* @returns
|
||||
*/
|
||||
public async writeToDir(dirPathArg: string) {
|
||||
dirPathArg = plugins.smartpath.transform.toAbsolute(dirPathArg);
|
||||
dirPathArg = plugins.smartpath.transform.toAbsolute(dirPathArg) as string;
|
||||
const filePath = plugins.path.join(dirPathArg, this.path);
|
||||
await memory.toFs(this.contentBuffer, filePath);
|
||||
return filePath;
|
||||
@ -237,9 +237,29 @@ export class Smartfile extends plugins.smartjson.Smartjson {
|
||||
return false;
|
||||
}
|
||||
|
||||
public async getHash(typeArg: 'path' | 'content' | 'all' = 'all') {
|
||||
const pathHash = await plugins.smarthash.sha256FromString(this.path);
|
||||
const contentHash = await plugins.smarthash.sha256FromBuffer(this.contentBuffer);
|
||||
const combinedHash = await plugins.smarthash.sha256FromString(pathHash + contentHash);
|
||||
switch(typeArg) {
|
||||
case 'path':
|
||||
return pathHash;
|
||||
case 'content':
|
||||
return contentHash;
|
||||
case 'all':
|
||||
default:
|
||||
return combinedHash;
|
||||
}
|
||||
}
|
||||
|
||||
// update things
|
||||
public updateFileName(fileNameArg: string) {
|
||||
const oldFileName = this.parsedPath.base;
|
||||
this.path = this.path.replace(new RegExp(oldFileName + '$'), fileNameArg);
|
||||
}
|
||||
|
||||
public async editContentAsString(editFuncArg: (fileStringArg: string) => Promise<string>) {
|
||||
const newFileString = await editFuncArg(this.contentBuffer.toString());
|
||||
this.contentBuffer = Buffer.from(newFileString);
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { Smartfile } from './smartfile.classes.smartfile';
|
||||
import * as plugins from './smartfile.plugins';
|
||||
import * as fs from './smartfile.fs';
|
||||
import { Smartfile } from './smartfile.classes.smartfile.js';
|
||||
import * as plugins from './smartfile.plugins.js';
|
||||
import * as fs from './smartfile.fs.js';
|
||||
|
||||
/**
|
||||
* a virtual directory exposes a fs api
|
||||
@ -42,7 +42,7 @@ export class VirtualDirectory {
|
||||
|
||||
public async toVirtualDirTransferableObject(): Promise<plugins.smartfileInterfaces.VirtualDirTransferableObject> {
|
||||
return {
|
||||
files: this.smartfileArray.map(smartfileArg => smartfileArg.foldToJson())
|
||||
files: this.smartfileArray.map((smartfileArg) => smartfileArg.foldToJson()),
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
import * as plugins from './smartfile.plugins';
|
||||
import * as interpreter from './smartfile.interpreter';
|
||||
import * as plugins from './smartfile.plugins.js';
|
||||
import * as interpreter from './smartfile.interpreter.js';
|
||||
|
||||
import { Smartfile } from './smartfile.classes.smartfile';
|
||||
import { Smartfile } from './smartfile.classes.smartfile.js';
|
||||
|
||||
import * as memory from './smartfile.memory';
|
||||
import * as memory from './smartfile.memory.js';
|
||||
/*===============================================================
|
||||
============================ Checks =============================
|
||||
===============================================================*/
|
||||
@ -214,7 +214,7 @@ export const fileTreeToHash = async (dirPathArg: string, miniMatchFilter: string
|
||||
const fileTreeObject = await fileTreeToObject(dirPathArg, miniMatchFilter);
|
||||
let combinedString = '';
|
||||
for (const smartfile of fileTreeObject) {
|
||||
combinedString += smartfile.contentBuffer.toString();
|
||||
combinedString += await smartfile.getHash();
|
||||
}
|
||||
const hash = await plugins.smarthash.sha256FromString(combinedString);
|
||||
return hash;
|
||||
@ -231,7 +231,7 @@ export const fileTreeToObject = async (dirPathArg: string, miniMatchFilter: stri
|
||||
if (plugins.path.isAbsolute(miniMatchFilter)) {
|
||||
dirPath = '/';
|
||||
} else {
|
||||
dirPath = plugins.smartpath.transform.toAbsolute(dirPathArg);
|
||||
dirPath = plugins.smartpath.transform.toAbsolute(dirPathArg) as string;
|
||||
}
|
||||
|
||||
const fileTree = await listFileTree(dirPath, miniMatchFilter);
|
||||
@ -377,11 +377,25 @@ export const listFileTree = async (
|
||||
/**
|
||||
* checks wether a file is ready for processing
|
||||
*/
|
||||
export const waitForFileToBeReady = async (filePathArg: string) => {
|
||||
const limitedArray = new plugins.lik.LimitedArray<string>(3);
|
||||
if(!plugins.path.isAbsolute(filePathArg)) {
|
||||
export const waitForFileToBeReady = async (filePathArg: string): Promise<void> => {
|
||||
if (!plugins.path.isAbsolute(filePathArg)) {
|
||||
filePathArg = plugins.path.resolve(filePathArg);
|
||||
};
|
||||
const stats = await plugins.fsExtra.stat(filePathArg);
|
||||
stats.size
|
||||
}
|
||||
}
|
||||
const limitedArray = new plugins.lik.LimitedArray<number>(3);
|
||||
let fileReady = false;
|
||||
while (!fileReady) {
|
||||
const stats = await plugins.fsExtra.stat(filePathArg);
|
||||
limitedArray.addOne(stats.size);
|
||||
if (
|
||||
limitedArray.array.length < 3 ||
|
||||
!(
|
||||
limitedArray.array[0] === limitedArray.array[1] &&
|
||||
limitedArray.array[1] === limitedArray.array[2]
|
||||
)
|
||||
) {
|
||||
await plugins.smartdelay.delayFor(5000);
|
||||
} else {
|
||||
fileReady = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
14
ts/smartfile.fsstream.ts
Normal file
14
ts/smartfile.fsstream.ts
Normal file
@ -0,0 +1,14 @@
|
||||
/*
|
||||
This file contains logic for streaming things from and to the filesystem
|
||||
*/
|
||||
import * as plugins from './smartfile.plugins.js';
|
||||
|
||||
export const createReadStream = (pathArg: string) => {
|
||||
return plugins.fs.createReadStream(pathArg);
|
||||
};
|
||||
|
||||
export const createWriteStream = (pathArg: string) => {
|
||||
return plugins.fs.createWriteStream(pathArg);
|
||||
};
|
||||
|
||||
export const streamDirectory = async (dirPathArg: string) => {};
|
@ -1,4 +1,4 @@
|
||||
import * as plugins from './smartfile.plugins';
|
||||
import * as plugins from './smartfile.plugins.js';
|
||||
|
||||
export let filetype = (pathArg: string): string => {
|
||||
const extName = plugins.path.extname(pathArg);
|
||||
|
@ -1,7 +1,7 @@
|
||||
import * as plugins from './smartfile.plugins';
|
||||
import { Smartfile } from './smartfile.classes.smartfile';
|
||||
import * as smartfileFs from './smartfile.fs';
|
||||
import * as interpreter from './smartfile.interpreter';
|
||||
import * as plugins from './smartfile.plugins.js';
|
||||
import { Smartfile } from './smartfile.classes.smartfile.js';
|
||||
import * as smartfileFs from './smartfile.fs.js';
|
||||
import * as interpreter from './smartfile.interpreter.js';
|
||||
|
||||
/**
|
||||
* converts file to Object
|
||||
|
@ -7,17 +7,30 @@ export { fs, path };
|
||||
// @pushrocks scope
|
||||
import * as lik from '@pushrocks/lik';
|
||||
import * as smartfileInterfaces from '@pushrocks/smartfile-interfaces';
|
||||
import * as smartdelay from '@pushrocks/smartdelay';
|
||||
import * as smarthash from '@pushrocks/smarthash';
|
||||
import * as smartjson from '@pushrocks/smartjson';
|
||||
import * as smartmime from '@pushrocks/smartmime';
|
||||
import * as smartpath from '@pushrocks/smartpath';
|
||||
import * as smartpromise from '@pushrocks/smartpromise';
|
||||
import * as smartrequest from '@pushrocks/smartrequest';
|
||||
import * as smartstream from '@pushrocks/smartstream';
|
||||
|
||||
export { lik, smartfileInterfaces, smarthash, smartjson, smartmime, smartpath, smartpromise, smartrequest };
|
||||
export {
|
||||
lik,
|
||||
smartfileInterfaces,
|
||||
smartdelay,
|
||||
smarthash,
|
||||
smartjson,
|
||||
smartmime,
|
||||
smartpath,
|
||||
smartpromise,
|
||||
smartrequest,
|
||||
smartstream,
|
||||
};
|
||||
|
||||
// third party scope
|
||||
import * as fsExtra from 'fs-extra';
|
||||
import fsExtra from 'fs-extra';
|
||||
import glob from 'glob';
|
||||
import yaml from 'js-yaml';
|
||||
|
||||
|
17
tslint.json
17
tslint.json
@ -1,17 +0,0 @@
|
||||
{
|
||||
"extends": ["tslint:latest", "tslint-config-prettier"],
|
||||
"rules": {
|
||||
"semicolon": [true, "always"],
|
||||
"no-console": false,
|
||||
"ordered-imports": false,
|
||||
"object-literal-sort-keys": false,
|
||||
"member-ordering": {
|
||||
"options":{
|
||||
"order": [
|
||||
"static-method"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"defaultSeverity": "warning"
|
||||
}
|
Reference in New Issue
Block a user