theprogrammablemind_4wp 8.0.0-beta.8 → 8.0.0-beta.81
Sign up to get free protection for your applications and to get access to all the features.
- 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/semantics.js
CHANGED
@@ -49,82 +49,55 @@ class Semantic {
|
|
49
49
|
}
|
50
50
|
}
|
51
51
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
context: context,
|
67
|
-
// hierarchy: hierarchy,
|
68
|
-
callId,
|
69
|
-
api: this.getAPI(config),
|
70
|
-
apis: this.getAPIs(config)
|
52
|
+
fixUpArgs (args, context) {
|
53
|
+
args.uuid = this.uuid
|
54
|
+
args.callId = args.calls.current()
|
55
|
+
const objects = args.getObjects(this.uuid)
|
56
|
+
args.objects = objects
|
57
|
+
args.global = objects
|
58
|
+
const config = args.config
|
59
|
+
args.api = this.getAPI(config)
|
60
|
+
args.apis = this.getAPIs(config)
|
61
|
+
args.args = contextArgs(context, args.hierarchy)
|
62
|
+
args.context = context
|
63
|
+
let n = (id) => id
|
64
|
+
if (config && 'nsToString' in config) {
|
65
|
+
n = (id) => config.nsToString(id)
|
71
66
|
}
|
72
|
-
|
67
|
+
args.n = n
|
68
|
+
args.uuid = this.uuid
|
69
|
+
Object.assign(args, (args.getUUIDScoped || (() => { return {} }))(this.uuid))
|
70
|
+
}
|
73
71
|
|
74
|
-
|
75
|
-
|
76
|
-
|
72
|
+
async matches (args, context, options = {}) {
|
73
|
+
this.fixUpArgs(args, context)
|
74
|
+
const matches = await this.matcher(args)
|
75
|
+
if (matches && (options.debug || {}).match || args.callId == this.callId) {
|
77
76
|
debugger // next line is the matcher
|
78
|
-
this.matcher(args)
|
77
|
+
await this.matcher(args)
|
79
78
|
}
|
80
79
|
return matches
|
81
80
|
}
|
82
81
|
|
83
|
-
apply (
|
84
|
-
const {
|
85
|
-
const objects = baseArgs.getObjects(this.uuid)
|
82
|
+
async apply (args, context, s, options = {}) {
|
83
|
+
const { config } = args
|
86
84
|
if (config && config.debugLoops) {
|
87
85
|
console.log('apply', this.toLabel())
|
88
86
|
}
|
89
|
-
if (
|
87
|
+
if (args.calls && config && args.calls.stack.length > config.maxDepth) {
|
90
88
|
throw new Error(`Max depth of ${config.maxDepth} for calls has been exceeded. maxDepth can be set on the config object. To see the calls run with the --dl or set the debugLoops property on the config`)
|
91
89
|
}
|
92
90
|
|
93
|
-
// const ask = baseArgs.getAsk(this.uuid)
|
94
|
-
if (!log) {
|
95
|
-
console.trace()
|
96
|
-
throw new Error('log is a required argument')
|
97
|
-
}
|
98
91
|
const contextPrime = Object.assign({}, context)
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
}
|
103
|
-
const callId = baseArgs.calls.current()
|
104
|
-
const moreArgs = {
|
105
|
-
uuid: this.uuid,
|
106
|
-
callId,
|
107
|
-
args: contextArgs(context, hierarchy),
|
108
|
-
objects,
|
109
|
-
log,
|
110
|
-
global: objects,
|
111
|
-
n,
|
112
|
-
context: contextPrime,
|
113
|
-
uuid: this.uuid,
|
114
|
-
// config,
|
115
|
-
response,
|
116
|
-
api: this.getAPI(config),
|
117
|
-
apis: this.getAPIs(config)
|
118
|
-
}
|
119
|
-
const args = Object.assign({}, baseArgs, moreArgs, (baseArgs.getUUIDScoped || (() => { return {} }))(this.uuid))
|
120
|
-
if ((options.debug || {}).apply ||
|
121
|
-
callId == this.callId) {
|
92
|
+
this.fixUpArgs(args, contextPrime)
|
93
|
+
|
94
|
+
if ((options.debug || {}).apply || args.callId == this.callId) {
|
122
95
|
debugger
|
123
96
|
}
|
124
97
|
if (args.breakOnSemantics) {
|
125
98
|
debugger
|
126
99
|
}
|
127
|
-
this._apply(args)
|
100
|
+
await this._apply(args)
|
128
101
|
return contextPrime
|
129
102
|
}
|
130
103
|
}
|
@@ -176,11 +149,12 @@ class Semantics {
|
|
176
149
|
return this.semantics[maxOrdinal]
|
177
150
|
}
|
178
151
|
|
179
|
-
applyToContext (args, context, options) {
|
152
|
+
async applyToContext (args, context, options) {
|
180
153
|
// let context_prime = {}
|
181
154
|
if (!(context instanceof Array || context instanceof Object)) {
|
182
155
|
return context
|
183
156
|
}
|
157
|
+
args = { ...args }
|
184
158
|
const config = args.config
|
185
159
|
let contextPrime = Object.assign({}, context)
|
186
160
|
const s = (context, options) => this.apply(args, context, options)
|
@@ -188,6 +162,8 @@ class Semantics {
|
|
188
162
|
const stack = args.calls.push()
|
189
163
|
let counter = 0
|
190
164
|
let seenQuestion = false
|
165
|
+
const deferred = []
|
166
|
+
args.log = (message) => { this.logs.push(message) }
|
191
167
|
for (const isemantic in this.semantics) {
|
192
168
|
const semantic = this.semantics[isemantic]
|
193
169
|
if (!semantic) {
|
@@ -197,22 +173,33 @@ class Semantics {
|
|
197
173
|
if (semantic.isQuestion && seenQuestion) {
|
198
174
|
continue
|
199
175
|
}
|
200
|
-
if (semantic.matches(args, context, options)) {
|
176
|
+
if (await semantic.matches(args, context, options)) {
|
201
177
|
if (!this.calls[counter]) {
|
202
178
|
this.calls[counter] = 0
|
203
179
|
}
|
204
180
|
this.calls[counter] += 1
|
205
|
-
const log = (message) => { this.logs.push(message) }
|
206
181
|
try {
|
207
|
-
|
182
|
+
let deferWasCalled = false
|
183
|
+
const defer = (listener) => {
|
184
|
+
deferred.push({ semantic, listener })
|
185
|
+
deferWasCalled = true
|
186
|
+
}
|
187
|
+
args.defer = defer
|
188
|
+
contextPrime = await semantic.apply(args, context, s, options)
|
189
|
+
if (deferWasCalled) {
|
190
|
+
continue
|
191
|
+
}
|
208
192
|
if (!contextPrime.controlKeepMotivation && semantic.oneShot) {
|
209
193
|
// semantic.tied_ids.forEach((tied_id) => args.config.removeSemantic(tied_id))
|
210
194
|
args.config.removeSemantic(semantic)
|
211
195
|
}
|
196
|
+
for (const { listener } of deferred) {
|
197
|
+
listener(args)
|
198
|
+
}
|
212
199
|
} catch (e) {
|
213
200
|
contextPrime = null
|
214
201
|
let errorMessage
|
215
|
-
e.retryCall = () => semantic.apply(args, context, s,
|
202
|
+
e.retryCall = () => semantic.apply(args, context, s, options)
|
216
203
|
const help = 'The error has a retryCall property that will recall the function that failed.'
|
217
204
|
if (e.stack && e.message) {
|
218
205
|
const info = `${semantic.notes ? semantic.notes : ''}${semantic.where ? semantic.where : ''}`
|
@@ -280,6 +267,13 @@ class Semantics {
|
|
280
267
|
lines.setElement(0, 1, 'RESULT')
|
281
268
|
lines.setElement(0, 2, `(HASHCODE ${helpers.hashCode(JSON.stringify(helpers.sortJson(contextPrime, { depth: 25 })))})`)
|
282
269
|
lines.setElement(1, 2, JSON.stringify(contextPrime, null, 2))
|
270
|
+
for (const { semantic } of deferred) {
|
271
|
+
lines.setElement(0, 1, 'DEFERRED')
|
272
|
+
lines.setElement(0, 2, semantic.toLabel())
|
273
|
+
lines.newRow()
|
274
|
+
lines.setElement(0, 2, semantic.toString())
|
275
|
+
lines.newRow()
|
276
|
+
}
|
283
277
|
this.logs.push(lines.toString())
|
284
278
|
}
|
285
279
|
applied = true
|
@@ -310,19 +304,19 @@ class Semantics {
|
|
310
304
|
return contextPrime
|
311
305
|
}
|
312
306
|
|
313
|
-
applyToContexts (args, contexts, options) {
|
307
|
+
async applyToContexts (args, contexts, options) {
|
314
308
|
const contextsPrime = []
|
315
|
-
|
316
|
-
contextsPrime.push(this.applyToContext(args, context, options))
|
317
|
-
}
|
309
|
+
for (const context of contexts) {
|
310
|
+
contextsPrime.push(await this.applyToContext(args, context, options))
|
311
|
+
}
|
318
312
|
return contextsPrime
|
319
313
|
}
|
320
314
|
|
321
|
-
apply (args, context, options) {
|
315
|
+
async apply (args, context, options) {
|
322
316
|
if (Array.isArray(context)) {
|
323
|
-
return this.applyToContexts(args, context, options)
|
317
|
+
return await this.applyToContexts(args, context, options)
|
324
318
|
} else if (context instanceof Object) {
|
325
|
-
return this.applyToContext(args, context, options)
|
319
|
+
return await this.applyToContext(args, context, options)
|
326
320
|
} else {
|
327
321
|
return context
|
328
322
|
}
|