treste 2.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 (68) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/INSTALL.md +264 -0
  3. package/LICENSE +22 -0
  4. package/README.md +388 -0
  5. package/README_PT.md +261 -0
  6. package/dist/ast.d.ts +140 -0
  7. package/dist/ast.d.ts.map +1 -0
  8. package/dist/ast.js +3 -0
  9. package/dist/ast.js.map +1 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +201 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/compiler/exe.d.ts +13 -0
  15. package/dist/compiler/exe.d.ts.map +1 -0
  16. package/dist/compiler/exe.js +129 -0
  17. package/dist/compiler/exe.js.map +1 -0
  18. package/dist/compiler/web.d.ts +43 -0
  19. package/dist/compiler/web.d.ts.map +1 -0
  20. package/dist/compiler/web.js +413 -0
  21. package/dist/compiler/web.js.map +1 -0
  22. package/dist/compiler.d.ts +3 -0
  23. package/dist/compiler.d.ts.map +1 -0
  24. package/dist/compiler.js +195 -0
  25. package/dist/compiler.js.map +1 -0
  26. package/dist/errors.d.ts +21 -0
  27. package/dist/errors.d.ts.map +1 -0
  28. package/dist/errors.js +56 -0
  29. package/dist/errors.js.map +1 -0
  30. package/dist/index.d.ts +5 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +26 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/interpreter.d.ts +32 -0
  35. package/dist/interpreter.d.ts.map +1 -0
  36. package/dist/interpreter.js +425 -0
  37. package/dist/interpreter.js.map +1 -0
  38. package/dist/lexer.d.ts +113 -0
  39. package/dist/lexer.d.ts.map +1 -0
  40. package/dist/lexer.js +446 -0
  41. package/dist/lexer.js.map +1 -0
  42. package/dist/module.d.ts +19 -0
  43. package/dist/module.d.ts.map +1 -0
  44. package/dist/module.js +112 -0
  45. package/dist/module.js.map +1 -0
  46. package/dist/parser.d.ts +45 -0
  47. package/dist/parser.d.ts.map +1 -0
  48. package/dist/parser.js +599 -0
  49. package/dist/parser.js.map +1 -0
  50. package/dist/std/array.trest +85 -0
  51. package/dist/std/index.trest +13 -0
  52. package/dist/std/io.trest +17 -0
  53. package/dist/std/math.trest +66 -0
  54. package/dist/std/string.trest +61 -0
  55. package/dist/types.d.ts +29 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +86 -0
  58. package/dist/types.js.map +1 -0
  59. package/package.json +101 -0
  60. package/scripts/postbuild.js +90 -0
  61. package/scripts/postinstall.js +89 -0
  62. package/scripts/preinstall.js +92 -0
  63. package/scripts/version.js +52 -0
  64. package/src/std/array.trest +85 -0
  65. package/src/std/index.trest +13 -0
  66. package/src/std/io.trest +17 -0
  67. package/src/std/math.trest +66 -0
  68. package/src/std/string.trest +61 -0
@@ -0,0 +1,92 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Pre-install script
4
+ * Valida o ambiente antes da instalação
5
+ */
6
+
7
+ const { execSync } = require('child_process');
8
+ const os = require('os');
9
+ const fs = require('fs');
10
+ const path = require('path');
11
+
12
+ const VERSION = require('../package.json').version;
13
+ const MIN_NODE_VERSION = 18;
14
+ const MIN_NPM_VERSION = 9;
15
+
16
+ console.log(`\n🚀 Trest Language v${VERSION} - Pre-installation check\n`);
17
+
18
+ // Verificar Node.js
19
+ function checkNodeVersion() {
20
+ const nodeVersion = process.version;
21
+ const majorVersion = parseInt(nodeVersion.slice(1).split('.')[0]);
22
+
23
+ if (majorVersion < MIN_NODE_VERSION) {
24
+ console.error(`❌ Node.js ${MIN_NODE_VERSION}+ required. Current: ${nodeVersion}`);
25
+ console.error('Please update Node.js from https://nodejs.org/');
26
+ process.exit(1);
27
+ }
28
+
29
+ console.log(`✅ Node.js version: ${nodeVersion}`);
30
+ }
31
+
32
+ // Verificar npm
33
+ function checkNpmVersion() {
34
+ try {
35
+ const npmVersion = execSync('npm --version', { encoding: 'utf-8' }).trim();
36
+ const majorVersion = parseInt(npmVersion.split('.')[0]);
37
+
38
+ if (majorVersion < MIN_NPM_VERSION) {
39
+ console.error(`❌ npm ${MIN_NPM_VERSION}+ required. Current: ${npmVersion}`);
40
+ console.error('Please update npm: npm install -g npm@latest');
41
+ process.exit(1);
42
+ }
43
+
44
+ console.log(`✅ npm version: ${npmVersion}`);
45
+ } catch (error) {
46
+ console.error('❌ Failed to check npm version');
47
+ process.exit(1);
48
+ }
49
+ }
50
+
51
+ // Verificar sistema operacional
52
+ function checkOS() {
53
+ const platform = os.platform();
54
+ const supported = ['darwin', 'linux', 'win32'];
55
+
56
+ if (!supported.includes(platform)) {
57
+ console.warn(`⚠️ Platform ${platform} may not be fully supported`);
58
+ } else {
59
+ console.log(`✅ Platform: ${platform}`);
60
+ }
61
+ }
62
+
63
+ // Verificar TypeScript
64
+ function checkTypeScript() {
65
+ try {
66
+ const tsVersion = execSync('tsc --version', { encoding: 'utf-8' }).trim();
67
+ console.log(`✅ ${tsVersion}`);
68
+ } catch (error) {
69
+ console.warn('⚠️ TypeScript not found globally (will be installed locally)');
70
+ }
71
+ }
72
+
73
+ // Verificar espaço em disco
74
+ function checkDiskSpace() {
75
+ try {
76
+ const stats = fs.statSync(process.cwd());
77
+ console.log(`✅ Sufficient disk space`);
78
+ } catch (error) {
79
+ console.warn('⚠️ Could not verify disk space');
80
+ }
81
+ }
82
+
83
+ // Executar todas as verificações
84
+ console.log('Checking environment...\n');
85
+ checkNodeVersion();
86
+ checkNpmVersion();
87
+ checkOS();
88
+ checkTypeScript();
89
+ checkDiskSpace();
90
+
91
+ console.log('\n✅ Pre-installation checks passed!\n');
92
+
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Version bump script
4
+ * Atualiza a versão em todos os lugares necessários
5
+ */
6
+
7
+ const fs = require('fs');
8
+ const path = require('path');
9
+ const { execSync } = require('child_process');
10
+
11
+ function updateVersion() {
12
+ const packageJsonPath = path.join(__dirname, '..', 'package.json');
13
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
14
+ const newVersion = process.env.npm_config_version || packageJson.version;
15
+
16
+ console.log(`\n📦 Updating version to ${newVersion}\n`);
17
+
18
+ // Atualizar package.json
19
+ packageJson.version = newVersion;
20
+ fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
21
+ console.log('✅ Updated package.json');
22
+
23
+ // Atualizar README se necessário
24
+ updateReadme(newVersion);
25
+
26
+ // Criar tag git
27
+ try {
28
+ execSync(`git tag -a v${newVersion} -m "Release v${newVersion}"`, { stdio: 'inherit' });
29
+ console.log(`✅ Created git tag v${newVersion}`);
30
+ } catch (error) {
31
+ console.warn('⚠️ Could not create git tag (may already exist)');
32
+ }
33
+
34
+ console.log(`\n✅ Version update complete!\n`);
35
+ }
36
+
37
+ function updateReadme(version) {
38
+ const readmePath = path.join(__dirname, '..', 'README.md');
39
+
40
+ if (fs.existsSync(readmePath)) {
41
+ let content = fs.readFileSync(readmePath, 'utf-8');
42
+
43
+ // Substituir referências de versão
44
+ content = content.replace(/v\d+\.\d+\.\d+/g, `v${version}`);
45
+
46
+ fs.writeFileSync(readmePath, content);
47
+ console.log('✅ Updated README.md');
48
+ }
49
+ }
50
+
51
+ updateVersion();
52
+
@@ -0,0 +1,85 @@
1
+ # Стандартная библиотека массивов
2
+
3
+ экспорт функция длина(массив) {
4
+ пусть счетчик = 0
5
+ пока (массив[счетчик] != null) {
6
+ счетчик = счетчик + 1
7
+ }
8
+ вернуть счетчик
9
+ }
10
+
11
+ экспорт функция добавить(массив, элемент) {
12
+ # Добавляет элемент в конец массива
13
+ массив[длина(массив)] = элемент
14
+ вернуть массив
15
+ }
16
+
17
+ экспорт функция удалить(массив, индекс) {
18
+ # Удаляет элемент из массива
19
+ пусть новый = []
20
+ пусть i = 0
21
+ пока (i < длина(массив)) {
22
+ если (i != индекс) {
23
+ добавить(новый, массив[i])
24
+ }
25
+ i = i + 1
26
+ }
27
+ вернуть новый
28
+ }
29
+
30
+ экспорт функция включает(массив, элемент) {
31
+ пусть i = 0
32
+ пока (i < длина(массив)) {
33
+ если (массив[i] == элемент) {
34
+ вернуть истина
35
+ }
36
+ i = i + 1
37
+ }
38
+ вернуть ложь
39
+ }
40
+
41
+ экспорт функция обратить(массив) {
42
+ пусть новый = []
43
+ пусть i = длина(массив) - 1
44
+ пока (i >= 0) {
45
+ добавить(новый, массив[i])
46
+ i = i - 1
47
+ }
48
+ вернуть новый
49
+ }
50
+
51
+ экспорт функция срез(массив, начало, конец) {
52
+ пусть новый = []
53
+ пусть i = начало
54
+ пока (i < конец && i < длина(массив)) {
55
+ добавить(новый, массив[i])
56
+ i = i + 1
57
+ }
58
+ вернуть новый
59
+ }
60
+
61
+ экспорт функция отсортировать(массив) {
62
+ # Bubble sort упрощенный
63
+ пусть новый = []
64
+ пусть i = 0
65
+ пока (i < длина(массив)) {
66
+ добавить(новый, массив[i])
67
+ i = i + 1
68
+ }
69
+ # Базовая реализация сортировки
70
+ пусть обмен = истина
71
+ пока (обмен) {
72
+ обмен = ложь
73
+ пусть j = 0
74
+ пока (j < длина(новый) - 1) {
75
+ если (новый[j] > новый[j + 1]) {
76
+ пусть temp = новый[j]
77
+ новый[j] = новый[j + 1]
78
+ новый[j + 1] = temp
79
+ обмен = истина
80
+ }
81
+ j = j + 1
82
+ }
83
+ }
84
+ вернуть новый
85
+ }
@@ -0,0 +1,13 @@
1
+ # Стандартная библиотека Trest - Главный модуль
2
+
3
+ # Реэкспортировать все модули std
4
+ импорт * как math из "std/math"
5
+ импорт * как string из "std/string"
6
+ импорт * как array из "std/array"
7
+ импорт * как io из "std/io"
8
+
9
+ # Экспортировать объекты со всеми функциями
10
+ экспорт конст Math = math
11
+ экспорт конст String = string
12
+ экспорт конст Array = array
13
+ экспорт конст IO = io
@@ -0,0 +1,17 @@
1
+ # Стандартная библиотека ввода/вывода
2
+ # Примечание: Реальные реализации потребуют нативных привязок Node.js
3
+
4
+ экспорт функция читатьФайл(путь) {
5
+ # Заглушка - требует нативную привязку
6
+ бросить "читатьФайл требует нативную привязку Node.js"
7
+ }
8
+
9
+ экспорт функция писатьФайл(путь, содержимое) {
10
+ # Заглушка - требует нативную привязку
11
+ бросить "писатьФайл требует нативную привязку Node.js"
12
+ }
13
+
14
+ экспорт функция существуетФайл(путь) {
15
+ # Заглушка - требует нативную привязку
16
+ бросить "существуетФайл требует нативную привязку Node.js"
17
+ }
@@ -0,0 +1,66 @@
1
+ # Стандартная математическая библиотека
2
+
3
+ экспорт функция abs(x) {
4
+ если (x < 0) {
5
+ вернуть -x
6
+ }
7
+ вернуть x
8
+ }
9
+
10
+ экспорт функция max(a, b) {
11
+ если (a > b) {
12
+ вернуть a
13
+ }
14
+ вернуть b
15
+ }
16
+
17
+ экспорт функция min(a, b) {
18
+ если (a < b) {
19
+ вернуть a
20
+ }
21
+ вернуть b
22
+ }
23
+
24
+ экспорт функция pow(основание, показатель) {
25
+ пусть результат = 1
26
+ для (пусть i = 0; i < показатель; i = i + 1) {
27
+ результат = результат * основание
28
+ }
29
+ вернуть результат
30
+ }
31
+
32
+ экспорт функция sqrt(x) {
33
+ если (x < 0) {
34
+ бросить "Квадратный корень из отрицательного числа"
35
+ }
36
+ если (x == 0) {
37
+ вернуть 0
38
+ }
39
+ пусть оценка = x / 2
40
+ для (пусть i = 0; i < 10; i = i + 1) {
41
+ оценка = (оценка + x / оценка) / 2
42
+ }
43
+ вернуть оценка
44
+ }
45
+
46
+ экспорт функция ceil(x) {
47
+ пусть целаяЧасть = x - (x % 1)
48
+ если (x > 0 && x != целаяЧасть) {
49
+ вернуть целаяЧасть + 1
50
+ }
51
+ вернуть целаяЧасть
52
+ }
53
+
54
+ экспорт функция floor(x) {
55
+ вернуть x - (x % 1)
56
+ }
57
+
58
+ экспорт функция round(x) {
59
+ если (x - floor(x) >= 0.5) {
60
+ вернуть ceil(x)
61
+ }
62
+ вернуть floor(x)
63
+ }
64
+
65
+ экспорт конст PI = 3.141592653589793
66
+ экспорт конст E = 2.718281828459045
@@ -0,0 +1,61 @@
1
+ # Стандартная библиотека строк
2
+
3
+ экспорт функция размер(строка) {
4
+ # Строки - это массивы, поэтому возвращаем длину массива
5
+ пусть счетчик = 0
6
+ пока (строка[счетчик] != null) {
7
+ счетчик = счетчик + 1
8
+ }
9
+ вернуть счетчик
10
+ }
11
+
12
+ экспорт функция верхний(строка) {
13
+ # Базовое преобразование в верхний регистр
14
+ # В реальной реализации потребуется обработка специальных символов
15
+ пусть результат = ""
16
+ пусть i = 0
17
+ пока (строка[i] != null) {
18
+ пусть символ = строка[i]
19
+ # Упрощенное преобразование
20
+ результат = результат + символ
21
+ i = i + 1
22
+ }
23
+ вернуть результат
24
+ }
25
+
26
+ экспорт функция нижний(строка) {
27
+ # Базовое преобразование в нижний регистр
28
+ пусть результат = ""
29
+ пусть i = 0
30
+ пока (строка[i] != null) {
31
+ пусть символ = строка[i]
32
+ # Упрощенное преобразование
33
+ результат = результат + символ
34
+ i = i + 1
35
+ }
36
+ вернуть результат
37
+ }
38
+
39
+ экспорт функция заменить(строка, старый, новый) {
40
+ # Базовая реализация замены
41
+ # В реальной реализации потребуется более сложная обработка
42
+ вернуть строка
43
+ }
44
+
45
+ экспорт функция разделить(строка, разделитель) {
46
+ # Базовая реализация split
47
+ пусть результат = []
48
+ пусть текущий = ""
49
+ пусть i = 0
50
+ пока (строка[i] != null) {
51
+ если (строка[i] == разделитель) {
52
+ результат = результат + [текущий]
53
+ текущий = ""
54
+ } иначе {
55
+ текущий = текущий + строка[i]
56
+ }
57
+ i = i + 1
58
+ }
59
+ результат = результат + [текущий]
60
+ вернуть результат
61
+ }