@ppwcode/node-gitinfo
Advanced tools
+31
| /** | ||
| * Copyright 2018 PeopleWare n.v. | ||
| * | ||
| * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| * you may not use this file except in compliance with the License. | ||
| * You may obtain a copy of the License at | ||
| * | ||
| * http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software | ||
| * distributed under the License is distributed on an "AS IS" BASIS, | ||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| * See the License for the specific language governing permissions and | ||
| * limitations under the License. | ||
| */ | ||
| function exceptionIsAnErrorCondition () { return arguments[arguments.length - 2] instanceof Error } | ||
| module.exports = { | ||
| exceptionIsAnErrorCondition: exceptionIsAnErrorCondition, | ||
| exceptionIsAnError: [exceptionIsAnErrorCondition], | ||
| /** | ||
| * Take a Promise-like object, and turn it into a native Promise. | ||
| * | ||
| * This is introduced since Contracts requires native Promises. | ||
| */ | ||
| realPromise: function (promiseLike) { | ||
| return new Promise((resolve, reject) => promiseLike.catch(exc => reject(exc)).then(result => resolve(result))) | ||
| } | ||
| } |
| #!/usr/bin/env bash | ||
| echo `pwd` | ||
| echo "Run from the root of the project. Executes complete re-install, followed by test run, in Node 10, 8 and 6." | ||
| set -e | ||
| . ~/.nvm/nvm.sh | ||
| rm -Rf ./node_modules | ||
| nvm use 10 | ||
| npm install | ||
| npm test | ||
| rm -Rf ./node_modules | ||
| nvm use 8 | ||
| npm install | ||
| npm test | ||
| rm -Rf ./node_modules | ||
| nvm use 6 | ||
| npm install | ||
| npm test | ||
| rm -Rf ./node_modules | ||
| nvm use 10 | ||
| npm install | ||
| set +e |
+1
-1
@@ -76,3 +76,3 @@ #!/usr/bin/env node | ||
| () => { | ||
| console.log('%j', {tag: tagName}) | ||
| console.log('%j', { tag: tagName }) | ||
| }, | ||
@@ -79,0 +79,0 @@ err => { |
+48
-73
| /** | ||
| * Copyright 2017 PeopleWare n.v. | ||
| * Copyright 2017 - 2018 PeopleWare n.v. | ||
| * | ||
@@ -17,9 +17,15 @@ * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| const Contract = require('@toryt/contracts-iii') | ||
| const Contract = require('@toryt/contracts-iv') | ||
| const PromiseContract = require('@toryt/contracts-iv/lib/IV/PromiseContract') | ||
| const path = require('path') | ||
| const fs = require('fs') | ||
| const Q = require('./q2') | ||
| const Q = require('q') | ||
| const Git = require('nodegit') | ||
| const querystring = require('querystring') | ||
| const all = require('promise-all') | ||
| const util = require('./_util') | ||
| const exceptionIsAnError = util.exceptionIsAnError | ||
| const branchDoesNotExistOnRemoteMessageFraction = 'no reference found for shorthand' | ||
| /** | ||
@@ -72,3 +78,7 @@ * Holder for consolidated information about the git repository at {@code #path}. | ||
| JSON.parse(JSON.stringify(this)).isPrecious === this.isPrecious && | ||
| JSON.parse(JSON.stringify(this)).isSave === this.isSave | ||
| JSON.parse(JSON.stringify(this)).isSave === this.isSave && | ||
| typeof GitInfo.branchDoesNotExistOnRemoteMessageFraction === 'string' && | ||
| typeof GitInfo.originRemoteDoesNotExistMessage === 'function' && | ||
| typeof GitInfo.originRemoteDoesNotExistMessage() === 'string' && | ||
| GitInfo.originRemoteDoesNotExistMessage().indexOf(GitInfo.originRemoteName) >= 0 | ||
| } | ||
@@ -247,3 +257,3 @@ | ||
| ], | ||
| exception: [() => false] | ||
| exception: Contract.mustNotHappen | ||
| }) | ||
@@ -258,2 +268,3 @@ | ||
| GitInfo.defaultEnvironmentName = 'default' | ||
| GitInfo.originRemoteDoesNotExistMessage = () => 'remote "' + GitInfo.originRemoteName + '" does not exist' | ||
@@ -264,3 +275,3 @@ /** | ||
| */ | ||
| GitInfo.highestGitDirPath = new Contract({ | ||
| GitInfo.highestGitDirPath = new PromiseContract({ | ||
| pre: [ | ||
@@ -270,5 +281,7 @@ (dirPath) => typeof dirPath === 'string' | ||
| post: [ | ||
| (dirPath, result) => Q.isPromiseAlike(result) | ||
| (dirPath, result) => result === undefined || (typeof result === 'string' && !!result), | ||
| (dirPath, result) => !result || dirPath.startsWith(result) | ||
| ], | ||
| exception: [() => false] | ||
| fastException: PromiseContract.mustNotHappen, | ||
| exception: PromiseContract.mustNotHappen | ||
| }) | ||
@@ -278,21 +291,6 @@ .implementation(dirPath => { | ||
| const dirs = parts.map((part, index) => parts.slice(0, index + 1).join(path.sep)) | ||
| return Q.all(dirs.map(dir => Q.nfcall(fs.access, path.format({dir: dir, name: '.git'}), 'rw') | ||
| return Promise.all(dirs.map(dir => Q.nfcall(fs.access, path.format({ dir: dir, name: '.git' }), 'rw') | ||
| .then(() => dir) | ||
| .catch(() => undefined))) | ||
| .then(gitDirs => gitDirs.find(dir => !!dir)) | ||
| .then( | ||
| new Contract({ | ||
| pre: [ | ||
| result => result === undefined || (typeof result === 'string' && !!result), | ||
| result => !result || dirPath.startsWith(result) | ||
| ], | ||
| post: [(highestGitDirPath, result) => result === highestGitDirPath], | ||
| exception: [() => false] | ||
| }).implementation(highestGitDirPath => highestGitDirPath), | ||
| new Contract({ | ||
| pre: [() => false], // should not be called | ||
| post: [() => false], | ||
| exception: [(err1, err2) => err1 === err2] | ||
| }).implementation(err => { throw err }) | ||
| ) | ||
| }) | ||
@@ -314,12 +312,13 @@ | ||
| (status, result) => typeof result === 'boolean', | ||
| (status, result) => !status.isNew() || result, | ||
| (status, result) => !status.isModified() || result, | ||
| (status, result) => !status.isTypechange() || result, | ||
| (status, result) => !status.isRenamed() || result, | ||
| (status, result) => !status.isDeleted() || result, | ||
| (status, result) => !status.isNew() || status.isIgnored() || result, | ||
| (status, result) => !status.isModified() || status.isIgnored() || result, | ||
| (status, result) => !status.isTypechange() || status.isIgnored() || result, | ||
| (status, result) => !status.isRenamed() || status.isIgnored() || result, | ||
| (status, result) => !status.isDeleted() || status.isIgnored() || result, | ||
| (status, result) => !status.isIgnored() || !result | ||
| ], | ||
| exception: [() => false] | ||
| exception: Contract.mustNotHappen | ||
| }).implementation(function (status) { | ||
| return !!(status.isNew() || status.isModified() || status.isTypechange() || status.isRenamed() || status.isDeleted()) | ||
| return !status.isIgnored() && | ||
| !!(status.isNew() || status.isModified() || status.isTypechange() || status.isRenamed() || status.isDeleted()) | ||
| }) | ||
@@ -331,3 +330,3 @@ | ||
| */ | ||
| GitInfo.create = new Contract({ | ||
| GitInfo.create = new PromiseContract({ | ||
| pre: [ | ||
@@ -338,13 +337,15 @@ (gitDirPath) => typeof gitDirPath === 'string', | ||
| post: [ | ||
| (dirPath, result) => Q.isPromiseAlike(result) | ||
| (gitDirPath, result) => result instanceof GitInfo, | ||
| (gitDirPath, result) => result.path === gitDirPath | ||
| ], | ||
| exception: [() => false] | ||
| fastException: PromiseContract.mustNotHappen, | ||
| exception: exceptionIsAnError | ||
| }).implementation(function (gitDirPath) { | ||
| // noinspection JSUnresolvedVariable | ||
| return Git.Repository | ||
| .open(gitDirPath) | ||
| return util.realPromise(Git.Repository.open(gitDirPath)) | ||
| .catch(() => { throw new Error(gitDirPath + ' is not a git directory') }) | ||
| .then(repository => { | ||
| const originRemoteDoesNotExistMessage = GitInfo.originRemoteDoesNotExistMessage() | ||
| // noinspection JSCheckFunctionSignatures,JSUnresolvedFunction | ||
| return Q.object({ | ||
| return all({ | ||
| sha: repository | ||
@@ -356,3 +357,3 @@ .getHeadCommit() | ||
| .then(reference => GitInfo.gitRefsPattern.exec(reference.name())[1]) | ||
| .then(branchName => Q.object({ | ||
| .then(branchName => all({ | ||
| name: branchName, | ||
@@ -364,3 +365,3 @@ originSha: repository | ||
| err => { | ||
| if (err && err.message && err.message.indexOf('no reference found for shorthand') >= 0) { | ||
| if (err && err.message && err.message.indexOf(branchDoesNotExistOnRemoteMessageFraction) >= 0) { | ||
| // the branch does not exist in the remote, so certainly not pushed | ||
@@ -375,3 +376,3 @@ return undefined | ||
| .getRemote(GitInfo.originRemoteName) | ||
| .catch(() => new Error('remote "' + GitInfo.originRemoteName + '" does not exist')) | ||
| .catch(() => { throw new Error(originRemoteDoesNotExistMessage) }) | ||
| .then(remote => remote.url()), | ||
@@ -392,17 +393,2 @@ changes: repository | ||
| }) | ||
| .then( | ||
| new Contract({ | ||
| pre: [ | ||
| gitInfo => gitInfo instanceof GitInfo, | ||
| gitInfo => gitInfo.path === gitDirPath | ||
| ], | ||
| post: [(gitInfo, result) => result === gitInfo], | ||
| exception: [() => false] | ||
| }).implementation(gitInfo => gitInfo), | ||
| new Contract({ | ||
| pre: [(err) => err instanceof Error], | ||
| post: [() => false], | ||
| exception: [(err1, err2) => err1 === err2] | ||
| }).implementation(err => { throw err }) | ||
| ) | ||
| }) | ||
@@ -416,3 +402,3 @@ | ||
| */ | ||
| GitInfo.createForHighestGitDir = new Contract({ | ||
| GitInfo.createForHighestGitDir = new PromiseContract({ | ||
| pre: [ | ||
@@ -423,5 +409,7 @@ (path) => typeof path === 'string', | ||
| post: [ | ||
| (path, result) => Q.isPromiseAlike(result) | ||
| (path, result) => result instanceof GitInfo, | ||
| (path, result) => path.startsWith(result.path) | ||
| ], | ||
| exception: [() => false] | ||
| fastException: PromiseContract.mustNotHappen, | ||
| exception: exceptionIsAnError | ||
| }).implementation(function (path) { | ||
@@ -436,19 +424,6 @@ return GitInfo | ||
| }) | ||
| .then( | ||
| new Contract({ | ||
| pre: [ | ||
| gitInfo => gitInfo instanceof GitInfo, | ||
| gitInfo => path.startsWith(gitInfo.path) | ||
| ], | ||
| post: [(gitInfo, result) => result === gitInfo], | ||
| exception: [() => false] | ||
| }).implementation(gitInfo => gitInfo), | ||
| new Contract({ | ||
| pre: [(err) => err instanceof Error], | ||
| post: [() => false], | ||
| exception: [(err1, err2) => err1 === err2] | ||
| }).implementation(err => { throw err }) | ||
| ) | ||
| }) | ||
| GitInfo.branchDoesNotExistOnRemoteMessageFraction = branchDoesNotExistOnRemoteMessageFraction | ||
| module.exports = GitInfo |
+23
-8
| { | ||
| "name": "@ppwcode/node-gitinfo", | ||
| "version": "2.2.2", | ||
| "version": "2.2.3", | ||
| "description": "Get information about the current state of the highest git working copy we are in", | ||
@@ -30,14 +30,29 @@ "main": "GitInfo.js", | ||
| "dependencies": { | ||
| "@toryt/contracts-iii": "^3.1.0", | ||
| "commander": "^2.15.1", | ||
| "nodegit": "^0.22.0", | ||
| "@toryt/contracts-iv": "^4.0.0", | ||
| "commander": "^2.19.0", | ||
| "nodegit": "^0.23.0", | ||
| "pkginfo": "^0.4.1", | ||
| "promise-all": "^1.0.0", | ||
| "q": "^1.5.1" | ||
| }, | ||
| "devDependencies": { | ||
| "mocha": "^5.1.1", | ||
| "npm-check": "^5.7.0", | ||
| "nyc": "^11.7.1", | ||
| "standard": "^11.0.1" | ||
| "mocha": "^5.2.0", | ||
| "npm-check": "^5.9.0", | ||
| "nyc": "^13.1.0", | ||
| "proxyquire": "^2.1.0", | ||
| "sinon": "^7.1.0", | ||
| "standard": "^12.0.1" | ||
| }, | ||
| "nyc": { | ||
| "check-coverage": true, | ||
| "per-file": true, | ||
| "lines": 100, | ||
| "statements": 100, | ||
| "functions": 100, | ||
| "branches": 100, | ||
| "reporter": [ | ||
| "html", | ||
| "text" | ||
| ] | ||
| }, | ||
| "scripts": { | ||
@@ -44,0 +59,0 @@ "pretest": "npm-check || exit 0", |
+47
-5
@@ -14,6 +14,2 @@ [Node.js] package to get information about the current status of a git working copy. | ||
| > yarn add \@ppwcode/node-gitinfo | ||
| or | ||
| > npm install --save \@ppwcode/node-gitinfo | ||
@@ -51,4 +47,34 @@ | ||
| Compatibility | ||
| ============= | ||
| This library is intended to be compatible with Node 6, 8, and 10. | ||
| Therefor, the code does not use `async` / `await`, which was introduced in Node 8. | ||
| Also, we use `Q` as Promise library, instead of native Promises, since Node 6 does not yet support `util.promisify()`. | ||
| We use `Q.nfcall` instead. | ||
| Development | ||
| =========== | ||
| Node version | ||
| ------------ | ||
| Development is done in Node 10, via `nvm`. | ||
| Compatibility | ||
| ------------- | ||
| The code does not use `async` / `await`, which was introduced in Node 8. | ||
| Also, we use `Q` as Promise library, instead of native Promises, since Node 6 does not yet support `util.promisify()`. | ||
| We use `Q.nfcall` instead. | ||
| Style | ||
| ===== | ||
| ----- | ||
@@ -61,2 +87,18 @@ [](https://github.com/standard/standard) | ||
| TODO | ||
| ==== | ||
| Setup a CI | ||
| ---------- | ||
| Move to `ppwcode` team. Request access from Travis. | ||
| Create parallel builds for Node 6, 8 10, and back tag. | ||
| Test bin | ||
| -------- | ||
| Create integration tests for the `bin/gitInfo.js` with 100% coverage. | ||
| [Terraform]: https://peopleware.atlassian.net/wiki/x/CwAvBg | ||
@@ -63,0 +105,0 @@ [Node.js]: https://nodejs.org |
+11
-20
| /** | ||
| * Copyright 2017 PeopleWare n.v. | ||
| * Copyright 2017 - 2018 PeopleWare n.v. | ||
| * | ||
@@ -17,6 +17,6 @@ * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| const Contract = require('@toryt/contracts-iii') | ||
| const PromiseContract = require('@toryt/contracts-iv/lib/IV/PromiseContract') | ||
| const Git = require('nodegit') | ||
| const GitInfo = require('./GitInfo') | ||
| const Q = require('./q2') | ||
| const util = require('./_util') | ||
@@ -32,3 +32,3 @@ /** | ||
| */ | ||
| const tagGitRepo = new Contract({ | ||
| const tagGitRepo = new PromiseContract({ | ||
| pre: [ | ||
@@ -40,11 +40,12 @@ (path, tagName) => typeof path === 'string', | ||
| ], | ||
| post: [ | ||
| (path, tagName, result) => Q.isPromiseAlike(result) | ||
| ], | ||
| exception: [() => false] | ||
| post: [], // void | ||
| fastException: PromiseContract.mustNotHappen, | ||
| exception: [ | ||
| util.exceptionIsAnErrorCondition, | ||
| (path, tagName, exc) => exc.message === GitInfo.noGitDirectoryMsg || exc.message === tagGitRepo.couldNotCreateTagMsg | ||
| ] | ||
| }).implementation(function tagGit (path, tagName) { | ||
| const message = 'tag with ' + tagName | ||
| // noinspection JSUnresolvedVariable | ||
| return Git.Repository | ||
| .open(path) | ||
| return util.realPromise(Git.Repository.open(path)) | ||
| .catch(ignore => { | ||
@@ -68,12 +69,2 @@ throw new Error(GitInfo.noGitDirectoryMsg) | ||
| ) | ||
| .catch(new Contract({ | ||
| pre: [ | ||
| err => err instanceof Error, | ||
| err => err.message === GitInfo.noGitDirectoryMsg || err.message === tagGitRepo.couldNotCreateTagMsg | ||
| ], | ||
| post: [() => false], | ||
| exception: [(err1, err2) => err1 === err2] | ||
| }).implementation(function (err) { | ||
| throw err | ||
| })) | ||
| }) | ||
@@ -80,0 +71,0 @@ |
-1
| v8 |
| {"/Users/jand/Scratchpad/ppwcode/node-ppwcode-gitInfo/GitInfo.js":{"path":"/Users/jand/Scratchpad/ppwcode/node-ppwcode-gitInfo/GitInfo.js","statementMap":{"0":{"start":{"line":17,"column":17},"end":{"line":17,"column":48}},"1":{"start":{"line":18,"column":13},"end":{"line":18,"column":28}},"2":{"start":{"line":19,"column":11},"end":{"line":19,"column":24}},"3":{"start":{"line":20,"column":10},"end":{"line":20,"column":25}},"4":{"start":{"line":21,"column":12},"end":{"line":21,"column":30}},"5":{"start":{"line":22,"column":20},"end":{"line":22,"column":42}},"6":{"start":{"line":29,"column":4},"end":{"line":71,"column":61}},"7":{"start":{"line":39,"column":45},"end":{"line":39,"column":79}},"8":{"start":{"line":49,"column":64},"end":{"line":49,"column":97}},"9":{"start":{"line":65,"column":58},"end":{"line":65,"column":77}},"10":{"start":{"line":66,"column":42},"end":{"line":66,"column":98}},"11":{"start":{"line":89,"column":4},"end":{"line":89,"column":21}},"12":{"start":{"line":90,"column":4},"end":{"line":90,"column":19}},"13":{"start":{"line":91,"column":4},"end":{"line":91,"column":38}},"14":{"start":{"line":92,"column":4},"end":{"line":92,"column":44}},"15":{"start":{"line":93,"column":4},"end":{"line":93,"column":36}},"16":{"start":{"line":94,"column":4},"end":{"line":94,"column":56}},"17":{"start":{"line":103,"column":4},"end":{"line":103,"column":21}},"18":{"start":{"line":112,"column":4},"end":{"line":112,"column":20}},"19":{"start":{"line":121,"column":4},"end":{"line":121,"column":23}},"20":{"start":{"line":133,"column":4},"end":{"line":137,"column":64}},"21":{"start":{"line":147,"column":4},"end":{"line":147,"column":26}},"22":{"start":{"line":157,"column":4},"end":{"line":157,"column":33}},"23":{"start":{"line":164,"column":4},"end":{"line":164,"column":32}},"24":{"start":{"line":171,"column":4},"end":{"line":171,"column":34}},"25":{"start":{"line":178,"column":4},"end":{"line":178,"column":44}},"26":{"start":{"line":186,"column":4},"end":{"line":186,"column":115}},"27":{"start":{"line":186,"column":80},"end":{"line":186,"column":114}},"28":{"start":{"line":195,"column":4},"end":{"line":195,"column":62}},"29":{"start":{"line":200,"column":4},"end":{"line":212,"column":5}},"30":{"start":{"line":216,"column":0},"end":{"line":246,"column":2}},"31":{"start":{"line":218,"column":64},"end":{"line":218,"column":88}},"32":{"start":{"line":219,"column":64},"end":{"line":219,"column":70}},"33":{"start":{"line":220,"column":64},"end":{"line":220,"column":87}},"34":{"start":{"line":221,"column":64},"end":{"line":221,"column":91}},"35":{"start":{"line":222,"column":64},"end":{"line":222,"column":101}},"36":{"start":{"line":223,"column":64},"end":{"line":223,"column":107}},"37":{"start":{"line":224,"column":64},"end":{"line":224,"column":86}},"38":{"start":{"line":226,"column":6},"end":{"line":226,"column":75}},"39":{"start":{"line":226,"column":40},"end":{"line":226,"column":74}},"40":{"start":{"line":227,"column":64},"end":{"line":227,"column":119}},"41":{"start":{"line":229,"column":6},"end":{"line":229,"column":65}},"42":{"start":{"line":232,"column":72},"end":{"line":232,"column":92}},"43":{"start":{"line":233,"column":72},"end":{"line":233,"column":90}},"44":{"start":{"line":234,"column":72},"end":{"line":234,"column":111}},"45":{"start":{"line":235,"column":72},"end":{"line":235,"column":107}},"46":{"start":{"line":236,"column":72},"end":{"line":236,"column":117}},"47":{"start":{"line":237,"column":72},"end":{"line":237,"column":116}},"48":{"start":{"line":239,"column":6},"end":{"line":239,"column":65}},"49":{"start":{"line":239,"column":40},"end":{"line":239,"column":64}},"50":{"start":{"line":241,"column":6},"end":{"line":241,"column":65}},"51":{"start":{"line":241,"column":47},"end":{"line":241,"column":64}},"52":{"start":{"line":243,"column":6},"end":{"line":243,"column":68}},"53":{"start":{"line":245,"column":20},"end":{"line":245,"column":25}},"54":{"start":{"line":248,"column":0},"end":{"line":248,"column":36}},"55":{"start":{"line":249,"column":0},"end":{"line":249,"column":74}},"56":{"start":{"line":250,"column":0},"end":{"line":250,"column":35}},"57":{"start":{"line":251,"column":0},"end":{"line":251,"column":46}},"58":{"start":{"line":252,"column":0},"end":{"line":252,"column":78}},"59":{"start":{"line":253,"column":0},"end":{"line":253,"column":35}},"60":{"start":{"line":254,"column":0},"end":{"line":254,"column":42}},"61":{"start":{"line":260,"column":0},"end":{"line":291,"column":4}},"62":{"start":{"line":262,"column":17},"end":{"line":262,"column":44}},"63":{"start":{"line":265,"column":25},"end":{"line":265,"column":49}},"64":{"start":{"line":267,"column":20},"end":{"line":267,"column":25}},"65":{"start":{"line":270,"column":18},"end":{"line":270,"column":41}},"66":{"start":{"line":271,"column":17},"end":{"line":271,"column":85}},"67":{"start":{"line":271,"column":44},"end":{"line":271,"column":84}},"68":{"start":{"line":272,"column":4},"end":{"line":290,"column":7}},"69":{"start":{"line":272,"column":33},"end":{"line":274,"column":29}},"70":{"start":{"line":273,"column":18},"end":{"line":273,"column":21}},"71":{"start":{"line":274,"column":19},"end":{"line":274,"column":28}},"72":{"start":{"line":275,"column":23},"end":{"line":275,"column":49}},"73":{"start":{"line":275,"column":43},"end":{"line":275,"column":48}},"74":{"start":{"line":279,"column":22},"end":{"line":279,"column":86}},"75":{"start":{"line":280,"column":22},"end":{"line":280,"column":59}},"76":{"start":{"line":282,"column":48},"end":{"line":282,"column":76}},"77":{"start":{"line":283,"column":28},"end":{"line":283,"column":33}},"78":{"start":{"line":284,"column":47},"end":{"line":284,"column":64}},"79":{"start":{"line":286,"column":22},"end":{"line":286,"column":27}},"80":{"start":{"line":287,"column":23},"end":{"line":287,"column":28}},"81":{"start":{"line":288,"column":38},"end":{"line":288,"column":51}},"82":{"start":{"line":289,"column":35},"end":{"line":289,"column":44}},"83":{"start":{"line":296,"column":0},"end":{"line":317,"column":2}},"84":{"start":{"line":298,"column":16},"end":{"line":298,"column":50}},"85":{"start":{"line":299,"column":16},"end":{"line":299,"column":55}},"86":{"start":{"line":300,"column":16},"end":{"line":300,"column":57}},"87":{"start":{"line":301,"column":16},"end":{"line":301,"column":54}},"88":{"start":{"line":302,"column":16},"end":{"line":302,"column":54}},"89":{"start":{"line":303,"column":16},"end":{"line":303,"column":54}},"90":{"start":{"line":306,"column":24},"end":{"line":306,"column":51}},"91":{"start":{"line":307,"column":24},"end":{"line":307,"column":49}},"92":{"start":{"line":308,"column":24},"end":{"line":308,"column":54}},"93":{"start":{"line":309,"column":24},"end":{"line":309,"column":56}},"94":{"start":{"line":310,"column":24},"end":{"line":310,"column":53}},"95":{"start":{"line":311,"column":24},"end":{"line":311,"column":53}},"96":{"start":{"line":312,"column":24},"end":{"line":312,"column":54}},"97":{"start":{"line":314,"column":20},"end":{"line":314,"column":25}},"98":{"start":{"line":316,"column":2},"end":{"line":316,"column":119}},"99":{"start":{"line":323,"column":0},"end":{"line":394,"column":2}},"100":{"start":{"line":325,"column":20},"end":{"line":325,"column":50}},"101":{"start":{"line":326,"column":20},"end":{"line":326,"column":32}},"102":{"start":{"line":329,"column":25},"end":{"line":329,"column":49}},"103":{"start":{"line":331,"column":20},"end":{"line":331,"column":25}},"104":{"start":{"line":334,"column":2},"end":{"line":393,"column":5}},"105":{"start":{"line":336,"column":19},"end":{"line":336,"column":74}},"106":{"start":{"line":339,"column":6},"end":{"line":377,"column":10}},"107":{"start":{"line":342,"column":24},"end":{"line":342,"column":34}},"108":{"start":{"line":345,"column":29},"end":{"line":345,"column":77}},"109":{"start":{"line":346,"column":30},"end":{"line":360,"column":12}},"110":{"start":{"line":351,"column":24},"end":{"line":351,"column":34}},"111":{"start":{"line":353,"column":18},"end":{"line":356,"column":19}},"112":{"start":{"line":355,"column":20},"end":{"line":355,"column":36}},"113":{"start":{"line":357,"column":18},"end":{"line":357,"column":27}},"114":{"start":{"line":363,"column":23},"end":{"line":363,"column":92}},"115":{"start":{"line":364,"column":26},"end":{"line":364,"column":38}},"116":{"start":{"line":368,"column":12},"end":{"line":368,"column":103}},"117":{"start":{"line":368,"column":46},"end":{"line":368,"column":72}},"118":{"start":{"line":368,"column":88},"end":{"line":368,"column":101}},"119":{"start":{"line":370,"column":24},"end":{"line":377,"column":9}},"120":{"start":{"line":382,"column":21},"end":{"line":382,"column":47}},"121":{"start":{"line":383,"column":21},"end":{"line":383,"column":48}},"122":{"start":{"line":385,"column":36},"end":{"line":385,"column":54}},"123":{"start":{"line":386,"column":26},"end":{"line":386,"column":31}},"124":{"start":{"line":387,"column":35},"end":{"line":387,"column":42}},"125":{"start":{"line":389,"column":23},"end":{"line":389,"column":43}},"126":{"start":{"line":390,"column":21},"end":{"line":390,"column":26}},"127":{"start":{"line":391,"column":36},"end":{"line":391,"column":49}},"128":{"start":{"line":392,"column":33},"end":{"line":392,"column":42}},"129":{"start":{"line":396,"column":0},"end":{"line":396,"column":46}},"130":{"start":{"line":402,"column":0},"end":{"line":435,"column":2}},"131":{"start":{"line":404,"column":14},"end":{"line":404,"column":38}},"132":{"start":{"line":405,"column":14},"end":{"line":405,"column":20}},"133":{"start":{"line":408,"column":22},"end":{"line":408,"column":46}},"134":{"start":{"line":410,"column":20},"end":{"line":410,"column":25}},"135":{"start":{"line":412,"column":2},"end":{"line":434,"column":5}},"136":{"start":{"line":415,"column":6},"end":{"line":417,"column":7}},"137":{"start":{"line":416,"column":8},"end":{"line":416,"column":50}},"138":{"start":{"line":418,"column":6},"end":{"line":418,"column":39}},"139":{"start":{"line":423,"column":21},"end":{"line":423,"column":47}},"140":{"start":{"line":424,"column":21},"end":{"line":424,"column":50}},"141":{"start":{"line":426,"column":36},"end":{"line":426,"column":54}},"142":{"start":{"line":427,"column":26},"end":{"line":427,"column":31}},"143":{"start":{"line":428,"column":35},"end":{"line":428,"column":42}},"144":{"start":{"line":430,"column":23},"end":{"line":430,"column":43}},"145":{"start":{"line":431,"column":21},"end":{"line":431,"column":26}},"146":{"start":{"line":432,"column":36},"end":{"line":432,"column":49}},"147":{"start":{"line":433,"column":33},"end":{"line":433,"column":42}},"148":{"start":{"line":437,"column":0},"end":{"line":437,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":28,"column":2},"end":{"line":28,"column":3}},"loc":{"start":{"line":28,"column":20},"end":{"line":72,"column":3}},"line":28},"1":{"name":"(anonymous_1)","decl":{"start":{"line":39,"column":37},"end":{"line":39,"column":38}},"loc":{"start":{"line":39,"column":45},"end":{"line":39,"column":79}},"line":39},"2":{"name":"(anonymous_2)","decl":{"start":{"line":49,"column":52},"end":{"line":49,"column":53}},"loc":{"start":{"line":49,"column":64},"end":{"line":49,"column":97}},"line":49},"3":{"name":"(anonymous_3)","decl":{"start":{"line":65,"column":53},"end":{"line":65,"column":54}},"loc":{"start":{"line":65,"column":58},"end":{"line":65,"column":77}},"line":65},"4":{"name":"(anonymous_4)","decl":{"start":{"line":66,"column":37},"end":{"line":66,"column":38}},"loc":{"start":{"line":66,"column":42},"end":{"line":66,"column":98}},"line":66},"5":{"name":"(anonymous_5)","decl":{"start":{"line":88,"column":2},"end":{"line":88,"column":3}},"loc":{"start":{"line":88,"column":71},"end":{"line":95,"column":3}},"line":88},"6":{"name":"(anonymous_6)","decl":{"start":{"line":102,"column":2},"end":{"line":102,"column":3}},"loc":{"start":{"line":102,"column":14},"end":{"line":104,"column":3}},"line":102},"7":{"name":"(anonymous_7)","decl":{"start":{"line":111,"column":2},"end":{"line":111,"column":3}},"loc":{"start":{"line":111,"column":13},"end":{"line":113,"column":3}},"line":111},"8":{"name":"(anonymous_8)","decl":{"start":{"line":120,"column":2},"end":{"line":120,"column":3}},"loc":{"start":{"line":120,"column":16},"end":{"line":122,"column":3}},"line":120},"9":{"name":"(anonymous_9)","decl":{"start":{"line":132,"column":2},"end":{"line":132,"column":3}},"loc":{"start":{"line":132,"column":21},"end":{"line":138,"column":3}},"line":132},"10":{"name":"(anonymous_10)","decl":{"start":{"line":146,"column":2},"end":{"line":146,"column":3}},"loc":{"start":{"line":146,"column":19},"end":{"line":148,"column":3}},"line":146},"11":{"name":"(anonymous_11)","decl":{"start":{"line":156,"column":2},"end":{"line":156,"column":3}},"loc":{"start":{"line":156,"column":17},"end":{"line":158,"column":3}},"line":156},"12":{"name":"(anonymous_12)","decl":{"start":{"line":163,"column":2},"end":{"line":163,"column":3}},"loc":{"start":{"line":163,"column":25},"end":{"line":165,"column":3}},"line":163},"13":{"name":"(anonymous_13)","decl":{"start":{"line":170,"column":2},"end":{"line":170,"column":3}},"loc":{"start":{"line":170,"column":17},"end":{"line":172,"column":3}},"line":170},"14":{"name":"(anonymous_14)","decl":{"start":{"line":177,"column":2},"end":{"line":177,"column":3}},"loc":{"start":{"line":177,"column":18},"end":{"line":179,"column":3}},"line":177},"15":{"name":"(anonymous_15)","decl":{"start":{"line":185,"column":2},"end":{"line":185,"column":3}},"loc":{"start":{"line":185,"column":20},"end":{"line":187,"column":3}},"line":185},"16":{"name":"(anonymous_16)","decl":{"start":{"line":186,"column":68},"end":{"line":186,"column":69}},"loc":{"start":{"line":186,"column":80},"end":{"line":186,"column":114}},"line":186},"17":{"name":"(anonymous_17)","decl":{"start":{"line":194,"column":2},"end":{"line":194,"column":3}},"loc":{"start":{"line":194,"column":16},"end":{"line":196,"column":3}},"line":194},"18":{"name":"(anonymous_18)","decl":{"start":{"line":199,"column":2},"end":{"line":199,"column":3}},"loc":{"start":{"line":199,"column":12},"end":{"line":213,"column":3}},"line":199},"19":{"name":"(anonymous_19)","decl":{"start":{"line":218,"column":4},"end":{"line":218,"column":5}},"loc":{"start":{"line":218,"column":64},"end":{"line":218,"column":88}},"line":218},"20":{"name":"(anonymous_20)","decl":{"start":{"line":219,"column":4},"end":{"line":219,"column":5}},"loc":{"start":{"line":219,"column":64},"end":{"line":219,"column":70}},"line":219},"21":{"name":"(anonymous_21)","decl":{"start":{"line":220,"column":4},"end":{"line":220,"column":5}},"loc":{"start":{"line":220,"column":64},"end":{"line":220,"column":87}},"line":220},"22":{"name":"(anonymous_22)","decl":{"start":{"line":221,"column":4},"end":{"line":221,"column":5}},"loc":{"start":{"line":221,"column":64},"end":{"line":221,"column":91}},"line":221},"23":{"name":"(anonymous_23)","decl":{"start":{"line":222,"column":4},"end":{"line":222,"column":5}},"loc":{"start":{"line":222,"column":64},"end":{"line":222,"column":101}},"line":222},"24":{"name":"(anonymous_24)","decl":{"start":{"line":223,"column":4},"end":{"line":223,"column":5}},"loc":{"start":{"line":223,"column":64},"end":{"line":223,"column":107}},"line":223},"25":{"name":"(anonymous_25)","decl":{"start":{"line":224,"column":4},"end":{"line":224,"column":5}},"loc":{"start":{"line":224,"column":64},"end":{"line":224,"column":86}},"line":224},"26":{"name":"(anonymous_26)","decl":{"start":{"line":225,"column":4},"end":{"line":225,"column":5}},"loc":{"start":{"line":226,"column":6},"end":{"line":226,"column":75}},"line":226},"27":{"name":"(anonymous_27)","decl":{"start":{"line":226,"column":32},"end":{"line":226,"column":33}},"loc":{"start":{"line":226,"column":40},"end":{"line":226,"column":74}},"line":226},"28":{"name":"(anonymous_28)","decl":{"start":{"line":227,"column":4},"end":{"line":227,"column":5}},"loc":{"start":{"line":227,"column":64},"end":{"line":227,"column":119}},"line":227},"29":{"name":"(anonymous_29)","decl":{"start":{"line":228,"column":4},"end":{"line":228,"column":5}},"loc":{"start":{"line":229,"column":6},"end":{"line":229,"column":65}},"line":229},"30":{"name":"(anonymous_30)","decl":{"start":{"line":232,"column":4},"end":{"line":232,"column":5}},"loc":{"start":{"line":232,"column":72},"end":{"line":232,"column":92}},"line":232},"31":{"name":"(anonymous_31)","decl":{"start":{"line":233,"column":4},"end":{"line":233,"column":5}},"loc":{"start":{"line":233,"column":72},"end":{"line":233,"column":90}},"line":233},"32":{"name":"(anonymous_32)","decl":{"start":{"line":234,"column":4},"end":{"line":234,"column":5}},"loc":{"start":{"line":234,"column":72},"end":{"line":234,"column":111}},"line":234},"33":{"name":"(anonymous_33)","decl":{"start":{"line":235,"column":4},"end":{"line":235,"column":5}},"loc":{"start":{"line":235,"column":72},"end":{"line":235,"column":107}},"line":235},"34":{"name":"(anonymous_34)","decl":{"start":{"line":236,"column":4},"end":{"line":236,"column":5}},"loc":{"start":{"line":236,"column":72},"end":{"line":236,"column":117}},"line":236},"35":{"name":"(anonymous_35)","decl":{"start":{"line":237,"column":4},"end":{"line":237,"column":5}},"loc":{"start":{"line":237,"column":72},"end":{"line":237,"column":116}},"line":237},"36":{"name":"(anonymous_36)","decl":{"start":{"line":238,"column":4},"end":{"line":238,"column":5}},"loc":{"start":{"line":239,"column":6},"end":{"line":239,"column":65}},"line":239},"37":{"name":"(anonymous_37)","decl":{"start":{"line":239,"column":32},"end":{"line":239,"column":33}},"loc":{"start":{"line":239,"column":40},"end":{"line":239,"column":64}},"line":239},"38":{"name":"(anonymous_38)","decl":{"start":{"line":240,"column":4},"end":{"line":240,"column":5}},"loc":{"start":{"line":241,"column":6},"end":{"line":241,"column":65}},"line":241},"39":{"name":"(anonymous_39)","decl":{"start":{"line":241,"column":39},"end":{"line":241,"column":40}},"loc":{"start":{"line":241,"column":47},"end":{"line":241,"column":64}},"line":241},"40":{"name":"(anonymous_40)","decl":{"start":{"line":242,"column":4},"end":{"line":242,"column":5}},"loc":{"start":{"line":243,"column":6},"end":{"line":243,"column":68}},"line":243},"41":{"name":"(anonymous_41)","decl":{"start":{"line":245,"column":14},"end":{"line":245,"column":15}},"loc":{"start":{"line":245,"column":20},"end":{"line":245,"column":25}},"line":245},"42":{"name":"(anonymous_42)","decl":{"start":{"line":262,"column":4},"end":{"line":262,"column":5}},"loc":{"start":{"line":262,"column":17},"end":{"line":262,"column":44}},"line":262},"43":{"name":"(anonymous_43)","decl":{"start":{"line":265,"column":4},"end":{"line":265,"column":5}},"loc":{"start":{"line":265,"column":25},"end":{"line":265,"column":49}},"line":265},"44":{"name":"(anonymous_44)","decl":{"start":{"line":267,"column":14},"end":{"line":267,"column":15}},"loc":{"start":{"line":267,"column":20},"end":{"line":267,"column":25}},"line":267},"45":{"name":"(anonymous_45)","decl":{"start":{"line":269,"column":18},"end":{"line":269,"column":19}},"loc":{"start":{"line":269,"column":29},"end":{"line":291,"column":3}},"line":269},"46":{"name":"(anonymous_46)","decl":{"start":{"line":271,"column":27},"end":{"line":271,"column":28}},"loc":{"start":{"line":271,"column":44},"end":{"line":271,"column":84}},"line":271},"47":{"name":"(anonymous_47)","decl":{"start":{"line":272,"column":26},"end":{"line":272,"column":27}},"loc":{"start":{"line":272,"column":33},"end":{"line":274,"column":29}},"line":272},"48":{"name":"(anonymous_48)","decl":{"start":{"line":273,"column":12},"end":{"line":273,"column":13}},"loc":{"start":{"line":273,"column":18},"end":{"line":273,"column":21}},"line":273},"49":{"name":"(anonymous_49)","decl":{"start":{"line":274,"column":13},"end":{"line":274,"column":14}},"loc":{"start":{"line":274,"column":19},"end":{"line":274,"column":28}},"line":274},"50":{"name":"(anonymous_50)","decl":{"start":{"line":275,"column":12},"end":{"line":275,"column":13}},"loc":{"start":{"line":275,"column":23},"end":{"line":275,"column":49}},"line":275},"51":{"name":"(anonymous_51)","decl":{"start":{"line":275,"column":36},"end":{"line":275,"column":37}},"loc":{"start":{"line":275,"column":43},"end":{"line":275,"column":48}},"line":275},"52":{"name":"(anonymous_52)","decl":{"start":{"line":279,"column":12},"end":{"line":279,"column":13}},"loc":{"start":{"line":279,"column":22},"end":{"line":279,"column":86}},"line":279},"53":{"name":"(anonymous_53)","decl":{"start":{"line":280,"column":12},"end":{"line":280,"column":13}},"loc":{"start":{"line":280,"column":22},"end":{"line":280,"column":59}},"line":280},"54":{"name":"(anonymous_54)","decl":{"start":{"line":282,"column":17},"end":{"line":282,"column":18}},"loc":{"start":{"line":282,"column":48},"end":{"line":282,"column":76}},"line":282},"55":{"name":"(anonymous_55)","decl":{"start":{"line":283,"column":22},"end":{"line":283,"column":23}},"loc":{"start":{"line":283,"column":28},"end":{"line":283,"column":33}},"line":283},"56":{"name":"(anonymous_56)","decl":{"start":{"line":284,"column":26},"end":{"line":284,"column":27}},"loc":{"start":{"line":284,"column":47},"end":{"line":284,"column":64}},"line":284},"57":{"name":"(anonymous_57)","decl":{"start":{"line":286,"column":16},"end":{"line":286,"column":17}},"loc":{"start":{"line":286,"column":22},"end":{"line":286,"column":27}},"line":286},"58":{"name":"(anonymous_58)","decl":{"start":{"line":287,"column":17},"end":{"line":287,"column":18}},"loc":{"start":{"line":287,"column":23},"end":{"line":287,"column":28}},"line":287},"59":{"name":"(anonymous_59)","decl":{"start":{"line":288,"column":22},"end":{"line":288,"column":23}},"loc":{"start":{"line":288,"column":38},"end":{"line":288,"column":51}},"line":288},"60":{"name":"(anonymous_60)","decl":{"start":{"line":289,"column":26},"end":{"line":289,"column":27}},"loc":{"start":{"line":289,"column":33},"end":{"line":289,"column":46}},"line":289},"61":{"name":"(anonymous_61)","decl":{"start":{"line":298,"column":4},"end":{"line":298,"column":5}},"loc":{"start":{"line":298,"column":16},"end":{"line":298,"column":50}},"line":298},"62":{"name":"(anonymous_62)","decl":{"start":{"line":299,"column":4},"end":{"line":299,"column":5}},"loc":{"start":{"line":299,"column":16},"end":{"line":299,"column":55}},"line":299},"63":{"name":"(anonymous_63)","decl":{"start":{"line":300,"column":4},"end":{"line":300,"column":5}},"loc":{"start":{"line":300,"column":16},"end":{"line":300,"column":57}},"line":300},"64":{"name":"(anonymous_64)","decl":{"start":{"line":301,"column":4},"end":{"line":301,"column":5}},"loc":{"start":{"line":301,"column":16},"end":{"line":301,"column":54}},"line":301},"65":{"name":"(anonymous_65)","decl":{"start":{"line":302,"column":4},"end":{"line":302,"column":5}},"loc":{"start":{"line":302,"column":16},"end":{"line":302,"column":54}},"line":302},"66":{"name":"(anonymous_66)","decl":{"start":{"line":303,"column":4},"end":{"line":303,"column":5}},"loc":{"start":{"line":303,"column":16},"end":{"line":303,"column":54}},"line":303},"67":{"name":"(anonymous_67)","decl":{"start":{"line":306,"column":4},"end":{"line":306,"column":5}},"loc":{"start":{"line":306,"column":24},"end":{"line":306,"column":51}},"line":306},"68":{"name":"(anonymous_68)","decl":{"start":{"line":307,"column":4},"end":{"line":307,"column":5}},"loc":{"start":{"line":307,"column":24},"end":{"line":307,"column":49}},"line":307},"69":{"name":"(anonymous_69)","decl":{"start":{"line":308,"column":4},"end":{"line":308,"column":5}},"loc":{"start":{"line":308,"column":24},"end":{"line":308,"column":54}},"line":308},"70":{"name":"(anonymous_70)","decl":{"start":{"line":309,"column":4},"end":{"line":309,"column":5}},"loc":{"start":{"line":309,"column":24},"end":{"line":309,"column":56}},"line":309},"71":{"name":"(anonymous_71)","decl":{"start":{"line":310,"column":4},"end":{"line":310,"column":5}},"loc":{"start":{"line":310,"column":24},"end":{"line":310,"column":53}},"line":310},"72":{"name":"(anonymous_72)","decl":{"start":{"line":311,"column":4},"end":{"line":311,"column":5}},"loc":{"start":{"line":311,"column":24},"end":{"line":311,"column":53}},"line":311},"73":{"name":"(anonymous_73)","decl":{"start":{"line":312,"column":4},"end":{"line":312,"column":5}},"loc":{"start":{"line":312,"column":24},"end":{"line":312,"column":54}},"line":312},"74":{"name":"(anonymous_74)","decl":{"start":{"line":314,"column":14},"end":{"line":314,"column":15}},"loc":{"start":{"line":314,"column":20},"end":{"line":314,"column":25}},"line":314},"75":{"name":"(anonymous_75)","decl":{"start":{"line":315,"column":18},"end":{"line":315,"column":19}},"loc":{"start":{"line":315,"column":36},"end":{"line":317,"column":1}},"line":315},"76":{"name":"(anonymous_76)","decl":{"start":{"line":325,"column":4},"end":{"line":325,"column":5}},"loc":{"start":{"line":325,"column":20},"end":{"line":325,"column":50}},"line":325},"77":{"name":"(anonymous_77)","decl":{"start":{"line":326,"column":4},"end":{"line":326,"column":5}},"loc":{"start":{"line":326,"column":20},"end":{"line":326,"column":32}},"line":326},"78":{"name":"(anonymous_78)","decl":{"start":{"line":329,"column":4},"end":{"line":329,"column":5}},"loc":{"start":{"line":329,"column":25},"end":{"line":329,"column":49}},"line":329},"79":{"name":"(anonymous_79)","decl":{"start":{"line":331,"column":14},"end":{"line":331,"column":15}},"loc":{"start":{"line":331,"column":20},"end":{"line":331,"column":25}},"line":331},"80":{"name":"(anonymous_80)","decl":{"start":{"line":332,"column":18},"end":{"line":332,"column":19}},"loc":{"start":{"line":332,"column":40},"end":{"line":394,"column":1}},"line":332},"81":{"name":"(anonymous_81)","decl":{"start":{"line":336,"column":11},"end":{"line":336,"column":12}},"loc":{"start":{"line":336,"column":17},"end":{"line":336,"column":76}},"line":336},"82":{"name":"(anonymous_82)","decl":{"start":{"line":337,"column":10},"end":{"line":337,"column":11}},"loc":{"start":{"line":337,"column":24},"end":{"line":378,"column":5}},"line":337},"83":{"name":"(anonymous_83)","decl":{"start":{"line":342,"column":16},"end":{"line":342,"column":17}},"loc":{"start":{"line":342,"column":24},"end":{"line":342,"column":34}},"line":342},"84":{"name":"(anonymous_84)","decl":{"start":{"line":345,"column":16},"end":{"line":345,"column":17}},"loc":{"start":{"line":345,"column":29},"end":{"line":345,"column":77}},"line":345},"85":{"name":"(anonymous_85)","decl":{"start":{"line":346,"column":16},"end":{"line":346,"column":17}},"loc":{"start":{"line":346,"column":30},"end":{"line":360,"column":12}},"line":346},"86":{"name":"(anonymous_86)","decl":{"start":{"line":351,"column":16},"end":{"line":351,"column":17}},"loc":{"start":{"line":351,"column":24},"end":{"line":351,"column":34}},"line":351},"87":{"name":"(anonymous_87)","decl":{"start":{"line":352,"column":16},"end":{"line":352,"column":17}},"loc":{"start":{"line":352,"column":23},"end":{"line":358,"column":17}},"line":352},"88":{"name":"(anonymous_88)","decl":{"start":{"line":363,"column":17},"end":{"line":363,"column":18}},"loc":{"start":{"line":363,"column":23},"end":{"line":363,"column":92}},"line":363},"89":{"name":"(anonymous_89)","decl":{"start":{"line":364,"column":16},"end":{"line":364,"column":17}},"loc":{"start":{"line":364,"column":26},"end":{"line":364,"column":38}},"line":364},"90":{"name":"(anonymous_90)","decl":{"start":{"line":367,"column":16},"end":{"line":367,"column":17}},"loc":{"start":{"line":368,"column":12},"end":{"line":368,"column":103}},"line":368},"91":{"name":"(anonymous_91)","decl":{"start":{"line":368,"column":36},"end":{"line":368,"column":37}},"loc":{"start":{"line":368,"column":46},"end":{"line":368,"column":72}},"line":368},"92":{"name":"(anonymous_92)","decl":{"start":{"line":368,"column":78},"end":{"line":368,"column":79}},"loc":{"start":{"line":368,"column":88},"end":{"line":368,"column":101}},"line":368},"93":{"name":"(anonymous_93)","decl":{"start":{"line":370,"column":14},"end":{"line":370,"column":15}},"loc":{"start":{"line":370,"column":24},"end":{"line":377,"column":9}},"line":370},"94":{"name":"(anonymous_94)","decl":{"start":{"line":382,"column":10},"end":{"line":382,"column":11}},"loc":{"start":{"line":382,"column":21},"end":{"line":382,"column":47}},"line":382},"95":{"name":"(anonymous_95)","decl":{"start":{"line":383,"column":10},"end":{"line":383,"column":11}},"loc":{"start":{"line":383,"column":21},"end":{"line":383,"column":48}},"line":383},"96":{"name":"(anonymous_96)","decl":{"start":{"line":385,"column":15},"end":{"line":385,"column":16}},"loc":{"start":{"line":385,"column":36},"end":{"line":385,"column":54}},"line":385},"97":{"name":"(anonymous_97)","decl":{"start":{"line":386,"column":20},"end":{"line":386,"column":21}},"loc":{"start":{"line":386,"column":26},"end":{"line":386,"column":31}},"line":386},"98":{"name":"(anonymous_98)","decl":{"start":{"line":387,"column":24},"end":{"line":387,"column":25}},"loc":{"start":{"line":387,"column":35},"end":{"line":387,"column":42}},"line":387},"99":{"name":"(anonymous_99)","decl":{"start":{"line":389,"column":14},"end":{"line":389,"column":15}},"loc":{"start":{"line":389,"column":23},"end":{"line":389,"column":43}},"line":389},"100":{"name":"(anonymous_100)","decl":{"start":{"line":390,"column":15},"end":{"line":390,"column":16}},"loc":{"start":{"line":390,"column":21},"end":{"line":390,"column":26}},"line":390},"101":{"name":"(anonymous_101)","decl":{"start":{"line":391,"column":20},"end":{"line":391,"column":21}},"loc":{"start":{"line":391,"column":36},"end":{"line":391,"column":49}},"line":391},"102":{"name":"(anonymous_102)","decl":{"start":{"line":392,"column":24},"end":{"line":392,"column":25}},"loc":{"start":{"line":392,"column":31},"end":{"line":392,"column":44}},"line":392},"103":{"name":"(anonymous_103)","decl":{"start":{"line":404,"column":4},"end":{"line":404,"column":5}},"loc":{"start":{"line":404,"column":14},"end":{"line":404,"column":38}},"line":404},"104":{"name":"(anonymous_104)","decl":{"start":{"line":405,"column":4},"end":{"line":405,"column":5}},"loc":{"start":{"line":405,"column":14},"end":{"line":405,"column":20}},"line":405},"105":{"name":"(anonymous_105)","decl":{"start":{"line":408,"column":4},"end":{"line":408,"column":5}},"loc":{"start":{"line":408,"column":22},"end":{"line":408,"column":46}},"line":408},"106":{"name":"(anonymous_106)","decl":{"start":{"line":410,"column":14},"end":{"line":410,"column":15}},"loc":{"start":{"line":410,"column":20},"end":{"line":410,"column":25}},"line":410},"107":{"name":"(anonymous_107)","decl":{"start":{"line":411,"column":18},"end":{"line":411,"column":19}},"loc":{"start":{"line":411,"column":34},"end":{"line":435,"column":1}},"line":411},"108":{"name":"(anonymous_108)","decl":{"start":{"line":414,"column":10},"end":{"line":414,"column":11}},"loc":{"start":{"line":414,"column":24},"end":{"line":419,"column":5}},"line":414},"109":{"name":"(anonymous_109)","decl":{"start":{"line":423,"column":10},"end":{"line":423,"column":11}},"loc":{"start":{"line":423,"column":21},"end":{"line":423,"column":47}},"line":423},"110":{"name":"(anonymous_110)","decl":{"start":{"line":424,"column":10},"end":{"line":424,"column":11}},"loc":{"start":{"line":424,"column":21},"end":{"line":424,"column":50}},"line":424},"111":{"name":"(anonymous_111)","decl":{"start":{"line":426,"column":15},"end":{"line":426,"column":16}},"loc":{"start":{"line":426,"column":36},"end":{"line":426,"column":54}},"line":426},"112":{"name":"(anonymous_112)","decl":{"start":{"line":427,"column":20},"end":{"line":427,"column":21}},"loc":{"start":{"line":427,"column":26},"end":{"line":427,"column":31}},"line":427},"113":{"name":"(anonymous_113)","decl":{"start":{"line":428,"column":24},"end":{"line":428,"column":25}},"loc":{"start":{"line":428,"column":35},"end":{"line":428,"column":42}},"line":428},"114":{"name":"(anonymous_114)","decl":{"start":{"line":430,"column":14},"end":{"line":430,"column":15}},"loc":{"start":{"line":430,"column":23},"end":{"line":430,"column":43}},"line":430},"115":{"name":"(anonymous_115)","decl":{"start":{"line":431,"column":15},"end":{"line":431,"column":16}},"loc":{"start":{"line":431,"column":21},"end":{"line":431,"column":26}},"line":431},"116":{"name":"(anonymous_116)","decl":{"start":{"line":432,"column":20},"end":{"line":432,"column":21}},"loc":{"start":{"line":432,"column":36},"end":{"line":432,"column":49}},"line":432},"117":{"name":"(anonymous_117)","decl":{"start":{"line":433,"column":24},"end":{"line":433,"column":25}},"loc":{"start":{"line":433,"column":31},"end":{"line":433,"column":44}},"line":433}},"branchMap":{"0":{"loc":{"start":{"line":29,"column":11},"end":{"line":71,"column":61}},"type":"binary-expr","locations":[{"start":{"line":29,"column":11},"end":{"line":29,"column":40}},{"start":{"line":30,"column":6},"end":{"line":30,"column":17}},{"start":{"line":34,"column":6},"end":{"line":34,"column":34}},{"start":{"line":35,"column":6},"end":{"line":35,"column":38}},{"start":{"line":36,"column":7},"end":{"line":36,"column":32}},{"start":{"line":36,"column":37},"end":{"line":36,"column":68}},{"start":{"line":36,"column":72},"end":{"line":36,"column":85}},{"start":{"line":37,"column":7},"end":{"line":37,"column":35}},{"start":{"line":37,"column":40},"end":{"line":37,"column":74}},{"start":{"line":37,"column":78},"end":{"line":37,"column":94}},{"start":{"line":38,"column":6},"end":{"line":38,"column":33}},{"start":{"line":39,"column":6},"end":{"line":39,"column":80}},{"start":{"line":40,"column":7},"end":{"line":40,"column":41}},{"start":{"line":40,"column":45},"end":{"line":40,"column":85}},{"start":{"line":41,"column":7},"end":{"line":41,"column":41}},{"start":{"line":41,"column":45},"end":{"line":41,"column":89}},{"start":{"line":42,"column":6},"end":{"line":42,"column":39}},{"start":{"line":43,"column":6},"end":{"line":43,"column":48}},{"start":{"line":44,"column":6},"end":{"line":44,"column":40}},{"start":{"line":45,"column":6},"end":{"line":45,"column":59}},{"start":{"line":46,"column":6},"end":{"line":46,"column":42}},{"start":{"line":47,"column":7},"end":{"line":47,"column":18}},{"start":{"line":47,"column":22},"end":{"line":47,"column":37}},{"start":{"line":48,"column":7},"end":{"line":48,"column":19}},{"start":{"line":49,"column":10},"end":{"line":49,"column":98}},{"start":{"line":50,"column":10},"end":{"line":50,"column":25}},{"start":{"line":51,"column":6},"end":{"line":51,"column":38}},{"start":{"line":52,"column":7},"end":{"line":52,"column":22}},{"start":{"line":52,"column":26},"end":{"line":52,"column":37}},{"start":{"line":53,"column":7},"end":{"line":53,"column":23}},{"start":{"line":53,"column":28},"end":{"line":53,"column":75}},{"start":{"line":54,"column":7},"end":{"line":54,"column":19}},{"start":{"line":55,"column":10},"end":{"line":55,"column":50}},{"start":{"line":56,"column":10},"end":{"line":56,"column":56}},{"start":{"line":57,"column":10},"end":{"line":57,"column":84}},{"start":{"line":58,"column":7},"end":{"line":58,"column":47}},{"start":{"line":58,"column":51},"end":{"line":58,"column":102}},{"start":{"line":59,"column":8},"end":{"line":59,"column":21}},{"start":{"line":59,"column":25},"end":{"line":59,"column":71}},{"start":{"line":59,"column":76},"end":{"line":59,"column":106}},{"start":{"line":60,"column":6},"end":{"line":60,"column":57}},{"start":{"line":61,"column":6},"end":{"line":61,"column":55}},{"start":{"line":62,"column":6},"end":{"line":62,"column":61}},{"start":{"line":63,"column":6},"end":{"line":63,"column":71}},{"start":{"line":64,"column":6},"end":{"line":64,"column":67}},{"start":{"line":65,"column":6},"end":{"line":65,"column":78}},{"start":{"line":66,"column":6},"end":{"line":66,"column":99}},{"start":{"line":67,"column":6},"end":{"line":67,"column":79}},{"start":{"line":68,"column":6},"end":{"line":68,"column":63}},{"start":{"line":69,"column":6},"end":{"line":69,"column":65}},{"start":{"line":70,"column":6},"end":{"line":70,"column":69}},{"start":{"line":71,"column":6},"end":{"line":71,"column":61}}],"line":29},"1":{"loc":{"start":{"line":39,"column":45},"end":{"line":39,"column":79}},"type":"binary-expr","locations":[{"start":{"line":39,"column":45},"end":{"line":39,"column":69}},{"start":{"line":39,"column":73},"end":{"line":39,"column":79}}],"line":39},"2":{"loc":{"start":{"line":53,"column":45},"end":{"line":53,"column":74}},"type":"binary-expr","locations":[{"start":{"line":53,"column":45},"end":{"line":53,"column":57}},{"start":{"line":53,"column":61},"end":{"line":53,"column":74}}],"line":53},"3":{"loc":{"start":{"line":91,"column":19},"end":{"line":91,"column":38}},"type":"binary-expr","locations":[{"start":{"line":91,"column":19},"end":{"line":91,"column":25}},{"start":{"line":91,"column":29},"end":{"line":91,"column":38}}],"line":91},"4":{"loc":{"start":{"line":92,"column":22},"end":{"line":92,"column":44}},"type":"binary-expr","locations":[{"start":{"line":92,"column":22},"end":{"line":92,"column":31}},{"start":{"line":92,"column":35},"end":{"line":92,"column":44}}],"line":92},"5":{"loc":{"start":{"line":94,"column":28},"end":{"line":94,"column":56}},"type":"binary-expr","locations":[{"start":{"line":94,"column":28},"end":{"line":94,"column":43}},{"start":{"line":94,"column":47},"end":{"line":94,"column":56}}],"line":94},"6":{"loc":{"start":{"line":133,"column":11},"end":{"line":137,"column":64}},"type":"cond-expr","locations":[{"start":{"line":134,"column":8},"end":{"line":134,"column":17}},{"start":{"line":135,"column":9},"end":{"line":137,"column":63}}],"line":133},"7":{"loc":{"start":{"line":135,"column":9},"end":{"line":137,"column":63}},"type":"cond-expr","locations":[{"start":{"line":136,"column":10},"end":{"line":136,"column":40}},{"start":{"line":137,"column":10},"end":{"line":137,"column":63}}],"line":135},"8":{"loc":{"start":{"line":186,"column":11},"end":{"line":186,"column":115}},"type":"binary-expr","locations":[{"start":{"line":186,"column":11},"end":{"line":186,"column":23}},{"start":{"line":186,"column":27},"end":{"line":186,"column":115}}],"line":186},"9":{"loc":{"start":{"line":195,"column":11},"end":{"line":195,"column":62}},"type":"binary-expr","locations":[{"start":{"line":195,"column":11},"end":{"line":195,"column":27}},{"start":{"line":195,"column":32},"end":{"line":195,"column":44}},{"start":{"line":195,"column":48},"end":{"line":195,"column":61}}],"line":195},"10":{"loc":{"start":{"line":222,"column":64},"end":{"line":222,"column":101}},"type":"binary-expr","locations":[{"start":{"line":222,"column":64},"end":{"line":222,"column":71}},{"start":{"line":222,"column":75},"end":{"line":222,"column":101}}],"line":222},"11":{"loc":{"start":{"line":223,"column":64},"end":{"line":223,"column":107}},"type":"binary-expr","locations":[{"start":{"line":223,"column":64},"end":{"line":223,"column":74}},{"start":{"line":223,"column":78},"end":{"line":223,"column":107}}],"line":223},"12":{"loc":{"start":{"line":226,"column":40},"end":{"line":226,"column":74}},"type":"binary-expr","locations":[{"start":{"line":226,"column":40},"end":{"line":226,"column":64}},{"start":{"line":226,"column":68},"end":{"line":226,"column":74}}],"line":226},"13":{"loc":{"start":{"line":227,"column":64},"end":{"line":227,"column":119}},"type":"binary-expr","locations":[{"start":{"line":227,"column":64},"end":{"line":227,"column":80}},{"start":{"line":227,"column":84},"end":{"line":227,"column":119}}],"line":227},"14":{"loc":{"start":{"line":229,"column":6},"end":{"line":229,"column":65}},"type":"binary-expr","locations":[{"start":{"line":229,"column":6},"end":{"line":229,"column":22}},{"start":{"line":229,"column":26},"end":{"line":229,"column":65}}],"line":229},"15":{"loc":{"start":{"line":234,"column":72},"end":{"line":234,"column":111}},"type":"binary-expr","locations":[{"start":{"line":234,"column":72},"end":{"line":234,"column":80}},{"start":{"line":234,"column":84},"end":{"line":234,"column":111}}],"line":234},"16":{"loc":{"start":{"line":235,"column":72},"end":{"line":235,"column":107}},"type":"binary-expr","locations":[{"start":{"line":235,"column":72},"end":{"line":235,"column":79}},{"start":{"line":235,"column":83},"end":{"line":235,"column":107}}],"line":235},"17":{"loc":{"start":{"line":236,"column":72},"end":{"line":236,"column":117}},"type":"binary-expr","locations":[{"start":{"line":236,"column":72},"end":{"line":236,"column":83}},{"start":{"line":236,"column":87},"end":{"line":236,"column":117}}],"line":236},"18":{"loc":{"start":{"line":237,"column":72},"end":{"line":237,"column":116}},"type":"binary-expr","locations":[{"start":{"line":237,"column":72},"end":{"line":237,"column":82}},{"start":{"line":237,"column":86},"end":{"line":237,"column":116}}],"line":237},"19":{"loc":{"start":{"line":243,"column":6},"end":{"line":243,"column":68}},"type":"binary-expr","locations":[{"start":{"line":243,"column":6},"end":{"line":243,"column":22}},{"start":{"line":243,"column":26},"end":{"line":243,"column":68}}],"line":243},"20":{"loc":{"start":{"line":279,"column":22},"end":{"line":279,"column":86}},"type":"binary-expr","locations":[{"start":{"line":279,"column":22},"end":{"line":279,"column":42}},{"start":{"line":279,"column":47},"end":{"line":279,"column":73}},{"start":{"line":279,"column":77},"end":{"line":279,"column":85}}],"line":279},"21":{"loc":{"start":{"line":280,"column":22},"end":{"line":280,"column":59}},"type":"binary-expr","locations":[{"start":{"line":280,"column":22},"end":{"line":280,"column":29}},{"start":{"line":280,"column":33},"end":{"line":280,"column":59}}],"line":280},"22":{"loc":{"start":{"line":307,"column":24},"end":{"line":307,"column":49}},"type":"binary-expr","locations":[{"start":{"line":307,"column":24},"end":{"line":307,"column":39}},{"start":{"line":307,"column":43},"end":{"line":307,"column":49}}],"line":307},"23":{"loc":{"start":{"line":308,"column":24},"end":{"line":308,"column":54}},"type":"binary-expr","locations":[{"start":{"line":308,"column":24},"end":{"line":308,"column":44}},{"start":{"line":308,"column":48},"end":{"line":308,"column":54}}],"line":308},"24":{"loc":{"start":{"line":309,"column":24},"end":{"line":309,"column":56}},"type":"binary-expr","locations":[{"start":{"line":309,"column":24},"end":{"line":309,"column":46}},{"start":{"line":309,"column":50},"end":{"line":309,"column":56}}],"line":309},"25":{"loc":{"start":{"line":310,"column":24},"end":{"line":310,"column":53}},"type":"binary-expr","locations":[{"start":{"line":310,"column":24},"end":{"line":310,"column":43}},{"start":{"line":310,"column":47},"end":{"line":310,"column":53}}],"line":310},"26":{"loc":{"start":{"line":311,"column":24},"end":{"line":311,"column":53}},"type":"binary-expr","locations":[{"start":{"line":311,"column":24},"end":{"line":311,"column":43}},{"start":{"line":311,"column":47},"end":{"line":311,"column":53}}],"line":311},"27":{"loc":{"start":{"line":312,"column":24},"end":{"line":312,"column":54}},"type":"binary-expr","locations":[{"start":{"line":312,"column":24},"end":{"line":312,"column":43}},{"start":{"line":312,"column":47},"end":{"line":312,"column":54}}],"line":312},"28":{"loc":{"start":{"line":316,"column":12},"end":{"line":316,"column":118}},"type":"binary-expr","locations":[{"start":{"line":316,"column":12},"end":{"line":316,"column":26}},{"start":{"line":316,"column":30},"end":{"line":316,"column":49}},{"start":{"line":316,"column":53},"end":{"line":316,"column":74}},{"start":{"line":316,"column":78},"end":{"line":316,"column":96}},{"start":{"line":316,"column":100},"end":{"line":316,"column":118}}],"line":316},"29":{"loc":{"start":{"line":353,"column":18},"end":{"line":356,"column":19}},"type":"if","locations":[{"start":{"line":353,"column":18},"end":{"line":356,"column":19}},{"start":{"line":353,"column":18},"end":{"line":356,"column":19}}],"line":353},"30":{"loc":{"start":{"line":353,"column":22},"end":{"line":353,"column":104}},"type":"binary-expr","locations":[{"start":{"line":353,"column":22},"end":{"line":353,"column":25}},{"start":{"line":353,"column":29},"end":{"line":353,"column":40}},{"start":{"line":353,"column":44},"end":{"line":353,"column":104}}],"line":353},"31":{"loc":{"start":{"line":415,"column":6},"end":{"line":417,"column":7}},"type":"if","locations":[{"start":{"line":415,"column":6},"end":{"line":417,"column":7}},{"start":{"line":415,"column":6},"end":{"line":417,"column":7}}],"line":415}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":2148,"7":2856,"8":5064,"9":2856,"10":2856,"11":2148,"12":2148,"13":2148,"14":2148,"15":2148,"16":2148,"17":37234,"18":81162,"19":321720,"20":32928,"21":35796,"22":101994,"23":80868,"24":56916,"25":41796,"26":77844,"27":182016,"28":35076,"29":28632,"30":1,"31":2142,"32":2142,"33":2142,"34":2142,"35":2142,"36":2142,"37":2142,"38":2142,"39":2856,"40":2142,"41":2142,"42":2142,"43":2142,"44":2142,"45":2142,"46":2142,"47":2142,"48":2142,"49":2856,"50":2142,"51":2856,"52":2142,"53":0,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":27,"63":27,"64":0,"65":27,"66":27,"67":156,"68":27,"69":156,"70":39,"71":117,"72":27,"73":126,"74":27,"75":27,"76":27,"77":0,"78":27,"79":0,"80":0,"81":0,"82":0,"83":1,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":1,"100":14,"101":14,"102":14,"103":0,"104":14,"105":8,"106":6,"107":6,"108":6,"109":6,"110":6,"111":0,"112":0,"113":0,"114":0,"115":6,"116":6,"117":0,"118":0,"119":6,"120":6,"121":6,"122":6,"123":0,"124":6,"125":8,"126":0,"127":8,"128":8,"129":1,"130":1,"131":9,"132":9,"133":9,"134":0,"135":9,"136":9,"137":4,"138":5,"139":5,"140":5,"141":5,"142":0,"143":5,"144":4,"145":0,"146":4,"147":4,"148":1},"f":{"0":2148,"1":2856,"2":5064,"3":2856,"4":2856,"5":2148,"6":37234,"7":81162,"8":321720,"9":32928,"10":35796,"11":101994,"12":80868,"13":56916,"14":41796,"15":77844,"16":182016,"17":35076,"18":28632,"19":2142,"20":2142,"21":2142,"22":2142,"23":2142,"24":2142,"25":2142,"26":2142,"27":2856,"28":2142,"29":2142,"30":2142,"31":2142,"32":2142,"33":2142,"34":2142,"35":2142,"36":2142,"37":2856,"38":2142,"39":2856,"40":2142,"41":0,"42":27,"43":27,"44":0,"45":27,"46":156,"47":156,"48":39,"49":117,"50":27,"51":126,"52":27,"53":27,"54":27,"55":0,"56":27,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":14,"77":14,"78":14,"79":0,"80":14,"81":8,"82":6,"83":6,"84":6,"85":6,"86":6,"87":0,"88":0,"89":6,"90":6,"91":0,"92":0,"93":6,"94":6,"95":6,"96":6,"97":0,"98":6,"99":8,"100":0,"101":8,"102":8,"103":9,"104":9,"105":9,"106":0,"107":9,"108":9,"109":5,"110":5,"111":5,"112":0,"113":5,"114":4,"115":0,"116":4,"117":4},"b":{"0":[2148,2148,2148,2148,2148,1518,1518,2148,363,363,2148,2148,2148,618,2148,618,2148,2148,2148,2148,2148,2148,630,2148,1518,630,2148,2148,888,2148,1260,2148,1518,1386,1386,2148,132,2148,1518,630,2148,2148,2148,2148,2148,2148,2148,2148,2148,2148,2148,2148],"1":[2856,2856],"2":[1260,420],"3":[2148,630],"4":[2148,1785],"5":[2148,1530],"6":[9660,23268],"7":[2016,21252],"8":[77844,54744],"9":[35076,20580,6300],"10":[2142,1512],"11":[2142,357],"12":[2856,2856],"13":[2142,612],"14":[2142,612],"15":[2142,630],"16":[2142,1512],"17":[2142,1785],"18":[2142,357],"19":[2142,612],"20":[27,15,15],"21":[27,15],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0,0,0,0],"29":[0,0],"30":[0,0,0],"31":[4,5]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"c4a3cefe1e1ece7589b65c18ec1c7660f3a7ff5c","contentHash":"21225dca6c65b423e52bc8e3f998aeb8_11.7.1"},"/Users/jand/Scratchpad/ppwcode/node-ppwcode-gitInfo/q2.js":{"path":"/Users/jand/Scratchpad/ppwcode/node-ppwcode-gitInfo/q2.js","statementMap":{"0":{"start":{"line":17,"column":10},"end":{"line":17,"column":22}},"1":{"start":{"line":27,"column":2},"end":{"line":29,"column":3}},"2":{"start":{"line":28,"column":4},"end":{"line":28,"column":19}},"3":{"start":{"line":30,"column":2},"end":{"line":37,"column":6}},"4":{"start":{"line":30,"column":50},"end":{"line":30,"column":98}},"5":{"start":{"line":30,"column":84},"end":{"line":30,"column":96}},"6":{"start":{"line":31,"column":23},"end":{"line":37,"column":5}},"7":{"start":{"line":33,"column":8},"end":{"line":33,"column":38}},"8":{"start":{"line":34,"column":8},"end":{"line":34,"column":18}},"9":{"start":{"line":41,"column":0},"end":{"line":41,"column":17}},"10":{"start":{"line":43,"column":0},"end":{"line":43,"column":18}}},"fnMap":{"0":{"name":"object","decl":{"start":{"line":26,"column":9},"end":{"line":26,"column":15}},"loc":{"start":{"line":26,"column":27},"end":{"line":38,"column":1}},"line":26},"1":{"name":"(anonymous_1)","decl":{"start":{"line":30,"column":41},"end":{"line":30,"column":42}},"loc":{"start":{"line":30,"column":50},"end":{"line":30,"column":98}},"line":30},"2":{"name":"(anonymous_2)","decl":{"start":{"line":30,"column":72},"end":{"line":30,"column":73}},"loc":{"start":{"line":30,"column":84},"end":{"line":30,"column":96}},"line":30},"3":{"name":"(anonymous_3)","decl":{"start":{"line":31,"column":10},"end":{"line":31,"column":11}},"loc":{"start":{"line":31,"column":23},"end":{"line":37,"column":5}},"line":31},"4":{"name":"(anonymous_4)","decl":{"start":{"line":32,"column":6},"end":{"line":32,"column":7}},"loc":{"start":{"line":32,"column":23},"end":{"line":35,"column":7}},"line":32}},"branchMap":{"0":{"loc":{"start":{"line":27,"column":2},"end":{"line":29,"column":3}},"type":"if","locations":[{"start":{"line":27,"column":2},"end":{"line":29,"column":3}},{"start":{"line":27,"column":2},"end":{"line":29,"column":3}}],"line":27}},"s":{"0":1,"1":12,"2":0,"3":12,"4":36,"5":36,"6":12,"7":36,"8":36,"9":1,"10":1},"f":{"0":12,"1":36,"2":36,"3":12,"4":36},"b":{"0":[0,12]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"f64655085bf49b2e0924b1225bfa3f9bfa91801f","contentHash":"0cb094bf82783418b5cbb40232bc6890_11.7.1"},"/Users/jand/Scratchpad/ppwcode/node-ppwcode-gitInfo/tagGitRepo.js":{"path":"/Users/jand/Scratchpad/ppwcode/node-ppwcode-gitInfo/tagGitRepo.js","statementMap":{"0":{"start":{"line":17,"column":17},"end":{"line":17,"column":48}},"1":{"start":{"line":18,"column":12},"end":{"line":18,"column":30}},"2":{"start":{"line":19,"column":16},"end":{"line":19,"column":36}},"3":{"start":{"line":20,"column":10},"end":{"line":20,"column":25}},"4":{"start":{"line":31,"column":19},"end":{"line":75,"column":2}},"5":{"start":{"line":33,"column":23},"end":{"line":33,"column":47}},"6":{"start":{"line":34,"column":23},"end":{"line":34,"column":29}},"7":{"start":{"line":35,"column":23},"end":{"line":35,"column":50}},"8":{"start":{"line":36,"column":23},"end":{"line":36,"column":32}},"9":{"start":{"line":39,"column":31},"end":{"line":39,"column":55}},"10":{"start":{"line":41,"column":20},"end":{"line":41,"column":25}},"11":{"start":{"line":43,"column":18},"end":{"line":43,"column":39}},"12":{"start":{"line":45,"column":2},"end":{"line":74,"column":7}},"13":{"start":{"line":48,"column":6},"end":{"line":48,"column":48}},"14":{"start":{"line":51,"column":6},"end":{"line":63,"column":10}},"15":{"start":{"line":53,"column":22},"end":{"line":60,"column":9}},"16":{"start":{"line":62,"column":10},"end":{"line":62,"column":58}},"17":{"start":{"line":67,"column":15},"end":{"line":67,"column":35}},"18":{"start":{"line":68,"column":15},"end":{"line":68,"column":107}},"19":{"start":{"line":70,"column":19},"end":{"line":70,"column":24}},"20":{"start":{"line":71,"column":34},"end":{"line":71,"column":47}},"21":{"start":{"line":73,"column":6},"end":{"line":73,"column":15}},"22":{"start":{"line":77,"column":0},"end":{"line":77,"column":56}},"23":{"start":{"line":79,"column":0},"end":{"line":79,"column":27}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":33,"column":4},"end":{"line":33,"column":5}},"loc":{"start":{"line":33,"column":23},"end":{"line":33,"column":47}},"line":33},"1":{"name":"(anonymous_1)","decl":{"start":{"line":34,"column":4},"end":{"line":34,"column":5}},"loc":{"start":{"line":34,"column":23},"end":{"line":34,"column":29}},"line":34},"2":{"name":"(anonymous_2)","decl":{"start":{"line":35,"column":4},"end":{"line":35,"column":5}},"loc":{"start":{"line":35,"column":23},"end":{"line":35,"column":50}},"line":35},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":4},"end":{"line":36,"column":5}},"loc":{"start":{"line":36,"column":23},"end":{"line":36,"column":32}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":39,"column":4},"end":{"line":39,"column":5}},"loc":{"start":{"line":39,"column":31},"end":{"line":39,"column":55}},"line":39},"5":{"name":"(anonymous_5)","decl":{"start":{"line":41,"column":14},"end":{"line":41,"column":15}},"loc":{"start":{"line":41,"column":20},"end":{"line":41,"column":25}},"line":41},"6":{"name":"tagGit","decl":{"start":{"line":42,"column":27},"end":{"line":42,"column":33}},"loc":{"start":{"line":42,"column":50},"end":{"line":75,"column":1}},"line":42},"7":{"name":"(anonymous_7)","decl":{"start":{"line":47,"column":11},"end":{"line":47,"column":12}},"loc":{"start":{"line":47,"column":21},"end":{"line":49,"column":5}},"line":47},"8":{"name":"(anonymous_8)","decl":{"start":{"line":50,"column":10},"end":{"line":50,"column":11}},"loc":{"start":{"line":51,"column":6},"end":{"line":63,"column":10}},"line":51},"9":{"name":"(anonymous_9)","decl":{"start":{"line":53,"column":14},"end":{"line":53,"column":15}},"loc":{"start":{"line":53,"column":22},"end":{"line":60,"column":9}},"line":53},"10":{"name":"(anonymous_10)","decl":{"start":{"line":61,"column":15},"end":{"line":61,"column":16}},"loc":{"start":{"line":61,"column":25},"end":{"line":63,"column":9}},"line":61},"11":{"name":"(anonymous_11)","decl":{"start":{"line":67,"column":8},"end":{"line":67,"column":9}},"loc":{"start":{"line":67,"column":15},"end":{"line":67,"column":35}},"line":67},"12":{"name":"(anonymous_12)","decl":{"start":{"line":68,"column":8},"end":{"line":68,"column":9}},"loc":{"start":{"line":68,"column":15},"end":{"line":68,"column":107}},"line":68},"13":{"name":"(anonymous_13)","decl":{"start":{"line":70,"column":13},"end":{"line":70,"column":14}},"loc":{"start":{"line":70,"column":19},"end":{"line":70,"column":24}},"line":70},"14":{"name":"(anonymous_14)","decl":{"start":{"line":71,"column":18},"end":{"line":71,"column":19}},"loc":{"start":{"line":71,"column":34},"end":{"line":71,"column":47}},"line":71},"15":{"name":"(anonymous_15)","decl":{"start":{"line":72,"column":22},"end":{"line":72,"column":23}},"loc":{"start":{"line":72,"column":37},"end":{"line":74,"column":5}},"line":72}},"branchMap":{"0":{"loc":{"start":{"line":68,"column":15},"end":{"line":68,"column":107}},"type":"binary-expr","locations":[{"start":{"line":68,"column":15},"end":{"line":68,"column":56}},{"start":{"line":68,"column":60},"end":{"line":68,"column":107}}],"line":68}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":2,"6":2,"7":2,"8":2,"9":2,"10":0,"11":2,"12":2,"13":1,"14":1,"15":1,"16":0,"17":1,"18":1,"19":0,"20":1,"21":1,"22":1,"23":1},"f":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":0,"6":2,"7":1,"8":1,"9":1,"10":0,"11":1,"12":1,"13":0,"14":1,"15":1},"b":{"0":[1,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"726feb15065aa070c2818e8d9d882e48b9853bb7","contentHash":"c0c0d342fda5f863357c769128ea68c2_11.7.1"}} |
| >npm version [major | minor | patch] | ||
| >npm adduser --scope-@ppwcode | ||
| Username: jandppw | ||
| Password: | ||
| Email: (this IS public) Jan_Dockx@peopleware.be | ||
| Logged in as jandppw to scope @ppwcode on https://registry.npmjs.org/. | ||
| >npm publish --access public | ||
| + @ppwcode/node-gitinfo@2.0.1 | ||
| >git push |
-43
| /** | ||
| * Copyright 2017 PeopleWare n.v. | ||
| * | ||
| * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| * you may not use this file except in compliance with the License. | ||
| * You may obtain a copy of the License at | ||
| * | ||
| * http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software | ||
| * distributed under the License is distributed on an "AS IS" BASIS, | ||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| * See the License for the specific language governing permissions and | ||
| * limitations under the License. | ||
| */ | ||
| const Q = require('q') | ||
| /** | ||
| * Turns an object of promises into a promise for an object. If any of | ||
| * the promises gets rejected, the whole object is rejected immediately. | ||
| * @param {object} promises - an object (or promise for an object) of properties with values (or | ||
| * promises for values) | ||
| * @return {object|Promise<object>} a promise for an array of the corresponding values | ||
| */ | ||
| function object (promises) { | ||
| if (!promises) { | ||
| return promises | ||
| } | ||
| return Q.all(Object.keys(promises).map((key) => Q.when(promises[key], (value) => ({key, value})))) | ||
| .then((kvPairs) => kvPairs.reduce( | ||
| (acc, kvPair) => { | ||
| acc[kvPair.key] = kvPair.value | ||
| return acc | ||
| }, | ||
| {} | ||
| )) | ||
| } | ||
| // monkey patch object on q | ||
| Q.object = object | ||
| module.exports = Q |
| /** | ||
| * Copyright 2017 PeopleWare n.v. | ||
| * | ||
| * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| * you may not use this file except in compliance with the License. | ||
| * You may obtain a copy of the License at | ||
| * | ||
| * http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software | ||
| * distributed under the License is distributed on an "AS IS" BASIS, | ||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| * See the License for the specific language governing permissions and | ||
| * limitations under the License. | ||
| */ | ||
| /** | ||
| * Quick hack to test conditions. | ||
| */ | ||
| module.exports = { | ||
| validateConditions: function (conditions, args) { | ||
| conditions.forEach(condition => { | ||
| let conditionResult | ||
| try { | ||
| conditionResult = condition.apply(undefined, args) | ||
| } catch (err) { | ||
| throw new Error('condition ' + condition + ' has an error: ' + err) | ||
| } | ||
| if (!conditionResult) { | ||
| throw new Error('condition violation for: ' + condition + ' (' + JSON.stringify(args) + ')') | ||
| } | ||
| }) | ||
| }, | ||
| validateInvariants: function (subject) { | ||
| if (!subject.invariants) { | ||
| throw new Error('invariants do not hold') | ||
| } | ||
| } | ||
| } |
| /** | ||
| * Copyright 2017 PeopleWare n.v. | ||
| * | ||
| * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| * you may not use this file except in compliance with the License. | ||
| * You may obtain a copy of the License at | ||
| * | ||
| * http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software | ||
| * distributed under the License is distributed on an "AS IS" BASIS, | ||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| * See the License for the specific language governing permissions and | ||
| * limitations under the License. | ||
| */ | ||
| /* global describe, it */ | ||
| const GitInfo = require('../GitInfo') | ||
| const util = require('./_util') | ||
| const path = require('path') | ||
| const fs = require('fs') | ||
| const Q = require('../q2') | ||
| const ConditionError = require('@toryt/contracts-iii/src/III/ConditionError') | ||
| const Git = require('nodegit') | ||
| const thisGitRepoRoot = path.dirname(path.dirname(__dirname)) | ||
| // noinspection SpellCheckingInspection | ||
| const someBranchNames = [ | ||
| 'master', | ||
| 'nested/branch/name', | ||
| 'dev', | ||
| 'development', | ||
| 'personal/jack/experiment/subject-0', | ||
| 'validate/the/vëry/long/𝕭ranch/ℕame/⩠', | ||
| "validate 1/some very∆∆ weird name-That does'nt_probably \\%2f _ _ __-- exists" | ||
| ] | ||
| const preciousBranchNames = [ | ||
| false, | ||
| 0, | ||
| '', | ||
| null, | ||
| undefined, | ||
| 'production', | ||
| 'test', | ||
| 'staging/4', | ||
| 'stage/4', | ||
| 'staging-pre-release' | ||
| ] | ||
| // noinspection SpellCheckingInspection | ||
| const aSha = 'b557eb5aabebf72f84ae9750be2ad1b7b6b43a4b' | ||
| // noinspection SpellCheckingInspection | ||
| const someShas = [aSha, '3268d7bc82d16d840f71ddfb5c8f5e42dea16f3b', null, undefined, '', 0, false] | ||
| const someOriginUrls = [0, false, '', null, undefined, 'git@GitHub:peopleware/terraform-ppwcode-modules.git'] | ||
| const someChanges = [ | ||
| new Set(), | ||
| new Set(['a/path/to/a/file']), | ||
| new Set(['a/path/to/a/file', 'a/path/to/another/file', 'a/path/to/yet/another/file']) | ||
| ] | ||
| const somePaths = [ | ||
| '/', | ||
| __dirname, | ||
| __filename, | ||
| process.cwd(), | ||
| require.main.filename, | ||
| path.dirname(require.main.filename), | ||
| thisGitRepoRoot, | ||
| path.dirname(thisGitRepoRoot), | ||
| 'this is not a path' | ||
| ] | ||
| describe('GitInfo', function () { | ||
| describe('constructor', function () { | ||
| const path = thisGitRepoRoot | ||
| someBranchNames | ||
| .map(name => { return {name: name, precious: false} }) | ||
| .concat(preciousBranchNames.map(name => { return {name: name, precious: true} })) | ||
| .forEach(branch => { | ||
| const sha = aSha | ||
| someOriginUrls.forEach(originUrl => { | ||
| someChanges.forEach(changes => { | ||
| someShas.forEach(originBranchSha => { | ||
| it('should return a GitInfo with the expected properties for ' + | ||
| 'path === "' + path + '", ' + | ||
| 'sha === "' + sha + '", ' + | ||
| 'branch === "' + branch.name + '", ' + | ||
| 'originUrl === "' + originUrl + '", ' + | ||
| 'changes: ' + changes.size + '", ' + | ||
| 'originBranchSha: ' + originBranchSha, | ||
| function () { | ||
| util.validateConditions( | ||
| GitInfo.constructorContract.pre, | ||
| [path, sha, branch.name, originUrl, changes, originBranchSha] | ||
| ) | ||
| const result = new GitInfo(path, sha, branch.name, originUrl, changes, originBranchSha) | ||
| console.log('branch %s precious? %s', result.branch, result.isPrecious) | ||
| if (result.isPrecious !== branch.precious) { | ||
| throw new Error('Expected precious to be ' + branch.precious + ' for ' + branch.name + ", but wasn't") | ||
| } | ||
| util.validateConditions( | ||
| GitInfo.constructorContract.post, | ||
| [path, sha, branch.name, originUrl, changes, originBranchSha, result] | ||
| ) | ||
| util.validateInvariants(result) | ||
| console.log('%j', result) | ||
| }) | ||
| }) | ||
| }) | ||
| }) | ||
| }) | ||
| }) | ||
| function shouldNotExist (dirName) { | ||
| throw Error('"' + dirName + '" is a git directory, and should not be') | ||
| } | ||
| describe('highestGitDirPath', function () { | ||
| somePaths.forEach(function (dirPath) { | ||
| it('should return a promise for "' + dirPath + '"', function () { | ||
| const result = GitInfo.highestGitDirPath(dirPath) | ||
| return result.then(highestPath => { | ||
| console.log('highest git dir path for "%s": "%s"', dirPath, highestPath) | ||
| if (!highestPath) { | ||
| return true | ||
| } | ||
| const testPromises = [ | ||
| Q.nfcall(fs.access, path.format({dir: highestPath, name: '.git'}), 'rw') | ||
| ] | ||
| let intermediate = dirPath | ||
| while (intermediate.startsWith(highestPath) && intermediate !== highestPath) { | ||
| const p = path.format({dir: intermediate, name: '.git'}) | ||
| testPromises.push( | ||
| Q.nfcall(fs.access, p, 'rw') | ||
| .then( | ||
| shouldNotExist.bind(undefined, p), | ||
| () => true // errors are good, and what we expect | ||
| ) | ||
| ) | ||
| intermediate = path.dirname(intermediate) | ||
| } | ||
| return Q.all(testPromises) | ||
| }) | ||
| }) | ||
| }) | ||
| }) | ||
| describe('isNotClean', function () { | ||
| it('should behave for all files in this repo', function () { | ||
| // noinspection JSUnresolvedVariable,JSCheckFunctionSignatures | ||
| return Q.all( | ||
| Git | ||
| .Repository | ||
| .open(path.dirname(path.dirname(path.resolve(__filename)))) | ||
| .then(repository => repository.getStatus()) | ||
| .then(statuses => statuses.map(status => GitInfo.isNotClean(status))) | ||
| ) | ||
| }) | ||
| }) | ||
| describe('create', function () { | ||
| somePaths.forEach(function (dirPath) { | ||
| it('should return a promise for "' + dirPath + '"', function () { | ||
| const result = GitInfo.create(dirPath) | ||
| return result.then( | ||
| gitInfo => { | ||
| util.validateInvariants(gitInfo) | ||
| console.log('create success for %s: %s', dirPath, JSON.stringify(gitInfo)) | ||
| return true | ||
| }, | ||
| err => { | ||
| if (err instanceof ConditionError || err instanceof ReferenceError) { | ||
| throw err | ||
| } | ||
| console.log('create failed for %s: %s', dirPath, err) | ||
| return true | ||
| } | ||
| ) | ||
| }) | ||
| }) | ||
| }) | ||
| describe('createForHighestGitDir', function () { | ||
| somePaths.forEach(function (dirPath) { | ||
| it('should return a promise for "' + dirPath + '"', function () { | ||
| return Q.all([ | ||
| GitInfo.createForHighestGitDir(dirPath).then( | ||
| gitInfo => { | ||
| util.validateInvariants(gitInfo) | ||
| console.log('create success for %s: %s', dirPath, JSON.stringify(gitInfo)) | ||
| return gitInfo | ||
| }, | ||
| err => { | ||
| if (err instanceof ConditionError || err instanceof ReferenceError) { | ||
| throw err | ||
| } | ||
| console.log('create failed for %s: %s', dirPath, err) | ||
| return false | ||
| } | ||
| ), | ||
| GitInfo.highestGitDirPath(dirPath) | ||
| ]) | ||
| .spread((gitInfo, gitDirPath) => { | ||
| if (gitInfo && gitInfo.path !== gitDirPath) { | ||
| throw new Error('path is not what was expected') | ||
| } | ||
| return gitInfo | ||
| }) | ||
| }) | ||
| }) | ||
| }) | ||
| }) |
| /** | ||
| * Copyright 2017 PeopleWare n.v. | ||
| * | ||
| * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| * you may not use this file except in compliance with the License. | ||
| * You may obtain a copy of the License at | ||
| * | ||
| * http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software | ||
| * distributed under the License is distributed on an "AS IS" BASIS, | ||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| * See the License for the specific language governing permissions and | ||
| * limitations under the License. | ||
| */ | ||
| /* global describe, it */ | ||
| const Git = require('nodegit') | ||
| const path = require('path') | ||
| const tagGitRepo = require('../tagGitRepo') | ||
| const GitInfo = require('../GitInfo') | ||
| const someRepoPaths = [path.dirname(path.dirname(__filename)), '/repo/does/not/exist'] | ||
| const aTagName = 'automated_test/tagGitRepo/' + Date.now() | ||
| describe('tagGitRepo', function () { | ||
| describe('tagGitRepo', function () { | ||
| someRepoPaths.forEach(function (path) { | ||
| const tagName = aTagName | ||
| it('creates the expected tag, or fails expected, for "' + path + '" and tag "' + tagName, function () { | ||
| // noinspection JSUnresolvedVariable,JSUnresolvedFunction | ||
| return tagGitRepo(path, tagName) | ||
| .then( | ||
| () => Git.Repository | ||
| .open(path) | ||
| .then(repository => | ||
| Git.Tag | ||
| .list(repository) | ||
| .then(tags => { | ||
| if (tags.indexOf(tagName) < 0) { | ||
| throw new Error('tag was not created as expected') | ||
| } | ||
| // noinspection JSUnresolvedVariable | ||
| return Git.Tag.delete(repository, tagName) | ||
| }) | ||
| ), | ||
| (err) => { | ||
| console.log(err) | ||
| if (err instanceof Error && | ||
| (err.message === GitInfo.noGitDirectoryMsg || err.message === tagGitRepo.couldNotCreateTagMsg)) { | ||
| return true | ||
| } | ||
| throw err | ||
| } | ||
| ) | ||
| }) | ||
| }) | ||
| }) | ||
| }) |
Sorry, the diff of this file is too big to display
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
106
65.63%39381
-83.44%6
20%6
50%8
-46.67%585
-36.96%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
Updated
Updated