theprogrammablemind 8.0.0-beta.8 → 8.0.0-beta.80
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 +563 -947
- package/index.js +3 -2
- package/package.json +2 -1
- package/src/config.js +231 -251
- package/src/configHelpers.js +455 -0
- package/src/generators.js +8 -8
- package/src/helpers.js +34 -1
- package/src/project.js +1 -1
- package/src/semantics.js +63 -69
package/src/config.js
CHANGED
@@ -2,9 +2,10 @@
|
|
2
2
|
const { Semantics, normalizeGenerator } = require('./semantics')
|
3
3
|
const { Generators } = require('./generators')
|
4
4
|
const { v4: uuidv4 } = require('uuid')
|
5
|
-
const
|
5
|
+
const configHelpers = require('./configHelpers')
|
6
6
|
const DigraphInternal = require('./digraph_internal')
|
7
7
|
const helpers = require('./helpers')
|
8
|
+
const { InitCalls } = require('./helpers')
|
8
9
|
const { ecatch } = require('./helpers')
|
9
10
|
const runtime = require('../runtime')
|
10
11
|
const _ = require('lodash')
|
@@ -254,6 +255,9 @@ const priority_valid = (cp) => {
|
|
254
255
|
const handleBridgeProps = (config, bridge, { addFirst, uuid } = {}) => {
|
255
256
|
ecatch(`While processing the bridge for ${bridge.id}#${bridge.level}`,
|
256
257
|
() => {
|
258
|
+
if (bridge.development && config.isModule) {
|
259
|
+
return
|
260
|
+
}
|
257
261
|
if (!bridge.bridge) {
|
258
262
|
bridge.bridge = '{ ...next(operator) }'
|
259
263
|
}
|
@@ -262,7 +266,12 @@ const handleBridgeProps = (config, bridge, { addFirst, uuid } = {}) => {
|
|
262
266
|
}
|
263
267
|
if (bridge.children) {
|
264
268
|
for (const child of bridge.children) {
|
265
|
-
config.addHierarchy(child, bridge.id)
|
269
|
+
// config.addHierarchy(child, bridge.id)
|
270
|
+
if (child.child) {
|
271
|
+
config.addHierarchy(child.child, bridge.id, child.instance)
|
272
|
+
} else {
|
273
|
+
config.addHierarchy(child, bridge.id)
|
274
|
+
}
|
266
275
|
}
|
267
276
|
}
|
268
277
|
if (bridge.operator) {
|
@@ -270,12 +279,20 @@ const handleBridgeProps = (config, bridge, { addFirst, uuid } = {}) => {
|
|
270
279
|
}
|
271
280
|
if (bridge.parents) {
|
272
281
|
for (const parent of bridge.parents) {
|
273
|
-
|
282
|
+
if (parent.parent) {
|
283
|
+
config.addHierarchy(bridge.id, parent.parent, parent.instance)
|
284
|
+
} else {
|
285
|
+
config.addHierarchy(bridge.id, parent)
|
286
|
+
}
|
274
287
|
}
|
275
288
|
}
|
276
289
|
if (bridge.isA) {
|
277
290
|
for (const parent of bridge.isA) {
|
278
|
-
|
291
|
+
if (parent.parent) {
|
292
|
+
config.addHierarchy(bridge.id, parent.parent, parent.instance)
|
293
|
+
} else {
|
294
|
+
config.addHierarchy(bridge.id, parent)
|
295
|
+
}
|
279
296
|
}
|
280
297
|
}
|
281
298
|
if (bridge.before) {
|
@@ -338,8 +355,8 @@ const handleBridgeProps = (config, bridge, { addFirst, uuid } = {}) => {
|
|
338
355
|
const level = bridge.generatorp.level >= 0 ? bridge.generatorp.level : bridge.level + 1
|
339
356
|
|
340
357
|
const generator = {
|
341
|
-
where: bridge.generatorp.where || bridge.where ||
|
342
|
-
match: (args) => bridge.id == args.context.marker && args.context.level == level && args.context.paraphrase && match(args),
|
358
|
+
where: bridge.generatorp.where || bridge.where || helpers.where(4),
|
359
|
+
match: async (args) => bridge.id == args.context.marker && args.context.level == level && args.context.paraphrase && await match(args),
|
343
360
|
apply: (args) => apply(args),
|
344
361
|
applyWrapped: apply,
|
345
362
|
property: 'generatorp'
|
@@ -355,8 +372,8 @@ const handleBridgeProps = (config, bridge, { addFirst, uuid } = {}) => {
|
|
355
372
|
const apply = typeof bridge.generatorr === 'function' ? bridge.generatorr : bridge.generatorr.apply || bridge.generatorr
|
356
373
|
const level = bridge.generatorr.level >= 0 ? bridge.generatorr.level : bridge.level + 1
|
357
374
|
const generator = {
|
358
|
-
where: bridge.generatorr.where || bridge.where ||
|
359
|
-
match: (args) => bridge.id == args.context.marker && args.context.level == level && !args.context.paraphrase && (args.context.response || args.context.isResponse) && match(args),
|
375
|
+
where: bridge.generatorr.where || bridge.where || helpers.where(4),
|
376
|
+
match: async (args) => bridge.id == args.context.marker && args.context.level == level && !args.context.paraphrase && (args.context.response || args.context.isResponse) && await match(args),
|
360
377
|
apply: (args) => apply(args),
|
361
378
|
applyWrapped: apply,
|
362
379
|
property: 'generatorr'
|
@@ -369,7 +386,7 @@ const handleBridgeProps = (config, bridge, { addFirst, uuid } = {}) => {
|
|
369
386
|
}
|
370
387
|
if (bridge.evaluator) {
|
371
388
|
const semantic = {
|
372
|
-
where: bridge.evaluator.where || bridge.where ||
|
389
|
+
where: bridge.evaluator.where || bridge.where || helpers.where(3),
|
373
390
|
match: ({ context }) => bridge.id == context.marker && context.evaluate,
|
374
391
|
apply: (args) => bridge.evaluator(args),
|
375
392
|
applyWrapped: bridge.evaluator,
|
@@ -383,7 +400,7 @@ const handleBridgeProps = (config, bridge, { addFirst, uuid } = {}) => {
|
|
383
400
|
}
|
384
401
|
if (bridge.semantic) {
|
385
402
|
const semantic = {
|
386
|
-
where: bridge.semantic.where || bridge.where ||
|
403
|
+
where: bridge.semantic.where || bridge.where || helpers.where(3),
|
387
404
|
match: ({ context }) => bridge.id == context.marker && !context.evaluate,
|
388
405
|
apply: (args) => bridge.semantic(args),
|
389
406
|
applyWrapped: bridge.semantic,
|
@@ -551,7 +568,7 @@ function isLetter (char) {
|
|
551
568
|
}
|
552
569
|
*/
|
553
570
|
|
554
|
-
function configDup (config, options) {
|
571
|
+
async function configDup (config, options) {
|
555
572
|
if (config instanceof Config) {
|
556
573
|
return config.copy(options)
|
557
574
|
}
|
@@ -691,9 +708,9 @@ class KM {
|
|
691
708
|
return true
|
692
709
|
}
|
693
710
|
|
694
|
-
copy2 (options) {
|
711
|
+
async copy2 (options) {
|
695
712
|
// greg -> add a flag to say don't init the api's
|
696
|
-
const config = configDup(this._config, options)
|
713
|
+
const config = await configDup(this._config, options)
|
697
714
|
const km = new KM({
|
698
715
|
config,
|
699
716
|
getCounter: options.getCounter,
|
@@ -705,10 +722,10 @@ class KM {
|
|
705
722
|
return km // copy2()
|
706
723
|
}
|
707
724
|
|
708
|
-
copy () {
|
725
|
+
async copy () {
|
709
726
|
const km = new KM({
|
710
727
|
name: this._name,
|
711
|
-
config: configDup(this._config),
|
728
|
+
config: await configDup(this._config),
|
712
729
|
// _uuid: uuidv4(),
|
713
730
|
_uuid: this._config.getCounter(this._config._name),
|
714
731
|
getCounter: (name) => this._config.getCounter(name),
|
@@ -760,12 +777,11 @@ const multiApiImpl = (initializer) => {
|
|
760
777
|
multiApi: true,
|
761
778
|
|
762
779
|
// multi functions
|
763
|
-
add: (config, multiApi, api) => {
|
780
|
+
add: async (config, multiApi, api, apiConstructor) => {
|
764
781
|
initializer(config, api)
|
765
782
|
const name = api.getName()
|
766
783
|
multiApi.apis[name] = api
|
767
|
-
|
768
|
-
// api.config = () => config
|
784
|
+
multiApi.apiConstructors[name] = apiConstructor
|
769
785
|
multiApi.current = name
|
770
786
|
},
|
771
787
|
|
@@ -788,6 +804,9 @@ const multiApiImpl = (initializer) => {
|
|
788
804
|
apis: {
|
789
805
|
},
|
790
806
|
|
807
|
+
apiConstructors: {
|
808
|
+
},
|
809
|
+
|
791
810
|
// api functions
|
792
811
|
api: (multiApi) => multiApi.apis[multiApi.current]
|
793
812
|
})
|
@@ -798,17 +817,6 @@ class Config {
|
|
798
817
|
return config_toServer(config)
|
799
818
|
}
|
800
819
|
|
801
|
-
base () {
|
802
|
-
const base = new Config()
|
803
|
-
for (const km of this.configs.reverse()) {
|
804
|
-
if (km.isSelf) {
|
805
|
-
continue
|
806
|
-
}
|
807
|
-
base.add(km.config)
|
808
|
-
}
|
809
|
-
return base
|
810
|
-
}
|
811
|
-
|
812
820
|
getInfo () {
|
813
821
|
const name = this.name
|
814
822
|
const includes = this.configs.slice(1).map((km) => km.config.name)
|
@@ -852,6 +860,7 @@ class Config {
|
|
852
860
|
addArgs: (...args) => this.addArgs(...args),
|
853
861
|
getBridge: (...args) => this.getBridge(...args),
|
854
862
|
fragment: (...args) => this.fragment(...args),
|
863
|
+
server: (...args) => this.server(...args),
|
855
864
|
exists: (...args) => this.exists(...args),
|
856
865
|
addAPI: (...args) => this.addAPI(...args)
|
857
866
|
}
|
@@ -988,23 +997,8 @@ class Config {
|
|
988
997
|
|
989
998
|
// value is in response field
|
990
999
|
// TODO maybe generalize out query+evaluate along the lines of set value and set reference
|
991
|
-
|
992
|
-
|
993
|
-
const instance = s({ ...context, evaluate: true })
|
994
|
-
if (!instance.evalue && !instance.verbatim && !instance.value) {
|
995
|
-
this.warningNotEvaluated(log, context);
|
996
|
-
}
|
997
|
-
if (!instance.evalue) {
|
998
|
-
instance.evalue = instance.value
|
999
|
-
instance.edefault = true
|
1000
|
-
}
|
1001
|
-
delete instance.evaluate
|
1002
|
-
instance.instance = true;
|
1003
|
-
return instance
|
1004
|
-
}
|
1005
|
-
*/
|
1006
|
-
getEvaluator (s, calls, log, context) {
|
1007
|
-
const instance = s({ ...context, evaluate: true })
|
1000
|
+
async getEvaluator (s, calls, log, context) {
|
1001
|
+
const instance = await s({ ...context, evaluate: true })
|
1008
1002
|
calls.touch(instance)
|
1009
1003
|
if (!instance.evalue && !instance.verbatim && !instance.value) {
|
1010
1004
|
this.warningNotEvaluated(log, context)
|
@@ -1018,19 +1012,21 @@ class Config {
|
|
1018
1012
|
return instance
|
1019
1013
|
}
|
1020
1014
|
|
1021
|
-
fragmentInstantiator (contexts) {
|
1015
|
+
fragmentInstantiator (args, contexts) {
|
1022
1016
|
return new Object({
|
1023
1017
|
contexts: () => contexts,
|
1024
|
-
instantiate: (mappings) => {
|
1018
|
+
instantiate: async (mappings) => {
|
1025
1019
|
const instantiated = _.cloneDeep(contexts)
|
1026
1020
|
// const todo = [...instantiated]
|
1027
1021
|
// const todo = [...instantiated]
|
1028
1022
|
const todo = _.clone(instantiated)
|
1023
|
+
args = {...args}
|
1029
1024
|
while (todo.length > 0) {
|
1030
1025
|
const context = todo.pop()
|
1026
|
+
args.context = context
|
1031
1027
|
for (const mapping of mappings) {
|
1032
|
-
if (mapping.match(
|
1033
|
-
mapping.apply(
|
1028
|
+
if (await mapping.match(args)) {
|
1029
|
+
await mapping.apply(args)
|
1034
1030
|
}
|
1035
1031
|
}
|
1036
1032
|
for (const key of Object.keys(context)) {
|
@@ -1049,11 +1045,21 @@ class Config {
|
|
1049
1045
|
})
|
1050
1046
|
}
|
1051
1047
|
|
1052
|
-
fragment (query) {
|
1048
|
+
fragment (args, query) {
|
1053
1049
|
for (const instance of (this.instances || [])) {
|
1054
1050
|
for (const fragment of (instance.fragments || [])) {
|
1055
1051
|
if (fragment.query === query) {
|
1056
|
-
return this.fragmentInstantiator(fragment.contexts)
|
1052
|
+
return this.fragmentInstantiator(args, fragment.contexts)
|
1053
|
+
}
|
1054
|
+
}
|
1055
|
+
for (const fragment of (instance.resultss || [])) {
|
1056
|
+
if (fragment.isFragment && fragment.query === query) {
|
1057
|
+
return this.fragmentInstantiator(args, fragment.contexts)
|
1058
|
+
}
|
1059
|
+
}
|
1060
|
+
for (const fragment of (this.fragmentsBeingBuilt || [])) {
|
1061
|
+
if (fragment.query === query) {
|
1062
|
+
return this.fragmentInstantiator(args, fragment.contexts)
|
1057
1063
|
}
|
1058
1064
|
}
|
1059
1065
|
}
|
@@ -1093,6 +1099,27 @@ class Config {
|
|
1093
1099
|
} else {
|
1094
1100
|
const config = { ...queryOrConfig }
|
1095
1101
|
delete config.where
|
1102
|
+
|
1103
|
+
if (config.words && config.words.hierarchy) {
|
1104
|
+
config.words.hierarchy = config.words.hierarchy.map( (value) => {
|
1105
|
+
value = {...value}
|
1106
|
+
delete value.uuid
|
1107
|
+
return value
|
1108
|
+
})
|
1109
|
+
}
|
1110
|
+
|
1111
|
+
if (config.words && config.words.patterns) {
|
1112
|
+
config.words.patterns = config.words.patterns.map( (value) => {
|
1113
|
+
value = {...value}
|
1114
|
+
value.defs = value.defs.map( (value) => {
|
1115
|
+
value = {...value}
|
1116
|
+
delete value.uuid
|
1117
|
+
return value
|
1118
|
+
})
|
1119
|
+
return value
|
1120
|
+
})
|
1121
|
+
}
|
1122
|
+
|
1096
1123
|
config.operators = (config.operators || []).map((operator) => {
|
1097
1124
|
if (typeof operator === 'string') {
|
1098
1125
|
return { pattern: operator }
|
@@ -1120,6 +1147,9 @@ class Config {
|
|
1120
1147
|
delete bridge.generatorpr
|
1121
1148
|
delete bridge.evaluator
|
1122
1149
|
delete bridge.semantic
|
1150
|
+
if (!bridge.bridge) {
|
1151
|
+
bridge.bridge = "{ ...next(operator) }"
|
1152
|
+
}
|
1123
1153
|
return bridge
|
1124
1154
|
})
|
1125
1155
|
} else {
|
@@ -1171,8 +1201,24 @@ class Config {
|
|
1171
1201
|
let startOfChanges
|
1172
1202
|
for (let iq = 0; iq < templateQueries.length; ++iq) {
|
1173
1203
|
if (!helpers.safeEquals(templateQueries[iq], instanceQueries[iq])) {
|
1174
|
-
|
1175
|
-
|
1204
|
+
// if the current and rest are not queries or fragments then treat as not needing rebuild
|
1205
|
+
if (templateQueries.length != instanceQueries.length) {
|
1206
|
+
sameQueries = false
|
1207
|
+
startOfChanges = iq
|
1208
|
+
} else {
|
1209
|
+
let hasQueryOrFragment = false
|
1210
|
+
for (let rest = iq; rest < templateQueries.length; ++rest) {
|
1211
|
+
const value = templateQueries[rest]
|
1212
|
+
if (typeof value == 'string' || (value.query && value.isFragment)) {
|
1213
|
+
hasQueryOrFragment = true
|
1214
|
+
break
|
1215
|
+
}
|
1216
|
+
}
|
1217
|
+
if (hasQueryOrFragment) {
|
1218
|
+
sameQueries = false
|
1219
|
+
startOfChanges = iq
|
1220
|
+
}
|
1221
|
+
}
|
1176
1222
|
break;
|
1177
1223
|
}
|
1178
1224
|
}
|
@@ -1197,7 +1243,9 @@ class Config {
|
|
1197
1243
|
// console.log("instanceFragments", instanceFragments)
|
1198
1244
|
}
|
1199
1245
|
}
|
1200
|
-
if (startOfChanges
|
1246
|
+
if (startOfChanges) {
|
1247
|
+
return { needsRebuild: true, startOfChanges, previousResultss: instance.resultss }
|
1248
|
+
} else if (startOfChanges || instance.resultss) {
|
1201
1249
|
return { needsRebuild: !(instance && sameQueries && sameFragments), startOfChanges, previousResultss: instance.resultss }
|
1202
1250
|
} else {
|
1203
1251
|
return { needsRebuild: !(instance && sameQueries && sameFragments) }
|
@@ -1222,7 +1270,7 @@ class Config {
|
|
1222
1270
|
}
|
1223
1271
|
|
1224
1272
|
// loadTemplate
|
1225
|
-
load (template, instance, options = { rebuild: false, previousResultss: undefined, startOfChanges: undefined }) {
|
1273
|
+
async load (rebuildTemplate, template, instance, options = { rebuild: false, previousResultss: undefined, startOfChanges: undefined }) {
|
1226
1274
|
this.validifyTemplate(template)
|
1227
1275
|
instance.template = template
|
1228
1276
|
this.logs.push(`loading template for ${this.name}`)
|
@@ -1230,7 +1278,7 @@ class Config {
|
|
1230
1278
|
// TODO fix beforeQuery
|
1231
1279
|
template = { fragments: [], configs: [], ...template }
|
1232
1280
|
template.fragments = template.fragments.concat(this.dynamicFragments)
|
1233
|
-
|
1281
|
+
rebuildTemplate({ config: this, target: this.name, previousResultss: options.previousResultss, startOfChanges: options.startOfChanges, beforeQuery: () => {}, template, ...options })
|
1234
1282
|
} else {
|
1235
1283
|
// no change
|
1236
1284
|
// this.initInstances.push({ ...instance, name: config.name })
|
@@ -1255,7 +1303,7 @@ class Config {
|
|
1255
1303
|
instance.name = this.name
|
1256
1304
|
this.initInstances.push(instance)
|
1257
1305
|
this.instances.push(instance)
|
1258
|
-
|
1306
|
+
await configHelpers.loadInstance(this, instance)
|
1259
1307
|
}
|
1260
1308
|
}
|
1261
1309
|
}
|
@@ -1309,9 +1357,9 @@ class Config {
|
|
1309
1357
|
}
|
1310
1358
|
}
|
1311
1359
|
|
1312
|
-
addHierarchy (child, parent) {
|
1360
|
+
addHierarchy (child, parent, instance) {
|
1313
1361
|
if (child && parent || !child || Array.isArray(child) || (typeof child === 'string' && !parent)) {
|
1314
|
-
this.addHierarchyChildParent(child, parent)
|
1362
|
+
this.addHierarchyChildParent(child, parent, instance)
|
1315
1363
|
// this.addHierarchyProperties ({ child, parent })
|
1316
1364
|
} else {
|
1317
1365
|
this.addHierarchyProperties(child)
|
@@ -1319,26 +1367,32 @@ class Config {
|
|
1319
1367
|
}
|
1320
1368
|
|
1321
1369
|
addHierarchyProperties (edge) {
|
1322
|
-
const { child, parent } = edge
|
1370
|
+
const { child, parent, instance } = edge
|
1323
1371
|
if (typeof child !== 'string') {
|
1324
1372
|
throw new Error(`addHierarchy expected child property to be a string. got ${JSON.stringify(child)}`)
|
1325
1373
|
}
|
1326
1374
|
if (typeof parent !== 'string') {
|
1327
1375
|
throw new Error(`addHierarchy expected parent property to be a string. got ${JSON.stringify(parent)}`)
|
1328
1376
|
}
|
1377
|
+
if (instance && typeof instance !== 'boolean') {
|
1378
|
+
throw new Error(`addHierarchy expected instance property to be a boolean or undefined. got ${JSON.stringify(instance)}`)
|
1379
|
+
}
|
1329
1380
|
debugHierarchy([child, parent])
|
1330
1381
|
this.config.hierarchy.push(edge)
|
1331
1382
|
// TODO greg11 this.hierarchy.addEdge(edge)
|
1332
|
-
this._delta.json.hierarchy.push([child, parent])
|
1383
|
+
this._delta.json.hierarchy.push([child, parent, instance || false])
|
1333
1384
|
}
|
1334
1385
|
|
1335
|
-
addHierarchyChildParent (child, parent) {
|
1386
|
+
addHierarchyChildParent (child, parent, instance) {
|
1336
1387
|
if (typeof child !== 'string') {
|
1337
1388
|
throw new Error(`addHierarchy expected child to be a string. got ${JSON.stringify(child)}`)
|
1338
1389
|
}
|
1339
1390
|
if (typeof parent !== 'string') {
|
1340
1391
|
throw new Error(`addHierarchy expected parent to be a string. got ${JSON.stringify(parent)}`)
|
1341
1392
|
}
|
1393
|
+
if (instance && typeof instance !== 'boolean') {
|
1394
|
+
throw new Error(`addHierarchy expected instance property to be a boolean or undefined. got ${JSON.stringify(instance)}`)
|
1395
|
+
}
|
1342
1396
|
debugHierarchy([child, parent])
|
1343
1397
|
if (this.config.hierarchy.find((element) => {
|
1344
1398
|
const hc = hierarchyCanonical(element)
|
@@ -1349,9 +1403,9 @@ class Config {
|
|
1349
1403
|
return
|
1350
1404
|
}
|
1351
1405
|
|
1352
|
-
this.config.hierarchy.push([child, parent])
|
1406
|
+
this.config.hierarchy.push([child, parent, instance || false])
|
1353
1407
|
// this.hierarchy.addEdge([child, parent])
|
1354
|
-
this._delta.json.hierarchy.push([child, parent])
|
1408
|
+
this._delta.json.hierarchy.push([child, parent, instance || false])
|
1355
1409
|
}
|
1356
1410
|
|
1357
1411
|
getBridge (id, level) {
|
@@ -1398,7 +1452,7 @@ class Config {
|
|
1398
1452
|
}
|
1399
1453
|
|
1400
1454
|
if (!generator.where) {
|
1401
|
-
generator.where =
|
1455
|
+
generator.where = helpers.where(3)
|
1402
1456
|
}
|
1403
1457
|
|
1404
1458
|
const generators = this.config.generators
|
@@ -1421,7 +1475,7 @@ class Config {
|
|
1421
1475
|
}
|
1422
1476
|
|
1423
1477
|
if (!semantic.where) {
|
1424
|
-
semantic.where =
|
1478
|
+
semantic.where = helpers.where(3)
|
1425
1479
|
}
|
1426
1480
|
|
1427
1481
|
const semantics = this.config.semantics
|
@@ -1608,16 +1662,12 @@ class Config {
|
|
1608
1662
|
return params
|
1609
1663
|
}
|
1610
1664
|
|
1611
|
-
|
1612
|
-
|
1613
|
-
}
|
1614
|
-
|
1615
|
-
processContext (context) {
|
1616
|
-
return client.processContext(context, this.getParams())
|
1665
|
+
async processContext (context) {
|
1666
|
+
return await configHelpers.processContext(context, this.getParams())
|
1617
1667
|
}
|
1618
1668
|
|
1619
1669
|
process (query, options) {
|
1620
|
-
return
|
1670
|
+
return this.clientProcess(this, query, options)
|
1621
1671
|
}
|
1622
1672
|
|
1623
1673
|
query (query, options) {
|
@@ -1757,8 +1807,25 @@ class Config {
|
|
1757
1807
|
config.words.hierarchy = hierarchyPrime
|
1758
1808
|
}
|
1759
1809
|
|
1810
|
+
terminate() {
|
1811
|
+
this.configs.forEach((km) => {
|
1812
|
+
const config = km.config
|
1813
|
+
if (!config.terminatorFn) {
|
1814
|
+
this.terminatorFn(this)
|
1815
|
+
} else {
|
1816
|
+
config.terminatorFn(this)
|
1817
|
+
}
|
1818
|
+
})
|
1819
|
+
}
|
1820
|
+
|
1821
|
+
setTerminator(terminatorFn) {
|
1822
|
+
if (terminatorFn) {
|
1823
|
+
this.terminatorFn = terminatorFn
|
1824
|
+
}
|
1825
|
+
}
|
1826
|
+
|
1760
1827
|
// configs = [ { config, namespace } ... ]
|
1761
|
-
constructor (config, module) {
|
1828
|
+
constructor (config, module, clientProcess) {
|
1762
1829
|
if (config instanceof Config) {
|
1763
1830
|
throw new Error('Excepted the config argument to be a hash not a Config object')
|
1764
1831
|
}
|
@@ -1776,6 +1843,7 @@ class Config {
|
|
1776
1843
|
config.priorities = config.priorities || []
|
1777
1844
|
}
|
1778
1845
|
|
1846
|
+
this.clientProcess = clientProcess
|
1779
1847
|
this.maxDepth = 20 // for generators and semantics
|
1780
1848
|
this.debugLoops = false // for generators and semantics
|
1781
1849
|
|
@@ -1801,24 +1869,6 @@ class Config {
|
|
1801
1869
|
// when running configs any bridges added are marked as transitory so that the associated will ignore those op's
|
1802
1870
|
this.transitoryMode = false
|
1803
1871
|
|
1804
|
-
// check for duplicate bridges
|
1805
|
-
if (config && config.bridges) {
|
1806
|
-
let duplicated = new Set()
|
1807
|
-
const seen = new Set()
|
1808
|
-
for (const bridge of config.bridges) {
|
1809
|
-
const id = `${bridge.id}/${bridge.level}`
|
1810
|
-
if (seen.has(id)) {
|
1811
|
-
duplicated.add(id)
|
1812
|
-
} else {
|
1813
|
-
seen.add(id)
|
1814
|
-
}
|
1815
|
-
}
|
1816
|
-
duplicated = Array.from(duplicated)
|
1817
|
-
if (duplicated.length > 0) {
|
1818
|
-
throw new Error(`In the KM ${config.name}, the following operators are duplicated in the bridges: ${duplicated}`)
|
1819
|
-
}
|
1820
|
-
}
|
1821
|
-
|
1822
1872
|
if (config && config.words) {
|
1823
1873
|
initWords(config.words)
|
1824
1874
|
isValidWordDef(config.words)
|
@@ -1840,6 +1890,7 @@ class Config {
|
|
1840
1890
|
currentConfig.wasInitialized = true
|
1841
1891
|
}
|
1842
1892
|
}
|
1893
|
+
this.terminatorFn = () => {}
|
1843
1894
|
if (config) {
|
1844
1895
|
this.name = config.name
|
1845
1896
|
}
|
@@ -1867,6 +1918,7 @@ class Config {
|
|
1867
1918
|
}
|
1868
1919
|
this.get('objects').namespaced[this._uuid] = {}
|
1869
1920
|
this.valid()
|
1921
|
+
this.checks()
|
1870
1922
|
debugConfigProps(this.config)
|
1871
1923
|
}
|
1872
1924
|
|
@@ -1878,9 +1930,9 @@ class Config {
|
|
1878
1930
|
this._stop_auto_rebuild = true
|
1879
1931
|
}
|
1880
1932
|
|
1881
|
-
restart_auto_rebuild() {
|
1933
|
+
async restart_auto_rebuild() {
|
1882
1934
|
this._stop_auto_rebuild = false
|
1883
|
-
this.rebuild()
|
1935
|
+
await this.rebuild()
|
1884
1936
|
}
|
1885
1937
|
|
1886
1938
|
getAddedArgs (args) {
|
@@ -1899,8 +1951,8 @@ class Config {
|
|
1899
1951
|
}
|
1900
1952
|
}
|
1901
1953
|
|
1902
|
-
|
1903
|
-
this.
|
1954
|
+
async setMultiApi (initializer) {
|
1955
|
+
await this.setApi(() => multiApiImpl(initializer))
|
1904
1956
|
}
|
1905
1957
|
|
1906
1958
|
get multiApi () {
|
@@ -1948,31 +2000,38 @@ class Config {
|
|
1948
2000
|
}
|
1949
2001
|
}
|
1950
2002
|
|
1951
|
-
addAPI (api) {
|
2003
|
+
async addAPI (api) {
|
2004
|
+
// console.trace()
|
2005
|
+
// throw "addAPI"
|
1952
2006
|
if (this._api && this._api.multiApi) {
|
1953
|
-
this._api.add(this, this._api, api)
|
2007
|
+
await this._api.add(this, this._api, api)
|
1954
2008
|
} else {
|
1955
2009
|
throw new Error('Can only add apis to a multi-api')
|
1956
2010
|
}
|
1957
2011
|
}
|
1958
2012
|
|
1959
|
-
|
2013
|
+
async setApi (constructor) {
|
2014
|
+
if (typeof constructor !== 'function') {
|
2015
|
+
throw new Error(`Expected the argument to be an API constructor for ${this.name}.`)
|
2016
|
+
}
|
2017
|
+
const value = constructor()
|
1960
2018
|
if (!value.initialize) {
|
1961
2019
|
throw new Error(`Expected the API to have an initialize function for ${this.name}.`)
|
1962
2020
|
}
|
1963
2021
|
|
1964
2022
|
if (this._api && this._api.multiApi) {
|
1965
|
-
this._api.add(this, this._api, value)
|
1966
|
-
|
1967
|
-
this.
|
1968
|
-
|
1969
|
-
|
1970
|
-
|
1971
|
-
|
1972
|
-
// this._api.uuid = this._uuid
|
2023
|
+
await this._api.add(this, this._api, value, constructor)
|
2024
|
+
const previousApiConstructor = this._apiConstructor
|
2025
|
+
this._apiConstructor = (config) => {
|
2026
|
+
const api = previousApiConstructor(config)
|
2027
|
+
// does this need await?
|
2028
|
+
api.add(config, api, constructor(config), constructor)
|
2029
|
+
return api
|
1973
2030
|
}
|
1974
|
-
|
1975
|
-
this.
|
2031
|
+
} else {
|
2032
|
+
this._api = value
|
2033
|
+
this._apiConstructor = constructor
|
2034
|
+
await this.rebuild()
|
1976
2035
|
}
|
1977
2036
|
}
|
1978
2037
|
|
@@ -1992,7 +2051,7 @@ class Config {
|
|
1992
2051
|
}
|
1993
2052
|
|
1994
2053
|
// remove all added modules and initialize with the init config
|
1995
|
-
resetToOne () {
|
2054
|
+
async resetToOne () {
|
1996
2055
|
/*
|
1997
2056
|
this.config = _.cloneDeep(this.initConfig)
|
1998
2057
|
this.configs = [this.configs[0]]
|
@@ -2001,11 +2060,8 @@ class Config {
|
|
2001
2060
|
*/
|
2002
2061
|
this.configs = [this.configs[0]]
|
2003
2062
|
this.defaultConfig()
|
2004
|
-
|
2005
|
-
|
2006
|
-
Object.assign(this.config.objects, _.cloneDeep(this.initConfig.objects || {}))
|
2007
|
-
}
|
2008
|
-
this.initializeConfigFromConfigs({ others: [], objects: this.config.objects.namespaced, moreNames: [], callInitializers: false })
|
2063
|
+
Object.assign(this.config.objects, _.cloneDeep(this.initConfig.objects || {}))
|
2064
|
+
await this.initializeConfigFromConfigs({ others: [], objects: this.config.objects.namespaced, moreNames: [], callInitializers: false })
|
2009
2065
|
const map = {}
|
2010
2066
|
for (let i = 0; i < this.configs.length; ++i) {
|
2011
2067
|
map[this.configs[i].uuid] = this.configs[i].uuid
|
@@ -2027,21 +2083,27 @@ class Config {
|
|
2027
2083
|
runtime.fs.writeFileSync(fn, JSON.stringify(this.config, 0, 2))
|
2028
2084
|
}
|
2029
2085
|
|
2030
|
-
copy (options = { callInitializers: true }) {
|
2031
|
-
}
|
2032
|
-
|
2033
|
-
copy (options = { callInitializers: true }) {
|
2086
|
+
async copy (options = { callInitializers: true }) {
|
2034
2087
|
this.valid()
|
2035
2088
|
const cp = new Config()
|
2036
2089
|
cp.logs = []
|
2037
2090
|
cp.maxDepth = this.maxDepth
|
2038
2091
|
cp.debugLoops = this.debugLoops
|
2039
2092
|
cp.transitoryMode = this.transitoryMode
|
2040
|
-
cp.configs = this.configs.map((km) => km.copy2(Object.assign({}, options, { getCounter: (name) => cp.getCounter(name), callInitializers: false })))
|
2093
|
+
// cp.configs = this.configs.map((km) => await km.copy2(Object.assign({}, options, { getCounter: (name) => cp.getCounter(name), callInitializers: false })))
|
2094
|
+
cp.configs = []
|
2095
|
+
for (const km of this.configs) {
|
2096
|
+
cp.configs.push(await km.copy2(Object.assign({}, options, { getCounter: (name) => cp.getCounter(name), callInitializers: false })))
|
2097
|
+
}
|
2041
2098
|
cp._uuid = cp.configs[0]._uuid
|
2042
2099
|
// update uuid here set the uuid in the objects and add error checking
|
2043
2100
|
cp.initializerFn = this.initializerFn
|
2044
|
-
cp.
|
2101
|
+
cp.terminatorFn = this.terminatorFn
|
2102
|
+
// cp._api = _.cloneDeep(this._api)
|
2103
|
+
if (this._apiConstructor) {
|
2104
|
+
cp._api = this._apiConstructor(cp)
|
2105
|
+
cp._apiConstructor = this._apiConstructor
|
2106
|
+
}
|
2045
2107
|
cp._namespace = this._namespace
|
2046
2108
|
cp._eqClasses = this._eqClasses
|
2047
2109
|
cp.name = this.name
|
@@ -2053,18 +2115,14 @@ class Config {
|
|
2053
2115
|
cp.instances = this.instances.slice()
|
2054
2116
|
cp.configCounter = this.configCounter
|
2055
2117
|
cp.testConfig = this.testConfig
|
2118
|
+
cp._server = this._server
|
2056
2119
|
|
2057
2120
|
cp.initConfig = _.cloneDeep(this.initConfig)
|
2058
2121
|
cp.defaultConfig()
|
2059
2122
|
// cp.wasInitialized = false; // since default config GREG
|
2060
2123
|
cp.resetWasInitialized()
|
2061
|
-
|
2062
|
-
|
2063
|
-
Object.assign(cp.config.objects, _.cloneDeep(this.initConfig.objects || {}))
|
2064
|
-
}
|
2065
|
-
// cp.initializeConfigFromConfigs({ others: [], objects: cp.config.objects.namespaced, moreNames: [], ...options })
|
2066
|
-
// cp.initializeConfigFromConfigs(Object.assign({ others: [], objects: cp.config.objects.namespaced, moreNames: [] }, { callInitializers: false }))
|
2067
|
-
cp.initializeConfigFromConfigs(Object.assign({ others: [], objects: cp.config.objects.namespaced, moreNames: [] }, options))
|
2124
|
+
Object.assign(cp.config.objects, _.cloneDeep(this.initConfig.objects || {}))
|
2125
|
+
await cp.initializeConfigFromConfigs(Object.assign({ others: [], objects: cp.config.objects.namespaced, moreNames: [] }, options))
|
2068
2126
|
const map = {}
|
2069
2127
|
for (let i = 0; i < this.configs.length; ++i) {
|
2070
2128
|
map[this.configs[i].uuid] = cp.configs[i].uuid
|
@@ -2075,33 +2133,16 @@ class Config {
|
|
2075
2133
|
// debugger
|
2076
2134
|
}
|
2077
2135
|
if (options.callInitializers) {
|
2078
|
-
cp.rebuild(options)
|
2136
|
+
await cp.rebuild(options) // in copy
|
2079
2137
|
} else {
|
2080
|
-
// this mess is for duplicate into a KM after resetToOne was called
|
2081
|
-
/*
|
2082
|
-
if (cp._api) {
|
2083
|
-
// cp._api.objects = cp.config.objects
|
2084
|
-
// cp._api.config = () => (cp instanceof Config) ? cp : cp.config
|
2085
|
-
// cp._api.uuid = cp._uuid
|
2086
|
-
}
|
2087
|
-
*/
|
2088
|
-
|
2089
2138
|
if (!cp.config.objects) {
|
2090
2139
|
cp.config.objects = { namespaced: {} }
|
2091
2140
|
} else if (!cp.config.objects.namespaced) {
|
2092
2141
|
cp.config.objects.namespaced = {}
|
2093
2142
|
}
|
2094
2143
|
cp.configs.forEach((km) => {
|
2095
|
-
// const namespace = km.namespace
|
2096
2144
|
cp.config.objects.namespaced[km._uuid] = {}
|
2097
2145
|
})
|
2098
|
-
/*
|
2099
|
-
if (cp._uuid == 'concept2') {
|
2100
|
-
if (!cp.api.objects.defaultTypesForHierarchy) {
|
2101
|
-
debugger
|
2102
|
-
}
|
2103
|
-
}
|
2104
|
-
*/
|
2105
2146
|
}
|
2106
2147
|
cp.valid()
|
2107
2148
|
return cp
|
@@ -2225,41 +2266,7 @@ class Config {
|
|
2225
2266
|
}
|
2226
2267
|
}
|
2227
2268
|
|
2228
|
-
|
2229
|
-
// [...this.configs].reverse().forEach(({ config, namespace, uuid }) => {
|
2230
|
-
[...this.configs].reverse().forEach(({ config, namespace, uuid }) => {
|
2231
|
-
/*
|
2232
|
-
let objects = this.get('objects')
|
2233
|
-
if (namespace) {
|
2234
|
-
objects = {}
|
2235
|
-
this.get('objects')['namespaced'][namespace] = objects
|
2236
|
-
}
|
2237
|
-
*/
|
2238
|
-
const objects = {}
|
2239
|
-
if (config instanceof Config) {
|
2240
|
-
this.get('objects').namespaced[config._uuid] = objects
|
2241
|
-
/*
|
2242
|
-
if (config._api) {
|
2243
|
-
// config._api.objects = objects
|
2244
|
-
// config._api.config = () => this
|
2245
|
-
}
|
2246
|
-
*/
|
2247
|
-
config.initializerFn(setupInitializerFNArgs(this, { testConfig: config, currentConfig: config, objects, namespace, uuid }))
|
2248
|
-
} else {
|
2249
|
-
this.get('objects').namespaced[this._uuid] = objects
|
2250
|
-
/*
|
2251
|
-
if (config._api) {
|
2252
|
-
// config._api.objects = objects
|
2253
|
-
// config._api.config = () => this
|
2254
|
-
}
|
2255
|
-
*/
|
2256
|
-
this.initializerFn(setupInitializerFNArgs(this, { testConfig: this, currentConfig: this, objects, namespace, uuid }))
|
2257
|
-
}
|
2258
|
-
})
|
2259
|
-
this.instances.forEach((instance) => client.loadInstance(this, instance))
|
2260
|
-
}
|
2261
|
-
|
2262
|
-
initialize ({ force = true } = {}) {
|
2269
|
+
initialize23 ({ force = true } = {}) {
|
2263
2270
|
if (force || !this.wasInitialized) {
|
2264
2271
|
const objects = this.config.objects.namespaced[this._uuid]
|
2265
2272
|
this.initializerFn(setupInitializerFNArgs(this, { testConfig: this, currentConfig: this, objects, uuid: this._uuid, namespace: '' }))
|
@@ -2267,7 +2274,7 @@ class Config {
|
|
2267
2274
|
}
|
2268
2275
|
}
|
2269
2276
|
|
2270
|
-
initializer (fn, options = {}) {
|
2277
|
+
async initializer (fn, options = {}) {
|
2271
2278
|
if (options) {
|
2272
2279
|
for (const option of Object.keys(options)) {
|
2273
2280
|
const validOptions = []
|
@@ -2289,8 +2296,7 @@ class Config {
|
|
2289
2296
|
currentConfig.wasInitialized = true
|
2290
2297
|
global.transitoryMode = transitoryMode
|
2291
2298
|
}
|
2292
|
-
|
2293
|
-
this.rebuild()
|
2299
|
+
await this.rebuild()
|
2294
2300
|
}
|
2295
2301
|
|
2296
2302
|
nsToString (id) {
|
@@ -2436,7 +2442,7 @@ class Config {
|
|
2436
2442
|
}
|
2437
2443
|
|
2438
2444
|
// rebuild ({ isModule: mainIsModule = false } = {}) {
|
2439
|
-
rebuild ({ isModule: mainIsModule } = {}) {
|
2445
|
+
async rebuild ({ isModule: mainIsModule } = {}) {
|
2440
2446
|
if (this._stop_auto_rebuild) {
|
2441
2447
|
return
|
2442
2448
|
}
|
@@ -2604,7 +2610,7 @@ class Config {
|
|
2604
2610
|
}
|
2605
2611
|
const instance = this.instances.find((instance) => instance.name == name)
|
2606
2612
|
if (instance) {
|
2607
|
-
|
2613
|
+
await configHelpers.loadInstance(this, instance)
|
2608
2614
|
}
|
2609
2615
|
this.hierarchy.edges = this.config.hierarchy
|
2610
2616
|
}
|
@@ -2612,7 +2618,7 @@ class Config {
|
|
2612
2618
|
|
2613
2619
|
this.hierarchy.edges = this.config.hierarchy
|
2614
2620
|
this.valid()
|
2615
|
-
this.
|
2621
|
+
this.checks()
|
2616
2622
|
}
|
2617
2623
|
|
2618
2624
|
nameToUUID (name) {
|
@@ -2624,6 +2630,7 @@ class Config {
|
|
2624
2630
|
// if undefined namespace applies to first loaded config
|
2625
2631
|
// if list of name then namespace applied only to those configs
|
2626
2632
|
// if true then namespace applies to all loaded configs
|
2633
|
+
/*
|
2627
2634
|
namespace (moreNames, others) {
|
2628
2635
|
const config = this.copy()
|
2629
2636
|
if (!Array.isArray(moreNames)) {
|
@@ -2659,6 +2666,7 @@ class Config {
|
|
2659
2666
|
config.rebuild()
|
2660
2667
|
return config
|
2661
2668
|
}
|
2669
|
+
*/
|
2662
2670
|
|
2663
2671
|
setupNamespace (km) {
|
2664
2672
|
let config = km.config
|
@@ -2677,7 +2685,7 @@ class Config {
|
|
2677
2685
|
|
2678
2686
|
// config.initializerFn({ config: this, objects, namespace })
|
2679
2687
|
// this goes through all the configs and sets up this.config
|
2680
|
-
initializeConfigFromConfigs ({ others, objects, moreNames, callInitializers = true }) {
|
2688
|
+
async initializeConfigFromConfigs ({ others, objects, moreNames, callInitializers = true }) {
|
2681
2689
|
// setup the namespace in the configs
|
2682
2690
|
let first = true
|
2683
2691
|
this.configs.forEach((km) => {
|
@@ -2826,6 +2834,11 @@ class Config {
|
|
2826
2834
|
}
|
2827
2835
|
}
|
2828
2836
|
|
2837
|
+
checks () {
|
2838
|
+
this.checkOperators()
|
2839
|
+
this.checkBridges()
|
2840
|
+
}
|
2841
|
+
|
2829
2842
|
checkOperators () {
|
2830
2843
|
if (!this.config.operators) {
|
2831
2844
|
return
|
@@ -2846,53 +2859,19 @@ class Config {
|
|
2846
2859
|
return
|
2847
2860
|
}
|
2848
2861
|
|
2849
|
-
|
2850
|
-
|
2851
|
-
"634a678b-8d92-4464-bf65-943a82f404d8": {
|
2852
|
-
"ids": [ "tankConcept" ],
|
2853
|
-
"namespace": [ "ns1" ]
|
2854
|
-
},
|
2855
|
-
console.log('before check', JSON.stringify(this._eqClasses, null, 2))
|
2856
|
-
*/
|
2857
|
-
|
2858
|
-
const errors = []
|
2859
|
-
/*
|
2860
|
-
const namespaces = this.config.namespaces
|
2861
|
-
const nsToIds = {}
|
2862
|
-
for (const uuid in namespaces) {
|
2863
|
-
const namespace = namespaces[uuid].namespace
|
2864
|
-
const ns = namespace.join('#')
|
2865
|
-
if (!nsToIds[ns]) {
|
2866
|
-
nsToIds[ns] = new Set()
|
2867
|
-
}
|
2868
|
-
const ids = nsToIds[ns]
|
2869
|
-
for (const id of namespaces[uuid].ids) {
|
2870
|
-
if (ids.has(id)) {
|
2871
|
-
if (ns === '') {
|
2872
|
-
const dups = this.config.bridges.filter( (bridge) => bridge.id == id )
|
2873
|
-
errors.push(`Id '${id}' is defined more than once in the bridges of the base namespace of the KM ${this.name}, Dups are ${JSON.stringify(dups)}`)
|
2874
|
-
} else {
|
2875
|
-
errors.push(`Id '${id}' is defined more than once in the bridges of the ${ns} namespace of the KM ${this.name}`)
|
2876
|
-
}
|
2877
|
-
} else {
|
2878
|
-
ids.add(id)
|
2879
|
-
}
|
2880
|
-
}
|
2881
|
-
}
|
2882
|
-
*/
|
2883
|
-
|
2884
|
-
const keyIsPresent = {}
|
2862
|
+
let duplicated = new Set()
|
2863
|
+
const seen = new Set()
|
2885
2864
|
for (const bridge of this.config.bridges) {
|
2886
|
-
const
|
2887
|
-
if (
|
2888
|
-
|
2865
|
+
const id = `${bridge.id}/${bridge.level} (namespace: ${bridge.uuid || this.uuid})`
|
2866
|
+
if (seen.has(id)) {
|
2867
|
+
duplicated.add(id)
|
2889
2868
|
} else {
|
2890
|
-
|
2869
|
+
seen.add(id)
|
2891
2870
|
}
|
2892
2871
|
}
|
2893
|
-
|
2894
|
-
if (
|
2895
|
-
throw
|
2872
|
+
duplicated = Array.from(duplicated)
|
2873
|
+
if (duplicated.length > 0) {
|
2874
|
+
throw new Error(`In the KM ${this.name}, the following operators are duplicated in the bridges: ${duplicated}`)
|
2896
2875
|
}
|
2897
2876
|
};
|
2898
2877
|
|
@@ -2949,25 +2928,29 @@ class Config {
|
|
2949
2928
|
}
|
2950
2929
|
}
|
2951
2930
|
|
2952
|
-
add (...
|
2953
|
-
|
2954
|
-
if (
|
2955
|
-
throw new Error(
|
2931
|
+
async add (...createConfigs) {
|
2932
|
+
createConfigs.forEach((createConfig, index) => {
|
2933
|
+
if (typeof createConfig !== 'function') {
|
2934
|
+
throw new Error(`Expected add argument number ${index+1} to be a function that constructs the config.`)
|
2956
2935
|
}
|
2957
2936
|
})
|
2958
2937
|
|
2959
|
-
mores =
|
2960
|
-
|
2961
|
-
|
2938
|
+
const mores = []
|
2939
|
+
for (const createConfig of createConfigs) {
|
2940
|
+
const more = await createConfig()
|
2941
|
+
if (this.name && this.name == more.name) {
|
2942
|
+
throw new Error('Cannot add an object to itself for argument number ${index+1}.')
|
2962
2943
|
}
|
2963
|
-
|
2964
|
-
|
2965
|
-
|
2966
|
-
|
2944
|
+
if (this === more) {
|
2945
|
+
throw new Error('Cannot add an object to itself.')
|
2946
|
+
}
|
2947
|
+
mores.push(more)
|
2948
|
+
}
|
2949
|
+
for (let more of mores) {
|
2967
2950
|
this.valid()
|
2968
2951
|
more.valid()
|
2969
2952
|
// copy so i don't have to copy later
|
2970
|
-
more = more.copy()
|
2953
|
+
more = await more.copy()
|
2971
2954
|
more.server(this._server, this._key, this._queryParams)
|
2972
2955
|
|
2973
2956
|
const moreConfigs = more.configs.map((km) => km.name || km.uuid)
|
@@ -2982,9 +2965,6 @@ class Config {
|
|
2982
2965
|
const moreKMs1 = [new KM({ config: more, getCounter: (name) => this.getCounter(name), uuid: more.uuid, namespace })]
|
2983
2966
|
const moreKMs2 = more.configs.slice(1).map((km) => {
|
2984
2967
|
return km
|
2985
|
-
// const cp = km.copy()
|
2986
|
-
// cp.namespace = namespace
|
2987
|
-
// return cp;
|
2988
2968
|
})
|
2989
2969
|
const moreKMs = moreKMs1.concat(moreKMs2)
|
2990
2970
|
const eqClass = moreKMs.map((km) => km.uuid)
|
@@ -2998,7 +2978,7 @@ class Config {
|
|
2998
2978
|
this.configs.push(moreKM)
|
2999
2979
|
}
|
3000
2980
|
}
|
3001
|
-
more.resetToOne()
|
2981
|
+
await more.resetToOne()
|
3002
2982
|
this.config.eqClasses = this._eqClasses
|
3003
2983
|
// greg
|
3004
2984
|
// setup instances
|
@@ -3013,8 +2993,8 @@ class Config {
|
|
3013
2993
|
}
|
3014
2994
|
}
|
3015
2995
|
this.instances = noDups
|
3016
|
-
}
|
3017
|
-
this.rebuild()
|
2996
|
+
}
|
2997
|
+
await this.rebuild() // in add(
|
3018
2998
|
this.valid()
|
3019
2999
|
return this
|
3020
3000
|
}
|
@@ -3170,7 +3150,7 @@ class Config {
|
|
3170
3150
|
// assumes this is called in reverse order
|
3171
3151
|
addInternalR (more, useOldVersion = true, skipObjects = false, includeNamespaces = true, allowNameToBeNull = false) {
|
3172
3152
|
if (more instanceof Config) {
|
3173
|
-
more.
|
3153
|
+
more.initialize23({ force: false })
|
3174
3154
|
if (useOldVersion) {
|
3175
3155
|
more = more.config
|
3176
3156
|
} else {
|