english-lang 0.2.0 → 0.2.1

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.
Files changed (2) hide show
  1. package/dist/cli/engc.js +45 -1
  2. package/package.json +1 -1
package/dist/cli/engc.js CHANGED
@@ -77,6 +77,42 @@ screen HomeScreen:
77
77
  button "Say Hello"
78
78
  button "Reset"
79
79
  `;
80
+ // ── Dev ───────────────────────────────────────────────────────
81
+ function devProject(projectDir) {
82
+ const screensDir = path.join(projectDir, 'screens');
83
+ const rnDir = path.join(projectDir, 'rn');
84
+ const rnSrcDir = path.join(rnDir, 'src');
85
+ if (!fs.existsSync(screensDir) || !fs.existsSync(rnDir)) {
86
+ console.error('[engc] Not an english-lang project. Run engc init <name> first.');
87
+ process.exit(1);
88
+ }
89
+ console.log('[engc] Starting dev mode ...\n');
90
+ // Spawn Metro bundler
91
+ const metro = childProcess.spawn('npx', ['react-native', 'start'], {
92
+ cwd: rnDir,
93
+ stdio: 'inherit',
94
+ shell: true,
95
+ });
96
+ metro.on('error', (err) => {
97
+ console.error('[engc] Metro error:', err.message);
98
+ });
99
+ // Watch .eng files
100
+ compileDir(screensDir, rnSrcDir);
101
+ console.log(`[engc] Watching screens/ ...\n`);
102
+ fs.watch(screensDir, { recursive: false }, (event, filename) => {
103
+ if (!filename || !filename.endsWith('.eng'))
104
+ return;
105
+ const filePath = path.join(screensDir, filename);
106
+ if (!fs.existsSync(filePath))
107
+ return;
108
+ compileFile(filePath, rnSrcDir);
109
+ });
110
+ // Keep alive — exit both on Ctrl+C
111
+ process.on('SIGINT', () => {
112
+ metro.kill();
113
+ process.exit(0);
114
+ });
115
+ }
80
116
  // ── Init ──────────────────────────────────────────────────────
81
117
  function initProject(name) {
82
118
  const projectDir = path.resolve(name);
@@ -99,6 +135,7 @@ function initProject(name) {
99
135
  version: '0.0.1',
100
136
  private: true,
101
137
  scripts: {
138
+ 'dev': 'engc dev',
102
139
  'compile': 'engc compile screens/ --out rn/src/',
103
140
  'watch': 'engc watch screens/ --out rn/src/',
104
141
  },
@@ -127,7 +164,7 @@ function initProject(name) {
127
164
  [engc] Done! Your project is ready.
128
165
 
129
166
  cd ${name}
130
- npm run watch recompiles .eng files on save
167
+ npm run dev starts Metro + watches .eng files
131
168
  cd rn && npx react-native run-ios
132
169
  `);
133
170
  }
@@ -183,6 +220,7 @@ English Compiler (engc)
183
220
 
184
221
  Usage:
185
222
  engc init <name> scaffold a new project
223
+ engc dev start Metro + watch .eng files
186
224
  engc <file.eng> compile → .tsx alongside source
187
225
  engc <file.eng> --out <dir> compile → specific output directory
188
226
  engc <file.eng> -o <output.tsx> compile → specific output file
@@ -194,12 +232,18 @@ Usage:
194
232
 
195
233
  Examples:
196
234
  engc init my-app
235
+ engc dev
197
236
  engc screens/HomeScreen.eng --out rn/src/
198
237
  engc compile screens/ --out rn/src/
199
238
  engc watch screens/ --out rn/src/
200
239
  `.trim());
201
240
  process.exit(0);
202
241
  }
242
+ // engc dev
243
+ if (args[0] === 'dev') {
244
+ devProject(process.cwd());
245
+ return;
246
+ }
203
247
  // engc init <name>
204
248
  if (args[0] === 'init') {
205
249
  const name = args[1];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "english-lang",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "The English (.eng) programming language compiler",
5
5
  "main": "./dist/index.js",
6
6
  "bin": {