@cardstack/cli
Version:
Command line tools for Cardstack.
87 lines • 3.57 kB
JavaScript
;
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_extra_1 = require("fs-extra");
const path_1 = require("path");
const resolve_1 = require("resolve");
const resolvableExtensions = ['js'];
async function loadCard({ ui, "hub-dir": hubDir, "card-dir": cardDir }) {
// we want an absolute path to the card so that imports are handled correctly
cardDir = path_1.resolve(cardDir);
let cardPkg = await Promise.resolve().then(() => __importStar(require(path_1.join(cardDir, 'package.json'))));
await linkPeerDeps(ui, hubDir, cardDir, cardPkg);
await createEntrypoints(ui, hubDir, cardDir, cardPkg);
}
exports.default = loadCard;
async function createEntrypoints(ui, hubDir, cardDir, cardPkg) {
for (let format of ['isolated', 'embedded']) {
let componentFile;
for (let extension of resolvableExtensions) {
let candidateFile = path_1.join(cardDir, `${format}.${extension}`);
if (fs_extra_1.pathExistsSync(candidateFile)) {
componentFile = candidateFile;
break;
}
}
let templateFile;
let candidateFile = path_1.join(cardDir, `${format}.hbs`);
if (fs_extra_1.pathExistsSync(candidateFile)) {
templateFile = candidateFile;
}
if (componentFile || templateFile) {
let entrypoint = path_1.join(hubDir, 'app', 'components', 'cards', `${cardPkg.name}-${format}.js`);
let sourceLines = [];
if (componentFile) {
sourceLines.push(`export { default as component } from "${componentFile}";`);
}
else {
sourceLines.push(`export const component = undefined;`);
}
if (templateFile) {
sourceLines.push(`export { default as template } from "${templateFile}";`);
}
else {
sourceLines.push(`export const template = undefined;`);
}
ui.writeLine(`emitting entrypoint ${entrypoint}`);
fs_extra_1.writeFileSync(entrypoint, sourceLines.join("\n"), 'utf8');
}
}
}
async function linkPeerDeps(ui, hubDir, cardDir, cardPkg) {
let filename = path_1.join(hubDir, '.embroider-app-path');
let appPath;
try {
appPath = fs_extra_1.readFileSync(filename, 'utf8');
}
catch (err) {
if (err.code !== 'ENOENT') {
throw err;
}
ui.writeLine(`Your cardstack hub does not appear to be running (couldn't read ${filename})`, 'ERROR');
process.exit(-1);
}
if (!cardPkg.peerDependencies) {
return;
}
for (let pkgName of Object.keys(cardPkg.peerDependencies)) {
try {
let target = resolve_1.sync(`${pkgName}/package.json`, { basedir: appPath });
fs_extra_1.ensureSymlinkSync(path_1.dirname(target), path_1.join(cardDir, 'node_modules', pkgName), 'dir');
}
catch (err) {
if (err.code !== 'MODULE_NOT_FOUND') {
throw err;
}
ui.writeLine(`The card ${cardPkg.name} has a peerDependency on ${pkgName}, which is not available in the Hub`, 'ERROR');
process.exit(-1);
}
}
}
//# sourceMappingURL=load.js.map