Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
b3ce66167e | |||
c7f800fc88 | |||
d8f4b011b7 | |||
b4add67f37 | |||
f86f053bd5 | |||
a78ca67b43 | |||
b1bedd0f54 | |||
ec58f7ac55 | |||
80743576ad | |||
32a6db645d | |||
45dfa16ab7 | |||
4fc4cda786 |
4
.gitignore
vendored
4
.gitignore
vendored
@ -15,8 +15,6 @@ node_modules/
|
||||
|
||||
# builds
|
||||
dist/
|
||||
dist_web/
|
||||
dist_serve/
|
||||
dist_ts_web/
|
||||
dist_*/
|
||||
|
||||
# custom
|
@ -3,14 +3,14 @@ image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
||||
|
||||
cache:
|
||||
paths:
|
||||
- .npmci_cache/
|
||||
key: "$CI_BUILD_STAGE"
|
||||
- .npmci_cache/
|
||||
key: '$CI_BUILD_STAGE'
|
||||
|
||||
stages:
|
||||
- security
|
||||
- test
|
||||
- release
|
||||
- metadata
|
||||
- security
|
||||
- test
|
||||
- release
|
||||
- metadata
|
||||
|
||||
# ====================
|
||||
# security stage
|
||||
@ -18,48 +18,66 @@ stages:
|
||||
mirror:
|
||||
stage: security
|
||||
script:
|
||||
- npmci git mirror
|
||||
- npmci git mirror
|
||||
tags:
|
||||
- docker
|
||||
- notpriv
|
||||
- lossless
|
||||
- docker
|
||||
- notpriv
|
||||
|
||||
snyk:
|
||||
audit:
|
||||
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
||||
stage: security
|
||||
script:
|
||||
- npmci npm prepare
|
||||
- npmci command npm install -g snyk
|
||||
- npmci command npm install --ignore-scripts
|
||||
- npmci command snyk test
|
||||
- npmci command npm config set registry https://registry.npmjs.org
|
||||
- npmci command npm audit --audit-level=moderate
|
||||
tags:
|
||||
- docker
|
||||
- notpriv
|
||||
- lossless
|
||||
- docker
|
||||
- notpriv
|
||||
|
||||
# ====================
|
||||
# test stage
|
||||
# ====================
|
||||
|
||||
testLTS:
|
||||
testStable:
|
||||
stage: test
|
||||
script:
|
||||
- npmci npm prepare
|
||||
- npmci node install lts
|
||||
- npmci npm install
|
||||
- npmci npm test
|
||||
- npmci npm prepare
|
||||
- npmci node install stable
|
||||
- npmci npm install
|
||||
- npmci npm test
|
||||
coverage: /\d+.?\d+?\%\s*coverage/
|
||||
tags:
|
||||
- docker
|
||||
- notpriv
|
||||
- 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
|
||||
- notpriv
|
||||
|
||||
release:
|
||||
stage: release
|
||||
script:
|
||||
- npmci node install lts
|
||||
- npmci npm publish
|
||||
- npmci node install stable
|
||||
- npmci npm publish
|
||||
only:
|
||||
- tags
|
||||
- tags
|
||||
tags:
|
||||
- docker
|
||||
- notpriv
|
||||
- lossless
|
||||
- docker
|
||||
- notpriv
|
||||
|
||||
# ====================
|
||||
# metadata stage
|
||||
@ -69,31 +87,35 @@ codequality:
|
||||
allow_failure: true
|
||||
script:
|
||||
- npmci command npm install -g tslint typescript
|
||||
- npmci npm prepare
|
||||
- npmci npm install
|
||||
- npmci command "tslint -c tslint.json ./ts/**/*.ts"
|
||||
tags:
|
||||
- docker
|
||||
- priv
|
||||
- lossless
|
||||
- docker
|
||||
- priv
|
||||
|
||||
trigger:
|
||||
stage: metadata
|
||||
script:
|
||||
- npmci trigger
|
||||
- npmci trigger
|
||||
only:
|
||||
- tags
|
||||
- tags
|
||||
tags:
|
||||
- docker
|
||||
- notpriv
|
||||
- lossless
|
||||
- docker
|
||||
- notpriv
|
||||
|
||||
pages:
|
||||
image: hosttoday/ht-docker-node:npmci
|
||||
stage: metadata
|
||||
script:
|
||||
- npmci node install lts
|
||||
- npmci command npm install -g @gitzone/tsdoc
|
||||
- npmci npm prepare
|
||||
- npmci npm install
|
||||
- npmci command tsdoc
|
||||
tags:
|
||||
- lossless
|
||||
- docker
|
||||
- notpriv
|
||||
only:
|
||||
@ -101,5 +123,5 @@ pages:
|
||||
artifacts:
|
||||
expire_in: 1 week
|
||||
paths:
|
||||
- public
|
||||
- public
|
||||
allow_failure: true
|
||||
|
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"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
@ -9,6 +9,7 @@
|
||||
"npmAccessLevel": "public"
|
||||
},
|
||||
"gitzone": {
|
||||
"projectType": "npm",
|
||||
"module": {
|
||||
"githost": "gitlab.com",
|
||||
"gitscope": "pushrocks",
|
||||
|
1089
package-lock.json
generated
1089
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
42
package.json
42
package.json
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@pushrocks/smartfile",
|
||||
"private": false,
|
||||
"version": "7.0.4",
|
||||
"version": "7.0.10",
|
||||
"description": "offers smart ways to work with files in nodejs",
|
||||
"main": "dist/index.js",
|
||||
"typings": "dist/index.d.ts",
|
||||
@ -28,32 +28,34 @@
|
||||
},
|
||||
"homepage": "https://gitlab.com/pushrocks/smartfile",
|
||||
"dependencies": {
|
||||
"@pushrocks/smarthash": "^2.1.6",
|
||||
"@pushrocks/smartmime": "^1.0.3",
|
||||
"@pushrocks/smartpath": "^4.0.1",
|
||||
"@pushrocks/smartpromise": "^3.0.2",
|
||||
"@pushrocks/smartrequest": "^1.1.14",
|
||||
"@types/fs-extra": "^5.0.5",
|
||||
"@types/vinyl": "^2.0.2",
|
||||
"fs-extra": "^7.0.1",
|
||||
"glob": "^7.1.3",
|
||||
"js-yaml": "^3.13.1",
|
||||
"vinyl-file": "^3.0.0"
|
||||
"@pushrocks/smartpromise": "^3.0.6",
|
||||
"@pushrocks/smartrequest": "^1.1.47",
|
||||
"@types/fs-extra": "^8.1.0",
|
||||
"fs-extra": "^8.1.0",
|
||||
"glob": "^7.1.6",
|
||||
"js-yaml": "^3.13.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@gitzone/tsbuild": "^2.1.8",
|
||||
"@gitzone/tsrun": "^1.2.1",
|
||||
"@gitzone/tstest": "^1.0.18",
|
||||
"@pushrocks/tapbundle": "^3.0.7",
|
||||
"@types/node": "^11.13.0",
|
||||
"@gitzone/tsbuild": "^2.1.17",
|
||||
"@gitzone/tsrun": "^1.2.8",
|
||||
"@gitzone/tstest": "^1.0.28",
|
||||
"@pushrocks/tapbundle": "^3.2.0",
|
||||
"@types/node": "^13.7.7",
|
||||
"gulp-function": "^2.2.14",
|
||||
"tslint": "^5.15.0",
|
||||
"tslint": "^6.0.0",
|
||||
"tslint-config-prettier": "^1.18.0"
|
||||
},
|
||||
"files": [
|
||||
"ts/*",
|
||||
"ts_web/*",
|
||||
"dist/*",
|
||||
"dist_web/*",
|
||||
"assets/*",
|
||||
"ts/**/*",
|
||||
"ts_web/**/*",
|
||||
"dist/**/*",
|
||||
"dist_*/**/*",
|
||||
"dist_ts/**/*",
|
||||
"dist_ts_web/**/*",
|
||||
"assets/**/*",
|
||||
"cli.js",
|
||||
"npmextra.json",
|
||||
"readme.md"
|
||||
|
@ -8,7 +8,7 @@ smart ways to work with files in nodejs
|
||||
* [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://gitlab.com/pushrocks/smartfile/commits/master)
|
||||
[](https://www.npmjs.com/package/@pushrocks/smartfile)
|
||||
[](https://snyk.io/test/npm/@pushrocks/smartfile)
|
||||
@ -32,9 +32,13 @@ smartfile thinks in sections:
|
||||
| interpreter | (object) handles yaml and json |
|
||||
| smartfile | (class) a virtual representation of a file, alternative to vinyl file format |
|
||||
|
||||
## Contribution
|
||||
|
||||
We are always happy for code contributions. If you are not the code contributing type that is ok. Still, maintaining Open Source repositories takes considerable time and thought. If you like the quality of what we do and our modules are useful to you we would appreciate a little monthly contribution: You can [contribute one time](https://lossless.link/contribute-onetime) or [contribute monthly](https://lossless.link/contribute). :)
|
||||
|
||||
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)
|
||||
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)
|
||||
|
||||
[](https://maintainedby.lossless.com)
|
||||
[](https://maintainedby.lossless.com)
|
52
test/test.ts
52
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 () => {
|
||||
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('mytest.json');
|
||||
expect(smartfile.fs.listFilesSync('./test/testassets/', /mytest\.json/)).to.include(
|
||||
'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 () => {
|
||||
@ -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 () => {
|
||||
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.not.include('mytest.json');
|
||||
});
|
||||
|
||||
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].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 () => {
|
||||
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 () => {});
|
||||
@ -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 () => {
|
||||
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;
|
||||
});
|
||||
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;
|
||||
});
|
||||
});
|
||||
|
||||
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/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 () => {
|
||||
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 () => {
|
||||
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(
|
||||
@ -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 () => {
|
||||
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];
|
||||
expect(localSmartfile).to.be.instanceof(smartfile.Smartfile);
|
||||
expect(localSmartfile.contents).to.be.instanceof(Buffer);
|
||||
|
@ -29,7 +29,7 @@ export const fileExistsSync = (filePath): boolean => {
|
||||
* @param filePath
|
||||
* @returns {any}
|
||||
*/
|
||||
export let fileExists = async (filePath): Promise<boolean> => {
|
||||
export const fileExists = async (filePath): Promise<boolean> => {
|
||||
const done = plugins.smartpromise.defer<boolean>();
|
||||
plugins.fs.access(filePath, 4, err => {
|
||||
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> => {
|
||||
const done = plugins.smartpromise.defer<boolean>();
|
||||
plugins.fsExtra.copy(fromArg, toArg, {}, (err) => {
|
||||
plugins.fsExtra.copy(fromArg, toArg, {}, err => {
|
||||
if (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
|
||||
*/
|
||||
export let ensureDir = (dirPathArg: string) => {
|
||||
let done = plugins.smartpromise.defer();
|
||||
plugins.fsExtra.ensureDir(dirPathArg, done.resolve);
|
||||
return done.promise;
|
||||
export const ensureDir = async (dirPathArg: string) => {
|
||||
await plugins.fsExtra.ensureDir(dirPathArg);
|
||||
};
|
||||
|
||||
/**
|
||||
* ensures that a directory is in place
|
||||
*/
|
||||
export let ensureDirSync = (dirPathArg: string) => {
|
||||
export const ensureDirSync = (dirPathArg: string) => {
|
||||
plugins.fsExtra.ensureDirSync(dirPathArg);
|
||||
};
|
||||
|
||||
@ -101,19 +99,16 @@ export let ensureDirSync = (dirPathArg: string) => {
|
||||
* ensure an empty directory
|
||||
* @executes ASYNC
|
||||
*/
|
||||
export let ensureEmptyDir = (dirPathArg: string) => {
|
||||
let done = plugins.smartpromise.defer();
|
||||
plugins.fsExtra.ensureDir(dirPathArg, () => {
|
||||
plugins.fsExtra.emptyDir(dirPathArg, done.resolve);
|
||||
});
|
||||
return done.promise;
|
||||
export const ensureEmptyDir = async (dirPathArg: string) => {
|
||||
await plugins.fsExtra.ensureDir(dirPathArg);
|
||||
await plugins.fsExtra.emptyDir(dirPathArg);
|
||||
};
|
||||
|
||||
/**
|
||||
* ensure an empty directory
|
||||
* @executes SYNC
|
||||
*/
|
||||
export let ensureEmptyDirSync = (dirPathArg: string) => {
|
||||
export const ensureEmptyDirSync = (dirPathArg: string) => {
|
||||
plugins.fsExtra.ensureDirSync(dirPathArg);
|
||||
plugins.fsExtra.emptyDirSync(dirPathArg);
|
||||
};
|
||||
@ -125,11 +120,8 @@ export let ensureEmptyDirSync = (dirPathArg: string) => {
|
||||
* @returns Promise<void>
|
||||
* @exec ASYNC
|
||||
*/
|
||||
export let ensureFile = (filePathArg, initFileStringArg): Promise<void> => {
|
||||
let done = plugins.smartpromise.defer<void>();
|
||||
export const ensureFile = async (filePathArg, initFileStringArg): Promise<void> => {
|
||||
ensureFileSync(filePathArg, initFileStringArg);
|
||||
done.resolve();
|
||||
return done.promise;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -139,7 +131,7 @@ export let ensureFile = (filePathArg, initFileStringArg): Promise<void> => {
|
||||
* @returns Promise<void>
|
||||
* @exec SYNC
|
||||
*/
|
||||
export let ensureFileSync = (filePathArg: string, initFileStringArg: string): void => {
|
||||
export const ensureFileSync = (filePathArg: string, initFileStringArg: string): void => {
|
||||
if (fileExistsSync(filePathArg)) {
|
||||
return null;
|
||||
} else {
|
||||
@ -150,38 +142,33 @@ export let ensureFileSync = (filePathArg: string, initFileStringArg: string): vo
|
||||
/**
|
||||
* removes a file or folder from local disk
|
||||
*/
|
||||
export let remove = function(pathArg: string): Promise<void> {
|
||||
let done = plugins.smartpromise.defer<void>();
|
||||
plugins.fsExtra.remove(pathArg, function() {
|
||||
done.resolve();
|
||||
});
|
||||
return done.promise;
|
||||
export const remove = async (pathArg: string): Promise<void> => {
|
||||
await plugins.fsExtra.remove(pathArg);
|
||||
};
|
||||
|
||||
/**
|
||||
* removes a file SYNCHRONOUSLY from local disk
|
||||
*/
|
||||
export let removeSync = function(pathArg: string): boolean {
|
||||
export const removeSync = (pathArg: string): void => {
|
||||
plugins.fsExtra.removeSync(pathArg);
|
||||
return true;
|
||||
};
|
||||
|
||||
/**
|
||||
* removes an array of filePaths from disk
|
||||
*/
|
||||
export let removeMany = function(filePathArrayArg: string[]) {
|
||||
let promiseArray: Promise<void>[] = [];
|
||||
for (let filePath of filePathArrayArg) {
|
||||
export const removeMany = async (filePathArrayArg: string[]) => {
|
||||
const promiseArray: Array<Promise<void>> = [];
|
||||
for (const filePath of filePathArrayArg) {
|
||||
promiseArray.push(remove(filePath));
|
||||
}
|
||||
return Promise.all(promiseArray);
|
||||
await Promise.all(promiseArray);
|
||||
};
|
||||
|
||||
/**
|
||||
* like removeFilePathArray but SYNCHRONOUSLY
|
||||
*/
|
||||
export let removeManySync = function(filePathArrayArg: string[]): void {
|
||||
for (let filePath of filePathArrayArg) {
|
||||
export const removeManySync = (filePathArrayArg: string[]): void => {
|
||||
for (const filePath of filePathArrayArg) {
|
||||
removeSync(filePath);
|
||||
}
|
||||
};
|
||||
@ -196,7 +183,7 @@ export let removeManySync = function(filePathArrayArg: string[]): void {
|
||||
* @param fileTypeArg
|
||||
* @returns {any}
|
||||
*/
|
||||
export let toObjectSync = function(filePathArg, fileTypeArg?) {
|
||||
export const toObjectSync = (filePathArg, fileTypeArg?) => {
|
||||
const fileString = plugins.fsExtra.readFileSync(filePathArg, 'utf8');
|
||||
let fileType;
|
||||
fileTypeArg ? (fileType = fileTypeArg) : (fileType = SmartfileInterpreter.filetype(filePathArg));
|
||||
@ -205,14 +192,32 @@ export let toObjectSync = function(filePathArg, fileTypeArg?) {
|
||||
|
||||
/**
|
||||
* reads a file content to a String
|
||||
* @param filePath
|
||||
* @returns {string|Buffer|any}
|
||||
*/
|
||||
export const toStringSync = (filePath: string): string => {
|
||||
const fileString: string = plugins.fsExtra.readFileSync(filePath, 'utf8');
|
||||
const encoding = plugins.smartmime.getEncoding(filePath);
|
||||
const fileString: string = plugins.fsExtra.readFileSync(filePath, encoding);
|
||||
return fileString;
|
||||
};
|
||||
|
||||
export const toBufferSync = (filePath: string): Buffer => {
|
||||
return plugins.fsExtra.readFileSync(filePath);
|
||||
};
|
||||
|
||||
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) => {
|
||||
// handle absolute miniMatchFilter
|
||||
let dirPath: string;
|
||||
@ -224,15 +229,15 @@ export const fileTreeToObject = async (dirPathArg: string, miniMatchFilter: stri
|
||||
|
||||
const fileTree = await listFileTree(dirPath, miniMatchFilter);
|
||||
const smartfileArray: Smartfile[] = [];
|
||||
for (let filePath of fileTree) {
|
||||
let readPath = ((): string => {
|
||||
for (const filePath of fileTree) {
|
||||
const readPath = ((): string => {
|
||||
if (!plugins.path.isAbsolute(filePath)) {
|
||||
return plugins.path.join(dirPath, filePath);
|
||||
} else {
|
||||
return filePath;
|
||||
}
|
||||
})();
|
||||
let fileContentString = toStringSync(readPath);
|
||||
const fileContentString = toStringSync(readPath);
|
||||
|
||||
// push a read file as Smartfile
|
||||
smartfileArray.push(
|
||||
@ -246,21 +251,11 @@ export const fileTreeToObject = async (dirPathArg: string, miniMatchFilter: stri
|
||||
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
|
||||
* @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);
|
||||
};
|
||||
|
||||
@ -268,7 +263,7 @@ export let listFolders = async (pathArg: string, regexFilter?: RegExp): Promise<
|
||||
* lists Folders SYNCHRONOUSLY in a directory on local disk
|
||||
* @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 => {
|
||||
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isDirectory();
|
||||
});
|
||||
@ -284,7 +279,7 @@ export let listFoldersSync = (pathArg: string, regexFilter?: RegExp): string[] =
|
||||
* lists Files in a directory on local disk
|
||||
* @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);
|
||||
};
|
||||
|
||||
@ -292,7 +287,7 @@ export let listFiles = async (pathArg: string, regexFilter?: RegExp): Promise<st
|
||||
* lists Files SYNCHRONOUSLY in a directory on local disk
|
||||
* @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 => {
|
||||
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isFile();
|
||||
});
|
||||
@ -308,7 +303,7 @@ export let listFilesSync = (pathArg: string, regexFilter?: RegExp): string[] =>
|
||||
* lists all items (folders AND files) in a directory on local disk
|
||||
* @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);
|
||||
};
|
||||
|
||||
@ -317,8 +312,8 @@ export let listAllItems = async (pathArg: string, regexFilter?: RegExp): Promise
|
||||
* @returns an array with the folder names as strings
|
||||
* @executes SYNC
|
||||
*/
|
||||
export let listAllItemsSync = (pathArg: string, regexFilter?: RegExp): string[] => {
|
||||
let allItmesArray = plugins.fsExtra.readdirSync(pathArg).filter(function(file) {
|
||||
export const listAllItemsSync = (pathArg: string, regexFilter?: RegExp): string[] => {
|
||||
let allItmesArray = plugins.fsExtra.readdirSync(pathArg).filter(file => {
|
||||
return plugins.fsExtra.statSync(plugins.path.join(pathArg, file)).isFile();
|
||||
});
|
||||
if (regexFilter) {
|
||||
@ -334,7 +329,11 @@ export let listAllItemsSync = (pathArg: string, regexFilter?: RegExp): string[]
|
||||
* 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
|
||||
*/
|
||||
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[]>();
|
||||
|
||||
// handle absolute miniMatchFilter
|
||||
@ -357,7 +356,7 @@ export const listFileTree = async (dirPathArg: string, miniMatchFilter: string,
|
||||
}
|
||||
done.resolve(files);
|
||||
});
|
||||
|
||||
|
||||
let fileList = await done.promise;
|
||||
if (absolutePathsBool) {
|
||||
fileList = fileList.map(filePath => {
|
||||
|
@ -1,8 +1,8 @@
|
||||
import plugins = require('./smartfile.plugins');
|
||||
|
||||
export let filetype = (pathArg: string): string => {
|
||||
let extName = plugins.path.extname(pathArg);
|
||||
let fileType = extName.replace(/\.([a-z]*)/, '$1'); // remove . form fileType
|
||||
const extName = plugins.path.extname(pathArg);
|
||||
const fileType = extName.replace(/\.([a-z]*)/, '$1'); // remove . form fileType
|
||||
return fileType;
|
||||
};
|
||||
|
||||
|
@ -25,11 +25,11 @@ export interface IToFsOptions {
|
||||
* @param fileBaseArg
|
||||
*/
|
||||
export let toFs = async (
|
||||
fileContentArg: string | Smartfile,
|
||||
filePathArg,
|
||||
fileContentArg: string | Buffer | Smartfile,
|
||||
filePathArg: string,
|
||||
optionsArg: IToFsOptions = {}
|
||||
) => {
|
||||
let done = plugins.smartpromise.defer();
|
||||
const done = plugins.smartpromise.defer();
|
||||
|
||||
// check args
|
||||
if (!fileContentArg || !filePathArg) {
|
||||
@ -38,23 +38,26 @@ export let toFs = async (
|
||||
|
||||
// prepare actual write action
|
||||
let fileString: string;
|
||||
let fileEncoding: string = 'utf8';
|
||||
let filePath: string = filePathArg;
|
||||
|
||||
// handle Smartfile
|
||||
if (fileContentArg instanceof Smartfile) {
|
||||
let fileContentArg2: any = fileContentArg;
|
||||
fileString = fileContentArg.contentBuffer.toString();
|
||||
// handle options
|
||||
if (optionsArg.respectRelative) {
|
||||
filePath = plugins.path.join(filePath, fileContentArg.path);
|
||||
}
|
||||
} else if (Buffer.isBuffer(fileContentArg)) {
|
||||
fileString = fileContentArg.toString('binary');
|
||||
fileEncoding = 'binary';
|
||||
} else if (typeof fileContentArg === 'string') {
|
||||
fileString = fileContentArg;
|
||||
} else {
|
||||
throw new Error('fileContent is neither string nor Smartfile');
|
||||
}
|
||||
await smartfileFs.ensureDir(plugins.path.parse(filePath).dir);
|
||||
plugins.fsExtra.writeFile(filePath, fileString, { encoding: 'utf8' }, done.resolve);
|
||||
plugins.fsExtra.writeFile(filePath, fileString, { encoding: fileEncoding }, done.resolve);
|
||||
return await done.promise;
|
||||
};
|
||||
|
||||
|
@ -1,9 +1,21 @@
|
||||
export import fs = require('fs');
|
||||
export import fsExtra = require('fs-extra');
|
||||
export let glob = require('glob');
|
||||
export import path = require('path');
|
||||
export import smartpromise = require('@pushrocks/smartpromise');
|
||||
export import smartrequest = require('@pushrocks/smartrequest');
|
||||
export import smartpath = require('@pushrocks/smartpath');
|
||||
export let vinylFile = require('vinyl-file');
|
||||
export let yaml = require('js-yaml');
|
||||
// node native scope
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
|
||||
export { fs, path };
|
||||
|
||||
// @pushrocks scope
|
||||
import * as smarthash from '@pushrocks/smarthash';
|
||||
import * as smartmime from '@pushrocks/smartmime';
|
||||
import * as smartpath from '@pushrocks/smartpath';
|
||||
import * as smartpromise from '@pushrocks/smartpromise';
|
||||
import * as smartrequest from '@pushrocks/smartrequest';
|
||||
|
||||
export { smarthash, smartmime, 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 };
|
||||
|
@ -15,8 +15,8 @@ import SmartfileInterpreter = require('./smartfile.interpreter');
|
||||
* @param fromArg
|
||||
* @returns {any}
|
||||
*/
|
||||
export let toObject = function(fromArg: string) {
|
||||
let done = plugins.smartpromise.defer();
|
||||
export let toObject = (fromArg: string) => {
|
||||
const done = plugins.smartpromise.defer();
|
||||
plugins.smartrequest
|
||||
.request(fromArg, {
|
||||
method: 'get'
|
||||
@ -37,11 +37,12 @@ export let toObject = function(fromArg: string) {
|
||||
* @param fromArg
|
||||
* @returns {any}
|
||||
*/
|
||||
export let toString = (fromArg: string) => {
|
||||
let done = plugins.smartpromise.defer();
|
||||
export let toString = (fromArg: string): Promise<string> => {
|
||||
const done = plugins.smartpromise.defer<string>();
|
||||
plugins.smartrequest.getBinary(fromArg).then((res: any) => {
|
||||
if (res.statusCode === 200) {
|
||||
done.resolve(res.body);
|
||||
const encoding = plugins.smartmime.getEncoding(fromArg);
|
||||
done.resolve(res.body.toString(encoding));
|
||||
} else {
|
||||
done.reject(new Error('could not get remote file from ' + fromArg));
|
||||
}
|
||||
|
Reference in New Issue
Block a user