{"version":3,"sources":["jsdelivr-header.js","/npm/loopback3-datatable@0.1.3/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,OAAO,QAAU,SAAU,EAAK,GAmE9B,IAlEA,IAAI,EAAU,EAAI,UAEd,EAAc,SAAU,EAAK,GAC/B,IAAI,EACA,EAAI,MAAQ,EAAI,KAAK,SACvB,EAAS,EAAI,KAAK,OAAO,OAI3B,IAAI,EAAO,EAAI,OACf,EAAI,OAAS,CAAC,EACd,KAAK,MAAM,GAAQ,SAAU,EAAK,GAC5B,GAAK,IACT,EAAI,IAAI,IAAI,gBAAiB,GAC7B,EAAI,OAAO,KAAO,EAClB,EAAI,OAAO,MAAQ,EACnB,GACF,GACF,EAEI,EAAoB,SAAU,EAAK,GACrC,IAAI,EAAS,CAAC,EACd,GAAsB,OAAlB,EAAI,IAAI,OACV,EAAS,EAAI,IAAI,UACZ,IAAsB,QAAlB,EAAI,IAAI,OAGjB,MAAM,IAAI,MAAM,mBAAqB,EAAI,IAAI,QAF7C,EAAS,EAAI,IAAI,KAGnB,CAGA,IAAI,EAAgC,GAApB,EAAO,UAAiB,MAAQ,OAC5C,EAAQ,EAAO,QAAU,GAAG,EAAO,WAAW,IAAc,GAC5D,EAAU,GACV,EAAM,CAAC,EACP,EAAO,cAAgC,IAAhB,EAAO,OAChC,EAAO,aAAa,SAAS,IAC3B,EAAM,CAAC,EACP,EAAI,GAAS,CAAE,OAAQ,MAAM,EAAO,YACpC,EAAQ,KAAK,EAAI,IAIrB,IAAI,EAAQ,CAAC,EAEa,EADtB,EAAO,QAAU,EAAO,OAAO,MAC7B,EAAQ,OAAS,EAAW,CAAE,IAAK,EAAO,OAAO,MAAO,GAAI,GACnD,EAAO,OAAO,MAEnB,EAAQ,OAAS,EAAI,CAAE,GAAI,GAAY,CAAC,EAElD,EAAI,KAAK,OAAS,CAChB,MAAO,EAAO,KAAO,GAAK,EAAO,MACjC,QACA,MAAO,EAAO,MACd,MAAO,EACP,QAAS,EAAO,QAChB,OAAQ,EAAO,QAIjB,GACF,EAEI,EACF,GAAW,MAAM,QAAQ,EAAQ,SAAW,EAAQ,QAAU,CAAC,UAExD,EAAI,EAAQ,OAAS,EAAG,GAAK,EAAG,IACvC,EAAQ,MAAM,EAAQ,GAAI,GAC1B,EAAQ,OAAO,EAAQ,GAAI,EAE/B","file":"/npm/loopback3-datatable@0.1.3/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/loopback3-datatable@0.1.3/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","module.exports = function (app, options) {\n  var remotes = app.remotes();\n  // Set X-Total-Count for all search requests\n  var applyXTotal = function (ctx, next) {\n    var filter;\n    if (ctx.args && ctx.args.filter) {\n      filter = ctx.args.filter.where;\n    }\n\n    // Modify data to fullfill format asked by datatables:\n    let data = ctx.result;\n    ctx.result = {};\n    this.count(filter, function (err, count) {\n      if (err) next();\n      ctx.res.set('X-Total-Count', count);\n      ctx.result.data = data;\n      ctx.result.count = count;\n      next();\n    });\n  };\n\n  var applyAdaptRequest = function (ctx, next) {\n    let params = {};\n    if (ctx.req.method == 'GET') {\n      params = ctx.req.query;\n    } else if (ctx.req.method == 'POST') {\n      params = ctx.req.query;\n    } else {\n      throw new Error('Unknown method: ' + ctx.req.method);\n    }\n\n    // console.log(params);\n    let direction = params.ascending == 1 ? 'ASC' : 'DESC';\n    let order = params.orderBy ? `${params.orderBy} ${direction}` : '';\n    let whereOr = [];\n    let obj = {};\n    if (params.filterFields && params.query != '') {\n      params.filterFields.forEach((field) => {\n        obj = {};\n        obj[field] = { regexp: `/.*${params.query}.*/` };\n        whereOr.push(obj);\n      });\n    }\n    // merge with existing query\n    let where = {};\n    if (params.filter && params.filter.where) {\n      if (whereOr.length > 0) where = { and: params.filter.where, or: whereOr };\n      else where = params.filter.where;\n    } else {\n      where = whereOr.length > 0 ? { or: whereOr } : {};\n    }\n    ctx.args.filter = {\n      skip: (params.page - 1) * params.limit,\n      order,\n      limit: params.limit,\n      where: where,\n      include: params.include,\n      counts: params.counts,\n    };\n    // console.log(JSON.stringify(ctx.args.filter, null, 4));\n\n    next();\n  };\n\n  var pattern =\n    options && Array.isArray(options.pattern) ? options.pattern : ['*.find'];\n\n  for (var i = pattern.length - 1; i >= 0; i--) {\n    remotes.after(pattern[i], applyXTotal);\n    remotes.before(pattern[i], applyAdaptRequest);\n  }\n};\n"]}