theprogrammablemind_4wp 7.5.4-beta.4 → 7.5.4-beta.6

Sign up to get free protection for your applications and to get access to all the features.
package/client.js CHANGED
@@ -8,7 +8,7 @@ const _ = require('lodash')
8
8
  const stringify = require('json-stable-stringify')
9
9
  const Lines = require('./lines')
10
10
  const flattens = require('./src/flatten')
11
- const { appendNoDups, InitCalls } = require('./src/helpers')
11
+ const { appendNoDups, InitCalls, updateQueries } = require('./src/helpers')
12
12
  const runtime = require('./runtime')
13
13
  const sortJson = runtime.sortJson
14
14
 
@@ -518,7 +518,7 @@ const processInstance = (config, instance) => {
518
518
  for (const results of (instance.resultss || [])) {
519
519
  if (results.extraConfig) {
520
520
  // config.addInternal(results, useOldVersion = true, skipObjects = false, includeNamespaces = true, allowNameToBeNull = false)
521
- config.addInternal(results)
521
+ config.addInternal(results, { handleCalculatedProps: true } )
522
522
  } else {
523
523
  processContextsB({ config, hierarchy, json: results/*, generators, semantics */ })
524
524
  }
@@ -1143,7 +1143,7 @@ const build = async ({ config, target, template, errorHandler = defaultErrorHand
1143
1143
  return template
1144
1144
  };
1145
1145
  stabilizeOutput(accumulators)
1146
- runtime.fs.writeFileSync(instanceName, JSON.stringify(Object.assign({ queries: template.queries }, accumulators), 0, 2))
1146
+ runtime.fs.writeFileSync(instanceName, JSON.stringify(Object.assign({ queries: template.queries.map(updateQueries) }, accumulators), 0, 2))
1147
1147
 
1148
1148
  // km tests file
1149
1149
  const testsName = `./${target}.test.json`
package/package.json CHANGED
@@ -62,6 +62,6 @@
62
62
  "json-stable-stringify": "^1.0.1",
63
63
  "node-fetch": "^2.6.1"
64
64
  },
65
- "version": "7.5.4-beta.4",
65
+ "version": "7.5.4-beta.6",
66
66
  "license": "ISC"
67
67
  }
package/src/config.js CHANGED
@@ -5,7 +5,6 @@ const { Generators } = require('./generators')
5
5
  const client = require('../client')
6
6
  const Digraph = require('./digraph')
7
7
  const helpers = require('./helpers')
8
- const deepEqual = require('deep-equal')
9
8
  const runtime = require('../runtime')
10
9
  const _ = require('lodash')
11
10
 
@@ -104,6 +103,24 @@ const handleBridgeProps = (config, bridge) => {
104
103
  }
105
104
  }
106
105
 
106
+ const handleCalculatedProps = (baseConfig, moreConfig) => {
107
+ for (let bridge of moreConfig.bridges) {
108
+ const valid = [ 'before', 'bridge', 'development', 'evaluator', 'generatorp', 'generatorr', 'generators', 'id', 'convolution', 'inverted', 'isA', 'children', 'parents',
109
+ 'level', 'optional', 'selector', 'semantic', 'words', /Bridge$/, 'localHierarchy' ]
110
+ helpers.validProps(valid, bridge, 'bridge')
111
+ handleBridgeProps(baseConfig, bridge)
112
+ }
113
+ if (moreConfig.operators) {
114
+ moreConfig.operators = moreConfig.operators.map((operator) => {
115
+ if (typeof operator === 'string') {
116
+ return { pattern: operator }
117
+ } else {
118
+ return operator
119
+ }
120
+ })
121
+ }
122
+ }
123
+
107
124
  if (runtime.process.env.DEBUG_HIERARCHY) {
108
125
  global.entodictonDebugHierarchy = JSON.parse(runtime.process.env.DEBUG_HIERARCHY)
109
126
  }
@@ -646,12 +663,13 @@ class Config {
646
663
  }
647
664
  const instanceFragments = (instance.fragments || []).map((fragment) => fragment.key || fragment.query).map( toCanonical )
648
665
  const templateFragments = (template.fragments || []).concat(this.dynamicFragments).map( toCanonical )
649
- const sameFragments = deepEqual(templateFragments, instanceFragments)
650
- const sameQueries = deepEqual((template.queries || []), (instance.queries || []))
666
+ const sameFragments = helpers.safeEquals(templateFragments, instanceFragments)
667
+ const sameQueries = helpers.safeEquals((template.queries || []).map(helpers.updateQueries), (instance.queries || []))
651
668
  return !(instance && sameQueries && sameFragments)
652
669
  }
653
670
 
654
671
  load (template, instance, options = { rebuild: false } ) {
672
+ this.template = template
655
673
  this.logs.push(`loading template for ${this.name}`)
656
674
  if (instance && instance.associations && !options.rebuild) {
657
675
  this.addAssociations(instance.associations)
@@ -713,7 +731,7 @@ class Config {
713
731
  }
714
732
  }
715
733
  if (global.entodictonDebugAssociation) {
716
- if (deepEqual(global.entodictonDebugAssociation, association)) {
734
+ if (helpers.safeEquals(global.entodictonDebugAssociation, association)) {
717
735
  debugger; // debug association hit
718
736
  }
719
737
  }
@@ -748,7 +766,7 @@ class Config {
748
766
  throw `addHierarchy expected parent property to be a string. got ${JSON.stringify(parent)}`
749
767
  }
750
768
  if (global.entodictonDebugHierarchy) {
751
- if (deepEqual(global.entodictonDebugHierarchy, [child, parent])) {
769
+ if ((helpers.safeEquals.entodictonDebugHierarchy, [child, parent])) {
752
770
  debugger; // debug hierarchy hit
753
771
  }
754
772
  }
@@ -766,7 +784,7 @@ class Config {
766
784
  }
767
785
 
768
786
  if (global.entodictonDebugHierarchy) {
769
- if (deepEqual(global.entodictonDebugHierarchy, [child, parent])) {
787
+ if (helpers.safeEquals(global.entodictonDebugHierarchy, [child, parent])) {
770
788
  debugger; // debug hierarchy hit
771
789
  }
772
790
  }
@@ -1244,133 +1262,12 @@ class Config {
1244
1262
  if (config) {
1245
1263
  config = _.cloneDeep(config)
1246
1264
  this.config = config
1247
- for (let bridge of this.config.bridges) {
1248
- const valid = [ 'before', 'bridge', 'development', 'evaluator', 'generatorp', 'generatorr', 'generators', 'id', 'convolution', 'inverted', 'isA', 'children', 'parents',
1249
- 'level', 'optional', 'selector', 'semantic', 'words', /Bridge$/, 'localHierarchy' ]
1250
- helpers.validProps(valid, bridge, 'bridge')
1251
- /* moved
1252
- if (!bridge.bridge) {
1253
- bridge.bridge = "{ ...next(operator) }"
1254
- }
1255
- */
1256
- handleBridgeProps(this, bridge)
1257
-
1258
- /* moved
1259
- if (!bridge.level) {
1260
- bridge.level = 0
1261
- }
1262
- */
1263
- /*
1264
- if (bridge.generator) {
1265
- this.config.generators.push({
1266
- match: ({context}) => bridge.id == context.marker,
1267
- apply: (args) => bridge.generator(args),
1268
- })
1269
- }
1270
- */
1271
- /* moved
1272
- if (bridge.children) {
1273
- for (let child of bridge.children) {
1274
- this.addHierarchy(child, bridge.id)
1275
- }
1276
- }
1277
- if (bridge.parents) {
1278
- for (let parent of bridge.parents) {
1279
- this.addHierarchy(bridge.id, parent)
1280
- }
1281
- }
1282
- if (bridge.isA) {
1283
- for (let parent of bridge.isA) {
1284
- this.addHierarchy(bridge.id, parent)
1285
- }
1286
- }
1287
- */
1288
- /* moved
1289
- if (bridge.before) {
1290
- for (let after of bridge.before) {
1291
- if (typeof after == 'string') {
1292
- after = [after, 0]
1293
- }
1294
- this.addPriorities([after, [bridge.id, bridge.level]])
1295
- }
1296
- }
1297
- if (bridge.words) {
1298
- for (let def of bridge.words) {
1299
- if (typeof def == 'string') {
1300
- this.addWordInternal(def, {"id": bridge.id, "initial": `{ value: "${def}"}` })
1301
- } else {
1302
- const word = def.word
1303
- def = { initial: JSON.stringify(def), id: bridge.id, word: undefined }
1304
- this.addWordInternal(word, def)
1305
- }
1306
- }
1307
- }
1308
- if (bridge.generator) {
1309
- this.config.generators.unshift(bridge.generator)
1310
- }
1311
- */
1312
- /* moved
1313
- if (bridge.generators) {
1314
- const generators = [...bridge.generators]
1315
- generators.reverse()
1316
- for (let generator of generators) {
1317
- this.config.generators.unshift(generator)
1318
- }
1319
- }
1320
- if (bridge.generatorp) {
1321
- this.config.generators.unshift({
1322
- where: bridge.generatorp.where || client.where(3),
1323
- match: ({context}) => bridge.id == context.marker && context.paraphrase,
1324
- apply: (args) => bridge.generatorp(args),
1325
- })
1326
- }
1327
- if (bridge.generatorr) {
1328
- this.config.generators.unshift({
1329
- // TODO merge response and isResponse
1330
- where: bridge.generatorr.where || client.where(3),
1331
- match: ({context}) => bridge.id == context.marker && !context.paraphrase && (context.response || context.isResponse),
1332
- apply: (args) => bridge.generatorr(args),
1333
- })
1334
- }
1335
- if (bridge.evaluator) {
1336
- this.config.semantics.unshift({
1337
- where: bridge.evaluator.where || client.where(3),
1338
- match: ({context}) => bridge.id == context.marker && context.evaluate,
1339
- apply: (args) => bridge.evaluator(args),
1340
- })
1341
- }
1342
- if (bridge.semantic) {
1343
- this.config.semantics.unshift({
1344
- where: bridge.semantic.where || client.where(3),
1345
- match: ({context}) => bridge.id == context.marker,
1346
- apply: (args) => bridge.semantic(args),
1347
- })
1348
- }
1349
- */
1350
- }
1351
- if (config.operators) {
1352
- config.operators = config.operators.map((operator) => {
1353
- if (typeof operator === 'string') {
1354
- return { pattern: operator }
1355
- } else {
1356
- return operator
1357
- }
1358
- })
1359
- }
1265
+ handleCalculatedProps(this, config)
1360
1266
  }
1361
1267
  this.hierarchy = new Digraph(this.config.hierarchy)
1362
1268
  this.initConfig = _.cloneDeep(this.config)
1363
1269
  this.configs.push(new KM({ config: this.config, getCounter: (name) => this.config.getCounter(name), uuid: this._uuid }))
1364
1270
 
1365
- /*
1366
- if (config) {
1367
- this.configs.push(new KM({config, isSelf: true}))
1368
- this.addInternal(Object.assign({}, config), false)
1369
- } else {
1370
- this.configs.push( new KM({config: this.config, isSelf: true}) )
1371
- }
1372
- */
1373
-
1374
1271
  this.setUUIDs()
1375
1272
  this.initDefaults()
1376
1273
  if (!this.config.objects.namespaced) {
@@ -2026,7 +1923,6 @@ class Config {
2026
1923
  } else {
2027
1924
  addInternals.unshift(config)
2028
1925
  }
2029
- // this.addInternal(config, true, false, false, true)
2030
1926
  } else {
2031
1927
  if (interleaved) {
2032
1928
  addInternals.unshift(null)
@@ -2049,7 +1945,7 @@ class Config {
2049
1945
  if (!interleaved) {
2050
1946
  for (const config of addInternals) {
2051
1947
  if (!reverseIt) {
2052
- this.addInternal(config, true, false, false, true)
1948
+ this.addInternal(config, { includeNamespace: false, allowNameToBeNull: true })
2053
1949
  } else {
2054
1950
  this.addInternalR(config, true, false, false, true)
2055
1951
  }
@@ -2201,7 +2097,7 @@ class Config {
2201
2097
 
2202
2098
  this.applyNamespace(configPrime, km.namespace, km.uuid)
2203
2099
  first = false
2204
- this.addInternal(configPrime, false, true)
2100
+ this.addInternal(configPrime, { useOldVersion: false, skipObjects: true })
2205
2101
  applyUUID(configPrime, km.uuid)
2206
2102
  })
2207
2103
 
@@ -2491,7 +2387,7 @@ class Config {
2491
2387
  }
2492
2388
 
2493
2389
  // TODO get rid of useOldVersion arg
2494
- addInternal (more, useOldVersion = true, skipObjects = false, includeNamespaces = true, allowNameToBeNull = false) {
2390
+ addInternal (more, { useOldVersion = true, skipObjects = false, includeNamespaces = true, allowNameToBeNull = false, handleCalculatedProps : hcps = false } = {}) {
2495
2391
  if (more instanceof Config) {
2496
2392
  more.initialize({ force: false })
2497
2393
  if (useOldVersion) {
@@ -2501,6 +2397,10 @@ class Config {
2501
2397
  more = _.cloneDeep(more.initConfig)
2502
2398
  }
2503
2399
  }
2400
+ if (hcps) {
2401
+ handleCalculatedProps(this, more)
2402
+ applyUUID(more, this._uuid)
2403
+ }
2504
2404
  for (const key of Object.keys(more)) {
2505
2405
  const value = more[key]
2506
2406
  // TODO remove name and description on the config bag
package/src/helpers.js CHANGED
@@ -44,10 +44,23 @@ const appendNoDups = (l1, l2) => {
44
44
  }
45
45
 
46
46
  const safeEquals = (v1, v2) => {
47
- if (!deepEqual(stringify(v1), stringify(v2))) {
47
+ if (typeof v1 !== typeof v2) {
48
48
  return false
49
49
  }
50
- return true
50
+
51
+ const type = typeof v1
52
+ if (type == 'number' || type == 'string') {
53
+ return v1 == v2
54
+ } else if (type == 'function') {
55
+ return v1.toString() == v2.toString()
56
+ } else {
57
+ for (let key in v1) {
58
+ if (!safeEquals(v1[key], v2[key])) {
59
+ return false
60
+ }
61
+ }
62
+ return true
63
+ }
51
64
  }
52
65
 
53
66
  /*
@@ -238,7 +251,66 @@ const mapInPlace = (list, fn) => {
238
251
  }
239
252
  }
240
253
 
254
+ const updateQueries = (queryOrConfig) => {
255
+ if (typeof queryOrConfig == 'string' || queryOrConfig.query) {
256
+ return queryOrConfig
257
+ } else {
258
+ const config = queryOrConfig
259
+ return functionsToStrings(config)
260
+ }
261
+ }
262
+
263
+ const functionsToStrings = (config) => {
264
+ config = {...config}
265
+ const mapGenerator = (generator) => {
266
+ if (generator.apply) {
267
+ return { ...generator, match: generator.match.toString(), apply: generator.apply.toString() }
268
+ } else {
269
+ return [ generator[0].toString(), generator[1].toString() ]
270
+ }
271
+ }
272
+ if (config.generators) {
273
+ config.generators = config.generators.map( mapGenerator )
274
+ }
275
+ if (config.semantics) {
276
+ config.semantics = config.semantics.map( (semantic) => {
277
+ if (semantic.apply) {
278
+ return { ...semantic, match: semantic.match.toString(), apply: semantic.apply.toString() }
279
+ } else {
280
+ return [ semantic[0].toString(), semantic[1].toString() ]
281
+ }
282
+ })
283
+ }
284
+ if (config.bridges) {
285
+ config.bridges = config.bridges.map( (bridge) => {
286
+ bridge = {...bridge}
287
+ if (bridge.generator) {
288
+ bridge.generator = bridge.generator.toString()
289
+ }
290
+ if (bridge.generators) {
291
+ bridge.generators = bridge.generators.map( mapGenerator )
292
+ }
293
+ if (bridge.generatorp) {
294
+ bridge.generatorp = bridge.generatorp.toString()
295
+ }
296
+ if (bridge.generatorr) {
297
+ bridge.generatorr = bridge.generatorr.toString()
298
+ }
299
+ if (bridge.semantic) {
300
+ bridge.semantic = bridge.semantic.toString()
301
+ }
302
+ if (bridge.evaluator) {
303
+ bridge.evaluator = bridge.evaluator.toString()
304
+ }
305
+ return bridge
306
+ })
307
+ }
308
+ return config
309
+ }
310
+
241
311
  module.exports = {
312
+ functionsToStrings,
313
+ updateQueries,
242
314
  mapInPlace,
243
315
  validProps,
244
316
  args,