Compare commits

..

10 Commits

Author SHA1 Message Date
d8f4b011b7 7.0.9 2020-03-04 16:31:14 +00:00
b4add67f37 fix(core): update 2020-03-04 16:31:13 +00:00
f86f053bd5 7.0.8 2020-02-07 21:00:54 +00:00
a78ca67b43 fix(core): update 2020-02-07 21:00:54 +00:00
b1bedd0f54 7.0.7 2020-02-07 21:00:05 +00:00
ec58f7ac55 fix(core): update 2020-02-07 21:00:04 +00:00
80743576ad 7.0.6 2019-09-29 16:43:32 +02:00
32a6db645d fix(core): update 2019-09-29 16:43:31 +02:00
45dfa16ab7 7.0.5 2019-09-27 11:00:17 +02:00
4fc4cda786 fix(core): update 2019-09-27 11:00:17 +02:00
12 changed files with 874 additions and 622 deletions

View File

@ -3,14 +3,14 @@ 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
- test - test
- release - release
- metadata - metadata
# ==================== # ====================
# security stage # security stage
@ -18,48 +18,65 @@ stages:
mirror: mirror:
stage: security stage: security
script: script:
- npmci git mirror - npmci git mirror
tags: tags:
- docker - lossless
- notpriv - docker
- 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:
- docker - lossless
- notpriv - docker
- notpriv
# ==================== # ====================
# 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:
- docker - lossless
- notpriv - 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: 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:
- docker - lossless
- notpriv - docker
- notpriv
# ==================== # ====================
# metadata stage # metadata stage
@ -69,31 +86,35 @@ 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:
- docker - lossless
- priv - docker
- priv
trigger: trigger:
stage: metadata stage: metadata
script: script:
- npmci trigger - npmci trigger
only: only:
- tags - tags
tags: tags:
- docker - lossless
- notpriv - docker
- 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:
@ -101,5 +122,5 @@ pages:
artifacts: artifacts:
expire_in: 1 week expire_in: 1 week
paths: paths:
- public - public
allow_failure: true allow_failure: true

29
.vscode/launch.json vendored Normal file
View 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
View 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"]
}
}
}
}
}
}
]
}

View File

@ -9,6 +9,7 @@
"npmAccessLevel": "public" "npmAccessLevel": "public"
}, },
"gitzone": { "gitzone": {
"projectType": "npm",
"module": { "module": {
"githost": "gitlab.com", "githost": "gitlab.com",
"gitscope": "pushrocks", "gitscope": "pushrocks",

1089
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
{ {
"name": "@pushrocks/smartfile", "name": "@pushrocks/smartfile",
"private": false, "private": false,
"version": "7.0.4", "version": "7.0.9",
"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,33 @@
}, },
"homepage": "https://gitlab.com/pushrocks/smartfile", "homepage": "https://gitlab.com/pushrocks/smartfile",
"dependencies": { "dependencies": {
"@pushrocks/smarthash": "^2.1.6",
"@pushrocks/smartmime": "^1.0.3",
"@pushrocks/smartpath": "^4.0.1", "@pushrocks/smartpath": "^4.0.1",
"@pushrocks/smartpromise": "^3.0.2", "@pushrocks/smartpromise": "^3.0.6",
"@pushrocks/smartrequest": "^1.1.14", "@pushrocks/smartrequest": "^1.1.47",
"@types/fs-extra": "^5.0.5", "@types/fs-extra": "^8.1.0",
"@types/vinyl": "^2.0.2", "fs-extra": "^8.1.0",
"fs-extra": "^7.0.1", "glob": "^7.1.6",
"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.28",
"@pushrocks/tapbundle": "^3.0.7", "@pushrocks/tapbundle": "^3.2.0",
"@types/node": "^11.13.0", "@types/node": "^13.7.7",
"gulp-function": "^2.2.14", "gulp-function": "^2.2.14",
"tslint": "^5.15.0", "tslint": "^6.0.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"

View File

@ -8,7 +8,7 @@ smart ways to work with files in nodejs
* [docs (typedoc)](https://pushrocks.gitlab.io/smartfile/) * [docs (typedoc)](https://pushrocks.gitlab.io/smartfile/)
## Status for master ## Status for master
[![build status](https://gitlab.com/pushrocks/smartfile/badges/master/build.svg)](https://gitlab.com/pushrocks/smartfile/commits/master) [![pipeline status](https://gitlab.com/pushrocks/smartfile/badges/master/pipeline.svg)](https://gitlab.com/pushrocks/smartfile/commits/master)
[![coverage report](https://gitlab.com/pushrocks/smartfile/badges/master/coverage.svg)](https://gitlab.com/pushrocks/smartfile/commits/master) [![coverage report](https://gitlab.com/pushrocks/smartfile/badges/master/coverage.svg)](https://gitlab.com/pushrocks/smartfile/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/@pushrocks/smartfile.svg)](https://www.npmjs.com/package/@pushrocks/smartfile) [![npm downloads per month](https://img.shields.io/npm/dm/@pushrocks/smartfile.svg)](https://www.npmjs.com/package/@pushrocks/smartfile)
[![Known Vulnerabilities](https://snyk.io/test/npm/@pushrocks/smartfile/badge.svg)](https://snyk.io/test/npm/@pushrocks/smartfile) [![Known Vulnerabilities](https://snyk.io/test/npm/@pushrocks/smartfile/badge.svg)](https://snyk.io/test/npm/@pushrocks/smartfile)
@ -32,9 +32,14 @@ smartfile thinks in sections:
| interpreter | (object) handles yaml and json | | interpreter | (object) handles yaml and json |
| smartfile | (class) a virtual representation of a file, alternative to vinyl file format | | 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. For further information read the linked docs at the top of this readme.
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh) > 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)
[![repo-footer](https://pushrocks.gitlab.io/assets/repo-footer.svg)](https://maintainedby.lossless.com) [![repo-footer](https://lossless.gitlab.io/publicrelations/repofooter.svg)](https://maintainedby.lossless.com)

View File

@ -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
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile1.txt')).to.be.false; .removeMany(['./test/testassets/temp/testfile1.txt', './test/testassets/temp/testfile2.txt'])
expect(smartfile.fs.fileExistsSync('./test/testassets/temp/testfile2.txt')).to.be.false; .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 () => { 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);

View File

@ -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));
@ -205,14 +192,32 @@ export let toObjectSync = function(filePathArg, fileTypeArg?) {
/** /**
* reads a file content to a String * reads a file content to a String
* @param filePath
* @returns {string|Buffer|any}
*/ */
export const toStringSync = (filePath: string): string => { 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; 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) => { export const fileTreeToObject = async (dirPathArg: string, miniMatchFilter: string) => {
// handle absolute miniMatchFilter // handle absolute miniMatchFilter
let dirPath: string; let dirPath: string;
@ -224,15 +229,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 +251,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 +263,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 +279,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 +287,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 +303,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 +312,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 +329,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

View File

@ -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;
}; };

View File

@ -1,9 +1,21 @@
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 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 };

View File

@ -15,8 +15,8 @@ import SmartfileInterpreter = require('./smartfile.interpreter');
* @param fromArg * @param fromArg
* @returns {any} * @returns {any}
*/ */
export let toObject = function(fromArg: string) { export let toObject = (fromArg: string) => {
let done = plugins.smartpromise.defer(); const done = plugins.smartpromise.defer();
plugins.smartrequest plugins.smartrequest
.request(fromArg, { .request(fromArg, {
method: 'get' method: 'get'
@ -37,11 +37,12 @@ export let toObject = function(fromArg: string) {
* @param fromArg * @param fromArg
* @returns {any} * @returns {any}
*/ */
export let toString = (fromArg: string) => { export let toString = (fromArg: string): Promise<string> => {
let done = plugins.smartpromise.defer(); const done = plugins.smartpromise.defer<string>();
plugins.smartrequest.getBinary(fromArg).then((res: any) => { plugins.smartrequest.getBinary(fromArg).then((res: any) => {
if (res.statusCode === 200) { if (res.statusCode === 200) {
done.resolve(res.body); const encoding = plugins.smartmime.getEncoding(fromArg);
done.resolve(res.body.toString(encoding));
} else { } else {
done.reject(new Error('could not get remote file from ' + fromArg)); done.reject(new Error('could not get remote file from ' + fromArg));
} }