diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..47c54b3 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,39 @@ +name: Release + +on: + push: + branches: + - main + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +jobs: + release: + name: Release + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v4 + + - name: Setup Node.js 20.x + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Install Dependencies + run: yarn + + - name: Create Release Pull Request or Publish to npm + id: changesets + uses: changesets/action@v1 + with: + # This expects you to have a script called release which does a build for your packages and calls changeset publish + publish: yarn release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Send a Slack notification if a publish happens + if: steps.changesets.outputs.published == 'true' + # You can do something when a publish happens. + run: my-slack-bot send-notification --message "A new version of ${GITHUB_REPOSITORY} was published!" diff --git a/.gitignore b/.gitignore index cab85ca..d91e82d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,10 @@ -/node_modules -/coverage -*.log .DS_Store +node_modules +.turbo +*.log +.next +*.local +.env +.cache +storybook-static/ +.kbot \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..4e8955b --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +auto-install-peers = true +public-hoist-pattern[]=*storybook* diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..44a73ec --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "eslint.workingDirectories": [ + { + "mode": "auto" + } + ] +} diff --git a/LICENSE b/LICENSE deleted file mode 100644 index b0e20f5..0000000 --- a/LICENSE +++ /dev/null @@ -1,9 +0,0 @@ -Copyright (c) All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md index dc27f0f..e998f54 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,192 @@ -# osr-package-template +# Turborepo Design System Starter -Package basics \ No newline at end of file +This guide explains how to use a React design system starter powered by: + +- 🏎 [Turborepo](https://turbo.build/repo) — High-performance build system for Monorepos +- 🚀 [React](https://reactjs.org/) — JavaScript library for user interfaces +- 🛠 [Tsup](https://github.com/egoist/tsup) — TypeScript bundler powered by esbuild +- 📖 [Storybook](https://storybook.js.org/) — UI component environment powered by Vite + +As well as a few others tools preconfigured: + +- [TypeScript](https://www.typescriptlang.org/) for static type checking +- [ESLint](https://eslint.org/) for code linting +- [Prettier](https://prettier.io) for code formatting +- [Changesets](https://github.com/changesets/changesets) for managing versioning and changelogs +- [GitHub Actions](https://github.com/changesets/action) for fully automated package publishing + +## Using this example + +Run the following command: + +```sh +npx create-turbo@latest -e design-system +``` + +### Useful Commands + +- `pnpm build` - Build all packages, including the Storybook site +- `pnpm dev` - Run all packages locally and preview with Storybook +- `pnpm lint` - Lint all packages +- `pnpm changeset` - Generate a changeset +- `pnpm clean` - Clean up all `node_modules` and `dist` folders (runs each package's clean script) + +## Turborepo + +[Turborepo](https://turbo.build/repo) is a high-performance build system for JavaScript and TypeScript codebases. It was designed after the workflows used by massive software engineering organizations to ship code at scale. Turborepo abstracts the complex configuration needed for monorepos and provides fast, incremental builds with zero-configuration remote caching. + +Using Turborepo simplifies managing your design system monorepo, as you can have a single lint, build, test, and release process for all packages. [Learn more](https://vercel.com/blog/monorepos-are-changing-how-teams-build-software) about how monorepos improve your development workflow. + +## Apps & Packages + +This Turborepo includes the following packages and applications: + +- `apps/docs`: Component documentation site with Storybook +- `packages/ui`: Core React components +- `packages/utils`: Shared React utilities +- `packages/typescript-config`: Shared `tsconfig.json`s used throughout the Turborepo +- `packages/eslint-config`: ESLint preset + +Each package and app is 100% [TypeScript](https://www.typescriptlang.org/). Workspaces enables us to "hoist" dependencies that are shared between packages to the root `package.json`. This means smaller `node_modules` folders and a better local dev experience. To install a dependency for the entire monorepo, use the `-w` workspaces flag with `pnpm add`. + +This example sets up your `.gitignore` to exclude all generated files, other folders like `node_modules` used to store your dependencies. + +### Compilation + +To make the core library code work across all browsers, we need to compile the raw TypeScript and React code to plain JavaScript. We can accomplish this with `tsup`, which uses `esbuild` to greatly improve performance. + +Running `pnpm build` from the root of the Turborepo will run the `build` command defined in each package's `package.json` file. Turborepo runs each `build` in parallel and caches & hashes the output to speed up future builds. + +For `acme-core`, the `build` command is the following: + +```bash +tsup src/index.tsx --format esm,cjs --dts --external react +``` + +`tsup` compiles `src/index.tsx`, which exports all of the components in the design system, into both ES Modules and CommonJS formats as well as their TypeScript types. The `package.json` for `acme-core` then instructs the consumer to select the correct format: + +```json:acme-core/package.json +{ + "name": "@acme/core", + "version": "0.0.0", + "main": "./dist/index.js", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "sideEffects": false, +} +``` + +Run `pnpm build` to confirm compilation is working correctly. You should see a folder `acme-core/dist` which contains the compiled output. + +```bash +acme-core +└── dist + ├── index.d.ts <-- Types + ├── index.js <-- CommonJS version + └── index.mjs <-- ES Modules version +``` + +## Components + +Each file inside of `acme-core/src` is a component inside our design system. For example: + +```tsx:acme-core/src/Button.tsx +import * as React from 'react'; + +export interface ButtonProps { + children: React.ReactNode; +} + +export function Button(props: ButtonProps) { + return ; +} + +Button.displayName = 'Button'; +``` + +When adding a new file, ensure the component is also exported from the entry `index.tsx` file: + +```tsx:acme-core/src/index.tsx +import * as React from "react"; +export { Button, type ButtonProps } from "./Button"; +// Add new component exports here +``` + +## Storybook + +Storybook provides us with an interactive UI playground for our components. This allows us to preview our components in the browser and instantly see changes when developing locally. This example preconfigures Storybook to: + +- Use Vite to bundle stories instantly (in milliseconds) +- Automatically find any stories inside the `stories/` folder +- Support using module path aliases like `@acme-core` for imports +- Write MDX for component documentation pages + +For example, here's the included Story for our `Button` component: + +```js:apps/docs/stories/button.stories.mdx +import { Button } from '@acme-core/src'; +import { Meta, Story, Preview, Props } from '@storybook/addon-docs/blocks'; + + + +# Button + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec euismod, nisl eget consectetur tempor, nisl nunc egestas nisi, euismod aliquam nisl nunc euismod. + +## Props + + + +## Examples + + + + + + +``` + +This example includes a few helpful Storybook scripts: + +- `pnpm dev`: Starts Storybook in dev mode with hot reloading at `localhost:6006` +- `pnpm build`: Builds the Storybook UI and generates the static HTML files +- `pnpm preview-storybook`: Starts a local server to view the generated Storybook UI + +## Versioning & Publishing Packages + +This example uses [Changesets](https://github.com/changesets/changesets) to manage versions, create changelogs, and publish to npm. It's preconfigured so you can start publishing packages immediately. + +You'll need to create an `NPM_TOKEN` and `GITHUB_TOKEN` and add it to your GitHub repository settings to enable access to npm. It's also worth installing the [Changesets bot](https://github.com/apps/changeset-bot) on your repository. + +### Generating the Changelog + +To generate your changelog, run `pnpm changeset` locally: + +1. **Which packages would you like to include?** – This shows which packages and changed and which have remained the same. By default, no packages are included. Press `space` to select the packages you want to include in the `changeset`. +1. **Which packages should have a major bump?** – Press `space` to select the packages you want to bump versions for. +1. If doing the first major version, confirm you want to release. +1. Write a summary for the changes. +1. Confirm the changeset looks as expected. +1. A new Markdown file will be created in the `changeset` folder with the summary and a list of the packages included. + +### Releasing + +When you push your code to GitHub, the [GitHub Action](https://github.com/changesets/action) will run the `release` script defined in the root `package.json`: + +```bash +turbo run build --filter=docs^... && changeset publish +``` + +Turborepo runs the `build` script for all publishable packages (excluding docs) and publishes the packages to npm. By default, this example includes `acme` as the npm organization. To change this, do the following: + +- Rename folders in `packages/*` to replace `acme` with your desired scope +- Search and replace `acme` with your desired scope +- Re-run `pnpm install` + +To publish packages to a private npm organization scope, **remove** the following from each of the `package.json`'s + +```diff +- "publishConfig": { +- "access": "public" +- }, +``` diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..1a0b949 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,92 @@ +import tseslint from 'typescript-eslint'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +// plugins +import regexpEslint from 'eslint-plugin-regexp'; +const typescriptEslint = tseslint.plugin; + +// parsers +const typescriptParser = tseslint.parser; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + + +/** @type {import('eslint').Linter.Config[]} */ +export default [ + { files: ["src/*.{js,mjs,cjs,ts}"] }, + // { languageOptions: { globals: globals.browser } }, + ...tseslint.configs.recommendedTypeChecked, + ...tseslint.configs.stylisticTypeChecked, + regexpEslint.configs['flat/recommended'], + { + languageOptions: { + parser: typescriptParser, + parserOptions: { + project: ['./packages/*/tsconfig.json', './tsconfig.eslint.json'], + tsconfigRootDir: __dirname, + }, + }, + plugins: { + '@typescript-eslint': typescriptEslint, + regexp: regexpEslint, + }, + rules: { + // These off/configured-differently-by-default rules fit well for us + '@typescript-eslint/switch-exhaustiveness-check': 'error', + '@typescript-eslint/no-shadow': 'off', + 'no-console': 'off', + '@typescript-eslint/no-unsafe-enum-comparison': 'off', + '@typescript-eslint/no-empty-object-type': 'off', + // Todo: do we want these? + 'no-var': 'off', + 'regexp/prefer-regexp-exec': 'off', + '@typescript-eslint/no-duplicate-enum-values': 'off', + '@typescript-eslint/no-unsafe-function-type': 'off', + '@typescript-eslint/prefer-for-of': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/array-type': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + '@typescript-eslint/class-literal-property-style': 'off', + '@typescript-eslint/consistent-indexed-object-style': 'off', + '@typescript-eslint/consistent-type-definitions': 'off', + '@typescript-eslint/dot-notation': 'off', + '@typescript-eslint/no-base-to-string': 'off', + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/no-floating-promises': 'off', + '@typescript-eslint/no-misused-promises': 'off', + '@typescript-eslint/no-redundant-type-constituents': 'off', + '@typescript-eslint/no-this-alias': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unused-expressions': 'off', + '@typescript-eslint/only-throw-error': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/no-unnecessary-type-assertion': 'off', + '@typescript-eslint/prefer-nullish-coalescing': 'off', + '@typescript-eslint/prefer-optional-chain': 'off', + '@typescript-eslint/prefer-promise-reject-errors': 'off', + '@typescript-eslint/prefer-string-starts-ends-with': 'off', + '@typescript-eslint/require-await': 'off', + '@typescript-eslint/restrict-plus-operands': 'off', + '@typescript-eslint/restrict-template-expressions': 'off', + '@typescript-eslint/sort-type-constituents': 'off', + '@typescript-eslint/unbound-method': 'off', + '@typescript-eslint/no-explicit-any': 'off', + + // Used by Biome + '@typescript-eslint/consistent-type-imports': 'off', + // These rules enabled by the preset configs don't work well for us + '@typescript-eslint/await-thenable': 'off', + 'prefer-const': 'off', + + // In some cases, using explicit letter-casing is more performant than the `i` flag + 'regexp/use-ignore-case': 'off', + 'regexp/prefer-regexp-exec': 'warn', + 'regexp/prefer-regexp-test': 'warn', + 'no-control-regex': 'off' + } + } +] \ No newline at end of file diff --git a/package.json b/package.json index e67de54..42910f4 100644 --- a/package.json +++ b/package.json @@ -1,45 +1,19 @@ { - "name": "@plastichub/template", - "description": "", - "version": "0.3.1", - "main": "main.js", - "typings": "index.d.ts", - "publishConfig": { - "access": "public" - }, - "bin": { - "osr-bin": "main.js" - }, - "dependencies": { - "@types/node": "^14.17.5", - "@types/yargs": "^17.0.2", - "chalk": "^2.4.1", - "convert-units": "^2.3.4", - "env-var": "^7.0.1", - "typescript": "^4.3.5", - "yargs": "^14.2.3", - "yargs-parser": "^15.0.3" - }, + "private": true, "scripts": { - "test": "tsc; mocha --full-trace mocha \"spec/**/*.spec.js\"", - "test-with-coverage": "istanbul cover node_modules/.bin/_mocha -- 'spec/**/*.spec.js'", - "lint": "tslint --project=./tsconfig.json", - "build": "tsc -p .", - "dev": "tsc -p . --declaration -w", - "typings": "tsc --declaration", - "docs": "npx typedoc src/index.ts", - "dev-test-watch": "mocha-typescript-watch" + "build": "turbo run build", + "dev": "turbo run dev", + "lint": "turbo run lint", + "clean": "turbo run clean && rm -rf node_modules", + "format": "prettier --write \"**/*.{ts,tsx,md}\"", + "changeset": "changeset", + "version-packages": "changeset version", + "release": "turbo run build --filter=docs^... && changeset publish" }, - "homepage": "https://git.osr-plastic.org/plastichub/lib-content", - "repository": { - "type": "git", - "url": "https://git.osr-plastic.org/plastichub/lib-content.git" + "devDependencies": { + "prettier": "^3.2.5", + "turbo": "^2.3.3" }, - "engines": { - "node": ">= 14.0.0" - }, - "license": "BSD-3-Clause", - "keywords": [ - "typescript" - ] + "packageManager": "pnpm@8.15.6", + "name": "design-system" } diff --git a/packages/fs/.editorconfig b/packages/fs/.editorconfig new file mode 100644 index 0000000..10ab7cd --- /dev/null +++ b/packages/fs/.editorconfig @@ -0,0 +1,12 @@ +# http://editorconfig.org +root = true + +[*] +indent_style = tab +indent_size = 4 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/packages/fs/.gitignore b/packages/fs/.gitignore new file mode 100644 index 0000000..cab85ca --- /dev/null +++ b/packages/fs/.gitignore @@ -0,0 +1,4 @@ +/node_modules +/coverage +*.log +.DS_Store diff --git a/.npmignore b/packages/fs/.npmignore similarity index 58% rename from .npmignore rename to packages/fs/.npmignore index 4c9adda..c99f777 100644 --- a/.npmignore +++ b/packages/fs/.npmignore @@ -1,4 +1,5 @@ ./docs ./scripts ./tests -./incoming \ No newline at end of file +./spec +./benchmark \ No newline at end of file diff --git a/packages/fs/.travis.yml b/packages/fs/.travis.yml new file mode 100644 index 0000000..9034319 --- /dev/null +++ b/packages/fs/.travis.yml @@ -0,0 +1,10 @@ +language: node_js + +node_js: + - "9" + +script: +- npm run test + +after_success: +- ./node_modules/.bin/codecov diff --git a/packages/fs/.vscode/launch.json b/packages/fs/.vscode/launch.json new file mode 100644 index 0000000..f949863 --- /dev/null +++ b/packages/fs/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Find", + "skipFiles": [ + "/**" + ], + "args": [ + "find" + ], + "program": "${workspaceFolder}\\main.js", + "preLaunchTask": "tsc: build - tsconfig.json", + "outFiles": [ + "${workspaceFolder}/./**/*.js" + ] + } + ] +} diff --git a/packages/fs/.vscode/settings.json b/packages/fs/.vscode/settings.json new file mode 100644 index 0000000..2c9004b --- /dev/null +++ b/packages/fs/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "cSpell.words": [ + "throttel" + ] +} diff --git a/packages/fs/CHANGELOG.md b/packages/fs/CHANGELOG.md new file mode 100644 index 0000000..78aa7f0 --- /dev/null +++ b/packages/fs/CHANGELOG.md @@ -0,0 +1,103 @@ +# 0.12.1 (2017-02-24) +- Typescript port complete +- all tests passing + +# 0.11.0 (2017-02-09) +- Added input validation for the whole API +- **(breaking change)** Removed already deprecated option `buf` for `read()` method + +# 0.10.5 (2016-12-07) +- Fixed `find()` bug when `directories` is set to `true` and only negation glob is used. + +# 0.10.4 (2016-12-06) +- Fixed matcher edge cases, improved matcher tests (affects `find()` and `copy()` methods). + +# 0.10.3 (2016-11-23) +- Fixed directory tree traversal bug which was causing problems for `findAsync()` and `copyAsync()`. + +# 0.10.2 (2016-11-08) +- Fixed `console.log(jetpack)` for node v6.6.0 or newer. + +# 0.10.1 (2016-11-01) +- Bugfixed case when `copyAsync()` was leaving open read stream if write stream errored. +- Tests ported from jasmine to mocha. + +# 0.10.0 (2016-10-17) +- `copyAsync()` uses only streams (much more memory efficient). +- `find()` supports `recursive` option. + +# 0.9.2 (2016-06-27) +- Updated third party dependencies to quell minimatch intallation warnings. + +# 0.9.1 (2016-05-21) +- Bug-fixed `jetpack.read('nonexistent_file', 'json')`. + +# 0.9.0 (2016-05-10) +- **(breaking change)** `read()`, `list()`, `inspect()` and `inspectTree()` returns `undefined` instead of `null` if path doesn't exist. +- More sane edge cases for `dir()`, `file()` and `list()`. + +# 0.8.0 (2016-04-09) +- **(breaking change)** `find()` now distinguishes between files and directories and by default searches only for files (previously searched for both). +- **(breaking change)** `find()` no longer can be configured with `returnAs` parameter and returns always relative paths (previously returned absolute). +- **(breaking change)** `list()` no longer accepts `useInspect` as a parameter. To achieve old behaviour use `jetpack.list()` with `Array.map()`. +- **(deprecation)** Don't do `jetpack.read('sth', 'buf')`, do `jetpack.read('sth', 'buffer')` instead. +- `remove()`, `list()` and `find()` now can be called without provided `path`, and defaults to CWD in that case. + +# 0.7.3 (2016-03-21) +- Bugfixed `copy()` with symlink overwrite + +# 0.7.2 (2016-03-09) +- Fixed .dotfiles copying + +# 0.7.1 (2015-12-17) +- Updated third party dependencies. + +# 0.7.0 (2015-07-20) +- **(breaking change)** `matching` option in `copy()` and `find()` resolves glob patterns to the folder you want copy or find stuff in (previously CWD was used). + +# 0.6.5 (2015-06-19) +- `exists()` can handle ENOTDIR error. + +# 0.6.3 and 0.6.4 (2015-04-18) +- Added support for symbolic links. + +# 0.6.2 (2015-04-07) +- Option `matching` in `copy()` and `find()` now accepts patterns anchored to CWD. + +# 0.6.1 (2015-04-03) +- Option `matching` in `copy()` and `find()` now accepts negation patterns (e.g. `!some/file.txt`). + +# 0.6.0 (2015-03-30) +- Lots of code refactoring +- **(breaking change)** `dir()` no longer has `exists` option. +- **(breaking change)** `file()` no longer has `exists` and `empty` options. +- **(breaking change)** `safe` option for `write()` renamed to `atomic` (and uses new algorithm under the hood). +- **(breaking change)** `safe` option for `read()` dropped (`atomic` while writing is enough). +- **(breaking change)** In `copy()` options `only` and `allBut` have been replaced by option `matching`. +- **(breaking change)** In `remove()` options `only` and `allBut` have been dropped (to do the same use `find()`, and then remove). +- **(breaking change)** Default jsonIndent changed form 0 to 2. +- `find()` method added. +- More telling errors when `read()` failed while parsing JSON. + +# 0.5.3 (2015-01-06) +- `inspect()` can return file access/modify/change time and mode. + +# 0.5.2 (2014-09-21) +- `inspect()` checksum of empty file is now `null`. + +# 0.5.1 (2014-09-21) +- `cwd()` accepts many arguments as path parts. + +# 0.5.0 (2014-08-31) +- **(breaking change)** Method `tree()` renamed to `inspectTree()`. +- **(breaking change)** Parameters passed to `list()` has changed. +- Methods `inspect()` and `inspectTree()` can calculate md5 and sha1 checksums. +- Added aliases to `fs.createReadStream()` and `fs.createWriteStream()`. + +# 0.4.1 (2014-07-16) +- `copy()` now copies also file permissions on unix systems. +- `append()` can specify file mode if file doesn't exist. +- Can indent saved JSON data. + +# 0.4.0 (2014-07-14) +- Changelog starts here. diff --git a/packages/fs/EXAMPLES.md b/packages/fs/EXAMPLES.md new file mode 100644 index 0000000..a0f1750 --- /dev/null +++ b/packages/fs/EXAMPLES.md @@ -0,0 +1,82 @@ +# Cool things about fs-jetpack in examples +**Note:** All examples here are synchronous for simplicity. You can easily make them asynchronous just by adding 'Async' to method names and expecting promise to be returned instead of ready value. + +## Every jetpack instance has its internal CWD +You can create many jetpack objects with different internal working directories (which are independent of `process.cwd()`) and work on directories in a little more object-oriented manner. +```js +var src = jetpack.cwd('path/to/source'); +var dest = jetpack.cwd('path/to/destination'); +src.copy('foo.txt', dest.path('bar.txt')); +``` + +## JSON is a first class citizen +You can write JavaScript object directly to disk and it will be transformed to JSON automatically. +```js +var obj = { greet: "Hello World!" }; +jetpack.write('file.json', obj); +``` +Then you can get your object back just by telling read method that it's a JSON. +```js +var obj = jetpack.read('file.json', 'json'); +``` + +## Jetpack throws errors at you as the last resort +Everyone who did something with files for sure seen (and probably hates) *"ENOENT, no such file or directory"* error. Jetpack tries to recover from that error if possible. +1. For write/creation operations, if any of parent directories doesn't exist jetpack will just create lacking directories. +2. For read/inspect operations, if file or directory doesn't exist `undefined` is returned instead of throwing. + +## Jetpack is great for build scripts +```js +var src = jetpack.cwd('path/to/source'); +var dest = jetpack.dir('path/to/destination', { empty: true }); + +src.copy('.', dest.path(), { + matching: ['./vendor/**', '*.html', '*.png', '*.jpg'] +}); + +var config = src.read('config.json', 'json'); +config.env = 'production'; +dest.write('config.json', config); +``` + +## All methods play nicely with each other +Let's say you want to create folder structure: +``` +. +|- greets + |- greet.txt + |- greet.json +|- greets-i18n + |- polish.txt +``` +Peace of cake with jetpack! +```js +jetpack +.dir('greets') + .file('greet.txt', { content: 'Hello world!' }) + .file('greet.json', { content: { greet: 'Hello world!' } }) + .cwd('..') +.dir('greets-i18n') + .file('polish.txt', { content: 'Witaj świecie!' }); +``` + +## Find and delete all `.tmp` files inside `my-dir` +```js +jetpack.find('my-dir', { + matching: '*.tmp' +}) +.forEach(jetpack.remove); +``` + +## Check if two files have the same content +```js +var file1 = jetpack.inspect('file1', { checksum: 'md5' }); +var file2 = jetpack.inspect('file2', { checksum: 'md5' }); +var areTheSame = (file1.md5 === file2.md5); +``` + +## More secure writes to disk +For essential data you might consider "atomic write" feature. To read more about "why" and "how" please see: [Transactionally writing files in Node.js](http://stackoverflow.com/questions/17047994/transactionally-writing-files-in-node-js) Jetpack implements this simple trick and makes it available as an option. +```js +jetpack.write('important_config.json', { atomic: true }); +``` diff --git a/packages/fs/LICENSE b/packages/fs/LICENSE new file mode 100644 index 0000000..ae8a771 --- /dev/null +++ b/packages/fs/LICENSE @@ -0,0 +1,28 @@ +The "New" BSD License +********************* + +Copyright (c) 2015 - 2016, xblox +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the xblox nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/fs/README.md b/packages/fs/README.md new file mode 100644 index 0000000..ee78f8e --- /dev/null +++ b/packages/fs/README.md @@ -0,0 +1,20 @@ +# Advanced filesystem implementation in Typescript + +- [ ] Correct totals +- [ ] support streams +- [ ] Switch to fast glob +- [x] Remap nodes for cp and mv +- [x] zero conf +- [ ] update unit tests +- [-] common CLI commands for global: each, concat, cat (with plugins) +- [-] rimraf rename plugin, part of `each ` +- [ ] node type incorrect for invalid file/folder names +- [-] update to latest fs-jetpack +- [ ] WSAENAMETOOLONG +- [ ] diff + - [ ] images +- [ ] defaults : path limit, ARS, busy + +## References + +- [https://github.com/alessioalex/get-folder-size](https://github.com/alessioalex/get-folder-size) diff --git a/packages/fs/append.d.ts b/packages/fs/append.d.ts new file mode 100644 index 0000000..9c676b7 --- /dev/null +++ b/packages/fs/append.d.ts @@ -0,0 +1,10 @@ +/// +/// +export interface Options { + mode: string; + encoding?: string; + flag?: string; +} +export declare const validateInput: (methodName: string, path: string, data: any, options?: Options) => void; +export declare const sync: (path: string, data: any, options: Options) => void; +export declare const async: (path: string, data: string | Buffer | Object, options?: Options) => Promise; diff --git a/packages/fs/append.js b/packages/fs/append.js new file mode 100644 index 0000000..15683ff --- /dev/null +++ b/packages/fs/append.js @@ -0,0 +1,57 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.async = exports.sync = exports.validateInput = void 0; +const fs = require("fs"); +const Q = require('q'); +const write_1 = require("./write"); +const validate_1 = require("./utils/validate"); +const validateInput = (methodName, path, data, options) => { + const methodSignature = methodName + '(path, data, [options])'; + (0, validate_1.validateArgument)(methodSignature, 'path', path, ['string']); + (0, validate_1.validateArgument)(methodSignature, 'data', data, ['string', 'buffer']); + (0, validate_1.validateOptions)(methodSignature, 'options', options, { + mode: ['string', 'number'] + }); +}; +exports.validateInput = validateInput; +// --------------------------------------------------------- +// SYNC +// --------------------------------------------------------- +const sync = (path, data, options) => { + try { + fs.appendFileSync(path, data, options ? { encoding: options.encoding, mode: options.mode } : {}); + } + catch (err) { + if (err.code === 'ENOENT') { + // Parent directory doesn't exist, so just pass the task to `write`, + // which will create the folder and file. + (0, write_1.sync)(path, data, options); + } + else { + throw err; + } + } +}; +exports.sync = sync; +// --------------------------------------------------------- +// ASYNC +// --------------------------------------------------------- +const promisedAppendFile = Q.denodeify(fs.appendFile); +const async = (path, data, options) => { + return new Promise((resolve, reject) => { + promisedAppendFile(path, data, options) + .then(resolve) + .catch((err) => { + if (err.code === 'ENOENT') { + // Parent directory doesn't exist, so just pass the task to `write`, + // which will create the folder and file. + (0, write_1.async)(path, data, options).then(resolve, reject); + } + else { + reject(err); + } + }); + }); +}; +exports.async = async; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3JjL2FwcGVuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLG1DQUFpRTtBQUNqRSwrQ0FBcUU7QUFPOUQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFrQixFQUFFLElBQVksRUFBRSxJQUFTLEVBQUUsT0FBaUIsRUFBRSxFQUFFO0lBQzlGLE1BQU0sZUFBZSxHQUFHLFVBQVUsR0FBRyx5QkFBeUIsQ0FBQztJQUMvRCxJQUFBLDJCQUFnQixFQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM1RCxJQUFBLDJCQUFnQixFQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDdEUsSUFBQSwwQkFBZSxFQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO1FBQ25ELElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUM7S0FDM0IsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBUFcsUUFBQSxhQUFhLGlCQU94QjtBQUNGLDREQUE0RDtBQUM1RCxPQUFPO0FBQ1AsNERBQTREO0FBQ3JELE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBWSxFQUFFLElBQVMsRUFBRSxPQUFnQixFQUFRLEVBQUU7SUFDdEUsSUFBSSxDQUFDO1FBQ0gsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQTBCLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0gsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDMUIsb0VBQW9FO1lBQ3BFLHlDQUF5QztZQUN6QyxJQUFBLFlBQVMsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMsQ0FBQztBQVpXLFFBQUEsSUFBSSxRQVlmO0FBRUYsNERBQTREO0FBQzVELFFBQVE7QUFDUiw0REFBNEQ7QUFDNUQsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMvQyxNQUFNLEtBQUssR0FBRyxDQUFDLElBQVksRUFBRSxJQUE4QixFQUFFLE9BQWlCLEVBQWlCLEVBQUU7SUFDdEcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQzthQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQ2IsS0FBSyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMxQixvRUFBb0U7Z0JBQ3BFLHlDQUF5QztnQkFDekMsSUFBQSxhQUFVLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3hELENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQWRXLFFBQUEsS0FBSyxTQWNoQiJ9 \ No newline at end of file diff --git a/packages/fs/append.js.map b/packages/fs/append.js.map new file mode 100644 index 0000000..faa5e13 --- /dev/null +++ b/packages/fs/append.js.map @@ -0,0 +1 @@ +{"version":3,"file":"append.js","sourceRoot":"","sources":["src/append.ts"],"names":[],"mappings":";;;AAAA,yBAAyB;AACzB,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AACvB,mCAAiE;AACjE,+CAAqE;AAO9D,MAAM,aAAa,GAAG,CAAC,UAAkB,EAAE,IAAY,EAAE,IAAS,EAAE,OAAiB,EAAE,EAAE;IAC9F,MAAM,eAAe,GAAG,UAAU,GAAG,yBAAyB,CAAC;IAC/D,IAAA,2BAAgB,EAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5D,IAAA,2BAAgB,EAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtE,IAAA,0BAAe,EAAC,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE;QACnD,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;KAC3B,CAAC,CAAC;AACL,CAAC,CAAC;AAPW,QAAA,aAAa,iBAOxB;AACF,4DAA4D;AAC5D,OAAO;AACP,4DAA4D;AACrD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,IAAS,EAAE,OAAgB,EAAQ,EAAE;IACtE,IAAI;QACF,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAA0B,EAAE,IAAI,EAAE,OAAO,CAAC,IAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KAC9H;IAAC,OAAO,GAAG,EAAE;QACZ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;YACzB,oEAAoE;YACpE,yCAAyC;YACzC,IAAA,YAAS,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;SAChC;aAAM;YACL,MAAM,GAAG,CAAC;SACX;KACF;AACH,CAAC,CAAC;AAZW,QAAA,IAAI,QAYf;AAEF,4DAA4D;AAC5D,QAAQ;AACR,4DAA4D;AAC5D,MAAM,kBAAkB,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;AAC/C,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,IAA8B,EAAE,OAAiB,EAAiB,EAAE;IACtG,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;aACpC,IAAI,CAAC,OAAO,CAAC;aACb,KAAK,CAAC,CAAC,GAAQ,EAAE,EAAE;YAClB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACzB,oEAAoE;gBACpE,yCAAyC;gBACzC,IAAA,aAAU,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;aACvD;iBAAM;gBACL,MAAM,CAAC,GAAG,CAAC,CAAC;aACb;QACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAdW,QAAA,KAAK,SAchB"} \ No newline at end of file diff --git a/packages/fs/appveyor.yml b/packages/fs/appveyor.yml new file mode 100644 index 0000000..0fc2e79 --- /dev/null +++ b/packages/fs/appveyor.yml @@ -0,0 +1,25 @@ +# appveyor file +# http://www.appveyor.com/docs/appveyor-yml + +version: "{build}" + +environment: + matrix: + - nodejs_version: "8" + +install: + - ps: Install-Product node $env:nodejs_version + - npm install + +test_script: + # Output useful info for debugging. + - node --version + - npm --version + # run tests + - npm test + +build: off + +branches: + only: + - master diff --git a/packages/fs/benchmark/copy.js b/packages/fs/benchmark/copy.js new file mode 100644 index 0000000..c2cff55 --- /dev/null +++ b/packages/fs/benchmark/copy.js @@ -0,0 +1,96 @@ +// Benchmark to make sure performance of copy is near 'native' bash command. + +/* eslint no-console: 0 */ + +'use strict'; + +var Q = require('q'); +var os = require('os'); +var childProcess = require('child_process'); +var promisedExec = Q.denodeify(childProcess.exec); +var benchUtils = require('./utils'); +var jetpack = require('..'); + +var testDir = jetpack.dir(os.tmpdir() + '/jetpack-benchmark', { empty: true }); +var toCopyDir = testDir.dir('to-copy'); +var timer; +var jetpackTime; +var nativeTime; + +var prepareFiles = function (testConfig) { + return new Q.Promise(function (resolve, reject) { + var count = 0; + var content = new Buffer(testConfig.size); + + var makeOneFile = function () { + toCopyDir.fileAsync(count + '.txt', { content: content }) + .then(function () { + count += 1; + if (count < testConfig.files) { + makeOneFile(); + } else { + resolve(); + } + }, reject); + }; + + console.log('Preparing ' + testConfig.files + ' test files (' + + benchUtils.humanFileSize(testConfig.size, true) + ' each)...'); + makeOneFile(); + }); +}; + +var waitAWhile = function () { + return new Q.Promise(function (resolve) { + console.log('Waiting 10s to allow hardware buffers be emptied...'); + setTimeout(resolve, 10000); + }); +}; + +var test = function (testConfig) { + console.log('----------------------'); + + return prepareFiles(testConfig) + .then(waitAWhile) + .then(function () { + timer = benchUtils.startTimer('jetpack.copyAsync()'); + return toCopyDir.copyAsync('.', testDir.path('copied-jetpack')); + }) + .then(function () { + jetpackTime = timer(); + return waitAWhile(); + }) + .then(function () { + timer = benchUtils.startTimer('Native cp -R'); + return promisedExec('cp -R ' + toCopyDir.path() + ' ' + testDir.path('copied-native')); + }) + .then(function () { + nativeTime = timer(); + console.log('Jetpack is ' + (jetpackTime / nativeTime).toFixed(1) + + ' times slower than native'); + console.log('Cleaning up after test...'); + return testDir.removeAsync(); + }) + .catch(function (err) { + console.log(err); + }); +}; + +var testConfigs = [{ + files: 10000, + size: 100 +}, { + files: 1000, + size: 1000 * 100 +}, { + files: 100, + size: 1000 * 1000 * 10 +}]; + +var runNext = function () { + if (testConfigs.length > 0) { + test(testConfigs.pop()).then(runNext); + } +}; + +runNext(); diff --git a/packages/fs/benchmark/utils.js b/packages/fs/benchmark/utils.js new file mode 100644 index 0000000..c254ee4 --- /dev/null +++ b/packages/fs/benchmark/utils.js @@ -0,0 +1,97 @@ +/* eslint no-console:0 */ + +'use strct'; + +var os = require('os'); +var childProcess = require('child_process'); +var promisify = require('../lib/utils/promisify'); +var jetpack = require('..'); + +var humanReadableFileSize = function (bytes, si) { + var units; + var u; + var b = bytes; + var thresh = si ? 1000 : 1024; + if (Math.abs(b) < thresh) { + return b + ' B'; + } + units = si + ? ['kB', 'MB', 'GB', 'TB'] + : ['KiB', 'MiB', 'GiB', 'TiB']; + u = -1; + do { + b /= thresh; + ++u; + } while (Math.abs(b) >= thresh && u < units.length - 1); + return b.toFixed(1) + ' ' + units[u]; +}; + +var testDirPath = function () { + return os.tmpdir() + '/jetpack-benchmark'; +}; + +var prepareJetpackTestDir = function () { + return jetpack.dir(testDirPath(), { empty: true }); +}; + +var prepareFiles = function (jetpackDir, creationConfig) { + return new Promise(function (resolve, reject) { + var count = 0; + var content = new Buffer(creationConfig.size); + + var makeOneFile = function () { + jetpackDir.fileAsync(count + '.txt', { content: content }) + .then(function () { + count += 1; + if (count < creationConfig.files) { + makeOneFile(); + } else { + resolve(); + } + }, reject); + }; + + console.log('Preparing ' + creationConfig.files + ' test files (' + + humanReadableFileSize(creationConfig.size, true) + ' each)...'); + makeOneFile(); + }); +}; + +var startTimer = function (startMessage) { + var start = Date.now(); + process.stdout.write(startMessage + ' ... '); + return function stop() { + var time = Date.now() - start; + console.log(time + 'ms'); + return time; + }; +}; + +var waitAWhile = function () { + return new Promise(function (resolve) { + console.log('Waiting 5s to allow hardware buffers be emptied...'); + setTimeout(resolve, 5000); + }); +}; + +var promisedExec = promisify(childProcess.exec); + +var showDifferenceInfo = function (jetpackTime, nativeTime) { + var perc = Math.round(jetpackTime / nativeTime * 100) - 100; + console.log('Jetpack is ' + perc + '% slower than native'); +}; + +var cleanAfterTest = function () { + console.log('Cleaning up after test...'); + return jetpack.removeAsync(testDirPath()); +}; + +module.exports = { + prepareJetpackTestDir: prepareJetpackTestDir, + prepareFiles: prepareFiles, + startTimer: startTimer, + waitAWhile: waitAWhile, + exec: promisedExec, + showDifferenceInfo: showDifferenceInfo, + cleanAfterTest: cleanAfterTest +}; diff --git a/packages/fs/build/append.d.ts b/packages/fs/build/append.d.ts new file mode 100644 index 0000000..22ecc5f --- /dev/null +++ b/packages/fs/build/append.d.ts @@ -0,0 +1,9 @@ +/// +export interface Options { + mode: string; + encoding?: string; + flag?: string; +} +export declare const validateInput: (methodName: string, path: string, data: any, options?: Options) => void; +export declare const sync: (path: string, data: any, options: Options) => void; +export declare const async: (path: string, data: string | Object | Buffer, options?: Options) => Promise; diff --git a/packages/fs/build/append.js b/packages/fs/build/append.js new file mode 100644 index 0000000..6544abc --- /dev/null +++ b/packages/fs/build/append.js @@ -0,0 +1,53 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs = require("fs"); +const Q = require('q'); +const write_1 = require("./write"); +const validate_1 = require("./utils/validate"); +exports.validateInput = (methodName, path, data, options) => { + const methodSignature = methodName + '(path, data, [options])'; + validate_1.validateArgument(methodSignature, 'path', path, ['string']); + validate_1.validateArgument(methodSignature, 'data', data, ['string', 'buffer']); + validate_1.validateOptions(methodSignature, 'options', options, { + mode: ['string', 'number'] + }); +}; +// --------------------------------------------------------- +// SYNC +// --------------------------------------------------------- +exports.sync = (path, data, options) => { + try { + fs.appendFileSync(path, data, options ? { encoding: options.encoding, mode: options.mode } : {}); + } + catch (err) { + if (err.code === 'ENOENT') { + // Parent directory doesn't exist, so just pass the task to `write`, + // which will create the folder and file. + write_1.sync(path, data, options); + } + else { + throw err; + } + } +}; +// --------------------------------------------------------- +// ASYNC +// --------------------------------------------------------- +const promisedAppendFile = Q.denodeify(fs.appendFile); +exports.async = (path, data, options) => { + return new Promise((resolve, reject) => { + promisedAppendFile(path, data, options) + .then(resolve) + .catch((err) => { + if (err.code === 'ENOENT') { + // Parent directory doesn't exist, so just pass the task to `write`, + // which will create the folder and file. + write_1.async(path, data, options).then(resolve, reject); + } + else { + reject(err); + } + }); + }); +}; +//# sourceMappingURL=append.js.map \ No newline at end of file diff --git a/packages/fs/build/append.js.map b/packages/fs/build/append.js.map new file mode 100644 index 0000000..b19731d --- /dev/null +++ b/packages/fs/build/append.js.map @@ -0,0 +1 @@ +{"version":3,"file":"append.js","sourceRoot":"","sources":["../src/append.ts"],"names":[],"mappings":";;AAAA,yBAAyB;AACzB,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AACvB,mCAAiE;AACjE,+CAAqE;AAOxD,QAAA,aAAa,GAAG,CAAC,UAAkB,EAAE,IAAY,EAAE,IAAS,EAAE,OAAiB,EAAE,EAAE;IAC9F,MAAM,eAAe,GAAG,UAAU,GAAG,yBAAyB,CAAC;IAC/D,2BAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5D,2BAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtE,0BAAe,CAAC,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE;QACnD,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;KAC3B,CAAC,CAAC;AACL,CAAC,CAAC;AACF,4DAA4D;AAC5D,OAAO;AACP,4DAA4D;AAC/C,QAAA,IAAI,GAAG,CAAC,IAAY,EAAE,IAAS,EAAE,OAAgB,EAAQ,EAAE;IACtE,IAAI,CAAC;QACH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,IAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7G,CAAC;IAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACb,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC;YAC1B,oEAAoE;YACpE,yCAAyC;YACzC,YAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC;QAAC,IAAI,CAAC,CAAC;YACN,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,4DAA4D;AAC5D,QAAQ;AACR,4DAA4D;AAC5D,MAAM,kBAAkB,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;AACzC,QAAA,KAAK,GAAG,CAAC,IAAY,EAAE,IAA8B,EAAE,OAAiB,EAAiB,EAAE;IACtG,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;aACpC,IAAI,CAAC,OAAO,CAAC;aACb,KAAK,CAAC,CAAC,GAAQ,EAAE,EAAE;YAClB,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC;gBAC1B,oEAAoE;gBACpE,yCAAyC;gBACzC,aAAU,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACxD,CAAC;YAAC,IAAI,CAAC,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"} \ No newline at end of file diff --git a/packages/fs/build/copy.d.ts b/packages/fs/build/copy.d.ts new file mode 100644 index 0000000..4b21e4f --- /dev/null +++ b/packages/fs/build/copy.d.ts @@ -0,0 +1,14 @@ +import { ICopyOptions, EResolveMode, TCopyResult } from './interfaces'; +export declare function validateInput(methodName: string, from: string, to: string, options?: ICopyOptions): void; +export declare function sync(from: string, to: string, options?: ICopyOptions): void; +export declare function copySymlinkAsync(from: string, to: string): Promise<{}>; +export declare function resolveConflict(from: string, to: string, options: ICopyOptions, resolveMode: EResolveMode): boolean; +/** + * Final async copy function. + * @export + * @param {string} from + * @param {string} to + * @param {ICopyOptions} [options] + * @returns + */ +export declare function async(from: string, to: string, options?: ICopyOptions): Promise; diff --git a/packages/fs/build/copy.js b/packages/fs/build/copy.js new file mode 100644 index 0000000..53d524f --- /dev/null +++ b/packages/fs/build/copy.js @@ -0,0 +1,624 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const pathUtil = require("path"); +const fs = require("fs"); +const fs_1 = require("fs"); +const mkdirp = require("mkdirp"); +const exists_1 = require("./exists"); +const matcher_1 = require("./utils/matcher"); +const mode_1 = require("./utils/mode"); +const tree_walker_1 = require("./utils/tree_walker"); +const validate_1 = require("./utils/validate"); +const write_1 = require("./write"); +const errors_1 = require("./errors"); +const interfaces_1 = require("./interfaces"); +const inspect_1 = require("./inspect"); +const remove_1 = require("./remove"); +const promisify_1 = require("./promisify"); +const iterator_1 = require("./iterator"); +const promisedSymlink = promisify_1.promisify(fs.symlink); +const promisedReadlink = promisify_1.promisify(fs.readlink); +const promisedUnlink = promisify_1.promisify(fs.unlink); +const promisedMkdirp = promisify_1.promisify(mkdirp); +const progress = require('progress-stream'); +const throttle = require('throttle'); +const CPROGRESS_THRESHOLD = 1048576 * 5; // minimum file size threshold to use write progress = 5MB +function validateInput(methodName, from, to, options) { + const methodSignature = methodName + '(from, to, [options])'; + validate_1.validateArgument(methodSignature, 'from', from, ['string']); + validate_1.validateArgument(methodSignature, 'to', to, ['string']); + validate_1.validateOptions(methodSignature, 'options', options, { + overwrite: ['boolean'], + matching: ['string', 'array of string'], + progress: ['function'], + writeProgress: ['function'], + conflictCallback: ['function'], + conflictSettings: ['object'], + throttel: ['number'], + debug: ['boolean'], + flags: ['number'] + }); +} +exports.validateInput = validateInput; +const parseOptions = (options, from) => { + const opts = options || {}; + const parsedOptions = {}; + parsedOptions.overwrite = opts.overwrite; + parsedOptions.progress = opts.progress; + parsedOptions.writeProgress = opts.writeProgress; + parsedOptions.conflictCallback = opts.conflictCallback; + parsedOptions.conflictSettings = opts.conflictSettings; + parsedOptions.debug = opts.debug; + parsedOptions.throttel = opts.throttel; + parsedOptions.flags = opts.flags || 0; + if (!opts.filter) { + if (opts.matching) { + parsedOptions.filter = matcher_1.create(from, opts.matching); + } + else { + parsedOptions.filter = () => { + return true; + }; + } + } + return parsedOptions; +}; +// --------------------------------------------------------- +// Sync +// --------------------------------------------------------- +const checksBeforeCopyingSync = (from, to, options = {}) => { + if (!exists_1.sync(from)) { + throw errors_1.ErrDoesntExists(from); + } + if (exists_1.sync(to) && !options.overwrite) { + throw errors_1.ErrDestinationExists(to); + } +}; +function copyFileSyncWithProgress(from, to, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve, reject) => { + const started = Date.now(); + let cbCalled = false; + let elapsed = Date.now(); + let speed = 0; + const done = (err) => { + if (!cbCalled) { + cbCalled = true; + resolve(); + } + }; + const rd = fs_1.createReadStream(from). + on('error', (err) => done(err)); + const str = progress({ + length: fs.statSync(from).size, + time: 100 + }).on('progress', (e) => { + elapsed = (Date.now() - started) / 1000; + speed = e.transferred / elapsed; + options.writeProgress(from, e.transferred, e.length); + }); + const wr = fs_1.createWriteStream(to); + wr.on('error', (err) => done(err)); + wr.on('close', done); + rd.pipe(str).pipe(wr); + }); + }); +} +function copyFileSync(from, to, mode, options) { + return __awaiter(this, void 0, void 0, function* () { + const data = fs_1.readFileSync(from); + const writeOptions = { + mode: mode + }; + if (options && options.writeProgress) { + yield copyFileSyncWithProgress(from, to, options); + } + else { + write_1.sync(to, data, writeOptions); + } + }); +} +const copySymlinkSync = (from, to) => { + const symlinkPointsAt = fs.readlinkSync(from); + try { + fs_1.symlinkSync(symlinkPointsAt, to); + } + catch (err) { + // There is already file/symlink with this name on destination location. + // Must erase it manually, otherwise system won't allow us to place symlink there. + if (err.code === 'EEXIST') { + fs.unlinkSync(to); + // Retry... + fs.symlinkSync(symlinkPointsAt, to); + } + else { + throw err; + } + } +}; +function copyItemSync(from, inspectData, to, options) { + return __awaiter(this, void 0, void 0, function* () { + const mode = mode_1.normalizeFileMode(inspectData.mode); + if (inspectData.type === interfaces_1.ENodeType.DIR) { + mkdirp.sync(to, { mode: parseInt(mode, 8), fs: null }); + } + else if (inspectData.type === interfaces_1.ENodeType.FILE) { + yield copyFileSync(from, to, mode, options); + } + else if (inspectData.type === interfaces_1.ENodeType.SYMLINK) { + copySymlinkSync(from, to); + } + }); +} +function sync(from, to, options) { + const opts = parseOptions(options, from); + checksBeforeCopyingSync(from, to, opts); + const nodes = []; + let sizeTotal = 0; + if (options && options.flags & interfaces_1.ECopyFlags.EMPTY) { + const dstStat = fs.statSync(to); + if (dstStat.isDirectory()) { + remove_1.sync(to); + } + } + // tslint:disable-next-line:no-shadowed-variable + const visitor = (path, inspectData) => { + if (opts.filter(path)) { + nodes.push({ + path: path, + item: inspectData, + dst: pathUtil.resolve(to, pathUtil.relative(from, path)) + }); + sizeTotal += inspectData.size; + } + }; + tree_walker_1.sync(from, { + inspectOptions: { + mode: true, + symlinks: true + } + }, visitor); + Promise.all(nodes.map((item, current) => __awaiter(this, void 0, void 0, function* () { + yield copyItemSync(item.path, item.item, item.dst, options); + if (opts.progress) { + opts.progress(item.path, current, nodes.length, item.item); + } + }))); +} +exports.sync = sync; +// --------------------------------------------------------- +// Async +// --------------------------------------------------------- +/** + * + * + * @param {string} from + * @param {string} to + * @param {ICopyOptions} opts + * @returns {(Promise)} + */ +const checkAsync = (from, to, opts) => { + return exists_1.async(from) + .then(srcPathExists => { + if (!srcPathExists) { + throw errors_1.ErrDoesntExists(from); + } + else { + return exists_1.async(to); + } + }) + .then(destPathExists => { + if (destPathExists) { + if (opts.conflictSettings) { + return Promise.resolve(opts.conflictSettings); + } + if (opts.conflictCallback) { + const promise = opts.conflictCallback(to, inspect_1.createItem(to), interfaces_1.EError.EXISTS); + promise.then((settings) => { + settings.error = interfaces_1.EError.EXISTS; + }); + return promise; + } + if (!opts.overwrite) { + throw errors_1.ErrDestinationExists(to); + } + } + }); +}; +const copyFileAsync = (from, to, mode, options, retriedAttempt) => { + return new Promise((resolve, reject) => { + const readStream = fs.createReadStream(from); + const writeStream = fs.createWriteStream(to, { mode: mode }); + readStream.on('error', reject); + writeStream.on('error', (err) => { + const toDirPath = pathUtil.dirname(to); + // Force read stream to close, since write stream errored + // read stream serves us no purpose. + readStream.resume(); + if (err.code === interfaces_1.EError.NOEXISTS && retriedAttempt === undefined) { + // Some parent directory doesn't exits. Create it and retry. + promisedMkdirp(toDirPath, null).then(() => { + // Make retry attempt only once to prevent vicious infinite loop + // (when for some obscure reason I/O will keep returning ENOENT error). + // Passing retriedAttempt = true. + copyFileAsync(from, to, mode, null, true) + .then(resolve) + .catch(reject); + }); + } + else { + reject(err); + } + }); + writeStream.on('finish', () => { + // feature: preserve times + if (options && options.flags & interfaces_1.ECopyFlags.PRESERVE_TIMES) { + const sourceStat = fs.statSync(from); + fs.open(to, 'w', (err, fd) => { + if (err) { + throw err; + } + fs.futimes(fd, sourceStat.atime, sourceStat.mtime, (err2) => { + if (err2) { + throw err2; + } + fs.close(fd, null); + resolve(); + }); + }); + } + else { + resolve(); + } + }); + const size = fs.statSync(from).size; + let progressStream = null; + if (options && options.writeProgress && size > CPROGRESS_THRESHOLD) { + progressStream = progress({ + length: fs.statSync(from).size, + time: 100 // call progress each 100 ms + }); + let elapsed = Date.now(); + let speed = 0; + const started = Date.now(); + progressStream.on('progress', (e) => { + elapsed = (Date.now() - started) / 1000; + speed = e.transferred / elapsed; + options.writeProgress(from, e.transferred, e.length); + if (options.debug) { + console.log('write ' + from + ' (' + e.transferred + ' of ' + e.length); + } + }); + if (options.throttel) { + readStream.pipe(progressStream).pipe(new throttle(options.throttel)).pipe(writeStream); + } + else { + readStream.pipe(progressStream).pipe(writeStream); + } + } + else { + if (options && options.debug) { + console.log('write ' + from + ' to ' + to); + } + readStream.pipe(writeStream); + } + }); +}; +function copySymlinkAsync(from, to) { + return promisedReadlink(from) + .then((symlinkPointsAt) => { + return new Promise((resolve, reject) => { + promisedSymlink(symlinkPointsAt, to, null) + .then(resolve) + .catch((err) => { + if (err.code === interfaces_1.EError.EXISTS) { + // There is already file/symlink with this name on destination location. + // Must erase it manually, otherwise system won't allow us to place symlink there. + promisedUnlink(to, null) + .then(() => { + return promisedSymlink(symlinkPointsAt, to, null); + }) + .then(resolve, reject); + } + else { + reject(err); + } + }); + }); + }); +} +exports.copySymlinkAsync = copySymlinkAsync; +const copyItemAsync = (from, inspectData, to, options) => { + const mode = mode_1.normalizeFileMode(inspectData.mode); + if (inspectData.type === interfaces_1.ENodeType.DIR) { + return promisedMkdirp(to, { mode: mode }); + } + else if (inspectData.type === interfaces_1.ENodeType.FILE) { + return copyFileAsync(from, to, mode, options); + } + else if (inspectData.type === interfaces_1.ENodeType.SYMLINK) { + return copySymlinkAsync(from, to); + } + // EInspectItemType.OTHER + return Promise.resolve(); +}; +// handle user side setting "THROW" and non enum values (null) +const onConflict = (from, to, options, settings) => { + switch (settings.overwrite) { + case interfaces_1.EResolveMode.THROW: { + throw errors_1.ErrDestinationExists(to); + } + case interfaces_1.EResolveMode.OVERWRITE: + case interfaces_1.EResolveMode.APPEND: + case interfaces_1.EResolveMode.IF_NEWER: + case interfaces_1.EResolveMode.ABORT: + case interfaces_1.EResolveMode.IF_SIZE_DIFFERS: + case interfaces_1.EResolveMode.SKIP: { + return settings.overwrite; + } + default: { + return undefined; + } + } +}; +function resolveConflict(from, to, options, resolveMode) { + if (resolveMode === undefined) { + return true; + } + const src = inspect_1.createItem(from); + const dst = inspect_1.createItem(to); + if (resolveMode === interfaces_1.EResolveMode.SKIP) { + return false; + } + else if (resolveMode === interfaces_1.EResolveMode.IF_NEWER) { + if (src.type === interfaces_1.ENodeType.DIR && dst.type === interfaces_1.ENodeType.DIR) { + return true; + } + if (dst.modifyTime.getTime() > src.modifyTime.getTime()) { + return false; + } + } + else if (resolveMode === interfaces_1.EResolveMode.IF_SIZE_DIFFERS) { + // @TODO : not implemented: copy EInspectItemType.DIR with ECopyResolveMode.IF_SIZE_DIFFERS + if (src.type === interfaces_1.ENodeType.DIR && dst.type === interfaces_1.ENodeType.DIR) { + return true; + } + else if (src.type === interfaces_1.ENodeType.FILE && dst.type === interfaces_1.ENodeType.FILE) { + if (src.size === dst.size) { + return false; + } + } + } + else if (resolveMode === interfaces_1.EResolveMode.OVERWRITE) { + return true; + } + else if (resolveMode === interfaces_1.EResolveMode.ABORT) { + return false; + } +} +exports.resolveConflict = resolveConflict; +function isDone(nodes) { + let done = true; + nodes.forEach((element) => { + if (element.status !== interfaces_1.ENodeOperationStatus.DONE) { + done = false; + } + }); + return done; +} +/** + * A callback for treeWalkerStream. This is called when a node has been found. + * + * @param {string} from + * @param {string} to + * @param {*} vars + * @param {{ path: string, item: INode }} item + * @returns {Promise} + */ +function visitor(from, to, vars, item) { + return __awaiter(this, void 0, void 0, function* () { + const options = vars.options; + let rel; + let destPath; + if (!item) { + return; + } + rel = pathUtil.relative(from, item.path); + destPath = pathUtil.resolve(to, rel); + item.status = interfaces_1.ENodeOperationStatus.PROCESSING; + const done = () => { + item.status = interfaces_1.ENodeOperationStatus.DONE; + if (isDone(vars.nodes)) { + return vars.resolve(vars.result); + } + }; + if (isDone(vars.nodes)) { + return vars.resolve(vars.result); + } + vars.filesInProgress += 1; + // our main function after sanity checks + const checked = (subResolveSettings) => { + item.status = interfaces_1.ENodeOperationStatus.CHECKED; + // feature : report + if (subResolveSettings && options && options.flags && options.flags & interfaces_1.ECopyFlags.REPORT) { + vars.result.push({ + error: subResolveSettings.error, + node: item, + resolved: subResolveSettings + }); + } + if (subResolveSettings) { + // if the first resolve callback returned an individual resolve settings "THIS", + // ask the user again with the same item + const always = subResolveSettings.mode === interfaces_1.EResolve.ALWAYS; + if (always) { + options.conflictSettings = subResolveSettings; + } + let overwriteMode = subResolveSettings.overwrite; + overwriteMode = onConflict(item.path, destPath, options, subResolveSettings); + if (overwriteMode === interfaces_1.EResolveMode.ABORT) { + vars.abort = true; + } + if (vars.abort) { + return; + } + if (!resolveConflict(item.path, destPath, options, overwriteMode)) { + done(); + return; + } + } + item.status = interfaces_1.ENodeOperationStatus.PROCESS; + copyItemAsync(item.path, item.item, destPath, options).then(() => { + vars.filesInProgress -= 1; + if (options.progress) { + if (options.progress(item.path, vars.filesInProgress, vars.filesInProgress, item.item) === false) { + vars.abort = true; + return vars.resolve(); + } + } + done(); + }).catch((err) => { + if (options && options.conflictCallback) { + if (err.code === interfaces_1.EError.PERMISSION || err.code === interfaces_1.EError.NOEXISTS) { + options.conflictCallback(item.path, inspect_1.createItem(destPath), err.code).then((errorResolveSettings) => { + // the user has set the conflict resolver to always, so we use the last one + if (vars.onCopyErrorResolveSettings) { + errorResolveSettings = vars.onCopyErrorResolveSettings; + } + // user said use this settings always, we track and use this last setting from now on + if (errorResolveSettings.mode === interfaces_1.EResolve.ALWAYS && !vars.onCopyErrorResolveSettings) { + vars.onCopyErrorResolveSettings = errorResolveSettings; + } + if (errorResolveSettings.overwrite === interfaces_1.EResolveMode.ABORT) { + vars.abort = true; + return vars.resolve(); + } + if (errorResolveSettings.overwrite === interfaces_1.EResolveMode.THROW) { + vars.abort = true; + return vars.reject(err); + } + if (errorResolveSettings.overwrite === interfaces_1.EResolveMode.SKIP) { + vars.filesInProgress -= 1; + } + // user error, should never happen, unintended + if (errorResolveSettings.overwrite === interfaces_1.EResolveMode.IF_NEWER || + errorResolveSettings.overwrite === interfaces_1.EResolveMode.IF_SIZE_DIFFERS || + errorResolveSettings.overwrite === interfaces_1.EResolveMode.OVERWRITE) { + vars.reject(new interfaces_1.ErrnoException('settings make no sense : errorResolveSettings.overwrite = ' + errorResolveSettings.overwrite)); + } + }); + } + } + vars.reject(err); + }); + }; + return checkAsync(item.path, destPath, options).then(checked); + }); +} +function next(nodes) { + for (let i = 0; i < nodes.length; i++) { + if (nodes[i].status === interfaces_1.ENodeOperationStatus.COLLECTED) { + return nodes[i]; + } + } + return null; +} +/** + * Final async copy function. + * @export + * @param {string} from + * @param {string} to + * @param {ICopyOptions} [options] + * @returns + */ +function async(from, to, options) { + options = parseOptions(options, from); + return new Promise((resolve, reject) => { + checkAsync(from, to, options).then((resolver) => { + if (!resolver) { + resolver = options.conflictSettings || { + mode: interfaces_1.EResolve.THIS, + overwrite: interfaces_1.EResolveMode.OVERWRITE + }; + } + else { + if (resolver.mode === interfaces_1.EResolve.ALWAYS) { + options.conflictSettings = resolver; + } + } + let overwriteMode = resolver.overwrite; + let result = void 0; + if (options && options.flags && options.flags & interfaces_1.ECopyFlags.REPORT) { + result = []; + } + // call onConflict to eventually throw an error + overwriteMode = onConflict(from, to, options, resolver); + // now evaluate the copy conflict settings and eventually abort + if (options && options.conflictSettings && !resolveConflict(from, to, options, overwriteMode)) { + return resolve(); + } + // feature: clean before + if (options && options.flags & interfaces_1.ECopyFlags.EMPTY) { + const dstStat = fs.statSync(to); + if (dstStat.isDirectory()) { + remove_1.sync(to); + } + } + // walker variables + const visitorArgs = { + resolve: resolve, + reject: reject, + abort: false, + filesInProgress: 0, + resolveSettings: resolver, + options: options, + result: result, + nodes: [], + onCopyErrorResolveSettings: null + }; + const nodes = visitorArgs.nodes; + // a function called when the treeWalkerStream or visitor has been finished + const process = function () { + visitorArgs.nodes = nodes; + if (isDone(nodes)) { + return resolve(result); + } + if (nodes.length) { + const item = next(nodes); + if (item) { + visitor(item.path, item.dst, visitorArgs, item).then(process); + } + } + }; + let flags = interfaces_1.EInspectFlags.MODE; + if (options && options.flags && options.flags & interfaces_1.ECopyFlags.FOLLOW_SYMLINKS) { + flags |= interfaces_1.EInspectFlags.SYMLINKS; + } + iterator_1.async(from, { + filter: options.filter, + flags: flags + }).then((it) => { + let node = null; + while (node = it.next()) { + nodes.push({ + path: node.path, + item: node.item, + dst: pathUtil.resolve(to, pathUtil.relative(from, node.path)), + status: interfaces_1.ENodeOperationStatus.COLLECTED + }); + } + process(); + }); + }).catch(reject); + }); +} +exports.async = async; +//# sourceMappingURL=copy.js.map \ No newline at end of file diff --git a/packages/fs/build/copy.js.map b/packages/fs/build/copy.js.map new file mode 100644 index 0000000..6f68a34 --- /dev/null +++ b/packages/fs/build/copy.js.map @@ -0,0 +1 @@ +{"version":3,"file":"copy.js","sourceRoot":"","sources":["../src/copy.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/fs/build/dir.d.ts b/packages/fs/build/dir.d.ts new file mode 100644 index 0000000..1baafae --- /dev/null +++ b/packages/fs/build/dir.d.ts @@ -0,0 +1,7 @@ +export interface IOptions { + empty?: boolean; + mode?: number | string; +} +export declare const validateInput: (methodName: string, path: string, options?: IOptions) => void; +export declare const sync: (path: string, options?: IOptions) => void; +export declare const async: (path: string, passedCriteria?: IOptions) => Promise<{}>; diff --git a/packages/fs/build/dir.js b/packages/fs/build/dir.js new file mode 100644 index 0000000..e22d975 --- /dev/null +++ b/packages/fs/build/dir.js @@ -0,0 +1,190 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const pathUtil = require("path"); +const fs_1 = require("fs"); +const util_1 = require("util"); +const fs = require("fs"); +const remove_1 = require("./remove"); +const mode_1 = require("./utils/mode"); +const validate_1 = require("./utils/validate"); +const errors_1 = require("./errors"); +const interfaces_1 = require("./interfaces"); +const mkdirp = require("mkdirp"); +exports.validateInput = (methodName, path, options) => { + const methodSignature = methodName + '(path, [criteria])'; + validate_1.validateArgument(methodSignature, 'path', path, ['string']); + validate_1.validateOptions(methodSignature, 'criteria', options, { + empty: ['boolean'], + mode: ['string', 'number'] + }); +}; +const defaults = (options) => { + const result = options || {}; + if (typeof result.empty !== 'boolean') { + result.empty = false; + } + if (result.mode !== undefined) { + result.mode = mode_1.normalizeFileMode(result.mode); + } + return result; +}; +// --------------------------------------------------------- +// Sync +// --------------------------------------------------------- +const dirStatsSync = (path) => { + let stat; + try { + stat = fs_1.statSync(path); + } + catch (err) { + // Detection if path already exists + if (err.code !== interfaces_1.EError.NOEXISTS) { + throw err; + } + } + if (stat && !stat.isDirectory()) { + throw errors_1.ErrNoDirectory(path); + } + return stat; +}; +function mkdirSync(path, criteria) { + mkdirp.sync(path, { mode: criteria.mode, fs: null }); +} +; +function checkDirSync(path, stat, options) { + const checkMode = function () { + if (options.mode !== undefined) { + fs.chmodSync(path, options.mode); + } + }; + const checkEmptiness = function () { + let list; + if (options.empty) { + // Delete everything inside this directory + list = fs_1.readdirSync(path); + list.forEach(function (filename) { + remove_1.sync(pathUtil.resolve(path, filename)); + }); + } + }; + checkMode(); + checkEmptiness(); +} +; +exports.sync = (path, options) => { + const criteria = defaults(options); + const stat = dirStatsSync(path); + if (stat) { + checkDirSync(path, stat, criteria); + } + else { + mkdirSync(path, criteria); + } +}; +// --------------------------------------------------------- +// Async +// --------------------------------------------------------- +const promisedStat = util_1.promisify(fs_1.stat); +const promisedReaddir = util_1.promisify(fs_1.readdir); +const dirStatAsync = (path) => { + return new Promise((resolve, reject) => { + promisedStat(path) + .then((stat) => { + if (stat.isDirectory()) { + resolve(stat); + } + else { + reject(errors_1.ErrNoDirectory(path)); + } + }) + .catch((err) => (err.code === interfaces_1.EError.NOEXISTS ? resolve(undefined) : reject(err))); + }); +}; +// Delete all files and directores inside given directory +const emptyAsync = (path) => { + return new Promise((resolve, reject) => { + promisedReaddir(path) + .then(function (list) { + const doOne = function (index) { + let subPath; + if (index === list.length) { + resolve(); + } + else { + subPath = pathUtil.resolve(path, list[index]); + remove_1.async(subPath).then(() => doOne(index + 1)); + } + }; + doOne(0); + }) + .catch(reject); + }); +}; +const checkMode = function (criteria, stat, path) { + if (criteria.mode !== undefined) { + return util_1.promisify(fs.chmod)(path, criteria.mode); + } + return Promise.resolve(null); +}; +const checkDirAsync = (path, stat, options) => { + return new Promise((resolve, reject) => { + const checkEmptiness = function () { + if (options.empty) { + return emptyAsync(path); + } + return Promise.resolve(); + }; + checkMode(options, stat, path) + .then(checkEmptiness) + .then(resolve, reject); + }); +}; +const mkdirAsync = (path, criteria) => { + const options = criteria || {}; + return new Promise((resolve, reject) => { + util_1.promisify(fs.mkdir)(path, options.mode) + .then(resolve) + .catch((err) => { + if (err.code === 'ENOENT') { + // Parent directory doesn't exist. Need to create it first. + mkdirAsync(pathUtil.dirname(path), options) + .then(() => { + // Now retry creating this directory. + return util_1.promisify(fs.mkdir)(path, options.mode); + }) + .then(resolve) + .catch((err2) => { + if (err2.code === 'EEXIST') { + // Hmm, something other have already created the directory? + // No problem for us. + resolve(); + } + else { + reject(err2); + } + }); + } + else if (err.code === 'EEXIST') { + // The path already exists. We're fine. + resolve(); + } + else { + reject(err); + } + }); + }); +}; +exports.async = (path, passedCriteria) => { + const criteria = defaults(passedCriteria); + return new Promise((resolve, reject) => { + dirStatAsync(path) + .then((stat) => { + if (stat !== undefined) { + return checkDirAsync(path, stat, criteria); + } + return mkdirAsync(path, criteria); + }) + .then(resolve, reject); + }); +}; +//# sourceMappingURL=dir.js.map \ No newline at end of file diff --git a/packages/fs/build/dir.js.map b/packages/fs/build/dir.js.map new file mode 100644 index 0000000..c30b8e4 --- /dev/null +++ b/packages/fs/build/dir.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dir.js","sourceRoot":"","sources":["../src/dir.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/fs/build/errors.d.ts b/packages/fs/build/errors.d.ts new file mode 100644 index 0000000..69149de --- /dev/null +++ b/packages/fs/build/errors.d.ts @@ -0,0 +1,7 @@ +export declare const ErrNoFileOrDir: (path: string) => Error; +export declare const ErrCantDelete: (path: string) => Error; +export declare const ErrNotFile: (path: string) => Error; +export declare const ErrNoDirectory: (path: string) => Error; +export declare const ErrDoesntExists: (path: string) => Error; +export declare const ErrDestinationExists: (path: string) => Error; +export declare const ErrIsNotDirectory: (path: string) => Error; diff --git a/packages/fs/build/errors.js b/packages/fs/build/errors.js new file mode 100644 index 0000000..dac156c --- /dev/null +++ b/packages/fs/build/errors.js @@ -0,0 +1,44 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const interfaces_1 = require("./interfaces"); +const errno = require('errno'); +Object.keys(errno.code).forEach(function (code) { + const e = errno.code[code]; + exports[code] = (path) => { + let err = new Error(code + ', ' + e.description + (path ? ' \'' + path + '\'' : '')); + err.errno = e.errno; + err.code = code; + err.path = path; + return err; + }; +}); +exports.ErrNoFileOrDir = (path) => { + return new Error("Can't remove " + path + ' The path is not file nor directory'); +}; +exports.ErrCantDelete = (path) => { + return new Error("Can't remove " + path); +}; +exports.ErrNotFile = (path) => { + return new Error('Path ' + path + ' exists but is not a file.' + + ' Halting jetpack.file() call for safety reasons.'); +}; +exports.ErrNoDirectory = (path) => { + return new Error('Path ' + path + ' exists but is not a directory.' + + ' Halting jetpack.dir() call for safety reasons.'); +}; +exports.ErrDoesntExists = (path) => { + const err = new Error("Path to copy doesn't exist " + path); + err.code = 'ENOENT'; + return err; +}; +exports.ErrDestinationExists = (path) => { + const err = new Error('Destination path already exists ' + path); + err.code = 'EEXIST'; + return err; +}; +exports.ErrIsNotDirectory = (path) => { + const err = new interfaces_1.ErrnoException('Path you want to find stuff in must be a directory ' + path); + err.code = 'ENOTDIR'; + return err; +}; +//# sourceMappingURL=errors.js.map \ No newline at end of file diff --git a/packages/fs/build/errors.js.map b/packages/fs/build/errors.js.map new file mode 100644 index 0000000..eba773a --- /dev/null +++ b/packages/fs/build/errors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;AAAA,6CAA8C;AAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAE/B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI;IAC7C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAY,EAAE,EAAE;QAChC,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAmB,CAAC;QACvG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACpB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAChB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAChB,MAAM,CAAC,GAAG,CAAC;IACZ,CAAC,CAAC;AACH,CAAC,CAAC,CAAC;AACU,QAAA,cAAc,GAAG,CAAC,IAAY,EAAS,EAAE;IACrD,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,GAAG,IAAI,GAAG,qCAAqC,CAAC,CAAC;AAClF,CAAC,CAAC;AACW,QAAA,aAAa,GAAG,CAAC,IAAY,EAAS,EAAE;IACpD,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;AAC1C,CAAC,CAAC;AACW,QAAA,UAAU,GAAG,CAAC,IAAY,EAAS,EAAE;IACjD,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,4BAA4B;QAC7D,kDAAkD,CAAC,CAAC;AACtD,CAAC,CAAC;AACW,QAAA,cAAc,GAAG,CAAC,IAAY,EAAS,EAAE;IACrD,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,iCAAiC;QAClE,iDAAiD,CAAC,CAAC;AACrD,CAAC,CAAC;AAEW,QAAA,eAAe,GAAG,CAAC,IAAY,EAAS,EAAE;IACtD,MAAM,GAAG,GAAQ,IAAI,KAAK,CAAC,6BAA6B,GAAG,IAAI,CAAC,CAAC;IACjE,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC;IACpB,MAAM,CAAC,GAAG,CAAC;AACZ,CAAC,CAAC;AAEW,QAAA,oBAAoB,GAAG,CAAC,IAAY,EAAS,EAAE;IAC3D,MAAM,GAAG,GAAQ,IAAI,KAAK,CAAC,kCAAkC,GAAG,IAAI,CAAC,CAAC;IACtE,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC;IACpB,MAAM,CAAC,GAAG,CAAC;AACZ,CAAC,CAAC;AAEW,QAAA,iBAAiB,GAAG,CAAC,IAAY,EAAS,EAAE;IACxD,MAAM,GAAG,GAAG,IAAI,2BAAc,CAAC,qDAAqD,GAAG,IAAI,CAAC,CAAC;IAC7F,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC;IACrB,MAAM,CAAC,GAAG,CAAC;AACZ,CAAC,CAAC"} \ No newline at end of file diff --git a/packages/fs/build/exists.d.ts b/packages/fs/build/exists.d.ts new file mode 100644 index 0000000..9b58937 --- /dev/null +++ b/packages/fs/build/exists.d.ts @@ -0,0 +1,4 @@ +import { ENodeType } from './interfaces'; +export declare function validateInput(methodName: string, path: string): void; +export declare function sync(path: string): boolean | string; +export declare function async(path: string): Promise; diff --git a/packages/fs/build/exists.js b/packages/fs/build/exists.js new file mode 100644 index 0000000..7cf6000 --- /dev/null +++ b/packages/fs/build/exists.js @@ -0,0 +1,64 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs_1 = require("fs"); +const validate_1 = require("./utils/validate"); +const interfaces_1 = require("./interfaces"); +function validateInput(methodName, path) { + const methodSignature = methodName + '(path)'; + validate_1.validateArgument(methodSignature, 'path', path, ['string']); +} +exports.validateInput = validateInput; +; +// --------------------------------------------------------- +// Sync +// --------------------------------------------------------- +function sync(path) { + let stat; + try { + stat = fs_1.statSync(path); + if (stat.isDirectory()) { + return 'dir'; + } + else if (stat.isFile()) { + return 'file'; + } + return 'other'; + } + catch (err) { + if (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') { + throw err; + } + } + return false; +} +exports.sync = sync; +; +// --------------------------------------------------------- +// Async +// --------------------------------------------------------- +function async(path) { + return new Promise((resolve, reject) => { + fs_1.lstat(path, (err, stat) => { + if (err) { + if (err.code === 'ENOENT' || err.code === 'ENOTDIR') { + resolve(false); + } + else { + reject(err); + } + } + else if (stat.isDirectory()) { + resolve(interfaces_1.ENodeType.DIR); + } + else if (stat.isFile()) { + resolve(interfaces_1.ENodeType.FILE); + } + else { + resolve(interfaces_1.ENodeType.OTHER); + } + }); + }); +} +exports.async = async; +; +//# sourceMappingURL=exists.js.map \ No newline at end of file diff --git a/packages/fs/build/exists.js.map b/packages/fs/build/exists.js.map new file mode 100644 index 0000000..0892af6 --- /dev/null +++ b/packages/fs/build/exists.js.map @@ -0,0 +1 @@ +{"version":3,"file":"exists.js","sourceRoot":"","sources":["../src/exists.ts"],"names":[],"mappings":";;AAAA,2BAA4C;AAC5C,+CAAoD;AACpD,6CAAyD;AAEzD,uBAA8B,UAAkB,EAAE,IAAY;IAC7D,MAAM,eAAe,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC9C,2BAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC7D,CAAC;AAHD,sCAGC;AAAA,CAAC;AAEF,4DAA4D;AAC5D,OAAO;AACP,4DAA4D;AAC5D,cAAqB,IAAY;IAChC,IAAI,IAAW,CAAC;IAChB,IAAI,CAAC;QACJ,IAAI,GAAG,aAAQ,CAAC,IAAI,CAAC,CAAC;QACtB,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC;QACd,CAAC;QAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC;QACf,CAAC;QACD,MAAM,CAAC,OAAO,CAAC;IAChB,CAAC;IAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACd,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC;YACrD,MAAM,GAAG,CAAC;QACX,CAAC;IACF,CAAC;IACD,MAAM,CAAC,KAAK,CAAC;AACd,CAAC;AAhBD,oBAgBC;AAAA,CAAC;AAEF,4DAA4D;AAC5D,QAAQ;AACR,4DAA4D;AAC5D,eAAsB,IAAY;IACjC,MAAM,CAAC,IAAI,OAAO,CAAgC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrE,UAAK,CAAC,IAAI,EAAE,CAAC,GAAmB,EAAE,IAAW,EAAE,EAAE;YAChD,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACT,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC;oBACrD,OAAO,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;gBAAC,IAAI,CAAC,CAAC;oBACP,MAAM,CAAC,GAAG,CAAC,CAAC;gBACb,CAAC;YACF,CAAC;YAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBAC/B,OAAO,CAAC,sBAAS,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;YAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC1B,OAAO,CAAC,sBAAS,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;YAAC,IAAI,CAAC,CAAC;gBACP,OAAO,CAAC,sBAAS,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AAlBD,sBAkBC;AAAA,CAAC"} \ No newline at end of file diff --git a/packages/fs/build/file.d.ts b/packages/fs/build/file.d.ts new file mode 100644 index 0000000..11ba3cb --- /dev/null +++ b/packages/fs/build/file.d.ts @@ -0,0 +1,10 @@ +/// +export interface IOptions { + content: string | Buffer | Object | Array; + jsonIndent: number; + mode: string; +} +export declare function validateInput(methodName: string, path: string, options?: IOptions): void; +export declare function defaults(passedCriteria: IOptions | null): IOptions; +export declare function sync(path: string, options: IOptions): void; +export declare function async(path: string, options: IOptions): Promise<{}>; diff --git a/packages/fs/build/file.js b/packages/fs/build/file.js new file mode 100644 index 0000000..f851228 --- /dev/null +++ b/packages/fs/build/file.js @@ -0,0 +1,173 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs = require("fs"); +const Q = require('q'); +const mode_1 = require("./utils/mode"); +const validate_1 = require("./utils/validate"); +const write_1 = require("./write"); +const errors_1 = require("./errors"); +const interfaces_1 = require("./interfaces"); +const promisedStat = Q.denodeify(fs.stat); +const promisedChmod = Q.denodeify(fs.chmod); +function validateInput(methodName, path, options) { + const methodSignature = methodName + '(path, [criteria])'; + validate_1.validateArgument(methodSignature, 'path', path, ['string']); + validate_1.validateOptions(methodSignature, 'criteria', options, { + content: ['string', 'buffer', 'object', 'array'], + jsonIndent: ['number'], + mode: ['string', 'number'] + }); +} +exports.validateInput = validateInput; +; +function defaults(passedCriteria) { + const criteria = passedCriteria || {}; + if (criteria.mode !== undefined) { + criteria.mode = mode_1.normalizeFileMode(criteria.mode); + } + return criteria; +} +exports.defaults = defaults; +; +// --------------------------------------------------------- +// Sync +// --------------------------------------------------------- +const isFile = (path) => { + let stat; + try { + stat = fs.statSync(path); + } + catch (err) { + // Detection if path exists + if (err.code !== interfaces_1.EError.NOEXISTS) { + throw err; + } + } + if (stat && !stat.isFile()) { + throw errors_1.ErrNotFile(path); + } + return stat; +}; +const checkContent = function (path, mode, options) { + if (options.content !== undefined) { + write_1.sync(path, options.content, { + mode: mode, + jsonIndent: options.jsonIndent + }); + return true; + } + return false; +}; +const checkMode = function (path, mode, options) { + if (options.mode !== undefined && options.mode !== mode) { + fs.chmodSync(path, options.mode); + } +}; +const accept = (path, stat, options) => { + const mode = mode_1.normalizeFileMode(stat.mode); + if (!checkContent(path, mode, options)) { + checkMode(path, mode, options); + } +}; +const touch = (path, options) => { + const content = options.content !== undefined ? options.content : ''; + write_1.sync(path, content, { + mode: options.mode, + jsonIndent: options.jsonIndent + }); +}; +function sync(path, options) { + options = defaults(options); + const stat = isFile(path); + if (stat !== undefined) { + accept(path, stat, options); + } + else { + touch(path, options); + } +} +exports.sync = sync; +; +// --------------------------------------------------------- +// Async +// --------------------------------------------------------- +function isFileAsync(path) { + return new Promise((resolve, reject) => { + promisedStat(path) + .then((stat) => { + if ((stat).isFile()) { + resolve(stat); + } + else { + reject(errors_1.ErrNotFile(path)); + } + }) + .catch((err) => (err.code === interfaces_1.EError.NOEXISTS ? resolve(undefined) : reject(err))); + }); +} +; +const checkModeAsync = (path, mode, options) => { + if (options.mode !== undefined && options.mode !== mode) { + return promisedChmod(path, options.mode); + } + return undefined; +}; +const checkContentAsync = (path, mode, options) => { + return new Promise((resolve, reject) => { + if (options.content !== undefined) { + write_1.async(path, options.content, { + mode: mode, + jsonIndent: options.jsonIndent + }).then(() => resolve(true)) + .catch(reject); + } + else { + resolve(false); + } + }); +}; +function writeAsync(path, stat, options) { + return __awaiter(this, void 0, void 0, function* () { + const mode = mode_1.normalizeFileMode(stat.mode); + return checkContentAsync(path, mode, options) + .then(contentReplaced => { + if (!contentReplaced) { + return checkModeAsync(path, mode, options); + } + return undefined; + }); + }); +} +; +const touchAsync = (path, options) => { + return write_1.async(path, options.content !== undefined ? options.content : '', { + mode: options.mode, + jsonIndent: options.jsonIndent + }); +}; +function async(path, options) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve, reject) => { + options = defaults(options); + isFileAsync(path) + .then((stat) => { + if (stat !== undefined) { + return writeAsync(path, stat, options); + } + return touchAsync(path, options); + }) + .then(resolve, reject); + }); + }); +} +exports.async = async; +; +//# sourceMappingURL=file.js.map \ No newline at end of file diff --git a/packages/fs/build/file.js.map b/packages/fs/build/file.js.map new file mode 100644 index 0000000..17dccf5 --- /dev/null +++ b/packages/fs/build/file.js.map @@ -0,0 +1 @@ +{"version":3,"file":"file.js","sourceRoot":"","sources":["../src/file.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/fs/build/find.d.ts b/packages/fs/build/find.d.ts new file mode 100644 index 0000000..36f6718 --- /dev/null +++ b/packages/fs/build/find.d.ts @@ -0,0 +1,10 @@ +export interface IOptions { + matching?: string[]; + files?: boolean; + directories?: boolean; + recursive?: boolean; + cwd?: string; +} +export declare function validateInput(methodName: string, path: string, options?: IOptions): void; +export declare function sync(path: string, options: IOptions): string[]; +export declare function async(path: string, options: IOptions): Promise; diff --git a/packages/fs/build/find.js b/packages/fs/build/find.js new file mode 100644 index 0000000..2bf6356 --- /dev/null +++ b/packages/fs/build/find.js @@ -0,0 +1,118 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const pathUtil = require("path"); +const tree_walker_1 = require("./utils/tree_walker"); +const inspect_1 = require("./inspect"); +const matcher_1 = require("./utils/matcher"); +const validate_1 = require("./utils/validate"); +const interfaces_1 = require("./interfaces"); +const errors_1 = require("./errors"); +function validateInput(methodName, path, options) { + const methodSignature = methodName + '([path], options)'; + validate_1.validateArgument(methodSignature, 'path', path, ['string']); + validate_1.validateOptions(methodSignature, 'options', options, { + matching: ['string', 'array of string'], + files: ['boolean'], + directories: ['boolean'], + recursive: ['boolean'] + }); +} +exports.validateInput = validateInput; +; +const defaults = (options) => { + let opts = options || {}; + // defaults: + if (opts.files === undefined) { + opts.files = true; + } + if (opts.directories === undefined) { + opts.directories = false; + } + if (opts.recursive === undefined) { + opts.recursive = true; + } + return opts; +}; +const processFoundObjects = (foundObjects, cwd) => { + return foundObjects.map((inspectObj) => { + return pathUtil.relative(cwd, inspectObj.absolutePath); + }); +}; +// --------------------------------------------------------- +// Sync +// --------------------------------------------------------- +function findSync(path, options) { + const foundInspectObjects = []; + const matchesAnyOfGlobs = matcher_1.create(path, options.matching); + tree_walker_1.sync(path, { + maxLevelsDeep: options.recursive ? Infinity : 1, + inspectOptions: { + absolutePath: true + } + }, (itemPath, item) => { + if (itemPath !== path && matchesAnyOfGlobs(itemPath)) { + if ((item.type === interfaces_1.ENodeType.FILE && options.files === true) + || (item.type === interfaces_1.ENodeType.DIR && options.directories === true)) { + foundInspectObjects.push(item); + } + } + }); + return processFoundObjects(foundInspectObjects, options.cwd); +} +; +function sync(path, options) { + const entryPointInspect = inspect_1.sync(path); + if (entryPointInspect === undefined) { + throw errors_1.ErrDoesntExists(path); + } + else if (entryPointInspect.type !== 'dir') { + throw errors_1.ErrIsNotDirectory(path); + } + return findSync(path, defaults(options)); +} +exports.sync = sync; +; +// --------------------------------------------------------- +// Async +// --------------------------------------------------------- +function findAsync(path, options) { + return new Promise((resolve, reject) => { + const foundInspectObjects = []; + const matchesAnyOfGlobs = matcher_1.create(path, options.matching); + const walker = tree_walker_1.stream(path, { + maxLevelsDeep: options.recursive ? Infinity : 1, + inspectOptions: { + absolutePath: true + } + }).on('readable', () => { + const data = walker.read(); + let item; + if (data && data.path !== path && matchesAnyOfGlobs(data.path)) { + item = data.item; + if ((item.type === interfaces_1.ENodeType.FILE && options.files === true) + || (item.type === interfaces_1.ENodeType.DIR && options.directories === true)) { + foundInspectObjects.push(item); + } + } + }).on('error', reject) + .on('end', () => { + resolve(processFoundObjects(foundInspectObjects, options.cwd)); + }); + }); +} +; +function async(path, options) { + return inspect_1.async(path) + .then(entryPointInspect => { + if (entryPointInspect === undefined) { + throw errors_1.ErrDoesntExists(path); + } + else if (entryPointInspect.type !== interfaces_1.ENodeType.DIR) { + throw errors_1.ErrIsNotDirectory(path); + } + return findAsync(path, defaults(options)); + }); +} +exports.async = async; +; +//# sourceMappingURL=find.js.map \ No newline at end of file diff --git a/packages/fs/build/find.js.map b/packages/fs/build/find.js.map new file mode 100644 index 0000000..c5d3431 --- /dev/null +++ b/packages/fs/build/find.js.map @@ -0,0 +1 @@ +{"version":3,"file":"find.js","sourceRoot":"","sources":["../src/find.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/fs/build/imports.d.ts b/packages/fs/build/imports.d.ts new file mode 100644 index 0000000..efec177 --- /dev/null +++ b/packages/fs/build/imports.d.ts @@ -0,0 +1,10 @@ +export declare const file: { + write_atomic: any; +}; +export declare const json: { + parse: (text: string, reviver?: (key: any, value: any) => any) => any; + serialize: { + (value: any, replacer?: (key: string, value: any) => any, space?: string | number): string; + (value: any, replacer?: (string | number)[], space?: string | number): string; + }; +}; diff --git a/packages/fs/build/imports.js b/packages/fs/build/imports.js new file mode 100644 index 0000000..ff95cf4 --- /dev/null +++ b/packages/fs/build/imports.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const write_fs = require('write-file-atomic'); +exports.file = { + write_atomic: write_fs +}; +exports.json = { + parse: JSON.parse, + serialize: JSON.stringify +}; +//# sourceMappingURL=imports.js.map \ No newline at end of file diff --git a/packages/fs/build/imports.js.map b/packages/fs/build/imports.js.map new file mode 100644 index 0000000..32483e7 --- /dev/null +++ b/packages/fs/build/imports.js.map @@ -0,0 +1 @@ +{"version":3,"file":"imports.js","sourceRoot":"","sources":["../src/imports.ts"],"names":[],"mappings":";;AAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACjC,QAAA,IAAI,GAAG;IAClB,YAAY,EAAE,QAAQ;CACvB,CAAC;AACW,QAAA,IAAI,GAAG;IAClB,KAAK,EAAE,IAAI,CAAC,KAAK;IACjB,SAAS,EAAE,IAAI,CAAC,SAAS;CAC1B,CAAC"} \ No newline at end of file diff --git a/packages/fs/build/inspect.d.ts b/packages/fs/build/inspect.d.ts new file mode 100644 index 0000000..059c212 --- /dev/null +++ b/packages/fs/build/inspect.d.ts @@ -0,0 +1,7 @@ +import { INode, IInspectOptions } from './interfaces'; +export declare const supportedChecksumAlgorithms: string[]; +export declare function DefaultInspectOptions(): IInspectOptions; +export declare function validateInput(methodName: string, path: string, options?: IInspectOptions): void; +export declare function createItem(path: string, options?: IInspectOptions): INode; +export declare function sync(path: string, options?: IInspectOptions): INode; +export declare function async(path: string, options?: IInspectOptions): Promise; diff --git a/packages/fs/build/inspect.js b/packages/fs/build/inspect.js new file mode 100644 index 0000000..c1e4d85 --- /dev/null +++ b/packages/fs/build/inspect.js @@ -0,0 +1,271 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs_1 = require("fs"); +const mime_1 = require("mime"); +const pathUtil = require("path"); +const validate_1 = require("./utils/validate"); +const crypto_1 = require("crypto"); +const interfaces_1 = require("./interfaces"); +const Q = require('q'); +const denodeify = require("denodeify"); +exports.supportedChecksumAlgorithms = ['md5', 'sha1', 'sha256', 'sha512']; +const promisedStat = denodeify(fs_1.stat); +const promisedLstat = denodeify(fs_1.lstat); +const promisedReadlink = denodeify(fs_1.readlink); +/* +const _async = require('async'); +export async function size(item, ignoreRegEx?: boolean, callback?: any) { + return new Promise((resolve, reject) => { + let cb; + let ignoreRegExp; + if (!callback) { + cb = ignoreRegEx; + ignoreRegExp = null; + } else { + cb = callback; + ignoreRegExp = ignoreRegEx; + } + + lstat(item, function lstat(e, stats) { + let total = !e ? (stats.size || 0) : 0; + if (!e && stats.isDirectory()) { + readdir(item, function readdir(err, list) { + if (err) { reject(err); } + _async.forEach( + list, + function iterate(dirItem, next) { + size( + pathUtil.join(item, dirItem), + ignoreRegExp, + function readSize(error, size) { + if (!error) { total += size; } + next(error); + } + ); + }, + function done(finalErr) { + resolve({ error: finalErr, total: total }); + } + ); + }); + } else { + if (ignoreRegExp && ignoreRegExp.test(item)) { + total = 0; + } + resolve({ error: e, total: total }); + } + }); + }); +} +export async function sizea(item, ignoreRegEx?: boolean, callback?: any) { + return new Promise((resolve, reject) => { + let cb; + let ignoreRegExp; + if (!callback) { + cb = ignoreRegEx; + ignoreRegExp = null; + } else { + cb = callback; + ignoreRegExp = ignoreRegEx; + } + + const stats = lstatSync(item); + let total = (stats.size || 0); + if (stats.isDirectory()) { + const list = readdirSync(item); + _async.forEach( + list, + function iterate(dirItem, next) { + size( + pathUtil.join(item, dirItem), + ignoreRegExp, + function readSize(error, size) { + if (!error) { total += size; } + next(error); + } + ); + }, + function done(finalErr) { + resolve({ error: finalErr, total: total }); + } + ); + } else { + if (ignoreRegExp && ignoreRegExp.test(item)) { + total = 0; + } + return { total: total }; + } + }); +} + +*/ +function DefaultInspectOptions() { + return { + times: true, + mode: true + }; +} +exports.DefaultInspectOptions = DefaultInspectOptions; +function validateInput(methodName, path, options) { + const methodSignature = methodName + '(path, [options])'; + validate_1.validateArgument(methodSignature, 'path', path, ['string']); + validate_1.validateOptions(methodSignature, 'options', options, { + checksum: ['string'], + mode: ['boolean'], + times: ['boolean'], + absolutePath: ['boolean'], + symlinks: ['boolean'], + size: 'number', + mime: 'string' + }); + if (options && options.checksum !== undefined + && exports.supportedChecksumAlgorithms.indexOf(options.checksum) === -1) { + throw new Error('Argument "options.checksum" passed to ' + methodSignature + + ' must have one of values: ' + exports.supportedChecksumAlgorithms.join(', ')); + } +} +exports.validateInput = validateInput; +const createInspectObj = (path, options, stat) => { + const obj = {}; + obj.name = pathUtil.basename(path); + if (stat.isFile()) { + obj.type = interfaces_1.ENodeType.FILE; + obj.size = stat.size; + } + else if (stat.isDirectory()) { + obj.type = interfaces_1.ENodeType.DIR; + } + else if (stat.isSymbolicLink()) { + obj.type = interfaces_1.ENodeType.SYMLINK; + } + else { + obj.type = interfaces_1.ENodeType.OTHER; + } + if (options.mode) { + obj.mode = stat.mode; + } + if (options.mime) { + if (stat.isDirectory()) { + obj.mime = 'inode/directory'; + } + else if (stat.isBlockDevice()) { + obj.mime = 'inode/blockdevice'; + } + else if (stat.isCharacterDevice()) { + obj.mime = 'inode/chardevice'; + } + else if (stat.isSymbolicLink()) { + obj.mime = 'inode/symlink'; + } + else if (stat.isFIFO()) { + obj.mime = 'inode/fifo'; + } + else if (stat.isSocket()) { + obj.mime = 'inode/socket'; + } + else { + obj.mime = mime_1.getType(path); + } + } + if (options.times) { + obj.accessTime = stat.atime; + obj.modifyTime = stat.mtime; + obj.changeTime = stat.ctime; + } + if (options.absolutePath) { + obj.absolutePath = path; + } + return obj; +}; +function createItem(path, options) { + options = options || DefaultInspectOptions(); + const stat = (options.symlinks ? fs_1.lstatSync : fs_1.statSync)(path); + return createInspectObj(path, options, stat); +} +exports.createItem = createItem; +// --------------------------------------------------------- +// Sync +// --------------------------------------------------------- +const fileChecksum = (path, algo) => { + const hash = crypto_1.createHash(algo); + const data = fs_1.readFileSync(path); + hash.update(data); + return hash.digest('hex'); +}; +const addExtraFieldsSync = (path, inspectObj, options) => { + if (inspectObj.type === interfaces_1.ENodeType.FILE && options.checksum) { + inspectObj[options.checksum] = fileChecksum(path, options.checksum); + } + else if (inspectObj.type === interfaces_1.ENodeType.SYMLINK) { + inspectObj.pointsAt = fs_1.readlinkSync(path); + } + return inspectObj; +}; +function sync(path, options) { + let stat; + options = options || {}; + try { + stat = (options.symlinks ? fs_1.lstatSync : fs_1.statSync)(path); + } + catch (err) { + // Detection if path exists + if (err.code === 'ENOENT') { + // Doesn't exist. Return undefined instead of throwing. + return undefined; + } + throw err; + } + return addExtraFieldsSync(path, createInspectObj(path, options, stat), options); +} +exports.sync = sync; +// --------------------------------------------------------- +// Async +// --------------------------------------------------------- +function fileChecksumAsync(path, algo) { + return __awaiter(this, void 0, void 0, function* () { + const deferred = Q.defer(); + const hash = crypto_1.createHash(algo); + const s = fs_1.createReadStream(path); + s.on('data', (data) => hash.update(data)); + s.on('end', () => deferred.resolve(hash.digest('hex'))); + s.on('error', (e) => deferred.reject(e)); + return deferred.promise; + }); +} +const addExtraFieldsAsync = (path, inspectObj, options) => { + if (inspectObj.type === interfaces_1.ENodeType.FILE && options.checksum) { + return fileChecksumAsync(path, options.checksum) + .then(checksum => { + inspectObj[options['checksum']] = checksum; + return inspectObj; + }); + } + else if (inspectObj.type === interfaces_1.ENodeType.SYMLINK) { + return promisedReadlink(path) + .then(linkPath => { + inspectObj.pointsAt = linkPath; + return inspectObj; + }); + } + return new Q(inspectObj); +}; +function async(path, options) { + return new Promise((resolve, reject) => { + options = options || {}; + (options.symlinks ? promisedLstat : promisedStat)(path) + .then((stat) => { + addExtraFieldsAsync(path, createInspectObj(path, options, stat), options).then(resolve, reject); + }) + .catch(err => (err.code === 'ENOENT' ? resolve(undefined) : reject(err))); + }); +} +exports.async = async; +//# sourceMappingURL=inspect.js.map \ No newline at end of file diff --git a/packages/fs/build/inspect.js.map b/packages/fs/build/inspect.js.map new file mode 100644 index 0000000..b369c33 --- /dev/null +++ b/packages/fs/build/inspect.js.map @@ -0,0 +1 @@ +{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/fs/build/inspect_tree.d.ts b/packages/fs/build/inspect_tree.d.ts new file mode 100644 index 0000000..0c7587c --- /dev/null +++ b/packages/fs/build/inspect_tree.d.ts @@ -0,0 +1,9 @@ +import { INode } from './interfaces'; +export interface Options { + checksum: string; + relativePath: boolean; + symlinks: boolean; +} +export declare function validateInput(methodName: string, path: string, options: Options): void; +export declare function sync(path: string, options?: any): any | undefined; +export declare function async(path: string, options?: Options): Promise; diff --git a/packages/fs/build/inspect_tree.js b/packages/fs/build/inspect_tree.js new file mode 100644 index 0000000..057ab7a --- /dev/null +++ b/packages/fs/build/inspect_tree.js @@ -0,0 +1,140 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const crypto_1 = require("crypto"); +const pathUtil = require("path"); +const inspect_1 = require("./inspect"); +const interfaces_1 = require("./interfaces"); +const list_1 = require("./list"); +const validate_1 = require("./utils/validate"); +const Q = require('q'); +function validateInput(methodName, path, options) { + const methodSignature = methodName + '(path, options)'; + validate_1.validateArgument(methodSignature, 'path', path, ['string']); + validate_1.validateOptions(methodSignature, 'options', options, { + checksum: ['string'], + relativePath: ['boolean'] + }); + if (options && options.checksum !== undefined + && inspect_1.supportedChecksumAlgorithms.indexOf(options.checksum) === -1) { + throw new Error('Argument "options.checksum" passed to ' + methodSignature + + ' must have one of values: ' + inspect_1.supportedChecksumAlgorithms.join(', ')); + } +} +exports.validateInput = validateInput; +; +function generateTreeNodeRelativePath(parent, path) { + if (!parent) { + return '.'; + } + return parent.relativePath + '/' + pathUtil.basename(path); +} +; +// Creates checksum of a directory by using +// checksums and names of all its children inside. +const checksumOfDir = (inspectList, algo) => { + const hash = crypto_1.createHash(algo); + inspectList.forEach(function (inspectObj) { + hash.update(inspectObj.name + inspectObj[algo]); + }); + return hash.digest('hex'); +}; +// --------------------------------------------------------- +// Sync +// --------------------------------------------------------- +function inspectTreeNodeSync(path, options, parent) { + const treeBranch = inspect_1.sync(path, { checksum: options.checksum, symlinks: options.symlinks }); + if (treeBranch) { + if (options.relativePath) { + treeBranch.relativePath = generateTreeNodeRelativePath(parent, path); + } + if (treeBranch.type === interfaces_1.ENodeType.DIR /*|| (options.symlinks && treeBranch.type === 'symlink')*/) { + treeBranch.size = 0; + treeBranch.children = (list_1.sync(path) || []).map(function (filename) { + let subBranchPath = pathUtil.join(path, filename); + let treeSubBranch = inspectTreeNodeSync(subBranchPath, options, treeBranch); + // Add together all childrens' size to get directory combined size. + treeBranch.size += treeSubBranch.size || 0; + //treeBranch.total += treeSubBranch.total; + return treeSubBranch; + }); + if (options.checksum) { + treeBranch[options.checksum] = checksumOfDir(treeBranch.children, options.checksum); + } + } + } + return treeBranch; +} +; +function sync(path, options) { + options = options || {}; + options.symlinks = true; + return inspectTreeNodeSync(path, options, undefined); +} +exports.sync = sync; +; +// --------------------------------------------------------- +// Async +// --------------------------------------------------------- +function inspectTreeNodeAsync(path, options, parent) { + return new Promise((resolve, reject) => { + const inspectAllChildren = (treeBranch) => { + return new Promise((resolve, reject) => { + list_1.async(path).then((children) => { + const doNext = (index) => { + let subPath; + if (index === children.length) { + if (options.checksum) { + // We are done, but still have to calculate checksum of whole directory. + treeBranch[options.checksum] = checksumOfDir(treeBranch.children, options.checksum); + } + resolve(); + } + else { + subPath = pathUtil.join(path, children[index]); + inspectTreeNodeAsync(subPath, options, treeBranch) + .then((treeSubBranch) => { + children[index] = treeSubBranch; + treeBranch.size += treeSubBranch.size || 0; + doNext(index + 1); + }) + .catch(reject); + } + }; + treeBranch.children = children; + treeBranch.size = 0; + doNext(0); + }); + }); + }; + inspect_1.async(path, options) + .then((treeBranch) => { + if (!treeBranch) { + // Given path doesn't exist. We are done. + resolve(treeBranch); + } + else { + if (options.relativePath) { + treeBranch.relativePath = generateTreeNodeRelativePath(parent, path); + } + if (treeBranch.type !== interfaces_1.ENodeType.DIR) { + resolve(treeBranch); + } + else { + inspectAllChildren(treeBranch) + .then(() => resolve(treeBranch)) + .catch(reject); + } + } + }) + .catch(reject); + }); +} +; +function async(path, options) { + options = options || {}; + options.symlinks = true; + return inspectTreeNodeAsync(path, options); +} +exports.async = async; +; +//# sourceMappingURL=inspect_tree.js.map \ No newline at end of file diff --git a/packages/fs/build/inspect_tree.js.map b/packages/fs/build/inspect_tree.js.map new file mode 100644 index 0000000..1db5ad0 --- /dev/null +++ b/packages/fs/build/inspect_tree.js.map @@ -0,0 +1 @@ +{"version":3,"file":"inspect_tree.js","sourceRoot":"","sources":["../src/inspect_tree.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/fs/build/interfaces.d.ts b/packages/fs/build/interfaces.d.ts new file mode 100644 index 0000000..e452855 --- /dev/null +++ b/packages/fs/build/interfaces.d.ts @@ -0,0 +1,422 @@ +/// +export declare enum ENodeType { + FILE, + DIR, + SYMLINK, + OTHER, + BLOCK, +} +/** + * Native errors. + * @todo : replace with errno. + */ +export declare let EError: any; +export interface INode { + name: string; + type: ENodeType | string; + size?: number; + accessTime?: Date; + modifyTime?: Date; + changeTime?: Date; + absolutePath?: string; + mode?: number; + pointsAt?: string; + relativePath?: string; + children?: INode[]; + total?: number; + checksum?: string; + mime?: string; +} +/** + * The options for "inspect". + * + * @export + * @interface IInspectOptions + */ +export interface IInspectOptions { + checksum?: string; + mode?: boolean; + times?: boolean; + absolutePath?: boolean; + symlinks?: boolean; + size?: boolean; + mime?: boolean; +} +export interface INodeReport { + node: IProcessingNode; + error: string; + resolved: IConflictSettings; +} +/** + * The accepted types for write and read as union. + */ +export declare type ReadWriteDataType = string | Buffer | Object; +/** + * An extented version of Error to make typescript happy. This has been copied from + * the official Node typings. + * + * @export + * @class ErrnoException + * @extends {Error} + */ +export declare class ErrnoException extends Error { + errno?: number; + code?: string; + path?: string; + syscall?: string; + stack?: string; +} +/** + * Structure for file operations. + */ +export interface IProcessingNode { + path: string; + item: INode; + status?: ENodeOperationStatus; + dst?: string; +} +/** + * Basic flags during a file operation. + * + * @export + * @enum {number} + */ +export declare enum EBaseFlags { + /** + * When copying, don't copy symlinks but resolve them instead. + */ + FOLLOW_SYMLINKS = 8, +} +/** + * Flags to determine certain properties during inspection. + * + * @export + * @enum {number} + */ +export declare enum EInspectFlags { + MODE = 2, + TIMES = 4, + SYMLINKS = 8, + FILE_SIZE = 16, + DIRECTORY_SIZE = 32, + CHECKSUM = 64, + MIME = 128, +} +/** + * Basic options for file operations: used by cp, mv, rename and rm. + * + * @export + * @interface IBaseOptions + */ +export interface IBaseOptions { + /** + * Array of glob minimatch patterns + * + * @type {string[]} + * @memberOf IBaseOptions + */ + matching?: string[]; + /** + * A function called to reject or accept nodes. This is used only when matching + * has been left empty. + * @memberOf IBaseOptions + */ + filter?: (from: string) => boolean; + /** + * Flags to determine properties per node + * + * @type {EInspectFlags} + * @memberOf IBaseOptions + */ + flags?: EInspectFlags; +} +/** + * Callback prototype signature when an item has been copied. + * This is used to abort the copy process when returning false. + * + * @param {string} path The path of the item. + * @param {number} current The current index of the item. + * @param {number} total The total of all items. + * @param {INode} [item] The node data for the item. + * @returns {boolean} + */ +export declare type ItemProgressCallback = (path: string, current: number, total: number, item?: INode) => boolean; +/** + * Callback prototype signature when an item conflict occurs. + * It's async since the conflict might be resolved in an client application and hence + * we have to wait til the user decided. + * + * This is not being called if: + * - a previous callback returned with IConflictSettings#mode == ALWAYS + * - the options object already contains pre-defined conflict settings. + * + * @param {string} path The path of the item. + * @param {INode} item The node data. + * @param {string} err The native error code of the conflict (EEXIST,...) + * @returns {Promise} + */ +export declare type ResolveConflictCallback = (path: string, item: INode, err: string) => Promise; +/** + * Callback prototype signature when a file with at least 5MB size is being copied. + * + * @param {string} path The path of the item. + * @param {number} current The current copied bytes. + * @param {number} total The total size in bytes. + * @returns {Promise} + */ +export declare type WriteProgressCallback = (path: string, current: number, total: number) => void; +/** + * Status of a node operation. + * + * @export + * @enum {number} + */ +export declare enum ENodeOperationStatus { + COLLECTED = 0, + CHECKED = 1, + PROCESSING = 2, + PROCESS = 3, + ASKING = 4, + ANSWERED = 5, + DONE = 6, +} +/** + * The possible modes to resolve a conflict during copy and move. + * + * @export + * @enum {number} + */ +export declare enum EResolveMode { + SKIP = 0, + OVERWRITE = 1, + IF_NEWER = 2, + IF_SIZE_DIFFERS = 3, + APPEND = 4, + THROW = 5, + RETRY = 6, + ABORT = 7, +} +/** + * Additional flags for copy + * + * @export + * @enum {number} + */ +export declare enum ECopyFlags { + /** + * Transfer atime and mtime of source to target + */ + PRESERVE_TIMES = 2, + /** + * Empty the target folder + */ + EMPTY = 4, + /** + * When copying, don't copy symlinks but resolve them instead. + */ + FOLLOW_SYMLINKS = 8, + /** + * Collect errors & success + */ + REPORT = 16, +} +/** + * Copy options + * + * @export + * @interface ICopyOptions + */ +export interface ICopyOptions { + /** + * @type {boolean} + * @deprecated Use conflict callback instead. + * @memberOf ICopyOptions + */ + overwrite?: boolean; + /** + * Array of glob minimatch patterns + * + * @type {string[]} + * @memberOf ICopyOptions + */ + matching?: string[]; + /** + * A function called to reject or accept nodes to be copied. This is used only when matching + * has been left empty. + * @memberOf ICopyOptions + */ + filter?: (from: string) => boolean; + /** + * A progress callback for any copied item. Only excecuted in async. + */ + progress?: ItemProgressCallback; + /** + * A progress function called for async and larger files only. + * + * @type {WriteProgressCallback} + * @memberOf ICopyOptions + */ + writeProgress?: WriteProgressCallback; + /** + * A callback when a conflict or error occurs. This is being called only if the user + * didn't provide conflictSettings. + * + * @type {ResolveConflictCallback} + * @memberOf ICopyOptions + */ + conflictCallback?: ResolveConflictCallback; + /** + * Ability to set conflict resolver settings in advance, so that no callback will be called. + * + * @type {IConflictSettings} + * @memberOf ICopyOptions + */ + conflictSettings?: IConflictSettings; + /** + * Throttel copy for larger files. This will be only used when writeProgress is set and the file is at least 5MB. + * + * @type {number} + * @memberOf ICopyOptions + */ + throttel?: number; + /** + * Print some debug messages. + * + * @type {boolean} + * @memberOf ICopyOptions + */ + debug?: boolean; + /** + * The copy flags. + * + * @type {ECopyFlags} + * @memberOf ICopyOptions + */ + flags?: ECopyFlags; +} +/** + * An enumeration to narrow a conflict resolve to a single item or for all following conflicts. + * + * @export + * @enum {number} + */ +export declare enum EResolve { + /** + * Always will use the chose conflict settings for all following conflicts. + */ + ALWAYS = 0, + /** + * 'This' will use the conflict settings for a single conflict so the conflict callback will be triggered again for the next conflict. + */ + THIS = 1, +} +/** + * A composite conflict settings and it's scope. This is the result type + * for the conflict callback. + * + * @export + * @interface IConflictSettings + */ +export interface IConflictSettings { + /** + * How to resolve this conflict/error. + * + * @type {EResolveMode} + * @memberOf IConflictSettings + */ + overwrite: EResolveMode; + /** + * The scope of this conflict resolver: always or this. + * + * @type {EResolve} + * @memberOf IConflictSettings + */ + mode: EResolve; + /** + * Track the origin error type for this settings. + * + * @type {string} + * @memberOf IConflictSettings + */ + error?: string; +} +export declare type TCopyResult = void | INodeReport[]; +/** + * fs/write options. + * + * @export + * @interface IWriteOptions + */ +export interface IWriteOptions { + atomic?: boolean; + jsonIndent?: number; + mode?: string; +} +export declare type TDeleteResult = void | INodeReport[]; +/** + * Additional flags for delete + * + * @export + * @enum {number} + */ +export declare enum EDeleteFlags { + REPORT = 16, +} +/** + * Delete options + * + * @export + * @interface IDeleteOptions + */ +export interface IDeleteOptions { + /** + * Array of glob minimatch patterns + * + * @type {string[]} + * @memberOf IDeleteOptions + */ + matching?: string[]; + /** + * A callback when a conflict or error occurs. This is being called only if the user + * didn't provide conflictSettings. + * + * @type {ResolveConflictCallback} + * @memberOf IDeleteOptions + */ + conflictCallback?: ResolveConflictCallback; + /** + * Ability to set conflict resolver settings in advance, so that no callback will be called. + * + * @type {IConflictSettings} + * @memberOf IDeleteOptions + */ + conflictSettings?: IConflictSettings; + /** + * + * A progress callback for any deleted item. Only excecuted in async. + * @type {ItemProgressCallback} + * @memberOf IDeleteOptions + */ + progress?: ItemProgressCallback; + /** + * Print some messages. + * + * @type {boolean} + * @memberOf IDeleteOptions + */ + debug?: boolean; + /** + * A function called to reject or accept nodes to be copied. This is used only when matching + * has been left empty. + * @memberOf IDeleteOptions + */ + filter?: (from: string) => boolean; + /** + * Move files to system's trash/recycle-bin + * + * @type {boolean} + * @memberOf IDeleteOptions + */ + trash?: boolean; + flags?: EDeleteFlags; +} diff --git a/packages/fs/build/interfaces.js b/packages/fs/build/interfaces.js new file mode 100644 index 0000000..4adae0e --- /dev/null +++ b/packages/fs/build/interfaces.js @@ -0,0 +1,158 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +///////////////////////////////////////////////////////// +// +// Enums +// +var ENodeType; +(function (ENodeType) { + ENodeType[ENodeType["FILE"] = 'file'] = "FILE"; + ENodeType[ENodeType["DIR"] = 'dir'] = "DIR"; + ENodeType[ENodeType["SYMLINK"] = 'symlink'] = "SYMLINK"; + ENodeType[ENodeType["OTHER"] = 'other'] = "OTHER"; + ENodeType[ENodeType["BLOCK"] = 'block'] = "BLOCK"; +})(ENodeType = exports.ENodeType || (exports.ENodeType = {})); +/** + * Native errors. + * @todo : replace with errno. + */ +exports.EError = { + NONE: 'None', + EXISTS: 'EEXIST', + PERMISSION: 'EACCES', + NOEXISTS: 'ENOENT', + CROSS_DEVICE: 'EXDEV' +}; +/** + * An extented version of Error to make typescript happy. This has been copied from + * the official Node typings. + * + * @export + * @class ErrnoException + * @extends {Error} + */ +class ErrnoException extends Error { +} +exports.ErrnoException = ErrnoException; +/** + * Basic flags during a file operation. + * + * @export + * @enum {number} + */ +var EBaseFlags; +(function (EBaseFlags) { + /** + * When copying, don't copy symlinks but resolve them instead. + */ + EBaseFlags[EBaseFlags["FOLLOW_SYMLINKS"] = 8] = "FOLLOW_SYMLINKS"; +})(EBaseFlags = exports.EBaseFlags || (exports.EBaseFlags = {})); +/** + * Flags to determine certain properties during inspection. + * + * @export + * @enum {number} + */ +var EInspectFlags; +(function (EInspectFlags) { + EInspectFlags[EInspectFlags["MODE"] = 2] = "MODE"; + EInspectFlags[EInspectFlags["TIMES"] = 4] = "TIMES"; + EInspectFlags[EInspectFlags["SYMLINKS"] = 8] = "SYMLINKS"; + EInspectFlags[EInspectFlags["FILE_SIZE"] = 16] = "FILE_SIZE"; + EInspectFlags[EInspectFlags["DIRECTORY_SIZE"] = 32] = "DIRECTORY_SIZE"; + EInspectFlags[EInspectFlags["CHECKSUM"] = 64] = "CHECKSUM"; + EInspectFlags[EInspectFlags["MIME"] = 128] = "MIME"; +})(EInspectFlags = exports.EInspectFlags || (exports.EInspectFlags = {})); +/** + * Status of a node operation. + * + * @export + * @enum {number} + */ +var ENodeOperationStatus; +(function (ENodeOperationStatus) { + // Node has been collected + ENodeOperationStatus[ENodeOperationStatus["COLLECTED"] = 0] = "COLLECTED"; + // Node has been checked for existance + ENodeOperationStatus[ENodeOperationStatus["CHECKED"] = 1] = "CHECKED"; + // Node is in progress, before copy + ENodeOperationStatus[ENodeOperationStatus["PROCESSING"] = 2] = "PROCESSING"; + // Node is in process + ENodeOperationStatus[ENodeOperationStatus["PROCESS"] = 3] = "PROCESS"; + // Node is in conflict, and user is being asked what to do + ENodeOperationStatus[ENodeOperationStatus["ASKING"] = 4] = "ASKING"; + // Node conflict has been resolved by user + ENodeOperationStatus[ENodeOperationStatus["ANSWERED"] = 5] = "ANSWERED"; + // Node has been copied + ENodeOperationStatus[ENodeOperationStatus["DONE"] = 6] = "DONE"; +})(ENodeOperationStatus = exports.ENodeOperationStatus || (exports.ENodeOperationStatus = {})); +/** + * The possible modes to resolve a conflict during copy and move. + * + * @export + * @enum {number} + */ +var EResolveMode; +(function (EResolveMode) { + EResolveMode[EResolveMode["SKIP"] = 0] = "SKIP"; + EResolveMode[EResolveMode["OVERWRITE"] = 1] = "OVERWRITE"; + EResolveMode[EResolveMode["IF_NEWER"] = 2] = "IF_NEWER"; + EResolveMode[EResolveMode["IF_SIZE_DIFFERS"] = 3] = "IF_SIZE_DIFFERS"; + EResolveMode[EResolveMode["APPEND"] = 4] = "APPEND"; + EResolveMode[EResolveMode["THROW"] = 5] = "THROW"; + EResolveMode[EResolveMode["RETRY"] = 6] = "RETRY"; + EResolveMode[EResolveMode["ABORT"] = 7] = "ABORT"; +})(EResolveMode = exports.EResolveMode || (exports.EResolveMode = {})); +/** + * Additional flags for copy + * + * @export + * @enum {number} + */ +var ECopyFlags; +(function (ECopyFlags) { + /** + * Transfer atime and mtime of source to target + */ + ECopyFlags[ECopyFlags["PRESERVE_TIMES"] = 2] = "PRESERVE_TIMES"; + /** + * Empty the target folder + */ + ECopyFlags[ECopyFlags["EMPTY"] = 4] = "EMPTY"; + /** + * When copying, don't copy symlinks but resolve them instead. + */ + ECopyFlags[ECopyFlags["FOLLOW_SYMLINKS"] = 8] = "FOLLOW_SYMLINKS"; + /** + * Collect errors & success + */ + ECopyFlags[ECopyFlags["REPORT"] = 16] = "REPORT"; +})(ECopyFlags = exports.ECopyFlags || (exports.ECopyFlags = {})); +/** + * An enumeration to narrow a conflict resolve to a single item or for all following conflicts. + * + * @export + * @enum {number} + */ +var EResolve; +(function (EResolve) { + /** + * Always will use the chose conflict settings for all following conflicts. + */ + EResolve[EResolve["ALWAYS"] = 0] = "ALWAYS"; + /** + * 'This' will use the conflict settings for a single conflict so the conflict callback will be triggered again for the next conflict. + */ + EResolve[EResolve["THIS"] = 1] = "THIS"; +})(EResolve = exports.EResolve || (exports.EResolve = {})); +/** + * Additional flags for delete + * + * @export + * @enum {number} + */ +var EDeleteFlags; +(function (EDeleteFlags) { + EDeleteFlags[EDeleteFlags["REPORT"] = 16] = "REPORT"; +})(EDeleteFlags = exports.EDeleteFlags || (exports.EDeleteFlags = {})); +//# sourceMappingURL=interfaces.js.map \ No newline at end of file diff --git a/packages/fs/build/interfaces.js.map b/packages/fs/build/interfaces.js.map new file mode 100644 index 0000000..b8cd1ed --- /dev/null +++ b/packages/fs/build/interfaces.js.map @@ -0,0 +1 @@ +{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":";;AAAA,yDAAyD;AACzD,EAAE;AACF,SAAS;AACT,EAAE;AACF,IAAY,SAMX;AAND,WAAY,SAAS;IACpB,8BAAY,MAAM,UAAA,CAAA;IAClB,6BAAW,KAAK,SAAA,CAAA;IAChB,iCAAe,SAAS,aAAA,CAAA;IACxB,+BAAa,OAAO,WAAA,CAAA;IACpB,+BAAa,OAAO,WAAA,CAAA;AACrB,CAAC,EANW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAMpB;AAED;;;GAGG;AACQ,QAAA,MAAM,GAAQ;IACxB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,QAAQ;IACpB,QAAQ,EAAE,QAAQ;IAClB,YAAY,EAAE,OAAO;CACrB,CAAC;AAiDF;;;;;;;GAOG;AACH,oBAA4B,SAAQ,KAAK;CAMxC;AAND,wCAMC;AAYD;;;;;GAKG;AACH,IAAY,UAKX;AALD,WAAY,UAAU;IACrB;;OAEG;IACH,iEAAmB,CAAA;AACpB,CAAC,EALW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAKrB;AAED;;;;;GAKG;AACH,IAAY,aAQX;AARD,WAAY,aAAa;IACxB,iDAAQ,CAAA;IACR,mDAAS,CAAA;IACT,yDAAY,CAAA;IACZ,4DAAc,CAAA;IACd,sEAAmB,CAAA;IACnB,0DAAa,CAAA;IACb,mDAAU,CAAA;AACX,CAAC,EARW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAQxB;AAuED;;;;;GAKG;AACH,IAAY,oBAeX;AAfD,WAAY,oBAAoB;IAC/B,0BAA0B;IAC1B,yEAAS,CAAA;IACT,sCAAsC;IACtC,qEAAO,CAAA;IACP,mCAAmC;IACnC,2EAAU,CAAA;IACV,qBAAqB;IACrB,qEAAO,CAAA;IACP,0DAA0D;IAC1D,mEAAM,CAAA;IACN,0CAA0C;IAC1C,uEAAQ,CAAA;IACR,uBAAuB;IACvB,+DAAI,CAAA;AACL,CAAC,EAfW,oBAAoB,GAApB,4BAAoB,KAApB,4BAAoB,QAe/B;AACD;;;;;GAKG;AACH,IAAY,YASX;AATD,WAAY,YAAY;IACvB,+CAAQ,CAAA;IACR,yDAAS,CAAA;IACT,uDAAQ,CAAA;IACR,qEAAe,CAAA;IACf,mDAAM,CAAA;IACN,iDAAK,CAAA;IACL,iDAAK,CAAA;IACL,iDAAK,CAAA;AACN,CAAC,EATW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QASvB;AAED;;;;;GAKG;AACH,IAAY,UAiBX;AAjBD,WAAY,UAAU;IACrB;;OAEG;IACH,+DAAkB,CAAA;IAClB;;OAEG;IACH,6CAAS,CAAA;IACT;;OAEG;IACH,iEAAmB,CAAA;IACnB;;OAEG;IACH,gDAAW,CAAA;AACZ,CAAC,EAjBW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAiBrB;AA6ED;;;;;GAKG;AACH,IAAY,QASX;AATD,WAAY,QAAQ;IACnB;;OAEG;IACH,2CAAM,CAAA;IACN;;OAEG;IACH,uCAAI,CAAA;AACL,CAAC,EATW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QASnB;AAwDD;;;;;GAKG;AACH,IAAY,YAEX;AAFD,WAAY,YAAY;IACvB,oDAAW,CAAA;AACZ,CAAC,EAFW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAEvB"} \ No newline at end of file diff --git a/packages/fs/build/iterator.d.ts b/packages/fs/build/iterator.d.ts new file mode 100644 index 0000000..293f148 --- /dev/null +++ b/packages/fs/build/iterator.d.ts @@ -0,0 +1,3 @@ +import { IProcessingNode, IBaseOptions } from './interfaces'; +import { ArrayIterator } from '@plastichub/core/iterator'; +export declare function async(from: string, options: IBaseOptions): Promise>; diff --git a/packages/fs/build/iterator.js b/packages/fs/build/iterator.js new file mode 100644 index 0000000..d22e020 --- /dev/null +++ b/packages/fs/build/iterator.js @@ -0,0 +1,53 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const tree_walker_1 = require("./utils/tree_walker"); +const interfaces_1 = require("./interfaces"); +const matcher_1 = require("./utils/matcher"); +const iterator_1 = require("@plastichub/core/iterator"); +function async(from, options) { + return __awaiter(this, void 0, void 0, function* () { + if (options && !options.filter) { + if (options.matching) { + options.filter = matcher_1.create(from, options.matching); + } + else { + options.filter = () => { return true; }; + } + } + const collectorSync = function (path, item) { + if (!item) { + return; + } + if (options.filter(path)) { + nodes.push({ + path: path, + item: item, + status: interfaces_1.ENodeOperationStatus.COLLECTED + }); + } + }; + let nodes = []; + return new Promise((resolve, reject) => { + tree_walker_1.sync(from, { + inspectOptions: { + mode: options ? options.flags & interfaces_1.EInspectFlags.MODE ? true : false : false, + times: options ? options.flags & interfaces_1.EInspectFlags.TIMES ? true : false : false, + checksum: options ? options.flags & interfaces_1.EInspectFlags.CHECKSUM ? 'md5' : null : null, + symlinks: options ? options.flags & interfaces_1.EInspectFlags.SYMLINKS ? false : true : true, + mime: options ? options.flags & interfaces_1.EInspectFlags.MIME ? true : false : false + } + }, collectorSync); + resolve(new iterator_1.ArrayIterator(nodes)); + }); + }); +} +exports.async = async; +//# sourceMappingURL=iterator.js.map \ No newline at end of file diff --git a/packages/fs/build/iterator.js.map b/packages/fs/build/iterator.js.map new file mode 100644 index 0000000..6075584 --- /dev/null +++ b/packages/fs/build/iterator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"iterator.js","sourceRoot":"","sources":["../src/iterator.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,qDAA6D;AAC7D,6CAAyG;AACzG,6CAAoD;AAEpD,mDAAqD;AAErD,eAA4B,IAAY,EAAE,OAAqB;;QAC9D,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAChC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACtB,OAAO,CAAC,MAAM,GAAG,gBAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YAClD,CAAC;YAAC,IAAI,CAAC,CAAC;gBACP,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzC,CAAC;QACF,CAAC;QACD,MAAM,aAAa,GAAG,UAAU,IAAY,EAAE,IAAW;YACxD,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACX,MAAM,CAAC;YACR,CAAC;YACD,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,IAAI;oBACV,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,iCAAoB,CAAC,SAAS;iBACtC,CAAC,CAAC;YACJ,CAAC;QACF,CAAC,CAAC;QACF,IAAI,KAAK,GAAsB,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,OAAO,CAAiC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtE,kBAAc,CAAC,IAAI,EAAE;gBACpB,cAAc,EAAE;oBACf,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,0BAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;oBACzE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,0BAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;oBAC3E,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,0BAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;oBAChF,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,0BAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;oBAChF,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,0BAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;iBACzE;aACD,EAAE,aAAa,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,wBAAa,CAAkB,KAAK,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACJ,CAAC;CAAA;AAjCD,sBAiCC"} \ No newline at end of file diff --git a/packages/fs/build/jetpack.d.ts b/packages/fs/build/jetpack.d.ts new file mode 100644 index 0000000..4c860f5 --- /dev/null +++ b/packages/fs/build/jetpack.d.ts @@ -0,0 +1,63 @@ +/// +import { Options as AppendOptions } from './append'; +import { IOptions as DirOptions } from './dir'; +import { IOptions as FileOptions } from './file'; +import { IOptions as FindOptions } from './find'; +import { Options as InspectTreeOptions } from './inspect_tree'; +import { IWriteOptions } from './interfaces'; +import { ICopyOptions, INode, IInspectOptions } from './interfaces'; +import { ReadWriteDataType, TCopyResult, ENodeType, TDeleteResult } from './interfaces'; +export * from './interfaces'; +export { sync, async } from './exists'; +export interface IJetpack { + cwd(w?: any): IJetpack | string; + path(): string; + append(path: string, data: string | Buffer | Object, options?: AppendOptions): void; + appendAsync(path: string, data: string | Buffer | Object, options?: AppendOptions): Promise; + copy(from: string, to: string, options?: ICopyOptions): void; + copyAsync(from: string, to: string, options?: ICopyOptions): Promise; + createWriteStream(path: string, options?: { + flags?: string; + encoding?: string; + fd?: number; + mode?: number; + autoClose?: boolean; + start?: number; + }): any; + createReadStream(path: string, options?: { + flags?: string; + encoding?: string; + fd?: number; + mode?: number; + autoClose?: boolean; + start?: number; + end?: number; + }): any; + dir(path: string, criteria?: DirOptions): IJetpack; + dirAsync(path: string, criteria?: DirOptions): Promise; + exists(path: string): boolean | string; + existsAsync(path: string): Promise; + file(path: string, criteria?: FileOptions): void; + fileAsync(path: string, criteria?: FileOptions): Promise; + find(startPath: string, options: FindOptions): string[]; + findAsync(startPath: string, options: FindOptions): Promise; + inspect(path: string, fieldsToInclude: IInspectOptions): INode; + inspectAsync(path: string, fieldsToInclude: IInspectOptions): Promise; + inspectTree(path: string, options?: InspectTreeOptions): INode; + inspectTreeAsync(path: string, options?: InspectTreeOptions): Promise; + list(path: string): string[]; + listAsync(path: string): Promise; + move(from: string, to: string): void; + moveAsync(from: string, to: string): Promise; + read(path: string, returnAs?: string): ReadWriteDataType; + readAsync(path: string, returnAs?: string): Promise; + remove(path: string): void; + removeAsync(path: string): Promise; + rename(path: string, newName: string): void; + renameAsync(path: string, newName: string): Promise; + symlink(symlinkValue: string, path: string): void; + symlinkAsync(symlinkValue: string, path: string): Promise; + write(path: string, data: string | Buffer | Object, options?: IWriteOptions): void; + writeAsync(path: string, data: string | Buffer | Object, options?: IWriteOptions): Promise; +} +export declare const jetpack: (cwdPath?: string) => IJetpack; diff --git a/packages/fs/build/jetpack.js b/packages/fs/build/jetpack.js new file mode 100644 index 0000000..96d4273 --- /dev/null +++ b/packages/fs/build/jetpack.js @@ -0,0 +1,233 @@ +"use strict"; +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", { value: true }); +const util = require("util"); +const pathUtil = require("path"); +const Q = require('q'); +const append = require("./append"); +const dir = require("./dir"); +const file = require("./file"); +const find = require("./find"); +const inspect = require("./inspect"); +const inspectTree = require("./inspect_tree"); +const copy = require("./copy"); +const exists = require("./exists"); +const list = require("./list"); +const move = require("./move"); +const remove = require("./remove"); +const rename = require("./rename"); +const symlink = require("./symlink"); +const streams = require("./streams"); +const write = require("./write"); +const read = require("./read"); +__export(require("./interfaces")); +var exists_1 = require("./exists"); +exports.sync = exists_1.sync; +exports.async = exists_1.async; +// The Jetpack Context object. +// It provides the public API, and resolves all paths regarding to +// passed cwdPath, or default process.cwd() if cwdPath was not specified. +exports.jetpack = (cwdPath) => { + const getCwdPath = function () { + return cwdPath || process.cwd(); + }; + const cwd = function (w) { + let args; + let pathParts; + // return current CWD if no arguments specified... + if (arguments.length === 0) { + return getCwdPath(); + } + // ...create new CWD context otherwise + args = Array.prototype.slice.call(arguments); + pathParts = [getCwdPath()].concat(args); + const res = exports.jetpack(pathUtil.resolve.apply(null, pathParts)); + return res; + }; + // resolves path to inner CWD path of this jetpack instance + const resolvePath = function (path) { + return pathUtil.resolve(getCwdPath(), path); + }; + const getPath = function () { + // add CWD base path as first element of arguments array + Array.prototype.unshift.call(arguments, getCwdPath()); + return pathUtil.resolve.apply(null, arguments); + }; + const normalizeOptions = function (options) { + return options || { cwd: getCwdPath() }; + }; + // API + const api = { + cwd: cwd, + path: getPath, + append: function (path, data, options) { + append.validateInput('append', path, data, options); + append.sync(resolvePath(path), data, options); + }, + appendAsync: function (path, data, options) { + append.validateInput('appendAsync', path, data, options); + return append.async(resolvePath(path), data, options); + }, + copy: function (from, to, options) { + copy.validateInput('copy', from, to, options); + copy.sync(resolvePath(from), resolvePath(to), options); + }, + copyAsync: function (from, to, options) { + copy.validateInput('copyAsync', from, to, options); + return copy.async(resolvePath(from), resolvePath(to), options); + }, + createWriteStream: function (path, options) { + return streams.createWriteStream(resolvePath(path), options); + }, + createReadStream: function (path, options) { + return streams.createReadStream(resolvePath(path), options); + }, + dir: function (path, criteria) { + let normalizedPath; + dir.validateInput('dir', path, criteria); + normalizedPath = resolvePath(path); + dir.sync(normalizedPath, criteria); + return cwd(normalizedPath); + }, + dirAsync: function (path, criteria) { + const deferred = Q.defer(); + let normalizedPath; + dir.validateInput('dirAsync', path, criteria); + normalizedPath = resolvePath(path); + dir.async(normalizedPath, criteria) + .then(function () { + deferred.resolve(cwd(normalizedPath)); + }, deferred.reject); + return deferred.promise; + }, + exists: function (path) { + exists.validateInput('exists', path); + return exists.sync(resolvePath(path)); + }, + existsAsync: function (path) { + exists.validateInput('existsAsync', path); + return exists.async(resolvePath(path)); + }, + file: function (path, criteria) { + file.validateInput('file', path, criteria); + file.sync(resolvePath(path), criteria); + return this; + }, + fileAsync: function (path, criteria) { + const deferred = Q.defer(); + const that = this; + file.validateInput('fileAsync', path, criteria); + file.async(resolvePath(path), criteria) + .then(function () { + deferred.resolve(that); + }, deferred.reject); + return deferred.promise; + }, + find: function (startPath, options) { + // startPath is optional parameter, if not specified move rest of params + // to proper places and default startPath to CWD. + if (typeof options === 'undefined' && typeof startPath === 'object') { + options = startPath; + startPath = '.'; + } + find.validateInput('find', startPath, options); + return find.sync(resolvePath(startPath), normalizeOptions(options)); + }, + findAsync: function (startPath, options) { + // startPath is optional parameter, if not specified move rest of params + // to proper places and default startPath to CWD. + if (typeof options === 'undefined' && typeof startPath === 'object') { + options = startPath; + startPath = '.'; + } + find.validateInput('findAsync', startPath, options); + return find.async(resolvePath(startPath), normalizeOptions(options)); + }, + inspect: function (path, fieldsToInclude) { + inspect.validateInput('inspect', path, fieldsToInclude); + return inspect.sync(resolvePath(path), fieldsToInclude); + }, + inspectAsync: function (path, fieldsToInclude) { + inspect.validateInput('inspectAsync', path, fieldsToInclude); + return inspect.async(resolvePath(path), fieldsToInclude); + }, + inspectTree: function (path, options) { + inspectTree.validateInput('inspectTree', path, options); + return inspectTree.sync(resolvePath(path), options); + }, + inspectTreeAsync: function (path, options) { + inspectTree.validateInput('inspectTreeAsync', path, options); + return inspectTree.async(resolvePath(path), options); + }, + list: function (path) { + list.validateInput('list', path); + return list.sync(resolvePath(path || '.')); + }, + listAsync: function (path) { + list.validateInput('listAsync', path); + return list.async(resolvePath(path || '.')); + }, + move: function (from, to) { + move.validateInput('move', from, to); + move.sync(resolvePath(from), resolvePath(to)); + }, + moveAsync: function (from, to) { + move.validateInput('moveAsync', from, to); + return move.async(resolvePath(from), resolvePath(to)); + }, + read: function (path, returnAs) { + read.validateInput('read', path, returnAs); + return read.sync(resolvePath(path), returnAs); + }, + readAsync: function (path, returnAs) { + read.validateInput('readAsync', path, returnAs); + return read.async(resolvePath(path), returnAs); + }, + remove: function (path) { + remove.validateInput('remove', path); + // If path not specified defaults to CWD + remove.sync(resolvePath(path || '.')); + }, + removeAsync: function (path) { + remove.validateInput('removeAsync', path); + // If path not specified defaults to CWD + return remove.async(resolvePath(path || '.')); + }, + rename: function (path, newName) { + rename.validateInput('rename', path, newName); + rename.sync(resolvePath(path), newName); + }, + renameAsync: function (path, newName) { + rename.validateInput('renameAsync', path, newName); + return rename.async(resolvePath(path), newName); + }, + symlink: function (symlinkValue, path) { + symlink.validateInput('symlink', symlinkValue, path); + symlink.sync(symlinkValue, resolvePath(path)); + }, + symlinkAsync: function (symlinkValue, path) { + symlink.validateInput('symlinkAsync', symlinkValue, path); + return symlink.async(symlinkValue, resolvePath(path)); + }, + write: function (path, data, options) { + write.validateInput('write', path, data, options); + write.sync(resolvePath(path), data, options); + }, + writeAsync: function (path, data, options) { + write.validateInput('writeAsync', path, data, options); + return write.async(resolvePath(path), data, options); + } + }; + if (util.inspect['custom'] !== undefined) { + // Without this console.log(jetpack) throws obscure error. Details: + // https://github.com/szwacz/fs-jetpack/issues/29 + // https://nodejs.org/api/util.html#util_custom_inspection_functions_on_objects + api[util.inspect['custom']] = function () { + return getCwdPath(); + }; + } + return api; +}; +//# sourceMappingURL=jetpack.js.map \ No newline at end of file diff --git a/packages/fs/build/jetpack.js.map b/packages/fs/build/jetpack.js.map new file mode 100644 index 0000000..276e135 --- /dev/null +++ b/packages/fs/build/jetpack.js.map @@ -0,0 +1 @@ +{"version":3,"file":"jetpack.js","sourceRoot":"","sources":["../src/jetpack.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/fs/build/list.d.ts b/packages/fs/build/list.d.ts new file mode 100644 index 0000000..ba5cbcf --- /dev/null +++ b/packages/fs/build/list.d.ts @@ -0,0 +1,4 @@ +export declare function validateInput(methodName: string, path: string): void; +export declare function _readdirSync(path: string): string[]; +export declare function sync(path: string): string[]; +export declare function async(path: string): Promise; diff --git a/packages/fs/build/list.js b/packages/fs/build/list.js new file mode 100644 index 0000000..38fdeb9 --- /dev/null +++ b/packages/fs/build/list.js @@ -0,0 +1,72 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs_1 = require("fs"); +const validate_1 = require("./utils/validate"); +const platform_1 = require("./utils/platform"); +const strings_1 = require("./utils/strings"); +function validateInput(methodName, path) { + const methodSignature = methodName + '(path)'; + validate_1.validateArgument(methodSignature, 'path', path, ['string', 'undefined']); +} +exports.validateInput = validateInput; +; +function _readdirSync(path) { + // Mac: uses NFD unicode form on disk, but we want NFC + // See also https://github.com/nodejs/node/issues/2165 + if (platform_1.isMacintosh) { + return fs_1.readdirSync(path).map(c => strings_1.normalizeNFC(c)); + } + return fs_1.readdirSync(path); +} +exports._readdirSync = _readdirSync; +// --------------------------------------------------------- +// Sync +// --------------------------------------------------------- +function sync(path) { + try { + return _readdirSync(path); + } + catch (err) { + if (err.code === 'ENOENT') { + // Doesn't exist. Return undefined instead of throwing. + return undefined; + } + throw err; + } +} +exports.sync = sync; +; +// --------------------------------------------------------- +// Async +// --------------------------------------------------------- +function readdirASync(path) { + // export function readdir(path: string | Buffer, callback?: (err: NodeJS.ErrnoException, files: string[]) => void): void; + // Mac: uses NFD unicode form on disk, but we want NFC + // See also https://github.com/nodejs/node/issues/2165 + return new Promise((resolve, reject) => { + if (platform_1.isMacintosh) { + fs_1.readdir(path, (err, files) => { + if (err) { + reject(err); + } + resolve(files); + }); + } + fs_1.readdir(path, (err, files) => { + if (err) { + reject(err); + } + resolve(files); + }); + }); +} +function async(path) { + return new Promise((resolve, reject) => { + readdirASync(path) + .then((list) => resolve(list)) + .catch(err => (err.code === 'ENOENT' ? resolve(undefined) : reject(err))); + }); +} +exports.async = async; +; +//# sourceMappingURL=list.js.map \ No newline at end of file diff --git a/packages/fs/build/list.js.map b/packages/fs/build/list.js.map new file mode 100644 index 0000000..9f9e5e6 --- /dev/null +++ b/packages/fs/build/list.js.map @@ -0,0 +1 @@ +{"version":3,"file":"list.js","sourceRoot":"","sources":["../src/list.ts"],"names":[],"mappings":";;AAAA,2BAA0C;AAC1C,+CAAoD;AACpD,+CAA+C;AAC/C,6CAA+C;AAE/C,uBAA8B,UAAkB,EAAE,IAAY;IAC7D,MAAM,eAAe,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC9C,2BAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;AAC1E,CAAC;AAHD,sCAGC;AAAA,CAAC;AAEF,sBAA6B,IAAY;IACxC,sDAAsD;IACtD,sDAAsD;IACtD,EAAE,CAAC,CAAC,sBAAW,CAAC,CAAC,CAAC;QACjB,MAAM,CAAC,gBAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,sBAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,gBAAW,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AARD,oCAQC;AACD,4DAA4D;AAC5D,OAAO;AACP,4DAA4D;AAC5D,cAAqB,IAAY;IAChC,IAAI,CAAC;QACJ,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACd,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC;YAC3B,uDAAuD;YACvD,MAAM,CAAC,SAAS,CAAC;QAClB,CAAC;QACD,MAAM,GAAG,CAAC;IACX,CAAC;AACF,CAAC;AAVD,oBAUC;AAAA,CAAC;AAEF,4DAA4D;AAC5D,QAAQ;AACR,4DAA4D;AAC5D,sBAAsB,IAAY;IACjC,0HAA0H;IAC1H,sDAAsD;IACtD,sDAAsD;IAEtD,MAAM,CAAC,IAAI,OAAO,CAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAChD,EAAE,CAAC,CAAC,sBAAW,CAAC,CAAC,CAAC;YACjB,YAAO,CAAC,IAAI,EAAE,CAAC,GAA0B,EAAE,KAAe,EAAE,EAAE;gBAC7D,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACT,MAAM,CAAC,GAAG,CAAC,CAAC;gBACb,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACJ,CAAC;QACD,YAAO,CAAC,IAAI,EAAE,CAAC,GAA0B,EAAE,KAAe,EAAE,EAAE;YAC7D,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,GAAG,CAAC,CAAC;YACb,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AACD,eAAsB,IAAY;IACjC,MAAM,CAAC,IAAI,OAAO,CAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAChD,YAAY,CAAC,IAAI,CAAC;aAChB,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aAC7B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACJ,CAAC;AAND,sBAMC;AAAA,CAAC"} \ No newline at end of file diff --git a/packages/fs/build/move.d.ts b/packages/fs/build/move.d.ts new file mode 100644 index 0000000..e6b0f9a --- /dev/null +++ b/packages/fs/build/move.d.ts @@ -0,0 +1,3 @@ +export declare const validateInput: (methodName: string, from: string, to: string) => void; +export declare const sync: (from: string, to: string) => void; +export declare const async: (from: string, to: string) => Promise; diff --git a/packages/fs/build/move.js b/packages/fs/build/move.js new file mode 100644 index 0000000..b355495 --- /dev/null +++ b/packages/fs/build/move.js @@ -0,0 +1,108 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const pathUtil = require("path"); +const fs_1 = require("fs"); +const exists_1 = require("./exists"); +const validate_1 = require("./utils/validate"); +const errors_1 = require("./errors"); +const interfaces_1 = require("./interfaces"); +const copy_1 = require("./copy"); +const remove_1 = require("./remove"); +const util_1 = require("util"); +const dir_1 = require("./dir"); +exports.validateInput = (methodName, from, to) => { + const methodSignature = methodName + '(from, to)'; + validate_1.validateArgument(methodSignature, 'from', from, ['string']); + validate_1.validateArgument(methodSignature, 'to', to, ['string']); +}; +// --------------------------------------------------------- +// Sync +// --------------------------------------------------------- +exports.sync = (from, to) => { + try { + fs_1.renameSync(from, to); + } + catch (err) { + // not the same device, rename doesnt work here + if (err.code === interfaces_1.EError.CROSS_DEVICE) { + try { + copy_1.sync(from, to); + } + catch (e) { + throw e; + } + try { + remove_1.sync(from); + } + catch (e) { + throw e; + } + return; + } + if (err.code !== interfaces_1.EError.NOEXISTS) { + // We can't make sense of this error. Rethrow it. + throw err; + } + else { + // Ok, source or destination path doesn't exist. + // Must do more investigation. + if (!exists_1.sync(from)) { + throw errors_1.ErrDoesntExists(from); + } + if (!exists_1.sync(to)) { + // Some parent directory doesn't exist. Create it. + dir_1.sync(pathUtil.dirname(to)); + // Retry the attempt + fs_1.renameSync(from, to); + } + } + } +}; +// --------------------------------------------------------- +// Async +// --------------------------------------------------------- +const ensureDestinationPathExistsAsync = (to) => { + return new Promise((resolve, reject) => { + const destDir = pathUtil.dirname(to); + exists_1.async(destDir) + .then(dstExists => { + if (!dstExists) { + dir_1.async(destDir).then(resolve, reject); + } + else { + // Hah, no idea. + reject(); + } + }) + .catch(reject); + }); +}; +exports.async = (from, to) => { + return new Promise((resolve, reject) => { + util_1.promisify(fs_1.rename)(from, to) + .then(resolve) + .catch(err => { + if (err.code !== interfaces_1.EError.NOEXISTS) { + // Something unknown. Rethrow original error. + reject(err); + } + else { + // Ok, source or destination path doesn't exist. + // Must do more investigation. + exists_1.async(from) + .then(srcExists => { + if (!srcExists) { + reject(errors_1.ErrDoesntExists(from)); + } + else { + ensureDestinationPathExistsAsync(to) + .then(() => util_1.promisify(fs_1.rename)(from, to)) + .then(resolve, reject); + } + }) + .catch(reject); + } + }); + }); +}; +//# sourceMappingURL=move.js.map \ No newline at end of file diff --git a/packages/fs/build/move.js.map b/packages/fs/build/move.js.map new file mode 100644 index 0000000..5f95312 --- /dev/null +++ b/packages/fs/build/move.js.map @@ -0,0 +1 @@ +{"version":3,"file":"move.js","sourceRoot":"","sources":["../src/move.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/fs/build/promisify.d.ts b/packages/fs/build/promisify.d.ts new file mode 100644 index 0000000..c12ae2c --- /dev/null +++ b/packages/fs/build/promisify.d.ts @@ -0,0 +1,15 @@ +export declare function promisify(f: (cb: (err: any, res: T) => void) => void, thisContext?: any): () => Promise; +export declare function promisify(f: (arg: A, cb: (err: any, res: T) => void) => void, thisContext?: any): (arg: A) => Promise; +export declare function promisify(f: (arg: A, arg2: A2, cb: (err: any, res: T) => void) => void, thisContext?: any): (arg: A, arg2: A2) => Promise; +export declare function promisify(f: (arg: A, arg2: A2, arg3: A3, cb: (err: any, res: T) => void) => void, thisContext?: any): (arg: A, arg2: A2, arg3: A3) => Promise; +export declare function promisify(f: (arg: A, arg2: A2, arg3: A3, arg4: A4, cb: (err: any, res: T) => void) => void, thisContext?: any): (arg: A, arg2: A2, arg3: A3, arg4: A4) => Promise; +export declare function promisify(f: (arg: A, arg2: A2, arg3: A3, arg4: A4, arg5: A5, cb: (err: any, res: T) => void) => void, thisContext?: any): (arg: A, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => Promise; +export declare function map(elts: PromiseLike[]>, f: (t: T) => U | PromiseLike): Promise; +export declare function map(elts: PromiseLike, f: (t: T) => U | PromiseLike): Promise; +export declare function map(elts: PromiseLike[], f: (t: T) => U | PromiseLike): Promise; +export declare function map(elts: T[], f: (t: T) => U | PromiseLike): Promise; +export declare function _try(f: () => T): Promise; +export declare function _try(f: (arg: any) => T, arg: any): Promise; +export declare function _try(f: (arg: any, arg2: any) => T, arg: any, arg2: any): Promise; +export declare function _try(f: (arg: any, arg2: any, arg3: any) => T, arg: any, arg2: any, arg3: any): Promise; +export declare function _try(f: (arg: any, arg2: any, arg3: any, arg4: any) => T, arg: any, arg2: any, arg3: any, arg4: any): Promise; diff --git a/packages/fs/build/promisify.js b/packages/fs/build/promisify.js new file mode 100644 index 0000000..611feed --- /dev/null +++ b/packages/fs/build/promisify.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +function promisify(f, thisContext) { + return function () { + let args = Array.prototype.slice.call(arguments); + return new Promise((resolve, reject) => { + args.push((err, result) => err !== null ? reject(err) : resolve(result)); + f.apply(thisContext, args); + }); + }; +} +exports.promisify = promisify; +function map(elts, f) { + let apply = (appElts) => Promise.all(appElts.map((elt) => typeof elt.then === 'function' ? elt.then(f) : f(elt))); + return typeof elts.then === 'function' ? elts.then(apply) : apply(elts); +} +exports.map = map; +function _try(f, thisContext) { + let args = Array.prototype.slice.call(arguments); + return new Promise((res, rej) => { + try { + args.shift(); + res(f.apply(thisContext, args)); + } + catch (err) { + rej(err); + } + }); +} +exports._try = _try; +//# sourceMappingURL=promisify.js.map \ No newline at end of file diff --git a/packages/fs/build/promisify.js.map b/packages/fs/build/promisify.js.map new file mode 100644 index 0000000..3bf1bcf --- /dev/null +++ b/packages/fs/build/promisify.js.map @@ -0,0 +1 @@ +{"version":3,"file":"promisify.js","sourceRoot":"","sources":["../src/promisify.ts"],"names":[],"mappings":";;AAOA,mBAA0B,CAAM,EAAE,WAAiB;IAClD,MAAM,CAAC;QACN,IAAI,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAQ,EAAE,MAAW,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACnF,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC;AACH,CAAC;AARD,8BAQC;AAOD,aAAoB,IAAS,EAAE,CAAM;IACpC,IAAI,KAAK,GAAG,CAAC,OAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5H,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACzE,CAAC;AAHD,kBAGC;AAQD,cAAqB,CAAM,EAAE,WAAiB;IAC7C,IAAI,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC/B,IAAI,CAAC;YACJ,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;QACjC,CAAC;QAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACd,GAAG,CAAC,GAAG,CAAC,CAAC;QACV,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC;AAVD,oBAUC"} \ No newline at end of file diff --git a/packages/fs/build/read.d.ts b/packages/fs/build/read.d.ts new file mode 100644 index 0000000..5564cb4 --- /dev/null +++ b/packages/fs/build/read.d.ts @@ -0,0 +1,4 @@ +import { ReadWriteDataType } from './interfaces'; +export declare function validateInput(methodName: string, path: string, returnAs: string): void; +export declare function sync(path: string, returnAs?: string): ReadWriteDataType; +export declare function async(path: string, returnAs?: string): Promise; diff --git a/packages/fs/build/read.js b/packages/fs/build/read.js new file mode 100644 index 0000000..6e75d46 --- /dev/null +++ b/packages/fs/build/read.js @@ -0,0 +1,98 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs_1 = require("fs"); +const imports_1 = require("./imports"); +const validate_1 = require("./utils/validate"); +const Q = require('q'); +const supportedReturnAs = ['utf8', 'buffer', 'json', 'jsonWithDates']; +const promisedReadFile = Q.denodeify(fs_1.readFile); +function validateInput(methodName, path, returnAs) { + const methodSignature = methodName + '(path, returnAs)'; + validate_1.validateArgument(methodSignature, 'path', path, ['string']); + validate_1.validateArgument(methodSignature, 'returnAs', returnAs, ['string', 'undefined']); + if (returnAs && supportedReturnAs.indexOf(returnAs) === -1) { + throw new Error('Argument "returnAs" passed to ' + methodSignature + + ' must have one of values: ' + supportedReturnAs.join(', ')); + } +} +exports.validateInput = validateInput; +; +// Matches strings generated by Date.toJSON() +// which is called to serialize date to JSON. +const jsonDateParser = (key, value) => { + const reISO = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*))(?:Z|(\+|-)([\d|:]*))?$/; + if (typeof value === 'string') { + if (reISO.exec(value)) { + return new Date(value); + } + } + return value; +}; +const ErrJson = (path, err) => { + const nicerError = new Error('JSON parsing failed while reading ' + + path + ' [' + err + ']'); + nicerError.originalError = err; + return nicerError; +}; +// --------------------------------------------------------- +// SYNC +// --------------------------------------------------------- +function sync(path, returnAs) { + const retAs = returnAs || 'utf8'; + let data; + try { + data = fs_1.readFileSync(path, { encoding: retAs === 'buffer' ? null : 'utf8' }); + } + catch (err) { + if (err.code === 'ENOENT') { + // If file doesn't exist return undefined instead of throwing. + return undefined; + } + // Otherwise rethrow the error + throw err; + } + try { + if (retAs === 'json') { + data = imports_1.json.parse(data); + } + else if (retAs === 'jsonWithDates') { + data = imports_1.json.parse(data, jsonDateParser); + } + } + catch (err) { + throw ErrJson(path, err); + } + return data; +} +exports.sync = sync; +; +// --------------------------------------------------------- +// ASYNC +// --------------------------------------------------------- +function async(path, returnAs) { + return new Promise((resolve, reject) => { + const retAs = returnAs || 'utf8'; + promisedReadFile(path, { encoding: retAs === 'buffer' ? null : 'utf8' }) + .then((data) => { + // Make final parsing of the data before returning. + try { + if (retAs === 'json') { + resolve(imports_1.json.parse(data)); + } + else if (retAs === 'jsonWithDates') { + resolve(imports_1.json.parse(data, jsonDateParser)); + } + else { + resolve(data); + } + } + catch (err) { + reject(ErrJson(path, err)); + } + }) + .catch((err) => (err.code === 'ENOENT' ? resolve(undefined) : reject(err))); + }); +} +exports.async = async; +; +//# sourceMappingURL=read.js.map \ No newline at end of file diff --git a/packages/fs/build/read.js.map b/packages/fs/build/read.js.map new file mode 100644 index 0000000..1b79d69 --- /dev/null +++ b/packages/fs/build/read.js.map @@ -0,0 +1 @@ +{"version":3,"file":"read.js","sourceRoot":"","sources":["../src/read.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/fs/build/remove.d.ts b/packages/fs/build/remove.d.ts new file mode 100644 index 0000000..185cf16 --- /dev/null +++ b/packages/fs/build/remove.d.ts @@ -0,0 +1,6 @@ +import { IDeleteOptions } from './interfaces'; +import { TDeleteResult, EResolveMode } from './interfaces'; +export declare function validateInput(methodName: string, path: string): void; +export declare function sync(path: string, options?: IDeleteOptions): void; +export declare function resolveConflict(path: string, resolveMode: EResolveMode): boolean; +export declare function async(path: string, options?: IDeleteOptions): Promise; diff --git a/packages/fs/build/remove.js b/packages/fs/build/remove.js new file mode 100644 index 0000000..4d708c4 --- /dev/null +++ b/packages/fs/build/remove.js @@ -0,0 +1,360 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const validate_1 = require("./utils/validate"); +const inspect_1 = require("./inspect"); +const list_1 = require("./list"); +const pathUtil = require("path"); +const fs_1 = require("fs"); +const errors_1 = require("./errors"); +const interfaces_1 = require("./interfaces"); +const matcher_1 = require("./utils/matcher"); +const interfaces_2 = require("./interfaces"); +const inspect_2 = require("./inspect"); +const iterator_1 = require("./iterator"); +const errors_2 = require("./errors"); +// tslint:disable-next-line:no-require-imports +// tslint:disable-next-line:no-var-requires +const trash = require('trash'); +function validateInput(methodName, path) { + const methodSignature = methodName + '([path])'; + validate_1.validateArgument(methodSignature, 'path', path, ['string', 'undefined']); +} +exports.validateInput = validateInput; +; +const parseOptions = (options, path) => { + const opts = options || {}; + const parsedOptions = {}; + parsedOptions.progress = opts.progress; + parsedOptions.conflictCallback = opts.conflictCallback; + parsedOptions.conflictSettings = opts.conflictSettings; + parsedOptions.debug = opts.debug; + parsedOptions.trash = opts.trash; + parsedOptions.matching = opts.matching; + if (!opts.filter) { + if (opts.matching) { + parsedOptions.filter = matcher_1.create(path, opts.matching); + } + else { + parsedOptions.filter = () => { + return true; + }; + } + } + return parsedOptions; +}; +// --------------------------------------------------------- +// Sync +// --------------------------------------------------------- +function sync(path, options) { + const inspectedFile = inspect_1.sync(path, { symlinks: true }); + if (inspectedFile === undefined) { + // The path already doesn't exits. Nothing to do here. + } + else if (inspectedFile.type === 'dir') { + list_1.sync(path).forEach((filename) => { + sync(pathUtil.join(path, filename)); + }); + fs_1.rmdirSync(path); + } + else if (inspectedFile.type === 'file' || inspectedFile.type === 'symlink') { + fs_1.unlinkSync(path); + } + else { + throw errors_1.ErrNoFileOrDir(path); + } +} +exports.sync = sync; +; +const rmTrash = (path) => { + return trash([path]); +}; +// --------------------------------------------------------- +// Async +// --------------------------------------------------------- +const rmASync = (path, options) => { + return options.trash ? rmTrash(path) : new Promise((resolve, reject) => { + fs_1.unlink(path, (err) => { + if (!err) { + resolve(); + } + else { + reject(err); + } + }); + }); +}; +const isDone = (nodes) => { + let done = true; + nodes.forEach((element) => { + if (element.status !== interfaces_2.ENodeOperationStatus.DONE) { + done = false; + } + }); + return done; +}; +const next = (nodes) => { + for (let i = 0; i < nodes.length; i++) { + if (nodes[i].status === interfaces_2.ENodeOperationStatus.COLLECTED) { + return nodes[i]; + } + } + return null; +}; +// handle user side setting "THROW" and non enum values (null) +const onConflict = (from, options, settings) => { + switch (settings.overwrite) { + case interfaces_2.EResolveMode.THROW: { + throw errors_2.ErrCantDelete(from); + } + case interfaces_2.EResolveMode.OVERWRITE: + case interfaces_2.EResolveMode.APPEND: + case interfaces_2.EResolveMode.IF_NEWER: + case interfaces_2.EResolveMode.ABORT: + case interfaces_2.EResolveMode.IF_SIZE_DIFFERS: + case interfaces_2.EResolveMode.SKIP: { + return settings.overwrite; + } + default: { + return undefined; + } + } +}; +function resolveConflict(path, resolveMode) { + if (resolveMode === undefined) { + return true; + } + if (resolveMode === interfaces_2.EResolveMode.SKIP) { + return false; + } + else if (resolveMode === interfaces_2.EResolveMode.ABORT) { + return false; + } + else if (resolveMode === interfaces_2.EResolveMode.RETRY) { + return true; + } + return false; +} +exports.resolveConflict = resolveConflict; +; +const visitor = (path, vars, item) => { + const options = vars.options; + if (!item) { + return; + } + item.status = interfaces_2.ENodeOperationStatus.PROCESSING; + const done = () => { + item.status = interfaces_2.ENodeOperationStatus.DONE; + if (isDone(vars.nodes)) { + return vars.resolve(vars.result); + } + else { + if (vars.nodes.length) { + const itemInner = next(vars.nodes); + if (itemInner) { + visitor(itemInner.path, vars, itemInner); + } + else { + vars.resolve(vars.result); + } + } + } + }; + if (isDone(vars.nodes)) { + return vars.resolve(vars.result); + } + vars.filesInProgress += 1; + rmASync(path, options) + .then((res) => { + done(); + }) + .catch((err) => { + if (err.code === 'EACCES' || err.code === 'EPERM' || err.code === 'EISDIR' || err.code === 'ENOTEMPTY') { + const resolved = (settings) => { + settings.error = err.code; + // feature : report + if (settings && options && options.flags && options.flags & interfaces_2.EDeleteFlags.REPORT) { + vars.result.push({ + error: settings.error, + node: item, + resolved: settings + }); + } + if (settings) { + // if the first resolve callback returned an individual resolve settings "THIS", + // ask the user again with the same item + const always = settings.mode === interfaces_2.EResolve.ALWAYS; + if (always) { + options.conflictSettings = settings; + } + let how = settings.overwrite; + how = onConflict(item.path, options, settings); + if (how === interfaces_2.EResolveMode.ABORT) { + vars.abort = true; + } + if (vars.abort) { + done(); + return; + } + if (!resolveConflict(item.path, how)) { + done(); + return; + } + item.status = interfaces_2.ENodeOperationStatus.PROCESS; + if (settings.overwrite === interfaces_2.EResolveMode.RETRY) { + item.status = interfaces_2.ENodeOperationStatus.COLLECTED; + visitor(path, vars, item); + } + } + }; + if (!options.conflictSettings) { + const promise = options.conflictCallback(path, inspect_2.createItem(path), err.code); + promise.then(resolved); + } + else { + resolved(options.conflictSettings); + } + } + }); +}; +function collect(path, options) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve, reject) => { + const all = []; + iterator_1.async(path, { + filter: options.filter + }).then((it) => { + let node = null; + while (node = it.next()) { + all.push({ + path: node.path, + item: node.item, + status: interfaces_2.ENodeOperationStatus.COLLECTED + }); + } + resolve(all); + }).catch((err) => { + console.error('read error', err); + }); + }); + }); +} +function async(path, options) { + return __awaiter(this, void 0, void 0, function* () { + options = parseOptions(options, path); + const onError = (err, resolve, reject, nodes) => { + if (err.code === 'EPERM' || err.code === 'EISDIR' || err.code === 'ENOTEMPTY') { + const proceed = () => { + // It's not a file, it's a directory. + // Must delete everything inside first. + list_1.async(path).then((filenamesInsideDir) => { + const promises = filenamesInsideDir.map((filename) => { + return async(pathUtil.join(path, filename), options); + }); + return Promise.all(promises); + }).then(() => { + // Everything inside directory has been removed, + // it's safe now to go for the directory itself. + return fs_1.rmdir(path, (err2) => { + if (err2) { + reject(err2); + } + }); + }) + .then(resolve, reject); + }; + // we have a user conflict callback, + // collect nodes and start asking + if (options.conflictCallback) { + const result = void 0; + // walker variables + const visitorArgs = { + resolve: resolve, + reject: reject, + abort: false, + filesInProgress: 0, + resolveSettings: null, + options: options, + result: result, + nodes: nodes || [] + }; + const process = () => { + visitorArgs.nodes = nodes; + if (isDone(nodes)) { + return resolve(result); + } + if (nodes.length) { + const item = next(nodes); + if (item) { + visitor(item.path, visitorArgs, item); + } + } + }; + if (!nodes) { + const _nodes = visitorArgs.nodes; + iterator_1.async(path, { + filter: options.filter + }).then((it) => { + let node = null; + while (node = it.next()) { + _nodes.push({ + path: node.path, + item: node.item, + status: interfaces_2.ENodeOperationStatus.COLLECTED + }); + } + process(); + }).catch((err2) => { + console.error('read error', err2); + }); + } + else { + process(); + } + } + else { + proceed(); + } + } + else if (err.code === 'ENOENT') { + // File already doesn't exist. We're done. + resolve(); + } + else { + // Something unexpected happened. Rethrow original error. + reject(err); + } + }; + // if matching is set, its like rm somePath/*.ext + // in this case, we collect the inner matching nodes and proceed as it + // would be an error + if (options.matching) { + const nodes = yield collect(path, options); + const err = new interfaces_1.ErrnoException('dummy'); + err.code = 'ENOTEMPTY'; + return new Promise((resolve, reject) => { + onError(err, resolve, reject, nodes); + }); + } + else { + return new Promise((resolve, reject) => { + // Assume the path is a file or directory and just try to remove it. + rmASync(path, options) + .then((res) => resolve()) + .catch((err) => { + onError(err, resolve, reject); + }); + }); + } + }); +} +exports.async = async; +; +//# sourceMappingURL=remove.js.map \ No newline at end of file diff --git a/packages/fs/build/remove.js.map b/packages/fs/build/remove.js.map new file mode 100644 index 0000000..455ef27 --- /dev/null +++ b/packages/fs/build/remove.js.map @@ -0,0 +1 @@ +{"version":3,"file":"remove.js","sourceRoot":"","sources":["../src/remove.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/fs/build/rename.d.ts b/packages/fs/build/rename.d.ts new file mode 100644 index 0000000..573dcb0 --- /dev/null +++ b/packages/fs/build/rename.d.ts @@ -0,0 +1,3 @@ +export declare function validateInput(methodName: string, path: string, newName: string): void; +export declare function sync(path: string, newName: string): void; +export declare function async(path: string, newName: string): Promise; diff --git a/packages/fs/build/rename.js b/packages/fs/build/rename.js new file mode 100644 index 0000000..cf4f4dc --- /dev/null +++ b/packages/fs/build/rename.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const pathUtil = require("path"); +const move_1 = require("./move"); +const validate_1 = require("./utils/validate"); +function validateInput(methodName, path, newName) { + const methodSignature = methodName + '(path, newName)'; + validate_1.validateArgument(methodSignature, 'path', path, ['string']); + validate_1.validateArgument(methodSignature, 'newName', newName, ['string']); +} +exports.validateInput = validateInput; +; +// --------------------------------------------------------- +// Sync +// --------------------------------------------------------- +function sync(path, newName) { + move_1.sync(path, pathUtil.join(pathUtil.dirname(path), newName)); +} +exports.sync = sync; +// --------------------------------------------------------- +// Async +// --------------------------------------------------------- +function async(path, newName) { + return move_1.async(path, pathUtil.join(pathUtil.dirname(path), newName)); +} +exports.async = async; +//# sourceMappingURL=rename.js.map \ No newline at end of file diff --git a/packages/fs/build/rename.js.map b/packages/fs/build/rename.js.map new file mode 100644 index 0000000..2bbb390 --- /dev/null +++ b/packages/fs/build/rename.js.map @@ -0,0 +1 @@ +{"version":3,"file":"rename.js","sourceRoot":"","sources":["../src/rename.ts"],"names":[],"mappings":";;AAAA,iCAAiC;AACjC,iCAA8D;AAC9D,+CAAoD;AAEpD,uBAA8B,UAAkB,EAAE,IAAY,EAAE,OAAe;IAC7E,MAAM,eAAe,GAAG,UAAU,GAAG,iBAAiB,CAAC;IACvD,2BAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5D,2BAAgB,CAAC,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpE,CAAC;AAJD,sCAIC;AAAA,CAAC;AAEF,4DAA4D;AAC5D,OAAO;AACP,4DAA4D;AAC5D,cAAqB,IAAY,EAAE,OAAe;IAChD,WAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACjE,CAAC;AAFD,oBAEC;AAED,4DAA4D;AAC5D,QAAQ;AACR,4DAA4D;AAC5D,eAAsB,IAAY,EAAE,OAAe;IACjD,MAAM,CAAC,YAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACzE,CAAC;AAFD,sBAEC"} \ No newline at end of file diff --git a/packages/fs/build/streams.d.ts b/packages/fs/build/streams.d.ts new file mode 100644 index 0000000..5021dc6 --- /dev/null +++ b/packages/fs/build/streams.d.ts @@ -0,0 +1,2 @@ +export { createWriteStream } from 'fs'; +export { createReadStream } from 'fs'; diff --git a/packages/fs/build/streams.js b/packages/fs/build/streams.js new file mode 100644 index 0000000..cf66283 --- /dev/null +++ b/packages/fs/build/streams.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var fs_1 = require("fs"); +exports.createWriteStream = fs_1.createWriteStream; +var fs_2 = require("fs"); +exports.createReadStream = fs_2.createReadStream; +//# sourceMappingURL=streams.js.map \ No newline at end of file diff --git a/packages/fs/build/streams.js.map b/packages/fs/build/streams.js.map new file mode 100644 index 0000000..f2f6b0e --- /dev/null +++ b/packages/fs/build/streams.js.map @@ -0,0 +1 @@ +{"version":3,"file":"streams.js","sourceRoot":"","sources":["../src/streams.ts"],"names":[],"mappings":";;AAAA,yBAAqC;AAA7B,iCAAA,iBAAiB,CAAA;AACzB,yBAAoC;AAA5B,gCAAA,gBAAgB,CAAA"} \ No newline at end of file diff --git a/packages/fs/build/symlink.d.ts b/packages/fs/build/symlink.d.ts new file mode 100644 index 0000000..5462094 --- /dev/null +++ b/packages/fs/build/symlink.d.ts @@ -0,0 +1,3 @@ +export declare function validateInput(methodName: string, symlinkValue: string, path: string): void; +export declare function sync(symlinkValue: string, path: string): void; +export declare function async(symlinkValue: string, path: string): Promise; diff --git a/packages/fs/build/symlink.js b/packages/fs/build/symlink.js new file mode 100644 index 0000000..89ab9ab --- /dev/null +++ b/packages/fs/build/symlink.js @@ -0,0 +1,57 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const Q = require('q'); +const fs = require("fs"); +const mkdirp = require("mkdirp"); +const pathUtil = require("path"); +const validate_1 = require("./utils/validate"); +const promisedSymlink = Q.denodeify(fs.symlink); +const promisedMkdirp = Q.denodeify(mkdirp); +function validateInput(methodName, symlinkValue, path) { + const methodSignature = methodName + '(symlinkValue, path)'; + validate_1.validateArgument(methodSignature, 'symlinkValue', symlinkValue, ['string']); + validate_1.validateArgument(methodSignature, 'path', path, ['string']); +} +exports.validateInput = validateInput; +; +// --------------------------------------------------------- +// Sync +// --------------------------------------------------------- +function sync(symlinkValue, path) { + try { + fs.symlinkSync(symlinkValue, path); + } + catch (err) { + if (err.code === 'ENOENT') { + // Parent directories don't exist. Just create them and rety. + mkdirp.sync(pathUtil.dirname(path)); + fs.symlinkSync(symlinkValue, path); + } + else { + throw err; + } + } +} +exports.sync = sync; +// --------------------------------------------------------- +// Async +// --------------------------------------------------------- +function async(symlinkValue, path) { + return new Promise((resolve, reject) => { + promisedSymlink(symlinkValue, path) + .then(resolve) + .catch((err) => { + if (err.code === 'ENOENT') { + // Parent directories don't exist. Just create them and rety. + promisedMkdirp(pathUtil.dirname(path)) + .then(() => { return promisedSymlink(symlinkValue, path); }) + .then(resolve, reject); + } + else { + reject(err); + } + }); + }); +} +exports.async = async; +//# sourceMappingURL=symlink.js.map \ No newline at end of file diff --git a/packages/fs/build/symlink.js.map b/packages/fs/build/symlink.js.map new file mode 100644 index 0000000..65bee73 --- /dev/null +++ b/packages/fs/build/symlink.js.map @@ -0,0 +1 @@ +{"version":3,"file":"symlink.js","sourceRoot":"","sources":["../src/symlink.ts"],"names":[],"mappings":";;AAAA,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AACvB,yBAAyB;AACzB,iCAAiC;AACjC,iCAAkC;AAClC,+CAAoD;AACpD,MAAM,eAAe,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AAChD,MAAM,cAAc,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAE3C,uBAA8B,UAAkB,EAAE,YAAoB,EAAE,IAAY;IAClF,MAAM,eAAe,GAAG,UAAU,GAAG,sBAAsB,CAAC;IAC5D,2BAAgB,CAAC,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5E,2BAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9D,CAAC;AAJD,sCAIC;AAAA,CAAC;AACF,4DAA4D;AAC5D,OAAO;AACP,4DAA4D;AAE5D,cAAqB,YAAoB,EAAE,IAAY;IACrD,IAAI,CAAC;QACH,EAAE,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACb,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC;YAC1B,6DAA6D;YAC7D,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACpC,EAAE,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;QAAC,IAAI,CAAC,CAAC;YACN,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AAZD,oBAYC;AAED,4DAA4D;AAC5D,QAAQ;AACR,4DAA4D;AAC5D,eAAsB,YAAoB,EAAE,IAAY;IACtD,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC;aAChC,IAAI,CAAC,OAAO,CAAC;aACb,KAAK,CAAC,CAAC,GAAQ,EAAE,EAAE;YAClB,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC;gBAC1B,6DAA6D;gBAC7D,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;qBACnC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC3D,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC3B,CAAC;YAAC,IAAI,CAAC,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC;AAfD,sBAeC"} \ No newline at end of file diff --git a/packages/fs/build/utils/matcher.d.ts b/packages/fs/build/utils/matcher.d.ts new file mode 100644 index 0000000..d23d6c8 --- /dev/null +++ b/packages/fs/build/utils/matcher.d.ts @@ -0,0 +1,6 @@ +export interface IOptions { + matchBase: boolean; + nocomment: boolean; + dot: boolean; +} +export declare function create(basePath: string, patterns: string[], options?: IOptions): (absolutePath: string) => boolean; diff --git a/packages/fs/build/utils/matcher.js b/packages/fs/build/utils/matcher.js new file mode 100644 index 0000000..a9b57db --- /dev/null +++ b/packages/fs/build/utils/matcher.js @@ -0,0 +1,70 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const minimatch_1 = require("minimatch"); +const patternToAbsolutePath = (basePath, pattern) => { + // All patterns without slash are left as they are, if pattern contain + // any slash we need to turn it into absolute path. + const hasSlash = (pattern.indexOf('/') !== -1); + const isAbsolute = /^!?\//.test(pattern); + const isNegated = /^!/.test(pattern); + let separator; + if (!isAbsolute && hasSlash) { + // Throw out meaningful characters from the beginning ("!", "./"). + pattern = pattern.replace(/^!/, '').replace(/^\.\//, ''); + if (/\/$/.test(basePath)) { + separator = ''; + } + else { + separator = '/'; + } + if (isNegated) { + return '!' + basePath + separator + pattern; + } + return basePath + separator + pattern; + } + return pattern; +}; +function create(basePath, patterns, options) { + let matchers; + if (typeof patterns === 'string') { + patterns = [patterns]; + } + matchers = patterns.map(pattern => { + return patternToAbsolutePath(basePath, pattern); + }).map(pattern => { + return new minimatch_1.Minimatch(pattern, options || { + matchBase: true, + nocomment: true, + dot: true + }); + }); + return function performMatch(absolutePath) { + let mode = 'matching'; + let weHaveMatch = false; + let currentMatcher; + let i; + for (i = 0; i < matchers.length; i += 1) { + currentMatcher = matchers[i]; + if (currentMatcher.negate) { + mode = 'negation'; + if (i === 0) { + // There are only negated patterns in the set, + // so make everything matching by default and + // start to reject stuff. + weHaveMatch = true; + } + } + if (mode === 'negation' && weHaveMatch && !currentMatcher.match(absolutePath)) { + // One negation match is enought to know we can reject this one. + return false; + } + if (mode === 'matching' && !weHaveMatch) { + weHaveMatch = currentMatcher.match(absolutePath); + } + } + return weHaveMatch; + }; +} +exports.create = create; +; +//# sourceMappingURL=matcher.js.map \ No newline at end of file diff --git a/packages/fs/build/utils/matcher.js.map b/packages/fs/build/utils/matcher.js.map new file mode 100644 index 0000000..572e7df --- /dev/null +++ b/packages/fs/build/utils/matcher.js.map @@ -0,0 +1 @@ +{"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/utils/matcher.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/fs/build/utils/mode.d.ts b/packages/fs/build/utils/mode.d.ts new file mode 100644 index 0000000..6672531 --- /dev/null +++ b/packages/fs/build/utils/mode.d.ts @@ -0,0 +1 @@ +export declare const normalizeFileMode: (mode: string | number) => string; diff --git a/packages/fs/build/utils/mode.js b/packages/fs/build/utils/mode.js new file mode 100644 index 0000000..78ac2bc --- /dev/null +++ b/packages/fs/build/utils/mode.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +// Converts mode to string 3 characters long. +exports.normalizeFileMode = (mode) => { + let modeAsString; + if (typeof mode === 'number') { + modeAsString = mode.toString(8); + } + else { + modeAsString = mode; + } + return modeAsString.substring(modeAsString.length - 3); +}; +//# sourceMappingURL=mode.js.map \ No newline at end of file diff --git a/packages/fs/build/utils/mode.js.map b/packages/fs/build/utils/mode.js.map new file mode 100644 index 0000000..3ca2b4b --- /dev/null +++ b/packages/fs/build/utils/mode.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/utils/mode.ts"],"names":[],"mappings":";;AAAA,6CAA6C;AAChC,QAAA,iBAAiB,GAAG,CAAC,IAAqB,EAAU,EAAE;IAClE,IAAI,YAAoB,CAAC;IACzB,EAAE,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC;QAC9B,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAAC,IAAI,CAAC,CAAC;QACP,YAAY,GAAG,IAAI,CAAC;IACrB,CAAC;IACD,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC"} \ No newline at end of file diff --git a/packages/fs/build/utils/platform.d.ts b/packages/fs/build/utils/platform.d.ts new file mode 100644 index 0000000..3897382 --- /dev/null +++ b/packages/fs/build/utils/platform.d.ts @@ -0,0 +1,15 @@ +export declare enum Platform { + Web = 0, + Mac = 1, + Linux = 2, + Windows = 3, +} +export declare let _platform: Platform; +export declare const isWindows: boolean; +export declare const isMacintosh: boolean; +export declare const isLinux: boolean; +export declare const isRootUser: boolean; +export declare const isNative: boolean; +export declare const isWeb: boolean; +export declare const isQunit: boolean; +export declare const platform: Platform; diff --git a/packages/fs/build/utils/platform.js b/packages/fs/build/utils/platform.js new file mode 100644 index 0000000..1881f00 --- /dev/null +++ b/packages/fs/build/utils/platform.js @@ -0,0 +1,45 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var Platform; +(function (Platform) { + Platform[Platform["Web"] = 0] = "Web"; + Platform[Platform["Mac"] = 1] = "Mac"; + Platform[Platform["Linux"] = 2] = "Linux"; + Platform[Platform["Windows"] = 3] = "Windows"; +})(Platform = exports.Platform || (exports.Platform = {})); +let _isWindows = false; +let _isMacintosh = false; +let _isLinux = false; +let _isRootUser = false; +let _isNative = false; +let _isWeb = false; +let _isQunit = false; +exports._platform = Platform.Web; +// OS detection +if (typeof process === 'object') { + _isWindows = (process.platform === 'win32'); + _isMacintosh = (process.platform === 'darwin'); + _isLinux = (process.platform === 'linux'); + _isRootUser = !_isWindows && (process.getuid() === 0); + _isNative = true; +} +if (_isNative) { + if (_isMacintosh) { + exports._platform = Platform.Mac; + } + else if (_isWindows) { + exports._platform = Platform.Windows; + } + else if (_isLinux) { + exports._platform = Platform.Linux; + } +} +exports.isWindows = _isWindows; +exports.isMacintosh = _isMacintosh; +exports.isLinux = _isLinux; +exports.isRootUser = _isRootUser; +exports.isNative = _isNative; +exports.isWeb = _isWeb; +exports.isQunit = _isQunit; +exports.platform = exports._platform; +//# sourceMappingURL=platform.js.map \ No newline at end of file diff --git a/packages/fs/build/utils/platform.js.map b/packages/fs/build/utils/platform.js.map new file mode 100644 index 0000000..c64c26f --- /dev/null +++ b/packages/fs/build/utils/platform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":";;AAAA,IAAY,QAKX;AALD,WAAY,QAAQ;IACnB,qCAAG,CAAA;IACH,qCAAG,CAAA;IACH,yCAAK,CAAA;IACL,6CAAO,CAAA;AACR,CAAC,EALW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAKnB;AACD,IAAI,UAAU,GAAG,KAAK,CAAC;AACvB,IAAI,YAAY,GAAG,KAAK,CAAC;AACzB,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,IAAI,SAAS,GAAG,KAAK,CAAC;AACtB,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,IAAI,QAAQ,GAAG,KAAK,CAAC;AACV,QAAA,SAAS,GAAa,QAAQ,CAAC,GAAG,CAAC;AAC9C,eAAe;AACf,EAAE,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC;IACjC,UAAU,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IAC5C,YAAY,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAC/C,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IAC1C,WAAW,GAAG,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IACtD,SAAS,GAAG,IAAI,CAAC;AAClB,CAAC;AACD,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACf,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAClB,iBAAS,GAAG,QAAQ,CAAC,GAAG,CAAC;IAC1B,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QACvB,iBAAS,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC9B,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrB,iBAAS,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC5B,CAAC;AACF,CAAC;AAEY,QAAA,SAAS,GAAG,UAAU,CAAC;AACvB,QAAA,WAAW,GAAG,YAAY,CAAC;AAC3B,QAAA,OAAO,GAAG,QAAQ,CAAC;AACnB,QAAA,UAAU,GAAG,WAAW,CAAC;AACzB,QAAA,QAAQ,GAAG,SAAS,CAAC;AACrB,QAAA,KAAK,GAAG,MAAM,CAAC;AACf,QAAA,OAAO,GAAG,QAAQ,CAAC;AACnB,QAAA,QAAQ,GAAG,iBAAS,CAAC"} \ No newline at end of file diff --git a/packages/fs/build/utils/strings.d.ts b/packages/fs/build/utils/strings.d.ts new file mode 100644 index 0000000..a2614c8 --- /dev/null +++ b/packages/fs/build/utils/strings.d.ts @@ -0,0 +1,2 @@ +export declare let canNormalize: boolean; +export declare const normalizeNFC: (str: string) => string; diff --git a/packages/fs/build/utils/strings.js b/packages/fs/build/utils/strings.js new file mode 100644 index 0000000..d50a68b --- /dev/null +++ b/packages/fs/build/utils/strings.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.canNormalize = typeof (''.normalize) === 'function'; +const nonAsciiCharactersPattern = /[^\u0000-\u0080]/; +exports.normalizeNFC = (str) => { + if (!exports.canNormalize || !str) { + return str; + } + let res; + if (nonAsciiCharactersPattern.test(str)) { + res = str.normalize('NFC'); + } + else { + res = str; + } + return res; +}; +//# sourceMappingURL=strings.js.map \ No newline at end of file diff --git a/packages/fs/build/utils/strings.js.map b/packages/fs/build/utils/strings.js.map new file mode 100644 index 0000000..fdfa38e --- /dev/null +++ b/packages/fs/build/utils/strings.js.map @@ -0,0 +1 @@ +{"version":3,"file":"strings.js","sourceRoot":"","sources":["../../src/utils/strings.ts"],"names":[],"mappings":";;AAAW,QAAA,YAAY,GAAG,OAAO,CAAQ,EAAG,CAAC,SAAS,CAAC,KAAK,UAAU,CAAC;AACvE,MAAM,yBAAyB,GAAG,kBAAkB,CAAC;AACxC,QAAA,YAAY,GAAG,CAAC,GAAW,EAAU,EAAE;IACnD,EAAE,CAAC,CAAC,CAAC,oBAAY,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC;IACZ,CAAC;IAED,IAAI,GAAW,CAAC;IAChB,EAAE,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzC,GAAG,GAAU,GAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAAC,IAAI,CAAC,CAAC;QACP,GAAG,GAAG,GAAG,CAAC;IACX,CAAC;IACD,MAAM,CAAC,GAAG,CAAC;AACZ,CAAC,CAAA"} \ No newline at end of file diff --git a/packages/fs/build/utils/tree_walker.d.ts b/packages/fs/build/utils/tree_walker.d.ts new file mode 100644 index 0000000..d5a7104 --- /dev/null +++ b/packages/fs/build/utils/tree_walker.d.ts @@ -0,0 +1,10 @@ +/// +import { Readable } from 'stream'; +import { IInspectOptions, INode } from '../interfaces'; +export interface IOptions { + inspectOptions: IInspectOptions; + maxLevelsDeep?: number; + user?: any; +} +export declare function sync(path: string, options: IOptions, callback: (path: string, item: INode) => void, currentLevel?: number): void; +export declare function stream(path: string, options: IOptions): Readable; diff --git a/packages/fs/build/utils/tree_walker.js b/packages/fs/build/utils/tree_walker.js new file mode 100644 index 0000000..848f03e --- /dev/null +++ b/packages/fs/build/utils/tree_walker.js @@ -0,0 +1,108 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const stream_1 = require("stream"); +const pathUtil = require("path"); +const inspect_1 = require("../inspect"); +const interfaces_1 = require("../interfaces"); +const list_1 = require("../list"); +// --------------------------------------------------------- +// SYNC +// --------------------------------------------------------- +function sync(path, options, callback, currentLevel) { + const item = inspect_1.sync(path, options.inspectOptions); + if (options.maxLevelsDeep === undefined) { + options.maxLevelsDeep = Infinity; + } + if (currentLevel === undefined) { + currentLevel = 0; + } + let children = []; + const hasChildren = item && item.type === interfaces_1.ENodeType.DIR && currentLevel < options.maxLevelsDeep; + if (hasChildren) { + children = list_1.sync(path); + } + ; + callback(path, item); + if (hasChildren) { + children.forEach(child => sync(path + pathUtil.sep + child, options, callback, currentLevel + 1)); + } +} +exports.sync = sync; +; +; +function stream(path, options) { + const rs = new stream_1.Readable({ objectMode: true }); + let nextTreeNode = { + path: path, + parent: undefined, + level: 0 + }; + let running = false; + let readSome; + const error = (err) => { + rs.emit('error', err); + }; + const findNextUnprocessedNode = (node) => { + if (node.nextSibling) { + return node.nextSibling; + } + else if (node.parent) { + return findNextUnprocessedNode(node.parent); + } + return undefined; + }; + const pushAndContinueMaybe = (data) => { + const theyWantMore = rs.push(data); + running = false; + if (!nextTreeNode) { + // Previous was the last node. The job is done. + rs.push(null); + } + else if (theyWantMore) { + readSome(); + } + }; + if (options.maxLevelsDeep === undefined) { + options.maxLevelsDeep = Infinity; + } + readSome = () => { + const theNode = nextTreeNode; + running = true; + inspect_1.async(theNode.path, options.inspectOptions) + .then((inspected) => { + theNode.inspected = inspected; + if (inspected && inspected.type === interfaces_1.ENodeType.DIR && theNode.level < options.maxLevelsDeep) { + list_1.async(theNode.path) + .then((childrenNames) => { + const children = childrenNames.map((name) => { + return { + name: name, + path: theNode.path + pathUtil.sep + name, + parent: theNode, + level: theNode.level + 1 + }; + }); + children.forEach((child, index) => { + child.nextSibling = children[index + 1]; + }); + nextTreeNode = children[0] || findNextUnprocessedNode(theNode); + pushAndContinueMaybe({ path: theNode.path, item: inspected }); + }) + .catch(error); + } + else { + nextTreeNode = findNextUnprocessedNode(theNode); + pushAndContinueMaybe({ path: theNode.path, item: inspected }); + } + }) + .catch(error); + }; + rs['_read'] = () => { + if (!running) { + readSome(); + } + }; + return rs; +} +exports.stream = stream; +//# sourceMappingURL=tree_walker.js.map \ No newline at end of file diff --git a/packages/fs/build/utils/tree_walker.js.map b/packages/fs/build/utils/tree_walker.js.map new file mode 100644 index 0000000..b3f23b7 --- /dev/null +++ b/packages/fs/build/utils/tree_walker.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tree_walker.js","sourceRoot":"","sources":["../../src/utils/tree_walker.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/fs/build/utils/validate.d.ts b/packages/fs/build/utils/validate.d.ts new file mode 100644 index 0000000..342ec60 --- /dev/null +++ b/packages/fs/build/utils/validate.d.ts @@ -0,0 +1,2 @@ +export declare function validateArgument(methodName: string, argumentName: string, argumentValue: string | any, argumentMustBe: any): boolean; +export declare function validateOptions(methodName: string, optionsObjName: string, obj: any, allowedOptions: any): void; diff --git a/packages/fs/build/utils/validate.js b/packages/fs/build/utils/validate.js new file mode 100644 index 0000000..9f38677 --- /dev/null +++ b/packages/fs/build/utils/validate.js @@ -0,0 +1,109 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const prettyPrintTypes = function (types) { + const addArticle = (str) => { + const vowels = ['a', 'e', 'i', 'o', 'u']; + if (vowels.indexOf(str[0]) !== -1) { + return 'an ' + str; + } + return 'a ' + str; + }; + return types.map(addArticle).join(' or '); +}; +const isArrayOfNotation = function (typeDefinition) { + return /array of /.test(typeDefinition); +}; +const extractTypeFromArrayOfNotation = function (typeDefinition) { + // The notation is e.g. 'array of string' + return typeDefinition.split(' of ')[1]; +}; +const isValidTypeDefinition = (typeStr) => { + if (isArrayOfNotation(typeStr)) { + return isValidTypeDefinition(extractTypeFromArrayOfNotation(typeStr)); + } + return [ + 'string', + 'number', + 'boolean', + 'array', + 'object', + 'buffer', + 'null', + 'undefined', + 'function' + ].some(function (validType) { + return validType === typeStr; + }); +}; +const detectType = function (value) { + if (value === null) { + return 'null'; + } + if (Array.isArray(value)) { + return 'array'; + } + if (Buffer.isBuffer(value)) { + return 'buffer'; + } + return typeof value; +}; +const onlyUniqueValuesInArrayFilter = function (value, index, self) { + return self.indexOf(value) === index; +}; +const detectTypeDeep = (value) => { + let type = detectType(value); + let typesInArray; + if (type === 'array') { + typesInArray = value + .map((element) => { + return detectType(element); + }) + .filter(onlyUniqueValuesInArrayFilter); + type += ' of ' + typesInArray.join(', '); + } + return type; +}; +const validateArray = (argumentValue, typeToCheck) => { + const allowedTypeInArray = extractTypeFromArrayOfNotation(typeToCheck); + if (detectType(argumentValue) !== 'array') { + return false; + } + return argumentValue.every(function (element) { + return detectType(element) === allowedTypeInArray; + }); +}; +function validateArgument(methodName, argumentName, argumentValue, argumentMustBe) { + const isOneOfAllowedTypes = argumentMustBe.some(function (type) { + if (!isValidTypeDefinition(type)) { + throw new Error('Unknown type "' + type + '"'); + } + if (isArrayOfNotation(type)) { + return validateArray(argumentValue, type); + } + return type === detectType(argumentValue); + }); + if (!isOneOfAllowedTypes) { + throw new Error('Argument "' + argumentName + '" passed to ' + methodName + ' must be ' + + prettyPrintTypes(argumentMustBe) + '. Received ' + detectTypeDeep(argumentValue)); + } + return false; +} +exports.validateArgument = validateArgument; +; +function validateOptions(methodName, optionsObjName, obj, allowedOptions) { + if (obj !== undefined) { + validateArgument(methodName, optionsObjName, obj, ['object']); + Object.keys(obj).forEach(function (key) { + const argName = optionsObjName + '.' + key; + if (allowedOptions.hasOwnProperty(key)) { + validateArgument(methodName, argName, obj[key], allowedOptions[key]); + } + else { + throw new Error('Unknown argument "' + argName + '" passed to ' + methodName); + } + }); + } +} +exports.validateOptions = validateOptions; +; +//# sourceMappingURL=validate.js.map \ No newline at end of file diff --git a/packages/fs/build/utils/validate.js.map b/packages/fs/build/utils/validate.js.map new file mode 100644 index 0000000..951c074 --- /dev/null +++ b/packages/fs/build/utils/validate.js.map @@ -0,0 +1 @@ +{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/utils/validate.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/fs/build/write.d.ts b/packages/fs/build/write.d.ts new file mode 100644 index 0000000..357ff35 --- /dev/null +++ b/packages/fs/build/write.d.ts @@ -0,0 +1,4 @@ +import { IWriteOptions, ReadWriteDataType } from './interfaces'; +export declare function validateInput(methodName: string, path: string, data: ReadWriteDataType, options: IWriteOptions): void; +export declare function sync(path: string, data: ReadWriteDataType, options?: IWriteOptions): void; +export declare function async(path: string, data: ReadWriteDataType, options?: IWriteOptions): Promise; diff --git a/packages/fs/build/write.js b/packages/fs/build/write.js new file mode 100644 index 0000000..62075bc --- /dev/null +++ b/packages/fs/build/write.js @@ -0,0 +1,95 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const pathUtil = require("path"); +const fs = require("fs"); +const fs_1 = require("fs"); +const Q = require('q'); +const mkdirp = require("mkdirp"); +const imports_1 = require("./imports"); +const validate_1 = require("./utils/validate"); +// Temporary file extensions used for atomic file overwriting. +const newExt = '.__new__'; +function validateInput(methodName, path, data, options) { + const methodSignature = methodName + '(path, data, [options])'; + validate_1.validateArgument(methodSignature, 'path', path, ['string']); + validate_1.validateArgument(methodSignature, 'data', data, ['string', 'buffer', 'object', 'array']); + validate_1.validateOptions(methodSignature, 'options', options, { + atomic: ['boolean'], + jsonIndent: ['number'], + progress: ['function'] + }); +} +exports.validateInput = validateInput; +; +const toJson = (data, jsonIndent) => { + if (typeof data === 'object' + && !Buffer.isBuffer(data) + && data !== null) { + return imports_1.json.serialize(data, null, typeof jsonIndent !== 'number' ? 2 : jsonIndent); + } + return data; +}; +// --------------------------------------------------------- +// SYNC +// --------------------------------------------------------- +const _writeFileSync = (path, data, options) => { + try { + fs_1.writeFileSync(path, data, options); + } + catch (err) { + if (err.code === 'ENOENT') { + // Means parent directory doesn't exist, so create it and try again. + mkdirp.sync(pathUtil.dirname(path)); + fs.writeFileSync(path, data, options); + } + else { + throw err; + } + } +}; +const writeAtomicSync = (path, data, options) => { + return imports_1.file.write_atomic(path + newExt, data, options, function () { }); +}; +function sync(path, data, options) { + const opts = options || {}; + const processedData = toJson(data, opts.jsonIndent); + const writeStrategy = opts.atomic ? writeAtomicSync : _writeFileSync; + writeStrategy(path, processedData, { mode: opts.mode }); +} +exports.sync = sync; +; +// --------------------------------------------------------- +// ASYNC +// --------------------------------------------------------- +const promisedWriteFile = Q.denodeify(fs.writeFile); +const promisedMkdirp = Q.denodeify(mkdirp); +const promisedAtomic = Q.denodeify(writeAtomicSync); +function writeFileAsync(path, data, options) { + return new Promise((resolve, reject) => { + promisedWriteFile(path, data, options) + .then(resolve) + .catch((err) => { + // First attempt to write a file ended with error. + // Check if this is not due to nonexistent parent directory. + if (err.code === 'ENOENT') { + // Parent directory doesn't exist, so create it and try again. + promisedMkdirp(pathUtil.dirname(path)) + .then(() => promisedWriteFile(path, data, options)) + .then(resolve, reject); + } + else { + // Nope, some other error, throw it. + reject(err); + } + }); + }); +} +; +function async(path, data, options) { + const opts = options || {}; + const processedData = toJson(data, opts.jsonIndent); + return (opts.atomic ? promisedAtomic : writeFileAsync)(path, processedData, { mode: opts.mode }); +} +exports.async = async; +; +//# sourceMappingURL=write.js.map \ No newline at end of file diff --git a/packages/fs/build/write.js.map b/packages/fs/build/write.js.map new file mode 100644 index 0000000..5fcdb13 --- /dev/null +++ b/packages/fs/build/write.js.map @@ -0,0 +1 @@ +{"version":3,"file":"write.js","sourceRoot":"","sources":["../src/write.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/fs/copy.d.ts b/packages/fs/copy.d.ts new file mode 100644 index 0000000..75e2974 --- /dev/null +++ b/packages/fs/copy.d.ts @@ -0,0 +1,14 @@ +import { ICopyOptions, EResolveMode, TCopyResult } from './interfaces'; +export declare function validateInput(methodName: string, from: string, to: string, options?: ICopyOptions): void; +export declare function sync(from: string, to: string, options?: ICopyOptions): void; +export declare function copySymlinkAsync(from: string, to: string): Promise; +export declare function resolveConflict(from: string, to: string, options: ICopyOptions, resolveMode: EResolveMode): boolean; +/** + * Final async copy function. + * @export + * @param {string} from + * @param {string} to + * @param {ICopyOptions} [options] + * @returns + */ +export declare function async(from: string, to: string, options?: ICopyOptions): Promise; diff --git a/packages/fs/copy.js b/packages/fs/copy.js new file mode 100644 index 0000000..1ad7e76 --- /dev/null +++ b/packages/fs/copy.js @@ -0,0 +1,627 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.validateInput = validateInput; +exports.sync = sync; +exports.copySymlinkAsync = copySymlinkAsync; +exports.resolveConflict = resolveConflict; +exports.async = async; +const pathUtil = require("path"); +const fs = require("fs"); +const fs_1 = require("fs"); +const mkdirp_1 = require("mkdirp"); +const exists_1 = require("./exists"); +const matcher_1 = require("./utils/matcher"); +const mode_1 = require("./utils/mode"); +const tree_walker_1 = require("./utils/tree_walker"); +const validate_1 = require("./utils/validate"); +const write_1 = require("./write"); +const errors_1 = require("./errors"); +const interfaces_1 = require("./interfaces"); +const inspect_1 = require("./inspect"); +const remove_1 = require("./remove"); +const promisify_1 = require("./promisify"); +const iterator_1 = require("./iterator"); +const promisedSymlink = (0, promisify_1.promisify)(fs.symlink); +const promisedReadlink = (0, promisify_1.promisify)(fs.readlink); +const promisedUnlink = (0, promisify_1.promisify)(fs.unlink); +const promisedMkdirp = (0, promisify_1.promisify)(mkdirp_1.sync); +const progress = require('progress-stream'); +const CPROGRESS_THRESHOLD = 1048576 * 5; // minimum file size threshold to use write progress = 5MB +function validateInput(methodName, from, to, options) { + const methodSignature = methodName + '(from, to, [options])'; + (0, validate_1.validateArgument)(methodSignature, 'from', from, ['string']); + (0, validate_1.validateArgument)(methodSignature, 'to', to, ['string']); + (0, validate_1.validateOptions)(methodSignature, 'options', options, { + overwrite: ['boolean'], + matching: ['string', 'array of string'], + progress: ['function'], + content: ['function'], + writeProgress: ['function'], + conflictCallback: ['function'], + conflictSettings: ['object'], + throttel: ['number'], + debug: ['boolean'], + flags: ['number'] + }); +} +const parseOptions = (options, from) => { + const opts = options || {}; + const parsedOptions = {}; + parsedOptions.overwrite = opts.overwrite; + parsedOptions.progress = opts.progress; + parsedOptions.writeProgress = opts.writeProgress; + parsedOptions.content = opts.content; + parsedOptions.conflictCallback = opts.conflictCallback; + parsedOptions.conflictSettings = opts.conflictSettings; + parsedOptions.debug = opts.debug; + parsedOptions.throttel = opts.throttel; + parsedOptions.renameCallback = opts.renameCallback; + parsedOptions.flags = opts.flags || 0; + if (!opts.filter) { + if (opts.matching) { + parsedOptions.filter = (0, matcher_1.create)(from, opts.matching); + } + else { + parsedOptions.filter = () => { + return true; + }; + } + } + return parsedOptions; +}; +// --------------------------------------------------------- +// Sync +// --------------------------------------------------------- +const checksBeforeCopyingSync = (from, to, options = {}) => { + if (!(0, exists_1.sync)(from)) { + throw (0, errors_1.ErrDoesntExists)(from); + } + if ((0, exists_1.sync)(to) && !options.overwrite) { + throw (0, errors_1.ErrDestinationExists)(to); + } +}; +async function copyFileSyncWithProgress(from, to, options = {}) { + return new Promise((resolve, reject) => { + const started = Date.now(); + let cbCalled = false; + let elapsed = Date.now(); + let speed = 0; + const done = (err) => { + if (!cbCalled) { + cbCalled = true; + resolve(1); + } + }; + const rd = (0, fs_1.createReadStream)(from). + on('error', (err) => done(err)); + const str = progress({ + length: fs.statSync(from).size, + time: 100 + }).on('progress', (e) => { + elapsed = (Date.now() - started) / 1000; + speed = e.transferred / elapsed; + options.writeProgress(from, e.transferred, e.length); + }); + const wr = (0, fs_1.createWriteStream)(to); + wr.on('error', (err) => done(err)); + wr.on('close', done); + rd.pipe(str).pipe(wr); + }); +} +async function copyFileSync(from, to, mode, options) { + let data = (0, fs_1.readFileSync)(from); + const writeOptions = { + mode: mode + }; + if (options.renameCallback) { + const rename = options.renameCallback(from, to); + if (rename) { + to = rename; + } + } + if (options.content) { + data = options.content(from, data, (0, inspect_1.createItem)(from)); + } + if (options && options.writeProgress) { + await copyFileSyncWithProgress(from, to, options); + } + else { + (0, write_1.sync)(to, data, writeOptions); + } +} +const copySymlinkSync = (from, to) => { + const symlinkPointsAt = fs.readlinkSync(from); + try { + (0, fs_1.symlinkSync)(symlinkPointsAt, to); + } + catch (err) { + // There is already file/symlink with this name on destination location. + // Must erase it manually, otherwise system won't allow us to place symlink there. + if (err.code === 'EEXIST') { + fs.unlinkSync(to); + // Retry... + fs.symlinkSync(symlinkPointsAt, to); + } + else { + throw err; + } + } +}; +async function copyItemSync(from, inspectData, to, options) { + const mode = (0, mode_1.normalizeFileMode)(inspectData.mode); + if (inspectData.type === interfaces_1.ENodeType.DIR) { + if (options.renameCallback) { + const rename = options.renameCallback(from, to); + if (rename) { + to = rename; + } + } + (0, mkdirp_1.sync)(to, { mode: parseInt(mode, 8), fs: null }); + } + else if (inspectData.type === interfaces_1.ENodeType.FILE) { + await copyFileSync(from, to, mode, options); + } + else if (inspectData.type === interfaces_1.ENodeType.SYMLINK) { + if (options.renameCallback) { + const rename = options.renameCallback(from, to); + if (rename) { + to = rename; + } + } + copySymlinkSync(from, to); + } +} +function sync(from, to, options) { + const opts = parseOptions(options, from); + checksBeforeCopyingSync(from, to, opts); + const nodes = []; + let sizeTotal = 0; + if (options && options.flags & interfaces_1.ECopyFlags.EMPTY) { + const dstStat = fs.statSync(to); + if (dstStat.isDirectory()) { + (0, remove_1.sync)(to); + } + } + // tslint:disable-next-line:no-shadowed-variable + const visitor = (path, inspectData) => { + if (opts.filter(path)) { + nodes.push({ + path: path, + item: inspectData, + dst: pathUtil.resolve(to, pathUtil.relative(from, path)) + }); + sizeTotal += inspectData.size; + } + }; + (0, tree_walker_1.sync)(from, { + inspectOptions: { + mode: true, + symlinks: true + } + }, visitor); + nodes.map((item, current) => { + copyItemSync(item.path, item.item, item.dst, options); + if (opts.progress) { + opts.progress(item.path, current, nodes.length, item.item, item.dst); + } + }); +} +// --------------------------------------------------------- +// Async +// --------------------------------------------------------- +/** + * + * + * @param {string} from + * @param {string} to + * @param {ICopyOptions} opts + * @returns {(Promise)} + */ +const checkAsync = (from, to, opts) => { + return (0, exists_1.async)(from) + .then(srcPathExists => { + if (!srcPathExists) { + throw (0, errors_1.ErrDoesntExists)(from); + } + else { + return (0, exists_1.async)(to); + } + }) + .then(destPathExists => { + if (destPathExists) { + if (opts.conflictSettings) { + return Promise.resolve(opts.conflictSettings); + } + if (opts.conflictCallback) { + const promise = opts.conflictCallback(to, (0, inspect_1.createItem)(to), interfaces_1.EError.EXISTS); + promise.then((settings) => { + settings.error = interfaces_1.EError.EXISTS; + }); + return promise; + } + if (!opts.overwrite) { + throw (0, errors_1.ErrDestinationExists)(to); + } + } + }); +}; +const copyFileAsync = (from, to, mode, options, retriedAttempt) => { + return new Promise((resolve, reject) => { + const readStream = fs.createReadStream(from); + const writeStream = fs.createWriteStream(to, { mode: mode }); + readStream.on('error', reject); + writeStream.on('error', (err) => { + const toDirPath = pathUtil.dirname(to); + // Force read stream to close, since write stream errored + // read stream serves us no purpose. + readStream.resume(); + if (err.code === interfaces_1.EError.NOEXISTS && retriedAttempt === undefined) { + // Some parent directory doesn't exits. Create it and retry. + promisedMkdirp(toDirPath, null).then(() => { + // Make retry attempt only once to prevent vicious infinite loop + // (when for some obscure reason I/O will keep returning ENOENT error). + // Passing retriedAttempt = true. + copyFileAsync(from, to, mode, null, true) + .then(resolve) + .catch(reject); + }); + } + else { + reject(err); + } + }); + writeStream.on('finish', () => { + // feature: preserve times + if (options && options.flags & interfaces_1.ECopyFlags.PRESERVE_TIMES) { + const sourceStat = fs.statSync(from); + fs.open(to, 'w', (err, fd) => { + if (err) { + throw err; + } + fs.futimes(fd, sourceStat.atime, sourceStat.mtime, (err2) => { + if (err2) { + throw err2; + } + fs.close(fd, null); + resolve(1); + }); + }); + } + else { + resolve(1); + } + }); + const size = fs.statSync(from).size; + let progressStream = null; + if (options && options.writeProgress && size > CPROGRESS_THRESHOLD) { + progressStream = progress({ + length: fs.statSync(from).size, + time: 100 // call progress each 100 ms + }); + let elapsed = Date.now(); + let speed = 0; + const started = Date.now(); + progressStream.on('progress', (e) => { + elapsed = (Date.now() - started) / 1000; + speed = e.transferred / elapsed; + options.writeProgress(from, e.transferred, e.length); + if (options.debug) { + console.log('write ' + from + ' (' + e.transferred + ' of ' + e.length); + } + }); + readStream.pipe(progressStream).pipe(writeStream); + } + else { + if (options && options.debug) { + console.log('write ' + from + ' to ' + to); + } + readStream.pipe(writeStream); + } + }); +}; +function copySymlinkAsync(from, to) { + return promisedReadlink(from) + .then((symlinkPointsAt) => { + return new Promise((resolve, reject) => { + promisedSymlink(symlinkPointsAt, to, null) + .then(resolve) + .catch((err) => { + if (err.code === interfaces_1.EError.EXISTS) { + // There is already file/symlink with this name on destination location. + // Must erase it manually, otherwise system won't allow us to place symlink there. + promisedUnlink(to, null) + // Retry... + .then(() => { + return promisedSymlink(symlinkPointsAt, to, null); + }) + .then(resolve, reject); + } + else { + reject(err); + } + }); + }); + }); +} +const copyItemAsync = (from, inspectData, to, options) => { + const mode = (0, mode_1.normalizeFileMode)(inspectData.mode); + if (inspectData.type === interfaces_1.ENodeType.DIR) { + return promisedMkdirp(to, { mode: mode }); + } + else if (inspectData.type === interfaces_1.ENodeType.FILE) { + return copyFileAsync(from, to, mode, options); + } + else if (inspectData.type === interfaces_1.ENodeType.SYMLINK) { + return copySymlinkAsync(from, to); + } + // EInspectItemType.OTHER + return Promise.resolve(); +}; +// handle user side setting "THROW" and non enum values (null) +const onConflict = (from, to, options, settings) => { + switch (settings.overwrite) { + case interfaces_1.EResolveMode.THROW: { + throw (0, errors_1.ErrDestinationExists)(to); + } + case interfaces_1.EResolveMode.OVERWRITE: + case interfaces_1.EResolveMode.APPEND: + case interfaces_1.EResolveMode.IF_NEWER: + case interfaces_1.EResolveMode.ABORT: + case interfaces_1.EResolveMode.IF_SIZE_DIFFERS: + case interfaces_1.EResolveMode.SKIP: { + return settings.overwrite; + } + default: { + return undefined; + } + } +}; +function resolveConflict(from, to, options, resolveMode) { + if (resolveMode === undefined) { + return true; + } + const src = (0, inspect_1.createItem)(from); + const dst = (0, inspect_1.createItem)(to); + if (resolveMode === interfaces_1.EResolveMode.SKIP) { + return false; + } + else if (resolveMode === interfaces_1.EResolveMode.IF_NEWER) { + if (src.type === interfaces_1.ENodeType.DIR && dst.type === interfaces_1.ENodeType.DIR) { + return true; + } + if (dst.modifyTime.getTime() > src.modifyTime.getTime()) { + return false; + } + } + else if (resolveMode === interfaces_1.EResolveMode.IF_SIZE_DIFFERS) { + // @TODO : not implemented: copy EInspectItemType.DIR with ECopyResolveMode.IF_SIZE_DIFFERS + if (src.type === interfaces_1.ENodeType.DIR && dst.type === interfaces_1.ENodeType.DIR) { + return true; + } + else if (src.type === interfaces_1.ENodeType.FILE && dst.type === interfaces_1.ENodeType.FILE) { + if (src.size === dst.size) { + return false; + } + } + } + else if (resolveMode === interfaces_1.EResolveMode.OVERWRITE) { + return true; + } + else if (resolveMode === interfaces_1.EResolveMode.ABORT) { + return false; + } +} +function isDone(nodes) { + let done = true; + nodes.forEach((element) => { + if (element.status !== interfaces_1.ENodeOperationStatus.DONE) { + done = false; + } + }); + return done; +} +/** + * A callback for treeWalkerStream. This is called when a node has been found. + * + * @param {string} from + * @param {string} to + * @param {*} vars + * @param {{ path: string, item: INode }} item + * @returns {Promise} + */ +async function visitor(from, to, vars, item) { + const options = vars.options; + let rel; + let destPath; + if (!item) { + return; + } + rel = pathUtil.relative(from, item.path); + destPath = pathUtil.resolve(to, rel); + item.status = interfaces_1.ENodeOperationStatus.PROCESSING; + const done = () => { + item.status = interfaces_1.ENodeOperationStatus.DONE; + if (isDone(vars.nodes)) { + return vars.resolve(vars.result); + } + }; + if (isDone(vars.nodes)) { + return vars.resolve(vars.result); + } + vars.filesInProgress += 1; + // our main function after sanity checks + const checked = (subResolveSettings) => { + item.status = interfaces_1.ENodeOperationStatus.CHECKED; + // feature : report + if (subResolveSettings && options && options.flags && options.flags & interfaces_1.ECopyFlags.REPORT) { + vars.result.push({ + error: subResolveSettings.error, + node: item, + resolved: subResolveSettings + }); + } + if (subResolveSettings) { + // if the first resolve callback returned an individual resolve settings "THIS", + // ask the user again with the same item + const always = subResolveSettings.mode === interfaces_1.EResolve.ALWAYS; + if (always) { + options.conflictSettings = subResolveSettings; + } + let overwriteMode = subResolveSettings.overwrite; + overwriteMode = onConflict(item.path, destPath, options, subResolveSettings); + if (overwriteMode === interfaces_1.EResolveMode.ABORT) { + vars.abort = true; + } + if (vars.abort) { + return; + } + if (!resolveConflict(item.path, destPath, options, overwriteMode)) { + done(); + return; + } + } + item.status = interfaces_1.ENodeOperationStatus.PROCESS; + copyItemAsync(item.path, item.item, destPath, options).then(() => { + vars.filesInProgress -= 1; + if (options.progress) { + if (options.progress(item.path, vars.filesInProgress, vars.filesInProgress, item.item) === false) { + vars.abort = true; + return vars.resolve(); + } + } + done(); + }).catch((err) => { + if (options && options.conflictCallback) { + if (err.code === interfaces_1.EError.PERMISSION || err.code === interfaces_1.EError.NOEXISTS) { + options.conflictCallback(item.path, (0, inspect_1.createItem)(destPath), err.code).then((errorResolveSettings) => { + // the user has set the conflict resolver to always, so we use the last one + if (vars.onCopyErrorResolveSettings) { + errorResolveSettings = vars.onCopyErrorResolveSettings; + } + // user said use this settings always, we track and use this last setting from now on + if (errorResolveSettings.mode === interfaces_1.EResolve.ALWAYS && !vars.onCopyErrorResolveSettings) { + vars.onCopyErrorResolveSettings = errorResolveSettings; + } + if (errorResolveSettings.overwrite === interfaces_1.EResolveMode.ABORT) { + vars.abort = true; + return vars.resolve(); + } + if (errorResolveSettings.overwrite === interfaces_1.EResolveMode.THROW) { + vars.abort = true; + return vars.reject(err); + } + if (errorResolveSettings.overwrite === interfaces_1.EResolveMode.SKIP) { + vars.filesInProgress -= 1; + } + // user error, should never happen, unintended + if (errorResolveSettings.overwrite === interfaces_1.EResolveMode.IF_NEWER || + errorResolveSettings.overwrite === interfaces_1.EResolveMode.IF_SIZE_DIFFERS || + errorResolveSettings.overwrite === interfaces_1.EResolveMode.OVERWRITE) { + vars.reject(new interfaces_1.ErrnoException('settings make no sense : errorResolveSettings.overwrite = ' + errorResolveSettings.overwrite)); + } + }); + } + } + vars.reject(err); + }); + }; + return checkAsync(item.path, destPath, options).then(checked); +} +function next(nodes) { + for (let i = 0; i < nodes.length; i++) { + if (nodes[i].status === interfaces_1.ENodeOperationStatus.COLLECTED) { + return nodes[i]; + } + } + return null; +} +/** + * Final async copy function. + * @export + * @param {string} from + * @param {string} to + * @param {ICopyOptions} [options] + * @returns + */ +function async(from, to, options) { + options = parseOptions(options, from); + return new Promise((resolve, reject) => { + checkAsync(from, to, options).then((resolver) => { + if (!resolver) { + resolver = options.conflictSettings || { + mode: interfaces_1.EResolve.THIS, + overwrite: interfaces_1.EResolveMode.OVERWRITE + }; + } + else { + if (resolver.mode === interfaces_1.EResolve.ALWAYS) { + options.conflictSettings = resolver; + } + } + let overwriteMode = resolver.overwrite; + let result = void 0; + if (options && options.flags && options.flags & interfaces_1.ECopyFlags.REPORT) { + result = []; + } + // call onConflict to eventually throw an error + overwriteMode = onConflict(from, to, options, resolver); + // now evaluate the copy conflict settings and eventually abort + if (options && options.conflictSettings && !resolveConflict(from, to, options, overwriteMode)) { + return resolve(); + } + // feature: clean before + if (options && options.flags & interfaces_1.ECopyFlags.EMPTY) { + const dstStat = fs.statSync(to); + if (dstStat.isDirectory()) { + (0, remove_1.sync)(to); + } + } + // walker variables + const visitorArgs = { + resolve: resolve, + reject: reject, + abort: false, + filesInProgress: 0, + resolveSettings: resolver, + options: options, + result: result, + nodes: [], + onCopyErrorResolveSettings: null + }; + const nodes = visitorArgs.nodes; + // a function called when the treeWalkerStream or visitor has been finished + const process = function () { + visitorArgs.nodes = nodes; + if (isDone(nodes)) { + return resolve(result); + } + if (nodes.length) { + const item = next(nodes); + if (item) { + visitor(item.path, item.dst, visitorArgs, item).then(process); + } + } + }; + let flags = interfaces_1.EInspectFlags.MODE; + if (options && options.flags && options.flags & interfaces_1.ECopyFlags.FOLLOW_SYMLINKS) { + flags |= interfaces_1.EInspectFlags.SYMLINKS; + } + (0, iterator_1.async)(from, { + filter: options.filter, + flags: flags + }).then((it) => { + let node = null; + while (node = it.next()) { + nodes.push({ + path: node.path, + item: node.item, + dst: pathUtil.resolve(to, pathUtil.relative(from, node.path)), + status: interfaces_1.ENodeOperationStatus.COLLECTED + }); + } + process(); + }); + }).catch(reject); + }); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNyYy9jb3B5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNENBLHNDQWdCQztBQXFJRCxvQkFxQ0M7QUFtSEQsNENBc0JDO0FBa0NELDBDQTZCQztBQTBKRCxzQkFtRkM7QUEzcEJELGlDQUFrQztBQUNsQyx5QkFBeUI7QUFDekIsMkJBQW9GO0FBQ3BGLG1DQUF3QztBQUV4QyxxQ0FBb0U7QUFDcEUsNkNBQW9EO0FBQ3BELHVDQUE2RDtBQUM3RCxxREFBNkQ7QUFDN0QsK0NBQXFFO0FBQ3JFLG1DQUE0QztBQUM1QyxxQ0FBaUU7QUFDakUsNkNBZW1DO0FBRW5DLHVDQUF1QztBQUN2QyxxQ0FBMEM7QUFDMUMsMkNBQXdDO0FBQ3hDLHlDQUFvRDtBQUdwRCxNQUFNLGVBQWUsR0FBRyxJQUFBLHFCQUFTLEVBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzlDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSxxQkFBUyxFQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoRCxNQUFNLGNBQWMsR0FBRyxJQUFBLHFCQUFTLEVBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLE1BQU0sY0FBYyxHQUFHLElBQUEscUJBQVMsRUFBd0IsYUFBTSxDQUFDLENBQUM7QUFFaEUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFNUMsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsMERBQTBEO0FBRW5HLFNBQWdCLGFBQWEsQ0FBQyxVQUFrQixFQUFFLElBQVksRUFBRSxFQUFVLEVBQUUsT0FBc0I7SUFDakcsTUFBTSxlQUFlLEdBQUcsVUFBVSxHQUFHLHVCQUF1QixDQUFDO0lBQzdELElBQUEsMkJBQWdCLEVBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzVELElBQUEsMkJBQWdCLEVBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3hELElBQUEsMEJBQWUsRUFBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRTtRQUNwRCxTQUFTLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDdEIsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDO1FBQ3ZDLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQztRQUN0QixPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUM7UUFDckIsYUFBYSxFQUFFLENBQUMsVUFBVSxDQUFDO1FBQzNCLGdCQUFnQixFQUFFLENBQUMsVUFBVSxDQUFDO1FBQzlCLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO1FBQzVCLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUNwQixLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDbEIsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDO0tBQ2pCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFlBQVksR0FBRyxDQUFDLE9BQW1CLEVBQUUsSUFBWSxFQUFnQixFQUFFO0lBQ3hFLE1BQU0sSUFBSSxHQUFpQixPQUFPLElBQUksRUFBa0IsQ0FBQztJQUN6RCxNQUFNLGFBQWEsR0FBaUIsRUFBRSxDQUFDO0lBQ3ZDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN6QyxhQUFhLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkMsYUFBYSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQ2pELGFBQWEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUNyQyxhQUFhLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ3ZELGFBQWEsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDdkQsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ2pDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QyxhQUFhLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDbkQsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLGFBQWEsQ0FBQyxNQUFNLEdBQUcsSUFBQSxnQkFBTyxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckQsQ0FBQzthQUFNLENBQUM7WUFDUCxhQUFhLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDM0IsT0FBTyxJQUFJLENBQUM7WUFDYixDQUFDLENBQUM7UUFDSCxDQUFDO0lBQ0YsQ0FBQztJQUNELE9BQU8sYUFBYSxDQUFDO0FBQ3RCLENBQUMsQ0FBQztBQUNGLDREQUE0RDtBQUM1RCxPQUFPO0FBQ1AsNERBQTREO0FBQzVELE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBVSxFQUFFLFVBQXdCLEVBQUUsRUFBRSxFQUFFO0lBQ3hGLElBQUksQ0FBQyxJQUFBLGFBQVUsRUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sSUFBQSx3QkFBZSxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLElBQUEsYUFBVSxFQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzFDLE1BQU0sSUFBQSw2QkFBb0IsRUFBQyxFQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDO0FBQ0YsQ0FBQyxDQUFDO0FBRUYsS0FBSyxVQUFVLHdCQUF3QixDQUFDLElBQVksRUFBRSxFQUFVLEVBQUUsVUFBd0IsRUFBRTtJQUMzRixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBUyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNmLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNaLENBQUM7UUFDRixDQUFDLENBQUM7UUFDRixNQUFNLEVBQUUsR0FBRyxJQUFBLHFCQUFnQixFQUFDLElBQUksQ0FBQztZQUNoQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV4QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUM7WUFDcEIsTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSTtZQUM5QixJQUFJLEVBQUUsR0FBRztTQUNULENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDNUIsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztZQUN4QyxLQUFLLEdBQUcsQ0FBQyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7WUFDaEMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLEVBQUUsR0FBRyxJQUFBLHNCQUFpQixFQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVyQixFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxLQUFLLFVBQVUsWUFBWSxDQUFDLElBQVksRUFBRSxFQUFVLEVBQUUsSUFBWSxFQUFFLE9BQXNCO0lBQ3pGLElBQUksSUFBSSxHQUFHLElBQUEsaUJBQVksRUFBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixNQUFNLFlBQVksR0FBa0I7UUFDbkMsSUFBSSxFQUFFLElBQUk7S0FDVixDQUFDO0lBRUYsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNaLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDYixDQUFDO0lBQ0YsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBQSxvQkFBVSxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QyxNQUFNLHdCQUF3QixDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkQsQ0FBQztTQUFNLENBQUM7UUFDUCxJQUFBLFlBQVMsRUFBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ25DLENBQUM7QUFDRixDQUFDO0FBQ0QsTUFBTSxlQUFlLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBVSxFQUFFLEVBQUU7SUFDcEQsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxJQUFJLENBQUM7UUFDSixJQUFBLGdCQUFXLEVBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2Qsd0VBQXdFO1FBQ3hFLGtGQUFrRjtRQUNsRixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDM0IsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQixXQUFXO1lBQ1gsRUFBRSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckMsQ0FBQzthQUFNLENBQUM7WUFDUCxNQUFNLEdBQUcsQ0FBQztRQUNYLENBQUM7SUFDRixDQUFDO0FBQ0YsQ0FBQyxDQUFDO0FBRUYsS0FBSyxVQUFVLFlBQVksQ0FBQyxJQUFZLEVBQUUsV0FBa0IsRUFBRSxFQUFVLEVBQUUsT0FBcUI7SUFDOUYsTUFBTSxJQUFJLEdBQVcsSUFBQSx3QkFBUSxFQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssc0JBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QyxJQUFJLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM1QixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNoRCxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNaLEVBQUUsR0FBRyxNQUFNLENBQUE7WUFDWixDQUFDO1FBQ0YsQ0FBQztRQUNELElBQUEsYUFBTSxFQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7U0FBTSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssc0JBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoRCxNQUFNLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUM1QyxDQUFDO1NBQU0sSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLHNCQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkQsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDNUIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7WUFDL0MsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWixFQUFFLEdBQUcsTUFBTSxDQUFBO1lBQ1osQ0FBQztRQUNGLENBQUM7UUFDRCxlQUFlLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLENBQUM7QUFDRixDQUFDO0FBQ0QsU0FBZ0IsSUFBSSxDQUFDLElBQVksRUFBRSxFQUFVLEVBQUUsT0FBc0I7SUFDcEUsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUN4Qyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ3ZDLE1BQU0sS0FBSyxHQUFzQixFQUFFLENBQUE7SUFDbkMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFBO0lBQ2pCLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEdBQUcsdUJBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQy9CLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDM0IsSUFBQSxhQUFNLEVBQUMsRUFBRSxDQUFDLENBQUE7UUFDWCxDQUFDO0lBQ0YsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxNQUFNLE9BQU8sR0FBRyxDQUFDLElBQVksRUFBRSxXQUFrQixFQUFFLEVBQUU7UUFDcEQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDVixJQUFJLEVBQUUsSUFBSTtnQkFDVixJQUFJLEVBQUUsV0FBVztnQkFDakIsR0FBRyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3hELENBQUMsQ0FBQztZQUNILFNBQVMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQy9CLENBQUM7SUFDRixDQUFDLENBQUM7SUFFRixJQUFBLGtCQUFjLEVBQUMsSUFBSSxFQUFFO1FBQ3BCLGNBQWMsRUFBRTtZQUNmLElBQUksRUFBRSxJQUFJO1lBQ1YsUUFBUSxFQUFFLElBQUk7U0FDZDtLQUNELEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFWixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQzNCLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUNyRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDckUsQ0FBQztJQUNGLENBQUMsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELDREQUE0RDtBQUM1RCxRQUFRO0FBQ1IsNERBQTREO0FBRTVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFVLEVBQUUsSUFBa0IsRUFBb0MsRUFBRTtJQUNyRyxPQUFPLElBQUEsY0FBVyxFQUFDLElBQUksQ0FBQztTQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDckIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBQSx3QkFBZSxFQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUM7YUFBTSxDQUFDO1lBQ1AsT0FBTyxJQUFBLGNBQVcsRUFBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixDQUFDO0lBQ0YsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1FBQ3RCLElBQUksY0FBYyxFQUFFLENBQUM7WUFDcEIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDM0IsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQy9DLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUMzQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLElBQUEsb0JBQVUsRUFBQyxFQUFFLENBQUMsRUFBRSxtQkFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN6RSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBMkIsRUFBRSxFQUFFO29CQUM1QyxRQUFRLENBQUMsS0FBSyxHQUFHLG1CQUFNLENBQUMsTUFBTSxDQUFDO2dCQUNoQyxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLE9BQU8sQ0FBQztZQUNoQixDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxJQUFBLDZCQUFvQixFQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7UUFDRixDQUFDO0lBQ0YsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFVLEVBQUUsSUFBUyxFQUFFLE9BQXNCLEVBQUUsY0FBd0IsRUFBRSxFQUFFO0lBQy9HLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDdEMsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM3RCxVQUFVLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvQixXQUFXLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQW1CLEVBQUUsRUFBRTtZQUMvQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLHlEQUF5RDtZQUN6RCxvQ0FBb0M7WUFDcEMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxtQkFBTSxDQUFDLFFBQVEsSUFBSSxjQUFjLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2xFLDREQUE0RDtnQkFDNUQsY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUN6QyxnRUFBZ0U7b0JBQ2hFLHVFQUF1RTtvQkFDdkUsaUNBQWlDO29CQUNqQyxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQzt5QkFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQzt5QkFDYixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNQLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNiLENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztRQUVILFdBQVcsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUM3QiwwQkFBMEI7WUFDMUIsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssR0FBRyx1QkFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUMxRCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFtQixFQUFFLEVBQVUsRUFBRSxFQUFFO29CQUNwRCxJQUFJLEdBQUcsRUFBRSxDQUFDO3dCQUNULE1BQU0sR0FBRyxDQUFDO29CQUNYLENBQUM7b0JBQ0QsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7d0JBQzNELElBQUksSUFBSSxFQUFFLENBQUM7NEJBQ1YsTUFBTSxJQUFJLENBQUM7d0JBQ1osQ0FBQzt3QkFDRCxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQzt3QkFDbkIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNaLENBQUMsQ0FBQyxDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNQLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNaLENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3BDLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsYUFBYSxJQUFJLElBQUksR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3BFLGNBQWMsR0FBRyxRQUFRLENBQUM7Z0JBQ3pCLE1BQU0sRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUk7Z0JBQzlCLElBQUksRUFBRSxHQUFHLENBQUMsNEJBQTRCO2FBQ3RDLENBQUMsQ0FBQztZQUNILElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6QixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDZCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDM0IsY0FBYyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDeEMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDeEMsS0FBSyxHQUFHLENBQUMsQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO2dCQUNoQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDckQsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN6RSxDQUFDO1lBQ0YsQ0FBQyxDQUFDLENBQUM7WUFDSCxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRCxDQUFDO2FBQU0sQ0FBQztZQUNQLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM1QyxDQUFDO1lBQ0QsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QixDQUFDO0lBQ0YsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRixTQUFnQixnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsRUFBVTtJQUN4RCxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQztTQUMzQixJQUFJLENBQUMsQ0FBQyxlQUF1QixFQUFFLEVBQUU7UUFDakMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN0QyxlQUFlLENBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7aUJBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUM7aUJBQ2IsS0FBSyxDQUFDLENBQUMsR0FBbUIsRUFBRSxFQUFFO2dCQUM5QixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssbUJBQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDaEMsd0VBQXdFO29CQUN4RSxrRkFBa0Y7b0JBQ2xGLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDO3dCQUN2QixXQUFXO3lCQUNWLElBQUksQ0FBQyxHQUFHLEVBQUU7d0JBQ1YsT0FBTyxlQUFlLENBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDbkQsQ0FBQyxDQUFDO3lCQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3pCLENBQUM7cUJBQU0sQ0FBQztvQkFDUCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2IsQ0FBQztZQUNGLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQVksRUFBRSxXQUFrQixFQUFFLEVBQVUsRUFBRSxPQUFxQixFQUFnQixFQUFFO0lBQzNHLE1BQU0sSUFBSSxHQUFHLElBQUEsd0JBQVEsRUFBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdkMsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLHNCQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEMsT0FBTyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFDMUMsQ0FBQztTQUFNLElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxzQkFBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hELE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzlDLENBQUM7U0FBTSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssc0JBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuRCxPQUFPLGdCQUFnQixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBQ0QseUJBQXlCO0lBQ3pCLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0FBQ3pCLENBQUMsQ0FBQTtBQUNELDhEQUE4RDtBQUM5RCxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFVLEVBQUUsT0FBcUIsRUFBRSxRQUEyQixFQUE0QixFQUFFO0lBQzdILFFBQVEsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzVCLEtBQUsseUJBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLE1BQU0sSUFBQSw2QkFBb0IsRUFBQyxFQUFFLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsS0FBSyx5QkFBWSxDQUFDLFNBQVMsQ0FBQztRQUM1QixLQUFLLHlCQUFZLENBQUMsTUFBTSxDQUFDO1FBQ3pCLEtBQUsseUJBQVksQ0FBQyxRQUFRLENBQUM7UUFDM0IsS0FBSyx5QkFBWSxDQUFDLEtBQUssQ0FBQztRQUN4QixLQUFLLHlCQUFZLENBQUMsZUFBZSxDQUFDO1FBQ2xDLEtBQUsseUJBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUMzQixDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNULE9BQU8sU0FBUyxDQUFDO1FBQ2xCLENBQUM7SUFDRixDQUFDO0FBQ0YsQ0FBQyxDQUFDO0FBRUYsU0FBZ0IsZUFBZSxDQUFDLElBQVksRUFBRSxFQUFVLEVBQUUsT0FBcUIsRUFBRSxXQUF5QjtJQUN6RyxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMvQixPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFBLG9CQUFVLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsTUFBTSxHQUFHLEdBQUcsSUFBQSxvQkFBVSxFQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLElBQUksV0FBVyxLQUFLLHlCQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkMsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO1NBQU0sSUFBSSxXQUFXLEtBQUsseUJBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssc0JBQVMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxzQkFBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzlELE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQztRQUNELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDekQsT0FBTyxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0YsQ0FBQztTQUFNLElBQUksV0FBVyxLQUFLLHlCQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekQsMkZBQTJGO1FBQzNGLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxzQkFBUyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLHNCQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDOUQsT0FBTyxJQUFJLENBQUM7UUFDYixDQUFDO2FBQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLHNCQUFTLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssc0JBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN2RSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMzQixPQUFPLEtBQUssQ0FBQztZQUNkLENBQUM7UUFDRixDQUFDO0lBQ0YsQ0FBQztTQUFNLElBQUksV0FBVyxLQUFLLHlCQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO1NBQU0sSUFBSSxXQUFXLEtBQUsseUJBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQyxPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7QUFDRixDQUFDO0FBRUQsU0FBUyxNQUFNLENBQUMsS0FBd0I7SUFDdkMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2hCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUF3QixFQUFFLEVBQUU7UUFDMUMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLGlDQUFvQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xELElBQUksR0FBRyxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLElBQUksQ0FBQztBQUNiLENBQUM7QUFDRDs7Ozs7Ozs7R0FRRztBQUNILEtBQUssVUFBVSxPQUFPLENBQUMsSUFBWSxFQUFFLEVBQVUsRUFBRSxJQUFrQixFQUFFLElBQXFCO0lBQ3pGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDN0IsSUFBSSxHQUFXLENBQUM7SUFDaEIsSUFBSSxRQUFnQixDQUFDO0lBQ3JCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNYLE9BQU87SUFDUixDQUFDO0lBQ0QsR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxpQ0FBb0IsQ0FBQyxVQUFVLENBQUM7SUFDOUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsaUNBQW9CLENBQUMsSUFBSSxDQUFDO1FBQ3hDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNGLENBQUMsQ0FBQztJQUNGLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDO0lBQzFCLHdDQUF3QztJQUN4QyxNQUFNLE9BQU8sR0FBRyxDQUFDLGtCQUFxQyxFQUFFLEVBQUU7UUFDekQsSUFBSSxDQUFDLE1BQU0sR0FBRyxpQ0FBb0IsQ0FBQyxPQUFPLENBQUM7UUFDM0MsbUJBQW1CO1FBQ25CLElBQUksa0JBQWtCLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLEtBQUssR0FBRyx1QkFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hGLElBQUksQ0FBQyxNQUF3QixDQUFDLElBQUksQ0FBQztnQkFDbkMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEtBQUs7Z0JBQy9CLElBQUksRUFBRSxJQUFJO2dCQUNWLFFBQVEsRUFBRSxrQkFBa0I7YUFDYixDQUFDLENBQUM7UUFDbkIsQ0FBQztRQUNELElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUN4QixnRkFBZ0Y7WUFDaEYsd0NBQXdDO1lBQ3hDLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLElBQUksS0FBSyxxQkFBUSxDQUFDLE1BQU0sQ0FBQztZQUMzRCxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNaLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQztZQUMvQyxDQUFDO1lBQ0QsSUFBSSxhQUFhLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDO1lBQ2pELGFBQWEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFFN0UsSUFBSSxhQUFhLEtBQUsseUJBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDbkIsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoQixPQUFPO1lBQ1IsQ0FBQztZQUVELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQ25FLElBQUksRUFBRSxDQUFDO2dCQUNQLE9BQU87WUFDUixDQUFDO1FBRUYsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsaUNBQW9CLENBQUMsT0FBTyxDQUFDO1FBQzNDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDaEUsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUM7WUFDMUIsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7b0JBQ2xHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO29CQUNsQixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdkIsQ0FBQztZQUNGLENBQUM7WUFDRCxJQUFJLEVBQUUsQ0FBQztRQUNSLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQW1CLEVBQUUsRUFBRTtZQUNoQyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLG1CQUFNLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssbUJBQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDcEUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBQSxvQkFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxvQkFBdUMsRUFBRSxFQUFFO3dCQUNwSCwyRUFBMkU7d0JBQzNFLElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7NEJBQ3JDLG9CQUFvQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQzt3QkFDeEQsQ0FBQzt3QkFDRCxxRkFBcUY7d0JBQ3JGLElBQUksb0JBQW9CLENBQUMsSUFBSSxLQUFLLHFCQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7NEJBQ3ZGLElBQUksQ0FBQywwQkFBMEIsR0FBRyxvQkFBb0IsQ0FBQzt3QkFDeEQsQ0FBQzt3QkFFRCxJQUFJLG9CQUFvQixDQUFDLFNBQVMsS0FBSyx5QkFBWSxDQUFDLEtBQUssRUFBRSxDQUFDOzRCQUMzRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzs0QkFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ3ZCLENBQUM7d0JBQ0QsSUFBSSxvQkFBb0IsQ0FBQyxTQUFTLEtBQUsseUJBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQzs0QkFDM0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7NEJBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDekIsQ0FBQzt3QkFDRCxJQUFJLG9CQUFvQixDQUFDLFNBQVMsS0FBSyx5QkFBWSxDQUFDLElBQUksRUFBRSxDQUFDOzRCQUMxRCxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQzt3QkFDM0IsQ0FBQzt3QkFFRCw4Q0FBOEM7d0JBQzlDLElBQUksb0JBQW9CLENBQUMsU0FBUyxLQUFLLHlCQUFZLENBQUMsUUFBUTs0QkFDM0Qsb0JBQW9CLENBQUMsU0FBUyxLQUFLLHlCQUFZLENBQUMsZUFBZTs0QkFDL0Qsb0JBQW9CLENBQUMsU0FBUyxLQUFLLHlCQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7NEJBQzVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSwyQkFBYyxDQUFDLDREQUE0RCxHQUFHLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0JBQ2hJLENBQUM7b0JBQ0YsQ0FBQyxDQUFDLENBQUM7Z0JBQ0osQ0FBQztZQUNGLENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBQ0YsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFFRCxTQUFTLElBQUksQ0FBQyxLQUF3QjtJQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3ZDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxpQ0FBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN4RCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixDQUFDO0lBQ0YsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2IsQ0FBQztBQWNEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixLQUFLLENBQUMsSUFBWSxFQUFFLEVBQVUsRUFBRSxPQUFzQjtJQUNyRSxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0QyxPQUFPLElBQUksT0FBTyxDQUFjLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ25ELFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQTJCLEVBQUUsRUFBRTtZQUNsRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2YsUUFBUSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSTtvQkFDdEMsSUFBSSxFQUFFLHFCQUFRLENBQUMsSUFBSTtvQkFDbkIsU0FBUyxFQUFFLHlCQUFZLENBQUMsU0FBUztpQkFDakMsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDUCxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUsscUJBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDdkMsT0FBTyxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztnQkFDckMsQ0FBQztZQUNGLENBQUM7WUFDRCxJQUFJLGFBQWEsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQ3ZDLElBQUksTUFBTSxHQUFnQixLQUFLLENBQUMsQ0FBQztZQUVqQyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEdBQUcsdUJBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbkUsTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNiLENBQUM7WUFFRCwrQ0FBK0M7WUFDL0MsYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUV4RCwrREFBK0Q7WUFDL0QsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLGdCQUFnQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQy9GLE9BQU8sT0FBTyxFQUFFLENBQUM7WUFDbEIsQ0FBQztZQUNELHdCQUF3QjtZQUN4QixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxHQUFHLHVCQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2pELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2hDLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7b0JBQzNCLElBQUEsYUFBTSxFQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNaLENBQUM7WUFDRixDQUFDO1lBQ0QsbUJBQW1CO1lBQ25CLE1BQU0sV0FBVyxHQUFpQjtnQkFDakMsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLEtBQUssRUFBRSxLQUFLO2dCQUNaLGVBQWUsRUFBRSxDQUFDO2dCQUNsQixlQUFlLEVBQUUsUUFBUTtnQkFDekIsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLEtBQUssRUFBRSxFQUFFO2dCQUNULDBCQUEwQixFQUFFLElBQUk7YUFDaEMsQ0FBQztZQUNGLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDaEMsMkVBQTJFO1lBQzNFLE1BQU0sT0FBTyxHQUFHO2dCQUNmLFdBQVcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUMxQixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUNuQixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDeEIsQ0FBQztnQkFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN6QixJQUFJLElBQUksRUFBRSxDQUFDO3dCQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDL0QsQ0FBQztnQkFDRixDQUFDO1lBQ0YsQ0FBQyxDQUFDO1lBRUYsSUFBSSxLQUFLLEdBQWtCLDBCQUFhLENBQUMsSUFBSSxDQUFDO1lBQzlDLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLEtBQUssR0FBRyx1QkFBVSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUM1RSxLQUFLLElBQUksMEJBQWEsQ0FBQyxRQUFRLENBQUM7WUFDakMsQ0FBQztZQUNELElBQUEsZ0JBQWEsRUFBQyxJQUFJLEVBQUU7Z0JBQ25CLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtnQkFDdEIsS0FBSyxFQUFFLEtBQUs7YUFDWixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBa0MsRUFBRSxFQUFFO2dCQUM5QyxJQUFJLElBQUksR0FBb0IsSUFBSSxDQUFDO2dCQUNqQyxPQUFPLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztvQkFDekIsS0FBSyxDQUFDLElBQUksQ0FBQzt3QkFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7d0JBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO3dCQUNmLEdBQUcsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQzdELE1BQU0sRUFBRSxpQ0FBb0IsQ0FBQyxTQUFTO3FCQUN0QyxDQUFDLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxPQUFPLEVBQUUsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9 \ No newline at end of file diff --git a/packages/fs/copy.js.map b/packages/fs/copy.js.map new file mode 100644 index 0000000..6a0c058 --- /dev/null +++ b/packages/fs/copy.js.map @@ -0,0 +1 @@ +{"version":3,"file":"copy.js","sourceRoot":"","sources":["src/copy.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/fs/dir.d.ts b/packages/fs/dir.d.ts new file mode 100644 index 0000000..60a7535 --- /dev/null +++ b/packages/fs/dir.d.ts @@ -0,0 +1,7 @@ +export interface IOptions { + empty?: boolean; + mode?: number | string; +} +export declare const validateInput: (methodName: string, path: string, options?: IOptions) => void; +export declare const sync: (path: string, options?: IOptions) => void; +export declare const async: (path: string, passedCriteria?: IOptions) => Promise; diff --git a/packages/fs/dir.js b/packages/fs/dir.js new file mode 100644 index 0000000..8a40f9e --- /dev/null +++ b/packages/fs/dir.js @@ -0,0 +1,192 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.async = exports.sync = exports.validateInput = void 0; +const pathUtil = require("path"); +const fs_1 = require("fs"); +const util_1 = require("util"); +const fs = require("fs"); +const remove_1 = require("./remove"); +const mode_1 = require("./utils/mode"); +const validate_1 = require("./utils/validate"); +const errors_1 = require("./errors"); +const interfaces_1 = require("./interfaces"); +const mkdirp = require("mkdirp"); +const validateInput = (methodName, path, options) => { + const methodSignature = methodName + '(path, [criteria])'; + (0, validate_1.validateArgument)(methodSignature, 'path', path, ['string']); + (0, validate_1.validateOptions)(methodSignature, 'criteria', options, { + empty: ['boolean'], + mode: ['string', 'number'] + }); +}; +exports.validateInput = validateInput; +const defaults = (options) => { + const result = options || {}; + if (typeof result.empty !== 'boolean') { + result.empty = false; + } + if (result.mode !== undefined) { + result.mode = (0, mode_1.normalizeFileMode)(result.mode); + } + return result; +}; +// --------------------------------------------------------- +// Sync +// --------------------------------------------------------- +const dirStatsSync = (path) => { + let _stat; + try { + _stat = (0, fs_1.statSync)(path); + } + catch (err) { + // Detection if path already exists + if (err.code !== interfaces_1.EError.NOEXISTS) { + throw err; + } + } + if (_stat && !_stat.isDirectory()) { + throw (0, errors_1.ErrNoDirectory)(path); + } + return _stat; +}; +function mkdirSync(path, criteria) { + mkdirp.sync(path, { mode: criteria.mode, fs: null }); +} +function checkDirSync(path, _stat, options) { + const check = function () { + if (options.mode !== undefined) { + fs.chmodSync(path, options.mode); + } + }; + const checkEmptiness = function () { + let list; + if (options.empty) { + // Delete everything inside this directory + list = (0, fs_1.readdirSync)(path); + list.forEach(function (filename) { + (0, remove_1.sync)(pathUtil.resolve(path, filename)); + }); + } + }; + check(); + checkEmptiness(); +} +const sync = (path, options) => { + const criteria = defaults(options); + const _stat = dirStatsSync(path); + if (_stat) { + checkDirSync(path, _stat, criteria); + } + else { + mkdirSync(path, criteria); + } +}; +exports.sync = sync; +// --------------------------------------------------------- +// Async +// --------------------------------------------------------- +const promisedStat = (0, util_1.promisify)(fs_1.stat); +const promisedReaddir = (0, util_1.promisify)(fs_1.readdir); +const dirStatAsync = (path) => { + return new Promise((resolve, reject) => { + promisedStat(path) + .then((_stat) => { + if (_stat.isDirectory()) { + resolve(_stat); + } + else { + reject((0, errors_1.ErrNoDirectory)(path)); + } + }) + .catch((err) => (err.code === interfaces_1.EError.NOEXISTS ? resolve(undefined) : reject(err))); + }); +}; +// Delete all files and directores inside given directory +const emptyAsync = (path) => { + return new Promise((resolve, reject) => { + promisedReaddir(path) + .then(function (list) { + const doOne = function (index) { + let subPath; + if (index === list.length) { + resolve(1); + } + else { + subPath = pathUtil.resolve(path, list[index]); + (0, remove_1.async)(subPath).then(() => doOne(index + 1)); + } + }; + doOne(0); + }) + .catch(reject); + }); +}; +const checkMode = function (criteria, _stat, path) { + if (criteria.mode !== undefined) { + return (0, util_1.promisify)(fs.chmod)(path, criteria.mode); + } + return Promise.resolve(null); +}; +const checkDirAsync = (path, _stat, options) => { + return new Promise((resolve, reject) => { + const checkEmptiness = function () { + if (options.empty) { + return emptyAsync(path); + } + return Promise.resolve(); + }; + checkMode(options, _stat, path) + .then(checkEmptiness) + .then(resolve, reject); + }); +}; +const mkdirAsync = (path, criteria) => { + const options = criteria || {}; + return new Promise((resolve, reject) => { + (0, util_1.promisify)(fs.mkdir)(path, options.mode) + .then(resolve) + .catch((err) => { + if (err.code === 'ENOENT') { + // Parent directory doesn't exist. Need to create it first. + mkdirAsync(pathUtil.dirname(path), options) + .then(() => { + // Now retry creating this directory. + return (0, util_1.promisify)(fs.mkdir)(path, options.mode); + }) + .then(resolve) + .catch((err2) => { + if (err2.code === 'EEXIST') { + // Hmm, something other have already created the directory? + // No problem for us. + resolve(1); + } + else { + reject(err2); + } + }); + } + else if (err.code === 'EEXIST') { + // The path already exists. We're fine. + resolve(1); + } + else { + reject(err); + } + }); + }); +}; +const async = (path, passedCriteria) => { + const criteria = defaults(passedCriteria); + return new Promise((resolve, reject) => { + dirStatAsync(path) + .then((_stat) => { + if (_stat !== undefined) { + return checkDirAsync(path, _stat, criteria); + } + return mkdirAsync(path, criteria); + }) + .then(resolve, reject); + }); +}; +exports.async = async; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3JjL2Rpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpQ0FBaUM7QUFDakMsMkJBQWlFO0FBQ2pFLCtCQUFpQztBQUNqQyx5QkFBeUI7QUFDekIscUNBQW9FO0FBQ3BFLHVDQUE2RDtBQUM3RCwrQ0FBcUU7QUFDckUscUNBQTBDO0FBQzFDLDZDQUFzQztBQUN0QyxpQ0FBa0M7QUFPM0IsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFrQixFQUFFLElBQVksRUFBRSxPQUFrQixFQUFFLEVBQUU7SUFDckYsTUFBTSxlQUFlLEdBQUcsVUFBVSxHQUFHLG9CQUFvQixDQUFDO0lBQzFELElBQUEsMkJBQWdCLEVBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzVELElBQUEsMEJBQWUsRUFBQyxlQUFlLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRTtRQUNyRCxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDbEIsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQztLQUMxQixDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFQVyxRQUFBLGFBQWEsaUJBT3hCO0FBRUYsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFrQixFQUFZLEVBQUU7SUFDakQsTUFBTSxNQUFNLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUM3QixJQUFJLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN2QyxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBQSx3QkFBUSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsT0FBTyxN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 \ No newline at end of file diff --git a/packages/fs/dir.js.map b/packages/fs/dir.js.map new file mode 100644 index 0000000..96ce150 --- /dev/null +++ b/packages/fs/dir.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dir.js","sourceRoot":"","sources":["src/dir.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/fs/docs/assets/css/main.css b/packages/fs/docs/assets/css/main.css new file mode 100644 index 0000000..12dff49 --- /dev/null +++ b/packages/fs/docs/assets/css/main.css @@ -0,0 +1,865 @@ +/*! normalize.css v1.1.3 | MIT License | git.io/normalize */ +/* ========================================================================== HTML5 display definitions ========================================================================== */ +/** Correct `block` display not defined in IE 6/7/8/9 and Firefox 3. */ +article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; } + +/** Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. */ +audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; } + +/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */ +audio:not([controls]) { display: none; height: 0; } + +/** Address styling not present in IE 7/8/9, Firefox 3, and Safari 4. Known issue: no IE 6 support. */ +[hidden] { display: none; } + +/* ========================================================================== Base ========================================================================== */ +/** 1. Correct text resizing oddly in IE 6/7 when body `font-size` is set using `em` units. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */ +html { font-size: 100%; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ font-family: sans-serif; } + +/** Address `font-family` inconsistency between `textarea` and other form elements. */ +button, input, select, textarea { font-family: sans-serif; } + +/** Address margins handled incorrectly in IE 6/7. */ +body { margin: 0; } + +/* ========================================================================== Links ========================================================================== */ +/** Address `outline` inconsistency between Chrome and other browsers. */ +a:focus { outline: thin dotted; } +a:active, a:hover { outline: 0; } + +/** Improve readability when focused and also mouse hovered in all browsers. */ +/* ========================================================================== Typography ========================================================================== */ +/** Address font sizes and margins set differently in IE 6/7. Address font sizes within `section` and `article` in Firefox 4+, Safari 5, and Chrome. */ +h1 { font-size: 2em; margin: 0.67em 0; } + +h2 { font-size: 1.5em; margin: 0.83em 0; } + +h3 { font-size: 1.17em; margin: 1em 0; } + +h4, .tsd-index-panel h3 { font-size: 1em; margin: 1.33em 0; } + +h5 { font-size: 0.83em; margin: 1.67em 0; } + +h6 { font-size: 0.67em; margin: 2.33em 0; } + +/** Address styling not present in IE 7/8/9, Safari 5, and Chrome. */ +abbr[title] { border-bottom: 1px dotted; } + +/** Address style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome. */ +b, strong { font-weight: bold; } + +blockquote { margin: 1em 40px; } + +/** Address styling not present in Safari 5 and Chrome. */ +dfn { font-style: italic; } + +/** Address differences between Firefox and other browsers. Known issue: no IE 6/7 normalization. */ +hr { box-sizing: content-box; height: 0; } + +/** Address styling not present in IE 6/7/8/9. */ +mark { background: #ff0; color: #000; } + +/** Address margins set differently in IE 6/7. */ +p, pre { margin: 1em 0; } + +/** Correct font family set oddly in IE 6, Safari 4/5, and Chrome. */ +code, kbd, pre, samp { font-family: monospace, serif; _font-family: "courier new", monospace; font-size: 1em; } + +/** Improve readability of pre-formatted text in all browsers. */ +pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; } + +/** Address CSS quotes not supported in IE 6/7. */ +q { quotes: none; } +q:before, q:after { content: ""; content: none; } + +/** Address `quotes` property not supported in Safari 4. */ +/** Address inconsistent and variable font size in all browsers. */ +small { font-size: 80%; } + +/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */ +sub { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } + +sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; top: -0.5em; } + +sub { bottom: -0.25em; } + +/* ========================================================================== Lists ========================================================================== */ +/** Address margins set differently in IE 6/7. */ +dl, menu, ol, ul { margin: 1em 0; } + +dd { margin: 0 0 0 40px; } + +/** Address paddings set differently in IE 6/7. */ +menu, ol, ul { padding: 0 0 0 40px; } + +/** Correct list images handled incorrectly in IE 7. */ +nav ul, nav ol { list-style: none; list-style-image: none; } + +/* ========================================================================== Embedded content ========================================================================== */ +/** 1. Remove border when inside `a` element in IE 6/7/8/9 and Firefox 3. 2. Improve image quality when scaled in IE 7. */ +img { border: 0; /* 1 */ -ms-interpolation-mode: bicubic; } + +/* 2 */ +/** Correct overflow displayed oddly in IE 9. */ +svg:not(:root) { overflow: hidden; } + +/* ========================================================================== Figures ========================================================================== */ +/** Address margin not present in IE 6/7/8/9, Safari 5, and Opera 11. */ +figure, form { margin: 0; } + +/* ========================================================================== Forms ========================================================================== */ +/** Correct margin displayed oddly in IE 6/7. */ +/** Define consistent border, margin, and padding. */ +fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } + +/** 1. Correct color not being inherited in IE 6/7/8/9. 2. Correct text not wrapping in Firefox 3. 3. Correct alignment displayed oddly in IE 6/7. */ +legend { border: 0; /* 1 */ padding: 0; white-space: normal; /* 2 */ *margin-left: -7px; } + +/* 3 */ +/** 1. Correct font size not being inherited in all browsers. 2. Address margins set differently in IE 6/7, Firefox 3+, Safari 5, and Chrome. 3. Improve appearance and consistency in all browsers. */ +button, input, select, textarea { font-size: 100%; /* 1 */ margin: 0; /* 2 */ vertical-align: baseline; /* 3 */ *vertical-align: middle; } + +/* 3 */ +/** Address Firefox 3+ setting `line-height` on `input` using `!important` in the UA stylesheet. */ +button, input { line-height: normal; } + +/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 6+. Correct `select` style inheritance in Firefox 4+ and Opera. */ +button, select { text-transform: none; } + +/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. 4. Remove inner spacing in IE 7 without affecting normal text inputs. Known issue: inner spacing remains in IE 6. */ +button, html input[type="button"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ *overflow: visible; } + +/* 4 */ +input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ *overflow: visible; } + +/* 4 */ +/** Re-set default cursor for disabled elements. */ +button[disabled], html input[disabled] { cursor: default; } + +/** 1. Address box sizing set to content-box in IE 8/9. 2. Remove excess padding in IE 8/9. 3. Remove excess padding in IE 7. Known issue: excess padding remains in IE 6. */ +input { /* 3 */ } +input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ *height: 13px; /* 3 */ *width: 13px; } +input[type="search"] { -webkit-appearance: textfield; /* 1 */ /* 2 */ box-sizing: content-box; } +input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } + +/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */ +/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */ +/** Remove inner padding and border in Firefox 3+. */ +button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } + +/** 1. Remove default vertical scrollbar in IE 6/7/8/9. 2. Improve readability and alignment in all browsers. */ +textarea { overflow: auto; /* 1 */ vertical-align: top; } + +/* 2 */ +/* ========================================================================== Tables ========================================================================== */ +/** Remove most spacing between table cells. */ +table { border-collapse: collapse; border-spacing: 0; } + +/* Visual Studio-like style based on original C# coloring by Jason Diamond */ +.hljs { display: inline-block; padding: 0.5em; background: white; color: black; } + +.hljs-comment, .hljs-annotation, .hljs-template_comment, .diff .hljs-header, .hljs-chunk, .apache .hljs-cbracket { color: #008000; } + +.hljs-keyword, .hljs-id, .hljs-built_in, .css .smalltalk .hljs-class, .hljs-winutils, .bash .hljs-variable, .tex .hljs-command, .hljs-request, .hljs-status, .nginx .hljs-title { color: #00f; } + +.xml .hljs-tag { color: #00f; } +.xml .hljs-tag .hljs-value { color: #00f; } + +.hljs-string, .hljs-title, .hljs-parent, .hljs-tag .hljs-value, .hljs-rules .hljs-value { color: #a31515; } + +.ruby .hljs-symbol { color: #a31515; } +.ruby .hljs-symbol .hljs-string { color: #a31515; } + +.hljs-template_tag, .django .hljs-variable, .hljs-addition, .hljs-flow, .hljs-stream, .apache .hljs-tag, .hljs-date, .tex .hljs-formula, .coffeescript .hljs-attribute { color: #a31515; } + +.ruby .hljs-string, .hljs-decorator, .hljs-filter .hljs-argument, .hljs-localvars, .hljs-array, .hljs-attr_selector, .hljs-pseudo, .hljs-pi, .hljs-doctype, .hljs-deletion, .hljs-envvar, .hljs-shebang, .hljs-preprocessor, .hljs-pragma, .userType, .apache .hljs-sqbracket, .nginx .hljs-built_in, .tex .hljs-special, .hljs-prompt { color: #2b91af; } + +.hljs-phpdoc, .hljs-javadoc, .hljs-xmlDocTag { color: #808080; } + +.vhdl .hljs-typename { font-weight: bold; } +.vhdl .hljs-string { color: #666666; } +.vhdl .hljs-literal { color: #a31515; } +.vhdl .hljs-attribute { color: #00b0e8; } + +.xml .hljs-attribute { color: #f00; } + +.col > :first-child, .col-1 > :first-child, .col-2 > :first-child, .col-3 > :first-child, .col-4 > :first-child, .col-5 > :first-child, .col-6 > :first-child, .col-7 > :first-child, .col-8 > :first-child, .col-9 > :first-child, .col-10 > :first-child, .col-11 > :first-child, .tsd-panel > :first-child, ul.tsd-descriptions > li > :first-child, .col > :first-child > :first-child, .col-1 > :first-child > :first-child, .col-2 > :first-child > :first-child, .col-3 > :first-child > :first-child, .col-4 > :first-child > :first-child, .col-5 > :first-child > :first-child, .col-6 > :first-child > :first-child, .col-7 > :first-child > :first-child, .col-8 > :first-child > :first-child, .col-9 > :first-child > :first-child, .col-10 > :first-child > :first-child, .col-11 > :first-child > :first-child, .tsd-panel > :first-child > :first-child, ul.tsd-descriptions > li > :first-child > :first-child, .col > :first-child > :first-child > :first-child, .col-1 > :first-child > :first-child > :first-child, .col-2 > :first-child > :first-child > :first-child, .col-3 > :first-child > :first-child > :first-child, .col-4 > :first-child > :first-child > :first-child, .col-5 > :first-child > :first-child > :first-child, .col-6 > :first-child > :first-child > :first-child, .col-7 > :first-child > :first-child > :first-child, .col-8 > :first-child > :first-child > :first-child, .col-9 > :first-child > :first-child > :first-child, .col-10 > :first-child > :first-child > :first-child, .col-11 > :first-child > :first-child > :first-child, .tsd-panel > :first-child > :first-child > :first-child, ul.tsd-descriptions > li > :first-child > :first-child > :first-child { margin-top: 0; } +.col > :last-child, .col-1 > :last-child, .col-2 > :last-child, .col-3 > :last-child, .col-4 > :last-child, .col-5 > :last-child, .col-6 > :last-child, .col-7 > :last-child, .col-8 > :last-child, .col-9 > :last-child, .col-10 > :last-child, .col-11 > :last-child, .tsd-panel > :last-child, ul.tsd-descriptions > li > :last-child, .col > :last-child > :last-child, .col-1 > :last-child > :last-child, .col-2 > :last-child > :last-child, .col-3 > :last-child > :last-child, .col-4 > :last-child > :last-child, .col-5 > :last-child > :last-child, .col-6 > :last-child > :last-child, .col-7 > :last-child > :last-child, .col-8 > :last-child > :last-child, .col-9 > :last-child > :last-child, .col-10 > :last-child > :last-child, .col-11 > :last-child > :last-child, .tsd-panel > :last-child > :last-child, ul.tsd-descriptions > li > :last-child > :last-child, .col > :last-child > :last-child > :last-child, .col-1 > :last-child > :last-child > :last-child, .col-2 > :last-child > :last-child > :last-child, .col-3 > :last-child > :last-child > :last-child, .col-4 > :last-child > :last-child > :last-child, .col-5 > :last-child > :last-child > :last-child, .col-6 > :last-child > :last-child > :last-child, .col-7 > :last-child > :last-child > :last-child, .col-8 > :last-child > :last-child > :last-child, .col-9 > :last-child > :last-child > :last-child, .col-10 > :last-child > :last-child > :last-child, .col-11 > :last-child > :last-child > :last-child, .tsd-panel > :last-child > :last-child > :last-child, ul.tsd-descriptions > li > :last-child > :last-child > :last-child { margin-bottom: 0; } + +.container { max-width: 1200px; margin: 0 auto; padding: 0 40px; } +@media (max-width: 640px) { .container { padding: 0 20px; } } + +.container-main { padding-bottom: 200px; } + +.row { position: relative; margin: 0 -10px; } +.row:after { visibility: hidden; display: block; content: ""; clear: both; height: 0; } + +.col, .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11 { box-sizing: border-box; float: left; padding: 0 10px; } + +.col-1 { width: 8.33333%; } + +.offset-1 { margin-left: 8.33333%; } + +.col-2 { width: 16.66667%; } + +.offset-2 { margin-left: 16.66667%; } + +.col-3 { width: 25%; } + +.offset-3 { margin-left: 25%; } + +.col-4 { width: 33.33333%; } + +.offset-4 { margin-left: 33.33333%; } + +.col-5 { width: 41.66667%; } + +.offset-5 { margin-left: 41.66667%; } + +.col-6 { width: 50%; } + +.offset-6 { margin-left: 50%; } + +.col-7 { width: 58.33333%; } + +.offset-7 { margin-left: 58.33333%; } + +.col-8 { width: 66.66667%; } + +.offset-8 { margin-left: 66.66667%; } + +.col-9 { width: 75%; } + +.offset-9 { margin-left: 75%; } + +.col-10 { width: 83.33333%; } + +.offset-10 { margin-left: 83.33333%; } + +.col-11 { width: 91.66667%; } + +.offset-11 { margin-left: 91.66667%; } + +.tsd-kind-icon { display: block; position: relative; padding-left: 20px; text-indent: -20px; } +.tsd-kind-icon:before { content: ''; display: inline-block; vertical-align: middle; width: 17px; height: 17px; margin: 0 3px 2px 0; background-image: url(../images/icons.png); } +@media (-webkit-min-device-pixel-ratio: 1.5), (min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { .tsd-kind-icon:before { background-image: url(../images/icons@2x.png); background-size: 238px 204px; } } + +.tsd-signature.tsd-kind-icon:before { background-position: 0 -153px; } + +.tsd-kind-object-literal > .tsd-kind-icon:before { background-position: 0px -17px; } +.tsd-kind-object-literal.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -17px; } +.tsd-kind-object-literal.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -17px; } + +.tsd-kind-class > .tsd-kind-icon:before { background-position: 0px -34px; } +.tsd-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -34px; } +.tsd-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -34px; } + +.tsd-kind-class.tsd-has-type-parameter > .tsd-kind-icon:before { background-position: 0px -51px; } +.tsd-kind-class.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -51px; } +.tsd-kind-class.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -51px; } + +.tsd-kind-interface > .tsd-kind-icon:before { background-position: 0px -68px; } +.tsd-kind-interface.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -68px; } +.tsd-kind-interface.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -68px; } + +.tsd-kind-interface.tsd-has-type-parameter > .tsd-kind-icon:before { background-position: 0px -85px; } +.tsd-kind-interface.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -85px; } +.tsd-kind-interface.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -85px; } + +.tsd-kind-module > .tsd-kind-icon:before { background-position: 0px -102px; } +.tsd-kind-module.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -102px; } +.tsd-kind-module.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -102px; } + +.tsd-kind-external-module > .tsd-kind-icon:before { background-position: 0px -102px; } +.tsd-kind-external-module.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -102px; } +.tsd-kind-external-module.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -102px; } + +.tsd-kind-enum > .tsd-kind-icon:before { background-position: 0px -119px; } +.tsd-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -119px; } +.tsd-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -119px; } + +.tsd-kind-enum-member > .tsd-kind-icon:before { background-position: 0px -136px; } +.tsd-kind-enum-member.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -136px; } +.tsd-kind-enum-member.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -136px; } + +.tsd-kind-signature > .tsd-kind-icon:before { background-position: 0px -153px; } +.tsd-kind-signature.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -153px; } +.tsd-kind-signature.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -153px; } + +.tsd-kind-type-alias > .tsd-kind-icon:before { background-position: 0px -170px; } +.tsd-kind-type-alias.tsd-is-protected > .tsd-kind-icon:before { background-position: -17px -170px; } +.tsd-kind-type-alias.tsd-is-private > .tsd-kind-icon:before { background-position: -34px -170px; } + +.tsd-kind-variable > .tsd-kind-icon:before { background-position: -136px -0px; } +.tsd-kind-variable.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -0px; } +.tsd-kind-variable.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -0px; } +.tsd-kind-variable.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -0px; } +.tsd-kind-variable.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -0px; } +.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -0px; } +.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -0px; } +.tsd-kind-variable.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -0px; } +.tsd-kind-variable.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -0px; } +.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -0px; } +.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -0px; } +.tsd-kind-variable.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -0px; } +.tsd-kind-variable.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -0px; } + +.tsd-kind-property > .tsd-kind-icon:before { background-position: -136px -0px; } +.tsd-kind-property.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -0px; } +.tsd-kind-property.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -0px; } +.tsd-kind-property.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -0px; } +.tsd-kind-property.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -0px; } +.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -0px; } +.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -0px; } +.tsd-kind-property.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -0px; } +.tsd-kind-property.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -0px; } +.tsd-kind-property.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -0px; } +.tsd-kind-property.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -0px; } +.tsd-kind-property.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -0px; } +.tsd-kind-property.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -0px; } + +.tsd-kind-get-signature > .tsd-kind-icon:before { background-position: -136px -17px; } +.tsd-kind-get-signature.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -17px; } +.tsd-kind-get-signature.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -17px; } +.tsd-kind-get-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -17px; } + +.tsd-kind-set-signature > .tsd-kind-icon:before { background-position: -136px -34px; } +.tsd-kind-set-signature.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -34px; } +.tsd-kind-set-signature.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -34px; } +.tsd-kind-set-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -34px; } + +.tsd-kind-accessor > .tsd-kind-icon:before { background-position: -136px -51px; } +.tsd-kind-accessor.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -51px; } +.tsd-kind-accessor.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -51px; } +.tsd-kind-accessor.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -51px; } +.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -51px; } +.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -51px; } +.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -51px; } +.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -51px; } +.tsd-kind-accessor.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -51px; } +.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -51px; } +.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -51px; } +.tsd-kind-accessor.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -51px; } +.tsd-kind-accessor.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -51px; } + +.tsd-kind-function > .tsd-kind-icon:before { background-position: -136px -68px; } +.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -68px; } +.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -68px; } +.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -68px; } +.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -68px; } +.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -68px; } +.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -68px; } +.tsd-kind-function.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -68px; } +.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -68px; } +.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -68px; } +.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -68px; } +.tsd-kind-function.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -68px; } +.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -68px; } + +.tsd-kind-method > .tsd-kind-icon:before { background-position: -136px -68px; } +.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -68px; } +.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -68px; } +.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -68px; } +.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -68px; } +.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -68px; } +.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -68px; } +.tsd-kind-method.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -68px; } +.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -68px; } +.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -68px; } +.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -68px; } +.tsd-kind-method.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -68px; } +.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -68px; } + +.tsd-kind-call-signature > .tsd-kind-icon:before { background-position: -136px -68px; } +.tsd-kind-call-signature.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -68px; } +.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -68px; } +.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -68px; } + +.tsd-kind-function.tsd-has-type-parameter > .tsd-kind-icon:before { background-position: -136px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -85px; } +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -85px; } + +.tsd-kind-method.tsd-has-type-parameter > .tsd-kind-icon:before { background-position: -136px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -85px; } +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -85px; } + +.tsd-kind-constructor > .tsd-kind-icon:before { background-position: -136px -102px; } +.tsd-kind-constructor.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -102px; } +.tsd-kind-constructor.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -102px; } +.tsd-kind-constructor.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -102px; } +.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -102px; } +.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -102px; } +.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -102px; } +.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -102px; } +.tsd-kind-constructor.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -102px; } +.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -102px; } +.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -102px; } +.tsd-kind-constructor.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -102px; } +.tsd-kind-constructor.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -102px; } + +.tsd-kind-constructor-signature > .tsd-kind-icon:before { background-position: -136px -102px; } +.tsd-kind-constructor-signature.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -102px; } +.tsd-kind-constructor-signature.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -102px; } +.tsd-kind-constructor-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -102px; } + +.tsd-kind-index-signature > .tsd-kind-icon:before { background-position: -136px -119px; } +.tsd-kind-index-signature.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -119px; } +.tsd-kind-index-signature.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -119px; } +.tsd-kind-index-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -119px; } + +.tsd-kind-event > .tsd-kind-icon:before { background-position: -136px -136px; } +.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -136px; } +.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -136px; } +.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -136px; } +.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -136px; } +.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -136px; } +.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -136px; } +.tsd-kind-event.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -136px; } +.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -136px; } +.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -136px; } +.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -136px; } +.tsd-kind-event.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -136px; } +.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -136px; } + +.tsd-is-static > .tsd-kind-icon:before { background-position: -136px -153px; } +.tsd-is-static.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -153px; } +.tsd-is-static.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -153px; } +.tsd-is-static.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -153px; } +.tsd-is-static.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -153px; } +.tsd-is-static.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -153px; } +.tsd-is-static.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -153px; } +.tsd-is-static.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -153px; } +.tsd-is-static.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -153px; } +.tsd-is-static.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -153px; } +.tsd-is-static.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -153px; } +.tsd-is-static.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -153px; } +.tsd-is-static.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -153px; } + +.tsd-is-static.tsd-kind-function > .tsd-kind-icon:before { background-position: -136px -170px; } +.tsd-is-static.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -170px; } +.tsd-is-static.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -170px; } +.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -170px; } + +.tsd-is-static.tsd-kind-method > .tsd-kind-icon:before { background-position: -136px -170px; } +.tsd-is-static.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -170px; } +.tsd-is-static.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -170px; } +.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -170px; } + +.tsd-is-static.tsd-kind-call-signature > .tsd-kind-icon:before { background-position: -136px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -170px; } +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -170px; } + +.tsd-is-static.tsd-kind-event > .tsd-kind-icon:before { background-position: -136px -187px; } +.tsd-is-static.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before { background-position: -153px -187px; } +.tsd-is-static.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before { background-position: -51px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { background-position: -68px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { background-position: -85px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { background-position: -102px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before { background-position: -170px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { background-position: -187px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { background-position: -119px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface > .tsd-kind-icon:before { background-position: -204px -187px; } +.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { background-position: -221px -187px; } + +.no-transition { -webkit-transition: none !important; transition: none !important; } + +@-webkit-keyframes fade-in { from { opacity: 0; } + to { opacity: 1; } } + +@keyframes fade-in { from { opacity: 0; } + to { opacity: 1; } } +@-webkit-keyframes fade-out { from { opacity: 1; visibility: visible; } + to { opacity: 0; } } +@keyframes fade-out { from { opacity: 1; visibility: visible; } + to { opacity: 0; } } +@-webkit-keyframes fade-in-delayed { 0% { opacity: 0; } + 33% { opacity: 0; } + 100% { opacity: 1; } } +@keyframes fade-in-delayed { 0% { opacity: 0; } + 33% { opacity: 0; } + 100% { opacity: 1; } } +@-webkit-keyframes fade-out-delayed { 0% { opacity: 1; visibility: visible; } + 66% { opacity: 0; } + 100% { opacity: 0; } } +@keyframes fade-out-delayed { 0% { opacity: 1; visibility: visible; } + 66% { opacity: 0; } + 100% { opacity: 0; } } +@-webkit-keyframes shift-to-left { from { -webkit-transform: translate(0, 0); transform: translate(0, 0); } + to { -webkit-transform: translate(-25%, 0); transform: translate(-25%, 0); } } +@keyframes shift-to-left { from { -webkit-transform: translate(0, 0); transform: translate(0, 0); } + to { -webkit-transform: translate(-25%, 0); transform: translate(-25%, 0); } } +@-webkit-keyframes unshift-to-left { from { -webkit-transform: translate(-25%, 0); transform: translate(-25%, 0); } + to { -webkit-transform: translate(0, 0); transform: translate(0, 0); } } +@keyframes unshift-to-left { from { -webkit-transform: translate(-25%, 0); transform: translate(-25%, 0); } + to { -webkit-transform: translate(0, 0); transform: translate(0, 0); } } +@-webkit-keyframes pop-in-from-right { from { -webkit-transform: translate(100%, 0); transform: translate(100%, 0); } + to { -webkit-transform: translate(0, 0); transform: translate(0, 0); } } +@keyframes pop-in-from-right { from { -webkit-transform: translate(100%, 0); transform: translate(100%, 0); } + to { -webkit-transform: translate(0, 0); transform: translate(0, 0); } } +@-webkit-keyframes pop-out-to-right { from { -webkit-transform: translate(0, 0); transform: translate(0, 0); visibility: visible; } + to { -webkit-transform: translate(100%, 0); transform: translate(100%, 0); } } +@keyframes pop-out-to-right { from { -webkit-transform: translate(0, 0); transform: translate(0, 0); visibility: visible; } + to { -webkit-transform: translate(100%, 0); transform: translate(100%, 0); } } +body { background: #fdfdfd; font-family: "Segoe UI", sans-serif; font-size: 16px; color: #222; } + +a { color: #4da6ff; text-decoration: none; } +a:hover { text-decoration: underline; } + +code, pre { font-family: Menlo, Monaco, Consolas, "Courier New", monospace; padding: 0.2em; margin: 0; font-size: 14px; background-color: rgba(0, 0, 0, 0.04); } + +pre { padding: 10px; } +pre code { padding: 0; font-size: 100%; background-color: transparent; } + +.tsd-typography { line-height: 1.333em; } +.tsd-typography ul { list-style: square; padding: 0 0 0 20px; margin: 0; } +.tsd-typography h4, .tsd-typography .tsd-index-panel h3, .tsd-index-panel .tsd-typography h3, .tsd-typography h5, .tsd-typography h6 { font-size: 1em; margin: 0; } +.tsd-typography h5, .tsd-typography h6 { font-weight: normal; } +.tsd-typography p, .tsd-typography ul, .tsd-typography ol { margin: 1em 0; } + +@media (min-width: 901px) and (max-width: 1024px) { html.default .col-content { width: 72%; } + html.default .col-menu { width: 28%; } + html.default .tsd-navigation { padding-left: 10px; } } +@media (max-width: 900px) { html.default .col-content { float: none; width: 100%; } + html.default .col-menu { position: fixed !important; overflow: auto; -webkit-overflow-scrolling: touch; overflow-scrolling: touch; z-index: 1024; top: 0 !important; bottom: 0 !important; left: auto !important; right: 0 !important; width: 100%; padding: 20px 20px 0 0; max-width: 450px; visibility: hidden; background-color: #fff; -webkit-transform: translate(100%, 0); transform: translate(100%, 0); } + html.default .col-menu > *:last-child { padding-bottom: 20px; } + html.default .overlay { content: ""; display: block; position: fixed; z-index: 1023; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.75); visibility: hidden; } + html.default.to-has-menu .overlay { -webkit-animation: fade-in 0.4s; animation: fade-in 0.4s; } + html.default.to-has-menu header, html.default.to-has-menu footer, html.default.to-has-menu .col-content { -webkit-animation: shift-to-left 0.4s; animation: shift-to-left 0.4s; } + html.default.to-has-menu .col-menu { -webkit-animation: pop-in-from-right 0.4s; animation: pop-in-from-right 0.4s; } + html.default.from-has-menu .overlay { -webkit-animation: fade-out 0.4s; animation: fade-out 0.4s; } + html.default.from-has-menu header, html.default.from-has-menu footer, html.default.from-has-menu .col-content { -webkit-animation: unshift-to-left 0.4s; animation: unshift-to-left 0.4s; } + html.default.from-has-menu .col-menu { -webkit-animation: pop-out-to-right 0.4s; animation: pop-out-to-right 0.4s; } + html.default.has-menu body { overflow: hidden; } + html.default.has-menu .overlay { visibility: visible; } + html.default.has-menu header, html.default.has-menu footer, html.default.has-menu .col-content { -webkit-transform: translate(-25%, 0); transform: translate(-25%, 0); } + html.default.has-menu .col-menu { visibility: visible; -webkit-transform: translate(0, 0); transform: translate(0, 0); } } + +.tsd-page-title { padding: 70px 0 20px 0; margin: 0 0 40px 0; background: #fff; box-shadow: 0 0 5px rgba(0, 0, 0, 0.35); } +.tsd-page-title h1 { margin: 0; } + +.tsd-breadcrumb { margin: 0; padding: 0; color: #808080; } +.tsd-breadcrumb a { color: #808080; text-decoration: none; } +.tsd-breadcrumb a:hover { text-decoration: underline; } +.tsd-breadcrumb li { display: inline; } +.tsd-breadcrumb li:after { content: " / "; } + +html.minimal .container { margin: 0; } +html.minimal .container-main { padding-top: 50px; padding-bottom: 0; } +html.minimal .content-wrap { padding-left: 300px; } +html.minimal .tsd-navigation { position: fixed !important; overflow: auto; -webkit-overflow-scrolling: touch; overflow-scrolling: touch; box-sizing: border-box; z-index: 1; left: 0; top: 40px; bottom: 0; width: 300px; padding: 20px; margin: 0; } +html.minimal .tsd-member .tsd-member { margin-left: 0; } +html.minimal .tsd-page-toolbar { position: fixed; z-index: 2; } +html.minimal #tsd-filter .tsd-filter-group { right: 0; -webkit-transform: none; transform: none; } +html.minimal footer { background-color: transparent; } +html.minimal footer .container { padding: 0; } +html.minimal .tsd-generator { padding: 0; } +@media (max-width: 900px) { html.minimal .tsd-navigation { display: none; } + html.minimal .content-wrap { padding-left: 0; } } + +dl.tsd-comment-tags { overflow: hidden; } +dl.tsd-comment-tags dt { clear: both; float: left; padding: 1px 5px; margin: 0 10px 0 0; border-radius: 4px; border: 1px solid #808080; color: #808080; font-size: 0.8em; font-weight: normal; } +dl.tsd-comment-tags dd { margin: 0 0 10px 0; } +dl.tsd-comment-tags p { margin: 0; } + +.tsd-panel.tsd-comment .lead { font-size: 1.1em; line-height: 1.333em; margin-bottom: 2em; } +.tsd-panel.tsd-comment .lead:last-child { margin-bottom: 0; } + +.toggle-protected .tsd-is-private { display: none; } + +.toggle-public .tsd-is-private, .toggle-public .tsd-is-protected, .toggle-public .tsd-is-private-protected { display: none; } + +.toggle-inherited .tsd-is-inherited { display: none; } + +.toggle-only-exported .tsd-is-not-exported { display: none; } + +.toggle-externals .tsd-is-external { display: none; } + +#tsd-filter { position: relative; display: inline-block; height: 40px; vertical-align: bottom; } +.no-filter #tsd-filter { display: none; } +#tsd-filter .tsd-filter-group { display: inline-block; height: 40px; vertical-align: bottom; white-space: nowrap; } +#tsd-filter input { display: none; } +@media (max-width: 900px) { #tsd-filter .tsd-filter-group { display: block; position: absolute; top: 40px; right: 20px; height: auto; background-color: #fff; visibility: hidden; -webkit-transform: translate(50%, 0); transform: translate(50%, 0); box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); } + .has-options #tsd-filter .tsd-filter-group { visibility: visible; } + .to-has-options #tsd-filter .tsd-filter-group { -webkit-animation: fade-in 0.2s; animation: fade-in 0.2s; } + .from-has-options #tsd-filter .tsd-filter-group { -webkit-animation: fade-out 0.2s; animation: fade-out 0.2s; } + #tsd-filter label, #tsd-filter .tsd-select { display: block; padding-right: 20px; } } + +footer { border-top: 1px solid #eee; background-color: #fff; } +footer.with-border-bottom { border-bottom: 1px solid #eee; } +footer .tsd-legend-group { font-size: 0; } +footer .tsd-legend { display: inline-block; width: 25%; padding: 0; font-size: 16px; list-style: none; line-height: 1.333em; vertical-align: top; } +@media (max-width: 900px) { footer .tsd-legend { width: 50%; } } + +.tsd-hierarchy { list-style: square; padding: 0 0 0 20px; margin: 0; } +.tsd-hierarchy .target { font-weight: bold; } + +.tsd-index-panel .tsd-index-content { margin-bottom: -30px !important; } +.tsd-index-panel .tsd-index-section { margin-bottom: 30px !important; } +.tsd-index-panel h3 { margin: 0 -20px 10px -20px; padding: 0 20px 10px 20px; border-bottom: 1px solid #eee; } +.tsd-index-panel ul.tsd-index-list { -webkit-column-count: 3; -moz-column-count: 3; -ms-column-count: 3; -o-column-count: 3; column-count: 3; -webkit-column-gap: 20px; -moz-column-gap: 20px; -ms-column-gap: 20px; -o-column-gap: 20px; column-gap: 20px; padding: 0; list-style: none; line-height: 1.333em; } +@media (max-width: 900px) { .tsd-index-panel ul.tsd-index-list { -webkit-column-count: 1; -moz-column-count: 1; -ms-column-count: 1; -o-column-count: 1; column-count: 1; } } +@media (min-width: 901px) and (max-width: 1024px) { .tsd-index-panel ul.tsd-index-list { -webkit-column-count: 2; -moz-column-count: 2; -ms-column-count: 2; -o-column-count: 2; column-count: 2; } } +.tsd-index-panel ul.tsd-index-list li { -webkit-column-break-inside: avoid; -moz-column-break-inside: avoid; -ms-column-break-inside: avoid; -o-column-break-inside: avoid; column-break-inside: avoid; -webkit-page-break-inside: avoid; -moz-page-break-inside: avoid; -ms-page-break-inside: avoid; -o-page-break-inside: avoid; page-break-inside: avoid; } +.tsd-index-panel a, .tsd-index-panel .tsd-parent-kind-module a { color: #9600ff; } +.tsd-index-panel .tsd-parent-kind-interface a { color: #7da01f; } +.tsd-index-panel .tsd-parent-kind-enum a { color: #cc9900; } +.tsd-index-panel .tsd-parent-kind-class a { color: #4da6ff; } +.tsd-index-panel .tsd-kind-module a { color: #9600ff; } +.tsd-index-panel .tsd-kind-interface a { color: #7da01f; } +.tsd-index-panel .tsd-kind-enum a { color: #cc9900; } +.tsd-index-panel .tsd-kind-class a { color: #4da6ff; } +.tsd-index-panel .tsd-is-private a { color: #808080; } + +.tsd-flag { display: inline-block; padding: 1px 5px; border-radius: 4px; color: #fff; background-color: #808080; text-indent: 0; font-size: 14px; font-weight: normal; } + +.tsd-anchor { position: absolute; top: -100px; } + +.tsd-member { position: relative; } +.tsd-member .tsd-anchor + h3 { margin-top: 0; margin-bottom: 0; border-bottom: none; } + +.tsd-navigation { padding: 0 0 0 40px; } +.tsd-navigation a { display: block; padding-top: 2px; padding-bottom: 2px; border-left: 2px solid transparent; color: #222; text-decoration: none; -webkit-transition: border-left-color 0.1s; transition: border-left-color 0.1s; } +.tsd-navigation a:hover { text-decoration: underline; } +.tsd-navigation ul { margin: 0; padding: 0; list-style: none; } +.tsd-navigation li { padding: 0; } + +.tsd-navigation.primary { padding-bottom: 40px; } +.tsd-navigation.primary a { display: block; padding-top: 6px; padding-bottom: 6px; } +.tsd-navigation.primary ul li a { padding-left: 5px; } +.tsd-navigation.primary ul li li a { padding-left: 25px; } +.tsd-navigation.primary ul li li li a { padding-left: 45px; } +.tsd-navigation.primary ul li li li li a { padding-left: 65px; } +.tsd-navigation.primary ul li li li li li a { padding-left: 85px; } +.tsd-navigation.primary ul li li li li li li a { padding-left: 105px; } +.tsd-navigation.primary > ul { border-bottom: 1px solid #eee; } +.tsd-navigation.primary li { border-top: 1px solid #eee; } +.tsd-navigation.primary li.current > a { font-weight: bold; } +.tsd-navigation.primary li.label span { display: block; padding: 20px 0 6px 5px; color: #808080; } +.tsd-navigation.primary li.globals + li > span, .tsd-navigation.primary li.globals + li > a { padding-top: 20px; } + +.tsd-navigation.secondary ul { -webkit-transition: opacity 0.2s; transition: opacity 0.2s; } +.tsd-navigation.secondary ul li a { padding-left: 25px; } +.tsd-navigation.secondary ul li li a { padding-left: 45px; } +.tsd-navigation.secondary ul li li li a { padding-left: 65px; } +.tsd-navigation.secondary ul li li li li a { padding-left: 85px; } +.tsd-navigation.secondary ul li li li li li a { padding-left: 105px; } +.tsd-navigation.secondary ul li li li li li li a { padding-left: 125px; } +.tsd-navigation.secondary ul.current a { border-left-color: #eee; } +.tsd-navigation.secondary li.focus > a, .tsd-navigation.secondary ul.current li.focus > a { border-left-color: #000; } +.tsd-navigation.secondary li.current { margin-top: 20px; margin-bottom: 20px; border-left-color: #eee; } +.tsd-navigation.secondary li.current > a { font-weight: bold; } + +@media (min-width: 901px) { .menu-sticky-wrap { position: static; } + .no-csspositionsticky .menu-sticky-wrap.sticky { position: fixed; } + .no-csspositionsticky .menu-sticky-wrap.sticky-current { position: fixed; } + .no-csspositionsticky .menu-sticky-wrap.sticky-current ul.before-current, .no-csspositionsticky .menu-sticky-wrap.sticky-current ul.after-current { opacity: 0; } + .no-csspositionsticky .menu-sticky-wrap.sticky-bottom { position: absolute; top: auto !important; left: auto !important; bottom: 0; right: 0; } + .csspositionsticky .menu-sticky-wrap.sticky { position: -webkit-sticky; position: sticky; } + .csspositionsticky .menu-sticky-wrap.sticky-current { position: -webkit-sticky; position: sticky; } } + +.tsd-panel { margin: 20px 0; padding: 20px; background-color: #fff; box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); } +.tsd-panel:empty { display: none; } +.tsd-panel > h1, .tsd-panel > h2, .tsd-panel > h3 { margin: 1.5em -20px 10px -20px; padding: 0 20px 10px 20px; border-bottom: 1px solid #eee; } +.tsd-panel > h1.tsd-before-signature, .tsd-panel > h2.tsd-before-signature, .tsd-panel > h3.tsd-before-signature { margin-bottom: 0; border-bottom: 0; } +.tsd-panel table { display: block; width: 100%; overflow: auto; margin-top: 10px; word-break: normal; word-break: keep-all; } +.tsd-panel table th { font-weight: bold; } +.tsd-panel table th, .tsd-panel table td { padding: 6px 13px; border: 1px solid #ddd; } +.tsd-panel table tr { background-color: #fff; border-top: 1px solid #ccc; } +.tsd-panel table tr:nth-child(2n) { background-color: #f8f8f8; } + +.tsd-panel-group { margin: 60px 0; } +.tsd-panel-group > h1, .tsd-panel-group > h2, .tsd-panel-group > h3 { padding-left: 20px; padding-right: 20px; } + +#tsd-search { -webkit-transition: background-color 0.2s; transition: background-color 0.2s; } +#tsd-search .title { position: relative; z-index: 2; } +#tsd-search .field { position: absolute; left: 0; top: 0; right: 40px; height: 40px; } +#tsd-search .field input { box-sizing: border-box; position: relative; top: -50px; z-index: 1; width: 100%; padding: 0 10px; opacity: 0; outline: 0; border: 0; background: transparent; color: #222; } +#tsd-search .field label { position: absolute; overflow: hidden; right: -40px; } +#tsd-search .field input, #tsd-search .title { -webkit-transition: opacity 0.2s; transition: opacity 0.2s; } +#tsd-search .results { position: absolute; visibility: hidden; top: 40px; width: 100%; margin: 0; padding: 0; list-style: none; box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); } +#tsd-search .results li { padding: 0 10px; background-color: #fdfdfd; } +#tsd-search .results li:nth-child(even) { background-color: #fff; } +#tsd-search .results li.state { display: none; } +#tsd-search .results li.current, #tsd-search .results li:hover { background-color: #eee; } +#tsd-search .results a { display: block; } +#tsd-search .results a:before { top: 10px; } +#tsd-search .results span.parent { color: #808080; font-weight: normal; } +#tsd-search.has-focus { background-color: #eee; } +#tsd-search.has-focus .field input { top: 0; opacity: 1; } +#tsd-search.has-focus .title { z-index: 0; opacity: 0; } +#tsd-search.has-focus .results { visibility: visible; } +#tsd-search.loading .results li.state.loading { display: block; } +#tsd-search.failure .results li.state.failure { display: block; } + +.tsd-signature { margin: 0 0 1em 0; padding: 10px; border: 1px solid #eee; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; } +.tsd-signature.tsd-kind-icon { padding-left: 30px; } +.tsd-signature.tsd-kind-icon:before { top: 10px; left: 10px; } +.tsd-panel > .tsd-signature { margin-left: -20px; margin-right: -20px; border-width: 1px 0; } +.tsd-panel > .tsd-signature.tsd-kind-icon { padding-left: 40px; } +.tsd-panel > .tsd-signature.tsd-kind-icon:before { left: 20px; } + +.tsd-signature-symbol { color: #808080; font-weight: normal; } + +.tsd-signature-type { font-style: italic; font-weight: normal; } + +.tsd-signatures { padding: 0; margin: 0 0 1em 0; border: 1px solid #eee; } +.tsd-signatures .tsd-signature { margin: 0; border-width: 1px 0 0 0; -webkit-transition: background-color 0.1s; transition: background-color 0.1s; } +.tsd-signatures .tsd-signature:first-child { border-top-width: 0; } +.tsd-signatures .tsd-signature.current { background-color: #eee; } +.tsd-signatures.active > .tsd-signature { cursor: pointer; } +.tsd-panel > .tsd-signatures { margin-left: -20px; margin-right: -20px; border-width: 1px 0; } +.tsd-panel > .tsd-signatures .tsd-signature.tsd-kind-icon { padding-left: 40px; } +.tsd-panel > .tsd-signatures .tsd-signature.tsd-kind-icon:before { left: 20px; } +.tsd-panel > a.anchor + .tsd-signatures { border-top-width: 0; margin-top: -20px; } + +ul.tsd-descriptions { position: relative; overflow: hidden; -webkit-transition: height 0.3s; transition: height 0.3s; padding: 0; list-style: none; } +ul.tsd-descriptions.active > .tsd-description { display: none; } +ul.tsd-descriptions.active > .tsd-description.current { display: block; } +ul.tsd-descriptions.active > .tsd-description.fade-in { -webkit-animation: fade-in-delayed 0.3s; animation: fade-in-delayed 0.3s; } +ul.tsd-descriptions.active > .tsd-description.fade-out { -webkit-animation: fade-out-delayed 0.3s; animation: fade-out-delayed 0.3s; position: absolute; display: block; top: 0; left: 0; right: 0; opacity: 0; visibility: hidden; } +ul.tsd-descriptions h4, ul.tsd-descriptions .tsd-index-panel h3, .tsd-index-panel ul.tsd-descriptions h3 { font-size: 16px; margin: 1em 0 0.5em 0; } + +ul.tsd-parameters, ul.tsd-type-parameters { list-style: square; margin: 0; padding-left: 20px; } +ul.tsd-parameters > li.tsd-parameter-siganture, ul.tsd-type-parameters > li.tsd-parameter-siganture { list-style: none; margin-left: -20px; } +ul.tsd-parameters h5, ul.tsd-type-parameters h5 { font-size: 16px; margin: 1em 0 0.5em 0; } +ul.tsd-parameters .tsd-comment, ul.tsd-type-parameters .tsd-comment { margin-top: -0.5em; } + +.tsd-sources { font-size: 14px; color: #808080; margin: 0 0 1em 0; } +.tsd-sources a { color: #808080; text-decoration: underline; } +.tsd-sources ul, .tsd-sources p { margin: 0 !important; } +.tsd-sources ul { list-style: none; padding: 0; } + +.tsd-page-toolbar { position: absolute; z-index: 1; top: 0; left: 0; width: 100%; height: 40px; color: #333; background: #fff; border-bottom: 1px solid #eee; } +.tsd-page-toolbar a { color: #333; text-decoration: none; } +.tsd-page-toolbar a.title { font-weight: bold; } +.tsd-page-toolbar a.title:hover { text-decoration: underline; } +.tsd-page-toolbar .table-wrap { display: table; width: 100%; height: 40px; } +.tsd-page-toolbar .table-cell { display: table-cell; position: relative; white-space: nowrap; line-height: 40px; } +.tsd-page-toolbar .table-cell:first-child { width: 100%; } + +.tsd-widget:before, .tsd-select .tsd-select-label:before, .tsd-select .tsd-select-list li:before { content: ""; display: inline-block; width: 40px; height: 40px; margin: 0 -8px 0 0; background-image: url(../images/widgets.png); background-repeat: no-repeat; text-indent: -1024px; vertical-align: bottom; } +@media (-webkit-min-device-pixel-ratio: 1.5), (min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { .tsd-widget:before, .tsd-select .tsd-select-label:before, .tsd-select .tsd-select-list li:before { background-image: url(../images/widgets@2x.png); background-size: 320px 40px; } } + +.tsd-widget { display: inline-block; overflow: hidden; opacity: 0.6; height: 40px; -webkit-transition: opacity 0.1s, background-color 0.2s; transition: opacity 0.1s, background-color 0.2s; vertical-align: bottom; cursor: pointer; } +.tsd-widget:hover { opacity: 0.8; } +.tsd-widget.active { opacity: 1; background-color: #eee; } +.tsd-widget.no-caption { width: 40px; } +.tsd-widget.no-caption:before { margin: 0; } +.tsd-widget.search:before { background-position: 0 0; } +.tsd-widget.menu:before { background-position: -40px 0; } +.tsd-widget.options:before { background-position: -80px 0; } +.tsd-widget.options, .tsd-widget.menu { display: none; } +@media (max-width: 900px) { .tsd-widget.options, .tsd-widget.menu { display: inline-block; } } +input[type=checkbox] + .tsd-widget:before { background-position: -120px 0; } +input[type=checkbox]:checked + .tsd-widget:before { background-position: -160px 0; } + +.tsd-select { position: relative; display: inline-block; height: 40px; -webkit-transition: opacity 0.1s, background-color 0.2s; transition: opacity 0.1s, background-color 0.2s; vertical-align: bottom; cursor: pointer; } +.tsd-select .tsd-select-label { opacity: 0.6; -webkit-transition: opacity 0.2s; transition: opacity 0.2s; } +.tsd-select .tsd-select-label:before { background-position: -240px 0; } +.tsd-select.active .tsd-select-label { opacity: 0.8; } +.tsd-select.active .tsd-select-list { visibility: visible; opacity: 1; -webkit-transition-delay: 0s; transition-delay: 0s; } +.tsd-select .tsd-select-list { position: absolute; visibility: hidden; top: 40px; left: 0; margin: 0; padding: 0; opacity: 0; list-style: none; box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); -webkit-transition: visibility 0s 0.2s, opacity 0.2s; transition: visibility 0s 0.2s, opacity 0.2s; } +.tsd-select .tsd-select-list li { padding: 0 20px 0 0; background-color: #fdfdfd; } +.tsd-select .tsd-select-list li:before { background-position: 40px 0; } +.tsd-select .tsd-select-list li:nth-child(even) { background-color: #fff; } +.tsd-select .tsd-select-list li:hover { background-color: #eee; } +.tsd-select .tsd-select-list li.selected:before { background-position: -200px 0; } +@media (max-width: 900px) { .tsd-select .tsd-select-list { top: 0; left: auto; right: 100%; margin-right: -5px; } + .tsd-select .tsd-select-label:before { background-position: -280px 0; } } + +img { max-width: 100%; } diff --git a/packages/fs/docs/assets/css/main.css.map b/packages/fs/docs/assets/css/main.css.map new file mode 100644 index 0000000..bc17fe4 --- /dev/null +++ b/packages/fs/docs/assets/css/main.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "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", +"sources": ["../../../../src/default/assets/css/vendors/_normalize.sass","../../../../src/default/assets/css/vendors/_highlight.js.sass","../../../../src/default/assets/css/setup/_mixins.sass","../../../../src/default/assets/css/setup/_grid.sass","../../../../src/default/assets/css/setup/_icons.scss","../../../../src/default/assets/css/setup/_animations.sass","../../../../src/default/assets/css/setup/_typography.sass","../../../../src/default/assets/css/_constants.sass","../../../../src/default/assets/css/layouts/_default.sass","../../../../src/default/assets/css/layouts/_minimal.sass","../../../../src/default/assets/css/elements/_comment.sass","../../../../src/default/assets/css/elements/_filter.sass","../../../../src/default/assets/css/elements/_footer.sass","../../../../src/default/assets/css/elements/_hierarchy.sass","../../../../src/default/assets/css/elements/_index.sass","../../../../src/default/assets/css/elements/_member.sass","../../../../src/default/assets/css/elements/_navigation.sass","../../../../src/default/assets/css/elements/_panel.sass","../../../../src/default/assets/css/elements/_search.sass","../../../../src/default/assets/css/elements/_signatures.sass","../../../../src/default/assets/css/elements/_sources.sass","../../../../src/default/assets/css/elements/_toolbar.sass","../../../../src/default/assets/css/elements/_images.sass"], +"names": [], +"file": "main.css" +} diff --git a/packages/fs/docs/assets/images/icons.png b/packages/fs/docs/assets/images/icons.png new file mode 100644 index 0000000..cb2d115 Binary files /dev/null and b/packages/fs/docs/assets/images/icons.png differ diff --git a/packages/fs/docs/assets/images/icons@2x.png b/packages/fs/docs/assets/images/icons@2x.png new file mode 100644 index 0000000..8932ba2 Binary files /dev/null and b/packages/fs/docs/assets/images/icons@2x.png differ diff --git a/packages/fs/docs/assets/images/widgets.png b/packages/fs/docs/assets/images/widgets.png new file mode 100644 index 0000000..c738053 Binary files /dev/null and b/packages/fs/docs/assets/images/widgets.png differ diff --git a/packages/fs/docs/assets/images/widgets@2x.png b/packages/fs/docs/assets/images/widgets@2x.png new file mode 100644 index 0000000..4bbbd57 Binary files /dev/null and b/packages/fs/docs/assets/images/widgets@2x.png differ diff --git a/packages/fs/docs/assets/js/main.js b/packages/fs/docs/assets/js/main.js new file mode 100644 index 0000000..df4d036 --- /dev/null +++ b/packages/fs/docs/assets/js/main.js @@ -0,0 +1,5 @@ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){function s(a){var b=a.length,c=n.type(a);return"function"!==c&&!n.isWindow(a)&&(!(1!==a.nodeType||!b)||("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a))}function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}function D(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c||"false"!==c&&("null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c)}catch(e){}M.set(a,b,c)}else c=void 0;return c}function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("