theprogrammablemind_4wp 7.4.0-beta.1 → 7.4.0-beta.3
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/client.js +69 -42
- package/package.json +1 -1
- package/src/config.js +47 -2
    
        package/client.js
    CHANGED
    
    | @@ -103,8 +103,23 @@ const setupArgs = (args, config, logs, hierarchy) => { | |
| 103 103 | 
             
              args.asList = asList
         | 
| 104 104 | 
             
              args.retry = () => { throw new RetryError() }
         | 
| 105 105 | 
             
              const scopedAsk = getAsk(config)
         | 
| 106 | 
            +
             | 
| 107 | 
            +
              const getAPI = (uuid) => {
         | 
| 108 | 
            +
                if (config && config.getAPI) {
         | 
| 109 | 
            +
                  return config.getAPI(uuid)
         | 
| 110 | 
            +
                }
         | 
| 111 | 
            +
              }
         | 
| 112 | 
            +
              const getAPIs = (uuid) => {
         | 
| 113 | 
            +
                if (config && config.getAPIs) {
         | 
| 114 | 
            +
                  return config.getAPIs(uuid)
         | 
| 115 | 
            +
                }
         | 
| 116 | 
            +
              }
         | 
| 106 117 | 
             
              args.getUUIDScoped = (uuid) => {
         | 
| 107 | 
            -
                return {  | 
| 118 | 
            +
                return { 
         | 
| 119 | 
            +
                  ask: scopedAsk(uuid),
         | 
| 120 | 
            +
                  api: getAPI(uuid),
         | 
| 121 | 
            +
                  apis: getAPIs(uuid)
         | 
| 122 | 
            +
                }
         | 
| 108 123 | 
             
              }
         | 
| 109 124 | 
             
              args.motivation = (m) => config.addMotivation(m)
         | 
| 110 125 | 
             
              args.s = (c) => config.getSemantics(logs).apply(args, c)
         | 
| @@ -491,7 +506,7 @@ const processInstance = (config, instance) => { | |
| 491 506 | 
             
              global.transitoryMode = transitoryMode
         | 
| 492 507 | 
             
            }
         | 
| 493 508 |  | 
| 494 | 
            -
            const _process = async (config, query, { credentials, writeTests, isTest, saveDeveloper, testConfig, testsFN, errorHandler = defaultErrorHandler | 
| 509 | 
            +
            const _process = async (config, query, { credentials, writeTests, isTest, saveDeveloper, testConfig, testsFN, errorHandler = defaultErrorHandler } = {}) => {
         | 
| 495 510 | 
             
              if (credentials) {
         | 
| 496 511 | 
             
                config.server(credentials.server, credentials.key)
         | 
| 497 512 | 
             
              }
         | 
| @@ -504,7 +519,7 @@ const _process = async (config, query, { credentials, writeTests, isTest, saveDe | |
| 504 519 | 
             
                if (writeTests) {
         | 
| 505 520 | 
             
                  config.rebuild()
         | 
| 506 521 | 
             
                  const objects = getObjects(config.config.objects)(config.uuid)
         | 
| 507 | 
            -
                  beforeQuery({ query, isModule: false, objects })
         | 
| 522 | 
            +
                  config.beforeQuery({ query, isModule: false, objects })
         | 
| 508 523 | 
             
                }
         | 
| 509 524 | 
             
              } catch(error) {
         | 
| 510 525 | 
             
                throw error
         | 
| @@ -605,7 +620,7 @@ const getConfigForTest = (config, testConfig) => { | |
| 605 620 | 
             
              return configForTest
         | 
| 606 621 | 
             
            }
         | 
| 607 622 |  | 
| 608 | 
            -
            const runTest = async (config, expected, { verbose,  | 
| 623 | 
            +
            const runTest = async (config, expected, { verbose, afterTest, testConfig, debug }) => {
         | 
| 609 624 | 
             
              const test = expected.query
         | 
| 610 625 | 
             
              // initialize in between test so state is not preserved since the test was adding without state
         | 
| 611 626 | 
             
              config.rebuild()
         | 
| @@ -623,7 +638,7 @@ const runTest = async (config, expected, { verbose, beforeQuery, afterTest, test | |
| 623 638 | 
             
              }
         | 
| 624 639 |  | 
| 625 640 | 
             
              const objects = getObjects(config.config.objects)(config.uuid)
         | 
| 626 | 
            -
              beforeQuery({ query: test, isModule: false, objects })
         | 
| 641 | 
            +
              config.beforeQuery({ query: test, isModule: false, objects })
         | 
| 627 642 | 
             
              config.resetMotivations()
         | 
| 628 643 | 
             
                try {
         | 
| 629 644 | 
             
                  const result = await _process(config, test, { errorHandler, isTest: true })
         | 
| @@ -649,8 +664,8 @@ const runTest = async (config, expected, { verbose, beforeQuery, afterTest, test | |
| 649 664 | 
             
                  const failed_config = !matching(actual_config, expected_config)
         | 
| 650 665 | 
             
                  let failed = failed_paraphrases || failed_responses || failed_contexts || failed_objects || failed_config
         | 
| 651 666 | 
             
                  if (!failed) {
         | 
| 652 | 
            -
                    if (afterTest) {
         | 
| 653 | 
            -
                      failed = afterTest({ query: test, expected, actual: result, config })
         | 
| 667 | 
            +
                    if (config.afterTest) {
         | 
| 668 | 
            +
                      failed = config.afterTest({ query: test, expected, actual: result, config })
         | 
| 654 669 | 
             
                      if (failed) {
         | 
| 655 670 | 
             
                        return {
         | 
| 656 671 | 
             
                          utterance: test,
         | 
| @@ -710,21 +725,20 @@ const runTestsHelper = async (config, tests, failed, juicyBits) => { | |
| 710 725 |  | 
| 711 726 | 
             
            const runTests = async (config, testFile, juicyBits) => {
         | 
| 712 727 | 
             
              const tests = JSON.parse(runtime.fs.readFileSync(testFile))
         | 
| 713 | 
            -
               | 
| 714 | 
            -
              beforeTests()
         | 
| 728 | 
            +
              config.beforeTests()
         | 
| 715 729 | 
             
              if (juicyBits.verbose) {
         | 
| 716 730 | 
             
                console.log('\n', testFile, '-----------------------------------------------', '\n')
         | 
| 717 731 | 
             
              }
         | 
| 718 732 | 
             
              const v = await runTestsHelper(config, [...tests], [], juicyBits)
         | 
| 719 | 
            -
              afterTests()
         | 
| 733 | 
            +
              config.afterTests()
         | 
| 720 734 | 
             
              return v
         | 
| 721 735 | 
             
            }
         | 
| 722 736 |  | 
| 723 | 
            -
            const saveTest = async (testFile, config, test, expected,  | 
| 737 | 
            +
            const saveTest = async (testFile, config, test, expected, testConfig, saveDeveloper) => {
         | 
| 724 738 | 
             
              config.rebuild()
         | 
| 725 739 | 
             
              const objects = getObjects(config.config.objects)(config.uuid)
         | 
| 726 740 | 
             
              config.resetMotivations()
         | 
| 727 | 
            -
              beforeQuery({ query: test, isModule: false, objects })
         | 
| 741 | 
            +
              config.beforeQuery({ query: test, isModule: false, objects })
         | 
| 728 742 | 
             
              console.log(test)
         | 
| 729 743 | 
             
              const result = await _process(config, test, { isTest: true })
         | 
| 730 744 | 
             
              // const actualObjects = config.config.objects
         | 
| @@ -732,23 +746,23 @@ const saveTest = async (testFile, config, test, expected, beforeQuery, testConfi | |
| 732 746 | 
             
              writeTest(testFile, test, config.config.objects, result.generated, result.paraphrases, result.responses, result.contexts, result.associations, result.metadata, actualConfig, saveDeveloper)
         | 
| 733 747 | 
             
            }
         | 
| 734 748 |  | 
| 735 | 
            -
            const saveTestsHelper = async (testFile, config, tests, todo,  | 
| 749 | 
            +
            const saveTestsHelper = async (testFile, config, tests, todo, testConfig, saveDeveloper) => {
         | 
| 736 750 | 
             
              if (todo.length === 0) {
         | 
| 737 751 | 
             
                return
         | 
| 738 752 | 
             
              }
         | 
| 739 753 | 
             
              const test = todo.pop()
         | 
| 740 754 | 
             
              config.rebuild()
         | 
| 741 | 
            -
              const result = await saveTest(testFile, config, test, tests[test],  | 
| 755 | 
            +
              const result = await saveTest(testFile, config, test, tests[test], testConfig, saveDeveloper)
         | 
| 742 756 | 
             
              // initialize in between test so state is not preserved since the test was adding without state
         | 
| 743 757 | 
             
              // config.initialize({force: true})
         | 
| 744 758 | 
             
              config.rebuild()
         | 
| 745 | 
            -
              return saveTestsHelper(testFile, config, tests, todo,  | 
| 759 | 
            +
              return saveTestsHelper(testFile, config, tests, todo, testConfig, saveDeveloper)
         | 
| 746 760 | 
             
            }
         | 
| 747 761 |  | 
| 748 | 
            -
            const saveTests = (config, testFile,  | 
| 762 | 
            +
            const saveTests = (config, testFile, testConfig) => {
         | 
| 749 763 | 
             
              const tests = JSON.parse(runtime.fs.readFileSync(testFile))
         | 
| 750 764 | 
             
              console.log(testFile)
         | 
| 751 | 
            -
              return saveTestsHelper(testFile, config, tests, tests.map( (test) => test.query ),  | 
| 765 | 
            +
              return saveTestsHelper(testFile, config, tests, tests.map( (test) => test.query ), testConfig)
         | 
| 752 766 | 
             
            }
         | 
| 753 767 |  | 
| 754 768 | 
             
            /*
         | 
| @@ -969,7 +983,7 @@ entodicton.knowledgeModule( { | |
| 969 983 | 
             
            `
         | 
| 970 984 | 
             
            */
         | 
| 971 985 |  | 
| 972 | 
            -
            const build = async ({ config, target,  | 
| 986 | 
            +
            const build = async ({ config, target, template, errorHandler = defaultErrorHandler }) => {
         | 
| 973 987 | 
             
              const accumulators = {
         | 
| 974 988 | 
             
                resultss: [],
         | 
| 975 989 | 
             
                fragments: [],
         | 
| @@ -1007,7 +1021,7 @@ const build = async ({ config, target, beforeQuery, template, errorHandler = def | |
| 1007 1021 | 
             
                  }
         | 
| 1008 1022 |  | 
| 1009 1023 | 
             
                  try {
         | 
| 1010 | 
            -
                    const results = await _process(config, query.query, { | 
| 1024 | 
            +
                    const results = await _process(config, query.query, {})
         | 
| 1011 1025 | 
             
                    if (config.config.debug) {
         | 
| 1012 1026 | 
             
                      // TODO pass in the error handler like the other ones
         | 
| 1013 1027 | 
             
                      defaultInnerProcess(config, defaultErrorHandler, results)
         | 
| @@ -1104,11 +1118,40 @@ const knowledgeModule = async ({ | |
| 1104 1118 | 
             
              afterTest = () => {}
         | 
| 1105 1119 | 
             
            } = {}) => {
         | 
| 1106 1120 |  | 
| 1107 | 
            -
               | 
| 1121 | 
            +
              config.beforeQuery = beforeQuery 
         | 
| 1122 | 
            +
              config.beforeTests = beforeTests 
         | 
| 1123 | 
            +
              config.afterTests = afterTests 
         | 
| 1124 | 
            +
              config.beforeTest = beforeTest 
         | 
| 1125 | 
            +
              config.afterTest = afterTest 
         | 
| 1126 | 
            +
             | 
| 1108 1127 | 
             
              const testConfig = test
         | 
| 1109 1128 |  | 
| 1129 | 
            +
              if (!moduleFromJSFile) {
         | 
| 1130 | 
            +
                throw "'module' is a required parameter. The value should be either 'module' or a lambda that will be called when the file is acting as a module."
         | 
| 1131 | 
            +
              }
         | 
| 1132 | 
            +
              if (!config) {
         | 
| 1133 | 
            +
                throw "'config' is a required parameter. The value should the config that defines the knowledge module."
         | 
| 1134 | 
            +
              }
         | 
| 1135 | 
            +
              if (!config.name) {
         | 
| 1136 | 
            +
                throw "config must have 'name' set to the knowledge module name."
         | 
| 1137 | 
            +
              }
         | 
| 1138 | 
            +
              if (!description) {
         | 
| 1139 | 
            +
                throw "'description' is a required parameter. The value should the description of the knowledge module."
         | 
| 1140 | 
            +
              }
         | 
| 1141 | 
            +
              if (!test) {
         | 
| 1142 | 
            +
                throw "'test' is a required parameter. The value should the path to the file used to store the tests of the knowledge module and the contents of the file in the form { name: <filePath>, contexts: <json> }."
         | 
| 1143 | 
            +
              }
         | 
| 1144 | 
            +
             | 
| 1145 | 
            +
              const isProcess = require.main === moduleFromJSFile
         | 
| 1146 | 
            +
              let loadForTesting = false
         | 
| 1147 | 
            +
              if (global.theprogrammablemind) {
         | 
| 1148 | 
            +
                if (global.theprogrammablemind.loadForTesting[config.name]) {
         | 
| 1149 | 
            +
                  loadForTesting = true
         | 
| 1150 | 
            +
                }
         | 
| 1151 | 
            +
              }
         | 
| 1152 | 
            +
             | 
| 1110 1153 | 
             
              // remove test only stuff
         | 
| 1111 | 
            -
              if (!isProcess) {
         | 
| 1154 | 
            +
              if (!isProcess && !loadForTesting) {
         | 
| 1112 1155 | 
             
                config.config.operators = config.config.operators.filter( (operator) => {
         | 
| 1113 1156 | 
             
                  if (operator.development) {
         | 
| 1114 1157 | 
             
                    return false
         | 
| @@ -1125,22 +1168,6 @@ const knowledgeModule = async ({ | |
| 1125 1168 | 
             
                })
         | 
| 1126 1169 | 
             
              }
         | 
| 1127 1170 |  | 
| 1128 | 
            -
              if (!moduleFromJSFile) {
         | 
| 1129 | 
            -
                throw "'module' is a required parameter. The value should be either 'module' or a lambda that will be called when the file is acting as a module."
         | 
| 1130 | 
            -
              }
         | 
| 1131 | 
            -
              if (!config) {
         | 
| 1132 | 
            -
                throw "'config' is a required parameter. The value should the config that defines the knowledge module."
         | 
| 1133 | 
            -
              }
         | 
| 1134 | 
            -
              if (!config.name) {
         | 
| 1135 | 
            -
                throw "config must have 'name' set to the knowledge module name."
         | 
| 1136 | 
            -
              }
         | 
| 1137 | 
            -
              if (!description) {
         | 
| 1138 | 
            -
                throw "'description' is a required parameter. The value should the description of the knowledge module."
         | 
| 1139 | 
            -
              }
         | 
| 1140 | 
            -
              if (!test) {
         | 
| 1141 | 
            -
                throw "'test' is a required parameter. The value should the path to the file used to store the tests of the knowledge module and the contents of the file in the form { name: <filePath>, contexts: <json> }."
         | 
| 1142 | 
            -
              }
         | 
| 1143 | 
            -
             | 
| 1144 1171 | 
             
              let module
         | 
| 1145 1172 | 
             
              if (_.isFunction(moduleFromJSFile)) {
         | 
| 1146 1173 | 
             
                module = moduleFromJSFile
         | 
| @@ -1179,6 +1206,7 @@ const knowledgeModule = async ({ | |
| 1179 1206 | 
             
                  description: 'Entodicton knowledge module'
         | 
| 1180 1207 | 
             
                })
         | 
| 1181 1208 |  | 
| 1209 | 
            +
                parser.add_argument('-tfn', '--testFileName', { help: 'Override the test file for the module when the tests are being run' })
         | 
| 1182 1210 | 
             
                parser.add_argument('-t', '--test', { action: 'store_true', help: 'Run the tests. Create tests by running with the --query + --save flag' })
         | 
| 1183 1211 | 
             
                parser.add_argument('-tv', '--testVerbose', { action: 'store_true', help: 'Run the tests in verbose mode. Create tests by running with the --query or --loop with the --save flag' })
         | 
| 1184 1212 | 
             
                parser.add_argument('-tva', '--testAllVerbose', { action: 'store_true', help: 'Run the tests in verbose mode. All the tests will be run instead of stopping at first failure. Create tests by running with the --query or --loop with the --save flag' })
         | 
| @@ -1373,9 +1401,8 @@ const knowledgeModule = async ({ | |
| 1373 1401 |  | 
| 1374 1402 | 
             
                if (!args.query && !args.test && !args.info && (args.save || args.saveDeveloper)) {
         | 
| 1375 1403 | 
             
                  global.transitoryMode = true
         | 
| 1376 | 
            -
                  saveTests(config, test,  | 
| 1404 | 
            +
                  saveTests(config, test, testConfig, args.saveDeveloper)
         | 
| 1377 1405 | 
             
                // } else if (args.build) {
         | 
| 1378 | 
            -
                // build({ config, target: args.build, beforeQuery, errorHandler })
         | 
| 1379 1406 | 
             
                } else if (args.info) {
         | 
| 1380 1407 | 
             
                  showInfo(description, section, config)
         | 
| 1381 1408 | 
             
                } else if (args.test || args.testVerbose || args.testAllVerbose) {
         | 
| @@ -1388,7 +1415,7 @@ const knowledgeModule = async ({ | |
| 1388 1415 | 
             
                        }
         | 
| 1389 1416 | 
             
                        return
         | 
| 1390 1417 | 
             
                      }
         | 
| 1391 | 
            -
                      runTests(config, test, { debug: args.debug, testConfig: testConfig, verbose: args.testVerbose || args.testAllVerbose, stopAtFirstError: !args.testAllVerbose | 
| 1418 | 
            +
                      runTests(config, args.testFileName ? `${args.testFileName}.test.json` : test, { debug: args.debug, testConfig: testConfig, verbose: args.testVerbose || args.testAllVerbose, stopAtFirstError: !args.testAllVerbose }).then((results) => {
         | 
| 1392 1419 | 
             
                        if (results.length > 0 && args.vimdiff) {
         | 
| 1393 1420 | 
             
                          for (const result of results) {
         | 
| 1394 1421 | 
             
                            vimdiff(result.expected, result.actual)
         | 
| @@ -1461,9 +1488,9 @@ const knowledgeModule = async ({ | |
| 1461 1488 | 
             
                  if (args.objectDiff) {
         | 
| 1462 1489 | 
             
                    global.beforeObjects = _.cloneDeep(objects)
         | 
| 1463 1490 | 
             
                  }
         | 
| 1464 | 
            -
                  beforeQuery({ query: args.query, isModule: false, objects })
         | 
| 1491 | 
            +
                  config.beforeQuery({ query: args.query, isModule: false, objects })
         | 
| 1465 1492 | 
             
                  try {
         | 
| 1466 | 
            -
                    processResults(_process(config, args.query, { dontAddAssociations: args.dontAddAssociations, writeTests: args.save || args.saveDeveloper, saveDeveloper: args.saveDeveloper, testConfig, testsFN: test | 
| 1493 | 
            +
                    processResults(_process(config, args.query, { dontAddAssociations: args.dontAddAssociations, writeTests: args.save || args.saveDeveloper, saveDeveloper: args.saveDeveloper, testConfig, testsFN: test }))
         | 
| 1467 1494 | 
             
                  } catch( error ) {
         | 
| 1468 1495 | 
             
                    console.log('Error', error);
         | 
| 1469 1496 | 
             
                  }
         | 
    
        package/package.json
    CHANGED
    
    
    
        package/src/config.js
    CHANGED
    
    | @@ -767,6 +767,23 @@ class Config { | |
| 767 767 | 
             
                }
         | 
| 768 768 | 
             
              }
         | 
| 769 769 |  | 
| 770 | 
            +
              getAPIs (uuid) {
         | 
| 771 | 
            +
                let config
         | 
| 772 | 
            +
                if (this._uuid === uuid) {
         | 
| 773 | 
            +
                  config = this
         | 
| 774 | 
            +
                } else {
         | 
| 775 | 
            +
                  for (const km of this.configs) {
         | 
| 776 | 
            +
                    if (km._uuid === uuid) {
         | 
| 777 | 
            +
                      config = km.config
         | 
| 778 | 
            +
                      break
         | 
| 779 | 
            +
                    }
         | 
| 780 | 
            +
                  }
         | 
| 781 | 
            +
                }
         | 
| 782 | 
            +
                if (config && config._api && config._api.multiApi) {
         | 
| 783 | 
            +
                  return config._api.apis
         | 
| 784 | 
            +
                }
         | 
| 785 | 
            +
              }
         | 
| 786 | 
            +
             | 
| 770 787 | 
             
              getServer() {
         | 
| 771 788 | 
             
                return this._server
         | 
| 772 789 | 
             
              }
         | 
| @@ -888,6 +905,19 @@ class Config { | |
| 888 905 | 
             
                return configs;
         | 
| 889 906 | 
             
              }
         | 
| 890 907 |  | 
| 908 | 
            +
              getConfigByUUID (uuid) {
         | 
| 909 | 
            +
                if (this.uuid === uuid) {
         | 
| 910 | 
            +
                  return this
         | 
| 911 | 
            +
                }
         | 
| 912 | 
            +
                for (const config of this.configs) {
         | 
| 913 | 
            +
                  if (config.config instanceof Config) {
         | 
| 914 | 
            +
                    if (config.uuid === uuid) {
         | 
| 915 | 
            +
                      return config.config
         | 
| 916 | 
            +
                    }
         | 
| 917 | 
            +
                  }
         | 
| 918 | 
            +
                }
         | 
| 919 | 
            +
              }
         | 
| 920 | 
            +
             | 
| 891 921 | 
             
              getConfig (name) {
         | 
| 892 922 | 
             
                if (this.name === name) {
         | 
| 893 923 | 
             
                  return this
         | 
| @@ -932,7 +962,13 @@ class Config { | |
| 932 962 | 
             
                }
         | 
| 933 963 |  | 
| 934 964 | 
             
                this.addedArgss = []
         | 
| 935 | 
            -
                 | 
| 965 | 
            +
                let isProcess = require.main === module
         | 
| 966 | 
            +
                if (global.theprogrammablemind && config) {
         | 
| 967 | 
            +
                  if (global.theprogrammablemind.loadForTesting[config.name]) {
         | 
| 968 | 
            +
                    isProcess = true
         | 
| 969 | 
            +
                    this.loadedForTesting = true
         | 
| 970 | 
            +
                  }
         | 
| 971 | 
            +
                }
         | 
| 936 972 | 
             
                this.isModule = !isProcess
         | 
| 937 973 | 
             
                if (this.isModule) {
         | 
| 938 974 | 
             
                  this.removeDevelopmentElements(config)
         | 
| @@ -1260,6 +1296,7 @@ class Config { | |
| 1260 1296 | 
             
                cp.tests = this.tests
         | 
| 1261 1297 | 
             
                cp.motivations = this.motivations
         | 
| 1262 1298 | 
             
                cp.isModule = this.isModule
         | 
| 1299 | 
            +
                cp.loadedForTesting = this.loadedForTesting
         | 
| 1263 1300 | 
             
                cp.initInstances = this.initInstances.slice()
         | 
| 1264 1301 | 
             
                cp.instances = this.instances.slice()
         | 
| 1265 1302 | 
             
                cp.configCounter = this.configCounter
         | 
| @@ -1608,6 +1645,12 @@ class Config { | |
| 1608 1645 | 
             
                // already set
         | 
| 1609 1646 | 
             
                // this.isModule = this.isModule || mainIsModule
         | 
| 1610 1647 | 
             
                mainIsModule = (mainIsModule === undefined) ? this.isModule : mainIsModule
         | 
| 1648 | 
            +
                if (mainIsModule !== undefined) {
         | 
| 1649 | 
            +
                  this.isModule = mainIsModule
         | 
| 1650 | 
            +
                }
         | 
| 1651 | 
            +
                if (this.loadedForTesting) {
         | 
| 1652 | 
            +
                  this.isModule = false
         | 
| 1653 | 
            +
                }
         | 
| 1611 1654 | 
             
                this.config.objects.namespaced = {}
         | 
| 1612 1655 | 
             
                this.resetWasInitialized()
         | 
| 1613 1656 |  | 
| @@ -1645,7 +1688,9 @@ class Config { | |
| 1645 1688 | 
             
                  if (!(config instanceof Config)) {
         | 
| 1646 1689 | 
             
                    config = this
         | 
| 1647 1690 | 
             
                    isSelf = true
         | 
| 1648 | 
            -
                    isModule = mainIsModule
         | 
| 1691 | 
            +
                    isModule = config.isModule || mainIsModule
         | 
| 1692 | 
            +
                  } else {
         | 
| 1693 | 
            +
                    isModule = config.isModule
         | 
| 1649 1694 | 
             
                  }
         | 
| 1650 1695 | 
             
                  if (!isSelf) {
         | 
| 1651 1696 | 
             
                    config.config = _.cloneDeep(config.initConfig)
         |