leds-spark-lib
Version:
Biblioteca de geração de código
279 lines (270 loc) • 7.41 kB
JavaScript
import fs from "fs";
import { expandToString } from "../../util/template-string.js";
import path from "path";
import { generate as generatePackageLock } from "./packagelock-generator.js";
export function generate(project_abstraction, target_folder) {
fs.writeFileSync(path.join(target_folder, '.browserslistrc'), generateBrowsersList());
fs.writeFileSync(path.join(target_folder, '.editorconfig'), generateEditorConfig());
fs.writeFileSync(path.join(target_folder, '.env.dev'), generateEnvDev());
fs.writeFileSync(path.join(target_folder, '.gitignore'), generateGitIgnore());
fs.writeFileSync(path.join(target_folder, 'components.d.ts'), generateComponentsD());
fs.writeFileSync(path.join(target_folder, 'env.d.ts'), generateEnvD());
fs.writeFileSync(path.join(target_folder, 'package-lock.json'), generatePackageLock(project_abstraction));
fs.writeFileSync(path.join(target_folder, 'package.json'), generatePackage());
fs.writeFileSync(path.join(target_folder, 'tsconfig.app.json'), generateTsConfigApp());
fs.writeFileSync(path.join(target_folder, 'tsconfig.json'), generateTsConfig());
fs.writeFileSync(path.join(target_folder, 'tsconfig.node.json'), generateTsConfigNode());
fs.writeFileSync(path.join(target_folder, 'vite.config.mts'), generateViteConfig());
fs.writeFileSync(path.join(target_folder, 'index.html'), generateIndex(project_abstraction));
}
function generateBrowsersList() {
return expandToString `
> 1%
last 2 versions
not dead
not ie 11
`;
}
function generateEditorConfig() {
return expandToString `
[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue}]
charset = utf-8
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
`;
}
function generateEnvDev() {
return expandToString `
VITE_BACKEND_ADMIN_BASE_URL="https://localhost:3000/api/"
VITE_BACKEND_ADMIN_AUTH_TOKEN=
`;
}
function generateGitIgnore() {
return expandToString `
.DS_Store
node_modules
/dist
.env.local
.env.*.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
`;
}
function generateComponentsD() {
return expandToString `
/* eslint-disable */
// @ts-nocheck
// Generated by unplugin-vue-components
// Read more: https://github.com/vuejs/core/pull/3399
export {}
/* prettier-ignore */
declare module 'vue' {
export interface GlobalComponents {
Card: typeof import('./src/components/Card.vue')['default']
DataTable: typeof import('./src/components/DataTable.vue')['default']
GenericTextInput: typeof import('./src/components/GenericTextInput.vue')['default']
IconNav: typeof import('./src/components/icons/IconNav.vue')['default']
NavGroup: typeof import('./src/components/sidenav/NavGroup.vue')['default']
NavItem: typeof import('./src/components/sidenav/NavItem.vue')['default']
NavMenu: typeof import('./src/components/sidenav/NavMenu.vue')['default']
PButton: typeof import('./src/components/PButton.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
TextInput: typeof import('./src/components/TextInput.vue')['default']
}
}
`;
}
function generateEnvD() {
return expandToString `
/// <reference types="vite/client" />
`;
}
function generatePackage() {
return expandToString `
{
"name": "modularch",
"private": true,
"type": "module",
"version": "0.0.0",
"scripts": {
"dev": "vite --port 5173",
"build": "run-p type-check \"build-only {@}\" --",
"preview": "vite preview",
"build-only": "vite build",
"type-check": "vue-tsc --build --force"
},
"dependencies": {
"@vueuse/integrations": "^13.1.0",
"axios": "^1.8.4",
"pinia": "^3.0.2",
"roboto-fontface": "*",
"universal-cookie": "^7.2.2",
"vue": "^3.4.31",
"vue-router": "^4.5.0"
},
"devDependencies": {
"@tailwindcss/vite": "^4.1.4",
"@tsconfig/node22": "^22.0.0",
"@types/node": "^22.9.0",
"@vitejs/plugin-vue": "^5.1.4",
"@vue/eslint-config-typescript": "^14.1.3",
"@vue/tsconfig": "^0.5.1",
"npm-run-all2": "^7.0.1",
"tailwindcss": "^4.1.4",
"typescript": "~5.6.3",
"unplugin-vue-components": "^0.27.2",
"vite": "^5.4.10",
"vue-tsc": "^2.1.10"
}
}
`;
}
function generateTsConfigApp() {
return expandToString `
{
"extends": "@vue/tsconfig/tsconfig.dom.json",
"include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
"exclude": ["src/**/__tests__/*"],
"compilerOptions": {
"composite": true,
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
},
"lib": ["ES2021", "DOM"],
}
}
`;
}
function generateTsConfig() {
return expandToString `
{
"files": [],
"references": [
{
"path": "./tsconfig.node.json"
},
{
"path": "./tsconfig.app.json"
}
]
}
`;
}
function generateTsConfigNode() {
return expandToString `
{
"extends": "@tsconfig/node22/tsconfig.json",
"include": [
"vite.config.*",
"vitest.config.*",
"cypress.config.*",
"nightwatch.conf.*",
"playwright.config.*"
],
"compilerOptions": {
"composite": true,
"noEmit": true,
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
"module": "ESNext",
"moduleResolution": "Bundler",
"types": ["node"]
}
}
`;
}
function generateViteConfig() {
return expandToString `
// Plugins
import Components from 'unplugin-vue-components/vite'
import Vue from '@vitejs/plugin-vue'
// import Vuetify, { transformAssetUrls } from 'vite-plugin-vuetify'
// import ViteFonts from 'unplugin-fonts/vite'
import tailwindcss from '@tailwindcss/vite'
// Utilities
import { defineConfig } from 'vite'
import { fileURLToPath, URL } from 'node:url'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
tailwindcss(),
Vue({
// template: { transformAssetUrls },
}),
// https://github.com/vuetifyjs/vuetify-loader/tree/master/packages/vite-plugin#readme
// Vuetify(),
Components(),
/* ViteFonts({
google: {
families: [{
name: 'Roboto',
styles: 'wght@100;300;400;500;700;900',
}],
},
}), */
],
define: { 'process.env': {} },
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)),
},
extensions: [
'.js',
'.json',
'.jsx',
'.mjs',
'.ts',
'.tsx',
'.vue',
],
},
server: {
port: 3000,
},
/* css: {
preprocessorOptions: {
sass: {
api: 'modern-compiler',
},
},
}, */
})
`;
}
function generateIndex(project_abstraction) {
return expandToString `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/src/assets/style.css">
<title>${project_abstraction.getProjectName()}</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
`;
}
//# sourceMappingURL=helpers-generator.js.map