theprogrammablemind_4wp 8.0.0-beta.60 → 8.0.0-beta.62
Sign up to get free protection for your applications and to get access to all the features.
- package/client.js +472 -462
- package/package.json +1 -1
- package/src/config.js +20 -0
package/client.js
CHANGED
@@ -1080,6 +1080,7 @@ const knowledgeModuleImpl = async ({
|
|
1080
1080
|
config : configStruct,
|
1081
1081
|
api,
|
1082
1082
|
initializer,
|
1083
|
+
terminator,
|
1083
1084
|
multiApiInitializer,
|
1084
1085
|
|
1085
1086
|
module: moduleFromJSFile,
|
@@ -1111,6 +1112,7 @@ const knowledgeModuleImpl = async ({
|
|
1111
1112
|
|
1112
1113
|
const createConfig = async () => {
|
1113
1114
|
const config = new Config(configStruct, moduleFromJSFile, _process)
|
1115
|
+
config.setTerminator(terminator)
|
1114
1116
|
config.stop_auto_rebuild()
|
1115
1117
|
await config.add(...(includes || []))
|
1116
1118
|
if (api) {
|
@@ -1158,547 +1160,555 @@ const knowledgeModuleImpl = async ({
|
|
1158
1160
|
}
|
1159
1161
|
|
1160
1162
|
if (isProcess) {
|
1161
|
-
|
1162
|
-
|
1163
|
-
|
1163
|
+
let config
|
1164
|
+
try {
|
1165
|
+
const parser = new runtime.ArgumentParser({
|
1166
|
+
description: 'Entodicton knowledge module'
|
1167
|
+
})
|
1164
1168
|
|
1165
|
-
|
1166
|
-
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1170
|
-
|
1171
|
-
|
1172
|
-
|
1173
|
-
|
1174
|
-
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1178
|
-
|
1179
|
-
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1183
|
-
|
1184
|
-
|
1185
|
-
|
1186
|
-
|
1187
|
-
|
1188
|
-
|
1189
|
-
|
1190
|
-
|
1191
|
-
|
1192
|
-
|
1193
|
-
|
1194
|
-
|
1195
|
-
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1199
|
-
|
1200
|
-
|
1201
|
-
|
1202
|
-
|
1203
|
-
|
1204
|
-
|
1205
|
-
|
1206
|
-
|
1207
|
-
|
1208
|
-
|
1209
|
-
|
1210
|
-
|
1211
|
-
|
1212
|
-
|
1213
|
-
|
1214
|
-
|
1215
|
-
|
1216
|
-
|
1169
|
+
const helpDebugWord = 'In order to get a debug break when a specific word is created set the DEBUG_WORD environment variable to the JSON of the association to break on. For example DEBUG_WORD=\'"the"\''
|
1170
|
+
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], ["mammal", 1]]\''
|
1171
|
+
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]]\''
|
1172
|
+
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]]\''
|
1173
|
+
const helpDebugContextualPriority = 'In order to get a debug break when a specific set of contextual priorities is created set set DEBUG_CONTEXTUAL_PRIORITY environment variable to the JSON of the priorities that you want to break on. For example DEBUG_CONTEXTUAL_PRIORITY=\'{ context: [["verb", 0], ["article", 0], select: 1}\''
|
1174
|
+
const helpDebugBridge = 'In order to get a debug break when a specific bridge is created set the DEBUG_BRIDGE environment variable to id to break on. For example DEBUG_BRIDGE=\'car\''
|
1175
|
+
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]))\''
|
1176
|
+
|
1177
|
+
parser.add_argument('-tmn', '--testModuleName', { help: 'When running tests instead of using the current modules tests use the specified modules tests' })
|
1178
|
+
parser.add_argument('-t', '--test', { action: 'store_true', help: 'Run the tests. Create tests by running with the --query + --save flag' })
|
1179
|
+
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' })
|
1180
|
+
// parser.add_argument('-ttr', '--testToRun', { help: 'Only the specified test will be run' })
|
1181
|
+
parser.add_argument('-tva', '--testAllVerbose', { action: 'store_true', help: 'Run the tests in verbose mode. All the tests will be run instead of stopping at first failure. Create tests by running with the --query or --loop with the --save flag. if -q is specified the tests will be run for just the specified query.' })
|
1182
|
+
parser.add_argument('-tnp', '--testNoParenthesized', { action: 'store_true', help: 'Don\' check parenthesized differences for the tests' })
|
1183
|
+
parser.add_argument('-n', '--count', { help: 'Number of times to run the tests. Default is one. Use this to check for flakey test. If possible the system will print out a message with the word "hint" suggesting how to fix the problem' })
|
1184
|
+
// parser.add_argument('-b', '--build', { help: 'Specify the template file name of the form <kmName>. There should be a file called <baseKmName>.<kmName>.template.json with the queries to run. For example { queries: [...] }. The template file will be run and generate an instantiation called <baseKmName>.<kmName>.instance.json and a file called <kmName>.js that will load the template file (this is file generated only if not already existing) and a test file called <KmName>.tests.json. This can then be loaded into an instance of the current knowledge module to setup initial conditions.' })
|
1185
|
+
parser.add_argument('-rt', '--rebuildTemplate', { action: 'store_true', help: 'Force a template rebuild. Using optimization where if the query/config has not changed it will use the previous value. One there is a change all subsequence query/configs will be run.' })
|
1186
|
+
parser.add_argument('-rtf', '--rebuildTemplateFull', { action: 'store_true', help: 'Force a template rebuild. Skip the optimization' })
|
1187
|
+
parser.add_argument('-l', '--loop', { action: 'store_true', help: 'Run a loop so that multiply queries may be run' })
|
1188
|
+
parser.add_argument('-i', '--info', { action: 'store_true', help: 'Print meta-data for the module' })
|
1189
|
+
parser.add_argument('-v', '--vimdiff', { action: 'store_true', help: 'For failures run vimdiff' })
|
1190
|
+
parser.add_argument('-g', '--greg', { action: 'store_true', help: 'Set the server to be localhost so I can debug stuff' })
|
1191
|
+
parser.add_argument('-cl', '--checkForLoop', { nargs: '?', help: 'Check for loops in the priorities, Optional argument is list of operator keys to consider. For example [["banana", 0], ["food", 1]]' })
|
1192
|
+
parser.add_argument('-r', '--reset', { action: 'store_true', help: 'Get the server to bypass the cache and rebuild everything' })
|
1193
|
+
parser.add_argument('-q', '--query', { help: 'Run the specified query' })
|
1194
|
+
parser.add_argument('-ip ', '--server', { help: 'Server to run against' })
|
1195
|
+
parser.add_argument('-qp ', '--queryParams', { help: 'Query params for the server call' })
|
1196
|
+
parser.add_argument('-dt', '--deleteTest', { help: 'Delete the specified query from the tests file.' })
|
1197
|
+
parser.add_argument('--parenthesized', { action: 'store_true', help: 'Show the generated phrases with parenthesis.' })
|
1198
|
+
parser.add_argument('-c', '--clean', { help: 'Remove data from the test files. a === association' })
|
1199
|
+
parser.add_argument('-od', '--objectDiff', { action: 'store_true', help: 'When showing the objects use a colour diff' })
|
1200
|
+
parser.add_argument('-p', '--print', { help: 'Print the specified elements c === config, w === words, b === bridges, o === operators d === objects (d for data), h === hierarchy, g === generators, s === semantics, l === load t=tests ordering p === priorities a == associations j == JSON sent to server. for example --print wb' })
|
1201
|
+
parser.add_argument('-s', '--save', { action: 'store_true', help: 'When running with the --query flag this will save the current run to the test file. When running without the --query flag all tests will be run and resaved.' })
|
1202
|
+
parser.add_argument('-sd', '--saveDeveloper', { action: 'store_true', help: 'Same as -s but the query will not show up in the info command.' })
|
1203
|
+
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 ' })
|
1204
|
+
parser.add_argument('-d', '--debug', { action: 'store_true', help: 'When running with the --debug flag this set the debug flag in the config' })
|
1205
|
+
parser.add_argument('-da', '--debugAssociation', { action: 'store_true', help: helpDebugAssociation })
|
1206
|
+
parser.add_argument('-dw', '--debugWord', { action: 'store_true', help: helpDebugWord })
|
1207
|
+
parser.add_argument('-dh', '--debugHierarchy', { action: 'store_true', help: helpDebugHierarchy })
|
1208
|
+
parser.add_argument('-dp', '--debugPriority', { action: 'store_true', help: helpDebugPriority })
|
1209
|
+
parser.add_argument('-dcp', '--debugContextualPriority', { action: 'store_true', help: helpDebugContextualPriority })
|
1210
|
+
parser.add_argument('-db', '--debugBridge', { action: 'store_true', help: helpDebugBridge })
|
1211
|
+
parser.add_argument('-do', '--debugOperator', { action: 'store_true', help: helpDebugOperator })
|
1212
|
+
parser.add_argument('-ep', '--explainPriorities', { action: 'store_true', help: 'The server will return all priorities including the generated one along with an explanation of there they came from' })
|
1213
|
+
parser.add_argument('-dic', '--debugIncludeConvolutions', { nargs: '?', help: 'When running with the --debugIncludeConvolutions flag the logs will include convolutions which are somewhat annoyingly verbose. Default is false' })
|
1214
|
+
|
1215
|
+
const args = parser.parse_args()
|
1216
|
+
args.count = args.count || 1
|
1217
|
+
|
1218
|
+
if (args.rebuildTemplateFull) {
|
1219
|
+
args.rebuildTemplate = true
|
1220
|
+
}
|
1217
1221
|
|
1218
|
-
|
1219
|
-
|
1220
|
-
|
1221
|
-
|
1222
|
+
// dont debug the load of the KM's if rebuild template is on since we want to debug the template rebuild not the load
|
1223
|
+
if (args.rebuildTemplate) {
|
1224
|
+
global.pauseDebugging = true
|
1225
|
+
}
|
1222
1226
|
|
1223
|
-
|
1224
|
-
|
1225
|
-
|
1227
|
+
config = await createConfig()
|
1228
|
+
setupConfig(config)
|
1229
|
+
processResults = processResults({ config, errorHandler })
|
1226
1230
|
|
1227
|
-
|
1228
|
-
|
1229
|
-
|
1231
|
+
if (args.rebuildTemplate) {
|
1232
|
+
global.pauseDebugging = false
|
1233
|
+
}
|
1230
1234
|
|
1231
|
-
|
1235
|
+
// setup();
|
1232
1236
|
|
1233
|
-
|
1234
|
-
|
1235
|
-
|
1236
|
-
|
1237
|
-
|
1238
|
-
|
1239
|
-
|
1240
|
-
|
1241
|
-
|
1242
|
-
|
1243
|
-
|
1244
|
-
|
1245
|
-
|
1246
|
-
|
1247
|
-
|
1237
|
+
if (args.parenthesized) {
|
1238
|
+
config.parenthesized = true
|
1239
|
+
}
|
1240
|
+
if (args.checkForLoop) {
|
1241
|
+
try {
|
1242
|
+
args.checkForLoop = JSON.parse(args.checkForLoop)
|
1243
|
+
const isKey = (what) => {
|
1244
|
+
if (!Array.isArray(what)) {
|
1245
|
+
return false
|
1246
|
+
}
|
1247
|
+
if (what.length !== 2) {
|
1248
|
+
return false
|
1249
|
+
}
|
1250
|
+
if (!typeof what[0] == 'string') {
|
1251
|
+
return false
|
1252
|
+
}
|
1253
|
+
if (!typeof what[1] == 'number') {
|
1254
|
+
return false
|
1255
|
+
}
|
1256
|
+
return true
|
1248
1257
|
}
|
1249
|
-
if (!
|
1250
|
-
|
1258
|
+
if (!Array.isArray(args.checkForLoop) || args.checkForLoop.some((value) => !isKey(value))) {
|
1259
|
+
throw new Error('Error for the checkForLoop argument. Expected a JSON array of operator keys of the form "[<id>, <level>]"')
|
1251
1260
|
}
|
1252
|
-
|
1253
|
-
}
|
1254
|
-
if (!Array.isArray(args.checkForLoop) || args.checkForLoop.some((value) => !isKey(value))) {
|
1261
|
+
} catch (e) {
|
1255
1262
|
throw new Error('Error for the checkForLoop argument. Expected a JSON array of operator keys of the form "[<id>, <level>]"')
|
1256
1263
|
}
|
1257
|
-
}
|
1258
|
-
|
1264
|
+
} else {
|
1265
|
+
if (process.argv.includes('--checkForLoop') || process.argv.includes('-cl')) {
|
1266
|
+
args.checkForLoop = true
|
1267
|
+
}
|
1259
1268
|
}
|
1260
|
-
|
1261
|
-
|
1262
|
-
|
1269
|
+
if (args.debugAssociation) {
|
1270
|
+
console.log(helpDebugAssociation)
|
1271
|
+
runtime.process.exit(-1)
|
1272
|
+
}
|
1273
|
+
if (args.debugWord) {
|
1274
|
+
console.log(helpDebugWord)
|
1275
|
+
runtime.process.exit(-1)
|
1276
|
+
}
|
1277
|
+
if (args.debugHierarchy) {
|
1278
|
+
console.log(helpDebugHierarchy)
|
1279
|
+
runtime.process.exit(-1)
|
1280
|
+
}
|
1281
|
+
if (args.debugPriority) {
|
1282
|
+
console.log(helpDebugPriority)
|
1283
|
+
runtime.process.exit(-1)
|
1284
|
+
}
|
1285
|
+
if (args.debugBridge) {
|
1286
|
+
console.log(helpDebugBridge)
|
1287
|
+
runtime.process.exit(-1)
|
1288
|
+
}
|
1289
|
+
if (args.debugOperator) {
|
1290
|
+
console.log(helpDebugOperator)
|
1291
|
+
runtime.process.exit(-1)
|
1263
1292
|
}
|
1264
|
-
}
|
1265
|
-
if (args.debugAssociation) {
|
1266
|
-
console.log(helpDebugAssociation)
|
1267
|
-
runtime.process.exit(-1)
|
1268
|
-
}
|
1269
|
-
if (args.debugWord) {
|
1270
|
-
console.log(helpDebugWord)
|
1271
|
-
runtime.process.exit(-1)
|
1272
|
-
}
|
1273
|
-
if (args.debugHierarchy) {
|
1274
|
-
console.log(helpDebugHierarchy)
|
1275
|
-
runtime.process.exit(-1)
|
1276
|
-
}
|
1277
|
-
if (args.debugPriority) {
|
1278
|
-
console.log(helpDebugPriority)
|
1279
|
-
runtime.process.exit(-1)
|
1280
|
-
}
|
1281
|
-
if (args.debugBridge) {
|
1282
|
-
console.log(helpDebugBridge)
|
1283
|
-
runtime.process.exit(-1)
|
1284
|
-
}
|
1285
|
-
if (args.debugOperator) {
|
1286
|
-
console.log(helpDebugOperator)
|
1287
|
-
runtime.process.exit(-1)
|
1288
|
-
}
|
1289
1293
|
|
1290
|
-
|
1291
|
-
|
1292
|
-
|
1293
|
-
|
1294
|
+
if (args.clean) {
|
1295
|
+
const tests = JSON.parse(runtime.fs.readFileSync(testConfig.name))
|
1296
|
+
for (const test of tests) {
|
1297
|
+
delete test.associations
|
1298
|
+
}
|
1299
|
+
writeTestFile(testConfig.name, tests)
|
1300
|
+
console.log(`Cleaned ${testConfig.name}`)
|
1301
|
+
return
|
1294
1302
|
}
|
1295
|
-
writeTestFile(testConfig.name, tests)
|
1296
|
-
console.log(`Cleaned ${testConfig.name}`)
|
1297
|
-
return
|
1298
|
-
}
|
1299
1303
|
|
1300
|
-
|
1301
|
-
|
1302
|
-
|
1303
|
-
|
1304
|
-
|
1305
|
-
|
1306
|
-
|
1304
|
+
if (args.deleteTest) {
|
1305
|
+
let tests = JSON.parse(runtime.fs.readFileSync(testConfig.name))
|
1306
|
+
tests = tests.filter((test) => test.query !== args.deleteTest)
|
1307
|
+
writeTestFile(testConfig.name, tests)
|
1308
|
+
console.log(`Remove the test for "${args.deleteTest}"`)
|
1309
|
+
return
|
1310
|
+
}
|
1307
1311
|
|
1308
|
-
|
1309
|
-
|
1310
|
-
|
1311
|
-
|
1312
|
-
|
1313
|
-
|
1314
|
-
|
1315
|
-
|
1316
|
-
|
1317
|
-
|
1312
|
+
const options = { rebuild: false }
|
1313
|
+
if (args.rebuildTemplate) {
|
1314
|
+
options.rebuild = true
|
1315
|
+
}
|
1316
|
+
if (args.greg) {
|
1317
|
+
config.server('http://localhost:3000', '6804954f-e56d-471f-bbb8-08e3c54d9321')
|
1318
|
+
}
|
1319
|
+
if (args.server) {
|
1320
|
+
config.server(args.server)
|
1321
|
+
}
|
1318
1322
|
|
1319
|
-
|
1320
|
-
|
1321
|
-
|
1323
|
+
if (args.queryParams) {
|
1324
|
+
config.setQueryParams(args.queryParams)
|
1325
|
+
}
|
1322
1326
|
|
1323
|
-
|
1324
|
-
|
1325
|
-
|
1327
|
+
if (args.debug) {
|
1328
|
+
config.config.debug = true
|
1329
|
+
}
|
1326
1330
|
|
1327
|
-
|
1328
|
-
|
1329
|
-
|
1331
|
+
if (args.reset) {
|
1332
|
+
config.config.skip_cache = true
|
1333
|
+
}
|
1330
1334
|
|
1331
|
-
|
1332
|
-
|
1333
|
-
|
1335
|
+
if (args.explainPriorities) {
|
1336
|
+
config.config.explain_priorities = true
|
1337
|
+
}
|
1334
1338
|
|
1335
|
-
|
1339
|
+
config.config.debugIncludeConvolutions = args.debugIncludeConvolutions || process.argv.includes('--debugIncludeConvolutions') || process.argv.includes('-dic')
|
1336
1340
|
|
1337
|
-
|
1338
|
-
|
1339
|
-
|
1340
|
-
|
1341
|
-
}
|
1342
|
-
configPrinted = true
|
1343
|
-
if (args.print) {
|
1344
|
-
if (args.print.includes('t')) {
|
1345
|
-
console.log('Test queries')
|
1346
|
-
let counter = 0
|
1347
|
-
for (const test of config.tests) {
|
1348
|
-
console.log(`${counter} - ${test.query}`)
|
1349
|
-
counter += 1
|
1350
|
-
}
|
1351
|
-
}
|
1352
|
-
if (args.print.includes('c')) {
|
1353
|
-
const { data } = setupProcessB({ config })
|
1354
|
-
console.log('Config as sent to server')
|
1355
|
-
console.log(JSON.stringify(data, null, 2))
|
1341
|
+
let configPrinted = false
|
1342
|
+
const printConfig = () => {
|
1343
|
+
if (configPrinted) {
|
1344
|
+
return
|
1356
1345
|
}
|
1346
|
+
configPrinted = true
|
1347
|
+
if (args.print) {
|
1348
|
+
if (args.print.includes('t')) {
|
1349
|
+
console.log('Test queries')
|
1350
|
+
let counter = 0
|
1351
|
+
for (const test of config.tests) {
|
1352
|
+
console.log(`${counter} - ${test.query}`)
|
1353
|
+
counter += 1
|
1354
|
+
}
|
1355
|
+
}
|
1356
|
+
if (args.print.includes('c')) {
|
1357
|
+
const { data } = setupProcessB({ config })
|
1358
|
+
console.log('Config as sent to server')
|
1359
|
+
console.log(JSON.stringify(data, null, 2))
|
1360
|
+
}
|
1357
1361
|
|
1358
|
-
|
1359
|
-
|
1360
|
-
|
1361
|
-
|
1362
|
+
if (args.print.includes('l')) {
|
1363
|
+
console.log('Module load ordering')
|
1364
|
+
for (const km of config.configs) {
|
1365
|
+
console.log(` ${km.name}`)
|
1366
|
+
}
|
1362
1367
|
}
|
1363
|
-
|
1364
|
-
|
1365
|
-
|
1366
|
-
|
1367
|
-
|
1368
|
-
|
1368
|
+
if (args.print.includes('w')) {
|
1369
|
+
// { literals: Object, patterns: Array(2), hierarchy: Array(97) }
|
1370
|
+
console.log('literals')
|
1371
|
+
for (const word in config.config.words.literals) {
|
1372
|
+
console.log(' ' + word.concat(...config.config.words.literals[word].map((def, i) => ((i > 0) ? ' '.repeat(4+word.length) : ' ') + JSON.stringify(def) + '\n')))
|
1373
|
+
}
|
1374
|
+
console.log('patterns')
|
1375
|
+
for (const pattern of config.config.words.patterns) {
|
1376
|
+
console.log(' ' + JSON.stringify(pattern))
|
1377
|
+
}
|
1369
1378
|
}
|
1370
|
-
|
1371
|
-
|
1372
|
-
|
1379
|
+
if (args.print.includes('b')) {
|
1380
|
+
for (const bridge of config.config.bridges) {
|
1381
|
+
console.log(JSON.stringify(bridge))
|
1382
|
+
}
|
1373
1383
|
}
|
1374
|
-
|
1375
|
-
|
1376
|
-
|
1377
|
-
|
1384
|
+
if (args.print.includes('o')) {
|
1385
|
+
for (const operator of config.config.operators) {
|
1386
|
+
console.log(JSON.stringify(operator))
|
1387
|
+
}
|
1378
1388
|
}
|
1379
|
-
|
1380
|
-
|
1381
|
-
|
1382
|
-
console.log(JSON.stringify(operator))
|
1389
|
+
if (args.print.includes('j')) {
|
1390
|
+
const { data } = setupProcessB({ config })
|
1391
|
+
console.log(JSON.stringify(data, null, 2))
|
1383
1392
|
}
|
1384
|
-
|
1385
|
-
|
1386
|
-
|
1387
|
-
|
1388
|
-
|
1389
|
-
|
1390
|
-
|
1391
|
-
|
1392
|
-
for (const property of properties) {
|
1393
|
-
console.log(` ${property} ===============`)
|
1394
|
-
for (const association of config.config.associations[property]) {
|
1395
|
-
console.log(` ${JSON.stringify(association)}`)
|
1393
|
+
if (args.print.includes('a')) {
|
1394
|
+
console.log('associations ================')
|
1395
|
+
const properties = ['negative', 'positive']
|
1396
|
+
for (const property of properties) {
|
1397
|
+
console.log(` ${property} ===============`)
|
1398
|
+
for (const association of config.config.associations[property]) {
|
1399
|
+
console.log(` ${JSON.stringify(association)}`)
|
1400
|
+
}
|
1396
1401
|
}
|
1397
1402
|
}
|
1398
|
-
|
1399
|
-
|
1400
|
-
console.log(JSON.stringify(config.config.objects, null, 2))
|
1401
|
-
}
|
1402
|
-
if (args.print.includes('p')) {
|
1403
|
-
for (const priority of config.config.priorities) {
|
1404
|
-
console.log(JSON.stringify(priority))
|
1403
|
+
if (args.print.includes('d')) {
|
1404
|
+
console.log(JSON.stringify(config.config.objects, null, 2))
|
1405
1405
|
}
|
1406
|
-
|
1407
|
-
|
1408
|
-
|
1409
|
-
|
1406
|
+
if (args.print.includes('p')) {
|
1407
|
+
for (const priority of config.config.priorities) {
|
1408
|
+
console.log(JSON.stringify(priority))
|
1409
|
+
}
|
1410
1410
|
}
|
1411
|
-
|
1412
|
-
|
1413
|
-
|
1414
|
-
for (const semantic of easyToRead) {
|
1415
|
-
semantic.match = semantic.match.toString()
|
1416
|
-
semantic.apply = semantic.apply.toString()
|
1417
|
-
if (semantic.applyWrapped) {
|
1418
|
-
semantic.applyWrapped = semantic.applyWrapped.toString()
|
1411
|
+
if (args.print.includes('h')) {
|
1412
|
+
for (const edge of config.config.hierarchy) {
|
1413
|
+
console.log(JSON.stringify(edge))
|
1419
1414
|
}
|
1420
1415
|
}
|
1421
|
-
|
1422
|
-
|
1423
|
-
|
1424
|
-
|
1425
|
-
|
1426
|
-
|
1427
|
-
|
1416
|
+
if (args.print.includes('g')) {
|
1417
|
+
const easyToRead = _.cloneDeep(config.config.generators)
|
1418
|
+
for (const semantic of easyToRead) {
|
1419
|
+
semantic.match = semantic.match.toString()
|
1420
|
+
semantic.apply = semantic.apply.toString()
|
1421
|
+
if (semantic.applyWrapped) {
|
1422
|
+
semantic.applyWrapped = semantic.applyWrapped.toString()
|
1423
|
+
}
|
1424
|
+
}
|
1425
|
+
console.dir(easyToRead)
|
1426
|
+
}
|
1427
|
+
if (args.print.includes('s')) {
|
1428
|
+
const easyToRead = _.cloneDeep(config.config.semantics)
|
1429
|
+
for (const semantic of easyToRead) {
|
1430
|
+
semantic.match = semantic.match.toString()
|
1431
|
+
semantic.apply = semantic.apply.toString()
|
1432
|
+
}
|
1433
|
+
console.dir(easyToRead)
|
1428
1434
|
}
|
1429
|
-
console.dir(easyToRead)
|
1430
1435
|
}
|
1431
1436
|
}
|
1432
|
-
}
|
1433
1437
|
|
1434
|
-
|
1438
|
+
checkTemplate(template)
|
1435
1439
|
|
1436
|
-
|
1437
|
-
|
1438
|
-
|
1439
|
-
|
1440
|
-
|
1441
|
-
|
1442
|
-
|
1443
|
-
|
1444
|
-
|
1440
|
+
if (template) {
|
1441
|
+
let needsRebuild
|
1442
|
+
if (args.rebuildTemplate && !args.rebuildTemplateFull) {
|
1443
|
+
// get the startOfChanges for the partial rebuild
|
1444
|
+
needsRebuild = config.needsRebuild(template.template, template.instance, { ...options, rebuild: false })
|
1445
|
+
} else {
|
1446
|
+
// do a check or full rebuild
|
1447
|
+
needsRebuild = config.needsRebuild(template.template, template.instance, options)
|
1448
|
+
}
|
1445
1449
|
|
1446
|
-
|
1447
|
-
|
1448
|
-
|
1450
|
+
if (needsRebuild.needsRebuild) {
|
1451
|
+
if (needsRebuild.previousResultss) {
|
1452
|
+
console.log('Rebuild using the optimization to use previous results until a change is hit. For a full rebuild use -rtf')
|
1453
|
+
}
|
1454
|
+
console.log(`This module "${config.name}" needs rebuilding all other arguments will be ignored. Try again after the template is rebuilt.`)
|
1455
|
+
options.rebuild = true
|
1456
|
+
config.config.rebuild = true
|
1457
|
+
}
|
1458
|
+
try {
|
1459
|
+
await config.load(rebuildTemplate, template.template, template.instance, { rebuild: needsRebuild.needsRebuild || options.rebuild, previousResultss: needsRebuild.previousResultss, startOfChanges: needsRebuild.startOfChanges })
|
1460
|
+
} catch (e) {
|
1461
|
+
console.error(`Error loading template for ${config.name}. ${e.error ? e.error : e}${e.stack ? e.stack : ''}`)
|
1462
|
+
runtime.process.exit(-1)
|
1463
|
+
}
|
1464
|
+
if (!args.query) {
|
1465
|
+
printConfig()
|
1466
|
+
}
|
1467
|
+
if (needsRebuild.needsRebuild) {
|
1468
|
+
return
|
1449
1469
|
}
|
1450
|
-
console.log(`This module "${config.name}" needs rebuilding all other arguments will be ignored. Try again after the template is rebuilt.`)
|
1451
|
-
options.rebuild = true
|
1452
|
-
config.config.rebuild = true
|
1453
1470
|
}
|
1454
|
-
|
1455
|
-
|
1456
|
-
|
1457
|
-
console.error(`Error loading template for ${config.name}. ${e.error ? e.error : e}${e.stack ? e.stack : ''}`)
|
1458
|
-
runtime.process.exit(-1)
|
1471
|
+
|
1472
|
+
if (args.retrain) {
|
1473
|
+
config.config.retrain = true
|
1459
1474
|
}
|
1460
|
-
|
1461
|
-
|
1475
|
+
|
1476
|
+
if (args.saveDeveloper) {
|
1477
|
+
args.save = true
|
1462
1478
|
}
|
1463
|
-
if (
|
1464
|
-
|
1479
|
+
if (args.test || args.testVerbose || args.testAllVerbose || args.save) {
|
1480
|
+
global.transitoryMode = true
|
1465
1481
|
}
|
1466
|
-
|
1467
|
-
|
1468
|
-
|
1469
|
-
|
1470
|
-
|
1471
|
-
|
1472
|
-
|
1473
|
-
|
1474
|
-
|
1475
|
-
|
1476
|
-
|
1477
|
-
|
1478
|
-
|
1479
|
-
|
1480
|
-
|
1481
|
-
// } else if (args.build) {
|
1482
|
-
} else if (args.info) {
|
1483
|
-
showInfo(description, section, config)
|
1484
|
-
} else if (args.test || args.testVerbose || args.testAllVerbose) {
|
1485
|
-
// TODO make test always a string
|
1486
|
-
if (typeof test === 'string') {
|
1487
|
-
const l = (n, hasError) => {
|
1488
|
-
if (n === 0) {
|
1489
|
-
if (hasError) {
|
1490
|
-
runtime.process.exit(-1)
|
1482
|
+
if (!args.query && !args.test && !args.info && (args.save || args.saveDeveloper)) {
|
1483
|
+
global.transitoryMode = true
|
1484
|
+
saveTests(config, test, testConfig, args.saveDeveloper)
|
1485
|
+
// } else if (args.build) {
|
1486
|
+
} else if (args.info) {
|
1487
|
+
showInfo(description, section, config)
|
1488
|
+
} else if (args.test || args.testVerbose || args.testAllVerbose) {
|
1489
|
+
// TODO make test always a string
|
1490
|
+
if (typeof test === 'string') {
|
1491
|
+
const l = async (n, hasError) => {
|
1492
|
+
if (n === 0) {
|
1493
|
+
if (hasError) {
|
1494
|
+
runtime.process.exit(-1)
|
1495
|
+
}
|
1496
|
+
return
|
1491
1497
|
}
|
1492
|
-
|
1493
|
-
|
1494
|
-
|
1495
|
-
|
1496
|
-
|
1497
|
-
|
1498
|
-
test
|
1499
|
-
|
1500
|
-
|
1501
|
-
|
1502
|
-
|
1503
|
-
|
1504
|
-
|
1505
|
-
|
1506
|
-
for (const result of results) {
|
1507
|
-
if (JSON.stringify(result.expected.paraphrases) !== JSON.stringify(result.actual.paraphrases)) {
|
1508
|
-
result.hasError = true
|
1509
|
-
}
|
1510
|
-
if (!args.testNoParenthesized) {
|
1511
|
-
if (JSON.stringify(result.expected.paraphrasesParenthesized) !== JSON.stringify(result.actual.paraphrasesParenthesized)) {
|
1498
|
+
let useTestConfig = testConfig
|
1499
|
+
if (args.testModuleName) {
|
1500
|
+
useTestConfig = config.getConfigs()[args.testModuleName].getTestConfig()
|
1501
|
+
useTestConfig.testModuleName = args.testModuleName
|
1502
|
+
test = useTestConfig.name
|
1503
|
+
}
|
1504
|
+
await runTests(config, test, { args, debug: args.debug, testConfig: useTestConfig, verbose: args.testVerbose || args.testAllVerbose, stopAtFirstError: !args.testAllVerbose }).then((results) => {
|
1505
|
+
let newError = false
|
1506
|
+
if (results.length > 0) {
|
1507
|
+
let headerShown = false
|
1508
|
+
|
1509
|
+
let hasError = false
|
1510
|
+
for (const result of results) {
|
1511
|
+
if (JSON.stringify(result.expected.paraphrases) !== JSON.stringify(result.actual.paraphrases)) {
|
1512
1512
|
result.hasError = true
|
1513
1513
|
}
|
1514
|
-
if (
|
1514
|
+
if (!args.testNoParenthesized) {
|
1515
|
+
if (JSON.stringify(result.expected.paraphrasesParenthesized) !== JSON.stringify(result.actual.paraphrasesParenthesized)) {
|
1516
|
+
result.hasError = true
|
1517
|
+
}
|
1518
|
+
if (JSON.stringify(result.expected.generatedParenthesized) !== JSON.stringify(result.actual.generatedParenthesized)) {
|
1519
|
+
result.hasError = true
|
1520
|
+
}
|
1521
|
+
}
|
1522
|
+
if (JSON.stringify(result.expected.responses) !== JSON.stringify(result.actual.responses)) {
|
1515
1523
|
result.hasError = true
|
1516
1524
|
}
|
1525
|
+
if (JSON.stringify(result.expected.checked) !== JSON.stringify(result.actual.checked)) {
|
1526
|
+
result.hasError = true
|
1527
|
+
}
|
1528
|
+
if (!sameJSON(result.expected.checkedContexts, result.actual.checkedContexts)) {
|
1529
|
+
result.hasError = true
|
1530
|
+
}
|
1531
|
+
if (result.hasError) {
|
1532
|
+
hasError = true
|
1533
|
+
}
|
1517
1534
|
}
|
1518
|
-
if (JSON.stringify(result.expected.responses) !== JSON.stringify(result.actual.responses)) {
|
1519
|
-
result.hasError = true
|
1520
|
-
}
|
1521
|
-
if (JSON.stringify(result.expected.checked) !== JSON.stringify(result.actual.checked)) {
|
1522
|
-
result.hasError = true
|
1523
|
-
}
|
1524
|
-
if (!sameJSON(result.expected.checkedContexts, result.actual.checkedContexts)) {
|
1525
|
-
result.hasError = true
|
1526
|
-
}
|
1527
|
-
if (result.hasError) {
|
1528
|
-
hasError = true
|
1529
|
-
}
|
1530
|
-
}
|
1531
1535
|
|
1532
|
-
|
1533
|
-
|
1534
|
-
|
1535
|
-
|
1536
|
-
|
1537
|
-
|
1536
|
+
if (hasError) {
|
1537
|
+
console.log('**************************** ERRORS ************************')
|
1538
|
+
for (const result of results) {
|
1539
|
+
console.log('Utterance: ', result.utterance)
|
1540
|
+
const show = (label, expected, actual) => {
|
1541
|
+
if (JSON.stringify(expected) !== JSON.stringify(actual)) {
|
1542
|
+
if (!headerShown) {
|
1543
|
+
console.log(' Failure')
|
1544
|
+
}
|
1545
|
+
console.log(` expected ${label}`, expected)
|
1546
|
+
console.log(` actual ${label} `, actual)
|
1547
|
+
newError = true
|
1548
|
+
headerShown = true
|
1549
|
+
if (args.vimdiff) {
|
1550
|
+
vimdiff(actual, expected, `"${result.utterance}" - ${label}`)
|
1551
|
+
}
|
1552
|
+
result.hasError = true
|
1553
|
+
}
|
1554
|
+
}
|
1555
|
+
show('paraphrases', result.expected.paraphrases, result.actual.paraphrases)
|
1556
|
+
if (!args.testNoParenthesized) {
|
1557
|
+
show('paraphrases parenthesized', result.expected.paraphrasesParenthesized, result.actual.paraphrasesParenthesized)
|
1558
|
+
}
|
1559
|
+
show('responses', result.expected.responses, result.actual.responses)
|
1560
|
+
if (!args.testNoParenthesized) {
|
1561
|
+
show('responses parenthesized', result.expected.generatedParenthesized, result.actual.generatedParenthesized)
|
1562
|
+
}
|
1563
|
+
/*
|
1564
|
+
if (JSON.stringify(result.expected.paraphrases) !== JSON.stringify(result.actual.paraphrases)) {
|
1538
1565
|
if (!headerShown) {
|
1539
1566
|
console.log(' Failure')
|
1540
1567
|
}
|
1541
|
-
console.log(
|
1542
|
-
console.log(
|
1568
|
+
console.log(' expected paraphrases', result.expected.paraphrases)
|
1569
|
+
console.log(' actual paraphrases ', result.actual.paraphrases)
|
1543
1570
|
newError = true
|
1544
1571
|
headerShown = true
|
1545
|
-
if (args.vimdiff) {
|
1546
|
-
vimdiff(actual, expected, `"${result.utterance}" - ${label}`)
|
1547
|
-
}
|
1548
|
-
result.hasError = true
|
1549
|
-
}
|
1550
|
-
}
|
1551
|
-
show('paraphrases', result.expected.paraphrases, result.actual.paraphrases)
|
1552
|
-
if (!args.testNoParenthesized) {
|
1553
|
-
show('paraphrases parenthesized', result.expected.paraphrasesParenthesized, result.actual.paraphrasesParenthesized)
|
1554
|
-
}
|
1555
|
-
show('responses', result.expected.responses, result.actual.responses)
|
1556
|
-
if (!args.testNoParenthesized) {
|
1557
|
-
show('responses parenthesized', result.expected.generatedParenthesized, result.actual.generatedParenthesized)
|
1558
|
-
}
|
1559
|
-
/*
|
1560
|
-
if (JSON.stringify(result.expected.paraphrases) !== JSON.stringify(result.actual.paraphrases)) {
|
1561
|
-
if (!headerShown) {
|
1562
|
-
console.log(' Failure')
|
1563
1572
|
}
|
1564
|
-
|
1565
|
-
|
1566
|
-
|
1567
|
-
|
1568
|
-
|
1569
|
-
|
1570
|
-
|
1571
|
-
|
1573
|
+
if (JSON.stringify(result.expected.responses) !== JSON.stringify(result.actual.responses)) {
|
1574
|
+
if (!headerShown) {
|
1575
|
+
console.log(' Failure')
|
1576
|
+
}
|
1577
|
+
console.log(' expected responses ', result.expected.responses)
|
1578
|
+
console.log(' actual responses ', result.actual.responses)
|
1579
|
+
newError = true
|
1580
|
+
headerShown = true
|
1572
1581
|
}
|
1573
|
-
|
1574
|
-
|
1575
|
-
|
1576
|
-
|
1577
|
-
|
1578
|
-
|
1579
|
-
|
1580
|
-
|
1581
|
-
|
1582
|
+
*/
|
1583
|
+
if (JSON.stringify(result.expected.checked) !== JSON.stringify(result.actual.checked)) {
|
1584
|
+
if (!headerShown) {
|
1585
|
+
console.log(' Failure')
|
1586
|
+
}
|
1587
|
+
const widths = [4, 18, 72]
|
1588
|
+
const lines = new Lines(widths)
|
1589
|
+
lines.setElement(1, 1, 'expected checked objects')
|
1590
|
+
lines.setElement(2, 2, JSON.stringify(result.expected.checked, null, 2))
|
1591
|
+
lines.log()
|
1592
|
+
lines.setElement(1, 1, 'actual checked objects')
|
1593
|
+
lines.setElement(2, 2, JSON.stringify(result.actual.checked, null, 2))
|
1594
|
+
lines.log()
|
1595
|
+
if (args.vimdiff) {
|
1596
|
+
show('checked properties for objects', result.expected.checked, result.actual.checked)
|
1597
|
+
}
|
1598
|
+
newError = true
|
1599
|
+
headerShown = true
|
1582
1600
|
}
|
1583
|
-
|
1584
|
-
|
1585
|
-
|
1586
|
-
|
1587
|
-
|
1588
|
-
|
1589
|
-
|
1590
|
-
|
1591
|
-
|
1592
|
-
|
1601
|
+
if (!sameJSON(result.expected.checkedContexts, result.actual.checkedContexts)) {
|
1602
|
+
if (!headerShown) {
|
1603
|
+
console.log(' Failure')
|
1604
|
+
}
|
1605
|
+
const widths = [4, 18, 72]
|
1606
|
+
const lines = new Lines(widths)
|
1607
|
+
lines.setElement(1, 1, 'expected checked contexts', true)
|
1608
|
+
lines.setElement(2, 2, JSON.stringify(result.expected.checkedContexts, null, 2))
|
1609
|
+
lines.log()
|
1610
|
+
lines.setElement(1, 1, 'actual checked contexts', true)
|
1611
|
+
lines.setElement(2, 2, JSON.stringify(result.actual.checkedContexts, null, 2))
|
1612
|
+
lines.log()
|
1613
|
+
if (args.vimdiff) {
|
1614
|
+
show('checked properties for context', result.expected.checkedContexts, result.actual.checkedContexts)
|
1615
|
+
}
|
1616
|
+
newError = true
|
1617
|
+
headerShown = true
|
1593
1618
|
}
|
1594
|
-
newError = true
|
1595
|
-
headerShown = true
|
1596
1619
|
}
|
1597
|
-
|
1598
|
-
|
1599
|
-
|
1620
|
+
} else {
|
1621
|
+
if (results.length > 0 && args.vimdiff) {
|
1622
|
+
for (const result of results) {
|
1623
|
+
vimdiff(result.actual, result.expected)
|
1600
1624
|
}
|
1601
|
-
const widths = [4, 18, 72]
|
1602
|
-
const lines = new Lines(widths)
|
1603
|
-
lines.setElement(1, 1, 'expected checked contexts', true)
|
1604
|
-
lines.setElement(2, 2, JSON.stringify(result.expected.checkedContexts, null, 2))
|
1605
|
-
lines.log()
|
1606
|
-
lines.setElement(1, 1, 'actual checked contexts', true)
|
1607
|
-
lines.setElement(2, 2, JSON.stringify(result.actual.checkedContexts, null, 2))
|
1608
|
-
lines.log()
|
1609
|
-
if (args.vimdiff) {
|
1610
|
-
show('checked properties for context', result.expected.checkedContexts, result.actual.checkedContexts)
|
1611
|
-
}
|
1612
|
-
newError = true
|
1613
|
-
headerShown = true
|
1614
1625
|
}
|
1615
1626
|
}
|
1616
|
-
|
1617
|
-
|
1618
|
-
|
1619
|
-
|
1627
|
+
if (hasError) {
|
1628
|
+
if (!headerShown) {
|
1629
|
+
if (!(useTestConfig.check && useTestConfig.check.length > 0)) {
|
1630
|
+
console.log('There are failures due to things other than paraphrases, responses and checked properties being different. They are not shown because you ran -tv or -tva which only shows difference in paraphrase and results. Usually what I do is -s and do a diff to make sure there are no other problems. If the paraphrases or results were different they would have shown here.')
|
1631
|
+
}
|
1620
1632
|
}
|
1621
|
-
}
|
1622
|
-
}
|
1623
|
-
if (hasError) {
|
1624
|
-
if (!headerShown) {
|
1625
1633
|
if (!(useTestConfig.check && useTestConfig.check.length > 0)) {
|
1626
|
-
console.log('
|
1627
|
-
|
1628
|
-
|
1629
|
-
|
1630
|
-
|
1631
|
-
|
1632
|
-
|
1633
|
-
for (const result of results) {
|
1634
|
-
if (result.hasError) {
|
1635
|
-
errorCount += 1
|
1634
|
+
console.log('use -v arg to write files expected.json and actual.json in the current directory for detailed comparison. Or do -s and then git diff the changes.')
|
1635
|
+
// console.log(JSON.stringify(contexts))
|
1636
|
+
let errorCount = 0
|
1637
|
+
for (const result of results) {
|
1638
|
+
if (result.hasError) {
|
1639
|
+
errorCount += 1
|
1640
|
+
}
|
1636
1641
|
}
|
1642
|
+
console.log(`**************************** THERE WERE ${errorCount} TEST FAILURES ************************`)
|
1637
1643
|
}
|
1638
|
-
console.log(`**************************** THERE WERE ${errorCount} TEST FAILURES ************************`)
|
1639
1644
|
}
|
1640
1645
|
}
|
1641
|
-
|
1642
|
-
|
1643
|
-
|
1644
|
-
|
1645
|
-
|
1646
|
-
|
1647
|
-
|
1646
|
+
// const contexts = { failures: results }
|
1647
|
+
l(n - 1, hasError || newError)
|
1648
|
+
}).catch((error) => {
|
1649
|
+
console.error(error)
|
1650
|
+
runtime.process.exit(-1)
|
1651
|
+
errorHandler(error)
|
1652
|
+
})
|
1653
|
+
}
|
1654
|
+
await l(args.count, false)
|
1655
|
+
} else {
|
1656
|
+
test()
|
1657
|
+
}
|
1658
|
+
} else if (args.loop) {
|
1659
|
+
const readline = runtime.readline.createInterface({ input: runtime.process.stdin, output: runtime.process.stdout })
|
1660
|
+
const f = () => readline.question('Enter query? (newline to quit) ', query => {
|
1661
|
+
query = query.trim()
|
1662
|
+
if (query.length === 0) {
|
1663
|
+
return readline.close()
|
1664
|
+
}
|
1665
|
+
const promise = _process(config, query, { testsFN: test }).then((results) => {
|
1666
|
+
console.log(results.responses.join(' '))
|
1648
1667
|
})
|
1668
|
+
if (!('then' in promise)) {
|
1669
|
+
throw new Error('Return a promise from process in the definition of knowledgeModule')
|
1670
|
+
}
|
1671
|
+
promise
|
1672
|
+
.then(() => {
|
1673
|
+
f()
|
1674
|
+
})
|
1675
|
+
.catch((e) => {
|
1676
|
+
if (e.errno == 'ECONNREFUSED') {
|
1677
|
+
console.log(e)
|
1678
|
+
readline.close()
|
1679
|
+
} else {
|
1680
|
+
console.log(e)
|
1681
|
+
f()
|
1682
|
+
}
|
1683
|
+
})
|
1684
|
+
})
|
1685
|
+
f()
|
1686
|
+
} else if (args.query) {
|
1687
|
+
let useTestConfig = testConfig
|
1688
|
+
if (args.testModuleName) {
|
1689
|
+
config.testConfig.testModuleName = args.testModuleName
|
1690
|
+
config.testConfig.checks = config.getConfigs()[args.testModuleName].getTestConfig().checks
|
1691
|
+
// useTestConfig = config.getConfigs()[args.testModuleName].getTestConfig()
|
1692
|
+
// useTestConfig.testModuleName = args.testModuleName
|
1649
1693
|
}
|
1650
|
-
|
1651
|
-
|
1652
|
-
|
1653
|
-
|
1654
|
-
} else if (args.loop) {
|
1655
|
-
const readline = runtime.readline.createInterface({ input: runtime.process.stdin, output: runtime.process.stdout })
|
1656
|
-
const f = () => readline.question('Enter query? (newline to quit) ', query => {
|
1657
|
-
query = query.trim()
|
1658
|
-
if (query.length === 0) {
|
1659
|
-
return readline.close()
|
1694
|
+
const objects = getObjects(config.config.objects)(config.uuid)
|
1695
|
+
// for the compare
|
1696
|
+
if (args.objectDiff) {
|
1697
|
+
global.beforeObjects = _.cloneDeep(objects)
|
1660
1698
|
}
|
1661
|
-
|
1662
|
-
|
1663
|
-
})
|
1664
|
-
|
1665
|
-
throw new Error('Return a promise from process in the definition of knowledgeModule')
|
1699
|
+
try {
|
1700
|
+
await processResults(_process(config, args.query, { commandLineArgs: args, dontAddAssociations: args.dontAddAssociations, writeTests: args.save || args.saveDeveloper, saveDeveloper: args.saveDeveloper, testConfig, testsFN: test }))
|
1701
|
+
} catch (error) {
|
1702
|
+
console.log('Error', error)
|
1666
1703
|
}
|
1667
|
-
promise
|
1668
|
-
.then(() => {
|
1669
|
-
f()
|
1670
|
-
})
|
1671
|
-
.catch((e) => {
|
1672
|
-
if (e.errno == 'ECONNREFUSED') {
|
1673
|
-
console.log(e)
|
1674
|
-
readline.close()
|
1675
|
-
} else {
|
1676
|
-
console.log(e)
|
1677
|
-
f()
|
1678
|
-
}
|
1679
|
-
})
|
1680
|
-
})
|
1681
|
-
f()
|
1682
|
-
} else if (args.query) {
|
1683
|
-
let useTestConfig = testConfig
|
1684
|
-
if (args.testModuleName) {
|
1685
|
-
config.testConfig.testModuleName = args.testModuleName
|
1686
|
-
config.testConfig.checks = config.getConfigs()[args.testModuleName].getTestConfig().checks
|
1687
|
-
// useTestConfig = config.getConfigs()[args.testModuleName].getTestConfig()
|
1688
|
-
// useTestConfig.testModuleName = args.testModuleName
|
1689
1704
|
}
|
1690
|
-
|
1691
|
-
|
1692
|
-
|
1693
|
-
|
1694
|
-
|
1695
|
-
try {
|
1696
|
-
await processResults(_process(config, args.query, { commandLineArgs: args, dontAddAssociations: args.dontAddAssociations, writeTests: args.save || args.saveDeveloper, saveDeveloper: args.saveDeveloper, testConfig, testsFN: test }))
|
1697
|
-
} catch (error) {
|
1698
|
-
console.log('Error', error)
|
1705
|
+
printConfig()
|
1706
|
+
} finally {
|
1707
|
+
debugger
|
1708
|
+
if (config) {
|
1709
|
+
config.terminate()
|
1699
1710
|
}
|
1700
1711
|
}
|
1701
|
-
printConfig()
|
1702
1712
|
} else {
|
1703
1713
|
const initConfig = async (config) => {
|
1704
1714
|
if (template) {
|
package/package.json
CHANGED
package/src/config.js
CHANGED
@@ -1807,6 +1807,24 @@ class Config {
|
|
1807
1807
|
config.words.hierarchy = hierarchyPrime
|
1808
1808
|
}
|
1809
1809
|
|
1810
|
+
terminate() {
|
1811
|
+
this.configs.forEach((km) => {
|
1812
|
+
const config = km.config
|
1813
|
+
debugger
|
1814
|
+
if (!config.terminatorFn) {
|
1815
|
+
this.terminatorFn(this)
|
1816
|
+
} else {
|
1817
|
+
config.terminatorFn(this)
|
1818
|
+
}
|
1819
|
+
})
|
1820
|
+
}
|
1821
|
+
|
1822
|
+
setTerminator(terminatorFn) {
|
1823
|
+
if (terminatorFn) {
|
1824
|
+
this.terminatorFn = terminatorFn
|
1825
|
+
}
|
1826
|
+
}
|
1827
|
+
|
1810
1828
|
// configs = [ { config, namespace } ... ]
|
1811
1829
|
constructor (config, module, clientProcess) {
|
1812
1830
|
if (config instanceof Config) {
|
@@ -1873,6 +1891,7 @@ class Config {
|
|
1873
1891
|
currentConfig.wasInitialized = true
|
1874
1892
|
}
|
1875
1893
|
}
|
1894
|
+
this.terminatorFn = () => {}
|
1876
1895
|
if (config) {
|
1877
1896
|
this.name = config.name
|
1878
1897
|
}
|
@@ -2080,6 +2099,7 @@ class Config {
|
|
2080
2099
|
cp._uuid = cp.configs[0]._uuid
|
2081
2100
|
// update uuid here set the uuid in the objects and add error checking
|
2082
2101
|
cp.initializerFn = this.initializerFn
|
2102
|
+
cp.terminatorFn = this.terminatorFn
|
2083
2103
|
// cp._api = _.cloneDeep(this._api)
|
2084
2104
|
if (this._apiConstructor) {
|
2085
2105
|
cp._api = this._apiConstructor(cp)
|