theprogrammablemind_4wp 7.5.0-beta.32 → 7.5.0-beta.34
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +1 -1
- package/src/config.js +272 -13
package/package.json
CHANGED
package/src/config.js
CHANGED
@@ -542,9 +542,23 @@ class Config {
|
|
542
542
|
client.build({ config: this, target: this.name, beforeQuery: () => {}, template, ...options })
|
543
543
|
} else {
|
544
544
|
// no change
|
545
|
-
this.initInstances.push(instance)
|
546
|
-
|
547
|
-
|
545
|
+
// this.initInstances.push({ ...instance, name: config.name })
|
546
|
+
const isEmpty = ( instance ) => {
|
547
|
+
const properties = [
|
548
|
+
"queries",
|
549
|
+
"resultss",
|
550
|
+
"fragments",
|
551
|
+
"semantics",
|
552
|
+
"associations",
|
553
|
+
]
|
554
|
+
return !properties.find( (property) => instance[property].length > 0 )
|
555
|
+
}
|
556
|
+
if (!isEmpty(instance)) {
|
557
|
+
instance.name = this.name
|
558
|
+
this.initInstances.push(instance)
|
559
|
+
this.instances.push(instance)
|
560
|
+
client.processInstance(this, instance)
|
561
|
+
}
|
548
562
|
}
|
549
563
|
}
|
550
564
|
|
@@ -1533,7 +1547,8 @@ class Config {
|
|
1533
1547
|
}
|
1534
1548
|
|
1535
1549
|
initializeFromConfigs () {
|
1536
|
-
this.configs.forEach(({ config, namespace, uuid }) => {
|
1550
|
+
// [...this.configs].reverse().forEach(({ config, namespace, uuid }) => {
|
1551
|
+
[...this.configs].reverse().forEach(({ config, namespace, uuid }) => {
|
1537
1552
|
/*
|
1538
1553
|
let objects = this.get('objects')
|
1539
1554
|
if (namespace) {
|
@@ -1785,8 +1800,17 @@ class Config {
|
|
1785
1800
|
this.configs = [...oconfigs]
|
1786
1801
|
}
|
1787
1802
|
|
1803
|
+
const addInternals = []
|
1788
1804
|
const inits = []
|
1789
1805
|
const initAfterApis = []
|
1806
|
+
if (false && this.config.hierarchy.find( (pair) => JSON.stringify(pair) === JSON.stringify(["equipable2","property"]))) {
|
1807
|
+
debugger // happened
|
1808
|
+
}
|
1809
|
+
if (false && this.name == 'countable') {
|
1810
|
+
debugger // in rebuild
|
1811
|
+
}
|
1812
|
+
const reverseIt = true
|
1813
|
+
const interleaved = true
|
1790
1814
|
this.configs.forEach((km) => {
|
1791
1815
|
const namespace = km.namespace
|
1792
1816
|
this.config.objects.namespaced[km._uuid] = {}
|
@@ -1819,7 +1843,12 @@ class Config {
|
|
1819
1843
|
const args = { isModule, addWord: aw, km: kmFn, hierarchy: this.hierarchy, config, baseConfig: this, currentConfig: config, uuid: config._uuid, objects: namespacedObjects, namespace, api: config.api }
|
1820
1844
|
config.initializerFn(args)
|
1821
1845
|
if (config.initAfterApi) {
|
1822
|
-
|
1846
|
+
// reverse the list
|
1847
|
+
initAfterApis.unshift({ config, args })
|
1848
|
+
} else {
|
1849
|
+
if (interleaved) {
|
1850
|
+
initAfterApis.unshift(null)
|
1851
|
+
}
|
1823
1852
|
}
|
1824
1853
|
// greg
|
1825
1854
|
if (config._api) {
|
@@ -1827,27 +1856,124 @@ class Config {
|
|
1827
1856
|
// reverse the list
|
1828
1857
|
inits.unshift( () => config._api.initialize({ config: this, km: kmFn, api: config._api }) )
|
1829
1858
|
// config._api.initialize({ config, api: config._api })
|
1859
|
+
} else {
|
1860
|
+
if (interleaved) {
|
1861
|
+
inits.unshift(null)
|
1862
|
+
}
|
1830
1863
|
}
|
1831
1864
|
config._api.objects = namespacedObjects
|
1832
1865
|
config._api.config = () => this
|
1833
1866
|
config._api.uuid = config._uuid
|
1867
|
+
} else {
|
1868
|
+
if (interleaved) {
|
1869
|
+
inits.unshift(null)
|
1870
|
+
}
|
1834
1871
|
}
|
1835
1872
|
config.setUUIDs()
|
1836
1873
|
config.applyNamespace(config.config, namespace, config.uuid)
|
1837
1874
|
if (!isSelf) {
|
1838
|
-
|
1875
|
+
if (!reverseIt) {
|
1876
|
+
addInternals.push(config)
|
1877
|
+
} else {
|
1878
|
+
addInternals.unshift(config)
|
1879
|
+
}
|
1880
|
+
// this.addInternal(config, true, false, false, true)
|
1881
|
+
} else {
|
1882
|
+
if (interleaved) {
|
1883
|
+
addInternals.unshift(null)
|
1884
|
+
}
|
1839
1885
|
}
|
1840
1886
|
km.valid()
|
1841
1887
|
})
|
1842
|
-
|
1843
|
-
|
1844
|
-
|
1888
|
+
|
1889
|
+
if (this.name == 'time') {
|
1890
|
+
debugger
|
1845
1891
|
}
|
1846
|
-
|
1847
|
-
|
1848
|
-
|
1892
|
+
|
1893
|
+
if (addInternals.length !== inits.length || addInternals.length !== initAfterApis.length) {
|
1894
|
+
debugger // bug
|
1895
|
+
}
|
1896
|
+
|
1897
|
+
const generators = this.config.generators
|
1898
|
+
const semantics = this.config.semantics
|
1899
|
+
if (reverseIt) {
|
1900
|
+
this.config.generators = []
|
1901
|
+
this.config.semantics = []
|
1902
|
+
}
|
1903
|
+
|
1904
|
+
if (!interleaved) {
|
1905
|
+
for (const config of addInternals) {
|
1906
|
+
if (!reverseIt) {
|
1907
|
+
this.addInternal(config, true, false, false, true)
|
1908
|
+
} else {
|
1909
|
+
this.addInternalR(config, true, false, false, true)
|
1910
|
+
}
|
1911
|
+
}
|
1912
|
+
// console.log('inits from config', inits)
|
1913
|
+
for (const init of inits) {
|
1914
|
+
init()
|
1915
|
+
}
|
1916
|
+
for (let init of initAfterApis) {
|
1917
|
+
// init.args.isAfterApi = true
|
1918
|
+
init.config.initializerFn({ ...init.args, kms: this.getConfigs(), isAfterApi: true })
|
1919
|
+
}
|
1920
|
+
this.instances.forEach((instance) => client.processInstance(this, instance))
|
1921
|
+
} else {
|
1922
|
+
const base = {
|
1923
|
+
operators: this.config.operators,
|
1924
|
+
bridges: this.config.bridges,
|
1925
|
+
hierarchy: this.config.hierarchy,
|
1926
|
+
priorities: this.config.priorities,
|
1927
|
+
associations: this.config.associations,
|
1928
|
+
words: this.config.words
|
1929
|
+
}
|
1930
|
+
|
1931
|
+
this.config.operators = []
|
1932
|
+
this.config.bridges = []
|
1933
|
+
this.config.hierarchy = []
|
1934
|
+
this.config.priorities = []
|
1935
|
+
this.config.associations = { positive: [], negative: [] }
|
1936
|
+
this.config.words = {}
|
1937
|
+
|
1938
|
+
for (let i = 0; i < addInternals.length; ++i) {
|
1939
|
+
let name;
|
1940
|
+
if (addInternals[i]) {
|
1941
|
+
this.addInternalR(addInternals[i], true, false, false, true)
|
1942
|
+
name = addInternals[i].name
|
1943
|
+
} else{
|
1944
|
+
this.addInternalR(base, true, false, false, true)
|
1945
|
+
name = this.name
|
1946
|
+
}
|
1947
|
+
// console.log('name -------------', name)
|
1948
|
+
if (inits[i]) {
|
1949
|
+
inits[i]()
|
1950
|
+
}
|
1951
|
+
if (initAfterApis[i]) {
|
1952
|
+
const init = initAfterApis[i]
|
1953
|
+
init.config.initializerFn({ ...init.args, kms: this.getConfigs(), isAfterApi: true })
|
1954
|
+
}
|
1955
|
+
if (this.name == 'pipboy') {
|
1956
|
+
debugger
|
1957
|
+
}
|
1958
|
+
const instance = this.instances.find((instance) => instance.name == name)
|
1959
|
+
if (instance) {
|
1960
|
+
// console.log('-------- instance')
|
1961
|
+
if (name == 'pipboyTemplate') {
|
1962
|
+
debugger
|
1963
|
+
}
|
1964
|
+
client.processInstance(this, instance)
|
1965
|
+
}
|
1966
|
+
}
|
1967
|
+
// this.instances.forEach((instance) => client.processInstance(this, instance))
|
1968
|
+
}
|
1969
|
+
|
1970
|
+
if (reverseIt) {
|
1971
|
+
this.config.generators = generators.concat(this.config.generators)
|
1972
|
+
this.config.semantics = semantics.concat(this.config.semantics)
|
1973
|
+
}
|
1974
|
+
if (this.name == 'pipboy') {
|
1975
|
+
debugger // instance
|
1849
1976
|
}
|
1850
|
-
this.instances.forEach((instance) => client.processInstance(this, instance))
|
1851
1977
|
this.valid()
|
1852
1978
|
this.checkBridges()
|
1853
1979
|
}
|
@@ -2173,6 +2299,10 @@ class Config {
|
|
2173
2299
|
more = new Config(more)
|
2174
2300
|
}
|
2175
2301
|
|
2302
|
+
if (this.name == 'pipboy') {
|
2303
|
+
debugger // in add
|
2304
|
+
// .config.hierarchy.find( (pair) => JSON.stringify(pair) == JSON.stringify(["equipable","isEder"]) )
|
2305
|
+
}
|
2176
2306
|
this.valid()
|
2177
2307
|
more.valid()
|
2178
2308
|
// copy so i don't have to copy later
|
@@ -2214,6 +2344,13 @@ class Config {
|
|
2214
2344
|
this.configs.forEach((km) => {
|
2215
2345
|
this.instances = (km._config.instances || this.initInstances.slice()).concat(this.instances)
|
2216
2346
|
})
|
2347
|
+
let noDups = []
|
2348
|
+
for (let instance of this.instances) {
|
2349
|
+
if (!noDups.find( (existing) => existing.name == instance.name )) {
|
2350
|
+
noDups.push(instance)
|
2351
|
+
}
|
2352
|
+
}
|
2353
|
+
this.instances = noDups
|
2217
2354
|
|
2218
2355
|
this.rebuild()
|
2219
2356
|
this.valid()
|
@@ -2331,6 +2468,128 @@ class Config {
|
|
2331
2468
|
}
|
2332
2469
|
return this
|
2333
2470
|
}
|
2471
|
+
|
2472
|
+
// assumes this is called in reverse order
|
2473
|
+
addInternalR (more, useOldVersion = true, skipObjects = false, includeNamespaces = true, allowNameToBeNull = false) {
|
2474
|
+
if (more instanceof Config) {
|
2475
|
+
more.initialize({ force: false })
|
2476
|
+
if (useOldVersion) {
|
2477
|
+
more = more.config
|
2478
|
+
} else {
|
2479
|
+
// more = more.initConfig
|
2480
|
+
more = _.cloneDeep(more.initConfig)
|
2481
|
+
}
|
2482
|
+
}
|
2483
|
+
for (const key of Object.keys(more)) {
|
2484
|
+
const value = more[key]
|
2485
|
+
// TODO remove name and description on the config bag
|
2486
|
+
const noOverwrite = ['name', 'namespaced']
|
2487
|
+
if (!this.config[key]) {
|
2488
|
+
if (allowNameToBeNull) {
|
2489
|
+
if (noOverwrite.includes(key)) {
|
2490
|
+
continue
|
2491
|
+
}
|
2492
|
+
} else if (this.config[key] && noOverwrite.includes(key)) {
|
2493
|
+
continue
|
2494
|
+
}
|
2495
|
+
this.config[key] = value
|
2496
|
+
continue
|
2497
|
+
}
|
2498
|
+
if (key === 'words') {
|
2499
|
+
const configWords = this.config.words
|
2500
|
+
const moreWords = more.words
|
2501
|
+
for (const word of Object.keys(moreWords)) {
|
2502
|
+
if (!configWords[word]) {
|
2503
|
+
configWords[word] = []
|
2504
|
+
}
|
2505
|
+
// configWords[word] = configWords[word].concat(moreWords[word])
|
2506
|
+
configWords[word] = moreWords[word].concat(configWords[word])
|
2507
|
+
}
|
2508
|
+
} else if (key === 'name') {
|
2509
|
+
/*
|
2510
|
+
if (this.config[key] === '') {
|
2511
|
+
this.config[key] = more[key]
|
2512
|
+
}
|
2513
|
+
*/
|
2514
|
+
} else if (key === 'namespaces') {
|
2515
|
+
if (includeNamespaces) {
|
2516
|
+
Object.assign(this.config[key], more[key])
|
2517
|
+
}
|
2518
|
+
} else if (key === 'debug') {
|
2519
|
+
this.config[key] = this.config[key] || more[key]
|
2520
|
+
} else if (key === 'description') {
|
2521
|
+
// this.config[key] += ' ' + more[key].trim()
|
2522
|
+
this.config[key] = more[key].trim() + ' ' + this.config[key]
|
2523
|
+
} else if (key === 'objects') {
|
2524
|
+
if (!skipObjects) {
|
2525
|
+
// namespaced is special
|
2526
|
+
const namespaced = this.config.objects.namespaced
|
2527
|
+
Object.assign(this.config[key], more[key])
|
2528
|
+
this.config.objects.namespaced = namespaced
|
2529
|
+
}
|
2530
|
+
} else if (key === 'associations') {
|
2531
|
+
const configAssociations = this.config.associations
|
2532
|
+
const moreAssociations = more.associations
|
2533
|
+
if (moreAssociations.positive) {
|
2534
|
+
// configAssociations.positive = configAssociations.positive.concat(moreAssociations.positive)
|
2535
|
+
configAssociations.positive = moreAssociations.positive.concat(configAssociations.positive)
|
2536
|
+
}
|
2537
|
+
if (moreAssociations.negative) {
|
2538
|
+
// configAssociations.negative = configAssociations.negative.concat(moreAssociations.negative)
|
2539
|
+
configAssociations.negative = moreAssociations.negative.concat(configAssociations.negative)
|
2540
|
+
}
|
2541
|
+
} else if (Array.isArray(value)) {
|
2542
|
+
// handle allowDups
|
2543
|
+
if (key == 'operators') {
|
2544
|
+
// TODO what about other props
|
2545
|
+
const isDup = (op1, op2) => op1.pattern == op2.pattern
|
2546
|
+
for (const newOne of more[key]) {
|
2547
|
+
for (let iOldOne = 0; iOldOne < this.config[key].length; ++iOldOne) {
|
2548
|
+
const oldOne = this.config[key][iOldOne];
|
2549
|
+
if (isDup(newOne, oldOne)) {
|
2550
|
+
if (oldOne.allowDups) {
|
2551
|
+
// the old one takes precedence to match what would happen during the original load
|
2552
|
+
debugger
|
2553
|
+
this.config[key].splice(iOldOne, 1)
|
2554
|
+
break;
|
2555
|
+
}
|
2556
|
+
}
|
2557
|
+
}
|
2558
|
+
}
|
2559
|
+
}
|
2560
|
+
if (key == 'bridges') {
|
2561
|
+
// TODO what about other props
|
2562
|
+
const idDup = (b1, b2) => b1.id == b2.id && b1.level == b2.level && b1.bridge == b2.bridge
|
2563
|
+
for (const newOne of more[key]) {
|
2564
|
+
for (let iOldOne = 0; iOldOne < this.config[key].length; ++iOldOne) {
|
2565
|
+
const oldOne = this.config[key][iOldOne];
|
2566
|
+
if (newOne.id == oldOne.id) {
|
2567
|
+
if (oldOne.allowDups) {
|
2568
|
+
// the old one takes precedence to match what would happen during the original load
|
2569
|
+
this.config[key].splice(iOldOne, 1)
|
2570
|
+
break;
|
2571
|
+
}
|
2572
|
+
}
|
2573
|
+
}
|
2574
|
+
}
|
2575
|
+
}
|
2576
|
+
// console.log('key', key, 'XXX')
|
2577
|
+
// console.log('more', JSON.stringify(more, null, 2))
|
2578
|
+
// this.config[key] = this.config[key].concat(more[key])
|
2579
|
+
if (key == '2enerators') {
|
2580
|
+
debugger
|
2581
|
+
}
|
2582
|
+
// this.config[key] = this.config[key].concat(more[key])
|
2583
|
+
this.config[key] = more[key].concat(this.config[key])
|
2584
|
+
} else {
|
2585
|
+
if (!(key in this.config)) {
|
2586
|
+
throw `Unexpected property in config ${key}`
|
2587
|
+
}
|
2588
|
+
this.config[key] = more[key]
|
2589
|
+
}
|
2590
|
+
}
|
2591
|
+
return this
|
2592
|
+
}
|
2334
2593
|
}
|
2335
2594
|
|
2336
2595
|
module.exports = {
|