@platforma-sdk/tengo-builder 2.4.13 → 2.4.15
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.
- package/README.md +4 -4
- package/bin/run.js +5 -5
- package/dist/commands/build.cjs +36 -36
- package/dist/commands/build.cjs.map +1 -1
- package/dist/commands/build.d.ts +5 -5
- package/dist/commands/build.js +36 -36
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/check.cjs +5 -5
- package/dist/commands/check.cjs.map +1 -1
- package/dist/commands/check.d.ts +2 -2
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +5 -5
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/dump/artifacts.cjs +4 -6
- package/dist/commands/dump/artifacts.cjs.map +1 -1
- package/dist/commands/dump/artifacts.d.ts +2 -2
- package/dist/commands/dump/artifacts.d.ts.map +1 -1
- package/dist/commands/dump/artifacts.js +4 -6
- package/dist/commands/dump/artifacts.js.map +1 -1
- package/dist/commands/dump/software.cjs +3 -5
- package/dist/commands/dump/software.cjs.map +1 -1
- package/dist/commands/dump/software.d.ts +2 -2
- package/dist/commands/dump/software.d.ts.map +1 -1
- package/dist/commands/dump/software.js +3 -5
- package/dist/commands/dump/software.js.map +1 -1
- package/dist/commands/test.cjs +5 -5
- package/dist/commands/test.cjs.map +1 -1
- package/dist/commands/test.d.ts +2 -2
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +5 -5
- package/dist/commands/test.js.map +1 -1
- package/dist/compiler/artifactset.cjs +2 -2
- package/dist/compiler/artifactset.cjs.map +1 -1
- package/dist/compiler/artifactset.d.ts +1 -1
- package/dist/compiler/artifactset.d.ts.map +1 -1
- package/dist/compiler/artifactset.js +2 -2
- package/dist/compiler/artifactset.js.map +1 -1
- package/dist/compiler/compiler.cjs +37 -34
- package/dist/compiler/compiler.cjs.map +1 -1
- package/dist/compiler/compiler.d.ts +3 -3
- package/dist/compiler/compiler.d.ts.map +1 -1
- package/dist/compiler/compiler.js +37 -34
- package/dist/compiler/compiler.js.map +1 -1
- package/dist/compiler/compileroptions.cjs +12 -12
- package/dist/compiler/compileroptions.cjs.map +1 -1
- package/dist/compiler/compileroptions.d.ts +2 -2
- package/dist/compiler/compileroptions.js +12 -12
- package/dist/compiler/compileroptions.js.map +1 -1
- package/dist/compiler/main.cjs +58 -58
- package/dist/compiler/main.cjs.map +1 -1
- package/dist/compiler/main.d.ts +6 -6
- package/dist/compiler/main.d.ts.map +1 -1
- package/dist/compiler/main.js +58 -58
- package/dist/compiler/main.js.map +1 -1
- package/dist/compiler/package.cjs +5 -2
- package/dist/compiler/package.cjs.map +1 -1
- package/dist/compiler/package.d.ts +6 -6
- package/dist/compiler/package.d.ts.map +1 -1
- package/dist/compiler/package.js +5 -2
- package/dist/compiler/package.js.map +1 -1
- package/dist/compiler/source.cjs +50 -52
- package/dist/compiler/source.cjs.map +1 -1
- package/dist/compiler/source.d.ts +2 -2
- package/dist/compiler/source.d.ts.map +1 -1
- package/dist/compiler/source.js +50 -52
- package/dist/compiler/source.js.map +1 -1
- package/dist/compiler/template.cjs +7 -7
- package/dist/compiler/template.cjs.map +1 -1
- package/dist/compiler/template.d.ts +2 -2
- package/dist/compiler/template.d.ts.map +1 -1
- package/dist/compiler/template.js +7 -7
- package/dist/compiler/template.js.map +1 -1
- package/dist/compiler/test.artifacts.d.ts +1 -1
- package/dist/compiler/test.artifacts.d.ts.map +1 -1
- package/dist/compiler/util.cjs +12 -12
- package/dist/compiler/util.cjs.map +1 -1
- package/dist/compiler/util.d.ts +2 -2
- package/dist/compiler/util.js +12 -12
- package/dist/compiler/util.js.map +1 -1
- package/dist/index.cjs +5 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/shared/basecmd.cjs +15 -15
- package/dist/shared/basecmd.cjs.map +1 -1
- package/dist/shared/basecmd.d.ts +4 -4
- package/dist/shared/basecmd.js +15 -15
- package/dist/shared/basecmd.js.map +1 -1
- package/dist/shared/dump.cjs +28 -28
- package/dist/shared/dump.cjs.map +1 -1
- package/dist/shared/dump.d.ts +2 -2
- package/dist/shared/dump.d.ts.map +1 -1
- package/dist/shared/dump.js +28 -28
- package/dist/shared/dump.js.map +1 -1
- package/dist/shared/proc.cjs +5 -5
- package/dist/shared/proc.cjs.map +1 -1
- package/dist/shared/proc.d.ts +2 -2
- package/dist/shared/proc.js +5 -5
- package/dist/shared/proc.js.map +1 -1
- package/package.json +21 -19
- package/src/commands/build.ts +57 -55
- package/src/commands/check.ts +15 -12
- package/src/commands/dump/artifacts.ts +11 -15
- package/src/commands/dump/software.ts +9 -10
- package/src/commands/test.ts +15 -12
- package/src/compiler/artifactset.ts +7 -9
- package/src/compiler/compiler.test.ts +134 -137
- package/src/compiler/compiler.ts +62 -62
- package/src/compiler/compileroptions.ts +15 -15
- package/src/compiler/main.test.ts +23 -23
- package/src/compiler/main.ts +83 -100
- package/src/compiler/package.ts +14 -12
- package/src/compiler/source.test.ts +191 -183
- package/src/compiler/source.ts +106 -79
- package/src/compiler/template.test.ts +50 -49
- package/src/compiler/template.ts +11 -21
- package/src/compiler/test.artifacts.ts +47 -47
- package/src/compiler/util.ts +17 -17
- package/src/index.ts +10 -10
- package/src/shared/basecmd.ts +16 -16
- package/src/shared/dump.ts +49 -70
- package/src/shared/proc.ts +8 -8
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
2
|
newGetSoftwareInfoRE,
|
|
3
3
|
newGetTemplateIdRE,
|
|
4
4
|
parseSource,
|
|
5
5
|
sourceParserContext,
|
|
6
6
|
lineProcessingResult,
|
|
7
|
-
} from
|
|
8
|
-
import { createLogger } from
|
|
7
|
+
} from "./source";
|
|
8
|
+
import { createLogger } from "./util";
|
|
9
9
|
import {
|
|
10
10
|
testLocalLib1Name,
|
|
11
11
|
testLocalLib1Src,
|
|
@@ -17,81 +17,81 @@ import {
|
|
|
17
17
|
testLocalTpl3Name,
|
|
18
18
|
testTrickyCasesSrc,
|
|
19
19
|
testTrickyCasesNormalized,
|
|
20
|
-
} from
|
|
21
|
-
import { parseSingleSourceLine } from
|
|
22
|
-
import { FullArtifactName } from
|
|
23
|
-
import { expect, describe, test } from
|
|
24
|
-
import { ConsoleLoggerAdapter } from
|
|
20
|
+
} from "./test.artifacts";
|
|
21
|
+
import { parseSingleSourceLine } from "./source";
|
|
22
|
+
import { FullArtifactName } from "./package";
|
|
23
|
+
import { expect, describe, test } from "vitest";
|
|
24
|
+
import { ConsoleLoggerAdapter } from "@milaboratories/ts-helpers";
|
|
25
25
|
|
|
26
26
|
const stubTplName: FullArtifactName = {
|
|
27
|
-
type:
|
|
28
|
-
pkg:
|
|
29
|
-
id:
|
|
30
|
-
version:
|
|
27
|
+
type: "template",
|
|
28
|
+
pkg: "stub-pkg",
|
|
29
|
+
id: "stub-name",
|
|
30
|
+
version: "1.2.3",
|
|
31
31
|
};
|
|
32
32
|
|
|
33
|
-
test(
|
|
34
|
-
const logger = createLogger(
|
|
33
|
+
test("test lib 1 parsing", () => {
|
|
34
|
+
const logger = createLogger("error");
|
|
35
35
|
|
|
36
|
-
const libSrc = parseSource(logger,
|
|
36
|
+
const libSrc = parseSource(logger, "dist", testLocalLib1Src, testLocalLib1Name, true);
|
|
37
37
|
expect(libSrc.src).toEqual(testLocalLib1SrcNormalized);
|
|
38
38
|
expect(libSrc.dependencies).toEqual([
|
|
39
|
-
{ type:
|
|
40
|
-
{ type:
|
|
41
|
-
{ type:
|
|
42
|
-
{ type:
|
|
39
|
+
{ type: "library", pkg: "package1", id: "other-lib-2" },
|
|
40
|
+
{ type: "software", pkg: "current-package", id: "software-1" },
|
|
41
|
+
{ type: "template", pkg: "current-package", id: "local-template-2" },
|
|
42
|
+
{ type: "template", pkg: "package1", id: "template-3" },
|
|
43
43
|
]);
|
|
44
44
|
|
|
45
|
-
expect(parseSource(logger,
|
|
46
|
-
testLocalLib1Src
|
|
45
|
+
expect(parseSource(logger, "dist", testLocalLib1Src, testLocalLib1Name, false).src).toEqual(
|
|
46
|
+
testLocalLib1Src,
|
|
47
47
|
);
|
|
48
48
|
});
|
|
49
49
|
|
|
50
|
-
test(
|
|
51
|
-
const logger = createLogger(
|
|
50
|
+
test("test lib 2 parsing", () => {
|
|
51
|
+
const logger = createLogger("error");
|
|
52
52
|
|
|
53
|
-
const libSrc = parseSource(logger,
|
|
53
|
+
const libSrc = parseSource(logger, "dist", testLocalLib2Src, testLocalLib2Name, true);
|
|
54
54
|
expect(libSrc.src).toEqual(testLocalLib2SrcNormalized);
|
|
55
55
|
expect(libSrc.dependencies).toEqual([
|
|
56
|
-
{ type:
|
|
57
|
-
{ type:
|
|
58
|
-
{ type:
|
|
59
|
-
{ type:
|
|
60
|
-
{ type:
|
|
61
|
-
{ type:
|
|
56
|
+
{ type: "library", pkg: "package1", id: "someid" },
|
|
57
|
+
{ type: "library", pkg: "@platforma-sdk/workflow-tengo", id: "assets" },
|
|
58
|
+
{ type: "template", pkg: "package2", id: "template-1" },
|
|
59
|
+
{ type: "software", pkg: "package2", id: "software-1" },
|
|
60
|
+
{ type: "asset", pkg: "package2", id: "asset-1" },
|
|
61
|
+
{ type: "template", pkg: "current-package", id: "local-template-2" },
|
|
62
62
|
]);
|
|
63
63
|
});
|
|
64
64
|
|
|
65
|
-
test(
|
|
66
|
-
const logger = createLogger(
|
|
65
|
+
test("test tpl 3 parsing", () => {
|
|
66
|
+
const logger = createLogger("error");
|
|
67
67
|
|
|
68
|
-
const tplSrc = parseSource(logger,
|
|
69
|
-
expect(tplSrc.compilerOptions[0].name).toEqual(
|
|
68
|
+
const tplSrc = parseSource(logger, "dist", testLocalTpl3Src, testLocalTpl3Name, true);
|
|
69
|
+
expect(tplSrc.compilerOptions[0].name).toEqual("hash_override");
|
|
70
70
|
});
|
|
71
71
|
|
|
72
|
-
describe(
|
|
73
|
-
test(
|
|
74
|
-
const logger = createLogger(
|
|
72
|
+
describe("import statements", () => {
|
|
73
|
+
test("dot multiline works", () => {
|
|
74
|
+
const logger = createLogger("error");
|
|
75
75
|
|
|
76
76
|
const multilineImport = `
|
|
77
77
|
importer := import("@platforma-sdk/workflow-tengo:assets")
|
|
78
78
|
importer.
|
|
79
79
|
importSoftware("my:software") // works well
|
|
80
|
-
|
|
80
|
+
`;
|
|
81
81
|
|
|
82
|
-
const parsed = parseSource(logger,
|
|
82
|
+
const parsed = parseSource(logger, "dist", multilineImport, stubTplName, true);
|
|
83
83
|
|
|
84
|
-
let softwareFound = false
|
|
84
|
+
let softwareFound = false;
|
|
85
85
|
for (const dep of parsed.dependencies) {
|
|
86
|
-
softwareFound = softwareFound || `${dep.type}:${dep.pkg}:${dep.id}` ==
|
|
86
|
+
softwareFound = softwareFound || `${dep.type}:${dep.pkg}:${dep.id}` == "software:my:software";
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
expect(softwareFound).toBe(true);
|
|
90
|
-
})
|
|
90
|
+
});
|
|
91
91
|
|
|
92
|
-
test(
|
|
92
|
+
test("bracket multiline is forbidden", () => {
|
|
93
93
|
// This is
|
|
94
|
-
const logger = createLogger(
|
|
94
|
+
const logger = createLogger("info");
|
|
95
95
|
|
|
96
96
|
const multilineImport = `
|
|
97
97
|
importer := import("@platforma-sdk/workflow-tengo:assets")
|
|
@@ -99,32 +99,36 @@ describe('import statements', () => {
|
|
|
99
99
|
importSoftware(
|
|
100
100
|
"my:software"
|
|
101
101
|
) // does not work for now
|
|
102
|
-
|
|
102
|
+
`;
|
|
103
103
|
|
|
104
|
-
expect(() => parseSource(logger,
|
|
105
|
-
|
|
104
|
+
expect(() => parseSource(logger, "dist", multilineImport, stubTplName, true)).toThrow(
|
|
105
|
+
"in the same line with brackets",
|
|
106
|
+
);
|
|
107
|
+
});
|
|
106
108
|
|
|
107
|
-
test(
|
|
108
|
-
const logger = createLogger(
|
|
109
|
+
test("variable import is not allowed", () => {
|
|
110
|
+
const logger = createLogger("info");
|
|
109
111
|
|
|
110
112
|
const importByVariable = `
|
|
111
113
|
importer := import("@platforma-sdk/workflow-tengo:assets")
|
|
112
114
|
softwareID := "my:software"
|
|
113
115
|
importer.importSoftware(softwareID) // breaks because of variable reference. We require literals.
|
|
114
|
-
|
|
116
|
+
`;
|
|
115
117
|
|
|
116
|
-
expect(() => parseSource(logger,
|
|
117
|
-
|
|
118
|
+
expect(() => parseSource(logger, "dist", importByVariable, stubTplName, true)).toThrow(
|
|
119
|
+
"variables are not allowed",
|
|
120
|
+
);
|
|
121
|
+
});
|
|
118
122
|
|
|
119
|
-
test(
|
|
120
|
-
const logger = createLogger(
|
|
123
|
+
test("test tricky cases parsing", () => {
|
|
124
|
+
const logger = createLogger("error");
|
|
121
125
|
|
|
122
|
-
const trickyCasesSrc = parseSource(logger,
|
|
126
|
+
const trickyCasesSrc = parseSource(logger, "dist", testTrickyCasesSrc, stubTplName, true);
|
|
123
127
|
expect(trickyCasesSrc.src).toEqual(testTrickyCasesNormalized);
|
|
124
|
-
})
|
|
125
|
-
})
|
|
128
|
+
});
|
|
129
|
+
});
|
|
126
130
|
|
|
127
|
-
describe(
|
|
131
|
+
describe("parseSingleSourceLine", () => {
|
|
128
132
|
const testCases: {
|
|
129
133
|
name: string;
|
|
130
134
|
line: string;
|
|
@@ -133,21 +137,20 @@ describe('parseSingleSourceLine', () => {
|
|
|
133
137
|
globalizeImports?: boolean;
|
|
134
138
|
expected: lineProcessingResult;
|
|
135
139
|
}[] = [
|
|
136
|
-
|
|
137
140
|
{
|
|
138
|
-
name:
|
|
139
|
-
line:
|
|
141
|
+
name: "empty line",
|
|
142
|
+
line: " ",
|
|
140
143
|
context: {
|
|
141
144
|
isInCommentBlock: false,
|
|
142
145
|
canDetectOptions: true,
|
|
143
146
|
lineNo: 1,
|
|
144
147
|
artifactImportREs: new Map(),
|
|
145
148
|
importLikeREs: new Map(),
|
|
146
|
-
multilineStatement:
|
|
149
|
+
multilineStatement: "",
|
|
147
150
|
},
|
|
148
|
-
localPackageName:
|
|
151
|
+
localPackageName: "test-package",
|
|
149
152
|
expected: {
|
|
150
|
-
line:
|
|
153
|
+
line: " ",
|
|
151
154
|
artifacts: [],
|
|
152
155
|
option: undefined,
|
|
153
156
|
context: {
|
|
@@ -156,24 +159,24 @@ describe('parseSingleSourceLine', () => {
|
|
|
156
159
|
lineNo: 1,
|
|
157
160
|
artifactImportREs: new Map(),
|
|
158
161
|
importLikeREs: new Map(),
|
|
159
|
-
multilineStatement:
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
+
multilineStatement: "",
|
|
163
|
+
},
|
|
164
|
+
},
|
|
162
165
|
},
|
|
163
166
|
{
|
|
164
|
-
name:
|
|
165
|
-
line:
|
|
167
|
+
name: "single-line comment",
|
|
168
|
+
line: "// This is a comment",
|
|
166
169
|
context: {
|
|
167
170
|
isInCommentBlock: false,
|
|
168
171
|
canDetectOptions: true,
|
|
169
172
|
lineNo: 1,
|
|
170
173
|
artifactImportREs: new Map(),
|
|
171
174
|
importLikeREs: new Map(),
|
|
172
|
-
multilineStatement:
|
|
175
|
+
multilineStatement: "",
|
|
173
176
|
},
|
|
174
|
-
localPackageName:
|
|
177
|
+
localPackageName: "test-package",
|
|
175
178
|
expected: {
|
|
176
|
-
line:
|
|
179
|
+
line: "",
|
|
177
180
|
artifacts: [],
|
|
178
181
|
option: undefined,
|
|
179
182
|
context: {
|
|
@@ -182,24 +185,24 @@ describe('parseSingleSourceLine', () => {
|
|
|
182
185
|
lineNo: 1,
|
|
183
186
|
artifactImportREs: new Map(),
|
|
184
187
|
importLikeREs: new Map(),
|
|
185
|
-
multilineStatement:
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
+
multilineStatement: "",
|
|
189
|
+
},
|
|
190
|
+
},
|
|
188
191
|
},
|
|
189
192
|
{
|
|
190
|
-
name:
|
|
191
|
-
line:
|
|
193
|
+
name: "start of multi-line comment",
|
|
194
|
+
line: "/* Start comment",
|
|
192
195
|
context: {
|
|
193
196
|
isInCommentBlock: false,
|
|
194
197
|
canDetectOptions: true,
|
|
195
198
|
lineNo: 1,
|
|
196
199
|
artifactImportREs: new Map(),
|
|
197
200
|
importLikeREs: new Map(),
|
|
198
|
-
multilineStatement:
|
|
201
|
+
multilineStatement: "",
|
|
199
202
|
},
|
|
200
|
-
localPackageName:
|
|
203
|
+
localPackageName: "test-package",
|
|
201
204
|
expected: {
|
|
202
|
-
line:
|
|
205
|
+
line: "",
|
|
203
206
|
artifacts: [],
|
|
204
207
|
option: undefined,
|
|
205
208
|
context: {
|
|
@@ -208,24 +211,24 @@ describe('parseSingleSourceLine', () => {
|
|
|
208
211
|
lineNo: 1,
|
|
209
212
|
artifactImportREs: new Map(),
|
|
210
213
|
importLikeREs: new Map(),
|
|
211
|
-
multilineStatement:
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
+
multilineStatement: "",
|
|
215
|
+
},
|
|
216
|
+
},
|
|
214
217
|
},
|
|
215
218
|
{
|
|
216
|
-
name:
|
|
217
|
-
line:
|
|
219
|
+
name: "line inside comment block",
|
|
220
|
+
line: "This is inside a comment block",
|
|
218
221
|
context: {
|
|
219
222
|
isInCommentBlock: true,
|
|
220
223
|
canDetectOptions: true,
|
|
221
224
|
lineNo: 1,
|
|
222
225
|
artifactImportREs: new Map(),
|
|
223
226
|
importLikeREs: new Map(),
|
|
224
|
-
multilineStatement:
|
|
227
|
+
multilineStatement: "",
|
|
225
228
|
},
|
|
226
|
-
localPackageName:
|
|
229
|
+
localPackageName: "test-package",
|
|
227
230
|
expected: {
|
|
228
|
-
line:
|
|
231
|
+
line: "",
|
|
229
232
|
artifacts: [],
|
|
230
233
|
option: undefined,
|
|
231
234
|
context: {
|
|
@@ -234,24 +237,24 @@ describe('parseSingleSourceLine', () => {
|
|
|
234
237
|
lineNo: 1,
|
|
235
238
|
artifactImportREs: new Map(),
|
|
236
239
|
importLikeREs: new Map(),
|
|
237
|
-
multilineStatement:
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
+
multilineStatement: "",
|
|
241
|
+
},
|
|
242
|
+
},
|
|
240
243
|
},
|
|
241
244
|
{
|
|
242
|
-
name:
|
|
243
|
-
line:
|
|
245
|
+
name: "end of multi-line comment",
|
|
246
|
+
line: "End of comment */",
|
|
244
247
|
context: {
|
|
245
248
|
isInCommentBlock: true,
|
|
246
249
|
canDetectOptions: true,
|
|
247
250
|
lineNo: 1,
|
|
248
251
|
artifactImportREs: new Map(),
|
|
249
252
|
importLikeREs: new Map(),
|
|
250
|
-
multilineStatement:
|
|
253
|
+
multilineStatement: "",
|
|
251
254
|
},
|
|
252
|
-
localPackageName:
|
|
255
|
+
localPackageName: "test-package",
|
|
253
256
|
expected: {
|
|
254
|
-
line:
|
|
257
|
+
line: "",
|
|
255
258
|
artifacts: [],
|
|
256
259
|
option: undefined,
|
|
257
260
|
context: {
|
|
@@ -260,12 +263,12 @@ describe('parseSingleSourceLine', () => {
|
|
|
260
263
|
lineNo: 1,
|
|
261
264
|
artifactImportREs: new Map(),
|
|
262
265
|
importLikeREs: new Map(),
|
|
263
|
-
multilineStatement:
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
+
multilineStatement: "",
|
|
267
|
+
},
|
|
268
|
+
},
|
|
266
269
|
},
|
|
267
270
|
{
|
|
268
|
-
name:
|
|
271
|
+
name: "comment-like lines are safe",
|
|
269
272
|
line: 'cmd.saveFile("results/*")',
|
|
270
273
|
context: {
|
|
271
274
|
isInCommentBlock: false,
|
|
@@ -273,9 +276,9 @@ describe('parseSingleSourceLine', () => {
|
|
|
273
276
|
lineNo: 100,
|
|
274
277
|
artifactImportREs: new Map(),
|
|
275
278
|
importLikeREs: new Map(),
|
|
276
|
-
multilineStatement:
|
|
279
|
+
multilineStatement: "",
|
|
277
280
|
},
|
|
278
|
-
localPackageName:
|
|
281
|
+
localPackageName: "test-package",
|
|
279
282
|
expected: {
|
|
280
283
|
line: 'cmd.saveFile("results/*")',
|
|
281
284
|
artifacts: [],
|
|
@@ -286,50 +289,50 @@ describe('parseSingleSourceLine', () => {
|
|
|
286
289
|
lineNo: 100,
|
|
287
290
|
artifactImportREs: new Map(),
|
|
288
291
|
importLikeREs: new Map(),
|
|
289
|
-
multilineStatement:
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
+
multilineStatement: "",
|
|
293
|
+
},
|
|
294
|
+
},
|
|
292
295
|
},
|
|
293
296
|
{
|
|
294
|
-
name:
|
|
295
|
-
line:
|
|
297
|
+
name: "compiler option",
|
|
298
|
+
line: "//tengo:nocheck",
|
|
296
299
|
context: {
|
|
297
300
|
isInCommentBlock: false,
|
|
298
301
|
canDetectOptions: true,
|
|
299
302
|
lineNo: 1,
|
|
300
303
|
artifactImportREs: new Map(),
|
|
301
304
|
importLikeREs: new Map(),
|
|
302
|
-
multilineStatement:
|
|
305
|
+
multilineStatement: "",
|
|
303
306
|
},
|
|
304
|
-
localPackageName:
|
|
307
|
+
localPackageName: "test-package",
|
|
305
308
|
expected: {
|
|
306
|
-
line:
|
|
309
|
+
line: "//tengo:nocheck",
|
|
307
310
|
artifacts: [],
|
|
308
|
-
option: { name:
|
|
311
|
+
option: { name: "nocheck", args: [] },
|
|
309
312
|
context: {
|
|
310
313
|
isInCommentBlock: false,
|
|
311
314
|
canDetectOptions: true,
|
|
312
315
|
lineNo: 1,
|
|
313
316
|
artifactImportREs: new Map(),
|
|
314
317
|
importLikeREs: new Map(),
|
|
315
|
-
multilineStatement:
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
+
multilineStatement: "",
|
|
319
|
+
},
|
|
320
|
+
},
|
|
318
321
|
},
|
|
319
322
|
{
|
|
320
|
-
name:
|
|
321
|
-
line:
|
|
323
|
+
name: "regular code disables canDetectOptions",
|
|
324
|
+
line: "const x = 5",
|
|
322
325
|
context: {
|
|
323
326
|
isInCommentBlock: false,
|
|
324
327
|
canDetectOptions: true,
|
|
325
328
|
lineNo: 1,
|
|
326
329
|
artifactImportREs: new Map(),
|
|
327
330
|
importLikeREs: new Map(),
|
|
328
|
-
multilineStatement:
|
|
331
|
+
multilineStatement: "",
|
|
329
332
|
},
|
|
330
|
-
localPackageName:
|
|
333
|
+
localPackageName: "test-package",
|
|
331
334
|
expected: {
|
|
332
|
-
line:
|
|
335
|
+
line: "const x = 5",
|
|
333
336
|
artifacts: [],
|
|
334
337
|
option: undefined,
|
|
335
338
|
context: {
|
|
@@ -338,24 +341,24 @@ describe('parseSingleSourceLine', () => {
|
|
|
338
341
|
lineNo: 1,
|
|
339
342
|
artifactImportREs: new Map(),
|
|
340
343
|
importLikeREs: new Map(),
|
|
341
|
-
multilineStatement:
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
+
multilineStatement: "",
|
|
345
|
+
},
|
|
346
|
+
},
|
|
344
347
|
},
|
|
345
348
|
{
|
|
346
|
-
name:
|
|
347
|
-
line:
|
|
349
|
+
name: "malformed compiler option warning",
|
|
350
|
+
line: "// tengo:nocheck",
|
|
348
351
|
context: {
|
|
349
352
|
isInCommentBlock: false,
|
|
350
353
|
canDetectOptions: true,
|
|
351
354
|
lineNo: 1,
|
|
352
355
|
artifactImportREs: new Map(),
|
|
353
356
|
importLikeREs: new Map(),
|
|
354
|
-
multilineStatement:
|
|
357
|
+
multilineStatement: "",
|
|
355
358
|
},
|
|
356
|
-
localPackageName:
|
|
359
|
+
localPackageName: "test-package",
|
|
357
360
|
expected: {
|
|
358
|
-
line:
|
|
361
|
+
line: "// tengo:nocheck",
|
|
359
362
|
artifacts: [],
|
|
360
363
|
option: undefined,
|
|
361
364
|
context: {
|
|
@@ -364,12 +367,12 @@ describe('parseSingleSourceLine', () => {
|
|
|
364
367
|
lineNo: 1,
|
|
365
368
|
artifactImportREs: new Map(),
|
|
366
369
|
importLikeREs: new Map(),
|
|
367
|
-
multilineStatement:
|
|
370
|
+
multilineStatement: "",
|
|
368
371
|
},
|
|
369
372
|
},
|
|
370
373
|
},
|
|
371
374
|
{
|
|
372
|
-
name:
|
|
375
|
+
name: "regular import",
|
|
373
376
|
line: 'fmt := import("fmt")',
|
|
374
377
|
context: {
|
|
375
378
|
isInCommentBlock: false,
|
|
@@ -377,9 +380,9 @@ describe('parseSingleSourceLine', () => {
|
|
|
377
380
|
lineNo: 1,
|
|
378
381
|
artifactImportREs: new Map(),
|
|
379
382
|
importLikeREs: new Map(),
|
|
380
|
-
multilineStatement:
|
|
383
|
+
multilineStatement: "",
|
|
381
384
|
},
|
|
382
|
-
localPackageName:
|
|
385
|
+
localPackageName: "test-package",
|
|
383
386
|
expected: {
|
|
384
387
|
line: 'fmt := import("fmt")',
|
|
385
388
|
artifacts: [],
|
|
@@ -390,12 +393,12 @@ describe('parseSingleSourceLine', () => {
|
|
|
390
393
|
lineNo: 1,
|
|
391
394
|
artifactImportREs: new Map(),
|
|
392
395
|
importLikeREs: new Map(),
|
|
393
|
-
multilineStatement:
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
+
multilineStatement: "",
|
|
397
|
+
},
|
|
398
|
+
},
|
|
396
399
|
},
|
|
397
400
|
{
|
|
398
|
-
name:
|
|
401
|
+
name: "library import",
|
|
399
402
|
line: 'myLib := import("test-package:myLib")',
|
|
400
403
|
context: {
|
|
401
404
|
isInCommentBlock: false,
|
|
@@ -403,12 +406,12 @@ describe('parseSingleSourceLine', () => {
|
|
|
403
406
|
lineNo: 1,
|
|
404
407
|
artifactImportREs: new Map(),
|
|
405
408
|
importLikeREs: new Map(),
|
|
406
|
-
multilineStatement:
|
|
409
|
+
multilineStatement: "",
|
|
407
410
|
},
|
|
408
|
-
localPackageName:
|
|
411
|
+
localPackageName: "test-package",
|
|
409
412
|
expected: {
|
|
410
413
|
line: 'myLib := import("test-package:myLib")',
|
|
411
|
-
artifacts: [{ pkg:
|
|
414
|
+
artifacts: [{ pkg: "test-package", id: "myLib", type: "library" }],
|
|
412
415
|
option: undefined,
|
|
413
416
|
context: {
|
|
414
417
|
isInCommentBlock: false,
|
|
@@ -416,12 +419,12 @@ describe('parseSingleSourceLine', () => {
|
|
|
416
419
|
lineNo: 1,
|
|
417
420
|
artifactImportREs: new Map(),
|
|
418
421
|
importLikeREs: new Map(),
|
|
419
|
-
multilineStatement:
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
+
multilineStatement: "",
|
|
423
|
+
},
|
|
424
|
+
},
|
|
422
425
|
},
|
|
423
426
|
{
|
|
424
|
-
name:
|
|
427
|
+
name: "library import with globalize",
|
|
425
428
|
line: 'myLib := import("test-package:myLib")',
|
|
426
429
|
context: {
|
|
427
430
|
isInCommentBlock: false,
|
|
@@ -429,13 +432,13 @@ describe('parseSingleSourceLine', () => {
|
|
|
429
432
|
lineNo: 1,
|
|
430
433
|
artifactImportREs: new Map(),
|
|
431
434
|
importLikeREs: new Map(),
|
|
432
|
-
multilineStatement:
|
|
435
|
+
multilineStatement: "",
|
|
433
436
|
},
|
|
434
|
-
localPackageName:
|
|
437
|
+
localPackageName: "test-package",
|
|
435
438
|
globalizeImports: true,
|
|
436
439
|
expected: {
|
|
437
440
|
line: 'myLib := import("test-package:myLib")',
|
|
438
|
-
artifacts: [{ pkg:
|
|
441
|
+
artifacts: [{ pkg: "test-package", id: "myLib", type: "library" }],
|
|
439
442
|
option: undefined,
|
|
440
443
|
context: {
|
|
441
444
|
isInCommentBlock: false,
|
|
@@ -443,12 +446,12 @@ describe('parseSingleSourceLine', () => {
|
|
|
443
446
|
lineNo: 1,
|
|
444
447
|
artifactImportREs: new Map(),
|
|
445
448
|
importLikeREs: new Map(),
|
|
446
|
-
multilineStatement:
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
+
multilineStatement: "",
|
|
450
|
+
},
|
|
451
|
+
},
|
|
449
452
|
},
|
|
450
453
|
{
|
|
451
|
-
name:
|
|
454
|
+
name: "plapi import sets up template detection",
|
|
452
455
|
line: 'plapi := import("plapi")',
|
|
453
456
|
context: {
|
|
454
457
|
isInCommentBlock: false,
|
|
@@ -456,9 +459,9 @@ describe('parseSingleSourceLine', () => {
|
|
|
456
459
|
lineNo: 1,
|
|
457
460
|
artifactImportREs: new Map(),
|
|
458
461
|
importLikeREs: new Map(),
|
|
459
|
-
multilineStatement:
|
|
462
|
+
multilineStatement: "",
|
|
460
463
|
},
|
|
461
|
-
localPackageName:
|
|
464
|
+
localPackageName: "test-package",
|
|
462
465
|
expected: {
|
|
463
466
|
line: 'plapi := import("plapi")',
|
|
464
467
|
artifacts: [],
|
|
@@ -469,17 +472,17 @@ describe('parseSingleSourceLine', () => {
|
|
|
469
472
|
lineNo: 1,
|
|
470
473
|
artifactImportREs: (() => {
|
|
471
474
|
const r = new Map();
|
|
472
|
-
r.set(
|
|
473
|
-
r.set(
|
|
475
|
+
r.set("template", newGetTemplateIdRE("plapi"));
|
|
476
|
+
r.set("software", newGetSoftwareInfoRE("plapi"));
|
|
474
477
|
return r;
|
|
475
478
|
})(),
|
|
476
479
|
importLikeREs: new Map(),
|
|
477
|
-
multilineStatement:
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
+
multilineStatement: "",
|
|
481
|
+
},
|
|
482
|
+
},
|
|
480
483
|
},
|
|
481
484
|
{
|
|
482
|
-
name:
|
|
485
|
+
name: "tengo-sdk:ll import sets up template detection",
|
|
483
486
|
line: 'll := import("@milaboratory/tengo-sdk:ll")',
|
|
484
487
|
context: {
|
|
485
488
|
isInCommentBlock: false,
|
|
@@ -487,16 +490,18 @@ describe('parseSingleSourceLine', () => {
|
|
|
487
490
|
lineNo: 1,
|
|
488
491
|
artifactImportREs: new Map(),
|
|
489
492
|
importLikeREs: new Map(),
|
|
490
|
-
multilineStatement:
|
|
493
|
+
multilineStatement: "",
|
|
491
494
|
},
|
|
492
|
-
localPackageName:
|
|
495
|
+
localPackageName: "test-package",
|
|
493
496
|
expected: {
|
|
494
497
|
line: 'll := import("@milaboratory/tengo-sdk:ll")',
|
|
495
|
-
artifacts: [
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
498
|
+
artifacts: [
|
|
499
|
+
{
|
|
500
|
+
id: "ll",
|
|
501
|
+
pkg: "@milaboratory/tengo-sdk",
|
|
502
|
+
type: "library",
|
|
503
|
+
},
|
|
504
|
+
],
|
|
500
505
|
option: undefined,
|
|
501
506
|
context: {
|
|
502
507
|
isInCommentBlock: false,
|
|
@@ -504,28 +509,31 @@ describe('parseSingleSourceLine', () => {
|
|
|
504
509
|
lineNo: 1,
|
|
505
510
|
artifactImportREs: (() => {
|
|
506
511
|
const r = new Map();
|
|
507
|
-
r.set(
|
|
508
|
-
r.set(
|
|
512
|
+
r.set("template", newGetTemplateIdRE("ll"));
|
|
513
|
+
r.set("software", newGetSoftwareInfoRE("ll"));
|
|
509
514
|
return r;
|
|
510
515
|
})(),
|
|
511
516
|
importLikeREs: new Map(),
|
|
512
|
-
multilineStatement:
|
|
513
|
-
}
|
|
517
|
+
multilineStatement: "",
|
|
518
|
+
},
|
|
514
519
|
},
|
|
515
|
-
}
|
|
516
|
-
]
|
|
517
|
-
test.each(testCases)(
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
520
|
+
},
|
|
521
|
+
];
|
|
522
|
+
test.each(testCases)(
|
|
523
|
+
"$name",
|
|
524
|
+
({ line, context, localPackageName, globalizeImports, expected }) => {
|
|
525
|
+
const result = parseSingleSourceLine(
|
|
526
|
+
new ConsoleLoggerAdapter(),
|
|
527
|
+
line,
|
|
528
|
+
context,
|
|
529
|
+
localPackageName,
|
|
530
|
+
globalizeImports,
|
|
531
|
+
);
|
|
525
532
|
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
533
|
+
expect(result.line).toBe(expected.line);
|
|
534
|
+
expect(result.artifacts).toEqual(expected.artifacts);
|
|
535
|
+
expect(result.option).toEqual(expected.option);
|
|
536
|
+
expect(result.context).toMatchObject(context);
|
|
537
|
+
},
|
|
538
|
+
);
|
|
531
539
|
});
|