generator-theia
Version:
Theia Generator
50 lines (42 loc) • 1.88 kB
text/typescript
/*
* Copyright (C) 2017 TypeFox and others.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
*/
import * as paths from 'path';
import * as process from 'process';
import * as cp from 'child_process';
import BaseGenerator = require('yeoman-generator');
import { Model } from "./generator-model";
import { AppPackageGenerator } from "./app-package-generator";
export abstract class AbstractAppGenerator extends BaseGenerator {
protected readonly model = new Model();
protected readonly pck = new AppPackageGenerator(this.model);
initializing(): void {
this.model.pck = this.fs.readJSON('theia.package.json') || {};
this.config.defaults(this.model.config);
Object.assign(this.model.config, this.config.getAll());
}
configuring(): void {
this.config.save();
this.model.readLocalExtensionPackages((extension, path) => {
const extensionPath = paths.join(process.cwd(), path, 'extension.package.json');
if (this.fs.exists(extensionPath)) {
return this.fs.readJSON(extensionPath, undefined);
}
const extensionPackagePath = paths.join(process.cwd(), path, 'package.json');
return this.fs.readJSON(extensionPackagePath, undefined);
})
this.model.readExtensionPackages((extension, version) => {
const raw = ['yarn', 'info', `${extension}@${version}`, '--json'];
const args = process.platform === 'win32' ? ['cmd', '/c', ...raw] : raw;
return JSON.parse(cp.execSync(args.join(' '), {
encoding: 'utf8'
}));
});
}
writing(): void {
this.pck.generate(this.fs);
}
}