Skip to content
Snippets Groups Projects
webpack.config.v3api.generate.entry.template.js 3.29 KiB
Newer Older
  • Learn to ignore specific revisions
  • var pathsWithSlashes = [
        __FILES__
    ]
    
    var dtos = []
    
    pathsWithSlashes.forEach(pathWithSlashes => {
      dtos.push({
        name: pathWithSlashes.substring(pathWithSlashes.lastIndexOf('/') + 1),
        pathWithSlashes: pathWithSlashes,
        pathWithUnderscores: pathWithSlashes.replaceAll('/', '_'),
      })
    })
    
    // import all DTOs and facade
    
    dtos
      .sort((dto1, dto2) =>
        dto1.pathWithSlashes.localeCompare(dto2.pathWithSlashes)
      )
      .forEach(dto => {
        console.log('import ' + dto.pathWithUnderscores + " from '../../src/v3/" + dto.pathWithSlashes + "'")
      })
    
    console.log("import stjs from '../../src/v3/lib/stjs/js/stjs'")
    console.log("import underscore from '../../src/v3/lib/underscore/js/underscore'")
    
    console.log("import facade from '../../src/v3/openbis'")
    
    
    // use bundled DTOs when parsing JSON responses (i.e. overwrite the default Json.requireFn - it would load DTOs from the server using RequireJS)
    
    console.log('\nvar modules = {')
    
    dtos
      .sort((dto1, dto2) =>
        dto1.pathWithSlashes.localeCompare(dto2.pathWithSlashes)
      )
      .forEach(dto => {
        console.log('  "' + dto.pathWithSlashes + '" : ' + dto.pathWithUnderscores + ',')
      })
    
    console.log('}')
    
    console.log('\nutil_Json.setRequireFn(function(moduleNames, callback){')
    console.log('  callback.apply(')
    console.log('    null,')
    console.log('    moduleNames.map(function(moduleName){')
    console.log('      return modules[moduleName]')
    console.log('    })')
    console.log('  )')
    console.log('})')
    
    // stjs uses "underscore" library and expects it to be available in the global context under "_" - let's make it use the bundled "underscore" instead
    
    console.log('\nstjs._ = underscore')
    
    // export all DTOs and facade
    
    // Some details:
    // DTOs are exported using their simple name as well as their full name.
    // For instance, "as.dto.sample.Sample" will be available in the final exported "openbis" object
    // as both "openbis.Sample" and "openbis.as.dto.sample.Sample".
    // This way any DTOs with duplicated simple names can still be accessed via their full names.
    
    var exported = {
    
      "noConflict" : "$$noConflict$$"
    
    // define noConflict function that reverts (if needed) window.openbis field back to its original value (similar to jquery.noConflict)
    console.log('\nvar originalOpenbisValue = window && window.openbis')
    console.log('\nvar noConflict = function(){')
    console.log('  if(window && window.openbis === exported){')
    console.log('    window.openbis = originalOpenbisValue')
    console.log('  }')
    console.log('  return exported')
    console.log('}')
    
    
    dtos.forEach(dto => {
      var package = exported
    
      dto.pathWithSlashes.split('/').slice(0,-1).forEach(pathPart => {
        if(!package[pathPart]){
          package[pathPart] = {}
        }
        package = package[pathPart]
      })
    
      if(exported[dto.name] === undefined){
        exported[dto.name] = "$$" + dto.pathWithUnderscores + "$$"
      }else{
        // for duplicated simple names use null to avoid accidental mistakes where one DTOs is used instead of another
        exported[dto.name] = null
      }
    
      package[dto.name] = "$$" + dto.pathWithUnderscores + "$$"
    })
    
    // remove quotes after JSON.stringify, the quotes to remove have $$ (e.g. "$$as_dto_sample_Sample$$" => as_dto_sample_Sample)
    
    console.log('\n var exported = ' + JSON.stringify(exported, null, 4).replaceAll("$$\"", "").replaceAll("\"$$", ""))
    console.log('\nexport default exported')