@platforma-sdk/tengo-builder 2.4.14 → 2.4.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/README.md +4 -4
  2. package/bin/run.js +5 -5
  3. package/dist/commands/build.cjs +36 -36
  4. package/dist/commands/build.cjs.map +1 -1
  5. package/dist/commands/build.d.ts +5 -5
  6. package/dist/commands/build.js +36 -36
  7. package/dist/commands/build.js.map +1 -1
  8. package/dist/commands/check.cjs +5 -5
  9. package/dist/commands/check.cjs.map +1 -1
  10. package/dist/commands/check.d.ts +2 -2
  11. package/dist/commands/check.d.ts.map +1 -1
  12. package/dist/commands/check.js +5 -5
  13. package/dist/commands/check.js.map +1 -1
  14. package/dist/commands/dump/artifacts.cjs +4 -6
  15. package/dist/commands/dump/artifacts.cjs.map +1 -1
  16. package/dist/commands/dump/artifacts.d.ts +2 -2
  17. package/dist/commands/dump/artifacts.d.ts.map +1 -1
  18. package/dist/commands/dump/artifacts.js +4 -6
  19. package/dist/commands/dump/artifacts.js.map +1 -1
  20. package/dist/commands/dump/software.cjs +3 -5
  21. package/dist/commands/dump/software.cjs.map +1 -1
  22. package/dist/commands/dump/software.d.ts +2 -2
  23. package/dist/commands/dump/software.d.ts.map +1 -1
  24. package/dist/commands/dump/software.js +3 -5
  25. package/dist/commands/dump/software.js.map +1 -1
  26. package/dist/commands/test.cjs +5 -5
  27. package/dist/commands/test.cjs.map +1 -1
  28. package/dist/commands/test.d.ts +2 -2
  29. package/dist/commands/test.d.ts.map +1 -1
  30. package/dist/commands/test.js +5 -5
  31. package/dist/commands/test.js.map +1 -1
  32. package/dist/compiler/artifactset.cjs +2 -2
  33. package/dist/compiler/artifactset.cjs.map +1 -1
  34. package/dist/compiler/artifactset.d.ts +1 -1
  35. package/dist/compiler/artifactset.d.ts.map +1 -1
  36. package/dist/compiler/artifactset.js +2 -2
  37. package/dist/compiler/artifactset.js.map +1 -1
  38. package/dist/compiler/compiler.cjs +37 -34
  39. package/dist/compiler/compiler.cjs.map +1 -1
  40. package/dist/compiler/compiler.d.ts +3 -3
  41. package/dist/compiler/compiler.d.ts.map +1 -1
  42. package/dist/compiler/compiler.js +37 -34
  43. package/dist/compiler/compiler.js.map +1 -1
  44. package/dist/compiler/compileroptions.cjs +12 -12
  45. package/dist/compiler/compileroptions.cjs.map +1 -1
  46. package/dist/compiler/compileroptions.d.ts +2 -2
  47. package/dist/compiler/compileroptions.js +12 -12
  48. package/dist/compiler/compileroptions.js.map +1 -1
  49. package/dist/compiler/main.cjs +58 -58
  50. package/dist/compiler/main.cjs.map +1 -1
  51. package/dist/compiler/main.d.ts +6 -6
  52. package/dist/compiler/main.d.ts.map +1 -1
  53. package/dist/compiler/main.js +58 -58
  54. package/dist/compiler/main.js.map +1 -1
  55. package/dist/compiler/package.cjs +5 -2
  56. package/dist/compiler/package.cjs.map +1 -1
  57. package/dist/compiler/package.d.ts +6 -6
  58. package/dist/compiler/package.d.ts.map +1 -1
  59. package/dist/compiler/package.js +5 -2
  60. package/dist/compiler/package.js.map +1 -1
  61. package/dist/compiler/source.cjs +50 -52
  62. package/dist/compiler/source.cjs.map +1 -1
  63. package/dist/compiler/source.d.ts +2 -2
  64. package/dist/compiler/source.d.ts.map +1 -1
  65. package/dist/compiler/source.js +50 -52
  66. package/dist/compiler/source.js.map +1 -1
  67. package/dist/compiler/template.cjs +7 -7
  68. package/dist/compiler/template.cjs.map +1 -1
  69. package/dist/compiler/template.d.ts +2 -2
  70. package/dist/compiler/template.d.ts.map +1 -1
  71. package/dist/compiler/template.js +7 -7
  72. package/dist/compiler/template.js.map +1 -1
  73. package/dist/compiler/test.artifacts.d.ts +1 -1
  74. package/dist/compiler/test.artifacts.d.ts.map +1 -1
  75. package/dist/compiler/util.cjs +12 -12
  76. package/dist/compiler/util.cjs.map +1 -1
  77. package/dist/compiler/util.d.ts +2 -2
  78. package/dist/compiler/util.js +12 -12
  79. package/dist/compiler/util.js.map +1 -1
  80. package/dist/index.cjs +5 -5
  81. package/dist/index.cjs.map +1 -1
  82. package/dist/index.d.ts +7 -7
  83. package/dist/index.js +5 -5
  84. package/dist/index.js.map +1 -1
  85. package/dist/shared/basecmd.cjs +15 -15
  86. package/dist/shared/basecmd.cjs.map +1 -1
  87. package/dist/shared/basecmd.d.ts +4 -4
  88. package/dist/shared/basecmd.js +15 -15
  89. package/dist/shared/basecmd.js.map +1 -1
  90. package/dist/shared/dump.cjs +28 -28
  91. package/dist/shared/dump.cjs.map +1 -1
  92. package/dist/shared/dump.d.ts +2 -2
  93. package/dist/shared/dump.d.ts.map +1 -1
  94. package/dist/shared/dump.js +28 -28
  95. package/dist/shared/dump.js.map +1 -1
  96. package/dist/shared/proc.cjs +5 -5
  97. package/dist/shared/proc.cjs.map +1 -1
  98. package/dist/shared/proc.d.ts +2 -2
  99. package/dist/shared/proc.js +5 -5
  100. package/dist/shared/proc.js.map +1 -1
  101. package/package.json +23 -21
  102. package/src/commands/build.ts +57 -55
  103. package/src/commands/check.ts +15 -12
  104. package/src/commands/dump/artifacts.ts +11 -15
  105. package/src/commands/dump/software.ts +9 -10
  106. package/src/commands/test.ts +15 -12
  107. package/src/compiler/artifactset.ts +7 -9
  108. package/src/compiler/compiler.test.ts +134 -137
  109. package/src/compiler/compiler.ts +62 -62
  110. package/src/compiler/compileroptions.ts +15 -15
  111. package/src/compiler/main.test.ts +23 -23
  112. package/src/compiler/main.ts +83 -100
  113. package/src/compiler/package.ts +14 -12
  114. package/src/compiler/source.test.ts +191 -183
  115. package/src/compiler/source.ts +106 -79
  116. package/src/compiler/template.test.ts +50 -49
  117. package/src/compiler/template.ts +11 -21
  118. package/src/compiler/test.artifacts.ts +47 -47
  119. package/src/compiler/util.ts +17 -17
  120. package/src/index.ts +10 -10
  121. package/src/shared/basecmd.ts +16 -16
  122. package/src/shared/dump.ts +49 -70
  123. 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 'node:path';
4
- import { fileURLToPath } from 'node:url';
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('@oclif/core')
12
- await oclif.execute({dir: __dirname})
13
- })()
11
+ const oclif = await import("@oclif/core");
12
+ await oclif.execute({ dir: __dirname });
13
+ })();
@@ -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 = 'build tengo sources into single distributable pack file';
35
- static examples = ['<%= config.bin %> <%= command.id %>'];
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['log-level']);
42
+ const logger = util.createLogger(flags["log-level"]);
43
43
  const packageInfo = main.getPackageInfo(process.cwd(), logger);
44
- const compiledDist = main.compile(logger, packageInfo, 'dist');
45
- main.savePacks(logger, compiledDist, 'dist');
46
- logger.info('Template Pack build done.');
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('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);
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('dist/index.js', cjs);
56
- await fsp__namespace.writeFile('dist/index.mjs', mjs);
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['generate-tags'])
59
+ if (flags["generate-tags"])
60
60
  checkAndGenerateCtags(logger, flags);
61
- logger.info('Template Pack build done.');
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(' | ')};\n`;
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(',\n');
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(',\n');
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['generate-tags'] = process.env.GENERATE_TAGS == 'true';
87
+ flags["generate-tags"] = process.env.GENERATE_TAGS == "true";
88
88
  }
89
89
  if (process.env.TAGS_FILE != undefined) {
90
- flags['tags-file'] = process.env.TAGS_FILE;
90
+ flags["tags-file"] = process.env.TAGS_FILE;
91
91
  }
92
92
  if (process.env.TAGS_ADDITIONAL_ARGS != undefined) {
93
- flags['tags-additional-args'] = process.env.TAGS_ADDITIONAL_ARGS.split(',');
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['tags-file']);
97
+ const fileName = path__namespace.resolve(flags["tags-file"]);
98
98
  const rootDir = path__namespace.dirname(fileName);
99
- const additionalArgs = flags['tags-additional-args'];
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('ctags', [
110
- '-f',
109
+ const result = node_child_process.spawnSync("ctags", [
110
+ "-f",
111
111
  fileName,
112
112
  ...additionalArgs,
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',
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
- '-R',
119
+ "-R",
120
120
  ...tengoFiles,
121
121
  ], {
122
122
  env: process.env,
123
- stdio: 'inherit',
123
+ stdio: "inherit",
124
124
  cwd: rootDir,
125
125
  });
126
- if (result.error?.message.includes('ENOENT')) {
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, 'failed to generate ctags');
138
- logger.info('Generation of tags is done.');
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('.tengo')) {
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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"}
@@ -1,12 +1,12 @@
1
- import { Command } from '@oclif/core';
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
- '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>;
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
  }
@@ -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 = 'build tengo sources into single distributable pack file';
12
- static examples = ['<%= config.bin %> <%= command.id %>'];
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['log-level']);
19
+ const logger = createLogger(flags["log-level"]);
20
20
  const packageInfo = getPackageInfo(process.cwd(), logger);
21
- const compiledDist = compile(logger, packageInfo, 'dist');
22
- savePacks(logger, compiledDist, 'dist');
23
- logger.info('Template Pack build done.');
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('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);
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('dist/index.js', cjs);
33
- await fsp.writeFile('dist/index.mjs', mjs);
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['generate-tags'])
36
+ if (flags["generate-tags"])
37
37
  checkAndGenerateCtags(logger, flags);
38
- logger.info('Template Pack build done.');
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(' | ')};\n`;
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(',\n');
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(',\n');
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['generate-tags'] = process.env.GENERATE_TAGS == 'true';
64
+ flags["generate-tags"] = process.env.GENERATE_TAGS == "true";
65
65
  }
66
66
  if (process.env.TAGS_FILE != undefined) {
67
- flags['tags-file'] = process.env.TAGS_FILE;
67
+ flags["tags-file"] = process.env.TAGS_FILE;
68
68
  }
69
69
  if (process.env.TAGS_ADDITIONAL_ARGS != undefined) {
70
- flags['tags-additional-args'] = process.env.TAGS_ADDITIONAL_ARGS.split(',');
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['tags-file']);
74
+ const fileName = path.resolve(flags["tags-file"]);
75
75
  const rootDir = path.dirname(fileName);
76
- const additionalArgs = flags['tags-additional-args'];
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('ctags', [
87
- '-f',
86
+ const result = spawnSync("ctags", [
87
+ "-f",
88
88
  fileName,
89
89
  ...additionalArgs,
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',
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
- '-R',
96
+ "-R",
97
97
  ...tengoFiles,
98
98
  ], {
99
99
  env: process.env,
100
- stdio: 'inherit',
100
+ stdio: "inherit",
101
101
  cwd: rootDir,
102
102
  });
103
- if (result.error?.message.includes('ENOENT')) {
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, 'failed to generate ctags');
115
- logger.info('Generation of tags is done.');
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('.tengo')) {
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":";;;;;;;;;AAYc,MAAO,KAAM,SAAQ,OAAO,CAAA;AACxC,IAAA,OAAgB,WAAW,GAAG,yDAAyD;AAEvF,IAAA,OAAgB,QAAQ,GAAG,CAAC,qCAAqC,CAAC;IAElE,OAAgB,KAAK,GAAG;QACtB,GAAGA,WAAgB;QACnB,GAAGC,UAAe;KACnB;AAEM,IAAA,MAAM,GAAG,GAAA;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACzC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAE/C,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC;QACzD,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC;AACzD,QAAA,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC;AACvC,QAAA,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC;;AAGxC,QAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,iBAAiB,CAAC,YAAY,CAAC;QACzD,MAAM,GAAG,CAAC,SAAS,CAAC,iBAAiB,EAAE,GAAG,CAAC;AAC3C,QAAA,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE;YACjC,MAAM,GAAG,CAAC,SAAS,CAAC,gBAAgB,EAAE,GAAG,CAAC;YAC1C,MAAM,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,GAAG,CAAC;QAC3C;aAAO;YACL,MAAM,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,GAAG,CAAC;YACzC,MAAM,GAAG,CAAC,SAAS,CAAC,gBAAgB,EAAE,GAAG,CAAC;QAC5C;QAEA,aAAa,CAAC,KAAK,CAAC;QACpB,IAAI,KAAK,CAAC,eAAe,CAAC;AAAE,YAAA,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC;AAEhE,QAAA,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC;IAC1C;;AAGF,SAAS,iBAAiB,CAAC,YAA8B,EAAA;IACvD,IAAI,GAAG,GAAG,CAAA,yFAAA,CAA2F;AACrG,IAAA,GAAG,IAAI,CAAA,uBAAA,EAA0B,YAAY,CAAC;AAC3C,SAAA,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG;AACxC,SAAA,IAAI,CAAC,KAAK,CAAC,CAAA,GAAA,CAAK;IACnB,GAAG,IAAI,+DAA+D;IACtE,GAAG,IAAI,yBAAyB;IAChC,IAAI,GAAG,GAAG,CAAA,iCAAA,CAAmC;IAC7C,IAAI,GAAG,GAAG,CAAA,kEAAA,CAAoE;AAC9E,IAAA,MAAM,UAAU,GAAG,YAAY,CAAC;AAC7B,SAAA,GAAG,CACF,CAAC,GAAG,KACF,MAAM,GAAG,CAAC,QAAQ,CAAC,EAAE,8DAA8D,GAAG,CAAC,QAAQ,CAAC,EAAE,aAAa;SAElH,IAAI,CAAC,KAAK,CAAC;AACd,IAAA,MAAM,UAAU,GAAG,YAAY,CAAC;AAC7B,SAAA,GAAG,CACF,CAAC,GAAG,KACF,MAAM,GAAG,CAAC,QAAQ,CAAC,EAAE,2EAA2E,GAAG,CAAC,QAAQ,CAAC,EAAE,aAAa;SAE/H,IAAI,CAAC,KAAK,CAAC;IACd,GAAG,IAAI,UAAU;IACjB,GAAG,IAAI,UAAU;IACjB,GAAG,IAAI,SAAS;IAChB,GAAG,IAAI,QAAQ;AAEf,IAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAC1B;AAEA,SAAS,aAAa,CAAC,KAItB,EAAA;IACC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,SAAS,EAAE;QAC1C,KAAK,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,MAAM;IAC9D;IAEA,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,SAAS,EAAE;QACtC,KAAK,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS;IAC5C;IAEA,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,SAAS,EAAE;AACjD,QAAA,KAAK,CAAC,sBAAsB,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC;IAC7E;AACF;AAEA,SAAS,qBAAqB,CAC5B,MAAsB,EACtB,KAGC,EAAA;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AACtC,IAAA,MAAM,cAAc,GAAG,KAAK,CAAC,sBAAsB,CAAC;;;;;AAMpD,IAAA,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAErE,IAAA,MAAM,CAAC,IAAI,CACT,CAAA,+CAAA,EAAkD,OAAO,CAAA;AACvD,IAAA,EAAA,QAAQ,6BAA6B,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC7D,MAAA,EAAA,UAAU,CAAC,MAAM,CAAA,eAAA,CAAiB,CACvC;;AAGD,IAAA,MAAM,MAAM,GAAG,SAAS,CACtB,OAAO,EACP;QACE,IAAI;QACJ,QAAQ;AACR,QAAA,GAAG,cAAc;QACjB,iBAAiB;QACjB,qBAAqB;QACrB,qCAAqC;QACrC,mDAAmD;QACnD,qCAAqC;QACrC,8CAA8C;QAC9C,IAAI;AACJ,QAAA,GAAG,UAAU;KACd,EACD;QACE,GAAG,EAAE,OAAO,CAAC,GAAG;AAChB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,GAAG,EAAE,OAAO;AACb,KAAA,CACF;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAC5C,OAAO,CAAC,GAAG,CAAC;;;;;;;AAO4D,2EAAA,CAAA,CAAC;QAEzE;IACF;AAEA,IAAA,aAAa,CAAC,MAAM,EAAE,0BAA0B,CAAC;AAEjD,IAAA,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC;AAC5C;AAEA,SAAS,aAAa,CAAC,GAAW,EAAE,KAAa,EAAA;AAC/C,IAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACf,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAE1D,IAAI,UAAU,GAAa,EAAE;AAC7B,IAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;AAEzC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACtB,YAAA,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACnE;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACvD,YAAA,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;QAC1B;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,UAAU;AACnB;AAEA,SAAS,cAAc,CAAC,GAAW,EAAE,KAAe,EAAA;;AAElD,IAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpD;AAEA,SAAS,aAAa,CAAC,MAAgC,EAAE,OAAgB,EAAA;AACvE,IAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,QAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;IAC3B;AAEA,IAAA,MAAM,GAAG,GAAG,OAAkC;AAE9C,IAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,QAAA,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,CAAA,8BAAA,CAAgC,CAAC;IAC3D;AACF;;;;"}
@@ -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 = 'check tengo sources for language processor an';
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 = ['<%= config.bin %> <%= command.id %>'];
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['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);
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 '@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', '--log-level', flags['log-level'],\n '--artifacts', '-',\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,EAAE,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,EAC1C,aAAa,EAAE,GAAG,EAClB,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;;;;;"}
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;;;;;"}
@@ -1,9 +1,9 @@
1
- import { Command } from '@oclif/core';
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
- 'log-level': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
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;CAuBlC"}
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"}
@@ -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 = 'check tengo sources for language processor an';
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 = ['<%= config.bin %> <%= command.id %>'];
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['log-level']);
19
- const testerArgs = argv.length == 0 ? ['./src'] : argv;
20
- const tester = spawnEmbed(TengoTesterBinaryPath, 'check', '--log-level', flags['log-level'], '--artifacts', '-', ...testerArgs);
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 '@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', '--log-level', flags['log-level'],\n '--artifacts', '-',\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,EAAE,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,EAC1C,aAAa,EAAE,GAAG,EAClB,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;;;;;"}
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;;;;;"}