tpmkms 9.5.0 → 9.5.1-beta.10
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/common/animals.instance.json +21 -61
- package/common/asking.js +106 -104
- package/common/can.instance.json +17 -0
- package/common/can.js +188 -0
- package/common/characters.js +5 -5
- package/common/colors.instance.json +38 -10
- package/common/comparable.instance.json +2 -2
- package/common/concept.test.json +54 -40
- package/common/conjunction.js +13 -5
- package/common/crew.instance.json +71 -85
- package/common/crew.js +1 -1
- package/common/crew.test.json +4148 -3324
- package/common/currency.js +1 -1
- package/common/dates.instance.json +87 -3
- package/common/dialogues.js +12 -9
- package/common/dimension.instance.json +9 -9
- package/common/dimension.js +4 -4
- package/common/edible.instance.json +79 -23
- package/common/emotions.instance.json +29 -7
- package/common/emotions.js +1 -1
- package/common/emotions.test.json +242 -174
- package/common/english_helpers.js +336 -0
- package/common/errors.js +3 -3
- package/common/evaluate.js +2 -2
- package/common/events.js +8 -8
- package/common/fastfood.instance.json +205 -553
- package/common/fastfood.js +4 -4
- package/common/formulas.instance.json +1 -1
- package/common/formulas.js +1 -1
- package/common/gdefaults.js +58 -9
- package/common/help.js +3 -3
- package/common/helpers/concept.js +1 -1
- package/common/helpers/conjunction.js +54 -44
- package/common/helpers/dateTimeSelectors.js +2 -2
- package/common/helpers/dialogues.js +1 -1
- package/common/helpers/formulas.js +13 -11
- package/common/helpers/menus.js +12 -12
- package/common/helpers/meta.js +9 -9
- package/common/helpers/properties.js +158 -55
- package/common/helpers.js +135 -46
- package/common/hierarchy.js +3 -3
- package/common/kirk.instance.json +1 -1
- package/common/latin.instance.json +2 -2
- package/common/latin.js +4 -4
- package/common/length.instance.json +2 -2
- package/common/listener.js +1 -1
- package/common/math.instance.json +28 -28
- package/common/math.js +47 -46
- package/common/menus.instance.json +3 -3
- package/common/menus.js +1 -1
- package/common/meta.js +76 -60
- package/common/nameable.js +7 -7
- package/common/ordering.instance.json +85 -19
- package/common/ordering.js +1 -1
- package/common/ordering.test.json +786 -298
- package/common/people.instance.json +59 -56
- package/common/people.js +6 -4
- package/common/people.test.json +4135 -3606
- package/common/pipboy.instance.json +72 -16
- package/common/pipboy.js +2 -3
- package/common/pokemon.instance.json +8 -8
- package/common/pokemon.js +1 -1
- package/common/pressure.instance.json +2 -2
- package/common/properties.instance.json +1 -1
- package/common/properties.js +22 -4
- package/common/reminders.instance.json +4 -4
- package/common/reminders.js +3 -3
- package/common/reports.instance.json +3 -3
- package/common/reports.js +18 -16
- package/common/scorekeeper.js +6 -6
- package/common/sdefaults.js +22 -2
- package/common/spock.instance.json +1 -1
- package/common/stgame.js +1 -1
- package/common/stm.js +4 -4
- package/common/tell.js +1 -1
- package/common/temperature.instance.json +2 -2
- package/common/tester.js +3 -3
- package/common/time.js +3 -3
- package/common/tokenize.js +5 -2
- package/common/weight.instance.json +2 -2
- package/common/wp.instance.json +136 -8
- package/common/wp.js +4 -4
- package/package.json +6 -2
package/common/fastfood.js
CHANGED
|
@@ -284,7 +284,7 @@ const template = {
|
|
|
284
284
|
({ask, api}) => {
|
|
285
285
|
// see if followup for drink is needed
|
|
286
286
|
|
|
287
|
-
|
|
287
|
+
function hasDrink(isA, item) {
|
|
288
288
|
let hasDrink = false
|
|
289
289
|
for (const modification of (item.modifications || [])) {
|
|
290
290
|
if (isA(modification.id, 'drink')) {
|
|
@@ -295,11 +295,11 @@ const template = {
|
|
|
295
295
|
return hasDrink
|
|
296
296
|
}
|
|
297
297
|
|
|
298
|
-
|
|
298
|
+
function needsDrink (item) {
|
|
299
299
|
return item.needsDrink
|
|
300
300
|
}
|
|
301
301
|
|
|
302
|
-
|
|
302
|
+
function askAbout({api, isA}) {
|
|
303
303
|
const items = []
|
|
304
304
|
for (const item of api.items()) {
|
|
305
305
|
if (needsDrink(item) && !hasDrink(isA, item)) {
|
|
@@ -765,7 +765,7 @@ class State {
|
|
|
765
765
|
return
|
|
766
766
|
}
|
|
767
767
|
|
|
768
|
-
|
|
768
|
+
function addSize(item, data) {
|
|
769
769
|
if (item.size) {
|
|
770
770
|
data.size = item.size.value
|
|
771
771
|
}
|
package/common/formulas.js
CHANGED
package/common/gdefaults.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
const pluralize = require('pluralize')
|
|
2
|
-
const { defaultContextCheck } = require('./helpers')
|
|
3
|
-
const { knowledgeModule, where } = require('./runtime').theprogrammablemind
|
|
2
|
+
const { defaultContextCheck, getValue, isMany } = require('./helpers')
|
|
3
|
+
const { knowledgeModule, where, flatten } = require('./runtime').theprogrammablemind
|
|
4
4
|
const tokenize = require('./tokenize.js')
|
|
5
5
|
const gdefaults_tests = require('./gdefaults.test.json')
|
|
6
|
-
const
|
|
6
|
+
const englishHelpers = require('./english_helpers.js')
|
|
7
7
|
const helpers = require('./helpers')
|
|
8
8
|
|
|
9
9
|
const config = {
|
|
@@ -151,15 +151,56 @@ const config = {
|
|
|
151
151
|
{
|
|
152
152
|
where: where(),
|
|
153
153
|
priority: -1,
|
|
154
|
-
match: ({context}) => context.evaluateWord && context.paraphrase && context.word &&
|
|
154
|
+
match: ({context}) => context.evaluateWord && context.isVerb && context.paraphrase && context.word && context.number == 'one' && !context.imperative && !context.interpolate,
|
|
155
|
+
apply: ({context}) => {
|
|
156
|
+
const infinitive = englishHelpers.getInfinitive(context.word)
|
|
157
|
+
if (context.tense) {
|
|
158
|
+
const cases = englishHelpers.conjugateVerb(infinitive)
|
|
159
|
+
// console.log(JSON.stringify(cases, null, 2))
|
|
160
|
+
const def = cases.find((def) => def.tense == context.tense)
|
|
161
|
+
return def.word
|
|
162
|
+
} else {
|
|
163
|
+
return pluralize.plural(context.word)
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
|
|
168
|
+
{
|
|
169
|
+
where: where(),
|
|
170
|
+
priority: -1,
|
|
171
|
+
match: ({context}) => context.evaluateWord && context.isVerb && context.paraphrase && context.word && context.number == 'many' && !context.imperative && !context.interpolate,
|
|
172
|
+
apply: ({context}) => {
|
|
173
|
+
const infinitive = englishHelpers.getInfinitive(context.word)
|
|
174
|
+
const cases = englishHelpers.conjugateVerb(infinitive)
|
|
175
|
+
return pluralize.singular(context.word)
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
|
|
179
|
+
{
|
|
180
|
+
where: where(),
|
|
181
|
+
priority: -1,
|
|
182
|
+
match: ({context}) => context.evaluateWord && context.paraphrase && context.word && (context.number == 'many' || context.number > 1) && !context.interpolate,
|
|
155
183
|
apply: ({context}) => pluralize.plural(context.word),
|
|
156
184
|
},
|
|
157
185
|
|
|
158
186
|
{
|
|
159
187
|
where: where(),
|
|
160
188
|
priority: -1,
|
|
161
|
-
match: ({context}) => context.evaluateWord && context.paraphrase && context.word && context.number == 'one',
|
|
162
|
-
apply: ({context}) =>
|
|
189
|
+
match: ({context}) => context.evaluateWord && context.isVerb && context.paraphrase && context.word && context.number == 'one' && !context.imperative && !context.interpolate,
|
|
190
|
+
apply: ({context}) => {
|
|
191
|
+
const infinitive = englishHelpers.getInfinitive(context.word)
|
|
192
|
+
const cases = englishHelpers.conjugateVerb(infinitive)
|
|
193
|
+
return pluralize.plural(context.word)
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
|
|
197
|
+
{
|
|
198
|
+
where: where(),
|
|
199
|
+
priority: -1,
|
|
200
|
+
match: ({context}) => context.evaluateWord && context.paraphrase && context.word && context.number == 'one' && !context.interpolate,
|
|
201
|
+
apply: ({context}) => {
|
|
202
|
+
return pluralize.singular(context.word)
|
|
203
|
+
},
|
|
163
204
|
},
|
|
164
205
|
|
|
165
206
|
{
|
|
@@ -228,9 +269,10 @@ const config = {
|
|
|
228
269
|
],
|
|
229
270
|
};
|
|
230
271
|
|
|
231
|
-
|
|
272
|
+
function initializer({config}) {
|
|
232
273
|
config.addArgs((args) => {
|
|
233
274
|
return {
|
|
275
|
+
flatten,
|
|
234
276
|
number: (context) => isMany(context) ? "many" : "one",
|
|
235
277
|
// number/gender/person etc
|
|
236
278
|
gw: (context, { number: numberContext }) => {
|
|
@@ -241,14 +283,14 @@ const initializer = ({config}) => {
|
|
|
241
283
|
args.insert({ marker: 'verbatim', verbatim: text, isResponse: true })
|
|
242
284
|
},
|
|
243
285
|
interpolate: async (interpolate, context) => {
|
|
244
|
-
|
|
286
|
+
async function evaluator(key) {
|
|
245
287
|
if (Array.isArray(context[key])) {
|
|
246
288
|
return args.gsp(context[key])
|
|
247
289
|
} else {
|
|
248
290
|
return args.gp(context[key])
|
|
249
291
|
}
|
|
250
292
|
}
|
|
251
|
-
|
|
293
|
+
function getValue(keyOrValue) {
|
|
252
294
|
if (typeof keyOrValue == 'string' && context[keyOrValue]) {
|
|
253
295
|
return context[keyOrValue]
|
|
254
296
|
}
|
|
@@ -277,6 +319,13 @@ const initializer = ({config}) => {
|
|
|
277
319
|
let value = element
|
|
278
320
|
if (element.property) {
|
|
279
321
|
value = context[element.property]
|
|
322
|
+
if (element.context) {
|
|
323
|
+
Object.assign(value, element.context)
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// if (!value?.number && element.number) {
|
|
327
|
+
if (value?.number !== 'infinitive' && element.number) {
|
|
328
|
+
value.number = isMany(context[element.number]) ? "many": "one"
|
|
280
329
|
}
|
|
281
330
|
if (value) {
|
|
282
331
|
strings.push(separator)
|
package/common/help.js
CHANGED
|
@@ -4,7 +4,7 @@ const dialogues = require('./dialogues')
|
|
|
4
4
|
const help_tests = require('./help.test.json')
|
|
5
5
|
const helpers = require('./helpers')
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
function getHelp(config, indent=2) {
|
|
8
8
|
indent = ' '.repeat(indent)
|
|
9
9
|
let help = ''
|
|
10
10
|
if (config.tests.length == 0) {
|
|
@@ -77,12 +77,12 @@ const config = {
|
|
|
77
77
|
words: {
|
|
78
78
|
"literals": {
|
|
79
79
|
// "km1": { "the": [{"id": "the", "initial": "{ modifiers: [] }" }],
|
|
80
|
-
'km1': [{id: "km", initial: "{ value: 'km1', word: 'km1' }",
|
|
80
|
+
'km1': [{id: "km", initial: "{ value: 'km1', word: 'km1' }", scope: "testing" }],
|
|
81
81
|
}
|
|
82
82
|
},
|
|
83
83
|
};
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
function initializer({ config, addWord, kms }) {
|
|
86
86
|
const names = new Set()
|
|
87
87
|
for (const name in kms) {
|
|
88
88
|
names.add(name);
|
|
@@ -38,7 +38,7 @@ class API {
|
|
|
38
38
|
const modifierIds = modifiers.map( (modifier) => this.args.kms.dialogues.api.toScopedId(modifier) )
|
|
39
39
|
const modifiersObjectId = `${modifierIds.join("_")}_${objectId}`
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
function toWord(object) {
|
|
42
42
|
if (typeof object == 'string') {
|
|
43
43
|
return object
|
|
44
44
|
}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
const { propertyToArray } = require('../helpers.js')
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
if (context
|
|
3
|
+
function asList(context) {
|
|
4
|
+
if (Array.isArray(context)) {
|
|
5
|
+
return {
|
|
6
|
+
marker: 'list',
|
|
7
|
+
// types: [context.marker],
|
|
8
|
+
value: context
|
|
9
|
+
}
|
|
10
|
+
} else if (context.marker === 'list') {
|
|
5
11
|
return context
|
|
6
12
|
}
|
|
7
13
|
return {
|
|
@@ -11,60 +17,64 @@ const asList = (context) => {
|
|
|
11
17
|
}
|
|
12
18
|
}
|
|
13
19
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
function listable(hierarchy) {
|
|
21
|
+
return (c, type) => {
|
|
22
|
+
if (!c) {
|
|
23
|
+
return false
|
|
24
|
+
}
|
|
25
|
+
if (hierarchy.isA(c.marker, type)) {
|
|
26
|
+
return true
|
|
27
|
+
}
|
|
28
|
+
if (c.marker === 'list') {
|
|
29
|
+
for (const t of c.types) {
|
|
30
|
+
if (hierarchy.isA(t, type)) {
|
|
31
|
+
return true
|
|
32
|
+
}
|
|
25
33
|
}
|
|
26
34
|
}
|
|
27
|
-
}
|
|
28
|
-
return false
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const isA = (hierarchy) => (child, parent, { strict=false } = {}) => {
|
|
32
|
-
if (!child || !parent) {
|
|
33
35
|
return false
|
|
34
36
|
}
|
|
37
|
+
}
|
|
35
38
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
if (parent.marker) {
|
|
41
|
-
parent = parent.marker
|
|
39
|
+
function isA(hierarchy) {
|
|
40
|
+
return (child, parent, { strict=false } = {}) => {
|
|
41
|
+
if (!child || !parent) {
|
|
42
|
+
return false
|
|
42
43
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
44
|
+
|
|
45
|
+
if (strict) {
|
|
46
|
+
if (child.marker) {
|
|
47
|
+
child = child.marker
|
|
48
|
+
}
|
|
49
|
+
if (parent.marker) {
|
|
50
|
+
parent = parent.marker
|
|
51
|
+
}
|
|
52
|
+
return hierarchy.isA(child, parent)
|
|
53
|
+
} else {
|
|
54
|
+
const children = propertyToArray(child)
|
|
55
|
+
for (const child of children) {
|
|
56
|
+
let okay = false
|
|
57
|
+
if (hierarchy.isA(child.marker || child, parent.marker || parent)) {
|
|
58
|
+
okay = true
|
|
59
|
+
} else {
|
|
60
|
+
for (const childT of child.types || [child]) {
|
|
61
|
+
if (okay) {
|
|
58
62
|
break
|
|
59
63
|
}
|
|
64
|
+
for (const parentT of parent.types || [parent]) {
|
|
65
|
+
if (hierarchy.isA(childT, parentT)) {
|
|
66
|
+
okay = true
|
|
67
|
+
break
|
|
68
|
+
}
|
|
69
|
+
}
|
|
60
70
|
}
|
|
61
71
|
}
|
|
72
|
+
if (!okay) {
|
|
73
|
+
return false
|
|
74
|
+
}
|
|
62
75
|
}
|
|
63
|
-
|
|
64
|
-
return false
|
|
65
|
-
}
|
|
76
|
+
return true
|
|
66
77
|
}
|
|
67
|
-
return true
|
|
68
78
|
}
|
|
69
79
|
}
|
|
70
80
|
|
|
@@ -86,8 +86,8 @@ function getTime(time) {
|
|
|
86
86
|
return { hour, minute, second }
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
instantiate
|
|
90
|
-
|
|
89
|
+
function instantiate(isA, now, context) {
|
|
90
|
+
function getType(context, type) {
|
|
91
91
|
if (context.marker == 'onDate_dates' && context.date?.marker == type) {
|
|
92
92
|
return context.date
|
|
93
93
|
} if (context.marker == type) {
|
|
@@ -13,7 +13,7 @@ function getVariables(expression, isVariable = (expression) => typeof expression
|
|
|
13
13
|
return []
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
function match(values, head, value) {
|
|
17
17
|
for (const prop in head) {
|
|
18
18
|
if (head[prop] instanceof Function) {
|
|
19
19
|
if (!head[prop](value[prop])) {
|
|
@@ -33,22 +33,24 @@ const match = (values, head, value) => {
|
|
|
33
33
|
return true
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
function unify(rule, value) {
|
|
37
37
|
const values = { ...rule.values }
|
|
38
38
|
if (match(values, rule.head(values), value)) {
|
|
39
39
|
return rule.body(values)
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
function f(values, variable) {
|
|
44
|
+
return (value) => {
|
|
45
|
+
if (!value) {
|
|
46
|
+
throw new Error("Value not present")
|
|
47
|
+
}
|
|
48
|
+
if (values[variable] && values[variable] != value) {
|
|
49
|
+
throw new Error("Variable already set to different value")
|
|
50
|
+
}
|
|
51
|
+
values[variable] = value
|
|
52
|
+
return true
|
|
49
53
|
}
|
|
50
|
-
values[variable] = value
|
|
51
|
-
return true
|
|
52
54
|
}
|
|
53
55
|
|
|
54
56
|
const rules = [
|
|
@@ -74,7 +76,7 @@ const rules = [
|
|
|
74
76
|
]
|
|
75
77
|
|
|
76
78
|
function solveFor(expression, variable, isVariable = (expression) => typeof expression.value != 'number') {
|
|
77
|
-
|
|
79
|
+
function sameVar(c1, c2) {
|
|
78
80
|
return c1.value == c2.value
|
|
79
81
|
}
|
|
80
82
|
|
package/common/helpers/menus.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
function calculateLefts(defs) {
|
|
2
2
|
const lefts = {}
|
|
3
3
|
calculateLeftsHelper(defs, lefts)
|
|
4
4
|
return lefts
|
|
5
5
|
}
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
function calculateLeftsHelper(defs, lefts) {
|
|
8
8
|
if (Array.isArray(defs)) {
|
|
9
9
|
let previous
|
|
10
10
|
for (const def of defs) {
|
|
@@ -19,13 +19,13 @@ const calculateLeftsHelper = (defs, lefts) => {
|
|
|
19
19
|
return lefts
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
function calculateRights(defs) {
|
|
23
23
|
const rights = {}
|
|
24
24
|
calculateRightsHelper(defs, rights)
|
|
25
25
|
return rights
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
function calculateRightsHelper(defs, rights) {
|
|
29
29
|
if (Array.isArray(defs)) {
|
|
30
30
|
let previous
|
|
31
31
|
for (const def of defs) {
|
|
@@ -40,13 +40,13 @@ const calculateRightsHelper = (defs, rights) => {
|
|
|
40
40
|
return rights
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
function calculateDowns(defs) {
|
|
44
44
|
const downs = {}
|
|
45
45
|
calculateDownsHelper(defs, downs)
|
|
46
46
|
return downs
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
function calculateDownsHelper(defs, downs) {
|
|
50
50
|
if (Array.isArray(defs)) {
|
|
51
51
|
for (const def of defs) {
|
|
52
52
|
calculateDownsHelper(def, downs)
|
|
@@ -72,13 +72,13 @@ const calculateDownsHelper = (defs, downs) => {
|
|
|
72
72
|
return downs
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
function calculateUps(defs) {
|
|
76
76
|
const ups = {}
|
|
77
77
|
calculateUpsHelper(defs, ups)
|
|
78
78
|
return ups
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
function calculateUpsHelper(defs, ups) {
|
|
82
82
|
if (Array.isArray(defs)) {
|
|
83
83
|
for (const def of defs) {
|
|
84
84
|
calculateUpsHelper(def, ups)
|
|
@@ -100,13 +100,13 @@ const calculateUpsHelper = (defs, ups) => {
|
|
|
100
100
|
return ups
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
|
|
103
|
+
function calculateParents(defs) {
|
|
104
104
|
const parents = {}
|
|
105
105
|
calculateParentsHelper(defs, parents)
|
|
106
106
|
return parents
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
|
|
109
|
+
function calculateParentsHelper(defs, parents) {
|
|
110
110
|
if (Array.isArray(defs)) {
|
|
111
111
|
for (const def of defs) {
|
|
112
112
|
parents[def.key] = def.key
|
|
@@ -123,13 +123,13 @@ const calculateParentsHelper = (defs, parents) => {
|
|
|
123
123
|
return parents
|
|
124
124
|
}
|
|
125
125
|
|
|
126
|
-
|
|
126
|
+
function calculatePaths(defs) {
|
|
127
127
|
const paths = {}
|
|
128
128
|
calculatePathsHelper(defs, paths)
|
|
129
129
|
return paths
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
function calculatePathsHelper(defs, paths) {
|
|
133
133
|
if (Array.isArray(defs)) {
|
|
134
134
|
for (const def of defs) {
|
|
135
135
|
calculatePathsHelper(def, paths)
|
package/common/helpers/meta.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const _ = require('lodash')
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
function hashIndexesGet(hash, indexes) {
|
|
4
4
|
let value = hash
|
|
5
5
|
for (const i of indexes) {
|
|
6
6
|
value = value[i]
|
|
@@ -8,7 +8,7 @@ const hashIndexesGet = (hash, indexes) => {
|
|
|
8
8
|
return value
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
function hashIndexesSet(hash, indexes, value) {
|
|
12
12
|
let currentValue = hash
|
|
13
13
|
for (const i of indexes.slice(0, -1)) {
|
|
14
14
|
if (!currentValue[i]) {
|
|
@@ -19,7 +19,7 @@ const hashIndexesSet = (hash, indexes, value) => {
|
|
|
19
19
|
currentValue[indexes[indexes.length-1]] = value
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
function isPrefix(prefix, fix) {
|
|
23
23
|
return prefix.every((element, index) => {
|
|
24
24
|
return prefix[index] === fix[index]
|
|
25
25
|
})
|
|
@@ -27,11 +27,11 @@ const isPrefix = (prefix, fix) => {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
// assumes isPrefix is true
|
|
30
|
-
|
|
30
|
+
function replacePrefix(prefix, prefixPrime, fix) {
|
|
31
31
|
return prefixPrime.concat(fix.slice(prefix.length))
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
function compose(m1s, m2s) {
|
|
35
35
|
return m2s.map( (m2) => {
|
|
36
36
|
m1 = m1s.find( (m1) => isPrefix(m1.from, m2.from) )
|
|
37
37
|
if (m1) {
|
|
@@ -48,7 +48,7 @@ const compose = (m1s, m2s) => {
|
|
|
48
48
|
'[{"from":["two"],"to":["owner"]},{"from":["one"],"to":["ownee"]},{"from":["number"],"to":["number"]}]'
|
|
49
49
|
*/
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
function translationMapping(from, to) {
|
|
52
52
|
const mappings = []
|
|
53
53
|
if (from.atomic) {
|
|
54
54
|
return mappings
|
|
@@ -65,7 +65,7 @@ const translationMapping = (from, to) => {
|
|
|
65
65
|
if (matchField) {
|
|
66
66
|
let found = false
|
|
67
67
|
const todo = Object.keys(to).map( (key) => [key] )
|
|
68
|
-
while (!found) {
|
|
68
|
+
while (!found && todo.length > 0) {
|
|
69
69
|
const tkey = todo.shift()
|
|
70
70
|
const tvalue = hashIndexesGet(to, tkey);
|
|
71
71
|
const fvalue = hashIndexesGet(from, [fkey]);
|
|
@@ -89,7 +89,7 @@ const translationMapping = (from, to) => {
|
|
|
89
89
|
return mappings
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
function translationMappings(froms, to) {
|
|
93
93
|
const mappingss = []
|
|
94
94
|
for (const from of froms) {
|
|
95
95
|
mappingss.push(translationMapping(from, to))
|
|
@@ -97,7 +97,7 @@ const translationMappings = (froms, to) => {
|
|
|
97
97
|
return mappingss
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
function translationMappingToInstantiatorMappings(translationMapping, from , to) {
|
|
101
101
|
return translationMapping.map( (tm) => {
|
|
102
102
|
return {
|
|
103
103
|
// match: ({context}) => context.value == to[tm.to].value,
|