oclang 1.2.3 → 1.3.2

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 (60) hide show
  1. package/.gitattributes +7 -0
  2. package/BUG_REGISTRY.md +6 -1
  3. package/CHANGELOG.md +15 -1
  4. package/README.md +2 -0
  5. package/dist/cli/ocat/index.js +0 -0
  6. package/dist/cli/ocm/commands/run.js +0 -5
  7. package/dist/cli/ocm/index.js +0 -0
  8. package/dist/core/ast/astBuilder.js +20 -144
  9. package/dist/core/ast/statements/_base.js +1 -0
  10. package/dist/core/ast/statements/function.js +53 -0
  11. package/dist/core/ast/statements/import.js +16 -0
  12. package/dist/core/ast/statements/io.js +45 -0
  13. package/dist/core/ast/statements/vars.js +37 -0
  14. package/dist/core/ast/types/base/statement.js +1 -0
  15. package/dist/core/ast/types/statements/importStatement.js +1 -0
  16. package/dist/core/ast/types/statements/index.js +5 -4
  17. package/dist/core/index.js +7 -5
  18. package/dist/core/lexer/tokens/keywords.js +2 -1
  19. package/dist/core/parser/parser.js +42 -15
  20. package/dist/core/runner/funcs/_base.js +1 -0
  21. package/dist/core/runner/funcs/functions.js +28 -0
  22. package/dist/core/runner/funcs/io.js +29 -0
  23. package/dist/core/runner/funcs/modules.js +11 -0
  24. package/dist/core/runner/funcs/variables.js +42 -0
  25. package/dist/core/runner/runner.js +16 -101
  26. package/dist/core/services/log.service.js +7 -7
  27. package/dist/shared/context/globalContext.js +7 -1
  28. package/dist/shared/manager/baseManager.js +5 -3
  29. package/dist/shared/manager/warn/coreWarnings.js +2 -2
  30. package/package.json +30 -30
  31. package/src/cli/ocm/commands/run.ts +0 -5
  32. package/src/core/ast/astBuilder.ts +16 -9
  33. package/src/core/ast/statements/_base.ts +3 -0
  34. package/src/core/ast/statements/function.ts +8 -6
  35. package/src/core/ast/statements/import.ts +22 -0
  36. package/src/core/ast/statements/io.ts +7 -8
  37. package/src/core/ast/statements/vars.ts +37 -38
  38. package/src/core/ast/types/base/statement.ts +2 -1
  39. package/src/core/ast/types/statements/callStatement.ts +1 -2
  40. package/src/core/ast/types/statements/functionStatement.ts +2 -2
  41. package/src/core/ast/types/statements/importStatement.ts +6 -0
  42. package/src/core/ast/types/statements/index.ts +12 -9
  43. package/src/core/ast/types/statements/printStatement.ts +2 -2
  44. package/src/core/ast/types/statements/variableStatement.ts +2 -2
  45. package/src/core/context/coreContext.ts +3 -3
  46. package/src/core/index.ts +8 -5
  47. package/src/core/parser/parser.ts +40 -17
  48. package/src/core/runner/funcs/_base.ts +3 -0
  49. package/src/core/runner/funcs/functions.ts +46 -0
  50. package/src/core/runner/funcs/io.ts +38 -0
  51. package/src/core/runner/funcs/modules.ts +17 -0
  52. package/src/core/runner/funcs/variables.ts +57 -0
  53. package/src/core/runner/runner.ts +27 -121
  54. package/src/core/services/log.service.ts +24 -16
  55. package/src/shared/context/globalContext.ts +12 -1
  56. package/src/shared/manager/baseManager.ts +5 -3
  57. package/src/shared/manager/warn/coreWarnings.ts +2 -2
  58. package/src/shared/models/func.ts +1 -1
  59. package/tsconfig.json +3 -3
  60. package/src/core/ast/statements/base.ts +0 -3
package/src/core/index.ts CHANGED
@@ -3,8 +3,9 @@ import { OcatParser } from "./parser/parser.js";
3
3
  import { run } from "./runner/runner.js";
4
4
  import { createCoreContext } from "./context/coreContext.js";
5
5
  import { buildAst } from "./ast/astBuilder.js";
6
- import * as ctx from "../shared/context/globalContext.js";
6
+ import * as gctx from "../shared/context/globalContext.js";
7
7
  import fs from "fs";
8
+ import { defaultLoggerConfig, LoggerService } from "./services/log.service.js";
8
9
 
9
10
  export function execute(code: string) {
10
11
  const lexingResult = ocatLexer.tokenize(code);
@@ -15,12 +16,14 @@ export function execute(code: string) {
15
16
  const ast = buildAst(cst);
16
17
 
17
18
  process.on("exit", () => {
18
- if (ctx.get("isProject")) {
19
- const logs = ctx.get("services").log.toString();
19
+ if (gctx.get("isProject")) {
20
+ const logs = gctx.get("services").log.toString();
20
21
  fs.writeFileSync(".ocat/logs.txt", logs);
21
22
  }
22
23
  });
23
24
 
24
- const context = createCoreContext();
25
- run(ast, context);
25
+ gctx.pushService(new LoggerService(defaultLoggerConfig), "log");
26
+
27
+ const ctx = run(ast, createCoreContext());
28
+ return ctx;
26
29
  }
@@ -4,9 +4,7 @@ import * as token from "../lexer/tokens/index.js";
4
4
 
5
5
  export class OcatParser extends CstParser {
6
6
  constructor() {
7
- super(token.allTokens, {
8
- recoveryEnabled: true,
9
- });
7
+ super(token.allTokens, { recoveryEnabled: true });
10
8
  this.performSelfAnalysis();
11
9
  }
12
10
 
@@ -50,12 +48,13 @@ export class OcatParser extends CstParser {
50
48
  });
51
49
 
52
50
  public importStatement = this.RULE("importStatement", () => {
53
- this.CONSUME(token.Import);
54
- this.CONSUME(token.StringLiteral);
51
+ const imp = this.CONSUME(token.Import);
52
+ const path = this.CONSUME(token.StringLiteral);
53
+ // opcional: guardar tokens para el AST
55
54
  });
56
55
 
57
56
  public printStatement = this.RULE("printStatement", () => {
58
- this.CONSUME(token.Output);
57
+ const output = this.CONSUME(token.Output);
59
58
  this.CONSUME(token.LeftParen);
60
59
  this.OR([
61
60
  ...token.literals.map((lit) => ({
@@ -70,17 +69,12 @@ export class OcatParser extends CstParser {
70
69
  });
71
70
 
72
71
  public variableStatement = this.RULE("variableStatement", () => {
73
- this.OPTION(() => {
74
- this.OR([
75
- { ALT: () => this.CONSUME(token.Set, { LABEL: "Set" }) },
76
- { ALT: () => this.CONSUME(token.Const, { LABEL: "Const" }) },
77
- ]);
78
- });
79
- const type = this.CONSUME(token.VarType).image as ValueType;
80
- this.CONSUME(token.Identifier);
72
+
73
+ const typeToken = this.CONSUME(token.VarType);
74
+ const idToken = this.CONSUME(token.Identifier);
81
75
  this.CONSUME(token.Assign);
82
76
 
83
- switch (type) {
77
+ switch (typeToken.image as ValueType) {
84
78
  case ValueType.String:
85
79
  this.CONSUME(token.StringLiteral);
86
80
  break;
@@ -91,11 +85,26 @@ export class OcatParser extends CstParser {
91
85
  this.CONSUME(token.BooleanLiteral);
92
86
  break;
93
87
  }
88
+
89
+ return {
90
+ typeToken, idToken
91
+ };
94
92
  });
95
93
 
96
94
  public functionStatement = this.RULE("functionStatement", () => {
97
- this.CONSUME(token.Function);
98
- this.CONSUME(token.Identifier);
95
+ const funcKeyword = this.CONSUME(token.Function);
96
+ const idToken = this.CONSUME(token.Identifier);
97
+
98
+ this.CONSUME(token.LeftParen);
99
+ this.MANY_SEP({
100
+ SEP: token.Comma,
101
+ DEF: () => {
102
+ this.CONSUME(token.VarType);
103
+ this.CONSUME2(token.Identifier);
104
+ },
105
+ });
106
+ this.CONSUME(token.RightParen);
107
+
99
108
  this.CONSUME(token.LeftBrace);
100
109
  this.MANY(() => this.SUBRULE(this.statement));
101
110
  this.CONSUME(token.RightBrace);
@@ -104,5 +113,19 @@ export class OcatParser extends CstParser {
104
113
  public callStatement = this.RULE("callStatement", () => {
105
114
  this.CONSUME(token.Call);
106
115
  this.CONSUME(token.Identifier);
116
+
117
+ this.CONSUME(token.LeftParen);
118
+ this.MANY_SEP({
119
+ SEP: token.Comma,
120
+ DEF: () => {
121
+ this.OR([
122
+ ...token.literals.map((lit) => ({
123
+ ALT: () => this.CONSUME(lit),
124
+ })),
125
+ { ALT: () => this.CONSUME2(token.Identifier) },
126
+ ]);
127
+ },
128
+ });
129
+ this.CONSUME(token.RightParen);
107
130
  });
108
131
  }
@@ -0,0 +1,3 @@
1
+ import type { CoreContext } from "../../context/coreContext.js";
2
+
3
+ export type RunnerFunc<T> = (statement: T, ctx: CoreContext) => void;
@@ -0,0 +1,46 @@
1
+ import { AlreadyDeclaredFunctionError } from "../../../shared/manager/errors/semantic/undefined/declared.js";
2
+ import type {
3
+ CallStatement,
4
+ FunctionStatement,
5
+ } from "../../ast/types/statements/index.js";
6
+ import type { RunnerFunc } from "./_base.js";
7
+ import { UndeclaredFunctionError } from "../../../shared/manager/errors/semantic/undefined/undeclared.js";
8
+ import { run } from "../runner.js";
9
+
10
+ export const functionStatement: RunnerFunc<FunctionStatement> = (
11
+ statement,
12
+ context,
13
+ ) => {
14
+ const idToken = statement.id;
15
+ if (!idToken) return;
16
+
17
+ const funcData = context.functions[idToken];
18
+ if (funcData) {
19
+ new AlreadyDeclaredFunctionError(idToken).throw(
20
+ statement.sourceInfo.startLine,
21
+ );
22
+ }
23
+
24
+ const body = statement.func.body ?? [];
25
+ const scope = statement.func.scope;
26
+ context.functions[idToken] = {
27
+ body,
28
+ scope,
29
+ };
30
+ };
31
+
32
+ export const callStatement: RunnerFunc<CallStatement> = (
33
+ statement,
34
+ context,
35
+ ) => {
36
+ const funcId = statement.id;
37
+ if (!funcId) return;
38
+
39
+ const funcData = context.functions[funcId];
40
+ if (!funcData) {
41
+ new UndeclaredFunctionError(funcId).throw(
42
+ statement.sourceInfo.startLine,
43
+ );
44
+ }
45
+ run(funcData.body, funcData.scope);
46
+ };
@@ -0,0 +1,38 @@
1
+ import { UndeclaredVariableError } from "../../../shared/manager/errors/semantic/undefined/undeclared.js";
2
+ import { ValueType } from "../../../shared/models/value.js";
3
+ import type { PrintStatement } from "../../ast/types/statements/index.js";
4
+ import { solveString } from "../utils/string.js";
5
+ import * as ctx from "../../../shared/context/globalContext.js";
6
+ import type { RunnerFunc } from "./_base.js";
7
+
8
+ export const printStatement: RunnerFunc<PrintStatement> = (
9
+ statement,
10
+ context,
11
+ ) => {
12
+ let val;
13
+ switch (statement.value.type) {
14
+ case ValueType.Identifier:
15
+ const id = statement.value.value;
16
+ const varData = context.variables[id];
17
+ if (varData !== undefined) {
18
+ val = varData.value;
19
+ } else {
20
+ new UndeclaredVariableError(id).throw(
21
+ statement.sourceInfo.startLine,
22
+ );
23
+ }
24
+ break;
25
+
26
+ case ValueType.String:
27
+ val = solveString(statement.value.value, context, (err) => {
28
+ err.throw(statement.sourceInfo.startLine);
29
+ });
30
+ break;
31
+
32
+ default:
33
+ val = statement.value.value;
34
+ break;
35
+ }
36
+ const info = ctx.getService("log");
37
+ info?.info(val);
38
+ };
@@ -0,0 +1,17 @@
1
+ import { execute } from "../../index.js";
2
+ import type { ImportStatement } from "../../ast/types/statements/index.js";
3
+ import type { RunnerFunc } from "./_base.js";
4
+ import fs from "fs";
5
+
6
+ export const importStatement: RunnerFunc<ImportStatement> = (
7
+ statement,
8
+ context,
9
+ ) => {
10
+ const fctx = execute(fs.readFileSync(statement.path).toString());
11
+ for (const [key, value] of Object.entries(fctx.variables)) {
12
+ context.variables[key] = value;
13
+ }
14
+ for (const [key, value] of Object.entries(fctx.functions)) {
15
+ context.functions[key] = value;
16
+ }
17
+ };
@@ -0,0 +1,57 @@
1
+ import {
2
+ AlreadyDeclaredVariableError,
3
+ CantModifyConstError,
4
+ } from "../../../shared/manager/errors/semantic/undefined/declared.js";
5
+ import { UndeclaredVariableError } from "../../../shared/manager/errors/semantic/undefined/undeclared.js";
6
+ import { ValueType } from "../../../shared/models/value.js";
7
+ import type { VariableStatement } from "../../ast/types/statements/index.js";
8
+ import { solveString } from "../utils/string.js";
9
+ import type { RunnerFunc } from "./_base.js";
10
+
11
+ export const variableStatement: RunnerFunc<VariableStatement> = (
12
+ statement,
13
+ context,
14
+ ) => {
15
+
16
+ const varId = statement.id;
17
+
18
+ /*if (statement.set) {
19
+ if (!context.variables[varId]) {
20
+ new UndeclaredVariableError(varId).throw(
21
+ statement.sourceInfo.startLine,
22
+ );
23
+ }
24
+ if (context.variables[varId]?.props.isConst) {
25
+ new CantModifyConstError(varId).throw(
26
+ statement.sourceInfo.startLine,
27
+ );
28
+ }
29
+ } else if (!statement.var.props.isConst) {
30
+ if (context.variables[varId]) {
31
+ new AlreadyDeclaredVariableError(varId).throw(
32
+ statement.sourceInfo.startLine,
33
+ );
34
+ }
35
+ }*/
36
+
37
+ let value: string = statement.var.value;
38
+
39
+ switch (statement.var.type) {
40
+ case ValueType.String:
41
+ value = solveString(value, context, (err) => {
42
+ err.throw(statement.sourceInfo.startLine);
43
+ });
44
+ break;
45
+ default:
46
+ break;
47
+ }
48
+
49
+ context.variables[varId] = {
50
+ type: statement.var.type,
51
+ value,
52
+ props: {
53
+ isConst: !!statement.var.props.isConst,
54
+ },
55
+ };
56
+
57
+ };
@@ -1,133 +1,39 @@
1
- import {
2
- AlreadyDeclaredFunctionError,
3
- AlreadyDeclaredVariableError,
4
- CantModifyConstError,
5
- } from "../../shared/manager/errors/semantic/undefined/declared.js";
1
+ import { AlreadyDeclaredFunctionError } from "../../shared/manager/errors/semantic/undefined/declared.js";
6
2
  import {
7
3
  UndeclaredFunctionError,
8
4
  UndeclaredVariableError,
9
5
  } from "../../shared/manager/errors/semantic/undefined/undeclared.js";
10
- import { createCoreContext, type CoreContext } from "../context/coreContext.js";
11
- import { ValueType } from "../../shared/models/value.js";
12
- import { solveString } from "./utils/string.js";
13
- import type { AnyStatement, CallStatement, FunctionStatement, PrintStatement, VariableStatement } from "../ast/types/statements/index.js";
6
+ import type {
7
+ AnyStatement,
8
+ CallStatement,
9
+ FunctionStatement,
10
+ PrintStatement,
11
+ VariableStatement,
12
+ } from "../ast/types/statements/index.js";
14
13
  import { StatementKind } from "../ast/types/base/statement.js";
15
- import * as ctx from "../../shared/context/globalContext.js";
14
+ import type { RunnerFunc } from "./funcs/_base.js";
15
+ // import { coreContext as context } from "../context/coreContext.js";
16
+ import { printStatement } from "./funcs/io.js";
17
+ import { variableStatement } from "./funcs/variables.js";
18
+ import { callStatement, functionStatement } from "./funcs/functions.js";
19
+ import type { CoreContext } from "../context/coreContext.js";
20
+
21
+ const statementMap = new Map<StatementKind, RunnerFunc<any>>([
22
+ [StatementKind.PrintStatement, printStatement],
23
+ [StatementKind.VariableStatement, variableStatement],
24
+ [StatementKind.FunctionStatement, functionStatement],
25
+ [StatementKind.CallStatement, callStatement],
26
+ ]);
16
27
 
17
28
  export function run(ast: AnyStatement[], context: CoreContext) {
18
-
19
29
  for (const statement of ast) {
20
- switch (statement.kind) {
21
- case StatementKind.PrintStatement:
22
- printStatement(statement, context);
23
- break;
24
- case StatementKind.VariableStatement:
25
- variableStatement(statement, context);
26
- break;
27
- case StatementKind.FunctionStatement:
28
- functionStatement(statement, context);
29
- break;
30
- case StatementKind.CallStatement:
31
- callStatement(statement, context);
32
- break;
33
- }
34
- }
35
- }
36
-
37
- function printStatement(statement: PrintStatement, context: CoreContext) {
38
- let val;
39
- switch (statement.value.type) {
40
- case ValueType.Identifier:
41
- const id = statement.value.value;
42
- const varData = context.variables[id];
43
- if (varData !== undefined) {
44
- val = varData.value;
45
- } else {
46
- new UndeclaredVariableError(id).throw(statement.sourceInfo.startLine);
47
- }
48
- break;
49
-
50
- case ValueType.String:
51
- val = solveString(statement.value.value, context, (err) => {
52
- err.throw(statement.sourceInfo.startLine);
53
- })
54
- break;
55
-
56
- default:
57
- val = statement.value.value;
58
- break;
59
- }
60
- const info = ctx.get("services").log;
61
- info.info(val);
62
- }
63
-
64
- function variableStatement(statement: VariableStatement, context: CoreContext) {
65
- const varId = statement.id;
30
+ const runner = statementMap.get(statement.kind);
66
31
 
67
- if (statement.set) {
68
- if (!context.variables[varId]) {
69
- new UndeclaredVariableError(varId).throw(
70
- statement.sourceInfo.startLine
71
- );
72
- }
73
- if (context.variables[varId]?.props.isConst) {
74
- new CantModifyConstError(varId).throw(
75
- statement.sourceInfo.startLine
76
- );
32
+ if (!runner) {
33
+ throw new Error(`No runner for statement kind: ${statement.kind}`);
77
34
  }
78
- } else if (!statement.var.props.isConst) {
79
- if (context.variables[varId]) {
80
- new AlreadyDeclaredVariableError(varId).throw(
81
- statement.sourceInfo.startLine
82
- );
83
- }
84
- }
85
-
86
- let value: string = statement.var.value;
87
-
88
- switch (statement.var.type) {
89
- case ValueType.String:
90
- value = solveString(value, context, (err) => {
91
- err.throw(statement.sourceInfo.startLine);
92
- });
93
- break;
94
- default:
95
- break;
96
- }
97
-
98
- context.variables[varId] = {
99
- type: statement.var.type,
100
- value,
101
- props: {
102
- isConst: !!statement.var.props.isConst,
103
- },
104
- };
105
- }
106
-
107
- function functionStatement(statement: FunctionStatement, context: CoreContext) {
108
- const idToken = statement.id;
109
- if (!idToken) return;
110
-
111
- const funcData = context.functions[idToken];
112
- if (funcData) {
113
- new AlreadyDeclaredFunctionError(idToken).throw(statement.sourceInfo.startLine);
114
- }
115
-
116
- const body = statement.func.body ?? [];
117
- const scope = statement.func.scope;
118
- context.functions[idToken] = {
119
- body,
120
- scope,
121
- };
122
- }
123
-
124
- function callStatement(statement: CallStatement, context: CoreContext) {
125
- const funcId = statement.id
126
- if (!funcId) return;
127
35
 
128
- const funcData = context.functions[funcId];
129
- if (!funcData) {
130
- new UndeclaredFunctionError(funcId).throw(statement.sourceInfo.startLine);
36
+ runner(statement, context);
131
37
  }
132
- run(funcData.body, context.functions[funcId].scope);
133
- }
38
+ return context;
39
+ }
@@ -10,7 +10,7 @@ export interface Log {
10
10
  level: LogLevel;
11
11
  }
12
12
 
13
- export interface LoggerConfig {
13
+ export interface LoggerConfig {
14
14
  interceptors: {
15
15
  onLog: (message: string) => string;
16
16
  level: LogLevel;
@@ -26,52 +26,60 @@ export class LoggerService {
26
26
  this.config = config;
27
27
  }
28
28
 
29
- log (message: string, level: LogLevel = LogLevel.Info) {
29
+ log(message: string, level: LogLevel = LogLevel.Info, printMsg: string = message) {
30
30
  this.logs.push({ message, level });
31
- this.config.interceptors.forEach(interceptor => {
31
+ this.config.interceptors.forEach((interceptor) => {
32
32
  if (interceptor.level === level) {
33
33
  message = interceptor.onLog(message);
34
34
  }
35
35
  });
36
- if (this.config.logs.includes(level)) {
37
- console.log(message);
38
- }
36
+ console.log(printMsg);
39
37
  }
40
38
 
41
- debug (message: string) {
39
+ debug(message: string) {
42
40
  this.log(message, LogLevel.Debug);
43
41
  }
44
42
 
45
- info (message: string) {
43
+ info(message: string) {
46
44
  this.log(message, LogLevel.Info);
47
45
  }
48
46
 
49
- warning (message: string) {
47
+ warning(message: string) {
50
48
  this.log(message, LogLevel.Warning);
51
49
  }
52
50
 
53
- error (message: string) {
51
+ error(message: string) {
54
52
  this.log(message, LogLevel.Error);
55
53
  }
56
54
 
57
- getLogs () {
55
+ getLogs() {
58
56
  return this.logs;
59
57
  }
60
58
 
61
- pushInterceptor (interceptor: { onLog: (message: string) => string, level: LogLevel }) {
59
+ pushInterceptor(interceptor: {
60
+ onLog: (message: string) => string;
61
+ level: LogLevel;
62
+ }) {
62
63
  this.config.interceptors.push(interceptor);
63
64
  }
64
65
 
65
- removeInterceptor (interceptor: { onLog: (message: string) => string, level: LogLevel }) {
66
- this.config.interceptors = this.config.interceptors.filter(i => i !== interceptor);
66
+ removeInterceptor(interceptor: {
67
+ onLog: (message: string) => string;
68
+ level: LogLevel;
69
+ }) {
70
+ this.config.interceptors = this.config.interceptors.filter(
71
+ (i) => i !== interceptor,
72
+ );
67
73
  }
68
74
 
69
75
  toString() {
70
- return this.logs.map(log => `[${log.level}] ${log.message}`).join("\n");
76
+ return this.logs
77
+ .map((log) => `[${log.level}] ${log.message}`)
78
+ .join("\n");
71
79
  }
72
80
  }
73
81
 
74
82
  export const defaultLoggerConfig: LoggerConfig = {
75
83
  interceptors: [],
76
84
  logs: [LogLevel.Debug, LogLevel.Info],
77
- };
85
+ };
@@ -1,8 +1,19 @@
1
+ import type { LoggerService } from "../../core/services/log.service.js";
2
+
1
3
  export interface Context {
2
4
  [key: string]: any;
5
+ services: Map<string, any>;
3
6
  }
4
7
 
5
- let globalContext: Context = {};
8
+ let globalContext: Context = { services: new Map() };
9
+
10
+ export function pushService(service: any, name: string) {
11
+ globalContext.services.set(name, service);
12
+ }
13
+
14
+ export function getService(name: string) {
15
+ return globalContext.services.get(name);
16
+ }
6
17
 
7
18
  export function get(key: string) {
8
19
  return globalContext[key];
@@ -7,12 +7,14 @@ export class OcatManager {
7
7
  public message: string;
8
8
  public color: ChalkInstance;
9
9
  public level: LogLevel;
10
+ public printFn: (message: string) => void;
10
11
 
11
12
  constructor(name: string, color: ChalkInstance, level: LogLevel) {
12
13
  this.name = name;
13
14
  this.message = "";
14
15
  this.color = color;
15
16
  this.level = level;
17
+ this.printFn = console.log;
16
18
  }
17
19
 
18
20
  toString(line: number | undefined = undefined): string {
@@ -31,9 +33,9 @@ export class OcatManager {
31
33
  }
32
34
 
33
35
  throw(line: number | undefined = undefined): never {
34
- console.log(this.toString(line));
35
- const log = ctx.get("services").log;
36
- log.log(this.build(line), this.level);
36
+ const log = ctx.get("services")?.log;
37
+ const message = this.build(line);
38
+ log?.log(message, this.level, this.toString(line));
37
39
  process.exit(1);
38
40
  }
39
41
  }
@@ -1,6 +1,6 @@
1
1
  import chalk from "chalk";
2
- import { OcatManager } from "../baseManager";
3
- import { LogLevel } from "../../../core/services/log.service";
2
+ import { OcatManager } from "../baseManager.js";
3
+ import { LogLevel } from "../../../core/services/log.service.js";
4
4
 
5
5
  export class OcatWarning extends OcatManager {
6
6
  constructor(name: string) {
@@ -11,4 +11,4 @@ export interface Param {
11
11
  export interface Function {
12
12
  body: AnyStatement[];
13
13
  scope: CoreContext;
14
- }
14
+ }
package/tsconfig.json CHANGED
@@ -3,13 +3,13 @@
3
3
  // Enable latest features
4
4
  "lib": ["ESNext", "DOM"],
5
5
  "target": "ESNext",
6
- "module": "ESNext",
6
+
7
+ "module": "nodenext",
8
+ "moduleResolution": "nodenext",
7
9
  "moduleDetection": "force",
8
10
  "jsx": "react-jsx",
9
11
  "allowJs": true,
10
12
 
11
- // Bundler mode
12
- "moduleResolution": "bundler",
13
13
  "verbatimModuleSyntax": true,
14
14
 
15
15
  // Best practices
@@ -1,3 +0,0 @@
1
- import type { AnyStatement } from "../types/statements";
2
-
3
- export type FBuilder = (statement: any) => AnyStatement | null;