Compare commits
18 Commits
Author | SHA1 | Date | |
---|---|---|---|
701b77eff5 | |||
e3c46cdd2c | |||
7204607c8a | |||
039c6f7fc6 | |||
b42595fccc | |||
2d9a65d11c | |||
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
|
# builds
|
||||||
dist/
|
dist/
|
||||||
dist_web/
|
dist_*/
|
||||||
dist_serve/
|
|
||||||
dist_ts_web/
|
|
||||||
|
|
||||||
# custom
|
# custom
|
@ -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,62 @@ stages:
|
|||||||
mirror:
|
mirror:
|
||||||
stage: security
|
stage: security
|
||||||
script:
|
script:
|
||||||
- npmci git mirror
|
- npmci git mirror
|
||||||
|
only:
|
||||||
|
- tags
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- lossless
|
||||||
- notpriv
|
- docker
|
||||||
|
- notpriv
|
||||||
|
|
||||||
snyk:
|
audit:
|
||||||
|
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
||||||
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 npm config set registry https://registry.npmjs.org
|
||||||
|
- npmci command npm audit --audit-level=high
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- 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
|
- docker
|
||||||
- notpriv
|
|
||||||
|
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:
|
||||||
|
- docker
|
||||||
|
|
||||||
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
|
||||||
@ -67,33 +81,39 @@ release:
|
|||||||
codequality:
|
codequality:
|
||||||
stage: metadata
|
stage: metadata
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
|
only:
|
||||||
|
- tags
|
||||||
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 +121,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
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", "wcc"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
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",
|
||||||
|
10546
package-lock.json
generated
10546
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
59
package.json
59
package.json
@ -1,17 +1,13 @@
|
|||||||
{
|
{
|
||||||
"name": "@pushrocks/smartfile",
|
"name": "@pushrocks/smartfile",
|
||||||
"private": false,
|
"private": false,
|
||||||
"version": "7.0.4",
|
"version": "8.0.0",
|
||||||
"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_ts/index.js",
|
||||||
"typings": "dist/index.d.ts",
|
"typings": "dist_ts/index.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "(tstest test/)",
|
"test": "(tstest test/)",
|
||||||
"reinstall": "(rm -r node_modules && npm install)",
|
"build": "(tsbuild --web)"
|
||||||
"release": "(git pull origin master && npm version patch && git push origin master && git checkout release && git merge master && git push origin release && git checkout master)",
|
|
||||||
"update": "(git checkout master && git pull origin master && npm install)",
|
|
||||||
"upgrade": "(npm run update) && (ncu upgradeAll && npm install)",
|
|
||||||
"build": "(tsbuild)"
|
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -21,41 +17,46 @@
|
|||||||
"filesystem",
|
"filesystem",
|
||||||
"json"
|
"json"
|
||||||
],
|
],
|
||||||
"author": "Smart Coordination GmbH <office@push.rocks> (https://push.rocks)",
|
"author": "Lossless GmbH <hello@lossless.com> (https://lossless.com)",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://gitlab.com/pushrocks/smartfile/issues"
|
"url": "https://gitlab.com/pushrocks/smartfile/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://gitlab.com/pushrocks/smartfile",
|
"homepage": "https://gitlab.com/pushrocks/smartfile",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@pushrocks/smartpath": "^4.0.1",
|
"@pushrocks/smarthash": "^2.1.6",
|
||||||
"@pushrocks/smartpromise": "^3.0.2",
|
"@pushrocks/smartmime": "^1.0.3",
|
||||||
"@pushrocks/smartrequest": "^1.1.14",
|
"@pushrocks/smartpath": "^4.0.3",
|
||||||
"@types/fs-extra": "^5.0.5",
|
"@pushrocks/smartpromise": "^3.0.6",
|
||||||
"@types/vinyl": "^2.0.2",
|
"@pushrocks/smartrequest": "^1.1.47",
|
||||||
"fs-extra": "^7.0.1",
|
"@types/fs-extra": "^9.0.1",
|
||||||
"glob": "^7.1.3",
|
"fs-extra": "^9.0.1",
|
||||||
"js-yaml": "^3.13.1",
|
"glob": "^7.1.6",
|
||||||
"vinyl-file": "^3.0.0"
|
"js-yaml": "^3.14.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@gitzone/tsbuild": "^2.1.8",
|
"@gitzone/tsbuild": "^2.1.24",
|
||||||
"@gitzone/tsrun": "^1.2.1",
|
"@gitzone/tsrun": "^1.2.12",
|
||||||
"@gitzone/tstest": "^1.0.18",
|
"@gitzone/tstest": "^1.0.43",
|
||||||
"@pushrocks/tapbundle": "^3.0.7",
|
"@pushrocks/tapbundle": "^3.2.9",
|
||||||
"@types/node": "^11.13.0",
|
"@types/node": "^14.0.27",
|
||||||
"gulp-function": "^2.2.14",
|
"gulp-function": "^2.2.14",
|
||||||
"tslint": "^5.15.0",
|
"tslint": "^6.1.3",
|
||||||
"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_*/**/*",
|
||||||
"assets/*",
|
"dist_ts/**/*",
|
||||||
|
"dist_ts_web/**/*",
|
||||||
|
"assets/**/*",
|
||||||
"cli.js",
|
"cli.js",
|
||||||
"npmextra.json",
|
"npmextra.json",
|
||||||
"readme.md"
|
"readme.md"
|
||||||
|
],
|
||||||
|
"browserslist": [
|
||||||
|
"last 1 chrome versions"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
51
readme.md
Normal file
51
readme.md
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# @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
|
||||||
|
|
||||||
|
Status Category | Status Badge
|
||||||
|
-- | --
|
||||||
|
GitLab Pipelines | [](https://lossless.cloud)
|
||||||
|
GitLab Pipline Test Coverage | [](https://lossless.cloud)
|
||||||
|
npm | [](https://lossless.cloud)
|
||||||
|
Snyk | [](https://lossless.cloud)
|
||||||
|
TypeScript Support | [](https://lossless.cloud)
|
||||||
|
node Support | [](https://nodejs.org/dist/latest-v10.x/docs/api/)
|
||||||
|
Code Style | [](https://lossless.cloud)
|
||||||
|
PackagePhobia (total standalone install weight) | [](https://lossless.cloud)
|
||||||
|
PackagePhobia (package size on registry) | [](https://lossless.cloud)
|
||||||
|
BundlePhobia (total size when bundled) | [](https://lossless.cloud)
|
||||||
|
Platform support | [](https://lossless.cloud) [](https://lossless.cloud)
|
||||||
|
|
||||||
|
## 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 |
|
||||||
|
|
||||||
|
## 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)
|
||||||
|
|
||||||
|
[](https://maintainedby.lossless.com)
|
96
test/test.ts
96
test/test.ts
@ -15,7 +15,7 @@ tap.test('.fs.fileExistsSync -> should return an accurate boolean', async () =>
|
|||||||
tap.test('.fs.fileExists -> should resolve or reject a promise', async () => {
|
tap.test('.fs.fileExists -> should resolve or reject a promise', async () => {
|
||||||
expect(smartfile.fs.fileExists('./test/testassets/mytest.json')).to.be.instanceof(Promise);
|
expect(smartfile.fs.fileExists('./test/testassets/mytest.json')).to.be.instanceof(Promise);
|
||||||
await smartfile.fs.fileExists('./test/testassets/mytest.json');
|
await smartfile.fs.fileExists('./test/testassets/mytest.json');
|
||||||
await smartfile.fs.fileExists('./test/testassets/notthere.json').catch(err => {
|
await smartfile.fs.fileExists('./test/testassets/notthere.json').catch((err) => {
|
||||||
return expect(err.message).to.equal(
|
return expect(err.message).to.equal(
|
||||||
"ENOENT: no such file or directory, access './test/testassets/notthere.json'"
|
"ENOENT: no such file or directory, access './test/testassets/notthere.json'"
|
||||||
);
|
);
|
||||||
@ -28,7 +28,7 @@ tap.test('.fs.listFoldersSync() -> should get the file type from a string', asyn
|
|||||||
});
|
});
|
||||||
|
|
||||||
tap.test('.fs.listFolders() -> should get the file type from a string', async () => {
|
tap.test('.fs.listFolders() -> should get the file type from a string', async () => {
|
||||||
let folderArrayArg = await smartfile.fs.listFolders('./test/testassets/');
|
const folderArrayArg = await smartfile.fs.listFolders('./test/testassets/');
|
||||||
expect(folderArrayArg).to.include('testfolder');
|
expect(folderArrayArg).to.include('testfolder');
|
||||||
expect(folderArrayArg).to.not.include('notExistentFolder');
|
expect(folderArrayArg).to.not.include('notExistentFolder');
|
||||||
});
|
});
|
||||||
@ -36,24 +36,34 @@ 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 () => {
|
||||||
let folderArrayArg = await smartfile.fs.listFiles('./test/testassets/');
|
const folderArrayArg = await smartfile.fs.listFiles('./test/testassets/');
|
||||||
expect(folderArrayArg).to.include('mytest.json');
|
expect(folderArrayArg).to.include('mytest.json');
|
||||||
expect(folderArrayArg).to.not.include('notExistentFile');
|
expect(folderArrayArg).to.not.include('notExistentFile');
|
||||||
});
|
});
|
||||||
|
|
||||||
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');
|
const 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');
|
const 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,38 +95,45 @@ 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;
|
||||||
});
|
});
|
||||||
|
|
||||||
tap.test('.fs.toObjectSync() -> should read an ' + '.yaml' + ' file to an object', async () => {
|
tap.test('.fs.toObjectSync() -> should read an ' + '.yaml' + ' file to an object', async () => {
|
||||||
let testData = smartfile.fs.toObjectSync('./test/testassets/mytest.yaml');
|
const testData = smartfile.fs.toObjectSync('./test/testassets/mytest.yaml');
|
||||||
expect(testData).to.include({ key1: 'this works' });
|
expect(testData).to.include({ key1: 'this works' });
|
||||||
expect(testData).to.include({ key2: 'this works too' });
|
expect(testData).to.include({ key2: 'this works too' });
|
||||||
});
|
});
|
||||||
tap.test(
|
tap.test(
|
||||||
'.fs.toObjectSync() -> should state unknown file type for unknown file types',
|
'.fs.toObjectSync() -> should state unknown file type for unknown file types',
|
||||||
async () => {
|
async () => {
|
||||||
let testData = smartfile.fs.toObjectSync('./test/testassets/mytest.txt');
|
const testData = smartfile.fs.toObjectSync('./test/testassets/mytest.txt');
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
tap.test('.fs.toObjectSync() -> should read an ' + '.json' + ' file to an object', async () => {
|
tap.test('.fs.toObjectSync() -> should read an ' + '.json' + ' file to an object', async () => {
|
||||||
let testData = smartfile.fs.toObjectSync('./test/testassets/mytest.json');
|
const testData = smartfile.fs.toObjectSync('./test/testassets/mytest.json');
|
||||||
expect(testData).to.include({ key1: 'this works' });
|
expect(testData).to.include({ key1: 'this works' });
|
||||||
expect(testData).to.include({ key2: 'this works too' });
|
expect(testData).to.include({ key2: 'this works too' });
|
||||||
});
|
});
|
||||||
|
|
||||||
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 &&%$'
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
// ---------------------------
|
// ---------------------------
|
||||||
@ -129,14 +149,17 @@ 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';
|
const 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(
|
||||||
'.memory.toFsSync() -> should write a file to disk and return true if successfull',
|
'.memory.toFsSync() -> should write a file to disk and return true if successfull',
|
||||||
async () => {
|
async () => {
|
||||||
let localString = 'myString';
|
const localString = 'myString';
|
||||||
smartfile.memory.toFsSync(
|
smartfile.memory.toFsSync(
|
||||||
localString,
|
localString,
|
||||||
path.join(process.cwd(), './test/testassets/temp/testMemToFsSync.txt')
|
path.join(process.cwd(), './test/testassets/temp/testMemToFsSync.txt')
|
||||||
@ -151,8 +174,8 @@ tap.test('.remote.toString() -> should load a remote file to a variable', async
|
|||||||
expect(responseString).to.equal('Some TestString &&%$');
|
expect(responseString).to.equal('Some TestString &&%$');
|
||||||
});
|
});
|
||||||
|
|
||||||
tap.test('.remote.toString() -> should reject a Promise when the link is false', async tools => {
|
tap.test('.remote.toString() -> should reject a Promise when the link is false', async (tools) => {
|
||||||
await smartfile.remote.toString('https://push.rocks/doesnotexist.txt').catch(err => {
|
await smartfile.remote.toString('https://push.rocks/doesnotexist.txt').catch((err) => {
|
||||||
return expect(err.message).to.equal(
|
return expect(err.message).to.equal(
|
||||||
'could not get remote file from https://push.rocks/doesnotexist.txt'
|
'could not get remote file from https://push.rocks/doesnotexist.txt'
|
||||||
);
|
);
|
||||||
@ -164,8 +187,11 @@ 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/**/*');
|
const smartfileArray = await smartfile.fs.fileTreeToObject(
|
||||||
let localSmartfile = smartfileArray[0];
|
process.cwd(),
|
||||||
|
'./test/testassets/testfolder/**/*'
|
||||||
|
);
|
||||||
|
const 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);
|
||||||
// tslint:disable-next-line:no-unused-expression
|
// tslint:disable-next-line:no-unused-expression
|
||||||
@ -177,12 +203,12 @@ tap.test('.Smartfile -> should produce vinyl compatible files', async () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
tap.test('should output a smartfile array to disk', async () => {
|
tap.test('should output a smartfile array to disk', async () => {
|
||||||
let smartfileArray = await smartfile.fs.fileTreeToObject('./test/testassets/testfolder/', '*');
|
const smartfileArray = await smartfile.fs.fileTreeToObject('./test/testassets/testfolder/', '*');
|
||||||
for (let smartfile of smartfileArray) {
|
for (const smartfileInstance of smartfileArray) {
|
||||||
console.log(smartfile.relative);
|
console.log(smartfileInstance.relative);
|
||||||
console.log(smartfile.path);
|
console.log(smartfileInstance.path);
|
||||||
console.log(smartfile.base);
|
console.log(smartfileInstance.base);
|
||||||
console.log(smartfile.parsedPath);
|
console.log(smartfileInstance.parsedPath);
|
||||||
}
|
}
|
||||||
await smartfile.memory.smartfileArrayToFs(
|
await smartfile.memory.smartfileArrayToFs(
|
||||||
smartfileArray,
|
smartfileArray,
|
||||||
@ -190,4 +216,14 @@ tap.test('should output a smartfile array to disk', async () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
tap.test('should create, store and retrieve valid smartfiles', async () => {
|
||||||
|
const fileString = 'hi there';
|
||||||
|
const filePath = './test/testassets/utf8.txt';
|
||||||
|
const smartfileInstance = await smartfile.Smartfile.fromString(filePath, fileString, 'utf8');
|
||||||
|
smartfileInstance.write();
|
||||||
|
const smartfileInstance2 = await smartfile.Smartfile.fromFilePath(filePath);
|
||||||
|
const retrievedString = smartfileInstance.contents.toString();
|
||||||
|
expect(retrievedString).to.equal(fileString);
|
||||||
|
});
|
||||||
|
|
||||||
tap.start();
|
tap.start();
|
||||||
|
1
test/testassets/utf8.txt
Normal file
1
test/testassets/utf8.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
hi there
|
@ -4,7 +4,6 @@ import * as memory from './smartfile.memory';
|
|||||||
|
|
||||||
export interface ISmartfileConstructorOptions {
|
export interface ISmartfileConstructorOptions {
|
||||||
path?: string;
|
path?: string;
|
||||||
contentString?: string;
|
|
||||||
contentBuffer?: Buffer;
|
contentBuffer?: Buffer;
|
||||||
base?: string;
|
base?: string;
|
||||||
}
|
}
|
||||||
@ -24,42 +23,64 @@ export class Smartfile {
|
|||||||
*/
|
*/
|
||||||
public static async fromFilePath(filePath: string) {
|
public static async fromFilePath(filePath: string) {
|
||||||
filePath = plugins.path.resolve(filePath);
|
filePath = plugins.path.resolve(filePath);
|
||||||
const fileString = fs.toStringSync(filePath);
|
const fileBuffer = fs.toBufferSync(filePath);
|
||||||
const smartfile = new Smartfile({
|
const smartfile = new Smartfile({
|
||||||
path: filePath,
|
path: filePath,
|
||||||
contentString: fileString
|
contentBuffer: fileBuffer,
|
||||||
});
|
});
|
||||||
return smartfile;
|
return smartfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async fromBuffer(filePath: string, contentBufferArg: Buffer) {
|
||||||
|
const smartfile = new Smartfile({
|
||||||
|
contentBuffer: contentBufferArg,
|
||||||
|
path: filePath,
|
||||||
|
});
|
||||||
|
|
||||||
|
return smartfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async fromString(
|
||||||
|
filePath: string,
|
||||||
|
contentStringArg: string,
|
||||||
|
encodingArg: 'utf8' | 'binary'
|
||||||
|
) {
|
||||||
|
const smartfile = new Smartfile({
|
||||||
|
contentBuffer: Buffer.from(contentStringArg, encodingArg),
|
||||||
|
path: filePath,
|
||||||
|
});
|
||||||
|
|
||||||
|
return smartfile;
|
||||||
|
}
|
||||||
|
|
||||||
// ========
|
// ========
|
||||||
// INSTANCE
|
// INSTANCE
|
||||||
// ========
|
// ========
|
||||||
/**
|
/**
|
||||||
* the full path of the file on disk
|
* the full path of the file on disk
|
||||||
*/
|
*/
|
||||||
path: string;
|
public path: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
parsedPath: plugins.path.ParsedPath;
|
public parsedPath: plugins.path.ParsedPath;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the content of the file as Buffer
|
* the content of the file as Buffer
|
||||||
*/
|
*/
|
||||||
contentBuffer: Buffer;
|
public contentBuffer: Buffer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The current working directory of the file
|
* The current working directory of the file
|
||||||
* Note:this is similar to gulp and different from native node path base
|
* Note:this is similar to gulp and different from native node path base
|
||||||
*/
|
*/
|
||||||
base: string;
|
public base: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sync the file with disk
|
* sync the file with disk
|
||||||
*/
|
*/
|
||||||
sync: boolean;
|
public sync: boolean;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the constructor of Smartfile
|
* the constructor of Smartfile
|
||||||
@ -69,8 +90,6 @@ export class Smartfile {
|
|||||||
constructor(optionsArg: ISmartfileConstructorOptions) {
|
constructor(optionsArg: ISmartfileConstructorOptions) {
|
||||||
if (optionsArg.contentBuffer) {
|
if (optionsArg.contentBuffer) {
|
||||||
this.contentBuffer = optionsArg.contentBuffer;
|
this.contentBuffer = optionsArg.contentBuffer;
|
||||||
} else if (optionsArg.contentString) {
|
|
||||||
this.setContentsFromString(optionsArg.contentString);
|
|
||||||
} else {
|
} else {
|
||||||
console.log('created empty Smartfile?');
|
console.log('created empty Smartfile?');
|
||||||
}
|
}
|
||||||
@ -83,8 +102,8 @@ export class Smartfile {
|
|||||||
* set contents from string
|
* set contents from string
|
||||||
* @param contentString
|
* @param contentString
|
||||||
*/
|
*/
|
||||||
setContentsFromString(contentString: string) {
|
public setContentsFromString(contentString: string, encodingArg: 'utf8' | 'binary' = 'utf8') {
|
||||||
this.contents = new Buffer(contentString);
|
this.contents = new Buffer(contentString, encodingArg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -92,7 +111,7 @@ export class Smartfile {
|
|||||||
* Behaviours:
|
* Behaviours:
|
||||||
* - no argument write to exactly where the file was picked up
|
* - no argument write to exactly where the file was picked up
|
||||||
*/
|
*/
|
||||||
async write(pathArg?: string) {
|
public async write(pathArg?: string) {
|
||||||
const stringToWrite = this.contentBuffer.toString();
|
const stringToWrite = this.contentBuffer.toString();
|
||||||
await memory.toFs(stringToWrite, this.path);
|
await memory.toFs(stringToWrite, this.path);
|
||||||
}
|
}
|
||||||
@ -100,7 +119,7 @@ export class Smartfile {
|
|||||||
/**
|
/**
|
||||||
* read file from disk
|
* read file from disk
|
||||||
*/
|
*/
|
||||||
async read() {}
|
public async read() {}
|
||||||
|
|
||||||
// -----------------------------------------------
|
// -----------------------------------------------
|
||||||
// vinyl compatibility
|
// vinyl compatibility
|
||||||
@ -118,21 +137,21 @@ export class Smartfile {
|
|||||||
/**
|
/**
|
||||||
* vinyl-compatibility
|
* vinyl-compatibility
|
||||||
*/
|
*/
|
||||||
get cwd() {
|
public get cwd() {
|
||||||
return process.cwd();
|
return process.cwd();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* return relative path of file
|
* return relative path of file
|
||||||
*/
|
*/
|
||||||
get relative(): string {
|
public get relative(): string {
|
||||||
return plugins.path.relative(this.base, this.path);
|
return plugins.path.relative(this.base, this.path);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* return truw when the file has content
|
* return truw when the file has content
|
||||||
*/
|
*/
|
||||||
isNull(): boolean {
|
public isNull(): boolean {
|
||||||
if (!this.contentBuffer) {
|
if (!this.contentBuffer) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -142,28 +161,28 @@ export class Smartfile {
|
|||||||
/**
|
/**
|
||||||
* return true if contents are Buffer
|
* return true if contents are Buffer
|
||||||
*/
|
*/
|
||||||
isBuffer(): boolean {
|
public isBuffer(): boolean {
|
||||||
if (this.contents instanceof Buffer) {
|
if (this.contents instanceof Buffer) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
isDirectory() {
|
public isDirectory() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
isStream() {
|
public isStream() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
isSymbolic() {
|
public isSymbolic() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// update things
|
// update things
|
||||||
updateFileName(fileNameArg: string) {
|
public updateFileName(fileNameArg: string) {
|
||||||
let oldFileName = this.parsedPath.base;
|
const oldFileName = this.parsedPath.base;
|
||||||
this.path = this.path.replace(new RegExp(oldFileName + '$'), fileNameArg);
|
this.path = this.path.replace(new RegExp(oldFileName + '$'), fileNameArg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,9 +29,9 @@ 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);
|
||||||
});
|
});
|
||||||
return done.promise;
|
return done.promise;
|
||||||
@ -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,43 +229,33 @@ 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(
|
||||||
new Smartfile({
|
new Smartfile({
|
||||||
contentBuffer: Buffer.from(fileContentString),
|
contentBuffer: Buffer.from(fileContentString),
|
||||||
base: dirPath,
|
base: dirPath,
|
||||||
path: filePath
|
path: filePath,
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
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,12 +263,12 @@ 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();
|
||||||
});
|
});
|
||||||
if (regexFilter) {
|
if (regexFilter) {
|
||||||
folderArray = folderArray.filter(fileItem => {
|
folderArray = folderArray.filter((fileItem) => {
|
||||||
return regexFilter.test(fileItem);
|
return regexFilter.test(fileItem);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -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,12 +287,12 @@ 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();
|
||||||
});
|
});
|
||||||
if (regexFilter) {
|
if (regexFilter) {
|
||||||
fileArray = fileArray.filter(fileItem => {
|
fileArray = fileArray.filter((fileItem) => {
|
||||||
return regexFilter.test(fileItem);
|
return regexFilter.test(fileItem);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -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,12 +312,12 @@ 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) {
|
||||||
allItmesArray = allItmesArray.filter(fileItem => {
|
allItmesArray = allItmesArray.filter((fileItem) => {
|
||||||
return regexFilter.test(fileItem);
|
return regexFilter.test(fileItem);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -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
|
||||||
@ -348,7 +347,7 @@ export const listFileTree = async (dirPathArg: string, miniMatchFilter: string,
|
|||||||
const options = {
|
const options = {
|
||||||
cwd: dirPath,
|
cwd: dirPath,
|
||||||
nodir: true,
|
nodir: true,
|
||||||
dot: true
|
dot: true,
|
||||||
};
|
};
|
||||||
plugins.glob(miniMatchFilter, options, (err, files: string[]) => {
|
plugins.glob(miniMatchFilter, options, (err, files: string[]) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
@ -357,10 +356,10 @@ export const listFileTree = async (dirPathArg: string, miniMatchFilter: string,
|
|||||||
}
|
}
|
||||||
done.resolve(files);
|
done.resolve(files);
|
||||||
});
|
});
|
||||||
|
|
||||||
let fileList = await done.promise;
|
let fileList = await done.promise;
|
||||||
if (absolutePathsBool) {
|
if (absolutePathsBool) {
|
||||||
fileList = fileList.map(filePath => {
|
fileList = fileList.map((filePath) => {
|
||||||
return plugins.path.resolve(plugins.path.join(dirPath, filePath));
|
return plugins.path.resolve(plugins.path.join(dirPath, filePath));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ import SmartfileInterpreter = require('./smartfile.interpreter');
|
|||||||
* @param fileTypeArg
|
* @param fileTypeArg
|
||||||
* @returns {any|any}
|
* @returns {any|any}
|
||||||
*/
|
*/
|
||||||
export let toObject = function(fileStringArg: string, fileTypeArg: string) {
|
export let toObject = function (fileStringArg: string, fileTypeArg: string) {
|
||||||
return SmartfileInterpreter.objectFile(fileStringArg, fileTypeArg);
|
return SmartfileInterpreter.objectFile(fileStringArg, fileTypeArg);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -25,11 +25,11 @@ export interface IToFsOptions {
|
|||||||
* @param fileBaseArg
|
* @param fileBaseArg
|
||||||
*/
|
*/
|
||||||
export let toFs = async (
|
export let toFs = async (
|
||||||
fileContentArg: string | Smartfile,
|
fileContentArg: string | Buffer | Smartfile,
|
||||||
filePathArg,
|
filePathArg: string,
|
||||||
optionsArg: IToFsOptions = {}
|
optionsArg: IToFsOptions = {}
|
||||||
) => {
|
) => {
|
||||||
let done = plugins.smartpromise.defer();
|
const done = plugins.smartpromise.defer();
|
||||||
|
|
||||||
// check args
|
// check args
|
||||||
if (!fileContentArg || !filePathArg) {
|
if (!fileContentArg || !filePathArg) {
|
||||||
@ -37,24 +37,27 @@ export let toFs = async (
|
|||||||
}
|
}
|
||||||
|
|
||||||
// prepare actual write action
|
// prepare actual write action
|
||||||
let fileString: string;
|
let fileContent: string | Buffer;
|
||||||
|
let fileEncoding: 'utf8' | 'binary' = 'utf8';
|
||||||
let filePath: string = filePathArg;
|
let filePath: string = filePathArg;
|
||||||
|
|
||||||
// handle Smartfile
|
// handle Smartfile
|
||||||
if (fileContentArg instanceof Smartfile) {
|
if (fileContentArg instanceof Smartfile) {
|
||||||
let fileContentArg2: any = fileContentArg;
|
fileContent = fileContentArg.contentBuffer;
|
||||||
fileString = fileContentArg.contentBuffer.toString();
|
|
||||||
// handle options
|
// handle options
|
||||||
if (optionsArg.respectRelative) {
|
if (optionsArg.respectRelative) {
|
||||||
filePath = plugins.path.join(filePath, fileContentArg.path);
|
filePath = plugins.path.join(filePath, fileContentArg.path);
|
||||||
}
|
}
|
||||||
|
} else if (Buffer.isBuffer(fileContentArg)) {
|
||||||
|
fileContent = fileContentArg;
|
||||||
|
fileEncoding = 'binary';
|
||||||
} else if (typeof fileContentArg === 'string') {
|
} else if (typeof fileContentArg === 'string') {
|
||||||
fileString = fileContentArg;
|
fileContent = fileContentArg;
|
||||||
} else {
|
} else {
|
||||||
throw new Error('fileContent is neither string nor Smartfile');
|
throw new Error('fileContent is neither string nor Smartfile');
|
||||||
}
|
}
|
||||||
await smartfileFs.ensureDir(plugins.path.parse(filePath).dir);
|
await smartfileFs.ensureDir(plugins.path.parse(filePath).dir);
|
||||||
plugins.fsExtra.writeFile(filePath, fileString, { encoding: 'utf8' }, done.resolve);
|
plugins.fsExtra.writeFile(filePath, fileContent, { encoding: fileEncoding }, done.resolve);
|
||||||
return await done.promise;
|
return await done.promise;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -63,7 +66,7 @@ export let toFs = async (
|
|||||||
* @param fileArg
|
* @param fileArg
|
||||||
* @param filePathArg
|
* @param filePathArg
|
||||||
*/
|
*/
|
||||||
export let toFsSync = function(fileArg: string, filePathArg: string) {
|
export const toFsSync = (fileArg: string, filePathArg: string) => {
|
||||||
// function checks to abort if needed
|
// function checks to abort if needed
|
||||||
if (!fileArg || !filePathArg) {
|
if (!fileArg || !filePathArg) {
|
||||||
throw new Error('expected a valid arguments');
|
throw new Error('expected a valid arguments');
|
||||||
@ -71,7 +74,7 @@ export let toFsSync = function(fileArg: string, filePathArg: string) {
|
|||||||
|
|
||||||
// prepare actual write action
|
// prepare actual write action
|
||||||
let fileString: string;
|
let fileString: string;
|
||||||
let filePath: string = filePathArg;
|
const filePath: string = filePathArg;
|
||||||
|
|
||||||
if (typeof fileArg !== 'string') {
|
if (typeof fileArg !== 'string') {
|
||||||
throw new Error('fileArg is not of type String.');
|
throw new Error('fileArg is not of type String.');
|
||||||
@ -83,9 +86,9 @@ export let toFsSync = function(fileArg: string, filePathArg: string) {
|
|||||||
|
|
||||||
export let smartfileArrayToFs = async (smartfileArrayArg: Smartfile[], dirArg: string) => {
|
export let smartfileArrayToFs = async (smartfileArrayArg: Smartfile[], dirArg: string) => {
|
||||||
await smartfileFs.ensureDir(dirArg);
|
await smartfileFs.ensureDir(dirArg);
|
||||||
for (let smartfile of smartfileArrayArg) {
|
for (const smartfile of smartfileArrayArg) {
|
||||||
await toFs(smartfile, dirArg, {
|
await toFs(smartfile, dirArg, {
|
||||||
respectRelative: true
|
respectRelative: true,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -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 };
|
||||||
|
@ -15,11 +15,11 @@ 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',
|
||||||
})
|
})
|
||||||
.then((res: any) => {
|
.then((res: any) => {
|
||||||
if (res.statusCode === 200) {
|
if (res.statusCode === 200) {
|
||||||
@ -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));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user