{"version":3,"file":"getUsedNodeTypes.cjs","names":["PLUGIN_NODE_TYPES"],"sources":["../../../src/utils/getUsedNodeTypes.ts"],"sourcesContent":["import type { Dictionary } from '@intlayer/types/dictionary';\nimport { PLUGIN_NODE_TYPES } from '@intlayer/types/nodeType';\n\nexport type PluginNodeType = (typeof PLUGIN_NODE_TYPES)[number];\n\n/** Recursively collect every `nodeType` string found in a value. */\nconst collectNodeTypes = (value: unknown, result: Set<string>): void => {\n  if (!value || typeof value !== 'object') return;\n\n  if (Array.isArray(value)) {\n    for (const item of value) collectNodeTypes(item, result);\n    return;\n  }\n\n  const obj = value as Record<string, unknown>;\n\n  if (typeof obj.nodeType === 'string') {\n    result.add(obj.nodeType);\n  }\n\n  for (const key of Object.keys(obj)) {\n    collectNodeTypes(obj[key], result);\n  }\n};\n\n/**\n * Returns the set of NodeType strings actually used across the given\n * built dictionaries.\n *\n * @example\n * const used = getUsedNodeTypes(getDictionaries(config));\n * // Set { 'translation', 'enumeration' }\n */\nexport const getUsedNodeTypes = (\n  dictionaries: Record<string, Dictionary> | Dictionary[]\n): PluginNodeType[] => {\n  const result = new Set<PluginNodeType>();\n  const dicts = Array.isArray(dictionaries)\n    ? dictionaries\n    : Object.values(dictionaries);\n\n  for (const dict of dicts) {\n    collectNodeTypes(dict.content, result);\n  }\n\n  return [...result];\n};\n\nexport const getUnusedNodeTypes = (\n  dictionaries: Record<string, Dictionary> | Dictionary[]\n): PluginNodeType[] => {\n  const usedNodeTypes = getUsedNodeTypes(dictionaries);\n\n  return PLUGIN_NODE_TYPES.filter(\n    (nodeType) => !usedNodeTypes.includes(nodeType)\n  );\n};\n\nexport const getUsedNodeTypesAsync = async (\n  dictionaries: Record<string, Dictionary> | Dictionary[]\n): Promise<PluginNodeType[]> => {\n  const dictionariesArray = Array.isArray(dictionaries)\n    ? dictionaries\n    : Object.values(dictionaries);\n\n  const results = await Promise.all(\n    dictionariesArray.map(async (dictionary) => {\n      const result = new Set<PluginNodeType>();\n\n      collectNodeTypes(dictionary.content, result as Set<string>);\n\n      return result;\n    })\n  );\n\n  const finalResult = new Set<PluginNodeType>();\n\n  for (const res of results) {\n    for (const val of res) {\n      finalResult.add(val);\n    }\n  }\n\n  return [...finalResult];\n};\n\nexport const getUnusedNodeTypesAsync = async (\n  dictionaries: Record<string, Dictionary> | Dictionary[]\n): Promise<PluginNodeType[]> => {\n  const usedNodeTypes = await getUsedNodeTypesAsync(dictionaries);\n\n  return PLUGIN_NODE_TYPES.filter(\n    (nodeType) => !usedNodeTypes.includes(nodeType)\n  );\n};\n"],"mappings":";;;;;;AAMA,MAAM,oBAAoB,OAAgB,WAA8B;AACtE,KAAI,CAAC,SAAS,OAAO,UAAU,SAAU;AAEzC,KAAI,MAAM,QAAQ,MAAM,EAAE;AACxB,OAAK,MAAM,QAAQ,MAAO,kBAAiB,MAAM,OAAO;AACxD;;CAGF,MAAM,MAAM;AAEZ,KAAI,OAAO,IAAI,aAAa,SAC1B,QAAO,IAAI,IAAI,SAAS;AAG1B,MAAK,MAAM,OAAO,OAAO,KAAK,IAAI,CAChC,kBAAiB,IAAI,MAAM,OAAO;;;;;;;;;;AAYtC,MAAa,oBACX,iBACqB;CACrB,MAAM,yBAAS,IAAI,KAAqB;CACxC,MAAM,QAAQ,MAAM,QAAQ,aAAa,GACrC,eACA,OAAO,OAAO,aAAa;AAE/B,MAAK,MAAM,QAAQ,MACjB,kBAAiB,KAAK,SAAS,OAAO;AAGxC,QAAO,CAAC,GAAG,OAAO;;AAGpB,MAAa,sBACX,iBACqB;CACrB,MAAM,gBAAgB,iBAAiB,aAAa;AAEpD,QAAOA,2CAAkB,QACtB,aAAa,CAAC,cAAc,SAAS,SAAS,CAChD;;AAGH,MAAa,wBAAwB,OACnC,iBAC8B;CAC9B,MAAM,oBAAoB,MAAM,QAAQ,aAAa,GACjD,eACA,OAAO,OAAO,aAAa;CAE/B,MAAM,UAAU,MAAM,QAAQ,IAC5B,kBAAkB,IAAI,OAAO,eAAe;EAC1C,MAAM,yBAAS,IAAI,KAAqB;AAExC,mBAAiB,WAAW,SAAS,OAAsB;AAE3D,SAAO;GACP,CACH;CAED,MAAM,8BAAc,IAAI,KAAqB;AAE7C,MAAK,MAAM,OAAO,QAChB,MAAK,MAAM,OAAO,IAChB,aAAY,IAAI,IAAI;AAIxB,QAAO,CAAC,GAAG,YAAY;;AAGzB,MAAa,0BAA0B,OACrC,iBAC8B;CAC9B,MAAM,gBAAgB,MAAM,sBAAsB,aAAa;AAE/D,QAAOA,2CAAkB,QACtB,aAAa,CAAC,cAAc,SAAS,SAAS,CAChD"}