Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
b1bedd0f54 | |||
ec58f7ac55 | |||
80743576ad | |||
32a6db645d | |||
45dfa16ab7 | |||
4fc4cda786 |
@ -4,7 +4,7 @@ image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
|||||||
cache:
|
cache:
|
||||||
paths:
|
paths:
|
||||||
- .npmci_cache/
|
- .npmci_cache/
|
||||||
key: "$CI_BUILD_STAGE"
|
key: '$CI_BUILD_STAGE'
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- security
|
- security
|
||||||
@ -20,17 +20,19 @@ mirror:
|
|||||||
script:
|
script:
|
||||||
- npmci git mirror
|
- npmci git mirror
|
||||||
tags:
|
tags:
|
||||||
|
- lossless
|
||||||
- docker
|
- docker
|
||||||
- notpriv
|
- notpriv
|
||||||
|
|
||||||
snyk:
|
snyk:
|
||||||
|
image: registry.gitlab.com/hosttoday/ht-docker-node:snyk
|
||||||
stage: security
|
stage: security
|
||||||
script:
|
script:
|
||||||
- npmci npm prepare
|
- npmci npm prepare
|
||||||
- npmci command npm install -g snyk
|
|
||||||
- npmci command npm install --ignore-scripts
|
- npmci command npm install --ignore-scripts
|
||||||
- npmci command snyk test
|
- npmci command snyk test
|
||||||
tags:
|
tags:
|
||||||
|
- lossless
|
||||||
- docker
|
- docker
|
||||||
- notpriv
|
- notpriv
|
||||||
|
|
||||||
@ -38,26 +40,41 @@ snyk:
|
|||||||
# test stage
|
# test stage
|
||||||
# ====================
|
# ====================
|
||||||
|
|
||||||
testLTS:
|
testStable:
|
||||||
stage: test
|
stage: test
|
||||||
script:
|
script:
|
||||||
- npmci npm prepare
|
- npmci npm prepare
|
||||||
- npmci node install lts
|
- npmci node install stable
|
||||||
- npmci npm install
|
- npmci npm install
|
||||||
- npmci npm test
|
- npmci npm test
|
||||||
coverage: /\d+.?\d+?\%\s*coverage/
|
coverage: /\d+.?\d+?\%\s*coverage/
|
||||||
tags:
|
tags:
|
||||||
|
- lossless
|
||||||
|
- docker
|
||||||
|
- priv
|
||||||
|
|
||||||
|
testBuild:
|
||||||
|
stage: test
|
||||||
|
script:
|
||||||
|
- npmci npm prepare
|
||||||
|
- npmci node install stable
|
||||||
|
- npmci npm install
|
||||||
|
- npmci command npm run build
|
||||||
|
coverage: /\d+.?\d+?\%\s*coverage/
|
||||||
|
tags:
|
||||||
|
- lossless
|
||||||
- docker
|
- docker
|
||||||
- notpriv
|
- notpriv
|
||||||
|
|
||||||
release:
|
release:
|
||||||
stage: release
|
stage: release
|
||||||
script:
|
script:
|
||||||
- npmci node install lts
|
- npmci node install stable
|
||||||
- npmci npm publish
|
- npmci npm publish
|
||||||
only:
|
only:
|
||||||
- tags
|
- tags
|
||||||
tags:
|
tags:
|
||||||
|
- lossless
|
||||||
- docker
|
- docker
|
||||||
- notpriv
|
- notpriv
|
||||||
|
|
||||||
@ -69,9 +86,11 @@ codequality:
|
|||||||
allow_failure: true
|
allow_failure: true
|
||||||
script:
|
script:
|
||||||
- npmci command npm install -g tslint typescript
|
- npmci command npm install -g tslint typescript
|
||||||
|
- npmci npm prepare
|
||||||
- npmci npm install
|
- npmci npm install
|
||||||
- npmci command "tslint -c tslint.json ./ts/**/*.ts"
|
- npmci command "tslint -c tslint.json ./ts/**/*.ts"
|
||||||
tags:
|
tags:
|
||||||
|
- lossless
|
||||||
- docker
|
- docker
|
||||||
- priv
|
- priv
|
||||||
|
|
||||||
@ -82,18 +101,20 @@ trigger:
|
|||||||
only:
|
only:
|
||||||
- tags
|
- tags
|
||||||
tags:
|
tags:
|
||||||
|
- lossless
|
||||||
- docker
|
- docker
|
||||||
- notpriv
|
- notpriv
|
||||||
|
|
||||||
pages:
|
pages:
|
||||||
image: hosttoday/ht-docker-node:npmci
|
|
||||||
stage: metadata
|
stage: metadata
|
||||||
script:
|
script:
|
||||||
|
- npmci node install lts
|
||||||
- npmci command npm install -g @gitzone/tsdoc
|
- npmci command npm install -g @gitzone/tsdoc
|
||||||
- npmci npm prepare
|
- npmci npm prepare
|
||||||
- npmci npm install
|
- npmci npm install
|
||||||
- npmci command tsdoc
|
- npmci command tsdoc
|
||||||
tags:
|
tags:
|
||||||
|
- lossless
|
||||||
- docker
|
- docker
|
||||||
- notpriv
|
- notpriv
|
||||||
only:
|
only:
|
||||||
|
29
.vscode/launch.json
vendored
Normal file
29
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "current file",
|
||||||
|
"type": "node",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
26
.vscode/settings.json
vendored
Normal file
26
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"json.schemas": [
|
||||||
|
{
|
||||||
|
"fileMatch": ["/npmextra.json"],
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"npmci": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "settings for npmci"
|
||||||
|
},
|
||||||
|
"gitzone": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "settings for gitzone",
|
||||||
|
"properties": {
|
||||||
|
"projectType": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["website", "element", "service", "npm"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
40
README.md
40
README.md
@ -1,40 +0,0 @@
|
|||||||
# @pushrocks/smartfile
|
|
||||||
smart ways to work with files in nodejs
|
|
||||||
|
|
||||||
## Availabililty and Links
|
|
||||||
* [npmjs.org (npm package)](https://www.npmjs.com/package/@pushrocks/smartfile)
|
|
||||||
* [gitlab.com (source)](https://gitlab.com/pushrocks/smartfile)
|
|
||||||
* [github.com (source mirror)](https://github.com/pushrocks/smartfile)
|
|
||||||
* [docs (typedoc)](https://pushrocks.gitlab.io/smartfile/)
|
|
||||||
|
|
||||||
## Status for master
|
|
||||||
[](https://gitlab.com/pushrocks/smartfile/commits/master)
|
|
||||||
[](https://gitlab.com/pushrocks/smartfile/commits/master)
|
|
||||||
[](https://www.npmjs.com/package/@pushrocks/smartfile)
|
|
||||||
[](https://snyk.io/test/npm/@pushrocks/smartfile)
|
|
||||||
[](https://nodejs.org/dist/latest-v10.x/docs/api/)
|
|
||||||
[](https://nodejs.org/dist/latest-v10.x/docs/api/)
|
|
||||||
[](https://prettier.io/)
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
smartfile is an approach of being one tool to handle files in diverse environments.
|
|
||||||
|
|
||||||
### Smartfile Sections
|
|
||||||
|
|
||||||
smartfile thinks in sections:
|
|
||||||
|
|
||||||
| section | description |
|
|
||||||
| ----------- | ---------------------------------------------------------------------------- |
|
|
||||||
| fs | (object) gets data from fs to somewhere |
|
|
||||||
| memory | gets data from memory to somewhere |
|
|
||||||
| remote | gets data from remote locations to somewhere |
|
|
||||||
| interpreter | (object) handles yaml and json |
|
|
||||||
| smartfile | (class) a virtual representation of a file, alternative to vinyl file format |
|
|
||||||
|
|
||||||
For further information read the linked docs at the top of this readme.
|
|
||||||
|
|
||||||
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
|
|
||||||
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
|
|
||||||
|
|
||||||
[](https://maintainedby.lossless.com)
|
|
@ -9,6 +9,7 @@
|
|||||||
"npmAccessLevel": "public"
|
"npmAccessLevel": "public"
|
||||||
},
|
},
|
||||||
"gitzone": {
|
"gitzone": {
|
||||||
|
"projectType": "npm",
|
||||||
"module": {
|
"module": {
|
||||||
"githost": "gitlab.com",
|
"githost": "gitlab.com",
|
||||||
"gitscope": "pushrocks",
|
"gitscope": "pushrocks",
|
||||||
|
976
package-lock.json
generated
976
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
40
package.json
40
package.json
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@pushrocks/smartfile",
|
"name": "@pushrocks/smartfile",
|
||||||
"private": false,
|
"private": false,
|
||||||
"version": "7.0.4",
|
"version": "7.0.7",
|
||||||
"description": "offers smart ways to work with files in nodejs",
|
"description": "offers smart ways to work with files in nodejs",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"typings": "dist/index.d.ts",
|
"typings": "dist/index.d.ts",
|
||||||
@ -28,32 +28,32 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://gitlab.com/pushrocks/smartfile",
|
"homepage": "https://gitlab.com/pushrocks/smartfile",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@pushrocks/smarthash": "^2.0.6",
|
||||||
"@pushrocks/smartpath": "^4.0.1",
|
"@pushrocks/smartpath": "^4.0.1",
|
||||||
"@pushrocks/smartpromise": "^3.0.2",
|
"@pushrocks/smartpromise": "^3.0.5",
|
||||||
"@pushrocks/smartrequest": "^1.1.14",
|
"@pushrocks/smartrequest": "^1.1.27",
|
||||||
"@types/fs-extra": "^5.0.5",
|
"@types/fs-extra": "^8.0.0",
|
||||||
"@types/vinyl": "^2.0.2",
|
"fs-extra": "^8.1.0",
|
||||||
"fs-extra": "^7.0.1",
|
"glob": "^7.1.4",
|
||||||
"glob": "^7.1.3",
|
"js-yaml": "^3.13.1"
|
||||||
"js-yaml": "^3.13.1",
|
|
||||||
"vinyl-file": "^3.0.0"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@gitzone/tsbuild": "^2.1.8",
|
"@gitzone/tsbuild": "^2.1.17",
|
||||||
"@gitzone/tsrun": "^1.2.1",
|
"@gitzone/tsrun": "^1.2.8",
|
||||||
"@gitzone/tstest": "^1.0.18",
|
"@gitzone/tstest": "^1.0.24",
|
||||||
"@pushrocks/tapbundle": "^3.0.7",
|
"@pushrocks/tapbundle": "^3.0.13",
|
||||||
"@types/node": "^11.13.0",
|
"@types/node": "^12.7.8",
|
||||||
"gulp-function": "^2.2.14",
|
"gulp-function": "^2.2.14",
|
||||||
"tslint": "^5.15.0",
|
"tslint": "^5.20.0",
|
||||||
"tslint-config-prettier": "^1.18.0"
|
"tslint-config-prettier": "^1.18.0"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"ts/*",
|
"ts/**/*",
|
||||||
"ts_web/*",
|
"ts_web/**/*",
|
||||||
"dist/*",
|
"dist/**/*",
|
||||||
"dist_web/*",
|
"dist_web/**/*",
|
||||||
"assets/*",
|
"dist_ts_web/**/*",
|
||||||
|
"assets/**/*",
|
||||||
"cli.js",
|
"cli.js",
|
||||||
"npmextra.json",
|
"npmextra.json",
|
||||||
"readme.md"
|
"readme.md"
|
||||||
|
46
test/test.ts
46
test/test.ts
@ -36,8 +36,12 @@ tap.test('.fs.listFolders() -> should get the file type from a string', async ()
|
|||||||
tap.test('.fs.listFilesSync() -> should get the file type from a string', async () => {
|
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.include('mytest.json');
|
||||||
expect(smartfile.fs.listFilesSync('./test/testassets/')).to.not.include('notExistentFile');
|
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/', /mytest\.json/)).to.include(
|
||||||
expect(smartfile.fs.listFilesSync('./test/testassets/', /mytests.json/)).to.not.include('mytest.json');
|
'mytest.json'
|
||||||
|
);
|
||||||
|
expect(smartfile.fs.listFilesSync('./test/testassets/', /mytests.json/)).to.not.include(
|
||||||
|
'mytest.json'
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
tap.test('.fs.listFiles() -> should get the file type from a string', async () => {
|
tap.test('.fs.listFiles() -> should get the file type from a string', async () => {
|
||||||
@ -47,13 +51,19 @@ tap.test('.fs.listFiles() -> should get the file type from a string', async () =
|
|||||||
});
|
});
|
||||||
|
|
||||||
tap.test('.fs.listFileTree() -> should get a file tree', async () => {
|
tap.test('.fs.listFileTree() -> should get a file tree', async () => {
|
||||||
let folderArrayArg = await smartfile.fs.listFileTree(path.resolve('./test/testassets/'), '**/*.txt');
|
let folderArrayArg = await smartfile.fs.listFileTree(
|
||||||
|
path.resolve('./test/testassets/'),
|
||||||
|
'**/*.txt'
|
||||||
|
);
|
||||||
expect(folderArrayArg).to.include('testfolder/testfile1.txt');
|
expect(folderArrayArg).to.include('testfolder/testfile1.txt');
|
||||||
expect(folderArrayArg).to.not.include('mytest.json');
|
expect(folderArrayArg).to.not.include('mytest.json');
|
||||||
});
|
});
|
||||||
|
|
||||||
tap.test('.fs.fileTreeToObject -> should read a file tree into an Object', async () => {
|
tap.test('.fs.fileTreeToObject -> should read a file tree into an Object', async () => {
|
||||||
let fileArrayArg = await smartfile.fs.fileTreeToObject(path.resolve('./test/testassets/'), '**/*.txt');
|
let fileArrayArg = await smartfile.fs.fileTreeToObject(
|
||||||
|
path.resolve('./test/testassets/'),
|
||||||
|
'**/*.txt'
|
||||||
|
);
|
||||||
expect(fileArrayArg[0]).to.be.instanceof(smartfile.Smartfile);
|
expect(fileArrayArg[0]).to.be.instanceof(smartfile.Smartfile);
|
||||||
expect(fileArrayArg[0].contents.toString()).to.equal(fileArrayArg[0].contentBuffer.toString());
|
expect(fileArrayArg[0].contents.toString()).to.equal(fileArrayArg[0].contentBuffer.toString());
|
||||||
});
|
});
|
||||||
@ -67,7 +77,10 @@ tap.test('.fs.copy() -> should copy a file', async () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
tap.test('.fs.copy() -> should copy a file and rename it', async () => {
|
tap.test('.fs.copy() -> should copy a file and rename it', async () => {
|
||||||
await smartfile.fs.copy('./test/testassets/mytest.yaml', './test/testassets/temp/mytestRenamed.yaml');
|
await smartfile.fs.copy(
|
||||||
|
'./test/testassets/mytest.yaml',
|
||||||
|
'./test/testassets/temp/mytestRenamed.yaml'
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
tap.test('.fs.remove() -> should remove an entire directory', async () => {});
|
tap.test('.fs.remove() -> should remove an entire directory', async () => {});
|
||||||
@ -82,14 +95,19 @@ tap.test('.fs.removeSync -> should remove single files synchronouly', async () =
|
|||||||
});
|
});
|
||||||
|
|
||||||
tap.test('.fs.removeMany -> should remove and array of files', async () => {
|
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(() => {
|
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/testfile1.txt')).to.be.false;
|
||||||
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile2.txt')).to.be.false;
|
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile2.txt')).to.be.false;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
tap.test('.fs.removeManySync -> should remove and array of single files synchronouly', async () => {
|
tap.test('.fs.removeManySync -> should remove and array of single files synchronouly', async () => {
|
||||||
smartfile.fs.removeManySync(['./test/testassets/temp/testfile1.txt', './test/testassets/temp/testfile2.txt']);
|
smartfile.fs.removeManySync([
|
||||||
|
'./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/testfile1.txt')).to.be.false;
|
||||||
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile2.txt')).to.be.false;
|
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile2.txt')).to.be.false;
|
||||||
});
|
});
|
||||||
@ -113,7 +131,9 @@ tap.test('.fs.toObjectSync() -> should read an ' + '.json' + ' file to an object
|
|||||||
});
|
});
|
||||||
|
|
||||||
tap.test('.fs.toStringSync() -> should read a file to a string', async () => {
|
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')).to.equal(
|
||||||
|
'Some TestString &&%$'
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
// ---------------------------
|
// ---------------------------
|
||||||
@ -130,7 +150,10 @@ tap.test('.interpreter.filetype() -> should get the file type from a string', as
|
|||||||
|
|
||||||
tap.test('.memory.toFs() -> should write a file to disk and return a promise', async () => {
|
tap.test('.memory.toFs() -> should write a file to disk and return a promise', async () => {
|
||||||
let localString = 'myString';
|
let localString = 'myString';
|
||||||
await smartfile.memory.toFs(localString, path.join(process.cwd(), './test/testassets/temp/testMemToFs.txt'));
|
await smartfile.memory.toFs(
|
||||||
|
localString,
|
||||||
|
path.join(process.cwd(), './test/testassets/temp/testMemToFs.txt')
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
tap.test(
|
tap.test(
|
||||||
@ -164,7 +187,10 @@ tap.test('.remote.toString() -> should reject a Promise when the link is false',
|
|||||||
// ---------------------------
|
// ---------------------------
|
||||||
|
|
||||||
tap.test('.Smartfile -> should produce vinyl compatible files', async () => {
|
tap.test('.Smartfile -> should produce vinyl compatible files', async () => {
|
||||||
let smartfileArray = await smartfile.fs.fileTreeToObject(process.cwd(), './test/testassets/testfolder/**/*');
|
let smartfileArray = await smartfile.fs.fileTreeToObject(
|
||||||
|
process.cwd(),
|
||||||
|
'./test/testassets/testfolder/**/*'
|
||||||
|
);
|
||||||
let localSmartfile = smartfileArray[0];
|
let localSmartfile = smartfileArray[0];
|
||||||
expect(localSmartfile).to.be.instanceof(smartfile.Smartfile);
|
expect(localSmartfile).to.be.instanceof(smartfile.Smartfile);
|
||||||
expect(localSmartfile.contents).to.be.instanceof(Buffer);
|
expect(localSmartfile.contents).to.be.instanceof(Buffer);
|
||||||
|
@ -29,7 +29,7 @@ export const fileExistsSync = (filePath): boolean => {
|
|||||||
* @param filePath
|
* @param filePath
|
||||||
* @returns {any}
|
* @returns {any}
|
||||||
*/
|
*/
|
||||||
export let fileExists = async (filePath): Promise<boolean> => {
|
export const fileExists = async (filePath): Promise<boolean> => {
|
||||||
const done = plugins.smartpromise.defer<boolean>();
|
const done = plugins.smartpromise.defer<boolean>();
|
||||||
plugins.fs.access(filePath, 4, err => {
|
plugins.fs.access(filePath, 4, err => {
|
||||||
err ? done.resolve(false) : done.resolve(true);
|
err ? done.resolve(false) : done.resolve(true);
|
||||||
@ -64,7 +64,7 @@ export const isFile = (pathArg): boolean => {
|
|||||||
*/
|
*/
|
||||||
export const copy = async (fromArg: string, toArg: string): Promise<boolean> => {
|
export const copy = async (fromArg: string, toArg: string): Promise<boolean> => {
|
||||||
const done = plugins.smartpromise.defer<boolean>();
|
const done = plugins.smartpromise.defer<boolean>();
|
||||||
plugins.fsExtra.copy(fromArg, toArg, {}, (err) => {
|
plugins.fsExtra.copy(fromArg, toArg, {}, err => {
|
||||||
if (err) {
|
if (err) {
|
||||||
throw new Error(`Could not copy from ${fromArg} to ${toArg}: ${err}`);
|
throw new Error(`Could not copy from ${fromArg} to ${toArg}: ${err}`);
|
||||||
}
|
}
|
||||||
@ -84,16 +84,14 @@ export const copySync = (fromArg: string, toArg: string): boolean => {
|
|||||||
/**
|
/**
|
||||||
* ensures that a directory is in place
|
* ensures that a directory is in place
|
||||||
*/
|
*/
|
||||||
export let ensureDir = (dirPathArg: string) => {
|
export const ensureDir = async (dirPathArg: string) => {
|
||||||
let done = plugins.smartpromise.defer();
|
await plugins.fsExtra.ensureDir(dirPathArg);
|
||||||
plugins.fsExtra.ensureDir(dirPathArg, done.resolve);
|
|
||||||
return done.promise;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ensures that a directory is in place
|
* ensures that a directory is in place
|
||||||
*/
|
*/
|
||||||
export let ensureDirSync = (dirPathArg: string) => {
|
export const ensureDirSync = (dirPathArg: string) => {
|
||||||
plugins.fsExtra.ensureDirSync(dirPathArg);
|
plugins.fsExtra.ensureDirSync(dirPathArg);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -101,19 +99,16 @@ export let ensureDirSync = (dirPathArg: string) => {
|
|||||||
* ensure an empty directory
|
* ensure an empty directory
|
||||||
* @executes ASYNC
|
* @executes ASYNC
|
||||||
*/
|
*/
|
||||||
export let ensureEmptyDir = (dirPathArg: string) => {
|
export const ensureEmptyDir = async (dirPathArg: string) => {
|
||||||
let done = plugins.smartpromise.defer();
|
await plugins.fsExtra.ensureDir(dirPathArg);
|
||||||
plugins.fsExtra.ensureDir(dirPathArg, () => {
|
await plugins.fsExtra.emptyDir(dirPathArg);
|
||||||
plugins.fsExtra.emptyDir(dirPathArg, done.resolve);
|
|
||||||
});
|
|
||||||
return done.promise;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ensure an empty directory
|
* ensure an empty directory
|
||||||
* @executes SYNC
|
* @executes SYNC
|
||||||
*/
|
*/
|
||||||
export let ensureEmptyDirSync = (dirPathArg: string) => {
|
export const ensureEmptyDirSync = (dirPathArg: string) => {
|
||||||
plugins.fsExtra.ensureDirSync(dirPathArg);
|
plugins.fsExtra.ensureDirSync(dirPathArg);
|
||||||
plugins.fsExtra.emptyDirSync(dirPathArg);
|
plugins.fsExtra.emptyDirSync(dirPathArg);
|
||||||
};
|
};
|
||||||
@ -125,11 +120,8 @@ export let ensureEmptyDirSync = (dirPathArg: string) => {
|
|||||||
* @returns Promise<void>
|
* @returns Promise<void>
|
||||||
* @exec ASYNC
|
* @exec ASYNC
|
||||||
*/
|
*/
|
||||||
export let ensureFile = (filePathArg, initFileStringArg): Promise<void> => {
|
export const ensureFile = async (filePathArg, initFileStringArg): Promise<void> => {
|
||||||
let done = plugins.smartpromise.defer<void>();
|
|
||||||
ensureFileSync(filePathArg, initFileStringArg);
|
ensureFileSync(filePathArg, initFileStringArg);
|
||||||
done.resolve();
|
|
||||||
return done.promise;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -139,7 +131,7 @@ export let ensureFile = (filePathArg, initFileStringArg): Promise<void> => {
|
|||||||
* @returns Promise<void>
|
* @returns Promise<void>
|
||||||
* @exec SYNC
|
* @exec SYNC
|
||||||
*/
|
*/
|
||||||
export let ensureFileSync = (filePathArg: string, initFileStringArg: string): void => {
|
export const ensureFileSync = (filePathArg: string, initFileStringArg: string): void => {
|
||||||
if (fileExistsSync(filePathArg)) {
|
if (fileExistsSync(filePathArg)) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
@ -150,38 +142,33 @@ export let ensureFileSync = (filePathArg: string, initFileStringArg: string): vo
|
|||||||
/**
|
/**
|
||||||
* removes a file or folder from local disk
|
* removes a file or folder from local disk
|
||||||
*/
|
*/
|
||||||
export let remove = function(pathArg: string): Promise<void> {
|
export const remove = async (pathArg: string): Promise<void> => {
|
||||||
let done = plugins.smartpromise.defer<void>();
|
await plugins.fsExtra.remove(pathArg);
|
||||||
plugins.fsExtra.remove(pathArg, function() {
|
|
||||||
done.resolve();
|
|
||||||
});
|
|
||||||
return done.promise;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* removes a file SYNCHRONOUSLY from local disk
|
* removes a file SYNCHRONOUSLY from local disk
|
||||||
*/
|
*/
|
||||||
export let removeSync = function(pathArg: string): boolean {
|
export const removeSync = (pathArg: string): void => {
|
||||||
plugins.fsExtra.removeSync(pathArg);
|
plugins.fsExtra.removeSync(pathArg);
|
||||||
return true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* removes an array of filePaths from disk
|
* removes an array of filePaths from disk
|
||||||
*/
|
*/
|
||||||
export let removeMany = function(filePathArrayArg: string[]) {
|
export const removeMany = async (filePathArrayArg: string[]) => {
|
||||||
let promiseArray: Promise<void>[] = [];
|
const promiseArray: Array<Promise<void>> = [];
|
||||||
for (let filePath of filePathArrayArg) {
|
for (const filePath of filePathArrayArg) {
|
||||||
promiseArray.push(remove(filePath));
|
promiseArray.push(remove(filePath));
|
||||||
}
|
}
|
||||||
return Promise.all(promiseArray);
|
await Promise.all(promiseArray);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* like removeFilePathArray but SYNCHRONOUSLY
|
* like removeFilePathArray but SYNCHRONOUSLY
|
||||||
*/
|
*/
|
||||||
export let removeManySync = function(filePathArrayArg: string[]): void {
|
export const removeManySync = (filePathArrayArg: string[]): void => {
|
||||||
for (let filePath of filePathArrayArg) {
|
for (const filePath of filePathArrayArg) {
|
||||||
removeSync(filePath);
|
removeSync(filePath);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -196,7 +183,7 @@ export let removeManySync = function(filePathArrayArg: string[]): void {
|
|||||||
* @param fileTypeArg
|
* @param fileTypeArg
|
||||||
* @returns {any}
|
* @returns {any}
|
||||||
*/
|
*/
|
||||||
export let toObjectSync = function(filePathArg, fileTypeArg?) {
|
export const toObjectSync = (filePathArg, fileTypeArg?) => {
|
||||||
const fileString = plugins.fsExtra.readFileSync(filePathArg, 'utf8');
|
const fileString = plugins.fsExtra.readFileSync(filePathArg, 'utf8');
|
||||||
let fileType;
|
let fileType;
|
||||||
fileTypeArg ? (fileType = fileTypeArg) : (fileType = SmartfileInterpreter.filetype(filePathArg));
|
fileTypeArg ? (fileType = fileTypeArg) : (fileType = SmartfileInterpreter.filetype(filePathArg));
|
||||||
@ -213,6 +200,21 @@ export const toStringSync = (filePath: string): string => {
|
|||||||
return fileString;
|
return fileString;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
const hash = await plugins.smarthash.sha256FromString(combinedString);
|
||||||
|
return hash;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* creates a smartfile array from a directory
|
||||||
|
* @param dirPathArg the directory to start from
|
||||||
|
* @param miniMatchFilter a minimatch filter of what files to include
|
||||||
|
*/
|
||||||
export const fileTreeToObject = async (dirPathArg: string, miniMatchFilter: string) => {
|
export const fileTreeToObject = async (dirPathArg: string, miniMatchFilter: string) => {
|
||||||
// handle absolute miniMatchFilter
|
// handle absolute miniMatchFilter
|
||||||
let dirPath: string;
|
let dirPath: string;
|
||||||
@ -224,15 +226,15 @@ export const fileTreeToObject = async (dirPathArg: string, miniMatchFilter: stri
|
|||||||
|
|
||||||
const fileTree = await listFileTree(dirPath, miniMatchFilter);
|
const fileTree = await listFileTree(dirPath, miniMatchFilter);
|
||||||
const smartfileArray: Smartfile[] = [];
|
const smartfileArray: Smartfile[] = [];
|
||||||
for (let filePath of fileTree) {
|
for (const filePath of fileTree) {
|
||||||
let readPath = ((): string => {
|
const readPath = ((): string => {
|
||||||
if (!plugins.path.isAbsolute(filePath)) {
|
if (!plugins.path.isAbsolute(filePath)) {
|
||||||
return plugins.path.join(dirPath, filePath);
|
return plugins.path.join(dirPath, filePath);
|
||||||
} else {
|
} else {
|
||||||
return filePath;
|
return filePath;
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
let fileContentString = toStringSync(readPath);
|
const fileContentString = toStringSync(readPath);
|
||||||
|
|
||||||
// push a read file as Smartfile
|
// push a read file as Smartfile
|
||||||
smartfileArray.push(
|
smartfileArray.push(
|
||||||
@ -246,21 +248,11 @@ export const fileTreeToObject = async (dirPathArg: string, miniMatchFilter: stri
|
|||||||
return smartfileArray;
|
return smartfileArray;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param filePathArg
|
|
||||||
* @param options
|
|
||||||
* @returns {number}
|
|
||||||
*/
|
|
||||||
export let toVinylSync = function(filePathArg, options = {}) {
|
|
||||||
return plugins.vinylFile.readSync(filePathArg, options);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* lists Folders in a directory on local disk
|
* lists Folders in a directory on local disk
|
||||||
* @returns Promise with an array that contains the folder names
|
* @returns Promise with an array that contains the folder names
|
||||||
*/
|
*/
|
||||||
export let listFolders = async (pathArg: string, regexFilter?: RegExp): Promise<string[]> => {
|
export const listFolders = async (pathArg: string, regexFilter?: RegExp): Promise<string[]> => {
|
||||||
return listFoldersSync(pathArg, regexFilter);
|
return listFoldersSync(pathArg, regexFilter);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -268,7 +260,7 @@ export let listFolders = async (pathArg: string, regexFilter?: RegExp): Promise<
|
|||||||
* lists Folders SYNCHRONOUSLY in a directory on local disk
|
* lists Folders SYNCHRONOUSLY in a directory on local disk
|
||||||
* @returns an array with the folder names as strings
|
* @returns an array with the folder names as strings
|
||||||
*/
|
*/
|
||||||
export let listFoldersSync = (pathArg: string, regexFilter?: RegExp): string[] => {
|
export const listFoldersSync = (pathArg: string, regexFilter?: RegExp): string[] => {
|
||||||
let folderArray = plugins.fsExtra.readdirSync(pathArg).filter(file => {
|
let folderArray = plugins.fsExtra.readdirSync(pathArg).filter(file => {
|
||||||
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isDirectory();
|
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isDirectory();
|
||||||
});
|
});
|
||||||
@ -284,7 +276,7 @@ export let listFoldersSync = (pathArg: string, regexFilter?: RegExp): string[] =
|
|||||||
* lists Files in a directory on local disk
|
* lists Files in a directory on local disk
|
||||||
* @returns Promise
|
* @returns Promise
|
||||||
*/
|
*/
|
||||||
export let listFiles = async (pathArg: string, regexFilter?: RegExp): Promise<string[]> => {
|
export const listFiles = async (pathArg: string, regexFilter?: RegExp): Promise<string[]> => {
|
||||||
return listFilesSync(pathArg, regexFilter);
|
return listFilesSync(pathArg, regexFilter);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -292,7 +284,7 @@ export let listFiles = async (pathArg: string, regexFilter?: RegExp): Promise<st
|
|||||||
* lists Files SYNCHRONOUSLY in a directory on local disk
|
* lists Files SYNCHRONOUSLY in a directory on local disk
|
||||||
* @returns an array with the folder names as strings
|
* @returns an array with the folder names as strings
|
||||||
*/
|
*/
|
||||||
export let listFilesSync = (pathArg: string, regexFilter?: RegExp): string[] => {
|
export const listFilesSync = (pathArg: string, regexFilter?: RegExp): string[] => {
|
||||||
let fileArray = plugins.fsExtra.readdirSync(pathArg).filter(file => {
|
let fileArray = plugins.fsExtra.readdirSync(pathArg).filter(file => {
|
||||||
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isFile();
|
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isFile();
|
||||||
});
|
});
|
||||||
@ -308,7 +300,7 @@ export let listFilesSync = (pathArg: string, regexFilter?: RegExp): string[] =>
|
|||||||
* lists all items (folders AND files) in a directory on local disk
|
* lists all items (folders AND files) in a directory on local disk
|
||||||
* @returns Promise<string[]>
|
* @returns Promise<string[]>
|
||||||
*/
|
*/
|
||||||
export let listAllItems = async (pathArg: string, regexFilter?: RegExp): Promise<string[]> => {
|
export const listAllItems = async (pathArg: string, regexFilter?: RegExp): Promise<string[]> => {
|
||||||
return listAllItemsSync(pathArg, regexFilter);
|
return listAllItemsSync(pathArg, regexFilter);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -317,8 +309,8 @@ export let listAllItems = async (pathArg: string, regexFilter?: RegExp): Promise
|
|||||||
* @returns an array with the folder names as strings
|
* @returns an array with the folder names as strings
|
||||||
* @executes SYNC
|
* @executes SYNC
|
||||||
*/
|
*/
|
||||||
export let listAllItemsSync = (pathArg: string, regexFilter?: RegExp): string[] => {
|
export const listAllItemsSync = (pathArg: string, regexFilter?: RegExp): string[] => {
|
||||||
let allItmesArray = plugins.fsExtra.readdirSync(pathArg).filter(function(file) {
|
let allItmesArray = plugins.fsExtra.readdirSync(pathArg).filter(file => {
|
||||||
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isFile();
|
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isFile();
|
||||||
});
|
});
|
||||||
if (regexFilter) {
|
if (regexFilter) {
|
||||||
@ -334,7 +326,11 @@ export let listAllItemsSync = (pathArg: string, regexFilter?: RegExp): string[]
|
|||||||
* note: if the miniMatch Filter is an absolute path, the cwdArg will be omitted
|
* note: if the miniMatch Filter is an absolute path, the cwdArg will be omitted
|
||||||
* @returns Promise<string[]> string array with the absolute paths of all matching files
|
* @returns Promise<string[]> string array with the absolute paths of all matching files
|
||||||
*/
|
*/
|
||||||
export const listFileTree = async (dirPathArg: string, miniMatchFilter: string, absolutePathsBool: boolean = false): Promise<string[]> => {
|
export const listFileTree = async (
|
||||||
|
dirPathArg: string,
|
||||||
|
miniMatchFilter: string,
|
||||||
|
absolutePathsBool: boolean = false
|
||||||
|
): Promise<string[]> => {
|
||||||
const done = plugins.smartpromise.defer<string[]>();
|
const done = plugins.smartpromise.defer<string[]>();
|
||||||
|
|
||||||
// handle absolute miniMatchFilter
|
// handle absolute miniMatchFilter
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import plugins = require('./smartfile.plugins');
|
import plugins = require('./smartfile.plugins');
|
||||||
|
|
||||||
export let filetype = (pathArg: string): string => {
|
export let filetype = (pathArg: string): string => {
|
||||||
let extName = plugins.path.extname(pathArg);
|
const extName = plugins.path.extname(pathArg);
|
||||||
let fileType = extName.replace(/\.([a-z]*)/, '$1'); // remove . form fileType
|
const fileType = extName.replace(/\.([a-z]*)/, '$1'); // remove . form fileType
|
||||||
return fileType;
|
return fileType;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,9 +1,20 @@
|
|||||||
export import fs = require('fs');
|
// node native scope
|
||||||
export import fsExtra = require('fs-extra');
|
import * as fs from 'fs';
|
||||||
export let glob = require('glob');
|
import * as path from 'path';
|
||||||
export import path = require('path');
|
|
||||||
export import smartpromise = require('@pushrocks/smartpromise');
|
export { fs, path };
|
||||||
export import smartrequest = require('@pushrocks/smartrequest');
|
|
||||||
export import smartpath = require('@pushrocks/smartpath');
|
// @pushrocks scope
|
||||||
export let vinylFile = require('vinyl-file');
|
import * as smarthash from '@pushrocks/smarthash';
|
||||||
export let yaml = require('js-yaml');
|
import * as smartpath from '@pushrocks/smartpath';
|
||||||
|
import * as smartpromise from '@pushrocks/smartpromise';
|
||||||
|
import * as smartrequest from '@pushrocks/smartrequest';
|
||||||
|
|
||||||
|
export { smarthash, smartpath, smartpromise, smartrequest };
|
||||||
|
|
||||||
|
// third party scope
|
||||||
|
import * as fsExtra from 'fs-extra';
|
||||||
|
import glob from 'glob';
|
||||||
|
import yaml from 'js-yaml';
|
||||||
|
|
||||||
|
export { fsExtra, glob, yaml };
|
||||||
|
Reference in New Issue
Block a user