@platforma-sdk/tengo-builder 1.14.13 → 1.15.1

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.
@@ -0,0 +1,7 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class DumpAssets extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../../src/commands/dump/assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAKrC,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,OAAgB,WAAW,SAAwE;IAEnG,OAAgB,QAAQ,WAEvB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAIlC"}
@@ -5,12 +5,14 @@ export interface TemplatesAndLibs {
5
5
  templates: Template[];
6
6
  libs: ArtifactSource[];
7
7
  software: ArtifactSource[];
8
+ assets: ArtifactSource[];
8
9
  }
9
10
  export declare class TengoTemplateCompiler {
10
11
  private readonly compileMode;
11
12
  constructor(compileMode: CompileMode);
12
13
  private readonly libs;
13
14
  private readonly software;
15
+ private readonly assets;
14
16
  private readonly templates;
15
17
  private populateTemplateDataFromDependencies;
16
18
  /** This method assumes that all dependencies are already added to the compiler's context */
@@ -23,6 +25,10 @@ export declare class TengoTemplateCompiler {
23
25
  allSoftware(): ArtifactSource[];
24
26
  getSoftware(name: TypedArtifactName): ArtifactSource | undefined;
25
27
  getSoftwareOrError(name: TypedArtifactName): ArtifactSource;
28
+ addAsset(asset: ArtifactSource): void;
29
+ allAssets(): ArtifactSource[];
30
+ getAsset(name: TypedArtifactName): ArtifactSource | undefined;
31
+ getAssetOrError(name: TypedArtifactName): ArtifactSource;
26
32
  addTemplate(tpl: Template): void;
27
33
  allTemplates(): Template[];
28
34
  getTemplate(name: TypedArtifactName): Template | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/compiler/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAC;AACpD,OAAO,EACL,iBAAiB,EAMjB,WAAW,EACZ,MAAM,WAAW,CAAC;AAInB,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,QAAQ,EAAE,cAAc,EAAE,CAAA;CAC3B;AAED,qBAAa,qBAAqB;IAE9B,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAG3C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0D;IAC/E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0D;IACnF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoD;IAE9E,OAAO,CAAC,oCAAoC;IAkD5C,4FAA4F;IAC5F,OAAO,CAAC,qBAAqB;IAsB7B,MAAM,CAAC,GAAG,EAAE,cAAc;IAQ1B,OAAO,IAAI,cAAc,EAAE;IAI3B,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc,GAAG,SAAS;IAM3D,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc;IAOtD,WAAW,CAAC,QAAQ,EAAE,cAAc;IAQpC,WAAW,IAAI,cAAc,EAAE;IAI/B,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc,GAAG,SAAS;IAOhE,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc;IAO3D,WAAW,CAAC,GAAG,EAAE,QAAQ;IAQzB,YAAY,IAAI,QAAQ,EAAE;IAI1B,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,QAAQ,GAAG,SAAS;IAM1D,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,GAAG,QAAQ;IAOrD,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS;IAiB3E,SAAS;IAYT,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,gBAAgB;CA4F3D"}
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/compiler/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAC;AACpD,OAAO,EACL,iBAAiB,EAMjB,WAAW,EACZ,MAAM,WAAW,CAAC;AAInB,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,MAAM,EAAE,cAAc,EAAE,CAAA;CACzB;AAED,qBAAa,qBAAqB;IAE9B,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAG3C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0D;IAC/E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0D;IACnF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0D;IACjF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoD;IAE9E,OAAO,CAAC,oCAAoC;IA4D5C,4FAA4F;IAC5F,OAAO,CAAC,qBAAqB;IAuB7B,MAAM,CAAC,GAAG,EAAE,cAAc;IAQ1B,OAAO,IAAI,cAAc,EAAE;IAI3B,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc,GAAG,SAAS;IAM3D,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc;IAOtD,WAAW,CAAC,QAAQ,EAAE,cAAc;IAQpC,WAAW,IAAI,cAAc,EAAE;IAI/B,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc,GAAG,SAAS;IAOhE,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc;IAO3D,QAAQ,CAAC,KAAK,EAAE,cAAc;IAQ9B,SAAS,IAAI,cAAc,EAAE;IAI7B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc,GAAG,SAAS;IAO7D,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc;IAOxD,WAAW,CAAC,GAAG,EAAE,QAAQ;IAQzB,YAAY,IAAI,QAAQ,EAAE;IAI1B,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,QAAQ,GAAG,SAAS;IAM1D,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,GAAG,QAAQ;IAOrD,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS;IAmB3E,SAAS;IAYT,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,gBAAgB;CAqG3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/compiler/main.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAEL,WAAW,EAIZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,cAAc,EAAmB,MAAM,UAAU,CAAC;AAE3D,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAgBD,wBAAgB,YAAY,CAAC,KAAK,GAAE,MAAgB,GAAG,OAAO,CAAC,MAAM,CAapE;AAED,wBAAgB,cAAc,IAAI,WAAW,CAG5C;AAqJD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,cAAc,EAAE,CAwClB;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,WAAW,GAChB,qBAAqB,CAOvB;AA0CD,wBAAgB,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,gBAAgB,CAsBnF;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,QAiC9F"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/compiler/main.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAEL,WAAW,EAIZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,cAAc,EAAmB,MAAM,UAAU,CAAC;AAE3D,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAkBD,wBAAgB,YAAY,CAAC,KAAK,GAAE,MAAgB,GAAG,OAAO,CAAC,MAAM,CAapE;AAED,wBAAgB,cAAc,IAAI,WAAW,CAG5C;AAwLD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,cAAc,EAAE,CAwClB;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,WAAW,GAChB,qBAAqB,CAOvB;AAkDD,wBAAgB,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,gBAAgB,CAsBnF;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,QA4C9F"}
@@ -1,5 +1,5 @@
1
1
  export type CompileMode = 'dist';
2
- export type ArtifactType = 'library' | 'template' | 'test' | 'software';
2
+ export type ArtifactType = 'library' | 'template' | 'test' | 'software' | 'asset';
3
3
  /** Artifact Name including package version */
4
4
  export interface FullArtifactName {
5
5
  /** Dependency type */
@@ -1 +1 @@
1
- {"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../src/compiler/package.ts"],"names":[],"mappings":"AAsBA,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAEhC,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAAA;AAEvE,8CAA8C;AAC9C,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB;IACtB,IAAI,EAAE,YAAY,CAAC;IAEnB,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IAEZ,4CAA4C;IAC5C,EAAE,EAAE,MAAM,CAAC;IAEX,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,2BAA2B,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAEzE,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;AAE9E,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE,KAAK,GAAG,SAAS,CAAC,CAAC;AAEpE,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;AAEhE,wBAAgB,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAE3D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAE/D;AAED,0BAA0B;AAC1B,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAEzE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAEpG;AAGD,iEAAiE;AACjE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAE/D;AAED,6EAA6E;AAC7E,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAEtG;AAED,6EAA6E;AAC7E,wBAAgB,2BAA2B,CAAC,cAAc,EAAE;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAA;CAChB,GAAG,2BAA2B,CAK9B;AAGD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,2BAA2B,GAAG,MAAM,CAErF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,2BAA2B,CAEvF"}
1
+ {"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../src/compiler/package.ts"],"names":[],"mappings":"AAsBA,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAEhC,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAAA;AAEjF,8CAA8C;AAC9C,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB;IACtB,IAAI,EAAE,YAAY,CAAC;IAEnB,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IAEZ,4CAA4C;IAC5C,EAAE,EAAE,MAAM,CAAC;IAEX,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,2BAA2B,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAEzE,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;AAE9E,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE,KAAK,GAAG,SAAS,CAAC,CAAC;AAEpE,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;AAEhE,wBAAgB,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAE3D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAE/D;AAED,0BAA0B;AAC1B,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAEzE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAEpG;AAGD,iEAAiE;AACjE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAE/D;AAED,6EAA6E;AAC7E,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAEtG;AAED,6EAA6E;AAC7E,wBAAgB,2BAA2B,CAAC,cAAc,EAAE;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAA;CAChB,GAAG,2BAA2B,CAK9B;AAGD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,2BAA2B,GAAG,MAAM,CAErF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,2BAA2B,CAEvF"}
@@ -1 +1 @@
1
- {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/compiler/source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAgB,WAAW,EAAE,MAAM,WAAW,CAAC;AAqC3F,qBAAa,cAAc;IAEvB,qDAAqD;aACrC,WAAW,EAAE,WAAW;IACxC,kDAAkD;aAClC,QAAQ,EAAE,gBAAgB;IAC1C,6BAA6B;aACb,GAAG,EAAE,MAAM;IAC3B,mDAAmD;aACnC,OAAO,EAAE,MAAM;IAC/B,2BAA2B;aACX,YAAY,EAAE,iBAAiB,EAAE;;IATjD,qDAAqD;IACrC,WAAW,EAAE,WAAW;IACxC,kDAAkD;IAClC,QAAQ,EAAE,gBAAgB;IAC1C,6BAA6B;IACb,GAAG,EAAE,MAAM;IAC3B,mDAAmD;IACnC,OAAO,EAAE,MAAM;IAC/B,2BAA2B;IACX,YAAY,EAAE,iBAAiB,EAAE;CAEpD;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,gBAAgB,EAChC,SAAS,EAAE,OAAO,GACjB,cAAc,CAKhB;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,gBAAgB,EAChC,SAAS,EAAE,OAAO,GACjB,cAAc,CAIhB"}
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/compiler/source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAgB,WAAW,EAAE,MAAM,WAAW,CAAC;AAwC3F,qBAAa,cAAc;IAEvB,qDAAqD;aACrC,WAAW,EAAE,WAAW;IACxC,kDAAkD;aAClC,QAAQ,EAAE,gBAAgB;IAC1C,6BAA6B;aACb,GAAG,EAAE,MAAM;IAC3B,mDAAmD;aACnC,OAAO,EAAE,MAAM;IAC/B,2BAA2B;aACX,YAAY,EAAE,iBAAiB,EAAE;;IATjD,qDAAqD;IACrC,WAAW,EAAE,WAAW;IACxC,kDAAkD;IAClC,QAAQ,EAAE,gBAAgB;IAC1C,6BAA6B;IACb,GAAG,EAAE,MAAM;IAC3B,mDAAmD;IACnC,OAAO,EAAE,MAAM;IAC/B,2BAA2B;IACX,YAAY,EAAE,iBAAiB,EAAE;CAEpD;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,gBAAgB,EAChC,SAAS,EAAE,OAAO,GACjB,cAAc,CAKhB;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,gBAAgB,EAChC,SAAS,EAAE,OAAO,GACjB,cAAc,CAIhB"}
@@ -15,6 +15,14 @@ export interface TemplateSoftwareData {
15
15
  /** full contents of software dependency description */
16
16
  src: string;
17
17
  }
18
+ export interface TemplateAssetData {
19
+ /** i.e. @milaboratory/mixcr:main */
20
+ name: string;
21
+ /** i.e. 4.2.3 */
22
+ version: string;
23
+ /** full contents of asset dependency description */
24
+ src: string;
25
+ }
18
26
  export interface TemplateData {
19
27
  /** Discriminator for future use */
20
28
  type: 'pl.tengo-template.v2';
@@ -28,6 +36,8 @@ export interface TemplateData {
28
36
  templates: Record<string, TemplateData>;
29
37
  /** i.e. @milaboratory/mixcr:main -> software metadata */
30
38
  software: Record<string, TemplateSoftwareData>;
39
+ /** i.e. @milaboratory/genome:human -> asset metadata */
40
+ assets: Record<string, TemplateAssetData>;
31
41
  /** Template source code */
32
42
  src: string;
33
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/compiler/template.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EACX,gBAAgB,EAIjB,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,oBAAoB;IACnC,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,IAAI,EAAE,sBAAsB,CAAC;IAE7B,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAEhB,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACtC,0EAA0E;IAC1E,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACxC,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC/C,2BAA2B;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AAKD,qBAAa,QAAQ;aAKD,WAAW,EAAE,WAAW;aACxB,QAAQ,EAAE,gBAAgB;IAL5C,SAAgB,IAAI,EAAE,YAAY,CAAC;IACnC,SAAgB,OAAO,EAAE,UAAU,CAAC;gBAGlB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,gBAAgB,EAC1C,IAAI,EAAE;QACJ,IAAI,CAAC,EAAE,YAAY,CAAC;QACpB,OAAO,CAAC,EAAE,UAAU,CAAA;KACrB;IA0BH,MAAM;;;;;CAGP"}
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/compiler/template.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EACX,gBAAgB,EAIjB,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,oBAAoB;IACnC,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,IAAI,EAAE,sBAAsB,CAAC;IAE7B,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAEhB,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACtC,0EAA0E;IAC1E,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACxC,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC/C,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC1C,2BAA2B;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AAKD,qBAAa,QAAQ;aAKD,WAAW,EAAE,WAAW;aACxB,QAAQ,EAAE,gBAAgB;IAL5C,SAAgB,IAAI,EAAE,YAAY,CAAC;IACnC,SAAgB,OAAO,EAAE,UAAU,CAAC;gBAGlB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,gBAAgB,EAC1C,IAAI,EAAE;QACJ,IAAI,CAAC,EAAE,YAAY,CAAC;QACpB,OAAO,CAAC,EAAE,UAAU,CAAA;KACrB;IA0BH,MAAM;;;;;CAGP"}
@@ -6,7 +6,8 @@ export interface TestArtifactSource {
6
6
  export declare const testLocalLib1Name: FullArtifactName;
7
7
  export declare const testLocalLib1Src = "\notherLib := import(\"package1:other-lib-2\" )\nplapiCustomName := import(\"plapi\" )\n\nnotplapiCustomName.getTemplateId( \"some other:parameter\")\n\nplapiCustomName.getTemplateIdAnother(\"sss:kkk\" )\nplapiCustomName.getSoftwareInfo(\":software-1\")\n\nexport {\n \"some\": \"value\",\n \"template2\": plapiCustomName.getTemplateId(\":local-template-2\" ),\n \"template3\": plapiCustomName.getTemplateId ( \"package1:template-3\")\n}\n";
8
8
  export declare const testLocalLib1SrcNormalized = "\notherLib := import(\"package1:other-lib-2\")\nplapiCustomName := import(\"plapi\" )\n\nnotplapiCustomName.getTemplateId( \"some other:parameter\")\n\nplapiCustomName.getTemplateIdAnother(\"sss:kkk\" )\nplapiCustomName.getSoftwareInfo(\"current-package:software-1\")\n\nexport {\n \"some\": \"value\",\n \"template2\": plapiCustomName.getTemplateId(\"current-package:local-template-2\"),\n \"template3\": plapiCustomName.getTemplateId(\"package1:template-3\")\n}\n";
9
- export declare const testLocalLib2Src = "\notherLib := import(\"package1:someid\")\nll := import(\"@milaboratory/tengo-sdk:ll\")\n\n/* multiline comments should be ignored\n a := import(\":non-existent-library\")\n */\n\ntplID := ll.importTemplate(\"package2:template-1\")\nsoftwareID := ll.importSoftware(\"package2:software-1\")\n\nexport {\n \"some\": \"value\",\n \"template1\": ll.importTemplate(\"current-package:local-template-2\"),\n \"template2\": tplID,\n}\n";
9
+ export declare const testLocalLib2Name: FullArtifactName;
10
+ export declare const testLocalLib2Src = "\notherLib := import(\"package1:someid\")\nll := import(\"@platforma-sdk/workflow-tengo:assets\")\n\n/* multiline comments should be ignored\n a := import(\":non-existent-library\")\n */\n\ntplID := ll.importTemplate(\"package2:template-1\")\nsoftwareID := ll.importSoftware(\"package2:software-1\")\nassetID := ll.importAsset(\"package2:asset-1\")\n\nexport {\n \"some\": \"value\",\n \"template1\": ll.importTemplate(\"current-package:local-template-2\"),\n \"template2\": tplID,\n}\n";
10
11
  export declare const testLocalTpl1Name: FullArtifactName;
11
12
  export declare const testLocalTpl1Src = "\nlib1 := import( \":local-library-1\")\nlib2 := import(\"package1:other-lib-1\")\nplapi := import(\"plapi\")\n\ntpl2 := plapi.getTemplateId(\"current-package:local-template-1\" )\n";
12
13
  export declare const testLocalTpl2Name: FullArtifactName;
@@ -1 +1 @@
1
- {"version":3,"file":"test.artifacts.d.ts","sourceRoot":"","sources":["../../src/compiler/test.artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AA4BD,eAAO,MAAM,iBAAiB,EAAE,gBAK/B,CAAC;AACF,eAAO,MAAM,gBAAgB,qcAc5B,CAAC;AACF,eAAO,MAAM,0BAA0B,+dActC,CAAC;AACF,eAAO,MAAM,gBAAgB,0bAgB5B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,gBAK/B,CAAC;AACF,eAAO,MAAM,gBAAgB,0LAM5B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,gBAK/B,CAAC;AACF,eAAO,MAAM,gBAAgB,gDAE5B,CAAC;AACF,eAAO,MAAM,0BAA0B,gDAEtC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,kBAG3B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,kBAG3B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,kBAG3B,CAAC;AAEF,eAAO,MAAM,gBAAgB,sBAAgD,CAAC;AAE9E,eAAO,MAAM,oBAAoB,EAAE,gBAKlC,CAAC;AACF,eAAO,MAAM,mBAAmB,8CAI/B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,gBAKnC,CAAC;AACF,eAAO,MAAM,oBAAoB,wEAEhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,gBAKlC,CAAC;AACF,eAAO,MAAM,mBAAmB,kJAM/B,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,gBAKlC,CAAC;AACF,eAAO,MAAM,mBAAmB,gDAE/B,CAAC;AAEF,eAAO,MAAM,8BAA8B,yOAAyO,CAAC;AAErR,eAAO,MAAM,gBAAgB,EAAE,kBAG9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,kBAG9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,kBAG9B,CAAC;AAEF,eAAO,MAAM,YAAY,sBAAyD,CAAC"}
1
+ {"version":3,"file":"test.artifacts.d.ts","sourceRoot":"","sources":["../../src/compiler/test.artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AA4BD,eAAO,MAAM,iBAAiB,EAAE,gBAK/B,CAAC;AACF,eAAO,MAAM,gBAAgB,qcAc5B,CAAC;AACF,eAAO,MAAM,0BAA0B,+dActC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,gBAK/B,CAAC;AACF,eAAO,MAAM,gBAAgB,qfAiB5B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,gBAK/B,CAAC;AACF,eAAO,MAAM,gBAAgB,0LAM5B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,gBAK/B,CAAC;AACF,eAAO,MAAM,gBAAgB,gDAE5B,CAAC;AACF,eAAO,MAAM,0BAA0B,gDAEtC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,kBAG3B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,kBAG3B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,kBAG3B,CAAC;AAEF,eAAO,MAAM,gBAAgB,sBAAgD,CAAC;AAE9E,eAAO,MAAM,oBAAoB,EAAE,gBAKlC,CAAC;AACF,eAAO,MAAM,mBAAmB,8CAI/B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,gBAKnC,CAAC;AACF,eAAO,MAAM,oBAAoB,wEAEhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,gBAKlC,CAAC;AACF,eAAO,MAAM,mBAAmB,kJAM/B,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,gBAKlC,CAAC;AACF,eAAO,MAAM,mBAAmB,gDAE/B,CAAC;AAEF,eAAO,MAAM,8BAA8B,yOAAyO,CAAC;AAErR,eAAO,MAAM,gBAAgB,EAAE,kBAG9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,kBAG9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,kBAG9B,CAAC;AAEF,eAAO,MAAM,YAAY,sBAAyD,CAAC"}
package/dist/index.d.ts CHANGED
@@ -2,18 +2,20 @@ import { default as Cmd0 } from './commands/build';
2
2
  import { default as Cmd1 } from './commands/check';
3
3
  import { default as Cmd2 } from './commands/test';
4
4
  import { default as Cmd3 } from './commands/dump/all';
5
- import { default as Cmd4 } from './commands/dump/libs';
6
- import { default as Cmd5 } from './commands/dump/software';
7
- import { default as Cmd6 } from './commands/dump/templates';
8
- import { default as Cmd7 } from './commands/dump/tests';
5
+ import { default as Cmd4 } from './commands/dump/assets';
6
+ import { default as Cmd5 } from './commands/dump/libs';
7
+ import { default as Cmd6 } from './commands/dump/software';
8
+ import { default as Cmd7 } from './commands/dump/templates';
9
+ import { default as Cmd8 } from './commands/dump/tests';
9
10
  export declare const COMMANDS: {
10
11
  build: typeof Cmd0;
11
12
  check: typeof Cmd1;
12
13
  test: typeof Cmd2;
13
14
  'dump:all': typeof Cmd3;
14
- 'dump:libs': typeof Cmd4;
15
- 'dump:software': typeof Cmd5;
16
- 'dump:templates': typeof Cmd6;
17
- 'dump:tests': typeof Cmd7;
15
+ 'dump:assets': typeof Cmd4;
16
+ 'dump:libs': typeof Cmd5;
17
+ 'dump:software': typeof Cmd6;
18
+ 'dump:templates': typeof Cmd7;
19
+ 'dump:tests': typeof Cmd8;
18
20
  };
19
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC,OAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC,OAAO,IAAI,MAAM,iBAAiB,CAAC;AACnC,OAAO,IAAI,MAAM,qBAAqB,CAAC;AACvC,OAAO,IAAI,MAAM,sBAAsB,CAAC;AACxC,OAAO,IAAI,MAAM,0BAA0B,CAAC;AAC5C,OAAO,IAAI,MAAM,2BAA2B,CAAC;AAC7C,OAAO,IAAI,MAAM,uBAAuB,CAAC;AAGzC,eAAO,MAAM,QAAQ;;;;;;;;;CASpB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC,OAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC,OAAO,IAAI,MAAM,iBAAiB,CAAC;AACnC,OAAO,IAAI,MAAM,qBAAqB,CAAC;AACvC,OAAO,IAAI,MAAM,wBAAwB,CAAC;AAC1C,OAAO,IAAI,MAAM,sBAAsB,CAAC;AACxC,OAAO,IAAI,MAAM,0BAA0B,CAAC;AAC5C,OAAO,IAAI,MAAM,2BAA2B,CAAC;AAC7C,OAAO,IAAI,MAAM,uBAAuB,CAAC;AAGzC,eAAO,MAAM,QAAQ;;;;;;;;;;CAUpB,CAAC"}
package/dist/index.js CHANGED
@@ -1,43 +1,43 @@
1
- "use strict";var ke=Object.defineProperty;var Te=(t,e,r)=>e in t?ke(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var c=(t,e,r)=>Te(t,typeof e!="symbol"?e+"":e,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const fe=require("node:child_process"),h=require("@oclif/core"),De=require("node:path"),pe=require("node:fs"),re=require("node:zlib"),Fe=require("canonicalize"),j=require("winston"),xe=require("node:fs/promises"),ue=require("@milaboratories/tengo-tester"),O=require("node:process");function H(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const r in t)if(r!=="default"){const o=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,o.get?o:{enumerable:!0,get:()=>t[r]})}}return e.default=t,Object.freeze(e)}const d=H(De),u=H(pe),x=H(xe);function A(t){throw new Error("Unexpected object: "+t)}function Ae(){let t=process.cwd();for(;t;){const e=d.join(t,"node_modules");if(u.existsSync(e))return e;const r=d.resolve(t,"..");if(r===t)break;t=r}throw new Error("Unable to find node_modules directory.")}function N(t){try{const e=u.statSync(t);return e.isDirectory()?"dir":e.isFile()?"file":e.isSymbolicLink()?"link":"unknown"}catch(e){if(e.code=="ENOENT")return"absent";throw e}}function se(t){return`${t.type}||${t.pkg}||${t.id}`}function m(t){return`${t.type}:${t.pkg}:${t.id}:${t.version}`}function g(t){return`${t.type}:${t.pkg}:${t.id}`}function oe(t,e){return t.type==e.type&&t.pkg==e.pkg&&t.id==e.id}function b(t){return`${t.pkg}:${t.id}`}function R(t){return{name:b(t),version:t.version}}function Oe(t){const e=t.name.match(/^(?<pkg>[^:]*):(?<id>[^:]*)$/);if(!e)throw new Error(`malformed artifact name: ${t.name}`);return{pkg:e.groups.pkg,id:e.groups.id,version:t.version}}function ne(t){return`${t.pkg}:${t.id}:${t.version}`}const Me=new TextDecoder,je=new TextEncoder;class me{constructor(e,r,o){c(this,"data");c(this,"content");this.compileMode=e,this.fullName=r;let{data:n,content:s}=o;if(n===void 0&&s===void 0)throw new Error("Neither data nor content is provided for template constructor");if(n!==void 0&&s!==void 0)throw new Error("Both data and content are provided for template constructor");if(n===void 0&&(n=JSON.parse(Me.decode(re.gunzipSync(s))),n.type!=="pl.tengo-template.v2"))throw new Error("malformed template");s===void 0&&(s=re.gzipSync(je.encode(Fe(n))));const i=Oe(n);if(i.pkg!==r.pkg||i.id!==r.id||i.version!==r.version)throw new Error(`Compiled template name don't match it's package and file names: ${ne(i)} != ${ne(r)}`);this.data=n,this.content=s}toJSON(){return{compileMode:this.compileMode,fullName:this.fullName,data:this.data}}}class C{constructor(e){c(this,"map",new Map);this.nameExtractor=e}add(e,r=!0){const o=se(this.nameExtractor(e)),n=this.map.get(o);return n&&!r||this.map.set(o,e),n}get(e){return this.map.get(se(e))}get array(){const e=[];return this.map.forEach(r=>e.push(r)),e}forEach(e){this.map.forEach(r=>e(r,this.nameExtractor(r)))}}function Re(){return new C(t=>t)}class L{constructor(e){c(this,"dev");c(this,"dist");this.nameExtractor=e,this.dev=new C(e),this.dist=new C(e)}add(e,r,o=!0){switch(e){case"dist":return this.dist.add(r,o);default:A(e)}}get(e,r){switch(e){case"dist":return this.dist.get(r);default:A(e)}}array(e){const r=[];return this.forEach(e,o=>r.push(o)),r}forEach(e,r){this.dist.forEach((o,n)=>r(this.get(e,n)??o,n))}}class Le{constructor(e){c(this,"libs",new L(e=>e.fullName));c(this,"software",new L(e=>e.fullName));c(this,"templates",new L(e=>e.fullName));this.compileMode=e}populateTemplateDataFromDependencies(e,r,o,n){for(const s of o)switch(s.type){case"library":const i=this.getLibOrError(s),a=n.indexOf(b(s));if(a>=0){let p=`library import recursion detected: ${n.slice(a).join(" -> ")} -> ${b(s)}`;throw new Error(p)}r.libs[b(s)]={...R(i.fullName),src:i.src},this.populateTemplateDataFromDependencies(e,r,i.dependencies,[...n,b(s)]);break;case"software":const l=this.getSoftwareOrError(s);r.software[b(s)]={...R(l.fullName),src:l.src};break;case"template":if(oe(e,s))continue;const f=this.getTemplateOrError(s);r.templates[b(s)]=f.data;break;case"test":throw new Error(`dependencies tree error: tests should never be part of template: ${g(s)} is dependency of ${b(e)}`);default:A(s.type)}}compileAndAddTemplate(e){if(e.fullName.type!=="template")throw new Error("unexpected source type");const r={type:"pl.tengo-template.v2",...R(e.fullName),templates:{},libs:{},software:{},src:e.src};this.populateTemplateDataFromDependencies(e.fullName,r,e.dependencies,[]);const o=new me(e.compileMode,e.fullName,{data:r});return this.addTemplate(o),o}addLib(e){const r=this.libs.add(e.compileMode,e,!1);if(r)throw new Error(`compiler already contain such library: adding = ${m(e.fullName)}, contains = ${m(r.fullName)}`)}allLibs(){return this.libs.array(this.compileMode)}getLib(e){if(e.type!=="library")throw new Error(`illegal artifact type: got ${e.type} instead of 'library`);return this.libs.get(this.compileMode,e)}getLibOrError(e){const r=this.getLib(e);if(!r)throw new Error(`library not found: ${b(e)}`);return r}addSoftware(e){const r=this.software.add(e.compileMode,e,!1);if(r)throw new Error(`compiler already contain info for software: adding = ${m(e.fullName)}, contains = ${m(r.fullName)}`)}allSoftware(){return this.software.array(this.compileMode)}getSoftware(e){if(e.type!=="software")throw new Error(`illegal artifact type: got ${e.type} instead of 'software`);return this.software.get(this.compileMode,e)}getSoftwareOrError(e){const r=this.getSoftware(e);if(!r)throw new Error(`software info not found: ${b(e)}`);return r}addTemplate(e){const r=this.templates.add(e.compileMode,e,!1);if(r)throw new Error(`compiler already contain such template: adding = ${m(e.fullName)}, contains = ${m(r.fullName)}`)}allTemplates(){return this.templates.array(this.compileMode)}getTemplate(e){if(e.type!=="template")throw new Error(`illegal artifact type: got ${e.type} instead of 'template`);return this.templates.get(this.compileMode,e)}getTemplateOrError(e){const r=this.getTemplate(e);if(!r)throw new Error(`template not found: ${b(e)}`);return r}getArtefact(e){switch(e.type){case"template":return this.getTemplate(e);case"library":return this.getLib(e);case"software":return this.getSoftware(e);case"test":return;default:A(e.type)}}checkLibs(){this.libs.forEach(this.compileMode,e=>{for(const r of e.dependencies){if(r.type==="test")throw new Error(`test should never be dependency of production code: ${g(r)} test is dependency of ${m(e.fullName)}`);if(!this.getArtefact(r))throw new Error(`unresolved dependency ${g(r)} for ${m(e.fullName)}`)}})}compileAndAdd(e){const r={templates:[],libs:[],software:[]};let o=[];for(const n of e)n.fullName.type==="library"?(this.addLib(n),r.libs.push(n)):n.fullName.type==="software"?(this.addSoftware(n),r.software.push(n)):o.push(n);for(;o.length>0;){const n=[];for(const s of o){const i=s.dependencies.filter(a=>!this.getArtefact(a)&&!(s.fullName.type==="template"&&oe(s.fullName,a)));if(i.length>0){let a=`Unsatisfied dependencies in ${m(s.fullName)}:
2
- `;for(const l of i)a+=` - ${g(l)}
3
- `;n.push({src:s,err:Error(a)});continue}switch(s.fullName.type){case"library":this.addLib(s),r.libs.push(s);break;case"software":this.addSoftware(s),r.software.push(s);break;case"template":try{const a=this.compileAndAddTemplate(s);r.templates.push(a)}catch(a){let l=`Unsatisfied dependencies in ${m(s.fullName)}:
4
- `;l+=` - ${a.message}
5
- `,n.push({src:s,err:Error(l)})}break;case"test":break;default:A(s.fullName.type)}}if(o.length===n.length){let s="";for(const i of n)s+=`
6
- ${i.err.message}`;throw new Error(s)}o=n.map(({src:s})=>s)}return r}}const ie="[_a-zA-Z][_a-zA-Z0-9]*",M=(t,e)=>new RegExp(`\\b${t}\\.(?<fnCall>(?<fnName>`+e+')\\s*\\(\\s*"(?<templateName>[^"]+)"\\s*\\))'),Ce=t=>M(t,"getTemplateId"),Ie=t=>M(t,"getSoftwareInfo"),ae=t=>M(t,"importTemplate"),ce=t=>M(t,"importSoftware"),Ge=/^\s*(\/\/)|(\/\*.*\*\/)/,ze=/^\s*\/\*/,Je=/\*\//,ge=/\s*:=\s*import\s*\(\s*"(?<moduleName>[^"]+)"\s*\)/,Pe=new RegExp(`\\b(?<importName>${ie}(\\.${ie})*)${ge.source}`),qe=/(?<pkgName>[^"]+)?:(?<depID>[^"]+)/;class he{constructor(e,r,o,n,s){this.compileMode=e,this.fullName=r,this.src=o,this.srcName=n,this.dependencies=s}}function we(t,e,r,o){const n=pe.readFileSync(e).toString(),{deps:s,normalized:i}=We(n,r,o);return new he(t,r,i,e,s.array)}function We(t,e,r){const o=Re(),n=t.split(`
7
- `),s=[];let i={isInCommentBlock:!1,tplDepREs:new Map},a=0;for(const l of n){a++;try{const f=_e(l,i,e.pkg,r);s.push(f.line),i=f.context,f.artifact&&o.add(f.artifact)}catch(f){throw new Error(`[line ${a}]: ${f.message}
8
- ${l}`)}}return{normalized:s.join(`
9
- `),deps:o}}function _e(t,e,r,o){if(e.isInCommentBlock)return Je.exec(t)&&(e.isInCommentBlock=!1),{line:t,context:e,artifact:void 0};if(Ge.exec(t))return{line:t,context:e,artifact:void 0};if(ze.exec(t))return e.isInCommentBlock=!0,{line:t,context:e,artifact:void 0};const n=ge.exec(t);if(n){const s=Ue(t);if(s.module==="plapi")return e.tplDepREs.has(s.module)||e.tplDepREs.set(s.module,[["template",Ce(s.alias)],["software",Ie(s.alias)]]),{line:t,context:e,artifact:void 0};(s.module==="@milaboratory/tengo-sdk:ll"||s.module==="@platforma-sdk/workflow-tengo:ll"||(r==="@milaboratory/tengo-sdk"||r==="@platforma-sdk/workflow-tengo")&&s.module===":ll")&&(e.tplDepREs.has(s.module)||e.tplDepREs.set(s.module,[["template",ae(s.alias)],["software",ce(s.alias)]])),(s.module==="@milaboratory/tengo-sdk:assets"||s.module==="@platforma-sdk/workflow-tengo:assets"||(r==="@milaboratory/tengo-sdk"||r==="@platforma-sdk/workflow-tengo")&&s.module===":assets")&&(e.tplDepREs.has(s.module)||e.tplDepREs.set(s.module,[["template",ae(s.alias)],["software",ce(s.alias)]]));const i=le(s.module,"library",r);return i?(t=t.replace(n[0],` := import("${i.pkg}:${i.id}")`),{line:t,context:e,artifact:i}):{line:t,context:e,artifact:void 0}}if(e.tplDepREs.size>0)for(const[s,i]of e.tplDepREs)for(const[a,l]of i){const f=l.exec(t);if(!f||!f.groups)continue;const{fnCall:p,templateName:v,fnName:w}=f.groups;if(!p||!v||!w)throw Error("failed to parse template import statement");const y=le(v,a,r);if(!y)throw Error(`failed to parse artifact name in ${w} import statement`);return t=t.replace(p,`${w}("${y.pkg}:${y.id}")`),{line:t,context:e,artifact:y}}return{line:t,context:e,artifact:void 0}}function Ue(t){const e=Pe.exec(t);if(!e||!e.groups)throw Error("failed to parse 'import' statement");const{importName:r,moduleName:o}=e.groups;if(!r||!o)throw Error("failed to parse 'import' statement");return{module:o,alias:r}}function le(t,e,r){const o=qe.exec(t);if(!o)return;if(!o.groups)throw Error("failed to parse dependency name inside 'import' statement. The dependency name should have format '<package>:<templateName>'");const{pkgName:n,depID:s}=o.groups;if(!s)throw Error("failed to parse dependency name inside 'import' statement. The dependency name should have format '<package>:<templateName>'");return{type:e,pkg:n??r,id:s}}const I=".plj.gz",G=".lib.tengo",z=".sw.json",de=".test.tengo",J=".tpl.tengo",P=".lib.tengo",q=".sw.json",Be=[P,J,q];function $(t="debug"){return j.createLogger({level:t,format:j.format.printf(({level:e,message:r})=>`${e.padStart(6," ")}: ${r}`),transports:[new j.transports.Console({stderrLevels:["error","warn","info","debug"],handleExceptions:!0})]})}function k(){return JSON.parse(u.readFileSync("package.json").toString())}function ye(t,e){return d.resolve(e,t,"tengo","lib")}function be(t,e){return d.resolve(e,t,"tengo","tpl")}function ve(t,e){return d.resolve(e,t,"tengo","software")}function Ne(t,e,r,o,n=!1){const s=d.resolve(o,"package.json");if(N(s)!=="file"){for(const y of u.readdirSync(o)){const Se=N(d.join(o,y))==="link",te=d.resolve(o,y);N(te)==="dir"&&Ne(t,e,r,te,Se)}return}const i=ye("dist",o),a=be("dist",o),l=ve("dist",o),f=N(i)==="dir",p=N(a)==="dir",v=N(l)==="dir";if(!f&&!p&&!v)return;const w=JSON.parse(u.readFileSync(s).toString());if(w.name!==r.name){if(N(d.resolve(o,"node_modules"))==="dir"&&n)throw new Error(`nested node_modules is a sign of library dependencies version incompatibility in ${o}`);f&&Ve(t,w,"dist",i,e),p&&Ze(t,w,"dist",a,e),v&&Ke(t,w,"dist",l,e)}}function Ve(t,e,r,o,n){for(const s of u.readdirSync(o)){const i=d.resolve(o,s);if(!s.endsWith(G))throw new Error(`unexpected file in 'lib' folder: ${i}`);const a={type:"library",pkg:e.name,id:s.slice(0,s.length-G.length),version:e.version},l=we(r,i,a,!0);if(n.addLib(l),t.debug(`Adding dependency ${m(a)} from ${i}`),l.dependencies.length>0){t.debug("Dependencies:");for(const f of l.dependencies)t.debug(` - ${g(f)}`)}}}function Ze(t,e,r,o,n){for(const s of u.readdirSync(o)){const i=d.resolve(o,s);if(!s.endsWith(I))throw new Error(`unexpected file in 'tpl' folder: ${i}`);const a={type:"template",pkg:e.name,id:s.slice(0,s.length-I.length),version:e.version},l=new me(r,a,{content:u.readFileSync(i)});n.addTemplate(l),t.debug(`Adding dependency ${m(a)} from ${i}`)}}function Ke(t,e,r,o,n){for(const s of u.readdirSync(o)){const i=d.resolve(o,s);if(!s.endsWith(z))throw new Error(`unexpected file in 'software' folder: ${i}`);const a={type:"software",pkg:e.name,id:s.slice(0,s.length-z.length),version:e.version},l=new he(r,a,u.readFileSync(i).toString(),i,[]);n.addSoftware(l),t.debug(`Adding dependency ${m(a)} from ${i}`)}}function T(t,e,r,o,n){const s=[];for(const i of u.readdirSync(d.join(o,n))){const a=d.join(n,i),l=d.join(o,a);if(N(l)==="dir"){const y=T(t,e,r,o,a);s.push(...y);continue}const f=i==="index.lib.tengo"?`${d.basename(n)}.lib.tengo`:a,p=Xe(e,f.replaceAll(d.sep,"."));if(!p)continue;const v=d.resolve(o,a);t.debug(`Parsing ${m(p)} from ${v}`);const w=we(r,v,p,!0);if(w.dependencies.length>0){t.debug("Detected dependencies:");for(const y of w.dependencies)t.debug(` - ${g(y)}`)}s.push(w)}return s}function Q(t,e,r){const o=new Le(r);return Ne(t,o,e,Ae()),o}function Xe(t,e){const r={pkg:t.name,version:t.version};return e.endsWith(P)?{...r,id:e.substring(0,e.length-P.length),type:"library"}:e.endsWith(J)?{...r,id:e.substring(0,e.length-J.length),type:"template"}:e.endsWith(q)?{...r,id:e.substring(0,e.length-q.length),type:"software"}:e.endsWith(de)?{...r,id:e.substring(0,e.length-de.length),type:"test"}:null}function He(t,e){const r=k(),o=Q(t,r,e),n=T(t,r,e,"src","");if(n.length===0){const i=[];for(const a of Be)i.push(`*${a}`);t.error(`Nothing to compile. Looked for ${i.join(", ")}`),process.exit(1)}t.info(`Compiling '${e}'...`);const s=o.compileAndAdd(n);return t.debug("Done."),s}function Qe(t,e,r){if(e.libs.length>0){const o=ye(r,".");u.mkdirSync(o,{recursive:!0});for(const n of e.libs){const s=d.resolve(o,n.fullName.id+G);t.info(` - writing ${s}`),u.writeFileSync(s,n.src)}}if(e.templates.length>0){const o=be(r,".");u.mkdirSync(o,{recursive:!0});for(const n of e.templates){const s=d.resolve(o,n.fullName.id+I);t.info(` - writing ${s}`),u.writeFileSync(s,n.content)}}if(e.software.length>0){const o=ve(r,".");u.mkdirSync(o,{recursive:!0});for(const n of e.software){const s=d.resolve(o,n.fullName.id+z);t.info(` - writing ${s}`),u.writeFileSync(s,n.src)}}}const Y={"log-level":h.Flags.string({description:"logging level",default:"info",options:["error","warn","info","debug"]})},Ye={"generate-tags":h.Flags.boolean({description:"generate tags, default false",default:!1}),"tags-file":h.Flags.file({description:'where to put ".tags" file, it should be a root of VS Code project',default:"../../.tags"}),"tags-additional-args":h.Flags.string({description:"additional flags for universal-ctags command: e.g. -e for emacs",default:[],multiple:!0,delimiter:","})},D=class D extends h.Command{async run(){const{flags:e}=await this.parse(D),r=$(e["log-level"]),o=k(),n=He(r,"dist");Qe(r,n,"dist"),r.info("");let s=`declare type TemplateFromFile = { readonly type: "from-file"; readonly path: string; };
10
- `;s+=`declare type TplName = ${n.templates.map(p=>'"'+p.fullName.id+'"').join(" | ")};
1
+ "use strict";var Me=Object.defineProperty;var je=(t,e,r)=>e in t?Me(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var l=(t,e,r)=>je(t,typeof e!="symbol"?e+"":e,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const ye=require("node:child_process"),h=require("@oclif/core"),Re=require("node:path"),be=require("node:fs"),ce=require("node:zlib"),Le=require("canonicalize"),I=require("winston"),Ce=require("node:fs/promises"),$e=require("@milaboratories/tengo-tester"),T=require("node:process");function se(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const r in t)if(r!=="default"){const o=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,o.get?o:{enumerable:!0,get:()=>t[r]})}}return e.default=t,Object.freeze(e)}const d=se(Re),p=se(be),F=se(Ce);function x(t){throw new Error("Unexpected object: "+t)}function Ie(){let t=process.cwd();for(;t;){const e=d.join(t,"node_modules");if(p.existsSync(e))return e;const r=d.resolve(t,"..");if(r===t)break;t=r}throw new Error("Unable to find node_modules directory.")}function v(t){try{const e=p.statSync(t);return e.isDirectory()?"dir":e.isFile()?"file":e.isSymbolicLink()?"link":"unknown"}catch(e){if(e.code=="ENOENT")return"absent";throw e}}function de(t){return`${t.type}||${t.pkg}||${t.id}`}function m(t){return`${t.type}:${t.pkg}:${t.id}:${t.version}`}function g(t){return`${t.type}:${t.pkg}:${t.id}`}function fe(t,e){return t.type==e.type&&t.pkg==e.pkg&&t.id==e.id}function w(t){return`${t.pkg}:${t.id}`}function R(t){return{name:w(t),version:t.version}}function Ge(t){const e=t.name.match(/^(?<pkg>[^:]*):(?<id>[^:]*)$/);if(!e)throw new Error(`malformed artifact name: ${t.name}`);return{pkg:e.groups.pkg,id:e.groups.id,version:t.version}}function pe(t){return`${t.pkg}:${t.id}:${t.version}`}const ze=new TextDecoder,Pe=new TextEncoder;class ve{constructor(e,r,o){l(this,"data");l(this,"content");this.compileMode=e,this.fullName=r;let{data:n,content:s}=o;if(n===void 0&&s===void 0)throw new Error("Neither data nor content is provided for template constructor");if(n!==void 0&&s!==void 0)throw new Error("Both data and content are provided for template constructor");if(n===void 0&&(n=JSON.parse(ze.decode(ce.gunzipSync(s))),n.type!=="pl.tengo-template.v2"))throw new Error("malformed template");s===void 0&&(s=ce.gzipSync(Pe.encode(Le(n))));const i=Ge(n);if(i.pkg!==r.pkg||i.id!==r.id||i.version!==r.version)throw new Error(`Compiled template name don't match it's package and file names: ${pe(i)} != ${pe(r)}`);this.data=n,this.content=s}toJSON(){return{compileMode:this.compileMode,fullName:this.fullName,data:this.data}}}class G{constructor(e){l(this,"map",new Map);this.nameExtractor=e}add(e,r=!0){const o=de(this.nameExtractor(e)),n=this.map.get(o);return n&&!r||this.map.set(o,e),n}get(e){return this.map.get(de(e))}get array(){const e=[];return this.map.forEach(r=>e.push(r)),e}forEach(e){this.map.forEach(r=>e(r,this.nameExtractor(r)))}}function Je(){return new G(t=>t)}class L{constructor(e){l(this,"dev");l(this,"dist");this.nameExtractor=e,this.dev=new G(e),this.dist=new G(e)}add(e,r,o=!0){switch(e){case"dist":return this.dist.add(r,o);default:x(e)}}get(e,r){switch(e){case"dist":return this.dist.get(r);default:x(e)}}array(e){const r=[];return this.forEach(e,o=>r.push(o)),r}forEach(e,r){this.dist.forEach((o,n)=>r(this.get(e,n)??o,n))}}class qe{constructor(e){l(this,"libs",new L(e=>e.fullName));l(this,"software",new L(e=>e.fullName));l(this,"assets",new L(e=>e.fullName));l(this,"templates",new L(e=>e.fullName));this.compileMode=e}populateTemplateDataFromDependencies(e,r,o,n){for(const s of o)switch(s.type){case"library":const i=this.getLibOrError(s),a=n.indexOf(w(s));if(a>=0){let b=`library import recursion detected: ${n.slice(a).join(" -> ")} -> ${w(s)}`;throw new Error(b)}r.libs[w(s)]={...R(i.fullName),src:i.src},this.populateTemplateDataFromDependencies(e,r,i.dependencies,[...n,w(s)]);break;case"software":const c=this.getSoftwareOrError(s);r.software[w(s)]={...R(c.fullName),src:c.src};break;case"asset":const f=this.getAssetOrError(s);r.software[w(s)]={...R(f.fullName),src:f.src};break;case"template":if(fe(e,s))continue;const u=this.getTemplateOrError(s);r.templates[w(s)]=u.data;break;case"test":throw new Error(`dependencies tree error: tests should never be part of template: ${g(s)} is dependency of ${w(e)}`);default:x(s.type)}}compileAndAddTemplate(e){if(e.fullName.type!=="template")throw new Error("unexpected source type");const r={type:"pl.tengo-template.v2",...R(e.fullName),templates:{},libs:{},software:{},assets:{},src:e.src};this.populateTemplateDataFromDependencies(e.fullName,r,e.dependencies,[]);const o=new ve(e.compileMode,e.fullName,{data:r});return this.addTemplate(o),o}addLib(e){const r=this.libs.add(e.compileMode,e,!1);if(r)throw new Error(`compiler already contain such library: adding = ${m(e.fullName)}, contains = ${m(r.fullName)}`)}allLibs(){return this.libs.array(this.compileMode)}getLib(e){if(e.type!=="library")throw new Error(`illegal artifact type: got ${e.type} instead of 'library`);return this.libs.get(this.compileMode,e)}getLibOrError(e){const r=this.getLib(e);if(!r)throw new Error(`library not found: ${w(e)}`);return r}addSoftware(e){const r=this.software.add(e.compileMode,e,!1);if(r)throw new Error(`compiler already contain info for software: adding = ${m(e.fullName)}, contains = ${m(r.fullName)}`)}allSoftware(){return this.software.array(this.compileMode)}getSoftware(e){if(e.type!=="software")throw new Error(`illegal artifact type: got ${e.type} instead of 'software`);return this.software.get(this.compileMode,e)}getSoftwareOrError(e){const r=this.getSoftware(e);if(!r)throw new Error(`software info not found: ${w(e)}`);return r}addAsset(e){const r=this.assets.add(e.compileMode,e,!1);if(r)throw new Error(`compiler already contain info for asset: adding = ${m(e.fullName)}, contains = ${m(r.fullName)}`)}allAssets(){return this.assets.array(this.compileMode)}getAsset(e){if(e.type!=="asset")throw new Error(`illegal artifact type: got ${e.type} instead of 'asset`);return this.assets.get(this.compileMode,e)}getAssetOrError(e){const r=this.getAsset(e);if(!r)throw new Error(`asset info not found: ${w(e)}`);return r}addTemplate(e){const r=this.templates.add(e.compileMode,e,!1);if(r)throw new Error(`compiler already contain such template: adding = ${m(e.fullName)}, contains = ${m(r.fullName)}`)}allTemplates(){return this.templates.array(this.compileMode)}getTemplate(e){if(e.type!=="template")throw new Error(`illegal artifact type: got ${e.type} instead of 'template`);return this.templates.get(this.compileMode,e)}getTemplateOrError(e){const r=this.getTemplate(e);if(!r)throw new Error(`template not found: ${w(e)}`);return r}getArtefact(e){switch(e.type){case"template":return this.getTemplate(e);case"library":return this.getLib(e);case"software":return this.getSoftware(e);case"asset":return this.getAsset(e);case"test":return;default:x(e.type)}}checkLibs(){this.libs.forEach(this.compileMode,e=>{for(const r of e.dependencies){if(r.type==="test")throw new Error(`test should never be dependency of production code: ${g(r)} test is dependency of ${m(e.fullName)}`);if(!this.getArtefact(r))throw new Error(`unresolved dependency ${g(r)} for ${m(e.fullName)}`)}})}compileAndAdd(e){const r={templates:[],libs:[],software:[],assets:[]};let o=[];for(const n of e)n.fullName.type==="library"?(this.addLib(n),r.libs.push(n)):n.fullName.type==="software"?(this.addSoftware(n),r.software.push(n)):n.fullName.type==="asset"?(this.addAsset(n),r.assets.push(n)):o.push(n);for(;o.length>0;){const n=[];for(const s of o){const i=s.dependencies.filter(a=>!this.getArtefact(a)&&!(s.fullName.type==="template"&&fe(s.fullName,a)));if(i.length>0){let a=`Unsatisfied dependencies in ${m(s.fullName)}:
2
+ `;for(const c of i)a+=` - ${g(c)}
3
+ `;n.push({src:s,err:Error(a)});continue}switch(s.fullName.type){case"library":this.addLib(s),r.libs.push(s);break;case"software":this.addSoftware(s),r.software.push(s);break;case"asset":this.addAsset(s),r.assets.push(s);break;case"template":try{const a=this.compileAndAddTemplate(s);r.templates.push(a)}catch(a){let c=`Unsatisfied dependencies in ${m(s.fullName)}:
4
+ `;c+=` - ${a.message}
5
+ `,n.push({src:s,err:Error(c)})}break;case"test":break;default:x(s.fullName.type)}}if(o.length===n.length){let s="";for(const i of n)s+=`
6
+ ${i.err.message}`;throw new Error(s)}o=n.map(({src:s})=>s)}return r}}const ue="[_a-zA-Z][_a-zA-Z0-9]*",O=(t,e)=>new RegExp(`\\b${t}\\.(?<fnCall>(?<fnName>`+e+')\\s*\\(\\s*"(?<templateName>[^"]+)"\\s*\\))'),We=t=>O(t,"getTemplateId"),_e=t=>O(t,"getSoftwareInfo"),me=t=>O(t,"importTemplate"),ge=t=>O(t,"importSoftware"),Ue=t=>O(t,"importAsset"),Be=/^\s*(\/\/)|(\/\*.*\*\/)/,Ve=/^\s*\/\*/,Ze=/\*\//,Ee=/\s*:=\s*import\s*\(\s*"(?<moduleName>[^"]+)"\s*\)/,Ke=new RegExp(`\\b(?<importName>${ue}(\\.${ue})*)${Ee.source}`),Xe=/(?<pkgName>[^"]+)?:(?<depID>[^"]+)/;class re{constructor(e,r,o,n,s){this.compileMode=e,this.fullName=r,this.src=o,this.srcName=n,this.dependencies=s}}function Ne(t,e,r,o){const n=be.readFileSync(e).toString(),{deps:s,normalized:i}=He(n,r,o);return new re(t,r,i,e,s.array)}function He(t,e,r){const o=Je(),n=t.split(`
7
+ `),s=[];let i={isInCommentBlock:!1,tplDepREs:new Map},a=0;for(const c of n){a++;try{const f=Qe(c,i,e.pkg,r);s.push(f.line),i=f.context,f.artifact&&o.add(f.artifact)}catch(f){throw new Error(`[line ${a}]: ${f.message}
8
+ ${c}`)}}return{normalized:s.join(`
9
+ `),deps:o}}function Qe(t,e,r,o){if(e.isInCommentBlock)return Ze.exec(t)&&(e.isInCommentBlock=!1),{line:t,context:e,artifact:void 0};if(Be.exec(t))return{line:t,context:e,artifact:void 0};if(Ve.exec(t))return e.isInCommentBlock=!0,{line:t,context:e,artifact:void 0};const n=Ee.exec(t);if(n){const s=Ye(t);if(s.module==="plapi")return e.tplDepREs.has(s.module)||e.tplDepREs.set(s.module,[["template",We(s.alias)],["software",_e(s.alias)]]),{line:t,context:e,artifact:void 0};(s.module==="@milaboratory/tengo-sdk:ll"||s.module==="@platforma-sdk/workflow-tengo:ll"||(r==="@milaboratory/tengo-sdk"||r==="@platforma-sdk/workflow-tengo")&&s.module===":ll")&&(e.tplDepREs.has(s.module)||e.tplDepREs.set(s.module,[["template",me(s.alias)],["software",ge(s.alias)]])),(s.module==="@milaboratory/tengo-sdk:assets"||s.module==="@platforma-sdk/workflow-tengo:assets"||(r==="@milaboratory/tengo-sdk"||r==="@platforma-sdk/workflow-tengo")&&s.module===":assets")&&(e.tplDepREs.has(s.module)||e.tplDepREs.set(s.module,[["template",me(s.alias)],["software",ge(s.alias)],["asset",Ue(s.alias)]]));const i=he(s.module,"library",r);return i?(t=t.replace(n[0],` := import("${i.pkg}:${i.id}")`),{line:t,context:e,artifact:i}):{line:t,context:e,artifact:void 0}}if(e.tplDepREs.size>0)for(const[s,i]of e.tplDepREs)for(const[a,c]of i){const f=c.exec(t);if(!f||!f.groups)continue;const{fnCall:u,templateName:b,fnName:$}=f.groups;if(!u||!b||!$)throw Error("failed to parse template import statement");const y=he(b,a,r);if(!y)throw Error(`failed to parse artifact name in ${$} import statement`);return t=t.replace(u,`${$}("${y.pkg}:${y.id}")`),{line:t,context:e,artifact:y}}return{line:t,context:e,artifact:void 0}}function Ye(t){const e=Ke.exec(t);if(!e||!e.groups)throw Error("failed to parse 'import' statement");const{importName:r,moduleName:o}=e.groups;if(!r||!o)throw Error("failed to parse 'import' statement");return{module:o,alias:r}}function he(t,e,r){const o=Xe.exec(t);if(!o)return;if(!o.groups)throw Error("failed to parse dependency name inside 'import' statement. The dependency name should have format '<package>:<templateName>'");const{pkgName:n,depID:s}=o.groups;if(!s)throw Error("failed to parse dependency name inside 'import' statement. The dependency name should have format '<package>:<templateName>'");return{type:e,pkg:n??r,id:s}}const z=".plj.gz",P=".lib.tengo",J=".sw.json",q=".as.json",we=".test.tengo",W=".tpl.tengo",_=".lib.tengo",U=".sw.json",B=".as.json",et=[_,W,U,B];function E(t="debug"){return I.createLogger({level:t,format:I.format.printf(({level:e,message:r})=>`${e.padStart(6," ")}: ${r}`),transports:[new I.transports.Console({stderrLevels:["error","warn","info","debug"],handleExceptions:!0})]})}function M(){return JSON.parse(p.readFileSync("package.json").toString())}function Se(t,e){return d.resolve(e,t,"tengo","lib")}function ke(t,e){return d.resolve(e,t,"tengo","tpl")}function Ae(t,e){return d.resolve(e,t,"tengo","software")}function Te(t,e){return d.resolve(e,t,"tengo","asset")}function De(t,e,r,o,n=!1){const s=d.resolve(o,"package.json");if(v(s)!=="file"){for(const ae of p.readdirSync(o)){const Oe=v(d.join(o,ae))==="link",le=d.resolve(o,ae);v(le)==="dir"&&De(t,e,r,le,Oe)}return}const i=Se("dist",o),a=ke("dist",o),c=Ae("dist",o),f=Te("dist",o),u=v(i)==="dir",b=v(a)==="dir",$=v(c)==="dir",y=v(f)==="dir";if(!u&&!b&&!$&&!y)return;const D=JSON.parse(p.readFileSync(s).toString());if(D.name!==r.name){if(v(d.resolve(o,"node_modules"))==="dir"&&n)throw new Error(`nested node_modules is a sign of library dependencies version incompatibility in ${o}`);u&&tt(t,D,"dist",i,e),b&&st(t,D,"dist",a,e),$&&rt(t,D,"dist",c,e),y&&ot(t,D,"dist",f,e)}}function tt(t,e,r,o,n){for(const s of p.readdirSync(o)){const i=d.resolve(o,s);if(!s.endsWith(P))throw new Error(`unexpected file in 'lib' folder: ${i}`);const a={type:"library",pkg:e.name,id:s.slice(0,s.length-P.length),version:e.version},c=Ne(r,i,a,!0);if(n.addLib(c),t.debug(`Adding dependency ${m(a)} from ${i}`),c.dependencies.length>0){t.debug("Dependencies:");for(const f of c.dependencies)t.debug(` - ${g(f)}`)}}}function st(t,e,r,o,n){for(const s of p.readdirSync(o)){const i=d.resolve(o,s);if(!s.endsWith(z))throw new Error(`unexpected file in 'tpl' folder: ${i}`);const a={type:"template",pkg:e.name,id:s.slice(0,s.length-z.length),version:e.version},c=new ve(r,a,{content:p.readFileSync(i)});n.addTemplate(c),t.debug(`Adding dependency ${m(a)} from ${i}`)}}function rt(t,e,r,o,n){for(const s of p.readdirSync(o)){const i=d.resolve(o,s);if(!s.endsWith(J))throw new Error(`unexpected file in 'software' folder: ${i}`);const a={type:"software",pkg:e.name,id:s.slice(0,s.length-J.length),version:e.version},c=new re(r,a,p.readFileSync(i).toString(),i,[]);t.debug(`Adding dependency ${m(a)} from ${i}`),n.addSoftware(c)}}function ot(t,e,r,o,n){for(const s of p.readdirSync(o)){const i=d.resolve(o,s);if(!s.endsWith(q))throw new Error(`unexpected file in 'asset' folder: ${i}`);const a={type:"asset",pkg:e.name,id:s.slice(0,s.length-q.length),version:e.version},c=new re(r,a,p.readFileSync(i).toString(),i,[]);t.debug(`Adding dependency ${m(a)} from ${i}`),n.addAsset(c)}}function j(t,e,r,o,n){const s=[];for(const i of p.readdirSync(d.join(o,n))){const a=d.join(n,i),c=d.join(o,a);if(v(c)==="dir"){const y=j(t,e,r,o,a);s.push(...y);continue}const f=i==="index.lib.tengo"?`${d.basename(n)}.lib.tengo`:a,u=nt(e,f.replaceAll(d.sep,"."));if(!u)continue;const b=d.resolve(o,a);t.debug(`Parsing ${m(u)} from ${b}`);const $=Ne(r,b,u,!0);if($.dependencies.length>0){t.debug("Detected dependencies:");for(const y of $.dependencies)t.debug(` - ${g(y)}`)}s.push($)}return s}function oe(t,e,r){const o=new qe(r);return De(t,o,e,Ie()),o}function nt(t,e){const r={pkg:t.name,version:t.version};return e.endsWith(_)?{...r,id:e.substring(0,e.length-_.length),type:"library"}:e.endsWith(W)?{...r,id:e.substring(0,e.length-W.length),type:"template"}:e.endsWith(U)?{...r,id:e.substring(0,e.length-U.length),type:"software"}:e.endsWith(B)?{...r,id:e.substring(0,e.length-B.length),type:"asset"}:e.endsWith(we)?{...r,id:e.substring(0,e.length-we.length),type:"test"}:null}function it(t,e){const r=M(),o=oe(t,r,e),n=j(t,r,e,"src","");if(n.length===0){const i=[];for(const a of et)i.push(`*${a}`);t.error(`Nothing to compile. Looked for ${i.join(", ")}`),process.exit(1)}t.info(`Compiling '${e}'...`);const s=o.compileAndAdd(n);return t.debug("Done."),s}function at(t,e,r){if(e.libs.length>0){const o=Se(r,".");p.mkdirSync(o,{recursive:!0});for(const n of e.libs){const s=d.resolve(o,n.fullName.id+P);t.info(` - writing ${s}`),p.writeFileSync(s,n.src)}}if(e.templates.length>0){const o=ke(r,".");p.mkdirSync(o,{recursive:!0});for(const n of e.templates){const s=d.resolve(o,n.fullName.id+z);t.info(` - writing ${s}`),p.writeFileSync(s,n.content)}}if(e.software.length>0){const o=Ae(r,".");p.mkdirSync(o,{recursive:!0});for(const n of e.software){const s=d.resolve(o,n.fullName.id+J);t.info(` - writing ${s}`),p.writeFileSync(s,n.src)}}if(e.assets.length>0){const o=Te(r,".");p.mkdirSync(o,{recursive:!0});for(const n of e.software){const s=d.resolve(o,n.fullName.id+q);t.info(` - writing ${s}`),p.writeFileSync(s,n.src)}}}const ne={"log-level":h.Flags.string({description:"logging level",default:"info",options:["error","warn","info","debug"]})},lt={"generate-tags":h.Flags.boolean({description:"generate tags, default false",default:!1}),"tags-file":h.Flags.file({description:'where to put ".tags" file, it should be a root of VS Code project',default:"../../.tags"}),"tags-additional-args":h.Flags.string({description:"additional flags for universal-ctags command: e.g. -e for emacs",default:[],multiple:!0,delimiter:","})},k=class k extends h.Command{async run(){const{flags:e}=await this.parse(k),r=E(e["log-level"]),o=M(),n=it(r,"dist");at(r,n,"dist"),r.info("");let s=`declare type TemplateFromFile = { readonly type: "from-file"; readonly path: string; };
10
+ `;s+=`declare type TplName = ${n.templates.map(u=>'"'+u.fullName.id+'"').join(" | ")};
11
11
  `,s+=`declare const Templates: Record<TplName, TemplateFromFile>;
12
12
  `,s+=`export { Templates };
13
13
  `;let i=`module.exports = { Templates: {
14
14
  `,a=`import { resolve } from 'node:path';
15
15
  export const Templates = {
16
- `;const l=n.templates.map(p=>` '${p.fullName.id}': { type: 'from-file', path: require.resolve('./tengo/tpl/${p.fullName.id}.plj.gz') }`).join(`,
17
- `),f=n.templates.map(p=>` '${p.fullName.id}': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/${p.fullName.id}.plj.gz') }`).join(`,
18
- `);i+=l,a+=f,i+=`
16
+ `;const c=n.templates.map(u=>` '${u.fullName.id}': { type: 'from-file', path: require.resolve('./tengo/tpl/${u.fullName.id}.plj.gz') }`).join(`,
17
+ `),f=n.templates.map(u=>` '${u.fullName.id}': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/${u.fullName.id}.plj.gz') }`).join(`,
18
+ `);i+=c,a+=f,i+=`
19
19
  }};
20
20
  `,a+=`
21
21
  };
22
- `,await x.writeFile("dist/index.d.ts",s),o.type==="module"?(await x.writeFile("dist/index.cjs",i),await x.writeFile("dist/index.js",a)):(await x.writeFile("dist/index.js",i),await x.writeFile("dist/index.mjs",a)),et(e),e["generate-tags"]&&tt(r,e),r.info("Template Pack build done.")}};c(D,"description","build tengo sources into single distributable pack file"),c(D,"examples",["<%= config.bin %> <%= command.id %>"]),c(D,"flags",{...Y,...Ye});let W=D;function et(t){process.env.GENERATE_TAGS!=null&&(t["generate-tags"]=process.env.GENERATE_TAGS=="true"),process.env.TAGS_FILE!=null&&(t["tags-file"]=process.env.TAGS_FILE),process.env.TAGS_ADDITIONAL_ARGS!=null&&(t["tags-additional-args"]=process.env.TAGS_ADDITIONAL_ARGS.split(","))}function tt(t,e){var a;const r=d.resolve(e["tags-file"]),o=d.dirname(r),n=e["tags-additional-args"],s=rt(o);t.info(`Generating tags for tengo autocompletion from "${o}" in "${r}", additional arguments: "${n}".
23
- Found ${s.length} tengo files...`);const i=fe.spawnSync("ctags",["-f",r,...n,"--langdef=tengo","--map-tengo=+.tengo","--kinddef-tengo=f,function,function","--regex-tengo=/^\\s*(.*)(:| :=| =) ?func.*/\\1/f/","--kinddef-tengo=c,constant,constant",'--regex-tengo=/^\\s*(.*) := ("|\\{).*/\\1/c/',"-R",...s],{env:process.env,stdio:"inherit",cwd:o});if((a=i.error)!=null&&a.message.includes("ENOENT")){console.log(`
22
+ `,await F.writeFile("dist/index.d.ts",s),o.type==="module"?(await F.writeFile("dist/index.cjs",i),await F.writeFile("dist/index.js",a)):(await F.writeFile("dist/index.js",i),await F.writeFile("dist/index.mjs",a)),ct(e),e["generate-tags"]&&dt(r,e),r.info("Template Pack build done.")}};l(k,"description","build tengo sources into single distributable pack file"),l(k,"examples",["<%= config.bin %> <%= command.id %>"]),l(k,"flags",{...ne,...lt});let V=k;function ct(t){process.env.GENERATE_TAGS!=null&&(t["generate-tags"]=process.env.GENERATE_TAGS=="true"),process.env.TAGS_FILE!=null&&(t["tags-file"]=process.env.TAGS_FILE),process.env.TAGS_ADDITIONAL_ARGS!=null&&(t["tags-additional-args"]=process.env.TAGS_ADDITIONAL_ARGS.split(","))}function dt(t,e){var a;const r=d.resolve(e["tags-file"]),o=d.dirname(r),n=e["tags-additional-args"],s=ft(o);t.info(`Generating tags for tengo autocompletion from "${o}" in "${r}", additional arguments: "${n}".
23
+ Found ${s.length} tengo files...`);const i=ye.spawnSync("ctags",["-f",r,...n,"--langdef=tengo","--map-tengo=+.tengo","--kinddef-tengo=f,function,function","--regex-tengo=/^\\s*(.*)(:| :=| =) ?func.*/\\1/f/","--kinddef-tengo=c,constant,constant",'--regex-tengo=/^\\s*(.*) := ("|\\{).*/\\1/c/',"-R",...s],{env:process.env,stdio:"inherit",cwd:o});if((a=i.error)!=null&&a.message.includes("ENOENT")){console.log(`
24
24
  pl-tengo can create tags for tengo autocompletion,
25
25
  but the program should be installed
26
26
  with "brew install universal-ctags" on OSX
27
27
  or "sudo apt install universal-ctags" on Ubuntu.
28
28
 
29
29
  For vscode, you should also install ctags extension:
30
- https://marketplace.visualstudio.com/items?itemName=jaydenlin.ctags-support`);return}st(i,"failed to generate ctags"),t.info("Generation of tags is done.")}function rt(t){const e=u.readdirSync(t,{withFileTypes:!0,recursive:!0}),r=[];return e.forEach(o=>{if(!o.isDirectory()&&o.name.endsWith(".tengo")){const n=d.join(o.parentPath,o.name).replace(t,".");r.push(n)}}),r}function st(t,e){t.error&&console.log(t.error);const r=e;t.status!==0&&console.log(`WARN: ${r} the build will continue as-is`)}function ee(t,e){const r=k(),o=T(t,r,"dist","src",""),n=Q(t,r,"dist");for(const s of n.allLibs())t.debug(`Dumping to pl-tester: ${g(s.fullName)}`),e.write(JSON.stringify(s)+`
30
+ https://marketplace.visualstudio.com/items?itemName=jaydenlin.ctags-support`);return}pt(i,"failed to generate ctags"),t.info("Generation of tags is done.")}function ft(t){const e=p.readdirSync(t,{withFileTypes:!0,recursive:!0}),r=[];return e.forEach(o=>{if(!o.isDirectory()&&o.name.endsWith(".tengo")){const n=d.join(o.parentPath,o.name).replace(t,".");r.push(n)}}),r}function pt(t,e){t.error&&console.log(t.error);const r=e;t.status!==0&&console.log(`WARN: ${r} the build will continue as-is`)}function ie(t,e){const r=M(),o=j(t,r,"dist","src",""),n=oe(t,r,"dist");for(const s of n.allLibs())t.debug(`Dumping to pl-tester: ${g(s.fullName)}`),e.write(JSON.stringify(s)+`
31
31
  `);for(const s of o)s.fullName.type==="library"&&(t.debug(`Dumping to pl-tester: ${g(s.fullName)}`),e.write(JSON.stringify(s)+`
32
32
  `));for(const s of n.allTemplates())t.debug(`Dumping to pl-tester: ${g(s.fullName)}`),e.write(JSON.stringify(s)+`
33
33
  `);for(const s of o)s.fullName.type==="template"&&(t.debug(`Dumping to pl-tester: ${g(s.fullName)} ${s.srcName}`),e.write(JSON.stringify(s)+`
34
34
  `));for(const s of n.allSoftware())t.debug(`Dumping to pl-tester: ${g(s.fullName)}`),e.write(JSON.stringify(s)+`
35
35
  `);for(const s of o)s.fullName.type==="software"&&(t.debug(`Dumping to pl-tester: ${g(s.fullName)}`),e.write(JSON.stringify(s)+`
36
+ `));for(const s of n.allAssets())t.debug(`Dumping to pl-tester: ${g(s.fullName)}`),e.write(JSON.stringify(s)+`
37
+ `);for(const s of o)s.fullName.type==="asset"&&(t.debug(`Dumping to pl-tester: ${g(s.fullName)}`),e.write(JSON.stringify(s)+`
36
38
  `));for(const s of o)s.fullName.type==="test"&&(t.debug(`Dumping to pl-tester: ${g(s.fullName)} ${s.srcName}`),e.write(JSON.stringify(s)+`
37
- `))}function ot(t,e,r){const o=k(),n=T(t,o,"dist","src","");if(!e){for(const i of n)i.fullName.type==="library"&&r.write(JSON.stringify(i)+`
38
- `);return}const s=Q(t,o,"dist");for(const i of n)i.fullName.type==="library"&&s.addLib(i);for(const i of s.allLibs())r.write(JSON.stringify(i)+`
39
- `)}function nt(t,e){const r=k(),o=T(t,r,"dist","src","");for(const n of o)n.fullName.type==="template"&&e.write(JSON.stringify(n)+`
40
- `)}function it(t,e){const r=k(),o=T(t,r,"dist","src","");for(const n of o)n.fullName.type==="software"&&e.write(JSON.stringify(n)+`
41
- `)}function at(t,e){const r=k(),o=T(t,r,"dist","src","");for(const n of o)n.fullName.type==="test"&&e.write(JSON.stringify(n)+`
42
- `)}function $e(t,...e){const r=fe.spawn(t,e,{stdio:["pipe","inherit","inherit"]});return r.stdin.on("error",o=>{o.code}),r}function Ee(t){return new Promise((e,r)=>{t.on("close",o=>{e(o)}),t.on("error",o=>{r(o)})})}const E=class E extends h.Command{async run(){const{flags:e,argv:r}=await this.parse(E),o=$(e["log-level"]),n=r.length==0?["./src"]:r,s=$e(ue.TengoTesterBinaryPath,"check","--log-level",e["log-level"],"--artifacts","-",...n);try{ee(o,s.stdin)}catch(i){o.error(i)}finally{s.stdin.end();const i=await Ee(s);process.exit(i)}}};c(E,"description","check tengo sources for language processor an"),c(E,"strict",!1),c(E,"flags",{...Y}),c(E,"examples",["<%= config.bin %> <%= command.id %>"]);let _=E;const S=class S extends h.Command{async run(){const{flags:e}=await this.parse(S),r=$(e["log-level"]),o=this.argv.length==0?["./src"]:this.argv,n=$e(ue.TengoTesterBinaryPath,"run","--log-level",e["log-level"],"--artifacts","-",...o);try{ee(r,n.stdin)}catch(s){r.error(s)}finally{n.stdin.end();const s=await Ee(n);process.exit(s)}}};c(S,"description","run tengo unit tests (.test.tengo)"),c(S,"strict",!1),c(S,"flags",{...Y}),c(S,"examples",["<%= config.bin %> <%= command.id %>"]);let U=S;class B extends h.Command{async run(){const e=$();ee(e,O.stdout)}}c(B,"description","parse sources in current package and dump all found artifacts to stdout"),c(B,"examples",["<%= config.bin %> <%= command.id %>"]);const F=class F extends h.Command{async run(){const{flags:e}=await this.parse(F),r=$();ot(r,e.deps,O.stdout)}};c(F,"description","parse sources in current package and dump all found templates to stdout"),c(F,"examples",["<%= config.bin %> <%= command.id %>"]),c(F,"flags",{deps:h.Flags.boolean({name:"deps",description:"add also all libraries found in node_modules"})});let V=F;class Z extends h.Command{async run(){const e=$();it(e,O.stdout)}}c(Z,"description","parse sources in current package and dump all found tests to stdout"),c(Z,"examples",["<%= config.bin %> <%= command.id %>"]);class K extends h.Command{async run(){const e=$();nt(e,O.stdout)}}c(K,"description","parse sources in current package and dump all found templates to stdout"),c(K,"examples",["<%= config.bin %> <%= command.id %>"]);class X extends h.Command{async run(){const e=$();at(e,O.stdout)}}c(X,"description","parse sources in current package and dump all found tests to stdout"),c(X,"examples",["<%= config.bin %> <%= command.id %>"]);const ct={build:W,check:_,test:U,"dump:all":B,"dump:libs":V,"dump:software":Z,"dump:templates":K,"dump:tests":X};exports.COMMANDS=ct;
39
+ `))}function ut(t,e,r){const o=M(),n=j(t,o,"dist","src","");if(!e){for(const i of n)i.fullName.type==="library"&&r.write(JSON.stringify(i)+`
40
+ `);return}const s=oe(t,o,"dist");for(const i of n)i.fullName.type==="library"&&s.addLib(i);for(const i of s.allLibs())r.write(JSON.stringify(i)+`
41
+ `)}function C(t,e,r){const o=M(),n=j(t,o,"dist","src","");for(const s of n)s.fullName.type===r&&e.write(JSON.stringify(s)+`
42
+ `)}function mt(t,e){C(t,e,"template")}function gt(t,e){C(t,e,"software")}function ht(t,e){C(t,e,"asset")}function wt(t,e){C(t,e,"test")}function Fe(t,...e){const r=ye.spawn(t,e,{stdio:["pipe","inherit","inherit"]});return r.stdin.on("error",o=>{o.code}),r}function xe(t){return new Promise((e,r)=>{t.on("close",o=>{e(o)}),t.on("error",o=>{r(o)})})}const N=class N extends h.Command{async run(){const{flags:e,argv:r}=await this.parse(N),o=E(e["log-level"]),n=r.length==0?["./src"]:r,s=Fe($e.TengoTesterBinaryPath,"check","--log-level",e["log-level"],"--artifacts","-",...n);try{ie(o,s.stdin)}catch(i){o.error(i)}finally{s.stdin.end();const i=await xe(s);process.exit(i)}}};l(N,"description","check tengo sources for language processor an"),l(N,"strict",!1),l(N,"flags",{...ne}),l(N,"examples",["<%= config.bin %> <%= command.id %>"]);let Z=N;const S=class S extends h.Command{async run(){const{flags:e}=await this.parse(S),r=E(e["log-level"]),o=this.argv.length==0?["./src"]:this.argv,n=Fe($e.TengoTesterBinaryPath,"run","--log-level",e["log-level"],"--artifacts","-",...o);try{ie(r,n.stdin)}catch(s){r.error(s)}finally{n.stdin.end();const s=await xe(n);process.exit(s)}}};l(S,"description","run tengo unit tests (.test.tengo)"),l(S,"strict",!1),l(S,"flags",{...ne}),l(S,"examples",["<%= config.bin %> <%= command.id %>"]);let K=S;class X extends h.Command{async run(){const e=E();ie(e,T.stdout)}}l(X,"description","parse sources in current package and dump all found artifacts to stdout"),l(X,"examples",["<%= config.bin %> <%= command.id %>"]);class H extends h.Command{async run(){const e=E();ht(e,T.stdout)}}l(H,"description","parse sources in current package and dump all found tests to stdout"),l(H,"examples",["<%= config.bin %> <%= command.id %>"]);const A=class A extends h.Command{async run(){const{flags:e}=await this.parse(A),r=E();ut(r,e.deps,T.stdout)}};l(A,"description","parse sources in current package and dump all found templates to stdout"),l(A,"examples",["<%= config.bin %> <%= command.id %>"]),l(A,"flags",{deps:h.Flags.boolean({name:"deps",description:"add also all libraries found in node_modules"})});let Q=A;class Y extends h.Command{async run(){const e=E();gt(e,T.stdout)}}l(Y,"description","parse sources in current package and dump all found tests to stdout"),l(Y,"examples",["<%= config.bin %> <%= command.id %>"]);class ee extends h.Command{async run(){const e=E();mt(e,T.stdout)}}l(ee,"description","parse sources in current package and dump all found templates to stdout"),l(ee,"examples",["<%= config.bin %> <%= command.id %>"]);class te extends h.Command{async run(){const e=E();wt(e,T.stdout)}}l(te,"description","parse sources in current package and dump all found tests to stdout"),l(te,"examples",["<%= config.bin %> <%= command.id %>"]);const yt={build:V,check:Z,test:K,"dump:all":X,"dump:assets":H,"dump:libs":Q,"dump:software":Y,"dump:templates":ee,"dump:tests":te};exports.COMMANDS=yt;
43
43
  //# sourceMappingURL=index.js.map