mirror of
https://github.com/nvms/esr.git
synced 2025-12-16 06:40:52 +00:00
139 lines
3.2 KiB
Go
139 lines
3.2 KiB
Go
package esr
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
var indexHtml = `<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="color-scheme" content="light dark">
|
|
<title>Application</title>
|
|
{{ css }}
|
|
</head>
|
|
<body>
|
|
<div id="app"></div>
|
|
{{ livereload }}
|
|
{{ js }}
|
|
</body>
|
|
</html>`
|
|
|
|
var defaultConfig = `bundle: true
|
|
platform: browser
|
|
format: esm
|
|
sourcemap: true
|
|
outdir: public
|
|
|
|
watch:
|
|
paths: ['src/**/*.{ts,tsx,js,jsx,css,scss,html}', 'public/index.html']
|
|
|
|
serve:
|
|
html: public/index.html
|
|
port: 1234
|
|
|
|
build:
|
|
minify: true
|
|
minifyWhitespace: true
|
|
minifyIdentifiers: true
|
|
sourcemap: false
|
|
|
|
run:
|
|
runtime: bun
|
|
sourcemap: false
|
|
|
|
jsx: automatic
|
|
jsxFactory: React.createElement
|
|
`
|
|
|
|
func CreateDefaultPackageJson() string {
|
|
cwd, err := os.Getwd()
|
|
if err != nil {
|
|
Die("failed to get current working directory: %v", err)
|
|
}
|
|
|
|
return `{
|
|
"name": "` + filepath.Base(cwd) + `",
|
|
"version": "0.0.1",
|
|
"scripts": {
|
|
"serve": "esr --serve src/index.ts",
|
|
"build": "esr --build src/index.ts",
|
|
"build:watch": "esr --build --watch src/index.ts",
|
|
"run": "esr --run src/index.ts",
|
|
"run:watch": "esr --run --watch src/index.ts"
|
|
},
|
|
"keywords": [],
|
|
"author": "",
|
|
"license": "ISC"
|
|
}`
|
|
}
|
|
|
|
func InitProject() {
|
|
cwd, err := os.Getwd()
|
|
if err != nil {
|
|
Die("failed to get current working directory: %v", err)
|
|
}
|
|
|
|
cwdFiles, err := os.ReadDir(cwd)
|
|
if err != nil {
|
|
Die("failed to read current working directory: %v", err)
|
|
}
|
|
|
|
if len(cwdFiles) > 0 {
|
|
Die("current working directory is not empty")
|
|
}
|
|
|
|
publicDir := filepath.Join(cwd, "public")
|
|
if err := os.MkdirAll(publicDir, 0755); err != nil {
|
|
Die("failed to create public directory: %v", err)
|
|
}
|
|
|
|
indexHtmlPath := filepath.Join(publicDir, "index.html")
|
|
if err := os.WriteFile(indexHtmlPath, []byte(indexHtml), 0644); err != nil {
|
|
Die("failed to write index.html: %v", err)
|
|
}
|
|
|
|
srcDir := filepath.Join(cwd, "src")
|
|
if err := os.MkdirAll(srcDir, 0755); err != nil {
|
|
Die("failed to create src directory: %v", err)
|
|
}
|
|
|
|
indexTsPath := filepath.Join(srcDir, "index.ts")
|
|
if err := os.WriteFile(indexTsPath, []byte("console.log('Hello, world!')\n"), 0644); err != nil {
|
|
Die("failed to write index.ts: %v", err)
|
|
}
|
|
|
|
esrYmlPath := filepath.Join(cwd, ".esr.yml")
|
|
if err := os.WriteFile(esrYmlPath, []byte(defaultConfig), 0644); err != nil {
|
|
Die("failed to write .esr.yml: %v", err)
|
|
}
|
|
|
|
packageJsonPath := filepath.Join(cwd, "package.json")
|
|
if err := os.WriteFile(packageJsonPath, []byte(CreateDefaultPackageJson()), 0644); err != nil {
|
|
Die("failed to write package.json: %v", err)
|
|
}
|
|
|
|
tsconfigJsonPath := filepath.Join(cwd, "tsconfig.json")
|
|
if err := os.WriteFile(tsconfigJsonPath, []byte(`{
|
|
"compilerOptions": {
|
|
"module": "ES2022",
|
|
"target": "ESNext",
|
|
"allowSyntheticDefaultImports": true
|
|
}
|
|
}`), 0644); err != nil {
|
|
Die("failed to write tsconfig.json: %v", err)
|
|
}
|
|
|
|
prettierRcPath := filepath.Join(cwd, ".prettierrc")
|
|
if err := os.WriteFile(prettierRcPath, []byte(`{
|
|
"printWidth": 80,
|
|
"semi": true,
|
|
"singleQuote": false,
|
|
"tabWidth": 2
|
|
}`), 0644); err != nil {
|
|
Die("failed to write .prettierrc: %v", err)
|
|
}
|
|
}
|