@anansi/generator-js
Version:
Generate Fast React Web Apps
42 lines (41 loc) • 10.2 kB
JavaScript
import ejs from 'ejs';
import { resolve } from 'import-meta-resolve';
import pacote from 'pacote';
import Generator from 'yeoman-generator';
export class BetterGenerator extends Generator {
constructor(args, options, features) {
// fix broken logic in path combining in yeoman-generator
if (options.resolved?.startsWith('file://')) options.resolved = options.resolved.substring(7);
super(args, options, features);
// environment will let us work from correct directory when copying files
//this.fs = this.env.sharedFs as any;
this.fs.extendJSONTpl = (from, to, context, templateOptions, ...extendArgs) => {
const input = ejs.render(this.fs.read(from) ?? '', context || this.config.getAll(), templateOptions);
this.fs.extendJSON(to, JSON.parse(input), ...extendArgs);
};
this.fs.readJSONTpl = (from, context, templateOptions) => {
const input = ejs.render(this.fs.read(from) ?? '', context || this.config.getAll(), templateOptions);
return JSON.parse(input);
};
this.fs.appendTpl = (from, to, context, templateOptions, appendOptions) => {
const input = ejs.render(this.fs.read(from) ?? '', context || this.config.getAll(), templateOptions);
this.fs.append(to, input, appendOptions);
};
}
async addPeers(pkgName, exclude = [], deptype = 'dependencies') {
const manifest = await pacote.manifest(pkgName);
if (!manifest) {
return undefined;
}
const peers = Object.fromEntries(Object.entries(manifest?.peerDependencies ?? {}).filter(([pkg, version]) => !exclude.includes(pkg)));
const funcKey = `add${capitalize(deptype)}`;
await this[funcKey](peers);
}
}
const capitalize = s => {
return s.charAt(0).toUpperCase() + s.slice(1);
};
export function resolvePath(path, url) {
return resolve(path, url).substring(7);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlanMiLCJyZXNvbHZlIiwicGFjb3RlIiwiR2VuZXJhdG9yIiwiQmV0dGVyR2VuZXJhdG9yIiwiY29uc3RydWN0b3IiLCJhcmdzIiwib3B0aW9ucyIsImZlYXR1cmVzIiwicmVzb2x2ZWQiLCJzdGFydHNXaXRoIiwic3Vic3RyaW5nIiwiZnMiLCJleHRlbmRKU09OVHBsIiwiZnJvbSIsInRvIiwiY29udGV4dCIsInRlbXBsYXRlT3B0aW9ucyIsImV4dGVuZEFyZ3MiLCJpbnB1dCIsInJlbmRlciIsInJlYWQiLCJjb25maWciLCJnZXRBbGwiLCJleHRlbmRKU09OIiwiSlNPTiIsInBhcnNlIiwicmVhZEpTT05UcGwiLCJhcHBlbmRUcGwiLCJhcHBlbmRPcHRpb25zIiwiYXBwZW5kIiwiYWRkUGVlcnMiLCJwa2dOYW1lIiwiZXhjbHVkZSIsImRlcHR5cGUiLCJtYW5pZmVzdCIsInVuZGVmaW5lZCIsInBlZXJzIiwiT2JqZWN0IiwiZnJvbUVudHJpZXMiLCJlbnRyaWVzIiwicGVlckRlcGVuZGVuY2llcyIsImZpbHRlciIsInBrZyIsInZlcnNpb24iLCJpbmNsdWRlcyIsImZ1bmNLZXkiLCJjYXBpdGFsaXplIiwicyIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJyZXNvbHZlUGF0aCIsInBhdGgiLCJ1cmwiXSwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGVqcyBmcm9tICdlanMnO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ2ltcG9ydC1tZXRhLXJlc29sdmUnO1xuaW1wb3J0IHR5cGUge1xuICBNZW1Gc0VkaXRvcixcbiAgTWVtRnNFZGl0b3JGaWxlLFxuICBWaW55bE1lbUZzRWRpdG9yRmlsZSxcbn0gZnJvbSAnbWVtLWZzLWVkaXRvcic7XG5pbXBvcnQgcGFjb3RlIGZyb20gJ3BhY290ZSc7XG5pbXBvcnQgR2VuZXJhdG9yLCB7IEJhc2VGZWF0dXJlcywgQmFzZU9wdGlvbnMgfSBmcm9tICd5ZW9tYW4tZ2VuZXJhdG9yJztcblxuZXhwb3J0IGludGVyZmFjZSBGc0VkaXRvcjxcbiAgRWRpdG9yRmlsZSBleHRlbmRzIE1lbUZzRWRpdG9yRmlsZSA9IFZpbnlsTWVtRnNFZGl0b3JGaWxlLFxuPiBleHRlbmRzIE1lbUZzRWRpdG9yPEVkaXRvckZpbGU+IHtcbiAgZXh0ZW5kSlNPTlRwbChcbiAgICBmcm9tOiBzdHJpbmcsXG4gICAgdG86IHN0cmluZyxcbiAgICBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICB0ZW1wbGF0ZU9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIC4uLmV4dGVuZEFyZ3M6IGFueVtdXG4gICk6IHZvaWQ7XG4gIGFwcGVuZFRwbChcbiAgICBmcm9tOiBzdHJpbmcsXG4gICAgdG86IHN0cmluZyB8IEJ1ZmZlcixcbiAgICBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICB0ZW1wbGF0ZU9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGFwcGVuZE9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICApOiB2b2lkO1xuICByZWFkSlNPTlRwbChcbiAgICBmcm9tOiBzdHJpbmcsXG4gICAgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgdGVtcGxhdGVPcHRpb25zPzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgKTogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgQmV0dGVyR2VuZXJhdG9yPFxuICBPIGV4dGVuZHMgQmFzZU9wdGlvbnMgPSBCYXNlT3B0aW9ucyxcbiAgRiBleHRlbmRzIEJhc2VGZWF0dXJlcyA9IEJhc2VGZWF0dXJlcyxcbj4gZXh0ZW5kcyBHZW5lcmF0b3I8TywgRj4ge1xuICBkZWNsYXJlIGZzOiBGc0VkaXRvcjtcblxuICBjb25zdHJ1Y3RvcihhcmdzOiBzdHJpbmcgfCBzdHJpbmdbXSwgb3B0aW9uczogTywgZmVhdHVyZXM6IEYpIHtcbiAgICAvLyBmaXggYnJva2VuIGxvZ2ljIGluIHBhdGggY29tYmluaW5nIGluIHllb21hbi1nZW5lcmF0b3JcbiAgICBpZiAob3B0aW9ucy5yZXNvbHZlZD8uc3RhcnRzV2l0aCgnZmlsZTovLycpKVxuICAgICAgb3B0aW9ucy5yZXNvbHZlZCA9IG9wdGlvbnMucmVzb2x2ZWQuc3Vic3RyaW5nKDcpO1xuICAgIHN1cGVyKGFyZ3MsIG9wdGlvbnMsIGZlYXR1cmVzKTtcblxuICAgIC8vIGVudmlyb25tZW50IHdpbGwgbGV0IHVzIHdvcmsgZnJvbSBjb3JyZWN0IGRpcmVjdG9yeSB3aGVuIGNvcHlpbmcgZmlsZXNcbiAgICAvL3RoaXMuZnMgPSB0aGlzLmVudi5zaGFyZWRGcyBhcyBhbnk7XG4gICAgdGhpcy5mcy5leHRlbmRKU09OVHBsID0gKFxuICAgICAgZnJvbTogc3RyaW5nLFxuICAgICAgdG86IHN0cmluZyxcbiAgICAgIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgICAgdGVtcGxhdGVPcHRpb25zPzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAgIC4uLmV4dGVuZEFyZ3M6IGFueVtdXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dDogc3RyaW5nID0gZWpzLnJlbmRlcihcbiAgICAgICAgdGhpcy5mcy5yZWFkKGZyb20pID8/ICcnLFxuICAgICAgICBjb250ZXh0IHx8IHRoaXMuY29uZmlnLmdldEFsbCgpLFxuICAgICAgICB0ZW1wbGF0ZU9wdGlvbnMsXG4gICAgICApIGFzIGFueTtcbiAgICAgIHRoaXMuZnMuZXh0ZW5kSlNPTih0bywgSlNPTi5wYXJzZShpbnB1dCksIC4uLmV4dGVuZEFyZ3MpO1xuICAgIH07XG5cbiAgICB0aGlzLmZzLnJlYWRKU09OVHBsID0gKFxuICAgICAgZnJvbTogc3RyaW5nLFxuICAgICAgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgICB0ZW1wbGF0ZU9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQ6IHN0cmluZyA9IGVqcy5yZW5kZXIoXG4gICAgICAgIHRoaXMuZnMucmVhZChmcm9tKSA/PyAnJyxcbiAgICAgICAgY29udGV4dCB8fCB0aGlzLmNvbmZpZy5nZXRBbGwoKSxcbiAgICAgICAgdGVtcGxhdGVPcHRpb25zLFxuICAgICAgKSBhcyBhbnk7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShpbnB1dCk7XG4gICAgfTtcblxuICAgIHRoaXMuZnMuYXBwZW5kVHBsID0gKGZyb20sIHRvLCBjb250ZXh0LCB0ZW1wbGF0ZU9wdGlvbnMsIGFwcGVuZE9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gZWpzLnJlbmRlcihcbiAgICAgICAgdGhpcy5mcy5yZWFkKGZyb20pID8/ICcnLFxuICAgICAgICBjb250ZXh0IHx8IHRoaXMuY29uZmlnLmdldEFsbCgpLFxuICAgICAgICB0ZW1wbGF0ZU9wdGlvbnMsXG4gICAgICApO1xuICAgICAgKHRoaXMuZnMgYXMgYW55KS5hcHBlbmQodG8sIGlucHV0LCBhcHBlbmRPcHRpb25zKTtcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgYWRkUGVlcnMoXG4gICAgcGtnTmFtZTogc3RyaW5nLFxuICAgIGV4Y2x1ZGU6IHN0cmluZ1tdID0gW10sXG4gICAgZGVwdHlwZTogJ2RlcGVuZGVuY2llcycgfCAnZGV2RGVwZW5kZW5jaWVzJyA9ICdkZXBlbmRlbmNpZXMnLFxuICApIHtcbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IHBhY290ZS5tYW5pZmVzdChwa2dOYW1lKTtcbiAgICBpZiAoIW1hbmlmZXN0KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBwZWVycyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKG1hbmlmZXN0Py5wZWVyRGVwZW5kZW5jaWVzID8/IHt9KS5maWx0ZXIoXG4gICAgICAgIChbcGtnLCB2ZXJzaW9uXSkgPT4gIWV4Y2x1ZGUuaW5jbHVkZXMocGtnKSxcbiAgICAgICksXG4gICAgKTtcbiAgICBjb25zdCBmdW5jS2V5ID0gYGFkZCR7Y2FwaXRhbGl6ZShkZXB0eXBlKX1gIGFzIGNvbnN0O1xuICAgIGF3YWl0IHRoaXNbZnVuY0tleV0ocGVlcnMpO1xuICB9XG59XG5cbmNvbnN0IGNhcGl0YWxpemUgPSA8VCBleHRlbmRzIHN0cmluZz4oczogVCk6IENhcGl0YWxpemU8VD4gPT4ge1xuICByZXR1cm4gKHMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpKSBhcyBhbnk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBhdGgocGF0aDogc3RyaW5nLCB1cmw6IHN0cmluZykge1xuICByZXR1cm4gcmVzb2x2ZShwYXRoLCB1cmwpLnN1YnN0cmluZyg3KTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsR0FBRyxNQUFNLEtBQUs7QUFDckIsU0FBU0MsT0FBTyxRQUFRLHFCQUFxQjtBQU03QyxPQUFPQyxNQUFNLE1BQU0sUUFBUTtBQUMzQixPQUFPQyxTQUFTLE1BQXFDLGtCQUFrQjtBQTBCdkUsT0FBTyxNQUFNQyxlQUFlLFNBR2xCRCxTQUFTLENBQU87RUFHeEJFLFdBQVdBLENBQUNDLElBQXVCLEVBQUVDLE9BQVUsRUFBRUMsUUFBVyxFQUFFO0lBQzVEO0lBQ0EsSUFBSUQsT0FBTyxDQUFDRSxRQUFRLEVBQUVDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFDekNILE9BQU8sQ0FBQ0UsUUFBUSxHQUFHRixPQUFPLENBQUNFLFFBQVEsQ0FBQ0UsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNsRCxLQUFLLENBQUNMLElBQUksRUFBRUMsT0FBTyxFQUFFQyxRQUFRLENBQUM7O0lBRTlCO0lBQ0E7SUFDQSxJQUFJLENBQUNJLEVBQUUsQ0FBQ0MsYUFBYSxHQUFHLENBQ3RCQyxJQUFZLEVBQ1pDLEVBQVUsRUFDVkMsT0FBNkIsRUFDN0JDLGVBQXFDLEVBQ3JDLEdBQUdDLFVBQWlCLEtBQ2pCO01BQ0gsTUFBTUMsS0FBYSxHQUFHbkIs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