@linyjs/cli 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +57 -6
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +55 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/index.js +0 -0
- package/package.json +3 -2
- package/src/commands/dev.ts +66 -6
- package/src/commands/init.ts +67 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,UAAU,UAAU;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,UAAU,UAAU;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAwCD;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,UAAU,iBA2IlD"}
|
package/dist/commands/dev.js
CHANGED
|
@@ -8,12 +8,46 @@ import path from 'path';
|
|
|
8
8
|
import chalk from 'chalk';
|
|
9
9
|
import ora from 'ora';
|
|
10
10
|
import { packPlugin } from './pack.js';
|
|
11
|
+
/**
|
|
12
|
+
* Load .env file and return environment variables
|
|
13
|
+
*/
|
|
14
|
+
function loadEnvConfig(projectRoot) {
|
|
15
|
+
const envPath = path.join(projectRoot, '.env');
|
|
16
|
+
if (!fs.existsSync(envPath)) {
|
|
17
|
+
// Try parent directories (monorepo structure)
|
|
18
|
+
const parentEnvPath = path.join(projectRoot, '..', '.env');
|
|
19
|
+
if (fs.existsSync(parentEnvPath)) {
|
|
20
|
+
return parseEnvFile(parentEnvPath);
|
|
21
|
+
}
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
return parseEnvFile(envPath);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Parse .env file content
|
|
28
|
+
*/
|
|
29
|
+
function parseEnvFile(envPath) {
|
|
30
|
+
const content = fs.readFileSync(envPath, 'utf-8');
|
|
31
|
+
const config = {};
|
|
32
|
+
content.split('\n').forEach(line => {
|
|
33
|
+
line = line.trim();
|
|
34
|
+
if (line && !line.startsWith('#')) {
|
|
35
|
+
const [key, ...valueParts] = line.split('=');
|
|
36
|
+
if (key && valueParts.length > 0) {
|
|
37
|
+
config[key.trim()] = valueParts.join('=').trim();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return config;
|
|
42
|
+
}
|
|
11
43
|
/**
|
|
12
44
|
* Execute dev workflow: pack -> copy -> register
|
|
13
45
|
*/
|
|
14
46
|
export async function devPlugin(options) {
|
|
15
47
|
const projectRoot = process.cwd();
|
|
16
48
|
console.log(chalk.blue('🚀 Ling Plugin Dev Mode\n'));
|
|
49
|
+
// Load environment configuration
|
|
50
|
+
const envConfig = loadEnvConfig(projectRoot);
|
|
17
51
|
// Step 1: Pack the plugin
|
|
18
52
|
const spinner1 = ora('Packing plugin...').start();
|
|
19
53
|
try {
|
|
@@ -34,11 +68,14 @@ export async function devPlugin(options) {
|
|
|
34
68
|
const mpkPath = path.join(tempOutputDir, mpkFile);
|
|
35
69
|
spinner1.succeed(`Plugin packed: ${mpkFile}`);
|
|
36
70
|
// Step 2: Determine target extensions directory
|
|
37
|
-
const targetDir = options.target || findExtensionsDir(projectRoot);
|
|
71
|
+
const targetDir = options.target || findExtensionsDir(projectRoot, envConfig);
|
|
38
72
|
if (!targetDir) {
|
|
39
73
|
spinner1.fail('Cannot find extensions directory');
|
|
40
|
-
console.error(chalk.red('\nPlease specify target directory
|
|
41
|
-
console.error(chalk.gray('
|
|
74
|
+
console.error(chalk.red('\nPlease specify target directory:'));
|
|
75
|
+
console.error(chalk.gray('\nOption 1: Use --target flag'));
|
|
76
|
+
console.error(chalk.gray(' npx @linyjs/cli dev --target /path/to/extensions'));
|
|
77
|
+
console.error(chalk.gray('\nOption 2: Add to .env file'));
|
|
78
|
+
console.error(chalk.gray(' EXTENSIONS_DIR=/path/to/ling/packages/ssr/extensions'));
|
|
42
79
|
process.exit(1);
|
|
43
80
|
}
|
|
44
81
|
// Step 3: Extract and copy to extensions
|
|
@@ -118,10 +155,24 @@ export async function devPlugin(options) {
|
|
|
118
155
|
}
|
|
119
156
|
}
|
|
120
157
|
/**
|
|
121
|
-
* Find extensions directory
|
|
158
|
+
* Find extensions directory with priority:
|
|
159
|
+
* 1. --target command line option
|
|
160
|
+
* 2. EXTENSIONS_DIR from .env file
|
|
161
|
+
* 3. Auto-detect common paths
|
|
122
162
|
*/
|
|
123
|
-
function findExtensionsDir(projectRoot) {
|
|
124
|
-
//
|
|
163
|
+
function findExtensionsDir(projectRoot, envConfig) {
|
|
164
|
+
// Priority 1: Environment variable from .env
|
|
165
|
+
const envExtensionsDir = envConfig.EXTENSIONS_DIR || envConfig.EXTENSIONS_PATH;
|
|
166
|
+
if (envExtensionsDir) {
|
|
167
|
+
// Resolve relative path from project root
|
|
168
|
+
const resolvedPath = path.isAbsolute(envExtensionsDir)
|
|
169
|
+
? envExtensionsDir
|
|
170
|
+
: path.join(projectRoot, envExtensionsDir);
|
|
171
|
+
if (fs.existsSync(resolvedPath)) {
|
|
172
|
+
return resolvedPath;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Priority 2: Auto-detect common paths (monorepo structure)
|
|
125
176
|
const candidates = [
|
|
126
177
|
path.join(projectRoot, '..', 'ssr', 'extensions'),
|
|
127
178
|
path.join(projectRoot, '..', '..', 'packages', 'ssr', 'extensions'),
|
package/dist/commands/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAOvC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAmB;IACjD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAElC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAErD,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;IAElD,IAAI,CAAC;QACH,oCAAoC;QACpC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAE1D,MAAM,UAAU,CAAC;YACf,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QAEH,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAE/E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAElD,QAAQ,CAAC,OAAO,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC;QAE9C,gDAAgD;QAChD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,IAAI,iBAAiB,CAAC,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,WAAW,iBA6FpD"}
|
package/dist/commands/init.js
CHANGED
|
@@ -22,15 +22,45 @@ export async function initPlugin(options) {
|
|
|
22
22
|
}
|
|
23
23
|
const spinner1 = ora('Downloading template from npm...').start();
|
|
24
24
|
try {
|
|
25
|
-
//
|
|
26
|
-
|
|
25
|
+
// Method 1: Use npx to download and extract template
|
|
26
|
+
// This downloads the package and extracts the default-template directory
|
|
27
|
+
const tempDir = path.join(process.cwd(), '.ling-init-temp');
|
|
28
|
+
// Clean up any existing temp directory
|
|
29
|
+
if (fs.existsSync(tempDir)) {
|
|
30
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
31
|
+
}
|
|
32
|
+
// Download the package using npm pack
|
|
33
|
+
const packageName = '@linyjs/plugin-templates';
|
|
34
|
+
const packCommand = `npm pack ${packageName}@latest --pack-destination="${tempDir}"`;
|
|
27
35
|
if (options.verbose) {
|
|
28
|
-
console.log(chalk.gray('Running:'),
|
|
36
|
+
console.log(chalk.gray('Running:'), packCommand);
|
|
29
37
|
}
|
|
30
|
-
|
|
38
|
+
fs.mkdirSync(tempDir, { recursive: true });
|
|
39
|
+
execSync(packCommand, {
|
|
31
40
|
stdio: options.verbose ? 'inherit' : 'pipe',
|
|
32
41
|
cwd: process.cwd()
|
|
33
42
|
});
|
|
43
|
+
// Find the downloaded .tgz file
|
|
44
|
+
const tgzFiles = fs.readdirSync(tempDir).filter(f => f.endsWith('.tgz'));
|
|
45
|
+
if (tgzFiles.length === 0) {
|
|
46
|
+
throw new Error('Failed to download template package');
|
|
47
|
+
}
|
|
48
|
+
const tgzFile = path.join(tempDir, tgzFiles[0]);
|
|
49
|
+
// Extract the template
|
|
50
|
+
const extractCommand = `tar -xzf "${tgzFile}" -C "${tempDir}"`;
|
|
51
|
+
execSync(extractCommand, {
|
|
52
|
+
stdio: options.verbose ? 'inherit' : 'pipe'
|
|
53
|
+
});
|
|
54
|
+
// The extracted content is in tempDir/package/
|
|
55
|
+
const extractedPackageDir = path.join(tempDir, 'package');
|
|
56
|
+
const templateDir = path.join(extractedPackageDir, 'default-template');
|
|
57
|
+
if (!fs.existsSync(templateDir)) {
|
|
58
|
+
throw new Error('Template directory not found in package');
|
|
59
|
+
}
|
|
60
|
+
// Copy template to target directory
|
|
61
|
+
copyDirectory(templateDir, absolutePath);
|
|
62
|
+
// Clean up temp directory
|
|
63
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
34
64
|
spinner1.succeed('Template downloaded');
|
|
35
65
|
// Show next steps
|
|
36
66
|
console.log('\n' + chalk.green('✓ Project created successfully!\n'));
|
|
@@ -57,4 +87,25 @@ export async function initPlugin(options) {
|
|
|
57
87
|
process.exit(1);
|
|
58
88
|
}
|
|
59
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Recursively copy directory contents
|
|
92
|
+
*/
|
|
93
|
+
function copyDirectory(src, dest) {
|
|
94
|
+
// Create destination directory
|
|
95
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
96
|
+
// Read source directory
|
|
97
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
98
|
+
for (const entry of entries) {
|
|
99
|
+
const srcPath = path.join(src, entry.name);
|
|
100
|
+
const destPath = path.join(dest, entry.name);
|
|
101
|
+
if (entry.isDirectory()) {
|
|
102
|
+
// Recursively copy subdirectory
|
|
103
|
+
copyDirectory(srcPath, destPath);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
// Copy file
|
|
107
|
+
fs.copyFileSync(srcPath, destPath);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
60
111
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAOzC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAoB;IACnD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IAE5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAE5D,oCAAoC;IACpC,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,SAAS,kBAAkB,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,kCAAkC,CAAC,CAAC,KAAK,EAAE,CAAC;IAEjE,IAAI,CAAC;QACH,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAOzC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAoB;IACnD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IAE5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAE5D,oCAAoC;IACpC,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,SAAS,kBAAkB,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,kCAAkC,CAAC,CAAC,KAAK,EAAE,CAAC;IAEjE,IAAI,CAAC;QACH,qDAAqD;QACrD,yEAAyE;QACzE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAE5D,uCAAuC;QACvC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,sCAAsC;QACtC,MAAM,WAAW,GAAG,0BAA0B,CAAC;QAC/C,MAAM,WAAW,GAAG,YAAY,WAAW,+BAA+B,OAAO,GAAG,CAAC;QAErF,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC;QACnD,CAAC;QAED,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,QAAQ,CAAC,WAAW,EAAE;YACpB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;YAC3C,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;SACnB,CAAC,CAAC;QAEH,gCAAgC;QAChC,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACzE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhD,uBAAuB;QACvB,MAAM,cAAc,GAAG,aAAa,OAAO,SAAS,OAAO,GAAG,CAAC;QAC/D,QAAQ,CAAC,cAAc,EAAE;YACvB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;SAC5C,CAAC,CAAC;QAEH,+CAA+C;QAC/C,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;QAEvE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,oCAAoC;QACpC,aAAa,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAEzC,0BAA0B;QAC1B,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAErD,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAExC,kBAAkB;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,MAAM,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAE5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,uFAAuF,CAAC,CAAC;QACrG,OAAO,CAAC,GAAG,CAAC,0FAA0F,CAAC,CAAC;IAE1G,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC1C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACrF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAChE,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACpD,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,GAAW,EAAE,IAAY;IAC9C,+BAA+B;IAC/B,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAExC,wBAAwB;IACxB,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,gCAAgC;YAChC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,YAAY;YACZ,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/index.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@linyjs/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"ling": "./dist/index.js"
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
"chalk": "^5.0.0",
|
|
18
18
|
"fs-extra": "^11.0.0",
|
|
19
19
|
"ora": "^7.0.0",
|
|
20
|
-
"esbuild": "^0.20.0"
|
|
20
|
+
"esbuild": "^0.20.0",
|
|
21
|
+
"dotenv": "^16.4.0"
|
|
21
22
|
},
|
|
22
23
|
"devDependencies": {
|
|
23
24
|
"typescript": "^5.7.0",
|
package/src/commands/dev.ts
CHANGED
|
@@ -15,6 +15,44 @@ interface DevOptions {
|
|
|
15
15
|
verbose: boolean;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Load .env file and return environment variables
|
|
20
|
+
*/
|
|
21
|
+
function loadEnvConfig(projectRoot: string): Record<string, string> {
|
|
22
|
+
const envPath = path.join(projectRoot, '.env');
|
|
23
|
+
|
|
24
|
+
if (!fs.existsSync(envPath)) {
|
|
25
|
+
// Try parent directories (monorepo structure)
|
|
26
|
+
const parentEnvPath = path.join(projectRoot, '..', '.env');
|
|
27
|
+
if (fs.existsSync(parentEnvPath)) {
|
|
28
|
+
return parseEnvFile(parentEnvPath);
|
|
29
|
+
}
|
|
30
|
+
return {};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return parseEnvFile(envPath);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Parse .env file content
|
|
38
|
+
*/
|
|
39
|
+
function parseEnvFile(envPath: string): Record<string, string> {
|
|
40
|
+
const content = fs.readFileSync(envPath, 'utf-8');
|
|
41
|
+
const config: Record<string, string> = {};
|
|
42
|
+
|
|
43
|
+
content.split('\n').forEach(line => {
|
|
44
|
+
line = line.trim();
|
|
45
|
+
if (line && !line.startsWith('#')) {
|
|
46
|
+
const [key, ...valueParts] = line.split('=');
|
|
47
|
+
if (key && valueParts.length > 0) {
|
|
48
|
+
config[key.trim()] = valueParts.join('=').trim();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
return config;
|
|
54
|
+
}
|
|
55
|
+
|
|
18
56
|
/**
|
|
19
57
|
* Execute dev workflow: pack -> copy -> register
|
|
20
58
|
*/
|
|
@@ -23,6 +61,9 @@ export async function devPlugin(options: DevOptions) {
|
|
|
23
61
|
|
|
24
62
|
console.log(chalk.blue('🚀 Ling Plugin Dev Mode\n'));
|
|
25
63
|
|
|
64
|
+
// Load environment configuration
|
|
65
|
+
const envConfig = loadEnvConfig(projectRoot);
|
|
66
|
+
|
|
26
67
|
// Step 1: Pack the plugin
|
|
27
68
|
const spinner1 = ora('Packing plugin...').start();
|
|
28
69
|
|
|
@@ -50,12 +91,15 @@ export async function devPlugin(options: DevOptions) {
|
|
|
50
91
|
spinner1.succeed(`Plugin packed: ${mpkFile}`);
|
|
51
92
|
|
|
52
93
|
// Step 2: Determine target extensions directory
|
|
53
|
-
const targetDir = options.target || findExtensionsDir(projectRoot);
|
|
94
|
+
const targetDir = options.target || findExtensionsDir(projectRoot, envConfig);
|
|
54
95
|
|
|
55
96
|
if (!targetDir) {
|
|
56
97
|
spinner1.fail('Cannot find extensions directory');
|
|
57
|
-
console.error(chalk.red('\nPlease specify target directory
|
|
58
|
-
console.error(chalk.gray('
|
|
98
|
+
console.error(chalk.red('\nPlease specify target directory:'));
|
|
99
|
+
console.error(chalk.gray('\nOption 1: Use --target flag'));
|
|
100
|
+
console.error(chalk.gray(' npx @linyjs/cli dev --target /path/to/extensions'));
|
|
101
|
+
console.error(chalk.gray('\nOption 2: Add to .env file'));
|
|
102
|
+
console.error(chalk.gray(' EXTENSIONS_DIR=/path/to/ling/packages/ssr/extensions'));
|
|
59
103
|
process.exit(1);
|
|
60
104
|
}
|
|
61
105
|
|
|
@@ -154,10 +198,26 @@ export async function devPlugin(options: DevOptions) {
|
|
|
154
198
|
}
|
|
155
199
|
|
|
156
200
|
/**
|
|
157
|
-
* Find extensions directory
|
|
201
|
+
* Find extensions directory with priority:
|
|
202
|
+
* 1. --target command line option
|
|
203
|
+
* 2. EXTENSIONS_DIR from .env file
|
|
204
|
+
* 3. Auto-detect common paths
|
|
158
205
|
*/
|
|
159
|
-
function findExtensionsDir(projectRoot: string): string | null {
|
|
160
|
-
//
|
|
206
|
+
function findExtensionsDir(projectRoot: string, envConfig: Record<string, string>): string | null {
|
|
207
|
+
// Priority 1: Environment variable from .env
|
|
208
|
+
const envExtensionsDir = envConfig.EXTENSIONS_DIR || envConfig.EXTENSIONS_PATH;
|
|
209
|
+
if (envExtensionsDir) {
|
|
210
|
+
// Resolve relative path from project root
|
|
211
|
+
const resolvedPath = path.isAbsolute(envExtensionsDir)
|
|
212
|
+
? envExtensionsDir
|
|
213
|
+
: path.join(projectRoot, envExtensionsDir);
|
|
214
|
+
|
|
215
|
+
if (fs.existsSync(resolvedPath)) {
|
|
216
|
+
return resolvedPath;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Priority 2: Auto-detect common paths (monorepo structure)
|
|
161
221
|
const candidates = [
|
|
162
222
|
path.join(projectRoot, '..', 'ssr', 'extensions'),
|
|
163
223
|
path.join(projectRoot, '..', '..', 'packages', 'ssr', 'extensions'),
|
package/src/commands/init.ts
CHANGED
|
@@ -33,18 +33,57 @@ export async function initPlugin(options: InitOptions) {
|
|
|
33
33
|
const spinner1 = ora('Downloading template from npm...').start();
|
|
34
34
|
|
|
35
35
|
try {
|
|
36
|
-
//
|
|
37
|
-
|
|
36
|
+
// Method 1: Use npx to download and extract template
|
|
37
|
+
// This downloads the package and extracts the default-template directory
|
|
38
|
+
const tempDir = path.join(process.cwd(), '.ling-init-temp');
|
|
39
|
+
|
|
40
|
+
// Clean up any existing temp directory
|
|
41
|
+
if (fs.existsSync(tempDir)) {
|
|
42
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Download the package using npm pack
|
|
46
|
+
const packageName = '@linyjs/plugin-templates';
|
|
47
|
+
const packCommand = `npm pack ${packageName}@latest --pack-destination="${tempDir}"`;
|
|
38
48
|
|
|
39
49
|
if (options.verbose) {
|
|
40
|
-
console.log(chalk.gray('Running:'),
|
|
50
|
+
console.log(chalk.gray('Running:'), packCommand);
|
|
41
51
|
}
|
|
42
52
|
|
|
43
|
-
|
|
53
|
+
fs.mkdirSync(tempDir, { recursive: true });
|
|
54
|
+
execSync(packCommand, {
|
|
44
55
|
stdio: options.verbose ? 'inherit' : 'pipe',
|
|
45
56
|
cwd: process.cwd()
|
|
46
57
|
});
|
|
47
58
|
|
|
59
|
+
// Find the downloaded .tgz file
|
|
60
|
+
const tgzFiles = fs.readdirSync(tempDir).filter(f => f.endsWith('.tgz'));
|
|
61
|
+
if (tgzFiles.length === 0) {
|
|
62
|
+
throw new Error('Failed to download template package');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const tgzFile = path.join(tempDir, tgzFiles[0]);
|
|
66
|
+
|
|
67
|
+
// Extract the template
|
|
68
|
+
const extractCommand = `tar -xzf "${tgzFile}" -C "${tempDir}"`;
|
|
69
|
+
execSync(extractCommand, {
|
|
70
|
+
stdio: options.verbose ? 'inherit' : 'pipe'
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// The extracted content is in tempDir/package/
|
|
74
|
+
const extractedPackageDir = path.join(tempDir, 'package');
|
|
75
|
+
const templateDir = path.join(extractedPackageDir, 'default-template');
|
|
76
|
+
|
|
77
|
+
if (!fs.existsSync(templateDir)) {
|
|
78
|
+
throw new Error('Template directory not found in package');
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Copy template to target directory
|
|
82
|
+
copyDirectory(templateDir, absolutePath);
|
|
83
|
+
|
|
84
|
+
// Clean up temp directory
|
|
85
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
86
|
+
|
|
48
87
|
spinner1.succeed('Template downloaded');
|
|
49
88
|
|
|
50
89
|
// Show next steps
|
|
@@ -73,3 +112,27 @@ export async function initPlugin(options: InitOptions) {
|
|
|
73
112
|
process.exit(1);
|
|
74
113
|
}
|
|
75
114
|
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Recursively copy directory contents
|
|
118
|
+
*/
|
|
119
|
+
function copyDirectory(src: string, dest: string): void {
|
|
120
|
+
// Create destination directory
|
|
121
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
122
|
+
|
|
123
|
+
// Read source directory
|
|
124
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
125
|
+
|
|
126
|
+
for (const entry of entries) {
|
|
127
|
+
const srcPath = path.join(src, entry.name);
|
|
128
|
+
const destPath = path.join(dest, entry.name);
|
|
129
|
+
|
|
130
|
+
if (entry.isDirectory()) {
|
|
131
|
+
// Recursively copy subdirectory
|
|
132
|
+
copyDirectory(srcPath, destPath);
|
|
133
|
+
} else {
|
|
134
|
+
// Copy file
|
|
135
|
+
fs.copyFileSync(srcPath, destPath);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|