mimo-lang 1.1.0 → 2.0.6

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 (166) hide show
  1. package/.gitattributes +24 -0
  2. package/LICENSE +21 -0
  3. package/README.md +91 -6
  4. package/adapters/browserAdapter.js +86 -0
  5. package/adapters/nodeAdapter.js +101 -0
  6. package/bin/cli.js +80 -0
  7. package/bin/commands/convert.js +27 -0
  8. package/bin/commands/doctor.js +139 -0
  9. package/bin/commands/eval.js +39 -0
  10. package/bin/commands/fmt.js +109 -0
  11. package/bin/commands/help.js +72 -0
  12. package/bin/commands/lint.js +117 -0
  13. package/bin/commands/repl.js +24 -0
  14. package/bin/commands/run.js +64 -0
  15. package/bin/commands/test.js +126 -0
  16. package/bin/utils/colors.js +38 -0
  17. package/bin/utils/formatError.js +47 -0
  18. package/bin/utils/fs.js +57 -0
  19. package/bin/utils/version.js +8 -0
  20. package/build.js +18 -0
  21. package/bun.lock +74 -0
  22. package/index.js +49 -39
  23. package/index.web.js +364 -0
  24. package/interpreter/BuiltinFunction.js +32 -0
  25. package/interpreter/ErrorHandler.js +120 -0
  26. package/interpreter/ExpressionEvaluator.js +106 -0
  27. package/interpreter/Interpreter.js +172 -0
  28. package/interpreter/MimoError.js +112 -0
  29. package/interpreter/ModuleLoader.js +236 -0
  30. package/interpreter/StatementExecutor.js +107 -0
  31. package/interpreter/Utils.js +82 -0
  32. package/interpreter/Values.js +87 -0
  33. package/interpreter/coreBuiltins.js +490 -0
  34. package/interpreter/environment.js +99 -0
  35. package/interpreter/evaluators/binaryExpressionEvaluator.js +111 -0
  36. package/interpreter/evaluators/collectionEvaluator.js +151 -0
  37. package/interpreter/evaluators/functionCallEvaluator.js +76 -0
  38. package/interpreter/evaluators/literalEvaluator.js +27 -0
  39. package/interpreter/evaluators/moduleAccessEvaluator.js +25 -0
  40. package/interpreter/evaluators/templateLiteralEvaluator.js +20 -0
  41. package/interpreter/executors/BaseExecutor.js +37 -0
  42. package/interpreter/executors/ControlFlowExecutor.js +206 -0
  43. package/interpreter/executors/FunctionExecutor.js +126 -0
  44. package/interpreter/executors/PatternMatchExecutor.js +93 -0
  45. package/interpreter/executors/VariableExecutor.js +144 -0
  46. package/interpreter/index.js +8 -0
  47. package/interpreter/stdlib/array/accessFunctions.js +61 -0
  48. package/interpreter/stdlib/array/arrayUtils.js +36 -0
  49. package/interpreter/stdlib/array/higherOrderFunctions.js +285 -0
  50. package/interpreter/stdlib/array/searchFunctions.js +77 -0
  51. package/interpreter/stdlib/array/setFunctions.js +49 -0
  52. package/interpreter/stdlib/array/transformationFunctions.js +68 -0
  53. package/interpreter/stdlib/array.js +85 -0
  54. package/interpreter/stdlib/assert.js +143 -0
  55. package/interpreter/stdlib/datetime.js +170 -0
  56. package/interpreter/stdlib/env.js +54 -0
  57. package/interpreter/stdlib/fs.js +161 -0
  58. package/interpreter/stdlib/http.js +92 -0
  59. package/interpreter/stdlib/json.js +70 -0
  60. package/interpreter/stdlib/math.js +309 -0
  61. package/interpreter/stdlib/object.js +142 -0
  62. package/interpreter/stdlib/path.js +69 -0
  63. package/interpreter/stdlib/regex.js +134 -0
  64. package/interpreter/stdlib/string.js +260 -0
  65. package/interpreter/suggestions.js +46 -0
  66. package/lexer/Lexer.js +245 -0
  67. package/lexer/TokenTypes.js +131 -0
  68. package/lexer/createToken.js +11 -0
  69. package/lexer/tokenizers/commentTokenizer.js +45 -0
  70. package/lexer/tokenizers/literalTokenizer.js +163 -0
  71. package/lexer/tokenizers/symbolTokenizer.js +69 -0
  72. package/lexer/tokenizers/whitespaceTokenizer.js +36 -0
  73. package/package.json +29 -11
  74. package/parser/ASTNodes.js +448 -0
  75. package/parser/Parser.js +188 -0
  76. package/parser/expressions/atomicExpressions.js +165 -0
  77. package/parser/expressions/conditionalExpressions.js +0 -0
  78. package/parser/expressions/operatorExpressions.js +79 -0
  79. package/parser/expressions/primaryExpressions.js +77 -0
  80. package/parser/parseStatement.js +184 -0
  81. package/parser/parserExpressions.js +115 -0
  82. package/parser/parserUtils.js +19 -0
  83. package/parser/statements/controlFlowParsers.js +106 -0
  84. package/parser/statements/functionParsers.js +314 -0
  85. package/parser/statements/moduleParsers.js +57 -0
  86. package/parser/statements/patternMatchParsers.js +124 -0
  87. package/parser/statements/variableParsers.js +155 -0
  88. package/repl.js +325 -0
  89. package/test.js +47 -1
  90. package/tools/PrettyPrinter.js +3 -0
  91. package/tools/convert/Args.js +46 -0
  92. package/tools/convert/Registry.js +91 -0
  93. package/tools/convert/Transpiler.js +78 -0
  94. package/tools/convert/plugins/README.md +66 -0
  95. package/tools/convert/plugins/alya/index.js +10 -0
  96. package/tools/convert/plugins/alya/to_alya.js +289 -0
  97. package/tools/convert/plugins/alya/visitors/expressions.js +257 -0
  98. package/tools/convert/plugins/alya/visitors/statements.js +403 -0
  99. package/tools/convert/plugins/base_converter.js +228 -0
  100. package/tools/convert/plugins/javascript/index.js +10 -0
  101. package/tools/convert/plugins/javascript/mimo_runtime.js +265 -0
  102. package/tools/convert/plugins/javascript/to_js.js +155 -0
  103. package/tools/convert/plugins/javascript/visitors/expressions.js +197 -0
  104. package/tools/convert/plugins/javascript/visitors/patterns.js +102 -0
  105. package/tools/convert/plugins/javascript/visitors/statements.js +236 -0
  106. package/tools/convert/plugins/python/index.js +10 -0
  107. package/tools/convert/plugins/python/mimo_runtime.py +811 -0
  108. package/tools/convert/plugins/python/to_py.js +329 -0
  109. package/tools/convert/plugins/python/visitors/expressions.js +272 -0
  110. package/tools/convert/plugins/python/visitors/patterns.js +100 -0
  111. package/tools/convert/plugins/python/visitors/statements.js +257 -0
  112. package/tools/convert.js +102 -0
  113. package/tools/format/CommentAttacher.js +190 -0
  114. package/tools/format/CommentLexer.js +152 -0
  115. package/tools/format/Printer.js +849 -0
  116. package/tools/format/config.js +107 -0
  117. package/tools/formatter.js +169 -0
  118. package/tools/lint/Linter.js +391 -0
  119. package/tools/lint/config.js +114 -0
  120. package/tools/lint/rules/consistent-return.js +62 -0
  121. package/tools/lint/rules/max-depth.js +56 -0
  122. package/tools/lint/rules/no-empty-function.js +45 -0
  123. package/tools/lint/rules/no-magic-numbers.js +46 -0
  124. package/tools/lint/rules/no-shadow.js +113 -0
  125. package/tools/lint/rules/no-unused-vars.js +26 -0
  126. package/tools/lint/rules/prefer-const.js +19 -0
  127. package/tools/linter.js +261 -0
  128. package/tools/replFormatter.js +93 -0
  129. package/tools/stamp-version.js +32 -0
  130. package/web/index.js +9 -0
  131. package/bun.lockb +0 -0
  132. package/cli.js +0 -84
  133. package/compiler/execute/interpreter.js +0 -68
  134. package/compiler/execute/interpreters/binary.js +0 -12
  135. package/compiler/execute/interpreters/call.js +0 -10
  136. package/compiler/execute/interpreters/if.js +0 -10
  137. package/compiler/execute/interpreters/try-catch.js +0 -10
  138. package/compiler/execute/interpreters/while.js +0 -8
  139. package/compiler/execute/utils/createfunction.js +0 -11
  140. package/compiler/execute/utils/evaluate.js +0 -20
  141. package/compiler/execute/utils/operate.js +0 -23
  142. package/compiler/lexer/processToken.js +0 -40
  143. package/compiler/lexer/tokenTypes.js +0 -4
  144. package/compiler/lexer/tokenizer.js +0 -63
  145. package/compiler/parser/expression/comparison.js +0 -18
  146. package/compiler/parser/expression/identifier.js +0 -29
  147. package/compiler/parser/expression/number.js +0 -10
  148. package/compiler/parser/expression/operator.js +0 -21
  149. package/compiler/parser/expression/punctuation.js +0 -31
  150. package/compiler/parser/expression/string.js +0 -6
  151. package/compiler/parser/parseExpression.js +0 -27
  152. package/compiler/parser/parseStatement.js +0 -35
  153. package/compiler/parser/parser.js +0 -16
  154. package/compiler/parser/statement/call.js +0 -26
  155. package/compiler/parser/statement/function.js +0 -29
  156. package/compiler/parser/statement/if.js +0 -34
  157. package/compiler/parser/statement/return.js +0 -10
  158. package/compiler/parser/statement/set.js +0 -11
  159. package/compiler/parser/statement/show.js +0 -10
  160. package/compiler/parser/statement/try-catch.js +0 -25
  161. package/compiler/parser/statement/while.js +0 -22
  162. package/converter/go/convert.js +0 -110
  163. package/converter/js/convert.js +0 -107
  164. package/i.js +0 -30
  165. package/jsconfig.json +0 -27
  166. package/webpack.config.js +0 -9
@@ -1,107 +0,0 @@
1
- import pkg from 'js-beautify';
2
- const { js_beautify } = pkg;
3
-
4
-
5
- let declaredVariables = new Set();
6
-
7
- export function generateCodeFromAst(node) {
8
- switch (node.type) {
9
- case "function":
10
- return generateFunction(node);
11
- case "assignment":
12
- return generateAssignment(node);
13
- case "while":
14
- return generateWhile(node);
15
- case "if":
16
- return generateIf(node);
17
- case "return":
18
- return generateReturn(node);
19
- case "call":
20
- return generateCall(node);
21
- case "print":
22
- return generatePrint(node);
23
- case "literal":
24
- return node.value;
25
- case "variable":
26
- return node.name;
27
- case "binary":
28
- return generateBinary(node);
29
- case "indexAccess":
30
- return generateIndexAccess(node);
31
- case "list":
32
- return generateList(node);
33
- default:
34
- console.log(node);
35
- throw new Error(`Unknown node type: ${node.type}`);
36
- }
37
- }
38
-
39
- export function generateCodeJsFromAstArray(ast) {
40
- const generatedCode = ast.map(generateCodeFromAst).join("\n");
41
- return js_beautify(generatedCode);
42
- }
43
-
44
- function generateFunction(node) {
45
- const params = node.params.join(", ");
46
- const body = node.body.map(generateCodeFromAst).join("\n");
47
- return `function ${node.name}(${params}) {\n${body}\n}`;
48
- }
49
-
50
- function generateAssignment(node) {
51
- let prefix = "";
52
- if (!declaredVariables.has(node.target)) {
53
- prefix = "let ";
54
- declaredVariables.add(node.target);
55
- }
56
- return `${prefix}${node.target} = ${generateCodeFromAst(node.value)};`;
57
- }
58
-
59
- function generateWhile(node) {
60
- const condition = generateCodeFromAst(node.condition);
61
- const body = node.body.map(generateCodeFromAst).join("\n");
62
- return `while (${condition}) {\n${body}\n}`;
63
- }
64
-
65
- function generateIf(node) {
66
- const condition = generateCodeFromAst(node.condition);
67
- const consequent = node.consequent.map(generateCodeFromAst).join("\n");
68
- return `if (${condition}) {\n${consequent}\n}`;
69
- }
70
-
71
- function generateReturn(node) {
72
- return `return ${generateCodeFromAst(node.expression)};`;
73
- }
74
-
75
- function generateCall(node) {
76
- const args = node.args.map(generateCodeFromAst).join(", ");
77
- let callCode = `${node.name}(${args})`;
78
- if (node.target) {
79
- let prefix = "";
80
- if (!declaredVariables.has(node.target)) {
81
- prefix = "let ";
82
- declaredVariables.add(node.target);
83
- }
84
- callCode = `${prefix}${node.target} = ${callCode};`;
85
- }
86
- return callCode;
87
- }
88
-
89
- function generatePrint(node) {
90
- return `console.log(${generateCodeFromAst(node.value)});`;
91
- }
92
-
93
- function generateBinary(node) {
94
- const left = generateCodeFromAst(node.left);
95
- const right = generateCodeFromAst(node.right);
96
- return `${left} ${node.operator} ${right}`;
97
- }
98
-
99
- function generateIndexAccess(node) {
100
- const index = generateCodeFromAst(node.index);
101
- return `${node.name}[${index}]`;
102
- }
103
-
104
- function generateList(node) {
105
- const elements = node.elements.map(generateCodeFromAst).join(", ");
106
- return `[${elements}]`;
107
- }
package/i.js DELETED
@@ -1,30 +0,0 @@
1
- const fs = require('fs');
2
- const path = require('path');
3
-
4
- function addJsExtensionToImports(filePath) {
5
- const code = fs.readFileSync(filePath, 'utf8');
6
- const newCode = code.replace(/from\s+(['"])(.*?)(?<!\.js)\1/g, 'from $1$2.js$1');
7
-
8
- if (code !== newCode) {
9
- fs.writeFileSync(filePath, newCode, 'utf8');
10
- console.log(`Updated imports in ${filePath}`);
11
- }
12
- }
13
-
14
- function traverseDirectory(dirPath) {
15
- const files = fs.readdirSync(dirPath);
16
-
17
- for (const file of files) {
18
- const filePath = path.join(dirPath, file);
19
- const stats = fs.statSync(filePath);
20
-
21
- if (stats.isDirectory()) {
22
- traverseDirectory(filePath);
23
- } else if (path.extname(filePath) === '.js') {
24
- addJsExtensionToImports(filePath);
25
- }
26
- }
27
- }
28
-
29
- const rootDir = './'; // replace with your directory path
30
- traverseDirectory(rootDir);
package/jsconfig.json DELETED
@@ -1,27 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- // Enable latest features
4
- "lib": ["ESNext"],
5
- "target": "ESNext",
6
- "module": "ESNext",
7
- "moduleDetection": "force",
8
- "jsx": "react-jsx",
9
- "allowJs": true,
10
-
11
- // Bundler mode
12
- "moduleResolution": "bundler",
13
- "allowImportingTsExtensions": true,
14
- "verbatimModuleSyntax": true,
15
- "noEmit": true,
16
-
17
- // Best practices
18
- "strict": true,
19
- "skipLibCheck": true,
20
- "noFallthroughCasesInSwitch": true,
21
-
22
- // Some stricter flags (disabled by default)
23
- "noUnusedLocals": false,
24
- "noUnusedParameters": false,
25
- "noPropertyAccessFromIndexSignature": false
26
- }
27
- }
package/webpack.config.js DELETED
@@ -1,9 +0,0 @@
1
- const path = require('path');
2
-
3
- module.exports = {
4
- entry: './index.js', // Entry point of your application
5
- output: {
6
- filename: 'bundle.js', // Name of the bundled output file
7
- path: path.resolve(__dirname, 'dist'), // Output directory
8
- },
9
- };