How to use languageSpecific method in storybook-root

Best JavaScript code snippet using storybook-root

str_slug.js

Source:str_slug.js Github

copy

Full Screen

1/** translation of Taylor Otwell's str_slug helper from Laravel **/2/** https://gist.github.com/Lucassifoni/0e94e03a63b53518ddf466f22aa1cf19 **/3/**4 * Trims a string for a given start/end character5 * @param {string} string6 * @param {string} pattern7 */8const trimChar = function trimChar(string, pattern) {9 if (typeof pattern.toString === 'undefined') {10 throw new Error('pattern must be a string or castable to string');11 }12 if (typeof string.toString === 'undefined') {13 throw new Error('string must be a string or castable to string');14 }15 let str = string.toString();16 let needle = pattern.toString();17 while (str.charAt(0) === needle) {18 str = str.substring(1);19 }20 while (str.charAt(str.length - 1) === needle) {21 str = str.substring(0, str.length - 1);22 }23 return str;24};25/**26 * Replaces all occurences of all given patterns with a single replacement27 * @param {string} string28 * @param {array} patternArray29 * @param {string} replacement30 * @returns {string} str31 */32const arrayReplaceSingle = function arrayReplaceSingle(string, patternArray, replacement) {33 if (typeof string.toString === 'undefined') {34 throw new Error('string parameter must be a string or cast-able to string.');35 }36 const l = patternArray.length;37 if (l === 0) {38 throw new Error('Patterns array must have members.');39 }40 let str = string.toString();41 for (let i = 0; i < l; i += 1) {42 if (typeof patternArray[i].toString === 'undefined') {43 throw new Error('Every pattern array member must be a string or cast-able to string');44 }45 str = str.replace(new RegExp(patternArray[i], 'g'), replacement);46 }47 return str;48};49/**50 * CharMap allowing language-aware replacements51 * @type {object}52 */53const charMap = {54 '0': ['°', '₀', '۰', '0'],55 '1': ['¹', '₁', '۱', '1'],56 '2': ['²', '₂', '۲', '2'],57 '3': ['³', '₃', '۳', '3'],58 '4': ['⁴', '₄', '۴', '٤', '4'],59 '5': ['⁵', '₅', '۵', '٥', '5'],60 '6': ['⁶', '₆', '۶', '٦', '6'],61 '7': ['⁷', '₇', '۷', '7'],62 '8': ['⁸', '₈', '۸', '8'],63 '9': ['⁹', '₉', '۹', '9'],64 'a': ['à', 'á', 'ả', 'ã', 'ạ', 'ă', 'ắ', 'ằ', 'ẳ', 'ẵ', 'ặ', 'â', 'ấ', 'ầ', 'ẩ', 'ẫ', 'ậ', 'ā', 'ą', 'å', 'α', 'ά', 'ἀ', 'ἁ', 'ἂ', 'ἃ', 'ἄ', 'ἅ', 'ἆ', 'ἇ', 'ᾀ', 'ᾁ', 'ᾂ', 'ᾃ', 'ᾄ', 'ᾅ', 'ᾆ', 'ᾇ', 'ὰ', 'ά', 'ᾰ', 'ᾱ', 'ᾲ', 'ᾳ', 'ᾴ', 'ᾶ', 'ᾷ', 'а', 'أ', 'အ', 'ာ', 'ါ', 'ǻ', 'ǎ', 'ª', 'ა', 'अ', 'ا', 'a', 'ä'],65 'b': ['б', 'β', 'ب', 'ဗ', 'ბ', 'b'],66 'c': ['ç', 'ć', 'č', 'ĉ', 'ċ', 'c'],67 'd': ['ď', 'ð', 'đ', 'ƌ', 'ȡ', 'ɖ', 'ɗ', 'ᵭ', 'ᶁ', 'ᶑ', 'д', 'δ', 'د', 'ض', 'ဍ', 'ဒ', 'დ', 'd'],68 'e': ['é', 'è', 'ẻ', 'ẽ', 'ẹ', 'ê', 'ế', 'ề', 'ể', 'ễ', 'ệ', 'ë', 'ē', 'ę', 'ě', 'ĕ', 'ė', 'ε', 'έ', 'ἐ', 'ἑ', 'ἒ', 'ἓ', 'ἔ', 'ἕ', 'ὲ', 'έ', 'е', 'ё', 'э', 'є', 'ə', 'ဧ', 'ေ', 'ဲ', 'ე', 'ए', 'إ', 'ئ', 'e'],69 'f': ['ф', 'φ', 'ف', 'ƒ', 'ფ', 'f'],70 'g': ['ĝ', 'ğ', 'ġ', 'ģ', 'г', 'ґ', 'γ', 'ဂ', 'გ', 'گ', 'g'],71 'h': ['ĥ', 'ħ', 'η', 'ή', 'ح', 'ه', 'ဟ', 'ှ', 'ჰ', 'h'],72 'i': ['í', 'ì', 'ỉ', 'ĩ', 'ị', 'î', 'ï', 'ī', 'ĭ', 'į', 'ı', 'ι', 'ί', 'ϊ', 'ΐ', 'ἰ', 'ἱ', 'ἲ', 'ἳ', 'ἴ', 'ἵ', 'ἶ', 'ἷ', 'ὶ', 'ί', 'ῐ', 'ῑ', 'ῒ', 'ΐ', 'ῖ', 'ῗ', 'і', 'ї', 'и', 'ဣ', 'ိ', 'ီ', 'ည်', 'ǐ', 'ი', 'इ', 'ی', 'i'],73 'j': ['ĵ', 'ј', 'Ј', 'ჯ', 'ج', 'j'],74 'k': ['ķ', 'ĸ', 'к', 'κ', 'Ķ', 'ق', 'ك', 'က', 'კ', 'ქ', 'ک', 'k'],75 'l': ['ł', 'ľ', 'ĺ', 'ļ', 'ŀ', 'л', 'λ', 'ل', 'လ', 'ლ', 'l'],76 'm': ['м', 'μ', 'م', 'မ', 'მ', 'm'],77 'n': ['ñ', 'ń', 'ň', 'ņ', 'ʼn', 'ŋ', 'ν', 'н', 'ن', 'န', 'ნ', 'n'],78 'o': ['ó', 'ò', 'ỏ', 'õ', 'ọ', 'ô', 'ố', 'ồ', 'ổ', 'ỗ', 'ộ', 'ơ', 'ớ', 'ờ', 'ở', 'ỡ', 'ợ', 'ø', 'ō', 'ő', 'ŏ', 'ο', 'ὀ', 'ὁ', 'ὂ', 'ὃ', 'ὄ', 'ὅ', 'ὸ', 'ό', 'о', 'و', 'θ', 'ို', 'ǒ', 'ǿ', 'º', 'ო', 'ओ', 'o', 'ö'],79 'p': ['п', 'π', 'ပ', 'პ', 'پ', 'p'],80 'q': ['ყ', 'q'],81 'r': ['ŕ', 'ř', 'ŗ', 'р', 'ρ', 'ر', 'რ', 'r'],82 's': ['ś', 'š', 'ş', 'с', 'σ', 'ș', 'ς', 'س', 'ص', 'စ', 'ſ', 'ს', 's'],83 't': ['ť', 'ţ', 'т', 'τ', 'ț', 'ت', 'ط', 'ဋ', 'တ', 'ŧ', 'თ', 'ტ', 't'],84 'u': ['ú', 'ù', 'ủ', 'ũ', 'ụ', 'ư', 'ứ', 'ừ', 'ử', 'ữ', 'ự', 'û', 'ū', 'ů', 'ű', 'ŭ', 'ų', 'µ', 'у', 'ဉ', 'ု', 'ူ', 'ǔ', 'ǖ', 'ǘ', 'ǚ', 'ǜ', 'უ', 'उ', 'u', 'ў', 'ü'],85 'v': ['в', 'ვ', 'ϐ', 'v'],86 'w': ['ŵ', 'ω', 'ώ', 'ဝ', 'ွ', 'w'],87 'x': ['χ', 'ξ', 'x'],88 'y': ['ý', 'ỳ', 'ỷ', 'ỹ', 'ỵ', 'ÿ', 'ŷ', 'й', 'ы', 'υ', 'ϋ', 'ύ', 'ΰ', 'ي', 'ယ', 'y'],89 'z': ['ź', 'ž', 'ż', 'з', 'ζ', 'ز', 'ဇ', 'ზ', 'z'],90 'aa': ['ع', 'आ', 'آ'],91 'ae': ['æ', 'ǽ'],92 'ai': ['ऐ'],93 'ch': ['ч', 'ჩ', 'ჭ', 'چ'],94 'dj': ['ђ', 'đ'],95 'dz': ['џ', 'ძ'],96 'ei': ['ऍ'],97 'gh': ['غ', 'ღ'],98 'ii': ['ई'],99 'ij': ['ij'],100 'kh': ['х', 'خ', 'ხ'],101 'lj': ['љ'],102 'nj': ['њ'],103 'oe': ['ö', 'œ', 'ؤ'],104 'oi': ['ऑ'],105 'oii': ['ऒ'],106 'ps': ['ψ'],107 'sh': ['ш', 'შ', 'ش'],108 'shch': ['щ'],109 'ss': ['ß'],110 'sx': ['ŝ'],111 'th': ['þ', 'ϑ', 'ث', 'ذ', 'ظ'],112 'ts': ['ц', 'ც', 'წ'],113 'ue': ['ü'],114 'uu': ['ऊ'],115 'ya': ['я'],116 'yu': ['ю'],117 'zh': ['ж', 'ჟ', 'ژ'],118 '(c)': ['©'],119 'A': ['Á', 'À', 'Ả', 'Ã', 'Ạ', 'Ă', 'Ắ', 'Ằ', 'Ẳ', 'Ẵ', 'Ặ', 'Â', 'Ấ', 'Ầ', 'Ẩ', 'Ẫ', 'Ậ', 'Å', 'Ā', 'Ą', 'Α', 'Ά', 'Ἀ', 'Ἁ', 'Ἂ', 'Ἃ', 'Ἄ', 'Ἅ', 'Ἆ', 'Ἇ', 'ᾈ', 'ᾉ', 'ᾊ', 'ᾋ', 'ᾌ', 'ᾍ', 'ᾎ', 'ᾏ', 'Ᾰ', 'Ᾱ', 'Ὰ', 'Ά', 'ᾼ', 'А', 'Ǻ', 'Ǎ', 'A', 'Ä'],120 'B': ['Б', 'Β', 'ब', 'B'],121 'C': ['Ç', 'Ć', 'Č', 'Ĉ', 'Ċ', 'C'],122 'D': ['Ď', 'Ð', 'Đ', 'Ɖ', 'Ɗ', 'Ƌ', 'ᴅ', 'ᴆ', 'Д', 'Δ', 'D'],123 'E': ['É', 'È', 'Ẻ', 'Ẽ', 'Ẹ', 'Ê', 'Ế', 'Ề', 'Ể', 'Ễ', 'Ệ', 'Ë', 'Ē', 'Ę', 'Ě', 'Ĕ', 'Ė', 'Ε', 'Έ', 'Ἐ', 'Ἑ', 'Ἒ', 'Ἓ', 'Ἔ', 'Ἕ', 'Έ', 'Ὲ', 'Е', 'Ё', 'Э', 'Є', 'Ə', 'E'],124 'F': ['Ф', 'Φ', 'F'],125 'G': ['Ğ', 'Ġ', 'Ģ', 'Г', 'Ґ', 'Γ', 'G'],126 'H': ['Η', 'Ή', 'Ħ', 'H'],127 'I': ['Í', 'Ì', 'Ỉ', 'Ĩ', 'Ị', 'Î', 'Ï', 'Ī', 'Ĭ', 'Į', 'İ', 'Ι', 'Ί', 'Ϊ', 'Ἰ', 'Ἱ', 'Ἳ', 'Ἴ', 'Ἵ', 'Ἶ', 'Ἷ', 'Ῐ', 'Ῑ', 'Ὶ', 'Ί', 'И', 'І', 'Ї', 'Ǐ', 'ϒ', 'I'],128 'J': ['J'],129 'K': ['К', 'Κ', 'K'],130 'L': ['Ĺ', 'Ł', 'Л', 'Λ', 'Ļ', 'Ľ', 'Ŀ', 'ल', 'L'],131 'M': ['М', 'Μ', 'M'],132 'N': ['Ń', 'Ñ', 'Ň', 'Ņ', 'Ŋ', 'Н', 'Ν', 'N'],133 'O': ['Ó', 'Ò', 'Ỏ', 'Õ', 'Ọ', 'Ô', 'Ố', 'Ồ', 'Ổ', 'Ỗ', 'Ộ', 'Ơ', 'Ớ', 'Ờ', 'Ở', 'Ỡ', 'Ợ', 'Ø', 'Ō', 'Ő', 'Ŏ', 'Ο', 'Ό', 'Ὀ', 'Ὁ', 'Ὂ', 'Ὃ', 'Ὄ', 'Ὅ', 'Ὸ', 'Ό', 'О', 'Θ', 'Ө', 'Ǒ', 'Ǿ', 'O', 'Ö'],134 'P': ['П', 'Π', 'P'],135 'Q': ['Q'],136 'R': ['Ř', 'Ŕ', 'Р', 'Ρ', 'Ŗ', 'R'],137 'S': ['Ş', 'Ŝ', 'Ș', 'Š', 'Ś', 'С', 'Σ', 'S'],138 'T': ['Ť', 'Ţ', 'Ŧ', 'Ț', 'Т', 'Τ', 'T'],139 'U': ['Ú', 'Ù', 'Ủ', 'Ũ', 'Ụ', 'Ư', 'Ứ', 'Ừ', 'Ử', 'Ữ', 'Ự', 'Û', 'Ū', 'Ů', 'Ű', 'Ŭ', 'Ų', 'У', 'Ǔ', 'Ǖ', 'Ǘ', 'Ǚ', 'Ǜ', 'U', 'Ў', 'Ü'],140 'V': ['В', 'V'],141 'W': ['Ω', 'Ώ', 'Ŵ', 'W'],142 'X': ['Χ', 'Ξ', 'X'],143 'Y': ['Ý', 'Ỳ', 'Ỷ', 'Ỹ', 'Ỵ', 'Ÿ', 'Ῠ', 'Ῡ', 'Ὺ', 'Ύ', 'Ы', 'Й', 'Υ', 'Ϋ', 'Ŷ', 'Y'],144 'Z': ['Ź', 'Ž', 'Ż', 'З', 'Ζ', 'Z'],145 'AE': ['Æ', 'Ǽ'],146 'Ch': ['Ч'],147 'Dj': ['Ђ'],148 'Dz': ['Џ'],149 'Gx': ['Ĝ'],150 'Hx': ['Ĥ'],151 'Ij': ['IJ'],152 'Jx': ['Ĵ'],153 'Kh': ['Х'],154 'Lj': ['Љ'],155 'Nj': ['Њ'],156 'Oe': ['Œ'],157 'Ps': ['Ψ'],158 'Sh': ['Ш'],159 'Shch': ['Щ'],160 'Ss': ['ẞ'],161 'Th': ['Þ'],162 'Ts': ['Ц'],163 'Ya': ['Я'],164 'Yu': ['Ю'],165 'Zh': ['Ж'],166 ' ': ["\xC2\xA0", "\xE2\x80\x80", "\xE2\x80\x81", "\xE2\x80\x82", "\xE2\x80\x83", "\xE2\x80\x84", "\xE2\x80\x85", "\xE2\x80\x86", "\xE2\x80\x87", "\xE2\x80\x88", "\xE2\x80\x89", "\xE2\x80\x8A", "\xE2\x80\xAF", "\xE2\x81\x9F", "\xE3\x80\x80", "\xEF\xBE\xA0"],167};168/**169 * Bulgar & German specific charmaps170 * @type {{bg: *[], de: *[]}}171 */172const languageSpecific = {173 'bg': [174 ['х', 'Х', 'щ', 'Щ', 'ъ', 'Ъ', 'ь', 'Ь'],175 ['h', 'H', 'sht', 'SHT', 'a', 'А', 'y', 'Y'],176 ],177 'de': [178 ['ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü'],179 ['ae', 'oe', 'ue', 'AE', 'OE', 'UE'],180 ],181};182/**183 * Returns a language-specific charmap for German and Bulgare184 * @param {string} language185 * @returns {Array | null}186 */187const languageSpecificCharsArray = function languageSpecificCharsArray(language) {188 if (typeof language.toString === 'undefined') {189 throw new Error('language parameter must be a string or castable to string');190 }191 const l = languageSpecific[language.toString()];192 if (typeof l !== 'undefined') {193 return l;194 }195 return null;196};197/**198 * Ascii-fies a given string with a language-specific phonetic replacement199 * @param {string} string200 * @param {string} language201 * @returns {string | * | void}202 */203const ascii = function ascii(string, language = 'en') {204 if (typeof language.toString === 'undefined') {205 throw new Error('language parameter must be a string or castable to string');206 }207 const languageSpecific = languageSpecificCharsArray(language.toString());208 let str = string;209 if (languageSpecific !== null) {210 str = string.replace(languageSpecific[0], languageSpecific[1]);211 }212 const charKeys = Object.keys(charMap);213 charKeys.forEach((key) => {214 str = arrayReplaceSingle(str, charMap[key], key);215 });216 return str.replace(/[^\x20-\x7E]/g, '');217};218/**219 * Slugifies a string according to the str_slug laravel helper220 * @param {string} string221 * @param {string} separator222 * @param {string} language223 * @returns {string | *}224 */225const str_slug = function str_slug(string, separator = '-', language = 'en') {226 let str = ascii(string);227 if (typeof str.toString === 'undefined') {228 throw new Error('An error has occured while converting the input string to ascii.');229 }230 str = str.toString();231 const flip = separator === '-' ? '_' : '-';232 str = str.replace(new RegExp(flip, 'g'), separator);233 str = str.replace(new RegExp('@', 'g'), `${separator}at${separator}`);234 str = str.replace('/![^' + separator + '\w\d\s/g', '');235 str = str.toLowerCase();236 str = str.replace(/[\s]/g, separator);237 // str = trimChar(str, '-');238 return str;239};...

Full Screen

Full Screen

abstract-resource-preference-provider.ts

Source:abstract-resource-preference-provider.ts Github

copy

Full Screen

1import * as jsoncparser from 'jsonc-parser';2import { Injectable, Autowired } from '@opensumi/di';3import {4 JSONUtils,5 URI,6 Disposable,7 isUndefined,8 PreferenceProviderDataChanges,9 ILogger,10 IResolvedPreferences,11 Throttler,12 FileChange,13 Schemes,14} from '@opensumi/ide-core-browser';15import {16 PreferenceProvider,17 PreferenceSchemaProvider,18 PreferenceScope,19 PreferenceProviderDataChange,20 PreferenceConfigurations,21} from '@opensumi/ide-core-browser';22import { IFileServiceClient } from '@opensumi/ide-file-service';23import { IPreferenceTask } from '../common';24// vscode 对语言的setting是根据这种格式来的25// "[json]": { "editor.formatter": "xxxx" }26// 对其进行兼容27const OVERRIDE_PROPERTY = '\\[(.*)\\]$';28export const OVERRIDE_PROPERTY_PATTERN = new RegExp(OVERRIDE_PROPERTY);29@Injectable()30export abstract class AbstractResourcePreferenceProvider extends PreferenceProvider {31 protected preferences: IResolvedPreferences = {32 default: {},33 languageSpecific: {},34 };35 @Autowired(PreferenceSchemaProvider)36 protected readonly schemaProvider: PreferenceSchemaProvider;37 @Autowired(PreferenceConfigurations)38 protected readonly configurations: PreferenceConfigurations;39 @Autowired(IFileServiceClient)40 protected readonly fileSystem: IFileServiceClient;41 @Autowired(ILogger)42 private logger: ILogger;43 private preferenceThrottler: Throttler = new Throttler();44 private preferenceTasks: IPreferenceTask[] = [];45 constructor() {46 super();47 this.listen();48 }49 protected listen() {50 if (this.fileSystem.handlesScheme(Schemes.file) && this.fileSystem.handlesScheme(Schemes.userStorage)) {51 this.init();52 } else {53 const disposable = this.fileSystem.onFileProviderChanged((scheme: string[]) => {54 if (this.fileSystem.handlesScheme(Schemes.file) && this.fileSystem.handlesScheme(Schemes.userStorage)) {55 this.init();56 disposable.dispose();57 }58 });59 }60 }61 protected async init(): Promise<void> {62 // 尝试读取preferences初始内容63 this.readPreferences()64 .then(() => this._ready.resolve())65 .catch(() => this._ready.resolve());66 const uri = this.getUri();67 const watcher = await this.fileSystem.watchFileChanges(uri);68 // 配置文件改变时,重新读取配置69 this.toDispose.push(watcher);70 watcher.onFilesChanged((e: FileChange[]) => {71 const effected = e.find((file) => file.uri === uri.toString());72 if (effected) {73 return this.readPreferences();74 }75 });76 this.toDispose.push(Disposable.create(() => this.reset()));77 }78 protected abstract getUri(): URI;79 protected abstract getScope(): PreferenceScope;80 getConfigUri(): URI;81 getConfigUri(resourceUri: string | undefined): URI | undefined;82 getConfigUri(resourceUri?: string): URI | undefined {83 if (!resourceUri) {84 return this.getUri();85 }86 // 获取configUri不需要等待配置读取完应该就可以读取87 return this.contains(resourceUri) ? this.getUri() : undefined;88 }89 contains(resourceUri: string | undefined): boolean {90 if (!resourceUri) {91 return true;92 }93 const domain = this.getDomain();94 if (!domain) {95 return true;96 }97 const resourcePath = new URI(resourceUri).path;98 return domain.some((uri) => new URI(uri).path.relativity(resourcePath) >= 0);99 }100 getPreferences(resourceUri?: string, language?: string) {101 return this.loaded && this.contains(resourceUri) ? this.getOnePreference(language) : undefined;102 }103 getLanguagePreferences(resourceUri?: string) {104 return this.loaded && this.contains(resourceUri) ? this.preferences.languageSpecific : undefined;105 }106 getOnePreference(language?: string): { [key: string]: any } {107 if (language) {108 return this.preferences.languageSpecific[language] || {};109 } else {110 return this.preferences.default;111 }112 }113 async resolvePreferenceTasks(tasks: IPreferenceTask[]) {114 const uri = this.getUri();115 // 读取配置时同时更新一下资源信息,防止写入时对异步写入情况的错误判断116 this.resource = this.fileSystem.getFileStat(uri.toString());117 let resource = await this.resource;118 let content = ((await this.readContents()) || '').trim();119 // 将多次配置修改合并为一次文件内容变更120 for (const task of tasks) {121 const { path, value } = task;122 if ((!content || path.length === 0) && isUndefined(value)) {123 continue;124 }125 const formattingOptions = { tabSize: 2, insertSpaces: true, eol: '' };126 const edits = jsoncparser.modify(content, path, value, { formattingOptions });127 content = jsoncparser.applyEdits(content, edits);128 }129 try {130 if (!resource) {131 // 当资源不存在又需要写入数据时,创建对应文件132 resource = await this.fileSystem.createFile(uri.toString());133 }134 await this.fileSystem.setContent(resource, content);135 await this.readPreferences(content);136 return true;137 } catch (e) {138 this.logger.error(`${e.toString()}`);139 return false;140 }141 }142 /**143 * 配置变更队列处理函数144 */145 doSetPreferenceTask() {146 const tasks = this.preferenceTasks.slice(0);147 this.preferenceTasks = [];148 return this.resolvePreferenceTasks(tasks);149 }150 async doSetPreference(key: string, value: any, resourceUri?: string, language?: string): Promise<boolean> {151 if (!this.contains(resourceUri)) {152 return false;153 }154 const path = this.getPath(key, language);155 if (!path) {156 return false;157 }158 // 这里将每次配置变更的参数构造为一个 IPreferenceTask159 this.preferenceTasks.push({ path, key, value });160 return await this.preferenceThrottler.queue<boolean>(this.doSetPreferenceTask.bind(this));161 }162 protected getPath(preferenceName: string, language?: string): string[] | undefined {163 if (language) {164 return [`[${language}]`, preferenceName];165 }166 return [preferenceName];167 }168 protected loaded = false;169 protected async readPreferences(content?: string): Promise<void> {170 const newContent = content || (await this.readContents());171 this.loaded = !isUndefined(newContent);172 const newPrefs = newContent ? this.getParsedContent(newContent) : { default: {}, languageSpecific: {} };173 this.handlePreferenceChanges(newPrefs);174 }175 protected async readContents(): Promise<string | undefined> {176 try {177 const uri = this.getUri();178 const { content } = await this.fileSystem.readFile(uri.toString());179 return content.toString();180 } catch (e) {181 return undefined;182 }183 }184 protected getParsedContent(content: string): IResolvedPreferences {185 const jsonData = this.parse(content);186 const preferences: IResolvedPreferences = {187 default: {},188 languageSpecific: {},189 };190 if (typeof jsonData !== 'object') {191 return preferences;192 }193 for (const preferenceName of Object.keys(jsonData)) {194 const preferenceValue = jsonData[preferenceName];195 // 这里由于插件的schema注册较晚,在第一次获取配置时会校验不通过导致取不到值,读取暂时去掉校验逻辑196 if (OVERRIDE_PROPERTY_PATTERN.test(preferenceName)) {197 const language = preferenceName.match(OVERRIDE_PROPERTY_PATTERN)![1];198 preferences.languageSpecific[language] = preferences.languageSpecific[language] || {};199 // eslint-disable-next-line guard-for-in200 for (const overriddenPreferenceName in preferenceValue) {201 const overriddenValue = preferenceValue[overriddenPreferenceName];202 preferences.languageSpecific[language][`${overriddenPreferenceName}`] = overriddenValue;203 }204 } else {205 preferences.default[preferenceName] = preferenceValue;206 }207 }208 return preferences;209 }210 protected validate(preferenceName: string, preferenceValue: any): boolean {211 if (this.configurations.getPath(this.getUri()) !== this.configurations.getPaths()[0]) {212 return true;213 }214 return isUndefined(preferenceValue) || this.schemaProvider.validate(preferenceName, preferenceValue).valid;215 }216 protected parse(content: string): any {217 content = content.trim();218 if (!content) {219 return undefined;220 }221 const strippedContent = jsoncparser.stripComments(content);222 return jsoncparser.parse(strippedContent);223 }224 protected handlePreferenceChanges(newPrefs: IResolvedPreferences): void {225 const oldPrefs = Object.assign({}, this.preferences);226 this.preferences = newPrefs;227 const changes: PreferenceProviderDataChanges = this.collectChanges(this.preferences, oldPrefs);228 if (Object.keys(changes.default).length > 0 || Object.keys(changes.languageSpecific).length > 0) {229 this.emitPreferencesChangedEvent(changes);230 }231 }232 protected reset(): void {233 const preferences = this.preferences;234 this.preferences = { default: {}, languageSpecific: {} };235 const changes: PreferenceProviderDataChanges = this.collectChanges(this.preferences, preferences);236 if (Object.keys(changes.default).length > 0 || Object.keys(changes.languageSpecific).length > 0) {237 this.emitPreferencesChangedEvent(changes);238 }239 }240 private collectChanges(newPref: IResolvedPreferences, oldPref: IResolvedPreferences): PreferenceProviderDataChanges {241 const changes: PreferenceProviderDataChanges = {242 default: this.collectOneChanges(newPref.default, oldPref.default),243 languageSpecific: {},244 };245 const languages = new Set<string>([246 ...Object.keys(newPref.languageSpecific),247 ...Object.keys(oldPref.languageSpecific),248 ]);249 for (const language of languages) {250 const languageChange = this.collectOneChanges(251 newPref.languageSpecific[language],252 oldPref.languageSpecific[language],253 );254 if (Object.keys(languageChange).length > 0) {255 changes.languageSpecific[language] = languageChange;256 }257 }258 return changes;259 }260 private collectOneChanges(261 newPref: { [name: string]: any },262 oldPref: { [name: string]: any },263 ): { [preferenceName: string]: PreferenceProviderDataChange } {264 const keys = new Set([...Object.keys(oldPref || {}), ...Object.keys(newPref || {})]);265 const changes: { [preferenceName: string]: PreferenceProviderDataChange } = {};266 const uri = this.getUri();267 for (const prefName of keys) {268 const oldValue = oldPref[prefName];269 const newValue = newPref[prefName];270 const schemaProperties = this.schemaProvider.getCombinedSchema().properties[prefName];271 if (schemaProperties) {272 const scope = schemaProperties.scope;273 // do not emit the change event if the change is made out of the defined preference scope274 if (!this.schemaProvider.isValidInScope(prefName, this.getScope())) {275 this.logger.warn(276 `Preference ${prefName} in ${uri} can only be defined in scopes: ${PreferenceScope.getScopeNames(277 scope,278 ).join(', ')}.`,279 );280 continue;281 }282 }283 if (284 (isUndefined(newValue) && oldValue !== newValue) ||285 (isUndefined(oldValue) && newValue !== oldValue) || // JSONUtils.deepEqual() does not support handling `undefined`286 !JSONUtils.deepEqual(oldValue, newValue)287 ) {288 changes[prefName] = {289 preferenceName: prefName,290 newValue,291 oldValue,292 scope: this.getScope(),293 domain: this.getDomain(),294 };295 }296 }297 return changes;298 }...

Full Screen

Full Screen

upperCase.ts

Source:upperCase.ts Github

copy

Full Screen

1import { LanguageSpecific } from "./types.ts";2const LANGUAGES: LanguageSpecific = {3 tr: {4 regexp: /[\u0069]/g,5 map: {6 i: "\u0130",7 },8 },9 az: {10 regexp: /[\u0069]/g,11 map: {12 i: "\u0130",13 },14 },15 lt: {16 regexp: /[\u0069\u006A\u012F]\u0307|\u0069\u0307[\u0300\u0301\u0303]/g,17 map: {18 i̇: "\u0049",19 j̇: "\u004A",20 į̇: "\u012E",21 i̇̀: "\u00CC",22 i̇́: "\u00CD",23 i̇̃: "\u0128",24 },25 },26};27export default function (str: string, locale?: string): string {28 str = str == null ? "" : String(str);29 if (!locale) {30 return str.toUpperCase();31 }32 const lang = LANGUAGES[locale];33 if (lang) {34 str = str.replace(lang.regexp, function (m) {35 return lang.map[m];36 });37 }38 return str.toUpperCase();...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1import { languageSpecific } from 'storybook-root';2import { storiesOf } from '@storybook/react';3import { withKnobs, text } from '@storybook/addon-knobs';4const stories = storiesOf('Test', module);5stories.addDecorator(withKnobs);6stories.add('with text', () => {7 const label = languageSpecific('test.label', 'label');8 const value = text(label, 'Hello Storybook');9 return <div>{value}</div>;10});11import { addLocaleData } from 'react-intl';12import en from 'react-intl/locale-data/en';13import de from 'react-intl/locale-data/de';14addLocaleData([...en, ...de]);15const enMessages = require('./locales/en.json');16const deMessages = require('./locales/de.json');17const messages = {18};19export const languageSpecific = (key, defaultMessage) => {20 return messages[language][key] || defaultMessage;21};

Full Screen

Using AI Code Generation

copy

Full Screen

1import { languageSpecific } from 'storybook-root';2import { storiesOf } from '@storybook/react';3const stories = storiesOf('Test', module);4stories.add('test', () => {5 return languageSpecific(6 {7 },8 );9});10import { languageSpecific } from 'storybook-root';11import { addDecorator } from '@storybook/react';12addDecorator(languageSpecific);13import { addParameters } from '@storybook/react';14addParameters({15 languages: {16 },17});18import { addons } from '@storybook/addons';19addons.setConfig({20});21import 'storybook-root/register';22module.exports = {23};24const path = require('path');25module.exports = ({ config }) => {26 config.resolve.alias['storybook-root'] = path.resolve(__dirname, '../');27 return config;28};29module.exports = {30 typescript: {31 },32};33module.exports = {34 typescript: {35 },36};37module.exports = {38 typescript: {39 },40};

Full Screen

Using AI Code Generation

copy

Full Screen

1var storybookRoot = require("storybook-root");2storybookRoot.languageSpecific("en", "es", "zh");3var storybookRoot = require("storybook-root");4storybookRoot.languageSpecific("en", "es", "zh");5var storybookRoot = require("storybook-root");6storybookRoot.languageSpecific("en", "es", "zh");7{ en: 'en', es: 'es', zh: 'zh' }8{ en: 'en', es: 'es', zh: 'zh' }9{ en: 'en', es: 'es', zh: 'zh' }10{ en: 'en', es: 'es', zh: 'zh' }11{ en: 'en', es: 'es', zh: 'zh' }12{ en: 'en', es: 'es', zh: 'zh' }13{ en: 'en', es: 'es', zh: 'zh' }14{ en: 'en', es: 'es', zh: 'zh' }15{ en: 'en', es: 'es', zh: 'zh' }

Full Screen

Using AI Code Generation

copy

Full Screen

1import { languageSpecific } from 'storybook-root-decorator';2import { languageSpecific } from 'storybook-root-decorator';3import { languageSpecific } from 'storybook-root-decorator';4import { languageSpecific } from 'storybook-root-decorator';5import { languageSpecific } from 'storybook-root-decorator';6import { languageSpecific } from 'storybook-root-decorator';7import { languageSpecific } from 'storybook-root-decorator';

Full Screen

Using AI Code Generation

copy

Full Screen

1import { languageSpecific } from 'storybook-root'2languageSpecific('en', () => {3})4import { languageSpecific } from 'storybook-root'5languageSpecific('en', () => {6})7import { languageSpecific } from 'storybook-root'8languageSpecific('en', () => {9})10import { languageSpecific } from 'storybook-root'11languageSpecific('en', () => {12})13import { languageSpecific } from 'storybook-root'14languageSpecific('en', () => {15})16import { languageSpecific } from 'storybook-root'17languageSpecific('en', () => {18})19import { languageSpecific } from 'storybook-root'20languageSpecific('en', () => {21})22import { languageSpecific } from 'storybook-root'23languageSpecific('en', () => {24})25import { language

Full Screen

Using AI Code Generation

copy

Full Screen

1const { languageSpecific } = require("storybook-root");2const { en, fr } = require("./languages");3const language = languageSpecific({ en, fr });4const { languageSpecific } = require("storybook-root");5const { en, fr } = require("./languages");6const language = languageSpecific({ en, fr });7module.exports = {8 en: {9 },10 fr: {11 }12};13module.exports = {14 en: {15 },16 fr: {17 }18};19const { languageSpecific } = require("storybook-root");20const { en, fr } = require("./languages");21const language = languageSpecific({ en, fr });22const { languageSpecific } = require("storybook-root");23const { en, fr } = require("./languages");24const language = languageSpecific({ en, fr });25module.exports = {26 en: {27 },28 fr: {29 }30};31module.exports = {32 en: {33 },34 fr: {35 }36};37const { languageSpecific } = require("storybook-root");38const { en, fr } = require("./languages");39const language = languageSpecific({ en, fr });40const { languageSpecific } = require("storybook-root");41const { en,

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run storybook-root automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful