@platforma-sdk/tengo-builder 2.4.25 → 2.4.26
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/dist/_virtual/_rolldown/runtime.cjs +29 -0
- package/dist/commands/build.cjs +106 -150
- package/dist/commands/build.cjs.map +1 -1
- package/dist/commands/build.d.ts +15 -10
- package/dist/commands/build.js +101 -126
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/check.cjs +32 -36
- package/dist/commands/check.cjs.map +1 -1
- package/dist/commands/check.d.ts +13 -8
- package/dist/commands/check.js +30 -33
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/dump/artifacts.cjs +22 -22
- package/dist/commands/dump/artifacts.cjs.map +1 -1
- package/dist/commands/dump/artifacts.d.ts +13 -8
- package/dist/commands/dump/artifacts.js +20 -19
- package/dist/commands/dump/artifacts.js.map +1 -1
- package/dist/commands/dump/software.cjs +19 -21
- package/dist/commands/dump/software.cjs.map +1 -1
- package/dist/commands/dump/software.d.ts +12 -7
- package/dist/commands/dump/software.js +17 -18
- package/dist/commands/dump/software.js.map +1 -1
- package/dist/commands/test.cjs +32 -33
- package/dist/commands/test.cjs.map +1 -1
- package/dist/commands/test.d.ts +13 -8
- package/dist/commands/test.js +30 -30
- package/dist/commands/test.js.map +1 -1
- package/dist/compiler/artifactset.cjs +59 -68
- package/dist/compiler/artifactset.cjs.map +1 -1
- package/dist/compiler/artifactset.js +60 -66
- package/dist/compiler/artifactset.js.map +1 -1
- package/dist/compiler/compiler.cjs +241 -314
- package/dist/compiler/compiler.cjs.map +1 -1
- package/dist/compiler/compiler.js +241 -312
- package/dist/compiler/compiler.js.map +1 -1
- package/dist/compiler/compileroptions.cjs +16 -35
- package/dist/compiler/compileroptions.cjs.map +1 -1
- package/dist/compiler/compileroptions.js +17 -33
- package/dist/compiler/compileroptions.js.map +1 -1
- package/dist/compiler/main.cjs +258 -334
- package/dist/compiler/main.cjs.map +1 -1
- package/dist/compiler/main.js +256 -311
- package/dist/compiler/main.js.map +1 -1
- package/dist/compiler/package.cjs +21 -35
- package/dist/compiler/package.cjs.map +1 -1
- package/dist/compiler/package.js +21 -34
- package/dist/compiler/package.js.map +1 -1
- package/dist/compiler/source.cjs +239 -308
- package/dist/compiler/source.cjs.map +1 -1
- package/dist/compiler/source.js +239 -304
- package/dist/compiler/source.js.map +1 -1
- package/dist/compiler/template.cjs +30 -35
- package/dist/compiler/template.cjs.map +1 -1
- package/dist/compiler/template.js +29 -33
- package/dist/compiler/template.js.map +1 -1
- package/dist/compiler/util.cjs +40 -61
- package/dist/compiler/util.cjs.map +1 -1
- package/dist/compiler/util.js +36 -39
- package/dist/compiler/util.js.map +1 -1
- package/dist/index.cjs +14 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +15 -11
- package/dist/index.js +13 -12
- package/dist/index.js.map +1 -1
- package/dist/shared/basecmd.cjs +42 -33
- package/dist/shared/basecmd.cjs.map +1 -1
- package/dist/shared/basecmd.js +41 -31
- package/dist/shared/basecmd.js.map +1 -1
- package/dist/shared/dump.cjs +73 -107
- package/dist/shared/dump.cjs.map +1 -1
- package/dist/shared/dump.js +73 -105
- package/dist/shared/dump.js.map +1 -1
- package/dist/shared/proc.cjs +22 -18
- package/dist/shared/proc.cjs.map +1 -1
- package/dist/shared/proc.js +21 -16
- package/dist/shared/proc.js.map +1 -1
- package/package.json +8 -8
- package/dist/commands/build.d.ts.map +0 -1
- package/dist/commands/check.d.ts.map +0 -1
- package/dist/commands/dump/artifacts.d.ts.map +0 -1
- package/dist/commands/dump/software.d.ts.map +0 -1
- package/dist/commands/test.d.ts.map +0 -1
- package/dist/compiler/artifactset.d.ts +0 -24
- package/dist/compiler/artifactset.d.ts.map +0 -1
- package/dist/compiler/compiler.d.ts +0 -42
- package/dist/compiler/compiler.d.ts.map +0 -1
- package/dist/compiler/compileroptions.d.ts +0 -6
- package/dist/compiler/compileroptions.d.ts.map +0 -1
- package/dist/compiler/main.d.ts +0 -35
- package/dist/compiler/main.d.ts.map +0 -1
- package/dist/compiler/package.d.ts +0 -44
- package/dist/compiler/package.d.ts.map +0 -1
- package/dist/compiler/source.d.ts +0 -54
- package/dist/compiler/source.d.ts.map +0 -1
- package/dist/compiler/template.d.ts +0 -22
- package/dist/compiler/template.d.ts.map +0 -1
- package/dist/compiler/test.artifacts.d.ts +0 -47
- package/dist/compiler/test.artifacts.d.ts.map +0 -1
- package/dist/compiler/util.d.ts +0 -8
- package/dist/compiler/util.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/shared/basecmd.d.ts +0 -12
- package/dist/shared/basecmd.d.ts.map +0 -1
- package/dist/shared/dump.d.ts +0 -6
- package/dist/shared/dump.d.ts.map +0 -1
- package/dist/shared/proc.d.ts +0 -5
- package/dist/shared/proc.d.ts.map +0 -1
package/dist/compiler/main.js
CHANGED
|
@@ -1,358 +1,303 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import { TengoTemplateCompiler } from
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
1
|
+
import { pathType } from "./util.js";
|
|
2
|
+
import { fullNameToString, typedArtifactNameToString } from "./package.js";
|
|
3
|
+
import { newTemplateFromContent, templateToSource } from "./template.js";
|
|
4
|
+
import { TengoTemplateCompiler } from "./compiler.js";
|
|
5
|
+
import { ArtifactSource, getSha256, parseSourceFile } from "./source.js";
|
|
6
|
+
import * as path from "node:path";
|
|
7
|
+
import * as fs from "node:fs";
|
|
8
|
+
import { serializeTemplate } from "@milaboratories/pl-model-backend";
|
|
9
|
+
import { tryResolve, tryResolveOrError } from "@milaboratories/resolve-helper";
|
|
10
10
|
|
|
11
|
+
//#region src/compiler/main.ts
|
|
11
12
|
const compiledTplSuffix = ".plj.gz";
|
|
12
13
|
const compiledLibSuffix = ".lib.tengo";
|
|
13
14
|
const compiledSoftwareSuffix = ".sw.json";
|
|
14
15
|
const compiledAssetSuffix = ".as.json";
|
|
15
|
-
// We need to keep track of dependencies for correct tgo-test CLI utility configuraiton.
|
|
16
|
-
// It is much simpler to do this here, than duplicate all tle logic regarding dependencies
|
|
17
|
-
// in go code.
|
|
18
16
|
const srcTestSuffix = ".test.tengo";
|
|
19
17
|
const srcTplSuffix = ".tpl.tengo";
|
|
20
18
|
const srcLibSuffix = ".lib.tengo";
|
|
21
19
|
const srcSoftwareSuffix = ".sw.json";
|
|
22
20
|
const srcAssetSuffix = ".as.json";
|
|
23
|
-
const compilableSuffixes = [
|
|
21
|
+
const compilableSuffixes = [
|
|
22
|
+
srcLibSuffix,
|
|
23
|
+
srcTplSuffix,
|
|
24
|
+
srcSoftwareSuffix,
|
|
25
|
+
srcAssetSuffix
|
|
26
|
+
];
|
|
24
27
|
/**
|
|
25
|
-
|
|
26
|
-
|
|
28
|
+
* Resolves path to package.json file of the given dependency package.
|
|
29
|
+
*/
|
|
27
30
|
function resolvePackageJsonPackage(root, depPackageName) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const resolved2 = tryResolveOrError(root, `${depPackageName}/package.json`);
|
|
46
|
-
if (resolved2.result === undefined) {
|
|
47
|
-
if (resolved2.err === "ERR_PACKAGE_PATH_NOT_EXPORTED")
|
|
48
|
-
// tolerating not-exported package.json for dev dependencies
|
|
49
|
-
return undefined;
|
|
50
|
-
throw new Error(`Can't resolve package.json for package ${depPackageName ?? "."} relative to ${root}`);
|
|
51
|
-
}
|
|
52
|
-
return resolved2.result;
|
|
31
|
+
if (!path.isAbsolute(root)) throw new Error(`Root path must be absolute: ${root}`);
|
|
32
|
+
let resolved = tryResolve(root, depPackageName);
|
|
33
|
+
if (resolved) {
|
|
34
|
+
let depth = 0;
|
|
35
|
+
do {
|
|
36
|
+
const p = path.join(resolved, "package.json");
|
|
37
|
+
if (pathType(p) === "file") return p;
|
|
38
|
+
depth++;
|
|
39
|
+
resolved = path.dirname(resolved);
|
|
40
|
+
} while (depth < 7 && path.basename(resolved) !== "node_modules");
|
|
41
|
+
}
|
|
42
|
+
const resolved2 = tryResolveOrError(root, `${depPackageName}/package.json`);
|
|
43
|
+
if (resolved2.result === void 0) {
|
|
44
|
+
if (resolved2.err === "ERR_PACKAGE_PATH_NOT_EXPORTED") return void 0;
|
|
45
|
+
throw new Error(`Can't resolve package.json for package ${depPackageName ?? "."} relative to ${root}`);
|
|
46
|
+
}
|
|
47
|
+
return resolved2.result;
|
|
53
48
|
}
|
|
54
49
|
function resolvePackageJsonRoot(root) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
if (pathType(p) === "file")
|
|
60
|
-
return p;
|
|
61
|
-
throw new Error(`Can't resolve package.json in ${root}`);
|
|
50
|
+
if (!path.isAbsolute(root)) throw new Error(`Root path must be absolute: ${root}`);
|
|
51
|
+
const p = path.join(root, "package.json");
|
|
52
|
+
if (pathType(p) === "file") return p;
|
|
53
|
+
throw new Error(`Can't resolve package.json in ${root}`);
|
|
62
54
|
}
|
|
63
55
|
/**
|
|
64
|
-
|
|
65
|
-
|
|
56
|
+
* Get package info from package.json and all dependencies.
|
|
57
|
+
*/
|
|
66
58
|
function getPackageInfo(root, logger, context = "root") {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
name: packageJson.name,
|
|
94
|
-
version: packageJson.version,
|
|
95
|
-
type: packageJson.type,
|
|
96
|
-
dependencies: depInfos,
|
|
97
|
-
root,
|
|
98
|
-
context,
|
|
99
|
-
};
|
|
59
|
+
const packageJsonPath = resolvePackageJsonRoot(root);
|
|
60
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath).toString());
|
|
61
|
+
const depInfos = [];
|
|
62
|
+
if (packageJson.dependencies && context !== "devDependency") for (const dep of Object.keys(packageJson.dependencies)) {
|
|
63
|
+
const depPackageJson = resolvePackageJsonPackage(root, dep);
|
|
64
|
+
if (depPackageJson === void 0) throw new Error(`Can't resolve package.json for dependency ${dep} of ${root}`);
|
|
65
|
+
const depRoot = path.dirname(depPackageJson);
|
|
66
|
+
depInfos.push(getPackageInfo(depRoot, logger, "dependency"));
|
|
67
|
+
}
|
|
68
|
+
if (packageJson.devDependencies && context === "root") for (const dep of Object.keys(packageJson.devDependencies)) {
|
|
69
|
+
const depPackageJson = resolvePackageJsonPackage(root, dep);
|
|
70
|
+
if (depPackageJson === void 0) {
|
|
71
|
+
logger.warn(`Can't resolve package.json for dev dependency ${dep} of ${root}`);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
const depRoot = path.dirname(depPackageJson);
|
|
75
|
+
depInfos.push(getPackageInfo(depRoot, logger, "devDependency"));
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
name: packageJson.name,
|
|
79
|
+
version: packageJson.version,
|
|
80
|
+
type: packageJson.type,
|
|
81
|
+
dependencies: depInfos,
|
|
82
|
+
root,
|
|
83
|
+
context
|
|
84
|
+
};
|
|
100
85
|
}
|
|
101
86
|
function resolveLibsDst(mode, root) {
|
|
102
|
-
|
|
87
|
+
return path.resolve(root, mode, "tengo", "lib");
|
|
103
88
|
}
|
|
104
89
|
function resolveTemplatesDst(mode, root) {
|
|
105
|
-
|
|
90
|
+
return path.resolve(root, mode, "tengo", "tpl");
|
|
106
91
|
}
|
|
107
92
|
function resolveSoftwareDst(mode, root) {
|
|
108
|
-
|
|
93
|
+
return path.resolve(root, mode, "tengo", "software");
|
|
109
94
|
}
|
|
110
95
|
function resolveAssetsDst(mode, root) {
|
|
111
|
-
|
|
96
|
+
return path.resolve(root, mode, "tengo", "asset");
|
|
112
97
|
}
|
|
113
98
|
function loadDependencies(logger, compiler, packageInfo) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
loadLibsFromDir(logger, packageId, "dist", libDistFolder, compiler);
|
|
134
|
-
}
|
|
135
|
-
if (tplDistExists) {
|
|
136
|
-
loadTemplatesFromDir(logger, packageId, "dist", tplDistFolder, compiler);
|
|
137
|
-
}
|
|
138
|
-
if (softwareDistExists) {
|
|
139
|
-
loadSoftwareFromDir(logger, packageId, "dist", softwareDistFolder, compiler);
|
|
140
|
-
}
|
|
141
|
-
if (assetDistExists) {
|
|
142
|
-
loadAssetsFromDir(logger, packageId, "dist", assetDistFolder, compiler);
|
|
143
|
-
}
|
|
99
|
+
for (const dep of packageInfo.dependencies) loadDependencies(logger, compiler, dep);
|
|
100
|
+
if (packageInfo.context === "root") return;
|
|
101
|
+
const libDistFolder = resolveLibsDst("dist", packageInfo.root);
|
|
102
|
+
const tplDistFolder = resolveTemplatesDst("dist", packageInfo.root);
|
|
103
|
+
const softwareDistFolder = resolveSoftwareDst("dist", packageInfo.root);
|
|
104
|
+
const assetDistFolder = resolveAssetsDst("dist", packageInfo.root);
|
|
105
|
+
const libDistExists = pathType(libDistFolder) === "dir";
|
|
106
|
+
const tplDistExists = pathType(tplDistFolder) === "dir";
|
|
107
|
+
const softwareDistExists = pathType(softwareDistFolder) === "dir";
|
|
108
|
+
const assetDistExists = pathType(assetDistFolder) === "dir";
|
|
109
|
+
if (!libDistExists && !tplDistExists && !softwareDistExists && !assetDistExists) return;
|
|
110
|
+
const packageId = {
|
|
111
|
+
name: packageInfo.name,
|
|
112
|
+
version: packageInfo.version
|
|
113
|
+
};
|
|
114
|
+
if (libDistExists) loadLibsFromDir(logger, packageId, "dist", libDistFolder, compiler);
|
|
115
|
+
if (tplDistExists) loadTemplatesFromDir(logger, packageId, "dist", tplDistFolder, compiler);
|
|
116
|
+
if (softwareDistExists) loadSoftwareFromDir(logger, packageId, "dist", softwareDistFolder, compiler);
|
|
117
|
+
if (assetDistExists) loadAssetsFromDir(logger, packageId, "dist", assetDistFolder, compiler);
|
|
144
118
|
}
|
|
145
119
|
function loadLibsFromDir(logger, packageId, mode, folder, compiler) {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
}
|
|
164
|
-
}
|
|
120
|
+
for (const f of fs.readdirSync(folder)) {
|
|
121
|
+
const file = path.resolve(folder, f);
|
|
122
|
+
if (!f.endsWith(compiledLibSuffix)) throw new Error(`unexpected file in 'lib' folder: ${file}`);
|
|
123
|
+
const fullName = {
|
|
124
|
+
type: "library",
|
|
125
|
+
pkg: packageId.name,
|
|
126
|
+
id: f.slice(0, f.length - 10),
|
|
127
|
+
version: packageId.version
|
|
128
|
+
};
|
|
129
|
+
const src = parseSourceFile(logger, mode, file, fullName, true);
|
|
130
|
+
compiler.addLib(src);
|
|
131
|
+
logger.debug(`Adding dependency ${fullNameToString(fullName)} from ${file}`);
|
|
132
|
+
if (src.dependencies.length > 0) {
|
|
133
|
+
logger.debug("Dependencies:");
|
|
134
|
+
for (const dep of src.dependencies) logger.debug(` - ${typedArtifactNameToString(dep)}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
165
137
|
}
|
|
166
138
|
function loadTemplatesFromDir(logger, packageId, mode, folder, compiler) {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
logger.debug(`Adding dependency ${fullNameToString(fullName)} from ${file}`);
|
|
181
|
-
}
|
|
139
|
+
for (const f of fs.readdirSync(folder)) {
|
|
140
|
+
const file = path.resolve(folder, f);
|
|
141
|
+
if (!f.endsWith(compiledTplSuffix)) throw new Error(`unexpected file in 'tpl' folder: ${file}`);
|
|
142
|
+
const fullName = {
|
|
143
|
+
type: "template",
|
|
144
|
+
pkg: packageId.name,
|
|
145
|
+
id: f.slice(0, f.length - 7),
|
|
146
|
+
version: packageId.version
|
|
147
|
+
};
|
|
148
|
+
const tpl = newTemplateFromContent(mode, fullName, fs.readFileSync(file));
|
|
149
|
+
compiler.addTemplate(templateToSource(tpl));
|
|
150
|
+
logger.debug(`Adding dependency ${fullNameToString(fullName)} from ${file}`);
|
|
151
|
+
}
|
|
182
152
|
}
|
|
183
153
|
function loadSoftwareFromDir(logger, packageId, mode, folder, compiler) {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
}
|
|
154
|
+
for (const f of fs.readdirSync(folder)) {
|
|
155
|
+
const file = path.resolve(folder, f);
|
|
156
|
+
if (!f.endsWith(compiledSoftwareSuffix)) throw new Error(`unexpected file in 'software' folder: ${file}`);
|
|
157
|
+
const fullName = {
|
|
158
|
+
type: "software",
|
|
159
|
+
pkg: packageId.name,
|
|
160
|
+
id: f.slice(0, f.length - 8),
|
|
161
|
+
version: packageId.version
|
|
162
|
+
};
|
|
163
|
+
const source = fs.readFileSync(file).toString();
|
|
164
|
+
const software = new ArtifactSource(mode, fullName, getSha256(source), source, file, [], []);
|
|
165
|
+
logger.debug(`Adding dependency ${fullNameToString(fullName)} from ${file}`);
|
|
166
|
+
compiler.addSoftware(software);
|
|
167
|
+
}
|
|
199
168
|
}
|
|
200
169
|
function loadAssetsFromDir(logger, packageId, mode, folder, compiler) {
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
}
|
|
170
|
+
for (const f of fs.readdirSync(folder)) {
|
|
171
|
+
const file = path.resolve(folder, f);
|
|
172
|
+
if (!f.endsWith(compiledAssetSuffix)) throw new Error(`unexpected file in 'asset' folder: ${file}`);
|
|
173
|
+
const fullName = {
|
|
174
|
+
type: "asset",
|
|
175
|
+
pkg: packageId.name,
|
|
176
|
+
id: f.slice(0, f.length - 8),
|
|
177
|
+
version: packageId.version
|
|
178
|
+
};
|
|
179
|
+
const source = fs.readFileSync(file).toString();
|
|
180
|
+
const asset = new ArtifactSource(mode, fullName, getSha256(source), source, file, [], []);
|
|
181
|
+
logger.debug(`Adding dependency ${fullNameToString(fullName)} from ${file}`);
|
|
182
|
+
compiler.addAsset(asset);
|
|
183
|
+
}
|
|
216
184
|
}
|
|
217
185
|
function parseSources(logger, packageId, mode, root, subdir) {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
if (newSrc.dependencies.length > 0) {
|
|
243
|
-
logger.debug("Detected dependencies:");
|
|
244
|
-
for (const dep of newSrc.dependencies)
|
|
245
|
-
logger.debug(` - ${typedArtifactNameToString(dep)}`);
|
|
246
|
-
}
|
|
247
|
-
sources.push(newSrc);
|
|
248
|
-
}
|
|
249
|
-
return sources;
|
|
186
|
+
const sources = [];
|
|
187
|
+
for (const f of fs.readdirSync(path.join(root, subdir))) {
|
|
188
|
+
const inRootPath = path.join(subdir, f);
|
|
189
|
+
if (pathType(path.join(root, inRootPath)) === "dir") {
|
|
190
|
+
const nested = parseSources(logger, packageId, mode, root, inRootPath);
|
|
191
|
+
sources.push(...nested);
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
const artifactName = f === "index.lib.tengo" ? `${path.dirname(inRootPath)}.lib.tengo` : inRootPath;
|
|
195
|
+
const fullName = fullNameFromFileName(packageId, artifactName.replaceAll(path.sep, "."));
|
|
196
|
+
if (!fullName) {
|
|
197
|
+
logger.info(`Skipping unknown file type: ${artifactName}`);
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
const file = path.resolve(root, inRootPath);
|
|
201
|
+
logger.debug(`Parsing ${fullNameToString(fullName)} from ${file}`);
|
|
202
|
+
const newSrc = parseSourceFile(logger, mode, file, fullName, true);
|
|
203
|
+
if (newSrc.dependencies.length > 0) {
|
|
204
|
+
logger.debug("Detected dependencies:");
|
|
205
|
+
for (const dep of newSrc.dependencies) logger.debug(` - ${typedArtifactNameToString(dep)}`);
|
|
206
|
+
}
|
|
207
|
+
sources.push(newSrc);
|
|
208
|
+
}
|
|
209
|
+
return sources;
|
|
250
210
|
}
|
|
251
211
|
function newCompiler(logger, packageInfo, mode) {
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
return compiler;
|
|
212
|
+
const compiler = new TengoTemplateCompiler(mode);
|
|
213
|
+
loadDependencies(logger, compiler, packageInfo);
|
|
214
|
+
return compiler;
|
|
256
215
|
}
|
|
257
216
|
function fullNameFromFileName(packageId, artifactName) {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
return {
|
|
289
|
-
...pkgAndVersion,
|
|
290
|
-
id: artifactName.substring(0, artifactName.length - srcTestSuffix.length),
|
|
291
|
-
type: "test",
|
|
292
|
-
};
|
|
293
|
-
}
|
|
294
|
-
return null;
|
|
217
|
+
const pkgAndVersion = {
|
|
218
|
+
pkg: packageId.name,
|
|
219
|
+
version: packageId.version
|
|
220
|
+
};
|
|
221
|
+
if (artifactName.endsWith(srcLibSuffix)) return {
|
|
222
|
+
...pkgAndVersion,
|
|
223
|
+
id: artifactName.substring(0, artifactName.length - 10),
|
|
224
|
+
type: "library"
|
|
225
|
+
};
|
|
226
|
+
if (artifactName.endsWith(srcTplSuffix)) return {
|
|
227
|
+
...pkgAndVersion,
|
|
228
|
+
id: artifactName.substring(0, artifactName.length - 10),
|
|
229
|
+
type: "template"
|
|
230
|
+
};
|
|
231
|
+
if (artifactName.endsWith(srcSoftwareSuffix)) return {
|
|
232
|
+
...pkgAndVersion,
|
|
233
|
+
id: artifactName.substring(0, artifactName.length - 8),
|
|
234
|
+
type: "software"
|
|
235
|
+
};
|
|
236
|
+
if (artifactName.endsWith(srcAssetSuffix)) return {
|
|
237
|
+
...pkgAndVersion,
|
|
238
|
+
id: artifactName.substring(0, artifactName.length - 8),
|
|
239
|
+
type: "asset"
|
|
240
|
+
};
|
|
241
|
+
if (artifactName.endsWith(srcTestSuffix)) return {
|
|
242
|
+
...pkgAndVersion,
|
|
243
|
+
id: artifactName.substring(0, artifactName.length - 11),
|
|
244
|
+
type: "test"
|
|
245
|
+
};
|
|
246
|
+
return null;
|
|
295
247
|
}
|
|
296
248
|
function compile(logger, packageInfo, mode) {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
logger.info(`Compiling '${mode}'...`);
|
|
310
|
-
const compiled = compiler.compileAndAdd(sources);
|
|
311
|
-
logger.debug(`Done.`);
|
|
312
|
-
return compiled;
|
|
249
|
+
const compiler = newCompiler(logger, packageInfo, mode);
|
|
250
|
+
const sources = parseSources(logger, packageInfo, mode, "src", "");
|
|
251
|
+
if (sources.length === 0) {
|
|
252
|
+
const lookFor = [];
|
|
253
|
+
for (const suffix of compilableSuffixes) lookFor.push(`*${suffix}`);
|
|
254
|
+
logger.error(`Nothing to compile. Looked for ${lookFor.join(", ")}`);
|
|
255
|
+
process.exit(1);
|
|
256
|
+
}
|
|
257
|
+
logger.info(`Compiling '${mode}'...`);
|
|
258
|
+
const compiled = compiler.compileAndAdd(sources);
|
|
259
|
+
logger.debug(`Done.`);
|
|
260
|
+
return compiled;
|
|
313
261
|
}
|
|
314
262
|
function savePacks(logger, compiled, mode) {
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
logger.info(` - writing ${file}`);
|
|
352
|
-
fs.writeFileSync(file, sw.src);
|
|
353
|
-
}
|
|
354
|
-
}
|
|
263
|
+
if (compiled.libs.length > 0) {
|
|
264
|
+
const libOutput = resolveLibsDst(mode, ".");
|
|
265
|
+
fs.mkdirSync(libOutput, { recursive: true });
|
|
266
|
+
for (const lib of compiled.libs) {
|
|
267
|
+
const file = path.resolve(libOutput, lib.fullName.id + compiledLibSuffix);
|
|
268
|
+
logger.info(` - writing ${file}`);
|
|
269
|
+
fs.writeFileSync(file, lib.src);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (compiled.templates.length > 0) {
|
|
273
|
+
const tplOutput = resolveTemplatesDst(mode, ".");
|
|
274
|
+
fs.mkdirSync(tplOutput, { recursive: true });
|
|
275
|
+
for (const tpl of compiled.templates) {
|
|
276
|
+
const file = path.resolve(tplOutput, tpl.fullName.id + compiledTplSuffix);
|
|
277
|
+
logger.info(` - writing ${file}`);
|
|
278
|
+
fs.writeFileSync(file, serializeTemplate(tpl.data));
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
if (compiled.software.length > 0) {
|
|
282
|
+
const swOutput = resolveSoftwareDst(mode, ".");
|
|
283
|
+
fs.mkdirSync(swOutput, { recursive: true });
|
|
284
|
+
for (const sw of compiled.software) {
|
|
285
|
+
const file = path.resolve(swOutput, sw.fullName.id + compiledSoftwareSuffix);
|
|
286
|
+
logger.info(` - writing ${file}`);
|
|
287
|
+
fs.writeFileSync(file, sw.src);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
if (compiled.assets.length > 0) {
|
|
291
|
+
const swOutput = resolveAssetsDst(mode, ".");
|
|
292
|
+
fs.mkdirSync(swOutput, { recursive: true });
|
|
293
|
+
for (const sw of compiled.software) {
|
|
294
|
+
const file = path.resolve(swOutput, sw.fullName.id + compiledAssetSuffix);
|
|
295
|
+
logger.info(` - writing ${file}`);
|
|
296
|
+
fs.writeFileSync(file, sw.src);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
355
299
|
}
|
|
356
300
|
|
|
357
|
-
|
|
358
|
-
|
|
301
|
+
//#endregion
|
|
302
|
+
export { compile, getPackageInfo, newCompiler, parseSources, savePacks };
|
|
303
|
+
//# sourceMappingURL=main.js.map
|