UNPKG

@cardstack/cli

Version:

Command line tools for Cardstack.

87 lines 3.57 kB
"use strict"; 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