{"version":3,"file":"core-store.mjs","sources":["../../src/services/core-store.ts"],"sourcesContent":["import { toString } from 'lodash/fp';\nimport type { Database, Model } from '@strapi/database';\n\nconst coreStoreModel: Model = {\n  uid: 'strapi::core-store',\n  singularName: 'strapi_core_store_settings',\n  tableName: 'strapi_core_store_settings',\n  attributes: {\n    id: {\n      type: 'increments',\n    },\n    key: {\n      type: 'string',\n    },\n    value: {\n      type: 'text',\n    },\n    type: {\n      type: 'string',\n    },\n    environment: {\n      type: 'string',\n    },\n    tag: {\n      type: 'string',\n    },\n  },\n};\n\ntype SetParams = {\n  key: string;\n  value: unknown;\n  type?: string;\n  environment?: string;\n  name?: string;\n  tag?: string;\n};\n\ntype GetParams = {\n  key: string;\n  type?: string;\n  environment?: string;\n  name?: string;\n  tag?: string;\n};\n\ntype Params = SetParams & GetParams;\n\ninterface CoreStore {\n  (defaultParams: Partial<Params>): {\n    get<T = unknown>(params: Partial<GetParams>): Promise<T>;\n    set(params: Partial<SetParams>): Promise<void>;\n    delete(params: Partial<GetParams>): Promise<void>;\n  };\n  get<T = unknown>(params: GetParams): Promise<T>;\n  set(params: SetParams): Promise<void>;\n  delete(params: GetParams): Promise<void>;\n}\n\nconst createCoreStore = ({ db }: { db: Database }) => {\n  const mergeParams = (defaultParams: Partial<Params>, params: Params): Params => {\n    return {\n      ...defaultParams,\n      ...params,\n    };\n  };\n\n  const store: CoreStore = function (defaultParams: Partial<Params>) {\n    return {\n      get: (params: Params) => store.get(mergeParams(defaultParams, params)),\n      set: (params: Params) => store.set(mergeParams(defaultParams, params)),\n      delete: (params: Params) => store.delete(mergeParams(defaultParams, params)),\n    };\n  };\n\n  /**\n   * Get value from the core store\n   */\n  store.get = async (params) => {\n    const { key, type = 'core', environment, name, tag } = params;\n\n    const prefix = `${type}${name ? `_${name}` : ''}`;\n\n    const where = {\n      key: `${prefix}_${key}`,\n      environment: environment || null,\n      tag: tag || null,\n    };\n\n    const data = await db.query('strapi::core-store').findOne({ where });\n\n    if (!data) {\n      return null;\n    }\n\n    if (\n      data.type === 'object' ||\n      data.type === 'array' ||\n      data.type === 'boolean' ||\n      data.type === 'string'\n    ) {\n      try {\n        return JSON.parse(data.value);\n      } catch (err) {\n        return new Date(data.value);\n      }\n    } else if (data.type === 'number') {\n      return Number(data.value);\n    } else {\n      return null;\n    }\n  };\n\n  /**\n   * Set value in the core store\n   * @param {Object} params\n   * @returns {*}\n   */\n  store.set = async (params) => {\n    const { key, value, type, environment, name, tag } = params;\n\n    const prefix = `${type}${name ? `_${name}` : ''}`;\n\n    const where = {\n      key: `${prefix}_${key}`,\n      environment: environment || null,\n      tag: tag || null,\n    };\n\n    const data = await db.query('strapi::core-store').findOne({ where });\n\n    if (data) {\n      return db.query('strapi::core-store').update({\n        where: { id: data.id },\n        data: {\n          value: JSON.stringify(value) || toString(value),\n          type: typeof value,\n        },\n      });\n    }\n\n    return db.query('strapi::core-store').create({\n      data: {\n        ...where,\n        value: JSON.stringify(value) || toString(value),\n        type: typeof value,\n      },\n    });\n  };\n\n  /**\n   * Deletes a value from the core store\n   * @param {Object} params\n   * @returns {*}\n   */\n  store.delete = async (params) => {\n    const { key, environment, type, name, tag } = params;\n\n    const prefix = `${type}${name ? `_${name}` : ''}`;\n\n    const where = {\n      key: `${prefix}_${key}`,\n      environment: environment || null,\n      tag: tag || null,\n    };\n\n    return db.query('strapi::core-store').delete({ where });\n  };\n\n  return store;\n};\n\nexport { coreStoreModel, createCoreStore };\n"],"names":["coreStoreModel","uid","singularName","tableName","attributes","id","type","key","value","environment","tag","createCoreStore","db","mergeParams","defaultParams","params","store","get","set","delete","name","prefix","where","data","query","findOne","JSON","parse","err","Date","Number","update","stringify","toString","create"],"mappings":"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"}