{"version":3,"sources":["jsdelivr-header.js","/npm/@coding-blocks/jsonapi-server@5.4.4/lib/jsonApi.js"],"names":[],"mappings":"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","file":"/npm/@coding-blocks/jsonapi-server@5.4.4/lib/jsonApi.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@coding-blocks/jsonapi-server@5.4.4/lib/jsonApi.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict'\nconst jsonApi = module.exports = { }\njsonApi._version = require(require('path').join(__dirname, '../package.json')).version\njsonApi._resources = { }\njsonApi._apiConfig = { }\n\nconst _ = {\n  assign: require('lodash.assign'),\n  pick: require('lodash.pick')\n}\nconst ourJoi = require('./ourJoi.js')\nconst router = require('./router.js')\nconst responseHelper = require('./responseHelper.js')\nconst handlerEnforcer = require('./handlerEnforcer.js')\nconst pagination = require('./pagination.js')\nconst routes = require('./routes')\nconst url = require('url')\nconst metrics = require('./metrics.js')\nconst schemaValidator = require('./schemaValidator.js')\n\njsonApi.Joi = ourJoi.Joi\njsonApi.metrics = metrics.emitter\njsonApi.MemoryHandler = require('./MemoryHandler')\njsonApi.ChainHandler = require('./ChainHandler')\n\njsonApi.setConfig = apiConfig => {\n  jsonApi._apiConfig = apiConfig\n  jsonApi._apiConfig.base = jsonApi._cleanBaseUrl(jsonApi._apiConfig.base)\n  jsonApi._apiConfig.pathPrefix = apiConfig.urlPrefixAlias || jsonApi._concatenateUrlPrefix(jsonApi._apiConfig)\n  responseHelper.setBaseUrl(jsonApi._apiConfig.pathPrefix)\n  responseHelper.setMetadata(jsonApi._apiConfig.meta)\n}\n\njsonApi.authenticate = router.authenticateWith\n\njsonApi._concatenateUrlPrefix = config => url.format({\n  protocol: config.protocol,\n  hostname: config.hostname,\n  port: config.port,\n  pathname: config.base\n})\n\njsonApi._cleanBaseUrl = base => {\n  if (!base) {\n    base = ''\n  }\n  if (base[0] !== '/') {\n    base = `/${base}`\n  }\n  if (base[base.length - 1] !== '/') {\n    base += '/'\n  }\n  return base\n}\n\njsonApi.define = resourceConfig => {\n  if (!resourceConfig.resource.match(/^[A-Za-z0-9_]*$/)) {\n    throw new Error(`Resource '${resourceConfig.resource}' contains illegal characters!`)\n  }\n  resourceConfig.namespace = resourceConfig.namespace || 'default'\n  resourceConfig.searchParams = resourceConfig.searchParams || { }\n  jsonApi._resources[resourceConfig.resource] = resourceConfig\n\n  handlerEnforcer.wrap(resourceConfig.handlers)\n\n  resourceConfig.handlers.initialise = resourceConfig.handlers.initialise || resourceConfig.handlers.initialize\n  if (resourceConfig.handlers.initialise) {\n    resourceConfig.handlers.initialise(resourceConfig)\n  }\n\n  Object.keys(resourceConfig.attributes).forEach(attribute => {\n    if (!attribute.match(/^[A-Za-z0-9_]*$/)) {\n      throw new Error(`Attribute '${attribute}' on ${resourceConfig.resource} contains illegal characters!`)\n    }\n  })\n\n  resourceConfig.searchParams = _.assign({\n    type: ourJoi.Joi.any().required().valid(resourceConfig.resource)\n      .description(`Always \"${resourceConfig.resource}\"`)\n      .example(resourceConfig.resource),\n    sort: ourJoi.Joi.any()\n      .description('An attribute to sort by')\n      .example('title'),\n    filter: ourJoi.Joi.any()\n      .description('An attribute+value to filter by')\n      .example('title'),\n    fields: ourJoi.Joi.any()\n      .description('An attribute+value to filter by')\n      .example('title'),\n    include: ourJoi.Joi.any()\n      .description('An attribute to include')\n      .example('title')\n  }, resourceConfig.searchParams, pagination.joiPageDefinition)\n\n  resourceConfig.attributes = _.assign({\n    id: ourJoi.Joi.string().required()\n      .description('Unique resource identifier')\n      .example('1234'),\n    type: ourJoi.Joi.string().required().valid(resourceConfig.resource)\n      .description(`Always \"${resourceConfig.resource}\"`)\n      .example(resourceConfig.resource),\n    meta: ourJoi.Joi.object().optional()\n  }, resourceConfig.attributes)\n\n  resourceConfig.onCreate = _.pick.apply(_, [].concat(resourceConfig.attributes, Object.keys(resourceConfig.attributes).filter(i => (resourceConfig.attributes[i]._meta.indexOf('readonly') === -1) && (!(resourceConfig.attributes[i]._settings || { }).__as))))\n}\n\njsonApi.onUncaughtException = errHandler => {\n  jsonApi._errHandler = errHandler\n}\n\njsonApi.getExpressServer = () => router.getExpressServer()\n\njsonApi.start = () => {\n  schemaValidator.validate(jsonApi._resources)\n  router.applyMiddleware()\n  routes.register()\n  if (!jsonApi._apiConfig.router) {\n    router.listen(jsonApi._apiConfig.port)\n  }\n}\n\njsonApi.close = () => {\n  router.close()\n  metrics.emitter.removeAllListeners('data')\n  for (const i in jsonApi._resources) {\n    const resourceConfig = jsonApi._resources[i]\n    if (resourceConfig.handlers.close) resourceConfig.handlers.close()\n  }\n}\n"]}