{"version":3,"file":"type-registry.mjs","sources":["../../../server/src/services/type-registry.ts"],"sourcesContent":["import { isFunction } from 'lodash/fp';\nimport { errors } from '@strapi/utils';\n\nconst { ApplicationError } = errors;\n\nexport type TypeRegistry = {\n  register(name: string, definition: any, config?: object): TypeRegistry;\n  registerMany(\n    definitionsEntries: [string, any][],\n    config?: object | ((...args: any[]) => any)\n  ): TypeRegistry;\n  has(name: string): boolean;\n  get(name: string): any;\n  toObject(): Record<string, any>;\n  types: string[];\n  definitions: any[];\n  where(predicate: (item: any) => boolean): any[];\n};\n\n/**\n * Create a new type registry\n */\nconst createTypeRegistry = (): TypeRegistry => {\n  const registry = new Map();\n\n  const typeRegistry: TypeRegistry = {\n    /**\n     * Register a new type definition\n     */\n    register(name, definition, config = {}) {\n      if (registry.has(name)) {\n        throw new ApplicationError(`\"${name}\" has already been registered`);\n      }\n\n      registry.set(name, { name, definition, config });\n\n      return this;\n    },\n\n    /**\n     * Register many types definitions at once\n     * @param {[string, NexusAcceptedTypeDef][]} definitionsEntries\n     * @param {object | function} [config]\n     */\n    registerMany(definitionsEntries, config = {}) {\n      for (const [name, definition] of definitionsEntries) {\n        this.register(name, definition, isFunction(config) ? config(name, definition) : config);\n      }\n\n      return this;\n    },\n\n    /**\n     * Check if the given type name has already been added to the registry\n     * @param {string} name\n     * @return {boolean}\n     */\n    has(name) {\n      return registry.has(name);\n    },\n\n    /**\n     * Get the type definition for `name`\n     * @param {string} name - The name of the type\n     */\n    get(name) {\n      return registry.get(name);\n    },\n\n    /**\n     * Transform and return the registry as an object\n     * @return {Object<string, RegisteredTypeDef>}\n     */\n    toObject() {\n      return Object.fromEntries(registry.entries());\n    },\n\n    /**\n     * Return the name of every registered type\n     * @return {string[]}\n     */\n    get types() {\n      return Array.from(registry.keys());\n    },\n\n    /**\n     * Return all the registered definitions as an array\n     * @return {RegisteredTypeDef[]}\n     */\n    get definitions() {\n      return Array.from(registry.values());\n    },\n\n    /**\n     * Filter and return the types definitions that matches the given predicate\n     * @param {function(RegisteredTypeDef): boolean} predicate\n     * @return {RegisteredTypeDef[]}\n     */\n    where(predicate) {\n      return this.definitions.filter(predicate);\n    },\n  };\n\n  return typeRegistry;\n};\n\nexport default () => ({\n  new: createTypeRegistry,\n});\n"],"names":["ApplicationError","errors","createTypeRegistry","registry","Map","typeRegistry","register","name","definition","config","has","set","registerMany","definitionsEntries","isFunction","get","toObject","Object","fromEntries","entries","types","Array","from","keys","definitions","values","where","predicate","filter","new"],"mappings":";;;AAGA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,MAAAA;AAgB7B;;AAEC,IACD,MAAMC,kBAAqB,GAAA,IAAA;AACzB,IAAA,MAAMC,WAAW,IAAIC,GAAAA,EAAAA;AAErB,IAAA,MAAMC,YAA6B,GAAA;AACjC;;AAEC,QACDC,UAASC,IAAI,EAAEC,UAAU,EAAEC,MAAAA,GAAS,EAAE,EAAA;YACpC,IAAIN,QAAAA,CAASO,GAAG,CAACH,IAAO,CAAA,EAAA;AACtB,gBAAA,MAAM,IAAIP,gBAAiB,CAAA,CAAC,CAAC,EAAEO,IAAAA,CAAK,6BAA6B,CAAC,CAAA;AACpE;YAEAJ,QAASQ,CAAAA,GAAG,CAACJ,IAAM,EAAA;AAAEA,gBAAAA,IAAAA;AAAMC,gBAAAA,UAAAA;AAAYC,gBAAAA;AAAO,aAAA,CAAA;AAE9C,YAAA,OAAO,IAAI;AACb,SAAA;AAEA;;;;AAIC,QACDG,YAAaC,CAAAA,CAAAA,kBAAkB,EAAEJ,MAAAA,GAAS,EAAE,EAAA;AAC1C,YAAA,KAAK,MAAM,CAACF,IAAMC,EAAAA,UAAAA,CAAW,IAAIK,kBAAoB,CAAA;gBACnD,IAAI,CAACP,QAAQ,CAACC,IAAAA,EAAMC,YAAYM,UAAWL,CAAAA,MAAAA,CAAAA,GAAUA,MAAOF,CAAAA,IAAAA,EAAMC,UAAcC,CAAAA,GAAAA,MAAAA,CAAAA;AAClF;AAEA,YAAA,OAAO,IAAI;AACb,SAAA;AAEA;;;;AAIC,QACDC,KAAIH,IAAI,EAAA;YACN,OAAOJ,QAAAA,CAASO,GAAG,CAACH,IAAAA,CAAAA;AACtB,SAAA;AAEA;;;AAGC,QACDQ,KAAIR,IAAI,EAAA;YACN,OAAOJ,QAAAA,CAASY,GAAG,CAACR,IAAAA,CAAAA;AACtB,SAAA;AAEA;;;QAIAS,QAAAA,CAAAA,GAAAA;AACE,YAAA,OAAOC,MAAOC,CAAAA,WAAW,CAACf,QAAAA,CAASgB,OAAO,EAAA,CAAA;AAC5C,SAAA;AAEA;;;AAGC,QACD,IAAIC,KAAQ,CAAA,GAAA;AACV,YAAA,OAAOC,KAAMC,CAAAA,IAAI,CAACnB,QAAAA,CAASoB,IAAI,EAAA,CAAA;AACjC,SAAA;AAEA;;;AAGC,QACD,IAAIC,WAAc,CAAA,GAAA;AAChB,YAAA,OAAOH,KAAMC,CAAAA,IAAI,CAACnB,QAAAA,CAASsB,MAAM,EAAA,CAAA;AACnC,SAAA;AAEA;;;;AAIC,QACDC,OAAMC,SAAS,EAAA;AACb,YAAA,OAAO,IAAI,CAACH,WAAW,CAACI,MAAM,CAACD,SAAAA,CAAAA;AACjC;AACF,KAAA;IAEA,OAAOtB,YAAAA;AACT,CAAA;AAEA,mBAAe,CAAA,KAAO;QACpBwB,GAAK3B,EAAAA;AACP,KAAA,CAAC;;;;"}