@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
package/README.md
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# Overview
|
|
2
2
|
|
|
3
|
-
This repo contains a tool, that facilitates integration of `tengo` libraries and template build and distribution process into npm infrastructure.
|
|
3
|
+
This repo contains a tool, that facilitates integration of `tengo` libraries and template build and distribution process into npm infrastructure.
|
|
4
4
|
|
|
5
|
-
<!--
|
|
5
|
+
<!--
|
|
6
6
|
# Example config & file layout
|
|
7
7
|
|
|
8
8
|
`package.json`
|
|
9
9
|
|
|
10
10
|
```json5
|
|
11
11
|
{
|
|
12
|
-
// if your repo is a library or template collection, this sets its name in npm repo
|
|
12
|
+
// if your repo is a library or template collection, this sets its name in npm repo
|
|
13
13
|
"name": "@milaboratory/tengo-test-repo-1",
|
|
14
14
|
// package version for publishing
|
|
15
15
|
"version": "1.1.0",
|
|
@@ -27,7 +27,7 @@ This repo contains a tool, that facilitates integration of `tengo` libraries and
|
|
|
27
27
|
],
|
|
28
28
|
// (see important comment about dependencies)
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
// use latest version of tengo-template-builder package
|
|
30
|
+
// use latest version of tengo-template-builder package
|
|
31
31
|
"@milaboratory/tengo-template-builder": "1.0.1"
|
|
32
32
|
}
|
|
33
33
|
}
|
package/bin/run.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { dirname } from
|
|
4
|
-
import { fileURLToPath } from
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
5
|
|
|
6
6
|
const __filename = fileURLToPath(import.meta.url);
|
|
7
7
|
const __dirname = dirname(__filename);
|
|
8
8
|
|
|
9
9
|
// eslint-disable-next-line unicorn/prefer-top-level-await
|
|
10
10
|
(async () => {
|
|
11
|
-
const oclif = await import(
|
|
12
|
-
await oclif.execute({dir: __dirname})
|
|
13
|
-
})()
|
|
11
|
+
const oclif = await import("@oclif/core");
|
|
12
|
+
await oclif.execute({ dir: __dirname });
|
|
13
|
+
})();
|
package/dist/commands/build.cjs
CHANGED
|
@@ -31,51 +31,51 @@ var fsp__namespace = /*#__PURE__*/_interopNamespaceDefault(fsp);
|
|
|
31
31
|
var path__namespace = /*#__PURE__*/_interopNamespaceDefault(path);
|
|
32
32
|
|
|
33
33
|
class Build extends core.Command {
|
|
34
|
-
static description =
|
|
35
|
-
static examples = [
|
|
34
|
+
static description = "build tengo sources into single distributable pack file";
|
|
35
|
+
static examples = ["<%= config.bin %> <%= command.id %>"];
|
|
36
36
|
static flags = {
|
|
37
37
|
...basecmd.GlobalFlags,
|
|
38
38
|
...basecmd.CtagsFlags,
|
|
39
39
|
};
|
|
40
40
|
async run() {
|
|
41
41
|
const { flags } = await this.parse(Build);
|
|
42
|
-
const logger = util.createLogger(flags[
|
|
42
|
+
const logger = util.createLogger(flags["log-level"]);
|
|
43
43
|
const packageInfo = main.getPackageInfo(process.cwd(), logger);
|
|
44
|
-
const compiledDist = main.compile(logger, packageInfo,
|
|
45
|
-
main.savePacks(logger, compiledDist,
|
|
46
|
-
logger.info(
|
|
44
|
+
const compiledDist = main.compile(logger, packageInfo, "dist");
|
|
45
|
+
main.savePacks(logger, compiledDist, "dist");
|
|
46
|
+
logger.info("Template Pack build done.");
|
|
47
47
|
// Building TS bindings for templates
|
|
48
48
|
const { dts, cjs, mjs } = generateTsBinding(compiledDist);
|
|
49
|
-
await fsp__namespace.writeFile(
|
|
50
|
-
if (packageInfo.type ===
|
|
51
|
-
await fsp__namespace.writeFile(
|
|
52
|
-
await fsp__namespace.writeFile(
|
|
49
|
+
await fsp__namespace.writeFile("dist/index.d.ts", dts);
|
|
50
|
+
if (packageInfo.type === "module") {
|
|
51
|
+
await fsp__namespace.writeFile("dist/index.cjs", cjs);
|
|
52
|
+
await fsp__namespace.writeFile("dist/index.js", mjs);
|
|
53
53
|
}
|
|
54
54
|
else {
|
|
55
|
-
await fsp__namespace.writeFile(
|
|
56
|
-
await fsp__namespace.writeFile(
|
|
55
|
+
await fsp__namespace.writeFile("dist/index.js", cjs);
|
|
56
|
+
await fsp__namespace.writeFile("dist/index.mjs", mjs);
|
|
57
57
|
}
|
|
58
58
|
mergeTagsEnvs(flags);
|
|
59
|
-
if (flags[
|
|
59
|
+
if (flags["generate-tags"])
|
|
60
60
|
checkAndGenerateCtags(logger, flags);
|
|
61
|
-
logger.info(
|
|
61
|
+
logger.info("Template Pack build done.");
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
function generateTsBinding(compiledDist) {
|
|
65
65
|
let dts = `declare type TemplateFromFile = { readonly type: "from-file"; readonly path: string; };\n`;
|
|
66
66
|
dts += `declare type TplName = ${compiledDist.templates
|
|
67
67
|
.map((tpl) => '"' + tpl.fullName.id + '"')
|
|
68
|
-
.join(
|
|
68
|
+
.join(" | ")};\n`;
|
|
69
69
|
dts += `declare const Templates: Record<TplName, TemplateFromFile>;\n`;
|
|
70
70
|
dts += `export { Templates };\n`;
|
|
71
71
|
let cjs = `module.exports = { Templates: {\n`;
|
|
72
72
|
let mjs = `import { resolve } from 'node:path';\nexport const Templates = {\n`;
|
|
73
73
|
const recordsCjs = compiledDist.templates
|
|
74
74
|
.map((tpl) => ` '${tpl.fullName.id}': { type: 'from-file', path: require.resolve('./tengo/tpl/${tpl.fullName.id}.plj.gz') }`)
|
|
75
|
-
.join(
|
|
75
|
+
.join(",\n");
|
|
76
76
|
const recordsMjs = compiledDist.templates
|
|
77
77
|
.map((tpl) => ` '${tpl.fullName.id}': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/${tpl.fullName.id}.plj.gz') }`)
|
|
78
|
-
.join(
|
|
78
|
+
.join(",\n");
|
|
79
79
|
cjs += recordsCjs;
|
|
80
80
|
mjs += recordsMjs;
|
|
81
81
|
cjs += `\n}};\n`;
|
|
@@ -84,19 +84,19 @@ function generateTsBinding(compiledDist) {
|
|
|
84
84
|
}
|
|
85
85
|
function mergeTagsEnvs(flags) {
|
|
86
86
|
if (process.env.GENERATE_TAGS != undefined) {
|
|
87
|
-
flags[
|
|
87
|
+
flags["generate-tags"] = process.env.GENERATE_TAGS == "true";
|
|
88
88
|
}
|
|
89
89
|
if (process.env.TAGS_FILE != undefined) {
|
|
90
|
-
flags[
|
|
90
|
+
flags["tags-file"] = process.env.TAGS_FILE;
|
|
91
91
|
}
|
|
92
92
|
if (process.env.TAGS_ADDITIONAL_ARGS != undefined) {
|
|
93
|
-
flags[
|
|
93
|
+
flags["tags-additional-args"] = process.env.TAGS_ADDITIONAL_ARGS.split(",");
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
function checkAndGenerateCtags(logger, flags) {
|
|
97
|
-
const fileName = path__namespace.resolve(flags[
|
|
97
|
+
const fileName = path__namespace.resolve(flags["tags-file"]);
|
|
98
98
|
const rootDir = path__namespace.dirname(fileName);
|
|
99
|
-
const additionalArgs = flags[
|
|
99
|
+
const additionalArgs = flags["tags-additional-args"];
|
|
100
100
|
// all tengo files in dirs and subdirs
|
|
101
101
|
// If we don't limit the depth, it could become unbearably slow
|
|
102
102
|
// and even OOM killed node js.
|
|
@@ -106,24 +106,24 @@ function checkAndGenerateCtags(logger, flags) {
|
|
|
106
106
|
in "${fileName}", additional arguments: "${additionalArgs.join('" "')}".
|
|
107
107
|
Found ${tengoFiles.length} tengo files...`);
|
|
108
108
|
// see https://docs.ctags.io/en/latest/man/ctags-optlib.7.html#perl-pod
|
|
109
|
-
const result = node_child_process.spawnSync(
|
|
110
|
-
|
|
109
|
+
const result = node_child_process.spawnSync("ctags", [
|
|
110
|
+
"-f",
|
|
111
111
|
fileName,
|
|
112
112
|
...additionalArgs,
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
113
|
+
"--langdef=tengo",
|
|
114
|
+
"--map-tengo=+.tengo",
|
|
115
|
+
"--kinddef-tengo=f,function,function",
|
|
116
|
+
"--regex-tengo=/^\\s*(.*)(:| :=| =) ?func.*/\\1/f/",
|
|
117
|
+
"--kinddef-tengo=c,constant,constant",
|
|
118
118
|
'--regex-tengo=/^\\s*(.*) := ("|\\{).*/\\1/c/',
|
|
119
|
-
|
|
119
|
+
"-R",
|
|
120
120
|
...tengoFiles,
|
|
121
121
|
], {
|
|
122
122
|
env: process.env,
|
|
123
|
-
stdio:
|
|
123
|
+
stdio: "inherit",
|
|
124
124
|
cwd: rootDir,
|
|
125
125
|
});
|
|
126
|
-
if (result.error?.message.includes(
|
|
126
|
+
if (result.error?.message.includes("ENOENT")) {
|
|
127
127
|
console.log(`
|
|
128
128
|
pl-tengo can create tags for tengo autocompletion,
|
|
129
129
|
but the program should be installed
|
|
@@ -134,8 +134,8 @@ For vscode, you should also install ctags extension:
|
|
|
134
134
|
https://marketplace.visualstudio.com/items?itemName=jaydenlin.ctags-support`);
|
|
135
135
|
return;
|
|
136
136
|
}
|
|
137
|
-
checkRunError(result,
|
|
138
|
-
logger.info(
|
|
137
|
+
checkRunError(result, "failed to generate ctags");
|
|
138
|
+
logger.info("Generation of tags is done.");
|
|
139
139
|
}
|
|
140
140
|
function getTengoFiles(dir, depth) {
|
|
141
141
|
if (depth === 0) {
|
|
@@ -148,7 +148,7 @@ function getTengoFiles(dir, depth) {
|
|
|
148
148
|
if (file.isDirectory()) {
|
|
149
149
|
tengoFiles = tengoFiles.concat(getTengoFiles(absPath, depth - 1));
|
|
150
150
|
}
|
|
151
|
-
if (!file.isDirectory() && file.name.endsWith(
|
|
151
|
+
if (!file.isDirectory() && file.name.endsWith(".tengo")) {
|
|
152
152
|
tengoFiles.push(absPath);
|
|
153
153
|
}
|
|
154
154
|
});
|
|
@@ -156,7 +156,7 @@ function getTengoFiles(dir, depth) {
|
|
|
156
156
|
}
|
|
157
157
|
function toRelativePath(dir, files) {
|
|
158
158
|
// Note that VS Code extension likes only relatives paths to the root of the opened dir.
|
|
159
|
-
return files.map((file) => file.replace(dir,
|
|
159
|
+
return files.map((file) => file.replace(dir, "."));
|
|
160
160
|
}
|
|
161
161
|
function checkRunError(result, message) {
|
|
162
162
|
if (result.error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.cjs","sources":["../../src/commands/build.ts"],"sourcesContent":["import type { SpawnSyncReturns } from 'node:child_process';\nimport { spawnSync } from 'node:child_process';\nimport { Command } from '@oclif/core';\nimport { compile, savePacks, getPackageInfo } from '../compiler/main';\nimport { createLogger } from '../compiler/util';\nimport * as opts from '../shared/basecmd';\nimport * as fs from 'node:fs';\nimport * as fsp from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type * as winston from 'winston';\nimport type { TemplatesAndLibs } from '../compiler/compiler';\n\nexport default class Build extends Command {\n static override description = 'build tengo sources into single distributable pack file';\n\n static override examples = ['<%= config.bin %> <%= command.id %>'];\n\n static override flags = {\n ...opts.GlobalFlags,\n ...opts.CtagsFlags,\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(Build);\n const logger = createLogger(flags['log-level']);\n\n const packageInfo = getPackageInfo(process.cwd(), logger);\n const compiledDist = compile(logger, packageInfo, 'dist');\n savePacks(logger, compiledDist, 'dist');\n logger.info('Template Pack build done.');\n\n // Building TS bindings for templates\n const { dts, cjs, mjs } = generateTsBinding(compiledDist);\n await fsp.writeFile('dist/index.d.ts', dts);\n if (packageInfo.type === 'module') {\n await fsp.writeFile('dist/index.cjs', cjs);\n await fsp.writeFile('dist/index.js', mjs);\n } else {\n await fsp.writeFile('dist/index.js', cjs);\n await fsp.writeFile('dist/index.mjs', mjs);\n }\n\n mergeTagsEnvs(flags);\n if (flags['generate-tags']) checkAndGenerateCtags(logger, flags);\n\n logger.info('Template Pack build done.');\n }\n}\n\nfunction generateTsBinding(compiledDist: TemplatesAndLibs) {\n let dts = `declare type TemplateFromFile = { readonly type: \"from-file\"; readonly path: string; };\\n`;\n dts += `declare type TplName = ${compiledDist.templates\n .map((tpl) => '\"' + tpl.fullName.id + '\"')\n .join(' | ')};\\n`;\n dts += `declare const Templates: Record<TplName, TemplateFromFile>;\\n`;\n dts += `export { Templates };\\n`;\n let cjs = `module.exports = { Templates: {\\n`;\n let mjs = `import { resolve } from 'node:path';\\nexport const Templates = {\\n`;\n const recordsCjs = compiledDist.templates\n .map(\n (tpl) => ` '${tpl.fullName.id}': { type: 'from-file', path: require.resolve('./tengo/tpl/${tpl.fullName.id}.plj.gz') }`,\n )\n .join(',\\n');\n const recordsMjs = compiledDist.templates\n .map(\n (tpl) => ` '${tpl.fullName.id}': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/${tpl.fullName.id}.plj.gz') }`,\n )\n .join(',\\n');\n cjs += recordsCjs;\n mjs += recordsMjs;\n cjs += `\\n}};\\n`;\n mjs += `\\n};\\n`;\n\n return { dts, cjs, mjs };\n}\n\nfunction mergeTagsEnvs(flags: {\n 'generate-tags': boolean;\n 'tags-file': string;\n 'tags-additional-args': string[] | string;\n}) {\n if (process.env.GENERATE_TAGS != undefined) {\n flags['generate-tags'] = process.env.GENERATE_TAGS == 'true';\n }\n\n if (process.env.TAGS_FILE != undefined) {\n flags['tags-file'] = process.env.TAGS_FILE;\n }\n\n if (process.env.TAGS_ADDITIONAL_ARGS != undefined) {\n flags['tags-additional-args'] = process.env.TAGS_ADDITIONAL_ARGS.split(',');\n }\n}\n\nfunction checkAndGenerateCtags(\n logger: winston.Logger,\n flags: {\n 'tags-file': string;\n 'tags-additional-args': string[];\n },\n) {\n const fileName = path.resolve(flags['tags-file']);\n const rootDir = path.dirname(fileName);\n const additionalArgs = flags['tags-additional-args'];\n\n // all tengo files in dirs and subdirs\n // If we don't limit the depth, it could become unbearably slow\n // and even OOM killed node js.\n // Increase the depth if you need to.\n const tengoFiles = toRelativePath(rootDir, getTengoFiles(rootDir, 9));\n\n logger.info(\n `Generating tags for tengo autocompletion from \"${rootDir}\" \\\nin \"${fileName}\", additional arguments: \"${additionalArgs.join('\" \"')}\".\nFound ${tengoFiles.length} tengo files...`,\n );\n\n // see https://docs.ctags.io/en/latest/man/ctags-optlib.7.html#perl-pod\n const result = spawnSync(\n 'ctags',\n [\n '-f',\n fileName,\n ...additionalArgs,\n '--langdef=tengo',\n '--map-tengo=+.tengo',\n '--kinddef-tengo=f,function,function',\n '--regex-tengo=/^\\\\s*(.*)(:| :=| =) ?func.*/\\\\1/f/',\n '--kinddef-tengo=c,constant,constant',\n '--regex-tengo=/^\\\\s*(.*) := (\"|\\\\{).*/\\\\1/c/',\n '-R',\n ...tengoFiles,\n ],\n {\n env: process.env,\n stdio: 'inherit',\n cwd: rootDir,\n },\n );\n\n if (result.error?.message.includes('ENOENT')) {\n console.log(`\npl-tengo can create tags for tengo autocompletion,\nbut the program should be installed\nwith \"brew install universal-ctags\" on OSX\nor \"sudo apt install universal-ctags\" on Ubuntu.\n\nFor vscode, you should also install ctags extension:\nhttps://marketplace.visualstudio.com/items?itemName=jaydenlin.ctags-support`);\n\n return;\n }\n\n checkRunError(result, 'failed to generate ctags');\n\n logger.info('Generation of tags is done.');\n}\n\nfunction getTengoFiles(dir: string, depth: number): string[] {\n if (depth === 0) {\n return [];\n }\n\n const files = fs.readdirSync(dir, { withFileTypes: true });\n\n let tengoFiles: string[] = [];\n files.forEach((file) => {\n const absPath = path.join(dir, file.name);\n\n if (file.isDirectory()) {\n tengoFiles = tengoFiles.concat(getTengoFiles(absPath, depth - 1));\n }\n\n if (!file.isDirectory() && file.name.endsWith('.tengo')) {\n tengoFiles.push(absPath);\n }\n });\n\n return tengoFiles;\n}\n\nfunction toRelativePath(dir: string, files: string[]): string[] {\n // Note that VS Code extension likes only relatives paths to the root of the opened dir.\n return files.map((file) => file.replace(dir, '.'));\n}\n\nfunction checkRunError(result: SpawnSyncReturns<Buffer>, message?: string) {\n if (result.error) {\n console.log(result.error);\n }\n\n const msg = message ?? 'failed to run command';\n\n if (result.status !== 0) {\n console.log(`WARN: ${msg} the build will continue as-is`);\n }\n}\n"],"names":["Command","opts.GlobalFlags","opts.CtagsFlags","createLogger","getPackageInfo","compile","savePacks","fsp","path","spawnSync","fs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"build.cjs","sources":["../../src/commands/build.ts"],"sourcesContent":["import type { SpawnSyncReturns } from \"node:child_process\";\nimport { spawnSync } from \"node:child_process\";\nimport { Command } from \"@oclif/core\";\nimport { compile, savePacks, getPackageInfo } from \"../compiler/main\";\nimport { createLogger } from \"../compiler/util\";\nimport * as opts from \"../shared/basecmd\";\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport type * as winston from \"winston\";\nimport type { TemplatesAndLibs } from \"../compiler/compiler\";\n\nexport default class Build extends Command {\n static override description = \"build tengo sources into single distributable pack file\";\n\n static override examples = [\"<%= config.bin %> <%= command.id %>\"];\n\n static override flags = {\n ...opts.GlobalFlags,\n ...opts.CtagsFlags,\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(Build);\n const logger = createLogger(flags[\"log-level\"]);\n\n const packageInfo = getPackageInfo(process.cwd(), logger);\n const compiledDist = compile(logger, packageInfo, \"dist\");\n savePacks(logger, compiledDist, \"dist\");\n logger.info(\"Template Pack build done.\");\n\n // Building TS bindings for templates\n const { dts, cjs, mjs } = generateTsBinding(compiledDist);\n await fsp.writeFile(\"dist/index.d.ts\", dts);\n if (packageInfo.type === \"module\") {\n await fsp.writeFile(\"dist/index.cjs\", cjs);\n await fsp.writeFile(\"dist/index.js\", mjs);\n } else {\n await fsp.writeFile(\"dist/index.js\", cjs);\n await fsp.writeFile(\"dist/index.mjs\", mjs);\n }\n\n mergeTagsEnvs(flags);\n if (flags[\"generate-tags\"]) checkAndGenerateCtags(logger, flags);\n\n logger.info(\"Template Pack build done.\");\n }\n}\n\nfunction generateTsBinding(compiledDist: TemplatesAndLibs) {\n let dts = `declare type TemplateFromFile = { readonly type: \"from-file\"; readonly path: string; };\\n`;\n dts += `declare type TplName = ${compiledDist.templates\n .map((tpl) => '\"' + tpl.fullName.id + '\"')\n .join(\" | \")};\\n`;\n dts += `declare const Templates: Record<TplName, TemplateFromFile>;\\n`;\n dts += `export { Templates };\\n`;\n let cjs = `module.exports = { Templates: {\\n`;\n let mjs = `import { resolve } from 'node:path';\\nexport const Templates = {\\n`;\n const recordsCjs = compiledDist.templates\n .map(\n (tpl) =>\n ` '${tpl.fullName.id}': { type: 'from-file', path: require.resolve('./tengo/tpl/${tpl.fullName.id}.plj.gz') }`,\n )\n .join(\",\\n\");\n const recordsMjs = compiledDist.templates\n .map(\n (tpl) =>\n ` '${tpl.fullName.id}': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/${tpl.fullName.id}.plj.gz') }`,\n )\n .join(\",\\n\");\n cjs += recordsCjs;\n mjs += recordsMjs;\n cjs += `\\n}};\\n`;\n mjs += `\\n};\\n`;\n\n return { dts, cjs, mjs };\n}\n\nfunction mergeTagsEnvs(flags: {\n \"generate-tags\": boolean;\n \"tags-file\": string;\n \"tags-additional-args\": string[] | string;\n}) {\n if (process.env.GENERATE_TAGS != undefined) {\n flags[\"generate-tags\"] = process.env.GENERATE_TAGS == \"true\";\n }\n\n if (process.env.TAGS_FILE != undefined) {\n flags[\"tags-file\"] = process.env.TAGS_FILE;\n }\n\n if (process.env.TAGS_ADDITIONAL_ARGS != undefined) {\n flags[\"tags-additional-args\"] = process.env.TAGS_ADDITIONAL_ARGS.split(\",\");\n }\n}\n\nfunction checkAndGenerateCtags(\n logger: winston.Logger,\n flags: {\n \"tags-file\": string;\n \"tags-additional-args\": string[];\n },\n) {\n const fileName = path.resolve(flags[\"tags-file\"]);\n const rootDir = path.dirname(fileName);\n const additionalArgs = flags[\"tags-additional-args\"];\n\n // all tengo files in dirs and subdirs\n // If we don't limit the depth, it could become unbearably slow\n // and even OOM killed node js.\n // Increase the depth if you need to.\n const tengoFiles = toRelativePath(rootDir, getTengoFiles(rootDir, 9));\n\n logger.info(\n `Generating tags for tengo autocompletion from \"${rootDir}\" \\\nin \"${fileName}\", additional arguments: \"${additionalArgs.join('\" \"')}\".\nFound ${tengoFiles.length} tengo files...`,\n );\n\n // see https://docs.ctags.io/en/latest/man/ctags-optlib.7.html#perl-pod\n const result = spawnSync(\n \"ctags\",\n [\n \"-f\",\n fileName,\n ...additionalArgs,\n \"--langdef=tengo\",\n \"--map-tengo=+.tengo\",\n \"--kinddef-tengo=f,function,function\",\n \"--regex-tengo=/^\\\\s*(.*)(:| :=| =) ?func.*/\\\\1/f/\",\n \"--kinddef-tengo=c,constant,constant\",\n '--regex-tengo=/^\\\\s*(.*) := (\"|\\\\{).*/\\\\1/c/',\n \"-R\",\n ...tengoFiles,\n ],\n {\n env: process.env,\n stdio: \"inherit\",\n cwd: rootDir,\n },\n );\n\n if (result.error?.message.includes(\"ENOENT\")) {\n console.log(`\npl-tengo can create tags for tengo autocompletion,\nbut the program should be installed\nwith \"brew install universal-ctags\" on OSX\nor \"sudo apt install universal-ctags\" on Ubuntu.\n\nFor vscode, you should also install ctags extension:\nhttps://marketplace.visualstudio.com/items?itemName=jaydenlin.ctags-support`);\n\n return;\n }\n\n checkRunError(result, \"failed to generate ctags\");\n\n logger.info(\"Generation of tags is done.\");\n}\n\nfunction getTengoFiles(dir: string, depth: number): string[] {\n if (depth === 0) {\n return [];\n }\n\n const files = fs.readdirSync(dir, { withFileTypes: true });\n\n let tengoFiles: string[] = [];\n files.forEach((file) => {\n const absPath = path.join(dir, file.name);\n\n if (file.isDirectory()) {\n tengoFiles = tengoFiles.concat(getTengoFiles(absPath, depth - 1));\n }\n\n if (!file.isDirectory() && file.name.endsWith(\".tengo\")) {\n tengoFiles.push(absPath);\n }\n });\n\n return tengoFiles;\n}\n\nfunction toRelativePath(dir: string, files: string[]): string[] {\n // Note that VS Code extension likes only relatives paths to the root of the opened dir.\n return files.map((file) => file.replace(dir, \".\"));\n}\n\nfunction checkRunError(result: SpawnSyncReturns<Buffer>, message?: string) {\n if (result.error) {\n console.log(result.error);\n }\n\n const msg = message ?? \"failed to run command\";\n\n if (result.status !== 0) {\n console.log(`WARN: ${msg} the build will continue as-is`);\n }\n}\n"],"names":["Command","opts.GlobalFlags","opts.CtagsFlags","createLogger","getPackageInfo","compile","savePacks","fsp","path","spawnSync","fs"],"mappings":"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"}
|
package/dist/commands/build.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { Command } from
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
2
|
export default class Build extends Command {
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
"generate-tags": import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
"tags-file": import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
8
|
+
"tags-additional-args": import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
9
|
+
"log-level": import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
10
10
|
};
|
|
11
11
|
run(): Promise<void>;
|
|
12
12
|
}
|
package/dist/commands/build.js
CHANGED
|
@@ -8,51 +8,51 @@ import * as fsp from 'node:fs/promises';
|
|
|
8
8
|
import * as path from 'node:path';
|
|
9
9
|
|
|
10
10
|
class Build extends Command {
|
|
11
|
-
static description =
|
|
12
|
-
static examples = [
|
|
11
|
+
static description = "build tengo sources into single distributable pack file";
|
|
12
|
+
static examples = ["<%= config.bin %> <%= command.id %>"];
|
|
13
13
|
static flags = {
|
|
14
14
|
...GlobalFlags,
|
|
15
15
|
...CtagsFlags,
|
|
16
16
|
};
|
|
17
17
|
async run() {
|
|
18
18
|
const { flags } = await this.parse(Build);
|
|
19
|
-
const logger = createLogger(flags[
|
|
19
|
+
const logger = createLogger(flags["log-level"]);
|
|
20
20
|
const packageInfo = getPackageInfo(process.cwd(), logger);
|
|
21
|
-
const compiledDist = compile(logger, packageInfo,
|
|
22
|
-
savePacks(logger, compiledDist,
|
|
23
|
-
logger.info(
|
|
21
|
+
const compiledDist = compile(logger, packageInfo, "dist");
|
|
22
|
+
savePacks(logger, compiledDist, "dist");
|
|
23
|
+
logger.info("Template Pack build done.");
|
|
24
24
|
// Building TS bindings for templates
|
|
25
25
|
const { dts, cjs, mjs } = generateTsBinding(compiledDist);
|
|
26
|
-
await fsp.writeFile(
|
|
27
|
-
if (packageInfo.type ===
|
|
28
|
-
await fsp.writeFile(
|
|
29
|
-
await fsp.writeFile(
|
|
26
|
+
await fsp.writeFile("dist/index.d.ts", dts);
|
|
27
|
+
if (packageInfo.type === "module") {
|
|
28
|
+
await fsp.writeFile("dist/index.cjs", cjs);
|
|
29
|
+
await fsp.writeFile("dist/index.js", mjs);
|
|
30
30
|
}
|
|
31
31
|
else {
|
|
32
|
-
await fsp.writeFile(
|
|
33
|
-
await fsp.writeFile(
|
|
32
|
+
await fsp.writeFile("dist/index.js", cjs);
|
|
33
|
+
await fsp.writeFile("dist/index.mjs", mjs);
|
|
34
34
|
}
|
|
35
35
|
mergeTagsEnvs(flags);
|
|
36
|
-
if (flags[
|
|
36
|
+
if (flags["generate-tags"])
|
|
37
37
|
checkAndGenerateCtags(logger, flags);
|
|
38
|
-
logger.info(
|
|
38
|
+
logger.info("Template Pack build done.");
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
function generateTsBinding(compiledDist) {
|
|
42
42
|
let dts = `declare type TemplateFromFile = { readonly type: "from-file"; readonly path: string; };\n`;
|
|
43
43
|
dts += `declare type TplName = ${compiledDist.templates
|
|
44
44
|
.map((tpl) => '"' + tpl.fullName.id + '"')
|
|
45
|
-
.join(
|
|
45
|
+
.join(" | ")};\n`;
|
|
46
46
|
dts += `declare const Templates: Record<TplName, TemplateFromFile>;\n`;
|
|
47
47
|
dts += `export { Templates };\n`;
|
|
48
48
|
let cjs = `module.exports = { Templates: {\n`;
|
|
49
49
|
let mjs = `import { resolve } from 'node:path';\nexport const Templates = {\n`;
|
|
50
50
|
const recordsCjs = compiledDist.templates
|
|
51
51
|
.map((tpl) => ` '${tpl.fullName.id}': { type: 'from-file', path: require.resolve('./tengo/tpl/${tpl.fullName.id}.plj.gz') }`)
|
|
52
|
-
.join(
|
|
52
|
+
.join(",\n");
|
|
53
53
|
const recordsMjs = compiledDist.templates
|
|
54
54
|
.map((tpl) => ` '${tpl.fullName.id}': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/${tpl.fullName.id}.plj.gz') }`)
|
|
55
|
-
.join(
|
|
55
|
+
.join(",\n");
|
|
56
56
|
cjs += recordsCjs;
|
|
57
57
|
mjs += recordsMjs;
|
|
58
58
|
cjs += `\n}};\n`;
|
|
@@ -61,19 +61,19 @@ function generateTsBinding(compiledDist) {
|
|
|
61
61
|
}
|
|
62
62
|
function mergeTagsEnvs(flags) {
|
|
63
63
|
if (process.env.GENERATE_TAGS != undefined) {
|
|
64
|
-
flags[
|
|
64
|
+
flags["generate-tags"] = process.env.GENERATE_TAGS == "true";
|
|
65
65
|
}
|
|
66
66
|
if (process.env.TAGS_FILE != undefined) {
|
|
67
|
-
flags[
|
|
67
|
+
flags["tags-file"] = process.env.TAGS_FILE;
|
|
68
68
|
}
|
|
69
69
|
if (process.env.TAGS_ADDITIONAL_ARGS != undefined) {
|
|
70
|
-
flags[
|
|
70
|
+
flags["tags-additional-args"] = process.env.TAGS_ADDITIONAL_ARGS.split(",");
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
function checkAndGenerateCtags(logger, flags) {
|
|
74
|
-
const fileName = path.resolve(flags[
|
|
74
|
+
const fileName = path.resolve(flags["tags-file"]);
|
|
75
75
|
const rootDir = path.dirname(fileName);
|
|
76
|
-
const additionalArgs = flags[
|
|
76
|
+
const additionalArgs = flags["tags-additional-args"];
|
|
77
77
|
// all tengo files in dirs and subdirs
|
|
78
78
|
// If we don't limit the depth, it could become unbearably slow
|
|
79
79
|
// and even OOM killed node js.
|
|
@@ -83,24 +83,24 @@ function checkAndGenerateCtags(logger, flags) {
|
|
|
83
83
|
in "${fileName}", additional arguments: "${additionalArgs.join('" "')}".
|
|
84
84
|
Found ${tengoFiles.length} tengo files...`);
|
|
85
85
|
// see https://docs.ctags.io/en/latest/man/ctags-optlib.7.html#perl-pod
|
|
86
|
-
const result = spawnSync(
|
|
87
|
-
|
|
86
|
+
const result = spawnSync("ctags", [
|
|
87
|
+
"-f",
|
|
88
88
|
fileName,
|
|
89
89
|
...additionalArgs,
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
90
|
+
"--langdef=tengo",
|
|
91
|
+
"--map-tengo=+.tengo",
|
|
92
|
+
"--kinddef-tengo=f,function,function",
|
|
93
|
+
"--regex-tengo=/^\\s*(.*)(:| :=| =) ?func.*/\\1/f/",
|
|
94
|
+
"--kinddef-tengo=c,constant,constant",
|
|
95
95
|
'--regex-tengo=/^\\s*(.*) := ("|\\{).*/\\1/c/',
|
|
96
|
-
|
|
96
|
+
"-R",
|
|
97
97
|
...tengoFiles,
|
|
98
98
|
], {
|
|
99
99
|
env: process.env,
|
|
100
|
-
stdio:
|
|
100
|
+
stdio: "inherit",
|
|
101
101
|
cwd: rootDir,
|
|
102
102
|
});
|
|
103
|
-
if (result.error?.message.includes(
|
|
103
|
+
if (result.error?.message.includes("ENOENT")) {
|
|
104
104
|
console.log(`
|
|
105
105
|
pl-tengo can create tags for tengo autocompletion,
|
|
106
106
|
but the program should be installed
|
|
@@ -111,8 +111,8 @@ For vscode, you should also install ctags extension:
|
|
|
111
111
|
https://marketplace.visualstudio.com/items?itemName=jaydenlin.ctags-support`);
|
|
112
112
|
return;
|
|
113
113
|
}
|
|
114
|
-
checkRunError(result,
|
|
115
|
-
logger.info(
|
|
114
|
+
checkRunError(result, "failed to generate ctags");
|
|
115
|
+
logger.info("Generation of tags is done.");
|
|
116
116
|
}
|
|
117
117
|
function getTengoFiles(dir, depth) {
|
|
118
118
|
if (depth === 0) {
|
|
@@ -125,7 +125,7 @@ function getTengoFiles(dir, depth) {
|
|
|
125
125
|
if (file.isDirectory()) {
|
|
126
126
|
tengoFiles = tengoFiles.concat(getTengoFiles(absPath, depth - 1));
|
|
127
127
|
}
|
|
128
|
-
if (!file.isDirectory() && file.name.endsWith(
|
|
128
|
+
if (!file.isDirectory() && file.name.endsWith(".tengo")) {
|
|
129
129
|
tengoFiles.push(absPath);
|
|
130
130
|
}
|
|
131
131
|
});
|
|
@@ -133,7 +133,7 @@ function getTengoFiles(dir, depth) {
|
|
|
133
133
|
}
|
|
134
134
|
function toRelativePath(dir, files) {
|
|
135
135
|
// Note that VS Code extension likes only relatives paths to the root of the opened dir.
|
|
136
|
-
return files.map((file) => file.replace(dir,
|
|
136
|
+
return files.map((file) => file.replace(dir, "."));
|
|
137
137
|
}
|
|
138
138
|
function checkRunError(result, message) {
|
|
139
139
|
if (result.error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sources":["../../src/commands/build.ts"],"sourcesContent":["import type { SpawnSyncReturns } from 'node:child_process';\nimport { spawnSync } from 'node:child_process';\nimport { Command } from '@oclif/core';\nimport { compile, savePacks, getPackageInfo } from '../compiler/main';\nimport { createLogger } from '../compiler/util';\nimport * as opts from '../shared/basecmd';\nimport * as fs from 'node:fs';\nimport * as fsp from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type * as winston from 'winston';\nimport type { TemplatesAndLibs } from '../compiler/compiler';\n\nexport default class Build extends Command {\n static override description = 'build tengo sources into single distributable pack file';\n\n static override examples = ['<%= config.bin %> <%= command.id %>'];\n\n static override flags = {\n ...opts.GlobalFlags,\n ...opts.CtagsFlags,\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(Build);\n const logger = createLogger(flags['log-level']);\n\n const packageInfo = getPackageInfo(process.cwd(), logger);\n const compiledDist = compile(logger, packageInfo, 'dist');\n savePacks(logger, compiledDist, 'dist');\n logger.info('Template Pack build done.');\n\n // Building TS bindings for templates\n const { dts, cjs, mjs } = generateTsBinding(compiledDist);\n await fsp.writeFile('dist/index.d.ts', dts);\n if (packageInfo.type === 'module') {\n await fsp.writeFile('dist/index.cjs', cjs);\n await fsp.writeFile('dist/index.js', mjs);\n } else {\n await fsp.writeFile('dist/index.js', cjs);\n await fsp.writeFile('dist/index.mjs', mjs);\n }\n\n mergeTagsEnvs(flags);\n if (flags['generate-tags']) checkAndGenerateCtags(logger, flags);\n\n logger.info('Template Pack build done.');\n }\n}\n\nfunction generateTsBinding(compiledDist: TemplatesAndLibs) {\n let dts = `declare type TemplateFromFile = { readonly type: \"from-file\"; readonly path: string; };\\n`;\n dts += `declare type TplName = ${compiledDist.templates\n .map((tpl) => '\"' + tpl.fullName.id + '\"')\n .join(' | ')};\\n`;\n dts += `declare const Templates: Record<TplName, TemplateFromFile>;\\n`;\n dts += `export { Templates };\\n`;\n let cjs = `module.exports = { Templates: {\\n`;\n let mjs = `import { resolve } from 'node:path';\\nexport const Templates = {\\n`;\n const recordsCjs = compiledDist.templates\n .map(\n (tpl) => ` '${tpl.fullName.id}': { type: 'from-file', path: require.resolve('./tengo/tpl/${tpl.fullName.id}.plj.gz') }`,\n )\n .join(',\\n');\n const recordsMjs = compiledDist.templates\n .map(\n (tpl) => ` '${tpl.fullName.id}': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/${tpl.fullName.id}.plj.gz') }`,\n )\n .join(',\\n');\n cjs += recordsCjs;\n mjs += recordsMjs;\n cjs += `\\n}};\\n`;\n mjs += `\\n};\\n`;\n\n return { dts, cjs, mjs };\n}\n\nfunction mergeTagsEnvs(flags: {\n 'generate-tags': boolean;\n 'tags-file': string;\n 'tags-additional-args': string[] | string;\n}) {\n if (process.env.GENERATE_TAGS != undefined) {\n flags['generate-tags'] = process.env.GENERATE_TAGS == 'true';\n }\n\n if (process.env.TAGS_FILE != undefined) {\n flags['tags-file'] = process.env.TAGS_FILE;\n }\n\n if (process.env.TAGS_ADDITIONAL_ARGS != undefined) {\n flags['tags-additional-args'] = process.env.TAGS_ADDITIONAL_ARGS.split(',');\n }\n}\n\nfunction checkAndGenerateCtags(\n logger: winston.Logger,\n flags: {\n 'tags-file': string;\n 'tags-additional-args': string[];\n },\n) {\n const fileName = path.resolve(flags['tags-file']);\n const rootDir = path.dirname(fileName);\n const additionalArgs = flags['tags-additional-args'];\n\n // all tengo files in dirs and subdirs\n // If we don't limit the depth, it could become unbearably slow\n // and even OOM killed node js.\n // Increase the depth if you need to.\n const tengoFiles = toRelativePath(rootDir, getTengoFiles(rootDir, 9));\n\n logger.info(\n `Generating tags for tengo autocompletion from \"${rootDir}\" \\\nin \"${fileName}\", additional arguments: \"${additionalArgs.join('\" \"')}\".\nFound ${tengoFiles.length} tengo files...`,\n );\n\n // see https://docs.ctags.io/en/latest/man/ctags-optlib.7.html#perl-pod\n const result = spawnSync(\n 'ctags',\n [\n '-f',\n fileName,\n ...additionalArgs,\n '--langdef=tengo',\n '--map-tengo=+.tengo',\n '--kinddef-tengo=f,function,function',\n '--regex-tengo=/^\\\\s*(.*)(:| :=| =) ?func.*/\\\\1/f/',\n '--kinddef-tengo=c,constant,constant',\n '--regex-tengo=/^\\\\s*(.*) := (\"|\\\\{).*/\\\\1/c/',\n '-R',\n ...tengoFiles,\n ],\n {\n env: process.env,\n stdio: 'inherit',\n cwd: rootDir,\n },\n );\n\n if (result.error?.message.includes('ENOENT')) {\n console.log(`\npl-tengo can create tags for tengo autocompletion,\nbut the program should be installed\nwith \"brew install universal-ctags\" on OSX\nor \"sudo apt install universal-ctags\" on Ubuntu.\n\nFor vscode, you should also install ctags extension:\nhttps://marketplace.visualstudio.com/items?itemName=jaydenlin.ctags-support`);\n\n return;\n }\n\n checkRunError(result, 'failed to generate ctags');\n\n logger.info('Generation of tags is done.');\n}\n\nfunction getTengoFiles(dir: string, depth: number): string[] {\n if (depth === 0) {\n return [];\n }\n\n const files = fs.readdirSync(dir, { withFileTypes: true });\n\n let tengoFiles: string[] = [];\n files.forEach((file) => {\n const absPath = path.join(dir, file.name);\n\n if (file.isDirectory()) {\n tengoFiles = tengoFiles.concat(getTengoFiles(absPath, depth - 1));\n }\n\n if (!file.isDirectory() && file.name.endsWith('.tengo')) {\n tengoFiles.push(absPath);\n }\n });\n\n return tengoFiles;\n}\n\nfunction toRelativePath(dir: string, files: string[]): string[] {\n // Note that VS Code extension likes only relatives paths to the root of the opened dir.\n return files.map((file) => file.replace(dir, '.'));\n}\n\nfunction checkRunError(result: SpawnSyncReturns<Buffer>, message?: string) {\n if (result.error) {\n console.log(result.error);\n }\n\n const msg = message ?? 'failed to run command';\n\n if (result.status !== 0) {\n console.log(`WARN: ${msg} the build will continue as-is`);\n }\n}\n"],"names":["opts.GlobalFlags","opts.CtagsFlags"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"build.js","sources":["../../src/commands/build.ts"],"sourcesContent":["import type { SpawnSyncReturns } from \"node:child_process\";\nimport { spawnSync } from \"node:child_process\";\nimport { Command } from \"@oclif/core\";\nimport { compile, savePacks, getPackageInfo } from \"../compiler/main\";\nimport { createLogger } from \"../compiler/util\";\nimport * as opts from \"../shared/basecmd\";\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport type * as winston from \"winston\";\nimport type { TemplatesAndLibs } from \"../compiler/compiler\";\n\nexport default class Build extends Command {\n static override description = \"build tengo sources into single distributable pack file\";\n\n static override examples = [\"<%= config.bin %> <%= command.id %>\"];\n\n static override flags = {\n ...opts.GlobalFlags,\n ...opts.CtagsFlags,\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(Build);\n const logger = createLogger(flags[\"log-level\"]);\n\n const packageInfo = getPackageInfo(process.cwd(), logger);\n const compiledDist = compile(logger, packageInfo, \"dist\");\n savePacks(logger, compiledDist, \"dist\");\n logger.info(\"Template Pack build done.\");\n\n // Building TS bindings for templates\n const { dts, cjs, mjs } = generateTsBinding(compiledDist);\n await fsp.writeFile(\"dist/index.d.ts\", dts);\n if (packageInfo.type === \"module\") {\n await fsp.writeFile(\"dist/index.cjs\", cjs);\n await fsp.writeFile(\"dist/index.js\", mjs);\n } else {\n await fsp.writeFile(\"dist/index.js\", cjs);\n await fsp.writeFile(\"dist/index.mjs\", mjs);\n }\n\n mergeTagsEnvs(flags);\n if (flags[\"generate-tags\"]) checkAndGenerateCtags(logger, flags);\n\n logger.info(\"Template Pack build done.\");\n }\n}\n\nfunction generateTsBinding(compiledDist: TemplatesAndLibs) {\n let dts = `declare type TemplateFromFile = { readonly type: \"from-file\"; readonly path: string; };\\n`;\n dts += `declare type TplName = ${compiledDist.templates\n .map((tpl) => '\"' + tpl.fullName.id + '\"')\n .join(\" | \")};\\n`;\n dts += `declare const Templates: Record<TplName, TemplateFromFile>;\\n`;\n dts += `export { Templates };\\n`;\n let cjs = `module.exports = { Templates: {\\n`;\n let mjs = `import { resolve } from 'node:path';\\nexport const Templates = {\\n`;\n const recordsCjs = compiledDist.templates\n .map(\n (tpl) =>\n ` '${tpl.fullName.id}': { type: 'from-file', path: require.resolve('./tengo/tpl/${tpl.fullName.id}.plj.gz') }`,\n )\n .join(\",\\n\");\n const recordsMjs = compiledDist.templates\n .map(\n (tpl) =>\n ` '${tpl.fullName.id}': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/${tpl.fullName.id}.plj.gz') }`,\n )\n .join(\",\\n\");\n cjs += recordsCjs;\n mjs += recordsMjs;\n cjs += `\\n}};\\n`;\n mjs += `\\n};\\n`;\n\n return { dts, cjs, mjs };\n}\n\nfunction mergeTagsEnvs(flags: {\n \"generate-tags\": boolean;\n \"tags-file\": string;\n \"tags-additional-args\": string[] | string;\n}) {\n if (process.env.GENERATE_TAGS != undefined) {\n flags[\"generate-tags\"] = process.env.GENERATE_TAGS == \"true\";\n }\n\n if (process.env.TAGS_FILE != undefined) {\n flags[\"tags-file\"] = process.env.TAGS_FILE;\n }\n\n if (process.env.TAGS_ADDITIONAL_ARGS != undefined) {\n flags[\"tags-additional-args\"] = process.env.TAGS_ADDITIONAL_ARGS.split(\",\");\n }\n}\n\nfunction checkAndGenerateCtags(\n logger: winston.Logger,\n flags: {\n \"tags-file\": string;\n \"tags-additional-args\": string[];\n },\n) {\n const fileName = path.resolve(flags[\"tags-file\"]);\n const rootDir = path.dirname(fileName);\n const additionalArgs = flags[\"tags-additional-args\"];\n\n // all tengo files in dirs and subdirs\n // If we don't limit the depth, it could become unbearably slow\n // and even OOM killed node js.\n // Increase the depth if you need to.\n const tengoFiles = toRelativePath(rootDir, getTengoFiles(rootDir, 9));\n\n logger.info(\n `Generating tags for tengo autocompletion from \"${rootDir}\" \\\nin \"${fileName}\", additional arguments: \"${additionalArgs.join('\" \"')}\".\nFound ${tengoFiles.length} tengo files...`,\n );\n\n // see https://docs.ctags.io/en/latest/man/ctags-optlib.7.html#perl-pod\n const result = spawnSync(\n \"ctags\",\n [\n \"-f\",\n fileName,\n ...additionalArgs,\n \"--langdef=tengo\",\n \"--map-tengo=+.tengo\",\n \"--kinddef-tengo=f,function,function\",\n \"--regex-tengo=/^\\\\s*(.*)(:| :=| =) ?func.*/\\\\1/f/\",\n \"--kinddef-tengo=c,constant,constant\",\n '--regex-tengo=/^\\\\s*(.*) := (\"|\\\\{).*/\\\\1/c/',\n \"-R\",\n ...tengoFiles,\n ],\n {\n env: process.env,\n stdio: \"inherit\",\n cwd: rootDir,\n },\n );\n\n if (result.error?.message.includes(\"ENOENT\")) {\n console.log(`\npl-tengo can create tags for tengo autocompletion,\nbut the program should be installed\nwith \"brew install universal-ctags\" on OSX\nor \"sudo apt install universal-ctags\" on Ubuntu.\n\nFor vscode, you should also install ctags extension:\nhttps://marketplace.visualstudio.com/items?itemName=jaydenlin.ctags-support`);\n\n return;\n }\n\n checkRunError(result, \"failed to generate ctags\");\n\n logger.info(\"Generation of tags is done.\");\n}\n\nfunction getTengoFiles(dir: string, depth: number): string[] {\n if (depth === 0) {\n return [];\n }\n\n const files = fs.readdirSync(dir, { withFileTypes: true });\n\n let tengoFiles: string[] = [];\n files.forEach((file) => {\n const absPath = path.join(dir, file.name);\n\n if (file.isDirectory()) {\n tengoFiles = tengoFiles.concat(getTengoFiles(absPath, depth - 1));\n }\n\n if (!file.isDirectory() && file.name.endsWith(\".tengo\")) {\n tengoFiles.push(absPath);\n }\n });\n\n return tengoFiles;\n}\n\nfunction toRelativePath(dir: string, files: string[]): string[] {\n // Note that VS Code extension likes only relatives paths to the root of the opened dir.\n return files.map((file) => file.replace(dir, \".\"));\n}\n\nfunction checkRunError(result: SpawnSyncReturns<Buffer>, message?: string) {\n if (result.error) {\n console.log(result.error);\n }\n\n const msg = message ?? \"failed to run command\";\n\n if (result.status !== 0) {\n console.log(`WARN: ${msg} the build will continue as-is`);\n }\n}\n"],"names":["opts.GlobalFlags","opts.CtagsFlags"],"mappings":"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"}
|
package/dist/commands/check.cjs
CHANGED
|
@@ -8,18 +8,18 @@ var proc = require('../shared/proc.cjs');
|
|
|
8
8
|
var tengoTester = require('@milaboratories/tengo-tester');
|
|
9
9
|
|
|
10
10
|
class Check extends core.Command {
|
|
11
|
-
static description =
|
|
11
|
+
static description = "check tengo sources for language processor an";
|
|
12
12
|
// static override args = {
|
|
13
13
|
// "log-level": Args.string({description: 'logging level'}),
|
|
14
14
|
// }
|
|
15
15
|
static strict = false;
|
|
16
16
|
static flags = { ...basecmd.GlobalFlags };
|
|
17
|
-
static examples = [
|
|
17
|
+
static examples = ["<%= config.bin %> <%= command.id %>"];
|
|
18
18
|
async run() {
|
|
19
19
|
const { flags, argv } = await this.parse(Check);
|
|
20
|
-
const logger = util.createLogger(flags[
|
|
21
|
-
const testerArgs = argv.length == 0 ? [
|
|
22
|
-
const tester = proc.spawnEmbed(tengoTester.TengoTesterBinaryPath,
|
|
20
|
+
const logger = util.createLogger(flags["log-level"]);
|
|
21
|
+
const testerArgs = argv.length == 0 ? ["./src"] : argv;
|
|
22
|
+
const tester = proc.spawnEmbed(tengoTester.TengoTesterBinaryPath, "check", "--log-level", flags["log-level"], "--artifacts", "-", ...testerArgs);
|
|
23
23
|
try {
|
|
24
24
|
dump.dumpArtifacts(logger, tester.stdin);
|
|
25
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.cjs","sources":["../../src/commands/check.ts"],"sourcesContent":["import { Command } from
|
|
1
|
+
{"version":3,"file":"check.cjs","sources":["../../src/commands/check.ts"],"sourcesContent":["import { Command } from \"@oclif/core\";\nimport { createLogger } from \"../compiler/util\";\nimport { dumpArtifacts } from \"../shared/dump\";\nimport { GlobalFlags } from \"../shared/basecmd\";\nimport { spawnEmbed, waitFor } from \"../shared/proc\";\nimport { TengoTesterBinaryPath } from \"@milaboratories/tengo-tester\";\n\nexport default class Check extends Command {\n static override description = \"check tengo sources for language processor an\";\n\n // static override args = {\n // \"log-level\": Args.string({description: 'logging level'}),\n // }\n\n static strict = false;\n\n static override flags = { ...GlobalFlags };\n\n static override examples = [\"<%= config.bin %> <%= command.id %>\"];\n\n public async run(): Promise<void> {\n const { flags, argv } = await this.parse(Check);\n const logger = createLogger(flags[\"log-level\"]);\n\n const testerArgs: string[] = argv.length == 0 ? [\"./src\"] : (argv as string[]);\n\n const tester = spawnEmbed(\n TengoTesterBinaryPath,\n \"check\",\n \"--log-level\",\n flags[\"log-level\"],\n \"--artifacts\",\n \"-\",\n ...testerArgs,\n );\n\n try {\n dumpArtifacts(logger, tester.stdin);\n } catch (err: unknown) {\n logger.error(err);\n } finally {\n tester.stdin.end();\n const code = await waitFor(tester);\n process.exit(code);\n }\n }\n}\n"],"names":["Command","GlobalFlags","createLogger","spawnEmbed","TengoTesterBinaryPath","dumpArtifacts","waitFor"],"mappings":";;;;;;;;;AAOc,MAAO,KAAM,SAAQA,YAAO,CAAA;AACxC,IAAA,OAAgB,WAAW,GAAG,+CAA+C;;;;AAM7E,IAAA,OAAO,MAAM,GAAG,KAAK;AAErB,IAAA,OAAgB,KAAK,GAAG,EAAE,GAAGC,mBAAW,EAAE;AAE1C,IAAA,OAAgB,QAAQ,GAAG,CAAC,qCAAqC,CAAC;AAE3D,IAAA,MAAM,GAAG,GAAA;AACd,QAAA,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/C,MAAM,MAAM,GAAGC,iBAAY,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAE/C,QAAA,MAAM,UAAU,GAAa,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAI,IAAiB;QAE9E,MAAM,MAAM,GAAGC,eAAU,CACvBC,iCAAqB,EACrB,OAAO,EACP,aAAa,EACb,KAAK,CAAC,WAAW,CAAC,EAClB,aAAa,EACb,GAAG,EACH,GAAG,UAAU,CACd;AAED,QAAA,IAAI;AACF,YAAAC,kBAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;QACrC;QAAE,OAAO,GAAY,EAAE;AACrB,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QACnB;gBAAU;AACR,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;AAClB,YAAA,MAAM,IAAI,GAAG,MAAMC,YAAO,CAAC,MAAM,CAAC;AAClC,YAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACpB;IACF;;;;;"}
|
package/dist/commands/check.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Command } from
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
2
|
export default class Check extends Command {
|
|
3
3
|
static description: string;
|
|
4
4
|
static strict: boolean;
|
|
5
5
|
static flags: {
|
|
6
|
-
|
|
6
|
+
"log-level": import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
7
7
|
};
|
|
8
8
|
static examples: string[];
|
|
9
9
|
run(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAOtC,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,OAAgB,WAAW,SAAmD;IAM9E,MAAM,CAAC,MAAM,UAAS;IAEtB,OAAgB,KAAK;;MAAsB;IAE3C,OAAgB,QAAQ,WAA2C;IAEtD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAOtC,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,OAAgB,WAAW,SAAmD;IAM9E,MAAM,CAAC,MAAM,UAAS;IAEtB,OAAgB,KAAK;;MAAsB;IAE3C,OAAgB,QAAQ,WAA2C;IAEtD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA0BlC"}
|
package/dist/commands/check.js
CHANGED
|
@@ -6,18 +6,18 @@ import { spawnEmbed, waitFor } from '../shared/proc.js';
|
|
|
6
6
|
import { TengoTesterBinaryPath } from '@milaboratories/tengo-tester';
|
|
7
7
|
|
|
8
8
|
class Check extends Command {
|
|
9
|
-
static description =
|
|
9
|
+
static description = "check tengo sources for language processor an";
|
|
10
10
|
// static override args = {
|
|
11
11
|
// "log-level": Args.string({description: 'logging level'}),
|
|
12
12
|
// }
|
|
13
13
|
static strict = false;
|
|
14
14
|
static flags = { ...GlobalFlags };
|
|
15
|
-
static examples = [
|
|
15
|
+
static examples = ["<%= config.bin %> <%= command.id %>"];
|
|
16
16
|
async run() {
|
|
17
17
|
const { flags, argv } = await this.parse(Check);
|
|
18
|
-
const logger = createLogger(flags[
|
|
19
|
-
const testerArgs = argv.length == 0 ? [
|
|
20
|
-
const tester = spawnEmbed(TengoTesterBinaryPath,
|
|
18
|
+
const logger = createLogger(flags["log-level"]);
|
|
19
|
+
const testerArgs = argv.length == 0 ? ["./src"] : argv;
|
|
20
|
+
const tester = spawnEmbed(TengoTesterBinaryPath, "check", "--log-level", flags["log-level"], "--artifacts", "-", ...testerArgs);
|
|
21
21
|
try {
|
|
22
22
|
dumpArtifacts(logger, tester.stdin);
|
|
23
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sources":["../../src/commands/check.ts"],"sourcesContent":["import { Command } from
|
|
1
|
+
{"version":3,"file":"check.js","sources":["../../src/commands/check.ts"],"sourcesContent":["import { Command } from \"@oclif/core\";\nimport { createLogger } from \"../compiler/util\";\nimport { dumpArtifacts } from \"../shared/dump\";\nimport { GlobalFlags } from \"../shared/basecmd\";\nimport { spawnEmbed, waitFor } from \"../shared/proc\";\nimport { TengoTesterBinaryPath } from \"@milaboratories/tengo-tester\";\n\nexport default class Check extends Command {\n static override description = \"check tengo sources for language processor an\";\n\n // static override args = {\n // \"log-level\": Args.string({description: 'logging level'}),\n // }\n\n static strict = false;\n\n static override flags = { ...GlobalFlags };\n\n static override examples = [\"<%= config.bin %> <%= command.id %>\"];\n\n public async run(): Promise<void> {\n const { flags, argv } = await this.parse(Check);\n const logger = createLogger(flags[\"log-level\"]);\n\n const testerArgs: string[] = argv.length == 0 ? [\"./src\"] : (argv as string[]);\n\n const tester = spawnEmbed(\n TengoTesterBinaryPath,\n \"check\",\n \"--log-level\",\n flags[\"log-level\"],\n \"--artifacts\",\n \"-\",\n ...testerArgs,\n );\n\n try {\n dumpArtifacts(logger, tester.stdin);\n } catch (err: unknown) {\n logger.error(err);\n } finally {\n tester.stdin.end();\n const code = await waitFor(tester);\n process.exit(code);\n }\n }\n}\n"],"names":[],"mappings":";;;;;;;AAOc,MAAO,KAAM,SAAQ,OAAO,CAAA;AACxC,IAAA,OAAgB,WAAW,GAAG,+CAA+C;;;;AAM7E,IAAA,OAAO,MAAM,GAAG,KAAK;AAErB,IAAA,OAAgB,KAAK,GAAG,EAAE,GAAG,WAAW,EAAE;AAE1C,IAAA,OAAgB,QAAQ,GAAG,CAAC,qCAAqC,CAAC;AAE3D,IAAA,MAAM,GAAG,GAAA;AACd,QAAA,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAE/C,QAAA,MAAM,UAAU,GAAa,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAI,IAAiB;QAE9E,MAAM,MAAM,GAAG,UAAU,CACvB,qBAAqB,EACrB,OAAO,EACP,aAAa,EACb,KAAK,CAAC,WAAW,CAAC,EAClB,aAAa,EACb,GAAG,EACH,GAAG,UAAU,CACd;AAED,QAAA,IAAI;AACF,YAAA,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;QACrC;QAAE,OAAO,GAAY,EAAE;AACrB,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QACnB;gBAAU;AACR,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;AAClB,YAAA,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC;AAClC,YAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACpB;IACF;;;;;"}
|