vim9script const CACHE_KEY_PATTERN = '\v^[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+)*$' export def Has(key: string, advanced_key: bool = v:true): bool assert_true(!empty(key) && !empty(split(key)) && match(key, CACHE_KEY_PATTERN) != -1) const tui_cached = get(g:, 'tui_cached', {}) if !advanced_key return has_key(tui_cached, key) endif var temp_keys = split(key, '\.') var real_key = temp_keys[-1] var real_dict = tui_cached var index = 0 for sub_key in temp_keys if index < len(temp_keys) - 1 if !has_key(real_dict, sub_key) || (type(real_dict[sub_key]) != type({})) return 0 endif real_dict = real_dict[sub_key] endif index = index + 1 endfor return has_key(real_dict, real_key) enddef export def Get(key: string, default_value: any = v:none, advanced_key: bool = v:true): any assert_true(!empty(key) && !empty(split(key)) && match(key, CACHE_KEY_PATTERN) != -1) const tui_cached = get(g:, 'tui_cached', {}) if !advanced_key return has_key(tui_cached, key) ? tui_cached[key] : default_value endif var temp_keys = split(key, '\.') var real_key = temp_keys[-1] var real_dict = tui_cached var index = 0 for sub_key in temp_keys if index < len(temp_keys) - 1 if !has_key(real_dict, sub_key) || (type(real_dict[sub_key]) != type({})) return default_value endif real_dict = real_dict[sub_key] endif index = index + 1 endfor return has_key(real_dict, real_key) ? real_dict[real_key] : default_value enddef export def Set(key: string, value: any, advanced_key: bool = v:true): any assert_true(!empty(key) && !empty(split(key)) && match(key, CACHE_KEY_PATTERN) != -1) final tui_cached = get(g:, 'tui_cached', {}) if !advanced_key tui_cached[key] = value return value endif var temp_keys = split(key, '\.') var real_key = temp_keys[-1] var real_dict = tui_cached var index = 0 for sub_key in temp_keys if index < len(temp_keys) - 1 if !has_key(real_dict, sub_key) real_dict[sub_key] = {} endif real_dict = real_dict[sub_key] if type(real_dict) != type({}) throw "tui-util-cached_Set: invalid key - [" .. key .. "]" endif endif index = index + 1 endfor real_dict[real_key] = value final g:tui_cached = tui_cached return value enddef