| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- /*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
- import Generator from 'yeoman-generator';
- import { kebabCase, camelCase, startCase, upperFirst } from 'lodash-es';
- export default class extends Generator {
- async prompting() {
- this.option('skipInstall');
- this.answers = await this.prompt([
- {
- type: 'input',
- name: 'packageName',
- message: 'Package name:',
- // Default to current folder name, e.g. superset-plugin-chart-hello-world
- default: kebabCase(this.appname),
- },
- {
- type: 'input',
- name: 'pluginName',
- message: 'Plugin name:',
- // Hello World
- default: startCase(
- camelCase(this.appname.replace('superset plugin chart', '').trim()),
- ),
- },
- {
- type: 'input',
- name: 'description',
- message: 'Description:',
- // Superset Plugin Chart Hello World
- default: upperFirst(startCase(this.appname)),
- },
- {
- type: 'list',
- name: 'chartType',
- message: 'What type of chart would you like?',
- choices: [
- {
- name: 'Regular chart',
- value: 'regular',
- },
- {
- name: 'Time-series chart',
- value: 'timeseries',
- },
- ],
- },
- ]);
- }
- writing() {
- // SupersetPluginChartHelloWorld
- const packageLabel = upperFirst(camelCase(this.answers.packageName));
- const params = {
- ...this.answers,
- packageLabel,
- };
- [
- ['gitignore.erb', '.gitignore'],
- ['babel.config.erb', 'babel.config.js'],
- ['jest.config.erb', 'jest.config.js'],
- ['package.erb', 'package.json'],
- ['package-lock.erb', 'package-lock.json'],
- ['README.erb', 'README.md'],
- ['tsconfig.json', 'tsconfig.json'],
- ['src/index.erb', 'src/index.ts'],
- ['src/plugin/buildQuery.erb', 'src/plugin/buildQuery.ts'],
- ['src/plugin/controlPanel.erb', 'src/plugin/controlPanel.ts'],
- ['src/plugin/index.erb', 'src/plugin/index.ts'],
- ['src/plugin/transformProps.erb', 'src/plugin/transformProps.ts'],
- ['src/types.erb', 'src/types.ts'],
- ['src/MyChart.erb', `src/${packageLabel}.tsx`],
- ['test/index.erb', 'test/index.test.ts'],
- [
- 'test/__mocks__/mockExportString.js',
- 'test/__mocks__/mockExportString.js',
- ],
- ['test/plugin/buildQuery.test.erb', 'test/plugin/buildQuery.test.ts'],
- [
- 'test/plugin/transformProps.test.erb',
- 'test/plugin/transformProps.test.ts',
- ],
- ].forEach(([src, dest]) => {
- this.fs.copyTpl(
- this.templatePath(src),
- this.destinationPath(dest),
- params,
- );
- });
- ['types/external.d.ts', 'src/images/thumbnail.png'].forEach(file => {
- this.fs.copy(this.templatePath(file), this.destinationPath(file));
- });
- }
- }
|