0.2.0 - Mid migration

This commit is contained in:
Daniel Mason 2022-04-25 14:47:15 +12:00
parent 139e6a915e
commit 7e38fdbd7d
42393 changed files with 5358157 additions and 62 deletions

339
web/node_modules/tsconfig-paths/CHANGELOG.md generated vendored Normal file
View file

@ -0,0 +1,339 @@
# Change Log
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).
## [Unreleased]
## [3.10.1] - 2021-07-06
### Fixed
- Add register.js to published files
## [3.10.0] - 2021-07-06
### Added
- feat(tsconfig-loader): extends config from node_modules (#106). Thanks to @zorji for this PR!
### Fixed
- Update CHANGELOG.md (#96). Thanks to @OliverJAsh for this PR!
- Fix "bootstraping" typo (#111). Thanks to @KRMisha for this PR!
- Update Readme fixes #116 (#123). Thanks to @benwinding for this PR!
- Fixed typo (#144). Thanks to @mprinc for this PR!
- [TYPO] src/mapping-entry.ts (#145). Thanks to @mprinc for this PR!
- docs(README): fix typos (#156). Thanks to @PiDelport for this PR!
- deps: bump json5 to use type definition provided officially (#158). Thanks to @koba04 for this PR!
- Update tsconfig-loader.ts (#161). Thanks to @fecqs for this PR!
- fix typo (#165). Thanks to @wonda-tea-coffee for this PR!
- Add file extenstion to typings property value (#151). Thanks to @dangrussell for this PR!
## [3.9.0] - 2019-09-12
### Added
- Make extension config override instead of deep merge. See PR [#95](https://github.com/dividab/tsconfig-paths/pull/95) and issue [#94](https://github.com/dividab/tsconfig-paths/issues/94). Thanks to [@OliverJAsh](https://github.com/OliverJAsh) for this addition!
## [3.8.0] - 2019-02-05
### Added
- Add option to avoid adding a match-all rule. See PR [#73](https://github.com/dividab/tsconfig-paths/pull/73) and issue [72](https://github.com/dividab/tsconfig-paths/issues/72). Thanks to [@Swatinem](https://github.com/Swatinem) for this addition!
## [3.7.0] - 2018-11-11
### Added
- Allow cleanup of register(). See PR [#64](https://github.com/dividab/tsconfig-paths/pull/64) and issue [63](https://github.com/dividab/tsconfig-paths/issues/63). Thanks to [@TylorS](https://github.com/TylorS) for this addition!
## [3.6.0] - 2018-09-10
### Added
- Prefer Node's core modules over file modules. See PR [#60](https://github.com/dividab/tsconfig-paths/pull/60) and issue [56](https://github.com/dividab/tsconfig-paths/issues/56). Thanks to @ljani for this addition!
## [3.5.0] - 2018-07-28
### Added
- Add support for trailing commas in tsconfig.json (use JSON5 to parse). See issue [#48](https://github.com/dividab/tsconfig-paths/issues/48), and PR [#58](https://github.com/dividab/tsconfig-paths/pull/58). Thanks to [@jshado1](https://github.com/jshado1) for this addition!
## [3.4.2] - 2018-06-30
### Fixed
- Do not resolve directories, only files, sse issue [#51](https://github.com/dividab/tsconfig-paths/issues/51).
## [3.4.1] - 2018-06-24
### Fixed
- Ignore field name mappings in package.json files that are not paths of existing files [#46](https://github.com/dividab/tsconfig-paths/pull/45). Thanks to [@christoffer](https://github.com/christoffer) for this fix!
## [3.4.0] - 2018-06-12
### Added
- Add support for providing a list of field names to try instead of just using "main", [#45](https://github.com/dividab/tsconfig-paths/pull/45). Thanks to [@christoffer-dropbox](https://github.com/christoffer-dropbox) for this addition!
## [3.3.2] - 2018-05-07
### Fixed
- Adding json file extension to extends property, [#40](https://github.com/dividab/tsconfig-paths/pull/40). Thanks to [@cwhite-connectfirst](https://github.com/cwhite-connectfirst) for this fixing this!
## [3.3.1] - 2018-04-17
### Fixed
- Fix project undefined error when calling register, [#37](https://github.com/dividab/tsconfig-paths/issues/37). Thanks to [@natedanner](https://github.com/natedanner) for this fixing this!
## [3.3.0] - 2018-04-14
### Added
- Add possibility to indicate explicitly tsconfig location, [#35](https://github.com/dividab/tsconfig-paths/issues/35). Thanks to [@procopenco](https://github.com/procopenco) for this adding this!
## [3.2.0] - 2018-03-31
### Added
- Added support for passing a filename as cwd, see issue [#31](https://github.com/dividab/tsconfig-paths/issues/31) and PR [#32](https://github.com/dividab/tsconfig-paths/pull/32). Thanks to [@amodm](https://github.com/amodm) for this adding this!
## [3.1.3] - 2018-03-14
### Fixed
- Fix async recursion, see [#30](https://github.com/dividab/tsconfig-paths/pull/30). Thanks to [@Nayni](https://github.com/Nayni) for this fix!
## [3.1.2] - 2018-03-13
### Fixed
- Fix a forgotten return when doneCallback is invoked, see [#29](https://github.com/dividab/tsconfig-paths/pull/29). Thanks to [@Nayni](https://github.com/Nayni) for this fix!
## [3.1.1] - 2018-01-13
### Fixed
- Fix read json async when it does not exist
## [3.1.0] - 2018-01-13
### Added
- Implement default async json reader function.
## [3.0.0] - 2018-01-13
### Changed
- Remove parameter `absoluteSourceFileName` from the `MatchPath` and `matchFromAbsolutePaths` functions. It was not used internally.
- `matchFromAbsolutePaths` now accepts a pre-sorted array of `MappingEntry`s instead of a dictionary. This was done so the sorting could be done once which should give better performance.
### Added
- `createMatchPathAsync`, creates an async version of the `MatchPath` function. Can be used for example by webpack plugins.
- `matchFromAbsolutePathsAsync`, async version of `matchFromAbsolutePaths`.
## [2.7.3]
### Fixed
- Only resolve path if tsconfig present [#25](https://github.com/dividab/tsconfig-paths/pull/25). Thanks to @nicoschoenmaker for the PR.
## [2.7.2]
### Fixed
- Return absolute path to tsconfig.json.
## [2.7.1]
### Fixed
- Remove left over console.log.
## [2.7.0]
### Added
- Support `baseUrl` to exist in base tsconfig.json when using `extends`, see [#23](https://github.com/dividab/tsconfig-paths/issues/23).
## [2.6.0]
### Added
- Add `baseUrl` and `configFileAbsolutePath` to the result of `loadConfig`.
## [2.5.0]
### Added
- New function in Programmatic API `loadConfig`.
## [2.4.3]
### Fixed
- Export MatchPth typing.
## [2.4.2]
### Fixed
- Add missing types field in package.json.
## [2.4.1]
### Fixed
- Include declaration files. Fixes [#22](https://github.com/dividab/tsconfig-paths/issues/22).
## [2.4.0]
### Changed
- Removed dependency for package `tsconfig`.
### Fixed
- Support for config inheritance with `extends`. Fixes [#17](https://github.com/dividab/tsconfig-paths/issues/17).
## [2.2.0]
### Fixed
- Fixed issue [#7](https://github.com/dividab/tsconfig-paths/issues/7).
## [2.1.2]
### Fixed
- Fixed issue [#6](https://github.com/dividab/tsconfig-paths/issues/6).
## [2.1.1]
### Fixed
- Fixed issue [#4](https://github.com/dividab/tsconfig-paths/issues/4)
## [2.1.0]
### Fixed
- Fixed issue [#3](https://github.com/dividab/tsconfig-paths/issues/3)
## [2.0.0]
### Added
- We now look at `process.env.TS_NODE_PROJECT`
- Functionality to bootstrap tsconfig-paths. Documentation in [README](https://github.com/dividab/tsconfig-paths/blob/master/README.md)
### Changed
- Changed signature for `createMatchPath`. Now only takes absoluteUrl and paths.
## [1.1.0]
### Added
- More explanation to readme.
- Match all extensions in require.extensions.
- Match longest pattern prefix first as typesript does.
- Match file in main field of package.json.
- Check for index files explicitly.
## [1.0.0] - 2016-12-30
- First stable release.
## [0.4.0] - 2016-12-30
### Changed
- Renamed project to `tsocnfig-paths`.
## [0.3.0] - 2016-12-30
### Added
- API documentation.
- `createMatchPath` function.
- `matchFromAbsolutePaths` function.
### Removed
- `findPath` function.
## [0.2.1] - 2016-12-29
### Fixed
- `tsconfig-paths/register` was not available.
## [0.2.0] - 2016-12-29
### Fixed
- Paths for files in sub-dirs.
### Added
- Programmatic use.
## [0.1.2] - 2016-12-28
### Fixed
- Fixed wrong name of the package in README.
- Add missing files on publish.
## [0.1.1] - 2016-12-28
### Added
- Loading of tsconfig.
- Example.
- Publish scripts.
## [0.1.0] - 2016-12-28
- Initial version.
[unreleased]: https://github.com/dividab/tsconfig-paths/compare/v3.9.0...master
[3.9.0]: https://github.com/dividab/tsconfig-paths/compare/v3.8.0...v3.9.0
[3.8.0]: https://github.com/dividab/tsconfig-paths/compare/3.7.0...3.8.0
[3.7.0]: https://github.com/dividab/tsconfig-paths/compare/3.6.0...3.7.0
[3.6.0]: https://github.com/dividab/tsconfig-paths/compare/3.5.0...3.6.0
[3.5.0]: https://github.com/dividab/tsconfig-paths/compare/3.4.2...3.5.0
[3.4.2]: https://github.com/dividab/tsconfig-paths/compare/3.4.1...3.4.2
[3.4.1]: https://github.com/dividab/tsconfig-paths/compare/3.4.0...3.4.1
[3.4.0]: https://github.com/dividab/tsconfig-paths/compare/3.3.2...3.4.0
[3.3.2]: https://github.com/dividab/tsconfig-paths/compare/3.3.1...3.3.2
[3.3.1]: https://github.com/dividab/tsconfig-paths/compare/3.3.0...3.3.1
[3.3.0]: https://github.com/dividab/tsconfig-paths/compare/3.2.0...3.3.0
[3.2.0]: https://github.com/dividab/tsconfig-paths/compare/3.1.3...3.2.0
[3.1.3]: https://github.com/dividab/tsconfig-paths/compare/3.1.2...3.1.3
[3.1.2]: https://github.com/dividab/tsconfig-paths/compare/3.1.1...3.1.2
[3.1.1]: https://github.com/dividab/tsconfig-paths/compare/3.1.0...3.1.1
[3.1.0]: https://github.com/dividab/tsconfig-paths/compare/3.0.0...3.1.0
[3.0.0]: https://github.com/dividab/tsconfig-paths/compare/2.7.3...3.0.0
[2.7.3]: https://github.com/dividab/tsconfig-paths/compare/2.7.2...2.7.3
[2.7.2]: https://github.com/dividab/tsconfig-paths/compare/2.7.1...2.7.2
[2.7.1]: https://github.com/dividab/tsconfig-paths/compare/2.7.0...2.7.1
[2.7.0]: https://github.com/dividab/tsconfig-paths/compare/2.6.0...2.7.0
[2.6.0]: https://github.com/dividab/tsconfig-paths/compare/2.5.0...2.6.0
[2.5.0]: https://github.com/dividab/tsconfig-paths/compare/2.4.3...2.5.0
[2.4.3]: https://github.com/dividab/tsconfig-paths/compare/2.4.2...2.4.3
[2.4.2]: https://github.com/dividab/tsconfig-paths/compare/2.4.1...2.4.2
[2.4.1]: https://github.com/dividab/tsconfig-paths/compare/2.4.0...2.4.1
[2.4.0]: https://github.com/dividab/tsconfig-paths/compare/2.2.0...2.4.0
[2.2.0]: https://github.com/dividab/tsconfig-paths/compare/2.1.2...2.2.0
[2.1.2]: https://github.com/dividab/tsconfig-paths/compare/2.1.1...2.1.2
[2.1.1]: https://github.com/dividab/tsconfig-paths/compare/2.1.0...2.1.1

21
web/node_modules/tsconfig-paths/LICENSE generated vendored Normal file
View file

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2016 Jonas Kello
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

262
web/node_modules/tsconfig-paths/README.md generated vendored Normal file
View file

@ -0,0 +1,262 @@
# tsconfig-paths
[![npm version][version-image]][version-url]
[![travis build][travis-image]][travis-url]
[![Coverage Status][codecov-image]][codecov-url]
[![MIT license][license-image]][license-url]
[![code style: prettier][prettier-image]][prettier-url]
Use this to load modules whose location is specified in the `paths` section of `tsconfig.json`. Both loading at run-time and via API are supported.
Typescript by default mimics the Node.js runtime resolution strategy of modules. But it also allows the use of [path mapping](https://www.typescriptlang.org/docs/handbook/module-resolution.html) which allows arbitrary module paths (that doesn't start with "/" or ".") to be specified and mapped to physical paths in the filesystem. The typescript compiler can resolve these paths from `tsconfig` so it will compile OK. But if you then try to execute the compiled files with node (or ts-node), it will only look in the `node_modules` folders all the way up to the root of the filesystem and thus will not find the modules specified by `paths` in `tsconfig`.
If you require this package's `tsconfig-paths/register` module it will read the `paths` from `tsconfig.json` and convert node's module loading calls into to physical file paths that node can load.
## How to install
```
yarn add --dev tsconfig-paths
```
or
```
npm install --save-dev tsconfig-paths
```
## How to use
### With node
`node -r tsconfig-paths/register main.js`
### With ts-node
`ts-node -r tsconfig-paths/register main.ts`
If `process.env.TS_NODE_PROJECT` is set it will be used to resolved tsconfig.json
### With webpack
For webpack please use the [tsconfig-paths-webpack-plugin](https://github.com/dividab/tsconfig-paths-webpack-plugin).
### With mocha and ts-node
As of Mocha >= 4.0.0 the `--compiler` was [deprecated](https://github.com/mochajs/mocha/wiki/compilers-deprecation). Instead `--require` should be used. You also have to specify a glob that includes `.ts` files because mocha looks after files with `.js` extension by default.
```bash
mocha -r ts-node/register -r tsconfig-paths/register "test/**/*.ts"
```
### With other commands
As long as the command has something similar to a `--require` option that can load a module before it starts, tsconfig-paths should be able to work with it.
### With `ts-node` and VSCode
The following is an example configuration for the `.vscode/launch.json`.
```js
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Functions",
"request": "launch",
"type": "node",
"runtimeArgs": [
"-r",
"${workspaceFolder}/functions/node_modules/ts-node/register",
"-r",
"${workspaceFolder}/functions/node_modules/tsconfig-paths/register"
],
"args": ["${workspaceFolder}/functions/src/index.ts"],
"cwd": "${workspaceFolder}",
"protocol": "inspector",
"env": {
"NODE_ENV": "development",
"TS_NODE_PROJECT": "${workspaceFolder}/functions/tsconfig.json"
},
"outFiles": ["${workspaceFolder}/functions/lib/**/*.js"]
}
]
}
```
## Bootstrapping with explicit params
If you want more granular control over tsconfig-paths you can bootstrap it. This can be useful if you for instance have compiled with `tsc` to another directory where `tsconfig.json` doesn't exists.
```javascript
const tsConfig = require("./tsconfig.json");
const tsConfigPaths = require("tsconfig-paths");
const baseUrl = "./"; // Either absolute or relative path. If relative it's resolved to current working directory.
const cleanup = tsConfigPaths.register({
baseUrl,
paths: tsConfig.compilerOptions.paths,
});
// When path registration is no longer needed
cleanup();
```
Then run with:
`node -r ./tsconfig-paths-bootstrap.js main.js`
## Configuration Options
You can set options by passing them before the script path, via programmatic usage or via environment variables.
```bash
ts-node --project customLocation/tsconfig.json -r tsconfig-paths/register "test/**/*.ts"
```
### CLI and Programmatic Options
_Environment variable denoted in parentheses._
- `-P, --project [path]` Path to TypeScript JSON project file (`TS_NODE_PROJECT`)
## Config loading process
1. Use explicit params passed to register
2. Use `process.env.TS_NODE_PROJECT` to resolve tsConfig.json and the specified baseUrl and paths.
3. Resolves tsconfig.json from current working directory and the specified baseUrl and paths.
## Programmatic use
The public API consists of these functions:
- [register](#register)
- [loadConfig](#loadConfig)
- [createMatchPath](#createMatchPath) / [createMatchPathAsync](#createMatchPathAsync)
- [matchFromAbsolutePaths](#matchFromAbsolutePaths) / [matchFromAbsolutePathsAsync](#matchFromAbsolutePathsAsync)
### register
```typescript
export interface ExplicitParams {
baseUrl: string;
paths: { [key: string]: Array<string> };
mainFields?: Array<string>;
addMatchAll?: boolean;
}
/**
* Installs a custom module load function that can adhere to paths in tsconfig.
*/
export function register(explicitParams: ExplicitParams): () => void;
```
This function will patch the node's module loading so it will look for modules in paths specified by tsconfig.json.
A function is returned for you to reinstate Node's original module loading.
### loadConfig
```typescript
export function loadConfig(cwd: string = process.cwd()): ConfigLoaderResult;
export type ConfigLoaderResult =
| ConfigLoaderSuccessResult
| ConfigLoaderFailResult;
export interface ConfigLoaderSuccessResult {
resultType: "success";
absoluteBaseUrl: string;
paths: { [key: string]: Array<string> };
}
export interface ConfigLoaderFailResult {
resultType: "failed";
message: string;
}
```
This function loads the tsconfig.json. It will start searching from the specified `cwd` directory. Passing the tsconfig.json file directly instead of a directory also works.
### createMatchPath
```typescript
/**
* Function that can match a path
*/
export interface MatchPath {
(
requestedModule: string,
readJson?: Filesystem.ReadJsonSync,
fileExists?: (name: string) => boolean,
extensions?: ReadonlyArray<string>
): string | undefined;
}
/**
* Creates a function that can resolve paths according to tsconfig paths property.
* @param absoluteBaseUrl Absolute version of baseUrl as specified in tsconfig.
* @param paths The paths as specified in tsconfig.
* @param mainFields A list of package.json field names to try when resolving module files.
* @param addMatchAll Add a match-all "*" rule if none is present
* @returns a function that can resolve paths.
*/
export function createMatchPath(
absoluteBaseUrl: string,
paths: { [key: string]: Array<string> },
mainFields: string[] = ["main"],
addMatchAll: boolean = true
): MatchPath {
```
The `createMatchPath` function will create a function that can match paths. It accepts `baseUrl` and `paths` directly as they are specified in tsconfig and will handle resolving paths to absolute form. The created function has the signature specified by the type `MatchPath` above.
### matchFromAbsolutePaths
```typescript
/**
* Finds a path from tsconfig that matches a module load request.
* @param absolutePathMappings The paths to try as specified in tsconfig but resolved to absolute form.
* @param requestedModule The required module name.
* @param readJson Function that can read json from a path (useful for testing).
* @param fileExists Function that checks for existence of a file at a path (useful for testing).
* @param extensions File extensions to probe for (useful for testing).
* @param mainFields A list of package.json field names to try when resolving module files.
* @returns the found path, or undefined if no path was found.
*/
export function matchFromAbsolutePaths(
absolutePathMappings: ReadonlyArray<MappingEntry.MappingEntry>,
requestedModule: string,
readJson: Filesystem.ReadJsonSync = Filesystem.readJsonFromDiskSync,
fileExists: Filesystem.FileExistsSync = Filesystem.fileExistsSync,
extensions: Array<string> = Object.keys(require.extensions),
mainFields: string[] = ["main"]
): string | undefined {
```
This function is lower level and requires that the paths as already been resolved to absolute form and sorted in correct order into an array.
### createMatchPathAsync
This is the async version of `createMatchPath`. It has the same signature but with a callback parameter for the result.
### matchFromAbsolutePathsAsync
This is the async version of `matchFromAbsolutePaths`. It has the same signature but with a callback parameter for the result.
## How to publish
```
yarn version --patch
yarn version --minor
yarn version --major
```
[version-image]: https://img.shields.io/npm/v/tsconfig-paths.svg?style=flat
[version-url]: https://www.npmjs.com/package/tsconfig-paths
[travis-image]: https://travis-ci.com/dividab/tsconfig-paths.svg?branch=master&style=flat
[travis-url]: https://travis-ci.com/dividab/tsconfig-paths
[codecov-image]: https://codecov.io/gh/dividab/tsconfig-paths/branch/master/graph/badge.svg
[codecov-url]: https://codecov.io/gh/dividab/tsconfig-paths
[license-image]: https://img.shields.io/github/license/dividab/tsconfig-paths.svg?style=flat
[license-url]: https://opensource.org/licenses/MIT
[prettier-image]: https://img.shields.io/badge/code_style-prettier-ff69b4.svg
[prettier-url]: https://github.com/prettier/prettier

33
web/node_modules/tsconfig-paths/lib/config-loader.d.ts generated vendored Normal file
View file

@ -0,0 +1,33 @@
import * as TsConfigLoader from "./tsconfig-loader";
export interface ExplicitParams {
baseUrl: string;
paths: {
[key: string]: Array<string>;
};
mainFields?: Array<string>;
addMatchAll?: boolean;
}
export declare type TsConfigLoader = (params: TsConfigLoader.TsConfigLoaderParams) => TsConfigLoader.TsConfigLoaderResult;
export interface ConfigLoaderParams {
cwd: string;
explicitParams?: ExplicitParams;
tsConfigLoader?: TsConfigLoader;
}
export interface ConfigLoaderSuccessResult {
resultType: "success";
configFileAbsolutePath: string;
baseUrl: string;
absoluteBaseUrl: string;
paths: {
[key: string]: Array<string>;
};
mainFields?: Array<string>;
addMatchAll?: boolean;
}
export interface ConfigLoaderFailResult {
resultType: "failed";
message: string;
}
export declare type ConfigLoaderResult = ConfigLoaderSuccessResult | ConfigLoaderFailResult;
export declare function loadConfig(cwd?: string): ConfigLoaderResult;
export declare function configLoader({ cwd, explicitParams, tsConfigLoader, }: ConfigLoaderParams): ConfigLoaderResult;

55
web/node_modules/tsconfig-paths/lib/config-loader.js generated vendored Normal file
View file

@ -0,0 +1,55 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var TsConfigLoader = require("./tsconfig-loader");
var path = require("path");
var options_1 = require("./options");
function loadConfig(cwd) {
if (cwd === void 0) { cwd = options_1.options.cwd; }
return configLoader({ cwd: cwd });
}
exports.loadConfig = loadConfig;
function configLoader(_a) {
var cwd = _a.cwd, explicitParams = _a.explicitParams, _b = _a.tsConfigLoader, tsConfigLoader = _b === void 0 ? TsConfigLoader.tsConfigLoader : _b;
if (explicitParams) {
// tslint:disable-next-line:no-shadowed-variable
var absoluteBaseUrl_1 = path.isAbsolute(explicitParams.baseUrl)
? explicitParams.baseUrl
: path.join(cwd, explicitParams.baseUrl);
return {
resultType: "success",
configFileAbsolutePath: "",
baseUrl: explicitParams.baseUrl,
absoluteBaseUrl: absoluteBaseUrl_1,
paths: explicitParams.paths,
mainFields: explicitParams.mainFields,
addMatchAll: explicitParams.addMatchAll,
};
}
// Load tsconfig and create path matching function
var loadResult = tsConfigLoader({
cwd: cwd,
getEnv: function (key) { return process.env[key]; },
});
if (!loadResult.tsConfigPath) {
return {
resultType: "failed",
message: "Couldn't find tsconfig.json",
};
}
if (!loadResult.baseUrl) {
return {
resultType: "failed",
message: "Missing baseUrl in compilerOptions",
};
}
var tsConfigDir = path.dirname(loadResult.tsConfigPath);
var absoluteBaseUrl = path.join(tsConfigDir, loadResult.baseUrl);
return {
resultType: "success",
configFileAbsolutePath: loadResult.tsConfigPath,
baseUrl: loadResult.baseUrl,
absoluteBaseUrl: absoluteBaseUrl,
paths: loadResult.paths || {},
};
}
exports.configLoader = configLoader;

33
web/node_modules/tsconfig-paths/lib/filesystem.d.ts generated vendored Normal file
View file

@ -0,0 +1,33 @@
/**
* Typing for the fields of package.json we care about
*/
export interface PackageJson {
[key: string]: string;
}
/**
* A function that json from a file
*/
export interface ReadJsonSync {
(packageJsonPath: string): any | undefined;
}
export interface FileExistsSync {
(name: string): boolean;
}
export interface FileExistsAsync {
(path: string, callback: (err?: Error, exists?: boolean) => void): void;
}
export interface ReadJsonAsyncCallback {
(err?: Error, content?: any): void;
}
export interface ReadJsonAsync {
(path: string, callback: ReadJsonAsyncCallback): void;
}
export declare function fileExistsSync(path: string): boolean;
/**
* Reads package.json from disk
* @param file Path to package.json
*/
export declare function readJsonFromDiskSync(packageJsonPath: string): any | undefined;
export declare function readJsonFromDiskAsync(path: string, callback: (err?: Error, content?: any) => void): void;
export declare function fileExistsAsync(path2: string, callback2: (err?: Error, exists?: boolean) => void): void;
export declare function removeExtension(path: string): string;

53
web/node_modules/tsconfig-paths/lib/filesystem.js generated vendored Normal file
View file

@ -0,0 +1,53 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var fs = require("fs");
function fileExistsSync(path) {
try {
var stats = fs.statSync(path);
return stats.isFile();
}
catch (err) {
// If error, assume file did not exist
return false;
}
}
exports.fileExistsSync = fileExistsSync;
/**
* Reads package.json from disk
* @param file Path to package.json
*/
// tslint:disable-next-line:no-any
function readJsonFromDiskSync(packageJsonPath) {
if (!fs.existsSync(packageJsonPath)) {
return undefined;
}
return require(packageJsonPath);
}
exports.readJsonFromDiskSync = readJsonFromDiskSync;
function readJsonFromDiskAsync(path,
// tslint:disable-next-line:no-any
callback) {
fs.readFile(path, "utf8", function (err, result) {
// If error, assume file did not exist
if (err || !result) {
return callback();
}
var json = JSON.parse(result);
return callback(undefined, json);
});
}
exports.readJsonFromDiskAsync = readJsonFromDiskAsync;
function fileExistsAsync(path2, callback2) {
fs.stat(path2, function (err, stats) {
if (err) {
// If error assume file does not exist
return callback2(undefined, false);
}
callback2(undefined, stats ? stats.isFile() : false);
});
}
exports.fileExistsAsync = fileExistsAsync;
function removeExtension(path) {
return path.substring(0, path.lastIndexOf(".")) || path;
}
exports.removeExtension = removeExtension;

5
web/node_modules/tsconfig-paths/lib/index.d.ts generated vendored Normal file
View file

@ -0,0 +1,5 @@
export { createMatchPath, matchFromAbsolutePaths, MatchPath, } from "./match-path-sync";
export { createMatchPathAsync, matchFromAbsolutePathsAsync, MatchPathAsync, } from "./match-path-async";
export { register } from "./register";
export { loadConfig, ConfigLoaderResult, ConfigLoaderSuccessResult, ConfigLoaderFailResult, } from "./config-loader";
export { ReadJsonSync, ReadJsonAsync, FileExistsSync, FileExistsAsync, } from "./filesystem";

13
web/node_modules/tsconfig-paths/lib/index.js generated vendored Normal file
View file

@ -0,0 +1,13 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
// register is used from register.js in root dir
var match_path_sync_1 = require("./match-path-sync");
exports.createMatchPath = match_path_sync_1.createMatchPath;
exports.matchFromAbsolutePaths = match_path_sync_1.matchFromAbsolutePaths;
var match_path_async_1 = require("./match-path-async");
exports.createMatchPathAsync = match_path_async_1.createMatchPathAsync;
exports.matchFromAbsolutePathsAsync = match_path_async_1.matchFromAbsolutePathsAsync;
var register_1 = require("./register");
exports.register = register_1.register;
var config_loader_1 = require("./config-loader");
exports.loadConfig = config_loader_1.loadConfig;

17
web/node_modules/tsconfig-paths/lib/mapping-entry.d.ts generated vendored Normal file
View file

@ -0,0 +1,17 @@
export interface MappingEntry {
readonly pattern: string;
readonly paths: ReadonlyArray<string>;
}
export interface Paths {
readonly [key: string]: ReadonlyArray<string>;
}
/**
* Converts an absolute baseUrl and paths to an array of absolute mapping entries.
* The array is sorted by longest prefix.
* Having an array with entries allows us to keep a sorting order rather than
* sort by keys each time we use the mappings.
* @param absoluteBaseUrl
* @param paths
* @param addMatchAll
*/
export declare function getAbsoluteMappingEntries(absoluteBaseUrl: string, paths: Paths, addMatchAll: boolean): ReadonlyArray<MappingEntry>;

51
web/node_modules/tsconfig-paths/lib/mapping-entry.js generated vendored Normal file
View file

@ -0,0 +1,51 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var path = require("path");
/**
* Converts an absolute baseUrl and paths to an array of absolute mapping entries.
* The array is sorted by longest prefix.
* Having an array with entries allows us to keep a sorting order rather than
* sort by keys each time we use the mappings.
* @param absoluteBaseUrl
* @param paths
* @param addMatchAll
*/
function getAbsoluteMappingEntries(absoluteBaseUrl, paths, addMatchAll) {
// Resolve all paths to absolute form once here, and sort them by
// longest prefix once here, this saves time on each request later.
// We need to put them in an array to preserve the sorting order.
var sortedKeys = sortByLongestPrefix(Object.keys(paths));
var absolutePaths = [];
for (var _i = 0, sortedKeys_1 = sortedKeys; _i < sortedKeys_1.length; _i++) {
var key = sortedKeys_1[_i];
absolutePaths.push({
pattern: key,
paths: paths[key].map(function (pathToResolve) {
return path.join(absoluteBaseUrl, pathToResolve);
}),
});
}
// If there is no match-all path specified in the paths section of tsconfig, then try to match
// all paths relative to baseUrl, this is how typescript works.
if (!paths["*"] && addMatchAll) {
absolutePaths.push({
pattern: "*",
paths: [absoluteBaseUrl.replace(/\/$/, "") + "/*"],
});
}
return absolutePaths;
}
exports.getAbsoluteMappingEntries = getAbsoluteMappingEntries;
/**
* Sort path patterns.
* If a module name can be matched with multiple patterns then pattern with the longest prefix will be picked.
*/
function sortByLongestPrefix(arr) {
return arr
.concat()
.sort(function (a, b) { return getPrefixLength(b) - getPrefixLength(a); });
}
function getPrefixLength(pattern) {
var prefixLength = pattern.indexOf("*");
return pattern.substr(0, prefixLength).length;
}

View file

@ -0,0 +1,21 @@
import * as MappingEntry from "./mapping-entry";
import * as Filesystem from "./filesystem";
/**
* Function that can match a path async
*/
export interface MatchPathAsync {
(requestedModule: string, readJson: Filesystem.ReadJsonAsync | undefined, fileExists: Filesystem.FileExistsAsync | undefined, extensions: ReadonlyArray<string> | undefined, callback: MatchPathAsyncCallback): void;
}
export interface MatchPathAsyncCallback {
(err?: Error, path?: string): void;
}
/**
* See the sync version for docs.
*/
export declare function createMatchPathAsync(absoluteBaseUrl: string, paths: {
[key: string]: Array<string>;
}, mainFields?: string[], addMatchAll?: boolean): MatchPathAsync;
/**
* See the sync version for docs.
*/
export declare function matchFromAbsolutePathsAsync(absolutePathMappings: ReadonlyArray<MappingEntry.MappingEntry>, requestedModule: string, readJson: Filesystem.ReadJsonAsync | undefined, fileExists: Filesystem.FileExistsAsync | undefined, extensions: ReadonlyArray<string> | undefined, callback: MatchPathAsyncCallback, mainFields?: string[]): void;

113
web/node_modules/tsconfig-paths/lib/match-path-async.js generated vendored Normal file
View file

@ -0,0 +1,113 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var path = require("path");
var TryPath = require("./try-path");
var MappingEntry = require("./mapping-entry");
var Filesystem = require("./filesystem");
/**
* See the sync version for docs.
*/
function createMatchPathAsync(absoluteBaseUrl, paths, mainFields, addMatchAll) {
if (mainFields === void 0) { mainFields = ["main"]; }
if (addMatchAll === void 0) { addMatchAll = true; }
var absolutePaths = MappingEntry.getAbsoluteMappingEntries(absoluteBaseUrl, paths, addMatchAll);
return function (requestedModule, readJson, fileExists, extensions, callback) {
return matchFromAbsolutePathsAsync(absolutePaths, requestedModule, readJson, fileExists, extensions, callback, mainFields);
};
}
exports.createMatchPathAsync = createMatchPathAsync;
/**
* See the sync version for docs.
*/
function matchFromAbsolutePathsAsync(absolutePathMappings, requestedModule, readJson, fileExists, extensions, callback, mainFields) {
if (readJson === void 0) { readJson = Filesystem.readJsonFromDiskAsync; }
if (fileExists === void 0) { fileExists = Filesystem.fileExistsAsync; }
if (extensions === void 0) { extensions = Object.keys(require.extensions); }
if (mainFields === void 0) { mainFields = ["main"]; }
var tryPaths = TryPath.getPathsToTry(extensions, absolutePathMappings, requestedModule);
if (!tryPaths) {
return callback();
}
findFirstExistingPath(tryPaths, readJson, fileExists, callback, 0, mainFields);
}
exports.matchFromAbsolutePathsAsync = matchFromAbsolutePathsAsync;
function findFirstExistingMainFieldMappedFile(packageJson, mainFields, packageJsonPath, fileExistsAsync, doneCallback, index) {
if (index === void 0) { index = 0; }
if (index >= mainFields.length) {
return doneCallback(undefined, undefined);
}
var tryNext = function () {
return findFirstExistingMainFieldMappedFile(packageJson, mainFields, packageJsonPath, fileExistsAsync, doneCallback, index + 1);
};
var mainFieldMapping = packageJson[mainFields[index]];
if (typeof mainFieldMapping !== "string") {
// Skip mappings that are not pointers to replacement files
return tryNext();
}
var mappedFilePath = path.join(path.dirname(packageJsonPath), mainFieldMapping);
fileExistsAsync(mappedFilePath, function (err, exists) {
if (err) {
return doneCallback(err);
}
if (exists) {
return doneCallback(undefined, mappedFilePath);
}
return tryNext();
});
}
// Recursive loop to probe for physical files
function findFirstExistingPath(tryPaths, readJson, fileExists, doneCallback, index, mainFields) {
if (index === void 0) { index = 0; }
if (mainFields === void 0) { mainFields = ["main"]; }
var tryPath = tryPaths[index];
if (tryPath.type === "file" ||
tryPath.type === "extension" ||
tryPath.type === "index") {
fileExists(tryPath.path, function (err, exists) {
if (err) {
return doneCallback(err);
}
if (exists) {
// Not sure why we don't just return the full path? Why strip it?
return doneCallback(undefined, TryPath.getStrippedPath(tryPath));
}
if (index === tryPaths.length - 1) {
return doneCallback();
}
// Continue with the next path
return findFirstExistingPath(tryPaths, readJson, fileExists, doneCallback, index + 1, mainFields);
});
}
else if (tryPath.type === "package") {
readJson(tryPath.path, function (err, packageJson) {
if (err) {
return doneCallback(err);
}
if (packageJson) {
return findFirstExistingMainFieldMappedFile(packageJson, mainFields, tryPath.path, fileExists, function (mainFieldErr, mainFieldMappedFile) {
if (mainFieldErr) {
return doneCallback(mainFieldErr);
}
if (mainFieldMappedFile) {
// Not sure why we don't just return the full path? Why strip it?
return doneCallback(undefined, Filesystem.removeExtension(mainFieldMappedFile));
}
// No field in package json was a valid option. Continue with the next path.
return findFirstExistingPath(tryPaths, readJson, fileExists, doneCallback, index + 1, mainFields);
});
}
// This is async code, we need to return unconditionally, otherwise the code still falls
// through and keeps recursing. While this might work in general, libraries that use neo-async
// like Webpack will actually not allow you to call the same callback twice.
//
// An example of where this caused issues:
// https://github.com/dividab/tsconfig-paths-webpack-plugin/issues/11
//
// Continue with the next path
return findFirstExistingPath(tryPaths, readJson, fileExists, doneCallback, index + 1, mainFields);
});
}
else {
TryPath.exhaustiveTypeException(tryPath.type);
}
}

View file

@ -0,0 +1,30 @@
import * as Filesystem from "./filesystem";
import * as MappingEntry from "./mapping-entry";
/**
* Function that can match a path
*/
export interface MatchPath {
(requestedModule: string, readJson?: Filesystem.ReadJsonSync, fileExists?: (name: string) => boolean, extensions?: ReadonlyArray<string>): string | undefined;
}
/**
* Creates a function that can resolve paths according to tsconfig paths property.
* @param absoluteBaseUrl Absolute version of baseUrl as specified in tsconfig.
* @param paths The paths as specified in tsconfig.
* @param mainFields A list of package.json field names to try when resolving module files.
* @param addMatchAll Add a match-all "*" rule if none is present
* @returns a function that can resolve paths.
*/
export declare function createMatchPath(absoluteBaseUrl: string, paths: {
[key: string]: Array<string>;
}, mainFields?: string[], addMatchAll?: boolean): MatchPath;
/**
* Finds a path from tsconfig that matches a module load request.
* @param absolutePathMappings The paths to try as specified in tsconfig but resolved to absolute form.
* @param requestedModule The required module name.
* @param readJson Function that can read json from a path (useful for testing).
* @param fileExists Function that checks for existence of a file at a path (useful for testing).
* @param extensions File extensions to probe for (useful for testing).
* @param mainFields A list of package.json field names to try when resolving module files.
* @returns the found path, or undefined if no path was found.
*/
export declare function matchFromAbsolutePaths(absolutePathMappings: ReadonlyArray<MappingEntry.MappingEntry>, requestedModule: string, readJson?: Filesystem.ReadJsonSync, fileExists?: Filesystem.FileExistsSync, extensions?: Array<string>, mainFields?: string[]): string | undefined;

87
web/node_modules/tsconfig-paths/lib/match-path-sync.js generated vendored Normal file
View file

@ -0,0 +1,87 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var path = require("path");
var Filesystem = require("./filesystem");
var MappingEntry = require("./mapping-entry");
var TryPath = require("./try-path");
/**
* Creates a function that can resolve paths according to tsconfig paths property.
* @param absoluteBaseUrl Absolute version of baseUrl as specified in tsconfig.
* @param paths The paths as specified in tsconfig.
* @param mainFields A list of package.json field names to try when resolving module files.
* @param addMatchAll Add a match-all "*" rule if none is present
* @returns a function that can resolve paths.
*/
function createMatchPath(absoluteBaseUrl, paths, mainFields, addMatchAll) {
if (mainFields === void 0) { mainFields = ["main"]; }
if (addMatchAll === void 0) { addMatchAll = true; }
var absolutePaths = MappingEntry.getAbsoluteMappingEntries(absoluteBaseUrl, paths, addMatchAll);
return function (requestedModule, readJson, fileExists, extensions) {
return matchFromAbsolutePaths(absolutePaths, requestedModule, readJson, fileExists, extensions, mainFields);
};
}
exports.createMatchPath = createMatchPath;
/**
* Finds a path from tsconfig that matches a module load request.
* @param absolutePathMappings The paths to try as specified in tsconfig but resolved to absolute form.
* @param requestedModule The required module name.
* @param readJson Function that can read json from a path (useful for testing).
* @param fileExists Function that checks for existence of a file at a path (useful for testing).
* @param extensions File extensions to probe for (useful for testing).
* @param mainFields A list of package.json field names to try when resolving module files.
* @returns the found path, or undefined if no path was found.
*/
function matchFromAbsolutePaths(absolutePathMappings, requestedModule, readJson, fileExists, extensions, mainFields) {
if (readJson === void 0) { readJson = Filesystem.readJsonFromDiskSync; }
if (fileExists === void 0) { fileExists = Filesystem.fileExistsSync; }
if (extensions === void 0) { extensions = Object.keys(require.extensions); }
if (mainFields === void 0) { mainFields = ["main"]; }
var tryPaths = TryPath.getPathsToTry(extensions, absolutePathMappings, requestedModule);
if (!tryPaths) {
return undefined;
}
return findFirstExistingPath(tryPaths, readJson, fileExists, mainFields);
}
exports.matchFromAbsolutePaths = matchFromAbsolutePaths;
function findFirstExistingMainFieldMappedFile(packageJson, mainFields, packageJsonPath, fileExists) {
for (var index = 0; index < mainFields.length; index++) {
var mainFieldName = mainFields[index];
var candidateMapping = packageJson[mainFieldName];
if (candidateMapping && typeof candidateMapping === "string") {
var candidateFilePath = path.join(path.dirname(packageJsonPath), candidateMapping);
if (fileExists(candidateFilePath)) {
return candidateFilePath;
}
}
}
return undefined;
}
function findFirstExistingPath(tryPaths, readJson, fileExists, mainFields) {
if (readJson === void 0) { readJson = Filesystem.readJsonFromDiskSync; }
if (mainFields === void 0) { mainFields = ["main"]; }
for (var _i = 0, tryPaths_1 = tryPaths; _i < tryPaths_1.length; _i++) {
var tryPath = tryPaths_1[_i];
if (tryPath.type === "file" ||
tryPath.type === "extension" ||
tryPath.type === "index") {
if (fileExists(tryPath.path)) {
// Not sure why we don't just return the full path? Why strip it?
return TryPath.getStrippedPath(tryPath);
}
}
else if (tryPath.type === "package") {
var packageJson = readJson(tryPath.path);
if (packageJson) {
var mainFieldMappedFile = findFirstExistingMainFieldMappedFile(packageJson, mainFields, tryPath.path, fileExists);
if (mainFieldMappedFile) {
// Not sure why we don't just return the full path? Why strip it?
return Filesystem.removeExtension(mainFieldMappedFile);
}
}
}
else {
TryPath.exhaustiveTypeException(tryPath.type);
}
}
return undefined;
}

4
web/node_modules/tsconfig-paths/lib/options.d.ts generated vendored Normal file
View file

@ -0,0 +1,4 @@
export interface Options {
cwd: string;
}
export declare const options: Options;

13
web/node_modules/tsconfig-paths/lib/options.js generated vendored Normal file
View file

@ -0,0 +1,13 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var minimist = require("minimist");
var argv = minimist(process.argv.slice(2), {
string: ["project"],
alias: {
project: ["P"],
},
});
var project = argv && argv.project;
exports.options = {
cwd: project || process.cwd(),
};

6
web/node_modules/tsconfig-paths/lib/register.d.ts generated vendored Normal file
View file

@ -0,0 +1,6 @@
import { ExplicitParams } from "./config-loader";
/**
* Installs a custom module load function that can adhere to paths in tsconfig.
* Returns a function to undo paths registration.
*/
export declare function register(explicitParams: ExplicitParams): () => void;

82
web/node_modules/tsconfig-paths/lib/register.js generated vendored Normal file
View file

@ -0,0 +1,82 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var match_path_sync_1 = require("./match-path-sync");
var config_loader_1 = require("./config-loader");
var options_1 = require("./options");
var noOp = function () { return void 0; };
function getCoreModules(builtinModules) {
builtinModules = builtinModules || [
"assert",
"buffer",
"child_process",
"cluster",
"crypto",
"dgram",
"dns",
"domain",
"events",
"fs",
"http",
"https",
"net",
"os",
"path",
"punycode",
"querystring",
"readline",
"stream",
"string_decoder",
"tls",
"tty",
"url",
"util",
"v8",
"vm",
"zlib",
];
var coreModules = {};
for (var _i = 0, builtinModules_1 = builtinModules; _i < builtinModules_1.length; _i++) {
var module_1 = builtinModules_1[_i];
coreModules[module_1] = true;
}
return coreModules;
}
/**
* Installs a custom module load function that can adhere to paths in tsconfig.
* Returns a function to undo paths registration.
*/
function register(explicitParams) {
var configLoaderResult = config_loader_1.configLoader({
cwd: options_1.options.cwd,
explicitParams: explicitParams,
});
if (configLoaderResult.resultType === "failed") {
console.warn(configLoaderResult.message + ". tsconfig-paths will be skipped");
return noOp;
}
var matchPath = match_path_sync_1.createMatchPath(configLoaderResult.absoluteBaseUrl, configLoaderResult.paths, configLoaderResult.mainFields, configLoaderResult.addMatchAll);
// Patch node's module loading
// tslint:disable-next-line:no-require-imports variable-name
var Module = require("module");
var originalResolveFilename = Module._resolveFilename;
var coreModules = getCoreModules(Module.builtinModules);
// tslint:disable-next-line:no-any
Module._resolveFilename = function (request, _parent) {
var isCoreModule = coreModules.hasOwnProperty(request);
if (!isCoreModule) {
var found = matchPath(request);
if (found) {
var modifiedArguments = [found].concat([].slice.call(arguments, 1)); // Passes all arguments. Even those that is not specified above.
// tslint:disable-next-line:no-invalid-this
return originalResolveFilename.apply(this, modifiedArguments);
}
}
// tslint:disable-next-line:no-invalid-this
return originalResolveFilename.apply(this, arguments);
};
return function () {
// Return node's module loading to original state.
Module._resolveFilename = originalResolveFilename;
};
}
exports.register = register;

15
web/node_modules/tsconfig-paths/lib/try-path.d.ts generated vendored Normal file
View file

@ -0,0 +1,15 @@
import { MappingEntry } from "./mapping-entry";
export interface TryPath {
readonly type: "file" | "extension" | "index" | "package";
readonly path: string;
}
/**
* Builds a list of all physical paths to try by:
* 1. Check for file named exactly as request.
* 2. Check for files named as request ending in any of the extensions.
* 3. Check for file specified in package.json's main property.
* 4. Check for files named as request ending in "index" with any of the extensions.
*/
export declare function getPathsToTry(extensions: ReadonlyArray<string>, absolutePathMappings: ReadonlyArray<MappingEntry>, requestedModule: string): ReadonlyArray<TryPath> | undefined;
export declare function getStrippedPath(tryPath: TryPath): string;
export declare function exhaustiveTypeException(check: never): never;

91
web/node_modules/tsconfig-paths/lib/try-path.js generated vendored Normal file
View file

@ -0,0 +1,91 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var path = require("path");
var path_1 = require("path");
var filesystem_1 = require("./filesystem");
/**
* Builds a list of all physical paths to try by:
* 1. Check for file named exactly as request.
* 2. Check for files named as request ending in any of the extensions.
* 3. Check for file specified in package.json's main property.
* 4. Check for files named as request ending in "index" with any of the extensions.
*/
function getPathsToTry(extensions, absolutePathMappings, requestedModule) {
if (!absolutePathMappings ||
!requestedModule ||
requestedModule[0] === "." ||
requestedModule[0] === path.sep) {
return undefined;
}
var pathsToTry = [];
for (var _i = 0, absolutePathMappings_1 = absolutePathMappings; _i < absolutePathMappings_1.length; _i++) {
var entry = absolutePathMappings_1[_i];
var starMatch = entry.pattern === requestedModule
? ""
: matchStar(entry.pattern, requestedModule);
if (starMatch !== undefined) {
var _loop_1 = function (physicalPathPattern) {
var physicalPath = physicalPathPattern.replace("*", starMatch);
pathsToTry.push({ type: "file", path: physicalPath });
pathsToTry.push.apply(pathsToTry, extensions.map(function (e) { return ({ type: "extension", path: physicalPath + e }); }));
pathsToTry.push({
type: "package",
path: path.join(physicalPath, "/package.json"),
});
var indexPath = path.join(physicalPath, "/index");
pathsToTry.push.apply(pathsToTry, extensions.map(function (e) { return ({ type: "index", path: indexPath + e }); }));
};
for (var _a = 0, _b = entry.paths; _a < _b.length; _a++) {
var physicalPathPattern = _b[_a];
_loop_1(physicalPathPattern);
}
}
}
return pathsToTry.length === 0 ? undefined : pathsToTry;
}
exports.getPathsToTry = getPathsToTry;
// Not sure why we don't just return the full found path?
function getStrippedPath(tryPath) {
return tryPath.type === "index"
? path_1.dirname(tryPath.path)
: tryPath.type === "file"
? tryPath.path
: tryPath.type === "extension"
? filesystem_1.removeExtension(tryPath.path)
: tryPath.type === "package"
? tryPath.path
: exhaustiveTypeException(tryPath.type);
}
exports.getStrippedPath = getStrippedPath;
function exhaustiveTypeException(check) {
throw new Error("Unknown type " + check);
}
exports.exhaustiveTypeException = exhaustiveTypeException;
/**
* Matches pattern with a single star against search.
* Star must match at least one character to be considered a match.
* @param patttern for example "foo*"
* @param search for example "fooawesomebar"
* @returns the part of search that * matches, or undefined if no match.
*/
function matchStar(pattern, search) {
if (search.length < pattern.length) {
return undefined;
}
if (pattern === "*") {
return search;
}
var star = pattern.indexOf("*");
if (star === -1) {
return undefined;
}
var part1 = pattern.substring(0, star);
var part2 = pattern.substring(star + 1);
if (search.substr(0, star) !== part1) {
return undefined;
}
if (search.substr(search.length - part2.length) !== part2) {
return undefined;
}
return search.substr(star, search.length - part2.length);
}

View file

@ -0,0 +1,28 @@
/**
* Typing for the parts of tsconfig that we care about
*/
export interface Tsconfig {
extends?: string;
compilerOptions?: {
baseUrl?: string;
paths?: {
[key: string]: Array<string>;
};
strict?: boolean;
};
}
export interface TsConfigLoaderResult {
tsConfigPath: string | undefined;
baseUrl: string | undefined;
paths: {
[key: string]: Array<string>;
} | undefined;
}
export interface TsConfigLoaderParams {
getEnv: (key: string) => string | undefined;
cwd: string;
loadSync?(cwd: string, filename?: string): TsConfigLoaderResult;
}
export declare function tsConfigLoader({ getEnv, cwd, loadSync, }: TsConfigLoaderParams): TsConfigLoaderResult;
export declare function walkForTsConfig(directory: string, existsSync?: (path: string) => boolean): string | undefined;
export declare function loadTsconfig(configFilePath: string, existsSync?: (path: string) => boolean, readFileSync?: (filename: string) => string): Tsconfig | undefined;

103
web/node_modules/tsconfig-paths/lib/tsconfig-loader.js generated vendored Normal file
View file

@ -0,0 +1,103 @@
"use strict";
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
var path = require("path");
var fs = require("fs");
// tslint:disable:no-require-imports
var JSON5 = require("json5");
var StripBom = require("strip-bom");
function tsConfigLoader(_a) {
var getEnv = _a.getEnv, cwd = _a.cwd, _b = _a.loadSync, loadSync = _b === void 0 ? loadSyncDefault : _b;
var TS_NODE_PROJECT = getEnv("TS_NODE_PROJECT");
// tsconfig.loadSync handles if TS_NODE_PROJECT is a file or directory
var loadResult = loadSync(cwd, TS_NODE_PROJECT);
return loadResult;
}
exports.tsConfigLoader = tsConfigLoader;
function loadSyncDefault(cwd, filename) {
// Tsconfig.loadSync uses path.resolve. This is why we can use an absolute path as filename
var configPath = resolveConfigPath(cwd, filename);
if (!configPath) {
return {
tsConfigPath: undefined,
baseUrl: undefined,
paths: undefined,
};
}
var config = loadTsconfig(configPath);
return {
tsConfigPath: configPath,
baseUrl: config && config.compilerOptions && config.compilerOptions.baseUrl,
paths: config && config.compilerOptions && config.compilerOptions.paths,
};
}
function resolveConfigPath(cwd, filename) {
if (filename) {
var absolutePath = fs.lstatSync(filename).isDirectory()
? path.resolve(filename, "./tsconfig.json")
: path.resolve(cwd, filename);
return absolutePath;
}
if (fs.statSync(cwd).isFile()) {
return path.resolve(cwd);
}
var configAbsolutePath = walkForTsConfig(cwd);
return configAbsolutePath ? path.resolve(configAbsolutePath) : undefined;
}
function walkForTsConfig(directory, existsSync) {
if (existsSync === void 0) { existsSync = fs.existsSync; }
var configPath = path.join(directory, "./tsconfig.json");
if (existsSync(configPath)) {
return configPath;
}
var parentDirectory = path.join(directory, "../");
// If we reached the top
if (directory === parentDirectory) {
return undefined;
}
return walkForTsConfig(parentDirectory, existsSync);
}
exports.walkForTsConfig = walkForTsConfig;
function loadTsconfig(configFilePath, existsSync, readFileSync) {
if (existsSync === void 0) { existsSync = fs.existsSync; }
if (readFileSync === void 0) { readFileSync = function (filename) {
return fs.readFileSync(filename, "utf8");
}; }
if (!existsSync(configFilePath)) {
return undefined;
}
var configString = readFileSync(configFilePath);
var cleanedJson = StripBom(configString);
var config = JSON5.parse(cleanedJson);
var extendedConfig = config.extends;
if (extendedConfig) {
if (typeof extendedConfig === "string" &&
extendedConfig.indexOf(".json") === -1) {
extendedConfig += ".json";
}
var currentDir = path.dirname(configFilePath);
var extendedConfigPath = path.join(currentDir, extendedConfig);
if (extendedConfig.indexOf("/") !== -1 &&
extendedConfig.indexOf(".") !== -1 &&
!existsSync(extendedConfigPath)) {
extendedConfigPath = path.join(currentDir, "node_modules", extendedConfig);
}
var base = loadTsconfig(extendedConfigPath, existsSync, readFileSync) || {};
// baseUrl should be interpreted as relative to the base tsconfig,
// but we need to update it so it is relative to the original tsconfig being loaded
if (base.compilerOptions && base.compilerOptions.baseUrl) {
var extendsDir = path.dirname(extendedConfig);
base.compilerOptions.baseUrl = path.join(extendsDir, base.compilerOptions.baseUrl);
}
return __assign({}, base, config, { compilerOptions: __assign({}, base.compilerOptions, config.compilerOptions) });
}
return config;
}
exports.loadTsconfig = loadTsconfig;

View file

@ -0,0 +1,14 @@
'use strict';
module.exports = x => {
if (typeof x !== 'string') {
throw new TypeError('Expected a string, got ' + typeof x);
}
// Catches EFBBBF (UTF-8 BOM) because the buffer-to-string
// conversion translates it to FEFF (UTF-16 BOM)
if (x.charCodeAt(0) === 0xFEFF) {
return x.slice(1);
}
return x;
};

View file

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View file

@ -0,0 +1,40 @@
{
"name": "strip-bom",
"version": "3.0.0",
"description": "Strip UTF-8 byte order mark (BOM) from a string",
"license": "MIT",
"repository": "sindresorhus/strip-bom",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
"url": "sindresorhus.com"
},
"engines": {
"node": ">=4"
},
"scripts": {
"test": "xo && ava"
},
"files": [
"index.js"
],
"keywords": [
"strip",
"bom",
"byte",
"order",
"mark",
"unicode",
"utf8",
"utf-8",
"remove",
"delete",
"trim",
"text",
"string"
],
"devDependencies": {
"ava": "*",
"xo": "*"
}
}

View file

@ -0,0 +1,36 @@
# strip-bom [![Build Status](https://travis-ci.org/sindresorhus/strip-bom.svg?branch=master)](https://travis-ci.org/sindresorhus/strip-bom)
> Strip UTF-8 [byte order mark](http://en.wikipedia.org/wiki/Byte_order_mark#UTF-8) (BOM) from a string
From Wikipedia:
> The Unicode Standard permits the BOM in UTF-8, but does not require nor recommend its use. Byte order has no meaning in UTF-8.
## Install
```
$ npm install --save strip-bom
```
## Usage
```js
const stripBom = require('strip-bom');
stripBom('\uFEFFunicorn');
//=> 'unicorn'
```
## Related
- [strip-bom-cli](https://github.com/sindresorhus/strip-bom-cli) - CLI for this module
- [strip-bom-buf](https://github.com/sindresorhus/strip-bom-buf) - Buffer version of this module
- [strip-bom-stream](https://github.com/sindresorhus/strip-bom-stream) - Stream version of this module
## License
MIT © [Sindre Sorhus](https://sindresorhus.com)

75
web/node_modules/tsconfig-paths/package.json generated vendored Normal file
View file

@ -0,0 +1,75 @@
{
"name": "tsconfig-paths",
"version": "3.10.1",
"description": "Load node modules according to tsconfig paths, in run-time or via API.",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"author": "Jonas Kello",
"license": "MIT",
"repository": "https://github.com/dividab/tsconfig-paths",
"files": [
"/src",
"/lib",
"register.js",
"package.json",
"CHANGELOG.md",
"LICENSE",
"README.md"
],
"devDependencies": {
"@types/chai": "^4.1.4",
"@types/minimist": "^1.2.0",
"@types/mocha": "^5.2.3",
"@types/node": "^6.0.54",
"@types/strip-bom": "^3.0.0",
"@types/strip-json-comments": "^0.0.30",
"chai": "^4.1.2",
"codecov": "^3.1.0",
"husky": "^4.2.5",
"lint-staged": "^10.2.11",
"mocha": "^5.2.0",
"nyc": "^11.4.1",
"prettier": "^2.0.5",
"rimraf": "^2.6.2",
"shelljs": "^0.7.5",
"ts-node": "^7.0.0",
"tslint": "^5.8.0",
"typescript": "^2.4.1"
},
"dependencies": {
"json5": "^2.2.0",
"minimist": "^1.2.0",
"strip-bom": "^3.0.0"
},
"scripts": {
"start": "cd src && ts-node index.ts",
"example:node": "yarn build && cd ./example/node && ts-node -r ../register.js main.ts",
"example:project": "yarn build && ts-node -r ./register.js -P ./example/project/tsconfig.json ./example/project/main.ts",
"example:api": "cd example/api && ts-node main.ts",
"example:perf": "cd example/perf && ts-node main.ts",
"test": "mocha",
"build": "rimraf lib && tsc -p src",
"build:test": "rimraf ./test/js_out && tsc -p test",
"lint": "tslint './{src,tests}/**/*.ts{,x}'",
"verify": "yarn build && yarn lint && yarn coverage",
"coverage": "rimraf coverage .nyc_output && nyc yarn test",
"report-coverage": "codecov -f coverage/*.json",
"publish:major": "yarn build && node scripts/publish.js major",
"publish:minor": "yarn build && node scripts/publish.js minor",
"publish:patch": "yarn build && node scripts/publish.js patch",
"preversion": "yarn verify",
"postversion": "git push --tags && yarn publish --new-version $npm_package_version && git push && echo \"Successfully released version $npm_package_version!\""
},
"lint-staged": {
"*.{ts,tsx}": "tslint",
"*.{ts,tsx,json,css}": [
"prettier --write",
"git add"
]
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
}
}

1
web/node_modules/tsconfig-paths/register.js generated vendored Normal file
View file

@ -0,0 +1 @@
require("./").register();

97
web/node_modules/tsconfig-paths/src/config-loader.ts generated vendored Normal file
View file

@ -0,0 +1,97 @@
import * as TsConfigLoader from "./tsconfig-loader";
import * as path from "path";
import { options } from "./options";
export interface ExplicitParams {
baseUrl: string;
paths: { [key: string]: Array<string> };
mainFields?: Array<string>;
addMatchAll?: boolean;
}
export type TsConfigLoader = (
params: TsConfigLoader.TsConfigLoaderParams
) => TsConfigLoader.TsConfigLoaderResult;
export interface ConfigLoaderParams {
cwd: string;
explicitParams?: ExplicitParams;
tsConfigLoader?: TsConfigLoader;
}
export interface ConfigLoaderSuccessResult {
resultType: "success";
configFileAbsolutePath: string;
baseUrl: string;
absoluteBaseUrl: string;
paths: { [key: string]: Array<string> };
mainFields?: Array<string>;
addMatchAll?: boolean;
}
export interface ConfigLoaderFailResult {
resultType: "failed";
message: string;
}
export type ConfigLoaderResult =
| ConfigLoaderSuccessResult
| ConfigLoaderFailResult;
export function loadConfig(cwd: string = options.cwd): ConfigLoaderResult {
return configLoader({ cwd: cwd });
}
export function configLoader({
cwd,
explicitParams,
tsConfigLoader = TsConfigLoader.tsConfigLoader,
}: ConfigLoaderParams): ConfigLoaderResult {
if (explicitParams) {
// tslint:disable-next-line:no-shadowed-variable
const absoluteBaseUrl = path.isAbsolute(explicitParams.baseUrl)
? explicitParams.baseUrl
: path.join(cwd, explicitParams.baseUrl);
return {
resultType: "success",
configFileAbsolutePath: "",
baseUrl: explicitParams.baseUrl,
absoluteBaseUrl,
paths: explicitParams.paths,
mainFields: explicitParams.mainFields,
addMatchAll: explicitParams.addMatchAll,
};
}
// Load tsconfig and create path matching function
const loadResult = tsConfigLoader({
cwd,
getEnv: (key: string) => process.env[key],
});
if (!loadResult.tsConfigPath) {
return {
resultType: "failed",
message: "Couldn't find tsconfig.json",
};
}
if (!loadResult.baseUrl) {
return {
resultType: "failed",
message: "Missing baseUrl in compilerOptions",
};
}
const tsConfigDir = path.dirname(loadResult.tsConfigPath);
const absoluteBaseUrl = path.join(tsConfigDir, loadResult.baseUrl);
return {
resultType: "success",
configFileAbsolutePath: loadResult.tsConfigPath,
baseUrl: loadResult.baseUrl,
absoluteBaseUrl,
paths: loadResult.paths || {},
};
}

87
web/node_modules/tsconfig-paths/src/filesystem.ts generated vendored Normal file
View file

@ -0,0 +1,87 @@
import * as fs from "fs";
/**
* Typing for the fields of package.json we care about
*/
export interface PackageJson {
[key: string]: string;
}
/**
* A function that json from a file
*/
export interface ReadJsonSync {
// tslint:disable-next-line:no-any
(packageJsonPath: string): any | undefined;
}
export interface FileExistsSync {
(name: string): boolean;
}
export interface FileExistsAsync {
(path: string, callback: (err?: Error, exists?: boolean) => void): void;
}
export interface ReadJsonAsyncCallback {
// tslint:disable-next-line:no-any
(err?: Error, content?: any): void;
}
export interface ReadJsonAsync {
(path: string, callback: ReadJsonAsyncCallback): void;
}
export function fileExistsSync(path: string): boolean {
try {
const stats = fs.statSync(path);
return stats.isFile();
} catch (err) {
// If error, assume file did not exist
return false;
}
}
/**
* Reads package.json from disk
* @param file Path to package.json
*/
// tslint:disable-next-line:no-any
export function readJsonFromDiskSync(packageJsonPath: string): any | undefined {
if (!fs.existsSync(packageJsonPath)) {
return undefined;
}
return require(packageJsonPath);
}
export function readJsonFromDiskAsync(
path: string,
// tslint:disable-next-line:no-any
callback: (err?: Error, content?: any) => void
): void {
fs.readFile(path, "utf8", (err, result) => {
// If error, assume file did not exist
if (err || !result) {
return callback();
}
const json = JSON.parse(result);
return callback(undefined, json);
});
}
export function fileExistsAsync(
path2: string,
callback2: (err?: Error, exists?: boolean) => void
): void {
fs.stat(path2, (err: Error, stats: fs.Stats) => {
if (err) {
// If error assume file does not exist
return callback2(undefined, false);
}
callback2(undefined, stats ? stats.isFile() : false);
});
}
export function removeExtension(path: string): string {
return path.substring(0, path.lastIndexOf(".")) || path;
}

24
web/node_modules/tsconfig-paths/src/index.ts generated vendored Normal file
View file

@ -0,0 +1,24 @@
// register is used from register.js in root dir
export {
createMatchPath,
matchFromAbsolutePaths,
MatchPath,
} from "./match-path-sync";
export {
createMatchPathAsync,
matchFromAbsolutePathsAsync,
MatchPathAsync,
} from "./match-path-async";
export { register } from "./register";
export {
loadConfig,
ConfigLoaderResult,
ConfigLoaderSuccessResult,
ConfigLoaderFailResult,
} from "./config-loader";
export {
ReadJsonSync,
ReadJsonAsync,
FileExistsSync,
FileExistsAsync,
} from "./filesystem";

64
web/node_modules/tsconfig-paths/src/mapping-entry.ts generated vendored Normal file
View file

@ -0,0 +1,64 @@
import * as path from "path";
export interface MappingEntry {
readonly pattern: string;
readonly paths: ReadonlyArray<string>;
}
export interface Paths {
readonly [key: string]: ReadonlyArray<string>;
}
/**
* Converts an absolute baseUrl and paths to an array of absolute mapping entries.
* The array is sorted by longest prefix.
* Having an array with entries allows us to keep a sorting order rather than
* sort by keys each time we use the mappings.
* @param absoluteBaseUrl
* @param paths
* @param addMatchAll
*/
export function getAbsoluteMappingEntries(
absoluteBaseUrl: string,
paths: Paths,
addMatchAll: boolean
): ReadonlyArray<MappingEntry> {
// Resolve all paths to absolute form once here, and sort them by
// longest prefix once here, this saves time on each request later.
// We need to put them in an array to preserve the sorting order.
const sortedKeys = sortByLongestPrefix(Object.keys(paths));
const absolutePaths: Array<MappingEntry> = [];
for (const key of sortedKeys) {
absolutePaths.push({
pattern: key,
paths: paths[key].map((pathToResolve) =>
path.join(absoluteBaseUrl, pathToResolve)
),
});
}
// If there is no match-all path specified in the paths section of tsconfig, then try to match
// all paths relative to baseUrl, this is how typescript works.
if (!paths["*"] && addMatchAll) {
absolutePaths.push({
pattern: "*",
paths: [`${absoluteBaseUrl.replace(/\/$/, "")}/*`],
});
}
return absolutePaths;
}
/**
* Sort path patterns.
* If a module name can be matched with multiple patterns then pattern with the longest prefix will be picked.
*/
function sortByLongestPrefix(arr: Array<string>): Array<string> {
return arr
.concat()
.sort((a: string, b: string) => getPrefixLength(b) - getPrefixLength(a));
}
function getPrefixLength(pattern: string): number {
const prefixLength = pattern.indexOf("*");
return pattern.substr(0, prefixLength).length;
}

223
web/node_modules/tsconfig-paths/src/match-path-async.ts generated vendored Normal file
View file

@ -0,0 +1,223 @@
import * as path from "path";
import * as TryPath from "./try-path";
import * as MappingEntry from "./mapping-entry";
import * as Filesystem from "./filesystem";
/**
* Function that can match a path async
*/
export interface MatchPathAsync {
(
requestedModule: string,
readJson: Filesystem.ReadJsonAsync | undefined,
fileExists: Filesystem.FileExistsAsync | undefined,
extensions: ReadonlyArray<string> | undefined,
callback: MatchPathAsyncCallback
): void;
}
export interface MatchPathAsyncCallback {
(err?: Error, path?: string): void;
}
/**
* See the sync version for docs.
*/
export function createMatchPathAsync(
absoluteBaseUrl: string,
paths: { [key: string]: Array<string> },
mainFields: string[] = ["main"],
addMatchAll: boolean = true
): MatchPathAsync {
const absolutePaths = MappingEntry.getAbsoluteMappingEntries(
absoluteBaseUrl,
paths,
addMatchAll
);
return (
requestedModule: string,
readJson: Filesystem.ReadJsonAsync | undefined,
fileExists: Filesystem.FileExistsAsync | undefined,
extensions: ReadonlyArray<string> | undefined,
callback: MatchPathAsyncCallback
) =>
matchFromAbsolutePathsAsync(
absolutePaths,
requestedModule,
readJson,
fileExists,
extensions,
callback,
mainFields
);
}
/**
* See the sync version for docs.
*/
export function matchFromAbsolutePathsAsync(
absolutePathMappings: ReadonlyArray<MappingEntry.MappingEntry>,
requestedModule: string,
readJson: Filesystem.ReadJsonAsync = Filesystem.readJsonFromDiskAsync,
fileExists: Filesystem.FileExistsAsync = Filesystem.fileExistsAsync,
extensions: ReadonlyArray<string> = Object.keys(require.extensions),
callback: MatchPathAsyncCallback,
mainFields: string[] = ["main"]
): void {
const tryPaths = TryPath.getPathsToTry(
extensions,
absolutePathMappings,
requestedModule
);
if (!tryPaths) {
return callback();
}
findFirstExistingPath(
tryPaths,
readJson,
fileExists,
callback,
0,
mainFields
);
}
function findFirstExistingMainFieldMappedFile(
packageJson: Filesystem.PackageJson,
mainFields: string[],
packageJsonPath: string,
fileExistsAsync: Filesystem.FileExistsAsync,
doneCallback: (err?: Error, filepath?: string) => void,
index: number = 0
): void {
if (index >= mainFields.length) {
return doneCallback(undefined, undefined);
}
const tryNext = () =>
findFirstExistingMainFieldMappedFile(
packageJson,
mainFields,
packageJsonPath,
fileExistsAsync,
doneCallback,
index + 1
);
const mainFieldMapping = packageJson[mainFields[index]];
if (typeof mainFieldMapping !== "string") {
// Skip mappings that are not pointers to replacement files
return tryNext();
}
const mappedFilePath = path.join(
path.dirname(packageJsonPath),
mainFieldMapping
);
fileExistsAsync(mappedFilePath, (err?: Error, exists?: boolean) => {
if (err) {
return doneCallback(err);
}
if (exists) {
return doneCallback(undefined, mappedFilePath);
}
return tryNext();
});
}
// Recursive loop to probe for physical files
function findFirstExistingPath(
tryPaths: ReadonlyArray<TryPath.TryPath>,
readJson: Filesystem.ReadJsonAsync,
fileExists: Filesystem.FileExistsAsync,
doneCallback: MatchPathAsyncCallback,
index: number = 0,
mainFields: string[] = ["main"]
): void {
const tryPath = tryPaths[index];
if (
tryPath.type === "file" ||
tryPath.type === "extension" ||
tryPath.type === "index"
) {
fileExists(tryPath.path, (err: Error, exists: boolean) => {
if (err) {
return doneCallback(err);
}
if (exists) {
// Not sure why we don't just return the full path? Why strip it?
return doneCallback(undefined, TryPath.getStrippedPath(tryPath));
}
if (index === tryPaths.length - 1) {
return doneCallback();
}
// Continue with the next path
return findFirstExistingPath(
tryPaths,
readJson,
fileExists,
doneCallback,
index + 1,
mainFields
);
});
} else if (tryPath.type === "package") {
readJson(tryPath.path, (err, packageJson) => {
if (err) {
return doneCallback(err);
}
if (packageJson) {
return findFirstExistingMainFieldMappedFile(
packageJson,
mainFields,
tryPath.path,
fileExists,
(mainFieldErr?: Error, mainFieldMappedFile?: string) => {
if (mainFieldErr) {
return doneCallback(mainFieldErr);
}
if (mainFieldMappedFile) {
// Not sure why we don't just return the full path? Why strip it?
return doneCallback(
undefined,
Filesystem.removeExtension(mainFieldMappedFile)
);
}
// No field in package json was a valid option. Continue with the next path.
return findFirstExistingPath(
tryPaths,
readJson,
fileExists,
doneCallback,
index + 1,
mainFields
);
}
);
}
// This is async code, we need to return unconditionally, otherwise the code still falls
// through and keeps recursing. While this might work in general, libraries that use neo-async
// like Webpack will actually not allow you to call the same callback twice.
//
// An example of where this caused issues:
// https://github.com/dividab/tsconfig-paths-webpack-plugin/issues/11
//
// Continue with the next path
return findFirstExistingPath(
tryPaths,
readJson,
fileExists,
doneCallback,
index + 1,
mainFields
);
});
} else {
TryPath.exhaustiveTypeException(tryPath.type);
}
}

143
web/node_modules/tsconfig-paths/src/match-path-sync.ts generated vendored Normal file
View file

@ -0,0 +1,143 @@
import * as path from "path";
import * as Filesystem from "./filesystem";
import * as MappingEntry from "./mapping-entry";
import * as TryPath from "./try-path";
/**
* Function that can match a path
*/
export interface MatchPath {
(
requestedModule: string,
readJson?: Filesystem.ReadJsonSync,
fileExists?: (name: string) => boolean,
extensions?: ReadonlyArray<string>
): string | undefined;
}
/**
* Creates a function that can resolve paths according to tsconfig paths property.
* @param absoluteBaseUrl Absolute version of baseUrl as specified in tsconfig.
* @param paths The paths as specified in tsconfig.
* @param mainFields A list of package.json field names to try when resolving module files.
* @param addMatchAll Add a match-all "*" rule if none is present
* @returns a function that can resolve paths.
*/
export function createMatchPath(
absoluteBaseUrl: string,
paths: { [key: string]: Array<string> },
mainFields: string[] = ["main"],
addMatchAll: boolean = true
): MatchPath {
const absolutePaths = MappingEntry.getAbsoluteMappingEntries(
absoluteBaseUrl,
paths,
addMatchAll
);
return (
requestedModule: string,
readJson?: Filesystem.ReadJsonSync,
fileExists?: Filesystem.FileExistsSync,
extensions?: Array<string>
) =>
matchFromAbsolutePaths(
absolutePaths,
requestedModule,
readJson,
fileExists,
extensions,
mainFields
);
}
/**
* Finds a path from tsconfig that matches a module load request.
* @param absolutePathMappings The paths to try as specified in tsconfig but resolved to absolute form.
* @param requestedModule The required module name.
* @param readJson Function that can read json from a path (useful for testing).
* @param fileExists Function that checks for existence of a file at a path (useful for testing).
* @param extensions File extensions to probe for (useful for testing).
* @param mainFields A list of package.json field names to try when resolving module files.
* @returns the found path, or undefined if no path was found.
*/
export function matchFromAbsolutePaths(
absolutePathMappings: ReadonlyArray<MappingEntry.MappingEntry>,
requestedModule: string,
readJson: Filesystem.ReadJsonSync = Filesystem.readJsonFromDiskSync,
fileExists: Filesystem.FileExistsSync = Filesystem.fileExistsSync,
extensions: Array<string> = Object.keys(require.extensions),
mainFields: string[] = ["main"]
): string | undefined {
const tryPaths = TryPath.getPathsToTry(
extensions,
absolutePathMappings,
requestedModule
);
if (!tryPaths) {
return undefined;
}
return findFirstExistingPath(tryPaths, readJson, fileExists, mainFields);
}
function findFirstExistingMainFieldMappedFile(
packageJson: Filesystem.PackageJson,
mainFields: string[],
packageJsonPath: string,
fileExists: Filesystem.FileExistsSync
): string | undefined {
for (let index = 0; index < mainFields.length; index++) {
const mainFieldName = mainFields[index];
const candidateMapping = packageJson[mainFieldName];
if (candidateMapping && typeof candidateMapping === "string") {
const candidateFilePath = path.join(
path.dirname(packageJsonPath),
candidateMapping
);
if (fileExists(candidateFilePath)) {
return candidateFilePath;
}
}
}
return undefined;
}
function findFirstExistingPath(
tryPaths: ReadonlyArray<TryPath.TryPath>,
readJson: Filesystem.ReadJsonSync = Filesystem.readJsonFromDiskSync,
fileExists: Filesystem.FileExistsSync,
mainFields: string[] = ["main"]
): string | undefined {
for (const tryPath of tryPaths) {
if (
tryPath.type === "file" ||
tryPath.type === "extension" ||
tryPath.type === "index"
) {
if (fileExists(tryPath.path)) {
// Not sure why we don't just return the full path? Why strip it?
return TryPath.getStrippedPath(tryPath);
}
} else if (tryPath.type === "package") {
const packageJson: Filesystem.PackageJson = readJson(tryPath.path);
if (packageJson) {
const mainFieldMappedFile = findFirstExistingMainFieldMappedFile(
packageJson,
mainFields,
tryPath.path,
fileExists
);
if (mainFieldMappedFile) {
// Not sure why we don't just return the full path? Why strip it?
return Filesystem.removeExtension(mainFieldMappedFile);
}
}
} else {
TryPath.exhaustiveTypeException(tryPath.type);
}
}
return undefined;
}

18
web/node_modules/tsconfig-paths/src/options.ts generated vendored Normal file
View file

@ -0,0 +1,18 @@
import * as minimist from "minimist";
const argv = minimist(process.argv.slice(2), {
string: ["project"],
alias: {
project: ["P"],
},
});
const project = argv && argv.project;
export interface Options {
cwd: string;
}
export const options: Options = {
cwd: project || process.cwd(),
};

97
web/node_modules/tsconfig-paths/src/register.ts generated vendored Normal file
View file

@ -0,0 +1,97 @@
import { createMatchPath } from "./match-path-sync";
import { configLoader, ExplicitParams } from "./config-loader";
import { options } from "./options";
const noOp = (): void => void 0;
function getCoreModules(
builtinModules: string[] | undefined
): { [key: string]: boolean } {
builtinModules = builtinModules || [
"assert",
"buffer",
"child_process",
"cluster",
"crypto",
"dgram",
"dns",
"domain",
"events",
"fs",
"http",
"https",
"net",
"os",
"path",
"punycode",
"querystring",
"readline",
"stream",
"string_decoder",
"tls",
"tty",
"url",
"util",
"v8",
"vm",
"zlib",
];
const coreModules: { [key: string]: boolean } = {};
for (let module of builtinModules) {
coreModules[module] = true;
}
return coreModules;
}
/**
* Installs a custom module load function that can adhere to paths in tsconfig.
* Returns a function to undo paths registration.
*/
export function register(explicitParams: ExplicitParams): () => void {
const configLoaderResult = configLoader({
cwd: options.cwd,
explicitParams,
});
if (configLoaderResult.resultType === "failed") {
console.warn(
`${configLoaderResult.message}. tsconfig-paths will be skipped`
);
return noOp;
}
const matchPath = createMatchPath(
configLoaderResult.absoluteBaseUrl,
configLoaderResult.paths,
configLoaderResult.mainFields,
configLoaderResult.addMatchAll
);
// Patch node's module loading
// tslint:disable-next-line:no-require-imports variable-name
const Module = require("module");
const originalResolveFilename = Module._resolveFilename;
const coreModules = getCoreModules(Module.builtinModules);
// tslint:disable-next-line:no-any
Module._resolveFilename = function (request: string, _parent: any): string {
const isCoreModule = coreModules.hasOwnProperty(request);
if (!isCoreModule) {
const found = matchPath(request);
if (found) {
const modifiedArguments = [found, ...[].slice.call(arguments, 1)]; // Passes all arguments. Even those that is not specified above.
// tslint:disable-next-line:no-invalid-this
return originalResolveFilename.apply(this, modifiedArguments);
}
}
// tslint:disable-next-line:no-invalid-this
return originalResolveFilename.apply(this, arguments);
};
return () => {
// Return node's module loading to original state.
Module._resolveFilename = originalResolveFilename;
};
}

107
web/node_modules/tsconfig-paths/src/try-path.ts generated vendored Normal file
View file

@ -0,0 +1,107 @@
import * as path from "path";
import { MappingEntry } from "./mapping-entry";
import { dirname } from "path";
import { removeExtension } from "./filesystem";
export interface TryPath {
readonly type: "file" | "extension" | "index" | "package";
readonly path: string;
}
/**
* Builds a list of all physical paths to try by:
* 1. Check for file named exactly as request.
* 2. Check for files named as request ending in any of the extensions.
* 3. Check for file specified in package.json's main property.
* 4. Check for files named as request ending in "index" with any of the extensions.
*/
export function getPathsToTry(
extensions: ReadonlyArray<string>,
absolutePathMappings: ReadonlyArray<MappingEntry>,
requestedModule: string
): ReadonlyArray<TryPath> | undefined {
if (
!absolutePathMappings ||
!requestedModule ||
requestedModule[0] === "." ||
requestedModule[0] === path.sep
) {
return undefined;
}
const pathsToTry: Array<TryPath> = [];
for (const entry of absolutePathMappings) {
const starMatch =
entry.pattern === requestedModule
? ""
: matchStar(entry.pattern, requestedModule);
if (starMatch !== undefined) {
for (const physicalPathPattern of entry.paths) {
const physicalPath = physicalPathPattern.replace("*", starMatch);
pathsToTry.push({ type: "file", path: physicalPath });
pathsToTry.push(
...extensions.map(
(e) => ({ type: "extension", path: physicalPath + e } as TryPath)
)
);
pathsToTry.push({
type: "package",
path: path.join(physicalPath, "/package.json"),
});
const indexPath = path.join(physicalPath, "/index");
pathsToTry.push(
...extensions.map(
(e) => ({ type: "index", path: indexPath + e } as TryPath)
)
);
}
}
}
return pathsToTry.length === 0 ? undefined : pathsToTry;
}
// Not sure why we don't just return the full found path?
export function getStrippedPath(tryPath: TryPath): string {
return tryPath.type === "index"
? dirname(tryPath.path)
: tryPath.type === "file"
? tryPath.path
: tryPath.type === "extension"
? removeExtension(tryPath.path)
: tryPath.type === "package"
? tryPath.path
: exhaustiveTypeException(tryPath.type);
}
export function exhaustiveTypeException(check: never): never {
throw new Error(`Unknown type ${check}`);
}
/**
* Matches pattern with a single star against search.
* Star must match at least one character to be considered a match.
* @param patttern for example "foo*"
* @param search for example "fooawesomebar"
* @returns the part of search that * matches, or undefined if no match.
*/
function matchStar(pattern: string, search: string): string | undefined {
if (search.length < pattern.length) {
return undefined;
}
if (pattern === "*") {
return search;
}
const star = pattern.indexOf("*");
if (star === -1) {
return undefined;
}
const part1 = pattern.substring(0, star);
const part2 = pattern.substring(star + 1);
if (search.substr(0, star) !== part1) {
return undefined;
}
if (search.substr(search.length - part2.length) !== part2) {
return undefined;
}
return search.substr(star, search.length - part2.length);
}

160
web/node_modules/tsconfig-paths/src/tsconfig-loader.ts generated vendored Normal file
View file

@ -0,0 +1,160 @@
import * as path from "path";
import * as fs from "fs";
// tslint:disable:no-require-imports
import JSON5 = require("json5");
import StripBom = require("strip-bom");
// tslint:enable:no-require-imports
/**
* Typing for the parts of tsconfig that we care about
*/
export interface Tsconfig {
extends?: string;
compilerOptions?: {
baseUrl?: string;
paths?: { [key: string]: Array<string> };
strict?: boolean;
};
}
export interface TsConfigLoaderResult {
tsConfigPath: string | undefined;
baseUrl: string | undefined;
paths: { [key: string]: Array<string> } | undefined;
}
export interface TsConfigLoaderParams {
getEnv: (key: string) => string | undefined;
cwd: string;
loadSync?(cwd: string, filename?: string): TsConfigLoaderResult;
}
export function tsConfigLoader({
getEnv,
cwd,
loadSync = loadSyncDefault,
}: TsConfigLoaderParams): TsConfigLoaderResult {
const TS_NODE_PROJECT = getEnv("TS_NODE_PROJECT");
// tsconfig.loadSync handles if TS_NODE_PROJECT is a file or directory
const loadResult = loadSync(cwd, TS_NODE_PROJECT);
return loadResult;
}
function loadSyncDefault(cwd: string, filename?: string): TsConfigLoaderResult {
// Tsconfig.loadSync uses path.resolve. This is why we can use an absolute path as filename
const configPath = resolveConfigPath(cwd, filename);
if (!configPath) {
return {
tsConfigPath: undefined,
baseUrl: undefined,
paths: undefined,
};
}
const config = loadTsconfig(configPath);
return {
tsConfigPath: configPath,
baseUrl: config && config.compilerOptions && config.compilerOptions.baseUrl,
paths: config && config.compilerOptions && config.compilerOptions.paths,
};
}
function resolveConfigPath(cwd: string, filename?: string): string | undefined {
if (filename) {
const absolutePath = fs.lstatSync(filename).isDirectory()
? path.resolve(filename, "./tsconfig.json")
: path.resolve(cwd, filename);
return absolutePath;
}
if (fs.statSync(cwd).isFile()) {
return path.resolve(cwd);
}
const configAbsolutePath = walkForTsConfig(cwd);
return configAbsolutePath ? path.resolve(configAbsolutePath) : undefined;
}
export function walkForTsConfig(
directory: string,
existsSync: (path: string) => boolean = fs.existsSync
): string | undefined {
const configPath = path.join(directory, "./tsconfig.json");
if (existsSync(configPath)) {
return configPath;
}
const parentDirectory = path.join(directory, "../");
// If we reached the top
if (directory === parentDirectory) {
return undefined;
}
return walkForTsConfig(parentDirectory, existsSync);
}
export function loadTsconfig(
configFilePath: string,
existsSync: (path: string) => boolean = fs.existsSync,
readFileSync: (filename: string) => string = (filename: string) =>
fs.readFileSync(filename, "utf8")
): Tsconfig | undefined {
if (!existsSync(configFilePath)) {
return undefined;
}
const configString = readFileSync(configFilePath);
const cleanedJson = StripBom(configString);
const config: Tsconfig = JSON5.parse(cleanedJson);
let extendedConfig = config.extends;
if (extendedConfig) {
if (
typeof extendedConfig === "string" &&
extendedConfig.indexOf(".json") === -1
) {
extendedConfig += ".json";
}
const currentDir = path.dirname(configFilePath);
let extendedConfigPath = path.join(currentDir, extendedConfig);
if (
extendedConfig.indexOf("/") !== -1 &&
extendedConfig.indexOf(".") !== -1 &&
!existsSync(extendedConfigPath)
) {
extendedConfigPath = path.join(
currentDir,
"node_modules",
extendedConfig
);
}
const base =
loadTsconfig(extendedConfigPath, existsSync, readFileSync) || {};
// baseUrl should be interpreted as relative to the base tsconfig,
// but we need to update it so it is relative to the original tsconfig being loaded
if (base.compilerOptions && base.compilerOptions.baseUrl) {
const extendsDir = path.dirname(extendedConfig);
base.compilerOptions.baseUrl = path.join(
extendsDir,
base.compilerOptions.baseUrl
);
}
return {
...base,
...config,
compilerOptions: {
...base.compilerOptions,
...config.compilerOptions,
},
};
}
return config;
}

10
web/node_modules/tsconfig-paths/src/tsconfig.json generated vendored Normal file
View file

@ -0,0 +1,10 @@
{
"extends": "../base-tsconfig.json",
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"sourceMap": false,
"declaration": true,
"outDir": "../lib"
}
}