├── .gitignore ├── .idea ├── .gitignore ├── artifacts │ └── perf_boy_main_jar.xml ├── compiler.xml ├── jarRepositories.xml ├── kotlinc.xml ├── misc.xml └── vcs.xml ├── META-INF └── MANIFEST.MF ├── README.md ├── build.gradle.kts ├── cover.jpeg ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── icon.png ├── node_modules ├── .bin │ ├── mkdirp │ ├── resolve │ └── shjs ├── .package-lock.json ├── balanced-match │ ├── .github │ │ └── FUNDING.yml │ ├── LICENSE.md │ ├── README.md │ ├── index.js │ └── package.json ├── brace-expansion │ ├── LICENSE │ ├── README.md │ ├── index.js │ └── package.json ├── buffer-crc32 │ ├── LICENSE │ ├── README.md │ ├── index.js │ └── package.json ├── chownr │ ├── LICENSE │ ├── README.md │ ├── chownr.js │ └── package.json ├── command-exists-promise │ ├── LICENSE │ ├── README.md │ ├── lib │ │ └── index.js │ └── package.json ├── concat-map │ ├── .travis.yml │ ├── LICENSE │ ├── README.markdown │ ├── example │ │ └── map.js │ ├── index.js │ ├── package.json │ └── test │ │ └── map.js ├── fd-slicer │ ├── .npmignore │ ├── .travis.yml │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── index.js │ ├── package.json │ └── test │ │ └── test.js ├── fs-minipass │ ├── LICENSE │ ├── README.md │ ├── index.js │ └── package.json ├── fs.realpath │ ├── LICENSE │ ├── README.md │ ├── index.js │ ├── old.js │ └── package.json ├── function-bind │ ├── .eslintrc │ ├── .github │ │ ├── FUNDING.yml │ │ └── SECURITY.md │ ├── .nycrc │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── implementation.js │ ├── index.js │ ├── package.json │ └── test │ │ ├── .eslintrc │ │ └── index.js ├── glob │ ├── LICENSE │ ├── README.md │ ├── common.js │ ├── glob.js │ ├── package.json │ └── sync.js ├── hasown │ ├── .eslintrc │ ├── .github │ │ └── FUNDING.yml │ ├── .nycrc │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── index.d.ts │ ├── index.js │ ├── package.json │ └── tsconfig.json ├── inflight │ ├── LICENSE │ ├── README.md │ ├── inflight.js │ └── package.json ├── inherits │ ├── LICENSE │ ├── README.md │ ├── inherits.js │ ├── inherits_browser.js │ └── package.json ├── interpret │ ├── CHANGELOG │ ├── LICENSE │ ├── README.md │ ├── index.js │ ├── mjs-stub.js │ └── package.json ├── is-core-module │ ├── .eslintrc │ ├── .nycrc │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── core.json │ ├── index.js │ ├── package.json │ └── test │ │ └── index.js ├── minimatch │ ├── LICENSE │ ├── README.md │ ├── minimatch.js │ └── package.json ├── minimist │ ├── .eslintrc │ ├── .github │ │ └── FUNDING.yml │ ├── .nycrc │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── example │ │ └── parse.js │ ├── index.js │ ├── package.json │ └── test │ │ ├── all_bool.js │ │ ├── bool.js │ │ ├── dash.js │ │ ├── default_bool.js │ │ ├── dotted.js │ │ ├── kv_short.js │ │ ├── long.js │ │ ├── num.js │ │ ├── parse.js │ │ ├── parse_modified.js │ │ ├── proto.js │ │ ├── short.js │ │ ├── stop_early.js │ │ ├── unknown.js │ │ └── whitespace.js ├── minipass │ ├── LICENSE │ ├── README.md │ ├── index.js │ └── package.json ├── minizlib │ ├── LICENSE │ ├── README.md │ ├── constants.js │ ├── index.js │ └── package.json ├── mkdirp │ ├── LICENSE │ ├── bin │ │ ├── cmd.js │ │ └── usage.txt │ ├── index.js │ ├── package.json │ └── readme.markdown ├── njre │ ├── LICENSE │ ├── README.md │ ├── index.js │ ├── lib │ │ └── install.js │ └── package.json ├── node-fetch │ ├── LICENSE.md │ ├── README.md │ ├── browser.js │ ├── lib │ │ ├── index.es.js │ │ ├── index.js │ │ └── index.mjs │ └── package.json ├── once │ ├── LICENSE │ ├── README.md │ ├── once.js │ └── package.json ├── path-is-absolute │ ├── index.js │ ├── license │ ├── package.json │ └── readme.md ├── path-parse │ ├── LICENSE │ ├── README.md │ ├── index.js │ └── package.json ├── pend │ ├── LICENSE │ ├── README.md │ ├── index.js │ ├── package.json │ └── test.js ├── rechoir │ ├── .npmignore │ ├── .travis.yml │ ├── CHANGELOG │ ├── LICENSE │ ├── README.md │ ├── index.js │ ├── lib │ │ ├── extension.js │ │ ├── normalize.js │ │ └── register.js │ └── package.json ├── resolve │ ├── .editorconfig │ ├── .eslintrc │ ├── .github │ │ └── FUNDING.yml │ ├── LICENSE │ ├── SECURITY.md │ ├── async.js │ ├── bin │ │ └── resolve │ ├── example │ │ ├── async.js │ │ └── sync.js │ ├── index.js │ ├── lib │ │ ├── async.js │ │ ├── caller.js │ │ ├── core.js │ │ ├── core.json │ │ ├── homedir.js │ │ ├── is-core.js │ │ ├── node-modules-paths.js │ │ ├── normalize-options.js │ │ └── sync.js │ ├── package.json │ ├── readme.markdown │ ├── sync.js │ └── test │ │ ├── core.js │ │ ├── dotdot.js │ │ ├── dotdot │ │ ├── abc │ │ │ └── index.js │ │ └── index.js │ │ ├── faulty_basedir.js │ │ ├── filter.js │ │ ├── filter_sync.js │ │ ├── home_paths.js │ │ ├── home_paths_sync.js │ │ ├── mock.js │ │ ├── mock_sync.js │ │ ├── module_dir.js │ │ ├── module_dir │ │ ├── xmodules │ │ │ └── aaa │ │ │ │ └── index.js │ │ ├── ymodules │ │ │ └── aaa │ │ │ │ └── index.js │ │ └── zmodules │ │ │ └── bbb │ │ │ ├── main.js │ │ │ └── package.json │ │ ├── node-modules-paths.js │ │ ├── node_path.js │ │ ├── node_path │ │ ├── x │ │ │ ├── aaa │ │ │ │ └── index.js │ │ │ └── ccc │ │ │ │ └── index.js │ │ └── y │ │ │ ├── bbb │ │ │ └── index.js │ │ │ └── ccc │ │ │ └── index.js │ │ ├── nonstring.js │ │ ├── pathfilter.js │ │ ├── pathfilter │ │ └── deep_ref │ │ │ └── main.js │ │ ├── precedence.js │ │ ├── precedence │ │ ├── aaa.js │ │ ├── aaa │ │ │ ├── index.js │ │ │ └── main.js │ │ ├── bbb.js │ │ └── bbb │ │ │ └── main.js │ │ ├── resolver.js │ │ ├── resolver │ │ ├── baz │ │ │ ├── doom.js │ │ │ ├── package.json │ │ │ └── quux.js │ │ ├── browser_field │ │ │ ├── a.js │ │ │ ├── b.js │ │ │ └── package.json │ │ ├── cup.coffee │ │ ├── dot_main │ │ │ ├── index.js │ │ │ └── package.json │ │ ├── dot_slash_main │ │ │ ├── index.js │ │ │ └── package.json │ │ ├── false_main │ │ │ ├── index.js │ │ │ └── package.json │ │ ├── foo.js │ │ ├── incorrect_main │ │ │ ├── index.js │ │ │ └── package.json │ │ ├── invalid_main │ │ │ └── package.json │ │ ├── mug.coffee │ │ ├── mug.js │ │ ├── multirepo │ │ │ ├── lerna.json │ │ │ ├── package.json │ │ │ └── packages │ │ │ │ ├── package-a │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ │ └── package-b │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ ├── nested_symlinks │ │ │ └── mylib │ │ │ │ ├── async.js │ │ │ │ ├── package.json │ │ │ │ └── sync.js │ │ ├── other_path │ │ │ ├── lib │ │ │ │ └── other-lib.js │ │ │ └── root.js │ │ ├── quux │ │ │ └── foo │ │ │ │ └── index.js │ │ ├── same_names │ │ │ ├── foo.js │ │ │ └── foo │ │ │ │ └── index.js │ │ ├── symlinked │ │ │ ├── _ │ │ │ │ ├── node_modules │ │ │ │ │ └── foo.js │ │ │ │ └── symlink_target │ │ │ │ │ └── .gitkeep │ │ │ └── package │ │ │ │ ├── bar.js │ │ │ │ └── package.json │ │ └── without_basedir │ │ │ └── main.js │ │ ├── resolver_sync.js │ │ ├── shadowed_core.js │ │ ├── shadowed_core │ │ └── node_modules │ │ │ └── util │ │ │ └── index.js │ │ ├── subdirs.js │ │ └── symlinks.js ├── safe-buffer │ ├── LICENSE │ ├── README.md │ ├── index.d.ts │ ├── index.js │ └── package.json ├── shelljs │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── bin │ │ └── shjs │ ├── commands.js │ ├── global.js │ ├── make.js │ ├── package.json │ ├── plugin.js │ ├── shell.js │ └── src │ │ ├── cat.js │ │ ├── cd.js │ │ ├── chmod.js │ │ ├── common.js │ │ ├── cp.js │ │ ├── dirs.js │ │ ├── echo.js │ │ ├── error.js │ │ ├── exec-child.js │ │ ├── exec.js │ │ ├── find.js │ │ ├── grep.js │ │ ├── head.js │ │ ├── ln.js │ │ ├── ls.js │ │ ├── mkdir.js │ │ ├── mv.js │ │ ├── popd.js │ │ ├── pushd.js │ │ ├── pwd.js │ │ ├── rm.js │ │ ├── sed.js │ │ ├── set.js │ │ ├── sort.js │ │ ├── tail.js │ │ ├── tempdir.js │ │ ├── test.js │ │ ├── to.js │ │ ├── toEnd.js │ │ ├── touch.js │ │ ├── uniq.js │ │ └── which.js ├── supports-preserve-symlinks-flag │ ├── .eslintrc │ ├── .github │ │ └── FUNDING.yml │ ├── .nycrc │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── browser.js │ ├── index.js │ ├── package.json │ └── test │ │ └── index.js ├── tar │ ├── LICENSE │ ├── README.md │ ├── index.js │ ├── lib │ │ ├── buffer.js │ │ ├── create.js │ │ ├── extract.js │ │ ├── header.js │ │ ├── high-level-opt.js │ │ ├── large-numbers.js │ │ ├── list.js │ │ ├── mkdir.js │ │ ├── mode-fix.js │ │ ├── normalize-windows-path.js │ │ ├── pack.js │ │ ├── parse.js │ │ ├── path-reservations.js │ │ ├── pax.js │ │ ├── read-entry.js │ │ ├── replace.js │ │ ├── strip-absolute-path.js │ │ ├── strip-trailing-slashes.js │ │ ├── types.js │ │ ├── unpack.js │ │ ├── update.js │ │ ├── warn-mixin.js │ │ ├── winchars.js │ │ └── write-entry.js │ └── package.json ├── tr46 │ ├── .npmignore │ ├── index.js │ ├── lib │ │ ├── .gitkeep │ │ └── mappingTable.json │ └── package.json ├── webidl-conversions │ ├── LICENSE.md │ ├── README.md │ ├── lib │ │ └── index.js │ └── package.json ├── whatwg-url │ ├── LICENSE.txt │ ├── README.md │ ├── lib │ │ ├── URL-impl.js │ │ ├── URL.js │ │ ├── public-api.js │ │ ├── url-state-machine.js │ │ └── utils.js │ └── package.json ├── wrappy │ ├── LICENSE │ ├── README.md │ ├── package.json │ └── wrappy.js ├── yallist │ ├── LICENSE │ ├── README.md │ ├── iterator.js │ ├── package.json │ └── yallist.js └── yauzl │ ├── LICENSE │ ├── README.md │ ├── index.js │ └── package.json ├── package.json ├── settings.gradle.kts ├── src ├── main │ ├── kotlin │ │ └── io │ │ │ └── github │ │ │ └── theapache64 │ │ │ └── perfsheet │ │ │ ├── app │ │ │ ├── App.kt │ │ │ └── AppController.kt │ │ │ ├── core │ │ │ ├── TraceLogger.kt │ │ │ └── filter │ │ │ │ ├── AnonFilter.kt │ │ │ │ ├── Filter.kt │ │ │ │ ├── FrameFilter.kt │ │ │ │ ├── FrameworkCallsFilter.kt │ │ │ │ ├── LastHyphenFilter.kt │ │ │ │ └── LineNoFilter.kt │ │ │ ├── data │ │ │ └── repo │ │ │ │ ├── AppRepo.kt │ │ │ │ ├── ExcelRepo.kt │ │ │ │ └── TraceRepo.kt │ │ │ ├── di │ │ │ ├── AppComponent.kt │ │ │ └── module │ │ │ │ ├── RepoModule.kt │ │ │ │ └── TraceParserModule.kt │ │ │ ├── model │ │ │ ├── Method.kt │ │ │ ├── Node.kt │ │ │ ├── ResultRow.kt │ │ │ └── SheetHeading.kt │ │ │ └── ui │ │ │ ├── analyze │ │ │ ├── AnalyzeActivity.kt │ │ │ └── AnalyzeViewModel.kt │ │ │ └── splash │ │ │ ├── SplashActivity.kt │ │ │ └── SplashViewModel.kt │ └── resources │ │ └── .gitkeep └── test │ ├── kotlin │ └── io │ │ └── github │ │ └── theapache64 │ │ └── perfsheet │ │ ├── TestAppComponent.kt │ │ ├── data │ │ └── repo │ │ │ └── TraceRepoImplTest.kt │ │ └── ui │ │ └── analyze │ │ └── AnalyzeViewModelTest.kt │ └── resources │ └── .gitkeep └── trace-parser ├── build.gradle.kts └── src ├── main ├── kotlin │ └── io │ │ └── github │ │ └── theapache64 │ │ └── perfsheet │ │ └── traceparser │ │ ├── analyzer │ │ ├── AnalyzerResultImpl.kt │ │ ├── MethodData.kt │ │ ├── MethodsAndClasses.kt │ │ ├── ProfileDataImpl.kt │ │ ├── ThreadItemImpl.kt │ │ ├── ThreadTimeBoundsImpl.kt │ │ ├── TraceAnalyzer.kt │ │ └── converter │ │ │ ├── NameConverter.kt │ │ │ └── NoOpNameConverter.kt │ │ └── core │ │ ├── AnalyzerResult.kt │ │ ├── AppLogger.kt │ │ ├── ProfileData.kt │ │ ├── ThreadItem.kt │ │ ├── ThreadTimeBounds.kt │ │ └── TraceReader.kt └── resources │ └── .gitkeep └── test ├── kotlin └── .gitkeep └── resources └── .gitkeep /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | 29 | 30 | -------------------------------------------------------------------------------- /.idea/kotlinc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Main-Class: io.github.theapache64.perfsheet.app.AppKt 3 | 4 | -------------------------------------------------------------------------------- /cover.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/cover.jpeg -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | kotlin.code.style=official 2 | # more heap 3 | org.gradle.jvmargs=-Xmx8192m -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/icon.png -------------------------------------------------------------------------------- /node_modules/.bin/mkdirp: -------------------------------------------------------------------------------- 1 | ../mkdirp/bin/cmd.js -------------------------------------------------------------------------------- /node_modules/.bin/resolve: -------------------------------------------------------------------------------- 1 | ../resolve/bin/resolve -------------------------------------------------------------------------------- /node_modules/.bin/shjs: -------------------------------------------------------------------------------- 1 | ../shelljs/bin/shjs -------------------------------------------------------------------------------- /node_modules/balanced-match/.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | tidelift: "npm/balanced-match" 2 | patreon: juliangruber 3 | -------------------------------------------------------------------------------- /node_modules/balanced-match/LICENSE.md: -------------------------------------------------------------------------------- 1 | (MIT) 2 | 3 | Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 9 | of the Software, and to permit persons to whom the Software is furnished to do 10 | so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /node_modules/balanced-match/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = balanced; 3 | function balanced(a, b, str) { 4 | if (a instanceof RegExp) a = maybeMatch(a, str); 5 | if (b instanceof RegExp) b = maybeMatch(b, str); 6 | 7 | var r = range(a, b, str); 8 | 9 | return r && { 10 | start: r[0], 11 | end: r[1], 12 | pre: str.slice(0, r[0]), 13 | body: str.slice(r[0] + a.length, r[1]), 14 | post: str.slice(r[1] + b.length) 15 | }; 16 | } 17 | 18 | function maybeMatch(reg, str) { 19 | var m = str.match(reg); 20 | return m ? m[0] : null; 21 | } 22 | 23 | balanced.range = range; 24 | function range(a, b, str) { 25 | var begs, beg, left, right, result; 26 | var ai = str.indexOf(a); 27 | var bi = str.indexOf(b, ai + 1); 28 | var i = ai; 29 | 30 | if (ai >= 0 && bi > 0) { 31 | if(a===b) { 32 | return [ai, bi]; 33 | } 34 | begs = []; 35 | left = str.length; 36 | 37 | while (i >= 0 && !result) { 38 | if (i == ai) { 39 | begs.push(i); 40 | ai = str.indexOf(a, i + 1); 41 | } else if (begs.length == 1) { 42 | result = [ begs.pop(), bi ]; 43 | } else { 44 | beg = begs.pop(); 45 | if (beg < left) { 46 | left = beg; 47 | right = bi; 48 | } 49 | 50 | bi = str.indexOf(b, i + 1); 51 | } 52 | 53 | i = ai < bi && ai >= 0 ? ai : bi; 54 | } 55 | 56 | if (begs.length) { 57 | result = [ left, right ]; 58 | } 59 | } 60 | 61 | return result; 62 | } 63 | -------------------------------------------------------------------------------- /node_modules/balanced-match/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "balanced-match", 3 | "description": "Match balanced character pairs, like \"{\" and \"}\"", 4 | "version": "1.0.2", 5 | "repository": { 6 | "type": "git", 7 | "url": "git://github.com/juliangruber/balanced-match.git" 8 | }, 9 | "homepage": "https://github.com/juliangruber/balanced-match", 10 | "main": "index.js", 11 | "scripts": { 12 | "test": "tape test/test.js", 13 | "bench": "matcha test/bench.js" 14 | }, 15 | "devDependencies": { 16 | "matcha": "^0.7.0", 17 | "tape": "^4.6.0" 18 | }, 19 | "keywords": [ 20 | "match", 21 | "regexp", 22 | "test", 23 | "balanced", 24 | "parse" 25 | ], 26 | "author": { 27 | "name": "Julian Gruber", 28 | "email": "mail@juliangruber.com", 29 | "url": "http://juliangruber.com" 30 | }, 31 | "license": "MIT", 32 | "testling": { 33 | "files": "test/*.js", 34 | "browsers": [ 35 | "ie/8..latest", 36 | "firefox/20..latest", 37 | "firefox/nightly", 38 | "chrome/25..latest", 39 | "chrome/canary", 40 | "opera/12..latest", 41 | "opera/next", 42 | "safari/5.1..latest", 43 | "ipad/6.0..latest", 44 | "iphone/6.0..latest", 45 | "android-browser/4.2..latest" 46 | ] 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /node_modules/brace-expansion/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2013 Julian Gruber 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /node_modules/brace-expansion/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "brace-expansion", 3 | "description": "Brace expansion as known from sh/bash", 4 | "version": "1.1.11", 5 | "repository": { 6 | "type": "git", 7 | "url": "git://github.com/juliangruber/brace-expansion.git" 8 | }, 9 | "homepage": "https://github.com/juliangruber/brace-expansion", 10 | "main": "index.js", 11 | "scripts": { 12 | "test": "tape test/*.js", 13 | "gentest": "bash test/generate.sh", 14 | "bench": "matcha test/perf/bench.js" 15 | }, 16 | "dependencies": { 17 | "balanced-match": "^1.0.0", 18 | "concat-map": "0.0.1" 19 | }, 20 | "devDependencies": { 21 | "matcha": "^0.7.0", 22 | "tape": "^4.6.0" 23 | }, 24 | "keywords": [], 25 | "author": { 26 | "name": "Julian Gruber", 27 | "email": "mail@juliangruber.com", 28 | "url": "http://juliangruber.com" 29 | }, 30 | "license": "MIT", 31 | "testling": { 32 | "files": "test/*.js", 33 | "browsers": [ 34 | "ie/8..latest", 35 | "firefox/20..latest", 36 | "firefox/nightly", 37 | "chrome/25..latest", 38 | "chrome/canary", 39 | "opera/12..latest", 40 | "opera/next", 41 | "safari/5.1..latest", 42 | "ipad/6.0..latest", 43 | "iphone/6.0..latest", 44 | "android-browser/4.2..latest" 45 | ] 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /node_modules/buffer-crc32/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2013 Brian J. Brennan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the 9 | Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 17 | PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE 18 | FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /node_modules/buffer-crc32/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": "Brian J. Brennan ", 3 | "name": "buffer-crc32", 4 | "description": "A pure javascript CRC32 algorithm that plays nice with binary data", 5 | "version": "0.2.13", 6 | "licenses": [ 7 | { 8 | "type": "MIT", 9 | "url": "https://github.com/brianloveswords/buffer-crc32/raw/master/LICENSE" 10 | } 11 | ], 12 | "contributors": [ 13 | { 14 | "name": "Vladimir Kuznetsov", 15 | "github": "mistakster" 16 | } 17 | ], 18 | "homepage": "https://github.com/brianloveswords/buffer-crc32", 19 | "repository": { 20 | "type": "git", 21 | "url": "git://github.com/brianloveswords/buffer-crc32.git" 22 | }, 23 | "main": "index.js", 24 | "scripts": { 25 | "test": "./node_modules/.bin/tap tests/*.test.js" 26 | }, 27 | "dependencies": {}, 28 | "devDependencies": { 29 | "tap": "~0.2.5" 30 | }, 31 | "optionalDependencies": {}, 32 | "engines": { 33 | "node": "*" 34 | }, 35 | "license": "MIT", 36 | "files": [ 37 | "index.js" 38 | ] 39 | } 40 | -------------------------------------------------------------------------------- /node_modules/chownr/LICENSE: -------------------------------------------------------------------------------- 1 | The ISC License 2 | 3 | Copyright (c) Isaac Z. Schlueter and Contributors 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted, provided that the above 7 | copyright notice and this permission notice appear in all copies. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 15 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 | -------------------------------------------------------------------------------- /node_modules/chownr/README.md: -------------------------------------------------------------------------------- 1 | Like `chown -R`. 2 | 3 | Takes the same arguments as `fs.chown()` 4 | -------------------------------------------------------------------------------- /node_modules/chownr/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": "Isaac Z. Schlueter (http://blog.izs.me/)", 3 | "name": "chownr", 4 | "description": "like `chown -R`", 5 | "version": "1.1.4", 6 | "repository": { 7 | "type": "git", 8 | "url": "git://github.com/isaacs/chownr.git" 9 | }, 10 | "main": "chownr.js", 11 | "files": [ 12 | "chownr.js" 13 | ], 14 | "devDependencies": { 15 | "mkdirp": "0.3", 16 | "rimraf": "^2.7.1", 17 | "tap": "^14.10.6" 18 | }, 19 | "tap": { 20 | "check-coverage": true 21 | }, 22 | "scripts": { 23 | "test": "tap", 24 | "preversion": "npm test", 25 | "postversion": "npm publish", 26 | "prepublishOnly": "git push origin --follow-tags" 27 | }, 28 | "license": "ISC" 29 | } 30 | -------------------------------------------------------------------------------- /node_modules/command-exists-promise/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2019 Raphaël Thériault 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /node_modules/command-exists-promise/README.md: -------------------------------------------------------------------------------- 1 | # command-exists-promise 2 | ![npm](https://img.shields.io/npm/v/command-exists-promise.svg) ![Travis (.com)](https://img.shields.io/travis/com/raftario/command-exists.svg?label=travis+build) ![AppVeyor](https://img.shields.io/appveyor/ci/raftario/command-exists.svg?label=appveyor+build) 3 | Node module to check if a command-line command exists. 4 | Forked from [command-exists](https://github.com/mathisonian/command-exists). 5 | ## Installation 6 | ```console 7 | # For npm users 8 | $ npm i command-exists-promise 9 | 10 | # For yarn users 11 | $ yarn add command-exists-promise 12 | ``` 13 | ## Usage 14 | The function returns a promise that will resolve to `true` if the command exists and `false` if it doesn't. 15 | On UNIX, the promise will resolve to `true` if the command is a path to an executable file. On Windows, it will resolve to `true` for any existing file. 16 | ### Promise 17 | ```js 18 | const commandExists = require('command-exists-promise') 19 | 20 | commandExists('ls') 21 | .then(exists => { 22 | if (exists) { 23 | // The command exists 24 | } else { 25 | // The command doesn't exist 26 | } 27 | }) 28 | .catch(err => { 29 | // Should never happen but better handle it just in case 30 | }) 31 | ``` 32 | ### Await 33 | ```js 34 | const commandExists = require('command-exists-promise') 35 | 36 | try { 37 | const exists = await commandExists('ls') 38 | if (exists) { 39 | // The command exists 40 | } else { 41 | // The command doesn't exist 42 | } 43 | } catch (err) { 44 | // Should never happen but better handle it just in case 45 | } 46 | ``` 47 | -------------------------------------------------------------------------------- /node_modules/command-exists-promise/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "command-exists-promise", 3 | "version": "2.0.2", 4 | "description": "Checks whether a command line command exists in the current environment.", 5 | "main": "lib/index.js", 6 | "scripts": { 7 | "test": "mocha test/test.js" 8 | }, 9 | "repository": "github:raftario/command-exists", 10 | "keywords": [ 11 | "cli", 12 | "command", 13 | "exists", 14 | "promise", 15 | "async" 16 | ], 17 | "files": [], 18 | "author": "Raphaël Thériault (https://raphaeltheriault.com)", 19 | "contributors": [ 20 | "Matthew Conlen", 21 | "Arthur Silber (https://arthursilber.de)" 22 | ], 23 | "license": "MIT", 24 | "homepage": "https://github.com/raftario/command-exists", 25 | "engines": { 26 | "node": ">=6" 27 | }, 28 | "devDependencies": { 29 | "expect.js": "^0.3.1", 30 | "mocha": "^6.1.4" 31 | }, 32 | "dependencies": {} 33 | } 34 | -------------------------------------------------------------------------------- /node_modules/concat-map/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.4 4 | - 0.6 5 | -------------------------------------------------------------------------------- /node_modules/concat-map/LICENSE: -------------------------------------------------------------------------------- 1 | This software is released under the MIT license: 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 7 | the Software, and to permit persons to whom the Software is furnished to do so, 8 | subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 15 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 16 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 17 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 18 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | -------------------------------------------------------------------------------- /node_modules/concat-map/README.markdown: -------------------------------------------------------------------------------- 1 | concat-map 2 | ========== 3 | 4 | Concatenative mapdashery. 5 | 6 | [![browser support](http://ci.testling.com/substack/node-concat-map.png)](http://ci.testling.com/substack/node-concat-map) 7 | 8 | [![build status](https://secure.travis-ci.org/substack/node-concat-map.png)](http://travis-ci.org/substack/node-concat-map) 9 | 10 | example 11 | ======= 12 | 13 | ``` js 14 | var concatMap = require('concat-map'); 15 | var xs = [ 1, 2, 3, 4, 5, 6 ]; 16 | var ys = concatMap(xs, function (x) { 17 | return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; 18 | }); 19 | console.dir(ys); 20 | ``` 21 | 22 | *** 23 | 24 | ``` 25 | [ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ] 26 | ``` 27 | 28 | methods 29 | ======= 30 | 31 | ``` js 32 | var concatMap = require('concat-map') 33 | ``` 34 | 35 | concatMap(xs, fn) 36 | ----------------- 37 | 38 | Return an array of concatenated elements by calling `fn(x, i)` for each element 39 | `x` and each index `i` in the array `xs`. 40 | 41 | When `fn(x, i)` returns an array, its result will be concatenated with the 42 | result array. If `fn(x, i)` returns anything else, that value will be pushed 43 | onto the end of the result array. 44 | 45 | install 46 | ======= 47 | 48 | With [npm](http://npmjs.org) do: 49 | 50 | ``` 51 | npm install concat-map 52 | ``` 53 | 54 | license 55 | ======= 56 | 57 | MIT 58 | 59 | notes 60 | ===== 61 | 62 | This module was written while sitting high above the ground in a tree. 63 | -------------------------------------------------------------------------------- /node_modules/concat-map/example/map.js: -------------------------------------------------------------------------------- 1 | var concatMap = require('../'); 2 | var xs = [ 1, 2, 3, 4, 5, 6 ]; 3 | var ys = concatMap(xs, function (x) { 4 | return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; 5 | }); 6 | console.dir(ys); 7 | -------------------------------------------------------------------------------- /node_modules/concat-map/index.js: -------------------------------------------------------------------------------- 1 | module.exports = function (xs, fn) { 2 | var res = []; 3 | for (var i = 0; i < xs.length; i++) { 4 | var x = fn(xs[i], i); 5 | if (isArray(x)) res.push.apply(res, x); 6 | else res.push(x); 7 | } 8 | return res; 9 | }; 10 | 11 | var isArray = Array.isArray || function (xs) { 12 | return Object.prototype.toString.call(xs) === '[object Array]'; 13 | }; 14 | -------------------------------------------------------------------------------- /node_modules/concat-map/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "concat-map", 3 | "description" : "concatenative mapdashery", 4 | "version" : "0.0.1", 5 | "repository" : { 6 | "type" : "git", 7 | "url" : "git://github.com/substack/node-concat-map.git" 8 | }, 9 | "main" : "index.js", 10 | "keywords" : [ 11 | "concat", 12 | "concatMap", 13 | "map", 14 | "functional", 15 | "higher-order" 16 | ], 17 | "directories" : { 18 | "example" : "example", 19 | "test" : "test" 20 | }, 21 | "scripts" : { 22 | "test" : "tape test/*.js" 23 | }, 24 | "devDependencies" : { 25 | "tape" : "~2.4.0" 26 | }, 27 | "license" : "MIT", 28 | "author" : { 29 | "name" : "James Halliday", 30 | "email" : "mail@substack.net", 31 | "url" : "http://substack.net" 32 | }, 33 | "testling" : { 34 | "files" : "test/*.js", 35 | "browsers" : { 36 | "ie" : [ 6, 7, 8, 9 ], 37 | "ff" : [ 3.5, 10, 15.0 ], 38 | "chrome" : [ 10, 22 ], 39 | "safari" : [ 5.1 ], 40 | "opera" : [ 12 ] 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /node_modules/concat-map/test/map.js: -------------------------------------------------------------------------------- 1 | var concatMap = require('../'); 2 | var test = require('tape'); 3 | 4 | test('empty or not', function (t) { 5 | var xs = [ 1, 2, 3, 4, 5, 6 ]; 6 | var ixes = []; 7 | var ys = concatMap(xs, function (x, ix) { 8 | ixes.push(ix); 9 | return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; 10 | }); 11 | t.same(ys, [ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]); 12 | t.same(ixes, [ 0, 1, 2, 3, 4, 5 ]); 13 | t.end(); 14 | }); 15 | 16 | test('always something', function (t) { 17 | var xs = [ 'a', 'b', 'c', 'd' ]; 18 | var ys = concatMap(xs, function (x) { 19 | return x === 'b' ? [ 'B', 'B', 'B' ] : [ x ]; 20 | }); 21 | t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]); 22 | t.end(); 23 | }); 24 | 25 | test('scalars', function (t) { 26 | var xs = [ 'a', 'b', 'c', 'd' ]; 27 | var ys = concatMap(xs, function (x) { 28 | return x === 'b' ? [ 'B', 'B', 'B' ] : x; 29 | }); 30 | t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]); 31 | t.end(); 32 | }); 33 | 34 | test('undefs', function (t) { 35 | var xs = [ 'a', 'b', 'c', 'd' ]; 36 | var ys = concatMap(xs, function () {}); 37 | t.same(ys, [ undefined, undefined, undefined, undefined ]); 38 | t.end(); 39 | }); 40 | -------------------------------------------------------------------------------- /node_modules/fd-slicer/.npmignore: -------------------------------------------------------------------------------- 1 | /coverage 2 | /node_modules 3 | -------------------------------------------------------------------------------- /node_modules/fd-slicer/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.10" 4 | script: 5 | - "npm run test-travis" 6 | after_script: 7 | - "npm install coveralls@2 && cat ./coverage/lcov.info | ./node_modules/.bin/coveralls" 8 | -------------------------------------------------------------------------------- /node_modules/fd-slicer/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ### 1.0.1 2 | 3 | * use `setImmediate` instead of `nextTick` 4 | 5 | ### 1.0.0 6 | 7 | * `new FdSlicer(fd, options)` must now be `fdSlicer.createFromFd(fd, options)` 8 | * fix behavior when `end` is 0. 9 | * fix `createWriteStream` when using `createFromBuffer` 10 | 11 | ### 0.4.0 12 | 13 | * add ability to create an FdSlicer instance from a Buffer 14 | 15 | ### 0.3.2 16 | 17 | * fix write stream and read stream destroy behavior 18 | 19 | ### 0.3.1 20 | 21 | * write stream: fix end option behavior 22 | 23 | ### 0.3.0 24 | 25 | * write stream emits 'progress' events 26 | * write stream supports 'end' option which causes the stream to emit an error 27 | if a maximum size is exceeded 28 | * improve documentation 29 | 30 | ### 0.2.1 31 | 32 | * Update pend dependency to latest bugfix version. 33 | 34 | ### 0.2.0 35 | 36 | * Add read and write functions 37 | 38 | ### 0.1.0 39 | 40 | * Add `autoClose` option and `ref()` and `unref()`. 41 | 42 | ### 0.0.2 43 | 44 | * Add API documentation 45 | * read stream: create buffer at last possible moment 46 | 47 | ### 0.0.1 48 | 49 | * Initial release 50 | -------------------------------------------------------------------------------- /node_modules/fd-slicer/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 Andrew Kelley 2 | 3 | Permission is hereby granted, free of charge, to any person 4 | obtaining a copy of this software and associated documentation files 5 | (the "Software"), to deal in the Software without restriction, 6 | including without limitation the rights to use, copy, modify, merge, 7 | publish, distribute, sublicense, and/or sell copies of the Software, 8 | and to permit persons to whom the Software is furnished to do so, 9 | subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 18 | BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 19 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /node_modules/fd-slicer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fd-slicer", 3 | "version": "1.1.0", 4 | "description": "safely create multiple ReadStream or WriteStream objects from the same file descriptor", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "mocha --reporter spec --check-leaks", 8 | "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/test.js", 9 | "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --timeout 10000 --reporter spec --check-leaks test/test.js" 10 | }, 11 | "author": "Andrew Kelley ", 12 | "license": "MIT", 13 | "devDependencies": { 14 | "istanbul": "~0.3.3", 15 | "mocha": "~2.0.1", 16 | "stream-equal": "~0.1.5", 17 | "streamsink": "~1.2.0" 18 | }, 19 | "dependencies": { 20 | "pend": "~1.2.0" 21 | }, 22 | "directories": { 23 | "test": "test" 24 | }, 25 | "repository": { 26 | "type": "git", 27 | "url": "git://github.com/andrewrk/node-fd-slicer.git" 28 | }, 29 | "bugs": { 30 | "url": "https://github.com/andrewrk/node-fd-slicer/issues" 31 | }, 32 | "keywords": [ 33 | "createReadStream", 34 | "createWriteStream" 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /node_modules/fs-minipass/LICENSE: -------------------------------------------------------------------------------- 1 | The ISC License 2 | 3 | Copyright (c) Isaac Z. Schlueter and Contributors 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted, provided that the above 7 | copyright notice and this permission notice appear in all copies. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 15 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 | -------------------------------------------------------------------------------- /node_modules/fs-minipass/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fs-minipass", 3 | "version": "1.2.7", 4 | "main": "index.js", 5 | "scripts": { 6 | "test": "tap", 7 | "preversion": "npm test", 8 | "postversion": "npm publish", 9 | "postpublish": "git push origin --follow-tags" 10 | }, 11 | "keywords": [], 12 | "author": "Isaac Z. Schlueter (http://blog.izs.me/)", 13 | "license": "ISC", 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/npm/fs-minipass.git" 17 | }, 18 | "bugs": { 19 | "url": "https://github.com/npm/fs-minipass/issues" 20 | }, 21 | "homepage": "https://github.com/npm/fs-minipass#readme", 22 | "description": "fs read and write streams based on minipass", 23 | "dependencies": { 24 | "minipass": "^2.6.0" 25 | }, 26 | "devDependencies": { 27 | "mutate-fs": "^2.0.1", 28 | "tap": "^14.6.4" 29 | }, 30 | "files": [ 31 | "index.js" 32 | ], 33 | "tap": { 34 | "check-coverage": true 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /node_modules/fs.realpath/README.md: -------------------------------------------------------------------------------- 1 | # fs.realpath 2 | 3 | A backwards-compatible fs.realpath for Node v6 and above 4 | 5 | In Node v6, the JavaScript implementation of fs.realpath was replaced 6 | with a faster (but less resilient) native implementation. That raises 7 | new and platform-specific errors and cannot handle long or excessively 8 | symlink-looping paths. 9 | 10 | This module handles those cases by detecting the new errors and 11 | falling back to the JavaScript implementation. On versions of Node 12 | prior to v6, it has no effect. 13 | 14 | ## USAGE 15 | 16 | ```js 17 | var rp = require('fs.realpath') 18 | 19 | // async version 20 | rp.realpath(someLongAndLoopingPath, function (er, real) { 21 | // the ELOOP was handled, but it was a bit slower 22 | }) 23 | 24 | // sync version 25 | var real = rp.realpathSync(someLongAndLoopingPath) 26 | 27 | // monkeypatch at your own risk! 28 | // This replaces the fs.realpath/fs.realpathSync builtins 29 | rp.monkeypatch() 30 | 31 | // un-do the monkeypatching 32 | rp.unmonkeypatch() 33 | ``` 34 | -------------------------------------------------------------------------------- /node_modules/fs.realpath/index.js: -------------------------------------------------------------------------------- 1 | module.exports = realpath 2 | realpath.realpath = realpath 3 | realpath.sync = realpathSync 4 | realpath.realpathSync = realpathSync 5 | realpath.monkeypatch = monkeypatch 6 | realpath.unmonkeypatch = unmonkeypatch 7 | 8 | var fs = require('fs') 9 | var origRealpath = fs.realpath 10 | var origRealpathSync = fs.realpathSync 11 | 12 | var version = process.version 13 | var ok = /^v[0-5]\./.test(version) 14 | var old = require('./old.js') 15 | 16 | function newError (er) { 17 | return er && er.syscall === 'realpath' && ( 18 | er.code === 'ELOOP' || 19 | er.code === 'ENOMEM' || 20 | er.code === 'ENAMETOOLONG' 21 | ) 22 | } 23 | 24 | function realpath (p, cache, cb) { 25 | if (ok) { 26 | return origRealpath(p, cache, cb) 27 | } 28 | 29 | if (typeof cache === 'function') { 30 | cb = cache 31 | cache = null 32 | } 33 | origRealpath(p, cache, function (er, result) { 34 | if (newError(er)) { 35 | old.realpath(p, cache, cb) 36 | } else { 37 | cb(er, result) 38 | } 39 | }) 40 | } 41 | 42 | function realpathSync (p, cache) { 43 | if (ok) { 44 | return origRealpathSync(p, cache) 45 | } 46 | 47 | try { 48 | return origRealpathSync(p, cache) 49 | } catch (er) { 50 | if (newError(er)) { 51 | return old.realpathSync(p, cache) 52 | } else { 53 | throw er 54 | } 55 | } 56 | } 57 | 58 | function monkeypatch () { 59 | fs.realpath = realpath 60 | fs.realpathSync = realpathSync 61 | } 62 | 63 | function unmonkeypatch () { 64 | fs.realpath = origRealpath 65 | fs.realpathSync = origRealpathSync 66 | } 67 | -------------------------------------------------------------------------------- /node_modules/fs.realpath/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fs.realpath", 3 | "version": "1.0.0", 4 | "description": "Use node's fs.realpath, but fall back to the JS implementation if the native one fails", 5 | "main": "index.js", 6 | "dependencies": {}, 7 | "devDependencies": {}, 8 | "scripts": { 9 | "test": "tap test/*.js --cov" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git+https://github.com/isaacs/fs.realpath.git" 14 | }, 15 | "keywords": [ 16 | "realpath", 17 | "fs", 18 | "polyfill" 19 | ], 20 | "author": "Isaac Z. Schlueter (http://blog.izs.me/)", 21 | "license": "ISC", 22 | "files": [ 23 | "old.js", 24 | "index.js" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /node_modules/function-bind/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | 4 | "extends": "@ljharb", 5 | 6 | "rules": { 7 | "func-name-matching": 0, 8 | "indent": [2, 4], 9 | "no-new-func": [1], 10 | }, 11 | 12 | "overrides": [ 13 | { 14 | "files": "test/**", 15 | "rules": { 16 | "max-lines-per-function": 0, 17 | "strict": [0] 18 | }, 19 | }, 20 | ], 21 | } 22 | -------------------------------------------------------------------------------- /node_modules/function-bind/.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [ljharb] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: npm/function-bind 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /node_modules/function-bind/.github/SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security 2 | 3 | Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. 4 | -------------------------------------------------------------------------------- /node_modules/function-bind/.nycrc: -------------------------------------------------------------------------------- 1 | { 2 | "all": true, 3 | "check-coverage": false, 4 | "reporter": ["text-summary", "text", "html", "json"], 5 | "lines": 86, 6 | "statements": 85.93, 7 | "functions": 82.43, 8 | "branches": 76.06, 9 | "exclude": [ 10 | "coverage", 11 | "test" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /node_modules/function-bind/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013 Raynos. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | 21 | -------------------------------------------------------------------------------- /node_modules/function-bind/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var implementation = require('./implementation'); 4 | 5 | module.exports = Function.prototype.bind || implementation; 6 | -------------------------------------------------------------------------------- /node_modules/function-bind/test/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "array-bracket-newline": 0, 4 | "array-element-newline": 0, 5 | "max-statements-per-line": [2, { "max": 2 }], 6 | "no-invalid-this": 0, 7 | "no-magic-numbers": 0, 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /node_modules/glob/LICENSE: -------------------------------------------------------------------------------- 1 | The ISC License 2 | 3 | Copyright (c) Isaac Z. Schlueter and Contributors 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted, provided that the above 7 | copyright notice and this permission notice appear in all copies. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 15 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 | 17 | ## Glob Logo 18 | 19 | Glob's logo created by Tanya Brassie , licensed 20 | under a Creative Commons Attribution-ShareAlike 4.0 International License 21 | https://creativecommons.org/licenses/by-sa/4.0/ 22 | -------------------------------------------------------------------------------- /node_modules/glob/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": "Isaac Z. Schlueter (http://blog.izs.me/)", 3 | "name": "glob", 4 | "description": "a little globber", 5 | "version": "7.2.3", 6 | "publishConfig": { 7 | "tag": "v7-legacy" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git://github.com/isaacs/node-glob.git" 12 | }, 13 | "main": "glob.js", 14 | "files": [ 15 | "glob.js", 16 | "sync.js", 17 | "common.js" 18 | ], 19 | "engines": { 20 | "node": "*" 21 | }, 22 | "dependencies": { 23 | "fs.realpath": "^1.0.0", 24 | "inflight": "^1.0.4", 25 | "inherits": "2", 26 | "minimatch": "^3.1.1", 27 | "once": "^1.3.0", 28 | "path-is-absolute": "^1.0.0" 29 | }, 30 | "devDependencies": { 31 | "memfs": "^3.2.0", 32 | "mkdirp": "0", 33 | "rimraf": "^2.2.8", 34 | "tap": "^15.0.6", 35 | "tick": "0.0.6" 36 | }, 37 | "tap": { 38 | "before": "test/00-setup.js", 39 | "after": "test/zz-cleanup.js", 40 | "jobs": 1 41 | }, 42 | "scripts": { 43 | "prepublish": "npm run benchclean", 44 | "profclean": "rm -f v8.log profile.txt", 45 | "test": "tap", 46 | "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js", 47 | "bench": "bash benchmark.sh", 48 | "prof": "bash prof.sh && cat profile.txt", 49 | "benchclean": "node benchclean.js" 50 | }, 51 | "license": "ISC", 52 | "funding": { 53 | "url": "https://github.com/sponsors/isaacs" 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /node_modules/hasown/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | 4 | "extends": "@ljharb", 5 | } 6 | -------------------------------------------------------------------------------- /node_modules/hasown/.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [ljharb] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: npm/hasown 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with a single custom sponsorship URL 13 | -------------------------------------------------------------------------------- /node_modules/hasown/.nycrc: -------------------------------------------------------------------------------- 1 | { 2 | "all": true, 3 | "check-coverage": false, 4 | "reporter": ["text-summary", "text", "html", "json"], 5 | "lines": 86, 6 | "statements": 85.93, 7 | "functions": 82.43, 8 | "branches": 76.06, 9 | "exclude": [ 10 | "coverage", 11 | "test" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /node_modules/hasown/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Jordan Harband and contributors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /node_modules/hasown/index.d.ts: -------------------------------------------------------------------------------- 1 | declare function hasOwn(o: O, p: K): o is O & Record; 2 | 3 | export = hasOwn; 4 | -------------------------------------------------------------------------------- /node_modules/hasown/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var call = Function.prototype.call; 4 | var $hasOwn = Object.prototype.hasOwnProperty; 5 | var bind = require('function-bind'); 6 | 7 | /** @type {import('.')} */ 8 | module.exports = bind.call(call, $hasOwn); 9 | -------------------------------------------------------------------------------- /node_modules/hasown/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@ljharb/tsconfig", 3 | "exclude": [ 4 | "coverage", 5 | ], 6 | } 7 | -------------------------------------------------------------------------------- /node_modules/inflight/LICENSE: -------------------------------------------------------------------------------- 1 | The ISC License 2 | 3 | Copyright (c) Isaac Z. Schlueter 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted, provided that the above 7 | copyright notice and this permission notice appear in all copies. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 15 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 | -------------------------------------------------------------------------------- /node_modules/inflight/README.md: -------------------------------------------------------------------------------- 1 | # inflight 2 | 3 | Add callbacks to requests in flight to avoid async duplication 4 | 5 | ## USAGE 6 | 7 | ```javascript 8 | var inflight = require('inflight') 9 | 10 | // some request that does some stuff 11 | function req(key, callback) { 12 | // key is any random string. like a url or filename or whatever. 13 | // 14 | // will return either a falsey value, indicating that the 15 | // request for this key is already in flight, or a new callback 16 | // which when called will call all callbacks passed to inflightk 17 | // with the same key 18 | callback = inflight(key, callback) 19 | 20 | // If we got a falsey value back, then there's already a req going 21 | if (!callback) return 22 | 23 | // this is where you'd fetch the url or whatever 24 | // callback is also once()-ified, so it can safely be assigned 25 | // to multiple events etc. First call wins. 26 | setTimeout(function() { 27 | callback(null, key) 28 | }, 100) 29 | } 30 | 31 | // only assigns a single setTimeout 32 | // when it dings, all cbs get called 33 | req('foo', cb1) 34 | req('foo', cb2) 35 | req('foo', cb3) 36 | req('foo', cb4) 37 | ``` 38 | -------------------------------------------------------------------------------- /node_modules/inflight/inflight.js: -------------------------------------------------------------------------------- 1 | var wrappy = require('wrappy') 2 | var reqs = Object.create(null) 3 | var once = require('once') 4 | 5 | module.exports = wrappy(inflight) 6 | 7 | function inflight (key, cb) { 8 | if (reqs[key]) { 9 | reqs[key].push(cb) 10 | return null 11 | } else { 12 | reqs[key] = [cb] 13 | return makeres(key) 14 | } 15 | } 16 | 17 | function makeres (key) { 18 | return once(function RES () { 19 | var cbs = reqs[key] 20 | var len = cbs.length 21 | var args = slice(arguments) 22 | 23 | // XXX It's somewhat ambiguous whether a new callback added in this 24 | // pass should be queued for later execution if something in the 25 | // list of callbacks throws, or if it should just be discarded. 26 | // However, it's such an edge case that it hardly matters, and either 27 | // choice is likely as surprising as the other. 28 | // As it happens, we do go ahead and schedule it for later execution. 29 | try { 30 | for (var i = 0; i < len; i++) { 31 | cbs[i].apply(null, args) 32 | } 33 | } finally { 34 | if (cbs.length > len) { 35 | // added more in the interim. 36 | // de-zalgo, just in case, but don't call again. 37 | cbs.splice(0, len) 38 | process.nextTick(function () { 39 | RES.apply(null, args) 40 | }) 41 | } else { 42 | delete reqs[key] 43 | } 44 | } 45 | }) 46 | } 47 | 48 | function slice (args) { 49 | var length = args.length 50 | var array = [] 51 | 52 | for (var i = 0; i < length; i++) array[i] = args[i] 53 | return array 54 | } 55 | -------------------------------------------------------------------------------- /node_modules/inflight/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "inflight", 3 | "version": "1.0.6", 4 | "description": "Add callbacks to requests in flight to avoid async duplication", 5 | "main": "inflight.js", 6 | "files": [ 7 | "inflight.js" 8 | ], 9 | "dependencies": { 10 | "once": "^1.3.0", 11 | "wrappy": "1" 12 | }, 13 | "devDependencies": { 14 | "tap": "^7.1.2" 15 | }, 16 | "scripts": { 17 | "test": "tap test.js --100" 18 | }, 19 | "repository": { 20 | "type": "git", 21 | "url": "https://github.com/npm/inflight.git" 22 | }, 23 | "author": "Isaac Z. Schlueter (http://blog.izs.me/)", 24 | "bugs": { 25 | "url": "https://github.com/isaacs/inflight/issues" 26 | }, 27 | "homepage": "https://github.com/isaacs/inflight", 28 | "license": "ISC" 29 | } 30 | -------------------------------------------------------------------------------- /node_modules/inherits/LICENSE: -------------------------------------------------------------------------------- 1 | The ISC License 2 | 3 | Copyright (c) Isaac Z. Schlueter 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted, provided that the above 7 | copyright notice and this permission notice appear in all copies. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 10 | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND 11 | FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 12 | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 13 | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 14 | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 15 | PERFORMANCE OF THIS SOFTWARE. 16 | 17 | -------------------------------------------------------------------------------- /node_modules/inherits/inherits.js: -------------------------------------------------------------------------------- 1 | try { 2 | var util = require('util'); 3 | /* istanbul ignore next */ 4 | if (typeof util.inherits !== 'function') throw ''; 5 | module.exports = util.inherits; 6 | } catch (e) { 7 | /* istanbul ignore next */ 8 | module.exports = require('./inherits_browser.js'); 9 | } 10 | -------------------------------------------------------------------------------- /node_modules/inherits/inherits_browser.js: -------------------------------------------------------------------------------- 1 | if (typeof Object.create === 'function') { 2 | // implementation from standard node.js 'util' module 3 | module.exports = function inherits(ctor, superCtor) { 4 | if (superCtor) { 5 | ctor.super_ = superCtor 6 | ctor.prototype = Object.create(superCtor.prototype, { 7 | constructor: { 8 | value: ctor, 9 | enumerable: false, 10 | writable: true, 11 | configurable: true 12 | } 13 | }) 14 | } 15 | }; 16 | } else { 17 | // old school shim for old browsers 18 | module.exports = function inherits(ctor, superCtor) { 19 | if (superCtor) { 20 | ctor.super_ = superCtor 21 | var TempCtor = function () {} 22 | TempCtor.prototype = superCtor.prototype 23 | ctor.prototype = new TempCtor() 24 | ctor.prototype.constructor = ctor 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /node_modules/inherits/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "inherits", 3 | "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", 4 | "version": "2.0.4", 5 | "keywords": [ 6 | "inheritance", 7 | "class", 8 | "klass", 9 | "oop", 10 | "object-oriented", 11 | "inherits", 12 | "browser", 13 | "browserify" 14 | ], 15 | "main": "./inherits.js", 16 | "browser": "./inherits_browser.js", 17 | "repository": "git://github.com/isaacs/inherits", 18 | "license": "ISC", 19 | "scripts": { 20 | "test": "tap" 21 | }, 22 | "devDependencies": { 23 | "tap": "^14.2.4" 24 | }, 25 | "files": [ 26 | "inherits.js", 27 | "inherits_browser.js" 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /node_modules/interpret/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014-2018 Tyler Kellen , Blaine Bublitz , and Eric Schoffstall 2 | 3 | Permission is hereby granted, free of charge, to any person 4 | obtaining a copy of this software and associated documentation 5 | files (the "Software"), to deal in the Software without 6 | restriction, including without limitation the rights to use, 7 | copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the 9 | Software is furnished to do so, subject to the following 10 | conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /node_modules/interpret/mjs-stub.js: -------------------------------------------------------------------------------- 1 | require.extensions['.mjs'] = null; 2 | -------------------------------------------------------------------------------- /node_modules/is-core-module/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@ljharb", 3 | "root": true, 4 | "rules": { 5 | "func-style": 1, 6 | }, 7 | "overrides": [ 8 | { 9 | "files": "test/**", 10 | "rules": { 11 | "global-require": 0, 12 | "max-depth": 0, 13 | "max-lines-per-function": 0, 14 | "no-negated-condition": 0, 15 | }, 16 | }, 17 | ], 18 | } 19 | -------------------------------------------------------------------------------- /node_modules/is-core-module/.nycrc: -------------------------------------------------------------------------------- 1 | { 2 | "all": true, 3 | "check-coverage": false, 4 | "reporter": ["text-summary", "text", "html", "json"], 5 | "exclude": [ 6 | "coverage", 7 | "test" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /node_modules/is-core-module/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Dave Justice 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /node_modules/minimatch/LICENSE: -------------------------------------------------------------------------------- 1 | The ISC License 2 | 3 | Copyright (c) Isaac Z. Schlueter and Contributors 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted, provided that the above 7 | copyright notice and this permission notice appear in all copies. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 15 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 | -------------------------------------------------------------------------------- /node_modules/minimatch/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": "Isaac Z. Schlueter (http://blog.izs.me)", 3 | "name": "minimatch", 4 | "description": "a glob matcher in javascript", 5 | "version": "3.1.2", 6 | "publishConfig": { 7 | "tag": "v3-legacy" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git://github.com/isaacs/minimatch.git" 12 | }, 13 | "main": "minimatch.js", 14 | "scripts": { 15 | "test": "tap", 16 | "preversion": "npm test", 17 | "postversion": "npm publish", 18 | "postpublish": "git push origin --all; git push origin --tags" 19 | }, 20 | "engines": { 21 | "node": "*" 22 | }, 23 | "dependencies": { 24 | "brace-expansion": "^1.1.7" 25 | }, 26 | "devDependencies": { 27 | "tap": "^15.1.6" 28 | }, 29 | "license": "ISC", 30 | "files": [ 31 | "minimatch.js" 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /node_modules/minimist/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | 4 | "extends": "@ljharb/eslint-config/node/0.4", 5 | 6 | "rules": { 7 | "array-element-newline": 0, 8 | "complexity": 0, 9 | "func-style": [2, "declaration"], 10 | "max-lines-per-function": 0, 11 | "max-nested-callbacks": 1, 12 | "max-statements-per-line": 1, 13 | "max-statements": 0, 14 | "multiline-comment-style": 0, 15 | "no-continue": 1, 16 | "no-param-reassign": 1, 17 | "no-restricted-syntax": 1, 18 | "object-curly-newline": 0, 19 | }, 20 | 21 | "overrides": [ 22 | { 23 | "files": "test/**", 24 | "rules": { 25 | "camelcase": 0, 26 | }, 27 | }, 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /node_modules/minimist/.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [ljharb] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: npm/minimist 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /node_modules/minimist/.nycrc: -------------------------------------------------------------------------------- 1 | { 2 | "all": true, 3 | "check-coverage": false, 4 | "reporter": ["text-summary", "text", "html", "json"], 5 | "lines": 86, 6 | "statements": 85.93, 7 | "functions": 82.43, 8 | "branches": 76.06, 9 | "exclude": [ 10 | "coverage", 11 | "example", 12 | "test" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /node_modules/minimist/LICENSE: -------------------------------------------------------------------------------- 1 | This software is released under the MIT license: 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 7 | the Software, and to permit persons to whom the Software is furnished to do so, 8 | subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 15 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 16 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 17 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 18 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | -------------------------------------------------------------------------------- /node_modules/minimist/example/parse.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var argv = require('../')(process.argv.slice(2)); 4 | console.log(argv); 5 | -------------------------------------------------------------------------------- /node_modules/minimist/test/all_bool.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var parse = require('../'); 4 | var test = require('tape'); 5 | 6 | test('flag boolean true (default all --args to boolean)', function (t) { 7 | var argv = parse(['moo', '--honk', 'cow'], { 8 | boolean: true, 9 | }); 10 | 11 | t.deepEqual(argv, { 12 | honk: true, 13 | _: ['moo', 'cow'], 14 | }); 15 | 16 | t.deepEqual(typeof argv.honk, 'boolean'); 17 | t.end(); 18 | }); 19 | 20 | test('flag boolean true only affects double hyphen arguments without equals signs', function (t) { 21 | var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], { 22 | boolean: true, 23 | }); 24 | 25 | t.deepEqual(argv, { 26 | honk: true, 27 | tacos: 'good', 28 | p: 55, 29 | _: ['moo', 'cow'], 30 | }); 31 | 32 | t.deepEqual(typeof argv.honk, 'boolean'); 33 | t.end(); 34 | }); 35 | -------------------------------------------------------------------------------- /node_modules/minimist/test/dash.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var parse = require('../'); 4 | var test = require('tape'); 5 | 6 | test('-', function (t) { 7 | t.plan(6); 8 | t.deepEqual(parse(['-n', '-']), { n: '-', _: [] }); 9 | t.deepEqual(parse(['--nnn', '-']), { nnn: '-', _: [] }); 10 | t.deepEqual(parse(['-']), { _: ['-'] }); 11 | t.deepEqual(parse(['-f-']), { f: '-', _: [] }); 12 | t.deepEqual( 13 | parse(['-b', '-'], { boolean: 'b' }), 14 | { b: true, _: ['-'] } 15 | ); 16 | t.deepEqual( 17 | parse(['-s', '-'], { string: 's' }), 18 | { s: '-', _: [] } 19 | ); 20 | }); 21 | 22 | test('-a -- b', function (t) { 23 | t.plan(2); 24 | t.deepEqual(parse(['-a', '--', 'b']), { a: true, _: ['b'] }); 25 | t.deepEqual(parse(['--a', '--', 'b']), { a: true, _: ['b'] }); 26 | }); 27 | 28 | test('move arguments after the -- into their own `--` array', function (t) { 29 | t.plan(1); 30 | t.deepEqual( 31 | parse(['--name', 'John', 'before', '--', 'after'], { '--': true }), 32 | { name: 'John', _: ['before'], '--': ['after'] } 33 | ); 34 | }); 35 | 36 | test('--- option value', function (t) { 37 | // A multi-dash value is largely an edge case, but check the behaviour is as expected, 38 | // and in particular the same for short option and long option (as made consistent in Jan 2023). 39 | t.plan(2); 40 | t.deepEqual(parse(['-n', '---']), { n: '---', _: [] }); 41 | t.deepEqual(parse(['--nnn', '---']), { nnn: '---', _: [] }); 42 | }); 43 | 44 | -------------------------------------------------------------------------------- /node_modules/minimist/test/default_bool.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var test = require('tape'); 4 | var parse = require('../'); 5 | 6 | test('boolean default true', function (t) { 7 | var argv = parse([], { 8 | boolean: 'sometrue', 9 | default: { sometrue: true }, 10 | }); 11 | t.equal(argv.sometrue, true); 12 | t.end(); 13 | }); 14 | 15 | test('boolean default false', function (t) { 16 | var argv = parse([], { 17 | boolean: 'somefalse', 18 | default: { somefalse: false }, 19 | }); 20 | t.equal(argv.somefalse, false); 21 | t.end(); 22 | }); 23 | 24 | test('boolean default to null', function (t) { 25 | var argv = parse([], { 26 | boolean: 'maybe', 27 | default: { maybe: null }, 28 | }); 29 | t.equal(argv.maybe, null); 30 | 31 | var argvLong = parse(['--maybe'], { 32 | boolean: 'maybe', 33 | default: { maybe: null }, 34 | }); 35 | t.equal(argvLong.maybe, true); 36 | t.end(); 37 | }); 38 | -------------------------------------------------------------------------------- /node_modules/minimist/test/dotted.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var parse = require('../'); 4 | var test = require('tape'); 5 | 6 | test('dotted alias', function (t) { 7 | var argv = parse(['--a.b', '22'], { default: { 'a.b': 11 }, alias: { 'a.b': 'aa.bb' } }); 8 | t.equal(argv.a.b, 22); 9 | t.equal(argv.aa.bb, 22); 10 | t.end(); 11 | }); 12 | 13 | test('dotted default', function (t) { 14 | var argv = parse('', { default: { 'a.b': 11 }, alias: { 'a.b': 'aa.bb' } }); 15 | t.equal(argv.a.b, 11); 16 | t.equal(argv.aa.bb, 11); 17 | t.end(); 18 | }); 19 | 20 | test('dotted default with no alias', function (t) { 21 | var argv = parse('', { default: { 'a.b': 11 } }); 22 | t.equal(argv.a.b, 11); 23 | t.end(); 24 | }); 25 | -------------------------------------------------------------------------------- /node_modules/minimist/test/kv_short.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var parse = require('../'); 4 | var test = require('tape'); 5 | 6 | test('short -k=v', function (t) { 7 | t.plan(1); 8 | 9 | var argv = parse(['-b=123']); 10 | t.deepEqual(argv, { b: 123, _: [] }); 11 | }); 12 | 13 | test('multi short -k=v', function (t) { 14 | t.plan(1); 15 | 16 | var argv = parse(['-a=whatever', '-b=robots']); 17 | t.deepEqual(argv, { a: 'whatever', b: 'robots', _: [] }); 18 | }); 19 | 20 | test('short with embedded equals -k=a=b', function (t) { 21 | t.plan(1); 22 | 23 | var argv = parse(['-k=a=b']); 24 | t.deepEqual(argv, { k: 'a=b', _: [] }); 25 | }); 26 | 27 | test('short with later equals like -ab=c', function (t) { 28 | t.plan(1); 29 | 30 | var argv = parse(['-ab=c']); 31 | t.deepEqual(argv, { a: true, b: 'c', _: [] }); 32 | }); 33 | -------------------------------------------------------------------------------- /node_modules/minimist/test/long.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var test = require('tape'); 4 | var parse = require('../'); 5 | 6 | test('long opts', function (t) { 7 | t.deepEqual( 8 | parse(['--bool']), 9 | { bool: true, _: [] }, 10 | 'long boolean' 11 | ); 12 | t.deepEqual( 13 | parse(['--pow', 'xixxle']), 14 | { pow: 'xixxle', _: [] }, 15 | 'long capture sp' 16 | ); 17 | t.deepEqual( 18 | parse(['--pow=xixxle']), 19 | { pow: 'xixxle', _: [] }, 20 | 'long capture eq' 21 | ); 22 | t.deepEqual( 23 | parse(['--host', 'localhost', '--port', '555']), 24 | { host: 'localhost', port: 555, _: [] }, 25 | 'long captures sp' 26 | ); 27 | t.deepEqual( 28 | parse(['--host=localhost', '--port=555']), 29 | { host: 'localhost', port: 555, _: [] }, 30 | 'long captures eq' 31 | ); 32 | t.end(); 33 | }); 34 | -------------------------------------------------------------------------------- /node_modules/minimist/test/num.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var parse = require('../'); 4 | var test = require('tape'); 5 | 6 | test('nums', function (t) { 7 | var argv = parse([ 8 | '-x', '1234', 9 | '-y', '5.67', 10 | '-z', '1e7', 11 | '-w', '10f', 12 | '--hex', '0xdeadbeef', 13 | '789', 14 | ]); 15 | t.deepEqual(argv, { 16 | x: 1234, 17 | y: 5.67, 18 | z: 1e7, 19 | w: '10f', 20 | hex: 0xdeadbeef, 21 | _: [789], 22 | }); 23 | t.deepEqual(typeof argv.x, 'number'); 24 | t.deepEqual(typeof argv.y, 'number'); 25 | t.deepEqual(typeof argv.z, 'number'); 26 | t.deepEqual(typeof argv.w, 'string'); 27 | t.deepEqual(typeof argv.hex, 'number'); 28 | t.deepEqual(typeof argv._[0], 'number'); 29 | t.end(); 30 | }); 31 | 32 | test('already a number', function (t) { 33 | var argv = parse(['-x', 1234, 789]); 34 | t.deepEqual(argv, { x: 1234, _: [789] }); 35 | t.deepEqual(typeof argv.x, 'number'); 36 | t.deepEqual(typeof argv._[0], 'number'); 37 | t.end(); 38 | }); 39 | -------------------------------------------------------------------------------- /node_modules/minimist/test/parse_modified.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var parse = require('../'); 4 | var test = require('tape'); 5 | 6 | test('parse with modifier functions', function (t) { 7 | t.plan(1); 8 | 9 | var argv = parse(['-b', '123'], { boolean: 'b' }); 10 | t.deepEqual(argv, { b: true, _: [123] }); 11 | }); 12 | -------------------------------------------------------------------------------- /node_modules/minimist/test/short.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var parse = require('../'); 4 | var test = require('tape'); 5 | 6 | test('numeric short args', function (t) { 7 | t.plan(2); 8 | t.deepEqual(parse(['-n123']), { n: 123, _: [] }); 9 | t.deepEqual( 10 | parse(['-123', '456']), 11 | { 1: true, 2: true, 3: 456, _: [] } 12 | ); 13 | }); 14 | 15 | test('short', function (t) { 16 | t.deepEqual( 17 | parse(['-b']), 18 | { b: true, _: [] }, 19 | 'short boolean' 20 | ); 21 | t.deepEqual( 22 | parse(['foo', 'bar', 'baz']), 23 | { _: ['foo', 'bar', 'baz'] }, 24 | 'bare' 25 | ); 26 | t.deepEqual( 27 | parse(['-cats']), 28 | { c: true, a: true, t: true, s: true, _: [] }, 29 | 'group' 30 | ); 31 | t.deepEqual( 32 | parse(['-cats', 'meow']), 33 | { c: true, a: true, t: true, s: 'meow', _: [] }, 34 | 'short group next' 35 | ); 36 | t.deepEqual( 37 | parse(['-h', 'localhost']), 38 | { h: 'localhost', _: [] }, 39 | 'short capture' 40 | ); 41 | t.deepEqual( 42 | parse(['-h', 'localhost', '-p', '555']), 43 | { h: 'localhost', p: 555, _: [] }, 44 | 'short captures' 45 | ); 46 | t.end(); 47 | }); 48 | 49 | test('mixed short bool and capture', function (t) { 50 | t.same( 51 | parse(['-h', 'localhost', '-fp', '555', 'script.js']), 52 | { 53 | f: true, p: 555, h: 'localhost', 54 | _: ['script.js'], 55 | } 56 | ); 57 | t.end(); 58 | }); 59 | 60 | test('short and long', function (t) { 61 | t.deepEqual( 62 | parse(['-h', 'localhost', '-fp', '555', 'script.js']), 63 | { 64 | f: true, p: 555, h: 'localhost', 65 | _: ['script.js'], 66 | } 67 | ); 68 | t.end(); 69 | }); 70 | -------------------------------------------------------------------------------- /node_modules/minimist/test/stop_early.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var parse = require('../'); 4 | var test = require('tape'); 5 | 6 | test('stops parsing on the first non-option when stopEarly is set', function (t) { 7 | var argv = parse(['--aaa', 'bbb', 'ccc', '--ddd'], { 8 | stopEarly: true, 9 | }); 10 | 11 | t.deepEqual(argv, { 12 | aaa: 'bbb', 13 | _: ['ccc', '--ddd'], 14 | }); 15 | 16 | t.end(); 17 | }); 18 | -------------------------------------------------------------------------------- /node_modules/minimist/test/whitespace.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var parse = require('../'); 4 | var test = require('tape'); 5 | 6 | test('whitespace should be whitespace', function (t) { 7 | t.plan(1); 8 | var x = parse(['-x', '\t']).x; 9 | t.equal(x, '\t'); 10 | }); 11 | -------------------------------------------------------------------------------- /node_modules/minipass/LICENSE: -------------------------------------------------------------------------------- 1 | The ISC License 2 | 3 | Copyright (c) npm, Inc. and Contributors 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted, provided that the above 7 | copyright notice and this permission notice appear in all copies. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 15 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 | -------------------------------------------------------------------------------- /node_modules/minipass/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "minipass", 3 | "version": "2.9.0", 4 | "description": "minimal implementation of a PassThrough stream", 5 | "main": "index.js", 6 | "dependencies": { 7 | "safe-buffer": "^5.1.2", 8 | "yallist": "^3.0.0" 9 | }, 10 | "devDependencies": { 11 | "end-of-stream": "^1.4.0", 12 | "tap": "^14.6.5", 13 | "through2": "^2.0.3" 14 | }, 15 | "scripts": { 16 | "test": "tap", 17 | "preversion": "npm test", 18 | "postversion": "npm publish", 19 | "postpublish": "git push origin --follow-tags" 20 | }, 21 | "repository": { 22 | "type": "git", 23 | "url": "git+https://github.com/isaacs/minipass.git" 24 | }, 25 | "keywords": [ 26 | "passthrough", 27 | "stream" 28 | ], 29 | "author": "Isaac Z. Schlueter (http://blog.izs.me/)", 30 | "license": "ISC", 31 | "files": [ 32 | "index.js" 33 | ], 34 | "tap": { 35 | "check-coverage": true 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /node_modules/minizlib/LICENSE: -------------------------------------------------------------------------------- 1 | Minizlib was created by Isaac Z. Schlueter. 2 | It is a derivative work of the Node.js project. 3 | 4 | """ 5 | Copyright Isaac Z. Schlueter and Contributors 6 | Copyright Node.js contributors. All rights reserved. 7 | Copyright Joyent, Inc. and other Node contributors. All rights reserved. 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a 10 | copy of this software and associated documentation files (the "Software"), 11 | to deal in the Software without restriction, including without limitation 12 | the rights to use, copy, modify, merge, publish, distribute, sublicense, 13 | and/or sell copies of the Software, and to permit persons to whom the 14 | Software is furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in 17 | all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 20 | OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 21 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 22 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 23 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 24 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 25 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 26 | """ 27 | -------------------------------------------------------------------------------- /node_modules/minizlib/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "minizlib", 3 | "version": "1.3.3", 4 | "description": "A small fast zlib stream built on [minipass](http://npm.im/minipass) and Node.js's zlib binding.", 5 | "main": "index.js", 6 | "dependencies": { 7 | "minipass": "^2.9.0" 8 | }, 9 | "scripts": { 10 | "test": "tap test/*.js --100 -J", 11 | "preversion": "npm test", 12 | "postversion": "npm publish", 13 | "postpublish": "git push origin --all; git push origin --tags" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "git+https://github.com/isaacs/minizlib.git" 18 | }, 19 | "keywords": [ 20 | "zlib", 21 | "gzip", 22 | "gunzip", 23 | "deflate", 24 | "inflate", 25 | "compression", 26 | "zip", 27 | "unzip" 28 | ], 29 | "author": "Isaac Z. Schlueter (http://blog.izs.me/)", 30 | "license": "MIT", 31 | "devDependencies": { 32 | "tap": "^12.0.1" 33 | }, 34 | "files": [ 35 | "index.js", 36 | "constants.js" 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /node_modules/mkdirp/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2010 James Halliday (mail@substack.net) 2 | 3 | This project is free software released under the MIT/X11 license: 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /node_modules/mkdirp/bin/cmd.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var mkdirp = require('../'); 4 | var minimist = require('minimist'); 5 | var fs = require('fs'); 6 | 7 | var argv = minimist(process.argv.slice(2), { 8 | alias: { m: 'mode', h: 'help' }, 9 | string: [ 'mode' ] 10 | }); 11 | if (argv.help) { 12 | fs.createReadStream(__dirname + '/usage.txt').pipe(process.stdout); 13 | return; 14 | } 15 | 16 | var paths = argv._.slice(); 17 | var mode = argv.mode ? parseInt(argv.mode, 8) : undefined; 18 | 19 | (function next () { 20 | if (paths.length === 0) return; 21 | var p = paths.shift(); 22 | 23 | if (mode === undefined) mkdirp(p, cb) 24 | else mkdirp(p, mode, cb) 25 | 26 | function cb (err) { 27 | if (err) { 28 | console.error(err.message); 29 | process.exit(1); 30 | } 31 | else next(); 32 | } 33 | })(); 34 | -------------------------------------------------------------------------------- /node_modules/mkdirp/bin/usage.txt: -------------------------------------------------------------------------------- 1 | usage: mkdirp [DIR1,DIR2..] {OPTIONS} 2 | 3 | Create each supplied directory including any necessary parent directories that 4 | don't yet exist. 5 | 6 | If the directory already exists, do nothing. 7 | 8 | OPTIONS are: 9 | 10 | -m, --mode If a directory needs to be created, set the mode as an octal 11 | permission string. 12 | 13 | -------------------------------------------------------------------------------- /node_modules/mkdirp/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mkdirp", 3 | "description": "Recursively mkdir, like `mkdir -p`", 4 | "version": "0.5.6", 5 | "publishConfig": { 6 | "tag": "legacy" 7 | }, 8 | "author": "James Halliday (http://substack.net)", 9 | "main": "index.js", 10 | "keywords": [ 11 | "mkdir", 12 | "directory" 13 | ], 14 | "repository": { 15 | "type": "git", 16 | "url": "https://github.com/substack/node-mkdirp.git" 17 | }, 18 | "scripts": { 19 | "test": "tap test/*.js" 20 | }, 21 | "dependencies": { 22 | "minimist": "^1.2.6" 23 | }, 24 | "devDependencies": { 25 | "tap": "^16.0.1" 26 | }, 27 | "bin": "bin/cmd.js", 28 | "license": "MIT", 29 | "files": [ 30 | "bin", 31 | "index.js" 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /node_modules/njre/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Raphaël Thériault 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /node_modules/njre/README.md: -------------------------------------------------------------------------------- 1 | # njre 2 | ![npm](https://img.shields.io/npm/v/njre.svg) ![David](https://img.shields.io/david/raftario/njre.svg) ![npm bundle size](https://img.shields.io/bundlephobia/minzip/njre.svg) ![AppVeyor](https://img.shields.io/appveyor/ci/raftario/njre.svg?label=appveyor+build) ![Travis (.com)](https://img.shields.io/travis/com/raftario/njre.svg?label=travis+build) 3 | 4 | Easily install and use JRE from a Node application. 5 | 6 | ## [Docs](DOCS.md) 7 | -------------------------------------------------------------------------------- /node_modules/njre/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | module.exports = { 4 | install: require('./lib/install') 5 | } 6 | -------------------------------------------------------------------------------- /node_modules/njre/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "njre", 3 | "version": "0.2.0", 4 | "description": "Easily install and use JRE from a Node application.", 5 | "keywords": [ 6 | "jre", 7 | "java", 8 | "javaw", 9 | "jdk", 10 | "openjdk", 11 | "adoptopenjdk" 12 | ], 13 | "homepage": "https://github.com/raftario/njre", 14 | "bugs": "https://github.com/raftario/njre/issues", 15 | "main": "index.js", 16 | "scripts": { 17 | "test": "mocha tests/test.js", 18 | "coverage": "nyc npm run test", 19 | "lint": "standard --fix", 20 | "docs": "jsdoc2md index.js lib/*.js > DOCS.md" 21 | }, 22 | "repository": "github:raftario/njre", 23 | "author": "Raphaël Thériault (raphaeltheriault.com)", 24 | "license": "MIT", 25 | "files": [ 26 | "lib/*.js" 27 | ], 28 | "engines": { 29 | "node": ">=8" 30 | }, 31 | "husky": { 32 | "hooks": { 33 | "pre-commit": "lint-staged && npm run docs && git add DOCS.md" 34 | } 35 | }, 36 | "lint-staged": { 37 | "*.js": [ 38 | "standard --fix", 39 | "git add" 40 | ] 41 | }, 42 | "private": false, 43 | "dependencies": { 44 | "command-exists-promise": "^2.0.2", 45 | "node-fetch": "^2.5.0", 46 | "tar": "^4.4.8", 47 | "yauzl": "^2.10.0" 48 | }, 49 | "devDependencies": { 50 | "husky": "^2.2.0", 51 | "jsdoc-to-markdown": "^5.0.0", 52 | "lint-staged": "^8.1.6", 53 | "mocha": "^6.1.4", 54 | "nyc": "^14.1.1", 55 | "standard": "^12.0.1" 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /node_modules/node-fetch/LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 David Frank 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /node_modules/node-fetch/browser.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // ref: https://github.com/tc39/proposal-global 4 | var getGlobal = function () { 5 | // the only reliable means to get the global object is 6 | // `Function('return this')()` 7 | // However, this causes CSP violations in Chrome apps. 8 | if (typeof self !== 'undefined') { return self; } 9 | if (typeof window !== 'undefined') { return window; } 10 | if (typeof global !== 'undefined') { return global; } 11 | throw new Error('unable to locate global object'); 12 | } 13 | 14 | var globalObject = getGlobal(); 15 | 16 | module.exports = exports = globalObject.fetch; 17 | 18 | // Needed for TypeScript and Webpack. 19 | if (globalObject.fetch) { 20 | exports.default = globalObject.fetch.bind(globalObject); 21 | } 22 | 23 | exports.Headers = globalObject.Headers; 24 | exports.Request = globalObject.Request; 25 | exports.Response = globalObject.Response; 26 | -------------------------------------------------------------------------------- /node_modules/once/LICENSE: -------------------------------------------------------------------------------- 1 | The ISC License 2 | 3 | Copyright (c) Isaac Z. Schlueter and Contributors 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted, provided that the above 7 | copyright notice and this permission notice appear in all copies. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 15 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 | -------------------------------------------------------------------------------- /node_modules/once/once.js: -------------------------------------------------------------------------------- 1 | var wrappy = require('wrappy') 2 | module.exports = wrappy(once) 3 | module.exports.strict = wrappy(onceStrict) 4 | 5 | once.proto = once(function () { 6 | Object.defineProperty(Function.prototype, 'once', { 7 | value: function () { 8 | return once(this) 9 | }, 10 | configurable: true 11 | }) 12 | 13 | Object.defineProperty(Function.prototype, 'onceStrict', { 14 | value: function () { 15 | return onceStrict(this) 16 | }, 17 | configurable: true 18 | }) 19 | }) 20 | 21 | function once (fn) { 22 | var f = function () { 23 | if (f.called) return f.value 24 | f.called = true 25 | return f.value = fn.apply(this, arguments) 26 | } 27 | f.called = false 28 | return f 29 | } 30 | 31 | function onceStrict (fn) { 32 | var f = function () { 33 | if (f.called) 34 | throw new Error(f.onceError) 35 | f.called = true 36 | return f.value = fn.apply(this, arguments) 37 | } 38 | var name = fn.name || 'Function wrapped with `once`' 39 | f.onceError = name + " shouldn't be called more than once" 40 | f.called = false 41 | return f 42 | } 43 | -------------------------------------------------------------------------------- /node_modules/once/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "once", 3 | "version": "1.4.0", 4 | "description": "Run a function exactly one time", 5 | "main": "once.js", 6 | "directories": { 7 | "test": "test" 8 | }, 9 | "dependencies": { 10 | "wrappy": "1" 11 | }, 12 | "devDependencies": { 13 | "tap": "^7.0.1" 14 | }, 15 | "scripts": { 16 | "test": "tap test/*.js" 17 | }, 18 | "files": [ 19 | "once.js" 20 | ], 21 | "repository": { 22 | "type": "git", 23 | "url": "git://github.com/isaacs/once" 24 | }, 25 | "keywords": [ 26 | "once", 27 | "function", 28 | "one", 29 | "single" 30 | ], 31 | "author": "Isaac Z. Schlueter (http://blog.izs.me/)", 32 | "license": "ISC" 33 | } 34 | -------------------------------------------------------------------------------- /node_modules/path-is-absolute/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | function posix(path) { 4 | return path.charAt(0) === '/'; 5 | } 6 | 7 | function win32(path) { 8 | // https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56 9 | var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; 10 | var result = splitDeviceRe.exec(path); 11 | var device = result[1] || ''; 12 | var isUnc = Boolean(device && device.charAt(1) !== ':'); 13 | 14 | // UNC paths are always absolute 15 | return Boolean(result[2] || isUnc); 16 | } 17 | 18 | module.exports = process.platform === 'win32' ? win32 : posix; 19 | module.exports.posix = posix; 20 | module.exports.win32 = win32; 21 | -------------------------------------------------------------------------------- /node_modules/path-is-absolute/license: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) Sindre Sorhus (sindresorhus.com) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /node_modules/path-is-absolute/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "path-is-absolute", 3 | "version": "1.0.1", 4 | "description": "Node.js 0.12 path.isAbsolute() ponyfill", 5 | "license": "MIT", 6 | "repository": "sindresorhus/path-is-absolute", 7 | "author": { 8 | "name": "Sindre Sorhus", 9 | "email": "sindresorhus@gmail.com", 10 | "url": "sindresorhus.com" 11 | }, 12 | "engines": { 13 | "node": ">=0.10.0" 14 | }, 15 | "scripts": { 16 | "test": "xo && node test.js" 17 | }, 18 | "files": [ 19 | "index.js" 20 | ], 21 | "keywords": [ 22 | "path", 23 | "paths", 24 | "file", 25 | "dir", 26 | "absolute", 27 | "isabsolute", 28 | "is-absolute", 29 | "built-in", 30 | "util", 31 | "utils", 32 | "core", 33 | "ponyfill", 34 | "polyfill", 35 | "shim", 36 | "is", 37 | "detect", 38 | "check" 39 | ], 40 | "devDependencies": { 41 | "xo": "^0.16.0" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /node_modules/path-is-absolute/readme.md: -------------------------------------------------------------------------------- 1 | # path-is-absolute [![Build Status](https://travis-ci.org/sindresorhus/path-is-absolute.svg?branch=master)](https://travis-ci.org/sindresorhus/path-is-absolute) 2 | 3 | > Node.js 0.12 [`path.isAbsolute()`](http://nodejs.org/api/path.html#path_path_isabsolute_path) [ponyfill](https://ponyfill.com) 4 | 5 | 6 | ## Install 7 | 8 | ``` 9 | $ npm install --save path-is-absolute 10 | ``` 11 | 12 | 13 | ## Usage 14 | 15 | ```js 16 | const pathIsAbsolute = require('path-is-absolute'); 17 | 18 | // Running on Linux 19 | pathIsAbsolute('/home/foo'); 20 | //=> true 21 | pathIsAbsolute('C:/Users/foo'); 22 | //=> false 23 | 24 | // Running on Windows 25 | pathIsAbsolute('C:/Users/foo'); 26 | //=> true 27 | pathIsAbsolute('/home/foo'); 28 | //=> false 29 | 30 | // Running on any OS 31 | pathIsAbsolute.posix('/home/foo'); 32 | //=> true 33 | pathIsAbsolute.posix('C:/Users/foo'); 34 | //=> false 35 | pathIsAbsolute.win32('C:/Users/foo'); 36 | //=> true 37 | pathIsAbsolute.win32('/home/foo'); 38 | //=> false 39 | ``` 40 | 41 | 42 | ## API 43 | 44 | See the [`path.isAbsolute()` docs](http://nodejs.org/api/path.html#path_path_isabsolute_path). 45 | 46 | ### pathIsAbsolute(path) 47 | 48 | ### pathIsAbsolute.posix(path) 49 | 50 | POSIX specific version. 51 | 52 | ### pathIsAbsolute.win32(path) 53 | 54 | Windows specific version. 55 | 56 | 57 | ## License 58 | 59 | MIT © [Sindre Sorhus](https://sindresorhus.com) 60 | -------------------------------------------------------------------------------- /node_modules/path-parse/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Javier Blanco 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /node_modules/path-parse/README.md: -------------------------------------------------------------------------------- 1 | # path-parse [![Build Status](https://travis-ci.org/jbgutierrez/path-parse.svg?branch=master)](https://travis-ci.org/jbgutierrez/path-parse) 2 | 3 | > Node.js [`path.parse(pathString)`](https://nodejs.org/api/path.html#path_path_parse_pathstring) [ponyfill](https://ponyfill.com). 4 | 5 | ## Install 6 | 7 | ``` 8 | $ npm install --save path-parse 9 | ``` 10 | 11 | ## Usage 12 | 13 | ```js 14 | var pathParse = require('path-parse'); 15 | 16 | pathParse('/home/user/dir/file.txt'); 17 | //=> { 18 | // root : "/", 19 | // dir : "/home/user/dir", 20 | // base : "file.txt", 21 | // ext : ".txt", 22 | // name : "file" 23 | // } 24 | ``` 25 | 26 | ## API 27 | 28 | See [`path.parse(pathString)`](https://nodejs.org/api/path.html#path_path_parse_pathstring) docs. 29 | 30 | ### pathParse(path) 31 | 32 | ### pathParse.posix(path) 33 | 34 | The Posix specific version. 35 | 36 | ### pathParse.win32(path) 37 | 38 | The Windows specific version. 39 | 40 | ## License 41 | 42 | MIT © [Javier Blanco](http://jbgutierrez.info) 43 | -------------------------------------------------------------------------------- /node_modules/path-parse/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "path-parse", 3 | "version": "1.0.7", 4 | "description": "Node.js path.parse() ponyfill", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "node test.js" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/jbgutierrez/path-parse.git" 12 | }, 13 | "keywords": [ 14 | "path", 15 | "paths", 16 | "file", 17 | "dir", 18 | "parse", 19 | "built-in", 20 | "util", 21 | "utils", 22 | "core", 23 | "ponyfill", 24 | "polyfill", 25 | "shim" 26 | ], 27 | "author": "Javier Blanco ", 28 | "license": "MIT", 29 | "bugs": { 30 | "url": "https://github.com/jbgutierrez/path-parse/issues" 31 | }, 32 | "homepage": "https://github.com/jbgutierrez/path-parse#readme" 33 | } 34 | -------------------------------------------------------------------------------- /node_modules/pend/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (Expat) 2 | 3 | Copyright (c) 2014 Andrew Kelley 4 | 5 | Permission is hereby granted, free of charge, to any person 6 | obtaining a copy of this software and associated documentation files 7 | (the "Software"), to deal in the Software without restriction, 8 | including without limitation the rights to use, copy, modify, merge, 9 | publish, distribute, sublicense, and/or sell copies of the Software, 10 | and to permit persons to whom the Software is furnished to do so, 11 | subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 20 | BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 21 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | -------------------------------------------------------------------------------- /node_modules/pend/README.md: -------------------------------------------------------------------------------- 1 | # Pend 2 | 3 | Dead-simple optimistic async helper. 4 | 5 | ## Usage 6 | 7 | ```js 8 | var Pend = require('pend'); 9 | var pend = new Pend(); 10 | pend.max = 10; // defaults to Infinity 11 | setTimeout(pend.hold(), 1000); // pend.wait will have to wait for this hold to finish 12 | pend.go(function(cb) { 13 | console.log("this function is immediately executed"); 14 | setTimeout(function() { 15 | console.log("calling cb 1"); 16 | cb(); 17 | }, 500); 18 | }); 19 | pend.go(function(cb) { 20 | console.log("this function is also immediately executed"); 21 | setTimeout(function() { 22 | console.log("calling cb 2"); 23 | cb(); 24 | }, 1000); 25 | }); 26 | pend.wait(function(err) { 27 | console.log("this is excuted when the first 2 have returned."); 28 | console.log("err is a possible error in the standard callback style."); 29 | }); 30 | ``` 31 | 32 | Output: 33 | 34 | ``` 35 | this function is immediately executed 36 | this function is also immediately executed 37 | calling cb 1 38 | calling cb 2 39 | this is excuted when the first 2 have returned. 40 | err is a possible error in the standard callback style. 41 | ``` 42 | -------------------------------------------------------------------------------- /node_modules/pend/index.js: -------------------------------------------------------------------------------- 1 | module.exports = Pend; 2 | 3 | function Pend() { 4 | this.pending = 0; 5 | this.max = Infinity; 6 | this.listeners = []; 7 | this.waiting = []; 8 | this.error = null; 9 | } 10 | 11 | Pend.prototype.go = function(fn) { 12 | if (this.pending < this.max) { 13 | pendGo(this, fn); 14 | } else { 15 | this.waiting.push(fn); 16 | } 17 | }; 18 | 19 | Pend.prototype.wait = function(cb) { 20 | if (this.pending === 0) { 21 | cb(this.error); 22 | } else { 23 | this.listeners.push(cb); 24 | } 25 | }; 26 | 27 | Pend.prototype.hold = function() { 28 | return pendHold(this); 29 | }; 30 | 31 | function pendHold(self) { 32 | self.pending += 1; 33 | var called = false; 34 | return onCb; 35 | function onCb(err) { 36 | if (called) throw new Error("callback called twice"); 37 | called = true; 38 | self.error = self.error || err; 39 | self.pending -= 1; 40 | if (self.waiting.length > 0 && self.pending < self.max) { 41 | pendGo(self, self.waiting.shift()); 42 | } else if (self.pending === 0) { 43 | var listeners = self.listeners; 44 | self.listeners = []; 45 | listeners.forEach(cbListener); 46 | } 47 | } 48 | function cbListener(listener) { 49 | listener(self.error); 50 | } 51 | } 52 | 53 | function pendGo(self, fn) { 54 | fn(pendHold(self)); 55 | } 56 | -------------------------------------------------------------------------------- /node_modules/pend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pend", 3 | "version": "1.2.0", 4 | "description": "dead-simple optimistic async helper", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "node test.js" 8 | }, 9 | "author": "Andrew Kelley ", 10 | "license": "MIT", 11 | "repository": { 12 | "type": "git", 13 | "url": "git://github.com/andrewrk/node-pend.git" 14 | }, 15 | "bugs": { 16 | "url": "https://github.com/andrewrk/node-pend/issues" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /node_modules/rechoir/.npmignore: -------------------------------------------------------------------------------- 1 | test 2 | -------------------------------------------------------------------------------- /node_modules/rechoir/.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: node_js 3 | node_js: 4 | - "0.10" 5 | - "0.12" 6 | env: 7 | global: 8 | - REMOVE_DEPS="" 9 | matrix: 10 | - "CUSTOM_DEPS=coffee-script@~1.3" 11 | - "CUSTOM_DEPS=coffee-script@~1.5" 12 | - "CUSTOM_DEPS=coffee-script@~1.7" 13 | - "CUSTOM_DEPS=coffee-script@latest" 14 | - "CUSTOM_DEPS=iced-coffee-script@1.6.3-j" 15 | - "CUSTOM_DEPS=iced-coffee-script@latest" 16 | - "CUSTOM_DEPS=LiveScript@1.3.1 REMOVE_DEPS=livescript" 17 | - "CUSTOM_DEPS=typescript-require REMOVE_DEPS=typescript-register" 18 | matrix: 19 | fast_finish: true 20 | before_install: 21 | - "npm install -g npm" # needs the newest version of npm 22 | before_script: 23 | - "[ \"${REMOVE_DEPS}\" == \"\" ] || npm rm $REMOVE_DEPS" 24 | - "npm install $CUSTOM_DEPS" # install a specific version of dependencies 25 | -------------------------------------------------------------------------------- /node_modules/rechoir/CHANGELOG: -------------------------------------------------------------------------------- 1 | v0.6.2: 2 | date: 2015-07-22 3 | changes: 4 | - Return `undefined` when an unknown extension is provided to prepare and 5 | the `nothrow` option is specified. 6 | v0.6.1: 7 | date: 2015-05-22 8 | changes: 9 | - Add option for not throwing. 10 | v0.6.0: 11 | date: 2015-05-20 12 | changes: 13 | - Include module name when prepare is successful. 14 | v0.5.0: 15 | date: 2015-05-20 16 | changes: 17 | - Overhaul to support interpret 0.6.0. 18 | v0.3.0: 19 | date: 2015-01-10 20 | changes: 21 | - Breaking: `load` method removed. 22 | - Improved extension recognition. 23 | - No longer fails upon dots in filenames. 24 | - Support confuration objects. 25 | - Support and test ES6. 26 | - Support legacy module loading. 27 | v0.2.2: 28 | date: 2014-12-17 29 | changes: 30 | - Expose interpret. 31 | v0.2.0: 32 | date: 2014-04-20 33 | changes: 34 | - Simplify loading of coffee-script and iced-coffee-script. 35 | v0.1.0: 36 | date: 2014-04-20 37 | changes: 38 | - Initial public release. 39 | -------------------------------------------------------------------------------- /node_modules/rechoir/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015 Tyler Kellen 2 | 3 | Permission is hereby granted, free of charge, to any person 4 | obtaining a copy of this software and associated documentation 5 | files (the "Software"), to deal in the Software without 6 | restriction, including without limitation the rights to use, 7 | copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the 9 | Software is furnished to do so, subject to the following 10 | conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /node_modules/rechoir/lib/extension.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | const EXTRE = /^[.]?[^.]+([.].*)$/; 4 | 5 | module.exports = function (input) { 6 | var extension = EXTRE.exec(path.basename(input)); 7 | if (!extension) { 8 | return; 9 | } 10 | return extension[1]; 11 | }; 12 | -------------------------------------------------------------------------------- /node_modules/rechoir/lib/normalize.js: -------------------------------------------------------------------------------- 1 | function normalizer (config) { 2 | if (typeof config === 'string') { 3 | return { 4 | module: config 5 | } 6 | } 7 | return config; 8 | }; 9 | 10 | module.exports = function (config) { 11 | if (Array.isArray(config)) { 12 | return config.map(normalizer); 13 | } 14 | return normalizer(config); 15 | }; 16 | -------------------------------------------------------------------------------- /node_modules/rechoir/lib/register.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const resolve = require('resolve'); 3 | 4 | module.exports = function (cwd, moduleName, register) { 5 | try { 6 | var modulePath = resolve.sync(moduleName, {basedir: cwd}); 7 | var result = require(modulePath); 8 | if (typeof register === 'function') { 9 | register(result); 10 | } 11 | } catch (e) { 12 | result = e; 13 | } 14 | return result; 15 | }; 16 | -------------------------------------------------------------------------------- /node_modules/resolve/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | max_line_length = 200 11 | 12 | [*.js] 13 | block_comment_start = /* 14 | block_comment = * 15 | block_comment_end = */ 16 | 17 | [*.yml] 18 | indent_size = 1 19 | 20 | [package.json] 21 | indent_style = tab 22 | 23 | [lib/core.json] 24 | indent_style = tab 25 | 26 | [CHANGELOG.md] 27 | indent_style = space 28 | indent_size = 2 29 | 30 | [{*.json,Makefile}] 31 | max_line_length = off 32 | 33 | [test/{dotdot,resolver,module_dir,multirepo,node_path,pathfilter,precedence}/**/*] 34 | indent_style = off 35 | indent_size = off 36 | max_line_length = off 37 | insert_final_newline = off 38 | -------------------------------------------------------------------------------- /node_modules/resolve/.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [ljharb] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: npm/resolve 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /node_modules/resolve/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2012 James Halliday 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /node_modules/resolve/SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security 2 | 3 | Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. 4 | -------------------------------------------------------------------------------- /node_modules/resolve/async.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = require('./lib/async'); 4 | -------------------------------------------------------------------------------- /node_modules/resolve/example/async.js: -------------------------------------------------------------------------------- 1 | var resolve = require('../'); 2 | resolve('tap', { basedir: __dirname }, function (err, res) { 3 | if (err) console.error(err); 4 | else console.log(res); 5 | }); 6 | -------------------------------------------------------------------------------- /node_modules/resolve/example/sync.js: -------------------------------------------------------------------------------- 1 | var resolve = require('../'); 2 | var res = resolve.sync('tap', { basedir: __dirname }); 3 | console.log(res); 4 | -------------------------------------------------------------------------------- /node_modules/resolve/index.js: -------------------------------------------------------------------------------- 1 | var async = require('./lib/async'); 2 | async.core = require('./lib/core'); 3 | async.isCore = require('./lib/is-core'); 4 | async.sync = require('./lib/sync'); 5 | 6 | module.exports = async; 7 | -------------------------------------------------------------------------------- /node_modules/resolve/lib/caller.js: -------------------------------------------------------------------------------- 1 | module.exports = function () { 2 | // see https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi 3 | var origPrepareStackTrace = Error.prepareStackTrace; 4 | Error.prepareStackTrace = function (_, stack) { return stack; }; 5 | var stack = (new Error()).stack; 6 | Error.prepareStackTrace = origPrepareStackTrace; 7 | return stack[2].getFileName(); 8 | }; 9 | -------------------------------------------------------------------------------- /node_modules/resolve/lib/core.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var isCoreModule = require('is-core-module'); 4 | var data = require('./core.json'); 5 | 6 | var core = {}; 7 | for (var mod in data) { // eslint-disable-line no-restricted-syntax 8 | if (Object.prototype.hasOwnProperty.call(data, mod)) { 9 | core[mod] = isCoreModule(mod); 10 | } 11 | } 12 | module.exports = core; 13 | -------------------------------------------------------------------------------- /node_modules/resolve/lib/homedir.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var os = require('os'); 4 | 5 | // adapted from https://github.com/sindresorhus/os-homedir/blob/11e089f4754db38bb535e5a8416320c4446e8cfd/index.js 6 | 7 | module.exports = os.homedir || function homedir() { 8 | var home = process.env.HOME; 9 | var user = process.env.LOGNAME || process.env.USER || process.env.LNAME || process.env.USERNAME; 10 | 11 | if (process.platform === 'win32') { 12 | return process.env.USERPROFILE || process.env.HOMEDRIVE + process.env.HOMEPATH || home || null; 13 | } 14 | 15 | if (process.platform === 'darwin') { 16 | return home || (user ? '/Users/' + user : null); 17 | } 18 | 19 | if (process.platform === 'linux') { 20 | return home || (process.getuid() === 0 ? '/root' : (user ? '/home/' + user : null)); // eslint-disable-line no-extra-parens 21 | } 22 | 23 | return home || null; 24 | }; 25 | -------------------------------------------------------------------------------- /node_modules/resolve/lib/is-core.js: -------------------------------------------------------------------------------- 1 | var isCoreModule = require('is-core-module'); 2 | 3 | module.exports = function isCore(x) { 4 | return isCoreModule(x); 5 | }; 6 | -------------------------------------------------------------------------------- /node_modules/resolve/lib/node-modules-paths.js: -------------------------------------------------------------------------------- 1 | var path = require('path'); 2 | var parse = path.parse || require('path-parse'); // eslint-disable-line global-require 3 | 4 | var getNodeModulesDirs = function getNodeModulesDirs(absoluteStart, modules) { 5 | var prefix = '/'; 6 | if ((/^([A-Za-z]:)/).test(absoluteStart)) { 7 | prefix = ''; 8 | } else if ((/^\\\\/).test(absoluteStart)) { 9 | prefix = '\\\\'; 10 | } 11 | 12 | var paths = [absoluteStart]; 13 | var parsed = parse(absoluteStart); 14 | while (parsed.dir !== paths[paths.length - 1]) { 15 | paths.push(parsed.dir); 16 | parsed = parse(parsed.dir); 17 | } 18 | 19 | return paths.reduce(function (dirs, aPath) { 20 | return dirs.concat(modules.map(function (moduleDir) { 21 | return path.resolve(prefix, aPath, moduleDir); 22 | })); 23 | }, []); 24 | }; 25 | 26 | module.exports = function nodeModulesPaths(start, opts, request) { 27 | var modules = opts && opts.moduleDirectory 28 | ? [].concat(opts.moduleDirectory) 29 | : ['node_modules']; 30 | 31 | if (opts && typeof opts.paths === 'function') { 32 | return opts.paths( 33 | request, 34 | start, 35 | function () { return getNodeModulesDirs(start, modules); }, 36 | opts 37 | ); 38 | } 39 | 40 | var dirs = getNodeModulesDirs(start, modules); 41 | return opts && opts.paths ? dirs.concat(opts.paths) : dirs; 42 | }; 43 | -------------------------------------------------------------------------------- /node_modules/resolve/lib/normalize-options.js: -------------------------------------------------------------------------------- 1 | module.exports = function (x, opts) { 2 | /** 3 | * This file is purposefully a passthrough. It's expected that third-party 4 | * environments will override it at runtime in order to inject special logic 5 | * into `resolve` (by manipulating the options). One such example is the PnP 6 | * code path in Yarn. 7 | */ 8 | 9 | return opts || {}; 10 | }; 11 | -------------------------------------------------------------------------------- /node_modules/resolve/sync.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = require('./lib/sync'); 4 | -------------------------------------------------------------------------------- /node_modules/resolve/test/dotdot.js: -------------------------------------------------------------------------------- 1 | var path = require('path'); 2 | var test = require('tape'); 3 | var resolve = require('../'); 4 | 5 | test('dotdot', function (t) { 6 | t.plan(4); 7 | var dir = path.join(__dirname, '/dotdot/abc'); 8 | 9 | resolve('..', { basedir: dir }, function (err, res, pkg) { 10 | t.ifError(err); 11 | t.equal(res, path.join(__dirname, 'dotdot/index.js')); 12 | }); 13 | 14 | resolve('.', { basedir: dir }, function (err, res, pkg) { 15 | t.ifError(err); 16 | t.equal(res, path.join(dir, 'index.js')); 17 | }); 18 | }); 19 | 20 | test('dotdot sync', function (t) { 21 | t.plan(2); 22 | var dir = path.join(__dirname, '/dotdot/abc'); 23 | 24 | var a = resolve.sync('..', { basedir: dir }); 25 | t.equal(a, path.join(__dirname, 'dotdot/index.js')); 26 | 27 | var b = resolve.sync('.', { basedir: dir }); 28 | t.equal(b, path.join(dir, 'index.js')); 29 | }); 30 | -------------------------------------------------------------------------------- /node_modules/resolve/test/dotdot/abc/index.js: -------------------------------------------------------------------------------- 1 | var x = require('..'); 2 | console.log(x); 3 | -------------------------------------------------------------------------------- /node_modules/resolve/test/dotdot/index.js: -------------------------------------------------------------------------------- 1 | module.exports = 'whatever'; 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/faulty_basedir.js: -------------------------------------------------------------------------------- 1 | var test = require('tape'); 2 | var path = require('path'); 3 | var resolve = require('../'); 4 | 5 | test('faulty basedir must produce error in windows', { skip: process.platform !== 'win32' }, function (t) { 6 | t.plan(1); 7 | 8 | var resolverDir = 'C:\\a\\b\\c\\d'; 9 | 10 | resolve('tape/lib/test.js', { basedir: resolverDir }, function (err, res, pkg) { 11 | t.equal(!!err, true); 12 | }); 13 | }); 14 | 15 | test('non-existent basedir should not throw when preserveSymlinks is false', function (t) { 16 | t.plan(2); 17 | 18 | var opts = { 19 | basedir: path.join(path.sep, 'unreal', 'path', 'that', 'does', 'not', 'exist'), 20 | preserveSymlinks: false 21 | }; 22 | 23 | var module = './dotdot/abc'; 24 | 25 | resolve(module, opts, function (err, res) { 26 | t.equal(err.code, 'MODULE_NOT_FOUND'); 27 | t.equal(res, undefined); 28 | }); 29 | }); 30 | -------------------------------------------------------------------------------- /node_modules/resolve/test/filter.js: -------------------------------------------------------------------------------- 1 | var path = require('path'); 2 | var test = require('tape'); 3 | var resolve = require('../'); 4 | 5 | test('filter', function (t) { 6 | t.plan(4); 7 | var dir = path.join(__dirname, 'resolver'); 8 | var packageFilterArgs; 9 | resolve('./baz', { 10 | basedir: dir, 11 | packageFilter: function (pkg, pkgfile) { 12 | pkg.main = 'doom'; // eslint-disable-line no-param-reassign 13 | packageFilterArgs = [pkg, pkgfile]; 14 | return pkg; 15 | } 16 | }, function (err, res, pkg) { 17 | if (err) t.fail(err); 18 | 19 | t.equal(res, path.join(dir, 'baz/doom.js'), 'changing the package "main" works'); 20 | 21 | var packageData = packageFilterArgs[0]; 22 | t.equal(pkg, packageData, 'first packageFilter argument is "pkg"'); 23 | t.equal(packageData.main, 'doom', 'package "main" was altered'); 24 | 25 | var packageFile = packageFilterArgs[1]; 26 | t.equal( 27 | packageFile, 28 | path.join(dir, 'baz/package.json'), 29 | 'second packageFilter argument is "pkgfile"' 30 | ); 31 | 32 | t.end(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /node_modules/resolve/test/filter_sync.js: -------------------------------------------------------------------------------- 1 | var path = require('path'); 2 | var test = require('tape'); 3 | var resolve = require('../'); 4 | 5 | test('filter', function (t) { 6 | var dir = path.join(__dirname, 'resolver'); 7 | var packageFilterArgs; 8 | var res = resolve.sync('./baz', { 9 | basedir: dir, 10 | // NOTE: in v2.x, this will be `pkg, pkgfile, dir`, but must remain "broken" here in v1.x for compatibility 11 | packageFilter: function (pkg, /*pkgfile,*/ dir) { // eslint-disable-line spaced-comment 12 | pkg.main = 'doom'; // eslint-disable-line no-param-reassign 13 | packageFilterArgs = 'is 1.x' ? [pkg, dir] : [pkg, pkgfile, dir]; // eslint-disable-line no-constant-condition, no-undef 14 | return pkg; 15 | } 16 | }); 17 | 18 | t.equal(res, path.join(dir, 'baz/doom.js'), 'changing the package "main" works'); 19 | 20 | var packageData = packageFilterArgs[0]; 21 | t.equal(packageData.main, 'doom', 'package "main" was altered'); 22 | 23 | if (!'is 1.x') { // eslint-disable-line no-constant-condition 24 | var packageFile = packageFilterArgs[1]; 25 | t.equal(packageFile, path.join(dir, 'baz', 'package.json'), 'package.json path is correct'); 26 | } 27 | 28 | var packageDir = packageFilterArgs['is 1.x' ? 1 : 2]; // eslint-disable-line no-constant-condition 29 | // eslint-disable-next-line no-constant-condition 30 | t.equal(packageDir, path.join(dir, 'baz'), ('is 1.x' ? 'second' : 'third') + ' packageFilter argument is "dir"'); 31 | 32 | t.end(); 33 | }); 34 | -------------------------------------------------------------------------------- /node_modules/resolve/test/module_dir/xmodules/aaa/index.js: -------------------------------------------------------------------------------- 1 | module.exports = function (x) { return x * 100; }; 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/module_dir/ymodules/aaa/index.js: -------------------------------------------------------------------------------- 1 | module.exports = function (x) { return x + 100; }; 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/module_dir/zmodules/bbb/main.js: -------------------------------------------------------------------------------- 1 | module.exports = function (n) { return n * 111; }; 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/module_dir/zmodules/bbb/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": "main.js" 3 | } 4 | -------------------------------------------------------------------------------- /node_modules/resolve/test/node_path/x/aaa/index.js: -------------------------------------------------------------------------------- 1 | module.exports = 'A'; 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/node_path/x/ccc/index.js: -------------------------------------------------------------------------------- 1 | module.exports = 'C'; 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/node_path/y/bbb/index.js: -------------------------------------------------------------------------------- 1 | module.exports = 'B'; 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/node_path/y/ccc/index.js: -------------------------------------------------------------------------------- 1 | module.exports = 'CY'; 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/nonstring.js: -------------------------------------------------------------------------------- 1 | var test = require('tape'); 2 | var resolve = require('../'); 3 | 4 | test('nonstring', function (t) { 5 | t.plan(1); 6 | resolve(555, function (err, res, pkg) { 7 | t.ok(err); 8 | }); 9 | }); 10 | -------------------------------------------------------------------------------- /node_modules/resolve/test/pathfilter/deep_ref/main.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/node_modules/resolve/test/pathfilter/deep_ref/main.js -------------------------------------------------------------------------------- /node_modules/resolve/test/precedence.js: -------------------------------------------------------------------------------- 1 | var path = require('path'); 2 | var test = require('tape'); 3 | var resolve = require('../'); 4 | 5 | test('precedence', function (t) { 6 | t.plan(3); 7 | var dir = path.join(__dirname, 'precedence/aaa'); 8 | 9 | resolve('./', { basedir: dir }, function (err, res, pkg) { 10 | t.ifError(err); 11 | t.equal(res, path.join(dir, 'index.js')); 12 | t.equal(pkg.name, 'resolve'); 13 | }); 14 | }); 15 | 16 | test('./ should not load ${dir}.js', function (t) { // eslint-disable-line no-template-curly-in-string 17 | t.plan(1); 18 | var dir = path.join(__dirname, 'precedence/bbb'); 19 | 20 | resolve('./', { basedir: dir }, function (err, res, pkg) { 21 | t.ok(err); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /node_modules/resolve/test/precedence/aaa.js: -------------------------------------------------------------------------------- 1 | module.exports = 'wtf'; 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/precedence/aaa/index.js: -------------------------------------------------------------------------------- 1 | module.exports = 'okok'; 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/precedence/aaa/main.js: -------------------------------------------------------------------------------- 1 | console.log(require('./')); 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/precedence/bbb.js: -------------------------------------------------------------------------------- 1 | module.exports = '>_<'; 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/precedence/bbb/main.js: -------------------------------------------------------------------------------- 1 | console.log(require('./')); // should throw 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/baz/doom.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/node_modules/resolve/test/resolver/baz/doom.js -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/baz/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "baz", 3 | "main": "quux.js" 4 | } 5 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/baz/quux.js: -------------------------------------------------------------------------------- 1 | module.exports = 1; 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/browser_field/a.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/node_modules/resolve/test/resolver/browser_field/a.js -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/browser_field/b.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/node_modules/resolve/test/resolver/browser_field/b.js -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/browser_field/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "browser_field", 3 | "main": "a", 4 | "browser": "b" 5 | } 6 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/cup.coffee: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/dot_main/index.js: -------------------------------------------------------------------------------- 1 | module.exports = 1; 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/dot_main/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": "." 3 | } 4 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/dot_slash_main/index.js: -------------------------------------------------------------------------------- 1 | module.exports = 1; 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/dot_slash_main/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": "./" 3 | } 4 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/false_main/index.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/node_modules/resolve/test/resolver/false_main/index.js -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/false_main/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "false_main", 3 | "main": false 4 | } 5 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/foo.js: -------------------------------------------------------------------------------- 1 | module.exports = 1; 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/incorrect_main/index.js: -------------------------------------------------------------------------------- 1 | // this is the actual main file 'index.js', not 'wrong.js' like the package.json would indicate 2 | module.exports = 1; 3 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/incorrect_main/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": "wrong.js" 3 | } 4 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/invalid_main/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "invalid_main", 3 | "main": [ 4 | "why is this a thing", 5 | "srsly omg wtf" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/mug.coffee: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/node_modules/resolve/test/resolver/mug.coffee -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/mug.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/node_modules/resolve/test/resolver/mug.js -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/multirepo/lerna.json: -------------------------------------------------------------------------------- 1 | { 2 | "packages": [ 3 | "packages/*" 4 | ], 5 | "version": "0.0.0" 6 | } 7 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/multirepo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ljharb-monorepo-symlink-test", 3 | "private": true, 4 | "version": "0.0.0", 5 | "description": "", 6 | "main": "index.js", 7 | "scripts": { 8 | "postinstall": "lerna bootstrap", 9 | "test": "node packages/package-a" 10 | }, 11 | "author": "", 12 | "license": "MIT", 13 | "dependencies": { 14 | "jquery": "^3.3.1", 15 | "resolve": "../../../" 16 | }, 17 | "devDependencies": { 18 | "lerna": "^3.4.3" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/multirepo/packages/package-a/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var assert = require('assert'); 4 | var path = require('path'); 5 | var resolve = require('resolve'); 6 | 7 | var basedir = __dirname + '/node_modules/@my-scope/package-b'; 8 | 9 | var expected = path.join(__dirname, '../../node_modules/jquery/dist/jquery.js'); 10 | 11 | /* 12 | * preserveSymlinks === false 13 | * will search NPM package from 14 | * - packages/package-b/node_modules 15 | * - packages/node_modules 16 | * - node_modules 17 | */ 18 | assert.equal(resolve.sync('jquery', { basedir: basedir, preserveSymlinks: false }), expected); 19 | assert.equal(resolve.sync('../../node_modules/jquery', { basedir: basedir, preserveSymlinks: false }), expected); 20 | 21 | /* 22 | * preserveSymlinks === true 23 | * will search NPM package from 24 | * - packages/package-a/node_modules/@my-scope/packages/package-b/node_modules 25 | * - packages/package-a/node_modules/@my-scope/packages/node_modules 26 | * - packages/package-a/node_modules/@my-scope/node_modules 27 | * - packages/package-a/node_modules/node_modules 28 | * - packages/package-a/node_modules 29 | * - packages/node_modules 30 | * - node_modules 31 | */ 32 | assert.equal(resolve.sync('jquery', { basedir: basedir, preserveSymlinks: true }), expected); 33 | assert.equal(resolve.sync('../../../../../node_modules/jquery', { basedir: basedir, preserveSymlinks: true }), expected); 34 | 35 | console.log(' * all monorepo paths successfully resolved through symlinks'); 36 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/multirepo/packages/package-a/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@my-scope/package-a", 3 | "version": "0.0.0", 4 | "private": true, 5 | "description": "", 6 | "license": "MIT", 7 | "main": "index.js", 8 | "scripts": { 9 | "test": "echo \"Error: run tests from root\" && exit 1" 10 | }, 11 | "dependencies": { 12 | "@my-scope/package-b": "^0.0.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/multirepo/packages/package-b/index.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/node_modules/resolve/test/resolver/multirepo/packages/package-b/index.js -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/multirepo/packages/package-b/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@my-scope/package-b", 3 | "private": true, 4 | "version": "0.0.0", 5 | "description": "", 6 | "license": "MIT", 7 | "main": "index.js", 8 | "scripts": { 9 | "test": "echo \"Error: run tests from root\" && exit 1" 10 | }, 11 | "dependencies": { 12 | "@my-scope/package-a": "^0.0.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/nested_symlinks/mylib/async.js: -------------------------------------------------------------------------------- 1 | var a = require.resolve('buffer/').replace(process.cwd(), '$CWD'); 2 | var b; 3 | var c; 4 | 5 | var test = function test() { 6 | console.log(a, ': require.resolve, preserveSymlinks ' + (process.execArgv.indexOf('preserve-symlinks') > -1 ? 'true' : 'false')); 7 | console.log(b, ': preserveSymlinks true'); 8 | console.log(c, ': preserveSymlinks false'); 9 | 10 | if (a !== b && a !== c) { 11 | throw 'async: no match'; 12 | } 13 | console.log('async: success! a matched either b or c\n'); 14 | }; 15 | 16 | require('resolve')('buffer/', { preserveSymlinks: true }, function (err, result) { 17 | if (err) { throw err; } 18 | b = result.replace(process.cwd(), '$CWD'); 19 | if (b && c) { test(); } 20 | }); 21 | require('resolve')('buffer/', { preserveSymlinks: false }, function (err, result) { 22 | if (err) { throw err; } 23 | c = result.replace(process.cwd(), '$CWD'); 24 | if (b && c) { test(); } 25 | }); 26 | 27 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/nested_symlinks/mylib/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mylib", 3 | "version": "0.0.0", 4 | "description": "", 5 | "private": true, 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "buffer": "*" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/nested_symlinks/mylib/sync.js: -------------------------------------------------------------------------------- 1 | var a = require.resolve('buffer/').replace(process.cwd(), '$CWD'); 2 | var b = require('resolve').sync('buffer/', { preserveSymlinks: true }).replace(process.cwd(), '$CWD'); 3 | var c = require('resolve').sync('buffer/', { preserveSymlinks: false }).replace(process.cwd(), '$CWD'); 4 | 5 | console.log(a, ': require.resolve, preserveSymlinks ' + (process.execArgv.indexOf('preserve-symlinks') > -1 ? 'true' : 'false')); 6 | console.log(b, ': preserveSymlinks true'); 7 | console.log(c, ': preserveSymlinks false'); 8 | 9 | if (a !== b && a !== c) { 10 | throw 'sync: no match'; 11 | } 12 | console.log('sync: success! a matched either b or c\n'); 13 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/other_path/lib/other-lib.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/node_modules/resolve/test/resolver/other_path/lib/other-lib.js -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/other_path/root.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/node_modules/resolve/test/resolver/other_path/root.js -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/quux/foo/index.js: -------------------------------------------------------------------------------- 1 | module.exports = 1; 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/same_names/foo.js: -------------------------------------------------------------------------------- 1 | module.exports = 42; 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/same_names/foo/index.js: -------------------------------------------------------------------------------- 1 | module.exports = 1; 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/symlinked/_/node_modules/foo.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/node_modules/resolve/test/resolver/symlinked/_/node_modules/foo.js -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/symlinked/_/symlink_target/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/node_modules/resolve/test/resolver/symlinked/_/symlink_target/.gitkeep -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/symlinked/package/bar.js: -------------------------------------------------------------------------------- 1 | module.exports = 'bar'; 2 | -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/symlinked/package/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": "bar.js" 3 | } -------------------------------------------------------------------------------- /node_modules/resolve/test/resolver/without_basedir/main.js: -------------------------------------------------------------------------------- 1 | var resolve = require('../../../'); 2 | 3 | module.exports = function (t, cb) { 4 | resolve('mymodule', null, cb); 5 | }; 6 | -------------------------------------------------------------------------------- /node_modules/resolve/test/shadowed_core/node_modules/util/index.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/node_modules/resolve/test/shadowed_core/node_modules/util/index.js -------------------------------------------------------------------------------- /node_modules/resolve/test/subdirs.js: -------------------------------------------------------------------------------- 1 | var test = require('tape'); 2 | var resolve = require('../'); 3 | var path = require('path'); 4 | 5 | test('subdirs', function (t) { 6 | t.plan(2); 7 | 8 | var dir = path.join(__dirname, '/subdirs'); 9 | resolve('a/b/c/x.json', { basedir: dir }, function (err, res) { 10 | t.ifError(err); 11 | t.equal(res, path.join(dir, 'node_modules/a/b/c/x.json')); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /node_modules/safe-buffer/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) Feross Aboukhadijeh 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /node_modules/safe-buffer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "safe-buffer", 3 | "description": "Safer Node.js Buffer API", 4 | "version": "5.2.1", 5 | "author": { 6 | "name": "Feross Aboukhadijeh", 7 | "email": "feross@feross.org", 8 | "url": "https://feross.org" 9 | }, 10 | "bugs": { 11 | "url": "https://github.com/feross/safe-buffer/issues" 12 | }, 13 | "devDependencies": { 14 | "standard": "*", 15 | "tape": "^5.0.0" 16 | }, 17 | "homepage": "https://github.com/feross/safe-buffer", 18 | "keywords": [ 19 | "buffer", 20 | "buffer allocate", 21 | "node security", 22 | "safe", 23 | "safe-buffer", 24 | "security", 25 | "uninitialized" 26 | ], 27 | "license": "MIT", 28 | "main": "index.js", 29 | "types": "index.d.ts", 30 | "repository": { 31 | "type": "git", 32 | "url": "git://github.com/feross/safe-buffer.git" 33 | }, 34 | "scripts": { 35 | "test": "standard && tape test/*.js" 36 | }, 37 | "funding": [ 38 | { 39 | "type": "github", 40 | "url": "https://github.com/sponsors/feross" 41 | }, 42 | { 43 | "type": "patreon", 44 | "url": "https://www.patreon.com/feross" 45 | }, 46 | { 47 | "type": "consulting", 48 | "url": "https://feross.org/support" 49 | } 50 | ] 51 | } 52 | -------------------------------------------------------------------------------- /node_modules/shelljs/bin/shjs: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | if (require.main !== module) { 4 | throw new Error('Executable-only module should not be required'); 5 | } 6 | 7 | // we must import global ShellJS methods after the require.main check to prevent the global 8 | // namespace from being polluted if the error is caught 9 | require('../global'); 10 | 11 | function exitWithErrorMessage(msg) { 12 | console.log(msg); 13 | console.log(); 14 | process.exit(1); 15 | } 16 | 17 | if (process.argv.length < 3) { 18 | exitWithErrorMessage('ShellJS: missing argument (script name)'); 19 | } 20 | 21 | var args, 22 | scriptName = process.argv[2]; 23 | env['NODE_PATH'] = __dirname + '/../..'; 24 | 25 | if (!scriptName.match(/\.js/) && !scriptName.match(/\.coffee/)) { 26 | if (test('-f', scriptName + '.js')) 27 | scriptName += '.js'; 28 | if (test('-f', scriptName + '.coffee')) 29 | scriptName += '.coffee'; 30 | } 31 | 32 | if (!test('-f', scriptName)) { 33 | exitWithErrorMessage('ShellJS: script not found ('+scriptName+')'); 34 | } 35 | 36 | args = process.argv.slice(3); 37 | 38 | for (var i = 0, l = args.length; i < l; i++) { 39 | if (args[i][0] !== "-"){ 40 | args[i] = '"' + args[i] + '"'; // fixes arguments with multiple words 41 | } 42 | } 43 | 44 | var path = require('path'); 45 | var extensions = require('interpret').extensions; 46 | var rechoir = require('rechoir'); 47 | rechoir.prepare(extensions, scriptName); 48 | require(require.resolve(path.resolve(process.cwd(), scriptName))); 49 | -------------------------------------------------------------------------------- /node_modules/shelljs/commands.js: -------------------------------------------------------------------------------- 1 | module.exports = [ 2 | 'cat', 3 | 'cd', 4 | 'chmod', 5 | 'cp', 6 | 'dirs', 7 | 'echo', 8 | 'exec', 9 | 'find', 10 | 'grep', 11 | 'head', 12 | 'ln', 13 | 'ls', 14 | 'mkdir', 15 | 'mv', 16 | 'pwd', 17 | 'rm', 18 | 'sed', 19 | 'set', 20 | 'sort', 21 | 'tail', 22 | 'tempdir', 23 | 'test', 24 | 'to', 25 | 'toEnd', 26 | 'touch', 27 | 'uniq', 28 | 'which', 29 | ]; 30 | -------------------------------------------------------------------------------- /node_modules/shelljs/global.js: -------------------------------------------------------------------------------- 1 | /* eslint no-extend-native: 0 */ 2 | var shell = require('./shell.js'); 3 | var common = require('./src/common'); 4 | Object.keys(shell).forEach(function (cmd) { 5 | global[cmd] = shell[cmd]; 6 | }); 7 | 8 | var _to = require('./src/to'); 9 | String.prototype.to = common.wrap('to', _to); 10 | 11 | var _toEnd = require('./src/toEnd'); 12 | String.prototype.toEnd = common.wrap('toEnd', _toEnd); 13 | -------------------------------------------------------------------------------- /node_modules/shelljs/make.js: -------------------------------------------------------------------------------- 1 | require('./global'); 2 | 3 | global.config.fatal = true; 4 | global.target = {}; 5 | 6 | var args = process.argv.slice(2), 7 | targetArgs, 8 | dashesLoc = args.indexOf('--'); 9 | 10 | // split args, everything after -- if only for targets 11 | if (dashesLoc > -1) { 12 | targetArgs = args.slice(dashesLoc + 1, args.length); 13 | args = args.slice(0, dashesLoc); 14 | } 15 | 16 | // This ensures we only execute the script targets after the entire script has 17 | // been evaluated 18 | setTimeout(function() { 19 | var t; 20 | 21 | if (args.length === 1 && args[0] === '--help') { 22 | console.log('Available targets:'); 23 | for (t in global.target) 24 | console.log(' ' + t); 25 | return; 26 | } 27 | 28 | // Wrap targets to prevent duplicate execution 29 | for (t in global.target) { 30 | (function(t, oldTarget){ 31 | 32 | // Wrap it 33 | global.target[t] = function() { 34 | if (!oldTarget.done){ 35 | oldTarget.done = true; 36 | oldTarget.result = oldTarget.apply(oldTarget, arguments); 37 | } 38 | return oldTarget.result; 39 | }; 40 | 41 | })(t, global.target[t]); 42 | } 43 | 44 | // Execute desired targets 45 | if (args.length > 0) { 46 | args.forEach(function(arg) { 47 | if (arg in global.target) 48 | global.target[arg](targetArgs); 49 | else { 50 | console.log('no such target: ' + arg); 51 | } 52 | }); 53 | } else if ('all' in global.target) { 54 | global.target.all(targetArgs); 55 | } 56 | 57 | }, 0); 58 | -------------------------------------------------------------------------------- /node_modules/shelljs/plugin.js: -------------------------------------------------------------------------------- 1 | // Various utilties exposed to plugins 2 | 3 | require('./shell'); // Create the ShellJS instance (mandatory) 4 | 5 | var common = require('./src/common'); 6 | 7 | var exportedAttributes = [ 8 | 'error', // For signaling errors from within commands 9 | 'parseOptions', // For custom option parsing 10 | 'readFromPipe', // For commands with the .canReceivePipe attribute 11 | 'register', // For registering plugins 12 | ]; 13 | 14 | exportedAttributes.forEach(function (attr) { 15 | exports[attr] = common[attr]; 16 | }); 17 | -------------------------------------------------------------------------------- /node_modules/shelljs/src/cd.js: -------------------------------------------------------------------------------- 1 | var os = require('os'); 2 | var common = require('./common'); 3 | 4 | common.register('cd', _cd, {}); 5 | 6 | //@ 7 | //@ ### cd([dir]) 8 | //@ 9 | //@ Changes to directory `dir` for the duration of the script. Changes to home 10 | //@ directory if no argument is supplied. 11 | function _cd(options, dir) { 12 | if (!dir) dir = os.homedir(); 13 | 14 | if (dir === '-') { 15 | if (!process.env.OLDPWD) { 16 | common.error('could not find previous directory'); 17 | } else { 18 | dir = process.env.OLDPWD; 19 | } 20 | } 21 | 22 | try { 23 | var curDir = process.cwd(); 24 | process.chdir(dir); 25 | process.env.OLDPWD = curDir; 26 | } catch (e) { 27 | // something went wrong, let's figure out the error 28 | var err; 29 | try { 30 | common.statFollowLinks(dir); // if this succeeds, it must be some sort of file 31 | err = 'not a directory: ' + dir; 32 | } catch (e2) { 33 | err = 'no such file or directory: ' + dir; 34 | } 35 | if (err) common.error(err); 36 | } 37 | return ''; 38 | } 39 | module.exports = _cd; 40 | -------------------------------------------------------------------------------- /node_modules/shelljs/src/error.js: -------------------------------------------------------------------------------- 1 | var common = require('./common'); 2 | 3 | //@ 4 | //@ ### error() 5 | //@ 6 | //@ Tests if error occurred in the last command. Returns a truthy value if an 7 | //@ error returned, or a falsy value otherwise. 8 | //@ 9 | //@ **Note**: do not rely on the 10 | //@ return value to be an error message. If you need the last error message, use 11 | //@ the `.stderr` attribute from the last command's return value instead. 12 | function error() { 13 | return common.state.error; 14 | } 15 | module.exports = error; 16 | -------------------------------------------------------------------------------- /node_modules/shelljs/src/exec-child.js: -------------------------------------------------------------------------------- 1 | if (require.main !== module) { 2 | throw new Error('This file should not be required'); 3 | } 4 | 5 | var childProcess = require('child_process'); 6 | var fs = require('fs'); 7 | 8 | var paramFilePath = process.argv[2]; 9 | 10 | var serializedParams = fs.readFileSync(paramFilePath, 'utf8'); 11 | var params = JSON.parse(serializedParams); 12 | 13 | var cmd = params.command; 14 | var execOptions = params.execOptions; 15 | var pipe = params.pipe; 16 | var stdoutFile = params.stdoutFile; 17 | var stderrFile = params.stderrFile; 18 | 19 | var c = childProcess.exec(cmd, execOptions, function (err) { 20 | if (!err) { 21 | process.exitCode = 0; 22 | } else if (err.code === undefined) { 23 | process.exitCode = 1; 24 | } else { 25 | process.exitCode = err.code; 26 | } 27 | }); 28 | 29 | var stdoutStream = fs.createWriteStream(stdoutFile); 30 | var stderrStream = fs.createWriteStream(stderrFile); 31 | 32 | c.stdout.pipe(stdoutStream); 33 | c.stderr.pipe(stderrStream); 34 | c.stdout.pipe(process.stdout); 35 | c.stderr.pipe(process.stderr); 36 | 37 | if (pipe) { 38 | c.stdin.end(pipe); 39 | } 40 | -------------------------------------------------------------------------------- /node_modules/shelljs/src/popd.js: -------------------------------------------------------------------------------- 1 | // see dirs.js 2 | -------------------------------------------------------------------------------- /node_modules/shelljs/src/pushd.js: -------------------------------------------------------------------------------- 1 | // see dirs.js 2 | -------------------------------------------------------------------------------- /node_modules/shelljs/src/pwd.js: -------------------------------------------------------------------------------- 1 | var path = require('path'); 2 | var common = require('./common'); 3 | 4 | common.register('pwd', _pwd, { 5 | allowGlobbing: false, 6 | }); 7 | 8 | //@ 9 | //@ ### pwd() 10 | //@ 11 | //@ Returns the current directory. 12 | function _pwd() { 13 | var pwd = path.resolve(process.cwd()); 14 | return pwd; 15 | } 16 | module.exports = _pwd; 17 | -------------------------------------------------------------------------------- /node_modules/shelljs/src/set.js: -------------------------------------------------------------------------------- 1 | var common = require('./common'); 2 | 3 | common.register('set', _set, { 4 | allowGlobbing: false, 5 | wrapOutput: false, 6 | }); 7 | 8 | //@ 9 | //@ ### set(options) 10 | //@ 11 | //@ Available options: 12 | //@ 13 | //@ + `+/-e`: exit upon error (`config.fatal`) 14 | //@ + `+/-v`: verbose: show all commands (`config.verbose`) 15 | //@ + `+/-f`: disable filename expansion (globbing) 16 | //@ 17 | //@ Examples: 18 | //@ 19 | //@ ```javascript 20 | //@ set('-e'); // exit upon first error 21 | //@ set('+e'); // this undoes a "set('-e')" 22 | //@ ``` 23 | //@ 24 | //@ Sets global configuration variables. 25 | function _set(options) { 26 | if (!options) { 27 | var args = [].slice.call(arguments, 0); 28 | if (args.length < 2) common.error('must provide an argument'); 29 | options = args[1]; 30 | } 31 | var negate = (options[0] === '+'); 32 | if (negate) { 33 | options = '-' + options.slice(1); // parseOptions needs a '-' prefix 34 | } 35 | options = common.parseOptions(options, { 36 | 'e': 'fatal', 37 | 'v': 'verbose', 38 | 'f': 'noglob', 39 | }); 40 | 41 | if (negate) { 42 | Object.keys(options).forEach(function (key) { 43 | options[key] = !options[key]; 44 | }); 45 | } 46 | 47 | Object.keys(options).forEach(function (key) { 48 | // Only change the global config if `negate` is false and the option is true 49 | // or if `negate` is true and the option is false (aka negate !== option) 50 | if (negate !== options[key]) { 51 | common.config[key] = options[key]; 52 | } 53 | }); 54 | return; 55 | } 56 | module.exports = _set; 57 | -------------------------------------------------------------------------------- /node_modules/shelljs/src/to.js: -------------------------------------------------------------------------------- 1 | var common = require('./common'); 2 | var fs = require('fs'); 3 | var path = require('path'); 4 | 5 | common.register('to', _to, { 6 | pipeOnly: true, 7 | wrapOutput: false, 8 | }); 9 | 10 | //@ 11 | //@ ### ShellString.prototype.to(file) 12 | //@ 13 | //@ Examples: 14 | //@ 15 | //@ ```javascript 16 | //@ cat('input.txt').to('output.txt'); 17 | //@ ``` 18 | //@ 19 | //@ Analogous to the redirection operator `>` in Unix, but works with 20 | //@ `ShellStrings` (such as those returned by `cat`, `grep`, etc.). _Like Unix 21 | //@ redirections, `to()` will overwrite any existing file!_ 22 | function _to(options, file) { 23 | if (!file) common.error('wrong arguments'); 24 | 25 | if (!fs.existsSync(path.dirname(file))) { 26 | common.error('no such file or directory: ' + path.dirname(file)); 27 | } 28 | 29 | try { 30 | fs.writeFileSync(file, this.stdout || this.toString(), 'utf8'); 31 | return this; 32 | } catch (e) { 33 | /* istanbul ignore next */ 34 | common.error('could not write to file (code ' + e.code + '): ' + file, { continue: true }); 35 | } 36 | } 37 | module.exports = _to; 38 | -------------------------------------------------------------------------------- /node_modules/shelljs/src/toEnd.js: -------------------------------------------------------------------------------- 1 | var common = require('./common'); 2 | var fs = require('fs'); 3 | var path = require('path'); 4 | 5 | common.register('toEnd', _toEnd, { 6 | pipeOnly: true, 7 | wrapOutput: false, 8 | }); 9 | 10 | //@ 11 | //@ ### ShellString.prototype.toEnd(file) 12 | //@ 13 | //@ Examples: 14 | //@ 15 | //@ ```javascript 16 | //@ cat('input.txt').toEnd('output.txt'); 17 | //@ ``` 18 | //@ 19 | //@ Analogous to the redirect-and-append operator `>>` in Unix, but works with 20 | //@ `ShellStrings` (such as those returned by `cat`, `grep`, etc.). 21 | function _toEnd(options, file) { 22 | if (!file) common.error('wrong arguments'); 23 | 24 | if (!fs.existsSync(path.dirname(file))) { 25 | common.error('no such file or directory: ' + path.dirname(file)); 26 | } 27 | 28 | try { 29 | fs.appendFileSync(file, this.stdout || this.toString(), 'utf8'); 30 | return this; 31 | } catch (e) { 32 | /* istanbul ignore next */ 33 | common.error('could not append to file (code ' + e.code + '): ' + file, { continue: true }); 34 | } 35 | } 36 | module.exports = _toEnd; 37 | -------------------------------------------------------------------------------- /node_modules/supports-preserve-symlinks-flag/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | 4 | "extends": "@ljharb", 5 | 6 | "env": { 7 | "browser": true, 8 | "node": true, 9 | }, 10 | 11 | "rules": { 12 | "id-length": "off", 13 | }, 14 | } 15 | -------------------------------------------------------------------------------- /node_modules/supports-preserve-symlinks-flag/.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [ljharb] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: npm/supports-preserve-symlink-flag 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /node_modules/supports-preserve-symlinks-flag/.nycrc: -------------------------------------------------------------------------------- 1 | { 2 | "all": true, 3 | "check-coverage": false, 4 | "reporter": ["text-summary", "text", "html", "json"], 5 | "exclude": [ 6 | "coverage", 7 | "test" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /node_modules/supports-preserve-symlinks-flag/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Inspect JS 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /node_modules/supports-preserve-symlinks-flag/browser.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = null; 4 | -------------------------------------------------------------------------------- /node_modules/supports-preserve-symlinks-flag/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = ( 4 | // node 12+ 5 | process.allowedNodeEnvironmentFlags && process.allowedNodeEnvironmentFlags.has('--preserve-symlinks') 6 | ) || ( 7 | // node v6.2 - v11 8 | String(module.constructor._findPath).indexOf('preserveSymlinks') >= 0 // eslint-disable-line no-underscore-dangle 9 | ); 10 | -------------------------------------------------------------------------------- /node_modules/supports-preserve-symlinks-flag/test/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var test = require('tape'); 4 | var semver = require('semver'); 5 | 6 | var supportsPreserveSymlinks = require('../'); 7 | var browser = require('../browser'); 8 | 9 | test('supportsPreserveSymlinks', function (t) { 10 | t.equal(typeof supportsPreserveSymlinks, 'boolean', 'is a boolean'); 11 | 12 | t.equal(browser, null, 'browser file is `null`'); 13 | t.equal( 14 | supportsPreserveSymlinks, 15 | null, 16 | 'in a browser, is null', 17 | { skip: typeof window === 'undefined' } 18 | ); 19 | 20 | var expected = semver.satisfies(process.version, '>= 6.2'); 21 | t.equal( 22 | supportsPreserveSymlinks, 23 | expected, 24 | 'is true in node v6.2+, false otherwise (actual: ' + supportsPreserveSymlinks + ', expected ' + expected + ')', 25 | { skip: typeof window !== 'undefined' } 26 | ); 27 | 28 | t.end(); 29 | }); 30 | -------------------------------------------------------------------------------- /node_modules/tar/LICENSE: -------------------------------------------------------------------------------- 1 | The ISC License 2 | 3 | Copyright (c) Isaac Z. Schlueter and Contributors 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted, provided that the above 7 | copyright notice and this permission notice appear in all copies. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 15 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 | -------------------------------------------------------------------------------- /node_modules/tar/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | // high-level commands 4 | exports.c = exports.create = require('./lib/create.js') 5 | exports.r = exports.replace = require('./lib/replace.js') 6 | exports.t = exports.list = require('./lib/list.js') 7 | exports.u = exports.update = require('./lib/update.js') 8 | exports.x = exports.extract = require('./lib/extract.js') 9 | 10 | // classes 11 | exports.Pack = require('./lib/pack.js') 12 | exports.Unpack = require('./lib/unpack.js') 13 | exports.Parse = require('./lib/parse.js') 14 | exports.ReadEntry = require('./lib/read-entry.js') 15 | exports.WriteEntry = require('./lib/write-entry.js') 16 | exports.Header = require('./lib/header.js') 17 | exports.Pax = require('./lib/pax.js') 18 | exports.types = require('./lib/types.js') 19 | -------------------------------------------------------------------------------- /node_modules/tar/lib/buffer.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | // Buffer in node 4.x < 4.5.0 doesn't have working Buffer.from 4 | // or Buffer.alloc, and Buffer in node 10 deprecated the ctor. 5 | // .M, this is fine .\^/M.. 6 | let B = Buffer 7 | /* istanbul ignore next */ 8 | if (!B.alloc) { 9 | B = require('safe-buffer').Buffer 10 | } 11 | module.exports = B 12 | -------------------------------------------------------------------------------- /node_modules/tar/lib/high-level-opt.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | // turn tar(1) style args like `C` into the more verbose things like `cwd` 4 | 5 | const argmap = new Map([ 6 | ['C', 'cwd'], 7 | ['f', 'file'], 8 | ['z', 'gzip'], 9 | ['P', 'preservePaths'], 10 | ['U', 'unlink'], 11 | ['strip-components', 'strip'], 12 | ['stripComponents', 'strip'], 13 | ['keep-newer', 'newer'], 14 | ['keepNewer', 'newer'], 15 | ['keep-newer-files', 'newer'], 16 | ['keepNewerFiles', 'newer'], 17 | ['k', 'keep'], 18 | ['keep-existing', 'keep'], 19 | ['keepExisting', 'keep'], 20 | ['m', 'noMtime'], 21 | ['no-mtime', 'noMtime'], 22 | ['p', 'preserveOwner'], 23 | ['L', 'follow'], 24 | ['h', 'follow'] 25 | ]) 26 | 27 | const parse = module.exports = opt => opt ? Object.keys(opt).map(k => [ 28 | argmap.has(k) ? argmap.get(k) : k, opt[k] 29 | ]).reduce((set, kv) => (set[kv[0]] = kv[1], set), Object.create(null)) : {} 30 | -------------------------------------------------------------------------------- /node_modules/tar/lib/mode-fix.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = (mode, isDir) => { 3 | mode &= 0o7777 4 | // if dirs are readable, then they should be listable 5 | if (isDir) { 6 | if (mode & 0o400) 7 | mode |= 0o100 8 | if (mode & 0o40) 9 | mode |= 0o10 10 | if (mode & 0o4) 11 | mode |= 0o1 12 | } 13 | return mode 14 | } 15 | -------------------------------------------------------------------------------- /node_modules/tar/lib/normalize-windows-path.js: -------------------------------------------------------------------------------- 1 | // on windows, either \ or / are valid directory separators. 2 | // on unix, \ is a valid character in filenames. 3 | // so, on windows, and only on windows, we replace all \ chars with /, 4 | // so that we can use / as our one and only directory separator char. 5 | 6 | const platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform 7 | module.exports = platform !== 'win32' ? p => p 8 | : p => p && p.replace(/\\/g, '/') 9 | -------------------------------------------------------------------------------- /node_modules/tar/lib/strip-absolute-path.js: -------------------------------------------------------------------------------- 1 | // unix absolute paths are also absolute on win32, so we use this for both 2 | const { isAbsolute, parse } = require('path').win32 3 | 4 | // returns [root, stripped] 5 | // Note that windows will think that //x/y/z/a has a "root" of //x/y, and in 6 | // those cases, we want to sanitize it to x/y/z/a, not z/a, so we strip / 7 | // explicitly if it's the first character. 8 | // drive-specific relative paths on Windows get their root stripped off even 9 | // though they are not absolute, so `c:../foo` becomes ['c:', '../foo'] 10 | module.exports = path => { 11 | let r = '' 12 | 13 | let parsed = parse(path) 14 | while (isAbsolute(path) || parsed.root) { 15 | // windows will think that //x/y/z has a "root" of //x/y/ 16 | // but strip the //?/C:/ off of //?/C:/path 17 | const root = path.charAt(0) === '/' && path.slice(0, 4) !== '//?/' ? '/' 18 | : parsed.root 19 | path = path.substr(root.length) 20 | r += root 21 | parsed = parse(path) 22 | } 23 | return [r, path] 24 | } 25 | -------------------------------------------------------------------------------- /node_modules/tar/lib/strip-trailing-slashes.js: -------------------------------------------------------------------------------- 1 | // this is the only approach that was significantly faster than using 2 | // str.replace(/\/+$/, '') for strings ending with a lot of / chars and 3 | // containing multiple / chars. 4 | const batchStrings = [ 5 | '/'.repeat(1024), 6 | '/'.repeat(512), 7 | '/'.repeat(256), 8 | '/'.repeat(128), 9 | '/'.repeat(64), 10 | '/'.repeat(32), 11 | '/'.repeat(16), 12 | '/'.repeat(8), 13 | '/'.repeat(4), 14 | '/'.repeat(2), 15 | '/', 16 | ] 17 | 18 | module.exports = str => { 19 | for (const s of batchStrings) { 20 | while (str.length >= s.length && str.slice(-1 * s.length) === s) 21 | str = str.slice(0, -1 * s.length) 22 | } 23 | return str 24 | } 25 | -------------------------------------------------------------------------------- /node_modules/tar/lib/types.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // map types from key to human-friendly name 3 | exports.name = new Map([ 4 | ['0', 'File'], 5 | // same as File 6 | ['', 'OldFile'], 7 | ['1', 'Link'], 8 | ['2', 'SymbolicLink'], 9 | // Devices and FIFOs aren't fully supported 10 | // they are parsed, but skipped when unpacking 11 | ['3', 'CharacterDevice'], 12 | ['4', 'BlockDevice'], 13 | ['5', 'Directory'], 14 | ['6', 'FIFO'], 15 | // same as File 16 | ['7', 'ContiguousFile'], 17 | // pax headers 18 | ['g', 'GlobalExtendedHeader'], 19 | ['x', 'ExtendedHeader'], 20 | // vendor-specific stuff 21 | // skip 22 | ['A', 'SolarisACL'], 23 | // like 5, but with data, which should be skipped 24 | ['D', 'GNUDumpDir'], 25 | // metadata only, skip 26 | ['I', 'Inode'], 27 | // data = link path of next file 28 | ['K', 'NextFileHasLongLinkpath'], 29 | // data = path of next file 30 | ['L', 'NextFileHasLongPath'], 31 | // skip 32 | ['M', 'ContinuationFile'], 33 | // like L 34 | ['N', 'OldGnuLongPath'], 35 | // skip 36 | ['S', 'SparseFile'], 37 | // skip 38 | ['V', 'TapeVolumeHeader'], 39 | // like x 40 | ['X', 'OldExtendedHeader'] 41 | ]) 42 | 43 | // map the other direction 44 | exports.code = new Map(Array.from(exports.name).map(kv => [kv[1], kv[0]])) 45 | -------------------------------------------------------------------------------- /node_modules/tar/lib/update.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | // tar -u 4 | 5 | const hlo = require('./high-level-opt.js') 6 | const r = require('./replace.js') 7 | // just call tar.r with the filter and mtimeCache 8 | 9 | const u = module.exports = (opt_, files, cb) => { 10 | const opt = hlo(opt_) 11 | 12 | if (!opt.file) 13 | throw new TypeError('file is required') 14 | 15 | if (opt.gzip) 16 | throw new TypeError('cannot append to compressed archives') 17 | 18 | if (!files || !Array.isArray(files) || !files.length) 19 | throw new TypeError('no files or directories specified') 20 | 21 | files = Array.from(files) 22 | 23 | mtimeFilter(opt) 24 | return r(opt, files, cb) 25 | } 26 | 27 | const mtimeFilter = opt => { 28 | const filter = opt.filter 29 | 30 | if (!opt.mtimeCache) 31 | opt.mtimeCache = new Map() 32 | 33 | opt.filter = filter ? (path, stat) => 34 | filter(path, stat) && !(opt.mtimeCache.get(path) > stat.mtime) 35 | : (path, stat) => !(opt.mtimeCache.get(path) > stat.mtime) 36 | } 37 | -------------------------------------------------------------------------------- /node_modules/tar/lib/warn-mixin.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = Base => class extends Base { 3 | warn (msg, data) { 4 | if (!this.strict) 5 | this.emit('warn', msg, data) 6 | else if (data instanceof Error) 7 | this.emit('error', data) 8 | else { 9 | const er = new Error(msg) 10 | er.data = data 11 | this.emit('error', er) 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /node_modules/tar/lib/winchars.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | // When writing files on Windows, translate the characters to their 4 | // 0xf000 higher-encoded versions. 5 | 6 | const raw = [ 7 | '|', 8 | '<', 9 | '>', 10 | '?', 11 | ':' 12 | ] 13 | 14 | const win = raw.map(char => 15 | String.fromCharCode(0xf000 + char.charCodeAt(0))) 16 | 17 | const toWin = new Map(raw.map((char, i) => [char, win[i]])) 18 | const toRaw = new Map(win.map((char, i) => [char, raw[i]])) 19 | 20 | module.exports = { 21 | encode: s => raw.reduce((s, c) => s.split(c).join(toWin.get(c)), s), 22 | decode: s => win.reduce((s, c) => s.split(c).join(toRaw.get(c)), s) 23 | } 24 | -------------------------------------------------------------------------------- /node_modules/tar/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": "Isaac Z. Schlueter (http://blog.izs.me/)", 3 | "name": "tar", 4 | "description": "tar for node", 5 | "version": "4.4.19", 6 | "publishConfig": { 7 | "tag": "v4-legacy" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/npm/node-tar.git" 12 | }, 13 | "scripts": { 14 | "test:posix": "tap", 15 | "test:win32": "tap --lines=98 --branches=98 --statements=98 --functions=98", 16 | "test": "node test/fixtures/test.js", 17 | "preversion": "npm test", 18 | "postversion": "npm publish", 19 | "postpublish": "git push origin --follow-tags", 20 | "genparse": "node scripts/generate-parse-fixtures.js", 21 | "bench": "for i in benchmarks/*/*.js; do echo $i; for j in {1..5}; do node $i || break; done; done" 22 | }, 23 | "dependencies": { 24 | "chownr": "^1.1.4", 25 | "fs-minipass": "^1.2.7", 26 | "minipass": "^2.9.0", 27 | "minizlib": "^1.3.3", 28 | "mkdirp": "^0.5.5", 29 | "safe-buffer": "^5.2.1", 30 | "yallist": "^3.1.1" 31 | }, 32 | "devDependencies": { 33 | "chmodr": "^1.2.0", 34 | "end-of-stream": "^1.4.4", 35 | "events-to-array": "^1.1.2", 36 | "mutate-fs": "^2.1.1", 37 | "require-inject": "^1.4.4", 38 | "rimraf": "^2.7.1", 39 | "tap": "^14.11.0", 40 | "tar-fs": "^1.16.3", 41 | "tar-stream": "^1.6.2" 42 | }, 43 | "license": "ISC", 44 | "engines": { 45 | "node": ">=4.5" 46 | }, 47 | "files": [ 48 | "index.js", 49 | "lib/" 50 | ], 51 | "tap": { 52 | "coverage-map": "map.js", 53 | "check-coverage": true 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /node_modules/tr46/.npmignore: -------------------------------------------------------------------------------- 1 | scripts/ 2 | test/ 3 | 4 | !lib/mapping_table.json 5 | -------------------------------------------------------------------------------- /node_modules/tr46/lib/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/node_modules/tr46/lib/.gitkeep -------------------------------------------------------------------------------- /node_modules/tr46/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tr46", 3 | "version": "0.0.3", 4 | "description": "An implementation of the Unicode TR46 spec", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "mocha", 8 | "pretest": "node scripts/getLatestUnicodeTests.js", 9 | "prepublish": "node scripts/generateMappingTable.js" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git+https://github.com/Sebmaster/tr46.js.git" 14 | }, 15 | "keywords": [ 16 | "unicode", 17 | "tr46", 18 | "url", 19 | "whatwg" 20 | ], 21 | "author": "Sebastian Mayr ", 22 | "license": "MIT", 23 | "bugs": { 24 | "url": "https://github.com/Sebmaster/tr46.js/issues" 25 | }, 26 | "homepage": "https://github.com/Sebmaster/tr46.js#readme", 27 | "devDependencies": { 28 | "mocha": "^2.2.5", 29 | "request": "^2.57.0" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /node_modules/webidl-conversions/LICENSE.md: -------------------------------------------------------------------------------- 1 | # The BSD 2-Clause License 2 | 3 | Copyright (c) 2014, Domenic Denicola 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 9 | 10 | 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. 11 | 12 | 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. 13 | -------------------------------------------------------------------------------- /node_modules/webidl-conversions/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webidl-conversions", 3 | "version": "3.0.1", 4 | "description": "Implements the WebIDL algorithms for converting to and from JavaScript values", 5 | "main": "lib/index.js", 6 | "scripts": { 7 | "test": "mocha test/*.js" 8 | }, 9 | "repository": "jsdom/webidl-conversions", 10 | "keywords": [ 11 | "webidl", 12 | "web", 13 | "types" 14 | ], 15 | "files": [ 16 | "lib/" 17 | ], 18 | "author": "Domenic Denicola (https://domenic.me/)", 19 | "license": "BSD-2-Clause", 20 | "devDependencies": { 21 | "mocha": "^1.21.4" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /node_modules/whatwg-url/LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015–2016 Sebastian Mayr 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /node_modules/whatwg-url/lib/public-api.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | exports.URL = require("./URL").interface; 4 | exports.serializeURL = require("./url-state-machine").serializeURL; 5 | exports.serializeURLOrigin = require("./url-state-machine").serializeURLOrigin; 6 | exports.basicURLParse = require("./url-state-machine").basicURLParse; 7 | exports.setTheUsername = require("./url-state-machine").setTheUsername; 8 | exports.setThePassword = require("./url-state-machine").setThePassword; 9 | exports.serializeHost = require("./url-state-machine").serializeHost; 10 | exports.serializeInteger = require("./url-state-machine").serializeInteger; 11 | exports.parseURL = require("./url-state-machine").parseURL; 12 | -------------------------------------------------------------------------------- /node_modules/whatwg-url/lib/utils.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | module.exports.mixin = function mixin(target, source) { 4 | const keys = Object.getOwnPropertyNames(source); 5 | for (let i = 0; i < keys.length; ++i) { 6 | Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i])); 7 | } 8 | }; 9 | 10 | module.exports.wrapperSymbol = Symbol("wrapper"); 11 | module.exports.implSymbol = Symbol("impl"); 12 | 13 | module.exports.wrapperForImpl = function (impl) { 14 | return impl[module.exports.wrapperSymbol]; 15 | }; 16 | 17 | module.exports.implForWrapper = function (wrapper) { 18 | return wrapper[module.exports.implSymbol]; 19 | }; 20 | 21 | -------------------------------------------------------------------------------- /node_modules/whatwg-url/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "whatwg-url", 3 | "version": "5.0.0", 4 | "description": "An implementation of the WHATWG URL Standard's URL API and parsing machinery", 5 | "main": "lib/public-api.js", 6 | "files": [ 7 | "lib/" 8 | ], 9 | "author": "Sebastian Mayr ", 10 | "license": "MIT", 11 | "repository": "jsdom/whatwg-url", 12 | "dependencies": { 13 | "tr46": "~0.0.3", 14 | "webidl-conversions": "^3.0.0" 15 | }, 16 | "devDependencies": { 17 | "eslint": "^2.6.0", 18 | "istanbul": "~0.4.3", 19 | "mocha": "^2.2.4", 20 | "recast": "~0.10.29", 21 | "request": "^2.55.0", 22 | "webidl2js": "^3.0.2" 23 | }, 24 | "scripts": { 25 | "build": "node scripts/transform.js && node scripts/convert-idl.js", 26 | "coverage": "istanbul cover node_modules/mocha/bin/_mocha", 27 | "lint": "eslint .", 28 | "prepublish": "npm run build", 29 | "pretest": "node scripts/get-latest-platform-tests.js && npm run build", 30 | "test": "mocha" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /node_modules/wrappy/LICENSE: -------------------------------------------------------------------------------- 1 | The ISC License 2 | 3 | Copyright (c) Isaac Z. Schlueter and Contributors 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted, provided that the above 7 | copyright notice and this permission notice appear in all copies. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 15 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 | -------------------------------------------------------------------------------- /node_modules/wrappy/README.md: -------------------------------------------------------------------------------- 1 | # wrappy 2 | 3 | Callback wrapping utility 4 | 5 | ## USAGE 6 | 7 | ```javascript 8 | var wrappy = require("wrappy") 9 | 10 | // var wrapper = wrappy(wrapperFunction) 11 | 12 | // make sure a cb is called only once 13 | // See also: http://npm.im/once for this specific use case 14 | var once = wrappy(function (cb) { 15 | var called = false 16 | return function () { 17 | if (called) return 18 | called = true 19 | return cb.apply(this, arguments) 20 | } 21 | }) 22 | 23 | function printBoo () { 24 | console.log('boo') 25 | } 26 | // has some rando property 27 | printBoo.iAmBooPrinter = true 28 | 29 | var onlyPrintOnce = once(printBoo) 30 | 31 | onlyPrintOnce() // prints 'boo' 32 | onlyPrintOnce() // does nothing 33 | 34 | // random property is retained! 35 | assert.equal(onlyPrintOnce.iAmBooPrinter, true) 36 | ``` 37 | -------------------------------------------------------------------------------- /node_modules/wrappy/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wrappy", 3 | "version": "1.0.2", 4 | "description": "Callback wrapping utility", 5 | "main": "wrappy.js", 6 | "files": [ 7 | "wrappy.js" 8 | ], 9 | "directories": { 10 | "test": "test" 11 | }, 12 | "dependencies": {}, 13 | "devDependencies": { 14 | "tap": "^2.3.1" 15 | }, 16 | "scripts": { 17 | "test": "tap --coverage test/*.js" 18 | }, 19 | "repository": { 20 | "type": "git", 21 | "url": "https://github.com/npm/wrappy" 22 | }, 23 | "author": "Isaac Z. Schlueter (http://blog.izs.me/)", 24 | "license": "ISC", 25 | "bugs": { 26 | "url": "https://github.com/npm/wrappy/issues" 27 | }, 28 | "homepage": "https://github.com/npm/wrappy" 29 | } 30 | -------------------------------------------------------------------------------- /node_modules/wrappy/wrappy.js: -------------------------------------------------------------------------------- 1 | // Returns a wrapper function that returns a wrapped callback 2 | // The wrapper function should do some stuff, and return a 3 | // presumably different callback function. 4 | // This makes sure that own properties are retained, so that 5 | // decorations and such are not lost along the way. 6 | module.exports = wrappy 7 | function wrappy (fn, cb) { 8 | if (fn && cb) return wrappy(fn)(cb) 9 | 10 | if (typeof fn !== 'function') 11 | throw new TypeError('need wrapper function') 12 | 13 | Object.keys(fn).forEach(function (k) { 14 | wrapper[k] = fn[k] 15 | }) 16 | 17 | return wrapper 18 | 19 | function wrapper() { 20 | var args = new Array(arguments.length) 21 | for (var i = 0; i < args.length; i++) { 22 | args[i] = arguments[i] 23 | } 24 | var ret = fn.apply(this, args) 25 | var cb = args[args.length-1] 26 | if (typeof ret === 'function' && ret !== cb) { 27 | Object.keys(cb).forEach(function (k) { 28 | ret[k] = cb[k] 29 | }) 30 | } 31 | return ret 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /node_modules/yallist/LICENSE: -------------------------------------------------------------------------------- 1 | The ISC License 2 | 3 | Copyright (c) Isaac Z. Schlueter and Contributors 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted, provided that the above 7 | copyright notice and this permission notice appear in all copies. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 15 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 | -------------------------------------------------------------------------------- /node_modules/yallist/iterator.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = function (Yallist) { 3 | Yallist.prototype[Symbol.iterator] = function* () { 4 | for (let walker = this.head; walker; walker = walker.next) { 5 | yield walker.value 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /node_modules/yallist/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "yallist", 3 | "version": "3.1.1", 4 | "description": "Yet Another Linked List", 5 | "main": "yallist.js", 6 | "directories": { 7 | "test": "test" 8 | }, 9 | "files": [ 10 | "yallist.js", 11 | "iterator.js" 12 | ], 13 | "dependencies": {}, 14 | "devDependencies": { 15 | "tap": "^12.1.0" 16 | }, 17 | "scripts": { 18 | "test": "tap test/*.js --100", 19 | "preversion": "npm test", 20 | "postversion": "npm publish", 21 | "postpublish": "git push origin --all; git push origin --tags" 22 | }, 23 | "repository": { 24 | "type": "git", 25 | "url": "git+https://github.com/isaacs/yallist.git" 26 | }, 27 | "author": "Isaac Z. Schlueter (http://blog.izs.me/)", 28 | "license": "ISC" 29 | } 30 | -------------------------------------------------------------------------------- /node_modules/yauzl/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Josh Wolfe 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /node_modules/yauzl/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "yauzl", 3 | "version": "2.10.0", 4 | "description": "yet another unzip library for node", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "node test/test.js", 8 | "test-cov": "istanbul cover test/test.js", 9 | "test-travis": "istanbul cover --report lcovonly test/test.js" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/thejoshwolfe/yauzl.git" 14 | }, 15 | "keywords": [ 16 | "unzip", 17 | "zip", 18 | "stream", 19 | "archive", 20 | "file" 21 | ], 22 | "author": "Josh Wolfe ", 23 | "license": "MIT", 24 | "bugs": { 25 | "url": "https://github.com/thejoshwolfe/yauzl/issues" 26 | }, 27 | "homepage": "https://github.com/thejoshwolfe/yauzl", 28 | "dependencies": { 29 | "fd-slicer": "~1.1.0", 30 | "buffer-crc32": "~0.2.3" 31 | }, 32 | "devDependencies": { 33 | "bl": "~1.0.0", 34 | "istanbul": "~0.3.4", 35 | "pend": "~1.2.0" 36 | }, 37 | "files": [ 38 | "index.js" 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "bin": {"perf-sheet": "jdeploy-bundle/jdeploy.js"}, 3 | "author": "theapache64", 4 | "description": "A tool that analyzes your method trace file and generates the analysis in a spreadsheet", 5 | "main": "index.js", 6 | "preferGlobal": true, 7 | "repository": "https://github.com/theapache64/perf-sheet", 8 | "version": "0.0.9", 9 | "jdeploy": { 10 | "jdk": false, 11 | "javaVersion": "17", 12 | "jar": "perf-sheet.main.jar", 13 | "javafx": false, 14 | "title": "perf-sheet" 15 | }, 16 | "dependencies": { 17 | "command-exists-promise": "^2.0.2", 18 | "node-fetch": "2.6.7", 19 | "tar": "^4.4.8", 20 | "yauzl": "^2.10.0", 21 | "shelljs": "^0.8.4" 22 | }, 23 | "license": "ISC", 24 | "name": "perf-sheet", 25 | "files": ["jdeploy-bundle"], 26 | "scripts": {"test": "echo \"Error: no test specified\" && exit 1"} 27 | } -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | gradlePluginPortal() 6 | } 7 | 8 | } 9 | 10 | rootProject.name = "perf-sheet" 11 | include("trace-parser") 12 | -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/app/App.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.app 2 | 3 | import com.theapache64.cyclone.core.Application 4 | import io.github.theapache64.perfsheet.di.AppComponent 5 | import io.github.theapache64.perfsheet.di.DaggerAppComponent 6 | import io.github.theapache64.perfsheet.ui.splash.SplashActivity 7 | import javax.inject.Inject 8 | 9 | 10 | /** 11 | * Application class 12 | */ 13 | class App : Application() { 14 | 15 | companion object { 16 | var args: Array? = null 17 | lateinit var di: AppComponent 18 | } 19 | 20 | @Inject 21 | lateinit var appController: AppController 22 | 23 | override fun onCreate() { 24 | super.onCreate() 25 | di = DaggerAppComponent.create() 26 | di.inject(this) 27 | 28 | appController.onArgs(args) 29 | 30 | val splashIntent = SplashActivity.getStartIntent() 31 | startActivity(splashIntent) 32 | } 33 | } 34 | 35 | /** 36 | * Entry point 37 | */ 38 | fun main(args: Array) { 39 | App.args = args 40 | App().onCreate() 41 | } -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/app/AppController.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.app 2 | 3 | import io.github.theapache64.perfsheet.data.repo.AppRepo 4 | import javax.inject.Inject 5 | import javax.inject.Singleton 6 | 7 | @Singleton 8 | class AppController @Inject constructor( 9 | private val appRepo: AppRepo, 10 | ) { 11 | fun onArgs(args: Array?) { 12 | appRepo.args = args?.toList() 13 | } 14 | } -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/core/TraceLogger.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.core 2 | 3 | import io.github.theapache64.perfsheet.traceparser.core.AppLogger 4 | import javax.inject.Inject 5 | import javax.inject.Singleton 6 | 7 | @Singleton 8 | class TraceLogger @Inject constructor( 9 | var isDebug: Boolean 10 | ) : AppLogger { 11 | override fun d(msg: String) { 12 | if (isDebug) { 13 | println("debug: $msg") 14 | } 15 | } 16 | 17 | override fun e(msg: String) { 18 | if (isDebug) { 19 | println("error: $msg") 20 | } 21 | } 22 | 23 | override fun e(msg: String, t: Throwable) { 24 | if (isDebug) { 25 | println("error: $msg : ${t.message}") 26 | } 27 | } 28 | 29 | override fun w(msg: String) { 30 | if (isDebug) { 31 | println("warning: $msg") 32 | } 33 | } 34 | 35 | override fun i(msg: String) { 36 | if (isDebug) { 37 | println("info: $msg") 38 | } 39 | } 40 | } -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/core/filter/AnonFilter.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.core.filter 2 | 3 | 4 | class AnonFilter : Filter() { 5 | private fun removeAnon(name: String): String { 6 | return name.replace(".", "") 7 | } 8 | 9 | override fun apply(methodName: String): String { 10 | return removeAnon(methodName) 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/core/filter/Filter.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.core.filter 2 | 3 | abstract class Filter { 4 | abstract fun apply(methodName: String): String? 5 | } -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/core/filter/FrameFilter.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.core.filter 2 | 3 | 4 | class FrameFilter : Filter() { 5 | override fun apply(methodName: String): String? { 6 | return if (methodName == "android.view.Choreographer.doFrame") methodName else null 7 | } 8 | } -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/core/filter/FrameworkCallsFilter.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.core.filter 2 | 3 | class FrameworkCallsFilter : Filter() { 4 | companion object { 5 | private val blackList = listOf( 6 | "androidx.compose.", 7 | "android.", 8 | "com.android.internal.", 9 | "java.", 10 | "kotlinx.", 11 | "kotlin.", 12 | "sun.", 13 | "dalvik.", 14 | "Choreographer#", 15 | "HWUI:", 16 | "Compose:", 17 | "Recomposer:", 18 | "AndroidOwner:", 19 | "draw", 20 | "animation", 21 | "layout", 22 | "traversal", 23 | "measure", 24 | "Record View#draw\\(\\)" 25 | ).joinToString(separator = "|", prefix = "^(", postfix = ").*").toRegex() 26 | 27 | private val whiteList = listOf( 28 | "android.app.ActivityThread.handleBindApplication", 29 | "android.app.ActivityThread.installContentProviders", 30 | "android.app.Activity.perform", // this will match onCreate, onStart, onResume, etc 31 | "androidx.lifecycle.ViewModelProvider.get", // viewModel query time 32 | ).joinToString(separator = "|", prefix = "^(", postfix = ").*") 33 | .toRegex() 34 | } 35 | 36 | override fun apply(methodName: String): String? { 37 | val shouldSkipMethodName = blackList.matches(methodName) && !whiteList.matches(methodName) 38 | return if (shouldSkipMethodName) null else methodName 39 | } 40 | } -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/core/filter/LastHyphenFilter.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.core.filter 2 | 3 | class LastHyphenFilter : Filter() { 4 | override fun apply(methodName: String): String { 5 | return removeLastHyphen(methodName) 6 | } 7 | 8 | private fun removeLastHyphen(name: String): String { 9 | val hyphenIndex = name.lastIndexOf('-') 10 | if (hyphenIndex == -1) return name 11 | return name.substring(0, hyphenIndex) 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/core/filter/LineNoFilter.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.core.filter 2 | 3 | class LineNoFilter : Filter() { 4 | companion object { 5 | private val lineNoRegEx = "^(?.+) (?<lineNo>\\(.+:\\d+\\))\$".toRegex() 6 | } 7 | 8 | private fun removeLineNoFromRowName(name: String): String { 9 | val result = lineNoRegEx.find(name) 10 | var newName = name 11 | if (result != null) { 12 | newName = result.groupValues.getOrNull(1) ?: name 13 | } 14 | 15 | if (newName.contains("$1")) { 16 | newName = newName.substring(0, newName.indexOf("\$1")) 17 | } 18 | 19 | return newName 20 | } 21 | 22 | override fun apply(methodName: String): String { 23 | return removeLineNoFromRowName(methodName) 24 | } 25 | } -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/data/repo/AppRepo.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.data.repo 2 | 3 | import javax.inject.Inject 4 | import javax.inject.Singleton 5 | 6 | interface AppRepo { 7 | var args: List<String>? 8 | } 9 | 10 | @Singleton 11 | class AppRepoImpl @Inject constructor() : AppRepo { 12 | override var args: List<String>? = null 13 | } -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/di/AppComponent.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.di 2 | 3 | import dagger.Component 4 | import io.github.theapache64.perfsheet.app.App 5 | import io.github.theapache64.perfsheet.di.module.RepoModule 6 | import io.github.theapache64.perfsheet.di.module.TraceParserModule 7 | import io.github.theapache64.perfsheet.ui.analyze.AnalyzeActivity 8 | import io.github.theapache64.perfsheet.ui.splash.SplashActivity 9 | import javax.inject.Singleton 10 | 11 | 12 | @Singleton 13 | @Component( 14 | modules = [ 15 | RepoModule::class, 16 | TraceParserModule::class 17 | ] 18 | ) 19 | interface AppComponent { 20 | fun inject(app: App) 21 | fun inject(splashActivity: SplashActivity) 22 | fun inject(analyzeActivity: AnalyzeActivity) 23 | } 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/di/module/RepoModule.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.di.module 2 | 3 | import dagger.Binds 4 | import dagger.Module 5 | import io.github.theapache64.perfsheet.data.repo.AppRepo 6 | import io.github.theapache64.perfsheet.data.repo.AppRepoImpl 7 | import io.github.theapache64.perfsheet.data.repo.ExcelRepo 8 | import io.github.theapache64.perfsheet.data.repo.ExcelRepoImpl 9 | import io.github.theapache64.perfsheet.data.repo.TraceRepo 10 | import io.github.theapache64.perfsheet.data.repo.TraceRepoImpl 11 | 12 | @Module 13 | abstract class RepoModule { 14 | @Binds 15 | abstract fun bindAppRepo(appRepo: AppRepoImpl): AppRepo 16 | 17 | @Binds 18 | abstract fun bindTraceRepo(traceRepo: TraceRepoImpl): TraceRepo 19 | 20 | @Binds 21 | abstract fun bindExcelRepo(excelRepo: ExcelRepoImpl): ExcelRepo 22 | } -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/di/module/TraceParserModule.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.di.module 2 | 3 | import dagger.Module 4 | import dagger.Provides 5 | import io.github.theapache64.perfsheet.core.TraceLogger 6 | import io.github.theapache64.perfsheet.traceparser.analyzer.TraceAnalyzer 7 | import io.github.theapache64.perfsheet.traceparser.core.AppLogger 8 | import javax.inject.Singleton 9 | 10 | @Module 11 | class TraceParserModule { 12 | 13 | @Singleton 14 | @Provides 15 | fun provideAppLogger(): AppLogger { 16 | return TraceLogger(isDebug = false) 17 | } 18 | 19 | @Singleton 20 | @Provides 21 | fun provideTraceAnalyzer( 22 | appLogger: AppLogger 23 | ): TraceAnalyzer { 24 | return TraceAnalyzer(appLogger) 25 | } 26 | } -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/model/Method.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.model 2 | 3 | data class Method( 4 | var name: String, 5 | val nodes: MutableList<Node>, 6 | ) 7 | 8 | -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/model/Node.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.model 2 | 3 | data class Node( 4 | val threadName: String, 5 | val durationInMs: Long 6 | ) -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/model/ResultRow.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.model 2 | 3 | sealed interface ResultRow { 4 | data class SingleTrace( 5 | val name: String, 6 | val durationInMs: Long, 7 | val count: Int, 8 | val threadDetails: List<ThreadDetail>, 9 | var comparison: String? 10 | ) : ResultRow 11 | 12 | data class DualTrace( 13 | val name: String, 14 | val beforeDurationInMs: Long, 15 | val afterDurationInMs: Long, 16 | val diffInMs: Long, 17 | val beforeCount: Int, 18 | val afterCount: Int, 19 | val countComparison: Int, 20 | val beforeThreadDetails: List<ThreadDetail>, 21 | val afterThreadDetails: List<ThreadDetail>, 22 | var beforeComparison: String?, 23 | var afterComparison: String? 24 | ) : ResultRow 25 | 26 | data class SingleFrame( 27 | val name: String, 28 | val durationInMs: Long, 29 | ) : ResultRow 30 | 31 | data class DualFrame( 32 | val name: String, 33 | val beforeDurationInMs: Long, 34 | val afterDurationInMs: Long, 35 | val diffInMs: Long, 36 | ) : ResultRow 37 | } 38 | 39 | 40 | data class ThreadDetail( 41 | val threadName: String, 42 | var noOfBlocks: Int, 43 | var totalDurationInMs: Double, 44 | ) -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/model/SheetHeading.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.model 2 | 3 | data class Heading( 4 | val title: String, 5 | val colWidth: Int 6 | ) 7 | 8 | val dualTraceHeadings = listOf( 9 | Heading("Method Name", 60), 10 | Heading("Before (ms)", 13), 11 | Heading("After (ms)", 13), 12 | Heading("Diff (ms)", 12), 13 | Heading("Before count", 13), 14 | Heading("After count", 13), 15 | Heading("Count diff", 18), 16 | Heading("Before summary", 60), 17 | Heading("After summary", 60) 18 | ) 19 | 20 | val singleTraceHeadings = listOf( 21 | Heading("Method Name", 60), 22 | Heading("Duration (ms)", 13), 23 | Heading("Count", 13), 24 | Heading("Summary", 60) 25 | ) 26 | 27 | val dualFrameHeadings = listOf( 28 | Heading("Frame#", 60), 29 | Heading("Before (ms)", 13), 30 | Heading("After (ms)", 13), 31 | Heading("Diff (ms)", 13) 32 | 33 | ) 34 | 35 | val singleFrameHeadings = listOf( 36 | Heading("Frame#", 60 ), 37 | Heading("Duration (ms)", 13), 38 | ) -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/ui/analyze/AnalyzeActivity.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.ui.analyze 2 | 3 | import com.theapache64.cyclone.core.Activity 4 | import com.theapache64.cyclone.core.Intent 5 | import io.github.theapache64.perfsheet.app.App 6 | import javax.inject.Inject 7 | 8 | class AnalyzeActivity : Activity() { 9 | companion object { 10 | fun getStartIntent(): Intent { 11 | return Intent(AnalyzeActivity::class) 12 | } 13 | } 14 | 15 | @Inject 16 | lateinit var viewModel: AnalyzeViewModel 17 | 18 | override fun onCreate() { 19 | super.onCreate() 20 | App.di.inject(this) 21 | 22 | viewModel.statusMsg.observe { statusMsg -> 23 | println(statusMsg) 24 | } 25 | 26 | viewModel.init() 27 | } 28 | } -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/ui/splash/SplashActivity.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.ui.splash 2 | 3 | import com.theapache64.cyclone.core.Activity 4 | import com.theapache64.cyclone.core.Intent 5 | import io.github.theapache64.perfsheet.app.App 6 | import io.github.theapache64.perfsheet.ui.analyze.AnalyzeActivity 7 | import javax.inject.Inject 8 | 9 | class SplashActivity : Activity() { 10 | companion object { 11 | fun getStartIntent(): Intent { 12 | return Intent(SplashActivity::class).apply { 13 | } 14 | } 15 | } 16 | 17 | @Inject 18 | lateinit var viewModel: SplashViewModel 19 | 20 | 21 | override fun onCreate() { 22 | super.onCreate() 23 | App.di.inject(this) 24 | 25 | with(viewModel) { 26 | welcomeMsg.observe { 27 | println(it) 28 | } 29 | 30 | goToHome.observe { splashMsg -> 31 | startActivity( 32 | intent = AnalyzeActivity.getStartIntent() 33 | ) 34 | } 35 | } 36 | 37 | } 38 | } -------------------------------------------------------------------------------- /src/main/kotlin/io/github/theapache64/perfsheet/ui/splash/SplashViewModel.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.ui.splash 2 | 3 | import com.theapache64.cyclone.core.livedata.LiveData 4 | import com.theapache64.cyclone.core.livedata.MutableLiveData 5 | import javax.inject.Inject 6 | 7 | class SplashViewModel @Inject constructor() { 8 | companion object { 9 | private const val VERSION = "0.0.9" 10 | } 11 | 12 | private val _welcomeMsg = MutableLiveData<String>() 13 | val welcomeMsg: LiveData<String> = _welcomeMsg 14 | 15 | private val _goToHome = MutableLiveData<String>() 16 | val goToHome: LiveData<String> = _goToHome 17 | 18 | init { 19 | val splashMsg = "perf-sheet ($VERSION)" 20 | _welcomeMsg.value = splashMsg 21 | _goToHome.value = splashMsg 22 | } 23 | 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/resources/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/src/main/resources/.gitkeep -------------------------------------------------------------------------------- /src/test/kotlin/io/github/theapache64/perfsheet/TestAppComponent.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet 2 | 3 | import dagger.Component 4 | import io.github.theapache64.perfsheet.data.repo.TraceRepoImplTest 5 | import io.github.theapache64.perfsheet.di.module.RepoModule 6 | import io.github.theapache64.perfsheet.di.module.TraceParserModule 7 | import io.github.theapache64.perfsheet.ui.analyze.AnalyzeViewModelTest 8 | import javax.inject.Singleton 9 | 10 | 11 | @Singleton 12 | @Component( 13 | modules = [ 14 | RepoModule::class, 15 | TraceParserModule::class 16 | ] 17 | ) 18 | interface TestAppComponent { 19 | fun inject(analyzeViewModelTest: AnalyzeViewModelTest) 20 | fun inject(traceRepoImplTest: TraceRepoImplTest) 21 | } -------------------------------------------------------------------------------- /src/test/kotlin/io/github/theapache64/perfsheet/ui/analyze/AnalyzeViewModelTest.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.ui.analyze 2 | 3 | import io.github.theapache64.perfsheet.DaggerTestAppComponent 4 | import io.github.theapache64.perfsheet.data.repo.AppRepo 5 | import io.github.theapache64.perfsheet.data.repo.ExcelRepo 6 | import io.github.theapache64.perfsheet.data.repo.TraceRepo 7 | import io.mockk.every 8 | import io.mockk.mockk 9 | import org.junit.jupiter.api.Assertions.assertEquals 10 | import org.junit.jupiter.api.BeforeEach 11 | import org.junit.jupiter.api.Test 12 | import javax.inject.Inject 13 | 14 | 15 | class AnalyzeViewModelTest { 16 | 17 | @Inject 18 | lateinit var analyzeViewModel: AnalyzeViewModel 19 | 20 | @Inject 21 | lateinit var traceRepo: TraceRepo 22 | 23 | @Inject 24 | lateinit var excelRepo: ExcelRepo 25 | 26 | @BeforeEach 27 | fun before() { 28 | DaggerTestAppComponent.create().inject(this) 29 | 30 | val fakeAppRepo = mockk<AppRepo>() 31 | every { fakeAppRepo.args } returns listOf( 32 | "/Users/theapache64/Desktop/perf-sheet/before.trace", // TODO: add some other traces to repo 33 | "/Users/theapache64/Desktop/perf-sheet/after.trace" 34 | ) 35 | analyzeViewModel = AnalyzeViewModel(fakeAppRepo, traceRepo, excelRepo) 36 | } 37 | 38 | @Test 39 | fun parseTest() { 40 | analyzeViewModel.statusMsg.observe { 41 | assertEquals(AnalyzeViewModel.SUCCESS_MSG, it) 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /src/test/resources/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/src/test/resources/.gitkeep -------------------------------------------------------------------------------- /trace-parser/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | kotlin("jvm") 3 | } 4 | 5 | group = "io.github.theapache64.perfsheet" 6 | version = "1.0-SNAPSHOT" 7 | 8 | repositories { 9 | google() 10 | mavenCentral() 11 | maven { url = uri("https://jitpack.io") } 12 | } 13 | 14 | dependencies { 15 | implementation("com.github.Grishberg:mvtrace-dependencies:1.0.1") 16 | 17 | testImplementation("org.jetbrains.kotlin:kotlin-test") 18 | } 19 | 20 | tasks.test { 21 | useJUnitPlatform() 22 | } -------------------------------------------------------------------------------- /trace-parser/src/main/kotlin/io/github/theapache64/perfsheet/traceparser/analyzer/AnalyzerResultImpl.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.traceparser.analyzer 2 | 3 | import io.github.theapache64.perfsheet.traceparser.core.AnalyzerResult 4 | import io.github.theapache64.perfsheet.traceparser.core.ProfileData 5 | import kotlin.math.max 6 | 7 | data class AnalyzerResultImpl( 8 | override val threadTimeBounds: Map<Int, ThreadTimeBoundsImpl>, 9 | override val globalTimeBounds: Map<Int, ThreadTimeBoundsImpl>, 10 | override val maxLevel: Int, 11 | internal val mutableData: MutableMap<Int, MutableList<ProfileDataImpl>>, 12 | override val threads: List<ThreadItemImpl>, 13 | override val mainThreadId: Int, 14 | override val startTimeUs: Long = -1, 15 | ) : AnalyzerResult { 16 | override val data: Map<Int, List<ProfileData>> 17 | get() = mutableData 18 | } 19 | 20 | /** 21 | * Calculates maximum global time in trace. 22 | */ 23 | fun AnalyzerResult.calculateMaxGlobalTime(): Double { 24 | var maxGlobalTime = 0.0 25 | for (bound in this.globalTimeBounds) { 26 | maxGlobalTime = max(maxGlobalTime, bound.value.maxTime) 27 | } 28 | return maxGlobalTime 29 | } 30 | 31 | fun AnalyzerResult.calculateMaxThreadTime(): Double { 32 | var maxThreadTime = 0.0 33 | for (bound in this.threadTimeBounds) { 34 | maxThreadTime = max(maxThreadTime, bound.value.maxTime) 35 | } 36 | return maxThreadTime 37 | } 38 | -------------------------------------------------------------------------------- /trace-parser/src/main/kotlin/io/github/theapache64/perfsheet/traceparser/analyzer/MethodData.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.traceparser.analyzer 2 | 3 | data class MethodData( 4 | val fullName: String, 5 | val className: String, 6 | val methodName: String 7 | ) 8 | -------------------------------------------------------------------------------- /trace-parser/src/main/kotlin/io/github/theapache64/perfsheet/traceparser/analyzer/MethodsAndClasses.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.traceparser.analyzer 2 | 3 | class MethodsAndClasses { 4 | private val emptyData = MethodData("", "", "") 5 | private val data = mutableMapOf<Long, MethodData>() 6 | 7 | fun put(id: Long, newElement: MethodData) { 8 | data[id] = newElement 9 | } 10 | 11 | fun getFullNameById(id: Long): String { 12 | return data.getOrDefault(id, emptyData).fullName 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /trace-parser/src/main/kotlin/io/github/theapache64/perfsheet/traceparser/analyzer/ThreadItemImpl.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.traceparser.analyzer 2 | 3 | import io.github.theapache64.perfsheet.traceparser.core.ThreadItem 4 | 5 | class ThreadItemImpl( 6 | override val name: String, 7 | override val threadId: Int 8 | ) : ThreadItem { 9 | override fun toString() = name 10 | } 11 | -------------------------------------------------------------------------------- /trace-parser/src/main/kotlin/io/github/theapache64/perfsheet/traceparser/analyzer/ThreadTimeBoundsImpl.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.traceparser.analyzer 2 | 3 | import io.github.theapache64.perfsheet.traceparser.core.ThreadTimeBounds 4 | 5 | data class ThreadTimeBoundsImpl( 6 | override var minTime: Double = Double.MAX_VALUE, 7 | override var maxTime: Double = 0.0 8 | ) : ThreadTimeBounds 9 | -------------------------------------------------------------------------------- /trace-parser/src/main/kotlin/io/github/theapache64/perfsheet/traceparser/analyzer/converter/NameConverter.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.traceparser.analyzer.converter 2 | 3 | /** 4 | * Converts class names and class methods names. 5 | * For example converts obfuscated names to original names. 6 | */ 7 | interface NameConverter { 8 | fun convertClassName(sourceClassName: String): String 9 | fun convertMethodName(className: String, sourceMethodName: String, type: String?): String 10 | } -------------------------------------------------------------------------------- /trace-parser/src/main/kotlin/io/github/theapache64/perfsheet/traceparser/analyzer/converter/NoOpNameConverter.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.traceparser.analyzer.converter 2 | 3 | object NoOpNameConverter : NameConverter { 4 | override fun convertClassName(sourceClassName: String) = sourceClassName 5 | 6 | override fun convertMethodName(className: String, sourceMethodName: String, type: String?) = sourceMethodName 7 | } -------------------------------------------------------------------------------- /trace-parser/src/main/kotlin/io/github/theapache64/perfsheet/traceparser/core/AnalyzerResult.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.traceparser.core 2 | 3 | interface AnalyzerResult { 4 | val threadTimeBounds: Map<Int, ThreadTimeBounds> 5 | val globalTimeBounds: Map<Int, ThreadTimeBounds> 6 | val maxLevel: Int 7 | val data: Map<Int, List<ProfileData>> 8 | val threads: List<ThreadItem> 9 | val mainThreadId: Int 10 | val startTimeUs: Long // start recording time in System.upTimeInMs() 11 | } 12 | -------------------------------------------------------------------------------- /trace-parser/src/main/kotlin/io/github/theapache64/perfsheet/traceparser/core/AppLogger.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.traceparser.core 2 | 3 | interface AppLogger { 4 | fun d(msg: String) 5 | fun e(msg: String) 6 | fun e(msg: String, t: Throwable) 7 | fun w(msg: String) 8 | fun i(msg: String) 9 | } -------------------------------------------------------------------------------- /trace-parser/src/main/kotlin/io/github/theapache64/perfsheet/traceparser/core/ProfileData.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.traceparser.core 2 | 3 | interface ProfileData { 4 | val name: String 5 | val level: Int 6 | val threadStartTimeInMillisecond: Double 7 | val globalStartTimeInMillisecond: Double 8 | val threadEndTimeInMillisecond: Double 9 | val globalEndTimeInMillisecond: Double 10 | val threadSelfTime: Double 11 | val globalSelfTime: Double 12 | val parent: ProfileData? 13 | val children: List<ProfileData> 14 | } 15 | -------------------------------------------------------------------------------- /trace-parser/src/main/kotlin/io/github/theapache64/perfsheet/traceparser/core/ThreadItem.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.traceparser.core 2 | 3 | interface ThreadItem { 4 | val name: String 5 | val threadId: Int 6 | } 7 | -------------------------------------------------------------------------------- /trace-parser/src/main/kotlin/io/github/theapache64/perfsheet/traceparser/core/ThreadTimeBounds.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.traceparser.core 2 | 3 | interface ThreadTimeBounds { 4 | val minTime: Double 5 | val maxTime: Double 6 | } 7 | -------------------------------------------------------------------------------- /trace-parser/src/main/kotlin/io/github/theapache64/perfsheet/traceparser/core/TraceReader.kt: -------------------------------------------------------------------------------- 1 | package io.github.theapache64.perfsheet.traceparser.core 2 | 3 | import java.io.File 4 | 5 | interface TraceReader { 6 | fun readTraceFile(traceFile: File): AnalyzerResult 7 | } 8 | -------------------------------------------------------------------------------- /trace-parser/src/main/resources/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/trace-parser/src/main/resources/.gitkeep -------------------------------------------------------------------------------- /trace-parser/src/test/kotlin/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/trace-parser/src/test/kotlin/.gitkeep -------------------------------------------------------------------------------- /trace-parser/src/test/resources/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theapache64/perf-sheet/bb96d66bd4b3b3eca82f6744014c5c739f5da6de/trace-parser/src/test/resources/.gitkeep --------------------------------------------------------------------------------