source/utility.js
import { cache, packageOf } from '@tech_query/node-toolkit';
import { JSDOM } from 'jsdom';
import { join } from 'path';
import { outputFile } from 'fs-extra';
/**
* @param {String} raw
* @param {?Boolean} big - Big-camel style
*
* @return {String}
*/
export function identifierOf(raw, big) {
raw = raw.replace(/\W+(\w)/g, (_, char) => char.toUpperCase())
.replace(/^\d/, char => '_' + char);
return big ? (raw[0].toUpperCase() + raw.slice(1)) : raw;
}
/**
* Get `package.json` data of `path` or `process.cwd()`
*
* @type {function(path: ?String): Object}
*/
export const metaOf = cache(
path => (packageOf(path || './test') || '').meta || { }
);
/**
* Get `directories` field of `package.json` in `path` or `process.cwd()`
*
* @type {function(path: ?String): Object}
*/
export const folderOf = cache(path => (metaOf(path) || '').directories || { });
/**
* @param {String} entry - Path of HTML file
* @param {String} name - Tag name
* @param {String} [base='dist/'] - Base path of JS files
*/
export async function addComponent(entry, name, base) {
const page = await JSDOM.fromFile( entry );
const { document } = page.window;
const script = document.createElement('script');
script.setAttribute('src', join(base || 'dist', `${name}.js`));
document.head.append( script );
document.body.append( document.createElement( name ) );
await outputFile(entry, page.serialize());
}