@grey-ts/transpiler 0.3.2 → 1.0.0

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 (3) hide show
  1. package/LICENSE +1 -1
  2. package/dist/index.js +126 -94
  3. package/package.json +2 -2
package/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2025 Oskari Hirsikangas
1
+ Copyright 2026 Oskari Hirsikangas
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
4
 
package/dist/index.js CHANGED
@@ -234,6 +234,8 @@ var propertyAccessReplacements = {
234
234
  "Math.round": "round",
235
235
  "Math.random": "rnd",
236
236
  "Math.log": "log",
237
+ "console.log": "print",
238
+ "console.clear": "clear_screen",
237
239
  "String.prototype": "string",
238
240
  "Number.prototype": "number",
239
241
  "Boolean.prototype": "number",
@@ -460,7 +462,7 @@ end function`;
460
462
  // src/visitors/expressions.ts
461
463
  import ts7 from "typescript";
462
464
 
463
- // src/callTransformer.ts
465
+ // src/call_transformers/callTransformer.ts
464
466
  import path2 from "node:path";
465
467
  import ts6 from "typescript";
466
468
  class CallTransformer {
@@ -477,60 +479,6 @@ class CallTransformer {
477
479
  return handler(functionName, callArgs, node, ctx);
478
480
  }
479
481
  }
480
- CallTransformer.register("Array.concat", (name, args) => {
481
- const dotI = name.lastIndexOf(".");
482
- const arrayName = name.slice(0, dotI);
483
- return callUtilFunction("array_concat", arrayName, args.join(","));
484
- });
485
- CallTransformer.register("Array.map", (name, args) => {
486
- if (!args.length)
487
- throw "Invalid argument count";
488
- return callUtilFunction("array_map", name.slice(0, name.lastIndexOf(".")), args[0]);
489
- });
490
- CallTransformer.register("Array.filter", (name, args) => {
491
- if (!args.length)
492
- throw "Invalid argument count";
493
- return callUtilFunction("array_filter", name.slice(0, name.lastIndexOf(".")), args[0]);
494
- });
495
- CallTransformer.register("Array.find", (name, args) => {
496
- if (!args.length)
497
- throw "Invalid argument count";
498
- return callUtilFunction("array_find", name.slice(0, name.lastIndexOf(".")), args[0]);
499
- });
500
- CallTransformer.register("Array.some", (name, args) => {
501
- if (!args.length)
502
- throw "Invalid argument count";
503
- return callUtilFunction("array_some", name.slice(0, name.lastIndexOf(".")), args[0]);
504
- });
505
- CallTransformer.register("Array.every", (name, args) => {
506
- if (!args.length)
507
- throw "Invalid argument count";
508
- return callUtilFunction("array_every", name.slice(0, name.lastIndexOf(".")), args[0]);
509
- });
510
- CallTransformer.register("Array.slice", (name, args) => {
511
- return name.slice(0, name.lastIndexOf(".")) + `[${args[0] ?? ""}:${args[1] ?? ""}]`;
512
- });
513
- CallTransformer.register("Array.push", (name, args) => {
514
- if (!args.length)
515
- throw "Invalid argument count";
516
- return callUtilFunction("array_push", name.slice(0, name.lastIndexOf(".")), args[0]);
517
- });
518
- CallTransformer.register("Array.unshift", (name, args) => {
519
- if (!args.length)
520
- throw "Invalid argument count";
521
- return callUtilFunction("array_unshift", name.slice(0, name.lastIndexOf(".")), args[0]);
522
- });
523
- CallTransformer.register("Array.toString", (name) => {
524
- const arrayName = name.slice(0, name.lastIndexOf("."));
525
- return `str(${arrayName})`;
526
- });
527
- CallTransformer.register("Array.reverse", (name) => {
528
- return callUtilFunction("array_reverse", name.slice(0, name.lastIndexOf(".")));
529
- });
530
- CallTransformer.register("Object.toString", (name) => {
531
- const objectName = name.slice(0, name.lastIndexOf("."));
532
- return `str(${objectName})`;
533
- });
534
482
  CallTransformer.register("Number.toString", (name) => {
535
483
  const number = name.slice(0, name.lastIndexOf("."));
536
484
  return `str(${number})`;
@@ -539,49 +487,12 @@ CallTransformer.register("Function.toString", (name) => {
539
487
  const func = name.slice(0, name.lastIndexOf("."));
540
488
  return `str(@${func})`;
541
489
  });
542
- CallTransformer.register("String.startsWith", (name, args) => {
543
- if (!args.length)
544
- throw "Invalid argument count";
545
- return callUtilFunction("str_starts_with", name.slice(0, name.lastIndexOf(".")), ...args);
546
- });
547
- CallTransformer.register("String.endsWith", (name, args) => {
548
- if (!args.length)
549
- throw "Invalid argument count";
550
- return callUtilFunction("str_ends_with", name.slice(0, name.lastIndexOf(".")), ...args);
551
- });
552
- CallTransformer.register("String.repeat", (name, args) => {
553
- if (!args.length)
554
- throw "Invalid argument count";
555
- return callUtilFunction("str_repeat", name.slice(0, name.lastIndexOf(".")), ...args);
556
- });
557
- CallTransformer.register("String.slice", (name, args) => {
558
- return name.slice(0, name.lastIndexOf(".")) + `[${args[0] ?? ""}:${args[1] ?? ""}]`;
559
- });
560
- CallTransformer.register("String.toString", (name) => {
561
- return name.slice(0, name.lastIndexOf("."));
562
- });
563
490
  CallTransformer.register("Math.min", (name, args) => {
564
491
  return callUtilFunction("math_min", `${args.join(",")}`);
565
492
  });
566
493
  CallTransformer.register("Math.max", (name, args) => {
567
494
  return callUtilFunction("math_max", `${args.join(",")}`);
568
495
  });
569
- CallTransformer.register("ObjectConstructor.hasOwn", (name, args) => {
570
- if (args.length < 2)
571
- throw "Invalid argument count";
572
- return `${args[0]}.hasIndex(${args[1]})`;
573
- });
574
- CallTransformer.register("ObjectConstructor.assign", (name, args) => {
575
- if (args.length < 2)
576
- throw "Invalid argument count";
577
- return callUtilFunction("assign_objects", args.join(","));
578
- });
579
- CallTransformer.register("ObjectConstructor.keys", (name, args) => {
580
- return `${args[0]}.indexes`;
581
- });
582
- CallTransformer.register("ObjectConstructor.values", (name, args) => {
583
- return `${args[0]}.values`;
584
- });
585
496
  CallTransformer.register("GreyHack.include", (name, args, node, ctx) => {
586
497
  if (!node.arguments.length)
587
498
  return "";
@@ -692,6 +603,8 @@ function handleCallArgs(callNode, ctx) {
692
603
  if (restArrays.length) {
693
604
  result.push(restArrays.join(" + "));
694
605
  }
606
+ if (hasRestParameter && result.length === params.length - 1)
607
+ result.push("[]");
695
608
  return result;
696
609
  }
697
610
  NodeHandler.register(ts7.SyntaxKind.CallExpression, (node, ctx) => {
@@ -1343,6 +1256,124 @@ NodeHandler.register(ts13.SyntaxKind.EnumDeclaration, (node) => {
1343
1256
  return `${node.name.text} = { ${members.join(", ")} }`;
1344
1257
  });
1345
1258
 
1259
+ // src/call_transformers/array.ts
1260
+ CallTransformer.register("Array.concat", (name, args) => {
1261
+ const dotI = name.lastIndexOf(".");
1262
+ const arrayName = name.slice(0, dotI);
1263
+ return callUtilFunction("array_concat", arrayName, args.join(","));
1264
+ });
1265
+ CallTransformer.register("Array.map", (name, args) => {
1266
+ if (!args.length)
1267
+ throw "Invalid argument count";
1268
+ return callUtilFunction("array_map", name.slice(0, name.lastIndexOf(".")), args[0]);
1269
+ });
1270
+ CallTransformer.register("Array.filter", (name, args) => {
1271
+ if (!args.length)
1272
+ throw "Invalid argument count";
1273
+ return callUtilFunction("array_filter", name.slice(0, name.lastIndexOf(".")), args[0]);
1274
+ });
1275
+ CallTransformer.register("Array.find", (name, args) => {
1276
+ if (!args.length)
1277
+ throw "Invalid argument count";
1278
+ return callUtilFunction("array_find", name.slice(0, name.lastIndexOf(".")), args[0]);
1279
+ });
1280
+ CallTransformer.register("Array.some", (name, args) => {
1281
+ if (!args.length)
1282
+ throw "Invalid argument count";
1283
+ return callUtilFunction("array_some", name.slice(0, name.lastIndexOf(".")), args[0]);
1284
+ });
1285
+ CallTransformer.register("Array.every", (name, args) => {
1286
+ if (!args.length)
1287
+ throw "Invalid argument count";
1288
+ return callUtilFunction("array_every", name.slice(0, name.lastIndexOf(".")), args[0]);
1289
+ });
1290
+ CallTransformer.register("Array.slice", (name, args) => {
1291
+ return name.slice(0, name.lastIndexOf(".")) + `[${args[0] ?? ""}:${args[1] ?? ""}]`;
1292
+ });
1293
+ CallTransformer.register("Array.push", (name, args) => {
1294
+ if (!args.length)
1295
+ throw "Invalid argument count";
1296
+ return callUtilFunction("array_push", name.slice(0, name.lastIndexOf(".")), args[0]);
1297
+ });
1298
+ CallTransformer.register("Array.unshift", (name, args) => {
1299
+ if (!args.length)
1300
+ throw "Invalid argument count";
1301
+ return callUtilFunction("array_unshift", name.slice(0, name.lastIndexOf(".")), args[0]);
1302
+ });
1303
+ CallTransformer.register("Array.toString", (name) => {
1304
+ const arrayName = name.slice(0, name.lastIndexOf("."));
1305
+ return `str(${arrayName})`;
1306
+ });
1307
+ CallTransformer.register("Array.reverse", (name) => {
1308
+ return callUtilFunction("array_reverse", name.slice(0, name.lastIndexOf(".")));
1309
+ });
1310
+
1311
+ // src/call_transformers/object.ts
1312
+ CallTransformer.register("ObjectConstructor.hasOwn", (name, args) => {
1313
+ if (args.length < 2)
1314
+ throw "Invalid argument count";
1315
+ return `${args[0]}.hasIndex(${args[1]})`;
1316
+ });
1317
+ CallTransformer.register("ObjectConstructor.assign", (name, args) => {
1318
+ if (args.length < 2)
1319
+ throw "Invalid argument count";
1320
+ return callUtilFunction("assign_objects", args.join(","));
1321
+ });
1322
+ CallTransformer.register("ObjectConstructor.keys", (name, args) => {
1323
+ return `${args[0]}.indexes`;
1324
+ });
1325
+ CallTransformer.register("ObjectConstructor.values", (name, args) => {
1326
+ return `${args[0]}.values`;
1327
+ });
1328
+ CallTransformer.register("ObjectConstructor.sum", (name, args) => {
1329
+ return `${args[0]}.sum`;
1330
+ });
1331
+ CallTransformer.register("ObjectConstructor.shuffle", (name, args) => {
1332
+ return `${args[0]}.shuffle`;
1333
+ });
1334
+ CallTransformer.register("ObjectConstructor.replace", (name, args) => {
1335
+ return `${args[0]}.replace(${args.slice(1).join(",")})`;
1336
+ });
1337
+ CallTransformer.register("ObjectConstructor.remove", (name, args) => {
1338
+ return `${args[0]}.remove(${args[1]})`;
1339
+ });
1340
+ CallTransformer.register("ObjectConstructor.shift", (name, args) => {
1341
+ return `${args[0]}.pull`;
1342
+ });
1343
+ CallTransformer.register("ObjectConstructor.size", (name, args) => {
1344
+ return `${args[0]}.len`;
1345
+ });
1346
+ CallTransformer.register("ObjectConstructor.indexOf", (name, args) => {
1347
+ return `${args[0]}.indexOf(${args[1]})`;
1348
+ });
1349
+ CallTransformer.register("Object.toString", (name) => {
1350
+ const objectName = name.slice(0, name.lastIndexOf("."));
1351
+ return `str(${objectName})`;
1352
+ });
1353
+
1354
+ // src/call_transformers/string.ts
1355
+ CallTransformer.register("String.startsWith", (name, args) => {
1356
+ if (!args.length)
1357
+ throw "Invalid argument count";
1358
+ return callUtilFunction("str_starts_with", name.slice(0, name.lastIndexOf(".")), ...args);
1359
+ });
1360
+ CallTransformer.register("String.endsWith", (name, args) => {
1361
+ if (!args.length)
1362
+ throw "Invalid argument count";
1363
+ return callUtilFunction("str_ends_with", name.slice(0, name.lastIndexOf(".")), ...args);
1364
+ });
1365
+ CallTransformer.register("String.repeat", (name, args) => {
1366
+ if (!args.length)
1367
+ throw "Invalid argument count";
1368
+ return callUtilFunction("str_repeat", name.slice(0, name.lastIndexOf(".")), ...args);
1369
+ });
1370
+ CallTransformer.register("String.slice", (name, args) => {
1371
+ return name.slice(0, name.lastIndexOf(".")) + `[${args[0] ?? ""}:${args[1] ?? ""}]`;
1372
+ });
1373
+ CallTransformer.register("String.toString", (name) => {
1374
+ return name.slice(0, name.lastIndexOf("."));
1375
+ });
1376
+
1346
1377
  // src/transpiler.ts
1347
1378
  var program;
1348
1379
  var checker;
@@ -1357,8 +1388,9 @@ var utilFunctions2 = {
1357
1388
  '\twhile isaobj.hasIndex("__isa")',
1358
1389
  '\t\tisaobj = obj["__isa"]',
1359
1390
  "\t\tif isaobj.hasIndex(key) then",
1360
- "\t\t\tval = obj[key]",
1361
- "\t\t\treturn val",
1391
+ "\t\t\tres = obj[key]",
1392
+ '\t\t\tif typeof(@res) == "function" and str(@res)[8:][1:-1].indexOf("self") == 0 then return res(obj)',
1393
+ "\t\t\treturn obj[key]",
1362
1394
  "\t\tend if",
1363
1395
  "\tend while",
1364
1396
  "\treturn null",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grey-ts/transpiler",
3
- "version": "0.3.2",
3
+ "version": "1.0.0",
4
4
  "description": "Transpiles TypeScript into GreyScript",
5
5
  "author": "Okka",
6
6
  "module": "src/index.ts",
@@ -40,6 +40,6 @@
40
40
  "typescript": "^5"
41
41
  },
42
42
  "dependencies": {
43
- "@grey-ts/types": "^1.5.0"
43
+ "@grey-ts/types": "^2.0.0"
44
44
  }
45
45
  }