async loadContents()

in parsers/LU/JS/packages/lu/src/parser/qnabuild/builder.ts [33:140]


  async loadContents(
    files: string[],
    botName: string,
    suffix: string,
    region: string,
    culture: string,
    schema?: string,
    importResolver?: object) {
    let multiRecognizers = new Map<string, MultiLanguageRecognizer>()
    let settings: any
    let recognizers = new Map<string, Recognizer>()
    let qnaContents = new Map<string, any>()
    let crosstrainedRecognizers = new Map<string, CrossTrainedRecognizer>()
    let qnaObjects = new Map<string, any[]>()

    for (const file of files) {
      let fileCulture: string
      let fileName: string
      let cultureFromPath = fileHelper.getCultureFromPath(file)
      if (cultureFromPath) {
        fileCulture = cultureFromPath
        let fileNameWithCulture = path.basename(file, path.extname(file))
        fileName = fileNameWithCulture.substring(0, fileNameWithCulture.length - cultureFromPath.length - 1)
      } else {
        fileCulture = culture
        fileName = path.basename(file, path.extname(file))
      }

      const fileFolder = path.dirname(file)
      const crossTrainedFileName = fileName + '.lu.qna.dialog'
      const crossTrainedRecognizerPath = path.join(fileFolder, crossTrainedFileName)
      if (!crosstrainedRecognizers.has(fileName)) {
        let crosstrainedRecognizerContent = []
        let crosstrainedRecognizerSchema = schema
        if (fs.existsSync(crossTrainedRecognizerPath)) {
          let crosstrainedRecognizerObject = JSON.parse(await fileHelper.getContentFromFile(crossTrainedRecognizerPath))
          crosstrainedRecognizerContent = crosstrainedRecognizerObject.recognizers
          crosstrainedRecognizerSchema = crosstrainedRecognizerSchema || crosstrainedRecognizerObject.$schema
          this.handler(`${crossTrainedRecognizerPath} loaded\n`)
        }

        crosstrainedRecognizers.set(fileName, new CrossTrainedRecognizer(crossTrainedRecognizerPath, crosstrainedRecognizerContent, crosstrainedRecognizerSchema as string))
      }

      let qnaFiles = await fileHelper.getLuObjects(undefined, file, true, fileExtEnum.QnAFile)
      this.handler(`${file} loaded\n`)

      // filter empty qna files
      qnaFiles = qnaFiles.filter((file: any) => file.content !== '')
      if (qnaFiles.length <= 0) continue

      const multiRecognizerPath = path.join(fileFolder, `${fileName}.qna.dialog`)
      if (!multiRecognizers.has(fileName)) {
        let multiRecognizerContent = {}
        let multiRecognizerSchema = schema
        if (fs.existsSync(multiRecognizerPath)) {
          let multiRecognizerObject = JSON.parse(await fileHelper.getContentFromFile(multiRecognizerPath))
          multiRecognizerContent = multiRecognizerObject.recognizers
          multiRecognizerSchema = multiRecognizerSchema || multiRecognizerObject.$schema
          this.handler(`${multiRecognizerPath} loaded\n`)
        }

        multiRecognizers.set(fileName, new MultiLanguageRecognizer(multiRecognizerPath, multiRecognizerContent, multiRecognizerSchema as string))
      }

      if (settings === undefined) {
        const settingsPath = path.join(fileFolder, `qnamaker.settings.${suffix}.${region}.json`)
        let settingsContent = {}
        if (fs.existsSync(settingsPath)) {
          settingsContent = JSON.parse(await fileHelper.getContentFromFile(settingsPath)).qna
          this.handler(`${settingsPath} loaded\n`)
        }

        settings = new Settings(settingsPath, settingsContent)
      }

      const dialogName = `${fileName}.${fileCulture}.qna`
      const dialogFile = path.join(fileFolder, dialogName + '.dialog')
      let existingDialogObj: any
      if (fs.existsSync(dialogFile)) {
        existingDialogObj = JSON.parse(await fileHelper.getContentFromFile(dialogFile))
        this.handler(`${dialogFile} loaded\n`)
      }

      if (existingDialogObj && schema) {
        existingDialogObj.$schema = schema
      }

      let recognizer = Recognizer.load(file, dialogName, dialogFile, settings, existingDialogObj, schema)
      recognizers.set(dialogName, recognizer)

      if (!qnaContents.has(fileCulture)) {
        let contentPerCulture = new Content('', new qnaOptions(botName, true, fileCulture, file))
        qnaContents.set(fileCulture, contentPerCulture)
        qnaObjects.set(fileCulture, qnaFiles)
      } else {
        // merge contents of qna files with same culture
        let qnaObject = qnaObjects.get(fileCulture)
        if (qnaObject !== undefined) {
          qnaObject.push(...qnaFiles)
        }
      }
    }

    await this.resolveMergedQnAContentIds(qnaContents, qnaObjects, importResolver)

    return {qnaContents: [...qnaContents.values()], recognizers, multiRecognizers, settings, crosstrainedRecognizers}
  }