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,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
+ }
@@ -0,0 +1,29 @@
1
+ export declare enum TypeKind {
2
+ NUMBER = "number",
3
+ STRING = "string",
4
+ BOOLEAN = "boolean",
5
+ ARRAY = "array",
6
+ FUNCTION = "function",
7
+ OBJECT = "object",
8
+ NULL = "null",
9
+ ANY = "any",
10
+ UNION = "union",
11
+ OPTIONAL = "optional"
12
+ }
13
+ export interface Type {
14
+ kind: TypeKind;
15
+ elementType?: Type;
16
+ parameterTypes?: Type[];
17
+ returnType?: Type;
18
+ properties?: Map<string, Type>;
19
+ unionTypes?: Type[];
20
+ }
21
+ export declare class TypeChecker {
22
+ private types;
23
+ inferType(value: any): Type;
24
+ isAssignable(target: Type, source: Type): boolean;
25
+ private arraysEqual;
26
+ registerType(name: string, type: Type): void;
27
+ getType(name: string): Type | undefined;
28
+ }
29
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/B,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC;CACrB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAgC;IAEtC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IA2B3B,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,OAAO;IAmCxD,OAAO,CAAC,WAAW;IAKZ,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;IAI5C,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;CAG/C"}
package/dist/types.js ADDED
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TypeChecker = exports.TypeKind = void 0;
4
+ var TypeKind;
5
+ (function (TypeKind) {
6
+ TypeKind["NUMBER"] = "number";
7
+ TypeKind["STRING"] = "string";
8
+ TypeKind["BOOLEAN"] = "boolean";
9
+ TypeKind["ARRAY"] = "array";
10
+ TypeKind["FUNCTION"] = "function";
11
+ TypeKind["OBJECT"] = "object";
12
+ TypeKind["NULL"] = "null";
13
+ TypeKind["ANY"] = "any";
14
+ TypeKind["UNION"] = "union";
15
+ TypeKind["OPTIONAL"] = "optional";
16
+ })(TypeKind || (exports.TypeKind = TypeKind = {}));
17
+ class TypeChecker {
18
+ constructor() {
19
+ this.types = new Map();
20
+ }
21
+ inferType(value) {
22
+ if (value === null || value === undefined) {
23
+ return { kind: TypeKind.NULL };
24
+ }
25
+ if (typeof value === 'number') {
26
+ return { kind: TypeKind.NUMBER };
27
+ }
28
+ if (typeof value === 'string') {
29
+ return { kind: TypeKind.STRING };
30
+ }
31
+ if (typeof value === 'boolean') {
32
+ return { kind: TypeKind.BOOLEAN };
33
+ }
34
+ if (Array.isArray(value)) {
35
+ const elementType = value.length > 0 ? this.inferType(value[0]) : { kind: TypeKind.ANY };
36
+ return { kind: TypeKind.ARRAY, elementType };
37
+ }
38
+ if (typeof value === 'object' && 'type' in value && value.type === 'function') {
39
+ return {
40
+ kind: TypeKind.FUNCTION,
41
+ parameterTypes: value.params.map(() => ({ kind: TypeKind.ANY })),
42
+ returnType: { kind: TypeKind.ANY },
43
+ };
44
+ }
45
+ return { kind: TypeKind.ANY };
46
+ }
47
+ isAssignable(target, source) {
48
+ if (target.kind === TypeKind.ANY || source.kind === TypeKind.ANY) {
49
+ return true;
50
+ }
51
+ if (target.kind === source.kind) {
52
+ if (target.kind === TypeKind.ARRAY) {
53
+ return (!target.elementType ||
54
+ !source.elementType ||
55
+ this.isAssignable(target.elementType, source.elementType));
56
+ }
57
+ if (target.kind === TypeKind.FUNCTION) {
58
+ return ((!target.returnType || !source.returnType ||
59
+ this.isAssignable(target.returnType, source.returnType)) &&
60
+ (!target.parameterTypes || !source.parameterTypes ||
61
+ this.arraysEqual(target.parameterTypes, source.parameterTypes, this.isAssignable.bind(this))));
62
+ }
63
+ return true;
64
+ }
65
+ if (target.kind === TypeKind.UNION && target.unionTypes) {
66
+ return target.unionTypes.some((t) => this.isAssignable(t, source));
67
+ }
68
+ if (source.kind === TypeKind.NULL && target.kind === TypeKind.OPTIONAL) {
69
+ return true;
70
+ }
71
+ return false;
72
+ }
73
+ arraysEqual(a, b, compare) {
74
+ if (a.length !== b.length)
75
+ return false;
76
+ return a.every((val, i) => compare(val, b[i]));
77
+ }
78
+ registerType(name, type) {
79
+ this.types.set(name, type);
80
+ }
81
+ getType(name) {
82
+ return this.types.get(name);
83
+ }
84
+ }
85
+ exports.TypeChecker = TypeChecker;
86
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,101 @@
1
+ {
2
+ "name": "treste",
3
+ "version": "2.0.0",
4
+ "description": "Trest - Linguagem de programação moderna e profissional para Web e Desktop com suporte a Cirílico",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "trest": "./dist/cli.js",
9
+ "trestc": "./dist/compiler.js"
10
+ },
11
+ "scripts": {
12
+ "prebuild": "npm run clean",
13
+ "build": "tsc && npm run postbuild",
14
+ "postbuild": "node scripts/postbuild.js",
15
+ "clean": "rimraf dist",
16
+ "build:watch": "tsc --watch",
17
+ "dev": "ts-node src/cli.ts",
18
+ "compile:web": "ts-node src/compiler/web.ts",
19
+ "compile:exe": "ts-node src/compiler/exe.ts",
20
+ "test": "ts-node src/tests/runner.ts",
21
+ "bundle": "tsc && pkg dist/cli.js --targets node18-win-x64,node18-win-x86,node18-linux-x64,node18-macos-x64 --out-path dist/bin",
22
+ "preinstall": "node scripts/preinstall.js",
23
+ "postinstall": "node scripts/postinstall.js",
24
+ "prepare": "npm run build",
25
+ "prepublishOnly": "npm run build",
26
+ "version": "node scripts/version.js && git add -A",
27
+ "postversion": "git push && git push --tags"
28
+ },
29
+ "keywords": [
30
+ "language",
31
+ "compiler",
32
+ "programming",
33
+ "programming-language",
34
+ "web",
35
+ "executable",
36
+ "typescript",
37
+ "interpreter",
38
+ "cyrillic",
39
+ "russian",
40
+ "trest"
41
+ ],
42
+ "author": {
43
+ "name": "PoktWeb",
44
+ "url": "https://github.com/poktweb"
45
+ },
46
+ "contributors": [
47
+ {
48
+ "name": "PoktWeb",
49
+ "url": "https://github.com/poktweb"
50
+ }
51
+ ],
52
+ "license": "MIT",
53
+ "engines": {
54
+ "node": ">=18.0.0",
55
+ "npm": ">=9.0.0"
56
+ },
57
+ "files": [
58
+ "dist/",
59
+ "src/std/",
60
+ "scripts/",
61
+ "README.md",
62
+ "README_PT.md",
63
+ "LICENSE",
64
+ "CHANGELOG.md",
65
+ "INSTALL.md"
66
+ ],
67
+ "repository": {
68
+ "type": "git",
69
+ "url": "https://github.com/trest-language/trest"
70
+ },
71
+ "bugs": {
72
+ "url": "https://github.com/trest-language/trest/issues"
73
+ },
74
+ "homepage": "https://trest-site.vercel.app",
75
+ "os": [
76
+ "darwin",
77
+ "linux",
78
+ "win32"
79
+ ],
80
+ "cpu": [
81
+ "x64",
82
+ "ia32",
83
+ "arm64"
84
+ ],
85
+ "devDependencies": {
86
+ "@types/minimist": "^1.2.5",
87
+ "@types/node": "^20.0.0",
88
+ "rimraf": "^5.0.10",
89
+ "ts-node": "^10.9.0",
90
+ "typescript": "^5.0.0"
91
+ },
92
+ "dependencies": {
93
+ "minimist": "^1.2.8",
94
+ "pkg": "^5.8.1"
95
+ },
96
+ "pkg": {
97
+ "assets": [
98
+ "src/std/**/*"
99
+ ]
100
+ }
101
+ }
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Post-build script
4
+ * Configurações após a compilação
5
+ */
6
+
7
+ const fs = require('fs');
8
+ const path = require('path');
9
+
10
+ console.log('\n🔨 Post-build configuration...\n');
11
+
12
+ // Adicionar shebang aos binários
13
+ function addShebang() {
14
+ const bins = [
15
+ path.join(__dirname, '..', 'dist', 'cli.js'),
16
+ path.join(__dirname, '..', 'dist', 'compiler.js')
17
+ ];
18
+
19
+ bins.forEach(bin => {
20
+ if (fs.existsSync(bin)) {
21
+ let content = fs.readFileSync(bin, 'utf-8');
22
+
23
+ // Adicionar shebang se não existir
24
+ if (!content.startsWith('#!/usr/bin/env node')) {
25
+ content = '#!/usr/bin/env node\n' + content;
26
+ fs.writeFileSync(bin, content);
27
+ }
28
+
29
+ console.log(`✅ Configured ${path.basename(bin)}`);
30
+ }
31
+ });
32
+ }
33
+
34
+ // Verificar arquivos gerados
35
+ function verifyBuild() {
36
+ const requiredFiles = [
37
+ 'dist/index.js',
38
+ 'dist/cli.js',
39
+ 'dist/compiler.js',
40
+ 'dist/lexer.js',
41
+ 'dist/parser.js',
42
+ 'dist/interpreter.js'
43
+ ];
44
+
45
+ let allOk = true;
46
+
47
+ requiredFiles.forEach(file => {
48
+ const filePath = path.join(__dirname, '..', file);
49
+ if (!fs.existsSync(filePath)) {
50
+ console.error(`❌ Missing: ${file}`);
51
+ allOk = false;
52
+ }
53
+ });
54
+
55
+ if (allOk) {
56
+ console.log('✅ All build artifacts present');
57
+ }
58
+ }
59
+
60
+ // Copiar módulos std para dist se necessário
61
+ function copyStdModules() {
62
+ const srcStd = path.join(__dirname, '..', 'src', 'std');
63
+ const distStd = path.join(__dirname, '..', 'dist', 'std');
64
+
65
+ if (fs.existsSync(srcStd) && !fs.existsSync(distStd)) {
66
+ fs.mkdirSync(distStd, { recursive: true });
67
+
68
+ const files = fs.readdirSync(srcStd);
69
+ files.forEach(file => {
70
+ if (file.endsWith('.trest')) {
71
+ const srcPath = path.join(srcStd, file);
72
+ const distPath = path.join(distStd, file);
73
+ fs.copyFileSync(srcPath, distPath);
74
+ console.log(`✅ Copied ${file}`);
75
+ }
76
+ });
77
+ }
78
+ }
79
+
80
+ // Executar configurações
81
+ try {
82
+ addShebang();
83
+ verifyBuild();
84
+ copyStdModules();
85
+ console.log('\n✅ Post-build complete!\n');
86
+ } catch (error) {
87
+ console.error('❌ Post-build error:', error.message);
88
+ process.exit(1);
89
+ }
90
+
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Post-install script
4
+ * Configura o ambiente após a instalação
5
+ */
6
+
7
+ const fs = require('fs');
8
+ const path = require('path');
9
+
10
+ const VERSION = require('../package.json').version;
11
+
12
+ console.log(`\n🎉 Trest Language v${VERSION} installed successfully!\n`);
13
+
14
+ // Criar arquivo de configuração se não existir
15
+ function createConfigFile() {
16
+ const configPath = path.join(process.cwd(), '.trestrc');
17
+
18
+ if (!fs.existsSync(configPath)) {
19
+ const config = {
20
+ version: VERSION,
21
+ compiler: {
22
+ web: {
23
+ minify: false,
24
+ bundle: true
25
+ },
26
+ exe: {
27
+ minify: false,
28
+ standalone: true
29
+ }
30
+ },
31
+ runtime: {
32
+ strictMode: false,
33
+ debugMode: false
34
+ }
35
+ };
36
+
37
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
38
+ console.log('✅ Created .trestrc configuration file');
39
+ }
40
+ }
41
+
42
+ // Verificar permissões dos binários
43
+ function checkBinPermissions() {
44
+ const distPath = path.join(process.cwd(), 'dist');
45
+
46
+ if (fs.existsSync(distPath)) {
47
+ console.log('✅ Build artifacts found');
48
+ } else {
49
+ console.log('⚠️ Build artifacts not found, run: npm run build');
50
+ }
51
+ }
52
+
53
+ // Verificar módulos std
54
+ function checkStdModules() {
55
+ const stdPath = path.join(process.cwd(), 'src', 'std');
56
+
57
+ if (fs.existsSync(stdPath)) {
58
+ const modules = fs.readdirSync(stdPath).filter(f => f.endsWith('.trest'));
59
+ console.log(`✅ Standard library: ${modules.length} modules found`);
60
+ } else {
61
+ console.error('❌ Standard library not found');
62
+ }
63
+ }
64
+
65
+ // Mensagens de instrução
66
+ function showInstructions() {
67
+ console.log('\n📚 Getting started:\n');
68
+ console.log(' Run a Trest file:');
69
+ console.log(' npx trest yourfile.trest\n');
70
+ console.log(' Compile for web:');
71
+ console.log(' npx trestc yourfile.trest --mode web\n');
72
+ console.log(' Compile to executable:');
73
+ console.log(' npx trestc yourfile.trest --mode exe\n');
74
+ console.log(' For more information:');
75
+ console.log(' npx trest --help\n');
76
+ console.log('📖 Documentation: https://github.com/trest-language/trest\n');
77
+ }
78
+
79
+ // Executar configurações
80
+ try {
81
+ createConfigFile();
82
+ checkBinPermissions();
83
+ checkStdModules();
84
+ showInstructions();
85
+ } catch (error) {
86
+ console.error('⚠️ Post-install setup had some issues:', error.message);
87
+ console.log('You can manually configure later.\n');
88
+ }
89
+