theprogrammablemind 7.5.8-beta.0 → 7.5.8-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client.js +129 -93
- package/package.json +1 -1
- package/runtime.js +1 -1
- package/src/config.js +112 -92
- package/src/helpers.js +9 -0
package/client.js
CHANGED
@@ -110,6 +110,9 @@ class ErrorReason extends Error {
|
|
110
110
|
const setupArgs = (args, config, logs, hierarchy) => {
|
111
111
|
config.setArgs(args)
|
112
112
|
args.calls = new InitCalls(config.name)
|
113
|
+
if (global.theprogrammablemind && global.theprogrammablemind.loadForTesting) {
|
114
|
+
args.calls = new InitCalls(Object.keys(global.theprogrammablemind.loadForTesting)[0])
|
115
|
+
}
|
113
116
|
args.km = (name) => config.getConfig(name)
|
114
117
|
args.error = (context) => {
|
115
118
|
throw new ErrorReason(context)
|
@@ -149,7 +152,10 @@ const setupArgs = (args, config, logs, hierarchy) => {
|
|
149
152
|
args.g = (c) => config.getGenerators(logs).apply(args, c)
|
150
153
|
args.gp = (c) => config.getGenerators(logs).apply(args, { ...c, paraphrase: true, isResponse: false, response: false})
|
151
154
|
args.gr = (c) => config.getGenerators(logs).apply(args, { ...c, paraphrase: false, isResponse: true })
|
152
|
-
|
155
|
+
if (!logs) {
|
156
|
+
debugger
|
157
|
+
}
|
158
|
+
args.e = (c) => config.getEvaluator(args.s, args.calls, logs, c)
|
153
159
|
args.log = (message) => logs.push(message)
|
154
160
|
// config.getAddedArgs(args)
|
155
161
|
args.gs = gs(args.g)
|
@@ -359,6 +365,9 @@ const processContextsB = ({ config, hierarchy, semantics, generators, json, isTe
|
|
359
365
|
|
360
366
|
const objects = config.get('objects')
|
361
367
|
const args = { objects, isResponse: true, response: json, isTest, getObjects: getObjects(objects) }
|
368
|
+
if (!json.logs) {
|
369
|
+
json.logs = []
|
370
|
+
}
|
362
371
|
setupArgs(args, config, json.logs, hierarchy)
|
363
372
|
const toDo = [...contexts]
|
364
373
|
args.insert = (context) => toDo.unshift(context)
|
@@ -654,7 +663,7 @@ const _process = async (config, query, { initializer, commandLineArgs, credentia
|
|
654
663
|
return response
|
655
664
|
} catch(error) {
|
656
665
|
error.query = query
|
657
|
-
|
666
|
+
errorHandler(error)
|
658
667
|
}
|
659
668
|
}
|
660
669
|
|
@@ -688,11 +697,13 @@ const getConfigForTest = (config, testConfig) => {
|
|
688
697
|
return configForTest
|
689
698
|
}
|
690
699
|
|
691
|
-
const runTest = async (config, expected, { verbose, afterTest, testConfig, debug }) => {
|
700
|
+
const runTest = async (config, expected, { args, verbose, afterTest, testConfig, debug }) => {
|
692
701
|
const test = expected.query
|
693
702
|
// initialize in between test so state is not preserved since the test was adding without state
|
694
703
|
config.rebuild()
|
695
|
-
|
704
|
+
if (!args.dontAddAssociations) {
|
705
|
+
config.addAssociationsFromTests(config.tests)
|
706
|
+
}
|
696
707
|
// config.addAssocationsFromTests(
|
697
708
|
const errorHandler = (error) => {
|
698
709
|
if (error.metadata) {
|
@@ -1344,7 +1355,11 @@ const knowledgeModule = async ({
|
|
1344
1355
|
if (config.needsRebuild(template.template, template.instance)) {
|
1345
1356
|
throw `This module "${config.name}" cannot be used because the instance file needs rebuilding. Run on the command line with no arguements or the -rt argument to rebuild.`
|
1346
1357
|
}
|
1347
|
-
|
1358
|
+
try {
|
1359
|
+
config.load(template.template, template.instance)
|
1360
|
+
} catch( e ) {
|
1361
|
+
errorHandler(e)
|
1362
|
+
}
|
1348
1363
|
}
|
1349
1364
|
}
|
1350
1365
|
if (isProcess) {
|
@@ -1353,6 +1368,13 @@ const knowledgeModule = async ({
|
|
1353
1368
|
description: 'Entodicton knowledge module'
|
1354
1369
|
})
|
1355
1370
|
|
1371
|
+
const helpDebugAssociation = 'In order to get a debug break when a specific association is created set the DEBUG_ASSOCIATION environment variable to the JSON of the association to break on. For example DEBUG_ASSOCIATION=\'["the#0", "mammel#0"]\' })'
|
1372
|
+
const helpDebugHierarchy = 'In order to get a debug break when a specific hierarchy is created set the DEBUG_HIERARCHY environment variable to the JSON of the child-parent pair to break on. For example DEBUG_HIERARCHY=\'["cat#1", "mammel#1"]\' })'
|
1373
|
+
const helpDebugPriority = 'In order to get a debug break when a specific set of priorities is created set set DEBUG_PRIORITY environment variable to the JSON of the priorities that you want to break on. For example DEBUG_PRIORITY=\'["verb#0", "article#0"]\' })'
|
1374
|
+
const helpDebugBridge = 'In order to get a debug break when a specific bridge is created set the DEBUG_BRIDGE environment variable to id/level to break on. For example DEBUG_BRIDGE=\'id#level\' })'
|
1375
|
+
const helpDebugOperator = 'In order to get a debug break when a specific hierarcy is created set the DEBUG_OPERATOR environment variable to debug any config loaded. For example DEBUG_OPERATOR=\'([operator] ([arg]))\' })'
|
1376
|
+
|
1377
|
+
|
1356
1378
|
parser.add_argument('-tmn', '--testModuleName', { help: 'When running tests instead of using the current modules tests use the specified modules tests' })
|
1357
1379
|
parser.add_argument('-t', '--test', { action: 'store_true', help: 'Run the tests. Create tests by running with the --query + --save flag' })
|
1358
1380
|
parser.add_argument('-tv', '--testVerbose', { action: 'store_true', help: 'Run the tests in verbose mode. Create tests by running with the --query or --loop with the --save flag' })
|
@@ -1379,30 +1401,34 @@ const knowledgeModule = async ({
|
|
1379
1401
|
parser.add_argument('-dic', '--debugIncludeConvolutions', { action: 'store_true', help: 'When running with the --debugIncludeConvolutions flag the logs will include convolutions which are somewhat annoying verbose. Default is false' })
|
1380
1402
|
parser.add_argument('-dl', '--debugLoops', { action: 'store_true', help: 'When running with the --debugLoops flag the logs calls to semantics and generators will be immediately written to the console '})
|
1381
1403
|
parser.add_argument('-d', '--debug', { action: 'store_true', help: 'When running with the --debug flag this set the debug flag in the config' })
|
1382
|
-
parser.add_argument('-da', '--debugAssociation', { help:
|
1383
|
-
parser.add_argument('-dh', '--debugHierarchy', { help:
|
1384
|
-
parser.add_argument('-
|
1385
|
-
parser.add_argument('-
|
1404
|
+
parser.add_argument('-da', '--debugAssociation', { help: helpDebugAssociation })
|
1405
|
+
parser.add_argument('-dh', '--debugHierarchy', { help: helpDebugHierarchy })
|
1406
|
+
parser.add_argument('-dp', '--debugPriority', { help: helpDebugPriority })
|
1407
|
+
parser.add_argument('-db', '--debugBridge', { help: helpDebugBridge })
|
1408
|
+
parser.add_argument('-do', '--debugOperator', { help: helpDebugOperator })
|
1386
1409
|
|
1387
1410
|
const args = parser.parse_args()
|
1388
1411
|
args.count = args.count || 1
|
1389
1412
|
|
1390
1413
|
if (args.debugAssociation) {
|
1391
|
-
|
1414
|
+
console.log(helpDebugAssociation)
|
1415
|
+
runtime.process.exit(-1)
|
1392
1416
|
}
|
1393
1417
|
if (args.debugHierarchy) {
|
1394
|
-
|
1418
|
+
console.log(helpDebugHierarchy)
|
1419
|
+
runtime.process.exit(-1)
|
1420
|
+
}
|
1421
|
+
if (args.debugPriority) {
|
1422
|
+
console.log(helpDebugPriority)
|
1423
|
+
runtime.process.exit(-1)
|
1395
1424
|
}
|
1396
1425
|
if (args.debugBridge) {
|
1397
|
-
|
1398
|
-
|
1399
|
-
if (global.entodictonDebugBridge.length !== 2) {
|
1400
|
-
console.log('Expected DEBUG_BRIDGE to be of the form "id/level"');
|
1401
|
-
}
|
1426
|
+
console.log(helpDebugBridge)
|
1427
|
+
runtime.process.exit(-1)
|
1402
1428
|
}
|
1403
1429
|
if (args.debugOperator) {
|
1404
|
-
|
1405
|
-
|
1430
|
+
console.log(helpDebugOperator)
|
1431
|
+
runtime.process.exit(-1)
|
1406
1432
|
}
|
1407
1433
|
|
1408
1434
|
if (args.clean) {
|
@@ -1471,87 +1497,94 @@ const knowledgeModule = async ({
|
|
1471
1497
|
}
|
1472
1498
|
*/
|
1473
1499
|
|
1474
|
-
|
1475
|
-
|
1476
|
-
|
1477
|
-
|
1478
|
-
for (const test of config.tests) {
|
1479
|
-
console.log(`${counter} - ${test.query}`)
|
1480
|
-
counter += 1
|
1481
|
-
}
|
1482
|
-
}
|
1483
|
-
if (args.print.includes('c')) {
|
1484
|
-
const { data } = setupProcessB({ config })
|
1485
|
-
console.log("Config as sent to server")
|
1486
|
-
console.log(JSON.stringify(data, null, 2));
|
1500
|
+
let configPrinted = false
|
1501
|
+
const printConfig = () => {
|
1502
|
+
if (configPrinted) {
|
1503
|
+
return
|
1487
1504
|
}
|
1505
|
+
configPrinted = true
|
1506
|
+
if (args.print) {
|
1507
|
+
if (args.print.includes('t')) {
|
1508
|
+
console.log("Test queries")
|
1509
|
+
let counter = 0
|
1510
|
+
for (const test of config.tests) {
|
1511
|
+
console.log(`${counter} - ${test.query}`)
|
1512
|
+
counter += 1
|
1513
|
+
}
|
1514
|
+
}
|
1515
|
+
if (args.print.includes('c')) {
|
1516
|
+
const { data } = setupProcessB({ config })
|
1517
|
+
console.log("Config as sent to server")
|
1518
|
+
console.log(JSON.stringify(data, null, 2));
|
1519
|
+
}
|
1488
1520
|
|
1489
|
-
|
1490
|
-
|
1491
|
-
|
1492
|
-
|
1521
|
+
if (args.print.includes('l')) {
|
1522
|
+
console.log('Module load ordering')
|
1523
|
+
for (const km of config.configs) {
|
1524
|
+
console.log(` ${km.name}`)
|
1525
|
+
}
|
1493
1526
|
}
|
1494
|
-
|
1495
|
-
|
1496
|
-
|
1497
|
-
|
1527
|
+
if (args.print.includes('w')) {
|
1528
|
+
for (const word in config.config.words) {
|
1529
|
+
console.log(word.concat(' ', ...config.config.words[word].map((def) => JSON.stringify(def))))
|
1530
|
+
}
|
1498
1531
|
}
|
1499
|
-
|
1500
|
-
|
1501
|
-
|
1502
|
-
|
1532
|
+
if (args.print.includes('b')) {
|
1533
|
+
for (const bridge of config.config.bridges) {
|
1534
|
+
console.log(JSON.stringify(bridge))
|
1535
|
+
}
|
1503
1536
|
}
|
1504
|
-
|
1505
|
-
|
1506
|
-
|
1507
|
-
|
1537
|
+
if (args.print.includes('o')) {
|
1538
|
+
for (const operator of config.config.operators) {
|
1539
|
+
console.log(JSON.stringify(operator))
|
1540
|
+
}
|
1508
1541
|
}
|
1509
|
-
|
1510
|
-
|
1511
|
-
|
1512
|
-
|
1513
|
-
|
1514
|
-
|
1515
|
-
|
1516
|
-
|
1517
|
-
|
1518
|
-
|
1519
|
-
|
1520
|
-
|
1542
|
+
if (args.print.includes('j')) {
|
1543
|
+
const { data } = setupProcessB( { config } )
|
1544
|
+
console.log(JSON.stringify(data, null, 2))
|
1545
|
+
}
|
1546
|
+
if (args.print.includes('a')) {
|
1547
|
+
console.log('associations ================')
|
1548
|
+
const properties = ['negative', 'positive']
|
1549
|
+
for (let property of properties) {
|
1550
|
+
console.log(` ${property} ===============`)
|
1551
|
+
for (let association of config.config.associations[property]) {
|
1552
|
+
console.log(` ${JSON.stringify(association)}`)
|
1553
|
+
}
|
1521
1554
|
}
|
1522
1555
|
}
|
1523
|
-
|
1524
|
-
|
1525
|
-
console.log(JSON.stringify(config.config.objects, null, 2))
|
1526
|
-
}
|
1527
|
-
if (args.print.includes('p')) {
|
1528
|
-
for (let priority of config.config.priorities) {
|
1529
|
-
console.log(JSON.stringify(priority))
|
1556
|
+
if (args.print.includes('d')) {
|
1557
|
+
console.log(JSON.stringify(config.config.objects, null, 2))
|
1530
1558
|
}
|
1531
|
-
|
1532
|
-
|
1533
|
-
|
1534
|
-
|
1559
|
+
if (args.print.includes('p')) {
|
1560
|
+
for (let priority of config.config.priorities) {
|
1561
|
+
console.log(JSON.stringify(priority))
|
1562
|
+
}
|
1535
1563
|
}
|
1536
|
-
|
1537
|
-
|
1538
|
-
|
1539
|
-
for (const semantic of easyToRead) {
|
1540
|
-
semantic.match = semantic.match.toString()
|
1541
|
-
semantic.apply = semantic.apply.toString()
|
1542
|
-
if (semantic.applyWrapped) {
|
1543
|
-
semantic.applyWrapped = semantic.applyWrapped.toString()
|
1564
|
+
if (args.print.includes('h')) {
|
1565
|
+
for (let edge of config.config.hierarchy) {
|
1566
|
+
console.log(JSON.stringify(edge))
|
1544
1567
|
}
|
1545
1568
|
}
|
1546
|
-
|
1547
|
-
|
1548
|
-
|
1549
|
-
|
1550
|
-
|
1551
|
-
|
1552
|
-
|
1569
|
+
if (args.print.includes('g')) {
|
1570
|
+
const easyToRead = _.cloneDeep(config.config.generators)
|
1571
|
+
for (const semantic of easyToRead) {
|
1572
|
+
semantic.match = semantic.match.toString()
|
1573
|
+
semantic.apply = semantic.apply.toString()
|
1574
|
+
if (semantic.applyWrapped) {
|
1575
|
+
semantic.applyWrapped = semantic.applyWrapped.toString()
|
1576
|
+
}
|
1577
|
+
}
|
1578
|
+
console.dir(easyToRead)
|
1579
|
+
}
|
1580
|
+
if (args.print.includes('s')) {
|
1581
|
+
const easyToRead = _.cloneDeep(config.config.semantics)
|
1582
|
+
for (const semantic of easyToRead) {
|
1583
|
+
semantic.match = semantic.match.toString()
|
1584
|
+
semantic.apply = semantic.apply.toString()
|
1585
|
+
}
|
1586
|
+
console.dir(easyToRead)
|
1553
1587
|
}
|
1554
|
-
console.dir(easyToRead)
|
1555
1588
|
}
|
1556
1589
|
}
|
1557
1590
|
|
@@ -1586,12 +1619,7 @@ const knowledgeModule = async ({
|
|
1586
1619
|
test = useTestConfig.name
|
1587
1620
|
|
1588
1621
|
}
|
1589
|
-
runTests(config, test, { debug: args.debug, testConfig: useTestConfig, verbose: args.testVerbose || args.testAllVerbose, stopAtFirstError: !args.testAllVerbose }).then((results) => {
|
1590
|
-
if (results.length > 0 && args.vimdiff) {
|
1591
|
-
for (const result of results) {
|
1592
|
-
vimdiff(result.actual, result.expected)
|
1593
|
-
}
|
1594
|
-
}
|
1622
|
+
runTests(config, test, { args, debug: args.debug, testConfig: useTestConfig, verbose: args.testVerbose || args.testAllVerbose, stopAtFirstError: !args.testAllVerbose }).then((results) => {
|
1595
1623
|
let newError = false
|
1596
1624
|
if (results.length > 0) {
|
1597
1625
|
let headerShown = false
|
@@ -1650,6 +1678,12 @@ const knowledgeModule = async ({
|
|
1650
1678
|
headerShown = true
|
1651
1679
|
}
|
1652
1680
|
}
|
1681
|
+
} else {
|
1682
|
+
if (results.length > 0 && args.vimdiff) {
|
1683
|
+
for (const result of results) {
|
1684
|
+
vimdiff(result.actual, result.expected)
|
1685
|
+
}
|
1686
|
+
}
|
1653
1687
|
}
|
1654
1688
|
if (!headerShown) {
|
1655
1689
|
if (!(useTestConfig.check && useTestConfig.check.length > 0)) {
|
@@ -1711,11 +1745,12 @@ const knowledgeModule = async ({
|
|
1711
1745
|
}
|
1712
1746
|
config.beforeQuery({ query: args.query, isModule: false, objects })
|
1713
1747
|
try {
|
1714
|
-
processResults(_process(config, args.query, { commandLineArgs: args, dontAddAssociations: args.dontAddAssociations, writeTests: args.save || args.saveDeveloper, saveDeveloper: args.saveDeveloper, testConfig, testsFN: test }))
|
1748
|
+
await processResults(_process(config, args.query, { commandLineArgs: args, dontAddAssociations: args.dontAddAssociations, writeTests: args.save || args.saveDeveloper, saveDeveloper: args.saveDeveloper, testConfig, testsFN: test }))
|
1715
1749
|
} catch( error ) {
|
1716
1750
|
console.log('Error', error);
|
1717
1751
|
}
|
1718
1752
|
}
|
1753
|
+
printConfig()
|
1719
1754
|
} else {
|
1720
1755
|
config.addAssociationsFromTests(config.tests);
|
1721
1756
|
//for (let query in config.tests) {
|
@@ -1723,6 +1758,7 @@ const knowledgeModule = async ({
|
|
1723
1758
|
//}
|
1724
1759
|
module()
|
1725
1760
|
}
|
1761
|
+
|
1726
1762
|
}
|
1727
1763
|
|
1728
1764
|
/*
|
package/package.json
CHANGED
package/runtime.js
CHANGED
package/src/config.js
CHANGED
@@ -5,6 +5,7 @@ const { Generators } = require('./generators')
|
|
5
5
|
const client = require('../client')
|
6
6
|
const DigraphInternal = require('./digraph_internal')
|
7
7
|
const helpers = require('./helpers')
|
8
|
+
const { ecatch } = require('./helpers')
|
8
9
|
const runtime = require('../runtime')
|
9
10
|
const _ = require('lodash')
|
10
11
|
|
@@ -22,97 +23,102 @@ const indent = (string, indent) => {
|
|
22
23
|
}
|
23
24
|
|
24
25
|
const handleBridgeProps = (config, bridge) => {
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
bridge.level = 0
|
30
|
-
}
|
31
|
-
if (bridge.children) {
|
32
|
-
for (let child of bridge.children) {
|
33
|
-
config.addHierarchy(child, bridge.id)
|
34
|
-
}
|
35
|
-
}
|
36
|
-
if (bridge.parents) {
|
37
|
-
for (let parent of bridge.parents) {
|
38
|
-
config.addHierarchy(bridge.id, parent)
|
39
|
-
}
|
40
|
-
}
|
41
|
-
if (bridge.isA) {
|
42
|
-
for (let parent of bridge.isA) {
|
43
|
-
config.addHierarchy(bridge.id, parent)
|
44
|
-
}
|
45
|
-
}
|
46
|
-
if (bridge.before) {
|
47
|
-
for (let after of bridge.before) {
|
48
|
-
if (typeof after == 'string') {
|
49
|
-
after = [after, 0]
|
26
|
+
ecatch(`While processing the bridge for ${bridge.id}#${bridge.level}`,
|
27
|
+
() => {
|
28
|
+
if (!bridge.bridge) {
|
29
|
+
bridge.bridge = "{ ...next(operator) }"
|
50
30
|
}
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
}
|
59
|
-
|
60
|
-
|
61
|
-
|
31
|
+
if (!bridge.level) {
|
32
|
+
bridge.level = 0
|
33
|
+
}
|
34
|
+
if (bridge.children) {
|
35
|
+
for (let child of bridge.children) {
|
36
|
+
config.addHierarchy(child, bridge.id)
|
37
|
+
}
|
38
|
+
}
|
39
|
+
if (bridge.parents) {
|
40
|
+
for (let parent of bridge.parents) {
|
41
|
+
config.addHierarchy(bridge.id, parent)
|
42
|
+
}
|
43
|
+
}
|
44
|
+
if (bridge.isA) {
|
45
|
+
for (let parent of bridge.isA) {
|
46
|
+
config.addHierarchy(bridge.id, parent)
|
47
|
+
}
|
48
|
+
}
|
49
|
+
if (bridge.before) {
|
50
|
+
for (let after of bridge.before) {
|
51
|
+
if (typeof after == 'string') {
|
52
|
+
after = [after, 0]
|
53
|
+
}
|
54
|
+
config.addPriorities([after, [bridge.id, bridge.level]])
|
55
|
+
}
|
56
|
+
}
|
57
|
+
if (bridge.words) {
|
58
|
+
for (let def of bridge.words) {
|
59
|
+
if (typeof def == 'string') {
|
60
|
+
config.addWordInternal(def, {"id": bridge.id, "initial": `{ value: "${def}"}` })
|
61
|
+
} else {
|
62
|
+
const word = def.word
|
63
|
+
def = { initial: JSON.stringify(def), id: bridge.id, word: undefined }
|
64
|
+
config.addWordInternal(word, def)
|
65
|
+
}
|
66
|
+
}
|
67
|
+
}
|
68
|
+
if (bridge.generator) {
|
69
|
+
config.config.generators.unshift(bridge.generator)
|
70
|
+
}
|
71
|
+
if (bridge.generators) {
|
72
|
+
const generators = [...bridge.generators]
|
73
|
+
generators.reverse()
|
74
|
+
for (let generator of generators) {
|
75
|
+
config.config.generators.unshift(generator)
|
76
|
+
}
|
77
|
+
}
|
78
|
+
if (bridge.generatorpr) {
|
79
|
+
bridge.generatorp = bridge.generatorpr
|
80
|
+
bridge.generatorr = bridge.generatorpr
|
81
|
+
}
|
82
|
+
if (bridge.generatorp) {
|
83
|
+
config.config.generators.unshift({
|
84
|
+
where: bridge.generatorp.where || bridge.where || client.where(4),
|
85
|
+
// match: ({context}) => bridge.id == context.marker && context.paraphrase,
|
86
|
+
match: ({context}) => bridge.id == context.marker && context.level == bridge.level + 1 && context.paraphrase,
|
87
|
+
apply: (args) => bridge.generatorp(args),
|
88
|
+
applyWrapped: bridge.generatorp,
|
89
|
+
property: 'generatorp',
|
90
|
+
})
|
91
|
+
}
|
92
|
+
if (bridge.generatorr) {
|
93
|
+
config.config.generators.unshift({
|
94
|
+
// TODO merge response and isResponse
|
95
|
+
where: bridge.generatorr.where || bridge.where || client.where(3),
|
96
|
+
match: ({context}) => bridge.id == context.marker && !context.paraphrase && (context.response || context.isResponse),
|
97
|
+
apply: (args) => bridge.generatorr(args),
|
98
|
+
applyWrapped: bridge.generatorr,
|
99
|
+
property: 'generatorr',
|
100
|
+
})
|
101
|
+
}
|
102
|
+
if (bridge.evaluator) {
|
103
|
+
config.config.semantics.unshift({
|
104
|
+
where: bridge.evaluator.where || bridge.where || client.where(3),
|
105
|
+
match: ({context}) => bridge.id == context.marker && context.evaluate,
|
106
|
+
apply: (args) => bridge.evaluator(args),
|
107
|
+
applyWrapped: bridge.evaluator,
|
108
|
+
property: 'evaluator',
|
109
|
+
})
|
110
|
+
}
|
111
|
+
if (bridge.semantic) {
|
112
|
+
config.config.semantics.unshift({
|
113
|
+
where: bridge.semantic.where || bridge.where || client.where(3),
|
114
|
+
match: ({context}) => bridge.id == context.marker,
|
115
|
+
apply: (args) => bridge.semantic(args),
|
116
|
+
applyWrapped: bridge.semantic,
|
117
|
+
property: 'semantic',
|
118
|
+
})
|
62
119
|
}
|
63
120
|
}
|
64
|
-
|
65
|
-
if (bridge.generator) {
|
66
|
-
config.config.generators.unshift(bridge.generator)
|
67
|
-
}
|
68
|
-
if (bridge.generators) {
|
69
|
-
const generators = [...bridge.generators]
|
70
|
-
generators.reverse()
|
71
|
-
for (let generator of generators) {
|
72
|
-
config.config.generators.unshift(generator)
|
73
|
-
}
|
74
|
-
}
|
75
|
-
if (bridge.generatorpr) {
|
76
|
-
bridge.generatorp = bridge.generatorpr
|
77
|
-
bridge.generatorr = bridge.generatorpr
|
78
|
-
}
|
79
|
-
if (bridge.generatorp) {
|
80
|
-
config.config.generators.unshift({
|
81
|
-
where: bridge.generatorp.where || bridge.where || client.where(4),
|
82
|
-
match: ({context}) => bridge.id == context.marker && context.paraphrase,
|
83
|
-
apply: (args) => bridge.generatorp(args),
|
84
|
-
applyWrapped: bridge.generatorp,
|
85
|
-
property: 'generatorp',
|
86
|
-
})
|
87
|
-
}
|
88
|
-
if (bridge.generatorr) {
|
89
|
-
config.config.generators.unshift({
|
90
|
-
// TODO merge response and isResponse
|
91
|
-
where: bridge.generatorr.where || bridge.where || client.where(3),
|
92
|
-
match: ({context}) => bridge.id == context.marker && !context.paraphrase && (context.response || context.isResponse),
|
93
|
-
apply: (args) => bridge.generatorr(args),
|
94
|
-
applyWrapped: bridge.generatorr,
|
95
|
-
property: 'generatorr',
|
96
|
-
})
|
97
|
-
}
|
98
|
-
if (bridge.evaluator) {
|
99
|
-
config.config.semantics.unshift({
|
100
|
-
where: bridge.evaluator.where || bridge.where || client.where(3),
|
101
|
-
match: ({context}) => bridge.id == context.marker && context.evaluate,
|
102
|
-
apply: (args) => bridge.evaluator(args),
|
103
|
-
applyWrapped: bridge.evaluator,
|
104
|
-
property: 'evaluator',
|
105
|
-
})
|
106
|
-
}
|
107
|
-
if (bridge.semantic) {
|
108
|
-
config.config.semantics.unshift({
|
109
|
-
where: bridge.semantic.where || bridge.where || client.where(3),
|
110
|
-
match: ({context}) => bridge.id == context.marker,
|
111
|
-
apply: (args) => bridge.semantic(args),
|
112
|
-
applyWrapped: bridge.semantic,
|
113
|
-
property: 'semantic',
|
114
|
-
})
|
115
|
-
}
|
121
|
+
)
|
116
122
|
}
|
117
123
|
|
118
124
|
const handleCalculatedProps = (baseConfig, moreConfig) => {
|
@@ -137,6 +143,14 @@ if (runtime.process.env.DEBUG_HIERARCHY) {
|
|
137
143
|
global.entodictonDebugHierarchy = JSON.parse(runtime.process.env.DEBUG_HIERARCHY)
|
138
144
|
}
|
139
145
|
|
146
|
+
if (runtime.process.env.DEBUG_PRIORITY) {
|
147
|
+
global.entodictonDebugPriority = JSON.parse(runtime.process.env.DEBUG_PRIORITY)
|
148
|
+
}
|
149
|
+
|
150
|
+
if (runtime.process.env.DEBUG_ASSOCIATION) {
|
151
|
+
global.entodictonDebugAssociation = JSON.parse(runtime.process.env.DEBUG_ASSOCIATION)
|
152
|
+
}
|
153
|
+
|
140
154
|
if (runtime.process.env.DEBUG_BRIDGE) {
|
141
155
|
// id/level
|
142
156
|
global.entodictonDebugBridge = runtime.process.env.DEBUG_BRIDGE.split('/')
|
@@ -614,8 +628,9 @@ class Config {
|
|
614
628
|
return instance
|
615
629
|
}
|
616
630
|
*/
|
617
|
-
getEvaluator (s, log, context) {
|
631
|
+
getEvaluator (s, calls, log, context) {
|
618
632
|
const instance = s({ ...context, evaluate: true })
|
633
|
+
calls.touch(instance)
|
619
634
|
if (!instance.evalue && !instance.verbatim && !instance.value) {
|
620
635
|
this.warningNotEvaluated(log, context);
|
621
636
|
}
|
@@ -777,10 +792,15 @@ class Config {
|
|
777
792
|
if (!this.config.priorities) {
|
778
793
|
this.config.priorities = []
|
779
794
|
}
|
795
|
+
if (global.entodictonDebugPriority) {
|
796
|
+
if (helpers.safeEquals(entodictonDebugPriority, priorities)) {
|
797
|
+
debugger; // debug hierarchy hit
|
798
|
+
}
|
799
|
+
}
|
780
800
|
this.config.priorities.push(priorities)
|
781
801
|
this._delta.json.priorities.push({ action: 'add', priorities })
|
782
802
|
}
|
783
|
-
|
803
|
+
|
784
804
|
addHierarchy (child, parent) {
|
785
805
|
if (child && parent || !child || Array.isArray(child) || (typeof child == 'string' && !parent)) {
|
786
806
|
this.addHierarchyChildParent(child, parent)
|
@@ -799,7 +819,7 @@ class Config {
|
|
799
819
|
throw `addHierarchy expected parent property to be a string. got ${JSON.stringify(parent)}`
|
800
820
|
}
|
801
821
|
if (global.entodictonDebugHierarchy) {
|
802
|
-
if (
|
822
|
+
if (helpers.safeEquals(entodictonDebugHierarchy, [child, parent])) {
|
803
823
|
debugger; // debug hierarchy hit
|
804
824
|
}
|
805
825
|
}
|
@@ -846,7 +866,7 @@ class Config {
|
|
846
866
|
}
|
847
867
|
const bridges = this.config.bridges
|
848
868
|
const def = Object.assign({}, bridge, { uuid: this._uuid })
|
849
|
-
|
869
|
+
|
850
870
|
if (global.entodictonDebugBridge) {
|
851
871
|
if (global.entodictonDebugBridge[0] == bridge.id && global.entodictonDebugBridge[1] == bridge.level) {
|
852
872
|
debugger; // debug hierarchy hit
|
package/src/helpers.js
CHANGED
@@ -309,7 +309,16 @@ const functionsToStrings = (config) => {
|
|
309
309
|
return config
|
310
310
|
}
|
311
311
|
|
312
|
+
const ecatch = (where, call) => {
|
313
|
+
try {
|
314
|
+
return call()
|
315
|
+
} catch( e ) {
|
316
|
+
throw new Error(`${where} ${e}`)
|
317
|
+
}
|
318
|
+
}
|
319
|
+
|
312
320
|
module.exports = {
|
321
|
+
ecatch,
|
313
322
|
functionsToStrings,
|
314
323
|
updateQueries,
|
315
324
|
mapInPlace,
|