starlight-cli 1.1.8 → 1.1.9
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/README.md +1 -1
- package/dist/index.js +43 -6
- package/package.json +1 -1
- package/src/evaluator.js +42 -5
- package/src/starlight.js +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
Starlight is a lightweight, developer-oriented programming language designed for **server-side scripting, automation, and general-purpose programming**. It combines a clean, readable syntax inspired by JavaScript and Python with powerful runtime features such as async/await, modules, and interactive I/O.
|
|
5
5
|
|
|
6
6
|
**Official Reference:**
|
|
7
|
-
https://starlight-
|
|
7
|
+
https://developerdominex.github.io/starlight-programming-language/
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
package/dist/index.js
CHANGED
|
@@ -10477,12 +10477,26 @@ this.global.define('range', (...args) => {
|
|
|
10477
10477
|
return readlineSync.question(prompt + ' ');
|
|
10478
10478
|
});
|
|
10479
10479
|
this.global.define('num', arg => {
|
|
10480
|
-
|
|
10481
|
-
|
|
10482
|
-
|
|
10480
|
+
if (arg === null || arg === undefined) return 0;
|
|
10481
|
+
|
|
10482
|
+
const t = typeof arg;
|
|
10483
|
+
|
|
10484
|
+
if (t === 'number') return arg; // already a number
|
|
10485
|
+
if (t === 'boolean') return arg ? 1 : 0;
|
|
10486
|
+
if (t === 'string') {
|
|
10487
|
+
const n = Number(arg);
|
|
10488
|
+
if (!Number.isNaN(n)) return n; // numeric string
|
|
10489
|
+
return 0; // non-numeric string becomes 0
|
|
10483
10490
|
}
|
|
10484
|
-
return
|
|
10491
|
+
if (Array.isArray(arg)) return arg.length; // array → length
|
|
10492
|
+
if (t === 'object') return Object.keys(arg).length; // object → number of keys
|
|
10493
|
+
|
|
10494
|
+
// fallback for anything else
|
|
10495
|
+
const n = Number(arg);
|
|
10496
|
+
if (!Number.isNaN(n)) return n;
|
|
10497
|
+
return 0;
|
|
10485
10498
|
});
|
|
10499
|
+
|
|
10486
10500
|
this.global.define('fetch', async (url, options = {}) => {
|
|
10487
10501
|
const res = await fetch(url, options);
|
|
10488
10502
|
return {
|
|
@@ -10924,7 +10938,30 @@ async evalBinary(node, env) {
|
|
|
10924
10938
|
}
|
|
10925
10939
|
|
|
10926
10940
|
switch (node.operator) {
|
|
10927
|
-
case 'PLUS':
|
|
10941
|
+
case 'PLUS': {
|
|
10942
|
+
if (Array.isArray(l) && Array.isArray(r)) {
|
|
10943
|
+
return l.concat(r);
|
|
10944
|
+
}
|
|
10945
|
+
|
|
10946
|
+
if (typeof l === 'string' || typeof r === 'string') {
|
|
10947
|
+
return String(l) + String(r);
|
|
10948
|
+
}
|
|
10949
|
+
|
|
10950
|
+
if (typeof l === 'number' && typeof r === 'number') {
|
|
10951
|
+
return l + r;
|
|
10952
|
+
}
|
|
10953
|
+
|
|
10954
|
+
if (typeof l === 'object' && typeof r === 'object') {
|
|
10955
|
+
return { ...l, ...r };
|
|
10956
|
+
}
|
|
10957
|
+
|
|
10958
|
+
throw new RuntimeError(
|
|
10959
|
+
`Unsupported operands for +: ${typeof l} and ${typeof r}`,
|
|
10960
|
+
node,
|
|
10961
|
+
this.source
|
|
10962
|
+
);
|
|
10963
|
+
}
|
|
10964
|
+
|
|
10928
10965
|
case 'MINUS': return l - r;
|
|
10929
10966
|
case 'STAR': return l * r;
|
|
10930
10967
|
case 'SLASH': return l / r;
|
|
@@ -12507,7 +12544,7 @@ const Lexer = __nccwpck_require__(211);
|
|
|
12507
12544
|
const Parser = __nccwpck_require__(222);
|
|
12508
12545
|
const Evaluator = __nccwpck_require__(112);
|
|
12509
12546
|
|
|
12510
|
-
const VERSION = '1.1.
|
|
12547
|
+
const VERSION = '1.1.9';
|
|
12511
12548
|
|
|
12512
12549
|
const COLOR = {
|
|
12513
12550
|
reset: '\x1b[0m',
|
package/package.json
CHANGED
package/src/evaluator.js
CHANGED
|
@@ -267,12 +267,26 @@ this.global.define('range', (...args) => {
|
|
|
267
267
|
return readlineSync.question(prompt + ' ');
|
|
268
268
|
});
|
|
269
269
|
this.global.define('num', arg => {
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
270
|
+
if (arg === null || arg === undefined) return 0;
|
|
271
|
+
|
|
272
|
+
const t = typeof arg;
|
|
273
|
+
|
|
274
|
+
if (t === 'number') return arg; // already a number
|
|
275
|
+
if (t === 'boolean') return arg ? 1 : 0;
|
|
276
|
+
if (t === 'string') {
|
|
277
|
+
const n = Number(arg);
|
|
278
|
+
if (!Number.isNaN(n)) return n; // numeric string
|
|
279
|
+
return 0; // non-numeric string becomes 0
|
|
273
280
|
}
|
|
274
|
-
return
|
|
281
|
+
if (Array.isArray(arg)) return arg.length; // array → length
|
|
282
|
+
if (t === 'object') return Object.keys(arg).length; // object → number of keys
|
|
283
|
+
|
|
284
|
+
// fallback for anything else
|
|
285
|
+
const n = Number(arg);
|
|
286
|
+
if (!Number.isNaN(n)) return n;
|
|
287
|
+
return 0;
|
|
275
288
|
});
|
|
289
|
+
|
|
276
290
|
this.global.define('fetch', async (url, options = {}) => {
|
|
277
291
|
const res = await fetch(url, options);
|
|
278
292
|
return {
|
|
@@ -714,7 +728,30 @@ async evalBinary(node, env) {
|
|
|
714
728
|
}
|
|
715
729
|
|
|
716
730
|
switch (node.operator) {
|
|
717
|
-
case 'PLUS':
|
|
731
|
+
case 'PLUS': {
|
|
732
|
+
if (Array.isArray(l) && Array.isArray(r)) {
|
|
733
|
+
return l.concat(r);
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
if (typeof l === 'string' || typeof r === 'string') {
|
|
737
|
+
return String(l) + String(r);
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
if (typeof l === 'number' && typeof r === 'number') {
|
|
741
|
+
return l + r;
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
if (typeof l === 'object' && typeof r === 'object') {
|
|
745
|
+
return { ...l, ...r };
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
throw new RuntimeError(
|
|
749
|
+
`Unsupported operands for +: ${typeof l} and ${typeof r}`,
|
|
750
|
+
node,
|
|
751
|
+
this.source
|
|
752
|
+
);
|
|
753
|
+
}
|
|
754
|
+
|
|
718
755
|
case 'MINUS': return l - r;
|
|
719
756
|
case 'STAR': return l * r;
|
|
720
757
|
case 'SLASH': return l / r;
|