From 6cf2345c012443a4ea054b74aff6be4e5309663b Mon Sep 17 00:00:00 2001 From: AayushSaini101 Date: Mon, 8 Jul 2024 17:01:26 +0530 Subject: [PATCH] Improve suggestions --- .../templates/default/asyncapi.yaml | 9 ++--- .../templates/default/package.json | 16 ++++----- .../default/template/package.json.js | 21 ------------ package.json | 5 +-- src/commands/new/template.ts | 33 +++++++++++++++++-- src/core/flags/new/template.flags.ts | 4 +++ 6 files changed, 51 insertions(+), 37 deletions(-) delete mode 100644 assets/create-template/templates/default/template/package.json.js diff --git a/assets/create-template/templates/default/asyncapi.yaml b/assets/create-template/templates/default/asyncapi.yaml index 5c35f499104..e9dc3fa855e 100644 --- a/assets/create-template/templates/default/asyncapi.yaml +++ b/assets/create-template/templates/default/asyncapi.yaml @@ -1,5 +1,4 @@ -asyncapi: 2.6.0 - +asyncapi: 3.0.0 info: title: Temperature Service version: 1.0.0 @@ -12,17 +11,19 @@ servers: channels: temperature/changed: - description: Updates the bedroom temperature in the database when the temperatures drops or goes up. + description: Updates the bedroom temperature in the database when the temperature drops or goes up. publish: operationId: temperatureChange message: description: Message that is being sent when the temperature in the bedroom changes. + contentType: application/json payload: type: object additionalProperties: false properties: temperatureId: type: string + components: schemas: temperatureId: @@ -30,4 +31,4 @@ components: additionalProperties: false properties: temperatureId: - type: string \ No newline at end of file + type: string diff --git a/assets/create-template/templates/default/package.json b/assets/create-template/templates/default/package.json index 4ec4467f598..33856c1861f 100644 --- a/assets/create-template/templates/default/package.json +++ b/assets/create-template/templates/default/package.json @@ -1,10 +1,10 @@ { - "name": "myTemplate", - "generator": { - "renderer": "react", - "supportedProtocols": [ ] - }, - "dependencies": { - "@asyncapi/generator-react-sdk": "^0.2.25" - } + "name": "myTemplate", + "generator": { + "renderer": "react", + "supportedProtocols": [] + }, + "dependencies": { + "@asyncapi/generator-react-sdk": "^1.0.20" + } } diff --git a/assets/create-template/templates/default/template/package.json.js b/assets/create-template/templates/default/template/package.json.js deleted file mode 100644 index 1db86f985ce..00000000000 --- a/assets/create-template/templates/default/template/package.json.js +++ /dev/null @@ -1,21 +0,0 @@ - -import { File } from '@asyncapi/generator-react-sdk'; -import fetch from 'node-fetch'; -export default async function ({ asyncapi }) { - const description = asyncapi.info().description(); - const packageName = '@asyncapi/generator-react-sdk'; - const npmRegistryUrl = `https://registry.npmjs.org/${encodeURIComponent(packageName)}`; - const response = await fetch(npmRegistryUrl); - const data = await response.json(); - const generatorSDKversion = data['dist-tags'].latest; - return ( - {`{ - "name": "${asyncapi.info().title().toLowerCase().replace(/ /g, '-')}", - "version": "0.1.0", - "description": "${description ? asyncapi.info().description().split('\n')[0] : ''}", - "dependencies": { - "@asyncapi/generator-react-sdk": "^${generatorSDKversion}" - } -}`} - ); -} diff --git a/package.json b/package.json index d30934aa42d..44d9e61ac7c 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,8 @@ "@asyncapi/bundler": "^0.5.2", "@asyncapi/converter": "^1.4.19", "@asyncapi/diff": "^0.4.1", - "@asyncapi/modelina-cli": "^4.0.0-next.48", "@asyncapi/generator": "^1.17.25", + "@asyncapi/modelina-cli": "^4.0.0-next.48", "@asyncapi/openapi-schema-parser": "^3.0.22", "@asyncapi/optimizer": "^1.0.2", "@asyncapi/parser": "^3.1.0", @@ -31,10 +31,11 @@ "chalk": "^4.1.0", "chokidar": "^3.5.2", "fast-levenshtein": "^3.0.0", - "fs-extra": "^11.1.0", + "fs-extra": "^11.2.0", "indent-string": "^4.0.0", "inquirer": "^8.2.0", "js-yaml": "^4.1.0", + "jsonfile": "^6.1.0", "lodash.template": "^4.4.0", "node-fetch": "^2.0.0", "oclif": "^4.2.0", diff --git a/src/commands/new/template.ts b/src/commands/new/template.ts index e8e32a27b79..22332d988c0 100644 --- a/src/commands/new/template.ts +++ b/src/commands/new/template.ts @@ -1,10 +1,12 @@ import { promises as fPromises } from 'fs'; import Command from '../../core/base'; import { resolve, join } from 'path'; -import {load } from '../../core/models/SpecificationFile'; +import { load } from '../../core/models/SpecificationFile'; import fs from 'fs-extra'; import { templateFlags } from '../../core/flags/new/template.flags'; import { cyan, gray } from 'picocolors'; +import jsonfile from 'jsonfile'; +import path from 'path'; export const successMessage = (projectName: string) => `🎉 Your template is succesfully created @@ -38,10 +40,15 @@ export default class template extends Command { const { name: projectName, template: templateName, + renderer: rendererName } = flags; const PROJECT_DIRECTORY = join(process.cwd(), projectName); + if (rendererName!=='nunjucks' && rendererName!=='react') { + this.error('Invalid flag check the flag name of renderer'); + } + const templateDirectory = resolve( __dirname, '../../../assets/create-template/templates/', @@ -74,7 +81,7 @@ export default class template extends Command { } try { - await fs.copy(templateDirectory, PROJECT_DIRECTORY); + await copyAndModify(templateDirectory, PROJECT_DIRECTORY,rendererName, projectName); this.log(successMessage(projectName)); } catch (err) { this.error( @@ -86,3 +93,25 @@ export default class template extends Command { } } } + +async function copyAndModify(templateDirectory:string, PROJECT_DIRECTORY:string, rendererName:string, projectName:string) { + const packageJsonPath = path.join(templateDirectory, 'package.json'); + try { + await fs.copy(templateDirectory, PROJECT_DIRECTORY, { + filter: (src) => { + return !src.endsWith('package.json'); + } + }); + const packageData = await jsonfile.readFile(packageJsonPath); + if ((packageData.generator && 'renderer' in packageData.generator)) { + packageData.generator.renderer = rendererName; + } + if (packageData.name) { + packageData.name = projectName; + } + + await fs.writeJSON(`${PROJECT_DIRECTORY}/package.json`, packageData, { spaces: 2 }); + } catch (err) { + console.error('Error:', err); + } +} diff --git a/src/core/flags/new/template.flags.ts b/src/core/flags/new/template.flags.ts index 5aebde1866e..14213ab72b3 100644 --- a/src/core/flags/new/template.flags.ts +++ b/src/core/flags/new/template.flags.ts @@ -23,5 +23,9 @@ export const templateFlags = () => { description: 'Force writing of the generated files to given directory even if it is a git repo with unstaged files or not empty dir (defaults to false)', }), + renderer: Flags.string({ + default: 'react', + description: 'Creating a template for particular engine, Its value can be either react or nunjucks.' + }) }; };