1e484b35bSopenharmony_ci/** 2e484b35bSopenharmony_ci * Verify whether a string starts with $ or _. 3e484b35bSopenharmony_ci * @param {string} str - The string which to be verified. 4e484b35bSopenharmony_ci * @return {boolean} The result whether the string starts with $ or _. 5e484b35bSopenharmony_ci */ 6e484b35bSopenharmony_ciexport function isReserved(str) { 7e484b35bSopenharmony_ci const c = (str + '').charCodeAt(0); 8e484b35bSopenharmony_ci return c === 0x24 || c === 0x5F; 9e484b35bSopenharmony_ci} 10e484b35bSopenharmony_ci 11e484b35bSopenharmony_ci/** 12e484b35bSopenharmony_ci * Create a cached version of a function. 13e484b35bSopenharmony_ci * @param {Function} func - The function which to be created a cached version. 14e484b35bSopenharmony_ci * @return {Function} The cached version of the function. 15e484b35bSopenharmony_ci */ 16e484b35bSopenharmony_cifunction cached(func) { 17e484b35bSopenharmony_ci const cache = Object.create(null); 18e484b35bSopenharmony_ci return function cachedFn(str) { 19e484b35bSopenharmony_ci const hit = cache[str]; 20e484b35bSopenharmony_ci return hit || (cache[str] = func(str)); 21e484b35bSopenharmony_ci }; 22e484b35bSopenharmony_ci} 23e484b35bSopenharmony_ci 24e484b35bSopenharmony_ci/** 25e484b35bSopenharmony_ci * Camelize a hyphen-delmited string. 26e484b35bSopenharmony_ci * @param {string} str - A hyphen-delmited string. 27e484b35bSopenharmony_ci * @return {string} A camelized string. 28e484b35bSopenharmony_ci */ 29e484b35bSopenharmony_ciexport const camelize = cached(str => { 30e484b35bSopenharmony_ci return str.replace(/-(\w)/g, (_, s) => s ? s.toUpperCase() : ''); 31e484b35bSopenharmony_ci}); 32e484b35bSopenharmony_ci 33e484b35bSopenharmony_ci/** 34e484b35bSopenharmony_ci * Check the type of a variable. 35e484b35bSopenharmony_ci * @param {*} any - The variable which to be checked. 36e484b35bSopenharmony_ci * @return {string} The type of the variable. 37e484b35bSopenharmony_ci */ 38e484b35bSopenharmony_ciexport function typof(any) { 39e484b35bSopenharmony_ci const objType = Object.prototype.toString.call(any); 40e484b35bSopenharmony_ci return objType.substring(8, objType.length - 1).toLowerCase(); 41e484b35bSopenharmony_ci} 42e484b35bSopenharmony_ci 43e484b35bSopenharmony_ci/** 44e484b35bSopenharmony_ci * Regular expression for component. 45e484b35bSopenharmony_ci * @constant {RegExp} 46e484b35bSopenharmony_ci */ 47e484b35bSopenharmony_ciconst COMPONENT_REG = /^@app-component\//; 48e484b35bSopenharmony_ci 49e484b35bSopenharmony_ci/** 50e484b35bSopenharmony_ci * Regular expression for module. 51e484b35bSopenharmony_ci * @constant {RegExp} 52e484b35bSopenharmony_ci */ 53e484b35bSopenharmony_ciconst MODULE_REG = /^@app-module\//; 54e484b35bSopenharmony_ci 55e484b35bSopenharmony_ci/** 56e484b35bSopenharmony_ci * Regular expression for application. 57e484b35bSopenharmony_ci * @constant {RegExp} 58e484b35bSopenharmony_ci */ 59e484b35bSopenharmony_ciconst APPLICATION_REG = /^@app-application\//; 60e484b35bSopenharmony_ci 61e484b35bSopenharmony_ci/** 62e484b35bSopenharmony_ci * Verify whether is a component. 63e484b35bSopenharmony_ci * @param {string} name - The name which need to be verified. 64e484b35bSopenharmony_ci * @return {boolean} The result whether is a component. 65e484b35bSopenharmony_ci */ 66e484b35bSopenharmony_ciexport function isComponent(name) { 67e484b35bSopenharmony_ci return !!name.match(COMPONENT_REG); 68e484b35bSopenharmony_ci} 69e484b35bSopenharmony_ci 70e484b35bSopenharmony_ci/** 71e484b35bSopenharmony_ci * Verify whether is a module. 72e484b35bSopenharmony_ci * @param {string} name - The name which need to be verified. 73e484b35bSopenharmony_ci * @return {boolean} The result whether is a module. 74e484b35bSopenharmony_ci */ 75e484b35bSopenharmony_ciexport function isModule(name) { 76e484b35bSopenharmony_ci return !!name.match(MODULE_REG); 77e484b35bSopenharmony_ci} 78e484b35bSopenharmony_ci 79e484b35bSopenharmony_ci/** 80e484b35bSopenharmony_ci * Verify whether is an application. 81e484b35bSopenharmony_ci * @param {string} name - The name which need to be verified. 82e484b35bSopenharmony_ci * @return {boolean} The result whether is an APP. 83e484b35bSopenharmony_ci */ 84e484b35bSopenharmony_ciexport function isApplication(name) { 85e484b35bSopenharmony_ci return !!name.match(APPLICATION_REG); 86e484b35bSopenharmony_ci} 87e484b35bSopenharmony_ci 88e484b35bSopenharmony_ci/** 89e484b35bSopenharmony_ci * Remove "@app-application". 90e484b35bSopenharmony_ci * @param {string} name - The name which need to be removed. 91e484b35bSopenharmony_ci * @return {string} The result which has been removed "@app-application". 92e484b35bSopenharmony_ci */ 93e484b35bSopenharmony_ciexport function removeApplicationPrefix(str) { 94e484b35bSopenharmony_ci const result = str.replace(APPLICATION_REG, ''); 95e484b35bSopenharmony_ci return result; 96e484b35bSopenharmony_ci} 97e484b35bSopenharmony_ci 98e484b35bSopenharmony_ci/** 99e484b35bSopenharmony_ci * Remove "@app-component and @app-module". 100e484b35bSopenharmony_ci * @param {string} name - The name which need to be removed. 101e484b35bSopenharmony_ci * @return {string} The result which has been removed "@app-component" and "@app-module". 102e484b35bSopenharmony_ci */ 103e484b35bSopenharmony_ciexport function removePrefix(str) { 104e484b35bSopenharmony_ci const result = str.replace(COMPONENT_REG, '').replace(MODULE_REG, ''); 105e484b35bSopenharmony_ci return result; 106e484b35bSopenharmony_ci} 107