refactor: restore root-level development workflow with enhanced tooling
- Add root package.json with development scripts and dependencies - Move scripts/ from lib back to root for intuitive developer experience - Clean lib/package.json to contain only runtime dependencies - Add comprehensive justfile with cross-platform command shortcuts - Update README.md with new development workflow instructions - Maintain lib as clean, publishable package while enabling root-level commands
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -73,4 +73,4 @@ insertr-cli/build-errors.log
|
|||||||
.local/
|
.local/
|
||||||
|
|
||||||
# Demo site generated files
|
# Demo site generated files
|
||||||
demo-site/insertr.js
|
demo-site/insertr.js# Node.js root dependencies
|
||||||
|
|||||||
50
README.md
50
README.md
@@ -63,28 +63,55 @@ Containers with `class="insertr"` automatically make their viable children edita
|
|||||||
|
|
||||||
## 🛠️ Quick Start
|
## 🛠️ Quick Start
|
||||||
|
|
||||||
### **Development Setup**
|
### **Using Just (Recommended)**
|
||||||
|
```bash
|
||||||
|
# Clone and setup
|
||||||
|
git clone <repository-url>
|
||||||
|
cd insertr
|
||||||
|
|
||||||
|
# Install dependencies and start development
|
||||||
|
just dev-setup
|
||||||
|
|
||||||
|
# Or step by step:
|
||||||
|
just install # Install all dependencies
|
||||||
|
just build-lib # Build the JavaScript library
|
||||||
|
just dev # Start development server
|
||||||
|
```
|
||||||
|
|
||||||
|
### **Using NPM directly**
|
||||||
```bash
|
```bash
|
||||||
# Clone repository
|
# Clone repository
|
||||||
git clone <repository-url>
|
git clone <repository-url>
|
||||||
cd insertr
|
cd insertr
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
npm run install:all
|
||||||
|
|
||||||
# Start development server with live reload
|
# Start development server with live reload
|
||||||
cd insertr-cli
|
npm run dev
|
||||||
air
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Visit **http://localhost:3000** to see enhanced demo site with live reload.
|
Visit **http://localhost:3000** to see enhanced demo site with live reload.
|
||||||
|
|
||||||
|
### **Available Commands**
|
||||||
|
```bash
|
||||||
|
just --list # Show all available commands
|
||||||
|
just dev # Start development server
|
||||||
|
just build # Build library + CLI
|
||||||
|
just air # Start Air hot-reload for CLI
|
||||||
|
just check # Validate project setup
|
||||||
|
just clean # Clean build artifacts
|
||||||
|
```
|
||||||
|
|
||||||
### **Parse Existing Site**
|
### **Parse Existing Site**
|
||||||
```bash
|
```bash
|
||||||
cd insertr-cli
|
|
||||||
|
|
||||||
# Analyze HTML for editable elements
|
# Analyze HTML for editable elements
|
||||||
go run main.go parse ../demo-site/
|
just parse
|
||||||
|
# or: cd insertr-cli && go run main.go parse ../demo-site/
|
||||||
|
|
||||||
# Development server with parsing
|
# Development server with parsing
|
||||||
go run main.go servedev -i ../demo-site -p 3000
|
just servedev
|
||||||
|
# or: cd insertr-cli && go run main.go servedev -i ../demo-site -p 3000
|
||||||
```
|
```
|
||||||
|
|
||||||
## 📊 Parser Output Example
|
## 📊 Parser Output Example
|
||||||
@@ -180,10 +207,13 @@ Static Site Build → Insertr CLI Enhancement → Enhanced Deployment
|
|||||||
|
|
||||||
### **Live Development with Hot Reload**
|
### **Live Development with Hot Reload**
|
||||||
```bash
|
```bash
|
||||||
cd insertr-cli
|
|
||||||
|
|
||||||
# 🔥 Hot Reload: watches BOTH library AND CLI
|
# 🔥 Hot Reload: watches BOTH library AND CLI
|
||||||
air
|
just air
|
||||||
|
# or: cd insertr-cli && air
|
||||||
|
|
||||||
|
# Alternative: Watch library only
|
||||||
|
just watch
|
||||||
|
# or: cd lib && npm run dev
|
||||||
|
|
||||||
# Library changes: lib/src/**/*.js → Auto rebuild library + CLI
|
# Library changes: lib/src/**/*.js → Auto rebuild library + CLI
|
||||||
# CLI changes: cmd/**/*.go → Auto rebuild CLI
|
# CLI changes: cmd/**/*.go → Auto rebuild CLI
|
||||||
|
|||||||
93
justfile
Normal file
93
justfile
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
# Insertr Development Commands
|
||||||
|
# Use `just <command>` to run any of these tasks
|
||||||
|
|
||||||
|
# Default recipe - show available commands
|
||||||
|
default:
|
||||||
|
@just --list
|
||||||
|
|
||||||
|
# Install all dependencies (root + lib)
|
||||||
|
install:
|
||||||
|
npm install
|
||||||
|
cd lib && npm install
|
||||||
|
|
||||||
|
# Start development server with live reload
|
||||||
|
dev:
|
||||||
|
npm run dev
|
||||||
|
|
||||||
|
# Start development server for about page
|
||||||
|
dev-about:
|
||||||
|
npm run dev:about
|
||||||
|
|
||||||
|
# Check project status and validate setup
|
||||||
|
check:
|
||||||
|
npm run dev:check
|
||||||
|
|
||||||
|
# Show demo instructions
|
||||||
|
demo:
|
||||||
|
npm run dev:demo
|
||||||
|
|
||||||
|
# Build the entire project (library + CLI)
|
||||||
|
build:
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
# Build only the JavaScript library
|
||||||
|
build-lib:
|
||||||
|
npm run build:lib
|
||||||
|
|
||||||
|
# Watch library files for changes (auto-rebuild)
|
||||||
|
watch:
|
||||||
|
cd lib && npm run dev
|
||||||
|
|
||||||
|
# Start Air hot-reload for Go CLI development
|
||||||
|
air:
|
||||||
|
cd insertr-cli && air
|
||||||
|
|
||||||
|
# Build Go CLI only
|
||||||
|
build-cli:
|
||||||
|
cd insertr-cli && go build -o insertr
|
||||||
|
|
||||||
|
# Run CLI help
|
||||||
|
cli-help:
|
||||||
|
cd insertr-cli && go run main.go --help
|
||||||
|
|
||||||
|
# Parse demo site with CLI
|
||||||
|
parse:
|
||||||
|
cd insertr-cli && go run main.go parse ../demo-site/
|
||||||
|
|
||||||
|
# Start CLI development server
|
||||||
|
servedev:
|
||||||
|
cd insertr-cli && go run main.go servedev -i ../demo-site -p 3000
|
||||||
|
|
||||||
|
# Clean all build artifacts
|
||||||
|
clean:
|
||||||
|
rm -rf lib/dist
|
||||||
|
rm -rf insertr-cli/insertr
|
||||||
|
rm -rf node_modules
|
||||||
|
rm -rf lib/node_modules
|
||||||
|
|
||||||
|
# Lint code (placeholder for now)
|
||||||
|
lint:
|
||||||
|
npm run lint
|
||||||
|
|
||||||
|
# Run tests (placeholder for now)
|
||||||
|
test:
|
||||||
|
npm run test
|
||||||
|
|
||||||
|
# Development workflow: install deps, build lib, start dev server
|
||||||
|
dev-setup: install build-lib dev
|
||||||
|
|
||||||
|
# Production workflow: install deps, build everything
|
||||||
|
prod-build: install build
|
||||||
|
|
||||||
|
# Show project status
|
||||||
|
status:
|
||||||
|
@echo "🏗️ Insertr Project Status"
|
||||||
|
@echo "========================="
|
||||||
|
@echo "📁 Root files:"
|
||||||
|
@ls -la package.json justfile 2>/dev/null || echo " Missing files"
|
||||||
|
@echo "\n📚 Library files:"
|
||||||
|
@ls -la lib/package.json lib/src lib/dist 2>/dev/null || echo " Missing library components"
|
||||||
|
@echo "\n🔧 CLI files:"
|
||||||
|
@ls -la insertr-cli/main.go insertr-cli/insertr 2>/dev/null || echo " Missing CLI components"
|
||||||
|
@echo "\n🌐 Demo site:"
|
||||||
|
@ls -la demo-site/index.html demo-site/about.html 2>/dev/null || echo " Missing demo files"
|
||||||
@@ -14,12 +14,7 @@
|
|||||||
"build:only": "rollup -c",
|
"build:only": "rollup -c",
|
||||||
"copy:demo": "cp dist/insertr.js ../demo-site/insertr.js",
|
"copy:demo": "cp dist/insertr.js ../demo-site/insertr.js",
|
||||||
"watch": "rollup -c -w",
|
"watch": "rollup -c -w",
|
||||||
"dev": "rollup -c -w",
|
"dev": "rollup -c -w"
|
||||||
"serve": "node scripts/dev.js serve",
|
|
||||||
"serve:about": "live-server ../demo-site --port=3000 --open=/about.html",
|
|
||||||
"check": "node scripts/dev.js check",
|
|
||||||
"demo": "node scripts/dev.js demo",
|
|
||||||
"build:all": "node scripts/build.js"
|
|
||||||
},
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"cms",
|
"cms",
|
||||||
@@ -32,7 +27,6 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@rollup/plugin-node-resolve": "^15.0.0",
|
"@rollup/plugin-node-resolve": "^15.0.0",
|
||||||
"@rollup/plugin-terser": "^0.4.0",
|
"@rollup/plugin-terser": "^0.4.0",
|
||||||
"live-server": "^1.2.2",
|
|
||||||
"rollup": "^3.0.0"
|
"rollup": "^3.0.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
2403
package-lock.json
generated
Normal file
2403
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
49
package.json
Normal file
49
package.json
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
"name": "insertr",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "The Tailwind of CMS - Zero-configuration content editing for any static site",
|
||||||
|
"main": "lib/dist/insertr.js",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "node scripts/dev.js serve",
|
||||||
|
"dev:about": "live-server demo-site --port=3000 --open=/about.html",
|
||||||
|
"dev:check": "node scripts/dev.js check",
|
||||||
|
"dev:demo": "node scripts/dev.js demo",
|
||||||
|
"dev:help": "node scripts/dev.js help",
|
||||||
|
"build": "node scripts/build.js",
|
||||||
|
"build:lib": "cd lib && npm run build",
|
||||||
|
"test": "echo 'Test script placeholder - will add tests for insertr.js'",
|
||||||
|
"lint": "echo 'Linting placeholder - will add ESLint'",
|
||||||
|
"serve": "npm run dev",
|
||||||
|
"start": "npm run dev",
|
||||||
|
"install:all": "npm install && cd lib && npm install"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"cms",
|
||||||
|
"headless-cms",
|
||||||
|
"static-site-generator",
|
||||||
|
"content-management",
|
||||||
|
"build-time-enhancement",
|
||||||
|
"zero-config",
|
||||||
|
"go",
|
||||||
|
"javascript"
|
||||||
|
],
|
||||||
|
"author": "Insertr Team",
|
||||||
|
"license": "MIT",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/yourusername/insertr.git"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"live-server": "^1.2.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16.0.0",
|
||||||
|
"npm": ">=8.0.0"
|
||||||
|
},
|
||||||
|
"browserslist": [
|
||||||
|
"defaults",
|
||||||
|
"not IE 11"
|
||||||
|
],
|
||||||
|
"dependencies": {}
|
||||||
|
}
|
||||||
@@ -14,7 +14,7 @@ console.log('🔨 Building Insertr library and CLI...\n');
|
|||||||
// 1. Build the library
|
// 1. Build the library
|
||||||
console.log('📦 Building JavaScript library...');
|
console.log('📦 Building JavaScript library...');
|
||||||
try {
|
try {
|
||||||
execSync('npm run build', { stdio: 'inherit' });
|
execSync('npm run build', { cwd: 'lib', stdio: 'inherit' });
|
||||||
console.log('✅ Library built successfully\n');
|
console.log('✅ Library built successfully\n');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('❌ Library build failed:', error.message);
|
console.error('❌ Library build failed:', error.message);
|
||||||
@@ -23,8 +23,8 @@ try {
|
|||||||
|
|
||||||
// 2. Copy built library to CLI assets
|
// 2. Copy built library to CLI assets
|
||||||
console.log('📁 Copying library to CLI assets...');
|
console.log('📁 Copying library to CLI assets...');
|
||||||
const srcDir = './dist';
|
const srcDir = './lib/dist';
|
||||||
const destDir = '../insertr-cli/pkg/content/assets';
|
const destDir = './insertr-cli/pkg/content/assets';
|
||||||
|
|
||||||
// Ensure destination directory exists
|
// Ensure destination directory exists
|
||||||
fs.mkdirSync(destDir, { recursive: true });
|
fs.mkdirSync(destDir, { recursive: true });
|
||||||
@@ -43,7 +43,7 @@ console.log('📁 Assets copied successfully\n');
|
|||||||
// 3. Build the CLI
|
// 3. Build the CLI
|
||||||
console.log('🔧 Building Go CLI...');
|
console.log('🔧 Building Go CLI...');
|
||||||
try {
|
try {
|
||||||
execSync('go build -o insertr', { cwd: '../insertr-cli', stdio: 'inherit' });
|
execSync('go build -o insertr', { cwd: './insertr-cli', stdio: 'inherit' });
|
||||||
console.log('✅ CLI built successfully\n');
|
console.log('✅ CLI built successfully\n');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('❌ CLI build failed:', error.message);
|
console.error('❌ CLI build failed:', error.message);
|
||||||
@@ -55,4 +55,4 @@ console.log('📋 What was built:');
|
|||||||
console.log(' • JavaScript library (lib/dist/)');
|
console.log(' • JavaScript library (lib/dist/)');
|
||||||
console.log(' • Go CLI with embedded library (insertr-cli/insertr)');
|
console.log(' • Go CLI with embedded library (insertr-cli/insertr)');
|
||||||
console.log('\n🚀 Ready to use:');
|
console.log('\n🚀 Ready to use:');
|
||||||
console.log(' cd ../insertr-cli && ./insertr --help');
|
console.log(' cd insertr-cli && ./insertr --help');
|
||||||
@@ -21,7 +21,7 @@ const commands = {
|
|||||||
console.log(' ✏️ Client: Click "Login as Client" → "Edit Mode: On"');
|
console.log(' ✏️ Client: Click "Login as Client" → "Edit Mode: On"');
|
||||||
console.log(' 🔧 Developer: View source to see integration\n');
|
console.log(' 🔧 Developer: View source to see integration\n');
|
||||||
|
|
||||||
spawn('npx', ['live-server', '../demo-site', '--port=3000', '--open=/index.html'], {
|
spawn('npx', ['live-server', 'demo-site', '--port=3000', '--open=/index.html'], {
|
||||||
stdio: 'inherit'
|
stdio: 'inherit'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -34,10 +34,10 @@ const commands = {
|
|||||||
|
|
||||||
// Check files exist
|
// Check files exist
|
||||||
const requiredFiles = [
|
const requiredFiles = [
|
||||||
'../demo-site/index.html',
|
'demo-site/index.html',
|
||||||
'../demo-site/about.html',
|
'demo-site/about.html',
|
||||||
'dist/insertr.js',
|
'lib/dist/insertr.js',
|
||||||
'dist/insertr.min.js',
|
'lib/dist/insertr.min.js',
|
||||||
'package.json'
|
'package.json'
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -57,13 +57,13 @@ const commands = {
|
|||||||
console.log('\n📊 Project stats:');
|
console.log('\n📊 Project stats:');
|
||||||
|
|
||||||
// Count editable elements
|
// Count editable elements
|
||||||
const indexContent = fs.readFileSync('../demo-site/index.html', 'utf8');
|
const indexContent = fs.readFileSync('demo-site/index.html', 'utf8');
|
||||||
const aboutContent = fs.readFileSync('../demo-site/about.html', 'utf8');
|
const aboutContent = fs.readFileSync('demo-site/about.html', 'utf8');
|
||||||
const insertrMatches = (indexContent + aboutContent).match(/class="insertr"/g) || [];
|
const insertrMatches = (indexContent + aboutContent).match(/class="insertr"/g) || [];
|
||||||
console.log(` 📝 Editable elements: ${insertrMatches.length}`);
|
console.log(` 📝 Editable elements: ${insertrMatches.length}`);
|
||||||
|
|
||||||
// Check library size
|
// Check library size
|
||||||
const libSize = fs.statSync('dist/insertr.js').size;
|
const libSize = fs.statSync('lib/dist/insertr.js').size;
|
||||||
console.log(` 📦 Library size: ${(libSize / 1024).toFixed(1)}KB`);
|
console.log(` 📦 Library size: ${(libSize / 1024).toFixed(1)}KB`);
|
||||||
|
|
||||||
console.log('\n🚀 Ready to develop! Run: npm run serve');
|
console.log('\n🚀 Ready to develop! Run: npm run serve');
|
||||||
Reference in New Issue
Block a user