{"version":3,"file":"core-store.mjs","sources":["../../src/services/core-store.ts"],"sourcesContent":["import { toString } from 'lodash/fp';\nimport type { Database } from '@strapi/database';\n\nconst coreStoreModel = {\n  uid: 'strapi::core-store',\n  collectionName: 'strapi_core_store_settings',\n  attributes: {\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(params: Partial<GetParams>): Promise<unknown>;\n    set(params: Partial<SetParams>): Promise<void>;\n    delete(params: Partial<GetParams>): Promise<void>;\n  };\n  get(params: GetParams): Promise<unknown>;\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":[],"mappings":"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"}