UNPKG

@intlify/eslint-plugin-vue-i18n

Version:
50 lines (49 loc) 1.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.collectLinkedKeys = void 0; const traverser_1 = require("./message-compiler/traverser"); const parser_1 = require("./message-compiler/parser"); const parser_v9_1 = require("./message-compiler/parser-v9"); const utils_1 = require("./message-compiler/utils"); const utils_2 = require("./message-compiler/utils"); function* extractUsedKeysFromLinks(object, messageSyntaxVersions) { for (const value of Object.values(object)) { if (!value) { continue; } if (typeof value === 'object') { yield* extractUsedKeysFromLinks(value, messageSyntaxVersions); } else if (typeof value === 'string') { if (messageSyntaxVersions.v10 || messageSyntaxVersions.v11) { yield* extractUsedKeysFromAST((0, parser_1.parse)(value).ast); } if (messageSyntaxVersions.v9) { yield* extractUsedKeysFromAST((0, parser_v9_1.parse)(value).ast); } } } } function collectLinkedKeys(object, context) { return [ ...new Set(extractUsedKeysFromLinks(object, (0, utils_2.getMessageSyntaxVersions)(context))) ].filter(s => !!s); } exports.collectLinkedKeys = collectLinkedKeys; function extractUsedKeysFromAST(ast) { const keys = new Set(); (0, traverser_1.traverseNode)(ast, node => { if (node.type === utils_1.NodeTypes.Linked) { if (node.key.type === utils_1.NodeTypes.LinkedKey) { keys.add(node.key.value); } else if (node.key.type === utils_1.NodeTypes.Literal && node.key.value) { keys.add(node.key.value); } else if (node.key.type === utils_1.NodeTypes.List) { keys.add(String(node.key.index)); } } }); return keys; }