All files / module/preset createPresetModule.js

0% Statements 0/20
0% Branches 0/12
0% Functions 0/4
0% Lines 0/20

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64                                                                                                                               
import { ModuleBuilder } from '../ModuleBuilder'
import { checkConfigProperty, hasOwn } from '../../shared/utils'
import { Performance } from '../../shared/Performance'
import { ResourceProxy } from '../../api/ResourceProxy'
 
export function createPresetModule (store, api) {
  return new Proxy(() => { }, {
    apply (target, thisArg, [name, config]) {
      let baseModule
      if (checkConfigProperty(config, 'base')) {
        baseModule = config.base
      }
 
      // if there is no baseModule, create it
      if (!hasOwn(store.state, baseModule)) {
        registerBaseModule(store, api, baseModule)
      }
 
      let resourceProxy = api[baseModule]
      if (!resourceProxy) {
        resourceProxy = new ResourceProxy()
      }
 
      Performance.mark('module_register_preset_start')
 
      const builder = new ModuleBuilder(api, baseModule, resourceProxy, {
        presetOptions: {
          defaultQuery: checkConfigProperty(config, 'defaultQuery', false) ? config.defaultQuery : {}
        }
      }, name)
 
      store.registerModule([baseModule, name], builder.build())
 
      Performance.mark('module_register_preset_end')
 
      Performance.measure(
        `Register preset ${name} for base ${baseModule}`,
        'module_register_preset_start',
        'module_register_preset_end'
      )
    }
  })
}
 
/**
 *
 * @param {Vuex.Store} store
 * @param {ResourcefulApi} api
 * @param {String} moduleName
 */
function registerBaseModule (store, api, moduleName) {
  if (typeof moduleName !== 'string') {
    throw new Error('Module name must be string')
  }
 
  let resourceProxy = api[moduleName]
  if (!resourceProxy) {
    resourceProxy = new ResourceProxy()
  }
 
  const moduleBuilder = new ModuleBuilder(api, moduleName, resourceProxy)
  store.registerModule(moduleName, moduleBuilder.build())
}