UNPKG

@revolist/svelte-output-target

Version:

Svelte output target for @stencil/core components.

77 lines (76 loc) 2.48 kB
/* eslint-disable no-param-reassign */ import path from 'path'; import { promisify } from 'util'; import fs from 'fs'; const readFile = promisify(fs.readFile); const EXTENDED_PATH_REGEX = /^\\\\\?\\/; const SLASH_REGEX = /\\/g; // eslint-disable-next-line no-control-regex const NON_ASCII_REGEX = /[^\x00-\x80]+/; export const toLowerCase = (str) => str.toLowerCase(); export const dashToCamelCase = (str) => str.replace(/-([a-z])/g, (_, up) => up.toUpperCase()); export const dashToPascalCase = (str) => toLowerCase(str) .split('-') .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1)) .join(''); export const sortBy = (array, prop) => array.slice().sort((a, b) => { const nameA = prop(a); const nameB = prop(b); if (nameA < nameB) return -1; if (nameA > nameB) return 1; return 0; }); export function normalizePath(str) { if (typeof str !== 'string') { throw new Error('invalid path to normalize'); } str = str.trim(); if (EXTENDED_PATH_REGEX.test(str) || NON_ASCII_REGEX.test(str)) { return str; } str = str.replace(SLASH_REGEX, '/'); // always remove the trailing / // this makes our file cache look ups consistent if (str.charAt(str.length - 1) === '/') { const colonIndex = str.indexOf(':'); if (colonIndex > -1) { if (colonIndex < str.length - 2) { str = str.substring(0, str.length - 1); } } else if (str.length > 1) { str = str.substring(0, str.length - 1); } } return str; } export const relativeImport = (pathFrom, pathTo, ext) => { let relativePath = path.relative(path.dirname(pathFrom), path.dirname(pathTo)); if (relativePath === '') { relativePath = '.'; } else if (relativePath[0] !== '.') { relativePath = `./${relativePath}`; } return normalizePath(`${relativePath}/${path.basename(pathTo, ext)}`); }; export const readPackageJson = async (rootDir) => { const pkgJsonPath = path.join(rootDir, 'package.json'); let pkgJson; try { pkgJson = await readFile(pkgJsonPath, 'utf8'); } catch (e) { throw new Error(`Missing "package.json" file for distribution: ${pkgJsonPath}`); } let pkgData; try { pkgData = JSON.parse(pkgJson); } catch (e) { throw new Error(`Error parsing package.json: ${pkgJsonPath}, ${e}`); } return pkgData; };