@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.
@@ -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;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,UAAU,iBAqIlD"}
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"}
@@ -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 with --target option:'));
41
- console.error(chalk.gray(' npx @linyjs/cli dev --target /path/to/ling/packages/ssr/extensions'));
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 relative to project root
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
- // Try common paths
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'),
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
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,iBAsDpD"}
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"}
@@ -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
- // Download template using npm create
26
- const npmCommand = `npm create @linyjs/plugin-templates@latest ${targetDir}`;
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:'), npmCommand);
36
+ console.log(chalk.gray('Running:'), packCommand);
29
37
  }
30
- execSync(npmCommand, {
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":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
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.2",
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",
@@ -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 with --target option:'));
58
- console.error(chalk.gray(' npx @linyjs/cli dev --target /path/to/ling/packages/ssr/extensions'));
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 relative to project root
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
- // Try common paths
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'),
@@ -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
- // Download template using npm create
37
- const npmCommand = `npm create @linyjs/plugin-templates@latest ${targetDir}`;
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:'), npmCommand);
50
+ console.log(chalk.gray('Running:'), packCommand);
41
51
  }
42
52
 
43
- execSync(npmCommand, {
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
+ }