theprogrammablemind 8.3.0-beta.4 → 8.3.0-beta.6

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/package.json CHANGED
@@ -65,6 +65,6 @@
65
65
  "sort-json": "^2.0.0",
66
66
  "uuid": "^8.3.2"
67
67
  },
68
- "version": "8.3.0-beta.4",
68
+ "version": "8.3.0-beta.6",
69
69
  "license": "UNLICENSED"
70
70
  }
package/src/config.js CHANGED
@@ -387,32 +387,45 @@ const handleBridgeProps = (config, bridge, { addFirst, uuid } = {}) => {
387
387
  config.config.generators.push(addUUID(generator))
388
388
  }
389
389
  }
390
- if (bridge.evaluator) {
391
- const semantic = {
392
- where: bridge.evaluator.where || bridge.where || helpers.where(3),
393
- match: ({ context }) => bridge.id == context.marker && context.evaluate,
394
- apply: (args) => bridge.evaluator(args),
395
- applyWrapped: bridge.evaluator,
396
- property: 'evaluator'
390
+
391
+ const addSemantic = (semantic, evaluate) => {
392
+ const match = semantic.match || (() => true)
393
+ let apply = semantic
394
+ // if I do apply == semantic.apply or semantic there is one function that has apply defined for some reason even though not explicitly set
395
+ if (semantic.apply && typeof semantic !== 'function') {
396
+ apply = semantic.apply
397
+ }
398
+ const semanticDef = {
399
+ where: semantic.where || bridge.where || helpers.where(4),
400
+ match: (args) => bridge.id == args.context.marker && !!args.context.evaluate == evaluate && match(args),
401
+ apply: (args) => apply(args),
402
+ applyWrapped: semantic,
403
+ property: evaluate ? 'evaluator':'semantic',
397
404
  }
398
405
  if (addFirst) {
399
- config.config.semantics.unshift(addUUID(semantic))
406
+ config.config.semantics.unshift(addUUID(semanticDef))
400
407
  } else {
401
- config.config.semantics.push(addUUID(semantic))
408
+ config.config.semantics.push(addUUID(semanticDef))
402
409
  }
403
410
  }
411
+
412
+ if (bridge.evaluator) {
413
+ addSemantic(bridge.evaluator, true)
414
+ }
415
+
404
416
  if (bridge.semantic) {
405
- const semantic = {
406
- where: bridge.semantic.where || bridge.where || helpers.where(3),
407
- match: ({ context }) => bridge.id == context.marker && !context.evaluate,
408
- apply: (args) => bridge.semantic(args),
409
- applyWrapped: bridge.semantic,
410
- property: 'semantic'
417
+ addSemantic(bridge.semantic, false)
418
+ }
419
+
420
+ if (bridge.evaluators) {
421
+ for (const evaluator of bridge.evaluators) {
422
+ addSemantic(evaluator, true)
411
423
  }
412
- if (addFirst) {
413
- config.config.semantics.unshift(addUUID(semantic))
414
- } else {
415
- config.config.semantics.push(addUUID(semantic))
424
+ }
425
+
426
+ if (bridge.semantics) {
427
+ for (const semantic of bridge.semantics) {
428
+ addSemantic(semantic, false)
416
429
  }
417
430
  }
418
431
  }
@@ -423,8 +436,8 @@ const handleCalculatedProps = (baseConfig, moreConfig, { addFirst, uuid } = {})
423
436
  if (moreConfig.bridges) {
424
437
  moreConfig.bridges = moreConfig.bridges.map((bridge) => {
425
438
  bridge = { ...bridge }
426
- const valid = ['after', 'before', 'bridge', 'development', 'evaluator', 'generatorp', 'generatorr', 'generatorpr', 'generators', 'operator', 'id', 'convolution', 'inverted', 'isA', 'children', 'parents',
427
- 'level', 'optional', 'selector', 'semantic', 'words', /Bridge$/, 'localHierarchy', 'levelSpecificHierarchy', 'where', 'uuid']
439
+ const valid = ['after', 'before', 'bridge', 'development', 'evaluator', 'evaluators', 'generatorp', 'generatorr', 'generatorpr', 'generators', 'operator', 'id', 'convolution', 'inverted', 'isA', 'children', 'parents',
440
+ 'level', 'optional', 'selector', 'semantic', 'semantics', 'words', /Bridge$/, 'localHierarchy', 'levelSpecificHierarchy', 'where', 'uuid']
428
441
  helpers.validProps(valid, bridge, 'bridge')
429
442
  handleBridgeProps(baseConfig, bridge, { addFirst, uuid })
430
443
  return bridge
@@ -1149,44 +1162,53 @@ class Config {
1149
1162
  delete bridge.generatorr
1150
1163
  delete bridge.generatorpr
1151
1164
  delete bridge.evaluator
1165
+ delete bridge.evaluators
1152
1166
  delete bridge.semantic
1167
+ delete bridge.semantics
1153
1168
  if (!bridge.bridge) {
1154
1169
  bridge.bridge = "{ ...next(operator) }"
1155
1170
  }
1156
1171
  return bridge
1157
1172
  })
1158
1173
  } else {
1159
- config.generators = (config.generators || []).map((generator) => {
1160
- generator = { ...generator }
1161
- delete generator.where
1162
- generator.match = generator.match.toString()
1163
- generator.apply = generator.apply.toString()
1164
- return generator
1165
- })
1166
- config.semantics = (config.semantics || []).map((semantic) => {
1167
- semantic = { ...semantic }
1168
- delete semantic.where
1169
- semantic.match = semantic.match.toString()
1170
- semantic.apply = semantic.apply.toString()
1171
- return semantic
1172
- })
1174
+ const toCanonical = (def) => {
1175
+ if (typeof def == 'function') {
1176
+ return def.toString()
1177
+ } else if (typeof def == 'string') {
1178
+ return def
1179
+ }
1180
+ def = { ...def }
1181
+ delete def.where
1182
+ def.match = def.match ? def.match.toString() : ""
1183
+ def.apply = def.apply ? def.apply.toString() : ""
1184
+ return def
1185
+ }
1186
+
1187
+ config.generators = (config.generators || []).map(toCanonical)
1188
+ config.semantics = (config.semantics || []).map(toCanonical)
1173
1189
  config.bridges = (config.bridges || []).map((bridge) => {
1174
1190
  bridge = { ...bridge }
1175
1191
  delete bridge.where
1176
1192
  if (bridge.generatorp) {
1177
- bridge.generatorp = bridge.generatorp.toString()
1193
+ bridge.generatorp = toCanonical(bridge.generatorp)
1178
1194
  }
1179
1195
  if (bridge.generatorr) {
1180
- bridge.generatorr = bridge.generatorr.toString()
1196
+ bridge.generatorr = toCanonical(bridge.generatorr)
1181
1197
  }
1182
1198
  if (bridge.generatorpr) {
1183
- bridge.generatorpr = bridge.generatorpr.toString()
1199
+ bridge.generatorpr = toCanonical(bridge.generatorpr)
1184
1200
  }
1185
1201
  if (bridge.evaluator) {
1186
- bridge.evaluator = bridge.evaluator.toString()
1202
+ bridge.evaluator = toCanonical(bridge.evaluator)
1187
1203
  }
1188
1204
  if (bridge.semantic) {
1189
- bridge.semantic = bridge.semantic.toString()
1205
+ bridge.semantic = toCanonical(bridge.semantic)
1206
+ }
1207
+ if (bridge.evaluators) {
1208
+ bridge.evaluators = bridge.evaluators.map(toCanonical).toString()
1209
+ }
1210
+ if (bridge.semantics) {
1211
+ bridge.semantics = bridge.semantics.map(toCanonical).toString()
1190
1212
  }
1191
1213
  return bridge
1192
1214
  })
@@ -321,7 +321,6 @@ const processContextsB = async ({ config, hierarchy, semantics, generators, json
321
321
  const mostCalled = semantics.getMostCalled()
322
322
  e.message += `\nThe most called semantic was:\nnotes: ${mostCalled.notes}\nmatch: ${mostCalled.matcher.toString()}\napply: ${mostCalled._apply.toString()}\n`
323
323
  }
324
- // contextPrime = semantics.apply(args, { marker: 'error', context, error: e })
325
324
  if (isInstance) {
326
325
  console.log('error', e.error)
327
326
  }