Skip to content

Instantly share code, notes, and snippets.

@WoodyWoodsta
Last active September 27, 2016 09:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save WoodyWoodsta/f120fb38fcb43b0d3996 to your computer and use it in GitHub Desktop.
Save WoodyWoodsta/f120fb38fcb43b0d3996 to your computer and use it in GitHub Desktop.
Elementary OS setup stuff
{
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/src/__tests__/index.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [
"interopRequireWildcard"
],
"marked": [],
"modules": {
"imports": [
{
"source": "chai",
"imported": [
"expect"
],
"specifiers": [
{
"kind": "named",
"imported": "expect",
"local": "expect"
}
]
},
{
"source": "mocha",
"imported": [
"describe",
"it"
],
"specifiers": [
{
"kind": "named",
"imported": "describe",
"local": "describe"
},
{
"kind": "named",
"imported": "it",
"local": "it"
}
]
},
{
"source": "..",
"imported": [
"*"
],
"specifiers": [
{
"kind": "namespace",
"local": "vEngine"
}
]
}
],
"exports": {
"exported": [],
"specifiers": []
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/__tests__/index.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/__tests__/index.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "index.es6",
"sourceFileName": "index.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "index"
},
"ignored": false,
"code": "'use strict';\n\nvar _chai = require('chai');\n\nvar _mocha = require('mocha');\n\nvar _ = require('..');\n\nvar vEngine = babelHelpers.interopRequireWildcard(_);\n\n\n(0, _mocha.describe)('vEngine API', () => {\n (0, _mocha.it)('should expose the validators', () => {\n (0, _chai.expect)(vEngine.invoiceProcessValidator).to.exist;\n });\n}); /* eslint max-len:0 */\n/* eslint no-unused-expressions:0 */\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmVzNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBOztBQUNBOztBQUVBOztJQUFZLE87OztBQUVaLHFCQUFTLGFBQVQsRUFBd0IsTUFBTTtBQUM1QixpQkFBRyw4QkFBSCxFQUFtQyxNQUFNO0FBQ3ZDLHNCQUFPLFFBQVEsdUJBQWYsRUFBd0MsRUFBeEMsQ0FBMkMsS0FBM0M7QUFDRCxHQUZEO0FBR0QsQ0FKRCxFIiwiZmlsZSI6ImluZGV4LmVzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBtYXgtbGVuOjAgKi9cbi8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6MCAqL1xuaW1wb3J0IHsgZXhwZWN0IH0gZnJvbSAnY2hhaSc7XG5pbXBvcnQgeyBkZXNjcmliZSwgaXQgfSBmcm9tICdtb2NoYSc7XG5cbmltcG9ydCAqIGFzIHZFbmdpbmUgZnJvbSAnLi4nO1xuXG5kZXNjcmliZSgndkVuZ2luZSBBUEknLCAoKSA9PiB7XG4gIGl0KCdzaG91bGQgZXhwb3NlIHRoZSB2YWxpZGF0b3JzJywgKCkgPT4ge1xuICAgIGV4cGVjdCh2RW5naW5lLmludm9pY2VQcm9jZXNzVmFsaWRhdG9yKS50by5leGlzdDtcbiAgfSk7XG59KTtcbiJdfQ==",
"ast": null,
"map": {
"version": 3,
"sources": [
"index.es6"
],
"names": [],
"mappings": ";;AAEA;;AACA;;AAEA;;IAAY,O;;;AAEZ,qBAAS,aAAT,EAAwB,MAAM;AAC5B,iBAAG,8BAAH,EAAmC,MAAM;AACvC,sBAAO,QAAQ,uBAAf,EAAwC,EAAxC,CAA2C,KAA3C;AACD,GAFD;AAGD,CAJD,E",
"file": "index.es6",
"sourcesContent": [
"/* eslint max-len:0 */\n/* eslint no-unused-expressions:0 */\nimport { expect } from 'chai';\nimport { describe, it } from 'mocha';\n\nimport * as vEngine from '..';\n\ndescribe('vEngine API', () => {\n it('should expose the validators', () => {\n expect(vEngine.invoiceProcessValidator).to.exist;\n });\n});\n"
]
},
"mtime": 1467102978616
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/src/index.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [
"interopRequireDefault",
"interopRequireWildcard"
],
"marked": [],
"modules": {
"imports": [
{
"source": "debug",
"imported": [
"default"
],
"specifiers": [
{
"kind": "named",
"imported": "default",
"local": "debug"
}
]
},
{
"source": "nools",
"imported": [
"default"
],
"specifiers": [
{
"kind": "named",
"imported": "default",
"local": "nools"
}
]
}
],
"exports": {
"exported": [
"invoiceProcessValidator"
],
"specifiers": [
{
"kind": "external-namespace",
"exported": "invoiceProcessValidator",
"source": "./validators/invoice-process-test-validator"
}
]
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/index.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/index.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "index.es6",
"sourceFileName": "index.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "index"
},
"ignored": false,
"code": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.invoiceProcessValidator = undefined;\n\nvar _debug = require('debug');\n\nvar _debug2 = babelHelpers.interopRequireDefault(_debug);\n\nvar _nools = require('nools');\n\nvar _nools2 = babelHelpers.interopRequireDefault(_nools);\n\nvar _invoiceProcessTestValidator = require('./validators/invoice-process-test-validator');\n\nvar _invoiceProcessValidator = babelHelpers.interopRequireWildcard(_invoiceProcessTestValidator);\n\nexports.invoiceProcessValidator = _invoiceProcessValidator; /* index.es6 */\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmVzNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7UUFFWSx1QiIsImZpbGUiOiJpbmRleC5lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpbmRleC5lczYgKi9cbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgbm9vbHMgZnJvbSAnbm9vbHMnO1xuXG5leHBvcnQgKiBhcyBpbnZvaWNlUHJvY2Vzc1ZhbGlkYXRvciBmcm9tICcuL3ZhbGlkYXRvcnMvaW52b2ljZS1wcm9jZXNzLXRlc3QtdmFsaWRhdG9yJztcbiJdfQ==",
"ast": null,
"map": {
"version": 3,
"sources": [
"index.es6"
],
"names": [],
"mappings": ";;;;;;;AACA;;;;AACA;;;;;;;;QAEY,uB",
"file": "index.es6",
"sourcesContent": [
"/* index.es6 */\nimport debug from 'debug';\nimport nools from 'nools';\n\nexport * as invoiceProcessValidator from './validators/invoice-process-test-validator';\n"
]
},
"mtime": 1467107162806
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/examples/simple-workitem-model.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [
"interopRequireDefault"
],
"marked": [],
"modules": {
"imports": [
{
"source": "./compiled",
"imported": [
"default"
],
"specifiers": [
{
"kind": "named",
"imported": "default",
"local": "foo"
}
]
}
],
"exports": {
"exported": [],
"specifiers": []
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/examples/simple-workitem-model.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/examples/simple-workitem-model.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "simple-workitem-model.es6",
"sourceFileName": "simple-workitem-model.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "simple-workitem-model"
},
"ignored": false,
"code": "'use strict';\n\nvar _compiled = require('./compiled');\n\nvar _compiled2 = babelHelpers.interopRequireDefault(_compiled);\n\n// import { ValidationEngine } from '..';\n\nconsole.log(_compiled2.default); /* simple-workitem-model.es6 */\n// Typical Validation Demonstration\n// import nools from 'nools';\n\nconst flow = (0, _compiled2.default)();\nconst session = flow.getSession();\n\nconsole.log(session);\n\n// const engine = new ValidationEngine('rules.nools');\n//\n// const workitemModel1 = new engine.models.WorkitemModel({\n// invoiceNumber: 13258253,\n// invoiceDate: '2016-06-10',\n// // invoiceDate: new Date('2016-06-10'),\n// basNumber: '012345678',\n// }, {\n// 'workitem.invoiceNumber': new engine.outcomes.ValidationOutcome(),\n// 'workitem.invoiceDate': new engine.outcomes.ValidationOutcome(),\n// 'workitem.basNumber': new engine.outcomes.ValidationOutcome(),\n// });\n//\n// const start = Date.now();\n// engine.validate([workitemModel1])\n// .then(() => {\n// console.log('\\nValidation Complete!\\n');\n// console.log('Time Elasped:', Date.now() - start, '\\n');\n// console.log('Outcomes:\\n');\n// console.log(workitemModel1.validation);\n// });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNpbXBsZS13b3JraXRlbS1tb2RlbC5lczYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQTs7Ozs7O0FBR0EsUUFBUSxHQUFSLHFCOzs7O0FBQ0EsTUFBTSxPQUFPLHlCQUFiO0FBQ0EsTUFBTSxVQUFVLEtBQUssVUFBTCxFQUFoQjs7QUFFQSxRQUFRLEdBQVIsQ0FBWSxPQUFaIiwiZmlsZSI6InNpbXBsZS13b3JraXRlbS1tb2RlbC5lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBzaW1wbGUtd29ya2l0ZW0tbW9kZWwuZXM2ICovXG4vLyBUeXBpY2FsIFZhbGlkYXRpb24gRGVtb25zdHJhdGlvblxuLy8gaW1wb3J0IG5vb2xzIGZyb20gJ25vb2xzJztcbmltcG9ydCBmb28gZnJvbSAnLi9jb21waWxlZCc7XG4vLyBpbXBvcnQgeyBWYWxpZGF0aW9uRW5naW5lIH0gZnJvbSAnLi4nO1xuXG5jb25zb2xlLmxvZyhmb28pO1xuY29uc3QgZmxvdyA9IGZvbygpO1xuY29uc3Qgc2Vzc2lvbiA9IGZsb3cuZ2V0U2Vzc2lvbigpO1xuXG5jb25zb2xlLmxvZyhzZXNzaW9uKTtcblxuLy8gY29uc3QgZW5naW5lID0gbmV3IFZhbGlkYXRpb25FbmdpbmUoJ3J1bGVzLm5vb2xzJyk7XG4vL1xuLy8gY29uc3Qgd29ya2l0ZW1Nb2RlbDEgPSBuZXcgZW5naW5lLm1vZGVscy5Xb3JraXRlbU1vZGVsKHtcbi8vICAgaW52b2ljZU51bWJlcjogMTMyNTgyNTMsXG4vLyAgIGludm9pY2VEYXRlOiAnMjAxNi0wNi0xMCcsXG4vLyAgIC8vIGludm9pY2VEYXRlOiBuZXcgRGF0ZSgnMjAxNi0wNi0xMCcpLFxuLy8gICBiYXNOdW1iZXI6ICcwMTIzNDU2NzgnLFxuLy8gfSwge1xuLy8gICAnd29ya2l0ZW0uaW52b2ljZU51bWJlcic6IG5ldyBlbmdpbmUub3V0Y29tZXMuVmFsaWRhdGlvbk91dGNvbWUoKSxcbi8vICAgJ3dvcmtpdGVtLmludm9pY2VEYXRlJzogbmV3IGVuZ2luZS5vdXRjb21lcy5WYWxpZGF0aW9uT3V0Y29tZSgpLFxuLy8gICAnd29ya2l0ZW0uYmFzTnVtYmVyJzogbmV3IGVuZ2luZS5vdXRjb21lcy5WYWxpZGF0aW9uT3V0Y29tZSgpLFxuLy8gfSk7XG4vL1xuLy8gY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuLy8gZW5naW5lLnZhbGlkYXRlKFt3b3JraXRlbU1vZGVsMV0pXG4vLyAgIC50aGVuKCgpID0+IHtcbi8vICAgICBjb25zb2xlLmxvZygnXFxuVmFsaWRhdGlvbiBDb21wbGV0ZSFcXG4nKTtcbi8vICAgICBjb25zb2xlLmxvZygnVGltZSBFbGFzcGVkOicsIERhdGUubm93KCkgLSBzdGFydCwgJ1xcbicpO1xuLy8gICAgIGNvbnNvbGUubG9nKCdPdXRjb21lczpcXG4nKTtcbi8vICAgICBjb25zb2xlLmxvZyh3b3JraXRlbU1vZGVsMS52YWxpZGF0aW9uKTtcbi8vICAgfSk7XG4iXX0=",
"ast": null,
"map": {
"version": 3,
"sources": [
"simple-workitem-model.es6"
],
"names": [],
"mappings": ";;AAGA;;;;;;AAGA,QAAQ,GAAR,qB;;;;AACA,MAAM,OAAO,yBAAb;AACA,MAAM,UAAU,KAAK,UAAL,EAAhB;;AAEA,QAAQ,GAAR,CAAY,OAAZ",
"file": "simple-workitem-model.es6",
"sourcesContent": [
"/* simple-workitem-model.es6 */\n// Typical Validation Demonstration\n// import nools from 'nools';\nimport foo from './compiled';\n// import { ValidationEngine } from '..';\n\nconsole.log(foo);\nconst flow = foo();\nconst session = flow.getSession();\n\nconsole.log(session);\n\n// const engine = new ValidationEngine('rules.nools');\n//\n// const workitemModel1 = new engine.models.WorkitemModel({\n// invoiceNumber: 13258253,\n// invoiceDate: '2016-06-10',\n// // invoiceDate: new Date('2016-06-10'),\n// basNumber: '012345678',\n// }, {\n// 'workitem.invoiceNumber': new engine.outcomes.ValidationOutcome(),\n// 'workitem.invoiceDate': new engine.outcomes.ValidationOutcome(),\n// 'workitem.basNumber': new engine.outcomes.ValidationOutcome(),\n// });\n//\n// const start = Date.now();\n// engine.validate([workitemModel1])\n// .then(() => {\n// console.log('\\nValidation Complete!\\n');\n// console.log('Time Elasped:', Date.now() - start, '\\n');\n// console.log('Outcomes:\\n');\n// console.log(workitemModel1.validation);\n// });\n"
]
},
"mtime": 1466927973556
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/lib/index.js\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [],
"marked": [],
"modules": {
"imports": [],
"exports": {
"exported": [],
"specifiers": []
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/lib/index.js",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/lib/index.js",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "index.js",
"sourceFileName": "index.js",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "index"
},
"ignored": false,
"code": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ValidationEngine = undefined;\n\nvar _debug = require('debug');\n\nvar _debug2 = babelHelpers.interopRequireDefault(_debug);\n\nvar _nools = require('nools');\n\nvar _nools2 = babelHelpers.interopRequireDefault(_nools);\n\nvar _helpers = require('./helpers');\n\nconst dbg = (0, _debug2.default)('v-engine');\n\n/**\n * ValidationEngine class\n *\n * @param rulesPath: a path to the `nools` DSL rules file to compile and use\n */\n/* index.es6 */\n\nclass ValidationEngine {\n constructor(rulesPath) {\n this.flow = _nools2.default.compile(rulesPath, { scope: { recordOutcome: _helpers.recordOutcome, constraints: _helpers.constraints } });\n this.flowSession = this.flow.getSession();\n\n this.models = {\n WorkitemModel: this.flow.getDefined('WorkitemModel'),\n AppStateModel: this.flow.getDefined('AppStateModel')\n };\n\n this.outcomes = {\n ValidationOutcome: this.flow.getDefined('ValidationOutcome'),\n RuleOutcome: this.flow.getDefined('RuleOutcome')\n };\n }\n\n /**\n * Validate input models using the created engine\n *\n * @param model: an array of the models to be validated\n * @return promise as returned by `session.prototype.match`\n */\n validate(models) {\n // Assert the models as the facts\n models.forEach(model => {\n this.flowSession.assert(model);\n });\n\n // Execute and return the promise\n return this.flowSession.match();\n }\n}\nexports.ValidationEngine = ValidationEngine;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLE9BQU8sY0FBUCxDQUFzQixPQUF0QixFQUErQixZQUEvQixFQUE2QztBQUMzQyxTQUFPO0FBRG9DLENBQTdDO0FBR0EsUUFBUSxnQkFBUixHQUEyQixTQUEzQjs7QUFFQSxJQUFJLFNBQVMsUUFBUSxPQUFSLENBQWI7O0FBRUEsSUFBSSxVQUFVLGFBQWEscUJBQWIsQ0FBbUMsTUFBbkMsQ0FBZDs7QUFFQSxJQUFJLFNBQVMsUUFBUSxPQUFSLENBQWI7O0FBRUEsSUFBSSxVQUFVLGFBQWEscUJBQWIsQ0FBbUMsTUFBbkMsQ0FBZDs7QUFFQSxJQUFJLFdBQVcsUUFBUSxXQUFSLENBQWY7O0FBRUEsTUFBTSxNQUFNLENBQUMsR0FBRyxRQUFRLE9BQVosRUFBcUIsVUFBckIsQ0FBWjs7Ozs7Ozs7O0FBU0EsTUFBTSxnQkFBTixDQUF1QjtBQUNyQixjQUFZLFNBQVosRUFBdUI7QUFDckIsU0FBSyxJQUFMLEdBQVksUUFBUSxPQUFSLENBQWdCLE9BQWhCLENBQXdCLFNBQXhCLEVBQW1DLEVBQUUsT0FBTyxFQUFFLGVBQWUsU0FBUyxhQUExQixFQUF5QyxhQUFhLFNBQVMsV0FBL0QsRUFBVCxFQUFuQyxDQUFaO0FBQ0EsU0FBSyxXQUFMLEdBQW1CLEtBQUssSUFBTCxDQUFVLFVBQVYsRUFBbkI7O0FBRUEsU0FBSyxNQUFMLEdBQWM7QUFDWixxQkFBZSxLQUFLLElBQUwsQ0FBVSxVQUFWLENBQXFCLGVBQXJCLENBREg7QUFFWixxQkFBZSxLQUFLLElBQUwsQ0FBVSxVQUFWLENBQXFCLGVBQXJCO0FBRkgsS0FBZDs7QUFLQSxTQUFLLFFBQUwsR0FBZ0I7QUFDZCx5QkFBbUIsS0FBSyxJQUFMLENBQVUsVUFBVixDQUFxQixtQkFBckIsQ0FETDtBQUVkLG1CQUFhLEtBQUssSUFBTCxDQUFVLFVBQVYsQ0FBcUIsYUFBckI7QUFGQyxLQUFoQjtBQUlEOzs7Ozs7OztBQVFELFdBQVMsTUFBVCxFQUFpQjs7QUFFZixXQUFPLE9BQVAsQ0FBZSxTQUFTO0FBQ3RCLFdBQUssV0FBTCxDQUFpQixNQUFqQixDQUF3QixLQUF4QjtBQUNELEtBRkQ7OztBQUtBLFdBQU8sS0FBSyxXQUFMLENBQWlCLEtBQWpCLEVBQVA7QUFDRDtBQTlCb0I7QUFnQ3ZCLFFBQVEsZ0JBQVIsR0FBMkIsZ0JBQTNCIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5WYWxpZGF0aW9uRW5naW5lID0gdW5kZWZpbmVkO1xuXG52YXIgX2RlYnVnID0gcmVxdWlyZSgnZGVidWcnKTtcblxudmFyIF9kZWJ1ZzIgPSBiYWJlbEhlbHBlcnMuaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWJ1Zyk7XG5cbnZhciBfbm9vbHMgPSByZXF1aXJlKCdub29scycpO1xuXG52YXIgX25vb2xzMiA9IGJhYmVsSGVscGVycy5pbnRlcm9wUmVxdWlyZURlZmF1bHQoX25vb2xzKTtcblxudmFyIF9oZWxwZXJzID0gcmVxdWlyZSgnLi9oZWxwZXJzJyk7XG5cbmNvbnN0IGRiZyA9ICgwLCBfZGVidWcyLmRlZmF1bHQpKCd2LWVuZ2luZScpO1xuXG4vKipcbiAqIFZhbGlkYXRpb25FbmdpbmUgY2xhc3NcbiAqXG4gKiBAcGFyYW0gcnVsZXNQYXRoOiBhIHBhdGggdG8gdGhlIGBub29sc2AgRFNMIHJ1bGVzIGZpbGUgdG8gY29tcGlsZSBhbmQgdXNlXG4gKi9cbi8qIGluZGV4LmVzNiAqL1xuXG5jbGFzcyBWYWxpZGF0aW9uRW5naW5lIHtcbiAgY29uc3RydWN0b3IocnVsZXNQYXRoKSB7XG4gICAgdGhpcy5mbG93ID0gX25vb2xzMi5kZWZhdWx0LmNvbXBpbGUocnVsZXNQYXRoLCB7IHNjb3BlOiB7IHJlY29yZE91dGNvbWU6IF9oZWxwZXJzLnJlY29yZE91dGNvbWUsIGNvbnN0cmFpbnRzOiBfaGVscGVycy5jb25zdHJhaW50cyB9IH0pO1xuICAgIHRoaXMuZmxvd1Nlc3Npb24gPSB0aGlzLmZsb3cuZ2V0U2Vzc2lvbigpO1xuXG4gICAgdGhpcy5tb2RlbHMgPSB7XG4gICAgICBXb3JraXRlbU1vZGVsOiB0aGlzLmZsb3cuZ2V0RGVmaW5lZCgnV29ya2l0ZW1Nb2RlbCcpLFxuICAgICAgQXBwU3RhdGVNb2RlbDogdGhpcy5mbG93LmdldERlZmluZWQoJ0FwcFN0YXRlTW9kZWwnKVxuICAgIH07XG5cbiAgICB0aGlzLm91dGNvbWVzID0ge1xuICAgICAgVmFsaWRhdGlvbk91dGNvbWU6IHRoaXMuZmxvdy5nZXREZWZpbmVkKCdWYWxpZGF0aW9uT3V0Y29tZScpLFxuICAgICAgUnVsZU91dGNvbWU6IHRoaXMuZmxvdy5nZXREZWZpbmVkKCdSdWxlT3V0Y29tZScpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBpbnB1dCBtb2RlbHMgdXNpbmcgdGhlIGNyZWF0ZWQgZW5naW5lXG4gICAqXG4gICAqIEBwYXJhbSBtb2RlbDogYW4gYXJyYXkgb2YgdGhlIG1vZGVscyB0byBiZSB2YWxpZGF0ZWRcbiAgICogQHJldHVybiBwcm9taXNlIGFzIHJldHVybmVkIGJ5IGBzZXNzaW9uLnByb3RvdHlwZS5tYXRjaGBcbiAgICovXG4gIHZhbGlkYXRlKG1vZGVscykge1xuICAgIC8vIEFzc2VydCB0aGUgbW9kZWxzIGFzIHRoZSBmYWN0c1xuICAgIG1vZGVscy5mb3JFYWNoKG1vZGVsID0+IHtcbiAgICAgIHRoaXMuZmxvd1Nlc3Npb24uYXNzZXJ0KG1vZGVsKTtcbiAgICB9KTtcblxuICAgIC8vIEV4ZWN1dGUgYW5kIHJldHVybiB0aGUgcHJvbWlzZVxuICAgIHJldHVybiB0aGlzLmZsb3dTZXNzaW9uLm1hdGNoKCk7XG4gIH1cbn1cbmV4cG9ydHMuVmFsaWRhdGlvbkVuZ2luZSA9IFZhbGlkYXRpb25FbmdpbmU7Il19",
"ast": null,
"map": {
"version": 3,
"sources": [
"index.js"
],
"names": [],
"mappings": "AAAA;;AAEA,OAAO,cAAP,CAAsB,OAAtB,EAA+B,YAA/B,EAA6C;AAC3C,SAAO;AADoC,CAA7C;AAGA,QAAQ,gBAAR,GAA2B,SAA3B;;AAEA,IAAI,SAAS,QAAQ,OAAR,CAAb;;AAEA,IAAI,UAAU,aAAa,qBAAb,CAAmC,MAAnC,CAAd;;AAEA,IAAI,SAAS,QAAQ,OAAR,CAAb;;AAEA,IAAI,UAAU,aAAa,qBAAb,CAAmC,MAAnC,CAAd;;AAEA,IAAI,WAAW,QAAQ,WAAR,CAAf;;AAEA,MAAM,MAAM,CAAC,GAAG,QAAQ,OAAZ,EAAqB,UAArB,CAAZ;;;;;;;;;AASA,MAAM,gBAAN,CAAuB;AACrB,cAAY,SAAZ,EAAuB;AACrB,SAAK,IAAL,GAAY,QAAQ,OAAR,CAAgB,OAAhB,CAAwB,SAAxB,EAAmC,EAAE,OAAO,EAAE,eAAe,SAAS,aAA1B,EAAyC,aAAa,SAAS,WAA/D,EAAT,EAAnC,CAAZ;AACA,SAAK,WAAL,GAAmB,KAAK,IAAL,CAAU,UAAV,EAAnB;;AAEA,SAAK,MAAL,GAAc;AACZ,qBAAe,KAAK,IAAL,CAAU,UAAV,CAAqB,eAArB,CADH;AAEZ,qBAAe,KAAK,IAAL,CAAU,UAAV,CAAqB,eAArB;AAFH,KAAd;;AAKA,SAAK,QAAL,GAAgB;AACd,yBAAmB,KAAK,IAAL,CAAU,UAAV,CAAqB,mBAArB,CADL;AAEd,mBAAa,KAAK,IAAL,CAAU,UAAV,CAAqB,aAArB;AAFC,KAAhB;AAID;;;;;;;;AAQD,WAAS,MAAT,EAAiB;;AAEf,WAAO,OAAP,CAAe,SAAS;AACtB,WAAK,WAAL,CAAiB,MAAjB,CAAwB,KAAxB;AACD,KAFD;;;AAKA,WAAO,KAAK,WAAL,CAAiB,KAAjB,EAAP;AACD;AA9BoB;AAgCvB,QAAQ,gBAAR,GAA2B,gBAA3B",
"file": "index.js",
"sourcesContent": [
"'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ValidationEngine = undefined;\n\nvar _debug = require('debug');\n\nvar _debug2 = babelHelpers.interopRequireDefault(_debug);\n\nvar _nools = require('nools');\n\nvar _nools2 = babelHelpers.interopRequireDefault(_nools);\n\nvar _helpers = require('./helpers');\n\nconst dbg = (0, _debug2.default)('v-engine');\n\n/**\n * ValidationEngine class\n *\n * @param rulesPath: a path to the `nools` DSL rules file to compile and use\n */\n/* index.es6 */\n\nclass ValidationEngine {\n constructor(rulesPath) {\n this.flow = _nools2.default.compile(rulesPath, { scope: { recordOutcome: _helpers.recordOutcome, constraints: _helpers.constraints } });\n this.flowSession = this.flow.getSession();\n\n this.models = {\n WorkitemModel: this.flow.getDefined('WorkitemModel'),\n AppStateModel: this.flow.getDefined('AppStateModel')\n };\n\n this.outcomes = {\n ValidationOutcome: this.flow.getDefined('ValidationOutcome'),\n RuleOutcome: this.flow.getDefined('RuleOutcome')\n };\n }\n\n /**\n * Validate input models using the created engine\n *\n * @param model: an array of the models to be validated\n * @return promise as returned by `session.prototype.match`\n */\n validate(models) {\n // Assert the models as the facts\n models.forEach(model => {\n this.flowSession.assert(model);\n });\n\n // Execute and return the promise\n return this.flowSession.match();\n }\n}\nexports.ValidationEngine = ValidationEngine;"
]
},
"mtime": 1466920056174
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/lib/helpers.js\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [],
"marked": [],
"modules": {
"imports": [],
"exports": {
"exported": [],
"specifiers": []
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/lib/helpers.js",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/lib/helpers.js",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "helpers.js",
"sourceFileName": "helpers.js",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "helpers"
},
"ignored": false,
"code": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.recordOutcome = recordOutcome;\n/* helpers.es6 */\n/**\n * Convenience method to add a rule outcome to the array of outcomes for a partiticular\n * model attribute or validation endpoint. It does so without a re-modify of the validation\n * outcome record if the error/warning has been recorded already.\n * This prevents unrequired re-activiation of the host rule\n *\n * @param ctx: the context of the `then` `nools` DSL environment\n * @param RuleOutcome: the RuleOutcome class definition\n * @param fact: the fact that activated the rule\n * @param path: the path of the validation endpoint in the validation outcome structure\n * @param ruleName: the name string of the rule (the same as the rule name in `nools` DSL)\n * @param validationOutcome: the value to set the endpoint's validation outcome to\n */\nfunction recordOutcome(ctx, RuleOutcome, fact, path, ruleName, ruleOutcome, validationOutcome) {\n if (!fact.validation[path].info[ruleName] || fact.validation[path].info[ruleName].type !== ruleOutcome.type && fact.validation[path].info[ruleName].msg !== ruleOutcome.msg) {\n ctx.modify(fact, function () {\n fact.validation[path].outcome = validationOutcome;\n fact.validation[path].info[ruleName] = ruleOutcome;\n });\n }\n}\n\n/**\n * Custom constraint to check if a string contains a date\n *\n * @param string: string to check\n * @param dateObj: the required date as a Date type\n * @return whether or not `string` includes the required date\n */\nfunction stringIncludesDate(value, dateObj) {\n const fullYear = dateObj.getFullYear();\n const month = dateObj.getMonth() + 1;\n const date = dateObj.getDate();\n\n const dateString = `${ fullYear }${ month >= 10 ? month : `0${ month }` }${ date >= 10 ? date : `0${ date }` }`;\n\n return value && value.includes(dateString);\n}\n\n/**\n * Custom constraint to check if an object has a particular attribute path\n *\n * @param rootObject: the object which is known to exist\n * @param path: string of path off the `rootObject` which is to be tested\n * @return whether or not the path exists\n */\nfunction hasPath(rootObject, path) {\n let obj = rootObject;\n const args = path.split('.');\n\n for (let i = 0; i < args.length; i++) {\n if (!obj || !obj.hasOwnProperty(args[i])) {\n return false;\n }\n obj = obj[args[i]];\n }\n return true;\n}\n\nconst constraints = exports.constraints = {\n stringIncludesDate,\n hasPath\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsT0FBTyxjQUFQLENBQXNCLE9BQXRCLEVBQStCLFlBQS9CLEVBQTZDO0FBQzNDLFNBQU87QUFEb0MsQ0FBN0M7QUFHQSxRQUFRLGFBQVIsR0FBd0IsYUFBeEI7Ozs7Ozs7Ozs7Ozs7OztBQWVBLFNBQVMsYUFBVCxDQUF1QixHQUF2QixFQUE0QixXQUE1QixFQUF5QyxJQUF6QyxFQUErQyxJQUEvQyxFQUFxRCxRQUFyRCxFQUErRCxXQUEvRCxFQUE0RSxpQkFBNUUsRUFBK0Y7QUFDN0YsTUFBSSxDQUFDLEtBQUssVUFBTCxDQUFnQixJQUFoQixFQUFzQixJQUF0QixDQUEyQixRQUEzQixDQUFELElBQXlDLEtBQUssVUFBTCxDQUFnQixJQUFoQixFQUFzQixJQUF0QixDQUEyQixRQUEzQixFQUFxQyxJQUFyQyxLQUE4QyxZQUFZLElBQTFELElBQWtFLEtBQUssVUFBTCxDQUFnQixJQUFoQixFQUFzQixJQUF0QixDQUEyQixRQUEzQixFQUFxQyxHQUFyQyxLQUE2QyxZQUFZLEdBQXhLLEVBQTZLO0FBQzNLLFFBQUksTUFBSixDQUFXLElBQVgsRUFBaUIsWUFBWTtBQUMzQixXQUFLLFVBQUwsQ0FBZ0IsSUFBaEIsRUFBc0IsT0FBdEIsR0FBZ0MsaUJBQWhDO0FBQ0EsV0FBSyxVQUFMLENBQWdCLElBQWhCLEVBQXNCLElBQXRCLENBQTJCLFFBQTNCLElBQXVDLFdBQXZDO0FBQ0QsS0FIRDtBQUlEO0FBQ0Y7Ozs7Ozs7OztBQVNELFNBQVMsa0JBQVQsQ0FBNEIsS0FBNUIsRUFBbUMsT0FBbkMsRUFBNEM7QUFDMUMsUUFBTSxXQUFXLFFBQVEsV0FBUixFQUFqQjtBQUNBLFFBQU0sUUFBUSxRQUFRLFFBQVIsS0FBcUIsQ0FBbkM7QUFDQSxRQUFNLE9BQU8sUUFBUSxPQUFSLEVBQWI7O0FBRUEsUUFBTSxhQUFjLElBQUcsUUFBVSxLQUFHLFNBQVMsRUFBVCxHQUFjLEtBQWQsR0FBdUIsS0FBSSxLQUFPLEdBQUcsS0FBRyxRQUFRLEVBQVIsR0FBYSxJQUFiLEdBQXFCLEtBQUksSUFBTSxHQUFHLEdBQTlHOztBQUVBLFNBQU8sU0FBUyxNQUFNLFFBQU4sQ0FBZSxVQUFmLENBQWhCO0FBQ0Q7Ozs7Ozs7OztBQVNELFNBQVMsT0FBVCxDQUFpQixVQUFqQixFQUE2QixJQUE3QixFQUFtQztBQUNqQyxNQUFJLE1BQU0sVUFBVjtBQUNBLFFBQU0sT0FBTyxLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWI7O0FBRUEsT0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDcEMsUUFBSSxDQUFDLEdBQUQsSUFBUSxDQUFDLElBQUksY0FBSixDQUFtQixLQUFLLENBQUwsQ0FBbkIsQ0FBYixFQUEwQztBQUN4QyxhQUFPLEtBQVA7QUFDRDtBQUNELFVBQU0sSUFBSSxLQUFLLENBQUwsQ0FBSixDQUFOO0FBQ0Q7QUFDRCxTQUFPLElBQVA7QUFDRDs7QUFFRCxNQUFNLGNBQWMsUUFBUSxXQUFSLEdBQXNCO0FBQ3hDLG9CQUR3QztBQUV4QztBQUZ3QyxDQUExQyIsImZpbGUiOiJoZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZWNvcmRPdXRjb21lID0gcmVjb3JkT3V0Y29tZTtcbi8qIGhlbHBlcnMuZXM2ICovXG4vKipcbiAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBhZGQgYSBydWxlIG91dGNvbWUgdG8gdGhlIGFycmF5IG9mIG91dGNvbWVzIGZvciBhIHBhcnRpdGljdWxhclxuICogbW9kZWwgYXR0cmlidXRlIG9yIHZhbGlkYXRpb24gZW5kcG9pbnQuIEl0IGRvZXMgc28gd2l0aG91dCBhIHJlLW1vZGlmeSBvZiB0aGUgdmFsaWRhdGlvblxuICogb3V0Y29tZSByZWNvcmQgaWYgdGhlIGVycm9yL3dhcm5pbmcgaGFzIGJlZW4gcmVjb3JkZWQgYWxyZWFkeS5cbiAqIFRoaXMgcHJldmVudHMgdW5yZXF1aXJlZCByZS1hY3RpdmlhdGlvbiBvZiB0aGUgaG9zdCBydWxlXG4gKlxuICogQHBhcmFtIGN0eDogdGhlIGNvbnRleHQgb2YgdGhlIGB0aGVuYCBgbm9vbHNgIERTTCBlbnZpcm9ubWVudFxuICogQHBhcmFtIFJ1bGVPdXRjb21lOiB0aGUgUnVsZU91dGNvbWUgY2xhc3MgZGVmaW5pdGlvblxuICogQHBhcmFtIGZhY3Q6IHRoZSBmYWN0IHRoYXQgYWN0aXZhdGVkIHRoZSBydWxlXG4gKiBAcGFyYW0gcGF0aDogdGhlIHBhdGggb2YgdGhlIHZhbGlkYXRpb24gZW5kcG9pbnQgaW4gdGhlIHZhbGlkYXRpb24gb3V0Y29tZSBzdHJ1Y3R1cmVcbiAqIEBwYXJhbSBydWxlTmFtZTogdGhlIG5hbWUgc3RyaW5nIG9mIHRoZSBydWxlICh0aGUgc2FtZSBhcyB0aGUgcnVsZSBuYW1lIGluIGBub29sc2AgRFNMKVxuICogQHBhcmFtIHZhbGlkYXRpb25PdXRjb21lOiB0aGUgdmFsdWUgdG8gc2V0IHRoZSBlbmRwb2ludCdzIHZhbGlkYXRpb24gb3V0Y29tZSB0b1xuICovXG5mdW5jdGlvbiByZWNvcmRPdXRjb21lKGN0eCwgUnVsZU91dGNvbWUsIGZhY3QsIHBhdGgsIHJ1bGVOYW1lLCBydWxlT3V0Y29tZSwgdmFsaWRhdGlvbk91dGNvbWUpIHtcbiAgaWYgKCFmYWN0LnZhbGlkYXRpb25bcGF0aF0uaW5mb1tydWxlTmFtZV0gfHwgZmFjdC52YWxpZGF0aW9uW3BhdGhdLmluZm9bcnVsZU5hbWVdLnR5cGUgIT09IHJ1bGVPdXRjb21lLnR5cGUgJiYgZmFjdC52YWxpZGF0aW9uW3BhdGhdLmluZm9bcnVsZU5hbWVdLm1zZyAhPT0gcnVsZU91dGNvbWUubXNnKSB7XG4gICAgY3R4Lm1vZGlmeShmYWN0LCBmdW5jdGlvbiAoKSB7XG4gICAgICBmYWN0LnZhbGlkYXRpb25bcGF0aF0ub3V0Y29tZSA9IHZhbGlkYXRpb25PdXRjb21lO1xuICAgICAgZmFjdC52YWxpZGF0aW9uW3BhdGhdLmluZm9bcnVsZU5hbWVdID0gcnVsZU91dGNvbWU7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDdXN0b20gY29uc3RyYWludCB0byBjaGVjayBpZiBhIHN0cmluZyBjb250YWlucyBhIGRhdGVcbiAqXG4gKiBAcGFyYW0gc3RyaW5nOiBzdHJpbmcgdG8gY2hlY2tcbiAqIEBwYXJhbSBkYXRlT2JqOiB0aGUgcmVxdWlyZWQgZGF0ZSBhcyBhIERhdGUgdHlwZVxuICogQHJldHVybiB3aGV0aGVyIG9yIG5vdCBgc3RyaW5nYCBpbmNsdWRlcyB0aGUgcmVxdWlyZWQgZGF0ZVxuICovXG5mdW5jdGlvbiBzdHJpbmdJbmNsdWRlc0RhdGUodmFsdWUsIGRhdGVPYmopIHtcbiAgY29uc3QgZnVsbFllYXIgPSBkYXRlT2JqLmdldEZ1bGxZZWFyKCk7XG4gIGNvbnN0IG1vbnRoID0gZGF0ZU9iai5nZXRNb250aCgpICsgMTtcbiAgY29uc3QgZGF0ZSA9IGRhdGVPYmouZ2V0RGF0ZSgpO1xuXG4gIGNvbnN0IGRhdGVTdHJpbmcgPSBgJHsgZnVsbFllYXIgfSR7IG1vbnRoID49IDEwID8gbW9udGggOiBgMCR7IG1vbnRoIH1gIH0keyBkYXRlID49IDEwID8gZGF0ZSA6IGAwJHsgZGF0ZSB9YCB9YDtcblxuICByZXR1cm4gdmFsdWUgJiYgdmFsdWUuaW5jbHVkZXMoZGF0ZVN0cmluZyk7XG59XG5cbi8qKlxuICogQ3VzdG9tIGNvbnN0cmFpbnQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGhhcyBhIHBhcnRpY3VsYXIgYXR0cmlidXRlIHBhdGhcbiAqXG4gKiBAcGFyYW0gcm9vdE9iamVjdDogdGhlIG9iamVjdCB3aGljaCBpcyBrbm93biB0byBleGlzdFxuICogQHBhcmFtIHBhdGg6IHN0cmluZyBvZiBwYXRoIG9mZiB0aGUgYHJvb3RPYmplY3RgIHdoaWNoIGlzIHRvIGJlIHRlc3RlZFxuICogQHJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgcGF0aCBleGlzdHNcbiAqL1xuZnVuY3Rpb24gaGFzUGF0aChyb290T2JqZWN0LCBwYXRoKSB7XG4gIGxldCBvYmogPSByb290T2JqZWN0O1xuICBjb25zdCBhcmdzID0gcGF0aC5zcGxpdCgnLicpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIGlmICghb2JqIHx8ICFvYmouaGFzT3duUHJvcGVydHkoYXJnc1tpXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2JqID0gb2JqW2FyZ3NbaV1dO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5jb25zdCBjb25zdHJhaW50cyA9IGV4cG9ydHMuY29uc3RyYWludHMgPSB7XG4gIHN0cmluZ0luY2x1ZGVzRGF0ZSxcbiAgaGFzUGF0aFxufTsiXX0=",
"ast": null,
"map": {
"version": 3,
"sources": [
"helpers.js"
],
"names": [],
"mappings": "AAAA;;AAEA,OAAO,cAAP,CAAsB,OAAtB,EAA+B,YAA/B,EAA6C;AAC3C,SAAO;AADoC,CAA7C;AAGA,QAAQ,aAAR,GAAwB,aAAxB;;;;;;;;;;;;;;;AAeA,SAAS,aAAT,CAAuB,GAAvB,EAA4B,WAA5B,EAAyC,IAAzC,EAA+C,IAA/C,EAAqD,QAArD,EAA+D,WAA/D,EAA4E,iBAA5E,EAA+F;AAC7F,MAAI,CAAC,KAAK,UAAL,CAAgB,IAAhB,EAAsB,IAAtB,CAA2B,QAA3B,CAAD,IAAyC,KAAK,UAAL,CAAgB,IAAhB,EAAsB,IAAtB,CAA2B,QAA3B,EAAqC,IAArC,KAA8C,YAAY,IAA1D,IAAkE,KAAK,UAAL,CAAgB,IAAhB,EAAsB,IAAtB,CAA2B,QAA3B,EAAqC,GAArC,KAA6C,YAAY,GAAxK,EAA6K;AAC3K,QAAI,MAAJ,CAAW,IAAX,EAAiB,YAAY;AAC3B,WAAK,UAAL,CAAgB,IAAhB,EAAsB,OAAtB,GAAgC,iBAAhC;AACA,WAAK,UAAL,CAAgB,IAAhB,EAAsB,IAAtB,CAA2B,QAA3B,IAAuC,WAAvC;AACD,KAHD;AAID;AACF;;;;;;;;;AASD,SAAS,kBAAT,CAA4B,KAA5B,EAAmC,OAAnC,EAA4C;AAC1C,QAAM,WAAW,QAAQ,WAAR,EAAjB;AACA,QAAM,QAAQ,QAAQ,QAAR,KAAqB,CAAnC;AACA,QAAM,OAAO,QAAQ,OAAR,EAAb;;AAEA,QAAM,aAAc,IAAG,QAAU,KAAG,SAAS,EAAT,GAAc,KAAd,GAAuB,KAAI,KAAO,GAAG,KAAG,QAAQ,EAAR,GAAa,IAAb,GAAqB,KAAI,IAAM,GAAG,GAA9G;;AAEA,SAAO,SAAS,MAAM,QAAN,CAAe,UAAf,CAAhB;AACD;;;;;;;;;AASD,SAAS,OAAT,CAAiB,UAAjB,EAA6B,IAA7B,EAAmC;AACjC,MAAI,MAAM,UAAV;AACA,QAAM,OAAO,KAAK,KAAL,CAAW,GAAX,CAAb;;AAEA,OAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,KAAK,MAAzB,EAAiC,GAAjC,EAAsC;AACpC,QAAI,CAAC,GAAD,IAAQ,CAAC,IAAI,cAAJ,CAAmB,KAAK,CAAL,CAAnB,CAAb,EAA0C;AACxC,aAAO,KAAP;AACD;AACD,UAAM,IAAI,KAAK,CAAL,CAAJ,CAAN;AACD;AACD,SAAO,IAAP;AACD;;AAED,MAAM,cAAc,QAAQ,WAAR,GAAsB;AACxC,oBADwC;AAExC;AAFwC,CAA1C",
"file": "helpers.js",
"sourcesContent": [
"'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.recordOutcome = recordOutcome;\n/* helpers.es6 */\n/**\n * Convenience method to add a rule outcome to the array of outcomes for a partiticular\n * model attribute or validation endpoint. It does so without a re-modify of the validation\n * outcome record if the error/warning has been recorded already.\n * This prevents unrequired re-activiation of the host rule\n *\n * @param ctx: the context of the `then` `nools` DSL environment\n * @param RuleOutcome: the RuleOutcome class definition\n * @param fact: the fact that activated the rule\n * @param path: the path of the validation endpoint in the validation outcome structure\n * @param ruleName: the name string of the rule (the same as the rule name in `nools` DSL)\n * @param validationOutcome: the value to set the endpoint's validation outcome to\n */\nfunction recordOutcome(ctx, RuleOutcome, fact, path, ruleName, ruleOutcome, validationOutcome) {\n if (!fact.validation[path].info[ruleName] || fact.validation[path].info[ruleName].type !== ruleOutcome.type && fact.validation[path].info[ruleName].msg !== ruleOutcome.msg) {\n ctx.modify(fact, function () {\n fact.validation[path].outcome = validationOutcome;\n fact.validation[path].info[ruleName] = ruleOutcome;\n });\n }\n}\n\n/**\n * Custom constraint to check if a string contains a date\n *\n * @param string: string to check\n * @param dateObj: the required date as a Date type\n * @return whether or not `string` includes the required date\n */\nfunction stringIncludesDate(value, dateObj) {\n const fullYear = dateObj.getFullYear();\n const month = dateObj.getMonth() + 1;\n const date = dateObj.getDate();\n\n const dateString = `${ fullYear }${ month >= 10 ? month : `0${ month }` }${ date >= 10 ? date : `0${ date }` }`;\n\n return value && value.includes(dateString);\n}\n\n/**\n * Custom constraint to check if an object has a particular attribute path\n *\n * @param rootObject: the object which is known to exist\n * @param path: string of path off the `rootObject` which is to be tested\n * @return whether or not the path exists\n */\nfunction hasPath(rootObject, path) {\n let obj = rootObject;\n const args = path.split('.');\n\n for (let i = 0; i < args.length; i++) {\n if (!obj || !obj.hasOwnProperty(args[i])) {\n return false;\n }\n obj = obj[args[i]];\n }\n return true;\n}\n\nconst constraints = exports.constraints = {\n stringIncludesDate,\n hasPath\n};"
]
},
"mtime": 1466920056107
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/examples/two-models.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [],
"marked": [],
"modules": {
"imports": [
{
"source": "..",
"imported": [
"ValidationEngine"
],
"specifiers": [
{
"kind": "named",
"imported": "ValidationEngine",
"local": "ValidationEngine"
}
]
}
],
"exports": {
"exported": [],
"specifiers": []
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/examples/two-models.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/examples/two-models.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "two-models.es6",
"sourceFileName": "two-models.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "two-models"
},
"ignored": false,
"code": "'use strict';\n\nvar _ = require('..');\n\nconst engine = new _.ValidationEngine('rules.nools'); /* simple-workitem-model.es6 */\n// Typical validation example with two models and medium interdependency\n\n\nconst workitemModel = new engine.models.WorkitemModel({\n invoiceDate: new Date('2017-07-10'),\n basNumber: '2016071012'\n}, // basNumber: '',\n{\n 'workitem.invoiceDate': new engine.outcomes.ValidationOutcome(),\n 'workitem.basNumber': new engine.outcomes.ValidationOutcome(),\n workitem: new engine.outcomes.ValidationOutcome(),\n 'custom.workitem.checkout': new engine.outcomes.ValidationOutcome()\n});\n\nconst appStateModel = new engine.models.AppStateModel({\n online: true,\n userType: 'user'\n}, {});\n\nlet start = Date.now();\nengine.validate([workitemModel, appStateModel]).then(() => {\n console.log('\\nValidation Complete!\\n');\n console.log('Time Elasped:', Date.now() - start, '\\n');\n console.log('Outcomes:\\n');\n console.log(workitemModel.validation);\n console.log('\\nFacts:\\n');\n console.log(engine.flowSession.getFacts());\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInR3by1tb2RlbHMuZXM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUE7O0FBRUEsTUFBTSxTQUFTLHVCQUFxQixhQUFyQixDQUFmLEM7Ozs7QUFFQSxNQUFNLGdCQUFnQixJQUFJLE9BQU8sTUFBUCxDQUFjLGFBQWxCLENBQWdDO0FBQ3BELGVBQWEsSUFBSSxJQUFKLENBQVMsWUFBVCxDQUR1QztBQUVwRCxhQUFXO0FBRnlDLENBQWhDLEU7QUFJbkI7QUFDRCwwQkFBd0IsSUFBSSxPQUFPLFFBQVAsQ0FBZ0IsaUJBQXBCLEVBRHZCO0FBRUQsd0JBQXNCLElBQUksT0FBTyxRQUFQLENBQWdCLGlCQUFwQixFQUZyQjtBQUdELFlBQVUsSUFBSSxPQUFPLFFBQVAsQ0FBZ0IsaUJBQXBCLEVBSFQ7QUFJRCw4QkFBNEIsSUFBSSxPQUFPLFFBQVAsQ0FBZ0IsaUJBQXBCO0FBSjNCLENBSm1CLENBQXRCOztBQVdBLE1BQU0sZ0JBQWdCLElBQUksT0FBTyxNQUFQLENBQWMsYUFBbEIsQ0FBZ0M7QUFDcEQsVUFBUSxJQUQ0QztBQUVwRCxZQUFVO0FBRjBDLENBQWhDLEVBR25CLEVBSG1CLENBQXRCOztBQUtBLElBQUksUUFBUSxLQUFLLEdBQUwsRUFBWjtBQUNBLE9BQU8sUUFBUCxDQUFnQixDQUFDLGFBQUQsRUFBZ0IsYUFBaEIsQ0FBaEIsRUFDRyxJQURILENBQ1EsTUFBTTtBQUNWLFVBQVEsR0FBUixDQUFZLDBCQUFaO0FBQ0EsVUFBUSxHQUFSLENBQVksZUFBWixFQUE2QixLQUFLLEdBQUwsS0FBYSxLQUExQyxFQUFpRCxJQUFqRDtBQUNBLFVBQVEsR0FBUixDQUFZLGFBQVo7QUFDQSxVQUFRLEdBQVIsQ0FBWSxjQUFjLFVBQTFCO0FBQ0EsVUFBUSxHQUFSLENBQVksWUFBWjtBQUNBLFVBQVEsR0FBUixDQUFZLE9BQU8sV0FBUCxDQUFtQixRQUFuQixFQUFaO0FBQ0QsQ0FSSCIsImZpbGUiOiJ0d28tbW9kZWxzLmVzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qIHNpbXBsZS13b3JraXRlbS1tb2RlbC5lczYgKi9cbi8vIFR5cGljYWwgdmFsaWRhdGlvbiBleGFtcGxlIHdpdGggdHdvIG1vZGVscyBhbmQgbWVkaXVtIGludGVyZGVwZW5kZW5jeVxuaW1wb3J0IHsgVmFsaWRhdGlvbkVuZ2luZSB9IGZyb20gJy4uJztcblxuY29uc3QgZW5naW5lID0gbmV3IFZhbGlkYXRpb25FbmdpbmUoJ3J1bGVzLm5vb2xzJyk7XG5cbmNvbnN0IHdvcmtpdGVtTW9kZWwgPSBuZXcgZW5naW5lLm1vZGVscy5Xb3JraXRlbU1vZGVsKHtcbiAgaW52b2ljZURhdGU6IG5ldyBEYXRlKCcyMDE3LTA3LTEwJyksXG4gIGJhc051bWJlcjogJzIwMTYwNzEwMTInLFxuICAvLyBiYXNOdW1iZXI6ICcnLFxufSwge1xuICAnd29ya2l0ZW0uaW52b2ljZURhdGUnOiBuZXcgZW5naW5lLm91dGNvbWVzLlZhbGlkYXRpb25PdXRjb21lKCksXG4gICd3b3JraXRlbS5iYXNOdW1iZXInOiBuZXcgZW5naW5lLm91dGNvbWVzLlZhbGlkYXRpb25PdXRjb21lKCksXG4gIHdvcmtpdGVtOiBuZXcgZW5naW5lLm91dGNvbWVzLlZhbGlkYXRpb25PdXRjb21lKCksXG4gICdjdXN0b20ud29ya2l0ZW0uY2hlY2tvdXQnOiBuZXcgZW5naW5lLm91dGNvbWVzLlZhbGlkYXRpb25PdXRjb21lKCksXG59KTtcblxuY29uc3QgYXBwU3RhdGVNb2RlbCA9IG5ldyBlbmdpbmUubW9kZWxzLkFwcFN0YXRlTW9kZWwoe1xuICBvbmxpbmU6IHRydWUsXG4gIHVzZXJUeXBlOiAndXNlcicsXG59LCB7fSk7XG5cbmxldCBzdGFydCA9IERhdGUubm93KCk7XG5lbmdpbmUudmFsaWRhdGUoW3dvcmtpdGVtTW9kZWwsIGFwcFN0YXRlTW9kZWxdKVxuICAudGhlbigoKSA9PiB7XG4gICAgY29uc29sZS5sb2coJ1xcblZhbGlkYXRpb24gQ29tcGxldGUhXFxuJyk7XG4gICAgY29uc29sZS5sb2coJ1RpbWUgRWxhc3BlZDonLCBEYXRlLm5vdygpIC0gc3RhcnQsICdcXG4nKTtcbiAgICBjb25zb2xlLmxvZygnT3V0Y29tZXM6XFxuJyk7XG4gICAgY29uc29sZS5sb2cod29ya2l0ZW1Nb2RlbC52YWxpZGF0aW9uKTtcbiAgICBjb25zb2xlLmxvZygnXFxuRmFjdHM6XFxuJyk7XG4gICAgY29uc29sZS5sb2coZW5naW5lLmZsb3dTZXNzaW9uLmdldEZhY3RzKCkpO1xuICB9KTtcbiJdfQ==",
"ast": null,
"map": {
"version": 3,
"sources": [
"two-models.es6"
],
"names": [],
"mappings": ";;AAEA;;AAEA,MAAM,SAAS,uBAAqB,aAArB,CAAf,C;;;;AAEA,MAAM,gBAAgB,IAAI,OAAO,MAAP,CAAc,aAAlB,CAAgC;AACpD,eAAa,IAAI,IAAJ,CAAS,YAAT,CADuC;AAEpD,aAAW;AAFyC,CAAhC,E;AAInB;AACD,0BAAwB,IAAI,OAAO,QAAP,CAAgB,iBAApB,EADvB;AAED,wBAAsB,IAAI,OAAO,QAAP,CAAgB,iBAApB,EAFrB;AAGD,YAAU,IAAI,OAAO,QAAP,CAAgB,iBAApB,EAHT;AAID,8BAA4B,IAAI,OAAO,QAAP,CAAgB,iBAApB;AAJ3B,CAJmB,CAAtB;;AAWA,MAAM,gBAAgB,IAAI,OAAO,MAAP,CAAc,aAAlB,CAAgC;AACpD,UAAQ,IAD4C;AAEpD,YAAU;AAF0C,CAAhC,EAGnB,EAHmB,CAAtB;;AAKA,IAAI,QAAQ,KAAK,GAAL,EAAZ;AACA,OAAO,QAAP,CAAgB,CAAC,aAAD,EAAgB,aAAhB,CAAhB,EACG,IADH,CACQ,MAAM;AACV,UAAQ,GAAR,CAAY,0BAAZ;AACA,UAAQ,GAAR,CAAY,eAAZ,EAA6B,KAAK,GAAL,KAAa,KAA1C,EAAiD,IAAjD;AACA,UAAQ,GAAR,CAAY,aAAZ;AACA,UAAQ,GAAR,CAAY,cAAc,UAA1B;AACA,UAAQ,GAAR,CAAY,YAAZ;AACA,UAAQ,GAAR,CAAY,OAAO,WAAP,CAAmB,QAAnB,EAAZ;AACD,CARH",
"file": "two-models.es6",
"sourcesContent": [
"/* simple-workitem-model.es6 */\n// Typical validation example with two models and medium interdependency\nimport { ValidationEngine } from '..';\n\nconst engine = new ValidationEngine('rules.nools');\n\nconst workitemModel = new engine.models.WorkitemModel({\n invoiceDate: new Date('2017-07-10'),\n basNumber: '2016071012',\n // basNumber: '',\n}, {\n 'workitem.invoiceDate': new engine.outcomes.ValidationOutcome(),\n 'workitem.basNumber': new engine.outcomes.ValidationOutcome(),\n workitem: new engine.outcomes.ValidationOutcome(),\n 'custom.workitem.checkout': new engine.outcomes.ValidationOutcome(),\n});\n\nconst appStateModel = new engine.models.AppStateModel({\n online: true,\n userType: 'user',\n}, {});\n\nlet start = Date.now();\nengine.validate([workitemModel, appStateModel])\n .then(() => {\n console.log('\\nValidation Complete!\\n');\n console.log('Time Elasped:', Date.now() - start, '\\n');\n console.log('Outcomes:\\n');\n console.log(workitemModel.validation);\n console.log('\\nFacts:\\n');\n console.log(engine.flowSession.getFacts());\n });\n"
]
},
"mtime": 1466847842796
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/src/helpers.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [],
"marked": [],
"modules": {
"imports": [],
"exports": {
"exported": [
"recordOutcome",
"ctx",
"RuleOutcome",
"fact",
"path",
"ruleName",
"ruleOutcome",
"validationOutcome",
"constraints"
],
"specifiers": [
{
"kind": "local",
"local": "recordOutcome",
"exported": "recordOutcome"
},
{
"kind": "local",
"local": "ctx",
"exported": "ctx"
},
{
"kind": "local",
"local": "RuleOutcome",
"exported": "RuleOutcome"
},
{
"kind": "local",
"local": "fact",
"exported": "fact"
},
{
"kind": "local",
"local": "path",
"exported": "path"
},
{
"kind": "local",
"local": "ruleName",
"exported": "ruleName"
},
{
"kind": "local",
"local": "ruleOutcome",
"exported": "ruleOutcome"
},
{
"kind": "local",
"local": "validationOutcome",
"exported": "validationOutcome"
},
{
"kind": "local",
"local": "constraints",
"exported": "constraints"
}
]
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/helpers.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/helpers.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "helpers.es6",
"sourceFileName": "helpers.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "helpers"
},
"ignored": false,
"code": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.recordOutcome = recordOutcome;\n/* helpers.es6 */\n/**\n * Convenience method to add a rule outcome to the array of outcomes for a partiticular\n * model attribute or validation endpoint. It does so without a re-modify of the validation\n * outcome record if the error/warning has been recorded already.\n * This prevents unrequired re-activiation of the host rule\n *\n * @param ctx: the context of the `then` `nools` DSL environment\n * @param RuleOutcome: the RuleOutcome class definition\n * @param fact: the fact that activated the rule\n * @param path: the path of the validation endpoint in the validation outcome structure\n * @param ruleName: the name string of the rule (the same as the rule name in `nools` DSL)\n * @param validationOutcome: the value to set the endpoint's validation outcome to\n */\nfunction recordOutcome(ctx, RuleOutcome, fact, path, ruleName, ruleOutcome, validationOutcome) {\n if (!fact.validation[path].info[ruleName] || fact.validation[path].info[ruleName].type !== ruleOutcome.type && fact.validation[path].info[ruleName].msg !== ruleOutcome.msg) {\n ctx.modify(fact, function () {\n fact.validation[path].outcome = validationOutcome;\n fact.validation[path].info[ruleName] = ruleOutcome;\n });\n }\n}\n\n/**\n * Custom constraint to check if a string contains a date\n *\n * @param string: string to check\n * @param dateObj: the required date as a Date type\n * @return whether or not `string` includes the required date\n */\nfunction stringIncludesDate(value, dateObj) {\n if (dateObj instanceof Date) {\n const fullYear = dateObj.getFullYear();\n const month = dateObj.getMonth() + 1;\n const date = dateObj.getDate();\n\n const dateString = `${ fullYear }${ month >= 10 ? month : `0${ month }` }${ date >= 10 ? date : `0${ date }` }`;\n\n return value && value.includes(dateString);\n }\n\n return false;\n}\n\n/**\n * Custom constraint to check if an object has a particular attribute path\n *\n * @param rootObject: the object which is known to exist\n * @param path: string of path off the `rootObject` which is to be tested\n * @return whether or not the path exists\n */\nfunction hasPath(rootObject, path) {\n let obj = rootObject;\n const args = path.split('.');\n\n for (let i = 0; i < args.length; i++) {\n if (!obj || !obj.hasOwnProperty(args[i])) {\n return false;\n }\n obj = obj[args[i]];\n }\n return true;\n}\n\nconst constraints = exports.constraints = {\n stringIncludesDate,\n hasPath\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhlbHBlcnMuZXM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O1FBY2dCLGEsR0FBQSxhOzs7Ozs7Ozs7Ozs7Ozs7QUFBVCxTQUFTLGFBQVQsQ0FBdUIsR0FBdkIsRUFBNEIsV0FBNUIsRUFBeUMsSUFBekMsRUFBK0MsSUFBL0MsRUFBcUQsUUFBckQsRUFBK0QsV0FBL0QsRUFBNEUsaUJBQTVFLEVBQStGO0FBQ3BHLE1BQUksQ0FBQyxLQUFLLFVBQUwsQ0FBZ0IsSUFBaEIsRUFBc0IsSUFBdEIsQ0FBMkIsUUFBM0IsQ0FBRCxJQUNJLEtBQUssVUFBTCxDQUFnQixJQUFoQixFQUFzQixJQUF0QixDQUEyQixRQUEzQixFQUFxQyxJQUFyQyxLQUE4QyxZQUFZLElBQTFELElBQ0QsS0FBSyxVQUFMLENBQWdCLElBQWhCLEVBQXNCLElBQXRCLENBQTJCLFFBQTNCLEVBQXFDLEdBQXJDLEtBQTZDLFlBQVksR0FGaEUsRUFFc0U7QUFDcEUsUUFBSSxNQUFKLENBQVcsSUFBWCxFQUFpQixZQUFXO0FBQzFCLFdBQUssVUFBTCxDQUFnQixJQUFoQixFQUFzQixPQUF0QixHQUFnQyxpQkFBaEM7QUFDQSxXQUFLLFVBQUwsQ0FBZ0IsSUFBaEIsRUFBc0IsSUFBdEIsQ0FBMkIsUUFBM0IsSUFBdUMsV0FBdkM7QUFDRCxLQUhEO0FBSUQ7QUFDRjs7Ozs7Ozs7O0FBU0QsU0FBUyxrQkFBVCxDQUE0QixLQUE1QixFQUFtQyxPQUFuQyxFQUE0QztBQUMxQyxNQUFJLG1CQUFtQixJQUF2QixFQUE2QjtBQUMzQixVQUFNLFdBQVcsUUFBUSxXQUFSLEVBQWpCO0FBQ0EsVUFBTSxRQUFRLFFBQVEsUUFBUixLQUFxQixDQUFuQztBQUNBLFVBQU0sT0FBTyxRQUFRLE9BQVIsRUFBYjs7QUFFQSxVQUFNLGFBQWMsSUFBRSxRQUFTLEtBQUcsU0FBUyxFQUFWLEdBQWdCLEtBQWhCLEdBQXlCLEtBQUcsS0FBTSxHQUFFLEtBQUcsUUFBUSxFQUFULEdBQWUsSUFBZixHQUF1QixLQUFHLElBQUssR0FBRSxHQUF4Rzs7QUFFQSxXQUFPLFNBQVMsTUFBTSxRQUFOLENBQWUsVUFBZixDQUFoQjtBQUNEOztBQUVELFNBQU8sS0FBUDtBQUNEOzs7Ozs7Ozs7QUFTRCxTQUFTLE9BQVQsQ0FBaUIsVUFBakIsRUFBNkIsSUFBN0IsRUFBbUM7QUFDakMsTUFBSSxNQUFNLFVBQVY7QUFDQSxRQUFNLE9BQU8sS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFiOztBQUVBLE9BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxLQUFLLE1BQXpCLEVBQWlDLEdBQWpDLEVBQXNDO0FBQ3BDLFFBQUksQ0FBQyxHQUFELElBQVEsQ0FBQyxJQUFJLGNBQUosQ0FBbUIsS0FBSyxDQUFMLENBQW5CLENBQWIsRUFBMEM7QUFDeEMsYUFBTyxLQUFQO0FBQ0Q7QUFDRCxVQUFNLElBQUksS0FBSyxDQUFMLENBQUosQ0FBTjtBQUNEO0FBQ0QsU0FBTyxJQUFQO0FBQ0Q7O0FBRU0sTUFBTSxvQ0FBYztBQUN6QixvQkFEeUI7QUFFekI7QUFGeUIsQ0FBcEIiLCJmaWxlIjoiaGVscGVycy5lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBoZWxwZXJzLmVzNiAqL1xuLyoqXG4gKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gYWRkIGEgcnVsZSBvdXRjb21lIHRvIHRoZSBhcnJheSBvZiBvdXRjb21lcyBmb3IgYSBwYXJ0aXRpY3VsYXJcbiAqIG1vZGVsIGF0dHJpYnV0ZSBvciB2YWxpZGF0aW9uIGVuZHBvaW50LiBJdCBkb2VzIHNvIHdpdGhvdXQgYSByZS1tb2RpZnkgb2YgdGhlIHZhbGlkYXRpb25cbiAqIG91dGNvbWUgcmVjb3JkIGlmIHRoZSBlcnJvci93YXJuaW5nIGhhcyBiZWVuIHJlY29yZGVkIGFscmVhZHkuXG4gKiBUaGlzIHByZXZlbnRzIHVucmVxdWlyZWQgcmUtYWN0aXZpYXRpb24gb2YgdGhlIGhvc3QgcnVsZVxuICpcbiAqIEBwYXJhbSBjdHg6IHRoZSBjb250ZXh0IG9mIHRoZSBgdGhlbmAgYG5vb2xzYCBEU0wgZW52aXJvbm1lbnRcbiAqIEBwYXJhbSBSdWxlT3V0Y29tZTogdGhlIFJ1bGVPdXRjb21lIGNsYXNzIGRlZmluaXRpb25cbiAqIEBwYXJhbSBmYWN0OiB0aGUgZmFjdCB0aGF0IGFjdGl2YXRlZCB0aGUgcnVsZVxuICogQHBhcmFtIHBhdGg6IHRoZSBwYXRoIG9mIHRoZSB2YWxpZGF0aW9uIGVuZHBvaW50IGluIHRoZSB2YWxpZGF0aW9uIG91dGNvbWUgc3RydWN0dXJlXG4gKiBAcGFyYW0gcnVsZU5hbWU6IHRoZSBuYW1lIHN0cmluZyBvZiB0aGUgcnVsZSAodGhlIHNhbWUgYXMgdGhlIHJ1bGUgbmFtZSBpbiBgbm9vbHNgIERTTClcbiAqIEBwYXJhbSB2YWxpZGF0aW9uT3V0Y29tZTogdGhlIHZhbHVlIHRvIHNldCB0aGUgZW5kcG9pbnQncyB2YWxpZGF0aW9uIG91dGNvbWUgdG9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY29yZE91dGNvbWUoY3R4LCBSdWxlT3V0Y29tZSwgZmFjdCwgcGF0aCwgcnVsZU5hbWUsIHJ1bGVPdXRjb21lLCB2YWxpZGF0aW9uT3V0Y29tZSkge1xuICBpZiAoIWZhY3QudmFsaWRhdGlvbltwYXRoXS5pbmZvW3J1bGVOYW1lXVxuICAgICAgfHwgKGZhY3QudmFsaWRhdGlvbltwYXRoXS5pbmZvW3J1bGVOYW1lXS50eXBlICE9PSBydWxlT3V0Y29tZS50eXBlXG4gICAgICAmJiBmYWN0LnZhbGlkYXRpb25bcGF0aF0uaW5mb1tydWxlTmFtZV0ubXNnICE9PSBydWxlT3V0Y29tZS5tc2cpKSB7XG4gICAgY3R4Lm1vZGlmeShmYWN0LCBmdW5jdGlvbigpIHtcbiAgICAgIGZhY3QudmFsaWRhdGlvbltwYXRoXS5vdXRjb21lID0gdmFsaWRhdGlvbk91dGNvbWU7XG4gICAgICBmYWN0LnZhbGlkYXRpb25bcGF0aF0uaW5mb1tydWxlTmFtZV0gPSBydWxlT3V0Y29tZTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEN1c3RvbSBjb25zdHJhaW50IHRvIGNoZWNrIGlmIGEgc3RyaW5nIGNvbnRhaW5zIGEgZGF0ZVxuICpcbiAqIEBwYXJhbSBzdHJpbmc6IHN0cmluZyB0byBjaGVja1xuICogQHBhcmFtIGRhdGVPYmo6IHRoZSByZXF1aXJlZCBkYXRlIGFzIGEgRGF0ZSB0eXBlXG4gKiBAcmV0dXJuIHdoZXRoZXIgb3Igbm90IGBzdHJpbmdgIGluY2x1ZGVzIHRoZSByZXF1aXJlZCBkYXRlXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ0luY2x1ZGVzRGF0ZSh2YWx1ZSwgZGF0ZU9iaikge1xuICBpZiAoZGF0ZU9iaiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICBjb25zdCBmdWxsWWVhciA9IGRhdGVPYmouZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBtb250aCA9IGRhdGVPYmouZ2V0TW9udGgoKSArIDE7XG4gICAgY29uc3QgZGF0ZSA9IGRhdGVPYmouZ2V0RGF0ZSgpO1xuXG4gICAgY29uc3QgZGF0ZVN0cmluZyA9IGAke2Z1bGxZZWFyfSR7KG1vbnRoID49IDEwKSA/IG1vbnRoIDogYDAke21vbnRofWB9JHsoZGF0ZSA+PSAxMCkgPyBkYXRlIDogYDAke2RhdGV9YH1gO1xuXG4gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLmluY2x1ZGVzKGRhdGVTdHJpbmcpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEN1c3RvbSBjb25zdHJhaW50IHRvIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwYXJ0aWN1bGFyIGF0dHJpYnV0ZSBwYXRoXG4gKlxuICogQHBhcmFtIHJvb3RPYmplY3Q6IHRoZSBvYmplY3Qgd2hpY2ggaXMga25vd24gdG8gZXhpc3RcbiAqIEBwYXJhbSBwYXRoOiBzdHJpbmcgb2YgcGF0aCBvZmYgdGhlIGByb290T2JqZWN0YCB3aGljaCBpcyB0byBiZSB0ZXN0ZWRcbiAqIEByZXR1cm4gd2hldGhlciBvciBub3QgdGhlIHBhdGggZXhpc3RzXG4gKi9cbmZ1bmN0aW9uIGhhc1BhdGgocm9vdE9iamVjdCwgcGF0aCkge1xuICBsZXQgb2JqID0gcm9vdE9iamVjdDtcbiAgY29uc3QgYXJncyA9IHBhdGguc3BsaXQoJy4nKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIW9iaiB8fCAhb2JqLmhhc093blByb3BlcnR5KGFyZ3NbaV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9iaiA9IG9ialthcmdzW2ldXTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnN0cmFpbnRzID0ge1xuICBzdHJpbmdJbmNsdWRlc0RhdGUsXG4gIGhhc1BhdGgsXG59O1xuIl19",
"ast": null,
"map": {
"version": 3,
"sources": [
"helpers.es6"
],
"names": [],
"mappings": ";;;;;QAcgB,a,GAAA,a;;;;;;;;;;;;;;;AAAT,SAAS,aAAT,CAAuB,GAAvB,EAA4B,WAA5B,EAAyC,IAAzC,EAA+C,IAA/C,EAAqD,QAArD,EAA+D,WAA/D,EAA4E,iBAA5E,EAA+F;AACpG,MAAI,CAAC,KAAK,UAAL,CAAgB,IAAhB,EAAsB,IAAtB,CAA2B,QAA3B,CAAD,IACI,KAAK,UAAL,CAAgB,IAAhB,EAAsB,IAAtB,CAA2B,QAA3B,EAAqC,IAArC,KAA8C,YAAY,IAA1D,IACD,KAAK,UAAL,CAAgB,IAAhB,EAAsB,IAAtB,CAA2B,QAA3B,EAAqC,GAArC,KAA6C,YAAY,GAFhE,EAEsE;AACpE,QAAI,MAAJ,CAAW,IAAX,EAAiB,YAAW;AAC1B,WAAK,UAAL,CAAgB,IAAhB,EAAsB,OAAtB,GAAgC,iBAAhC;AACA,WAAK,UAAL,CAAgB,IAAhB,EAAsB,IAAtB,CAA2B,QAA3B,IAAuC,WAAvC;AACD,KAHD;AAID;AACF;;;;;;;;;AASD,SAAS,kBAAT,CAA4B,KAA5B,EAAmC,OAAnC,EAA4C;AAC1C,MAAI,mBAAmB,IAAvB,EAA6B;AAC3B,UAAM,WAAW,QAAQ,WAAR,EAAjB;AACA,UAAM,QAAQ,QAAQ,QAAR,KAAqB,CAAnC;AACA,UAAM,OAAO,QAAQ,OAAR,EAAb;;AAEA,UAAM,aAAc,IAAE,QAAS,KAAG,SAAS,EAAV,GAAgB,KAAhB,GAAyB,KAAG,KAAM,GAAE,KAAG,QAAQ,EAAT,GAAe,IAAf,GAAuB,KAAG,IAAK,GAAE,GAAxG;;AAEA,WAAO,SAAS,MAAM,QAAN,CAAe,UAAf,CAAhB;AACD;;AAED,SAAO,KAAP;AACD;;;;;;;;;AASD,SAAS,OAAT,CAAiB,UAAjB,EAA6B,IAA7B,EAAmC;AACjC,MAAI,MAAM,UAAV;AACA,QAAM,OAAO,KAAK,KAAL,CAAW,GAAX,CAAb;;AAEA,OAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,KAAK,MAAzB,EAAiC,GAAjC,EAAsC;AACpC,QAAI,CAAC,GAAD,IAAQ,CAAC,IAAI,cAAJ,CAAmB,KAAK,CAAL,CAAnB,CAAb,EAA0C;AACxC,aAAO,KAAP;AACD;AACD,UAAM,IAAI,KAAK,CAAL,CAAJ,CAAN;AACD;AACD,SAAO,IAAP;AACD;;AAEM,MAAM,oCAAc;AACzB,oBADyB;AAEzB;AAFyB,CAApB",
"file": "helpers.es6",
"sourcesContent": [
"/* helpers.es6 */\n/**\n * Convenience method to add a rule outcome to the array of outcomes for a partiticular\n * model attribute or validation endpoint. It does so without a re-modify of the validation\n * outcome record if the error/warning has been recorded already.\n * This prevents unrequired re-activiation of the host rule\n *\n * @param ctx: the context of the `then` `nools` DSL environment\n * @param RuleOutcome: the RuleOutcome class definition\n * @param fact: the fact that activated the rule\n * @param path: the path of the validation endpoint in the validation outcome structure\n * @param ruleName: the name string of the rule (the same as the rule name in `nools` DSL)\n * @param validationOutcome: the value to set the endpoint's validation outcome to\n */\nexport function recordOutcome(ctx, RuleOutcome, fact, path, ruleName, ruleOutcome, validationOutcome) {\n if (!fact.validation[path].info[ruleName]\n || (fact.validation[path].info[ruleName].type !== ruleOutcome.type\n && fact.validation[path].info[ruleName].msg !== ruleOutcome.msg)) {\n ctx.modify(fact, function() {\n fact.validation[path].outcome = validationOutcome;\n fact.validation[path].info[ruleName] = ruleOutcome;\n });\n }\n}\n\n/**\n * Custom constraint to check if a string contains a date\n *\n * @param string: string to check\n * @param dateObj: the required date as a Date type\n * @return whether or not `string` includes the required date\n */\nfunction stringIncludesDate(value, dateObj) {\n if (dateObj instanceof Date) {\n const fullYear = dateObj.getFullYear();\n const month = dateObj.getMonth() + 1;\n const date = dateObj.getDate();\n\n const dateString = `${fullYear}${(month >= 10) ? month : `0${month}`}${(date >= 10) ? date : `0${date}`}`;\n\n return value && value.includes(dateString);\n }\n\n return false;\n}\n\n/**\n * Custom constraint to check if an object has a particular attribute path\n *\n * @param rootObject: the object which is known to exist\n * @param path: string of path off the `rootObject` which is to be tested\n * @return whether or not the path exists\n */\nfunction hasPath(rootObject, path) {\n let obj = rootObject;\n const args = path.split('.');\n\n for (let i = 0; i < args.length; i++) {\n if (!obj || !obj.hasOwnProperty(args[i])) {\n return false;\n }\n obj = obj[args[i]];\n }\n return true;\n}\n\nexport const constraints = {\n stringIncludesDate,\n hasPath,\n};\n"
]
},
"mtime": 1466924963049
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/src/__tests__/helpers.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [
"interopRequireWildcard"
],
"marked": [],
"modules": {
"imports": [
{
"source": "chai",
"imported": [
"expect"
],
"specifiers": [
{
"kind": "named",
"imported": "expect",
"local": "expect"
}
]
},
{
"source": "mocha",
"imported": [
"describe",
"it"
],
"specifiers": [
{
"kind": "named",
"imported": "describe",
"local": "describe"
},
{
"kind": "named",
"imported": "it",
"local": "it"
}
]
},
{
"source": "../helpers",
"imported": [
"*"
],
"specifiers": [
{
"kind": "namespace",
"local": "helpers"
}
]
}
],
"exports": {
"exported": [],
"specifiers": []
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/__tests__/helpers.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/__tests__/helpers.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "helpers.es6",
"sourceFileName": "helpers.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "helpers"
},
"ignored": false,
"code": "'use strict';\n\nvar _chai = require('chai');\n\nvar _mocha = require('mocha');\n\nvar _helpers = require('../helpers');\n\nvar helpers = babelHelpers.interopRequireWildcard(_helpers);\n\n\n(0, _mocha.describe)('Helpers library', () => {\n (0, _mocha.describe)('#recordOutcome()', () => {\n (0, _mocha.it)('should record a new error for a validation outcome the first time');\n (0, _mocha.it)('should not record the error for a validation outcome if it alread exists');\n });\n\n (0, _mocha.describe)('#constraints.hasPath()', () => {\n const rootObject = {\n foo: 'Hello Foo',\n bar: {\n baz: {\n test: 'Hello Tests!'\n }\n }\n };\n\n (0, _mocha.it)('should return true for a path that exists', () => {\n (0, _chai.expect)(helpers.constraints.hasPath(rootObject, 'bar.baz.test')).to.be.true;\n (0, _chai.expect)(helpers.constraints.hasPath(rootObject, 'foo')).to.be.true;\n });\n\n (0, _mocha.it)('should return flase for a path that does not exist', () => {\n (0, _chai.expect)(helpers.constraints.hasPath(rootObject, 'foo.bar')).to.be.false;\n (0, _chai.expect)(helpers.constraints.hasPath(rootObject, 'bar.test')).to.be.false;\n });\n });\n\n (0, _mocha.describe)('#constraints.stringIncludesDate()', () => {\n const date1 = new Date('2016-10-12');\n const date2 = new Date('2016-09-12');\n const date3 = new Date('2016-10-09');\n\n (0, _mocha.it)('should return true if date (in numbers only) is contained within string', () => {\n (0, _chai.expect)(helpers.constraints.stringIncludesDate('20161012021203123123123903', date1)).to.be.true;\n (0, _chai.expect)(helpers.constraints.stringIncludesDate('20160912021203123123123903', date2)).to.be.true;\n (0, _chai.expect)(helpers.constraints.stringIncludesDate('20161009021203123123123903', date3)).to.be.true;\n });\n\n (0, _mocha.it)('should return false if date is not contained within string', () => {\n (0, _chai.expect)(helpers.constraints.stringIncludesDate('20171012021203123123123903', date1)).to.be.false;\n (0, _chai.expect)(helpers.constraints.stringIncludesDate('20170912021203123123123903', date2)).to.be.false;\n (0, _chai.expect)(helpers.constraints.stringIncludesDate('20171009021203123123123903', date3)).to.be.false;\n });\n });\n}); /* eslint max-len:0 */\n/* eslint no-unused-expressions:0 */\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhlbHBlcnMuZXM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0E7O0FBQ0E7O0FBRUE7O0lBQVksTzs7O0FBRVoscUJBQVMsaUJBQVQsRUFBNEIsTUFBTTtBQUNoQyx1QkFBUyxrQkFBVCxFQUE2QixNQUFNO0FBQ2pDLG1CQUFHLG1FQUFIO0FBQ0EsbUJBQUcsMEVBQUg7QUFDRCxHQUhEOztBQUtBLHVCQUFTLHdCQUFULEVBQW1DLE1BQU07QUFDdkMsVUFBTSxhQUFhO0FBQ2pCLFdBQUssV0FEWTtBQUVqQixXQUFLO0FBQ0gsYUFBSztBQUNILGdCQUFNO0FBREg7QUFERjtBQUZZLEtBQW5COztBQVNBLG1CQUFHLDJDQUFILEVBQWdELE1BQU07QUFDcEQsd0JBQU8sUUFBUSxXQUFSLENBQW9CLE9BQXBCLENBQTRCLFVBQTVCLEVBQXdDLGNBQXhDLENBQVAsRUFBZ0UsRUFBaEUsQ0FBbUUsRUFBbkUsQ0FBc0UsSUFBdEU7QUFDQSx3QkFBTyxRQUFRLFdBQVIsQ0FBb0IsT0FBcEIsQ0FBNEIsVUFBNUIsRUFBd0MsS0FBeEMsQ0FBUCxFQUF1RCxFQUF2RCxDQUEwRCxFQUExRCxDQUE2RCxJQUE3RDtBQUNELEtBSEQ7O0FBS0EsbUJBQUcsb0RBQUgsRUFBeUQsTUFBTTtBQUM3RCx3QkFBTyxRQUFRLFdBQVIsQ0FBb0IsT0FBcEIsQ0FBNEIsVUFBNUIsRUFBd0MsU0FBeEMsQ0FBUCxFQUEyRCxFQUEzRCxDQUE4RCxFQUE5RCxDQUFpRSxLQUFqRTtBQUNBLHdCQUFPLFFBQVEsV0FBUixDQUFvQixPQUFwQixDQUE0QixVQUE1QixFQUF3QyxVQUF4QyxDQUFQLEVBQTRELEVBQTVELENBQStELEVBQS9ELENBQWtFLEtBQWxFO0FBQ0QsS0FIRDtBQUlELEdBbkJEOztBQXFCQSx1QkFBUyxtQ0FBVCxFQUE4QyxNQUFNO0FBQ2xELFVBQU0sUUFBUSxJQUFJLElBQUosQ0FBUyxZQUFULENBQWQ7QUFDQSxVQUFNLFFBQVEsSUFBSSxJQUFKLENBQVMsWUFBVCxDQUFkO0FBQ0EsVUFBTSxRQUFRLElBQUksSUFBSixDQUFTLFlBQVQsQ0FBZDs7QUFFQSxtQkFBRyx5RUFBSCxFQUE4RSxNQUFNO0FBQ2xGLHdCQUFPLFFBQVEsV0FBUixDQUFvQixrQkFBcEIsQ0FBdUMsNEJBQXZDLEVBQXFFLEtBQXJFLENBQVAsRUFBb0YsRUFBcEYsQ0FBdUYsRUFBdkYsQ0FBMEYsSUFBMUY7QUFDQSx3QkFBTyxRQUFRLFdBQVIsQ0FBb0Isa0JBQXBCLENBQXVDLDRCQUF2QyxFQUFxRSxLQUFyRSxDQUFQLEVBQW9GLEVBQXBGLENBQXVGLEVBQXZGLENBQTBGLElBQTFGO0FBQ0Esd0JBQU8sUUFBUSxXQUFSLENBQW9CLGtCQUFwQixDQUF1Qyw0QkFBdkMsRUFBcUUsS0FBckUsQ0FBUCxFQUFvRixFQUFwRixDQUF1RixFQUF2RixDQUEwRixJQUExRjtBQUNELEtBSkQ7O0FBTUEsbUJBQUcsNERBQUgsRUFBaUUsTUFBTTtBQUNyRSx3QkFBTyxRQUFRLFdBQVIsQ0FBb0Isa0JBQXBCLENBQXVDLDRCQUF2QyxFQUFxRSxLQUFyRSxDQUFQLEVBQW9GLEVBQXBGLENBQXVGLEVBQXZGLENBQTBGLEtBQTFGO0FBQ0Esd0JBQU8sUUFBUSxXQUFSLENBQW9CLGtCQUFwQixDQUF1Qyw0QkFBdkMsRUFBcUUsS0FBckUsQ0FBUCxFQUFvRixFQUFwRixDQUF1RixFQUF2RixDQUEwRixLQUExRjtBQUNBLHdCQUFPLFFBQVEsV0FBUixDQUFvQixrQkFBcEIsQ0FBdUMsNEJBQXZDLEVBQXFFLEtBQXJFLENBQVAsRUFBb0YsRUFBcEYsQ0FBdUYsRUFBdkYsQ0FBMEYsS0FBMUY7QUFDRCxLQUpEO0FBS0QsR0FoQkQ7QUFpQkQsQ0E1Q0QsRSIsImZpbGUiOiJoZWxwZXJzLmVzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBtYXgtbGVuOjAgKi9cbi8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6MCAqL1xuXG5pbXBvcnQgeyBleHBlY3QgfSBmcm9tICdjaGFpJztcbmltcG9ydCB7IGRlc2NyaWJlLCBpdCB9IGZyb20gJ21vY2hhJztcblxuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tICcuLi9oZWxwZXJzJztcblxuZGVzY3JpYmUoJ0hlbHBlcnMgbGlicmFyeScsICgpID0+IHtcbiAgZGVzY3JpYmUoJyNyZWNvcmRPdXRjb21lKCknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZWNvcmQgYSBuZXcgZXJyb3IgZm9yIGEgdmFsaWRhdGlvbiBvdXRjb21lIHRoZSBmaXJzdCB0aW1lJyk7XG4gICAgaXQoJ3Nob3VsZCBub3QgcmVjb3JkIHRoZSBlcnJvciBmb3IgYSB2YWxpZGF0aW9uIG91dGNvbWUgaWYgaXQgYWxyZWFkIGV4aXN0cycpO1xuICB9KTtcblxuICBkZXNjcmliZSgnI2NvbnN0cmFpbnRzLmhhc1BhdGgoKScsICgpID0+IHtcbiAgICBjb25zdCByb290T2JqZWN0ID0ge1xuICAgICAgZm9vOiAnSGVsbG8gRm9vJyxcbiAgICAgIGJhcjoge1xuICAgICAgICBiYXo6IHtcbiAgICAgICAgICB0ZXN0OiAnSGVsbG8gVGVzdHMhJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGEgcGF0aCB0aGF0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGV4cGVjdChoZWxwZXJzLmNvbnN0cmFpbnRzLmhhc1BhdGgocm9vdE9iamVjdCwgJ2Jhci5iYXoudGVzdCcpKS50by5iZS50cnVlO1xuICAgICAgZXhwZWN0KGhlbHBlcnMuY29uc3RyYWludHMuaGFzUGF0aChyb290T2JqZWN0LCAnZm9vJykpLnRvLmJlLnRydWU7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmbGFzZSBmb3IgYSBwYXRoIHRoYXQgZG9lcyBub3QgZXhpc3QnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaGVscGVycy5jb25zdHJhaW50cy5oYXNQYXRoKHJvb3RPYmplY3QsICdmb28uYmFyJykpLnRvLmJlLmZhbHNlO1xuICAgICAgZXhwZWN0KGhlbHBlcnMuY29uc3RyYWludHMuaGFzUGF0aChyb290T2JqZWN0LCAnYmFyLnRlc3QnKSkudG8uYmUuZmFsc2U7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCcjY29uc3RyYWludHMuc3RyaW5nSW5jbHVkZXNEYXRlKCknLCAoKSA9PiB7XG4gICAgY29uc3QgZGF0ZTEgPSBuZXcgRGF0ZSgnMjAxNi0xMC0xMicpO1xuICAgIGNvbnN0IGRhdGUyID0gbmV3IERhdGUoJzIwMTYtMDktMTInKTtcbiAgICBjb25zdCBkYXRlMyA9IG5ldyBEYXRlKCcyMDE2LTEwLTA5Jyk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGlmIGRhdGUgKGluIG51bWJlcnMgb25seSkgaXMgY29udGFpbmVkIHdpdGhpbiBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaGVscGVycy5jb25zdHJhaW50cy5zdHJpbmdJbmNsdWRlc0RhdGUoJzIwMTYxMDEyMDIxMjAzMTIzMTIzMTIzOTAzJywgZGF0ZTEpKS50by5iZS50cnVlO1xuICAgICAgZXhwZWN0KGhlbHBlcnMuY29uc3RyYWludHMuc3RyaW5nSW5jbHVkZXNEYXRlKCcyMDE2MDkxMjAyMTIwMzEyMzEyMzEyMzkwMycsIGRhdGUyKSkudG8uYmUudHJ1ZTtcbiAgICAgIGV4cGVjdChoZWxwZXJzLmNvbnN0cmFpbnRzLnN0cmluZ0luY2x1ZGVzRGF0ZSgnMjAxNjEwMDkwMjEyMDMxMjMxMjMxMjM5MDMnLCBkYXRlMykpLnRvLmJlLnRydWU7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBpZiBkYXRlIGlzIG5vdCBjb250YWluZWQgd2l0aGluIHN0cmluZycsICgpID0+IHtcbiAgICAgIGV4cGVjdChoZWxwZXJzLmNvbnN0cmFpbnRzLnN0cmluZ0luY2x1ZGVzRGF0ZSgnMjAxNzEwMTIwMjEyMDMxMjMxMjMxMjM5MDMnLCBkYXRlMSkpLnRvLmJlLmZhbHNlO1xuICAgICAgZXhwZWN0KGhlbHBlcnMuY29uc3RyYWludHMuc3RyaW5nSW5jbHVkZXNEYXRlKCcyMDE3MDkxMjAyMTIwMzEyMzEyMzEyMzkwMycsIGRhdGUyKSkudG8uYmUuZmFsc2U7XG4gICAgICBleHBlY3QoaGVscGVycy5jb25zdHJhaW50cy5zdHJpbmdJbmNsdWRlc0RhdGUoJzIwMTcxMDA5MDIxMjAzMTIzMTIzMTIzOTAzJywgZGF0ZTMpKS50by5iZS5mYWxzZTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==",
"ast": null,
"map": {
"version": 3,
"sources": [
"helpers.es6"
],
"names": [],
"mappings": ";;AAGA;;AACA;;AAEA;;IAAY,O;;;AAEZ,qBAAS,iBAAT,EAA4B,MAAM;AAChC,uBAAS,kBAAT,EAA6B,MAAM;AACjC,mBAAG,mEAAH;AACA,mBAAG,0EAAH;AACD,GAHD;;AAKA,uBAAS,wBAAT,EAAmC,MAAM;AACvC,UAAM,aAAa;AACjB,WAAK,WADY;AAEjB,WAAK;AACH,aAAK;AACH,gBAAM;AADH;AADF;AAFY,KAAnB;;AASA,mBAAG,2CAAH,EAAgD,MAAM;AACpD,wBAAO,QAAQ,WAAR,CAAoB,OAApB,CAA4B,UAA5B,EAAwC,cAAxC,CAAP,EAAgE,EAAhE,CAAmE,EAAnE,CAAsE,IAAtE;AACA,wBAAO,QAAQ,WAAR,CAAoB,OAApB,CAA4B,UAA5B,EAAwC,KAAxC,CAAP,EAAuD,EAAvD,CAA0D,EAA1D,CAA6D,IAA7D;AACD,KAHD;;AAKA,mBAAG,oDAAH,EAAyD,MAAM;AAC7D,wBAAO,QAAQ,WAAR,CAAoB,OAApB,CAA4B,UAA5B,EAAwC,SAAxC,CAAP,EAA2D,EAA3D,CAA8D,EAA9D,CAAiE,KAAjE;AACA,wBAAO,QAAQ,WAAR,CAAoB,OAApB,CAA4B,UAA5B,EAAwC,UAAxC,CAAP,EAA4D,EAA5D,CAA+D,EAA/D,CAAkE,KAAlE;AACD,KAHD;AAID,GAnBD;;AAqBA,uBAAS,mCAAT,EAA8C,MAAM;AAClD,UAAM,QAAQ,IAAI,IAAJ,CAAS,YAAT,CAAd;AACA,UAAM,QAAQ,IAAI,IAAJ,CAAS,YAAT,CAAd;AACA,UAAM,QAAQ,IAAI,IAAJ,CAAS,YAAT,CAAd;;AAEA,mBAAG,yEAAH,EAA8E,MAAM;AAClF,wBAAO,QAAQ,WAAR,CAAoB,kBAApB,CAAuC,4BAAvC,EAAqE,KAArE,CAAP,EAAoF,EAApF,CAAuF,EAAvF,CAA0F,IAA1F;AACA,wBAAO,QAAQ,WAAR,CAAoB,kBAApB,CAAuC,4BAAvC,EAAqE,KAArE,CAAP,EAAoF,EAApF,CAAuF,EAAvF,CAA0F,IAA1F;AACA,wBAAO,QAAQ,WAAR,CAAoB,kBAApB,CAAuC,4BAAvC,EAAqE,KAArE,CAAP,EAAoF,EAApF,CAAuF,EAAvF,CAA0F,IAA1F;AACD,KAJD;;AAMA,mBAAG,4DAAH,EAAiE,MAAM;AACrE,wBAAO,QAAQ,WAAR,CAAoB,kBAApB,CAAuC,4BAAvC,EAAqE,KAArE,CAAP,EAAoF,EAApF,CAAuF,EAAvF,CAA0F,KAA1F;AACA,wBAAO,QAAQ,WAAR,CAAoB,kBAApB,CAAuC,4BAAvC,EAAqE,KAArE,CAAP,EAAoF,EAApF,CAAuF,EAAvF,CAA0F,KAA1F;AACA,wBAAO,QAAQ,WAAR,CAAoB,kBAApB,CAAuC,4BAAvC,EAAqE,KAArE,CAAP,EAAoF,EAApF,CAAuF,EAAvF,CAA0F,KAA1F;AACD,KAJD;AAKD,GAhBD;AAiBD,CA5CD,E",
"file": "helpers.es6",
"sourcesContent": [
"/* eslint max-len:0 */\n/* eslint no-unused-expressions:0 */\n\nimport { expect } from 'chai';\nimport { describe, it } from 'mocha';\n\nimport * as helpers from '../helpers';\n\ndescribe('Helpers library', () => {\n describe('#recordOutcome()', () => {\n it('should record a new error for a validation outcome the first time');\n it('should not record the error for a validation outcome if it alread exists');\n });\n\n describe('#constraints.hasPath()', () => {\n const rootObject = {\n foo: 'Hello Foo',\n bar: {\n baz: {\n test: 'Hello Tests!',\n },\n },\n };\n\n it('should return true for a path that exists', () => {\n expect(helpers.constraints.hasPath(rootObject, 'bar.baz.test')).to.be.true;\n expect(helpers.constraints.hasPath(rootObject, 'foo')).to.be.true;\n });\n\n it('should return flase for a path that does not exist', () => {\n expect(helpers.constraints.hasPath(rootObject, 'foo.bar')).to.be.false;\n expect(helpers.constraints.hasPath(rootObject, 'bar.test')).to.be.false;\n });\n });\n\n describe('#constraints.stringIncludesDate()', () => {\n const date1 = new Date('2016-10-12');\n const date2 = new Date('2016-09-12');\n const date3 = new Date('2016-10-09');\n\n it('should return true if date (in numbers only) is contained within string', () => {\n expect(helpers.constraints.stringIncludesDate('20161012021203123123123903', date1)).to.be.true;\n expect(helpers.constraints.stringIncludesDate('20160912021203123123123903', date2)).to.be.true;\n expect(helpers.constraints.stringIncludesDate('20161009021203123123123903', date3)).to.be.true;\n });\n\n it('should return false if date is not contained within string', () => {\n expect(helpers.constraints.stringIncludesDate('20171012021203123123123903', date1)).to.be.false;\n expect(helpers.constraints.stringIncludesDate('20170912021203123123123903', date2)).to.be.false;\n expect(helpers.constraints.stringIncludesDate('20171009021203123123123903', date3)).to.be.false;\n });\n });\n});\n"
]
},
"mtime": 1467055671957
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/src/__tests__/two-models.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [
"interopRequireWildcard"
],
"marked": [],
"modules": {
"imports": [
{
"source": "chai",
"imported": [
"expect"
],
"specifiers": [
{
"kind": "named",
"imported": "expect",
"local": "expect"
}
]
},
{
"source": "mocha",
"imported": [
"describe",
"it"
],
"specifiers": [
{
"kind": "named",
"imported": "describe",
"local": "describe"
},
{
"kind": "named",
"imported": "it",
"local": "it"
}
]
},
{
"source": "..",
"imported": [
"ValidationEngine"
],
"specifiers": [
{
"kind": "named",
"imported": "ValidationEngine",
"local": "ValidationEngine"
}
]
},
{
"source": "../helpers",
"imported": [
"*"
],
"specifiers": [
{
"kind": "namespace",
"local": "helpers"
}
]
}
],
"exports": {
"exported": [],
"specifiers": []
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/__tests__/two-models.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/__tests__/two-models.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "two-models.es6",
"sourceFileName": "two-models.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "two-models"
},
"ignored": false,
"code": "'use strict';\n\nvar _chai = require('chai');\n\nvar _mocha = require('mocha');\n\nvar _ = require('..');\n\nvar _helpers = require('../helpers');\n\nvar helpers = babelHelpers.interopRequireWildcard(_helpers);\n/* eslint max-len:0 */\n/* eslint no-unused-expressions:0 */\n\nfunction makeFilename(name) {\n return `${ __dirname }/../../examples/${ name }`;\n}\n\nconst engine = new _.ValidationEngine(makeFilename('rules.nools'));\n\n(0, _mocha.describe)('Two models example test', () => {\n (0, _mocha.describe)('All valid', () => {\n const workitemModel = new engine.models.WorkitemModel({\n invoiceDate: new Date('2020-07-10'),\n basNumber: '2020071012'\n }, {\n 'workitem.invoiceDate': new engine.outcomes.ValidationOutcome(),\n 'workitem.basNumber': new engine.outcomes.ValidationOutcome(),\n workitem: new engine.outcomes.ValidationOutcome(),\n 'custom.workitem.checkout': new engine.outcomes.ValidationOutcome()\n });\n\n const appStateModel = new engine.models.AppStateModel({\n online: true,\n userType: 'user'\n }, {});\n\n (0, _mocha.it)('all outcomes should be valid', done => {\n engine.validate([workitemModel, appStateModel]).then(() => {\n (0, _chai.expect)(workitemModel.validation['workitem.invoiceDate'].outcome).to.equal('valid');\n (0, _chai.expect)(workitemModel.validation['workitem.basNumber'].outcome).to.equal('valid');\n (0, _chai.expect)(workitemModel.validation.workitem.outcome).to.equal('valid');\n (0, _chai.expect)(workitemModel.validation['custom.workitem.checkout'].outcome).to.equal('valid');\n\n done();\n }).catch(done);\n });\n\n (0, _mocha.it)('all info objects should be empty', done => {\n engine.validate([workitemModel, appStateModel]).then(() => {\n (0, _chai.expect)(workitemModel.validation['workitem.invoiceDate'].info).to.be.empty;\n (0, _chai.expect)(workitemModel.validation['workitem.basNumber'].info).to.be.empty;\n (0, _chai.expect)(workitemModel.validation.workitem.info).to.be.empty;\n (0, _chai.expect)(workitemModel.validation['custom.workitem.checkout'].info).to.be.empty;\n\n done();\n }).catch(done);\n });\n });\n\n (0, _mocha.describe)('Simple rule invalid, with rule outcome dependence', () => {\n const workitemModel = new engine.models.WorkitemModel({\n invoiceDate: new Date('2020-07-10'),\n basNumber: '2020071112'\n }, {\n 'workitem.invoiceDate': new engine.outcomes.ValidationOutcome(),\n 'workitem.basNumber': new engine.outcomes.ValidationOutcome(),\n workitem: new engine.outcomes.ValidationOutcome(),\n 'custom.workitem.checkout': new engine.outcomes.ValidationOutcome()\n });\n\n const appStateModel = new engine.models.AppStateModel({\n online: true,\n userType: 'user'\n }, {});\n\n (0, _mocha.it)('should report three errors', done => {\n engine.validate([workitemModel, appStateModel]).then(() => {\n (0, _chai.expect)(workitemModel.validation['workitem.invoiceDate'].outcome, '[outcome] - invoiceDate').to.equal('valid');\n (0, _chai.expect)(workitemModel.validation['workitem.basNumber'].outcome, '[outcome] - basNumber').to.equal('invalid');\n (0, _chai.expect)(workitemModel.validation.workitem.outcome, '[outcome] - workitem').to.equal('invalid');\n (0, _chai.expect)(workitemModel.validation['custom.workitem.checkout'].outcome, '[outcome] - custom workitem checkout').to.equal('invalid');\n\n (0, _chai.expect)(workitemModel.validation['workitem.invoiceDate'].info).to.be.empty;\n\n (0, _chai.expect)(workitemModel.validation['workitem.basNumber'].info.basNumberHasInvoiceDate).to.exist;\n (0, _chai.expect)(workitemModel.validation['workitem.basNumber'].info.basNumberHasInvoiceDate.type).to.equal('error');\n\n (0, _chai.expect)(workitemModel.validation.workitem.info.workitemIsValid).to.exist;\n (0, _chai.expect)(workitemModel.validation.workitem.info.workitemIsValid.type).to.equal('error');\n\n (0, _chai.expect)(workitemModel.validation['custom.workitem.checkout'].info.workitemCanCheckout).to.exist;\n (0, _chai.expect)(workitemModel.validation['custom.workitem.checkout'].info.workitemCanCheckout.type).to.equal('error');\n\n done();\n }).catch(done);\n });\n });\n\n (0, _mocha.describe)('Incomplete field, with rule outcome dependence', () => {\n const workitemModel = new engine.models.WorkitemModel({\n invoiceDate: '',\n basNumber: '2020071112'\n }, {\n 'workitem.invoiceDate': new engine.outcomes.ValidationOutcome(),\n 'workitem.basNumber': new engine.outcomes.ValidationOutcome(),\n workitem: new engine.outcomes.ValidationOutcome(),\n 'custom.workitem.checkout': new engine.outcomes.ValidationOutcome()\n });\n\n const appStateModel = new engine.models.AppStateModel({\n online: true,\n userType: 'user'\n }, {});\n\n (0, _mocha.it)('should report incomplete', done => {\n engine.validate([workitemModel, appStateModel]).then(() => {\n (0, _chai.expect)(workitemModel.validation['workitem.invoiceDate'].outcome, '[outcome] - invoiceDate').to.equal('incomplete');\n (0, _chai.expect)(workitemModel.validation['workitem.basNumber'].outcome, '[outcome] - basNumber').to.equal('valid');\n (0, _chai.expect)(workitemModel.validation.workitem.outcome, '[outcome] - workitem').to.equal('incomplete');\n (0, _chai.expect)(workitemModel.validation['custom.workitem.checkout'].outcome, '[outcome] - custom workitem checkout').to.equal('invalid');\n\n (0, _chai.expect)(workitemModel.validation['workitem.invoiceDate'].info.invoiceDateIsComplete).to.exist;\n (0, _chai.expect)(workitemModel.validation['workitem.invoiceDate'].info.invoiceDateIsComplete.type).to.equal('warning');\n\n (0, _chai.expect)(workitemModel.validation['workitem.basNumber'].info).to.be.empty;\n\n (0, _chai.expect)(workitemModel.validation.workitem.info.workitemIsComplete).to.exist;\n (0, _chai.expect)(workitemModel.validation.workitem.info.workitemIsComplete.type).to.equal('warning');\n\n (0, _chai.expect)(workitemModel.validation['custom.workitem.checkout'].info.workitemCanCheckout).to.exist;\n (0, _chai.expect)(workitemModel.validation['custom.workitem.checkout'].info.workitemCanCheckout.type).to.equal('error');\n\n done();\n }).catch(done);\n });\n });\n});\n//# sourceMappingURL=data:application/json;base64,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QWxFOztBQUVBLDBCQUFPLGNBQWMsVUFBZCxDQUF5QixRQUF6QixDQUFrQyxJQUFsQyxDQUF1QyxrQkFBOUMsRUFBa0UsRUFBbEUsQ0FBcUUsS0FBckU7QUFDQSwwQkFBTyxjQUFjLFVBQWQsQ0FBeUIsUUFBekIsQ0FBa0MsSUFBbEMsQ0FBdUMsa0JBQXZDLENBQTBELElBQWpFLEVBQXVFLEVBQXZFLENBQTBFLEtBQTFFLENBQWdGLFNBQWhGOztBQUVBLDBCQUFPLGNBQWMsVUFBZCxDQUF5QiwwQkFBekIsRUFBcUQsSUFBckQsQ0FBMEQsbUJBQWpFLEVBQXNGLEVBQXRGLENBQXlGLEtBQXpGO0FBQ0EsMEJBQU8sY0FBYyxVQUFkLENBQXlCLDBCQUF6QixFQUFxRCxJQUFyRCxDQUEwRCxtQkFBMUQsQ0FBOEUsSUFBckYsRUFBMkYsRUFBM0YsQ0FBOEYsS0FBOUYsQ0FBb0csT0FBcEc7O0FBRUE7QUFDRCxPQW5CSCxFQW1CSyxLQW5CTCxDQW1CVyxJQW5CWDtBQW9CRCxLQXJCRDtBQXNCRCxHQXRDRDtBQXVDRCxDQXpIRCIsImZpbGUiOiJ0d28tbW9kZWxzLmVzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBtYXgtbGVuOjAgKi9cbi8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6MCAqL1xuXG5pbXBvcnQgeyBleHBlY3QgfSBmcm9tICdjaGFpJztcbmltcG9ydCB7IGRlc2NyaWJlLCBpdCB9IGZyb20gJ21vY2hhJztcblxuaW1wb3J0IHsgVmFsaWRhdGlvbkVuZ2luZSB9IGZyb20gJy4uJztcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnLi4vaGVscGVycyc7XG5cbmZ1bmN0aW9uIG1ha2VGaWxlbmFtZShuYW1lKSB7XG4gIHJldHVybiBgJHtfX2Rpcm5hbWV9Ly4uLy4uL2V4YW1wbGVzLyR7bmFtZX1gO1xufVxuXG5jb25zdCBlbmdpbmUgPSBuZXcgVmFsaWRhdGlvbkVuZ2luZShtYWtlRmlsZW5hbWUoJ3J1bGVzLm5vb2xzJykpO1xuXG5kZXNjcmliZSgnVHdvIG1vZGVscyBleGFtcGxlIHRlc3QnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdBbGwgdmFsaWQnLCAoKSA9PiB7XG4gICAgY29uc3Qgd29ya2l0ZW1Nb2RlbCA9IG5ldyBlbmdpbmUubW9kZWxzLldvcmtpdGVtTW9kZWwoe1xuICAgICAgaW52b2ljZURhdGU6IG5ldyBEYXRlKCcyMDIwLTA3LTEwJyksXG4gICAgICBiYXNOdW1iZXI6ICcyMDIwMDcxMDEyJyxcbiAgICB9LCB7XG4gICAgICAnd29ya2l0ZW0uaW52b2ljZURhdGUnOiBuZXcgZW5naW5lLm91dGNvbWVzLlZhbGlkYXRpb25PdXRjb21lKCksXG4gICAgICAnd29ya2l0ZW0uYmFzTnVtYmVyJzogbmV3IGVuZ2luZS5vdXRjb21lcy5WYWxpZGF0aW9uT3V0Y29tZSgpLFxuICAgICAgd29ya2l0ZW06IG5ldyBlbmdpbmUub3V0Y29tZXMuVmFsaWRhdGlvbk91dGNvbWUoKSxcbiAgICAgICdjdXN0b20ud29ya2l0ZW0uY2hlY2tvdXQnOiBuZXcgZW5naW5lLm91dGNvbWVzLlZhbGlkYXRpb25PdXRjb21lKCksXG4gICAgfSk7XG5cbiAgICBjb25zdCBhcHBTdGF0ZU1vZGVsID0gbmV3IGVuZ2luZS5tb2RlbHMuQXBwU3RhdGVNb2RlbCh7XG4gICAgICBvbmxpbmU6IHRydWUsXG4gICAgICB1c2VyVHlwZTogJ3VzZXInLFxuICAgIH0sIHt9KTtcblxuICAgIGl0KCdhbGwgb3V0Y29tZXMgc2hvdWxkIGJlIHZhbGlkJywgKGRvbmUpID0+IHtcbiAgICAgIGVuZ2luZS52YWxpZGF0ZShbd29ya2l0ZW1Nb2RlbCwgYXBwU3RhdGVNb2RlbF0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBleHBlY3Qod29ya2l0ZW1Nb2RlbC52YWxpZGF0aW9uWyd3b3JraXRlbS5pbnZvaWNlRGF0ZSddLm91dGNvbWUpLnRvLmVxdWFsKCd2YWxpZCcpO1xuICAgICAgICAgIGV4cGVjdCh3b3JraXRlbU1vZGVsLnZhbGlkYXRpb25bJ3dvcmtpdGVtLmJhc051bWJlciddLm91dGNvbWUpLnRvLmVxdWFsKCd2YWxpZCcpO1xuICAgICAgICAgIGV4cGVjdCh3b3JraXRlbU1vZGVsLnZhbGlkYXRpb24ud29ya2l0ZW0ub3V0Y29tZSkudG8uZXF1YWwoJ3ZhbGlkJyk7XG4gICAgICAgICAgZXhwZWN0KHdvcmtpdGVtTW9kZWwudmFsaWRhdGlvblsnY3VzdG9tLndvcmtpdGVtLmNoZWNrb3V0J10ub3V0Y29tZSkudG8uZXF1YWwoJ3ZhbGlkJyk7XG5cbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pLmNhdGNoKGRvbmUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FsbCBpbmZvIG9iamVjdHMgc2hvdWxkIGJlIGVtcHR5JywgKGRvbmUpID0+IHtcbiAgICAgIGVuZ2luZS52YWxpZGF0ZShbd29ya2l0ZW1Nb2RlbCwgYXBwU3RhdGVNb2RlbF0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBleHBlY3Qod29ya2l0ZW1Nb2RlbC52YWxpZGF0aW9uWyd3b3JraXRlbS5pbnZvaWNlRGF0ZSddLmluZm8pLnRvLmJlLmVtcHR5O1xuICAgICAgICAgIGV4cGVjdCh3b3JraXRlbU1vZGVsLnZhbGlkYXRpb25bJ3dvcmtpdGVtLmJhc051bWJlciddLmluZm8pLnRvLmJlLmVtcHR5O1xuICAgICAgICAgIGV4cGVjdCh3b3JraXRlbU1vZGVsLnZhbGlkYXRpb24ud29ya2l0ZW0uaW5mbykudG8uYmUuZW1wdHk7XG4gICAgICAgICAgZXhwZWN0KHdvcmtpdGVtTW9kZWwudmFsaWRhdGlvblsnY3VzdG9tLndvcmtpdGVtLmNoZWNrb3V0J10uaW5mbykudG8uYmUuZW1wdHk7XG5cbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pLmNhdGNoKGRvbmUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU2ltcGxlIHJ1bGUgaW52YWxpZCwgd2l0aCBydWxlIG91dGNvbWUgZGVwZW5kZW5jZScsICgpID0+IHtcbiAgICBjb25zdCB3b3JraXRlbU1vZGVsID0gbmV3IGVuZ2luZS5tb2RlbHMuV29ya2l0ZW1Nb2RlbCh7XG4gICAgICBpbnZvaWNlRGF0ZTogbmV3IERhdGUoJzIwMjAtMDctMTAnKSxcbiAgICAgIGJhc051bWJlcjogJzIwMjAwNzExMTInLFxuICAgIH0sIHtcbiAgICAgICd3b3JraXRlbS5pbnZvaWNlRGF0ZSc6IG5ldyBlbmdpbmUub3V0Y29tZXMuVmFsaWRhdGlvbk91dGNvbWUoKSxcbiAgICAgICd3b3JraXRlbS5iYXNOdW1iZXInOiBuZXcgZW5naW5lLm91dGNvbWVzLlZhbGlkYXRpb25PdXRjb21lKCksXG4gICAgICB3b3JraXRlbTogbmV3IGVuZ2luZS5vdXRjb21lcy5WYWxpZGF0aW9uT3V0Y29tZSgpLFxuICAgICAgJ2N1c3RvbS53b3JraXRlbS5jaGVja291dCc6IG5ldyBlbmdpbmUub3V0Y29tZXMuVmFsaWRhdGlvbk91dGNvbWUoKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFwcFN0YXRlTW9kZWwgPSBuZXcgZW5naW5lLm1vZGVscy5BcHBTdGF0ZU1vZGVsKHtcbiAgICAgIG9ubGluZTogdHJ1ZSxcbiAgICAgIHVzZXJUeXBlOiAndXNlcicsXG4gICAgfSwge30pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXBvcnQgdGhyZWUgZXJyb3JzJywgKGRvbmUpID0+IHtcbiAgICAgIGVuZ2luZS52YWxpZGF0ZShbd29ya2l0ZW1Nb2RlbCwgYXBwU3RhdGVNb2RlbF0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBleHBlY3Qod29ya2l0ZW1Nb2RlbC52YWxpZGF0aW9uWyd3b3JraXRlbS5pbnZvaWNlRGF0ZSddLm91dGNvbWUsICdbb3V0Y29tZV0gLSBpbnZvaWNlRGF0ZScpLnRvLmVxdWFsKCd2YWxpZCcpO1xuICAgICAgICAgIGV4cGVjdCh3b3JraXRlbU1vZGVsLnZhbGlkYXRpb25bJ3dvcmtpdGVtLmJhc051bWJlciddLm91dGNvbWUsICdbb3V0Y29tZV0gLSBiYXNOdW1iZXInKS50by5lcXVhbCgnaW52YWxpZCcpO1xuICAgICAgICAgIGV4cGVjdCh3b3JraXRlbU1vZGVsLnZhbGlkYXRpb24ud29ya2l0ZW0ub3V0Y29tZSwgJ1tvdXRjb21lXSAtIHdvcmtpdGVtJykudG8uZXF1YWwoJ2ludmFsaWQnKTtcbiAgICAgICAgICBleHBlY3Qod29ya2l0ZW1Nb2RlbC52YWxpZGF0aW9uWydjdXN0b20ud29ya2l0ZW0uY2hlY2tvdXQnXS5vdXRjb21lLCAnW291dGNvbWVdIC0gY3VzdG9tIHdvcmtpdGVtIGNoZWNrb3V0JykudG8uZXF1YWwoJ2ludmFsaWQnKTtcblxuICAgICAgICAgIGV4cGVjdCh3b3JraXRlbU1vZGVsLnZhbGlkYXRpb25bJ3dvcmtpdGVtLmludm9pY2VEYXRlJ10uaW5mbykudG8uYmUuZW1wdHk7XG5cbiAgICAgICAgICBleHBlY3Qod29ya2l0ZW1Nb2RlbC52YWxpZGF0aW9uWyd3b3JraXRlbS5iYXNOdW1iZXInXS5pbmZvLmJhc051bWJlckhhc0ludm9pY2VEYXRlKS50by5leGlzdDtcbiAgICAgICAgICBleHBlY3Qod29ya2l0ZW1Nb2RlbC52YWxpZGF0aW9uWyd3b3JraXRlbS5iYXNOdW1iZXInXS5pbmZvLmJhc051bWJlckhhc0ludm9pY2VEYXRlLnR5cGUpLnRvLmVxdWFsKCdlcnJvcicpO1xuXG4gICAgICAgICAgZXhwZWN0KHdvcmtpdGVtTW9kZWwudmFsaWRhdGlvbi53b3JraXRlbS5pbmZvLndvcmtpdGVtSXNWYWxpZCkudG8uZXhpc3Q7XG4gICAgICAgICAgZXhwZWN0KHdvcmtpdGVtTW9kZWwudmFsaWRhdGlvbi53b3JraXRlbS5pbmZvLndvcmtpdGVtSXNWYWxpZC50eXBlKS50by5lcXVhbCgnZXJyb3InKTtcblxuICAgICAgICAgIGV4cGVjdCh3b3JraXRlbU1vZGVsLnZhbGlkYXRpb25bJ2N1c3RvbS53b3JraXRlbS5jaGVja291dCddLmluZm8ud29ya2l0ZW1DYW5DaGVja291dCkudG8uZXhpc3Q7XG4gICAgICAgICAgZXhwZWN0KHdvcmtpdGVtTW9kZWwudmFsaWRhdGlvblsnY3VzdG9tLndvcmtpdGVtLmNoZWNrb3V0J10uaW5mby53b3JraXRlbUNhbkNoZWNrb3V0LnR5cGUpLnRvLmVxdWFsKCdlcnJvcicpO1xuXG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KS5jYXRjaChkb25lKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0luY29tcGxldGUgZmllbGQsIHdpdGggcnVsZSBvdXRjb21lIGRlcGVuZGVuY2UnLCAoKSA9PiB7XG4gICAgY29uc3Qgd29ya2l0ZW1Nb2RlbCA9IG5ldyBlbmdpbmUubW9kZWxzLldvcmtpdGVtTW9kZWwoe1xuICAgICAgaW52b2ljZURhdGU6ICcnLFxuICAgICAgYmFzTnVtYmVyOiAnMjAyMDA3MTExMicsXG4gICAgfSwge1xuICAgICAgJ3dvcmtpdGVtLmludm9pY2VEYXRlJzogbmV3IGVuZ2luZS5vdXRjb21lcy5WYWxpZGF0aW9uT3V0Y29tZSgpLFxuICAgICAgJ3dvcmtpdGVtLmJhc051bWJlcic6IG5ldyBlbmdpbmUub3V0Y29tZXMuVmFsaWRhdGlvbk91dGNvbWUoKSxcbiAgICAgIHdvcmtpdGVtOiBuZXcgZW5naW5lLm91dGNvbWVzLlZhbGlkYXRpb25PdXRjb21lKCksXG4gICAgICAnY3VzdG9tLndvcmtpdGVtLmNoZWNrb3V0JzogbmV3IGVuZ2luZS5vdXRjb21lcy5WYWxpZGF0aW9uT3V0Y29tZSgpLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYXBwU3RhdGVNb2RlbCA9IG5ldyBlbmdpbmUubW9kZWxzLkFwcFN0YXRlTW9kZWwoe1xuICAgICAgb25saW5lOiB0cnVlLFxuICAgICAgdXNlclR5cGU6ICd1c2VyJyxcbiAgICB9LCB7fSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlcG9ydCBpbmNvbXBsZXRlJywgKGRvbmUpID0+IHtcbiAgICAgIGVuZ2luZS52YWxpZGF0ZShbd29ya2l0ZW1Nb2RlbCwgYXBwU3RhdGVNb2RlbF0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBleHBlY3Qod29ya2l0ZW1Nb2RlbC52YWxpZGF0aW9uWyd3b3JraXRlbS5pbnZvaWNlRGF0ZSddLm91dGNvbWUsICdbb3V0Y29tZV0gLSBpbnZvaWNlRGF0ZScpLnRvLmVxdWFsKCdpbmNvbXBsZXRlJyk7XG4gICAgICAgICAgZXhwZWN0KHdvcmtpdGVtTW9kZWwudmFsaWRhdGlvblsnd29ya2l0ZW0uYmFzTnVtYmVyJ10ub3V0Y29tZSwgJ1tvdXRjb21lXSAtIGJhc051bWJlcicpLnRvLmVxdWFsKCd2YWxpZCcpO1xuICAgICAgICAgIGV4cGVjdCh3b3JraXRlbU1vZGVsLnZhbGlkYXRpb24ud29ya2l0ZW0ub3V0Y29tZSwgJ1tvdXRjb21lXSAtIHdvcmtpdGVtJykudG8uZXF1YWwoJ2luY29tcGxldGUnKTtcbiAgICAgICAgICBleHBlY3Qod29ya2l0ZW1Nb2RlbC52YWxpZGF0aW9uWydjdXN0b20ud29ya2l0ZW0uY2hlY2tvdXQnXS5vdXRjb21lLCAnW291dGNvbWVdIC0gY3VzdG9tIHdvcmtpdGVtIGNoZWNrb3V0JykudG8uZXF1YWwoJ2ludmFsaWQnKTtcblxuICAgICAgICAgIGV4cGVjdCh3b3JraXRlbU1vZGVsLnZhbGlkYXRpb25bJ3dvcmtpdGVtLmludm9pY2VEYXRlJ10uaW5mby5pbnZvaWNlRGF0ZUlzQ29tcGxldGUpLnRvLmV4aXN0O1xuICAgICAgICAgIGV4cGVjdCh3b3JraXRlbU1vZGVsLnZhbGlkYXRpb25bJ3dvcmtpdGVtLmludm9pY2VEYXRlJ10uaW5mby5pbnZvaWNlRGF0ZUlzQ29tcGxldGUudHlwZSkudG8uZXF1YWwoJ3dhcm5pbmcnKTtcblxuICAgICAgICAgIGV4cGVjdCh3b3JraXRlbU1vZGVsLnZhbGlkYXRpb25bJ3dvcmtpdGVtLmJhc051bWJlciddLmluZm8pLnRvLmJlLmVtcHR5O1xuXG4gICAgICAgICAgZXhwZWN0KHdvcmtpdGVtTW9kZWwudmFsaWRhdGlvbi53b3JraXRlbS5pbmZvLndvcmtpdGVtSXNDb21wbGV0ZSkudG8uZXhpc3Q7XG4gICAgICAgICAgZXhwZWN0KHdvcmtpdGVtTW9kZWwudmFsaWRhdGlvbi53b3JraXRlbS5pbmZvLndvcmtpdGVtSXNDb21wbGV0ZS50eXBlKS50by5lcXVhbCgnd2FybmluZycpO1xuXG4gICAgICAgICAgZXhwZWN0KHdvcmtpdGVtTW9kZWwudmFsaWRhdGlvblsnY3VzdG9tLndvcmtpdGVtLmNoZWNrb3V0J10uaW5mby53b3JraXRlbUNhbkNoZWNrb3V0KS50by5leGlzdDtcbiAgICAgICAgICBleHBlY3Qod29ya2l0ZW1Nb2RlbC52YWxpZGF0aW9uWydjdXN0b20ud29ya2l0ZW0uY2hlY2tvdXQnXS5pbmZvLndvcmtpdGVtQ2FuQ2hlY2tvdXQudHlwZSkudG8uZXF1YWwoJ2Vycm9yJyk7XG5cbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pLmNhdGNoKGRvbmUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19",
"ast": null,
"map": {
"version": 3,
"sources": [
"two-models.es6"
],
"names": [],
"mappings": "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",
"file": "two-models.es6",
"sourcesContent": [
"/* eslint max-len:0 */\n/* eslint no-unused-expressions:0 */\n\nimport { expect } from 'chai';\nimport { describe, it } from 'mocha';\n\nimport { ValidationEngine } from '..';\nimport * as helpers from '../helpers';\n\nfunction makeFilename(name) {\n return `${__dirname}/../../examples/${name}`;\n}\n\nconst engine = new ValidationEngine(makeFilename('rules.nools'));\n\ndescribe('Two models example test', () => {\n describe('All valid', () => {\n const workitemModel = new engine.models.WorkitemModel({\n invoiceDate: new Date('2020-07-10'),\n basNumber: '2020071012',\n }, {\n 'workitem.invoiceDate': new engine.outcomes.ValidationOutcome(),\n 'workitem.basNumber': new engine.outcomes.ValidationOutcome(),\n workitem: new engine.outcomes.ValidationOutcome(),\n 'custom.workitem.checkout': new engine.outcomes.ValidationOutcome(),\n });\n\n const appStateModel = new engine.models.AppStateModel({\n online: true,\n userType: 'user',\n }, {});\n\n it('all outcomes should be valid', (done) => {\n engine.validate([workitemModel, appStateModel])\n .then(() => {\n expect(workitemModel.validation['workitem.invoiceDate'].outcome).to.equal('valid');\n expect(workitemModel.validation['workitem.basNumber'].outcome).to.equal('valid');\n expect(workitemModel.validation.workitem.outcome).to.equal('valid');\n expect(workitemModel.validation['custom.workitem.checkout'].outcome).to.equal('valid');\n\n done();\n }).catch(done);\n });\n\n it('all info objects should be empty', (done) => {\n engine.validate([workitemModel, appStateModel])\n .then(() => {\n expect(workitemModel.validation['workitem.invoiceDate'].info).to.be.empty;\n expect(workitemModel.validation['workitem.basNumber'].info).to.be.empty;\n expect(workitemModel.validation.workitem.info).to.be.empty;\n expect(workitemModel.validation['custom.workitem.checkout'].info).to.be.empty;\n\n done();\n }).catch(done);\n });\n });\n\n describe('Simple rule invalid, with rule outcome dependence', () => {\n const workitemModel = new engine.models.WorkitemModel({\n invoiceDate: new Date('2020-07-10'),\n basNumber: '2020071112',\n }, {\n 'workitem.invoiceDate': new engine.outcomes.ValidationOutcome(),\n 'workitem.basNumber': new engine.outcomes.ValidationOutcome(),\n workitem: new engine.outcomes.ValidationOutcome(),\n 'custom.workitem.checkout': new engine.outcomes.ValidationOutcome(),\n });\n\n const appStateModel = new engine.models.AppStateModel({\n online: true,\n userType: 'user',\n }, {});\n\n it('should report three errors', (done) => {\n engine.validate([workitemModel, appStateModel])\n .then(() => {\n expect(workitemModel.validation['workitem.invoiceDate'].outcome, '[outcome] - invoiceDate').to.equal('valid');\n expect(workitemModel.validation['workitem.basNumber'].outcome, '[outcome] - basNumber').to.equal('invalid');\n expect(workitemModel.validation.workitem.outcome, '[outcome] - workitem').to.equal('invalid');\n expect(workitemModel.validation['custom.workitem.checkout'].outcome, '[outcome] - custom workitem checkout').to.equal('invalid');\n\n expect(workitemModel.validation['workitem.invoiceDate'].info).to.be.empty;\n\n expect(workitemModel.validation['workitem.basNumber'].info.basNumberHasInvoiceDate).to.exist;\n expect(workitemModel.validation['workitem.basNumber'].info.basNumberHasInvoiceDate.type).to.equal('error');\n\n expect(workitemModel.validation.workitem.info.workitemIsValid).to.exist;\n expect(workitemModel.validation.workitem.info.workitemIsValid.type).to.equal('error');\n\n expect(workitemModel.validation['custom.workitem.checkout'].info.workitemCanCheckout).to.exist;\n expect(workitemModel.validation['custom.workitem.checkout'].info.workitemCanCheckout.type).to.equal('error');\n\n done();\n }).catch(done);\n });\n });\n\n describe('Incomplete field, with rule outcome dependence', () => {\n const workitemModel = new engine.models.WorkitemModel({\n invoiceDate: '',\n basNumber: '2020071112',\n }, {\n 'workitem.invoiceDate': new engine.outcomes.ValidationOutcome(),\n 'workitem.basNumber': new engine.outcomes.ValidationOutcome(),\n workitem: new engine.outcomes.ValidationOutcome(),\n 'custom.workitem.checkout': new engine.outcomes.ValidationOutcome(),\n });\n\n const appStateModel = new engine.models.AppStateModel({\n online: true,\n userType: 'user',\n }, {});\n\n it('should report incomplete', (done) => {\n engine.validate([workitemModel, appStateModel])\n .then(() => {\n expect(workitemModel.validation['workitem.invoiceDate'].outcome, '[outcome] - invoiceDate').to.equal('incomplete');\n expect(workitemModel.validation['workitem.basNumber'].outcome, '[outcome] - basNumber').to.equal('valid');\n expect(workitemModel.validation.workitem.outcome, '[outcome] - workitem').to.equal('incomplete');\n expect(workitemModel.validation['custom.workitem.checkout'].outcome, '[outcome] - custom workitem checkout').to.equal('invalid');\n\n expect(workitemModel.validation['workitem.invoiceDate'].info.invoiceDateIsComplete).to.exist;\n expect(workitemModel.validation['workitem.invoiceDate'].info.invoiceDateIsComplete.type).to.equal('warning');\n\n expect(workitemModel.validation['workitem.basNumber'].info).to.be.empty;\n\n expect(workitemModel.validation.workitem.info.workitemIsComplete).to.exist;\n expect(workitemModel.validation.workitem.info.workitemIsComplete.type).to.equal('warning');\n\n expect(workitemModel.validation['custom.workitem.checkout'].info.workitemCanCheckout).to.exist;\n expect(workitemModel.validation['custom.workitem.checkout'].info.workitemCanCheckout.type).to.equal('error');\n\n done();\n }).catch(done);\n });\n });\n});\n"
]
},
"mtime": 1466944354427
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/examples/compiled.js\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [],
"marked": [],
"modules": {
"imports": [],
"exports": {
"exported": [],
"specifiers": []
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/examples/compiled.js",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/examples/compiled.js",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "compiled.js",
"sourceFileName": "compiled.js",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "compiled"
},
"ignored": false,
"code": "\"use strict\";\n\n!function () {\n function _getCompiled(nools) {\n return function () {\n return function (options) {\n options = options || {};var defined = { Array: Array, String: String, Number: Number, Boolean: Boolean, RegExp: RegExp, Date: Date, Object: Object },\n scope = options.scope || {},\n optDefined = options.defined || {};for (var i in optDefined) defined[i] = optDefined[i];return nools.flow(\"rules\", function () {\n defined.ValidationOutcome = this.addDefined(\"ValidationOutcome\", function () {\n var Defined = function (props) {\n props = props || {}, this.outcome = props.outcome || \"valid\", this.info = props.info || {};\n },\n proto = Defined.prototype;return proto.constructor = function (props) {\n props = props || {}, this.outcome = props.outcome || \"valid\", this.info = props.info || {};\n }, Defined;\n }());var RuleOutcome = defined.RuleOutcome = this.addDefined(\"RuleOutcome\", function () {\n var Defined = function (props) {\n props = props || {}, this.type = props.type || void 0, this.msg = props.msg || \"The rule identified an error\";\n },\n proto = Defined.prototype;return proto.constructor = function (props) {\n props = props || {}, this.type = props.type || void 0, this.msg = props.msg || \"The rule identified an error\";\n }, Defined;\n }()),\n WorkitemModel = defined.WorkitemModel = this.addDefined(\"WorkitemModel\", function () {\n var Defined = function (model, outcomeStructure) {\n this.workitem = model, this.validation = outcomeStructure, this._defType = \"WorkitemModel\";\n },\n proto = Defined.prototype;return proto.constructor = function (model, outcomeStructure) {\n this.workitem = model, this.validation = outcomeStructure, this._defType = \"WorkitemModel\";\n }, Defined;\n }()),\n AppStateModel = defined.AppStateModel = this.addDefined(\"AppStateModel\", function () {\n var Defined = function (model, outcomeStructure) {\n this.appState = model, this.validation = outcomeStructure, this._defType = \"AppStateModel\";\n },\n proto = Defined.prototype;return proto.constructor = function (model, outcomeStructure) {\n this.appState = model, this.validation = outcomeStructure, this._defType = \"AppStateModel\";\n }, Defined;\n }());scope.console = console, this.rule(\"invoiceDateIsDate\", { scope: scope }, [[WorkitemModel, \"f1\", \"constraints.hasPath(f1.workitem, 'invoiceDate')\"], [\"not\", WorkitemModel, \"f1\", \"isDate(f1.workitem.invoiceDate)\"], [\"not\", WorkitemModel, \"f1\", \"isDefined(f1.validation['workitem.invoiceDate'].info['invoiceDateIsComplete'])\"]], function (facts, flow) {\n var f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1;defined.Date;var emit = flow.emit,\n ruleName = \"invoiceDateIsDate\";emit(\"activated\", { rule: ruleName });var outcome = new RuleOutcome({ type: \"error\", msg: \"The invoice date is not a valid date object\" });recordOutcome(this, RuleOutcome, f1, \"workitem.invoiceDate\", ruleName, outcome, \"invalid\");\n }), this.rule(\"invoiceDateIsFuture\", { scope: scope }, [[WorkitemModel, \"f1\", \"constraints.hasPath(f1.workitem, 'invoiceDate')\"], [\"not\", WorkitemModel, \"f1\", \"f1.workitem.invoiceDate >= now()\"], [AppStateModel, \"f2\", \"f2.appState.userType !== 'admin'\"], [\"not\", WorkitemModel, \"f1\", \"isDefined(f1.validation['workitem.invoiceDate'].info['invoiceDateIsComplete'])\"]], function (facts, flow) {\n var f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1;defined.Date;var emit = flow.emit,\n ruleName = \"invoiceDateIsFuture\";emit(\"activated\", { rule: ruleName });var outcome = new RuleOutcome({ type: \"error\", msg: \"The invoice date must be a future date\" });recordOutcome(this, RuleOutcome, f1, \"workitem.invoiceDate\", ruleName, outcome, \"invalid\");\n }), this.rule(\"invoiceDateIsComplete\", { priority: 1, scope: scope }, [[WorkitemModel, \"f1\", \"constraints.hasPath(f1.workitem, 'invoiceDate')\"], [WorkitemModel, \"f1\", \"f1.workitem.invoiceDate === undefined || f1.workitem.invoiceDate === ''\"]], function (facts, flow) {\n var f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1;defined.Date;var emit = flow.emit,\n ruleName = \"invoiceDateIsComplete\";emit(\"activated\", { rule: ruleName });var outcome = new RuleOutcome({ type: \"warning\", msg: \"The invoice date has not been completed\" });recordOutcome(this, RuleOutcome, f1, \"workitem.invoiceDate\", ruleName, outcome, \"incomplete\");\n }), this.rule(\"basNumberLength\", { scope: scope }, [[WorkitemModel, \"f1\", \"constraints.hasPath(f1.workitem, 'basNumber')\"], [\"not\", WorkitemModel, \"f\", \"f1.workitem.basNumber =~ /^[0-9]{10}$/\"], [\"not\", WorkitemModel, \"f\", \"isDefined(f1.validation['workitem.basNumber'].info['basNumberIsComplete'])\"]], function (facts, flow) {\n var f1 = facts.f1,\n f1 = facts.f1;facts.f;var f1 = facts.f1;facts.f;var f1 = facts.f1;defined.Number;var emit = flow.emit,\n ruleName = \"basNumberLength\";emit(\"activated\", { rule: ruleName });var outcome = new RuleOutcome({ type: \"error\", msg: \"The BAS number needs to be 10 digits\" });recordOutcome(this, RuleOutcome, f1, \"workitem.basNumber\", ruleName, outcome, \"invalid\");\n }), this.rule(\"basNumberHasInvoiceDate\", { scope: scope }, [[WorkitemModel, \"f1\", \"constraints.hasPath(f1.workitem, 'basNumber') AND constraints.hasPath(f1.workitem, 'invoiceDate')\"], [\"not\", WorkitemModel, \"f1\", \"constraints.stringIncludesDate(f1.workitem.basNumber, f1.workitem.invoiceDate)\"], [\"not\", WorkitemModel, \"f1\", \"f1.validation['workitem.basNumber'].outcome === 'incomplete'\"], [\"not\", WorkitemModel, \"f1\", \"f1.validation['workitem.invoiceDate'].outcome === 'incomplete'\"]], function (facts, flow) {\n var f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1;defined.Number, defined.Date;var emit = flow.emit,\n ruleName = \"basNumberHasInvoiceDate\";emit(\"activated\", { rule: ruleName });var outcome = new RuleOutcome({ type: \"error\", msg: \"The BAS number needs to contain the invoice date\" });recordOutcome(this, RuleOutcome, f1, \"workitem.basNumber\", ruleName, outcome, \"invalid\");\n }), this.rule(\"basNumberIsComplete\", { priority: 1, scope: scope }, [[WorkitemModel, \"f1\", \"constraints.hasPath(f1.workitem, 'basNumber')\"], [\"not\", WorkitemModel, \"f1\", \"f1.workitem.basNumber !== ''\"]], function (facts, flow) {\n var f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1;defined.Number;var emit = flow.emit,\n ruleName = \"basNumberIsComplete\";emit(\"activated\", { rule: ruleName });var outcome = new RuleOutcome({ type: \"warning\", msg: \"The BAS number has not been completed\" });recordOutcome(this, RuleOutcome, f1, \"workitem.basNumber\", ruleName, outcome, \"incomplete\");\n }), this.rule(\"workitemIsValid\", { scope: scope }, [[WorkitemModel, \"f1\", \"constraints.hasPath(f1.workitem, 'basNumber')\"], [WorkitemModel, \"f1\", \"constraints.hasPath(f1.workitem, 'invoiceDate')\"], [\"not\", WorkitemModel, \"f1\", \"f1.validation['workitem.basNumber'].outcome === 'valid' AND f1.validation['workitem.invoiceDate'].outcome === 'valid'\"], [\"not\", WorkitemModel, \"f1\", \"constraints.hasPath(f1.validation['workitem'], 'info.workitemIsComplete')\"]], function (facts, flow) {\n var f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1;defined.Number, defined.Date;var emit = flow.emit,\n ruleName = \"workitemIsValid\";emit(\"activated\", { rule: ruleName });var outcome = new RuleOutcome({ type: \"error\", msg: \"The workitem requires the following to be valid:\\n - BAS Number\\n - Invoice Date\" });recordOutcome(this, RuleOutcome, f1, \"workitem\", ruleName, outcome, \"invalid\");\n }), this.rule(\"workitemIsComplete\", { priority: 1, scope: scope }, [[WorkitemModel, \"f1\", \"constraints.hasPath(f1.workitem, 'basNumber')\"], [WorkitemModel, \"f1\", \"constraints.hasPath(f1.workitem, 'invoiceDate')\"], [\"or\", [WorkitemModel, \"f1\", \"f1.validation['workitem.basNumber'].outcome === 'incomplete'\"], [WorkitemModel, \"f1\", \"f1.validation['workitem.invoiceDate'].outcome === 'incomplete'\"]]], function (facts, flow) {\n var f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n emit = flow.emit,\n ruleName = \"workitemIsComplete\";emit(\"activated\", { rule: ruleName });var outcome = new RuleOutcome({ type: \"warning\", msg: \"The workitem is not complete\" });recordOutcome(this, RuleOutcome, f1, \"workitem\", ruleName, outcome, \"incomplete\");\n }), this.rule(\"workitemCanCheckout\", { scope: scope }, [[WorkitemModel, \"f1\", \"constraints.hasPath(f1, 'workitem')\"], [AppStateModel, \"f2\", \"constraints.hasPath(f2.appState, 'online')\"], [\"or\", [\"not\", AppStateModel, \"f2\", \"isTrue(f2.appState.online)\"], [\"not\", WorkitemModel, \"f1\", \"f1.validation['workitem'].outcome === 'valid'\"]]], function (facts, flow) {\n var f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n f1 = facts.f1,\n emit = flow.emit,\n ruleName = \"workitemCanCheckout\";emit(\"activated\", { rule: ruleName });var outcome = new RuleOutcome({ type: \"error\", msg: \"The workitem requires the following before checking out:\\n - Online\\n - Workitem\" });recordOutcome(this, RuleOutcome, f1, \"custom.workitem.checkout\", ruleName, outcome, \"invalid\");\n });\n });\n };\n }();\n }\"undefined\" != typeof exports ? \"undefined\" != typeof module && module.exports && (module.exports = _getCompiled(require(\"nools\"))) : \"function\" == typeof define && define.amd ? define([\"nools\"], function (nools) {\n return _getCompiled(nools);\n }) : _getCompiled(this.nools)();\n}.call(undefined);\n//# sourceMappingURL=data:application/json;base64,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QUEyQixPQUFPLEdBQWxDLEdBQXNDLE9BQU8sQ0FBQyxPQUFELENBQVAsRUFBaUIsVUFBUyxLQUFULEVBQWU7QUFBQyxXQUFPLGFBQWEsS0FBYixDQUFQO0FBQTJCLEdBQTVELENBQXRDLEdBQW9HLGFBQWEsS0FBSyxLQUFsQixHQUE1TjtBQUF1UCxDQUFoeFEsQ0FBaXhRLElBQWp4USxXQUFEIiwiZmlsZSI6ImNvbXBpbGVkLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKCl7ZnVuY3Rpb24gX2dldENvbXBpbGVkKG5vb2xzKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24ob3B0aW9ucyl7b3B0aW9ucz1vcHRpb25zfHx7fTt2YXIgZGVmaW5lZD17QXJyYXk6QXJyYXksU3RyaW5nOlN0cmluZyxOdW1iZXI6TnVtYmVyLEJvb2xlYW46Qm9vbGVhbixSZWdFeHA6UmVnRXhwLERhdGU6RGF0ZSxPYmplY3Q6T2JqZWN0fSxzY29wZT1vcHRpb25zLnNjb3BlfHx7fSxvcHREZWZpbmVkPW9wdGlvbnMuZGVmaW5lZHx8e307Zm9yKHZhciBpIGluIG9wdERlZmluZWQpZGVmaW5lZFtpXT1vcHREZWZpbmVkW2ldO3JldHVybiBub29scy5mbG93KFwicnVsZXNcIixmdW5jdGlvbigpe2RlZmluZWQuVmFsaWRhdGlvbk91dGNvbWU9dGhpcy5hZGREZWZpbmVkKFwiVmFsaWRhdGlvbk91dGNvbWVcIixmdW5jdGlvbigpe3ZhciBEZWZpbmVkPWZ1bmN0aW9uKHByb3BzKXtwcm9wcz1wcm9wc3x8e30sdGhpcy5vdXRjb21lPXByb3BzLm91dGNvbWV8fFwidmFsaWRcIix0aGlzLmluZm89cHJvcHMuaW5mb3x8e319LHByb3RvPURlZmluZWQucHJvdG90eXBlO3JldHVybiBwcm90by5jb25zdHJ1Y3Rvcj1mdW5jdGlvbihwcm9wcyl7cHJvcHM9cHJvcHN8fHt9LHRoaXMub3V0Y29tZT1wcm9wcy5vdXRjb21lfHxcInZhbGlkXCIsdGhpcy5pbmZvPXByb3BzLmluZm98fHt9fSxEZWZpbmVkfSgpKTt2YXIgUnVsZU91dGNvbWU9ZGVmaW5lZC5SdWxlT3V0Y29tZT10aGlzLmFkZERlZmluZWQoXCJSdWxlT3V0Y29tZVwiLGZ1bmN0aW9uKCl7dmFyIERlZmluZWQ9ZnVuY3Rpb24ocHJvcHMpe3Byb3BzPXByb3BzfHx7fSx0aGlzLnR5cGU9cHJvcHMudHlwZXx8dm9pZCAwLHRoaXMubXNnPXByb3BzLm1zZ3x8XCJUaGUgcnVsZSBpZGVudGlmaWVkIGFuIGVycm9yXCJ9LHByb3RvPURlZmluZWQucHJvdG90eXBlO3JldHVybiBwcm90by5jb25zdHJ1Y3Rvcj1mdW5jdGlvbihwcm9wcyl7cHJvcHM9cHJvcHN8fHt9LHRoaXMudHlwZT1wcm9wcy50eXBlfHx2b2lkIDAsdGhpcy5tc2c9cHJvcHMubXNnfHxcIlRoZSBydWxlIGlkZW50aWZpZWQgYW4gZXJyb3JcIn0sRGVmaW5lZH0oKSksV29ya2l0ZW1Nb2RlbD1kZWZpbmVkLldvcmtpdGVtTW9kZWw9dGhpcy5hZGREZWZpbmVkKFwiV29ya2l0ZW1Nb2RlbFwiLGZ1bmN0aW9uKCl7dmFyIERlZmluZWQ9ZnVuY3Rpb24obW9kZWwsb3V0Y29tZVN0cnVjdHVyZSl7dGhpcy53b3JraXRlbT1tb2RlbCx0aGlzLnZhbGlkYXRpb249b3V0Y29tZVN0cnVjdHVyZSx0aGlzLl9kZWZUeXBlPVwiV29ya2l0ZW1Nb2RlbFwifSxwcm90bz1EZWZpbmVkLnByb3RvdHlwZTtyZXR1cm4gcHJvdG8uY29uc3RydWN0b3I9ZnVuY3Rpb24obW9kZWwsb3V0Y29tZVN0cnVjdHVyZSl7dGhpcy53b3JraXRlbT1tb2RlbCx0aGlzLnZhbGlkYXRpb249b3V0Y29tZVN0cnVjdHVyZSx0aGlzLl9kZWZUeXBlPVwiV29ya2l0ZW1Nb2RlbFwifSxEZWZpbmVkfSgpKSxBcHBTdGF0ZU1vZGVsPWRlZmluZWQuQXBwU3RhdGVNb2RlbD10aGlzLmFkZERlZmluZWQoXCJBcHBTdGF0ZU1vZGVsXCIsZnVuY3Rpb24oKXt2YXIgRGVmaW5lZD1mdW5jdGlvbihtb2RlbCxvdXRjb21lU3RydWN0dXJlKXt0aGlzLmFwcFN0YXRlPW1vZGVsLHRoaXMudmFsaWRhdGlvbj1vdXRjb21lU3RydWN0dXJlLHRoaXMuX2RlZlR5cGU9XCJBcHBTdGF0ZU1vZGVsXCJ9LHByb3RvPURlZmluZWQucHJvdG90eXBlO3JldHVybiBwcm90by5jb25zdHJ1Y3Rvcj1mdW5jdGlvbihtb2RlbCxvdXRjb21lU3RydWN0dXJlKXt0aGlzLmFwcFN0YXRlPW1vZGVsLHRoaXMudmFsaWRhdGlvbj1vdXRjb21lU3RydWN0dXJlLHRoaXMuX2RlZlR5cGU9XCJBcHBTdGF0ZU1vZGVsXCJ9LERlZmluZWR9KCkpO3Njb3BlLmNvbnNvbGU9Y29uc29sZSx0aGlzLnJ1bGUoXCJpbnZvaWNlRGF0ZUlzRGF0ZVwiLHtzY29wZTpzY29wZX0sW1tXb3JraXRlbU1vZGVsLFwiZjFcIixcImNvbnN0cmFpbnRzLmhhc1BhdGgoZjEud29ya2l0ZW0sICdpbnZvaWNlRGF0ZScpXCJdLFtcIm5vdFwiLFdvcmtpdGVtTW9kZWwsXCJmMVwiLFwiaXNEYXRlKGYxLndvcmtpdGVtLmludm9pY2VEYXRlKVwiXSxbXCJub3RcIixXb3JraXRlbU1vZGVsLFwiZjFcIixcImlzRGVmaW5lZChmMS52YWxpZGF0aW9uWyd3b3JraXRlbS5pbnZvaWNlRGF0ZSddLmluZm9bJ2ludm9pY2VEYXRlSXNDb21wbGV0ZSddKVwiXV0sZnVuY3Rpb24oZmFjdHMsZmxvdyl7dmFyIGYxPWZhY3RzLmYxLGYxPWZhY3RzLmYxLGYxPWZhY3RzLmYxLGYxPWZhY3RzLmYxLGYxPWZhY3RzLmYxLGYxPWZhY3RzLmYxO2RlZmluZWQuRGF0ZTt2YXIgZW1pdD1mbG93LmVtaXQscnVsZU5hbWU9XCJpbnZvaWNlRGF0ZUlzRGF0ZVwiO2VtaXQoXCJhY3RpdmF0ZWRcIix7cnVsZTpydWxlTmFtZX0pO3ZhciBvdXRjb21lPW5ldyBSdWxlT3V0Y29tZSh7dHlwZTpcImVycm9yXCIsbXNnOlwiVGhlIGludm9pY2UgZGF0ZSBpcyBub3QgYSB2YWxpZCBkYXRlIG9iamVjdFwifSk7cmVjb3JkT3V0Y29tZSh0aGlzLFJ1bGVPdXRjb21lLGYxLFwid29ya2l0ZW0uaW52b2ljZURhdGVcIixydWxlTmFtZSxvdXRjb21lLFwiaW52YWxpZFwiKX0pLHRoaXMucnVsZShcImludm9pY2VEYXRlSXNGdXR1cmVcIix7c2NvcGU6c2NvcGV9LFtbV29ya2l0ZW1Nb2RlbCxcImYxXCIsXCJjb25zdHJhaW50cy5oYXNQYXRoKGYxLndvcmtpdGVtLCAnaW52b2ljZURhdGUnKVwiXSxbXCJub3RcIixXb3JraXRlbU1vZGVsLFwiZjFcIixcImYxLndvcmtpdGVtLmludm9pY2VEYXRlID49IG5vdygpXCJdLFtBcHBTdGF0ZU1vZGVsLFwiZjJcIixcImYyLmFwcFN0YXRlLnVzZXJUeXBlICE9PSAnYWRtaW4nXCJdLFtcIm5vdFwiLFdvcmtpdGVtTW9kZWwsXCJmMVwiLFwiaXNEZWZpbmVkKGYxLnZhbGlkYXRpb25bJ3dvcmtpdGVtLmludm9pY2VEYXRlJ10uaW5mb1snaW52b2ljZURhdGVJc0NvbXBsZXRlJ10pXCJdXSxmdW5jdGlvbihmYWN0cyxmbG93KXt2YXIgZjE9ZmFjdHMuZjEsZjE9ZmFjdHMuZjEsZjE9ZmFjdHMuZjEsZjE9ZmFjdHMuZjEsZjE9ZmFjdHMuZjEsZjE9ZmFjdHMuZjE7ZGVmaW5lZC5EYXRlO3ZhciBlbWl0PWZsb3cuZW1pdCxydWxlTmFtZT1cImludm9pY2VEYXRlSXNGdXR1cmVcIjtlbWl0KFwiYWN0aXZhdGVkXCIse3J1bGU6cnVsZU5hbWV9KTt2YXIgb3V0Y29tZT1uZXcgUnVsZU91dGNvbWUoe3R5cGU6XCJlcnJvclwiLG1zZzpcIlRoZSBpbnZvaWNlIGRhdGUgbXVzdCBiZSBhIGZ1dHVyZSBkYXRlXCJ9KTtyZWNvcmRPdXRjb21lKHRoaXMsUnVsZU91dGNvbWUsZjEsXCJ3b3JraXRlbS5pbnZvaWNlRGF0ZVwiLHJ1bGVOYW1lLG91dGNvbWUsXCJpbnZhbGlkXCIpfSksdGhpcy5ydWxlKFwiaW52b2ljZURhdGVJc0NvbXBsZXRlXCIse3ByaW9yaXR5OjEsc2NvcGU6c2NvcGV9LFtbV29ya2l0ZW1Nb2RlbCxcImYxXCIsXCJjb25zdHJhaW50cy5oYXNQYXRoKGYxLndvcmtpdGVtLCAnaW52b2ljZURhdGUnKVwiXSxbV29ya2l0ZW1Nb2RlbCxcImYxXCIsXCJmMS53b3JraXRlbS5pbnZvaWNlRGF0ZSA9PT0gdW5kZWZpbmVkIHx8IGYxLndvcmtpdGVtLmludm9pY2VEYXRlID09PSAnJ1wiXV0sZnVuY3Rpb24oZmFjdHMsZmxvdyl7dmFyIGYxPWZhY3RzLmYxLGYxPWZhY3RzLmYxLGYxPWZhY3RzLmYxLGYxPWZhY3RzLmYxO2RlZmluZWQuRGF0ZTt2YXIgZW1pdD1mbG93LmVtaXQscnVsZU5hbWU9XCJpbnZvaWNlRGF0ZUlzQ29tcGxldGVcIjtlbWl0KFwiYWN0aXZhdGVkXCIse3J1bGU6cnVsZU5hbWV9KTt2YXIgb3V0Y29tZT1uZXcgUnVsZU91dGNvbWUoe3R5cGU6XCJ3YXJuaW5nXCIsbXNnOlwiVGhlIGludm9pY2UgZGF0ZSBoYXMgbm90IGJlZW4gY29tcGxldGVkXCJ9KTtyZWNvcmRPdXRjb21lKHRoaXMsUnVsZU91dGNvbWUsZjEsXCJ3b3JraXRlbS5pbnZvaWNlRGF0ZVwiLHJ1bGVOYW1lLG91dGNvbWUsXCJpbmNvbXBsZXRlXCIpfSksdGhpcy5ydWxlKFwiYmFzTnVtYmVyTGVuZ3RoXCIse3Njb3BlOnNjb3BlfSxbW1dvcmtpdGVtTW9kZWwsXCJmMVwiLFwiY29uc3RyYWludHMuaGFzUGF0aChmMS53b3JraXRlbSwgJ2Jhc051bWJlcicpXCJdLFtcIm5vdFwiLFdvcmtpdGVtTW9kZWwsXCJmXCIsXCJmMS53b3JraXRlbS5iYXNOdW1iZXIgPX4gL15bMC05XXsxMH0kL1wiXSxbXCJub3RcIixXb3JraXRlbU1vZGVsLFwiZlwiLFwiaXNEZWZpbmVkKGYxLnZhbGlkYXRpb25bJ3dvcmtpdGVtLmJhc051bWJlciddLmluZm9bJ2Jhc051bWJlcklzQ29tcGxldGUnXSlcIl1dLGZ1bmN0aW9uKGZhY3RzLGZsb3cpe3ZhciBmMT1mYWN0cy5mMSxmMT1mYWN0cy5mMTtmYWN0cy5mO3ZhciBmMT1mYWN0cy5mMTtmYWN0cy5mO3ZhciBmMT1mYWN0cy5mMTtkZWZpbmVkLk51bWJlcjt2YXIgZW1pdD1mbG93LmVtaXQscnVsZU5hbWU9XCJiYXNOdW1iZXJMZW5ndGhcIjtlbWl0KFwiYWN0aXZhdGVkXCIse3J1bGU6cnVsZU5hbWV9KTt2YXIgb3V0Y29tZT1uZXcgUnVsZU91dGNvbWUoe3R5cGU6XCJlcnJvclwiLG1zZzpcIlRoZSBCQVMgbnVtYmVyIG5lZWRzIHRvIGJlIDEwIGRpZ2l0c1wifSk7cmVjb3JkT3V0Y29tZSh0aGlzLFJ1bGVPdXRjb21lLGYxLFwid29ya2l0ZW0uYmFzTnVtYmVyXCIscnVsZU5hbWUsb3V0Y29tZSxcImludmFsaWRcIil9KSx0aGlzLnJ1bGUoXCJiYXNOdW1iZXJIYXNJbnZvaWNlRGF0ZVwiLHtzY29wZTpzY29wZX0sW1tXb3JraXRlbU1vZGVsLFwiZjFcIixcImNvbnN0cmFpbnRzLmhhc1BhdGgoZjEud29ya2l0ZW0sICdiYXNOdW1iZXInKSAgICAgICAgICAgICAgICAgICBBTkQgY29uc3RyYWludHMuaGFzUGF0aChmMS53b3JraXRlbSwgJ2ludm9pY2VEYXRlJylcIl0sW1wibm90XCIsV29ya2l0ZW1Nb2RlbCxcImYxXCIsXCJjb25zdHJhaW50cy5zdHJpbmdJbmNsdWRlc0RhdGUoZjEud29ya2l0ZW0uYmFzTnVtYmVyLCBmMS53b3JraXRlbS5pbnZvaWNlRGF0ZSlcIl0sW1wibm90XCIsV29ya2l0ZW1Nb2RlbCxcImYxXCIsXCJmMS52YWxpZGF0aW9uWyd3b3JraXRlbS5iYXNOdW1iZXInXS5vdXRjb21lID09PSAnaW5jb21wbGV0ZSdcIl0sW1wibm90XCIsV29ya2l0ZW1Nb2RlbCxcImYxXCIsXCJmMS52YWxpZGF0aW9uWyd3b3JraXRlbS5pbnZvaWNlRGF0ZSddLm91dGNvbWUgPT09ICdpbmNvbXBsZXRlJ1wiXV0sZnVuY3Rpb24oZmFjdHMsZmxvdyl7dmFyIGYxPWZhY3RzLmYxLGYxPWZhY3RzLmYxLGYxPWZhY3RzLmYxLGYxPWZhY3RzLmYxLGYxPWZhY3RzLmYxLGYxPWZhY3RzLmYxLGYxPWZhY3RzLmYxLGYxPWZhY3RzLmYxO2RlZmluZWQuTnVtYmVyLGRlZmluZWQuRGF0ZTt2YXIgZW1pdD1mbG93LmVtaXQscnVsZU5hbWU9XCJiYXNOdW1iZXJIYXNJbnZvaWNlRGF0ZVwiO2VtaXQoXCJhY3RpdmF0ZWRcIix7cnVsZTpydWxlTmFtZX0pO3ZhciBvdXRjb21lPW5ldyBSdWxlT3V0Y29tZSh7dHlwZTpcImVycm9yXCIsbXNnOlwiVGhlIEJBUyBudW1iZXIgbmVlZHMgdG8gY29udGFpbiB0aGUgaW52b2ljZSBkYXRlXCJ9KTtyZWNvcmRPdXRjb21lKHRoaXMsUnVsZU91dGNvbWUsZjEsXCJ3b3JraXRlbS5iYXNOdW1iZXJcIixydWxlTmFtZSxvdXRjb21lLFwiaW52YWxpZFwiKX0pLHRoaXMucnVsZShcImJhc051bWJlcklzQ29tcGxldGVcIix7cHJpb3JpdHk6MSxzY29wZTpzY29wZX0sW1tXb3JraXRlbU1vZGVsLFwiZjFcIixcImNvbnN0cmFpbnRzLmhhc1BhdGgoZjEud29ya2l0ZW0sICdiYXNOdW1iZXInKVwiXSxbXCJub3RcIixXb3JraXRlbU1vZGVsLFwiZjFcIixcImYxLndvcmtpdGVtLmJhc051bWJlciAhPT0gJydcIl1dLGZ1bmN0aW9uKGZhY3RzLGZsb3cpe3ZhciBmMT1mYWN0cy5mMSxmMT1mYWN0cy5mMSxmMT1mYWN0cy5mMSxmMT1mYWN0cy5mMTtkZWZpbmVkLk51bWJlcjt2YXIgZW1pdD1mbG93LmVtaXQscnVsZU5hbWU9XCJiYXNOdW1iZXJJc0NvbXBsZXRlXCI7ZW1pdChcImFjdGl2YXRlZFwiLHtydWxlOnJ1bGVOYW1lfSk7dmFyIG91dGNvbWU9bmV3IFJ1bGVPdXRjb21lKHt0eXBlOlwid2FybmluZ1wiLG1zZzpcIlRoZSBCQVMgbnVtYmVyIGhhcyBub3QgYmVlbiBjb21wbGV0ZWRcIn0pO3JlY29yZE91dGNvbWUodGhpcyxSdWxlT3V0Y29tZSxmMSxcIndvcmtpdGVtLmJhc051bWJlclwiLHJ1bGVOYW1lLG91dGNvbWUsXCJpbmNvbXBsZXRlXCIpfSksdGhpcy5ydWxlKFwid29ya2l0ZW1Jc1ZhbGlkXCIse3Njb3BlOnNjb3BlfSxbW1dvcmtpdGVtTW9kZWwsXCJmMVwiLFwiY29uc3RyYWludHMuaGFzUGF0aChmMS53b3JraXRlbSwgJ2Jhc051bWJlcicpXCJdLFtXb3JraXRlbU1vZGVsLFwiZjFcIixcImNvbnN0cmFpbnRzLmhhc1BhdGgoZjEud29ya2l0ZW0sICdpbnZvaWNlRGF0ZScpXCJdLFtcIm5vdFwiLFdvcmtpdGVtTW9kZWwsXCJmMVwiLFwiZjEudmFsaWRhdGlvblsnd29ya2l0ZW0uYmFzTnVtYmVyJ10ub3V0Y29tZSA9PT0gJ3ZhbGlkJyAgICAgICAgICAgICAgICAgICAgICAgQU5EIGYxLnZhbGlkYXRpb25bJ3dvcmtpdGVtLmludm9pY2VEYXRlJ10ub3V0Y29tZSA9PT0gJ3ZhbGlkJ1wiXSxbXCJub3RcIixXb3JraXRlbU1vZGVsLFwiZjFcIixcImNvbnN0cmFpbnRzLmhhc1BhdGgoZjEudmFsaWRhdGlvblsnd29ya2l0ZW0nXSwgJ2luZm8ud29ya2l0ZW1Jc0NvbXBsZXRlJylcIl1dLGZ1bmN0aW9uKGZhY3RzLGZsb3cpe3ZhciBmMT1mYWN0cy5mMSxmMT1mYWN0cy5mMSxmMT1mYWN0cy5mMSxmMT1mYWN0cy5mMSxmMT1mYWN0cy5mMSxmMT1mYWN0cy5mMSxmMT1mYWN0cy5mMSxmMT1mYWN0cy5mMTtkZWZpbmVkLk51bWJlcixkZWZpbmVkLkRhdGU7dmFyIGVtaXQ9Zmxvdy5lbWl0LHJ1bGVOYW1lPVwid29ya2l0ZW1Jc1ZhbGlkXCI7ZW1pdChcImFjdGl2YXRlZFwiLHtydWxlOnJ1bGVOYW1lfSk7dmFyIG91dGNvbWU9bmV3IFJ1bGVPdXRjb21lKHt0eXBlOlwiZXJyb3JcIixtc2c6XCJUaGUgd29ya2l0ZW0gcmVxdWlyZXMgdGhlIGZvbGxvd2luZyB0byBiZSB2YWxpZDpcXG4gIC0gQkFTIE51bWJlclxcbiAgLSBJbnZvaWNlIERhdGVcIn0pO3JlY29yZE91dGNvbWUodGhpcyxSdWxlT3V0Y29tZSxmMSxcIndvcmtpdGVtXCIscnVsZU5hbWUsb3V0Y29tZSxcImludmFsaWRcIil9KSx0aGlzLnJ1bGUoXCJ3b3JraXRlbUlzQ29tcGxldGVcIix7cHJpb3JpdHk6MSxzY29wZTpzY29wZX0sW1tXb3JraXRlbU1vZGVsLFwiZjFcIixcImNvbnN0cmFpbnRzLmhhc1BhdGgoZjEud29ya2l0ZW0sICdiYXNOdW1iZXInKVwiXSxbV29ya2l0ZW1Nb2RlbCxcImYxXCIsXCJjb25zdHJhaW50cy5oYXNQYXRoKGYxLndvcmtpdGVtLCAnaW52b2ljZURhdGUnKVwiXSxbXCJvclwiLFtXb3JraXRlbU1vZGVsLFwiZjFcIixcImYxLnZhbGlkYXRpb25bJ3dvcmtpdGVtLmJhc051bWJlciddLm91dGNvbWUgPT09ICdpbmNvbXBsZXRlJ1wiXSxbV29ya2l0ZW1Nb2RlbCxcImYxXCIsXCJmMS52YWxpZGF0aW9uWyd3b3JraXRlbS5pbnZvaWNlRGF0ZSddLm91dGNvbWUgPT09ICdpbmNvbXBsZXRlJ1wiXV1dLGZ1bmN0aW9uKGZhY3RzLGZsb3cpe3ZhciBmMT1mYWN0cy5mMSxmMT1mYWN0cy5mMSxmMT1mYWN0cy5mMSxmMT1mYWN0cy5mMSxmMT1mYWN0cy5mMSxmMT1mYWN0cy5mMSxmMT1mYWN0cy5mMSxmMT1mYWN0cy5mMSxlbWl0PWZsb3cuZW1pdCxydWxlTmFtZT1cIndvcmtpdGVtSXNDb21wbGV0ZVwiO2VtaXQoXCJhY3RpdmF0ZWRcIix7cnVsZTpydWxlTmFtZX0pO3ZhciBvdXRjb21lPW5ldyBSdWxlT3V0Y29tZSh7dHlwZTpcIndhcm5pbmdcIixtc2c6XCJUaGUgd29ya2l0ZW0gaXMgbm90IGNvbXBsZXRlXCJ9KTtyZWNvcmRPdXRjb21lKHRoaXMsUnVsZU91dGNvbWUsZjEsXCJ3b3JraXRlbVwiLHJ1bGVOYW1lLG91dGNvbWUsXCJpbmNvbXBsZXRlXCIpfSksdGhpcy5ydWxlKFwid29ya2l0ZW1DYW5DaGVja291dFwiLHtzY29wZTpzY29wZX0sW1tXb3JraXRlbU1vZGVsLFwiZjFcIixcImNvbnN0cmFpbnRzLmhhc1BhdGgoZjEsICd3b3JraXRlbScpXCJdLFtBcHBTdGF0ZU1vZGVsLFwiZjJcIixcImNvbnN0cmFpbnRzLmhhc1BhdGgoZjIuYXBwU3RhdGUsICdvbmxpbmUnKVwiXSxbXCJvclwiLFtcIm5vdFwiLEFwcFN0YXRlTW9kZWwsXCJmMlwiLFwiaXNUcnVlKGYyLmFwcFN0YXRlLm9ubGluZSlcIl0sW1wibm90XCIsV29ya2l0ZW1Nb2RlbCxcImYxXCIsXCJmMS52YWxpZGF0aW9uWyd3b3JraXRlbSddLm91dGNvbWUgPT09ICd2YWxpZCdcIl1dXSxmdW5jdGlvbihmYWN0cyxmbG93KXt2YXIgZjE9ZmFjdHMuZjEsZjE9ZmFjdHMuZjEsZjE9ZmFjdHMuZjEsZjE9ZmFjdHMuZjEsZW1pdD1mbG93LmVtaXQscnVsZU5hbWU9XCJ3b3JraXRlbUNhbkNoZWNrb3V0XCI7ZW1pdChcImFjdGl2YXRlZFwiLHtydWxlOnJ1bGVOYW1lfSk7dmFyIG91dGNvbWU9bmV3IFJ1bGVPdXRjb21lKHt0eXBlOlwiZXJyb3JcIixtc2c6XCJUaGUgd29ya2l0ZW0gcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBiZWZvcmUgY2hlY2tpbmcgb3V0OlxcbiAgLSBPbmxpbmVcXG4gIC0gV29ya2l0ZW1cIn0pO3JlY29yZE91dGNvbWUodGhpcyxSdWxlT3V0Y29tZSxmMSxcImN1c3RvbS53b3JraXRlbS5jaGVja291dFwiLHJ1bGVOYW1lLG91dGNvbWUsXCJpbnZhbGlkXCIpfSl9KX19KCl9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGV4cG9ydHM/XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMmJihtb2R1bGUuZXhwb3J0cz1fZ2V0Q29tcGlsZWQocmVxdWlyZShcIm5vb2xzXCIpKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJub29sc1wiXSxmdW5jdGlvbihub29scyl7cmV0dXJuIF9nZXRDb21waWxlZChub29scyl9KTpfZ2V0Q29tcGlsZWQodGhpcy5ub29scykoKX0uY2FsbCh0aGlzKTsiXX0=",
"ast": null,
"map": {
"version": 3,
"sources": [
"compiled.js"
],
"names": [],
"mappings": "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",
"file": "compiled.js",
"sourcesContent": [
"!function(){function _getCompiled(nools){return function(){return function(options){options=options||{};var defined={Array:Array,String:String,Number:Number,Boolean:Boolean,RegExp:RegExp,Date:Date,Object:Object},scope=options.scope||{},optDefined=options.defined||{};for(var i in optDefined)defined[i]=optDefined[i];return nools.flow(\"rules\",function(){defined.ValidationOutcome=this.addDefined(\"ValidationOutcome\",function(){var Defined=function(props){props=props||{},this.outcome=props.outcome||\"valid\",this.info=props.info||{}},proto=Defined.prototype;return proto.constructor=function(props){props=props||{},this.outcome=props.outcome||\"valid\",this.info=props.info||{}},Defined}());var RuleOutcome=defined.RuleOutcome=this.addDefined(\"RuleOutcome\",function(){var Defined=function(props){props=props||{},this.type=props.type||void 0,this.msg=props.msg||\"The rule identified an error\"},proto=Defined.prototype;return proto.constructor=function(props){props=props||{},this.type=props.type||void 0,this.msg=props.msg||\"The rule identified an error\"},Defined}()),WorkitemModel=defined.WorkitemModel=this.addDefined(\"WorkitemModel\",function(){var Defined=function(model,outcomeStructure){this.workitem=model,this.validation=outcomeStructure,this._defType=\"WorkitemModel\"},proto=Defined.prototype;return proto.constructor=function(model,outcomeStructure){this.workitem=model,this.validation=outcomeStructure,this._defType=\"WorkitemModel\"},Defined}()),AppStateModel=defined.AppStateModel=this.addDefined(\"AppStateModel\",function(){var Defined=function(model,outcomeStructure){this.appState=model,this.validation=outcomeStructure,this._defType=\"AppStateModel\"},proto=Defined.prototype;return proto.constructor=function(model,outcomeStructure){this.appState=model,this.validation=outcomeStructure,this._defType=\"AppStateModel\"},Defined}());scope.console=console,this.rule(\"invoiceDateIsDate\",{scope:scope},[[WorkitemModel,\"f1\",\"constraints.hasPath(f1.workitem, 'invoiceDate')\"],[\"not\",WorkitemModel,\"f1\",\"isDate(f1.workitem.invoiceDate)\"],[\"not\",WorkitemModel,\"f1\",\"isDefined(f1.validation['workitem.invoiceDate'].info['invoiceDateIsComplete'])\"]],function(facts,flow){var f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1;defined.Date;var emit=flow.emit,ruleName=\"invoiceDateIsDate\";emit(\"activated\",{rule:ruleName});var outcome=new RuleOutcome({type:\"error\",msg:\"The invoice date is not a valid date object\"});recordOutcome(this,RuleOutcome,f1,\"workitem.invoiceDate\",ruleName,outcome,\"invalid\")}),this.rule(\"invoiceDateIsFuture\",{scope:scope},[[WorkitemModel,\"f1\",\"constraints.hasPath(f1.workitem, 'invoiceDate')\"],[\"not\",WorkitemModel,\"f1\",\"f1.workitem.invoiceDate >= now()\"],[AppStateModel,\"f2\",\"f2.appState.userType !== 'admin'\"],[\"not\",WorkitemModel,\"f1\",\"isDefined(f1.validation['workitem.invoiceDate'].info['invoiceDateIsComplete'])\"]],function(facts,flow){var f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1;defined.Date;var emit=flow.emit,ruleName=\"invoiceDateIsFuture\";emit(\"activated\",{rule:ruleName});var outcome=new RuleOutcome({type:\"error\",msg:\"The invoice date must be a future date\"});recordOutcome(this,RuleOutcome,f1,\"workitem.invoiceDate\",ruleName,outcome,\"invalid\")}),this.rule(\"invoiceDateIsComplete\",{priority:1,scope:scope},[[WorkitemModel,\"f1\",\"constraints.hasPath(f1.workitem, 'invoiceDate')\"],[WorkitemModel,\"f1\",\"f1.workitem.invoiceDate === undefined || f1.workitem.invoiceDate === ''\"]],function(facts,flow){var f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1;defined.Date;var emit=flow.emit,ruleName=\"invoiceDateIsComplete\";emit(\"activated\",{rule:ruleName});var outcome=new RuleOutcome({type:\"warning\",msg:\"The invoice date has not been completed\"});recordOutcome(this,RuleOutcome,f1,\"workitem.invoiceDate\",ruleName,outcome,\"incomplete\")}),this.rule(\"basNumberLength\",{scope:scope},[[WorkitemModel,\"f1\",\"constraints.hasPath(f1.workitem, 'basNumber')\"],[\"not\",WorkitemModel,\"f\",\"f1.workitem.basNumber =~ /^[0-9]{10}$/\"],[\"not\",WorkitemModel,\"f\",\"isDefined(f1.validation['workitem.basNumber'].info['basNumberIsComplete'])\"]],function(facts,flow){var f1=facts.f1,f1=facts.f1;facts.f;var f1=facts.f1;facts.f;var f1=facts.f1;defined.Number;var emit=flow.emit,ruleName=\"basNumberLength\";emit(\"activated\",{rule:ruleName});var outcome=new RuleOutcome({type:\"error\",msg:\"The BAS number needs to be 10 digits\"});recordOutcome(this,RuleOutcome,f1,\"workitem.basNumber\",ruleName,outcome,\"invalid\")}),this.rule(\"basNumberHasInvoiceDate\",{scope:scope},[[WorkitemModel,\"f1\",\"constraints.hasPath(f1.workitem, 'basNumber') AND constraints.hasPath(f1.workitem, 'invoiceDate')\"],[\"not\",WorkitemModel,\"f1\",\"constraints.stringIncludesDate(f1.workitem.basNumber, f1.workitem.invoiceDate)\"],[\"not\",WorkitemModel,\"f1\",\"f1.validation['workitem.basNumber'].outcome === 'incomplete'\"],[\"not\",WorkitemModel,\"f1\",\"f1.validation['workitem.invoiceDate'].outcome === 'incomplete'\"]],function(facts,flow){var f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1;defined.Number,defined.Date;var emit=flow.emit,ruleName=\"basNumberHasInvoiceDate\";emit(\"activated\",{rule:ruleName});var outcome=new RuleOutcome({type:\"error\",msg:\"The BAS number needs to contain the invoice date\"});recordOutcome(this,RuleOutcome,f1,\"workitem.basNumber\",ruleName,outcome,\"invalid\")}),this.rule(\"basNumberIsComplete\",{priority:1,scope:scope},[[WorkitemModel,\"f1\",\"constraints.hasPath(f1.workitem, 'basNumber')\"],[\"not\",WorkitemModel,\"f1\",\"f1.workitem.basNumber !== ''\"]],function(facts,flow){var f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1;defined.Number;var emit=flow.emit,ruleName=\"basNumberIsComplete\";emit(\"activated\",{rule:ruleName});var outcome=new RuleOutcome({type:\"warning\",msg:\"The BAS number has not been completed\"});recordOutcome(this,RuleOutcome,f1,\"workitem.basNumber\",ruleName,outcome,\"incomplete\")}),this.rule(\"workitemIsValid\",{scope:scope},[[WorkitemModel,\"f1\",\"constraints.hasPath(f1.workitem, 'basNumber')\"],[WorkitemModel,\"f1\",\"constraints.hasPath(f1.workitem, 'invoiceDate')\"],[\"not\",WorkitemModel,\"f1\",\"f1.validation['workitem.basNumber'].outcome === 'valid' AND f1.validation['workitem.invoiceDate'].outcome === 'valid'\"],[\"not\",WorkitemModel,\"f1\",\"constraints.hasPath(f1.validation['workitem'], 'info.workitemIsComplete')\"]],function(facts,flow){var f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1;defined.Number,defined.Date;var emit=flow.emit,ruleName=\"workitemIsValid\";emit(\"activated\",{rule:ruleName});var outcome=new RuleOutcome({type:\"error\",msg:\"The workitem requires the following to be valid:\\n - BAS Number\\n - Invoice Date\"});recordOutcome(this,RuleOutcome,f1,\"workitem\",ruleName,outcome,\"invalid\")}),this.rule(\"workitemIsComplete\",{priority:1,scope:scope},[[WorkitemModel,\"f1\",\"constraints.hasPath(f1.workitem, 'basNumber')\"],[WorkitemModel,\"f1\",\"constraints.hasPath(f1.workitem, 'invoiceDate')\"],[\"or\",[WorkitemModel,\"f1\",\"f1.validation['workitem.basNumber'].outcome === 'incomplete'\"],[WorkitemModel,\"f1\",\"f1.validation['workitem.invoiceDate'].outcome === 'incomplete'\"]]],function(facts,flow){var f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1,emit=flow.emit,ruleName=\"workitemIsComplete\";emit(\"activated\",{rule:ruleName});var outcome=new RuleOutcome({type:\"warning\",msg:\"The workitem is not complete\"});recordOutcome(this,RuleOutcome,f1,\"workitem\",ruleName,outcome,\"incomplete\")}),this.rule(\"workitemCanCheckout\",{scope:scope},[[WorkitemModel,\"f1\",\"constraints.hasPath(f1, 'workitem')\"],[AppStateModel,\"f2\",\"constraints.hasPath(f2.appState, 'online')\"],[\"or\",[\"not\",AppStateModel,\"f2\",\"isTrue(f2.appState.online)\"],[\"not\",WorkitemModel,\"f1\",\"f1.validation['workitem'].outcome === 'valid'\"]]],function(facts,flow){var f1=facts.f1,f1=facts.f1,f1=facts.f1,f1=facts.f1,emit=flow.emit,ruleName=\"workitemCanCheckout\";emit(\"activated\",{rule:ruleName});var outcome=new RuleOutcome({type:\"error\",msg:\"The workitem requires the following before checking out:\\n - Online\\n - Workitem\"});recordOutcome(this,RuleOutcome,f1,\"custom.workitem.checkout\",ruleName,outcome,\"invalid\")})})}}()}\"undefined\"!=typeof exports?\"undefined\"!=typeof module&&module.exports&&(module.exports=_getCompiled(require(\"nools\"))):\"function\"==typeof define&&define.amd?define([\"nools\"],function(nools){return _getCompiled(nools)}):_getCompiled(this.nools)()}.call(this);"
]
},
"mtime": 1466927154021
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/examples/test.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [
"interopRequireDefault"
],
"marked": [],
"modules": {
"imports": [
{
"source": "./test-transpile",
"imported": [
"default"
],
"specifiers": [
{
"kind": "named",
"imported": "default",
"local": "createFlow"
}
]
}
],
"exports": {
"exported": [],
"specifiers": []
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/examples/test.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/examples/test.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "test.es6",
"sourceFileName": "test.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "test"
},
"ignored": false,
"code": "'use strict';\n\nvar _testTranspile = require('./test-transpile');\n\nvar _testTranspile2 = babelHelpers.interopRequireDefault(_testTranspile);\n\nconsole.log((0, _testTranspile2.default)()); // import nools from 'nools';\n// import * as helpers from '../src/helpers';\n\n// const source = nools.transpile('./test.nools', { name: 'TestFlow' });\n//\n// console.log(source);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QuZXM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0E7Ozs7QUFFQSxRQUFRLEdBQVIsQ0FBWSw4QkFBWixFIiwiZmlsZSI6InRlc3QuZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0IG5vb2xzIGZyb20gJ25vb2xzJztcbi8vIGltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnLi4vc3JjL2hlbHBlcnMnO1xuXG4vLyBjb25zdCBzb3VyY2UgPSBub29scy50cmFuc3BpbGUoJy4vdGVzdC5ub29scycsIHsgbmFtZTogJ1Rlc3RGbG93JyB9KTtcbi8vXG4vLyBjb25zb2xlLmxvZyhzb3VyY2UpO1xuXG5pbXBvcnQgY3JlYXRlRmxvdyBmcm9tICcuL3Rlc3QtdHJhbnNwaWxlJztcblxuY29uc29sZS5sb2coY3JlYXRlRmxvdygpKTtcbiJdfQ==",
"ast": null,
"map": {
"version": 3,
"sources": [
"test.es6"
],
"names": [],
"mappings": ";;AAOA;;;;AAEA,QAAQ,GAAR,CAAY,8BAAZ,E",
"file": "test.es6",
"sourcesContent": [
"// import nools from 'nools';\n// import * as helpers from '../src/helpers';\n\n// const source = nools.transpile('./test.nools', { name: 'TestFlow' });\n//\n// console.log(source);\n\nimport createFlow from './test-transpile';\n\nconsole.log(createFlow());\n"
]
},
"mtime": 1467034389584
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/src/models.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [],
"marked": [],
"modules": {
"imports": [
{
"source": "./outcomes",
"imported": [
"ValidationOutcome"
],
"specifiers": [
{
"kind": "named",
"imported": "ValidationOutcome",
"local": "ValidationOutcome"
}
]
}
],
"exports": {
"exported": [
"generic"
],
"specifiers": [
{
"kind": "local",
"local": "generic",
"exported": "generic"
}
]
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/models.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/models.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "models.es6",
"sourceFileName": "models.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "models"
},
"ignored": false,
"code": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.generic = undefined;\n\nvar _outcomes = require('./outcomes');\n\n/**\n * Generic Models\n */\n\nclass WorkitemModel {\n constructor(model) {\n this.workitem = model;\n this.validation = {\n 'workitem.state': new _outcomes.ValidationOutcome(),\n workitem: new _outcomes.ValidationOutcome()\n };\n\n // Private\n this._defType = 'WorkitemModel';\n }\n} /* models.es6 */\n\n\nclass AppStateModel {\n constructor(model) {\n this.appState = model;\n this.validation = {};\n\n // Private\n this._defType = 'AppStateModel';\n }\n}\n\nclass PayloadModel {\n constructor(model) {\n this.payload = model;\n this.validation = {};\n\n // Private\n this._defType = 'PayloadModel';\n }\n}\n\nconst generic = exports.generic = {\n WorkitemModel,\n AppStateModel,\n PayloadModel\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vZGVscy5lczYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOzs7Ozs7QUFNQSxNQUFNLGFBQU4sQ0FBb0I7QUFDbEIsY0FBWSxLQUFaLEVBQW1CO0FBQ2pCLFNBQUssUUFBTCxHQUFnQixLQUFoQjtBQUNBLFNBQUssVUFBTCxHQUFrQjtBQUNoQix3QkFBa0IsaUNBREY7QUFFaEIsZ0JBQVU7QUFGTSxLQUFsQjs7O0FBTUEsU0FBSyxRQUFMLEdBQWdCLGVBQWhCO0FBQ0Q7QUFWaUIsQzs7O0FBYXBCLE1BQU0sYUFBTixDQUFvQjtBQUNsQixjQUFZLEtBQVosRUFBbUI7QUFDakIsU0FBSyxRQUFMLEdBQWdCLEtBQWhCO0FBQ0EsU0FBSyxVQUFMLEdBQWtCLEVBQWxCOzs7QUFHQSxTQUFLLFFBQUwsR0FBZ0IsZUFBaEI7QUFDRDtBQVBpQjs7QUFVcEIsTUFBTSxZQUFOLENBQW1CO0FBQ2pCLGNBQVksS0FBWixFQUFtQjtBQUNqQixTQUFLLE9BQUwsR0FBZSxLQUFmO0FBQ0EsU0FBSyxVQUFMLEdBQWtCLEVBQWxCOzs7QUFHQSxTQUFLLFFBQUwsR0FBZ0IsY0FBaEI7QUFDRDtBQVBnQjs7QUFVWixNQUFNLDRCQUFVO0FBQ3JCLGVBRHFCO0FBRXJCLGVBRnFCO0FBR3JCO0FBSHFCLENBQWhCIiwiZmlsZSI6Im1vZGVscy5lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBtb2RlbHMuZXM2ICovXG5pbXBvcnQgeyBWYWxpZGF0aW9uT3V0Y29tZSB9IGZyb20gJy4vb3V0Y29tZXMnO1xuXG4vKipcbiAqIEdlbmVyaWMgTW9kZWxzXG4gKi9cblxuY2xhc3MgV29ya2l0ZW1Nb2RlbCB7XG4gIGNvbnN0cnVjdG9yKG1vZGVsKSB7XG4gICAgdGhpcy53b3JraXRlbSA9IG1vZGVsO1xuICAgIHRoaXMudmFsaWRhdGlvbiA9IHtcbiAgICAgICd3b3JraXRlbS5zdGF0ZSc6IG5ldyBWYWxpZGF0aW9uT3V0Y29tZSgpLFxuICAgICAgd29ya2l0ZW06IG5ldyBWYWxpZGF0aW9uT3V0Y29tZSgpLFxuICAgIH07XG5cbiAgICAvLyBQcml2YXRlXG4gICAgdGhpcy5fZGVmVHlwZSA9ICdXb3JraXRlbU1vZGVsJztcbiAgfVxufVxuXG5jbGFzcyBBcHBTdGF0ZU1vZGVsIHtcbiAgY29uc3RydWN0b3IobW9kZWwpIHtcbiAgICB0aGlzLmFwcFN0YXRlID0gbW9kZWw7XG4gICAgdGhpcy52YWxpZGF0aW9uID0ge307XG5cbiAgICAvLyBQcml2YXRlXG4gICAgdGhpcy5fZGVmVHlwZSA9ICdBcHBTdGF0ZU1vZGVsJztcbiAgfVxufVxuXG5jbGFzcyBQYXlsb2FkTW9kZWwge1xuICBjb25zdHJ1Y3Rvcihtb2RlbCkge1xuICAgIHRoaXMucGF5bG9hZCA9IG1vZGVsO1xuICAgIHRoaXMudmFsaWRhdGlvbiA9IHt9O1xuXG4gICAgLy8gUHJpdmF0ZVxuICAgIHRoaXMuX2RlZlR5cGUgPSAnUGF5bG9hZE1vZGVsJztcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2VuZXJpYyA9IHtcbiAgV29ya2l0ZW1Nb2RlbCxcbiAgQXBwU3RhdGVNb2RlbCxcbiAgUGF5bG9hZE1vZGVsLFxufTtcbiJdfQ==",
"ast": null,
"map": {
"version": 3,
"sources": [
"models.es6"
],
"names": [],
"mappings": ";;;;;;;AACA;;;;;;AAMA,MAAM,aAAN,CAAoB;AAClB,cAAY,KAAZ,EAAmB;AACjB,SAAK,QAAL,GAAgB,KAAhB;AACA,SAAK,UAAL,GAAkB;AAChB,wBAAkB,iCADF;AAEhB,gBAAU;AAFM,KAAlB;;;AAMA,SAAK,QAAL,GAAgB,eAAhB;AACD;AAViB,C;;;AAapB,MAAM,aAAN,CAAoB;AAClB,cAAY,KAAZ,EAAmB;AACjB,SAAK,QAAL,GAAgB,KAAhB;AACA,SAAK,UAAL,GAAkB,EAAlB;;;AAGA,SAAK,QAAL,GAAgB,eAAhB;AACD;AAPiB;;AAUpB,MAAM,YAAN,CAAmB;AACjB,cAAY,KAAZ,EAAmB;AACjB,SAAK,OAAL,GAAe,KAAf;AACA,SAAK,UAAL,GAAkB,EAAlB;;;AAGA,SAAK,QAAL,GAAgB,cAAhB;AACD;AAPgB;;AAUZ,MAAM,4BAAU;AACrB,eADqB;AAErB,eAFqB;AAGrB;AAHqB,CAAhB",
"file": "models.es6",
"sourcesContent": [
"/* models.es6 */\nimport { ValidationOutcome } from './outcomes';\n\n/**\n * Generic Models\n */\n\nclass WorkitemModel {\n constructor(model) {\n this.workitem = model;\n this.validation = {\n 'workitem.state': new ValidationOutcome(),\n workitem: new ValidationOutcome(),\n };\n\n // Private\n this._defType = 'WorkitemModel';\n }\n}\n\nclass AppStateModel {\n constructor(model) {\n this.appState = model;\n this.validation = {};\n\n // Private\n this._defType = 'AppStateModel';\n }\n}\n\nclass PayloadModel {\n constructor(model) {\n this.payload = model;\n this.validation = {};\n\n // Private\n this._defType = 'PayloadModel';\n }\n}\n\nexport const generic = {\n WorkitemModel,\n AppStateModel,\n PayloadModel,\n};\n"
]
},
"mtime": 1466965151318
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/src/outcomes.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [],
"marked": [],
"modules": {
"imports": [],
"exports": {
"exported": [
"ValidationOutcome",
"RuleOutcome"
],
"specifiers": [
{
"kind": "local",
"local": "ValidationOutcome",
"exported": "ValidationOutcome"
},
{
"kind": "local",
"local": "RuleOutcome",
"exported": "RuleOutcome"
}
]
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/outcomes.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/outcomes.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "outcomes.es6",
"sourceFileName": "outcomes.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "outcomes"
},
"ignored": false,
"code": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/* outcomes.es6 */\n\n/**\n * The validation status of a partiticular entity\n *\n * @param props: object of properties of the validation status\n * outcome: the status of the validation at this point ['valid' | 'invalid' | 'incomplete']\n * info: an array of outcome information pertaining to the validation\n *\n * NOTE The validation outcome will start as being valid. The rule engine operates\n * on the principle of attempting to identify and add errors to the an outcome throughout the ruleset.\n * If no errors are added, the validity of the outcome remains.\n */\nclass ValidationOutcome {\n constructor(props) {\n const _props = props || {};\n this.outcome = _props.outcome || 'valid';\n this.info = _props.info || {};\n }\n}\n\nexports.ValidationOutcome = ValidationOutcome; /**\n * The outcome of a rule used to track the error reason info around validation\n *\n * @param props: object of properties of the rule outcome\n * type: the type of outcome ['error' | 'warning']\n * msg: the error/warning message\n */\n\nclass RuleOutcome {\n constructor(props) {\n const _props = props || {};\n this.type = _props.type || undefined;\n this.msg = _props.msg || 'The rule identified an error';\n }\n}\nexports.RuleOutcome = RuleOutcome;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm91dGNvbWVzLmVzNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFhTyxNQUFNLGlCQUFOLENBQXdCO0FBQzdCLGNBQVksS0FBWixFQUFtQjtBQUNqQixVQUFNLFNBQVMsU0FBUyxFQUF4QjtBQUNBLFNBQUssT0FBTCxHQUFlLE9BQU8sT0FBUCxJQUFrQixPQUFqQztBQUNBLFNBQUssSUFBTCxHQUFZLE9BQU8sSUFBUCxJQUFlLEVBQTNCO0FBQ0Q7QUFMNEI7O1FBQWxCLGlCLEdBQUEsaUI7Ozs7Ozs7O0FBZU4sTUFBTSxXQUFOLENBQWtCO0FBQ3ZCLGNBQVksS0FBWixFQUFtQjtBQUNqQixVQUFNLFNBQVMsU0FBUyxFQUF4QjtBQUNBLFNBQUssSUFBTCxHQUFZLE9BQU8sSUFBUCxJQUFlLFNBQTNCO0FBQ0EsU0FBSyxHQUFMLEdBQVcsT0FBTyxHQUFQLElBQWMsOEJBQXpCO0FBQ0Q7QUFMc0I7UUFBWixXLEdBQUEsVyIsImZpbGUiOiJvdXRjb21lcy5lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBvdXRjb21lcy5lczYgKi9cblxuLyoqXG4gKiBUaGUgdmFsaWRhdGlvbiBzdGF0dXMgb2YgYSBwYXJ0aXRpY3VsYXIgZW50aXR5XG4gKlxuICogQHBhcmFtIHByb3BzOiBvYmplY3Qgb2YgcHJvcGVydGllcyBvZiB0aGUgdmFsaWRhdGlvbiBzdGF0dXNcbiAqICAgICAgICAgICAgICAgICAgICAgIG91dGNvbWU6IHRoZSBzdGF0dXMgb2YgdGhlIHZhbGlkYXRpb24gYXQgdGhpcyBwb2ludCBbJ3ZhbGlkJyB8ICdpbnZhbGlkJyB8ICdpbmNvbXBsZXRlJ11cbiAqICAgICAgICAgICAgICAgICAgICAgIGluZm86IGFuIGFycmF5IG9mIG91dGNvbWUgaW5mb3JtYXRpb24gcGVydGFpbmluZyB0byB0aGUgdmFsaWRhdGlvblxuICpcbiAqIE5PVEUgVGhlIHZhbGlkYXRpb24gb3V0Y29tZSB3aWxsIHN0YXJ0IGFzIGJlaW5nIHZhbGlkLiBUaGUgcnVsZSBlbmdpbmUgb3BlcmF0ZXNcbiAqIG9uIHRoZSBwcmluY2lwbGUgb2YgYXR0ZW1wdGluZyB0byBpZGVudGlmeSBhbmQgYWRkIGVycm9ycyB0byB0aGUgYW4gb3V0Y29tZSB0aHJvdWdob3V0IHRoZSBydWxlc2V0LlxuICogSWYgbm8gZXJyb3JzIGFyZSBhZGRlZCwgdGhlIHZhbGlkaXR5IG9mIHRoZSBvdXRjb21lIHJlbWFpbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uT3V0Y29tZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgY29uc3QgX3Byb3BzID0gcHJvcHMgfHwge307XG4gICAgdGhpcy5vdXRjb21lID0gX3Byb3BzLm91dGNvbWUgfHwgJ3ZhbGlkJztcbiAgICB0aGlzLmluZm8gPSBfcHJvcHMuaW5mbyB8fCB7fTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBvdXRjb21lIG9mIGEgcnVsZSB1c2VkIHRvIHRyYWNrIHRoZSBlcnJvciByZWFzb24gaW5mbyBhcm91bmQgdmFsaWRhdGlvblxuICpcbiAqIEBwYXJhbSBwcm9wczogb2JqZWN0IG9mIHByb3BlcnRpZXMgb2YgdGhlIHJ1bGUgb3V0Y29tZVxuICogICAgICAgICAgICAgICAgICAgICAgdHlwZTogdGhlIHR5cGUgb2Ygb3V0Y29tZSBbJ2Vycm9yJyB8ICd3YXJuaW5nJ11cbiAqICAgICAgICAgICAgICAgICAgICAgIG1zZzogdGhlIGVycm9yL3dhcm5pbmcgbWVzc2FnZVxuICovXG5leHBvcnQgY2xhc3MgUnVsZU91dGNvbWUge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIGNvbnN0IF9wcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgIHRoaXMudHlwZSA9IF9wcm9wcy50eXBlIHx8IHVuZGVmaW5lZDtcbiAgICB0aGlzLm1zZyA9IF9wcm9wcy5tc2cgfHwgJ1RoZSBydWxlIGlkZW50aWZpZWQgYW4gZXJyb3InO1xuICB9XG59XG4iXX0=",
"ast": null,
"map": {
"version": 3,
"sources": [
"outcomes.es6"
],
"names": [],
"mappings": ";;;;;;;;;;;;;;;;;;AAaO,MAAM,iBAAN,CAAwB;AAC7B,cAAY,KAAZ,EAAmB;AACjB,UAAM,SAAS,SAAS,EAAxB;AACA,SAAK,OAAL,GAAe,OAAO,OAAP,IAAkB,OAAjC;AACA,SAAK,IAAL,GAAY,OAAO,IAAP,IAAe,EAA3B;AACD;AAL4B;;QAAlB,iB,GAAA,iB;;;;;;;;AAeN,MAAM,WAAN,CAAkB;AACvB,cAAY,KAAZ,EAAmB;AACjB,UAAM,SAAS,SAAS,EAAxB;AACA,SAAK,IAAL,GAAY,OAAO,IAAP,IAAe,SAA3B;AACA,SAAK,GAAL,GAAW,OAAO,GAAP,IAAc,8BAAzB;AACD;AALsB;QAAZ,W,GAAA,W",
"file": "outcomes.es6",
"sourcesContent": [
"/* outcomes.es6 */\n\n/**\n * The validation status of a partiticular entity\n *\n * @param props: object of properties of the validation status\n * outcome: the status of the validation at this point ['valid' | 'invalid' | 'incomplete']\n * info: an array of outcome information pertaining to the validation\n *\n * NOTE The validation outcome will start as being valid. The rule engine operates\n * on the principle of attempting to identify and add errors to the an outcome throughout the ruleset.\n * If no errors are added, the validity of the outcome remains.\n */\nexport class ValidationOutcome {\n constructor(props) {\n const _props = props || {};\n this.outcome = _props.outcome || 'valid';\n this.info = _props.info || {};\n }\n}\n\n/**\n * The outcome of a rule used to track the error reason info around validation\n *\n * @param props: object of properties of the rule outcome\n * type: the type of outcome ['error' | 'warning']\n * msg: the error/warning message\n */\nexport class RuleOutcome {\n constructor(props) {\n const _props = props || {};\n this.type = _props.type || undefined;\n this.msg = _props.msg || 'The rule identified an error';\n }\n}\n"
]
},
"mtime": 1466964669920
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/examples/test-transpile.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [],
"marked": [],
"modules": {
"imports": [],
"exports": {
"exported": [
"options"
],
"specifiers": [
{
"kind": "local",
"local": "options",
"exported": "default"
}
]
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/examples/test-transpile.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/examples/test-transpile.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "test-transpile.es6",
"sourceFileName": "test-transpile.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "test-transpile"
},
"ignored": false,
"code": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (options) {\n options = options || {};\n var bind = function (scope, fn) {\n return function () {\n return fn.apply(scope, arguments);\n };\n },\n defined = {\n Array: Array,\n String: String,\n Number: Number,\n Boolean: Boolean,\n RegExp: RegExp,\n Date: Date,\n Object: Object\n },\n scope = options.scope || {};\n var optDefined = options.defined || {};\n for (var i in optDefined) {\n defined[i] = optDefined[i];\n }\n return nools.flow('TestFlow', function () {\n scope.console = console;\n this.rule('TestRule', {\n \"scope\": scope\n }, [[PayloadModel, \"f1\", \"isDefined(f1.model)\"]], function (facts, flow) {\n var console = scope.console;\n console.log('This worked!');\n });\n });\n};\n\n;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QtdHJhbnNwaWxlLmVzNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7a0JBQWUsVUFBUyxPQUFULEVBQWtCO0FBQy9CLFlBQVUsV0FBVyxFQUFyQjtBQUNBLE1BQUksT0FBTyxVQUFTLEtBQVQsRUFBZ0IsRUFBaEIsRUFBb0I7QUFDM0IsV0FBTyxZQUFXO0FBQ2hCLGFBQU8sR0FBRyxLQUFILENBQVMsS0FBVCxFQUFnQixTQUFoQixDQUFQO0FBQ0QsS0FGRDtBQUdELEdBSkg7QUFBQSxNQUtFLFVBQVU7QUFDUixXQUFPLEtBREM7QUFFUixZQUFRLE1BRkE7QUFHUixZQUFRLE1BSEE7QUFJUixhQUFTLE9BSkQ7QUFLUixZQUFRLE1BTEE7QUFNUixVQUFNLElBTkU7QUFPUixZQUFRO0FBUEEsR0FMWjtBQUFBLE1BY0UsUUFBUSxRQUFRLEtBQVIsSUFBaUIsRUFkM0I7QUFlQSxNQUFJLGFBQWEsUUFBUSxPQUFSLElBQW1CLEVBQXBDO0FBQ0EsT0FBSyxJQUFJLENBQVQsSUFBYyxVQUFkLEVBQTBCO0FBQ3hCLFlBQVEsQ0FBUixJQUFhLFdBQVcsQ0FBWCxDQUFiO0FBQ0Q7QUFDRCxTQUFPLE1BQU0sSUFBTixDQUFXLFVBQVgsRUFBdUIsWUFBVztBQUN2QyxVQUFNLE9BQU4sR0FBZ0IsT0FBaEI7QUFDQSxTQUFLLElBQUwsQ0FBVSxVQUFWLEVBQXNCO0FBQ3BCLGVBQVM7QUFEVyxLQUF0QixFQUVHLENBQUMsQ0FBQyxZQUFELEVBQWUsSUFBZixFQUFxQixxQkFBckIsQ0FBRCxDQUZILEVBRWtELFVBQVMsS0FBVCxFQUFnQixJQUFoQixFQUFzQjtBQUN0RSxVQUFJLFVBQVUsTUFBTSxPQUFwQjtBQUNBLGNBQVEsR0FBUixDQUFZLGNBQVo7QUFDRCxLQUxEO0FBTUQsR0FSTSxDQUFQO0FBU0QsQzs7QUFBQSIsImZpbGUiOiJ0ZXN0LXRyYW5zcGlsZS5lczYiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgYmluZCA9IGZ1bmN0aW9uKHNjb3BlLCBmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkoc2NvcGUsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH0sXG4gICAgZGVmaW5lZCA9IHtcbiAgICAgIEFycmF5OiBBcnJheSxcbiAgICAgIFN0cmluZzogU3RyaW5nLFxuICAgICAgTnVtYmVyOiBOdW1iZXIsXG4gICAgICBCb29sZWFuOiBCb29sZWFuLFxuICAgICAgUmVnRXhwOiBSZWdFeHAsXG4gICAgICBEYXRlOiBEYXRlLFxuICAgICAgT2JqZWN0OiBPYmplY3RcbiAgICB9LFxuICAgIHNjb3BlID0gb3B0aW9ucy5zY29wZSB8fCB7fTtcbiAgdmFyIG9wdERlZmluZWQgPSBvcHRpb25zLmRlZmluZWQgfHwge307XG4gIGZvciAodmFyIGkgaW4gb3B0RGVmaW5lZCkge1xuICAgIGRlZmluZWRbaV0gPSBvcHREZWZpbmVkW2ldO1xuICB9XG4gIHJldHVybiBub29scy5mbG93KCdUZXN0RmxvdycsIGZ1bmN0aW9uKCkge1xuICAgIHNjb3BlLmNvbnNvbGUgPSBjb25zb2xlO1xuICAgIHRoaXMucnVsZSgnVGVzdFJ1bGUnLCB7XG4gICAgICBcInNjb3BlXCI6IHNjb3BlXG4gICAgfSwgW1tQYXlsb2FkTW9kZWwsIFwiZjFcIiwgXCJpc0RlZmluZWQoZjEubW9kZWwpXCJdXSwgZnVuY3Rpb24oZmFjdHMsIGZsb3cpIHtcbiAgICAgIHZhciBjb25zb2xlID0gc2NvcGUuY29uc29sZTtcbiAgICAgIGNvbnNvbGUubG9nKCdUaGlzIHdvcmtlZCEnKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuIl19",
"ast": null,
"map": {
"version": 3,
"sources": [
"test-transpile.es6"
],
"names": [],
"mappings": ";;;;;;kBAAe,UAAS,OAAT,EAAkB;AAC/B,YAAU,WAAW,EAArB;AACA,MAAI,OAAO,UAAS,KAAT,EAAgB,EAAhB,EAAoB;AAC3B,WAAO,YAAW;AAChB,aAAO,GAAG,KAAH,CAAS,KAAT,EAAgB,SAAhB,CAAP;AACD,KAFD;AAGD,GAJH;AAAA,MAKE,UAAU;AACR,WAAO,KADC;AAER,YAAQ,MAFA;AAGR,YAAQ,MAHA;AAIR,aAAS,OAJD;AAKR,YAAQ,MALA;AAMR,UAAM,IANE;AAOR,YAAQ;AAPA,GALZ;AAAA,MAcE,QAAQ,QAAQ,KAAR,IAAiB,EAd3B;AAeA,MAAI,aAAa,QAAQ,OAAR,IAAmB,EAApC;AACA,OAAK,IAAI,CAAT,IAAc,UAAd,EAA0B;AACxB,YAAQ,CAAR,IAAa,WAAW,CAAX,CAAb;AACD;AACD,SAAO,MAAM,IAAN,CAAW,UAAX,EAAuB,YAAW;AACvC,UAAM,OAAN,GAAgB,OAAhB;AACA,SAAK,IAAL,CAAU,UAAV,EAAsB;AACpB,eAAS;AADW,KAAtB,EAEG,CAAC,CAAC,YAAD,EAAe,IAAf,EAAqB,qBAArB,CAAD,CAFH,EAEkD,UAAS,KAAT,EAAgB,IAAhB,EAAsB;AACtE,UAAI,UAAU,MAAM,OAApB;AACA,cAAQ,GAAR,CAAY,cAAZ;AACD,KALD;AAMD,GARM,CAAP;AASD,C;;AAAA",
"file": "test-transpile.es6",
"sourcesContent": [
"export default function(options) {\n options = options || {};\n var bind = function(scope, fn) {\n return function() {\n return fn.apply(scope, arguments);\n };\n },\n defined = {\n Array: Array,\n String: String,\n Number: Number,\n Boolean: Boolean,\n RegExp: RegExp,\n Date: Date,\n Object: Object\n },\n scope = options.scope || {};\n var optDefined = options.defined || {};\n for (var i in optDefined) {\n defined[i] = optDefined[i];\n }\n return nools.flow('TestFlow', function() {\n scope.console = console;\n this.rule('TestRule', {\n \"scope\": scope\n }, [[PayloadModel, \"f1\", \"isDefined(f1.model)\"]], function(facts, flow) {\n var console = scope.console;\n console.log('This worked!');\n });\n });\n};\n"
]
},
"mtime": 1467034368602
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/src/engines/invoice-process-engine.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [],
"marked": [],
"modules": {
"imports": [
{
"source": "../engine",
"imported": [
"ValidationBase"
],
"specifiers": [
{
"kind": "named",
"imported": "ValidationBase",
"local": "ValidationBase"
}
]
}
],
"exports": {
"exported": [
"InvoiceProcessEngine"
],
"specifiers": [
{
"kind": "local",
"local": "InvoiceProcessEngine",
"exported": "InvoiceProcessEngine"
}
]
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/engines/invoice-process-engine.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/engines/invoice-process-engine.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "invoice-process-engine.es6",
"sourceFileName": "invoice-process-engine.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "invoice-process-engine"
},
"ignored": false,
"code": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.InvoiceProcessEngine = undefined;\n\nvar _engine = require('../engine');\n\nclass InvoiceProcessEngine extends _engine.ValidationBase {\n constructor() {\n super('invoice-process-rules');\n }\n\n _workitemFacts(model) {\n const WorkItemModel = this._getDefined('WorkItemModel');\n const ValidationOutcome = this._getDefined('ValidationOutcome');\n return new WorkItemModel(model, {\n 'workitem.state': new ValidationOutcome()\n });\n }\n\n validate(models) {\n return super.validate(models).then(session => {\n console.log(session.getFacts());\n return session.getFacts().map(f => f.validation);\n });\n }\n}\n\nexports.InvoiceProcessEngine = InvoiceProcessEngine; /* invoice-process-engine.es6 */\n\ndebugger;\nconst foo = new InvoiceProcessEngine();\nfoo.validate({\n workitem: { state: 'foo' }\n}).then(outcomes => console.log(outcomes));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImludm9pY2UtcHJvY2Vzcy1lbmdpbmUuZXM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTs7QUFFTyxNQUFNLG9CQUFOLGdDQUFrRDtBQUN2RCxnQkFBYztBQUNaLFVBQU0sdUJBQU47QUFDRDs7QUFFRCxpQkFBZSxLQUFmLEVBQXNCO0FBQ3BCLFVBQU0sZ0JBQWdCLEtBQUssV0FBTCxDQUFpQixlQUFqQixDQUF0QjtBQUNBLFVBQU0sb0JBQW9CLEtBQUssV0FBTCxDQUFpQixtQkFBakIsQ0FBMUI7QUFDQSxXQUFPLElBQUksYUFBSixDQUFrQixLQUFsQixFQUF5QjtBQUM5Qix3QkFBa0IsSUFBSSxpQkFBSjtBQURZLEtBQXpCLENBQVA7QUFHRDs7QUFFRCxXQUFTLE1BQVQsRUFBaUI7QUFDZixXQUFPLE1BQ0osUUFESSxDQUNLLE1BREwsRUFFSixJQUZJLENBRUMsV0FBVztBQUNmLGNBQVEsR0FBUixDQUFZLFFBQVEsUUFBUixFQUFaO0FBQ0EsYUFBTyxRQUFRLFFBQVIsR0FBbUIsR0FBbkIsQ0FBdUIsS0FBSyxFQUFFLFVBQTlCLENBQVA7QUFDRCxLQUxJLENBQVA7QUFNRDtBQXBCc0Q7O1FBQTVDLG9CLEdBQUEsb0I7O0FBdUJiO0FBQ0EsTUFBTSxNQUFNLElBQUksb0JBQUosRUFBWjtBQUNBLElBQUksUUFBSixDQUFhO0FBQ1gsWUFBVSxFQUFFLE9BQU8sS0FBVDtBQURDLENBQWIsRUFHQyxJQUhELENBR00sWUFBWSxRQUFRLEdBQVIsQ0FBWSxRQUFaLENBSGxCIiwiZmlsZSI6Imludm9pY2UtcHJvY2Vzcy1lbmdpbmUuZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLyogaW52b2ljZS1wcm9jZXNzLWVuZ2luZS5lczYgKi9cbmltcG9ydCB7IFZhbGlkYXRpb25CYXNlIH0gZnJvbSAnLi4vZW5naW5lJztcblxuZXhwb3J0IGNsYXNzIEludm9pY2VQcm9jZXNzRW5naW5lIGV4dGVuZHMgVmFsaWRhdGlvbkJhc2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignaW52b2ljZS1wcm9jZXNzLXJ1bGVzJyk7XG4gIH1cblxuICBfd29ya2l0ZW1GYWN0cyhtb2RlbCkge1xuICAgIGNvbnN0IFdvcmtJdGVtTW9kZWwgPSB0aGlzLl9nZXREZWZpbmVkKCdXb3JrSXRlbU1vZGVsJyk7XG4gICAgY29uc3QgVmFsaWRhdGlvbk91dGNvbWUgPSB0aGlzLl9nZXREZWZpbmVkKCdWYWxpZGF0aW9uT3V0Y29tZScpO1xuICAgIHJldHVybiBuZXcgV29ya0l0ZW1Nb2RlbChtb2RlbCwge1xuICAgICAgJ3dvcmtpdGVtLnN0YXRlJzogbmV3IFZhbGlkYXRpb25PdXRjb21lKCksXG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZShtb2RlbHMpIHtcbiAgICByZXR1cm4gc3VwZXJcbiAgICAgIC52YWxpZGF0ZShtb2RlbHMpXG4gICAgICAudGhlbihzZXNzaW9uID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coc2Vzc2lvbi5nZXRGYWN0cygpKTtcbiAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0RmFjdHMoKS5tYXAoZiA9PiBmLnZhbGlkYXRpb24pXG4gICAgICB9KTtcbiAgfVxufVxuXG5kZWJ1Z2dlcjtcbmNvbnN0IGZvbyA9IG5ldyBJbnZvaWNlUHJvY2Vzc0VuZ2luZSgpO1xuZm9vLnZhbGlkYXRlKHtcbiAgd29ya2l0ZW06IHsgc3RhdGU6ICdmb28nIH0sXG59KVxuLnRoZW4ob3V0Y29tZXMgPT4gY29uc29sZS5sb2cob3V0Y29tZXMpKTtcbiJdfQ==",
"ast": null,
"map": {
"version": 3,
"sources": [
"invoice-process-engine.es6"
],
"names": [],
"mappings": ";;;;;;;AACA;;AAEO,MAAM,oBAAN,gCAAkD;AACvD,gBAAc;AACZ,UAAM,uBAAN;AACD;;AAED,iBAAe,KAAf,EAAsB;AACpB,UAAM,gBAAgB,KAAK,WAAL,CAAiB,eAAjB,CAAtB;AACA,UAAM,oBAAoB,KAAK,WAAL,CAAiB,mBAAjB,CAA1B;AACA,WAAO,IAAI,aAAJ,CAAkB,KAAlB,EAAyB;AAC9B,wBAAkB,IAAI,iBAAJ;AADY,KAAzB,CAAP;AAGD;;AAED,WAAS,MAAT,EAAiB;AACf,WAAO,MACJ,QADI,CACK,MADL,EAEJ,IAFI,CAEC,WAAW;AACf,cAAQ,GAAR,CAAY,QAAQ,QAAR,EAAZ;AACA,aAAO,QAAQ,QAAR,GAAmB,GAAnB,CAAuB,KAAK,EAAE,UAA9B,CAAP;AACD,KALI,CAAP;AAMD;AApBsD;;QAA5C,oB,GAAA,oB;;AAuBb;AACA,MAAM,MAAM,IAAI,oBAAJ,EAAZ;AACA,IAAI,QAAJ,CAAa;AACX,YAAU,EAAE,OAAO,KAAT;AADC,CAAb,EAGC,IAHD,CAGM,YAAY,QAAQ,GAAR,CAAY,QAAZ,CAHlB",
"file": "invoice-process-engine.es6",
"sourcesContent": [
"/* invoice-process-engine.es6 */\nimport { ValidationBase } from '../engine';\n\nexport class InvoiceProcessEngine extends ValidationBase {\n constructor() {\n super('invoice-process-rules');\n }\n\n _workitemFacts(model) {\n const WorkItemModel = this._getDefined('WorkItemModel');\n const ValidationOutcome = this._getDefined('ValidationOutcome');\n return new WorkItemModel(model, {\n 'workitem.state': new ValidationOutcome(),\n });\n }\n\n validate(models) {\n return super\n .validate(models)\n .then(session => {\n console.log(session.getFacts());\n return session.getFacts().map(f => f.validation)\n });\n }\n}\n\ndebugger;\nconst foo = new InvoiceProcessEngine();\nfoo.validate({\n workitem: { state: 'foo' },\n})\n.then(outcomes => console.log(outcomes));\n"
]
},
"mtime": 1467051565270
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/src/engine.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [
"interopRequireDefault"
],
"marked": [],
"modules": {
"imports": [
{
"source": "path",
"imported": [
"default"
],
"specifiers": [
{
"kind": "named",
"imported": "default",
"local": "path"
}
]
},
{
"source": "nools",
"imported": [
"default"
],
"specifiers": [
{
"kind": "named",
"imported": "default",
"local": "nools"
}
]
},
{
"source": "./helpers",
"imported": [
"recordOutcome",
"constraints"
],
"specifiers": [
{
"kind": "named",
"imported": "recordOutcome",
"local": "recordOutcome"
},
{
"kind": "named",
"imported": "constraints",
"local": "constraints"
}
]
}
],
"exports": {
"exported": [
"ValidationEngine"
],
"specifiers": [
{
"kind": "local",
"local": "ValidationEngine",
"exported": "ValidationEngine"
}
]
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/engine.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/engine.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "engine.es6",
"sourceFileName": "engine.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "engine"
},
"ignored": false,
"code": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ValidationEngine = undefined;\n\nvar _path = require('path');\n\nvar _path2 = babelHelpers.interopRequireDefault(_path);\n\nvar _nools = require('nools');\n\nvar _nools2 = babelHelpers.interopRequireDefault(_nools);\n\nvar _helpers = require('./helpers');\n\n/**\n * This class should be extended to define the fact getters as well as encapsulate\n * the validate function, including retrieval of extra data as facts\n *\n * @param flowname: the name of the flow to attempt to use\n */\nclass ValidationEngine {\n constructor(flowName) {\n // Only attempt to compile if flow does not already exist\n if (!_nools2.default.hasFlow(flowName)) {\n // Consolidate options\n const options = {\n name: flowName,\n scope: {\n recordOutcome: _helpers.recordOutcome,\n constraints: _helpers.constraints\n }\n };\n\n // Attempt to compile (hardcoded for now) TODO: Check NODE_ENV\n try {\n this._flow = _nools2.default.compile(_path2.default.join(process.cwd(), '.rules', `${ flowName }.nools`), options);\n } catch (e) {\n throw new Error(`Nools compile returned error:\\n${ e }`);\n }\n\n if (!_nools2.default.hasFlow(flowName)) {\n throw new Error(`Nools flow ${ flowName } not found.`);\n }\n\n this.hasCompiled = true;\n } else {\n this._flow = _nools2.default.getFlow(flowName);\n this.hasCompiled = false;\n }\n }\n\n /**\n * Get a fact definition from the rule source\n *\n * @param name: the name of the defintition\n * @return the definition, if found\n *\n * Will throw an error if the definition cannot be found\n */\n _getDefined(name) {\n return this._flow.getDefined(name);\n }\n\n /**\n * Converts the input models into facts for assertion\n *\n * @param models: an object with a key per model\n * @return an array of facts\n */\n _collectFacts(models) {\n if (typeof models !== 'object') {\n throw new Error('expected modesl to be an object');\n }\n\n return Object.keys(models).reduce((array, key) => {\n const method = `_${ key }Facts`;\n if (!this[method]) {\n throw new Error(`Facts method ${ method } not implemented.`);\n }\n array.push(this[method](models[key]));\n return array;\n }, []);\n }\n\n /**\n * Validate the models\n * @param models: an object with a key per model\n * @return a promise, resolving with the session object, rejecting with the error object\n */\n rawValidate(models) {\n // Collect the facts given the models\n const facts = this._collectFacts(models);\n\n // Create session, asserting the facts\n const session = this._flow.getSession.apply(this._flow, facts);\n\n return new Promise((resolve, reject) => {\n // Execute\n session.match(err => {\n if (err) {\n reject(err);\n } else {\n resolve(session);\n }\n });\n });\n }\n\n /**\n * Validate the models and return verbosely\n * @param models: an object with a key per model\n * @return a promise, resolving with an object including the session and facts,\n * rejecting with the error object\n */\n verboseValidate(models) {\n return this.rawValidate(models).then(session => {\n const facts = session.getFacts();\n const outcomes = {};\n\n // Organise the models\n facts.forEach(fact => {\n Object.keys(fact).forEach(key => {\n if (key !== 'validation' && key !== '_defType') {\n outcomes[`${ key }Model`] = fact;\n }\n });\n });\n\n return {\n session,\n models,\n facts,\n outcomes,\n hasCompiled: this.hasCompiled\n };\n });\n }\n\n /**\n * Validate the models, returning only the errors\n *\n * @param models: an object with a key per model\n * @return a promise, resolving with an object of ValidationOutcomes that are\n * not valid, rejecting with the error object\n */\n validate(models) {\n return this.rawValidate(models).then(session => {\n const errors = {};\n session.getFacts().forEach(fact => {\n for (const key of Object.keys(fact.validation)) {\n // Only do so if the outcome was not valid\n if (fact.validation[key].outcome !== 'valid') {\n if (errors.hasOwnProperty(key)) {\n throw new Error(`More than one \"${ key }\" validation subject exists in validation output`);\n }\n\n // Append the errors object with the validation outcome\n errors[key] = fact.validation[key];\n }\n }\n });\n\n return errors;\n });\n }\n}\nexports.ValidationEngine = ValidationEngine; /* engine.es6 */\n//# sourceMappingURL=data:application/json;base64,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QyxFQUFnRDtBQUM5QyxxQkFBVSxJQUFFLEdBQUksUUFBaEIsSUFBMEIsSUFBMUI7QUFDRDtBQUNGLFNBSkQ7QUFLRCxPQU5EOztBQVFBLGFBQU87QUFDTCxlQURLO0FBRUwsY0FGSztBQUdMLGFBSEs7QUFJTCxnQkFKSztBQUtMLHFCQUFhLEtBQUs7QUFMYixPQUFQO0FBT0QsS0FyQkksQ0FBUDtBQXNCRDs7Ozs7Ozs7O0FBU0QsV0FBUyxNQUFULEVBQWlCO0FBQ2YsV0FBTyxLQUFLLFdBQUwsQ0FBaUIsTUFBakIsRUFDSixJQURJLENBQ0UsT0FBRCxJQUFhO0FBQ2pCLFlBQU0sU0FBUyxFQUFmO0FBQ0EsY0FBUSxRQUFSLEdBQW1CLE9BQW5CLENBQTRCLElBQUQsSUFBVTtBQUNuQyxhQUFLLE1BQU0sR0FBWCxJQUFrQixPQUFPLElBQVAsQ0FBWSxLQUFLLFVBQWpCLENBQWxCLEVBQWdEOztBQUU5QyxjQUFJLEtBQUssVUFBTCxDQUFnQixHQUFoQixFQUFxQixPQUFyQixLQUFpQyxPQUFyQyxFQUE4QztBQUM1QyxnQkFBSSxPQUFPLGNBQVAsQ0FBc0IsR0FBdEIsQ0FBSixFQUFnQztBQUM5QixvQkFBTSxJQUFJLEtBQUosQ0FBVyxtQkFBaUIsR0FBSSxtREFBaEMsQ0FBTjtBQUNEOzs7QUFHRCxtQkFBTyxHQUFQLElBQWMsS0FBSyxVQUFMLENBQWdCLEdBQWhCLENBQWQ7QUFDRDtBQUNGO0FBQ0YsT0FaRDs7QUFjQSxhQUFPLE1BQVA7QUFDRCxLQWxCSSxDQUFQO0FBbUJEO0FBbkoyQjtRQUFqQixnQixHQUFBLGdCIiwiZmlsZSI6ImVuZ2luZS5lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlbmdpbmUuZXM2ICovXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBub29scyBmcm9tICdub29scyc7XG5pbXBvcnQgeyByZWNvcmRPdXRjb21lLCBjb25zdHJhaW50cyB9IGZyb20gJy4vaGVscGVycyc7XG5cbi8qKlxuICogVGhpcyBjbGFzcyBzaG91bGQgYmUgZXh0ZW5kZWQgdG8gZGVmaW5lIHRoZSBmYWN0IGdldHRlcnMgYXMgd2VsbCBhcyBlbmNhcHN1bGF0ZVxuICogdGhlIHZhbGlkYXRlIGZ1bmN0aW9uLCBpbmNsdWRpbmcgcmV0cmlldmFsIG9mIGV4dHJhIGRhdGEgYXMgZmFjdHNcbiAqXG4gKiBAcGFyYW0gZmxvd25hbWU6IHRoZSBuYW1lIG9mIHRoZSBmbG93IHRvIGF0dGVtcHQgdG8gdXNlXG4gKi9cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRW5naW5lIHtcbiAgY29uc3RydWN0b3IoZmxvd05hbWUpIHtcbiAgICAvLyBPbmx5IGF0dGVtcHQgdG8gY29tcGlsZSBpZiBmbG93IGRvZXMgbm90IGFscmVhZHkgZXhpc3RcbiAgICBpZiAoIW5vb2xzLmhhc0Zsb3coZmxvd05hbWUpKSB7XG4gICAgICAvLyBDb25zb2xpZGF0ZSBvcHRpb25zXG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBuYW1lOiBmbG93TmFtZSxcbiAgICAgICAgc2NvcGU6IHtcbiAgICAgICAgICByZWNvcmRPdXRjb21lLFxuICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgLy8gQXR0ZW1wdCB0byBjb21waWxlIChoYXJkY29kZWQgZm9yIG5vdykgVE9ETzogQ2hlY2sgTk9ERV9FTlZcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX2Zsb3cgPSBub29scy5jb21waWxlKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnLnJ1bGVzJywgYCR7Zmxvd05hbWV9Lm5vb2xzYCksIG9wdGlvbnMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vb2xzIGNvbXBpbGUgcmV0dXJuZWQgZXJyb3I6XFxuJHtlfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW5vb2xzLmhhc0Zsb3coZmxvd05hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm9vbHMgZmxvdyAke2Zsb3dOYW1lfSBub3QgZm91bmQuYCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGFzQ29tcGlsZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9mbG93ID0gbm9vbHMuZ2V0RmxvdyhmbG93TmFtZSk7XG4gICAgICB0aGlzLmhhc0NvbXBpbGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIGZhY3QgZGVmaW5pdGlvbiBmcm9tIHRoZSBydWxlIHNvdXJjZVxuICAgKlxuICAgKiBAcGFyYW0gbmFtZTogdGhlIG5hbWUgb2YgdGhlIGRlZmludGl0aW9uXG4gICAqIEByZXR1cm4gdGhlIGRlZmluaXRpb24sIGlmIGZvdW5kXG4gICAqXG4gICAqIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIGRlZmluaXRpb24gY2Fubm90IGJlIGZvdW5kXG4gICAqL1xuICBfZ2V0RGVmaW5lZChuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zsb3cuZ2V0RGVmaW5lZChuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgaW5wdXQgbW9kZWxzIGludG8gZmFjdHMgZm9yIGFzc2VydGlvblxuICAgKlxuICAgKiBAcGFyYW0gbW9kZWxzOiBhbiBvYmplY3Qgd2l0aCBhIGtleSBwZXIgbW9kZWxcbiAgICogQHJldHVybiBhbiBhcnJheSBvZiBmYWN0c1xuICAgKi9cbiAgX2NvbGxlY3RGYWN0cyhtb2RlbHMpIHtcbiAgICBpZiAodHlwZW9mIG1vZGVscyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgbW9kZXNsIHRvIGJlIGFuIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhtb2RlbHMpXG4gICAgICAucmVkdWNlKChhcnJheSwga2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IGBfJHtrZXl9RmFjdHNgO1xuICAgICAgICBpZiAoIXRoaXNbbWV0aG9kXSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFjdHMgbWV0aG9kICR7bWV0aG9kfSBub3QgaW1wbGVtZW50ZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgYXJyYXkucHVzaCh0aGlzW21ldGhvZF0obW9kZWxzW2tleV0pKTtcbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgfSwgW10pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoZSBtb2RlbHNcbiAgICogQHBhcmFtIG1vZGVsczogYW4gb2JqZWN0IHdpdGggYSBrZXkgcGVyIG1vZGVsXG4gICAqIEByZXR1cm4gYSBwcm9taXNlLCByZXNvbHZpbmcgd2l0aCB0aGUgc2Vzc2lvbiBvYmplY3QsIHJlamVjdGluZyB3aXRoIHRoZSBlcnJvciBvYmplY3RcbiAgICovXG4gIHJhd1ZhbGlkYXRlKG1vZGVscykge1xuICAgIC8vIENvbGxlY3QgdGhlIGZhY3RzIGdpdmVuIHRoZSBtb2RlbHNcbiAgICBjb25zdCBmYWN0cyA9IHRoaXMuX2NvbGxlY3RGYWN0cyhtb2RlbHMpO1xuXG4gICAgLy8gQ3JlYXRlIHNlc3Npb24sIGFzc2VydGluZyB0aGUgZmFjdHNcbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5fZmxvdy5nZXRTZXNzaW9uLmFwcGx5KHRoaXMuX2Zsb3csIGZhY3RzKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBFeGVjdXRlXG4gICAgICBzZXNzaW9uLm1hdGNoKChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoc2Vzc2lvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoZSBtb2RlbHMgYW5kIHJldHVybiB2ZXJib3NlbHlcbiAgICogQHBhcmFtIG1vZGVsczogYW4gb2JqZWN0IHdpdGggYSBrZXkgcGVyIG1vZGVsXG4gICAqIEByZXR1cm4gYSBwcm9taXNlLCByZXNvbHZpbmcgd2l0aCBhbiBvYmplY3QgaW5jbHVkaW5nIHRoZSBzZXNzaW9uIGFuZCBmYWN0cyxcbiAgICogcmVqZWN0aW5nIHdpdGggdGhlIGVycm9yIG9iamVjdFxuICAgKi9cbiAgdmVyYm9zZVZhbGlkYXRlKG1vZGVscykge1xuICAgIHJldHVybiB0aGlzLnJhd1ZhbGlkYXRlKG1vZGVscylcbiAgICAgIC50aGVuKChzZXNzaW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGZhY3RzID0gc2Vzc2lvbi5nZXRGYWN0cygpO1xuICAgICAgICBjb25zdCBvdXRjb21lcyA9IHt9O1xuXG4gICAgICAgIC8vIE9yZ2FuaXNlIHRoZSBtb2RlbHNcbiAgICAgICAgZmFjdHMuZm9yRWFjaCgoZmFjdCkgPT4ge1xuICAgICAgICAgIE9iamVjdC5rZXlzKGZhY3QpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3ZhbGlkYXRpb24nICYmIGtleSAhPT0gJ19kZWZUeXBlJykge1xuICAgICAgICAgICAgICBvdXRjb21lc1tgJHtrZXl9TW9kZWxgXSA9IGZhY3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgICBtb2RlbHMsXG4gICAgICAgICAgZmFjdHMsXG4gICAgICAgICAgb3V0Y29tZXMsXG4gICAgICAgICAgaGFzQ29tcGlsZWQ6IHRoaXMuaGFzQ29tcGlsZWQsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgbW9kZWxzLCByZXR1cm5pbmcgb25seSB0aGUgZXJyb3JzXG4gICAqXG4gICAqIEBwYXJhbSBtb2RlbHM6IGFuIG9iamVjdCB3aXRoIGEga2V5IHBlciBtb2RlbFxuICAgKiBAcmV0dXJuIGEgcHJvbWlzZSwgcmVzb2x2aW5nIHdpdGggYW4gb2JqZWN0IG9mIFZhbGlkYXRpb25PdXRjb21lcyB0aGF0IGFyZVxuICAgKiBub3QgdmFsaWQsIHJlamVjdGluZyB3aXRoIHRoZSBlcnJvciBvYmplY3RcbiAgICovXG4gIHZhbGlkYXRlKG1vZGVscykge1xuICAgIHJldHVybiB0aGlzLnJhd1ZhbGlkYXRlKG1vZGVscylcbiAgICAgIC50aGVuKChzZXNzaW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHt9O1xuICAgICAgICBzZXNzaW9uLmdldEZhY3RzKCkuZm9yRWFjaCgoZmFjdCkgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGZhY3QudmFsaWRhdGlvbikpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgZG8gc28gaWYgdGhlIG91dGNvbWUgd2FzIG5vdCB2YWxpZFxuICAgICAgICAgICAgaWYgKGZhY3QudmFsaWRhdGlvbltrZXldLm91dGNvbWUgIT09ICd2YWxpZCcpIHtcbiAgICAgICAgICAgICAgaWYgKGVycm9ycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb3JlIHRoYW4gb25lIFwiJHtrZXl9XCIgdmFsaWRhdGlvbiBzdWJqZWN0IGV4aXN0cyBpbiB2YWxpZGF0aW9uIG91dHB1dGApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSBlcnJvcnMgb2JqZWN0IHdpdGggdGhlIHZhbGlkYXRpb24gb3V0Y29tZVxuICAgICAgICAgICAgICBlcnJvcnNba2V5XSA9IGZhY3QudmFsaWRhdGlvbltrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICAgIH0pO1xuICB9XG59XG4iXX0=",
"ast": null,
"map": {
"version": 3,
"sources": [
"engine.es6"
],
"names": [],
"mappings": "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",
"file": "engine.es6",
"sourcesContent": [
"/* engine.es6 */\nimport path from 'path';\nimport nools from 'nools';\nimport { recordOutcome, constraints } from './helpers';\n\n/**\n * This class should be extended to define the fact getters as well as encapsulate\n * the validate function, including retrieval of extra data as facts\n *\n * @param flowname: the name of the flow to attempt to use\n */\nexport class ValidationEngine {\n constructor(flowName) {\n // Only attempt to compile if flow does not already exist\n if (!nools.hasFlow(flowName)) {\n // Consolidate options\n const options = {\n name: flowName,\n scope: {\n recordOutcome,\n constraints,\n },\n };\n\n // Attempt to compile (hardcoded for now) TODO: Check NODE_ENV\n try {\n this._flow = nools.compile(path.join(process.cwd(), '.rules', `${flowName}.nools`), options);\n } catch (e) {\n throw new Error(`Nools compile returned error:\\n${e}`);\n }\n\n if (!nools.hasFlow(flowName)) {\n throw new Error(`Nools flow ${flowName} not found.`);\n }\n\n this.hasCompiled = true;\n } else {\n this._flow = nools.getFlow(flowName);\n this.hasCompiled = false;\n }\n }\n\n /**\n * Get a fact definition from the rule source\n *\n * @param name: the name of the defintition\n * @return the definition, if found\n *\n * Will throw an error if the definition cannot be found\n */\n _getDefined(name) {\n return this._flow.getDefined(name);\n }\n\n /**\n * Converts the input models into facts for assertion\n *\n * @param models: an object with a key per model\n * @return an array of facts\n */\n _collectFacts(models) {\n if (typeof models !== 'object') {\n throw new Error('expected modesl to be an object');\n }\n\n return Object.keys(models)\n .reduce((array, key) => {\n const method = `_${key}Facts`;\n if (!this[method]) {\n throw new Error(`Facts method ${method} not implemented.`);\n }\n array.push(this[method](models[key]));\n return array;\n }, []);\n }\n\n /**\n * Validate the models\n * @param models: an object with a key per model\n * @return a promise, resolving with the session object, rejecting with the error object\n */\n rawValidate(models) {\n // Collect the facts given the models\n const facts = this._collectFacts(models);\n\n // Create session, asserting the facts\n const session = this._flow.getSession.apply(this._flow, facts);\n\n return new Promise((resolve, reject) => {\n // Execute\n session.match((err) => {\n if (err) {\n reject(err);\n } else {\n resolve(session);\n }\n });\n });\n }\n\n /**\n * Validate the models and return verbosely\n * @param models: an object with a key per model\n * @return a promise, resolving with an object including the session and facts,\n * rejecting with the error object\n */\n verboseValidate(models) {\n return this.rawValidate(models)\n .then((session) => {\n const facts = session.getFacts();\n const outcomes = {};\n\n // Organise the models\n facts.forEach((fact) => {\n Object.keys(fact).forEach((key) => {\n if (key !== 'validation' && key !== '_defType') {\n outcomes[`${key}Model`] = fact;\n }\n });\n });\n\n return {\n session,\n models,\n facts,\n outcomes,\n hasCompiled: this.hasCompiled,\n };\n });\n }\n\n /**\n * Validate the models, returning only the errors\n *\n * @param models: an object with a key per model\n * @return a promise, resolving with an object of ValidationOutcomes that are\n * not valid, rejecting with the error object\n */\n validate(models) {\n return this.rawValidate(models)\n .then((session) => {\n const errors = {};\n session.getFacts().forEach((fact) => {\n for (const key of Object.keys(fact.validation)) {\n // Only do so if the outcome was not valid\n if (fact.validation[key].outcome !== 'valid') {\n if (errors.hasOwnProperty(key)) {\n throw new Error(`More than one \"${key}\" validation subject exists in validation output`);\n }\n\n // Append the errors object with the validation outcome\n errors[key] = fact.validation[key];\n }\n }\n });\n\n return errors;\n });\n }\n}\n"
]
},
"mtime": 1467198278495
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/resources/transpile.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [
"interopRequireDefault"
],
"marked": [],
"modules": {
"imports": [
{
"source": "nools",
"imported": [
"default"
],
"specifiers": [
{
"kind": "named",
"imported": "default",
"local": "nools"
}
]
},
{
"source": "path",
"imported": [
"default"
],
"specifiers": [
{
"kind": "named",
"imported": "default",
"local": "path"
}
]
},
{
"source": "fs",
"imported": [
"default"
],
"specifiers": [
{
"kind": "named",
"imported": "default",
"local": "fs"
}
]
}
],
"exports": {
"exported": [],
"specifiers": []
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/resources/transpile.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/resources/transpile.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "transpile.es6",
"sourceFileName": "transpile.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "transpile"
},
"ignored": false,
"code": "'use strict';\n\nvar _nools = require('nools');\n\nvar _nools2 = babelHelpers.interopRequireDefault(_nools);\n\nvar _path = require('path');\n\nvar _path2 = babelHelpers.interopRequireDefault(_path);\n\nvar _fs = require('fs');\n\nvar _fs2 = babelHelpers.interopRequireDefault(_fs);\n\nconst buildDir = _path2.default.join(process.cwd(), 'rules-build'); /* transpile.es6 */\n\nconst sourceDir = _path2.default.join(process.cwd(), '.rules');\n\nfunction transpileFiles(files) {\n files.forEach(file => {\n if (file.endsWith('.nools')) {\n const name = file.split('.nools')[0];\n console.log('Transpiling', name);\n\n try {\n _fs2.default.writeFile(`${ _path2.default.join(buildDir, name) }.js`, `module.exports = ${ _nools2.default.transpile(_path2.default.join(sourceDir, file), { name }) }`);\n } catch (e) {\n throw new Error(`Transpiling '${ name }' returned error:\\n${ e }`);\n }\n }\n });\n}\n\n_fs2.default.mkdirSync(buildDir);\ntranspileFiles(_fs2.default.readdirSync(sourceDir));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRyYW5zcGlsZS5lczYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFFQSxNQUFNLFdBQVcsZUFBSyxJQUFMLENBQVUsUUFBUSxHQUFSLEVBQVYsRUFBeUIsYUFBekIsQ0FBakIsQzs7QUFDQSxNQUFNLFlBQVksZUFBSyxJQUFMLENBQVUsUUFBUSxHQUFSLEVBQVYsRUFBeUIsUUFBekIsQ0FBbEI7O0FBRUEsU0FBUyxjQUFULENBQXdCLEtBQXhCLEVBQStCO0FBQzdCLFFBQU0sT0FBTixDQUFlLElBQUQsSUFBVTtBQUN0QixRQUFJLEtBQUssUUFBTCxDQUFjLFFBQWQsQ0FBSixFQUE2QjtBQUMzQixZQUFNLE9BQU8sS0FBSyxLQUFMLENBQVcsUUFBWCxFQUFxQixDQUFyQixDQUFiO0FBQ0EsY0FBUSxHQUFSLENBQVksYUFBWixFQUEyQixJQUEzQjs7QUFFQSxVQUFJO0FBQ0YscUJBQUcsU0FBSCxDQUFjLElBQUUsZUFBSyxJQUFMLENBQVUsUUFBVixFQUFvQixJQUFwQixDQUEwQixNQUExQyxFQUFpRCxxQkFBbUIsZ0JBQU0sU0FBTixDQUFnQixlQUFLLElBQUwsQ0FBVSxTQUFWLEVBQXFCLElBQXJCLENBQWhCLEVBQTRDLEVBQUUsSUFBRixFQUE1QyxDQUFzRCxHQUExSDtBQUNELE9BRkQsQ0FFRSxPQUFPLENBQVAsRUFBVTtBQUNWLGNBQU0sSUFBSSxLQUFKLENBQVcsaUJBQWUsSUFBSyx3QkFBcUIsQ0FBRSxHQUF0RCxDQUFOO0FBQ0Q7QUFDRjtBQUNGLEdBWEQ7QUFZRDs7QUFFRCxhQUFHLFNBQUgsQ0FBYSxRQUFiO0FBQ0EsZUFBZSxhQUFHLFdBQUgsQ0FBZSxTQUFmLENBQWYiLCJmaWxlIjoidHJhbnNwaWxlLmVzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qIHRyYW5zcGlsZS5lczYgKi9cbmltcG9ydCBub29scyBmcm9tICdub29scyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5cbmNvbnN0IGJ1aWxkRGlyID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdydWxlcy1idWlsZCcpO1xuY29uc3Qgc291cmNlRGlyID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICcucnVsZXMnKTtcblxuZnVuY3Rpb24gdHJhbnNwaWxlRmlsZXMoZmlsZXMpIHtcbiAgZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgIGlmIChmaWxlLmVuZHNXaXRoKCcubm9vbHMnKSkge1xuICAgICAgY29uc3QgbmFtZSA9IGZpbGUuc3BsaXQoJy5ub29scycpWzBdO1xuICAgICAgY29uc29sZS5sb2coJ1RyYW5zcGlsaW5nJywgbmFtZSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZzLndyaXRlRmlsZShgJHtwYXRoLmpvaW4oYnVpbGREaXIsIG5hbWUpfS5qc2AsIGBtb2R1bGUuZXhwb3J0cyA9ICR7bm9vbHMudHJhbnNwaWxlKHBhdGguam9pbihzb3VyY2VEaXIsIGZpbGUpLCB7IG5hbWUgfSl9YCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVHJhbnNwaWxpbmcgJyR7bmFtZX0nIHJldHVybmVkIGVycm9yOlxcbiR7ZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG5mcy5ta2RpclN5bmMoYnVpbGREaXIpO1xudHJhbnNwaWxlRmlsZXMoZnMucmVhZGRpclN5bmMoc291cmNlRGlyKSk7XG4iXX0=",
"ast": null,
"map": {
"version": 3,
"sources": [
"transpile.es6"
],
"names": [],
"mappings": ";;AACA;;;;AACA;;;;AACA;;;;AAEA,MAAM,WAAW,eAAK,IAAL,CAAU,QAAQ,GAAR,EAAV,EAAyB,aAAzB,CAAjB,C;;AACA,MAAM,YAAY,eAAK,IAAL,CAAU,QAAQ,GAAR,EAAV,EAAyB,QAAzB,CAAlB;;AAEA,SAAS,cAAT,CAAwB,KAAxB,EAA+B;AAC7B,QAAM,OAAN,CAAe,IAAD,IAAU;AACtB,QAAI,KAAK,QAAL,CAAc,QAAd,CAAJ,EAA6B;AAC3B,YAAM,OAAO,KAAK,KAAL,CAAW,QAAX,EAAqB,CAArB,CAAb;AACA,cAAQ,GAAR,CAAY,aAAZ,EAA2B,IAA3B;;AAEA,UAAI;AACF,qBAAG,SAAH,CAAc,IAAE,eAAK,IAAL,CAAU,QAAV,EAAoB,IAApB,CAA0B,MAA1C,EAAiD,qBAAmB,gBAAM,SAAN,CAAgB,eAAK,IAAL,CAAU,SAAV,EAAqB,IAArB,CAAhB,EAA4C,EAAE,IAAF,EAA5C,CAAsD,GAA1H;AACD,OAFD,CAEE,OAAO,CAAP,EAAU;AACV,cAAM,IAAI,KAAJ,CAAW,iBAAe,IAAK,wBAAqB,CAAE,GAAtD,CAAN;AACD;AACF;AACF,GAXD;AAYD;;AAED,aAAG,SAAH,CAAa,QAAb;AACA,eAAe,aAAG,WAAH,CAAe,SAAf,CAAf",
"file": "transpile.es6",
"sourcesContent": [
"/* transpile.es6 */\nimport nools from 'nools';\nimport path from 'path';\nimport fs from 'fs';\n\nconst buildDir = path.join(process.cwd(), 'rules-build');\nconst sourceDir = path.join(process.cwd(), '.rules');\n\nfunction transpileFiles(files) {\n files.forEach((file) => {\n if (file.endsWith('.nools')) {\n const name = file.split('.nools')[0];\n console.log('Transpiling', name);\n\n try {\n fs.writeFile(`${path.join(buildDir, name)}.js`, `module.exports = ${nools.transpile(path.join(sourceDir, file), { name })}`);\n } catch (e) {\n throw new Error(`Transpiling '${name}' returned error:\\n${e}`);\n }\n }\n });\n}\n\nfs.mkdirSync(buildDir);\ntranspileFiles(fs.readdirSync(sourceDir));\n"
]
},
"mtime": 1467113443777
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/resources/transpiler/transpiler.js\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [],
"marked": [],
"modules": {
"imports": [],
"exports": {
"exported": [],
"specifiers": []
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/resources/transpiler/transpiler.js",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/resources/transpiler/transpiler.js",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "transpiler.js",
"sourceFileName": "transpiler.js",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "transpiler"
},
"ignored": false,
"code": "'use strict';\n\nvar extd = require('nools/lib/extended'),\n forEach = extd.forEach,\n indexOf = extd.indexOf,\n merge = extd.merge,\n isString = extd.isString,\n modifiers = require('nools/lib/compile/common').modifiers,\n constraintMatcher = require('nools/lib/constraintMatcher'),\n parser = require('nools/lib/parser');\n\nfunction definedToJs(options) {\n /*jshint evil:true*/\n options = isString(options) ? new Function(\"return \" + options + \";\")() : options;\n var ret = [\"(function(){\"],\n value;\n\n if (options.hasOwnProperty(\"constructor\") && \"function\" === typeof options.constructor) {\n ret.push(\"var Defined = \" + options.constructor.toString() + \";\");\n } else {\n ret.push(\"var Defined = function(opts){ for(var i in opts){if(opts.hasOwnProperty(i)){this[i] = opts[i];}}};\");\n }\n ret.push(\"var proto = Defined.prototype;\");\n for (var key in options) {\n if (options.hasOwnProperty(key)) {\n value = options[key];\n ret.push(\"proto.\" + key + \" = \" + (extd.isFunction(value) ? value.toString() : extd.format(\"%j\", value)) + \";\");\n }\n }\n ret.push(\"return Defined;\");\n ret.push(\"}())\");\n return ret.join(\"\");\n}\n\nfunction actionToJs(action, identifiers, defined, scope) {\n var declares = [],\n usedVars = {};\n forEach(identifiers, function (i) {\n if (action.indexOf(i) !== -1) {\n usedVars[i] = true;\n declares.push(\"var \" + i + \"= facts.\" + i + \";\");\n }\n });\n extd(defined).keys().forEach(function (i) {\n if (action.indexOf(i) !== -1 && !usedVars[i]) {\n usedVars[i] = true;\n declares.push(\"var \" + i + \"= defined.\" + i + \";\");\n }\n });\n\n extd(scope).keys().forEach(function (i) {\n if (action.indexOf(i) !== -1 && !usedVars[i]) {\n usedVars[i] = true;\n declares.push(\"var \" + i + \"= scope.\" + i + \";\");\n }\n });\n extd(modifiers).forEach(function (i) {\n if (action.indexOf(i) !== -1 && !usedVars[i]) {\n declares.push(\"var \" + i + \"= flow.\" + i + \";\");\n }\n });\n var params = [\"facts\", 'flow'];\n if (/next\\(.*\\)/.test(action)) {\n params.push(\"next\");\n }\n action = declares.join(\"\") + action;\n try {\n return [\"function(\", params.join(\",\"), \"){\", action, \"}\"].join(\"\");\n } catch (e) {\n throw new Error(\"Invalid action : \" + action + \"\\n\" + e.message);\n }\n}\n\nfunction parseConstraintModifier(constraint, ret) {\n if (constraint.length && extd.isString(constraint[0])) {\n var modifier = constraint[0].match(\" *(from)\");\n if (modifier) {\n modifier = modifier[0];\n switch (modifier) {\n case \"from\":\n ret.push(', \"', constraint.shift(), '\"');\n break;\n default:\n throw new Error(\"Unrecognized modifier \" + modifier);\n }\n }\n }\n}\n\nfunction parseConstraintHash(constraint, ret, identifiers) {\n if (constraint.length && extd.isHash(constraint[0])) {\n //ret of options\n var refs = constraint.shift();\n extd(refs).values().forEach(function (ident) {\n if (indexOf(identifiers, ident) === -1) {\n identifiers.push(ident);\n }\n });\n ret.push(',' + extd.format('%j', [refs]));\n }\n}\n\nfunction constraintsToJs(constraint, identifiers) {\n constraint = constraint.slice(0);\n var ret = [];\n if (constraint[0] === \"or\") {\n ret.push('[\"' + constraint.shift() + '\"');\n ret.push(extd.map(constraint, function (c) {\n return constraintsToJs(c, identifiers);\n }).join(\",\") + \"]\");\n return ret;\n } else if (constraint[0] === \"not\" || constraint[0] === \"exists\") {\n ret.push('\"', constraint.shift(), '\", ');\n }\n identifiers.push(constraint[1]);\n ret.push(constraint[0], ', \"' + constraint[1].replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, \"\\\\\\\"\") + '\"');\n constraint.splice(0, 2);\n if (constraint.length) {\n //constraint\n var c = constraint.shift();\n if (extd.isString(c) && c) {\n ret.push(',\"' + c.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, \"\\\\\\\"\"), '\"');\n forEach(constraintMatcher.getIdentifiers(parser.parseConstraint(c)), function (i) {\n identifiers.push(i);\n });\n } else {\n ret.push(',\"true\"');\n constraint.unshift(c);\n }\n }\n parseConstraintModifier(constraint, ret);\n parseConstraintHash(constraint, ret, identifiers);\n return '[' + ret.join(\"\") + ']';\n}\n\nexports.transpile = function (flowObj, options) {\n options = options || {};\n var ret = [];\n ret.push(\"module.exports = (function(){\");\n ret.push(\"return function(options){\");\n ret.push(\"options = options || {};\");\n ret.push(\"var bind = function(scope, fn){return function(){return fn.apply(scope, arguments);};}, defined = {Array: Array, String: String, Number: Number, Boolean: Boolean, RegExp: RegExp, Date: Date, Object: Object}, scope = options.scope || {};\");\n ret.push(\"var optDefined = options.defined || {}; for(var i in optDefined){defined[i] = optDefined[i];}\");\n var defined = merge({\n Array: Array,\n String: String,\n Number: Number,\n Boolean: Boolean,\n RegExp: RegExp,\n Date: Date,\n Object: Object\n }, options.define || {});\n if (typeof Buffer !== \"undefined\") {\n defined.Buffer = Buffer;\n }\n var scope = merge({\n console: console\n }, options.scope);\n ret.push([\"return nools.flow('\", options.name, \"', function(){\"].join(\"\"));\n //add any defined classes in the parsed flowObj to defined\n ret.push(extd(flowObj.define || []).map(function (defined) {\n var name = defined.name;\n defined[name] = {};\n return [\"var\", name, \"= defined.\" + name, \"= this.addDefined('\" + name + \"',\", definedToJs(defined.properties) + \");\"].join(\" \");\n }).value().join(\"\\n\"));\n ret.push(extd(flowObj.scope || []).map(function (s) {\n var name = s.name;\n scope[name] = {};\n return [\"var\", name, \"= scope.\" + name, \"= \", s.body, \";\"].join(\" \");\n }).value().join(\"\\n\"));\n ret.push(\"scope.console = console;\\n\");\n\n ret.push(extd(flowObj.rules || []).map(function (rule) {\n var identifiers = [],\n ret = [\"this.rule('\", rule.name.replace(/'/g, \"\\\\'\"), \"'\"],\n options = extd.merge(rule.options || {}, {\n scope: \"scope\"\n });\n ret.push(\",\", extd.format(\"%j\", [options]).replace(/(:\"scope\")/, \":scope\"));\n if (rule.constraints && !extd.isEmpty(rule.constraints)) {\n ret.push(\", [\");\n ret.push(extd(rule.constraints).map(function (c) {\n return constraintsToJs(c, identifiers);\n }).value().join(\",\"));\n ret.push(\"]\");\n }\n ret.push(\",\", actionToJs(rule.action, identifiers, defined, scope));\n ret.push(\");\");\n return ret.join(\"\");\n }).value().join(\"\"));\n ret.push(\"});\");\n ret.push(\"};\");\n ret.push(\"}());\");\n return ret.join(\"\");\n};\n//# sourceMappingURL=data:application/json;base64,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RUFBbUIsV0FBbkIsQ0FBUDtBQUNELE9BRlEsRUFFTixLQUZNLEdBRUUsSUFGRixDQUVPLEdBRlAsQ0FBVDtBQUdBLFVBQUksSUFBSixDQUFTLEdBQVQ7QUFDRDtBQUNELFFBQUksSUFBSixDQUFTLEdBQVQsRUFBYyxXQUFXLEtBQUssTUFBaEIsRUFBd0IsV0FBeEIsRUFBcUMsT0FBckMsRUFBOEMsS0FBOUMsQ0FBZDtBQUNBLFFBQUksSUFBSixDQUFTLElBQVQ7QUFDQSxXQUFPLElBQUksSUFBSixDQUFTLEVBQVQsQ0FBUDtBQUNELEdBakJRLEVBaUJOLEtBakJNLEdBaUJFLElBakJGLENBaUJPLEVBakJQLENBQVQ7QUFrQkEsTUFBSSxJQUFKLENBQVMsS0FBVDtBQUNBLE1BQUksSUFBSixDQUFTLElBQVQ7QUFDQSxNQUFJLElBQUosQ0FBUyxPQUFUO0FBQ0EsU0FBTyxJQUFJLElBQUosQ0FBUyxFQUFULENBQVA7QUFDRCxDQTVERCIsImZpbGUiOiJ0cmFuc3BpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGV4dGQgPSByZXF1aXJlKCdub29scy9saWIvZXh0ZW5kZWQnKSxcbiAgZm9yRWFjaCA9IGV4dGQuZm9yRWFjaCxcbiAgaW5kZXhPZiA9IGV4dGQuaW5kZXhPZixcbiAgbWVyZ2UgPSBleHRkLm1lcmdlLFxuICBpc1N0cmluZyA9IGV4dGQuaXNTdHJpbmcsXG4gIG1vZGlmaWVycyA9IHJlcXVpcmUoJ25vb2xzL2xpYi9jb21waWxlL2NvbW1vbicpLm1vZGlmaWVycyxcbiAgY29uc3RyYWludE1hdGNoZXIgPSByZXF1aXJlKCdub29scy9saWIvY29uc3RyYWludE1hdGNoZXInKSxcbiAgcGFyc2VyID0gcmVxdWlyZSgnbm9vbHMvbGliL3BhcnNlcicpO1xuXG5mdW5jdGlvbiBkZWZpbmVkVG9KcyhvcHRpb25zKSB7XG4gIC8qanNoaW50IGV2aWw6dHJ1ZSovXG4gIG9wdGlvbnMgPSBpc1N0cmluZyhvcHRpb25zKSA/IG5ldyBGdW5jdGlvbihcInJldHVybiBcIiArIG9wdGlvbnMgKyBcIjtcIikoKSA6IG9wdGlvbnM7XG4gIHZhciByZXQgPSBbXCIoZnVuY3Rpb24oKXtcIl0sXG4gICAgdmFsdWU7XG5cbiAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkoXCJjb25zdHJ1Y3RvclwiKSAmJiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgcmV0LnB1c2goXCJ2YXIgRGVmaW5lZCA9IFwiICsgb3B0aW9ucy5jb25zdHJ1Y3Rvci50b1N0cmluZygpICsgXCI7XCIpO1xuICB9IGVsc2Uge1xuICAgIHJldC5wdXNoKFwidmFyIERlZmluZWQgPSBmdW5jdGlvbihvcHRzKXsgZm9yKHZhciBpIGluIG9wdHMpe2lmKG9wdHMuaGFzT3duUHJvcGVydHkoaSkpe3RoaXNbaV0gPSBvcHRzW2ldO319fTtcIik7XG4gIH1cbiAgcmV0LnB1c2goXCJ2YXIgcHJvdG8gPSBEZWZpbmVkLnByb3RvdHlwZTtcIik7XG4gIGZvciAodmFyIGtleSBpbiBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgdmFsdWUgPSBvcHRpb25zW2tleV07XG4gICAgICByZXQucHVzaChcInByb3RvLlwiICsga2V5ICsgXCIgPSBcIiArIChleHRkLmlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUudG9TdHJpbmcoKSA6IGV4dGQuZm9ybWF0KFwiJWpcIiwgdmFsdWUpKSArIFwiO1wiKTtcbiAgICB9XG4gIH1cbiAgcmV0LnB1c2goXCJyZXR1cm4gRGVmaW5lZDtcIik7XG4gIHJldC5wdXNoKFwifSgpKVwiKTtcbiAgcmV0dXJuIHJldC5qb2luKFwiXCIpO1xuXG59XG5cbmZ1bmN0aW9uIGFjdGlvblRvSnMoYWN0aW9uLCBpZGVudGlmaWVycywgZGVmaW5lZCwgc2NvcGUpIHtcbiAgdmFyIGRlY2xhcmVzID0gW10sXG4gICAgdXNlZFZhcnMgPSB7fTtcbiAgZm9yRWFjaChpZGVudGlmaWVycywgZnVuY3Rpb24oaSkge1xuICAgIGlmIChhY3Rpb24uaW5kZXhPZihpKSAhPT0gLTEpIHtcbiAgICAgIHVzZWRWYXJzW2ldID0gdHJ1ZTtcbiAgICAgIGRlY2xhcmVzLnB1c2goXCJ2YXIgXCIgKyBpICsgXCI9IGZhY3RzLlwiICsgaSArIFwiO1wiKTtcbiAgICB9XG4gIH0pO1xuICBleHRkKGRlZmluZWQpLmtleXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICBpZiAoYWN0aW9uLmluZGV4T2YoaSkgIT09IC0xICYmICF1c2VkVmFyc1tpXSkge1xuICAgICAgdXNlZFZhcnNbaV0gPSB0cnVlO1xuICAgICAgZGVjbGFyZXMucHVzaChcInZhciBcIiArIGkgKyBcIj0gZGVmaW5lZC5cIiArIGkgKyBcIjtcIik7XG4gICAgfVxuICB9KTtcblxuICBleHRkKHNjb3BlKS5rZXlzKCkuZm9yRWFjaChmdW5jdGlvbihpKSB7XG4gICAgaWYgKGFjdGlvbi5pbmRleE9mKGkpICE9PSAtMSAmJiAhdXNlZFZhcnNbaV0pIHtcbiAgICAgIHVzZWRWYXJzW2ldID0gdHJ1ZTtcbiAgICAgIGRlY2xhcmVzLnB1c2goXCJ2YXIgXCIgKyBpICsgXCI9IHNjb3BlLlwiICsgaSArIFwiO1wiKTtcbiAgICB9XG4gIH0pO1xuICBleHRkKG1vZGlmaWVycykuZm9yRWFjaChmdW5jdGlvbihpKSB7XG4gICAgaWYgKGFjdGlvbi5pbmRleE9mKGkpICE9PSAtMSAmJiAhdXNlZFZhcnNbaV0pIHtcbiAgICAgIGRlY2xhcmVzLnB1c2goXCJ2YXIgXCIgKyBpICsgXCI9IGZsb3cuXCIgKyBpICsgXCI7XCIpO1xuICAgIH1cbiAgfSk7XG4gIHZhciBwYXJhbXMgPSBbXCJmYWN0c1wiLCAnZmxvdyddO1xuICBpZiAoL25leHRcXCguKlxcKS8udGVzdChhY3Rpb24pKSB7XG4gICAgcGFyYW1zLnB1c2goXCJuZXh0XCIpO1xuICB9XG4gIGFjdGlvbiA9IGRlY2xhcmVzLmpvaW4oXCJcIikgKyBhY3Rpb247XG4gIHRyeSB7XG4gICAgcmV0dXJuIFtcImZ1bmN0aW9uKFwiLCBwYXJhbXMuam9pbihcIixcIiksIFwiKXtcIiwgYWN0aW9uLCBcIn1cIl0uam9pbihcIlwiKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYWN0aW9uIDogXCIgKyBhY3Rpb24gKyBcIlxcblwiICsgZS5tZXNzYWdlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUNvbnN0cmFpbnRNb2RpZmllcihjb25zdHJhaW50LCByZXQpIHtcbiAgaWYgKGNvbnN0cmFpbnQubGVuZ3RoICYmIGV4dGQuaXNTdHJpbmcoY29uc3RyYWludFswXSkpIHtcbiAgICB2YXIgbW9kaWZpZXIgPSBjb25zdHJhaW50WzBdLm1hdGNoKFwiICooZnJvbSlcIik7XG4gICAgaWYgKG1vZGlmaWVyKSB7XG4gICAgICBtb2RpZmllciA9IG1vZGlmaWVyWzBdO1xuICAgICAgc3dpdGNoIChtb2RpZmllcikge1xuICAgICAgICBjYXNlIFwiZnJvbVwiOlxuICAgICAgICAgIHJldC5wdXNoKCcsIFwiJywgY29uc3RyYWludC5zaGlmdCgpLCAnXCInKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgbW9kaWZpZXIgXCIgKyBtb2RpZmllcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ29uc3RyYWludEhhc2goY29uc3RyYWludCwgcmV0LCBpZGVudGlmaWVycykge1xuICBpZiAoY29uc3RyYWludC5sZW5ndGggJiYgZXh0ZC5pc0hhc2goY29uc3RyYWludFswXSkpIHtcbiAgICAvL3JldCBvZiBvcHRpb25zXG4gICAgdmFyIHJlZnMgPSBjb25zdHJhaW50LnNoaWZ0KCk7XG4gICAgZXh0ZChyZWZzKS52YWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGlkZW50KSB7XG4gICAgICBpZiAoaW5kZXhPZihpZGVudGlmaWVycywgaWRlbnQpID09PSAtMSkge1xuICAgICAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXQucHVzaCgnLCcgKyBleHRkLmZvcm1hdCgnJWonLCBbcmVmc10pKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdHJhaW50c1RvSnMoY29uc3RyYWludCwgaWRlbnRpZmllcnMpIHtcbiAgY29uc3RyYWludCA9IGNvbnN0cmFpbnQuc2xpY2UoMCk7XG4gIHZhciByZXQgPSBbXTtcbiAgaWYgKGNvbnN0cmFpbnRbMF0gPT09IFwib3JcIikge1xuICAgIHJldC5wdXNoKCdbXCInICsgY29uc3RyYWludC5zaGlmdCgpICsgJ1wiJyk7XG4gICAgcmV0LnB1c2goZXh0ZC5tYXAoY29uc3RyYWludCwgZnVuY3Rpb24oYykge1xuICAgICAgICByZXR1cm4gY29uc3RyYWludHNUb0pzKGMsIGlkZW50aWZpZXJzKTtcbiAgICAgIH0pLmpvaW4oXCIsXCIpICsgXCJdXCIpO1xuICAgIHJldHVybiByZXQ7XG4gIH0gZWxzZSBpZiAoY29uc3RyYWludFswXSA9PT0gXCJub3RcIiB8fCBjb25zdHJhaW50WzBdID09PSBcImV4aXN0c1wiKSB7XG4gICAgcmV0LnB1c2goJ1wiJywgY29uc3RyYWludC5zaGlmdCgpLCAnXCIsICcpO1xuICB9XG4gIGlkZW50aWZpZXJzLnB1c2goY29uc3RyYWludFsxXSk7XG4gIHJldC5wdXNoKGNvbnN0cmFpbnRbMF0sICcsIFwiJyArIGNvbnN0cmFpbnRbMV0ucmVwbGFjZSgvXFxcXC9nLCBcIlxcXFxcXFxcXCIpLnJlcGxhY2UoL1wiL2csIFwiXFxcXFxcXCJcIikgKyAnXCInKTtcbiAgY29uc3RyYWludC5zcGxpY2UoMCwgMik7XG4gIGlmIChjb25zdHJhaW50Lmxlbmd0aCkge1xuICAgIC8vY29uc3RyYWludFxuICAgIHZhciBjID0gY29uc3RyYWludC5zaGlmdCgpO1xuICAgIGlmIChleHRkLmlzU3RyaW5nKGMpICYmIGMpIHtcbiAgICAgIHJldC5wdXNoKCcsXCInICsgYy5yZXBsYWNlKC9cXFxcL2csIFwiXFxcXFxcXFxcIikucmVwbGFjZSgvXCIvZywgXCJcXFxcXFxcIlwiKSwgJ1wiJyk7XG4gICAgICBmb3JFYWNoKGNvbnN0cmFpbnRNYXRjaGVyLmdldElkZW50aWZpZXJzKHBhcnNlci5wYXJzZUNvbnN0cmFpbnQoYykpLCBmdW5jdGlvbihpKSB7XG4gICAgICAgIGlkZW50aWZpZXJzLnB1c2goaSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0LnB1c2goJyxcInRydWVcIicpO1xuICAgICAgY29uc3RyYWludC51bnNoaWZ0KGMpO1xuICAgIH1cbiAgfVxuICBwYXJzZUNvbnN0cmFpbnRNb2RpZmllcihjb25zdHJhaW50LCByZXQpO1xuICBwYXJzZUNvbnN0cmFpbnRIYXNoKGNvbnN0cmFpbnQsIHJldCwgaWRlbnRpZmllcnMpO1xuICByZXR1cm4gJ1snICsgcmV0LmpvaW4oXCJcIikgKyAnXSc7XG59XG5cbmV4cG9ydHMudHJhbnNwaWxlID0gZnVuY3Rpb24oZmxvd09iaiwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHJldCA9IFtdO1xuICByZXQucHVzaChcIm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uKCl7XCIpO1xuICByZXQucHVzaChcInJldHVybiBmdW5jdGlvbihvcHRpb25zKXtcIik7XG4gIHJldC5wdXNoKFwib3B0aW9ucyA9IG9wdGlvbnMgfHwge307XCIpO1xuICByZXQucHVzaChcInZhciBiaW5kID0gZnVuY3Rpb24oc2NvcGUsIGZuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZm4uYXBwbHkoc2NvcGUsIGFyZ3VtZW50cyk7fTt9LCBkZWZpbmVkID0ge0FycmF5OiBBcnJheSwgU3RyaW5nOiBTdHJpbmcsIE51bWJlcjogTnVtYmVyLCBCb29sZWFuOiBCb29sZWFuLCBSZWdFeHA6IFJlZ0V4cCwgRGF0ZTogRGF0ZSwgT2JqZWN0OiBPYmplY3R9LCBzY29wZSA9IG9wdGlvbnMuc2NvcGUgfHwge307XCIpO1xuICByZXQucHVzaChcInZhciBvcHREZWZpbmVkID0gb3B0aW9ucy5kZWZpbmVkIHx8IHt9OyBmb3IodmFyIGkgaW4gb3B0RGVmaW5lZCl7ZGVmaW5lZFtpXSA9IG9wdERlZmluZWRbaV07fVwiKTtcbiAgdmFyIGRlZmluZWQgPSBtZXJnZSh7XG4gICAgQXJyYXk6IEFycmF5LFxuICAgIFN0cmluZzogU3RyaW5nLFxuICAgIE51bWJlcjogTnVtYmVyLFxuICAgIEJvb2xlYW46IEJvb2xlYW4sXG4gICAgUmVnRXhwOiBSZWdFeHAsXG4gICAgRGF0ZTogRGF0ZSxcbiAgICBPYmplY3Q6IE9iamVjdFxuICB9LCBvcHRpb25zLmRlZmluZSB8fCB7fSk7XG4gIGlmICh0eXBlb2YgQnVmZmVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgZGVmaW5lZC5CdWZmZXIgPSBCdWZmZXI7XG4gIH1cbiAgdmFyIHNjb3BlID0gbWVyZ2Uoe1xuICAgIGNvbnNvbGU6IGNvbnNvbGVcbiAgfSwgb3B0aW9ucy5zY29wZSk7XG4gIHJldC5wdXNoKFtcInJldHVybiBub29scy5mbG93KCdcIiwgb3B0aW9ucy5uYW1lLCBcIicsIGZ1bmN0aW9uKCl7XCJdLmpvaW4oXCJcIikpO1xuICAvL2FkZCBhbnkgZGVmaW5lZCBjbGFzc2VzIGluIHRoZSBwYXJzZWQgZmxvd09iaiB0byBkZWZpbmVkXG4gIHJldC5wdXNoKGV4dGQoZmxvd09iai5kZWZpbmUgfHwgW10pLm1hcChmdW5jdGlvbihkZWZpbmVkKSB7XG4gICAgdmFyIG5hbWUgPSBkZWZpbmVkLm5hbWU7XG4gICAgZGVmaW5lZFtuYW1lXSA9IHt9O1xuICAgIHJldHVybiBbXCJ2YXJcIiwgbmFtZSwgXCI9IGRlZmluZWQuXCIgKyBuYW1lLCBcIj0gdGhpcy5hZGREZWZpbmVkKCdcIiArIG5hbWUgKyBcIicsXCIsIGRlZmluZWRUb0pzKGRlZmluZWQucHJvcGVydGllcykgKyBcIik7XCJdLmpvaW4oXCIgXCIpO1xuICB9KS52YWx1ZSgpLmpvaW4oXCJcXG5cIikpO1xuICByZXQucHVzaChleHRkKGZsb3dPYmouc2NvcGUgfHwgW10pLm1hcChmdW5jdGlvbihzKSB7XG4gICAgdmFyIG5hbWUgPSBzLm5hbWU7XG4gICAgc2NvcGVbbmFtZV0gPSB7fTtcbiAgICByZXR1cm4gW1widmFyXCIsIG5hbWUsIFwiPSBzY29wZS5cIiArIG5hbWUsIFwiPSBcIiwgcy5ib2R5LCBcIjtcIl0uam9pbihcIiBcIik7XG4gIH0pLnZhbHVlKCkuam9pbihcIlxcblwiKSk7XG4gIHJldC5wdXNoKFwic2NvcGUuY29uc29sZSA9IGNvbnNvbGU7XFxuXCIpO1xuXG5cbiAgcmV0LnB1c2goZXh0ZChmbG93T2JqLnJ1bGVzIHx8IFtdKS5tYXAoZnVuY3Rpb24ocnVsZSkge1xuICAgIHZhciBpZGVudGlmaWVycyA9IFtdLFxuICAgICAgcmV0ID0gW1widGhpcy5ydWxlKCdcIiwgcnVsZS5uYW1lLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKSwgXCInXCJdLFxuICAgICAgb3B0aW9ucyA9IGV4dGQubWVyZ2UocnVsZS5vcHRpb25zIHx8IHt9LCB7XG4gICAgICAgIHNjb3BlOiBcInNjb3BlXCJcbiAgICAgIH0pO1xuICAgIHJldC5wdXNoKFwiLFwiLCBleHRkLmZvcm1hdChcIiVqXCIsIFtvcHRpb25zXSkucmVwbGFjZSgvKDpcInNjb3BlXCIpLywgXCI6c2NvcGVcIikpO1xuICAgIGlmIChydWxlLmNvbnN0cmFpbnRzICYmICFleHRkLmlzRW1wdHkocnVsZS5jb25zdHJhaW50cykpIHtcbiAgICAgIHJldC5wdXNoKFwiLCBbXCIpO1xuICAgICAgcmV0LnB1c2goZXh0ZChydWxlLmNvbnN0cmFpbnRzKS5tYXAoZnVuY3Rpb24oYykge1xuICAgICAgICByZXR1cm4gY29uc3RyYWludHNUb0pzKGMsIGlkZW50aWZpZXJzKTtcbiAgICAgIH0pLnZhbHVlKCkuam9pbihcIixcIikpO1xuICAgICAgcmV0LnB1c2goXCJdXCIpO1xuICAgIH1cbiAgICByZXQucHVzaChcIixcIiwgYWN0aW9uVG9KcyhydWxlLmFjdGlvbiwgaWRlbnRpZmllcnMsIGRlZmluZWQsIHNjb3BlKSk7XG4gICAgcmV0LnB1c2goXCIpO1wiKTtcbiAgICByZXR1cm4gcmV0LmpvaW4oXCJcIik7XG4gIH0pLnZhbHVlKCkuam9pbihcIlwiKSk7XG4gIHJldC5wdXNoKFwifSk7XCIpO1xuICByZXQucHVzaChcIn07XCIpO1xuICByZXQucHVzaChcIn0oKSk7XCIpO1xuICByZXR1cm4gcmV0LmpvaW4oXCJcIik7XG59O1xuIl19",
"ast": null,
"map": {
"version": 3,
"sources": [
"transpiler.js"
],
"names": [],
"mappings": ";;AAAA,IAAI,OAAO,QAAQ,oBAAR,CAAX;AAAA,IACE,UAAU,KAAK,OADjB;AAAA,IAEE,UAAU,KAAK,OAFjB;AAAA,IAGE,QAAQ,KAAK,KAHf;AAAA,IAIE,WAAW,KAAK,QAJlB;AAAA,IAKE,YAAY,QAAQ,0BAAR,EAAoC,SALlD;AAAA,IAME,oBAAoB,QAAQ,6BAAR,CANtB;AAAA,IAOE,SAAS,QAAQ,kBAAR,CAPX;;AASA,SAAS,WAAT,CAAqB,OAArB,EAA8B;;AAE5B,YAAU,SAAS,OAAT,IAAoB,IAAI,QAAJ,CAAa,YAAY,OAAZ,GAAsB,GAAnC,GAApB,GAAgE,OAA1E;AACA,MAAI,MAAM,CAAC,cAAD,CAAV;AAAA,MACE,KADF;;AAGA,MAAI,QAAQ,cAAR,CAAuB,aAAvB,KAAyC,eAAe,OAAO,QAAQ,WAA3E,EAAwF;AACtF,QAAI,IAAJ,CAAS,mBAAmB,QAAQ,WAAR,CAAoB,QAApB,EAAnB,GAAoD,GAA7D;AACD,GAFD,MAEO;AACL,QAAI,IAAJ,CAAS,oGAAT;AACD;AACD,MAAI,IAAJ,CAAS,gCAAT;AACA,OAAK,IAAI,GAAT,IAAgB,OAAhB,EAAyB;AACvB,QAAI,QAAQ,cAAR,CAAuB,GAAvB,CAAJ,EAAiC;AAC/B,cAAQ,QAAQ,GAAR,CAAR;AACA,UAAI,IAAJ,CAAS,WAAW,GAAX,GAAiB,KAAjB,IAA0B,KAAK,UAAL,CAAgB,KAAhB,IAAyB,MAAM,QAAN,EAAzB,GAA4C,KAAK,MAAL,CAAY,IAAZ,EAAkB,KAAlB,CAAtE,IAAkG,GAA3G;AACD;AACF;AACD,MAAI,IAAJ,CAAS,iBAAT;AACA,MAAI,IAAJ,CAAS,MAAT;AACA,SAAO,IAAI,IAAJ,CAAS,EAAT,CAAP;AAED;;AAED,SAAS,UAAT,CAAoB,MAApB,EAA4B,WAA5B,EAAyC,OAAzC,EAAkD,KAAlD,EAAyD;AACvD,MAAI,WAAW,EAAf;AAAA,MACE,WAAW,EADb;AAEA,UAAQ,WAAR,EAAqB,UAAS,CAAT,EAAY;AAC/B,QAAI,OAAO,OAAP,CAAe,CAAf,MAAsB,CAAC,CAA3B,EAA8B;AAC5B,eAAS,CAAT,IAAc,IAAd;AACA,eAAS,IAAT,CAAc,SAAS,CAAT,GAAa,UAAb,GAA0B,CAA1B,GAA8B,GAA5C;AACD;AACF,GALD;AAMA,OAAK,OAAL,EAAc,IAAd,GAAqB,OAArB,CAA6B,UAAS,CAAT,EAAY;AACvC,QAAI,OAAO,OAAP,CAAe,CAAf,MAAsB,CAAC,CAAvB,IAA4B,CAAC,SAAS,CAAT,CAAjC,EAA8C;AAC5C,eAAS,CAAT,IAAc,IAAd;AACA,eAAS,IAAT,CAAc,SAAS,CAAT,GAAa,YAAb,GAA4B,CAA5B,GAAgC,GAA9C;AACD;AACF,GALD;;AAOA,OAAK,KAAL,EAAY,IAAZ,GAAmB,OAAnB,CAA2B,UAAS,CAAT,EAAY;AACrC,QAAI,OAAO,OAAP,CAAe,CAAf,MAAsB,CAAC,CAAvB,IAA4B,CAAC,SAAS,CAAT,CAAjC,EAA8C;AAC5C,eAAS,CAAT,IAAc,IAAd;AACA,eAAS,IAAT,CAAc,SAAS,CAAT,GAAa,UAAb,GAA0B,CAA1B,GAA8B,GAA5C;AACD;AACF,GALD;AAMA,OAAK,SAAL,EAAgB,OAAhB,CAAwB,UAAS,CAAT,EAAY;AAClC,QAAI,OAAO,OAAP,CAAe,CAAf,MAAsB,CAAC,CAAvB,IAA4B,CAAC,SAAS,CAAT,CAAjC,EAA8C;AAC5C,eAAS,IAAT,CAAc,SAAS,CAAT,GAAa,SAAb,GAAyB,CAAzB,GAA6B,GAA3C;AACD;AACF,GAJD;AAKA,MAAI,SAAS,CAAC,OAAD,EAAU,MAAV,CAAb;AACA,MAAI,aAAa,IAAb,CAAkB,MAAlB,CAAJ,EAA+B;AAC7B,WAAO,IAAP,CAAY,MAAZ;AACD;AACD,WAAS,SAAS,IAAT,CAAc,EAAd,IAAoB,MAA7B;AACA,MAAI;AACF,WAAO,CAAC,WAAD,EAAc,OAAO,IAAP,CAAY,GAAZ,CAAd,EAAgC,IAAhC,EAAsC,MAAtC,EAA8C,GAA9C,EAAmD,IAAnD,CAAwD,EAAxD,CAAP;AACD,GAFD,CAEE,OAAO,CAAP,EAAU;AACV,UAAM,IAAI,KAAJ,CAAU,sBAAsB,MAAtB,GAA+B,IAA/B,GAAsC,EAAE,OAAlD,CAAN;AACD;AACF;;AAED,SAAS,uBAAT,CAAiC,UAAjC,EAA6C,GAA7C,EAAkD;AAChD,MAAI,WAAW,MAAX,IAAqB,KAAK,QAAL,CAAc,WAAW,CAAX,CAAd,CAAzB,EAAuD;AACrD,QAAI,WAAW,WAAW,CAAX,EAAc,KAAd,CAAoB,UAApB,CAAf;AACA,QAAI,QAAJ,EAAc;AACZ,iBAAW,SAAS,CAAT,CAAX;AACA,cAAQ,QAAR;AACE,aAAK,MAAL;AACE,cAAI,IAAJ,CAAS,KAAT,EAAgB,WAAW,KAAX,EAAhB,EAAoC,GAApC;AACA;AACF;AACE,gBAAM,IAAI,KAAJ,CAAU,2BAA2B,QAArC,CAAN;AALJ;AAOD;AACF;AACF;;AAED,SAAS,mBAAT,CAA6B,UAA7B,EAAyC,GAAzC,EAA8C,WAA9C,EAA2D;AACzD,MAAI,WAAW,MAAX,IAAqB,KAAK,MAAL,CAAY,WAAW,CAAX,CAAZ,CAAzB,EAAqD;;AAEnD,QAAI,OAAO,WAAW,KAAX,EAAX;AACA,SAAK,IAAL,EAAW,MAAX,GAAoB,OAApB,CAA4B,UAAS,KAAT,EAAgB;AAC1C,UAAI,QAAQ,WAAR,EAAqB,KAArB,MAAgC,CAAC,CAArC,EAAwC;AACtC,oBAAY,IAAZ,CAAiB,KAAjB;AACD;AACF,KAJD;AAKA,QAAI,IAAJ,CAAS,MAAM,KAAK,MAAL,CAAY,IAAZ,EAAkB,CAAC,IAAD,CAAlB,CAAf;AACD;AACF;;AAED,SAAS,eAAT,CAAyB,UAAzB,EAAqC,WAArC,EAAkD;AAChD,eAAa,WAAW,KAAX,CAAiB,CAAjB,CAAb;AACA,MAAI,MAAM,EAAV;AACA,MAAI,WAAW,CAAX,MAAkB,IAAtB,EAA4B;AAC1B,QAAI,IAAJ,CAAS,OAAO,WAAW,KAAX,EAAP,GAA4B,GAArC;AACA,QAAI,IAAJ,CAAS,KAAK,GAAL,CAAS,UAAT,EAAqB,UAAS,CAAT,EAAY;AACtC,aAAO,gBAAgB,CAAhB,EAAmB,WAAnB,CAAP;AACD,KAFM,EAEJ,IAFI,CAEC,GAFD,IAEQ,GAFjB;AAGA,WAAO,GAAP;AACD,GAND,MAMO,IAAI,WAAW,CAAX,MAAkB,KAAlB,IAA2B,WAAW,CAAX,MAAkB,QAAjD,EAA2D;AAChE,QAAI,IAAJ,CAAS,GAAT,EAAc,WAAW,KAAX,EAAd,EAAkC,KAAlC;AACD;AACD,cAAY,IAAZ,CAAiB,WAAW,CAAX,CAAjB;AACA,MAAI,IAAJ,CAAS,WAAW,CAAX,CAAT,EAAwB,QAAQ,WAAW,CAAX,EAAc,OAAd,CAAsB,KAAtB,EAA6B,MAA7B,EAAqC,OAArC,CAA6C,IAA7C,EAAmD,MAAnD,CAAR,GAAqE,GAA7F;AACA,aAAW,MAAX,CAAkB,CAAlB,EAAqB,CAArB;AACA,MAAI,WAAW,MAAf,EAAuB;;AAErB,QAAI,IAAI,WAAW,KAAX,EAAR;AACA,QAAI,KAAK,QAAL,CAAc,CAAd,KAAoB,CAAxB,EAA2B;AACzB,UAAI,IAAJ,CAAS,OAAO,EAAE,OAAF,CAAU,KAAV,EAAiB,MAAjB,EAAyB,OAAzB,CAAiC,IAAjC,EAAuC,MAAvC,CAAhB,EAAgE,GAAhE;AACA,cAAQ,kBAAkB,cAAlB,CAAiC,OAAO,eAAP,CAAuB,CAAvB,CAAjC,CAAR,EAAqE,UAAS,CAAT,EAAY;AAC/E,oBAAY,IAAZ,CAAiB,CAAjB;AACD,OAFD;AAGD,KALD,MAKO;AACL,UAAI,IAAJ,CAAS,SAAT;AACA,iBAAW,OAAX,CAAmB,CAAnB;AACD;AACF;AACD,0BAAwB,UAAxB,EAAoC,GAApC;AACA,sBAAoB,UAApB,EAAgC,GAAhC,EAAqC,WAArC;AACA,SAAO,MAAM,IAAI,IAAJ,CAAS,EAAT,CAAN,GAAqB,GAA5B;AACD;;AAED,QAAQ,SAAR,GAAoB,UAAS,OAAT,EAAkB,OAAlB,EAA2B;AAC7C,YAAU,WAAW,EAArB;AACA,MAAI,MAAM,EAAV;AACA,MAAI,IAAJ,CAAS,+BAAT;AACA,MAAI,IAAJ,CAAS,2BAAT;AACA,MAAI,IAAJ,CAAS,0BAAT;AACA,MAAI,IAAJ,CAAS,8OAAT;AACA,MAAI,IAAJ,CAAS,+FAAT;AACA,MAAI,UAAU,MAAM;AAClB,WAAO,KADW;AAElB,YAAQ,MAFU;AAGlB,YAAQ,MAHU;AAIlB,aAAS,OAJS;AAKlB,YAAQ,MALU;AAMlB,UAAM,IANY;AAOlB,YAAQ;AAPU,GAAN,EAQX,QAAQ,MAAR,IAAkB,EARP,CAAd;AASA,MAAI,OAAO,MAAP,KAAkB,WAAtB,EAAmC;AACjC,YAAQ,MAAR,GAAiB,MAAjB;AACD;AACD,MAAI,QAAQ,MAAM;AAChB,aAAS;AADO,GAAN,EAET,QAAQ,KAFC,CAAZ;AAGA,MAAI,IAAJ,CAAS,CAAC,qBAAD,EAAwB,QAAQ,IAAhC,EAAsC,gBAAtC,EAAwD,IAAxD,CAA6D,EAA7D,CAAT;;AAEA,MAAI,IAAJ,CAAS,KAAK,QAAQ,MAAR,IAAkB,EAAvB,EAA2B,GAA3B,CAA+B,UAAS,OAAT,EAAkB;AACxD,QAAI,OAAO,QAAQ,IAAnB;AACA,YAAQ,IAAR,IAAgB,EAAhB;AACA,WAAO,CAAC,KAAD,EAAQ,IAAR,EAAc,eAAe,IAA7B,EAAmC,wBAAwB,IAAxB,GAA+B,IAAlE,EAAwE,YAAY,QAAQ,UAApB,IAAkC,IAA1G,EAAgH,IAAhH,CAAqH,GAArH,CAAP;AACD,GAJQ,EAIN,KAJM,GAIE,IAJF,CAIO,IAJP,CAAT;AAKA,MAAI,IAAJ,CAAS,KAAK,QAAQ,KAAR,IAAiB,EAAtB,EAA0B,GAA1B,CAA8B,UAAS,CAAT,EAAY;AACjD,QAAI,OAAO,EAAE,IAAb;AACA,UAAM,IAAN,IAAc,EAAd;AACA,WAAO,CAAC,KAAD,EAAQ,IAAR,EAAc,aAAa,IAA3B,EAAiC,IAAjC,EAAuC,EAAE,IAAzC,EAA+C,GAA/C,EAAoD,IAApD,CAAyD,GAAzD,CAAP;AACD,GAJQ,EAIN,KAJM,GAIE,IAJF,CAIO,IAJP,CAAT;AAKA,MAAI,IAAJ,CAAS,4BAAT;;AAGA,MAAI,IAAJ,CAAS,KAAK,QAAQ,KAAR,IAAiB,EAAtB,EAA0B,GAA1B,CAA8B,UAAS,IAAT,EAAe;AACpD,QAAI,cAAc,EAAlB;AAAA,QACE,MAAM,CAAC,aAAD,EAAgB,KAAK,IAAL,CAAU,OAAV,CAAkB,IAAlB,EAAwB,KAAxB,CAAhB,EAAgD,GAAhD,CADR;AAAA,QAEE,UAAU,KAAK,KAAL,CAAW,KAAK,OAAL,IAAgB,EAA3B,EAA+B;AACvC,aAAO;AADgC,KAA/B,CAFZ;AAKA,QAAI,IAAJ,CAAS,GAAT,EAAc,KAAK,MAAL,CAAY,IAAZ,EAAkB,CAAC,OAAD,CAAlB,EAA6B,OAA7B,CAAqC,YAArC,EAAmD,QAAnD,CAAd;AACA,QAAI,KAAK,WAAL,IAAoB,CAAC,KAAK,OAAL,CAAa,KAAK,WAAlB,CAAzB,EAAyD;AACvD,UAAI,IAAJ,CAAS,KAAT;AACA,UAAI,IAAJ,CAAS,KAAK,KAAK,WAAV,EAAuB,GAAvB,CAA2B,UAAS,CAAT,EAAY;AAC9C,eAAO,gBAAgB,CAAhB,EAAmB,WAAnB,CAAP;AACD,OAFQ,EAEN,KAFM,GAEE,IAFF,CAEO,GAFP,CAAT;AAGA,UAAI,IAAJ,CAAS,GAAT;AACD;AACD,QAAI,IAAJ,CAAS,GAAT,EAAc,WAAW,KAAK,MAAhB,EAAwB,WAAxB,EAAqC,OAArC,EAA8C,KAA9C,CAAd;AACA,QAAI,IAAJ,CAAS,IAAT;AACA,WAAO,IAAI,IAAJ,CAAS,EAAT,CAAP;AACD,GAjBQ,EAiBN,KAjBM,GAiBE,IAjBF,CAiBO,EAjBP,CAAT;AAkBA,MAAI,IAAJ,CAAS,KAAT;AACA,MAAI,IAAJ,CAAS,IAAT;AACA,MAAI,IAAJ,CAAS,OAAT;AACA,SAAO,IAAI,IAAJ,CAAS,EAAT,CAAP;AACD,CA5DD",
"file": "transpiler.js",
"sourcesContent": [
"var extd = require('nools/lib/extended'),\n forEach = extd.forEach,\n indexOf = extd.indexOf,\n merge = extd.merge,\n isString = extd.isString,\n modifiers = require('nools/lib/compile/common').modifiers,\n constraintMatcher = require('nools/lib/constraintMatcher'),\n parser = require('nools/lib/parser');\n\nfunction definedToJs(options) {\n /*jshint evil:true*/\n options = isString(options) ? new Function(\"return \" + options + \";\")() : options;\n var ret = [\"(function(){\"],\n value;\n\n if (options.hasOwnProperty(\"constructor\") && \"function\" === typeof options.constructor) {\n ret.push(\"var Defined = \" + options.constructor.toString() + \";\");\n } else {\n ret.push(\"var Defined = function(opts){ for(var i in opts){if(opts.hasOwnProperty(i)){this[i] = opts[i];}}};\");\n }\n ret.push(\"var proto = Defined.prototype;\");\n for (var key in options) {\n if (options.hasOwnProperty(key)) {\n value = options[key];\n ret.push(\"proto.\" + key + \" = \" + (extd.isFunction(value) ? value.toString() : extd.format(\"%j\", value)) + \";\");\n }\n }\n ret.push(\"return Defined;\");\n ret.push(\"}())\");\n return ret.join(\"\");\n\n}\n\nfunction actionToJs(action, identifiers, defined, scope) {\n var declares = [],\n usedVars = {};\n forEach(identifiers, function(i) {\n if (action.indexOf(i) !== -1) {\n usedVars[i] = true;\n declares.push(\"var \" + i + \"= facts.\" + i + \";\");\n }\n });\n extd(defined).keys().forEach(function(i) {\n if (action.indexOf(i) !== -1 && !usedVars[i]) {\n usedVars[i] = true;\n declares.push(\"var \" + i + \"= defined.\" + i + \";\");\n }\n });\n\n extd(scope).keys().forEach(function(i) {\n if (action.indexOf(i) !== -1 && !usedVars[i]) {\n usedVars[i] = true;\n declares.push(\"var \" + i + \"= scope.\" + i + \";\");\n }\n });\n extd(modifiers).forEach(function(i) {\n if (action.indexOf(i) !== -1 && !usedVars[i]) {\n declares.push(\"var \" + i + \"= flow.\" + i + \";\");\n }\n });\n var params = [\"facts\", 'flow'];\n if (/next\\(.*\\)/.test(action)) {\n params.push(\"next\");\n }\n action = declares.join(\"\") + action;\n try {\n return [\"function(\", params.join(\",\"), \"){\", action, \"}\"].join(\"\");\n } catch (e) {\n throw new Error(\"Invalid action : \" + action + \"\\n\" + e.message);\n }\n}\n\nfunction parseConstraintModifier(constraint, ret) {\n if (constraint.length && extd.isString(constraint[0])) {\n var modifier = constraint[0].match(\" *(from)\");\n if (modifier) {\n modifier = modifier[0];\n switch (modifier) {\n case \"from\":\n ret.push(', \"', constraint.shift(), '\"');\n break;\n default:\n throw new Error(\"Unrecognized modifier \" + modifier);\n }\n }\n }\n}\n\nfunction parseConstraintHash(constraint, ret, identifiers) {\n if (constraint.length && extd.isHash(constraint[0])) {\n //ret of options\n var refs = constraint.shift();\n extd(refs).values().forEach(function(ident) {\n if (indexOf(identifiers, ident) === -1) {\n identifiers.push(ident);\n }\n });\n ret.push(',' + extd.format('%j', [refs]));\n }\n}\n\nfunction constraintsToJs(constraint, identifiers) {\n constraint = constraint.slice(0);\n var ret = [];\n if (constraint[0] === \"or\") {\n ret.push('[\"' + constraint.shift() + '\"');\n ret.push(extd.map(constraint, function(c) {\n return constraintsToJs(c, identifiers);\n }).join(\",\") + \"]\");\n return ret;\n } else if (constraint[0] === \"not\" || constraint[0] === \"exists\") {\n ret.push('\"', constraint.shift(), '\", ');\n }\n identifiers.push(constraint[1]);\n ret.push(constraint[0], ', \"' + constraint[1].replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, \"\\\\\\\"\") + '\"');\n constraint.splice(0, 2);\n if (constraint.length) {\n //constraint\n var c = constraint.shift();\n if (extd.isString(c) && c) {\n ret.push(',\"' + c.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, \"\\\\\\\"\"), '\"');\n forEach(constraintMatcher.getIdentifiers(parser.parseConstraint(c)), function(i) {\n identifiers.push(i);\n });\n } else {\n ret.push(',\"true\"');\n constraint.unshift(c);\n }\n }\n parseConstraintModifier(constraint, ret);\n parseConstraintHash(constraint, ret, identifiers);\n return '[' + ret.join(\"\") + ']';\n}\n\nexports.transpile = function(flowObj, options) {\n options = options || {};\n var ret = [];\n ret.push(\"module.exports = (function(){\");\n ret.push(\"return function(options){\");\n ret.push(\"options = options || {};\");\n ret.push(\"var bind = function(scope, fn){return function(){return fn.apply(scope, arguments);};}, defined = {Array: Array, String: String, Number: Number, Boolean: Boolean, RegExp: RegExp, Date: Date, Object: Object}, scope = options.scope || {};\");\n ret.push(\"var optDefined = options.defined || {}; for(var i in optDefined){defined[i] = optDefined[i];}\");\n var defined = merge({\n Array: Array,\n String: String,\n Number: Number,\n Boolean: Boolean,\n RegExp: RegExp,\n Date: Date,\n Object: Object\n }, options.define || {});\n if (typeof Buffer !== \"undefined\") {\n defined.Buffer = Buffer;\n }\n var scope = merge({\n console: console\n }, options.scope);\n ret.push([\"return nools.flow('\", options.name, \"', function(){\"].join(\"\"));\n //add any defined classes in the parsed flowObj to defined\n ret.push(extd(flowObj.define || []).map(function(defined) {\n var name = defined.name;\n defined[name] = {};\n return [\"var\", name, \"= defined.\" + name, \"= this.addDefined('\" + name + \"',\", definedToJs(defined.properties) + \");\"].join(\" \");\n }).value().join(\"\\n\"));\n ret.push(extd(flowObj.scope || []).map(function(s) {\n var name = s.name;\n scope[name] = {};\n return [\"var\", name, \"= scope.\" + name, \"= \", s.body, \";\"].join(\" \");\n }).value().join(\"\\n\"));\n ret.push(\"scope.console = console;\\n\");\n\n\n ret.push(extd(flowObj.rules || []).map(function(rule) {\n var identifiers = [],\n ret = [\"this.rule('\", rule.name.replace(/'/g, \"\\\\'\"), \"'\"],\n options = extd.merge(rule.options || {}, {\n scope: \"scope\"\n });\n ret.push(\",\", extd.format(\"%j\", [options]).replace(/(:\"scope\")/, \":scope\"));\n if (rule.constraints && !extd.isEmpty(rule.constraints)) {\n ret.push(\", [\");\n ret.push(extd(rule.constraints).map(function(c) {\n return constraintsToJs(c, identifiers);\n }).value().join(\",\"));\n ret.push(\"]\");\n }\n ret.push(\",\", actionToJs(rule.action, identifiers, defined, scope));\n ret.push(\");\");\n return ret.join(\"\");\n }).value().join(\"\"));\n ret.push(\"});\");\n ret.push(\"};\");\n ret.push(\"}());\");\n return ret.join(\"\");\n};\n"
]
},
"mtime": 1467098297299
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/src/validators/invoice-process-validator.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [],
"marked": [],
"modules": {
"imports": [
{
"source": "../engine",
"imported": [
"ValidationEngine"
],
"specifiers": [
{
"kind": "named",
"imported": "ValidationEngine",
"local": "ValidationEngine"
}
]
}
],
"exports": {
"exported": [
"validate",
"models"
],
"specifiers": [
{
"kind": "local",
"local": "validate",
"exported": "validate"
},
{
"kind": "local",
"local": "models",
"exported": "models"
}
]
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/validators/invoice-process-validator.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/validators/invoice-process-validator.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "invoice-process-validator.es6",
"sourceFileName": "invoice-process-validator.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "invoice-process-validator"
},
"ignored": false,
"code": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.validate = validate;\n\nvar _engine = require('../engine');\n\nclass InvoiceProcessValidator extends _engine.ValidationEngine {\n constructor() {\n super('invoice-process-rules');\n }\n\n _workitemFacts(model) {\n const WorkItemModel = this._getDefined('WorkItemModel');\n const ValidationOutcome = this._getDefined('ValidationOutcome');\n return new WorkItemModel(model, {\n workitem: new ValidationOutcome(),\n 'custom.workitem.checkout': new ValidationOutcome()\n });\n }\n\n _payloadFacts(model) {\n const PayloadModel = this._getDefined('PayloadModel');\n const ValidationOutcome = this._getDefined('ValidationOutcome');\n return new PayloadModel(model, {\n 'payload.invoiceDate': new ValidationOutcome(),\n 'payload.basNumber': new ValidationOutcome()\n });\n }\n\n _appStateFacts(model) {\n const AppStateModel = this._getDefined('AppStateModel');\n const ValidationOutcome = this._getDefined('ValidationOutcome');\n return new AppStateModel(model, {\n 'appState.online': new ValidationOutcome(),\n 'appState.userType': new ValidationOutcome()\n });\n }\n} /* invoice-process-validator */\n\n\nconst engine = new InvoiceProcessValidator();\n\nfunction validate(models) {\n return engine.validate(models || {\n workitem: { state: 'dummy' }\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImludm9pY2UtcHJvY2Vzcy12YWxpZGF0b3IuZXM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O1FBc0NnQixRLEdBQUEsUTs7QUFyQ2hCOztBQUVBLE1BQU0sdUJBQU4sa0NBQXVEO0FBQ3JELGdCQUFjO0FBQ1osVUFBTSx1QkFBTjtBQUNEOztBQUVELGlCQUFlLEtBQWYsRUFBc0I7QUFDcEIsVUFBTSxnQkFBZ0IsS0FBSyxXQUFMLENBQWlCLGVBQWpCLENBQXRCO0FBQ0EsVUFBTSxvQkFBb0IsS0FBSyxXQUFMLENBQWlCLG1CQUFqQixDQUExQjtBQUNBLFdBQU8sSUFBSSxhQUFKLENBQWtCLEtBQWxCLEVBQXlCO0FBQzlCLGdCQUFVLElBQUksaUJBQUosRUFEb0I7QUFFOUIsa0NBQTRCLElBQUksaUJBQUo7QUFGRSxLQUF6QixDQUFQO0FBSUQ7O0FBRUQsZ0JBQWMsS0FBZCxFQUFxQjtBQUNuQixVQUFNLGVBQWUsS0FBSyxXQUFMLENBQWlCLGNBQWpCLENBQXJCO0FBQ0EsVUFBTSxvQkFBb0IsS0FBSyxXQUFMLENBQWlCLG1CQUFqQixDQUExQjtBQUNBLFdBQU8sSUFBSSxZQUFKLENBQWlCLEtBQWpCLEVBQXdCO0FBQzdCLDZCQUF1QixJQUFJLGlCQUFKLEVBRE07QUFFN0IsMkJBQXFCLElBQUksaUJBQUo7QUFGUSxLQUF4QixDQUFQO0FBSUQ7O0FBRUQsaUJBQWUsS0FBZixFQUFzQjtBQUNwQixVQUFNLGdCQUFnQixLQUFLLFdBQUwsQ0FBaUIsZUFBakIsQ0FBdEI7QUFDQSxVQUFNLG9CQUFvQixLQUFLLFdBQUwsQ0FBaUIsbUJBQWpCLENBQTFCO0FBQ0EsV0FBTyxJQUFJLGFBQUosQ0FBa0IsS0FBbEIsRUFBeUI7QUFDOUIseUJBQW1CLElBQUksaUJBQUosRUFEVztBQUU5QiwyQkFBcUIsSUFBSSxpQkFBSjtBQUZTLEtBQXpCLENBQVA7QUFJRDtBQTlCb0QsQzs7O0FBaUN2RCxNQUFNLFNBQVMsSUFBSSx1QkFBSixFQUFmOztBQUVPLFNBQVMsUUFBVCxDQUFrQixNQUFsQixFQUEwQjtBQUMvQixTQUFPLE9BQU8sUUFBUCxDQUFnQixVQUFVO0FBQy9CLGNBQVUsRUFBRSxPQUFPLE9BQVQ7QUFEcUIsR0FBMUIsQ0FBUDtBQUdEIiwiZmlsZSI6Imludm9pY2UtcHJvY2Vzcy12YWxpZGF0b3IuZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLyogaW52b2ljZS1wcm9jZXNzLXZhbGlkYXRvciAqL1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZSc7XG5cbmNsYXNzIEludm9pY2VQcm9jZXNzVmFsaWRhdG9yIGV4dGVuZHMgVmFsaWRhdGlvbkVuZ2luZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdpbnZvaWNlLXByb2Nlc3MtcnVsZXMnKTtcbiAgfVxuXG4gIF93b3JraXRlbUZhY3RzKG1vZGVsKSB7XG4gICAgY29uc3QgV29ya0l0ZW1Nb2RlbCA9IHRoaXMuX2dldERlZmluZWQoJ1dvcmtJdGVtTW9kZWwnKTtcbiAgICBjb25zdCBWYWxpZGF0aW9uT3V0Y29tZSA9IHRoaXMuX2dldERlZmluZWQoJ1ZhbGlkYXRpb25PdXRjb21lJyk7XG4gICAgcmV0dXJuIG5ldyBXb3JrSXRlbU1vZGVsKG1vZGVsLCB7XG4gICAgICB3b3JraXRlbTogbmV3IFZhbGlkYXRpb25PdXRjb21lKCksXG4gICAgICAnY3VzdG9tLndvcmtpdGVtLmNoZWNrb3V0JzogbmV3IFZhbGlkYXRpb25PdXRjb21lKCksXG4gICAgfSk7XG4gIH1cblxuICBfcGF5bG9hZEZhY3RzKG1vZGVsKSB7XG4gICAgY29uc3QgUGF5bG9hZE1vZGVsID0gdGhpcy5fZ2V0RGVmaW5lZCgnUGF5bG9hZE1vZGVsJyk7XG4gICAgY29uc3QgVmFsaWRhdGlvbk91dGNvbWUgPSB0aGlzLl9nZXREZWZpbmVkKCdWYWxpZGF0aW9uT3V0Y29tZScpO1xuICAgIHJldHVybiBuZXcgUGF5bG9hZE1vZGVsKG1vZGVsLCB7XG4gICAgICAncGF5bG9hZC5pbnZvaWNlRGF0ZSc6IG5ldyBWYWxpZGF0aW9uT3V0Y29tZSgpLFxuICAgICAgJ3BheWxvYWQuYmFzTnVtYmVyJzogbmV3IFZhbGlkYXRpb25PdXRjb21lKCksXG4gICAgfSk7XG4gIH1cblxuICBfYXBwU3RhdGVGYWN0cyhtb2RlbCkge1xuICAgIGNvbnN0IEFwcFN0YXRlTW9kZWwgPSB0aGlzLl9nZXREZWZpbmVkKCdBcHBTdGF0ZU1vZGVsJyk7XG4gICAgY29uc3QgVmFsaWRhdGlvbk91dGNvbWUgPSB0aGlzLl9nZXREZWZpbmVkKCdWYWxpZGF0aW9uT3V0Y29tZScpO1xuICAgIHJldHVybiBuZXcgQXBwU3RhdGVNb2RlbChtb2RlbCwge1xuICAgICAgJ2FwcFN0YXRlLm9ubGluZSc6IG5ldyBWYWxpZGF0aW9uT3V0Y29tZSgpLFxuICAgICAgJ2FwcFN0YXRlLnVzZXJUeXBlJzogbmV3IFZhbGlkYXRpb25PdXRjb21lKCksXG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgZW5naW5lID0gbmV3IEludm9pY2VQcm9jZXNzVmFsaWRhdG9yKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZShtb2RlbHMpIHtcbiAgcmV0dXJuIGVuZ2luZS52YWxpZGF0ZShtb2RlbHMgfHwge1xuICAgIHdvcmtpdGVtOiB7IHN0YXRlOiAnZHVtbXknIH0sXG4gIH0pO1xufVxuIl19",
"ast": null,
"map": {
"version": 3,
"sources": [
"invoice-process-validator.es6"
],
"names": [],
"mappings": ";;;;;QAsCgB,Q,GAAA,Q;;AArChB;;AAEA,MAAM,uBAAN,kCAAuD;AACrD,gBAAc;AACZ,UAAM,uBAAN;AACD;;AAED,iBAAe,KAAf,EAAsB;AACpB,UAAM,gBAAgB,KAAK,WAAL,CAAiB,eAAjB,CAAtB;AACA,UAAM,oBAAoB,KAAK,WAAL,CAAiB,mBAAjB,CAA1B;AACA,WAAO,IAAI,aAAJ,CAAkB,KAAlB,EAAyB;AAC9B,gBAAU,IAAI,iBAAJ,EADoB;AAE9B,kCAA4B,IAAI,iBAAJ;AAFE,KAAzB,CAAP;AAID;;AAED,gBAAc,KAAd,EAAqB;AACnB,UAAM,eAAe,KAAK,WAAL,CAAiB,cAAjB,CAArB;AACA,UAAM,oBAAoB,KAAK,WAAL,CAAiB,mBAAjB,CAA1B;AACA,WAAO,IAAI,YAAJ,CAAiB,KAAjB,EAAwB;AAC7B,6BAAuB,IAAI,iBAAJ,EADM;AAE7B,2BAAqB,IAAI,iBAAJ;AAFQ,KAAxB,CAAP;AAID;;AAED,iBAAe,KAAf,EAAsB;AACpB,UAAM,gBAAgB,KAAK,WAAL,CAAiB,eAAjB,CAAtB;AACA,UAAM,oBAAoB,KAAK,WAAL,CAAiB,mBAAjB,CAA1B;AACA,WAAO,IAAI,aAAJ,CAAkB,KAAlB,EAAyB;AAC9B,yBAAmB,IAAI,iBAAJ,EADW;AAE9B,2BAAqB,IAAI,iBAAJ;AAFS,KAAzB,CAAP;AAID;AA9BoD,C;;;AAiCvD,MAAM,SAAS,IAAI,uBAAJ,EAAf;;AAEO,SAAS,QAAT,CAAkB,MAAlB,EAA0B;AAC/B,SAAO,OAAO,QAAP,CAAgB,UAAU;AAC/B,cAAU,EAAE,OAAO,OAAT;AADqB,GAA1B,CAAP;AAGD",
"file": "invoice-process-validator.es6",
"sourcesContent": [
"/* invoice-process-validator */\nimport { ValidationEngine } from '../engine';\n\nclass InvoiceProcessValidator extends ValidationEngine {\n constructor() {\n super('invoice-process-rules');\n }\n\n _workitemFacts(model) {\n const WorkItemModel = this._getDefined('WorkItemModel');\n const ValidationOutcome = this._getDefined('ValidationOutcome');\n return new WorkItemModel(model, {\n workitem: new ValidationOutcome(),\n 'custom.workitem.checkout': new ValidationOutcome(),\n });\n }\n\n _payloadFacts(model) {\n const PayloadModel = this._getDefined('PayloadModel');\n const ValidationOutcome = this._getDefined('ValidationOutcome');\n return new PayloadModel(model, {\n 'payload.invoiceDate': new ValidationOutcome(),\n 'payload.basNumber': new ValidationOutcome(),\n });\n }\n\n _appStateFacts(model) {\n const AppStateModel = this._getDefined('AppStateModel');\n const ValidationOutcome = this._getDefined('ValidationOutcome');\n return new AppStateModel(model, {\n 'appState.online': new ValidationOutcome(),\n 'appState.userType': new ValidationOutcome(),\n });\n }\n}\n\nconst engine = new InvoiceProcessValidator();\n\nexport function validate(models) {\n return engine.validate(models || {\n workitem: { state: 'dummy' },\n });\n}\n"
]
},
"mtime": 1467105467053
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/src/__tests__/engine.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [],
"marked": [],
"modules": {
"imports": [
{
"source": "chai",
"imported": [
"expect"
],
"specifiers": [
{
"kind": "named",
"imported": "expect",
"local": "expect"
}
]
},
{
"source": "mocha",
"imported": [
"describe",
"it"
],
"specifiers": [
{
"kind": "named",
"imported": "describe",
"local": "describe"
},
{
"kind": "named",
"imported": "it",
"local": "it"
}
]
},
{
"source": "../engine",
"imported": [
"ValidationEngine"
],
"specifiers": [
{
"kind": "named",
"imported": "ValidationEngine",
"local": "ValidationEngine"
}
]
}
],
"exports": {
"exported": [],
"specifiers": []
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/__tests__/engine.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/__tests__/engine.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "engine.es6",
"sourceFileName": "engine.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "engine"
},
"ignored": false,
"code": "'use strict';\n\nvar _chai = require('chai');\n\nvar _mocha = require('mocha');\n\nvar _engine = require('../engine');\n\n(0, _mocha.describe)('Engine', () => {\n (0, _mocha.it)('should expose ValidationEngine', () => {\n (0, _chai.expect)(_engine.ValidationEngine).to.exist;\n });\n}); /* eslint max-len:0 */\n/* eslint no-unused-expressions:0 */\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVuZ2luZS5lczYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQTs7QUFDQTs7QUFFQTs7QUFFQSxxQkFBUyxRQUFULEVBQW1CLE1BQU07QUFDdkIsaUJBQUcsZ0NBQUgsRUFBcUMsTUFBTTtBQUN6QyxnREFBeUIsRUFBekIsQ0FBNEIsS0FBNUI7QUFDRCxHQUZEO0FBR0QsQ0FKRCxFIiwiZmlsZSI6ImVuZ2luZS5lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgbWF4LWxlbjowICovXG4vKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOjAgKi9cblxuaW1wb3J0IHsgZXhwZWN0IH0gZnJvbSAnY2hhaSc7XG5pbXBvcnQgeyBkZXNjcmliZSwgaXQgfSBmcm9tICdtb2NoYSc7XG5cbmltcG9ydCB7IFZhbGlkYXRpb25FbmdpbmUgfSBmcm9tICcuLi9lbmdpbmUnO1xuXG5kZXNjcmliZSgnRW5naW5lJywgKCkgPT4ge1xuICBpdCgnc2hvdWxkIGV4cG9zZSBWYWxpZGF0aW9uRW5naW5lJywgKCkgPT4ge1xuICAgIGV4cGVjdChWYWxpZGF0aW9uRW5naW5lKS50by5leGlzdDtcbiAgfSk7XG59KTtcbiJdfQ==",
"ast": null,
"map": {
"version": 3,
"sources": [
"engine.es6"
],
"names": [],
"mappings": ";;AAGA;;AACA;;AAEA;;AAEA,qBAAS,QAAT,EAAmB,MAAM;AACvB,iBAAG,gCAAH,EAAqC,MAAM;AACzC,gDAAyB,EAAzB,CAA4B,KAA5B;AACD,GAFD;AAGD,CAJD,E",
"file": "engine.es6",
"sourcesContent": [
"/* eslint max-len:0 */\n/* eslint no-unused-expressions:0 */\n\nimport { expect } from 'chai';\nimport { describe, it } from 'mocha';\n\nimport { ValidationEngine } from '../engine';\n\ndescribe('Engine', () => {\n it('should expose ValidationEngine', () => {\n expect(ValidationEngine).to.exist;\n });\n});\n"
]
},
"mtime": 1467103204963
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/src/__tests__/validators/invoice-process-validator.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [
"interopRequireDefault",
"interopRequireWildcard"
],
"marked": [],
"modules": {
"imports": [
{
"source": "chai",
"imported": [
"expect"
],
"specifiers": [
{
"kind": "named",
"imported": "expect",
"local": "expect"
}
]
},
{
"source": "mocha",
"imported": [
"describe",
"it"
],
"specifiers": [
{
"kind": "named",
"imported": "describe",
"local": "describe"
},
{
"kind": "named",
"imported": "it",
"local": "it"
}
]
},
{
"source": "nools",
"imported": [
"default"
],
"specifiers": [
{
"kind": "named",
"imported": "default",
"local": "nools"
}
]
},
{
"source": "../../validators/invoice-process-validator",
"imported": [
"*"
],
"specifiers": [
{
"kind": "namespace",
"local": "invoiceProcessValidator"
}
]
}
],
"exports": {
"exported": [],
"specifiers": []
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/__tests__/validators/invoice-process-validator.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/__tests__/validators/invoice-process-validator.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "invoice-process-validator.es6",
"sourceFileName": "invoice-process-validator.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "invoice-process-validator"
},
"ignored": false,
"code": "'use strict';\n\nvar _chai = require('chai');\n\nvar _mocha = require('mocha');\n\nvar _nools = require('nools');\n\nvar _nools2 = babelHelpers.interopRequireDefault(_nools);\n\nvar _invoiceProcessValidator = require('../../validators/invoice-process-validator');\n\nvar invoiceProcessValidator = babelHelpers.interopRequireWildcard(_invoiceProcessValidator);\n/* eslint max-len:0 */\n/* eslint no-unused-expressions:0 */\n\n(0, _mocha.describe)('InvoiceProcessValidator module', () => {\n (0, _mocha.it)('should expose the validate method', () => {\n (0, _chai.expect)(invoiceProcessValidator.validate).to.exist;\n });\n\n (0, _mocha.it)('should have created the `invoice-process-rules` flow', () => {\n (0, _chai.expect)(_nools2.default.hasFlow('invoice-process-rules')).to.be.true;\n });\n\n (0, _mocha.describe)('session generation', () => {\n const models = {\n workitem: {\n state: 'checkedIn'\n },\n\n appState: {\n online: true,\n userType: 'admin'\n },\n\n payload: {\n invoiceDate: new Date('2020-10-07'),\n basNumber: '2020100714232132'\n }\n };\n\n (0, _mocha.it)('should return the facts', done => {\n invoiceProcessValidator.validate(models).then(session => {\n (0, _chai.expect)(session).to.exist;\n\n const facts = session.getFacts();\n\n (0, _chai.expect)(facts).to.be.instanceof(Array);\n (0, _chai.expect)(facts.length).to.equal(3);\n done();\n }).catch(done);\n });\n\n (0, _mocha.it)('should contain the models with their data', done => {\n invoiceProcessValidator.validate(models).then(session => {\n (0, _chai.expect)(session).to.exist;\n\n const facts = session.getFacts();\n facts.forEach(fact => {\n Object.keys(fact).forEach(property => {\n switch (property) {\n case 'workitem':\n (0, _chai.expect)(fact[property].state).to.equal(models.workitem.state);\n break;\n\n case 'appState':\n (0, _chai.expect)(fact[property].online).to.equal(models.appState.online);\n (0, _chai.expect)(fact[property].userType).to.equal(models.appState.userType);\n break;\n\n case 'payload':\n (0, _chai.expect)(fact[property].invoiceDate).to.equal(models.payload.invoiceDate);\n (0, _chai.expect)(fact[property].basNumber).to.equal(models.payload.basNumber);\n break;\n default:\n break;\n }\n });\n });\n\n done();\n }).catch(done);\n });\n\n (0, _mocha.it)('should attach ValidationOutcome to each property in `validation`', done => {\n invoiceProcessValidator.validate(models).then(session => {\n const facts = session.getFacts();\n facts.forEach(fact => {\n Object.keys(fact.validation).forEach(outcomeKey => {\n (0, _chai.expect)(fact.validation[outcomeKey]).to.have.ownProperty('outcome');\n (0, _chai.expect)(fact.validation[outcomeKey]).to.have.ownProperty('info');\n });\n });\n\n done();\n }).catch(done);\n });\n });\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImludm9pY2UtcHJvY2Vzcy12YWxpZGF0b3IuZXM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0E7O0FBQ0E7O0FBRUE7Ozs7QUFDQTs7SUFBWSx1Qjs7OztBQUVaLHFCQUFTLGdDQUFULEVBQTJDLE1BQU07QUFDL0MsaUJBQUcsbUNBQUgsRUFBd0MsTUFBTTtBQUM1QyxzQkFBTyx3QkFBd0IsUUFBL0IsRUFBeUMsRUFBekMsQ0FBNEMsS0FBNUM7QUFDRCxHQUZEOztBQUlBLGlCQUFHLHNEQUFILEVBQTJELE1BQU07QUFDL0Qsc0JBQU8sZ0JBQU0sT0FBTixDQUFjLHVCQUFkLENBQVAsRUFBK0MsRUFBL0MsQ0FBa0QsRUFBbEQsQ0FBcUQsSUFBckQ7QUFDRCxHQUZEOztBQUlBLHVCQUFTLG9CQUFULEVBQStCLE1BQU07QUFDbkMsVUFBTSxTQUFTO0FBQ2IsZ0JBQVU7QUFDUixlQUFPO0FBREMsT0FERzs7QUFLYixnQkFBVTtBQUNSLGdCQUFRLElBREE7QUFFUixrQkFBVTtBQUZGLE9BTEc7O0FBVWIsZUFBUztBQUNQLHFCQUFhLElBQUksSUFBSixDQUFTLFlBQVQsQ0FETjtBQUVQLG1CQUFXO0FBRko7QUFWSSxLQUFmOztBQWdCQSxtQkFBRyx5QkFBSCxFQUErQixJQUFELElBQVU7QUFDdEMsOEJBQ0MsUUFERCxDQUNVLE1BRFYsRUFFQyxJQUZELENBRU8sT0FBRCxJQUFhO0FBQ2pCLDBCQUFPLE9BQVAsRUFBZ0IsRUFBaEIsQ0FBbUIsS0FBbkI7O0FBRUEsY0FBTSxRQUFRLFFBQVEsUUFBUixFQUFkOztBQUVBLDBCQUFPLEtBQVAsRUFBYyxFQUFkLENBQWlCLEVBQWpCLENBQW9CLFVBQXBCLENBQStCLEtBQS9CO0FBQ0EsMEJBQU8sTUFBTSxNQUFiLEVBQXFCLEVBQXJCLENBQXdCLEtBQXhCLENBQThCLENBQTlCO0FBQ0E7QUFDRCxPQVZELEVBV0MsS0FYRCxDQVdPLElBWFA7QUFZRCxLQWJEOztBQWVBLG1CQUFHLDJDQUFILEVBQWlELElBQUQsSUFBVTtBQUN4RCw4QkFDQyxRQURELENBQ1UsTUFEVixFQUVDLElBRkQsQ0FFTyxPQUFELElBQWE7QUFDakIsMEJBQU8sT0FBUCxFQUFnQixFQUFoQixDQUFtQixLQUFuQjs7QUFFQSxjQUFNLFFBQVEsUUFBUSxRQUFSLEVBQWQ7QUFDQSxjQUFNLE9BQU4sQ0FBZSxJQUFELElBQVU7QUFDdEIsaUJBQU8sSUFBUCxDQUFZLElBQVosRUFBa0IsT0FBbEIsQ0FBMkIsUUFBRCxJQUFjO0FBQ3RDLG9CQUFRLFFBQVI7QUFDRSxtQkFBSyxVQUFMO0FBQ0Usa0NBQU8sS0FBSyxRQUFMLEVBQWUsS0FBdEIsRUFBNkIsRUFBN0IsQ0FBZ0MsS0FBaEMsQ0FBc0MsT0FBTyxRQUFQLENBQWdCLEtBQXREO0FBQ0E7O0FBRUYsbUJBQUssVUFBTDtBQUNFLGtDQUFPLEtBQUssUUFBTCxFQUFlLE1BQXRCLEVBQThCLEVBQTlCLENBQWlDLEtBQWpDLENBQXVDLE9BQU8sUUFBUCxDQUFnQixNQUF2RDtBQUNBLGtDQUFPLEtBQUssUUFBTCxFQUFlLFFBQXRCLEVBQWdDLEVBQWhDLENBQW1DLEtBQW5DLENBQXlDLE9BQU8sUUFBUCxDQUFnQixRQUF6RDtBQUNBOztBQUVGLG1CQUFLLFNBQUw7QUFDRSxrQ0FBTyxLQUFLLFFBQUwsRUFBZSxXQUF0QixFQUFtQyxFQUFuQyxDQUFzQyxLQUF0QyxDQUE0QyxPQUFPLE9BQVAsQ0FBZSxXQUEzRDtBQUNBLGtDQUFPLEtBQUssUUFBTCxFQUFlLFNBQXRCLEVBQWlDLEVBQWpDLENBQW9DLEtBQXBDLENBQTBDLE9BQU8sT0FBUCxDQUFlLFNBQXpEO0FBQ0E7QUFDRjtBQUNFO0FBZko7QUFpQkQsV0FsQkQ7QUFtQkQsU0FwQkQ7O0FBc0JBO0FBQ0QsT0E3QkQsRUE4QkMsS0E5QkQsQ0E4Qk8sSUE5QlA7QUErQkQsS0FoQ0Q7O0FBa0NBLG1CQUFHLGtFQUFILEVBQXdFLElBQUQsSUFBVTtBQUMvRSw4QkFDRyxRQURILENBQ1ksTUFEWixFQUVHLElBRkgsQ0FFUyxPQUFELElBQWE7QUFDakIsY0FBTSxRQUFRLFFBQVEsUUFBUixFQUFkO0FBQ0EsY0FBTSxPQUFOLENBQWUsSUFBRCxJQUFVO0FBQ3RCLGlCQUFPLElBQVAsQ0FBWSxLQUFLLFVBQWpCLEVBQTZCLE9BQTdCLENBQXNDLFVBQUQsSUFBZ0I7QUFDbkQsOEJBQU8sS0FBSyxVQUFMLENBQWdCLFVBQWhCLENBQVAsRUFBb0MsRUFBcEMsQ0FBdUMsSUFBdkMsQ0FBNEMsV0FBNUMsQ0FBd0QsU0FBeEQ7QUFDQSw4QkFBTyxLQUFLLFVBQUwsQ0FBZ0IsVUFBaEIsQ0FBUCxFQUFvQyxFQUFwQyxDQUF1QyxJQUF2QyxDQUE0QyxXQUE1QyxDQUF3RCxNQUF4RDtBQUNELFdBSEQ7QUFJRCxTQUxEOztBQU9BO0FBQ0QsT0FaSCxFQWFHLEtBYkgsQ0FhUyxJQWJUO0FBY0QsS0FmRDtBQWdCRCxHQWxGRDtBQW1GRCxDQTVGRCIsImZpbGUiOiJpbnZvaWNlLXByb2Nlc3MtdmFsaWRhdG9yLmVzNiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBtYXgtbGVuOjAgKi9cbi8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6MCAqL1xuXG5pbXBvcnQgeyBleHBlY3QgfSBmcm9tICdjaGFpJztcbmltcG9ydCB7IGRlc2NyaWJlLCBpdCB9IGZyb20gJ21vY2hhJztcblxuaW1wb3J0IG5vb2xzIGZyb20gJ25vb2xzJztcbmltcG9ydCAqIGFzIGludm9pY2VQcm9jZXNzVmFsaWRhdG9yIGZyb20gJy4uLy4uL3ZhbGlkYXRvcnMvaW52b2ljZS1wcm9jZXNzLXZhbGlkYXRvcic7XG5cbmRlc2NyaWJlKCdJbnZvaWNlUHJvY2Vzc1ZhbGlkYXRvciBtb2R1bGUnLCAoKSA9PiB7XG4gIGl0KCdzaG91bGQgZXhwb3NlIHRoZSB2YWxpZGF0ZSBtZXRob2QnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGludm9pY2VQcm9jZXNzVmFsaWRhdG9yLnZhbGlkYXRlKS50by5leGlzdDtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYXZlIGNyZWF0ZWQgdGhlIGBpbnZvaWNlLXByb2Nlc3MtcnVsZXNgIGZsb3cnLCAoKSA9PiB7XG4gICAgZXhwZWN0KG5vb2xzLmhhc0Zsb3coJ2ludm9pY2UtcHJvY2Vzcy1ydWxlcycpKS50by5iZS50cnVlO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2Vzc2lvbiBnZW5lcmF0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IG1vZGVscyA9IHtcbiAgICAgIHdvcmtpdGVtOiB7XG4gICAgICAgIHN0YXRlOiAnY2hlY2tlZEluJyxcbiAgICAgIH0sXG5cbiAgICAgIGFwcFN0YXRlOiB7XG4gICAgICAgIG9ubGluZTogdHJ1ZSxcbiAgICAgICAgdXNlclR5cGU6ICdhZG1pbicsXG4gICAgICB9LFxuXG4gICAgICBwYXlsb2FkOiB7XG4gICAgICAgIGludm9pY2VEYXRlOiBuZXcgRGF0ZSgnMjAyMC0xMC0wNycpLFxuICAgICAgICBiYXNOdW1iZXI6ICcyMDIwMTAwNzE0MjMyMTMyJyxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBmYWN0cycsIChkb25lKSA9PiB7XG4gICAgICBpbnZvaWNlUHJvY2Vzc1ZhbGlkYXRvclxuICAgICAgLnZhbGlkYXRlKG1vZGVscylcbiAgICAgIC50aGVuKChzZXNzaW9uKSA9PiB7XG4gICAgICAgIGV4cGVjdChzZXNzaW9uKS50by5leGlzdDtcblxuICAgICAgICBjb25zdCBmYWN0cyA9IHNlc3Npb24uZ2V0RmFjdHMoKTtcblxuICAgICAgICBleHBlY3QoZmFjdHMpLnRvLmJlLmluc3RhbmNlb2YoQXJyYXkpO1xuICAgICAgICBleHBlY3QoZmFjdHMubGVuZ3RoKS50by5lcXVhbCgzKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChkb25lKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udGFpbiB0aGUgbW9kZWxzIHdpdGggdGhlaXIgZGF0YScsIChkb25lKSA9PiB7XG4gICAgICBpbnZvaWNlUHJvY2Vzc1ZhbGlkYXRvclxuICAgICAgLnZhbGlkYXRlKG1vZGVscylcbiAgICAgIC50aGVuKChzZXNzaW9uKSA9PiB7XG4gICAgICAgIGV4cGVjdChzZXNzaW9uKS50by5leGlzdDtcblxuICAgICAgICBjb25zdCBmYWN0cyA9IHNlc3Npb24uZ2V0RmFjdHMoKTtcbiAgICAgICAgZmFjdHMuZm9yRWFjaCgoZmFjdCkgPT4ge1xuICAgICAgICAgIE9iamVjdC5rZXlzKGZhY3QpLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3dvcmtpdGVtJzpcbiAgICAgICAgICAgICAgICBleHBlY3QoZmFjdFtwcm9wZXJ0eV0uc3RhdGUpLnRvLmVxdWFsKG1vZGVscy53b3JraXRlbS5zdGF0ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAnYXBwU3RhdGUnOlxuICAgICAgICAgICAgICAgIGV4cGVjdChmYWN0W3Byb3BlcnR5XS5vbmxpbmUpLnRvLmVxdWFsKG1vZGVscy5hcHBTdGF0ZS5vbmxpbmUpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChmYWN0W3Byb3BlcnR5XS51c2VyVHlwZSkudG8uZXF1YWwobW9kZWxzLmFwcFN0YXRlLnVzZXJUeXBlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlICdwYXlsb2FkJzpcbiAgICAgICAgICAgICAgICBleHBlY3QoZmFjdFtwcm9wZXJ0eV0uaW52b2ljZURhdGUpLnRvLmVxdWFsKG1vZGVscy5wYXlsb2FkLmludm9pY2VEYXRlKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZmFjdFtwcm9wZXJ0eV0uYmFzTnVtYmVyKS50by5lcXVhbChtb2RlbHMucGF5bG9hZC5iYXNOdW1iZXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkb25lKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGRvbmUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhdHRhY2ggVmFsaWRhdGlvbk91dGNvbWUgdG8gZWFjaCBwcm9wZXJ0eSBpbiBgdmFsaWRhdGlvbmAnLCAoZG9uZSkgPT4ge1xuICAgICAgaW52b2ljZVByb2Nlc3NWYWxpZGF0b3JcbiAgICAgICAgLnZhbGlkYXRlKG1vZGVscylcbiAgICAgICAgLnRoZW4oKHNlc3Npb24pID0+IHtcbiAgICAgICAgICBjb25zdCBmYWN0cyA9IHNlc3Npb24uZ2V0RmFjdHMoKTtcbiAgICAgICAgICBmYWN0cy5mb3JFYWNoKChmYWN0KSA9PiB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmYWN0LnZhbGlkYXRpb24pLmZvckVhY2goKG91dGNvbWVLZXkpID0+IHtcbiAgICAgICAgICAgICAgZXhwZWN0KGZhY3QudmFsaWRhdGlvbltvdXRjb21lS2V5XSkudG8uaGF2ZS5vd25Qcm9wZXJ0eSgnb3V0Y29tZScpO1xuICAgICAgICAgICAgICBleHBlY3QoZmFjdC52YWxpZGF0aW9uW291dGNvbWVLZXldKS50by5oYXZlLm93blByb3BlcnR5KCdpbmZvJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGRvbmUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19",
"ast": null,
"map": {
"version": 3,
"sources": [
"invoice-process-validator.es6"
],
"names": [],
"mappings": "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",
"file": "invoice-process-validator.es6",
"sourcesContent": [
"/* eslint max-len:0 */\n/* eslint no-unused-expressions:0 */\n\nimport { expect } from 'chai';\nimport { describe, it } from 'mocha';\n\nimport nools from 'nools';\nimport * as invoiceProcessValidator from '../../validators/invoice-process-validator';\n\ndescribe('InvoiceProcessValidator module', () => {\n it('should expose the validate method', () => {\n expect(invoiceProcessValidator.validate).to.exist;\n });\n\n it('should have created the `invoice-process-rules` flow', () => {\n expect(nools.hasFlow('invoice-process-rules')).to.be.true;\n });\n\n describe('session generation', () => {\n const models = {\n workitem: {\n state: 'checkedIn',\n },\n\n appState: {\n online: true,\n userType: 'admin',\n },\n\n payload: {\n invoiceDate: new Date('2020-10-07'),\n basNumber: '2020100714232132',\n },\n };\n\n it('should return the facts', (done) => {\n invoiceProcessValidator\n .validate(models)\n .then((session) => {\n expect(session).to.exist;\n\n const facts = session.getFacts();\n\n expect(facts).to.be.instanceof(Array);\n expect(facts.length).to.equal(3);\n done();\n })\n .catch(done);\n });\n\n it('should contain the models with their data', (done) => {\n invoiceProcessValidator\n .validate(models)\n .then((session) => {\n expect(session).to.exist;\n\n const facts = session.getFacts();\n facts.forEach((fact) => {\n Object.keys(fact).forEach((property) => {\n switch (property) {\n case 'workitem':\n expect(fact[property].state).to.equal(models.workitem.state);\n break;\n\n case 'appState':\n expect(fact[property].online).to.equal(models.appState.online);\n expect(fact[property].userType).to.equal(models.appState.userType);\n break;\n\n case 'payload':\n expect(fact[property].invoiceDate).to.equal(models.payload.invoiceDate);\n expect(fact[property].basNumber).to.equal(models.payload.basNumber);\n break;\n default:\n break;\n }\n });\n });\n\n done();\n })\n .catch(done);\n });\n\n it('should attach ValidationOutcome to each property in `validation`', (done) => {\n invoiceProcessValidator\n .validate(models)\n .then((session) => {\n const facts = session.getFacts();\n facts.forEach((fact) => {\n Object.keys(fact.validation).forEach((outcomeKey) => {\n expect(fact.validation[outcomeKey]).to.have.ownProperty('outcome');\n expect(fact.validation[outcomeKey]).to.have.ownProperty('info');\n });\n });\n\n done();\n })\n .catch(done);\n });\n });\n});\n"
]
},
"mtime": 1467106593601
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/src/validators/invoice-process-test-validator.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [],
"marked": [],
"modules": {
"imports": [
{
"source": "../engine",
"imported": [
"ValidationEngine"
],
"specifiers": [
{
"kind": "named",
"imported": "ValidationEngine",
"local": "ValidationEngine"
}
]
}
],
"exports": {
"exported": [
"rawValidate",
"models",
"verboseValidate",
"models",
"validate",
"models"
],
"specifiers": [
{
"kind": "local",
"local": "rawValidate",
"exported": "rawValidate"
},
{
"kind": "local",
"local": "models",
"exported": "models"
},
{
"kind": "local",
"local": "verboseValidate",
"exported": "verboseValidate"
},
{
"kind": "local",
"local": "models",
"exported": "models"
},
{
"kind": "local",
"local": "validate",
"exported": "validate"
},
{
"kind": "local",
"local": "models",
"exported": "models"
}
]
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/validators/invoice-process-test-validator.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/validators/invoice-process-test-validator.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "invoice-process-test-validator.es6",
"sourceFileName": "invoice-process-test-validator.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "invoice-process-test-validator"
},
"ignored": false,
"code": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.rawValidate = rawValidate;\nexports.verboseValidate = verboseValidate;\nexports.validate = validate;\n\nvar _engine = require('../engine');\n\nclass InvoiceProcessTestValidator extends _engine.ValidationEngine {\n constructor() {\n super('invoice-process-test-rules');\n }\n\n _workitemFacts(model) {\n const WorkItemModel = this._getDefined('WorkItemModel');\n const ValidationOutcome = this._getDefined('ValidationOutcome');\n return new WorkItemModel(model, {\n workitem: new ValidationOutcome(),\n 'custom.workitem.checkout': new ValidationOutcome()\n });\n }\n\n _payloadFacts(model) {\n const PayloadModel = this._getDefined('PayloadModel');\n const ValidationOutcome = this._getDefined('ValidationOutcome');\n return new PayloadModel(model, {\n payload: new ValidationOutcome(),\n 'payload.invoiceDate': new ValidationOutcome(),\n 'payload.basNumber': new ValidationOutcome()\n });\n }\n\n _appStateFacts(model) {\n const AppStateModel = this._getDefined('AppStateModel');\n const ValidationOutcome = this._getDefined('ValidationOutcome');\n return new AppStateModel(model, {\n 'appState.online': new ValidationOutcome(),\n 'appState.userType': new ValidationOutcome()\n });\n }\n} /* invoice-process-validator */\n\n\nconst engine = new InvoiceProcessTestValidator();\n\nfunction rawValidate(models) {\n return engine.rawValidate(models || {\n workitem: { state: 'dummy' }\n });\n}\n\nfunction verboseValidate(models) {\n return engine.verboseValidate(models || {\n workitem: { state: 'dummy' }\n });\n}\n\nfunction validate(models) {\n return engine.validate(models || {\n workitem: { state: 'dummy' }\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImludm9pY2UtcHJvY2Vzcy10ZXN0LXZhbGlkYXRvci5lczYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7UUF1Q2dCLFcsR0FBQSxXO1FBT0EsZSxHQUFBLGU7UUFPQSxRLEdBQUEsUTs7QUFwRGhCOztBQUVBLE1BQU0sMkJBQU4sa0NBQTJEO0FBQ3pELGdCQUFjO0FBQ1osVUFBTSw0QkFBTjtBQUNEOztBQUVELGlCQUFlLEtBQWYsRUFBc0I7QUFDcEIsVUFBTSxnQkFBZ0IsS0FBSyxXQUFMLENBQWlCLGVBQWpCLENBQXRCO0FBQ0EsVUFBTSxvQkFBb0IsS0FBSyxXQUFMLENBQWlCLG1CQUFqQixDQUExQjtBQUNBLFdBQU8sSUFBSSxhQUFKLENBQWtCLEtBQWxCLEVBQXlCO0FBQzlCLGdCQUFVLElBQUksaUJBQUosRUFEb0I7QUFFOUIsa0NBQTRCLElBQUksaUJBQUo7QUFGRSxLQUF6QixDQUFQO0FBSUQ7O0FBRUQsZ0JBQWMsS0FBZCxFQUFxQjtBQUNuQixVQUFNLGVBQWUsS0FBSyxXQUFMLENBQWlCLGNBQWpCLENBQXJCO0FBQ0EsVUFBTSxvQkFBb0IsS0FBSyxXQUFMLENBQWlCLG1CQUFqQixDQUExQjtBQUNBLFdBQU8sSUFBSSxZQUFKLENBQWlCLEtBQWpCLEVBQXdCO0FBQzdCLGVBQVMsSUFBSSxpQkFBSixFQURvQjtBQUU3Qiw2QkFBdUIsSUFBSSxpQkFBSixFQUZNO0FBRzdCLDJCQUFxQixJQUFJLGlCQUFKO0FBSFEsS0FBeEIsQ0FBUDtBQUtEOztBQUVELGlCQUFlLEtBQWYsRUFBc0I7QUFDcEIsVUFBTSxnQkFBZ0IsS0FBSyxXQUFMLENBQWlCLGVBQWpCLENBQXRCO0FBQ0EsVUFBTSxvQkFBb0IsS0FBSyxXQUFMLENBQWlCLG1CQUFqQixDQUExQjtBQUNBLFdBQU8sSUFBSSxhQUFKLENBQWtCLEtBQWxCLEVBQXlCO0FBQzlCLHlCQUFtQixJQUFJLGlCQUFKLEVBRFc7QUFFOUIsMkJBQXFCLElBQUksaUJBQUo7QUFGUyxLQUF6QixDQUFQO0FBSUQ7QUEvQndELEM7OztBQWtDM0QsTUFBTSxTQUFTLElBQUksMkJBQUosRUFBZjs7QUFFTyxTQUFTLFdBQVQsQ0FBcUIsTUFBckIsRUFBNkI7QUFDbEMsU0FBTyxPQUNKLFdBREksQ0FDUSxVQUFVO0FBQ3JCLGNBQVUsRUFBRSxPQUFPLE9BQVQ7QUFEVyxHQURsQixDQUFQO0FBSUQ7O0FBRU0sU0FBUyxlQUFULENBQXlCLE1BQXpCLEVBQWlDO0FBQ3RDLFNBQU8sT0FDSixlQURJLENBQ1ksVUFBVTtBQUN6QixjQUFVLEVBQUUsT0FBTyxPQUFUO0FBRGUsR0FEdEIsQ0FBUDtBQUlEOztBQUVNLFNBQVMsUUFBVCxDQUFrQixNQUFsQixFQUEwQjtBQUMvQixTQUFPLE9BQ0osUUFESSxDQUNLLFVBQVU7QUFDbEIsY0FBVSxFQUFFLE9BQU8sT0FBVDtBQURRLEdBRGYsQ0FBUDtBQUlEIiwiZmlsZSI6Imludm9pY2UtcHJvY2Vzcy10ZXN0LXZhbGlkYXRvci5lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpbnZvaWNlLXByb2Nlc3MtdmFsaWRhdG9yICovXG5pbXBvcnQgeyBWYWxpZGF0aW9uRW5naW5lIH0gZnJvbSAnLi4vZW5naW5lJztcblxuY2xhc3MgSW52b2ljZVByb2Nlc3NUZXN0VmFsaWRhdG9yIGV4dGVuZHMgVmFsaWRhdGlvbkVuZ2luZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdpbnZvaWNlLXByb2Nlc3MtdGVzdC1ydWxlcycpO1xuICB9XG5cbiAgX3dvcmtpdGVtRmFjdHMobW9kZWwpIHtcbiAgICBjb25zdCBXb3JrSXRlbU1vZGVsID0gdGhpcy5fZ2V0RGVmaW5lZCgnV29ya0l0ZW1Nb2RlbCcpO1xuICAgIGNvbnN0IFZhbGlkYXRpb25PdXRjb21lID0gdGhpcy5fZ2V0RGVmaW5lZCgnVmFsaWRhdGlvbk91dGNvbWUnKTtcbiAgICByZXR1cm4gbmV3IFdvcmtJdGVtTW9kZWwobW9kZWwsIHtcbiAgICAgIHdvcmtpdGVtOiBuZXcgVmFsaWRhdGlvbk91dGNvbWUoKSxcbiAgICAgICdjdXN0b20ud29ya2l0ZW0uY2hlY2tvdXQnOiBuZXcgVmFsaWRhdGlvbk91dGNvbWUoKSxcbiAgICB9KTtcbiAgfVxuXG4gIF9wYXlsb2FkRmFjdHMobW9kZWwpIHtcbiAgICBjb25zdCBQYXlsb2FkTW9kZWwgPSB0aGlzLl9nZXREZWZpbmVkKCdQYXlsb2FkTW9kZWwnKTtcbiAgICBjb25zdCBWYWxpZGF0aW9uT3V0Y29tZSA9IHRoaXMuX2dldERlZmluZWQoJ1ZhbGlkYXRpb25PdXRjb21lJyk7XG4gICAgcmV0dXJuIG5ldyBQYXlsb2FkTW9kZWwobW9kZWwsIHtcbiAgICAgIHBheWxvYWQ6IG5ldyBWYWxpZGF0aW9uT3V0Y29tZSgpLFxuICAgICAgJ3BheWxvYWQuaW52b2ljZURhdGUnOiBuZXcgVmFsaWRhdGlvbk91dGNvbWUoKSxcbiAgICAgICdwYXlsb2FkLmJhc051bWJlcic6IG5ldyBWYWxpZGF0aW9uT3V0Y29tZSgpLFxuICAgIH0pO1xuICB9XG5cbiAgX2FwcFN0YXRlRmFjdHMobW9kZWwpIHtcbiAgICBjb25zdCBBcHBTdGF0ZU1vZGVsID0gdGhpcy5fZ2V0RGVmaW5lZCgnQXBwU3RhdGVNb2RlbCcpO1xuICAgIGNvbnN0IFZhbGlkYXRpb25PdXRjb21lID0gdGhpcy5fZ2V0RGVmaW5lZCgnVmFsaWRhdGlvbk91dGNvbWUnKTtcbiAgICByZXR1cm4gbmV3IEFwcFN0YXRlTW9kZWwobW9kZWwsIHtcbiAgICAgICdhcHBTdGF0ZS5vbmxpbmUnOiBuZXcgVmFsaWRhdGlvbk91dGNvbWUoKSxcbiAgICAgICdhcHBTdGF0ZS51c2VyVHlwZSc6IG5ldyBWYWxpZGF0aW9uT3V0Y29tZSgpLFxuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGVuZ2luZSA9IG5ldyBJbnZvaWNlUHJvY2Vzc1Rlc3RWYWxpZGF0b3IoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJhd1ZhbGlkYXRlKG1vZGVscykge1xuICByZXR1cm4gZW5naW5lXG4gICAgLnJhd1ZhbGlkYXRlKG1vZGVscyB8fCB7XG4gICAgICB3b3JraXRlbTogeyBzdGF0ZTogJ2R1bW15JyB9LFxuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmVyYm9zZVZhbGlkYXRlKG1vZGVscykge1xuICByZXR1cm4gZW5naW5lXG4gICAgLnZlcmJvc2VWYWxpZGF0ZShtb2RlbHMgfHwge1xuICAgICAgd29ya2l0ZW06IHsgc3RhdGU6ICdkdW1teScgfSxcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlKG1vZGVscykge1xuICByZXR1cm4gZW5naW5lXG4gICAgLnZhbGlkYXRlKG1vZGVscyB8fCB7XG4gICAgICB3b3JraXRlbTogeyBzdGF0ZTogJ2R1bW15JyB9LFxuICAgIH0pO1xufVxuIl19",
"ast": null,
"map": {
"version": 3,
"sources": [
"invoice-process-test-validator.es6"
],
"names": [],
"mappings": ";;;;;QAuCgB,W,GAAA,W;QAOA,e,GAAA,e;QAOA,Q,GAAA,Q;;AApDhB;;AAEA,MAAM,2BAAN,kCAA2D;AACzD,gBAAc;AACZ,UAAM,4BAAN;AACD;;AAED,iBAAe,KAAf,EAAsB;AACpB,UAAM,gBAAgB,KAAK,WAAL,CAAiB,eAAjB,CAAtB;AACA,UAAM,oBAAoB,KAAK,WAAL,CAAiB,mBAAjB,CAA1B;AACA,WAAO,IAAI,aAAJ,CAAkB,KAAlB,EAAyB;AAC9B,gBAAU,IAAI,iBAAJ,EADoB;AAE9B,kCAA4B,IAAI,iBAAJ;AAFE,KAAzB,CAAP;AAID;;AAED,gBAAc,KAAd,EAAqB;AACnB,UAAM,eAAe,KAAK,WAAL,CAAiB,cAAjB,CAArB;AACA,UAAM,oBAAoB,KAAK,WAAL,CAAiB,mBAAjB,CAA1B;AACA,WAAO,IAAI,YAAJ,CAAiB,KAAjB,EAAwB;AAC7B,eAAS,IAAI,iBAAJ,EADoB;AAE7B,6BAAuB,IAAI,iBAAJ,EAFM;AAG7B,2BAAqB,IAAI,iBAAJ;AAHQ,KAAxB,CAAP;AAKD;;AAED,iBAAe,KAAf,EAAsB;AACpB,UAAM,gBAAgB,KAAK,WAAL,CAAiB,eAAjB,CAAtB;AACA,UAAM,oBAAoB,KAAK,WAAL,CAAiB,mBAAjB,CAA1B;AACA,WAAO,IAAI,aAAJ,CAAkB,KAAlB,EAAyB;AAC9B,yBAAmB,IAAI,iBAAJ,EADW;AAE9B,2BAAqB,IAAI,iBAAJ;AAFS,KAAzB,CAAP;AAID;AA/BwD,C;;;AAkC3D,MAAM,SAAS,IAAI,2BAAJ,EAAf;;AAEO,SAAS,WAAT,CAAqB,MAArB,EAA6B;AAClC,SAAO,OACJ,WADI,CACQ,UAAU;AACrB,cAAU,EAAE,OAAO,OAAT;AADW,GADlB,CAAP;AAID;;AAEM,SAAS,eAAT,CAAyB,MAAzB,EAAiC;AACtC,SAAO,OACJ,eADI,CACY,UAAU;AACzB,cAAU,EAAE,OAAO,OAAT;AADe,GADtB,CAAP;AAID;;AAEM,SAAS,QAAT,CAAkB,MAAlB,EAA0B;AAC/B,SAAO,OACJ,QADI,CACK,UAAU;AAClB,cAAU,EAAE,OAAO,OAAT;AADQ,GADf,CAAP;AAID",
"file": "invoice-process-test-validator.es6",
"sourcesContent": [
"/* invoice-process-validator */\nimport { ValidationEngine } from '../engine';\n\nclass InvoiceProcessTestValidator extends ValidationEngine {\n constructor() {\n super('invoice-process-test-rules');\n }\n\n _workitemFacts(model) {\n const WorkItemModel = this._getDefined('WorkItemModel');\n const ValidationOutcome = this._getDefined('ValidationOutcome');\n return new WorkItemModel(model, {\n workitem: new ValidationOutcome(),\n 'custom.workitem.checkout': new ValidationOutcome(),\n });\n }\n\n _payloadFacts(model) {\n const PayloadModel = this._getDefined('PayloadModel');\n const ValidationOutcome = this._getDefined('ValidationOutcome');\n return new PayloadModel(model, {\n payload: new ValidationOutcome(),\n 'payload.invoiceDate': new ValidationOutcome(),\n 'payload.basNumber': new ValidationOutcome(),\n });\n }\n\n _appStateFacts(model) {\n const AppStateModel = this._getDefined('AppStateModel');\n const ValidationOutcome = this._getDefined('ValidationOutcome');\n return new AppStateModel(model, {\n 'appState.online': new ValidationOutcome(),\n 'appState.userType': new ValidationOutcome(),\n });\n }\n}\n\nconst engine = new InvoiceProcessTestValidator();\n\nexport function rawValidate(models) {\n return engine\n .rawValidate(models || {\n workitem: { state: 'dummy' },\n });\n}\n\nexport function verboseValidate(models) {\n return engine\n .verboseValidate(models || {\n workitem: { state: 'dummy' },\n });\n}\n\nexport function validate(models) {\n return engine\n .validate(models || {\n workitem: { state: 'dummy' },\n });\n}\n"
]
},
"mtime": 1467198327027
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/experimental/v-engine/src/__tests__/validators/invoice-process-test-validator.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [
"interopRequireDefault",
"interopRequireWildcard"
],
"marked": [],
"modules": {
"imports": [
{
"source": "chai",
"imported": [
"expect"
],
"specifiers": [
{
"kind": "named",
"imported": "expect",
"local": "expect"
}
]
},
{
"source": "mocha",
"imported": [
"describe",
"it"
],
"specifiers": [
{
"kind": "named",
"imported": "describe",
"local": "describe"
},
{
"kind": "named",
"imported": "it",
"local": "it"
}
]
},
{
"source": "nools",
"imported": [
"default"
],
"specifiers": [
{
"kind": "named",
"imported": "default",
"local": "nools"
}
]
},
{
"source": "../../validators/invoice-process-test-validator",
"imported": [
"*"
],
"specifiers": [
{
"kind": "namespace",
"local": "invoiceProcessTestValidator"
}
]
}
],
"exports": {
"exported": [],
"specifiers": []
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/__tests__/validators/invoice-process-test-validator.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/experimental/v-engine/src/__tests__/validators/invoice-process-test-validator.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "invoice-process-test-validator.es6",
"sourceFileName": "invoice-process-test-validator.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "invoice-process-test-validator"
},
"ignored": false,
"code": "'use strict';\n\nvar _chai = require('chai');\n\nvar _mocha = require('mocha');\n\nvar _nools = require('nools');\n\nvar _nools2 = babelHelpers.interopRequireDefault(_nools);\n\nvar _invoiceProcessTestValidator = require('../../validators/invoice-process-test-validator');\n\nvar invoiceProcessTestValidator = babelHelpers.interopRequireWildcard(_invoiceProcessTestValidator);\n/* eslint max-len:0 */\n/* eslint no-unused-expressions:0 */\n\n(0, _mocha.describe)('InvoiceProcessValidator module', () => {\n (0, _mocha.it)('should expose the validate method', () => {\n (0, _chai.expect)(invoiceProcessTestValidator.rawValidate).to.exist;\n (0, _chai.expect)(invoiceProcessTestValidator.verboseValidate).to.exist;\n (0, _chai.expect)(invoiceProcessTestValidator.validate).to.exist;\n });\n\n (0, _mocha.it)('should have created the `invoice-process-rules` flow', () => {\n (0, _chai.expect)(_nools2.default.hasFlow('invoice-process-test-rules')).to.be.true;\n });\n\n (0, _mocha.describe)('session generation', () => {\n const models = {\n workitem: {\n state: 'checkedIn'\n },\n\n appState: {\n online: true,\n userType: 'admin'\n },\n\n payload: {\n invoiceDate: new Date('2020-10-07'),\n basNumber: '2020100714232132'\n }\n };\n\n (0, _mocha.it)('should create a new session for each validation', done => {\n let theFirstSession = {};\n let theSecondSession = {};\n\n invoiceProcessTestValidator.verboseValidate().then(session1 => {\n theFirstSession = session1;\n\n invoiceProcessTestValidator.verboseValidate().then(session2 => {\n theSecondSession = session2;\n\n (0, _chai.expect)(theFirstSession).to.not.equal(theSecondSession);\n done();\n }).catch(done);\n }).catch(done);\n });\n\n (0, _mocha.it)('should return the facts', done => {\n invoiceProcessTestValidator.verboseValidate(models).then(result => {\n (0, _chai.expect)(result).to.exist;\n (0, _chai.expect)(result.facts).to.exist;\n\n (0, _chai.expect)(result.facts).to.be.instanceof(Array);\n (0, _chai.expect)(result.facts.length).to.equal(3);\n\n done();\n }).catch(done);\n });\n\n (0, _mocha.it)('should contain the models with their data', done => {\n invoiceProcessTestValidator.verboseValidate(models).then(result => {\n (0, _chai.expect)(result.outcomes.workitemModel.workitem.state).to.equal(models.workitem.state);\n (0, _chai.expect)(result.outcomes.appStateModel.appState.online).to.equal(models.appState.online);\n (0, _chai.expect)(result.outcomes.appStateModel.appState.userType).to.equal(models.appState.userType);\n (0, _chai.expect)(result.outcomes.payloadModel.payload.invoiceDate).to.equal(models.payload.invoiceDate);\n (0, _chai.expect)(result.outcomes.payloadModel.payload.basNumber).to.equal(models.payload.basNumber);\n\n done();\n }).catch(done);\n });\n\n (0, _mocha.it)('should attach ValidationOutcome to each property in `validation`', done => {\n invoiceProcessTestValidator.verboseValidate(models).then(result => {\n result.facts.forEach(fact => {\n Object.keys(fact.validation).forEach(outcomeKey => {\n (0, _chai.expect)(fact.validation[outcomeKey]).to.have.ownProperty('outcome');\n (0, _chai.expect)(fact.validation[outcomeKey]).to.have.ownProperty('info');\n });\n });\n\n done();\n }).catch(done);\n });\n });\n\n (0, _mocha.describe)('raw validation', () => {\n (0, _mocha.it)('should return all valid', done => {\n const models = {\n workitem: {\n state: 'checkedIn'\n },\n\n appState: {\n online: true,\n userType: 'admin'\n },\n\n payload: {\n invoiceDate: new Date('2020-10-07'),\n basNumber: '2020100712'\n }\n };\n\n invoiceProcessTestValidator.verboseValidate(models).then(result => {\n (0, _chai.expect)(result.outcomes.workitemModel.validation.workitem.outcome, '[outcome] - workitem').to.equal('valid');\n (0, _chai.expect)(result.outcomes.workitemModel.validation['custom.workitem.checkout'].outcome, '[outcome] - custom.worktiem.checkout').to.equal('valid');\n\n (0, _chai.expect)(result.outcomes.payloadModel.validation.payload.outcome, '[outcome] - payload').to.equal('valid');\n (0, _chai.expect)(result.outcomes.payloadModel.validation['payload.invoiceDate'].outcome, '[outcome] - payload.invoiceDate').to.equal('valid');\n (0, _chai.expect)(result.outcomes.payloadModel.validation['payload.basNumber'].outcome, '[outcome] - payload.basNumber').to.equal('valid');\n\n (0, _chai.expect)(result.outcomes.appStateModel.validation['appState.online'].outcome, '[outcome] - appState.online').to.equal('valid');\n (0, _chai.expect)(result.outcomes.appStateModel.validation['appState.userType'].outcome, '[outcome] - appState.userType').to.equal('valid');\n done();\n }).catch(done);\n });\n\n (0, _mocha.it)('should mark some subjects as invalid', done => {\n const models = {\n workitem: {\n state: 'checkedIn'\n },\n\n appState: {\n online: true,\n userType: 'admin'\n },\n\n payload: {\n invoiceDate: new Date('2021-10-07'),\n basNumber: '2020100712'\n }\n };\n\n invoiceProcessTestValidator.verboseValidate(models).then(result => {\n (0, _chai.expect)(result.outcomes.workitemModel.validation.workitem.outcome, '[outcome] - workitem').to.equal('invalid');\n (0, _chai.expect)(result.outcomes.workitemModel.validation['custom.workitem.checkout'].outcome, '[outcome] - custom.worktiem.checkout').to.equal('invalid');\n\n (0, _chai.expect)(result.outcomes.payloadModel.validation.payload.outcome, '[outcome] - payload').to.equal('invalid');\n (0, _chai.expect)(result.outcomes.payloadModel.validation['payload.invoiceDate'].outcome, '[outcome] - payload.invoiceDate').to.equal('valid');\n (0, _chai.expect)(result.outcomes.payloadModel.validation['payload.basNumber'].outcome, '[outcome] - payload.basNumber').to.equal('invalid');\n (0, _chai.expect)(result.outcomes.payloadModel.validation['payload.basNumber'].info.basNumberHasInvoiceDate).to.exist;\n\n (0, _chai.expect)(result.outcomes.appStateModel.validation['appState.online'].outcome, '[outcome] - appState.online').to.equal('valid');\n (0, _chai.expect)(result.outcomes.appStateModel.validation['appState.userType'].outcome, '[outcome] - appState.userType').to.equal('valid');\n\n done();\n }).catch(done);\n });\n\n (0, _mocha.it)('should mark some subjects as incomplete', done => {\n const models = {\n workitem: {\n state: 'checkedIn'\n },\n\n appState: {\n online: false,\n userType: 'admin'\n },\n\n payload: {\n invoiceDate: '',\n basNumber: '2020100712'\n }\n };\n\n invoiceProcessTestValidator.verboseValidate(models).then(result => {\n (0, _chai.expect)(result.outcomes.workitemModel.validation.workitem.outcome, '[outcome] - workitem').to.equal('incomplete');\n (0, _chai.expect)(result.outcomes.workitemModel.validation.workitem.info.workitemIsComplete).to.exist;\n (0, _chai.expect)(result.outcomes.workitemModel.validation['custom.workitem.checkout'].outcome, '[outcome] - custom.worktiem.checkout').to.equal('invalid');\n\n (0, _chai.expect)(result.outcomes.payloadModel.validation.payload.outcome, '[outcome] - payload').to.equal('incomplete');\n (0, _chai.expect)(result.outcomes.payloadModel.validation.payload.info.payloadIsComplete).to.exist;\n (0, _chai.expect)(result.outcomes.payloadModel.validation['payload.invoiceDate'].outcome, '[outcome] - payload.invoiceDate').to.equal('incomplete');\n (0, _chai.expect)(result.outcomes.payloadModel.validation['payload.invoiceDate'].info.invoiceDateIsComplete).to.exist;\n (0, _chai.expect)(result.outcomes.payloadModel.validation['payload.basNumber'].outcome, '[outcome] - payload.basNumber').to.equal('valid');\n\n (0, _chai.expect)(result.outcomes.appStateModel.validation['appState.online'].outcome, '[outcome] - appState.online').to.equal('valid');\n (0, _chai.expect)(result.outcomes.appStateModel.validation['appState.userType'].outcome, '[outcome] - appState.userType').to.equal('valid');\n\n done();\n }).catch(done);\n });\n });\n\n (0, _mocha.describe)('validation', () => {\n (0, _mocha.it)('should return all valid', done => {\n const models = {\n workitem: {\n state: 'checkedIn'\n },\n\n appState: {\n online: true,\n userType: 'admin'\n },\n\n payload: {\n invoiceDate: new Date('2020-10-07'),\n basNumber: '2020100712'\n }\n };\n\n invoiceProcessTestValidator.validate(models).then(errors => {\n (0, _chai.expect)(errors).to.be.empty;\n\n done();\n }).catch(done);\n });\n\n (0, _mocha.it)('should mark some subjects as invalid', done => {\n const models = {\n workitem: {\n state: 'checkedIn'\n },\n\n appState: {\n online: true,\n userType: 'admin'\n },\n\n payload: {\n invoiceDate: new Date('2021-10-07'),\n basNumber: '2020100712'\n }\n };\n\n invoiceProcessTestValidator.validate(models).then(errors => {\n (0, _chai.expect)(errors.workitem.outcome, '[outcome] - workitem').to.equal('invalid');\n (0, _chai.expect)(errors['custom.workitem.checkout'].outcome, '[outcome] - custom.worktiem.checkout').to.equal('invalid');\n\n (0, _chai.expect)(errors.payload.outcome, '[outcome] - payload').to.equal('invalid');\n\n (0, _chai.expect)(errors['payload.invoiceDate'], '[outcome] - payload.invoiceDate').to.not.exist;\n\n (0, _chai.expect)(errors['payload.basNumber'].outcome, '[outcome] - payload.basNumber').to.equal('invalid');\n (0, _chai.expect)(errors['payload.basNumber'].info.basNumberHasInvoiceDate).to.exist;\n\n (0, _chai.expect)(errors['appState.online'], '[outcome] - appState.online').to.not.exist;\n (0, _chai.expect)(errors['appState.userType'], '[outcome] - appState.userType').to.not.exist;\n\n done();\n }).catch(done);\n });\n\n (0, _mocha.it)('should mark some subjects as incomplete', done => {\n const models = {\n workitem: {\n state: 'checkedIn'\n },\n\n appState: {\n online: false,\n userType: 'admin'\n },\n\n payload: {\n invoiceDate: '',\n basNumber: '2020100712'\n }\n };\n\n invoiceProcessTestValidator.validate(models).then(errors => {\n (0, _chai.expect)(errors.workitem.outcome, '[outcome] - workitem').to.equal('incomplete');\n (0, _chai.expect)(errors.workitem.info.workitemIsComplete).to.exist;\n (0, _chai.expect)(errors['custom.workitem.checkout'].outcome, '[outcome] - custom.worktiem.checkout').to.equal('invalid');\n\n (0, _chai.expect)(errors.payload.outcome, '[outcome] - payload').to.equal('incomplete');\n (0, _chai.expect)(errors.payload.info.payloadIsComplete).to.exist;\n (0, _chai.expect)(errors['payload.invoiceDate'].outcome, '[outcome] - payload.invoiceDate').to.equal('incomplete');\n (0, _chai.expect)(errors['payload.invoiceDate'].info.invoiceDateIsComplete).to.exist;\n (0, _chai.expect)(errors['payload.basNumber'], '[outcome] - payload.basNumber').to.not.exist;\n\n (0, _chai.expect)(errors['appState.online'], '[outcome] - appState.online').to.not.exist;\n (0, _chai.expect)(errors['appState.userType'], '[outcome] - appState.userType').to.not.exist;\n\n done();\n }).catch(done);\n });\n });\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImludm9pY2UtcHJvY2Vzcy10ZXN0LXZhbGlkYXRvci5lczYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQTs7QUFDQTs7QUFFQTs7OztBQUNBOztJQUFZLDJCOzs7O0FBRVoscUJBQVMsZ0NBQVQsRUFBMkMsTUFBTTtBQUMvQyxpQkFBRyxtQ0FBSCxFQUF3QyxNQUFNO0FBQzVDLHNCQUFPLDRCQUE0QixXQUFuQyxFQUFnRCxFQUFoRCxDQUFtRCxLQUFuRDtBQUNBLHNCQUFPLDRCQUE0QixlQUFuQyxFQUFvRCxFQUFwRCxDQUF1RCxLQUF2RDtBQUNBLHNCQUFPLDRCQUE0QixRQUFuQyxFQUE2QyxFQUE3QyxDQUFnRCxLQUFoRDtBQUNELEdBSkQ7O0FBTUEsaUJBQUcsc0RBQUgsRUFBMkQsTUFBTTtBQUMvRCxzQkFBTyxnQkFBTSxPQUFOLENBQWMsNEJBQWQsQ0FBUCxFQUFvRCxFQUFwRCxDQUF1RCxFQUF2RCxDQUEwRCxJQUExRDtBQUNELEdBRkQ7O0FBSUEsdUJBQVMsb0JBQVQsRUFBK0IsTUFBTTtBQUNuQyxVQUFNLFNBQVM7QUFDYixnQkFBVTtBQUNSLGVBQU87QUFEQyxPQURHOztBQUtiLGdCQUFVO0FBQ1IsZ0JBQVEsSUFEQTtBQUVSLGtCQUFVO0FBRkYsT0FMRzs7QUFVYixlQUFTO0FBQ1AscUJBQWEsSUFBSSxJQUFKLENBQVMsWUFBVCxDQUROO0FBRVAsbUJBQVc7QUFGSjtBQVZJLEtBQWY7O0FBZ0JBLG1CQUFHLGlEQUFILEVBQXVELElBQUQsSUFBVTtBQUM5RCxVQUFJLGtCQUFrQixFQUF0QjtBQUNBLFVBQUksbUJBQW1CLEVBQXZCOztBQUVBLGtDQUNHLGVBREgsR0FFRyxJQUZILENBRVMsUUFBRCxJQUFjO0FBQ2xCLDBCQUFrQixRQUFsQjs7QUFFQSxvQ0FDRyxlQURILEdBRUcsSUFGSCxDQUVTLFFBQUQsSUFBYztBQUNsQiw2QkFBbUIsUUFBbkI7O0FBRUEsNEJBQU8sZUFBUCxFQUF3QixFQUF4QixDQUEyQixHQUEzQixDQUErQixL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QUFtQyxPQUExQyxFQUFtRCxzQ0FBbkQsRUFBMkYsRUFBM0YsQ0FBOEYsS0FBOUYsQ0FBb0csU0FBcEc7O0FBRUEsMEJBQU8sT0FBTyxPQUFQLENBQWUsT0FBdEIsRUFBK0IscUJBQS9CLEVBQXNELEVBQXRELENBQXlELEtBQXpELENBQStELFlBQS9EO0FBQ0EsMEJBQU8sT0FBTyxPQUFQLENBQWUsSUFBZixDQUFvQixpQkFBM0IsRUFBOEMsRUFBOUMsQ0FBaUQsS0FBakQ7QUFDQSwwQkFBTyxPQUFPLHFCQUFQLEVBQThCLE9BQXJDLEVBQThDLGlDQUE5QyxFQUFpRixFQUFqRixDQUFvRixLQUFwRixDQUEwRixZQUExRjtBQUNBLDBCQUFPLE9BQU8scUJBQVAsRUFBOEIsSUFBOUIsQ0FBbUMscUJBQTFDLEVBQWlFLEVBQWpFLENBQW9FLEtBQXBFO0FBQ0EsMEJBQU8sT0FBTyxtQkFBUCxDQUFQLEVBQW9DLCtCQUFwQyxFQUFxRSxFQUFyRSxDQUF3RSxHQUF4RSxDQUE0RSxLQUE1RTs7QUFFQSwwQkFBTyxPQUFPLGlCQUFQLENBQVAsRUFBa0MsNkJBQWxDLEVBQWlFLEVBQWpFLENBQW9FLEdBQXBFLENBQXdFLEtBQXhFO0FBQ0EsMEJBQU8sT0FBTyxtQkFBUCxDQUFQLEVBQW9DLCtCQUFwQyxFQUFxRSxFQUFyRSxDQUF3RSxHQUF4RSxDQUE0RSxLQUE1RTs7QUFFQTtBQUNELE9BakJILEVBa0JHLEtBbEJILENBa0JTLElBbEJUO0FBbUJELEtBcENEO0FBcUNELEdBeEdEO0FBeUdELENBeFREIiwiZmlsZSI6Imludm9pY2UtcHJvY2Vzcy10ZXN0LXZhbGlkYXRvci5lczYiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgbWF4LWxlbjowICovXG4vKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOjAgKi9cblxuaW1wb3J0IHsgZXhwZWN0IH0gZnJvbSAnY2hhaSc7XG5pbXBvcnQgeyBkZXNjcmliZSwgaXQgfSBmcm9tICdtb2NoYSc7XG5cbmltcG9ydCBub29scyBmcm9tICdub29scyc7XG5pbXBvcnQgKiBhcyBpbnZvaWNlUHJvY2Vzc1Rlc3RWYWxpZGF0b3IgZnJvbSAnLi4vLi4vdmFsaWRhdG9ycy9pbnZvaWNlLXByb2Nlc3MtdGVzdC12YWxpZGF0b3InO1xuXG5kZXNjcmliZSgnSW52b2ljZVByb2Nlc3NWYWxpZGF0b3IgbW9kdWxlJywgKCkgPT4ge1xuICBpdCgnc2hvdWxkIGV4cG9zZSB0aGUgdmFsaWRhdGUgbWV0aG9kJywgKCkgPT4ge1xuICAgIGV4cGVjdChpbnZvaWNlUHJvY2Vzc1Rlc3RWYWxpZGF0b3IucmF3VmFsaWRhdGUpLnRvLmV4aXN0O1xuICAgIGV4cGVjdChpbnZvaWNlUHJvY2Vzc1Rlc3RWYWxpZGF0b3IudmVyYm9zZVZhbGlkYXRlKS50by5leGlzdDtcbiAgICBleHBlY3QoaW52b2ljZVByb2Nlc3NUZXN0VmFsaWRhdG9yLnZhbGlkYXRlKS50by5leGlzdDtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYXZlIGNyZWF0ZWQgdGhlIGBpbnZvaWNlLXByb2Nlc3MtcnVsZXNgIGZsb3cnLCAoKSA9PiB7XG4gICAgZXhwZWN0KG5vb2xzLmhhc0Zsb3coJ2ludm9pY2UtcHJvY2Vzcy10ZXN0LXJ1bGVzJykpLnRvLmJlLnRydWU7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzZXNzaW9uIGdlbmVyYXRpb24nLCAoKSA9PiB7XG4gICAgY29uc3QgbW9kZWxzID0ge1xuICAgICAgd29ya2l0ZW06IHtcbiAgICAgICAgc3RhdGU6ICdjaGVja2VkSW4nLFxuICAgICAgfSxcblxuICAgICAgYXBwU3RhdGU6IHtcbiAgICAgICAgb25saW5lOiB0cnVlLFxuICAgICAgICB1c2VyVHlwZTogJ2FkbWluJyxcbiAgICAgIH0sXG5cbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgaW52b2ljZURhdGU6IG5ldyBEYXRlKCcyMDIwLTEwLTA3JyksXG4gICAgICAgIGJhc051bWJlcjogJzIwMjAxMDA3MTQyMzIxMzInLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgaXQoJ3Nob3VsZCBjcmVhdGUgYSBuZXcgc2Vzc2lvbiBmb3IgZWFjaCB2YWxpZGF0aW9uJywgKGRvbmUpID0+IHtcbiAgICAgIGxldCB0aGVGaXJzdFNlc3Npb24gPSB7fTtcbiAgICAgIGxldCB0aGVTZWNvbmRTZXNzaW9uID0ge307XG5cbiAgICAgIGludm9pY2VQcm9jZXNzVGVzdFZhbGlkYXRvclxuICAgICAgICAudmVyYm9zZVZhbGlkYXRlKClcbiAgICAgICAgLnRoZW4oKHNlc3Npb24xKSA9PiB7XG4gICAgICAgICAgdGhlRmlyc3RTZXNzaW9uID0gc2Vzc2lvbjE7XG5cbiAgICAgICAgICBpbnZvaWNlUHJvY2Vzc1Rlc3RWYWxpZGF0b3JcbiAgICAgICAgICAgIC52ZXJib3NlVmFsaWRhdGUoKVxuICAgICAgICAgICAgLnRoZW4oKHNlc3Npb24yKSA9PiB7XG4gICAgICAgICAgICAgIHRoZVNlY29uZFNlc3Npb24gPSBzZXNzaW9uMjtcblxuICAgICAgICAgICAgICBleHBlY3QodGhlRmlyc3RTZXNzaW9uKS50by5ub3QuZXF1YWwodGhlU2Vjb25kU2Vzc2lvbik7XG4gICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZG9uZSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChkb25lKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBmYWN0cycsIChkb25lKSA9PiB7XG4gICAgICBpbnZvaWNlUHJvY2Vzc1Rlc3RWYWxpZGF0b3JcbiAgICAgIC52ZXJib3NlVmFsaWRhdGUobW9kZWxzKVxuICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5leGlzdDtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5mYWN0cykudG8uZXhpc3Q7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5mYWN0cykudG8uYmUuaW5zdGFuY2VvZihBcnJheSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuZmFjdHMubGVuZ3RoKS50by5lcXVhbCgzKTtcblxuICAgICAgICBkb25lKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGRvbmUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb250YWluIHRoZSBtb2RlbHMgd2l0aCB0aGVpciBkYXRhJywgKGRvbmUpID0+IHtcbiAgICAgIGludm9pY2VQcm9jZXNzVGVzdFZhbGlkYXRvclxuICAgICAgICAudmVyYm9zZVZhbGlkYXRlKG1vZGVscylcbiAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQub3V0Y29tZXMud29ya2l0ZW1Nb2RlbC53b3JraXRlbS5zdGF0ZSkudG8uZXF1YWwobW9kZWxzLndvcmtpdGVtLnN0YXRlKTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0Lm91dGNvbWVzLmFwcFN0YXRlTW9kZWwuYXBwU3RhdGUub25saW5lKS50by5lcXVhbChtb2RlbHMuYXBwU3RhdGUub25saW5lKTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0Lm91dGNvbWVzLmFwcFN0YXRlTW9kZWwuYXBwU3RhdGUudXNlclR5cGUpLnRvLmVxdWFsKG1vZGVscy5hcHBTdGF0ZS51c2VyVHlwZSk7XG4gICAgICAgICAgZXhwZWN0KHJlc3VsdC5vdXRjb21lcy5wYXlsb2FkTW9kZWwucGF5bG9hZC5pbnZvaWNlRGF0ZSkudG8uZXF1YWwobW9kZWxzLnBheWxvYWQuaW52b2ljZURhdGUpO1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQub3V0Y29tZXMucGF5bG9hZE1vZGVsLnBheWxvYWQuYmFzTnVtYmVyKS50by5lcXVhbChtb2RlbHMucGF5bG9hZC5iYXNOdW1iZXIpO1xuXG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZG9uZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGF0dGFjaCBWYWxpZGF0aW9uT3V0Y29tZSB0byBlYWNoIHByb3BlcnR5IGluIGB2YWxpZGF0aW9uYCcsIChkb25lKSA9PiB7XG4gICAgICBpbnZvaWNlUHJvY2Vzc1Rlc3RWYWxpZGF0b3JcbiAgICAgICAgLnZlcmJvc2VWYWxpZGF0ZShtb2RlbHMpXG4gICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICByZXN1bHQuZmFjdHMuZm9yRWFjaCgoZmFjdCkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZmFjdC52YWxpZGF0aW9uKS5mb3JFYWNoKChvdXRjb21lS2V5KSA9PiB7XG4gICAgICAgICAgICAgIGV4cGVjdChmYWN0LnZhbGlkYXRpb25bb3V0Y29tZUtleV0pLnRvLmhhdmUub3duUHJvcGVydHkoJ291dGNvbWUnKTtcbiAgICAgICAgICAgICAgZXhwZWN0KGZhY3QudmFsaWRhdGlvbltvdXRjb21lS2V5XSkudG8uaGF2ZS5vd25Qcm9wZXJ0eSgnaW5mbycpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChkb25lKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JhdyB2YWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFsbCB2YWxpZCcsIChkb25lKSA9PiB7XG4gICAgICBjb25zdCBtb2RlbHMgPSB7XG4gICAgICAgIHdvcmtpdGVtOiB7XG4gICAgICAgICAgc3RhdGU6ICdjaGVja2VkSW4nLFxuICAgICAgICB9LFxuXG4gICAgICAgIGFwcFN0YXRlOiB7XG4gICAgICAgICAgb25saW5lOiB0cnVlLFxuICAgICAgICAgIHVzZXJUeXBlOiAnYWRtaW4nLFxuICAgICAgICB9LFxuXG4gICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICBpbnZvaWNlRGF0ZTogbmV3IERhdGUoJzIwMjAtMTAtMDcnKSxcbiAgICAgICAgICBiYXNOdW1iZXI6ICcyMDIwMTAwNzEyJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGludm9pY2VQcm9jZXNzVGVzdFZhbGlkYXRvclxuICAgICAgICAudmVyYm9zZVZhbGlkYXRlKG1vZGVscylcbiAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQub3V0Y29tZXMud29ya2l0ZW1Nb2RlbC52YWxpZGF0aW9uLndvcmtpdGVtLm91dGNvbWUsICdbb3V0Y29tZV0gLSB3b3JraXRlbScpLnRvLmVxdWFsKCd2YWxpZCcpO1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQub3V0Y29tZXMud29ya2l0ZW1Nb2RlbC52YWxpZGF0aW9uWydjdXN0b20ud29ya2l0ZW0uY2hlY2tvdXQnXS5vdXRjb21lLCAnW291dGNvbWVdIC0gY3VzdG9tLndvcmt0aWVtLmNoZWNrb3V0JykudG8uZXF1YWwoJ3ZhbGlkJyk7XG5cbiAgICAgICAgICBleHBlY3QocmVzdWx0Lm91dGNvbWVzLnBheWxvYWRNb2RlbC52YWxpZGF0aW9uLnBheWxvYWQub3V0Y29tZSwgJ1tvdXRjb21lXSAtIHBheWxvYWQnKS50by5lcXVhbCgndmFsaWQnKTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0Lm91dGNvbWVzLnBheWxvYWRNb2RlbC52YWxpZGF0aW9uWydwYXlsb2FkLmludm9pY2VEYXRlJ10ub3V0Y29tZSwgJ1tvdXRjb21lXSAtIHBheWxvYWQuaW52b2ljZURhdGUnKS50by5lcXVhbCgndmFsaWQnKTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0Lm91dGNvbWVzLnBheWxvYWRNb2RlbC52YWxpZGF0aW9uWydwYXlsb2FkLmJhc051bWJlciddLm91dGNvbWUsICdbb3V0Y29tZV0gLSBwYXlsb2FkLmJhc051bWJlcicpLnRvLmVxdWFsKCd2YWxpZCcpO1xuXG4gICAgICAgICAgZXhwZWN0KHJlc3VsdC5vdXRjb21lcy5hcHBTdGF0ZU1vZGVsLnZhbGlkYXRpb25bJ2FwcFN0YXRlLm9ubGluZSddLm91dGNvbWUsICdbb3V0Y29tZV0gLSBhcHBTdGF0ZS5vbmxpbmUnKS50by5lcXVhbCgndmFsaWQnKTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0Lm91dGNvbWVzLmFwcFN0YXRlTW9kZWwudmFsaWRhdGlvblsnYXBwU3RhdGUudXNlclR5cGUnXS5vdXRjb21lLCAnW291dGNvbWVdIC0gYXBwU3RhdGUudXNlclR5cGUnKS50by5lcXVhbCgndmFsaWQnKTtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChkb25lKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWFyayBzb21lIHN1YmplY3RzIGFzIGludmFsaWQnLCAoZG9uZSkgPT4ge1xuICAgICAgY29uc3QgbW9kZWxzID0ge1xuICAgICAgICB3b3JraXRlbToge1xuICAgICAgICAgIHN0YXRlOiAnY2hlY2tlZEluJyxcbiAgICAgICAgfSxcblxuICAgICAgICBhcHBTdGF0ZToge1xuICAgICAgICAgIG9ubGluZTogdHJ1ZSxcbiAgICAgICAgICB1c2VyVHlwZTogJ2FkbWluJyxcbiAgICAgICAgfSxcblxuICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgaW52b2ljZURhdGU6IG5ldyBEYXRlKCcyMDIxLTEwLTA3JyksXG4gICAgICAgICAgYmFzTnVtYmVyOiAnMjAyMDEwMDcxMicsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBpbnZvaWNlUHJvY2Vzc1Rlc3RWYWxpZGF0b3JcbiAgICAgICAgLnZlcmJvc2VWYWxpZGF0ZShtb2RlbHMpXG4gICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICBleHBlY3QocmVzdWx0Lm91dGNvbWVzLndvcmtpdGVtTW9kZWwudmFsaWRhdGlvbi53b3JraXRlbS5vdXRjb21lLCAnW291dGNvbWVdIC0gd29ya2l0ZW0nKS50by5lcXVhbCgnaW52YWxpZCcpO1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQub3V0Y29tZXMud29ya2l0ZW1Nb2RlbC52YWxpZGF0aW9uWydjdXN0b20ud29ya2l0ZW0uY2hlY2tvdXQnXS5vdXRjb21lLCAnW291dGNvbWVdIC0gY3VzdG9tLndvcmt0aWVtLmNoZWNrb3V0JykudG8uZXF1YWwoJ2ludmFsaWQnKTtcblxuICAgICAgICAgIGV4cGVjdChyZXN1bHQub3V0Y29tZXMucGF5bG9hZE1vZGVsLnZhbGlkYXRpb24ucGF5bG9hZC5vdXRjb21lLCAnW291dGNvbWVdIC0gcGF5bG9hZCcpLnRvLmVxdWFsKCdpbnZhbGlkJyk7XG4gICAgICAgICAgZXhwZWN0KHJlc3VsdC5vdXRjb21lcy5wYXlsb2FkTW9kZWwudmFsaWRhdGlvblsncGF5bG9hZC5pbnZvaWNlRGF0ZSddLm91dGNvbWUsICdbb3V0Y29tZV0gLSBwYXlsb2FkLmludm9pY2VEYXRlJykudG8uZXF1YWwoJ3ZhbGlkJyk7XG4gICAgICAgICAgZXhwZWN0KHJlc3VsdC5vdXRjb21lcy5wYXlsb2FkTW9kZWwudmFsaWRhdGlvblsncGF5bG9hZC5iYXNOdW1iZXInXS5vdXRjb21lLCAnW291dGNvbWVdIC0gcGF5bG9hZC5iYXNOdW1iZXInKS50by5lcXVhbCgnaW52YWxpZCcpO1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQub3V0Y29tZXMucGF5bG9hZE1vZGVsLnZhbGlkYXRpb25bJ3BheWxvYWQuYmFzTnVtYmVyJ10uaW5mby5iYXNOdW1iZXJIYXNJbnZvaWNlRGF0ZSkudG8uZXhpc3Q7XG5cbiAgICAgICAgICBleHBlY3QocmVzdWx0Lm91dGNvbWVzLmFwcFN0YXRlTW9kZWwudmFsaWRhdGlvblsnYXBwU3RhdGUub25saW5lJ10ub3V0Y29tZSwgJ1tvdXRjb21lXSAtIGFwcFN0YXRlLm9ubGluZScpLnRvLmVxdWFsKCd2YWxpZCcpO1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQub3V0Y29tZXMuYXBwU3RhdGVNb2RlbC52YWxpZGF0aW9uWydhcHBTdGF0ZS51c2VyVHlwZSddLm91dGNvbWUsICdbb3V0Y29tZV0gLSBhcHBTdGF0ZS51c2VyVHlwZScpLnRvLmVxdWFsKCd2YWxpZCcpO1xuXG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZG9uZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1hcmsgc29tZSBzdWJqZWN0cyBhcyBpbmNvbXBsZXRlJywgKGRvbmUpID0+IHtcbiAgICAgIGNvbnN0IG1vZGVscyA9IHtcbiAgICAgICAgd29ya2l0ZW06IHtcbiAgICAgICAgICBzdGF0ZTogJ2NoZWNrZWRJbicsXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXBwU3RhdGU6IHtcbiAgICAgICAgICBvbmxpbmU6IGZhbHNlLFxuICAgICAgICAgIHVzZXJUeXBlOiAnYWRtaW4nLFxuICAgICAgICB9LFxuXG4gICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICBpbnZvaWNlRGF0ZTogJycsXG4gICAgICAgICAgYmFzTnVtYmVyOiAnMjAyMDEwMDcxMicsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBpbnZvaWNlUHJvY2Vzc1Rlc3RWYWxpZGF0b3JcbiAgICAgICAgLnZlcmJvc2VWYWxpZGF0ZShtb2RlbHMpXG4gICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICBleHBlY3QocmVzdWx0Lm91dGNvbWVzLndvcmtpdGVtTW9kZWwudmFsaWRhdGlvbi53b3JraXRlbS5vdXRjb21lLCAnW291dGNvbWVdIC0gd29ya2l0ZW0nKS50by5lcXVhbCgnaW5jb21wbGV0ZScpO1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQub3V0Y29tZXMud29ya2l0ZW1Nb2RlbC52YWxpZGF0aW9uLndvcmtpdGVtLmluZm8ud29ya2l0ZW1Jc0NvbXBsZXRlKS50by5leGlzdDtcbiAgICAgICAgICBleHBlY3QocmVzdWx0Lm91dGNvbWVzLndvcmtpdGVtTW9kZWwudmFsaWRhdGlvblsnY3VzdG9tLndvcmtpdGVtLmNoZWNrb3V0J10ub3V0Y29tZSwgJ1tvdXRjb21lXSAtIGN1c3RvbS53b3JrdGllbS5jaGVja291dCcpLnRvLmVxdWFsKCdpbnZhbGlkJyk7XG5cbiAgICAgICAgICBleHBlY3QocmVzdWx0Lm91dGNvbWVzLnBheWxvYWRNb2RlbC52YWxpZGF0aW9uLnBheWxvYWQub3V0Y29tZSwgJ1tvdXRjb21lXSAtIHBheWxvYWQnKS50by5lcXVhbCgnaW5jb21wbGV0ZScpO1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQub3V0Y29tZXMucGF5bG9hZE1vZGVsLnZhbGlkYXRpb24ucGF5bG9hZC5pbmZvLnBheWxvYWRJc0NvbXBsZXRlKS50by5leGlzdDtcbiAgICAgICAgICBleHBlY3QocmVzdWx0Lm91dGNvbWVzLnBheWxvYWRNb2RlbC52YWxpZGF0aW9uWydwYXlsb2FkLmludm9pY2VEYXRlJ10ub3V0Y29tZSwgJ1tvdXRjb21lXSAtIHBheWxvYWQuaW52b2ljZURhdGUnKS50by5lcXVhbCgnaW5jb21wbGV0ZScpO1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQub3V0Y29tZXMucGF5bG9hZE1vZGVsLnZhbGlkYXRpb25bJ3BheWxvYWQuaW52b2ljZURhdGUnXS5pbmZvLmludm9pY2VEYXRlSXNDb21wbGV0ZSkudG8uZXhpc3Q7XG4gICAgICAgICAgZXhwZWN0KHJlc3VsdC5vdXRjb21lcy5wYXlsb2FkTW9kZWwudmFsaWRhdGlvblsncGF5bG9hZC5iYXNOdW1iZXInXS5vdXRjb21lLCAnW291dGNvbWVdIC0gcGF5bG9hZC5iYXNOdW1iZXInKS50by5lcXVhbCgndmFsaWQnKTtcblxuICAgICAgICAgIGV4cGVjdChyZXN1bHQub3V0Y29tZXMuYXBwU3RhdGVNb2RlbC52YWxpZGF0aW9uWydhcHBTdGF0ZS5vbmxpbmUnXS5vdXRjb21lLCAnW291dGNvbWVdIC0gYXBwU3RhdGUub25saW5lJykudG8uZXF1YWwoJ3ZhbGlkJyk7XG4gICAgICAgICAgZXhwZWN0KHJlc3VsdC5vdXRjb21lcy5hcHBTdGF0ZU1vZGVsLnZhbGlkYXRpb25bJ2FwcFN0YXRlLnVzZXJUeXBlJ10ub3V0Y29tZSwgJ1tvdXRjb21lXSAtIGFwcFN0YXRlLnVzZXJUeXBlJykudG8uZXF1YWwoJ3ZhbGlkJyk7XG5cbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChkb25lKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYWxsIHZhbGlkJywgKGRvbmUpID0+IHtcbiAgICAgIGNvbnN0IG1vZGVscyA9IHtcbiAgICAgICAgd29ya2l0ZW06IHtcbiAgICAgICAgICBzdGF0ZTogJ2NoZWNrZWRJbicsXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXBwU3RhdGU6IHtcbiAgICAgICAgICBvbmxpbmU6IHRydWUsXG4gICAgICAgICAgdXNlclR5cGU6ICdhZG1pbicsXG4gICAgICAgIH0sXG5cbiAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgIGludm9pY2VEYXRlOiBuZXcgRGF0ZSgnMjAyMC0xMC0wNycpLFxuICAgICAgICAgIGJhc051bWJlcjogJzIwMjAxMDA3MTInLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgaW52b2ljZVByb2Nlc3NUZXN0VmFsaWRhdG9yXG4gICAgICAgIC52YWxpZGF0ZShtb2RlbHMpXG4gICAgICAgIC50aGVuKChlcnJvcnMpID0+IHtcbiAgICAgICAgICBleHBlY3QoZXJyb3JzKS50by5iZS5lbXB0eTtcblxuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGRvbmUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXJrIHNvbWUgc3ViamVjdHMgYXMgaW52YWxpZCcsIChkb25lKSA9PiB7XG4gICAgICBjb25zdCBtb2RlbHMgPSB7XG4gICAgICAgIHdvcmtpdGVtOiB7XG4gICAgICAgICAgc3RhdGU6ICdjaGVja2VkSW4nLFxuICAgICAgICB9LFxuXG4gICAgICAgIGFwcFN0YXRlOiB7XG4gICAgICAgICAgb25saW5lOiB0cnVlLFxuICAgICAgICAgIHVzZXJUeXBlOiAnYWRtaW4nLFxuICAgICAgICB9LFxuXG4gICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICBpbnZvaWNlRGF0ZTogbmV3IERhdGUoJzIwMjEtMTAtMDcnKSxcbiAgICAgICAgICBiYXNOdW1iZXI6ICcyMDIwMTAwNzEyJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGludm9pY2VQcm9jZXNzVGVzdFZhbGlkYXRvclxuICAgICAgICAudmFsaWRhdGUobW9kZWxzKVxuICAgICAgICAudGhlbigoZXJyb3JzKSA9PiB7XG4gICAgICAgICAgZXhwZWN0KGVycm9ycy53b3JraXRlbS5vdXRjb21lLCAnW291dGNvbWVdIC0gd29ya2l0ZW0nKS50by5lcXVhbCgnaW52YWxpZCcpO1xuICAgICAgICAgIGV4cGVjdChlcnJvcnNbJ2N1c3RvbS53b3JraXRlbS5jaGVja291dCddLm91dGNvbWUsICdbb3V0Y29tZV0gLSBjdXN0b20ud29ya3RpZW0uY2hlY2tvdXQnKS50by5lcXVhbCgnaW52YWxpZCcpO1xuXG4gICAgICAgICAgZXhwZWN0KGVycm9ycy5wYXlsb2FkLm91dGNvbWUsICdbb3V0Y29tZV0gLSBwYXlsb2FkJykudG8uZXF1YWwoJ2ludmFsaWQnKTtcblxuICAgICAgICAgIGV4cGVjdChlcnJvcnNbJ3BheWxvYWQuaW52b2ljZURhdGUnXSwgJ1tvdXRjb21lXSAtIHBheWxvYWQuaW52b2ljZURhdGUnKS50by5ub3QuZXhpc3Q7XG5cblxuICAgICAgICAgIGV4cGVjdChlcnJvcnNbJ3BheWxvYWQuYmFzTnVtYmVyJ10ub3V0Y29tZSwgJ1tvdXRjb21lXSAtIHBheWxvYWQuYmFzTnVtYmVyJykudG8uZXF1YWwoJ2ludmFsaWQnKTtcbiAgICAgICAgICBleHBlY3QoZXJyb3JzWydwYXlsb2FkLmJhc051bWJlciddLmluZm8uYmFzTnVtYmVySGFzSW52b2ljZURhdGUpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgZXhwZWN0KGVycm9yc1snYXBwU3RhdGUub25saW5lJ10sICdbb3V0Y29tZV0gLSBhcHBTdGF0ZS5vbmxpbmUnKS50by5ub3QuZXhpc3Q7XG4gICAgICAgICAgZXhwZWN0KGVycm9yc1snYXBwU3RhdGUudXNlclR5cGUnXSwgJ1tvdXRjb21lXSAtIGFwcFN0YXRlLnVzZXJUeXBlJykudG8ubm90LmV4aXN0O1xuXG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZG9uZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1hcmsgc29tZSBzdWJqZWN0cyBhcyBpbmNvbXBsZXRlJywgKGRvbmUpID0+IHtcbiAgICAgIGNvbnN0IG1vZGVscyA9IHtcbiAgICAgICAgd29ya2l0ZW06IHtcbiAgICAgICAgICBzdGF0ZTogJ2NoZWNrZWRJbicsXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXBwU3RhdGU6IHtcbiAgICAgICAgICBvbmxpbmU6IGZhbHNlLFxuICAgICAgICAgIHVzZXJUeXBlOiAnYWRtaW4nLFxuICAgICAgICB9LFxuXG4gICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICBpbnZvaWNlRGF0ZTogJycsXG4gICAgICAgICAgYmFzTnVtYmVyOiAnMjAyMDEwMDcxMicsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBpbnZvaWNlUHJvY2Vzc1Rlc3RWYWxpZGF0b3JcbiAgICAgICAgLnZhbGlkYXRlKG1vZGVscylcbiAgICAgICAgLnRoZW4oKGVycm9ycykgPT4ge1xuICAgICAgICAgIGV4cGVjdChlcnJvcnMud29ya2l0ZW0ub3V0Y29tZSwgJ1tvdXRjb21lXSAtIHdvcmtpdGVtJykudG8uZXF1YWwoJ2luY29tcGxldGUnKTtcbiAgICAgICAgICBleHBlY3QoZXJyb3JzLndvcmtpdGVtLmluZm8ud29ya2l0ZW1Jc0NvbXBsZXRlKS50by5leGlzdDtcbiAgICAgICAgICBleHBlY3QoZXJyb3JzWydjdXN0b20ud29ya2l0ZW0uY2hlY2tvdXQnXS5vdXRjb21lLCAnW291dGNvbWVdIC0gY3VzdG9tLndvcmt0aWVtLmNoZWNrb3V0JykudG8uZXF1YWwoJ2ludmFsaWQnKTtcblxuICAgICAgICAgIGV4cGVjdChlcnJvcnMucGF5bG9hZC5vdXRjb21lLCAnW291dGNvbWVdIC0gcGF5bG9hZCcpLnRvLmVxdWFsKCdpbmNvbXBsZXRlJyk7XG4gICAgICAgICAgZXhwZWN0KGVycm9ycy5wYXlsb2FkLmluZm8ucGF5bG9hZElzQ29tcGxldGUpLnRvLmV4aXN0O1xuICAgICAgICAgIGV4cGVjdChlcnJvcnNbJ3BheWxvYWQuaW52b2ljZURhdGUnXS5vdXRjb21lLCAnW291dGNvbWVdIC0gcGF5bG9hZC5pbnZvaWNlRGF0ZScpLnRvLmVxdWFsKCdpbmNvbXBsZXRlJyk7XG4gICAgICAgICAgZXhwZWN0KGVycm9yc1sncGF5bG9hZC5pbnZvaWNlRGF0ZSddLmluZm8uaW52b2ljZURhdGVJc0NvbXBsZXRlKS50by5leGlzdDtcbiAgICAgICAgICBleHBlY3QoZXJyb3JzWydwYXlsb2FkLmJhc051bWJlciddLCAnW291dGNvbWVdIC0gcGF5bG9hZC5iYXNOdW1iZXInKS50by5ub3QuZXhpc3Q7XG5cbiAgICAgICAgICBleHBlY3QoZXJyb3JzWydhcHBTdGF0ZS5vbmxpbmUnXSwgJ1tvdXRjb21lXSAtIGFwcFN0YXRlLm9ubGluZScpLnRvLm5vdC5leGlzdDtcbiAgICAgICAgICBleHBlY3QoZXJyb3JzWydhcHBTdGF0ZS51c2VyVHlwZSddLCAnW291dGNvbWVdIC0gYXBwU3RhdGUudXNlclR5cGUnKS50by5ub3QuZXhpc3Q7XG5cbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChkb25lKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==",
"ast": null,
"map": {
"version": 3,
"sources": [
"invoice-process-test-validator.es6"
],
"names": [],
"mappings": "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",
"file": "invoice-process-test-validator.es6",
"sourcesContent": [
"/* eslint max-len:0 */\n/* eslint no-unused-expressions:0 */\n\nimport { expect } from 'chai';\nimport { describe, it } from 'mocha';\n\nimport nools from 'nools';\nimport * as invoiceProcessTestValidator from '../../validators/invoice-process-test-validator';\n\ndescribe('InvoiceProcessValidator module', () => {\n it('should expose the validate method', () => {\n expect(invoiceProcessTestValidator.rawValidate).to.exist;\n expect(invoiceProcessTestValidator.verboseValidate).to.exist;\n expect(invoiceProcessTestValidator.validate).to.exist;\n });\n\n it('should have created the `invoice-process-rules` flow', () => {\n expect(nools.hasFlow('invoice-process-test-rules')).to.be.true;\n });\n\n describe('session generation', () => {\n const models = {\n workitem: {\n state: 'checkedIn',\n },\n\n appState: {\n online: true,\n userType: 'admin',\n },\n\n payload: {\n invoiceDate: new Date('2020-10-07'),\n basNumber: '2020100714232132',\n },\n };\n\n it('should create a new session for each validation', (done) => {\n let theFirstSession = {};\n let theSecondSession = {};\n\n invoiceProcessTestValidator\n .verboseValidate()\n .then((session1) => {\n theFirstSession = session1;\n\n invoiceProcessTestValidator\n .verboseValidate()\n .then((session2) => {\n theSecondSession = session2;\n\n expect(theFirstSession).to.not.equal(theSecondSession);\n done();\n })\n .catch(done);\n })\n .catch(done);\n });\n\n it('should return the facts', (done) => {\n invoiceProcessTestValidator\n .verboseValidate(models)\n .then((result) => {\n expect(result).to.exist;\n expect(result.facts).to.exist;\n\n expect(result.facts).to.be.instanceof(Array);\n expect(result.facts.length).to.equal(3);\n\n done();\n })\n .catch(done);\n });\n\n it('should contain the models with their data', (done) => {\n invoiceProcessTestValidator\n .verboseValidate(models)\n .then((result) => {\n expect(result.outcomes.workitemModel.workitem.state).to.equal(models.workitem.state);\n expect(result.outcomes.appStateModel.appState.online).to.equal(models.appState.online);\n expect(result.outcomes.appStateModel.appState.userType).to.equal(models.appState.userType);\n expect(result.outcomes.payloadModel.payload.invoiceDate).to.equal(models.payload.invoiceDate);\n expect(result.outcomes.payloadModel.payload.basNumber).to.equal(models.payload.basNumber);\n\n done();\n })\n .catch(done);\n });\n\n it('should attach ValidationOutcome to each property in `validation`', (done) => {\n invoiceProcessTestValidator\n .verboseValidate(models)\n .then((result) => {\n result.facts.forEach((fact) => {\n Object.keys(fact.validation).forEach((outcomeKey) => {\n expect(fact.validation[outcomeKey]).to.have.ownProperty('outcome');\n expect(fact.validation[outcomeKey]).to.have.ownProperty('info');\n });\n });\n\n done();\n })\n .catch(done);\n });\n });\n\n describe('raw validation', () => {\n it('should return all valid', (done) => {\n const models = {\n workitem: {\n state: 'checkedIn',\n },\n\n appState: {\n online: true,\n userType: 'admin',\n },\n\n payload: {\n invoiceDate: new Date('2020-10-07'),\n basNumber: '2020100712',\n },\n };\n\n invoiceProcessTestValidator\n .verboseValidate(models)\n .then((result) => {\n expect(result.outcomes.workitemModel.validation.workitem.outcome, '[outcome] - workitem').to.equal('valid');\n expect(result.outcomes.workitemModel.validation['custom.workitem.checkout'].outcome, '[outcome] - custom.worktiem.checkout').to.equal('valid');\n\n expect(result.outcomes.payloadModel.validation.payload.outcome, '[outcome] - payload').to.equal('valid');\n expect(result.outcomes.payloadModel.validation['payload.invoiceDate'].outcome, '[outcome] - payload.invoiceDate').to.equal('valid');\n expect(result.outcomes.payloadModel.validation['payload.basNumber'].outcome, '[outcome] - payload.basNumber').to.equal('valid');\n\n expect(result.outcomes.appStateModel.validation['appState.online'].outcome, '[outcome] - appState.online').to.equal('valid');\n expect(result.outcomes.appStateModel.validation['appState.userType'].outcome, '[outcome] - appState.userType').to.equal('valid');\n done();\n })\n .catch(done);\n });\n\n it('should mark some subjects as invalid', (done) => {\n const models = {\n workitem: {\n state: 'checkedIn',\n },\n\n appState: {\n online: true,\n userType: 'admin',\n },\n\n payload: {\n invoiceDate: new Date('2021-10-07'),\n basNumber: '2020100712',\n },\n };\n\n invoiceProcessTestValidator\n .verboseValidate(models)\n .then((result) => {\n expect(result.outcomes.workitemModel.validation.workitem.outcome, '[outcome] - workitem').to.equal('invalid');\n expect(result.outcomes.workitemModel.validation['custom.workitem.checkout'].outcome, '[outcome] - custom.worktiem.checkout').to.equal('invalid');\n\n expect(result.outcomes.payloadModel.validation.payload.outcome, '[outcome] - payload').to.equal('invalid');\n expect(result.outcomes.payloadModel.validation['payload.invoiceDate'].outcome, '[outcome] - payload.invoiceDate').to.equal('valid');\n expect(result.outcomes.payloadModel.validation['payload.basNumber'].outcome, '[outcome] - payload.basNumber').to.equal('invalid');\n expect(result.outcomes.payloadModel.validation['payload.basNumber'].info.basNumberHasInvoiceDate).to.exist;\n\n expect(result.outcomes.appStateModel.validation['appState.online'].outcome, '[outcome] - appState.online').to.equal('valid');\n expect(result.outcomes.appStateModel.validation['appState.userType'].outcome, '[outcome] - appState.userType').to.equal('valid');\n\n done();\n })\n .catch(done);\n });\n\n it('should mark some subjects as incomplete', (done) => {\n const models = {\n workitem: {\n state: 'checkedIn',\n },\n\n appState: {\n online: false,\n userType: 'admin',\n },\n\n payload: {\n invoiceDate: '',\n basNumber: '2020100712',\n },\n };\n\n invoiceProcessTestValidator\n .verboseValidate(models)\n .then((result) => {\n expect(result.outcomes.workitemModel.validation.workitem.outcome, '[outcome] - workitem').to.equal('incomplete');\n expect(result.outcomes.workitemModel.validation.workitem.info.workitemIsComplete).to.exist;\n expect(result.outcomes.workitemModel.validation['custom.workitem.checkout'].outcome, '[outcome] - custom.worktiem.checkout').to.equal('invalid');\n\n expect(result.outcomes.payloadModel.validation.payload.outcome, '[outcome] - payload').to.equal('incomplete');\n expect(result.outcomes.payloadModel.validation.payload.info.payloadIsComplete).to.exist;\n expect(result.outcomes.payloadModel.validation['payload.invoiceDate'].outcome, '[outcome] - payload.invoiceDate').to.equal('incomplete');\n expect(result.outcomes.payloadModel.validation['payload.invoiceDate'].info.invoiceDateIsComplete).to.exist;\n expect(result.outcomes.payloadModel.validation['payload.basNumber'].outcome, '[outcome] - payload.basNumber').to.equal('valid');\n\n expect(result.outcomes.appStateModel.validation['appState.online'].outcome, '[outcome] - appState.online').to.equal('valid');\n expect(result.outcomes.appStateModel.validation['appState.userType'].outcome, '[outcome] - appState.userType').to.equal('valid');\n\n done();\n })\n .catch(done);\n });\n });\n\n describe('validation', () => {\n it('should return all valid', (done) => {\n const models = {\n workitem: {\n state: 'checkedIn',\n },\n\n appState: {\n online: true,\n userType: 'admin',\n },\n\n payload: {\n invoiceDate: new Date('2020-10-07'),\n basNumber: '2020100712',\n },\n };\n\n invoiceProcessTestValidator\n .validate(models)\n .then((errors) => {\n expect(errors).to.be.empty;\n\n done();\n })\n .catch(done);\n });\n\n it('should mark some subjects as invalid', (done) => {\n const models = {\n workitem: {\n state: 'checkedIn',\n },\n\n appState: {\n online: true,\n userType: 'admin',\n },\n\n payload: {\n invoiceDate: new Date('2021-10-07'),\n basNumber: '2020100712',\n },\n };\n\n invoiceProcessTestValidator\n .validate(models)\n .then((errors) => {\n expect(errors.workitem.outcome, '[outcome] - workitem').to.equal('invalid');\n expect(errors['custom.workitem.checkout'].outcome, '[outcome] - custom.worktiem.checkout').to.equal('invalid');\n\n expect(errors.payload.outcome, '[outcome] - payload').to.equal('invalid');\n\n expect(errors['payload.invoiceDate'], '[outcome] - payload.invoiceDate').to.not.exist;\n\n\n expect(errors['payload.basNumber'].outcome, '[outcome] - payload.basNumber').to.equal('invalid');\n expect(errors['payload.basNumber'].info.basNumberHasInvoiceDate).to.exist;\n\n expect(errors['appState.online'], '[outcome] - appState.online').to.not.exist;\n expect(errors['appState.userType'], '[outcome] - appState.userType').to.not.exist;\n\n done();\n })\n .catch(done);\n });\n\n it('should mark some subjects as incomplete', (done) => {\n const models = {\n workitem: {\n state: 'checkedIn',\n },\n\n appState: {\n online: false,\n userType: 'admin',\n },\n\n payload: {\n invoiceDate: '',\n basNumber: '2020100712',\n },\n };\n\n invoiceProcessTestValidator\n .validate(models)\n .then((errors) => {\n expect(errors.workitem.outcome, '[outcome] - workitem').to.equal('incomplete');\n expect(errors.workitem.info.workitemIsComplete).to.exist;\n expect(errors['custom.workitem.checkout'].outcome, '[outcome] - custom.worktiem.checkout').to.equal('invalid');\n\n expect(errors.payload.outcome, '[outcome] - payload').to.equal('incomplete');\n expect(errors.payload.info.payloadIsComplete).to.exist;\n expect(errors['payload.invoiceDate'].outcome, '[outcome] - payload.invoiceDate').to.equal('incomplete');\n expect(errors['payload.invoiceDate'].info.invoiceDateIsComplete).to.exist;\n expect(errors['payload.basNumber'], '[outcome] - payload.basNumber').to.not.exist;\n\n expect(errors['appState.online'], '[outcome] - appState.online').to.not.exist;\n expect(errors['appState.userType'], '[outcome] - appState.userType').to.not.exist;\n\n done();\n })\n .catch(done);\n });\n });\n});\n"
]
},
"mtime": 1467198342370
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/shared/role-utils/src/__tests__/index.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [
"interopRequireWildcard"
],
"marked": [],
"modules": {
"imports": [
{
"source": "chai",
"imported": [
"expect"
],
"specifiers": [
{
"kind": "named",
"imported": "expect",
"local": "expect"
}
]
},
{
"source": "mocha",
"imported": [
"describe",
"it"
],
"specifiers": [
{
"kind": "named",
"imported": "describe",
"local": "describe"
},
{
"kind": "named",
"imported": "it",
"local": "it"
}
]
},
{
"source": "..",
"imported": [
"*"
],
"specifiers": [
{
"kind": "namespace",
"local": "access"
}
]
}
],
"exports": {
"exported": [],
"specifiers": []
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/shared/role-utils/src/__tests__/index.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/shared/role-utils/src/__tests__/index.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "index.es6",
"sourceFileName": "index.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "index"
},
"ignored": false,
"code": "'use strict';\n\nvar _chai = require('chai');\n\nvar _mocha = require('mocha');\n\nvar _ = require('..');\n\nvar access = babelHelpers.interopRequireWildcard(_);\n\n\n// example of reduced (resolved) roles available via user roles\nconst userRoles = {\n manager: 0b1111,\n 'ui-manager': 0b0110\n}; /* index.es6 */\n\n\n(0, _mocha.describe)('Role Utils', () => {\n // inital tests to check whether all functions needed are present\n (0, _mocha.describe)('Exposes', () => {\n (0, _mocha.it)('should expose perms', () => {\n (0, _chai.expect)(access.perms).to.be.a('function');\n });\n (0, _mocha.it)('should expose hasRole', () => {\n (0, _chai.expect)(access.hasRole).to.be.a('function');\n });\n (0, _mocha.it)('should expose has', () => {\n (0, _chai.expect)(access.has).to.be.a('function');\n });\n });\n // tests for the function #perms\n (0, _mocha.describe)('Function #perms', () => {\n // check if function returns first match of permissions that it finds from the roles object in the\n // passed through roles\n (0, _mocha.it)('should return first match of permissions', () => {\n const permission = access.perms(userRoles, 'admin', 'ui-manager');\n (0, _chai.expect)(permission).to.equal(userRoles['ui-manager']);\n });\n // check if function returns NONE if there is no match\n (0, _mocha.it)('should return NONE if there is no match', () => {\n const noPermission = access.perms(userRoles, 'admin', 'user');\n (0, _chai.expect)(noPermission).to.equal(access.NONE);\n });\n // check if function returns an error if the incorrect params are passed through\n (0, _mocha.it)('should return an error if no argument is passed', () => {\n const fn = () => {\n access.perms(userRoles);\n };\n (0, _chai.expect)(fn).to.throw(Error);\n });\n });\n // tests for the function #has\n (0, _mocha.describe)('Function #has', () => {\n // test to see if an error is thrown when the incorrect params are passed through\n (0, _mocha.it)('should require more than 3 arguments', () => {\n const fn = () => {\n access.has(userRoles);\n };\n (0, _chai.expect)(fn).to.throw(Error);\n });\n // check if it returns true when a role passed through is contained in the role object\n // with the required permissions\n (0, _mocha.it)('should return true if all permissions are found in roles present', () => {\n const doesHave = access.has(userRoles, access.CRUD, 'ui-manager', 'manager');\n (0, _chai.expect)(doesHave).to.equal(true);\n });\n // check if it returns false if either/or permission is not contained\n (0, _mocha.it)('should return false if either/or permission is not contained', () => {\n const doesNotHave = access.has(userRoles, access.C, 'ui-manager');\n (0, _chai.expect)(doesNotHave).to.equal(false);\n });\n // check if it returns false if a role is not contained\n (0, _mocha.it)('should return false if role with permissions is not contained', () => {\n const doesNotHave = access.has(userRoles, access.RU, 'admin');\n (0, _chai.expect)(doesNotHave).to.equal(false);\n });\n });\n // tests for the function #hasRole\n (0, _mocha.describe)('Function #hasRole', () => {\n // check to see if it throws an error if the incorrect params are passed through\n (0, _mocha.it)('should have more than one argument', () => {\n const fn = () => {\n access.hasRole(userRoles);\n };\n (0, _chai.expect)(fn).to.throw(Error);\n });\n // check to see if it returns name of first matching role\n (0, _mocha.it)('should return first matching role name if role is contained', () => {\n const hasRoles = access.hasRole(userRoles, 'admin', 'ui-manager');\n (0, _chai.expect)(hasRoles).to.equal('ui-manager');\n });\n // check to see if it returns undefined if the role is not contained\n (0, _mocha.it)('should return undefined if role is not contained', () => {\n const noRole = access.hasRole(userRoles, 'admin');\n (0, _chai.expect)(noRole).to.equal(undefined);\n });\n });\n});\n//# sourceMappingURL=data:application/json;base64,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QyxZQUFNLEtBQUssTUFBTTtBQUNmLGVBQU8sT0FBUCxDQUFlLFNBQWY7QUFDRCxPQUZEO0FBR0Esd0JBQU8sRUFBUCxFQUFXLEVBQVgsQ0FBYyxLQUFkLENBQW9CLEtBQXBCO0FBQ0QsS0FMRDs7QUFPQSxtQkFBRyw2REFBSCxFQUFrRSxNQUFNO0FBQ3RFLFlBQU0sV0FBVyxPQUFPLE9BQVAsQ0FBZSxTQUFmLEVBQTBCLE9BQTFCLEVBQW1DLFlBQW5DLENBQWpCO0FBQ0Esd0JBQU8sUUFBUCxFQUFpQixFQUFqQixDQUFvQixLQUFwQixDQUEwQixZQUExQjtBQUNELEtBSEQ7O0FBS0EsbUJBQUcsa0RBQUgsRUFBdUQsTUFBTTtBQUMzRCxZQUFNLFNBQVMsT0FBTyxPQUFQLENBQWUsU0FBZixFQUEwQixPQUExQixDQUFmO0FBQ0Esd0JBQU8sTUFBUCxFQUFlLEVBQWYsQ0FBa0IsS0FBbEIsQ0FBd0IsU0FBeEI7QUFDRCxLQUhEO0FBSUQsR0FsQkQ7QUFtQkQsQ0FoRkQiLCJmaWxlIjoiaW5kZXguZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLyogaW5kZXguZXM2ICovXG5pbXBvcnQgeyBleHBlY3QgfSBmcm9tICdjaGFpJztcbmltcG9ydCB7IGRlc2NyaWJlLCBpdCB9IGZyb20gJ21vY2hhJztcblxuaW1wb3J0ICogYXMgYWNjZXNzIGZyb20gJy4uJztcblxuLy8gZXhhbXBsZSBvZiByZWR1Y2VkIChyZXNvbHZlZCkgcm9sZXMgYXZhaWxhYmxlIHZpYSB1c2VyIHJvbGVzXG5jb25zdCB1c2VyUm9sZXMgPSB7XG4gIG1hbmFnZXI6IDBiMTExMSxcbiAgJ3VpLW1hbmFnZXInOiAwYjAxMTAsXG59O1xuXG5kZXNjcmliZSgnUm9sZSBVdGlscycsICgpID0+IHtcbiAgLy8gaW5pdGFsIHRlc3RzIHRvIGNoZWNrIHdoZXRoZXIgYWxsIGZ1bmN0aW9ucyBuZWVkZWQgYXJlIHByZXNlbnRcbiAgZGVzY3JpYmUoJ0V4cG9zZXMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBleHBvc2UgcGVybXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoYWNjZXNzLnBlcm1zKS50by5iZS5hKCdmdW5jdGlvbicpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZXhwb3NlIGhhc1JvbGUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoYWNjZXNzLmhhc1JvbGUpLnRvLmJlLmEoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBleHBvc2UgaGFzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGFjY2Vzcy5oYXMpLnRvLmJlLmEoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG4gIH0pO1xuICAvLyB0ZXN0cyBmb3IgdGhlIGZ1bmN0aW9uICNwZXJtc1xuICBkZXNjcmliZSgnRnVuY3Rpb24gI3Blcm1zJywgKCkgPT4ge1xuICAgIC8vIGNoZWNrIGlmIGZ1bmN0aW9uIHJldHVybnMgZmlyc3QgbWF0Y2ggb2YgcGVybWlzc2lvbnMgdGhhdCBpdCBmaW5kcyBmcm9tIHRoZSByb2xlcyBvYmplY3QgaW4gdGhlXG4gICAgLy8gcGFzc2VkIHRocm91Z2ggcm9sZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmaXJzdCBtYXRjaCBvZiBwZXJtaXNzaW9ucycsICgpID0+IHtcbiAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSBhY2Nlc3MucGVybXModXNlclJvbGVzLCAnYWRtaW4nLCAndWktbWFuYWdlcicpO1xuICAgICAgZXhwZWN0KHBlcm1pc3Npb24pLnRvLmVxdWFsKHVzZXJSb2xlc1sndWktbWFuYWdlciddKTtcbiAgICB9KTtcbiAgICAvLyBjaGVjayBpZiBmdW5jdGlvbiByZXR1cm5zIE5PTkUgaWYgdGhlcmUgaXMgbm8gbWF0Y2hcbiAgICBpdCgnc2hvdWxkIHJldHVybiBOT05FIGlmIHRoZXJlIGlzIG5vIG1hdGNoJywgKCkgPT4ge1xuICAgICAgY29uc3Qgbm9QZXJtaXNzaW9uID0gYWNjZXNzLnBlcm1zKHVzZXJSb2xlcywgJ2FkbWluJywgJ3VzZXInKTtcbiAgICAgIGV4cGVjdChub1Blcm1pc3Npb24pLnRvLmVxdWFsKGFjY2Vzcy5OT05FKTtcbiAgICB9KTtcbiAgICAvLyBjaGVjayBpZiBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBpbmNvcnJlY3QgcGFyYW1zIGFyZSBwYXNzZWQgdGhyb3VnaFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVycm9yIGlmIG5vIGFyZ3VtZW50IGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGZuID0gKCkgPT4ge1xuICAgICAgICBhY2Nlc3MucGVybXModXNlclJvbGVzKTtcbiAgICAgIH07XG4gICAgICBleHBlY3QoZm4pLnRvLnRocm93KEVycm9yKTtcbiAgICB9KTtcbiAgfSk7XG4gIC8vIHRlc3RzIGZvciB0aGUgZnVuY3Rpb24gI2hhc1xuICBkZXNjcmliZSgnRnVuY3Rpb24gI2hhcycsICgpID0+IHtcbiAgICAvLyB0ZXN0IHRvIHNlZSBpZiBhbiBlcnJvciBpcyB0aHJvd24gd2hlbiB0aGUgaW5jb3JyZWN0IHBhcmFtcyBhcmUgcGFzc2VkIHRocm91Z2hcbiAgICBpdCgnc2hvdWxkIHJlcXVpcmUgbW9yZSB0aGFuIDMgYXJndW1lbnRzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZm4gPSAoKSA9PiB7XG4gICAgICAgIGFjY2Vzcy5oYXModXNlclJvbGVzKTtcbiAgICAgIH07XG4gICAgICBleHBlY3QoZm4pLnRvLnRocm93KEVycm9yKTtcbiAgICB9KTtcbiAgICAvLyBjaGVjayBpZiBpdCByZXR1cm5zIHRydWUgd2hlbiBhIHJvbGUgcGFzc2VkIHRocm91Z2ggaXMgY29udGFpbmVkIGluIHRoZSByb2xlIG9iamVjdFxuICAgIC8vIHdpdGggdGhlIHJlcXVpcmVkIHBlcm1pc3Npb25zXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBpZiBhbGwgcGVybWlzc2lvbnMgYXJlIGZvdW5kIGluIHJvbGVzIHByZXNlbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkb2VzSGF2ZSA9IGFjY2Vzcy5oYXModXNlclJvbGVzLCBhY2Nlc3MuQ1JVRCwgJ3VpLW1hbmFnZXInLCAnbWFuYWdlcicpO1xuICAgICAgZXhwZWN0KGRvZXNIYXZlKS50by5lcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgICAvLyBjaGVjayBpZiBpdCByZXR1cm5zIGZhbHNlIGlmIGVpdGhlci9vciBwZXJtaXNzaW9uIGlzIG5vdCBjb250YWluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBpZiBlaXRoZXIvb3IgcGVybWlzc2lvbiBpcyBub3QgY29udGFpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgZG9lc05vdEhhdmUgPSBhY2Nlc3MuaGFzKHVzZXJSb2xlcywgYWNjZXNzLkMsICd1aS1tYW5hZ2VyJyk7XG4gICAgICBleHBlY3QoZG9lc05vdEhhdmUpLnRvLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgICAvLyBjaGVjayBpZiBpdCByZXR1cm5zIGZhbHNlIGlmIGEgcm9sZSBpcyBub3QgY29udGFpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgaWYgcm9sZSB3aXRoIHBlcm1pc3Npb25zIGlzIG5vdCBjb250YWluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkb2VzTm90SGF2ZSA9IGFjY2Vzcy5oYXModXNlclJvbGVzLCBhY2Nlc3MuUlUsICdhZG1pbicpO1xuICAgICAgZXhwZWN0KGRvZXNOb3RIYXZlKS50by5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuICAvLyB0ZXN0cyBmb3IgdGhlIGZ1bmN0aW9uICNoYXNSb2xlXG4gIGRlc2NyaWJlKCdGdW5jdGlvbiAjaGFzUm9sZScsICgpID0+IHtcbiAgICAvLyBjaGVjayB0byBzZWUgaWYgaXQgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBpbmNvcnJlY3QgcGFyYW1zIGFyZSBwYXNzZWQgdGhyb3VnaFxuICAgIGl0KCdzaG91bGQgaGF2ZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgZm4gPSAoKSA9PiB7XG4gICAgICAgIGFjY2Vzcy5oYXNSb2xlKHVzZXJSb2xlcyk7XG4gICAgICB9O1xuICAgICAgZXhwZWN0KGZuKS50by50aHJvdyhFcnJvcik7XG4gICAgfSk7XG4gICAgLy8gY2hlY2sgdG8gc2VlIGlmIGl0IHJldHVybnMgbmFtZSBvZiBmaXJzdCBtYXRjaGluZyByb2xlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmlyc3QgbWF0Y2hpbmcgcm9sZSBuYW1lIGlmIHJvbGUgaXMgY29udGFpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgaGFzUm9sZXMgPSBhY2Nlc3MuaGFzUm9sZSh1c2VyUm9sZXMsICdhZG1pbicsICd1aS1tYW5hZ2VyJyk7XG4gICAgICBleHBlY3QoaGFzUm9sZXMpLnRvLmVxdWFsKCd1aS1tYW5hZ2VyJyk7XG4gICAgfSk7XG4gICAgLy8gY2hlY2sgdG8gc2VlIGlmIGl0IHJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSByb2xlIGlzIG5vdCBjb250YWluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgaWYgcm9sZSBpcyBub3QgY29udGFpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgbm9Sb2xlID0gYWNjZXNzLmhhc1JvbGUodXNlclJvbGVzLCAnYWRtaW4nKTtcbiAgICAgIGV4cGVjdChub1JvbGUpLnRvLmVxdWFsKHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=",
"ast": null,
"map": {
"version": 3,
"sources": [
"index.es6"
],
"names": [],
"mappings": "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",
"file": "index.es6",
"sourcesContent": [
"/* index.es6 */\nimport { expect } from 'chai';\nimport { describe, it } from 'mocha';\n\nimport * as access from '..';\n\n// example of reduced (resolved) roles available via user roles\nconst userRoles = {\n manager: 0b1111,\n 'ui-manager': 0b0110,\n};\n\ndescribe('Role Utils', () => {\n // inital tests to check whether all functions needed are present\n describe('Exposes', () => {\n it('should expose perms', () => {\n expect(access.perms).to.be.a('function');\n });\n it('should expose hasRole', () => {\n expect(access.hasRole).to.be.a('function');\n });\n it('should expose has', () => {\n expect(access.has).to.be.a('function');\n });\n });\n // tests for the function #perms\n describe('Function #perms', () => {\n // check if function returns first match of permissions that it finds from the roles object in the\n // passed through roles\n it('should return first match of permissions', () => {\n const permission = access.perms(userRoles, 'admin', 'ui-manager');\n expect(permission).to.equal(userRoles['ui-manager']);\n });\n // check if function returns NONE if there is no match\n it('should return NONE if there is no match', () => {\n const noPermission = access.perms(userRoles, 'admin', 'user');\n expect(noPermission).to.equal(access.NONE);\n });\n // check if function returns an error if the incorrect params are passed through\n it('should return an error if no argument is passed', () => {\n const fn = () => {\n access.perms(userRoles);\n };\n expect(fn).to.throw(Error);\n });\n });\n // tests for the function #has\n describe('Function #has', () => {\n // test to see if an error is thrown when the incorrect params are passed through\n it('should require more than 3 arguments', () => {\n const fn = () => {\n access.has(userRoles);\n };\n expect(fn).to.throw(Error);\n });\n // check if it returns true when a role passed through is contained in the role object\n // with the required permissions\n it('should return true if all permissions are found in roles present', () => {\n const doesHave = access.has(userRoles, access.CRUD, 'ui-manager', 'manager');\n expect(doesHave).to.equal(true);\n });\n // check if it returns false if either/or permission is not contained\n it('should return false if either/or permission is not contained', () => {\n const doesNotHave = access.has(userRoles, access.C, 'ui-manager');\n expect(doesNotHave).to.equal(false);\n });\n // check if it returns false if a role is not contained\n it('should return false if role with permissions is not contained', () => {\n const doesNotHave = access.has(userRoles, access.RU, 'admin');\n expect(doesNotHave).to.equal(false);\n });\n });\n // tests for the function #hasRole\n describe('Function #hasRole', () => {\n // check to see if it throws an error if the incorrect params are passed through\n it('should have more than one argument', () => {\n const fn = () => {\n access.hasRole(userRoles);\n };\n expect(fn).to.throw(Error);\n });\n // check to see if it returns name of first matching role\n it('should return first matching role name if role is contained', () => {\n const hasRoles = access.hasRole(userRoles, 'admin', 'ui-manager');\n expect(hasRoles).to.equal('ui-manager');\n });\n // check to see if it returns undefined if the role is not contained\n it('should return undefined if role is not contained', () => {\n const noRole = access.hasRole(userRoles, 'admin');\n expect(noRole).to.equal(undefined);\n });\n });\n});\n"
]
},
"mtime": 1467961123063
},
"{\"filename\":\"/mnt/Data/ITDev/gitsub/shared/role-utils/src/index.es6\",\"env\":{},\"retainLines\":false,\"highlightCode\":true,\"suppressDeprecationMessages\":false,\"presets\":[],\"plugins\":[[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null],[[],null]],\"ignore\":[],\"code\":true,\"metadata\":true,\"ast\":true,\"comments\":true,\"compact\":\"auto\",\"minified\":false,\"babelrc\":true,\"sourceType\":\"module\",\"moduleIds\":false,\"passPerPreset\":false}:6.10.4": {
"metadata": {
"usedHelpers": [],
"marked": [],
"modules": {
"imports": [],
"exports": {
"exported": [
"NONE",
"C",
"R",
"U",
"D",
"RU",
"CRUD",
"perms",
"rolesDef",
"roleNames",
"hasRole",
"rolesDef",
"roleNames",
"has",
"rolesDef",
"perm",
"roleNames"
],
"specifiers": [
{
"kind": "local",
"local": "NONE",
"exported": "NONE"
},
{
"kind": "local",
"local": "C",
"exported": "C"
},
{
"kind": "local",
"local": "R",
"exported": "R"
},
{
"kind": "local",
"local": "U",
"exported": "U"
},
{
"kind": "local",
"local": "D",
"exported": "D"
},
{
"kind": "local",
"local": "RU",
"exported": "RU"
},
{
"kind": "local",
"local": "CRUD",
"exported": "CRUD"
},
{
"kind": "local",
"local": "perms",
"exported": "perms"
},
{
"kind": "local",
"local": "rolesDef",
"exported": "rolesDef"
},
{
"kind": "local",
"local": "roleNames",
"exported": "roleNames"
},
{
"kind": "local",
"local": "hasRole",
"exported": "hasRole"
},
{
"kind": "local",
"local": "rolesDef",
"exported": "rolesDef"
},
{
"kind": "local",
"local": "roleNames",
"exported": "roleNames"
},
{
"kind": "local",
"local": "has",
"exported": "has"
},
{
"kind": "local",
"local": "rolesDef",
"exported": "rolesDef"
},
{
"kind": "local",
"local": "perm",
"exported": "perm"
},
{
"kind": "local",
"local": "roleNames",
"exported": "roleNames"
}
]
}
}
},
"options": {
"filename": "/mnt/Data/ITDev/gitsub/shared/role-utils/src/index.es6",
"filenameRelative": "/mnt/Data/ITDev/gitsub/shared/role-utils/src/index.es6",
"env": {},
"retainLines": false,
"highlightCode": true,
"suppressDeprecationMessages": false,
"presets": [],
"plugins": [
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
],
[
[],
null
]
],
"ignore": [],
"code": true,
"metadata": true,
"ast": false,
"comments": true,
"compact": "auto",
"minified": false,
"sourceMap": "both",
"sourceMaps": "both",
"sourceMapTarget": "index.es6",
"sourceFileName": "index.es6",
"babelrc": false,
"sourceType": "module",
"moduleIds": false,
"passPerPreset": false,
"basename": "index"
},
"ignored": false,
"code": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.perms = perms;\nexports.hasRole = hasRole;\nexports.has = has;\n/* index.es6 */\n// import debug from 'debug';\n\n// const dbg = debug('role-utils');\n\nconst NONE = exports.NONE = 0b0000;\nconst C = exports.C = 0b1000;\nconst R = exports.R = 0b0100;\nconst U = exports.U = 0b0010;\nconst D = exports.D = 0b0001;\nconst RU = exports.RU = R | U;\nconst CRUD = exports.CRUD = C | R | U | D;\n\n/**\n * Returns permission of the first matching role from the names passed in `roleNames`\n * against the `rolesDef`\n * @param {Object} rolesDef The roles to enforce\n * @param {Spread} ...roleNames Names of roles to evaluate\n * @return {Number} The permissions [perms | NONE]\n */\nfunction perms(rolesDef, ...roleNames) {\n if (!rolesDef || roleNames.length === 0) {\n throw new Error('Invalid parameters');\n }\n for (const roleName of roleNames) {\n const perm = rolesDef[roleName];\n if (perm) {\n return perm;\n }\n }\n return NONE;\n}\n\n/**\n * Returns the first matching name from the names passed in `roleNames` against\n * the `rolesDef`\n * @param {Object} rolesDef The roles to enforce\n * @param {Spread} ...roleNames Names of roles to evaluate\n * @return {String} The role name, or undefined\n */\nfunction hasRole(rolesDef, ...roleNames) {\n if (!rolesDef || roleNames.length === 0) {\n throw new Error('Invalid parameters');\n }\n for (const roleName of roleNames) {\n if (!!rolesDef[roleName]) {\n return roleName;\n }\n }\n return undefined;\n}\n\n/**\n * Checks if any role and all of its associated permissions are found to be\n * enforced in the roles\n * @param {Object} rolesDef The roles to enforce\n * @param {Number} perm The permissions to match\n * @param {Spread} ...roleNames Names of roles to evaluate\n * @return {Boolean} True for the first role where the above condition is met\n * False if the roles found do not match wrt. permissions\n * False if the role is not found\n */\nfunction has(rolesDef, perm, ...roleNames) {\n if (!rolesDef || !perm || roleNames.length === 0) {\n throw new Error('Invalid parameters');\n }\n for (const roleName of roleNames) {\n if (rolesDef[roleName] && (rolesDef[roleName] & perm) === perm) {\n return true;\n }\n }\n return false;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmVzNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztRQW9CZ0IsSyxHQUFBLEs7UUFvQkEsTyxHQUFBLE87UUFzQkEsRyxHQUFBLEc7Ozs7OztBQXpEVCxNQUFNLHNCQUFPLE1BQWI7QUFDQSxNQUFNLGdCQUFJLE1BQVY7QUFDQSxNQUFNLGdCQUFJLE1BQVY7QUFDQSxNQUFNLGdCQUFJLE1BQVY7QUFDQSxNQUFNLGdCQUFJLE1BQVY7QUFDQSxNQUFNLGtCQUFLLElBQUksQ0FBZjtBQUNBLE1BQU0sc0JBQU8sSUFBSSxDQUFKLEdBQVEsQ0FBUixHQUFZLENBQXpCOzs7Ozs7Ozs7QUFTQSxTQUFTLEtBQVQsQ0FBZSxRQUFmLEVBQXlCLEdBQUcsU0FBNUIsRUFBdUM7QUFDNUMsTUFBSSxDQUFDLFFBQUQsSUFBYSxVQUFVLE1BQVYsS0FBcUIsQ0FBdEMsRUFBeUM7QUFDdkMsVUFBTSxJQUFJLEtBQUosQ0FBVSxvQkFBVixDQUFOO0FBQ0Q7QUFDRCxPQUFLLE1BQU0sUUFBWCxJQUF1QixTQUF2QixFQUFrQztBQUNoQyxVQUFNLE9BQU8sU0FBUyxRQUFULENBQWI7QUFDQSxRQUFJLElBQUosRUFBVTtBQUNSLGFBQU8sSUFBUDtBQUNEO0FBQ0Y7QUFDRCxTQUFPLElBQVA7QUFDRDs7Ozs7Ozs7O0FBU00sU0FBUyxPQUFULENBQWlCLFFBQWpCLEVBQTJCLEdBQUcsU0FBOUIsRUFBeUM7QUFDOUMsTUFBSSxDQUFDLFFBQUQsSUFBYSxVQUFVLE1BQVYsS0FBcUIsQ0FBdEMsRUFBeUM7QUFDdkMsVUFBTSxJQUFJLEtBQUosQ0FBVSxvQkFBVixDQUFOO0FBQ0Q7QUFDRCxPQUFLLE1BQU0sUUFBWCxJQUF1QixTQUF2QixFQUFrQztBQUNoQyxRQUFJLENBQUMsQ0FBQyxTQUFTLFFBQVQsQ0FBTixFQUEwQjtBQUN4QixhQUFPLFFBQVA7QUFDRDtBQUNGO0FBQ0QsU0FBTyxTQUFQO0FBQ0Q7Ozs7Ozs7Ozs7OztBQVlNLFNBQVMsR0FBVCxDQUFhLFFBQWIsRUFBdUIsSUFBdkIsRUFBNkIsR0FBRyxTQUFoQyxFQUEyQztBQUNoRCxNQUFJLENBQUMsUUFBRCxJQUFhLENBQUMsSUFBZCxJQUFzQixVQUFVLE1BQVYsS0FBcUIsQ0FBL0MsRUFBa0Q7QUFDaEQsVUFBTSxJQUFJLEtBQUosQ0FBVSxvQkFBVixDQUFOO0FBQ0Q7QUFDRCxPQUFLLE1BQU0sUUFBWCxJQUF1QixTQUF2QixFQUFrQztBQUNoQyxRQUFJLFNBQVMsUUFBVCxLQUF1QixDQUFDLFNBQVMsUUFBVCxJQUFxQixJQUF0QixNQUFnQyxJQUEzRCxFQUFrRTtBQUNoRSxhQUFPLElBQVA7QUFDRDtBQUNGO0FBQ0QsU0FBTyxLQUFQO0FBQ0QiLCJmaWxlIjoiaW5kZXguZXM2Iiwic291cmNlc0NvbnRlbnQiOlsiLyogaW5kZXguZXM2ICovXG4vLyBpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG4vLyBjb25zdCBkYmcgPSBkZWJ1Zygncm9sZS11dGlscycpO1xuXG5leHBvcnQgY29uc3QgTk9ORSA9IDBiMDAwMDtcbmV4cG9ydCBjb25zdCBDID0gMGIxMDAwO1xuZXhwb3J0IGNvbnN0IFIgPSAwYjAxMDA7XG5leHBvcnQgY29uc3QgVSA9IDBiMDAxMDtcbmV4cG9ydCBjb25zdCBEID0gMGIwMDAxO1xuZXhwb3J0IGNvbnN0IFJVID0gUiB8IFU7XG5leHBvcnQgY29uc3QgQ1JVRCA9IEMgfCBSIHwgVSB8IEQ7XG5cbi8qKlxuICogUmV0dXJucyBwZXJtaXNzaW9uIG9mIHRoZSBmaXJzdCBtYXRjaGluZyByb2xlIGZyb20gdGhlIG5hbWVzIHBhc3NlZCBpbiBgcm9sZU5hbWVzYFxuICogYWdhaW5zdCB0aGUgYHJvbGVzRGVmYFxuICogQHBhcmFtICB7T2JqZWN0fSByb2xlc0RlZiAgICAgIFRoZSByb2xlcyB0byBlbmZvcmNlXG4gKiBAcGFyYW0gIHtTcHJlYWR9IC4uLnJvbGVOYW1lcyAgTmFtZXMgb2Ygcm9sZXMgdG8gZXZhbHVhdGVcbiAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgICAgICBUaGUgcGVybWlzc2lvbnMgW3Blcm1zIHwgTk9ORV1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlcm1zKHJvbGVzRGVmLCAuLi5yb2xlTmFtZXMpIHtcbiAgaWYgKCFyb2xlc0RlZiB8fCByb2xlTmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHBhcmFtZXRlcnMnKTtcbiAgfVxuICBmb3IgKGNvbnN0IHJvbGVOYW1lIG9mIHJvbGVOYW1lcykge1xuICAgIGNvbnN0IHBlcm0gPSByb2xlc0RlZltyb2xlTmFtZV07XG4gICAgaWYgKHBlcm0pIHtcbiAgICAgIHJldHVybiBwZXJtO1xuICAgIH1cbiAgfVxuICByZXR1cm4gTk9ORTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaXJzdCBtYXRjaGluZyBuYW1lIGZyb20gdGhlIG5hbWVzIHBhc3NlZCBpbiBgcm9sZU5hbWVzYCBhZ2FpbnN0XG4gKiB0aGUgYHJvbGVzRGVmYFxuICogQHBhcmFtICB7T2JqZWN0fSByb2xlc0RlZiAgICAgIFRoZSByb2xlcyB0byBlbmZvcmNlXG4gKiBAcGFyYW0gIHtTcHJlYWR9IC4uLnJvbGVOYW1lcyAgTmFtZXMgb2Ygcm9sZXMgdG8gZXZhbHVhdGVcbiAqIEByZXR1cm4ge1N0cmluZ30gICAgICAgICAgICAgICBUaGUgcm9sZSBuYW1lLCBvciB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1JvbGUocm9sZXNEZWYsIC4uLnJvbGVOYW1lcykge1xuICBpZiAoIXJvbGVzRGVmIHx8IHJvbGVOYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcGFyYW1ldGVycycpO1xuICB9XG4gIGZvciAoY29uc3Qgcm9sZU5hbWUgb2Ygcm9sZU5hbWVzKSB7XG4gICAgaWYgKCEhcm9sZXNEZWZbcm9sZU5hbWVdKSB7XG4gICAgICByZXR1cm4gcm9sZU5hbWU7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGFueSByb2xlIGFuZCBhbGwgb2YgaXRzIGFzc29jaWF0ZWQgcGVybWlzc2lvbnMgYXJlIGZvdW5kIHRvIGJlXG4gKiBlbmZvcmNlZCBpbiB0aGUgcm9sZXNcbiAqIEBwYXJhbSAge09iamVjdH0gcm9sZXNEZWYgICAgICBUaGUgcm9sZXMgdG8gZW5mb3JjZVxuICogQHBhcmFtICB7TnVtYmVyfSAgcGVybSAgICAgICAgIFRoZSBwZXJtaXNzaW9ucyB0byBtYXRjaFxuICogQHBhcmFtICB7U3ByZWFkfSAuLi5yb2xlTmFtZXMgIE5hbWVzIG9mIHJvbGVzIHRvIGV2YWx1YXRlXG4gKiBAcmV0dXJuIHtCb29sZWFufSAgICAgICAgICAgICAgVHJ1ZSBmb3IgdGhlIGZpcnN0IHJvbGUgd2hlcmUgdGhlIGFib3ZlIGNvbmRpdGlvbiBpcyBtZXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSBpZiB0aGUgcm9sZXMgZm91bmQgZG8gbm90IG1hdGNoIHdydC4gcGVybWlzc2lvbnNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSBpZiB0aGUgcm9sZSBpcyBub3QgZm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhcyhyb2xlc0RlZiwgcGVybSwgLi4ucm9sZU5hbWVzKSB7XG4gIGlmICghcm9sZXNEZWYgfHwgIXBlcm0gfHwgcm9sZU5hbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwYXJhbWV0ZXJzJyk7XG4gIH1cbiAgZm9yIChjb25zdCByb2xlTmFtZSBvZiByb2xlTmFtZXMpIHtcbiAgICBpZiAocm9sZXNEZWZbcm9sZU5hbWVdICYmICgocm9sZXNEZWZbcm9sZU5hbWVdICYgcGVybSkgPT09IHBlcm0pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl19",
"ast": null,
"map": {
"version": 3,
"sources": [
"index.es6"
],
"names": [],
"mappings": ";;;;;QAoBgB,K,GAAA,K;QAoBA,O,GAAA,O;QAsBA,G,GAAA,G;;;;;;AAzDT,MAAM,sBAAO,MAAb;AACA,MAAM,gBAAI,MAAV;AACA,MAAM,gBAAI,MAAV;AACA,MAAM,gBAAI,MAAV;AACA,MAAM,gBAAI,MAAV;AACA,MAAM,kBAAK,IAAI,CAAf;AACA,MAAM,sBAAO,IAAI,CAAJ,GAAQ,CAAR,GAAY,CAAzB;;;;;;;;;AASA,SAAS,KAAT,CAAe,QAAf,EAAyB,GAAG,SAA5B,EAAuC;AAC5C,MAAI,CAAC,QAAD,IAAa,UAAU,MAAV,KAAqB,CAAtC,EAAyC;AACvC,UAAM,IAAI,KAAJ,CAAU,oBAAV,CAAN;AACD;AACD,OAAK,MAAM,QAAX,IAAuB,SAAvB,EAAkC;AAChC,UAAM,OAAO,SAAS,QAAT,CAAb;AACA,QAAI,IAAJ,EAAU;AACR,aAAO,IAAP;AACD;AACF;AACD,SAAO,IAAP;AACD;;;;;;;;;AASM,SAAS,OAAT,CAAiB,QAAjB,EAA2B,GAAG,SAA9B,EAAyC;AAC9C,MAAI,CAAC,QAAD,IAAa,UAAU,MAAV,KAAqB,CAAtC,EAAyC;AACvC,UAAM,IAAI,KAAJ,CAAU,oBAAV,CAAN;AACD;AACD,OAAK,MAAM,QAAX,IAAuB,SAAvB,EAAkC;AAChC,QAAI,CAAC,CAAC,SAAS,QAAT,CAAN,EAA0B;AACxB,aAAO,QAAP;AACD;AACF;AACD,SAAO,SAAP;AACD;;;;;;;;;;;;AAYM,SAAS,GAAT,CAAa,QAAb,EAAuB,IAAvB,EAA6B,GAAG,SAAhC,EAA2C;AAChD,MAAI,CAAC,QAAD,IAAa,CAAC,IAAd,IAAsB,UAAU,MAAV,KAAqB,CAA/C,EAAkD;AAChD,UAAM,IAAI,KAAJ,CAAU,oBAAV,CAAN;AACD;AACD,OAAK,MAAM,QAAX,IAAuB,SAAvB,EAAkC;AAChC,QAAI,SAAS,QAAT,KAAuB,CAAC,SAAS,QAAT,IAAqB,IAAtB,MAAgC,IAA3D,EAAkE;AAChE,aAAO,IAAP;AACD;AACF;AACD,SAAO,KAAP;AACD",
"file": "index.es6",
"sourcesContent": [
"/* index.es6 */\n// import debug from 'debug';\n\n// const dbg = debug('role-utils');\n\nexport const NONE = 0b0000;\nexport const C = 0b1000;\nexport const R = 0b0100;\nexport const U = 0b0010;\nexport const D = 0b0001;\nexport const RU = R | U;\nexport const CRUD = C | R | U | D;\n\n/**\n * Returns permission of the first matching role from the names passed in `roleNames`\n * against the `rolesDef`\n * @param {Object} rolesDef The roles to enforce\n * @param {Spread} ...roleNames Names of roles to evaluate\n * @return {Number} The permissions [perms | NONE]\n */\nexport function perms(rolesDef, ...roleNames) {\n if (!rolesDef || roleNames.length === 0) {\n throw new Error('Invalid parameters');\n }\n for (const roleName of roleNames) {\n const perm = rolesDef[roleName];\n if (perm) {\n return perm;\n }\n }\n return NONE;\n}\n\n/**\n * Returns the first matching name from the names passed in `roleNames` against\n * the `rolesDef`\n * @param {Object} rolesDef The roles to enforce\n * @param {Spread} ...roleNames Names of roles to evaluate\n * @return {String} The role name, or undefined\n */\nexport function hasRole(rolesDef, ...roleNames) {\n if (!rolesDef || roleNames.length === 0) {\n throw new Error('Invalid parameters');\n }\n for (const roleName of roleNames) {\n if (!!rolesDef[roleName]) {\n return roleName;\n }\n }\n return undefined;\n}\n\n/**\n * Checks if any role and all of its associated permissions are found to be\n * enforced in the roles\n * @param {Object} rolesDef The roles to enforce\n * @param {Number} perm The permissions to match\n * @param {Spread} ...roleNames Names of roles to evaluate\n * @return {Boolean} True for the first role where the above condition is met\n * False if the roles found do not match wrt. permissions\n * False if the role is not found\n */\nexport function has(rolesDef, perm, ...roleNames) {\n if (!rolesDef || !perm || roleNames.length === 0) {\n throw new Error('Invalid parameters');\n }\n for (const roleName of roleNames) {\n if (rolesDef[roleName] && ((rolesDef[roleName] & perm) === perm)) {\n return true;\n }\n }\n return false;\n}\n"
]
},
"mtime": 1467968643232
}
}
{
"sourceMaps": false,
"only": [
".es6"
],
"presets": [
"es2015",
"stage-0"
],
"plugins": [
"external-helpers-2",
"transform-flow-strip-types"
//
// es2015
//
// "transform-es2015-arrow-functions",
// "transform-es2015-block-scoped-functions",
// "transform-es2015-block-scoping",
// "transform-es2015-classes",
// "transform-es2015-computed-properties",
// "transform-es2015-constants",
// "transform-es2015-destructuring",
// "transform-es2015-for-of",
// "transform-es2015-function-name",
// "transform-es2015-literals",
// ["transform-es2015-modules-commonjs", {"loose": true}],
// "transform-es2015-modules-commonjs",
// "transform-es2015-object-super",
// "transform-es2015-parameters",
// "transform-es2015-shorthand-properties",
// "transform-es2015-spread",
// "transform-es2015-sticky-regex",
// "transform-es2015-template-literals",
// "transform-es2015-typeof-symbol",
// "transform-es2015-unicode-regex",
// "transform-regenerator",
//
// stage 1
//
// "transform-export-extensions",
//
// stage 2
//
// "transform-object-rest-spread"
]
}
{
"only": [
".es6"
],
"plugins": [
"external-helpers-2",
"transform-flow-strip-types",
"syntax-async-functions",
"syntax-object-rest-spread",
"syntax-trailing-function-commas",
"transform-async-to-generator",
"transform-es2015-destructuring",
"transform-es2015-modules-commonjs",
"transform-es2015-parameters",
"transform-object-rest-spread",
"transform-export-extensions"
]
}
#
# General
#
alias ll="ls -lv"
alias lla="ls -alv"
alias io="sudo iotop -a"
# updates
alias saud="sudo apt-get update"
alias saug="sudo apt-get upgrade"
alias sadug="sudo apt-get dist-upgrade"
alias sai="sudo apt-get install"
# fix clear
alias clear='echo -ne "\033c"'
alias edit='scratch-text-editor'
alias sgedit='sudo gedit'
#
# Gulp aliases / functions
#
alias gbp="NODE_ENV=production gulp build"
alias gbpp="NODE_ENV=production gulp build && pack"
function clean() {
if [ -z "$1" ]
then
gulp clean
else
gulp "clean-$1"
fi
}
function build() {
if [ -z "$1" ]
then
gulp build
else
gulp "build-$1"
fi
}
function dist() {
if [ -z "$1" ]
then
gulp dist
else
gulp "dist-$1"
fi
}
function watch() {
if [ -z "$1" ]
then
gulp watch
else
gulp "watch-$1"
fi
}
#
# Git aliases
#
# log, status & diff
alias glg="git log --pretty='format:%Cgreen%h%Creset %an - %s' --graph"
alias gl="git log --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen %cr %an%Creset'"
alias gs="git status"
alias gd="git diff"
# add
alias ga="git add"
alias gaa="git add --all"
# commit
alias gca="git commit -a -m"
# tag & push/pull
alias gt="git tag"
alias gtl="git tag -l"
alias gtd="git tag -d"
alias gpt="git push --tags"
alias gp="git push"
alias gpom="git push origin master"
alias gpod="git push origin dev"
alias gpomt="git push origin master --tags"
alias gpodt="git push origin dev --tags"
alias ggom="git pull origin master"
# remote
alias gra="git remote add"
alias grao="git remote add origin"
alias grr="git remote rm"
alias grv="git remote -v"
# branch
alias gb="git branch"
alias gbd="git branch -D"
alias gba="git branch -a"
# checkout
alias gcob="git checkout -b"
alias gco="git checkout"
#
#GitSub
#
gitsub() {
curl http://gitsub:8282/$1;
}
export -f gitsub
# vino aliases
# node aliases
alias sudo='sudo env PATH=$PATH:$NVM_BIN'
# Grive Aliases
alias grive-engineering='cd /mnt/Data/GoogleDrive && grive'
# Xilinx Aliases
alias ise-start='source /mnt/Data/Engineering/embedded/utils/Xilinx/ISE-14.7/14.7/ISE_DS/settings64.sh && cd /mnt/Data/Engineering/embedded/utils/Xilinx/ISE-14.7/14.7/ISE_DS/common/bin/lin64/digilent && sudo ./install_digilent.sh && sudo ise'
# eTRAX
alias serve-ppro='cd /mnt/Data/ITDev/projects/eTRAX/etrax-servers/app-server && node server.js -p 3030'
alias watch-ppro='cd /mnt/Data/ITDev/projects/eTRAX/etrax-app/app-project && gulp watch'
alias build-ppro='cd /mnt/Data/ITDev/projects/eTRAX/etrax-app/app-project && gulp build'
# Directories
alias gitsub-dir='cd /mnt/Data/ITDev/gitsub/'
alias ITprojects-dir='cd /mnt/Data/ITDev/projects'
alias github-dir='cd /mnt/Data/ITDev/github/'
alias github-forks-dir='cd /mnt/Data/ITDev/github-forks/'
alias github-gists-dir='cd /mnt/Data/ITDev/github-gists/'
alias thesis='cd /mnt/Data/Engineering/thesis/'
alias mars-rsvp-client='thesis && cd code/mars-rover-rsvp/mars-rover-rsvp-client'
alias mars-rsvp-server='thesis && cd code/mars-rover-rsvp/mars-rover-rsvp-server'
alias mars-rce='thesis && cd code/mars-rover-rce'
function runEdisonWifi() {
if [ $1 ]
then
sudo sshfs -o allow_other "curiosity@$1:/home/curiosity" /home/sean/edisonSSH/
else
echo "Please input an IP address"
fi
}
alias mount-edison="sudo sshfs -o allow_other curiosity@192.168.2.15:/home/curiosity /home/sean/edisonSSH/"
alias unmount-edison="sudo fusermount -u /home/sean/edisonSSH/"
alias mount-edison-wifi="runEdisonWifi"
# Mocha
alias mtest='./node_modules/.bin/mocha --require resources/bootstrap-es6'
alias mdbg='node --inspect --debug-brk ./node_modules/.bin/_mocha --require resources/bootstrap-es6'
# ~/.bashrc
if [ -f $HOME/.bashrc ]; then
. $HOME/.bashrc
fi
# fix terminal dir colors
eval "$(dircolors ~/.dircolors)";
# nvm
export NVM_DIR="/home/sean/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
# Git Prompt Modifications
GIT_PROMPT_ONLY_IN_REPO=1
GIT_PROMPT_START='${debian_chroot:+($debian_chroot)}\n\[\033[1;31m\]\u\[\033[1;30m\] on \[\033[01;32m\]\h\[\033[1;30m\] in \[\033[01;34m\]\w\[\033[00m\]'
GIT_PROMPT_SHOW_UPSTREAM=1 # uncomment to show upstream tracking branch
#source ~/.bash-git-prompt/gitprompt.sh
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# We use preexec and precmd hook functions for Bash
# If you have anything that's using the Debug Trap or PROMPT_COMMAND
# change it to use preexec or precmd
# See also https://github.com/rcaloras/bash-preexec
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\n\[\033[1;31m\]\u\[\033[1;30m\] on \[\033[01;32m\]\h\[\033[1;30m\] in \[\033[01;34m\]\w\[\033[00m\]\n'$'\xe2\x96\xb2 '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
# If this is an xterm set more declarative titles
# "dir: last_cmd" and "actual_cmd" during execution
# If you want to exclude a cmd from being printed see line 156
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\$(print_title)\a\]$PS1"
__el_LAST_EXECUTED_COMMAND=""
print_title ()
{
__el_FIRSTPART=""
__el_SECONDPART=""
if [ "$PWD" == "$HOME" ]; then
__el_FIRSTPART=$(gettext --domain="pantheon-files" "Home")
else
if [ "$PWD" == "/" ]; then
__el_FIRSTPART="/"
else
__el_FIRSTPART="${PWD##*/}"
fi
fi
if [[ "$__el_LAST_EXECUTED_COMMAND" == "" ]]; then
echo "$__el_FIRSTPART"
return
fi
#trim the command to the first segment and strip sudo
if [[ "$__el_LAST_EXECUTED_COMMAND" == sudo* ]]; then
__el_SECONDPART="${__el_LAST_EXECUTED_COMMAND:5}"
__el_SECONDPART="${__el_SECONDPART%% *}"
else
__el_SECONDPART="${__el_LAST_EXECUTED_COMMAND%% *}"
fi
printf "%s: %s" "$__el_FIRSTPART" "$__el_SECONDPART"
}
put_title()
{
__el_LAST_EXECUTED_COMMAND="${BASH_COMMAND}"
printf "\033]0;%s\007" "$1"
}
# Show the currently running command in the terminal title:
# http://www.davidpashley.com/articles/xterm-titles-with-bash.html
update_tab_command()
{
# catch blacklisted commands and nested escapes
case "$BASH_COMMAND" in
*\033]0*|update_*|echo*|printf*|clear*|cd*)
__el_LAST_EXECUTED_COMMAND=""
;;
*)
put_title "${BASH_COMMAND}"
;;
esac
}
preexec_functions+=(update_tab_command)
;;
*)
;;
esac
OTHER_WRITABLE 01;34 # dir that is other-writable (o+w) and not sticky
module.exports = {
config: {
// default font size for all tabs
fontSize: 12,
// font family with optional fallbacks
fontFamily: 'Menlo, "Fira Code", "DejaVu Sans Mono", "Lucida Console", monospace',
// terminal cursor background color (hex)
cursorColor: 'red',
// terminal background color (hex)
backgroundColor: '#0A0A0A',
// border color (window, tabs)
borderColor: '#333',
// custom css to embed in the main window
css: [''],
// custom css to embed inside each terminal
termCSS: [''],
// some color overrides. see http://bit.ly/29k1iU2 for
// the full list
colors: [
'#000000',
'#ff0000',
'#33ff00',
'#ffff00',
'#0066ff',
'#cc00ff',
'#00ffff',
'#d0d0d0',
'#808080',
'#ff0000',
'#33ff00',
'#ffff00',
'#0066ff',
'#cc00ff',
'#00ffff',
'#ffffff'
]
},
// a list of plugins to fetch and install from npm
// format: [@org/]project[#version]
// examples:
// `hypersolar`
// `@company/project`
// `project#1.0.1`
plugins: [
'hyperterm-blink',
'hyperterm-title',
'hyperterm-subpixel-antialiased',
"hyperterm-tabs",
"hyperterm-alternatescroll",
"hyperterm-themed-scrollbar",
"hyperterm-atom-dark"
],
// in development, you can create a directory under
// `~/.hyperterm_modules/local/` and include it here
// to load it and avoid it being `npm install`ed
localPlugins: []
};
registry=https://registry.npmjs.org
//127.0.0.1:5080/:_authToken=ba9f3cae-2045-45ec-b566-bc3017b27edc
[General]
IniMode=true
[version]
written_by_TXS_version=2.11.0
written_by_TXS_hg_revision=6060:ea4aff5be05a
created_by_TXS_version=2.11.0
created_by_TXS_hg_revision=6060:ea4aff5be05a
[texmaker]
Tools\Commands\latex="latex -src -interaction=nonstopmode %.tex"
Tools\Commands\pdflatex="pdflatex -synctex=1 -interaction=nonstopmode %.tex"
Tools\Commands\xelatex="xelatex -synctex=1 -interaction=nonstopmode -shell-escape %.tex"
Tools\Commands\lualatex="lualatex -synctex=1 -interaction=nonstopmode %.tex"
Tools\Commands\view-dvi=xdg-open %.dvi > /dev/null
Tools\Commands\view-ps=xdg-open %.ps > /dev/null
Tools\Commands\view-pdf-external=xdg-open %.pdf > /dev/null
Tools\Commands\dvips=dvips -o %.ps %.dvi
Tools\Commands\dvipng=dvipng -T tight -D 120 %.dvi
Tools\Commands\ps2pdf=ps2pdf %.ps
Tools\Commands\dvipdf=dvipdf %.dvi
Tools\Commands\bibtex=bibtex %.aux
Tools\Commands\bibtex8=bibtex8 %.aux
Tools\Commands\biber=biber %
Tools\Commands\makeindex=makeindex %.idx
Tools\Commands\texindy=texindy %.idx
Tools\Commands\makeglossaries=makeglossaries %
Tools\Commands\metapost="mpost -interaction=nonstopmode ?me)"
Tools\Commands\asy=asy ?m*.asy
Tools\Commands\gs=gs \"?am.ps\"
Tools\Commands\latexmk="latexmk -pdf -silent -latexoption=\"-synctex=1\" %"
Tools\Commands\quick=txs:///compile | txs:///view
Tools\Commands\compile=txs:///xelatex
Tools\Commands\view=txs:///view-pdf
Tools\Commands\view-pdf=txs:///view-pdf-internal
Tools\Commands\bibliography=txs:///bibtex
Tools\Commands\index=txs:///makeindex
Tools\Commands\glossary=txs:///makeglossaries
Tools\Commands\ps-chain=txs:///latex | txs:///dvips | txs:///view-ps
Tools\Commands\dvi-chain=txs:///latex | txs:///view-dvi
Tools\Commands\pdf-chain=txs:///pdflatex | txs:///view-pdf
Tools\Commands\dvi-pdf-chain=txs:///latex | txs:///dvipdf | txs:///view-pdf
Tools\Commands\dvi-ps-pdf-chain=txs:///latex | txs:///dvips | txs:///ps2pdf | txs:///view-pdf
Tools\Commands\asy-dvi-chain=txs:///latex | txs:///asy | txs:///latex | txs:///view-dvi
Tools\Commands\asy-pdf-chain=txs:///pdflatex | txs:///asy | txs:///pdflatex | txs:///view-pdf
Tools\Commands\pre-compile=
Tools\Commands\internal-pre-compile=txs:///pre-compile | txs:///conditionally-recompile-bibliography
Tools\Commands\recompile-bibliography=txs:///compile | txs:///bibliography | txs:///compile
Tools\Commands\svn=
Tools\Commands\svnadmin=
Startup\CheckLatexConfiguration=true
ToolBar\CentralVisible=true
StructureView\ShowLinenumbers=false
StructureView\Indentation=-1
StructureView\IndentIncludes=false
Structure\ShowElementsInComments=false
Structure\MarkStructureElementsBeyondEnd=true
Structure\MarkStructureElementsInAppendix=true
StructureView\ReferenceCommandsInContextMenu=\\ref
Files\New%20File%20Encoding=UTF-8
Files\AutoDetectEncodingFromChars=true
Files\AutoDetectEncodingFromLatex=true
Common%20Encodings=UTF-8, ISO-8859-1, windows-1252, Apple Roman
Files\Max%20Recent%20Files=5
Files\Max%20Recent%20Projects=3
Files\Max%20Recent%20Sessions=5
Files\Recent%20Files=/mnt/Data/Engineering/thesis/paper/mars-rover-writeup/mars-rover-writeup.tex, /mnt/Data/Engineering/thesis/paper/mars-rover-writeup/preamble/Preamble.tex, /mnt/Data/Engineering/thesis/paper/mars-rover-writeup/body/Literature.tex, /mnt/Data/Engineering/thesis/paper/mars-rover-writeup/body/Method-problemDefinition.tex, /mnt/Data/Engineering/documents/mec4063c-termPaper/Body/Prevention.tex
Files\Recent%20Project%20Files=/mnt/Data/Engineering/thesis/paper/mars-rover-writeup/mars-rover-writeup.tex, /mnt/Data/Engineering/documents/mec4063c-termPaper/mec4063c-termPaper.tex, /mnt/Data/Engineering/documents/mec4063c-termPaper/mec4063c-termPaperProgressReport.tex
Files\Recent%20Session%20Files=@Invalid()
Files\Remember%20File%20Filter=true
Files\Recent%20Files%20Highlighting=@Variant(\0\0\0\x7f\0\0\0\x10StringStringMap\0\0\0\0\0)
Files\RestoreSession=false
Files\Last%20Document=/mnt/Data/Engineering/thesis/paper/mars-rover-writeup/mars-rover-writeup.tex
Files\Parse%20BibTeX=true
Bibliography\BibFileEncoding=UTF-8
Files\Parse%20Master=true
Files\Autosave=0
Files\Autoload=false
Files\Bib%20Paths=
Files\Image%20Paths=
Session\StoreRelativePaths=true
Editor\UseEscForClosingFullscreen=false
Editor\GoToErrorWhenDisplayingLog=true
Editor\ShowLogMarkersWhenClickingLogEntry=true
Editor\LogFileEncoding=Document
Editor\ScanInstalledLatexPackages=true
Tools\Insert%20Unicode%20From%20SymbolGrid=false
Spell\DictionaryDir=/usr/share/texstudio
Spell\Language=en_GB
Spell\Dic=/usr/share/texstudio/de_DE.dic
Thesaurus\Database=/usr/share/texstudio/th_en_US_v2.dat
Update\AutoCheck=true
Update\UpdateLevel=0
Update\AutoCheckInvervalDays=7
Update\LastCheck=@Variant(\0\0\0\x10\0%\x80)\x1\xf6!\xe7\0)
Editor\WordWrapMode=1
Editor\WrapLineWidth=80
Editor\Parentheses%20Matching=true
Editor\Parentheses%20Completion=true
Editor\Line%20Number%20Multiples=1
Editor\Cursor%20Surrounding%20Lines=5
Editor\BoldCursor=true
Editor\Auto%20Indent=true
Editor\Weak%20Indent=true
Editor\Indent%20with%20Spaces=true
Editor\ReplaceTextTabs=false
Editor\Folding=true
Editor\Show%20Line%20State=true
Editor\Show%20Cursor%20State=true
Editor\Real-Time%20Spellchecking=true
Editor\Check%20Spelling=true
Editor\Check%20Citations=true
Editor\Check%20References=true
Editor\Check%20Syntax=true
Editor\Check%20Grammar=true
Editor\Check%20Package=true
Editor\Check%20In%20Non%20TeX%20Files=true
Editor\Hide%20Spelling%20Errors%20in%20Non%20Text=true
Editor\Hide%20Grammar%20Errors%20in%20Non%20Text=true
Editor\Show%20Whitespace=false
Editor\TabStop=2
Editor\ToolTip%20Help=true
Editor\ToolTip%20Preview=true
Editor\ImageToolTip=true
Editor\MaxImageTooltipWidth=400
Editor\ContextMenuKeyboardModifiers=33554432
Editor\ContextMenuSpellcheckingEntryLocation=0
Editor\TexDoc%20Help%20Internal=true
Editor\SilentReload=false
Editor\Replace%20Quotes=1
Editor\Close%20Search%20Replace%20Together=false
Editor\Use%20Line%20For%20Search=true
Editor\Search%20Only%20In%20Selection=true
Editor\Auto%20Replace%20Commands=true
Editor\Font%20Family=Fira Code
Editor\Font%20Size=13
Editor\Line%20Spacing%20Percent=100
Editor\Esc%20for%20closing%20log=false
Editor\Mouse%20Wheel%20Zoom=true
Editor\Smooth%20Scrolling=true
Editor\Hack%20Auto%20Choose=true
Editor\Hack%20Disable%20Fixed%20Pitch=false
Editor\Hack%20Disable%20Width%20Cache=false
Editor\Hack%20Disable%20Line%20Cache=false
Editor\Hack%20Disable%20Accent%20Workaround=false
Editor\Hack%20Render%20Mode=0
Editor\Hack%20QImage%20Cache=false
Editor\Completion=true
Editor\Completion%20Case%20Sensitive=0
Editor\Completion%20Complete%20Common%20Prefix=true
Editor\Completion%20EOW%20Completes=true
Editor\Completion%20Enable%20Tooltip%20Help=true
Editor\Completion%20Enable%20Tooltip%20Preview=true
Editor\Completion%20Use%20Placeholders=true
Editor\Completion%20Show%20Placeholders=true
Editor\Completion%20Prefered%20Tab=0
Editor\Completion%20Tab%20Relative%20Font%20Size%20Percent=100
Editor\Auto%20Insert%20LRM=false
Editor\Visual%20Column%20Mode=true
Editor\Auto%20Switch%20Language%20Direction=true
Editor\Auto%20Switch%20Language%20Math=false
Editor\Overwrite%20Opening%20Bracket%20Followed%20By%20Placeholder=true
Editor\Overwrite%20Closing%20Bracket%20Following%20Placeholder=true
Editor\Double-click%20Selection%20Includes%20Leading%20Backslash=true
TableAutoformat\Special%20Commands="\\hline,\\cline,\\intertext,\\shortintertext,\\toprule,\\midrule,\\bottomrule"
TableAutoformat\Special%20Command%20Position=0
TableAutoformat\One%20Line%20Per%20Cell=false
Grammar\Long%20Repetition%20Check=false
Grammar\Bad%20Word%20Check=true
Grammar\Long%20Repetition%20Check%20Distance=3
Grammar\Very%20Long%20Repetition%20Check%20Distance=10
Grammar\Very%20Long%20Repetition%20Check%20Min%20Length=6
Grammar\Word%20Lists%20Dir=
Grammar\Language%20Tool%20URL=http://localhost:8081/
Grammar\Language%20Tool%20Path=
Grammar\Language%20Tool%20Arguments=org.languagetool.server.HTTPServer -p 8081
Grammar\Language%20Tool%20Java%20Path=java
Grammar\Language%20Tool%20Autorun=true
Grammar\Language%20Tool%20Ignored%20Rules=
Grammar\Special%20Rules1=
Grammar\Special%20Rules2=
Grammar\Special%20Rules3=
Grammar\Special%20Rules4=
Dialogs\Last%20Hard%20Wrap%20Column=80
Dialogs\Last%20Hard%20Wrap%20Smart%20Scope%20Selection=false
Dialogs\Last%20Hard%20Wrap%20Join%20Lines=false
Tools\SingleViewerInstance=false
Tools\Show%20Messages%20When%20Compiling=true
Tools\Show%20Stdout=1
Tools\Automatic%20Rerun%20Times=5
Tools\ReplaceEnvironmentVariables=true
Tools\SupportShellStyleLiteralQuotes=true
Tools\Search%20Paths=
Tools\Log%20Paths=
Tools\PDF%20Paths=
Tools\Auto%20Checkin%20after%20Save%20level=0
Tools\SVN%20Undo=false
Tools\SVN%20KeywordSubstitution=false
Tools\SVN%20Search%20Path%20Depth=2
GUI\Style=false
GUI\Texmaker%20Palette=false
GUI\Use%20System%20Theme=true
X11\Font%20Family=Droid Sans
X11\Font%20Size=11
X11\Style=GTK+
GUI\ToobarIconSize=16
GUI\SymbolSize=23
GUI\SecondaryToobarIconSize=15
Interface\Config%20Show%20Advanced%20Options=true
Interface\Config%20Riddled=true
Interface\New%20Left%20Panel%20Layout=true
Interface\MRU%20Document%20Chooser=false
Interface\Language=en
Preview\Mode=4
Preview\Auto%20Preview=1
Preview\Auto%20Preview%20Delay=300
Preview\SegmentPreviewScalePercent=150
Geometries\PdfViewerLeft=1600
Geometries\PdfViewerTop=21
Geometries\PdfViewerWidth=1600
Geometries\PdfViewerHeight=879
Geometries\PdfViewerMaximized=true
Geometries\PdfViewerState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x2\0\0\0\0\0\0\0\xc8\0\0\x3\x30\xfc\x2\0\0\0\x3\xfb\0\0\0\xe\0o\0u\0t\0l\0i\0n\0\x65\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x64\0\xff\xff\xff\xfb\0\0\0\xe\0p\0\x64\0\x66\0i\0n\0\x66\0o\0\0\0\0 \0\0\x2\xec\0\0\0\x64\0\xff\xff\xff\xfb\0\0\0\x10\0o\0v\0\x65\0r\0v\0i\0\x65\0w\x1\0\0\0 \0\0\x3\x30\0\0\0\x64\0\xff\xff\xff\0\0\0\x3\0\0\0\0\0\0\0\0\xfc\x1\0\0\0\x3\xfb\0\0\0\f\0s\0\x65\0\x61\0r\0\x63\0h\0\0\0\0\0\xff\xff\xff\xff\0\0\x1w\0\xff\xff\xff\xfb\0\0\0\n\0\x66\0o\0n\0t\0s\0\0\0\0\0\xff\xff\xff\xff\0\0\0O\0\xff\xff\xff\xfb\0\0\0\n\0\x63\0l\0o\0\x63\0k\0\0\0\0\0\xff\xff\xff\xff\0\0\0O\0\xff\xff\xff\0\0\x5r\0\0\x3\x30\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\xe\0t\0o\0o\0l\0\x42\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
Preview\ToolbarVisible=true
Preview\AnnotationPanelVisible=false
Preview\CacheSize=512
Preview\LoadStrategy=2
Preview\RenderBackend=0
Preview\DPI=78
Preview\Scale%20Option=1
Preview\Scale=100
Preview=true
Preview\ZoomStepFactor=1.4142135
Preview\Magnifier%20Size=300
Preview\Magnifier%20Shape=1
Preview\Magnifier%20Border=false
Preview\HighlightColor=#FFFF003F
Preview\HighlightDuration=2000
Preview\Sync%20File%20Mask="*.tex;*.tikz;*.pdf_tex"
Preview\AutoHideToolbars=false
Preview\EnlargedEmbedded=false
LogView\WarnIfFileSizeLargerMB=2
Tools\User%20Class=@Invalid()
Tools\User%20Paper=@Invalid()
Tools\User%20Encoding=@Invalid()
Tools\User%20Options=@Invalid()
Quick\Class=article
Quick\Typeface=10pt
Quick\Papersize=a4paper
Quick\Encoding=latin1
Quick\AMS=true
Quick\MakeIndex=false
Quick\graphicx=true
Quick\Author=
Quick\Geometry%20Page%20Width=0
Quick\Geometry%20Page%20Height=0
Quick\Geometry%20Margin%20Left=0
Quick\Geometry%20Margin%20Right=0
Quick\Geometry%20Margin%20Top=0
Quick\Geometry%20Margin%20Bottom=0
Quick\Geometry%20Page%20Width%20Unit=cm
Quick\Geometry%20Page%20Height%20Unit=cm
Quick\Geometry%20Margin%20Left%20Unit=cm
Quick\Geometry%20Margin%20Right%20Unit=cm
Quick\Geometry%20Margin%20Top%20Unit=cm
Quick\Geometry%20Margin%20Bottom%20Unit=cm
Quick\Geometry%20Page%20Width%20Enabled=false
Quick\Geometry%20Page%20Height%20Enabled=false
Quick\Geometry%20Margin%20Left%20Enabled=false
Quick\Geometry%20Margin%20Right%20Enabled=false
Quick\Geometry%20Margin%20Top%20Enabled=false
Quick\Geometry%20Margin%20Bottom%20Enabled=false
Beamer\Encoding=utf8
Tools\Quick%20Mode=-2
Tools\Max%20Expanding%20Nesting%20Deep=10
Tools\Dvi2Png%20Mode=0
Files\Save%20Files%20Before%20Compiling=2
Preview\Remove%20Beamer%20Class=true
Preview\Precompile%20Preamble=true
Tools\Automatic%20Rerun%20Commands=latex|pdflatex|xelatex|lualatex|compile
User\ToolNames=@Invalid()
User\Tools=@Invalid()
Tools\Display%20Names=@Invalid()
Tools\User%20Order=@Invalid()
Tools\Preview%20Compile%20Time%20Out=15000
Tools\Had%20Successful%20Process%20Start=true
Files\Default%20File%20Filter=TeX files (*.tex *.bib *.sty *.cls *.mp *.dtx *.cfg *.ins *.ltx *.tikz *.pdf_tex)
PDFSplitter=0.5
Tools\Kind\LaTeX=latex, pdflatex, xelatex, lualatex, latexmk, compile
Tools\Kind\Rerunnable=latex, pdflatex, xelatex, lualatex
Tools\Kind\Pdf=pdflatex, xelatex, lualatex, latexmk, dvipdf, ps2pdf
Tools\Kind\Stdout=bibtex, biber, bibtex8, bibliography
Tools\Kind\Viewer=view-pdf, view-ps, view-dvi, view-pdf-internal, view-pdf-external, view
Crash%20Handler%20Type=1
Grammar\Display%20Error%200=true
Grammar\Display%20Error%201=true
Grammar\Display%20Error%202=true
Grammar\Display%20Error%203=true
Grammar\Display%20Error%204=true
Grammar\Display%20Error%205=true
Grammar\Display%20Error%206=true
Grammar\Display%20Error%207=true
Search\Find%20History=!, ![, figure
Search\Case%20Sensitive=true
Search\Whole%20Words=false
Search\Regular%20Expression=false
Search\Highlight=true
Search\Cursor=true
Search\Selection=true
Search\Replace%20History=
Search\Ask%20before%20Replace=false
Search\Escape%20Sequence=false
Preview\EditTool=2
Preview\Grid%20Sizes=3x1, 3x2, 3x3
Preview\GridX=1
Preview\GridY=1
Preview\Single%20Page%20Step=true
Preview\Continuous=true
Preview\Scrolling%20Follows%20Cursor=false
Preview\Cursor%20Follows%20Scrolling=false
Preview\Sync%20Multiple%20Views=true
Preview\Invert%20Colors=false
Preview\Grayscale=false
Editor\Completion%20Files=latex-dev.cwl, latex-document.cwl, latex-mathsymbols.cwl, tex.cwl
qttwp\userwidth=700
qttwp\compil=1
qttwp\tocdepth=2
qttwp\startindex=1
qttwp\navigation=1
qttwp\noindex=false
qttwp\title=
qttwp\address=
qttwp\browser=firefox
qttwp\contentname=\\contentsname
qttwp\align=center
qttwp\lastdir=/home/sean
qttwp\dviopt=" -Ppk -V"
InsertGraphics\includeOptions="width=0.7\\linewidth"
InsertGraphics\center=true
InsertGraphics\useFigure=true
InsertGraphics\captionBelow=true
InsertGraphics\placement=
InsertGraphics\spanTwoCols=false
Tools\After%20BibTeX%20Change=tmx://latex && tmx://bibtex && tmx://latex
User\New%20Key%20Replacements%20Created=true
Macros\0=Section, Section~\\ref{}, , Sec~
keysetting\size=0
changedLatexMenus=@Variant(\0\0\0\b\0\0\0\0)
CustomToolBar=@Invalid()
FileToolBar=@Invalid()
EditToolBar=@Invalid()
ToolsToolBar=@Invalid()
MathToolBar=@Invalid()
FormatToolBar=@Invalid()
TableToolBar=@Invalid()
DiffToolBar=@Invalid()
CentralToolBar=@Invalid()
customIcons=@Variant(\0\0\0\b\0\0\0\0)
customHighlighting=@Variant(\0\0\0\b\0\0\0\0)
customCommands=@Invalid()
Symbols\Quantity=@Variant(\0\0\0\b\0\0\0\0)
Symbols\Favorite%20IDs=@Invalid()
Symbols\hiddenlists=
StructureView\SingleDocMode=false
[formats]
version=1.0
data\normal\priority=-1
data\normal\bold=false
data\normal\italic=false
data\normal\overline=false
data\normal\underline=false
data\normal\strikeout=false
data\normal\waveUnderline=false
data\normal\foreground=#efefef
data\normal\fontFamily=
data\normal\pointSize=0
data\normal\wrapAround=false
data\background\priority=-1
data\background\bold=false
data\background\italic=false
data\background\overline=false
data\background\underline=false
data\background\strikeout=false
data\background\waveUnderline=false
data\background\background=#222222
data\background\fontFamily=
data\background\pointSize=0
data\background\wrapAround=false
data\line%3Aerror\priority=-1
data\line%3Aerror\bold=false
data\line%3Aerror\italic=false
data\line%3Aerror\overline=false
data\line%3Aerror\underline=false
data\line%3Aerror\strikeout=false
data\line%3Aerror\waveUnderline=false
data\line%3Aerror\background=#590000
data\line%3Aerror\fontFamily=
data\line%3Aerror\pointSize=0
data\line%3Aerror\wrapAround=false
data\line%3Awarning\priority=-1
data\line%3Awarning\bold=false
data\line%3Awarning\italic=false
data\line%3Awarning\overline=false
data\line%3Awarning\underline=false
data\line%3Awarning\strikeout=false
data\line%3Awarning\waveUnderline=false
data\line%3Awarning\background=#592907
data\line%3Awarning\fontFamily=
data\line%3Awarning\pointSize=0
data\line%3Awarning\wrapAround=false
data\line%3Abadbox\priority=-1
data\line%3Abadbox\bold=false
data\line%3Abadbox\italic=false
data\line%3Abadbox\overline=false
data\line%3Abadbox\underline=false
data\line%3Abadbox\strikeout=false
data\line%3Abadbox\waveUnderline=false
data\line%3Abadbox\background=#0a1d3b
data\line%3Abadbox\fontFamily=
data\line%3Abadbox\pointSize=0
data\line%3Abadbox\wrapAround=false
data\magicComment\priority=-1
data\magicComment\bold=false
data\magicComment\italic=false
data\magicComment\overline=false
data\magicComment\underline=false
data\magicComment\strikeout=false
data\magicComment\waveUnderline=false
data\magicComment\foreground=#58476c
data\magicComment\fontFamily=
data\magicComment\pointSize=0
data\magicComment\wrapAround=false
data\commentTodo\priority=-1
data\commentTodo\bold=false
data\commentTodo\italic=false
data\commentTodo\overline=false
data\commentTodo\underline=false
data\commentTodo\strikeout=false
data\commentTodo\waveUnderline=false
data\commentTodo\foreground=#9bda6a
data\commentTodo\background=#5e7349
data\commentTodo\fontFamily=
data\commentTodo\pointSize=0
data\commentTodo\wrapAround=false
data\comment\priority=-1
data\comment\bold=false
data\comment\italic=false
data\comment\overline=false
data\comment\underline=false
data\comment\strikeout=false
data\comment\waveUnderline=false
data\comment\foreground=#757575
data\comment\fontFamily=
data\comment\pointSize=0
data\comment\wrapAround=false
data\keyword\priority=-1
data\keyword\bold=false
data\keyword\italic=false
data\keyword\overline=false
data\keyword\underline=false
data\keyword\strikeout=false
data\keyword\waveUnderline=false
data\keyword\foreground=#56b2eb
data\keyword\fontFamily=
data\keyword\pointSize=0
data\keyword\wrapAround=false
data\math-keyword\priority=-1
data\math-keyword\bold=false
data\math-keyword\italic=false
data\math-keyword\overline=false
data\math-keyword\underline=false
data\math-keyword\strikeout=false
data\math-keyword\waveUnderline=false
data\math-keyword\foreground=#bcd54d
data\math-keyword\fontFamily=
data\math-keyword\pointSize=0
data\math-keyword\wrapAround=false
data\link\priority=-1
data\link\bold=false
data\link\italic=false
data\link\overline=false
data\link\underline=true
data\link\strikeout=false
data\link\waveUnderline=false
data\link\foreground=#56b2eb
data\link\fontFamily=
data\link\pointSize=0
data\link\wrapAround=false
data\align-ampersand\priority=-1
data\align-ampersand\bold=true
data\align-ampersand\italic=false
data\align-ampersand\overline=false
data\align-ampersand\underline=false
data\align-ampersand\strikeout=false
data\align-ampersand\waveUnderline=false
data\align-ampersand\foreground=#ffb457
data\align-ampersand\fontFamily=
data\align-ampersand\pointSize=0
data\align-ampersand\wrapAround=false
data\verbatim\priority=-1
data\verbatim\bold=false
data\verbatim\italic=false
data\verbatim\overline=false
data\verbatim\underline=false
data\verbatim\strikeout=false
data\verbatim\waveUnderline=false
data\verbatim\foreground=#7fce46
data\verbatim\fontFamily=
data\verbatim\pointSize=0
data\verbatim\wrapAround=false
data\picture\priority=-1
data\picture\bold=false
data\picture\italic=false
data\picture\overline=false
data\picture\underline=false
data\picture\strikeout=false
data\picture\waveUnderline=false
data\picture\foreground=#ff7979
data\picture\fontFamily=
data\picture\pointSize=0
data\picture\wrapAround=false
data\braceMatch\priority=-1
data\braceMatch\bold=true
data\braceMatch\italic=false
data\braceMatch\overline=false
data\braceMatch\underline=false
data\braceMatch\strikeout=false
data\braceMatch\waveUnderline=false
data\braceMatch\foreground=#7fce46
data\braceMatch\background=#314f1a
data\braceMatch\fontFamily=
data\braceMatch\pointSize=0
data\braceMatch\wrapAround=false
data\braceMismatch\priority=-1
data\braceMismatch\bold=true
data\braceMismatch\italic=false
data\braceMismatch\overline=false
data\braceMismatch\underline=false
data\braceMismatch\strikeout=false
data\braceMismatch\waveUnderline=false
data\braceMismatch\foreground=#ff7979
data\braceMismatch\background=#590000
data\braceMismatch\fontFamily=
data\braceMismatch\pointSize=0
data\braceMismatch\wrapAround=false
data\numbers\priority=-1
data\numbers\bold=false
data\numbers\italic=false
data\numbers\overline=false
data\numbers\underline=false
data\numbers\strikeout=false
data\numbers\waveUnderline=false
data\numbers\foreground=#bd61d6
data\numbers\fontFamily=
data\numbers\pointSize=0
data\numbers\wrapAround=false
data\math-delimiter\priority=-1
data\math-delimiter\bold=false
data\math-delimiter\italic=false
data\math-delimiter\overline=false
data\math-delimiter\underline=false
data\math-delimiter\strikeout=false
data\math-delimiter\waveUnderline=false
data\math-delimiter\foreground=#7fce46
data\math-delimiter\fontFamily=
data\math-delimiter\pointSize=0
data\math-delimiter\wrapAround=false
data\text\priority=-1
data\text\bold=false
data\text\italic=false
data\text\overline=false
data\text\underline=false
data\text\strikeout=false
data\text\waveUnderline=false
data\text\foreground=#ff7979
data\text\fontFamily=
data\text\pointSize=0
data\text\wrapAround=false
data\escapeseq\priority=-1
data\escapeseq\bold=false
data\escapeseq\italic=false
data\escapeseq\overline=false
data\escapeseq\underline=false
data\escapeseq\strikeout=false
data\escapeseq\waveUnderline=false
data\escapeseq\foreground=#ffb457
data\escapeseq\fontFamily=
data\escapeseq\pointSize=0
data\escapeseq\wrapAround=false
data\spellingMistake\priority=-1
data\spellingMistake\bold=false
data\spellingMistake\italic=false
data\spellingMistake\overline=false
data\spellingMistake\underline=false
data\spellingMistake\strikeout=false
data\spellingMistake\waveUnderline=true
data\spellingMistake\linescolor=#d90000
data\spellingMistake\fontFamily=
data\spellingMistake\pointSize=0
data\spellingMistake\wrapAround=false
data\wordRepetition\priority=-1
data\wordRepetition\bold=false
data\wordRepetition\italic=false
data\wordRepetition\overline=false
data\wordRepetition\underline=false
data\wordRepetition\strikeout=false
data\wordRepetition\waveUnderline=true
data\wordRepetition\linescolor=#00a500
data\wordRepetition\fontFamily=
data\wordRepetition\pointSize=0
data\wordRepetition\wrapAround=false
data\wordRepetitionLongRange\priority=-1
data\wordRepetitionLongRange\bold=false
data\wordRepetitionLongRange\italic=false
data\wordRepetitionLongRange\overline=false
data\wordRepetitionLongRange\underline=false
data\wordRepetitionLongRange\strikeout=false
data\wordRepetitionLongRange\waveUnderline=true
data\wordRepetitionLongRange\linescolor=#009c00
data\wordRepetitionLongRange\fontFamily=
data\wordRepetitionLongRange\pointSize=0
data\wordRepetitionLongRange\wrapAround=false
data\grammarMistake\priority=-1
data\grammarMistake\bold=false
data\grammarMistake\italic=false
data\grammarMistake\overline=false
data\grammarMistake\underline=false
data\grammarMistake\strikeout=false
data\grammarMistake\waveUnderline=true
data\grammarMistake\linescolor=#56b2eb
data\grammarMistake\fontFamily=
data\grammarMistake\pointSize=0
data\grammarMistake\wrapAround=false
data\latexSyntaxMistake\priority=-1
data\latexSyntaxMistake\bold=false
data\latexSyntaxMistake\italic=false
data\latexSyntaxMistake\overline=false
data\latexSyntaxMistake\underline=false
data\latexSyntaxMistake\strikeout=false
data\latexSyntaxMistake\waveUnderline=false
data\latexSyntaxMistake\foreground=#ff7979
data\latexSyntaxMistake\background=#590000
data\latexSyntaxMistake\fontFamily=
data\latexSyntaxMistake\pointSize=0
data\latexSyntaxMistake\wrapAround=false
data\temporaryCodeCompletion\priority=-1
data\temporaryCodeCompletion\bold=false
data\temporaryCodeCompletion\italic=true
data\temporaryCodeCompletion\overline=false
data\temporaryCodeCompletion\underline=false
data\temporaryCodeCompletion\strikeout=false
data\temporaryCodeCompletion\waveUnderline=false
data\temporaryCodeCompletion\foreground=#56b2eb
data\temporaryCodeCompletion\fontFamily=
data\temporaryCodeCompletion\pointSize=0
data\temporaryCodeCompletion\wrapAround=false
data\environment\priority=-1
data\environment\bold=false
data\environment\italic=false
data\environment\overline=false
data\environment\underline=false
data\environment\strikeout=false
data\environment\waveUnderline=false
data\environment\foreground=#ff7979
data\environment\fontFamily=
data\environment\pointSize=0
data\environment\wrapAround=false
data\referencePresent\priority=-1
data\referencePresent\bold=false
data\referencePresent\italic=false
data\referencePresent\overline=false
data\referencePresent\underline=false
data\referencePresent\strikeout=false
data\referencePresent\waveUnderline=false
data\referencePresent\foreground=#7fce46
data\referencePresent\fontFamily=
data\referencePresent\pointSize=0
data\referencePresent\wrapAround=false
data\referenceMissing\priority=-1
data\referenceMissing\bold=false
data\referenceMissing\italic=false
data\referenceMissing\overline=false
data\referenceMissing\underline=false
data\referenceMissing\strikeout=false
data\referenceMissing\waveUnderline=true
data\referenceMissing\foreground=#ff7979
data\referenceMissing\fontFamily=
data\referenceMissing\pointSize=0
data\referenceMissing\wrapAround=false
data\referenceMultiple\priority=-1
data\referenceMultiple\bold=false
data\referenceMultiple\italic=false
data\referenceMultiple\overline=false
data\referenceMultiple\underline=false
data\referenceMultiple\strikeout=false
data\referenceMultiple\waveUnderline=true
data\referenceMultiple\foreground=#bd61d6
data\referenceMultiple\fontFamily=
data\referenceMultiple\pointSize=0
data\referenceMultiple\wrapAround=false
data\citationPresent\priority=-1
data\citationPresent\bold=false
data\citationPresent\italic=false
data\citationPresent\overline=false
data\citationPresent\underline=false
data\citationPresent\strikeout=false
data\citationPresent\waveUnderline=false
data\citationPresent\foreground=#7fce46
data\citationPresent\fontFamily=
data\citationPresent\pointSize=0
data\citationPresent\wrapAround=false
data\citationMissing\priority=-1
data\citationMissing\bold=false
data\citationMissing\italic=false
data\citationMissing\overline=false
data\citationMissing\underline=false
data\citationMissing\strikeout=false
data\citationMissing\waveUnderline=true
data\citationMissing\foreground=#ff7979
data\citationMissing\fontFamily=
data\citationMissing\pointSize=0
data\citationMissing\wrapAround=false
data\packagePresent\priority=-1
data\packagePresent\bold=false
data\packagePresent\italic=false
data\packagePresent\overline=false
data\packagePresent\underline=false
data\packagePresent\strikeout=false
data\packagePresent\waveUnderline=false
data\packagePresent\foreground=#7fce46
data\packagePresent\fontFamily=
data\packagePresent\pointSize=0
data\packagePresent\wrapAround=false
data\packageMissing\priority=-1
data\packageMissing\bold=false
data\packageMissing\italic=false
data\packageMissing\overline=false
data\packageMissing\underline=false
data\packageMissing\strikeout=false
data\packageMissing\waveUnderline=true
data\packageMissing\foreground=#ff7979
data\packageMissing\fontFamily=
data\packageMissing\pointSize=0
data\packageMissing\wrapAround=false
data\structure\priority=-1
data\structure\bold=true
data\structure\italic=false
data\structure\overline=false
data\structure\underline=false
data\structure\strikeout=false
data\structure\waveUnderline=false
data\structure\foreground=#efefef
data\structure\fontFamily=
data\structure\pointSize=0
data\structure\wrapAround=false
data\current\priority=-1
data\current\bold=false
data\current\italic=false
data\current\overline=false
data\current\underline=false
data\current\strikeout=false
data\current\waveUnderline=false
data\current\background=#181818
data\current\fontFamily=
data\current\pointSize=0
data\current\wrapAround=false
"use strict";
var _stringify = require("babel-runtime/core-js/json/stringify");
var _stringify2 = _interopRequireDefault(_stringify);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var outputFileSync = require("output-file-sync");
var pathExists = require("path-exists");
var slash = require("slash");
var path = require("path");
var util = require("./util");
var fs = require("fs");
var _ = require("lodash");
module.exports = function (commander, filenames) {
function write(src, relative) {
relative = relative.replace(/\.(\w*?)$/, "") + ".js";
var dest = path.join(commander.outDir, relative);
var data = util.compile(src, {
sourceFileName: slash(path.relative(dest + "/..", src)),
sourceMapTarget: path.basename(relative)
});
if (!commander.copyFiles && data.ignored) return;
if (data.map && commander.sourceMaps && commander.sourceMaps !== "inline") {
var mapLoc = dest + ".map";
data.code = util.addSourceMappingUrl(data.code, mapLoc);
outputFileSync(mapLoc, (0, _stringify2.default)(data.map));
}
outputFileSync(dest, data.code);
util.chmod(src, dest);
util.log(src + " -> " + dest);
}
function handleFile(src, filename) {
if (util.shouldIgnore(src)) return;
if (util.canCompile(filename, commander.extensions)) {
write(src, filename);
} else if (commander.copyFiles) {
var dest = path.join(commander.outDir, filename);
outputFileSync(dest, fs.readFileSync(src));
util.chmod(src, dest);
}
}
function handle(filename) {
if (!pathExists.sync(filename)) return;
var stat = fs.statSync(filename);
if (stat.isDirectory(filename)) {
(function () {
var dirname = filename;
_.each(util.readdir(dirname), function (filename) {
var src = path.join(dirname, filename);
handleFile(src, filename);
});
})();
} else {
write(filename, filename);
}
}
if (!commander.skipInitialBuild) {
_.each(filenames, handle);
}
if (commander.watch) {
(function () {
var chokidar = util.requireChokidar();
_.each(filenames, function (dirname) {
var watcher = chokidar.watch(dirname, {
persistent: true,
ignoreInitial: true,
awaitWriteFinish: {
stabilityThreshold: 500,
pollInterval: 100
}
});
_.each(["add", "change"], function (type) {
watcher.on(type, function (filename) {
var relative = path.relative(dirname, filename) || filename;
try {
handleFile(filename, relative);
} catch (err) {
console.error(err.stack);
}
});
});
});
})();
}
};
"use strict";
var _stringify = require("babel-runtime/core-js/json/stringify");
var _stringify2 = _interopRequireDefault(_stringify);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var convertSourceMap = require("convert-source-map");
var pathExists = require("path-exists");
var sourceMap = require("source-map");
var slash = require("slash");
var path = require("path");
var util = require("./util");
var fs = require("fs");
var _ = require("lodash");
module.exports = function (commander, filenames, opts) {
if (commander.sourceMaps === "inline") {
opts.sourceMaps = true;
}
var results = [];
var buildResult = function buildResult() {
var map = new sourceMap.SourceMapGenerator({
file: path.basename(commander.outFile || "") || "stdout",
sourceRoot: opts.sourceRoot
});
var code = "";
var offset = 0;
_.each(results, function (result) {
var filename = result.filename || "stdout";
code += result.code + "\n";
if (result.map) {
(function () {
var consumer = new sourceMap.SourceMapConsumer(result.map);
var sourceFilename = filename;
if (commander.outFile) {
sourceFilename = path.relative(path.dirname(commander.outFile), sourceFilename);
}
sourceFilename = slash(sourceFilename);
map._sources.add(sourceFilename);
map.setSourceContent(sourceFilename, result.actual);
consumer.eachMapping(function (mapping) {
map._mappings.add({
generatedLine: mapping.generatedLine + offset,
generatedColumn: mapping.generatedColumn,
originalLine: mapping.source == null ? null : mapping.originalLine,
originalColumn: mapping.source == null ? null : mapping.originalColumn,
source: mapping.source == null ? null : sourceFilename
});
});
offset = code.split("\n").length;
})();
}
});
if (commander.sourceMaps === "inline" || !commander.outFile && commander.sourceMaps) {
code += "\n" + convertSourceMap.fromObject(map).toComment();
}
return {
map: map,
code: code
};
};
var output = function output() {
var result = buildResult();
if (commander.outFile) {
if (commander.sourceMaps && commander.sourceMaps !== "inline") {
var mapLoc = commander.outFile + ".map";
result.code = util.addSourceMappingUrl(result.code, mapLoc);
fs.writeFileSync(mapLoc, (0, _stringify2.default)(result.map));
}
fs.writeFileSync(commander.outFile, result.code);
} else {
process.stdout.write(result.code + "\n");
}
};
var stdin = function stdin() {
var code = "";
process.stdin.setEncoding("utf8");
process.stdin.on("readable", function () {
var chunk = process.stdin.read();
if (chunk !== null) code += chunk;
});
process.stdin.on("end", function () {
results.push(util.transform(commander.filename, code));
output();
});
};
var walk = function walk() {
var _filenames = [];
results = [];
_.each(filenames, function (filename) {
if (!pathExists.sync(filename)) return;
var stat = fs.statSync(filename);
if (stat.isDirectory()) {
(function () {
var dirname = filename;
_.each(util.readdirFilter(filename), function (filename) {
_filenames.push(path.join(dirname, filename));
});
})();
} else {
_filenames.push(filename);
}
});
_.each(_filenames, function (filename) {
if (util.shouldIgnore(filename)) return;
var data = util.compile(filename);
if (data.ignored) return;
results.push(data);
});
output();
};
var files = function files() {
if (!commander.skipInitialBuild) {
walk();
}
if (commander.watch) {
var chokidar = util.requireChokidar();
chokidar.watch(filenames, {
persistent: true,
ignoreInitial: true,
awaitWriteFinish: {
stabilityThreshold: 500,
pollInterval: 100
}
}).on("all", function (type, filename) {
if (util.shouldIgnore(filename) || !util.canCompile(filename, commander.extensions)) return;
if (type === "add" || type === "change") {
util.log(type + " " + filename);
try {
walk();
} catch (err) {
console.error(err.stack);
}
}
});
}
};
if (filenames.length) {
files();
} else {
stdin();
}
};

eOS Build

Enable Canonical Partners repository in Software and Updates

Update

sudo apt update
sudo apt full-upgrade

Timeshift

sudo apt-add-repository -y ppa:teejee2008/ppa
sudo apt update
sudo apt install timeshift

Hardware and Tweaks

Battery Saving

sudo apt-add-repository ppa:linrunner/tlp
sudo apt update
sudo apt install tlp tlp-rdw
sudo tlp start

Elementary Tweaks

sudo apt install unity-tweak-tool

Ubuntu Related Stuff

Restricted extras

sudo apt install ubuntu-restricted-extras

Media Codecs

sudo apt install libavcodec-extra

General Apps

sudo apt install vlc

Chrome

Install chrome on the dev channel

Utils

  • indicator-multiload
sudo add-apt-repository ppa:indicator-multiload/stable-daily
sudo apt update
sudo apt install indicator-multiload
  • Google Drive Install below and configure in gnome-control-center
sudo apt install gnome-control-center gnome-online-accounts

Development Tools

Java

sudo apt install openjdk-8-jdk

Atom

Install deb file from Atom.io Install sync-settings package and load packages from generated github gist

Node

Install nvm and install the latest node

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.2/install.sh | bash

Copy local-npm.service into /etc/systemd/system and run:

nvm install <latest_version>
nvm alias default <latest_version>

npm i -g local-npm

systemctl daemon-reload
systemctl enable local-npm.service
systemctl start local-npm.service
npm config set registry http://127.0.0.1:5080

Install global packages one-time!

npm i -g babel babel-cli babel-eslint bower browserify bump-cli caniuse-cmd chai chokidar-cli edison-cli electron electron-installer-debian electron-packager eslint eslint-config-airbnb-base eslint-plugin-babel eslint-plugin-html eslint-plugin-import eslint-plugin-react filesystem-bower-resolver glob-cli hpm-cli htmlhint http-server ifconfig local-npm mocha nodemon npm-check-updates ntl svgo uglify-js vulcanize webfont-dl
npm i -g gulpjs/gulp-cli#4.0

ArangoDB

Download and install from here

g++/gcc Toolchain

sudo apt install g++

Utils

  • 7zip
sudo apt install p7zip
  • Log viewer
sudo apt install gnome-system-log
  • Bash Config Copy in .bashrc, .bash_profile, .bash_aliases and .dircolors from this gist

  • Bash Git Prompt

git clone https://github.com/magicmonty/bash-git-prompt.git ~/.bash-git-prompt

Cleanup

sudo apt autoremove
sudo apt autoclean
[Unit]
Description=local-npm Service
[Service]
ExecStart=/home/sean/.nvm/versions/node/v6.5.0/bin/node /home/sean/.nvm/versions/node/v6.5.0/lib/node_modules/local-npm/lib/bin.js -d /home/sean/.local-npm
Restart=always
RestartSec=10 # Restart service after 10 seconds if node service crashes
StandardOutput=syslog # Output to syslog
StandardError=syslog # Output to syslog
SyslogIdentifier=nodejs-example
[Install]
WantedBy=multi-user.target
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment