diff --git a/.changeset/silent-rings-live.md b/.changeset/silent-rings-live.md new file mode 100644 index 0000000000..dc0ae13224 --- /dev/null +++ b/.changeset/silent-rings-live.md @@ -0,0 +1,6 @@ +--- +'@platforma-sdk/workflow-tengo-tests': minor +'@platforma-sdk/workflow-tengo': minor +--- + +smart: add cache for maps; add references to fields for resources diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 860d498fea..1ff76b44b0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1184,6 +1184,9 @@ importers: '@milaboratories/pl-middle-layer': specifier: workspace:* version: link:../../lib/node/pl-middle-layer + '@milaboratories/pl-tree': + specifier: workspace:* + version: link:../../lib/node/pl-tree '@milaboratories/platforma-build-configs': specifier: workspace:* version: link:../../lib/util/build-configs diff --git a/sdk/workflow-tengo/.gitattributes b/sdk/workflow-tengo/.gitattributes new file mode 100644 index 0000000000..480a568c0b --- /dev/null +++ b/sdk/workflow-tengo/.gitattributes @@ -0,0 +1 @@ +.tags -diff linguist-generated=true \ No newline at end of file diff --git a/sdk/workflow-tengo/.tags b/sdk/workflow-tengo/.tags deleted file mode 100644 index b970f8bb1d..0000000000 --- a/sdk/workflow-tengo/.tags +++ /dev/null @@ -1,1069 +0,0 @@ -!_TAG_EXTRA_DESCRIPTION anonymous /Include tags for non-named objects like lambda/ -!_TAG_EXTRA_DESCRIPTION fileScope /Include tags of file scope/ -!_TAG_EXTRA_DESCRIPTION pseudo /Include pseudo tags/ -!_TAG_EXTRA_DESCRIPTION subparser /Include tags generated by subparsers/ -!_TAG_FIELD_DESCRIPTION epoch /the last modified time of the input file (only for F\/file kind tag)/ -!_TAG_FIELD_DESCRIPTION file /File-restricted scoping/ -!_TAG_FIELD_DESCRIPTION input /input file/ -!_TAG_FIELD_DESCRIPTION name /tag name/ -!_TAG_FIELD_DESCRIPTION pattern /pattern/ -!_TAG_FIELD_DESCRIPTION typeref /Type and name of a variable or typedef/ -!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ -!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ -!_TAG_KIND_DESCRIPTION!tengo c,constant /constant/ -!_TAG_KIND_DESCRIPTION!tengo f,function /function/ -!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/ -!_TAG_OUTPUT_FILESEP slash /slash or backslash/ -!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/ -!_TAG_OUTPUT_VERSION 0.0 /current.age/ -!_TAG_PARSER_VERSION!tengo 0.0 /current.age/ -!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/ -!_TAG_PROC_CWD /Users/denkoren/work/milaboratory/platforma/tengo/tengo-sdk/ // -!_TAG_PROGRAM_AUTHOR Universal Ctags Team // -!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/ -!_TAG_PROGRAM_URL https://ctags.io/ /official site/ -!_TAG_PROGRAM_VERSION 6.1.0 // -* @param cb ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.proc.lib.tengo /^ * @param cb: func - a callback function to run in template body; the inputs passed to the bod/;" f -* @param cb ./src/workdir/proc.lib.tengo /^ * @param cb: func - a callback function to run in template body; the inputs passed to the bod/;" f -* @param fn ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/sets.lib.tengo /^ * @param fn: func(elem): newElem - a function that gets an element and returns a new element.$/;" f -* @param fn ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/slices.lib.tengo /^ * @param fn: func(any, element): new result.$/;" f -* @param fn ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/slices.lib.tengo /^ * @param fn: func(elem): int - a function that transforms an element to a key.$/;" f -* @param fn ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/slices.lib.tengo /^ * @param fn: func(elem): new elem - a function that gets an element and returns a transformed e/;" f -* @param fn ./src/sets.lib.tengo /^ * @param fn: func(elem): newElem - a function that gets an element and returns a new element.$/;" f -* @param fn ./src/slices.lib.tengo /^ * @param fn: func(any, element): new result.$/;" f -* @param fn ./src/slices.lib.tengo /^ * @param fn: func(elem): int - a function that transforms an element to a key.$/;" f -* @param fn ./src/slices.lib.tengo /^ * @param fn: func(elem): new elem - a function that gets an element and returns a transformed e/;" f -* @param fnK ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/maps.lib.tengo /^ * @param fnK: func(key): newKey - a function that gets a key and returns a new key.$/;" f -* @param fnK ./src/maps.lib.tengo /^ * @param fnK: func(key): newKey - a function that gets a key and returns a new key.$/;" f -* @param predicateFn ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/slices.lib.tengo /^ * @param predicateFn: func(elem): bool - a function that gets an element and returns a truthy o/;" f -* @param predicateFn ./src/slices.lib.tengo /^ * @param predicateFn: func(elem): bool - a function that gets an element and returns a truthy o/;" f -FTYPE_DYNAMIC ./src/constants.lib.tengo /^FTYPE_DYNAMIC := "dynamic"$/;" c -FTYPE_INPUT ./src/constants.lib.tengo /^FTYPE_INPUT := "input"$/;" c -FTYPE_OTW ./src/constants.lib.tengo /^FTYPE_OTW := "OTW" \/\/ Generic one-time writable field. The value of this field/;" c -FTYPE_OUTPUT ./src/constants.lib.tengo /^FTYPE_OUTPUT := "output"$/;" c -FTYPE_SERVICE ./src/constants.lib.tengo /^FTYPE_SERVICE := "service"$/;" c -INPUTS_MAP_FIELD ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.util.lib.tengo /^INPUTS_MAP_FIELD := "inputs"$/;" c -INPUTS_MAP_FIELD ./src/tpl/util.lib.tengo /^INPUTS_MAP_FIELD := "inputs"$/;" c -KEY_FIELD_NAME ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.constants.lib.tengo /^KEY_FIELD_NAME := "__key__"$/;" c -KEY_FIELD_NAME ./src/pframes/constants.lib.tengo /^KEY_FIELD_NAME := "__key__"$/;" c -KIND_P_COLUMN ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.constants.lib.tengo /^KIND_P_COLUMN := "PColumn"$/;" c -KIND_P_COLUMN ./src/pframes/constants.lib.tengo /^KIND_P_COLUMN := "PColumn"$/;" c -META_KEY_DESCRIPTOR ./src/exec/package.lib.tengo /^META_KEY_DESCRIPTOR := "ctl\/runner\/package\/descriptor"$/;" c -NO_PREFIX_EXPORT ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.constants.lib.tengo /^NO_PREFIX_EXPORT := "_"$/;" c -NO_PREFIX_EXPORT ./src/workflow/constants.lib.tengo /^NO_PREFIX_EXPORT := "_"$/;" c -PREPARE_MAP_FIELD_NAME ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.util.lib.tengo /^PREPARE_MAP_FIELD_NAME := "__prepare__"$/;" c -PREPARE_MAP_FIELD_NAME ./src/tpl/util.lib.tengo /^PREPARE_MAP_FIELD_NAME := "__prepare__"$/;" c -P_COLUMN_DATA_TYPE_PREFIX ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.constants.lib.tengo /^P_COLUMN_DATA_TYPE_PREFIX := "PColumnData\/"$/;" c -P_COLUMN_DATA_TYPE_PREFIX ./src/pframes/constants.lib.tengo /^P_COLUMN_DATA_TYPE_PREFIX := "PColumnData\/"$/;" c -RTYPE_BINARY_MAP ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_BINARY_MAP := { Name: "BinaryMap", Version: "1" }$/;" c -RTYPE_BINARY_MAP ./src/constants.lib.tengo /^RTYPE_BINARY_MAP := { Name: "BinaryMap", Version: "1" }$/;" c -RTYPE_BINARY_VALUE ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_BINARY_VALUE := { Name: "BinaryValue", Version: "1" }$/;" c -RTYPE_BINARY_VALUE ./src/constants.lib.tengo /^RTYPE_BINARY_VALUE := { Name: "BinaryValue", Version: "1" }$/;" c -RTYPE_BLOB_MAP ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_BLOB_MAP := { Name: "BlobMap", Version: "1" }$/;" c -RTYPE_BLOB_MAP ./src/constants.lib.tengo /^RTYPE_BLOB_MAP := { Name: "BlobMap", Version: "1" }$/;" c -RTYPE_BOBJECT_SPEC ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_BOBJECT_SPEC := { Name: "BObjectSpec", Version: "1" }$/;" c -RTYPE_BOBJECT_SPEC ./src/constants.lib.tengo /^RTYPE_BOBJECT_SPEC := { Name: "BObjectSpec", Version: "1" }$/;" c -RTYPE_BRESOLVE_CHOICE ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_BRESOLVE_CHOICE := { Name: "BResolveChoice", Version: "1" }$/;" c -RTYPE_BRESOLVE_CHOICE ./src/constants.lib.tengo /^RTYPE_BRESOLVE_CHOICE := { Name: "BResolveChoice", Version: "1" }$/;" c -RTYPE_BRESOLVE_FIRST ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_BRESOLVE_FIRST := { Name: "BResolveSingle", Version: "1" }$/;" c -RTYPE_BRESOLVE_FIRST ./src/constants.lib.tengo /^RTYPE_BRESOLVE_FIRST := { Name: "BResolveSingle", Version: "1" }$/;" c -RTYPE_BRESOLVE_NO_RESULT ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_BRESOLVE_NO_RESULT := { Name: "BResolveSingleNoResult", Version: "1" }$/;" c -RTYPE_BRESOLVE_NO_RESULT ./src/constants.lib.tengo /^RTYPE_BRESOLVE_NO_RESULT := { Name: "BResolveSingleNoResult", Version: "1" }$/;" c -RTYPE_CONTEXT ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_CONTEXT := { Name: "BContext", Version: "1" }$/;" c -RTYPE_CONTEXT ./src/constants.lib.tengo /^RTYPE_CONTEXT := { Name: "BContext", Version: "1" }$/;" c -RTYPE_CONTEXT_END ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_CONTEXT_END := { Name: "BContextEnd", Version: "1" }$/;" c -RTYPE_CONTEXT_END ./src/constants.lib.tengo /^RTYPE_CONTEXT_END := { Name: "BContextEnd", Version: "1" }$/;" c -RTYPE_JSON ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_JSON := { Name: "json\/object", Version: "1" }$/;" c -RTYPE_JSON ./src/constants.lib.tengo /^RTYPE_JSON := { Name: "json\/object", Version: "1" }$/;" c -RTYPE_JSON_ERROR ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_JSON_ERROR := { Name: "json\/resourceError", Version: "1"}$/;" c -RTYPE_JSON_ERROR ./src/constants.lib.tengo /^RTYPE_JSON_ERROR := { Name: "json\/resourceError", Version: "1"}$/;" c -RTYPE_MAP ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_MAP := { Name: "std\/map", Version: "1" }$/;" c -RTYPE_MAP ./src/constants.lib.tengo /^RTYPE_MAP := { Name: "std\/map", Version: "1" }$/;" c -RTYPE_MAP_ALT ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_MAP_ALT := { Name: "StdMap", Version: "1" }$/;" c -RTYPE_MAP_ALT ./src/constants.lib.tengo /^RTYPE_MAP_ALT := { Name: "StdMap", Version: "1" }$/;" c -RTYPE_MAP_EPH ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_MAP_EPH := { Name: "EphStdMap", Version: "1" }$/;" c -RTYPE_MAP_EPH ./src/constants.lib.tengo /^RTYPE_MAP_EPH := { Name: "EphStdMap", Version: "1" }$/;" c -RTYPE_OBJECT_SPEC ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_OBJECT_SPEC := { Name: "BObjectSpec", Version: "1" }$/;" c -RTYPE_OBJECT_SPEC ./src/constants.lib.tengo /^RTYPE_OBJECT_SPEC := { Name: "BObjectSpec", Version: "1" }$/;" c -RTYPE_P_COLUMN_DATA_BINARY ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.constants.lib.tengo /^RTYPE_P_COLUMN_DATA_BINARY := { Name: P_COLUMN_DATA_TYPE_PREFIX + "Binary", Version: "1" }$/;" c -RTYPE_P_COLUMN_DATA_BINARY ./src/pframes/constants.lib.tengo /^RTYPE_P_COLUMN_DATA_BINARY := { Name: P_COLUMN_DATA_TYPE_PREFIX + "Binary", Version: "1" }$/;" c -RTYPE_P_COLUMN_DATA_BINARY_PARTITIONED ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.constants.lib.tengo /^RTYPE_P_COLUMN_DATA_BINARY_PARTITIONED := { Name: P_COLUMN_DATA_TYPE_PREFIX + "BinaryPartitioned/;" c -RTYPE_P_COLUMN_DATA_BINARY_PARTITIONED ./src/pframes/constants.lib.tengo /^RTYPE_P_COLUMN_DATA_BINARY_PARTITIONED := { Name: P_COLUMN_DATA_TYPE_PREFIX + "BinaryPartitioned/;" c -RTYPE_P_COLUMN_DATA_BINARY_SUPER_PARTITIONED ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.constants.lib.tengo /^RTYPE_P_COLUMN_DATA_BINARY_SUPER_PARTITIONED := { Name: P_COLUMN_SUPER_PARTITIONED_DATA_TYPE_PRE/;" c -RTYPE_P_COLUMN_DATA_BINARY_SUPER_PARTITIONED ./src/pframes/constants.lib.tengo /^RTYPE_P_COLUMN_DATA_BINARY_SUPER_PARTITIONED := { Name: P_COLUMN_SUPER_PARTITIONED_DATA_TYPE_PRE/;" c -RTYPE_P_COLUMN_DATA_JSON ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.constants.lib.tengo /^RTYPE_P_COLUMN_DATA_JSON := { Name: P_COLUMN_DATA_TYPE_PREFIX + "Json", Version: "1" }$/;" c -RTYPE_P_COLUMN_DATA_JSON ./src/pframes/constants.lib.tengo /^RTYPE_P_COLUMN_DATA_JSON := { Name: P_COLUMN_DATA_TYPE_PREFIX + "Json", Version: "1" }$/;" c -RTYPE_P_COLUMN_DATA_JSON_PARTITIONED ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.constants.lib.tengo /^RTYPE_P_COLUMN_DATA_JSON_PARTITIONED := { Name: P_COLUMN_DATA_TYPE_PREFIX + "JsonPartitioned", V/;" c -RTYPE_P_COLUMN_DATA_JSON_PARTITIONED ./src/pframes/constants.lib.tengo /^RTYPE_P_COLUMN_DATA_JSON_PARTITIONED := { Name: P_COLUMN_DATA_TYPE_PREFIX + "JsonPartitioned", V/;" c -RTYPE_P_COLUMN_DATA_JSON_SUPER_PARTITIONED ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.constants.lib.tengo /^RTYPE_P_COLUMN_DATA_JSON_SUPER_PARTITIONED := { Name: P_COLUMN_SUPER_PARTITIONED_DATA_TYPE_PREFI/;" c -RTYPE_P_COLUMN_DATA_JSON_SUPER_PARTITIONED ./src/pframes/constants.lib.tengo /^RTYPE_P_COLUMN_DATA_JSON_SUPER_PARTITIONED := { Name: P_COLUMN_SUPER_PARTITIONED_DATA_TYPE_PREFI/;" c -RTYPE_P_COLUMN_DATA_RESOURCE_MAP ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.constants.lib.tengo /^RTYPE_P_COLUMN_DATA_RESOURCE_MAP := { Name: P_COLUMN_DATA_TYPE_PREFIX + "ResourceMap", Version: /;" c -RTYPE_P_COLUMN_DATA_RESOURCE_MAP ./src/pframes/constants.lib.tengo /^RTYPE_P_COLUMN_DATA_RESOURCE_MAP := { Name: P_COLUMN_DATA_TYPE_PREFIX + "ResourceMap", Version: /;" c -RTYPE_P_COLUMN_DATA_RESOURCE_MAP_PARTITIONED ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.constants.lib.tengo /^RTYPE_P_COLUMN_DATA_RESOURCE_MAP_PARTITIONED := { Name: P_COLUMN_DATA_TYPE_PREFIX + "Partitioned/;" c -RTYPE_P_COLUMN_DATA_RESOURCE_MAP_PARTITIONED ./src/pframes/constants.lib.tengo /^RTYPE_P_COLUMN_DATA_RESOURCE_MAP_PARTITIONED := { Name: P_COLUMN_DATA_TYPE_PREFIX + "Partitioned/;" c -RTYPE_QUERY_RESULT ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_QUERY_RESULT := { Name: "BQueryResult", Version: "1" }$/;" c -RTYPE_QUERY_RESULT ./src/constants.lib.tengo /^RTYPE_QUERY_RESULT := { Name: "BQueryResult", Version: "1" }$/;" c -RTYPE_RENDER_EPH_TEMPLATE ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_RENDER_EPH_TEMPLATE := { Name: "EphRenderTemplate", Version: "1" }$/;" c -RTYPE_RENDER_EPH_TEMPLATE ./src/constants.lib.tengo /^RTYPE_RENDER_EPH_TEMPLATE := { Name: "EphRenderTemplate", Version: "1" }$/;" c -RTYPE_RENDER_TEMPLATE ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_RENDER_TEMPLATE := { Name: "RenderTemplate", Version: "1" }$/;" c -RTYPE_RENDER_TEMPLATE ./src/constants.lib.tengo /^RTYPE_RENDER_TEMPLATE := { Name: "RenderTemplate", Version: "1" }$/;" c -RTYPE_WORKDIR_CREATE ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_WORKDIR_CREATE := { Name: "WorkdirCreate", Version: "1" }$/;" c -RTYPE_WORKDIR_CREATE ./src/constants.lib.tengo /^RTYPE_WORKDIR_CREATE := { Name: "WorkdirCreate", Version: "1" }$/;" c -RTYPE_WORKDIR_FILL ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_WORKDIR_FILL := { Name: "WorkdirFill", Version: "1" }$/;" c -RTYPE_WORKDIR_FILL ./src/constants.lib.tengo /^RTYPE_WORKDIR_FILL := { Name: "WorkdirFill", Version: "1" }$/;" c -RTYPE_WORKDIR_FILL_RULES ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_WORKDIR_FILL_RULES := { Name: "WorkdirFill\/rules", Version: "1" }$/;" c -RTYPE_WORKDIR_FILL_RULES ./src/constants.lib.tengo /^RTYPE_WORKDIR_FILL_RULES := { Name: "WorkdirFill\/rules", Version: "1" }$/;" c -RTYPE_WORKDIR_SAVE ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_WORKDIR_SAVE := { Name: "WorkdirSave", Version: "1" }$/;" c -RTYPE_WORKDIR_SAVE ./src/constants.lib.tengo /^RTYPE_WORKDIR_SAVE := { Name: "WorkdirSave", Version: "1" }$/;" c -RTYPE_WORKDIR_SAVE_RULES ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/constants.lib.tengo /^RTYPE_WORKDIR_SAVE_RULES := { Name: "WorkdirSave\/rules", Version: "1" }$/;" c -RTYPE_WORKDIR_SAVE_RULES ./src/constants.lib.tengo /^RTYPE_WORKDIR_SAVE_RULES := { Name: "WorkdirSave\/rules", Version: "1" }$/;" c -TEMPLATE_FIELD ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.util.lib.tengo /^TEMPLATE_FIELD := "template"$/;" c -TEMPLATE_FIELD ./src/tpl/util.lib.tengo /^TEMPLATE_FIELD := "template"$/;" c -TEMPLATE_OUTPUT_PREFIX ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.util.lib.tengo /^TEMPLATE_OUTPUT_PREFIX := "outputs\/"$/;" c -TEMPLATE_OUTPUT_PREFIX ./src/tpl/util.lib.tengo /^TEMPLATE_OUTPUT_PREFIX := "outputs\/"$/;" c -TestGetBasenameDirs ./src/path.test.tengo /^TestGetBasenameDirs := func() {$/;" f -TestGetExtension ./src/path.test.tengo /^TestGetExtension := func() {$/;" f -TestMiLength ./src/slices.test.tengo /^TestMiLength := func() {$/;" f -TestMiSliceAppend ./src/slices.test.tengo /^TestMiSliceAppend := func() {$/;" f -TestSplit ./src/path.test.tengo /^TestSplit := func() {$/;" f -TestValidateJSONGeneral ./src/validation.test.tengo /^TestValidateJSONGeneral := func() {$/;" f -TestValidateJSONOrArrays ./src/validation.test.tengo /^TestValidateJSONOrArrays := func() {$/;" f -VALUE_FIELD_NAME ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.constants.lib.tengo /^VALUE_FIELD_NAME := "__value__"$/;" c -VALUE_FIELD_NAME ./src/pframes/constants.lib.tengo /^VALUE_FIELD_NAME := "__value__"$/;" c -_ARG_VAR_JAVA ./src/exec/internal.lib.tengo /^_ARG_VAR_JAVA := "{java}" \/\/ abs path to 'java' run environment$/;" c -_ARG_VAR_PKG ./src/exec/internal.lib.tengo /^_ARG_VAR_PKG := "{pkg}" \/\/ abs path to software package$/;" c -_ARG_VAR_PYTHON ./src/exec/internal.lib.tengo /^_ARG_VAR_PYTHON := "{python}" \/\/ abs path to 'python' run environment$/;" c -_BLOCK_ID_FIELD ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.context.lib.tengo /^_BLOCK_ID_FIELD := "id"$/;" c -_BLOCK_ID_FIELD ./src/workflow/context.lib.tengo /^_BLOCK_ID_FIELD := "id"$/;" c -_CONTEXT_FIELD_NAME ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.bquery.lib.tengo /^_CONTEXT_FIELD_NAME := "ctx"$/;" c -_CONTEXT_FIELD_NAME ./src/workflow/bquery.lib.tengo /^_CONTEXT_FIELD_NAME := "ctx"$/;" c -_DEFAULT_OPTIONS ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.bquery.lib.tengo /^_DEFAULT_OPTIONS := {$/;" c -_DEFAULT_OPTIONS ./src/workflow/bquery.lib.tengo /^_DEFAULT_OPTIONS := {$/;" c -_EXPORTS_OUTPUT_PREFIX ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.context.lib.tengo /^_EXPORTS_OUTPUT_PREFIX := "values\/"$/;" c -_EXPORTS_OUTPUT_PREFIX ./src/workflow/context.lib.tengo /^_EXPORTS_OUTPUT_PREFIX := "values\/"$/;" c -_HEAVY_QUEUE ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^_HEAVY_QUEUE := "heavy"$/;" c -_HEAVY_QUEUE ./src/exec/index.lib.tengo /^_HEAVY_QUEUE := "heavy"$/;" c -_INPUT_ARCHIVE ./src/exec/package.lib.tengo /^_INPUT_ARCHIVE := "archive"$/;" c -_INPUT_CONTEXT_FIELD_NAME ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.lib.tengo /^_INPUT_CONTEXT_FIELD_NAME := "context"$/;" c -_INPUT_CONTEXT_FIELD_NAME ./src/workflow/index.lib.tengo /^_INPUT_CONTEXT_FIELD_NAME := "context"$/;" c -_INPUT_PACKAGE ./src/exec/package.lib.tengo /^_INPUT_PACKAGE := "package"$/;" c -_INPUT_PACKAGES_MAP ./src/exec/runenv.lib.tengo /^_INPUT_PACKAGES_MAP := "packagesMap"$/;" c -_INPUT_PACKAGE_NAME ./src/exec/package.lib.tengo /^_INPUT_PACKAGE_NAME := "packageName"$/;" c -_INPUT_PACKAGE_USE_SETTINGS ./src/exec/package.lib.tengo /^_INPUT_PACKAGE_USE_SETTINGS := "settings"$/;" c -_INPUT_REGISTRY ./src/exec/package.lib.tengo /^_INPUT_REGISTRY := "registry"$/;" c -_INPUT_SETTINGS ./src/exec/runenv.lib.tengo /^_INPUT_SETTINGS := "settings"$/;" c -_INPUT_WD_IN ./src/exec/package.lib.tengo /^_INPUT_WD_IN := "workdirIn"$/;" c -_INPUT_WD_IN ./src/exec/runenv.lib.tengo /^_INPUT_WD_IN := "workdirIn"$/;" c -_OPTIONS_SCHEME ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.bquery.lib.tengo /^_OPTIONS_SCHEME := {$/;" c -_OPTIONS_SCHEME ./src/workflow/bquery.lib.tengo /^_OPTIONS_SCHEME := {$/;" c -_OUTPUT_ARCHIVE ./src/exec/package.lib.tengo /^_OUTPUT_ARCHIVE := "archive"$/;" c -_OUTPUT_CONTEXT_FIELD_NAME ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.lib.tengo /^_OUTPUT_CONTEXT_FIELD_NAME := "context"$/;" c -_OUTPUT_CONTEXT_FIELD_NAME ./src/workflow/index.lib.tengo /^_OUTPUT_CONTEXT_FIELD_NAME := "context"$/;" c -_OUTPUT_PACKAGE ./src/exec/package.lib.tengo /^_OUTPUT_PACKAGE := "package"$/;" c -_OUTPUT_RUN_ENV ./src/exec/runenv.lib.tengo /^_OUTPUT_RUN_ENV := "runEnv"$/;" c -_OUTPUT_WD_OUT ./src/exec/package.lib.tengo /^_OUTPUT_WD_OUT := "workdirOut"$/;" c -_OUTPUT_WD_OUT ./src/exec/runenv.lib.tengo /^_OUTPUT_WD_OUT := "workdirOut"$/;" c -_PARENT_CTX_FIELD ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.context.lib.tengo /^_PARENT_CTX_FIELD := "parent"$/;" c -_PARENT_CTX_FIELD ./src/workflow/context.lib.tengo /^_PARENT_CTX_FIELD := "parent"$/;" c -_PREPARED_INPUTS_PREFIX ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.lib.tengo /^_PREPARED_INPUTS_PREFIX := "prepared\/"$/;" c -_PREPARED_INPUTS_PREFIX ./src/workflow/index.lib.tengo /^_PREPARED_INPUTS_PREFIX := "prepared\/"$/;" c -_PROGRESS_FIELD ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^_PROGRESS_FIELD := "progress"$/;" c -_PROGRESS_FIELD ./src/workdir/save.lib.tengo /^_PROGRESS_FIELD := "progress"$/;" c -_RESULTS_FIELD_NAME ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.lib.tengo /^_RESULTS_FIELD_NAME := "result"$/;" c -_RESULTS_FIELD_NAME ./src/workflow/index.lib.tengo /^_RESULTS_FIELD_NAME := "result"$/;" c -_RTYPE_BLOB_DOWNLOAD ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/file.lib.tengo /^_RTYPE_BLOB_DOWNLOAD := { Name: "BlobDownload", Version: "2" }$/;" c -_RTYPE_BLOB_DOWNLOAD ./src/file.lib.tengo /^_RTYPE_BLOB_DOWNLOAD := { Name: "BlobDownload", Version: "2" }$/;" c -_RTYPE_BLOB_IMPORT_INTERNAL ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/file.lib.tengo /^_RTYPE_BLOB_IMPORT_INTERNAL := { Name: "BlobImportInternal", Version: "1" }$/;" c -_RTYPE_BLOB_IMPORT_INTERNAL ./src/file.lib.tengo /^_RTYPE_BLOB_IMPORT_INTERNAL := { Name: "BlobImportInternal", Version: "1" }$/;" c -_RTYPE_BLOB_UPLOAD ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/file.lib.tengo /^_RTYPE_BLOB_UPLOAD := { Name: "BlobUpload", Version: "1" }$/;" c -_RTYPE_BLOB_UPLOAD ./src/file.lib.tengo /^_RTYPE_BLOB_UPLOAD := { Name: "BlobUpload", Version: "1" }$/;" c -_RTYPE_CREATE_STREAM ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.stream.lib.tengo /^_RTYPE_CREATE_STREAM := { Name: "CreateStream", Version: "2" }$/;" c -_RTYPE_CREATE_STREAM ./src/exec/stream.lib.tengo /^_RTYPE_CREATE_STREAM := { Name: "CreateStream", Version: "2" }$/;" c -_RTYPE_PACKAGE_GET ./src/exec/package.lib.tengo /^_RTYPE_PACKAGE_GET := { Name: "PackageGet", Version: "1" }$/;" c -_RTYPE_PACKAGE_INSTALL ./src/exec/package.lib.tengo /^_RTYPE_PACKAGE_INSTALL := { Name: "PackageInstall", Version: "1" }$/;" c -_RTYPE_PACKAGE_PUT_ASSET ./src/exec/package.lib.tengo /^_RTYPE_PACKAGE_PUT_ASSET := { Name: "PackagePutAssetsToWD", Version: "1" }$/;" c -_RTYPE_PACKAGE_USE ./src/exec/package.lib.tengo /^_RTYPE_PACKAGE_USE := { Name: "PackageUse", Version: "1" }$/;" c -_RTYPE_RUN_COMMAND ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^_RTYPE_RUN_COMMAND := { Name: "RunCommand", Version: "1" }$/;" c -_RTYPE_RUN_COMMAND ./src/exec/runcmd.lib.tengo /^_RTYPE_RUN_COMMAND := { Name: "RunCommand\/executor", Version: "1" }$/;" c -_RTYPE_RUN_COMMAND_ARGS ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^_RTYPE_RUN_COMMAND_ARGS := { Name: "RunCommandArgs", Version: "1" }$/;" c -_RTYPE_RUN_COMMAND_ARGS ./src/exec/runcmd.lib.tengo /^_RTYPE_RUN_COMMAND_ARGS := { Name: "RunCommandArgs", Version: "1" }$/;" c -_RTYPE_RUN_COMMAND_CMD ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^_RTYPE_RUN_COMMAND_CMD := { Name: "RunCommandCmd", Version: "1" }$/;" c -_RTYPE_RUN_COMMAND_CMD ./src/exec/runcmd.lib.tengo /^_RTYPE_RUN_COMMAND_CMD := { Name: "RunCommandCmd", Version: "1" }$/;" c -_RTYPE_RUN_COMMAND_OPTIONS ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^_RTYPE_RUN_COMMAND_OPTIONS := { Name: "run-command\/options", Version: "1" }$/;" c -_RTYPE_RUN_COMMAND_OPTIONS ./src/exec/runcmd.lib.tengo /^_RTYPE_RUN_COMMAND_OPTIONS := { Name: "run-command\/options", Version: "1" }$/;" c -_RTYPE_RUN_COMMAND_REFS ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^_RTYPE_RUN_COMMAND_REFS := { Name: "RunCommandRefs", Version: "1" }$/;" c -_RTYPE_RUN_COMMAND_REFS ./src/exec/runcmd.lib.tengo /^_RTYPE_RUN_COMMAND_REFS := { Name: "RunCommandRefs", Version: "1" }$/;" c -_RTYPE_SAVE_RUN_ENV ./src/exec/runenv.lib.tengo /^_RTYPE_SAVE_RUN_ENV := { Name: "SaveRunEnv\/executor", Version: "1" }$/;" c -_RTYPE_STREAM_MANAGER ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.stream.lib.tengo /^_RTYPE_STREAM_MANAGER := { Name: "StreamManager", Version: "2" }$/;" c -_RTYPE_STREAM_MANAGER ./src/exec/stream.lib.tengo /^_RTYPE_STREAM_MANAGER := { Name: "StreamManager", Version: "2" }$/;" c -_RTYPE_TEST_EPH ./src/test/kv/kv.tpl.tengo /^_RTYPE_TEST_EPH := { Name: "TestEph", Version: "1" }$/;" c -_RULES_FIELD ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^_RULES_FIELD := "rules"$/;" c -_RULES_FIELD ./src/workdir/save.lib.tengo /^_RULES_FIELD := "rules"$/;" c -_SAVED_CONTENT_FIELD ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^_SAVED_CONTENT_FIELD := "dataOut"$/;" c -_SAVED_CONTENT_FIELD ./src/workdir/save.lib.tengo /^_SAVED_CONTENT_FIELD := "dataOut"$/;" c -_SAVED_FILES_FIELD ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^_SAVED_FILES_FIELD := "blobsOut"$/;" c -_SAVED_FILES_FIELD ./src/workdir/save.lib.tengo /^_SAVED_FILES_FIELD := "blobsOut"$/;" c -_SPEC_AXES_SCHEMA ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.xsv.lib.tengo /^_SPEC_AXES_SCHEMA := {$/;" c -_SPEC_AXES_SCHEMA ./src/pframes/xsv.lib.tengo /^_SPEC_AXES_SCHEMA := {$/;" c -_SPEC_COLUMN_SCHEMA ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.xsv.lib.tengo /^_SPEC_COLUMN_SCHEMA := {$/;" c -_SPEC_COLUMN_SCHEMA ./src/pframes/xsv.lib.tengo /^_SPEC_COLUMN_SCHEMA := {$/;" c -_SPEC_INDEX_SCHEMA ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.xsv.lib.tengo /^_SPEC_INDEX_SCHEMA := {$/;" c -_SPEC_INDEX_SCHEMA ./src/pframes/xsv.lib.tengo /^_SPEC_INDEX_SCHEMA := {$/;" c -_SPEC_SCHEMA ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.xsv.lib.tengo /^_SPEC_SCHEMA := {$/;" c -_SPEC_SCHEMA ./src/pframes/xsv.lib.tengo /^_SPEC_SCHEMA := {$/;" c -_SUBSCRIPTION_FIELD ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/render.lib.tengo /^_SUBSCRIPTION_FIELD := "subscription"$/;" c -_SUBSCRIPTION_FIELD ./src/render.lib.tengo /^_SUBSCRIPTION_FIELD := "subscription"$/;" c -_UI_TASKS_QUEUE ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^_UI_TASKS_QUEUE := "ui-tasks"$/;" c -_UI_TASKS_QUEUE ./src/exec/index.lib.tengo /^_UI_TASKS_QUEUE := "ui-tasks"$/;" c -_WORKDIR_AFTER_FIELD ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^_WORKDIR_AFTER_FIELD := "workdirOut"$/;" c -_WORKDIR_AFTER_FIELD ./src/workdir/save.lib.tengo /^_WORKDIR_AFTER_FIELD := "workdirOut"$/;" c -_WORKDIR_IN_FIELD ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^_WORKDIR_IN_FIELD := "workdirIn"$/;" c -_WORKDIR_IN_FIELD ./src/workdir/save.lib.tengo /^_WORKDIR_IN_FIELD := "workdirIn"$/;" c -_addDirs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^ _addDirs: func(fileName) {$/;" f -_addDirs ./src/workdir/index.lib.tengo /^ _addDirs: func(fileName) {$/;" f -_argToExec ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^_argToExec := func(arg, isExec, pathToBinary) {$/;" f -_binPackageCallOptions ./src/exec/internal.lib.tengo /^_binPackageCallOptions := func(runOptions, variables, descriptor, softPackage) {$/;" f -_buildOutputs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.lib.tengo /^_buildOutputs := func(results) {$/;" f -_buildOutputs ./src/workflow/index.lib.tengo /^_buildOutputs := func(results) {$/;" f -_create ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.stream.lib.tengo /^_create := func(workdir, filePath) {$/;" f -_create ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^_create := func() {$/;" f -_create ./src/exec/stream.lib.tengo /^_create := func(workdir, filePath) {$/;" f -_createExecutableArg ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^_createExecutableArg := func(executableName, pathToBinary) {$/;" f -_createSimpleArg ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^_createSimpleArg := func(argument) {$/;" f -_createSimpleArg ./src/exec/runcmd.lib.tengo /^_createSimpleArg := func(argument) {$/;" f -_createVariableArg ./src/exec/runcmd.lib.tengo /^_createVariableArg := func(argTpl) {$/;" f -_createVenvWithPip ./src/exec/create-python-venv.tpl.tengo /^_createVenvWithPip := func(inputs) {$/;" f -_devLocalPackageCallOptions ./src/exec/internal.lib.tengo /^_devLocalPackageCallOptions := func(runOptions) {$/;" f -_directCallOptions ./src/exec/internal.lib.tengo /^_directCallOptions := func(runOptions) {$/;" f -_fill ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^_fill := func(workdir) {$/;" f -_fill ./src/workdir/index.lib.tengo /^_fill := func(workdir) {$/;" f -_formatKeyPath ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^_formatKeyPath := func(current, format, key) {$/;" f -_formatKeyPath ./src/validation.lib.tengo /^_formatKeyPath := func(current, format, key) {$/;" f -_getAllDirs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^ _getAllDirs: func(fileName) {$/;" f -_getAllDirs ./src/workdir/index.lib.tengo /^ _getAllDirs: func(fileName) {$/;" f -_getDirFillRule ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^_getDirFillRule := func(dir) {$/;" f -_getDirFillRule ./src/workdir/index.lib.tengo /^_getDirFillRule := func(dir) {$/;" f -_getFileFillRule ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^_getFileFillRule := func(filePath, extension) {$/;" f -_getFileFillRule ./src/workdir/index.lib.tengo /^_getFileFillRule := func(filePath, extension) {$/;" f -_getFutureField ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^_getFutureField := func(from, name, fieldType) {$/;" f -_getFutureField ./src/smart.lib.tengo /^_getFutureField := func(from, name, fieldType) {$/;" f -_getPColumnRType ./src/pframes/import-dir.tpl.tengo /^_getPColumnRType := func(storageType) {$/;" f -_getPColumnRtype ./src/pframes/import-xsv-map.tpl.tengo /^_getPColumnRtype := func(supKeyLen, keyLen, storageFormat) {$/;" f -_getValueFillRule ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^_getValueFillRule := func(filePath) {$/;" f -_getValueFillRule ./src/workdir/index.lib.tengo /^_getValueFillRule := func(filePath) {$/;" f -_hasField ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ _hasField: func(fieldMapName, fieldName) {$/;" f -_hasField ./src/smart.lib.tengo /^ _hasField: func(fieldMapName, fieldName) {$/;" f -_hasReferenceValues ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^_hasReferenceValues := func(object) {$/;" f -_hasReferenceValues ./src/smart.lib.tengo /^_hasReferenceValues := func(object) {$/;" f -_installSoftware ./src/exec/internal.lib.tengo /^_installSoftware := func(registry, pkgName) {$/;" f -_isProduction ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.lib.tengo /^_isProduction := func() {$/;" f -_isProduction ./src/workflow/index.lib.tengo /^_isProduction := func() {$/;" f -_isStaging ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.lib.tengo /^_isStaging := func() {$/;" f -_isStaging ./src/workflow/index.lib.tengo /^_isStaging := func() {$/;" f -_loadJavaRunEnvironment ./src/exec/internal.lib.tengo /^_loadJavaRunEnvironment := func(descriptor) {$/;" f -_loadPythonRunEnvironment ./src/exec/internal.lib.tengo /^_loadPythonRunEnvironment := func(descriptor, softName, softPkg) {$/;" f -_loadRunEnvironment ./src/exec/internal.lib.tengo /^_loadRunEnvironment := func(descriptor, softName, softPackage) {$/;" f -_manager ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.stream.lib.tengo /^_manager := func(stream, downloadableRef) {$/;" f -_manager ./src/exec/stream.lib.tengo /^_manager := func(stream, downloadableRef) {$/;" f -_mapBuilder ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^_mapBuilder := func(isEph) {$/;" f -_mapBuilder ./src/smart.lib.tengo /^_mapBuilder := func(isEph) {$/;" f -_newArg ./src/exec/internal.lib.tengo /^_newArg := func(hasVariables, value) {$/;" f -_newRefVar ./src/exec/internal.lib.tengo /^_newRefVar := func(varName, refName, reference) {$/;" f -_pObjectSpecSchema ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.bobject.lib.tengo /^_pObjectSpecSchema := {$/;" c -_pObjectSpecSchema ./src/workflow/bobject.lib.tengo /^_pObjectSpecSchema := {$/;" c -_parentContext ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.lib.tengo /^_parentContext := func() {$/;" f -_parentContext ./src/workflow/index.lib.tengo /^_parentContext := func() {$/;" f -_parseTags ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^_parseTags := func(rule) {$/;" f -_parseTags ./src/validation.lib.tengo /^_parseTags := func(rule) {$/;" f -_remotePackageCallOptions ./src/exec/internal.lib.tengo /^_remotePackageCallOptions := func(runOptions) {$/;" f -_runBinaryCommand ./src/exec/exec.tpl.tengo /^_runBinaryCommand := func(inputs) {$/;" f -_sepOrDefault ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/path.lib.tengo /^_sepOrDefault := func(...sep) {$/;" f -_sepOrDefault ./src/path.lib.tengo /^_sepOrDefault := func(...sep) {$/;" f -_toRefOrJson ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^_toRefOrJson := func(object) {$/;" f -_toRefOrJson ./src/smart.lib.tengo /^_toRefOrJson := func(object) {$/;" f -_unmarshal ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^_unmarshal := func(resource, preprocessors) {$/;" f -_unmarshal ./src/tpl/index.lib.tengo /^_unmarshal := func(resource, preprocessors) {$/;" f -_useSettingsSchema ./src/exec/package.lib.tengo /^_useSettingsSchema := {$/;" c -_validateInputs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ _validateInputs: func() {$/;" f -_validateInputs ./src/tpl/index.lib.tengo /^ _validateInputs: func() {$/;" f -_validateJson ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^_validateJson := func(js, schema, keyPath, ...stack) {$/;" f -_validateJson ./src/validation.lib.tengo /^_validateJson := func(js, schema, keyPath, ...stack) {$/;" f -_validateTypes ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^_validateTypes := func(js, tags, keyPath, ...stack) {$/;" f -_validateTypes ./src/validation.lib.tengo /^_validateTypes := func(js, tags, keyPath, ...stack) {$/;" f -add ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/sets.lib.tengo /^add := func(set, ...elements) {$/;" f -add ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ add: func(key, value) {$/;" f -add ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.context.lib.tengo /^ add: func(name, value) {$/;" f -add ./src/sets.lib.tengo /^add := func(set, ...elements) {$/;" f -add ./src/smart.lib.tengo /^ add: func(key, value) {$/;" f -add ./src/workflow/context.lib.tengo /^ add: func(name, value) {$/;" f -addFile ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ addFile: func(fileName, file) {$/;" f -addFile ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^ addFile: func(fileName, fileResource) {$/;" f -addFile ./src/exec/index.lib.tengo /^ addFile: func(fileName, file) {$/;" f -addFile ./src/workdir/index.lib.tengo /^ addFile: func(fileName, fileResource) {$/;" f -addFiles ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ addFiles: func(filesMap) {$/;" f -addFiles ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^ addFiles: func(fileMap) {$/;" f -addFiles ./src/exec/index.lib.tengo /^ addFiles: func(filesMap) {$/;" f -addFiles ./src/workdir/index.lib.tengo /^ addFiles: func(fileMap) {$/;" f -addJson ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ addJson: func(key, value) {$/;" f -addJson ./src/smart.lib.tengo /^ addJson: func(key, value) {$/;" f -addPackage ./src/exec/runenv.lib.tengo /^ addPackage: func(key, pkgRef) {$/;" f -addPath ./src/exec/runenv.lib.tengo /^ addPath: func(path) {$/;" f -addRef ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ addRef: func(key, value) {$/;" f -addRef ./src/smart.lib.tengo /^ addRef: func(key, value) {$/;" f -addSubscription ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.state-await.lib.tengo /^ addSubscription := func(subscription) {$/;" f -addSubscription ./src/tpl/state-await.lib.tengo /^ addSubscription := func(subscription) {$/;" f -addToPath ./src/exec/runcmd.lib.tengo /^ addToPath: func(value, hasVars) {$/;" f -aggregate ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.ll.lib.tengo /^aggregate := func(data, indices, bodyTpl, outputs, isEph, ...extra) {$/;" f -aggregate ./src/pframes/ll.lib.tengo /^aggregate := func(data, indices, bodyTpl, outputs, isEph, ...extra) {$/;" f -archive ./src/exec/package.lib.tengo /^ archive: func() {$/;" f -arg ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ arg: func(arg) {$/;" f -arg ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^ arg: func(arg) {$/;" f -arg ./src/exec/index.lib.tengo /^ arg: func(arg) {$/;" f -arg ./src/exec/runcmd.lib.tengo /^ arg: func(arg) {$/;" f -argExecutable ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^ argExecutable: func(arg, pathToBinary) {$/;" f -argVar ./src/exec/runcmd.lib.tengo /^ argVar: func(argTpl) {$/;" f -args ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.lib.tengo /^args := func() {$/;" f -args ./src/workflow/index.lib.tengo /^args := func() {$/;" f -assert ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/ll.lib.tengo /^assert := func(condition, msg, ...args) {$/;" f -assert ./src/ll.lib.tengo /^assert := func(condition, msg, ...args) {$/;" f -assert ./src/path.test.tengo /^assert := func(got, want) {$/;" f -assert ./src/slices.test.tengo /^assert := func(got, want, ...msg) {$/;" f -assert ./src/validation.test.tengo /^assert := func(got, want, ...msg) {$/;" f -assertEntrypointNotSet ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ assertEntrypointNotSet := func() {$/;" f -assertEntrypointNotSet ./src/exec/index.lib.tengo /^ assertEntrypointNotSet := func() {$/;" f -assertIsValid ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/path.lib.tengo /^assertIsValid := func(path) {$/;" f -assertIsValid ./src/path.lib.tengo /^assertIsValid := func(path) {$/;" f -assertJsonSchema ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^assertJsonSchema := func(js, schema) {$/;" f -assertJsonSchema ./src/validation.lib.tengo /^assertJsonSchema := func(js, schema, ...failMsg) {$/;" f -assertNotBuilt ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ assertNotBuilt := func() {$/;" f -assertNotBuilt ./src/smart.lib.tengo /^ assertNotBuilt := func() {$/;" f -assetName ./src/exec/test/pkg/asset-export.tpl.tengo /^ assetName := "package.sw.json"$/;" c -assetsLoader ./src/exec/package.lib.tengo /^assetsLoader := func(pkg) {$/;" f -await ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.state-await.lib.tengo /^await := func(rootField, ctxStorageResource, requests) {$/;" f -await ./src/tpl/state-await.lib.tengo /^await := func(rootField, ctxStorageResource, requests) {$/;" f -awaitOneState ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.state-await.lib.tengo /^awaitOneState := func(field, path, state) {$/;" f -awaitOneState ./src/tpl/state-await.lib.tengo /^awaitOneState := func(field, path, state) {$/;" f -awaitState ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ awaitState: func(...pathAndState) {$/;" f -awaitState ./src/tpl/index.lib.tengo /^ awaitState: func(...pathAndState) {$/;" f -binaryDescriptorScheme ./src/exec/package.lib.tengo /^binaryDescriptorScheme := {$/;" c -binaryRunOptions ./src/exec/internal.lib.tengo /^binaryRunOptions := func(runOptions) {$/;" f -blockId ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.lib.tengo /^blockId := func() {$/;" f -blockId ./src/workflow/index.lib.tengo /^blockId := func() {$/;" f -body ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ body: func(bodyFn){$/;" f -body ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.proc.lib.tengo /^ body: func(cb) {$/;" f -body ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.lib.tengo /^body := func(bodyFn) {$/;" f -body ./src/tpl/index.lib.tengo /^ body: func(bodyFn){$/;" f -body ./src/workdir/proc.lib.tengo /^ body: func(cb) {$/;" f -body ./src/workflow/index.lib.tengo /^body := func(bodyFn) {$/;" f -build ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^ build: func() {$/;" f -build ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ build: func() {$/;" f -build ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^ build: func() {$/;" f -build ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^ build: func() {$/;" f -build ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.context.lib.tengo /^ build: func() {$/;" f -build ./src/exec/runcmd.lib.tengo /^ build: func() {$/;" f -build ./src/exec/runenv.lib.tengo /^ build: func() {$/;" f -build ./src/smart.lib.tengo /^ build: func() {$/;" f -build ./src/workdir/index.lib.tengo /^ build: func() {$/;" f -build ./src/workdir/save.lib.tengo /^ build: func() {$/;" f -build ./src/workflow/context.lib.tengo /^ build: func() {$/;" f -buildUnlocked ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ buildUnlocked: func() {$/;" f -buildUnlocked ./src/smart.lib.tengo /^ buildUnlocked: func() {$/;" f -builder ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^builder := func() {$/;" f -builder ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^builder := func(workdir) {$/;" f -builder ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^builder := func() {$/;" f -builder ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^builder := func(wdBefore) {$/;" f -builder ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.context.lib.tengo /^builder := func(block, parentContext) {$/;" f -builder ./src/exec/index.lib.tengo /^builder := func() {$/;" f -builder ./src/exec/runcmd.lib.tengo /^builder := func(workdir) {$/;" f -builder ./src/workdir/index.lib.tengo /^builder := func() {$/;" f -builder ./src/workdir/save.lib.tengo /^builder := func(wdBefore) {$/;" f -builder ./src/workflow/context.lib.tengo /^builder := func(block, parentContext) {$/;" f -cRules ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^ cRules := {}$/;" c -cRules ./src/workdir/save.lib.tengo /^ cRules := {}$/;" c -cache ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ cache: func(time) {$/;" f -cache ./src/exec/index.lib.tengo /^ cache: func(time) {$/;" f -cache ./src/exec/runenv.lib.tengo /^ cache: func(time) {$/;" f -canParse ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.bquery.lib.tengo /^ canParse: func(r) {$/;" f -canParse ./src/workflow/bquery.lib.tengo /^ canParse: func(r) {$/;" f -canonize ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/path.lib.tengo /^canonize := func(...elems) {$/;" f -canonize ./src/path.lib.tengo /^canonize := func(...elems) {$/;" f -check ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^check := func(condition, keyPath, msg, ...args) {$/;" f -check ./src/validation.lib.tengo /^check := func(condition, keyPath, msg, ...args) {$/;" f -checkJson ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^checkJson := func(js, schema) {$/;" f -checkJson ./src/validation.lib.tengo /^checkJson := func(js, schema) {$/;" f -checkResourceType ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ checkResourceType: func(expectedType) {$/;" f -checkResourceType ./src/smart.lib.tengo /^ checkResourceType: func(expectedType) {$/;" f -checker ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^ checker := func(elem, keyPath, stack) {$/;" f -checker ./src/validation.lib.tengo /^ checker := func(elem, keyPath, stack) {$/;" f -cmd ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ cmd: func(commandName) {$/;" f -cmd ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^ cmd: func(commandName) {$/;" f -cmd ./src/exec/index.lib.tengo /^ cmd: func(commandName) {$/;" f -cmd ./src/exec/runcmd.lib.tengo /^ cmd: func(commandName) {$/;" f -cmdExecutable ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^ cmdExecutable: func(commandName, pathToBinary) {$/;" f -cmdVar ./src/exec/runcmd.lib.tengo /^ cmdVar: func(commandTpl) {$/;" f -columns ./src/pframes/export-pframe.tpl.tengo /^ columns := {}$/;" c -containsKey ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/maps.lib.tengo /^containsKey := func(map, key) {$/;" f -containsKey ./src/maps.lib.tengo /^containsKey := func(map, key) {$/;" f -create ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.stream.lib.tengo /^create := func(workdirBefore, workdirAfter, filePath) {$/;" f -create ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/render.lib.tengo /^create := func(tpl, inputs) {$/;" f -create ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.bquery.lib.tengo /^create := func(spec, ctx, ...options) {$/;" f -create ./src/exec/stream.lib.tengo /^create := func(workdirBefore, workdirAfter, filePath) {$/;" f -create ./src/render.lib.tengo /^create := func(tpl, inputs) {$/;" f -create ./src/workdir/index.lib.tengo /^create := func() {$/;" f -create ./src/workflow/bquery.lib.tengo /^create := func(spec, ctx, ...options) {$/;" f -createBinaryMapResource ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^createBinaryMapResource = func(keyToValue) {$/;" f -createBinaryMapResource ./src/smart.lib.tengo /^createBinaryMapResource = func(keyToValue) {$/;" f -createBlobImportInternal ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/file.lib.tengo /^createBlobImportInternal := func(settings) {$/;" f -createBlobImportInternal ./src/file.lib.tengo /^createBlobImportInternal := func(settings) {$/;" f -createBlobMapResource ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^createBlobMapResource = func(keyToValue) {$/;" f -createBlobMapResource ./src/smart.lib.tengo /^createBlobMapResource = func(keyToValue) {$/;" f -createBlobUpload ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/file.lib.tengo /^createBlobUpload := func(settings) {$/;" f -createBlobUpload ./src/file.lib.tengo /^createBlobUpload := func(settings) {$/;" f -createContext ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.state-await.lib.tengo /^createContext := func() {$/;" f -createContext ./src/tpl/state-await.lib.tengo /^createContext := func() {$/;" f -createEphemeral ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/render.lib.tengo /^createEphemeral := func(tpl, inputs) {$/;" f -createEphemeral ./src/render.lib.tengo /^createEphemeral := func(tpl, inputs) {$/;" f -createField ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ createField: func(name, fieldType) {$/;" f -createField ./src/smart.lib.tengo /^ createField: func(name, fieldType) {$/;" f -createInputField ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ createInputField: func(name) {$/;" f -createInputField ./src/smart.lib.tengo /^ createInputField: func(name) {$/;" f -createJsonResource ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^createJsonResource = func(value) {$/;" f -createJsonResource ./src/smart.lib.tengo /^createJsonResource = func(value) {$/;" f -createMapResource ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^createMapResource = func(keyToValue) {$/;" f -createMapResource ./src/smart.lib.tengo /^createMapResource = func(keyToValue) {$/;" f -createMapResourceWithType ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^createMapResourceWithType := func(resourceType, keyToValue) {$/;" f -createMapResourceWithType ./src/smart.lib.tengo /^createMapResourceWithType := func(resourceType, keyToValue) {$/;" f -createOutputField ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ createOutputField: func(name) {$/;" f -createOutputField ./src/smart.lib.tengo /^ createOutputField: func(name) {$/;" f -createOutputsAndLock ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ createOutputsAndLock: func(outputs) {$/;" f -createOutputsAndLock ./src/tpl/index.lib.tengo /^ createOutputsAndLock: func(outputs) {$/;" f -createSpec ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.bobject.lib.tengo /^createSpec := func(spec) {$/;" f -createSpec ./src/workflow/bobject.lib.tengo /^createSpec := func(spec) {$/;" f -createUniversal ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/render.lib.tengo /^createUniversal := func(tpl, isEph, inputs) {$/;" f -createUniversal ./src/render.lib.tengo /^createUniversal := func(tpl, isEph, inputs) {$/;" f -createValueResource ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^createValueResource = func(resourceType, data) {$/;" f -createValueResource ./src/smart.lib.tengo /^createValueResource = func(resourceType, data) {$/;" f -dInfo ./src/pframes/import-dir.tpl.tengo /^ dInfo := {}$/;" c -defineOutputs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ defineOutputs : func(...name) {$/;" f -defineOutputs ./src/tpl/index.lib.tengo /^ defineOutputs : func(...name) {$/;" f -deleteUndefined ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/objects.lib.tengo /^deleteUndefined := func(obj) {$/;" f -deleteUndefined ./src/objects.lib.tengo /^deleteUndefined := func(obj) {$/;" f -dependencies ./src/exec/runenv.lib.tengo /^ dependencies: func(deps) {$/;" f -depsMap ./src/exec/runenv.lib.tengo /^ depsMap := {}$/;" c -descriptorScheme ./src/exec/package.lib.tengo /^descriptorScheme := {$/;" c -dirs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^ dirs := {}$/;" c -dirs ./src/workdir/index.lib.tengo /^ dirs := {}$/;" c -dirsToCreate ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ dirsToCreate := {}$/;" c -dirsToCreate ./src/exec/index.lib.tengo /^ dirsToCreate := {}$/;" c -e ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.state-await.lib.tengo /^ e := {}$/;" c -e ./src/tpl/state-await.lib.tengo /^ e := {}$/;" c -eData ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.lib.tengo /^ eData := {}$/;" c -eData ./src/workflow/index.lib.tengo /^ eData := {}$/;" c -ensureNonStrict ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/ll.lib.tengo /^ensureNonStrict := func(r) {$/;" f -ensureNonStrict ./src/ll.lib.tengo /^ensureNonStrict := func(r) {$/;" f -env ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ env: func(name, value) {$/;" f -env ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^ env: func(name, value) {$/;" f -env ./src/exec/index.lib.tengo /^ env: func(name, value) {$/;" f -env ./src/exec/runcmd.lib.tengo /^ env: func(name, value) {$/;" f -envMap ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ envMap: func(envMap) {$/;" f -envMap ./src/exec/index.lib.tengo /^ envMap: func(envMap) {$/;" f -envType ./src/exec/runenv.lib.tengo /^ envType: func(type) {$/;" f -envType ./src/exec/runenv.lib.tengo /^ envType := ""$/;" c -envVar ./src/exec/runcmd.lib.tengo /^ envVar: func(name, valueTpl) {$/;" f -envs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ envs := {}$/;" c -envs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^ envs := {}$/;" c -envs ./src/exec/index.lib.tengo /^ envs := {}$/;" c -envs ./src/exec/internal.lib.tengo /^ envs := {}$/;" c -envs ./src/exec/runcmd.lib.tengo /^ envs := {}$/;" c -ephemeralBuilder ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ephemeralBuilder = func(resourceType, ...data) {$/;" f -ephemeralBuilder ./src/smart.lib.tengo /^ephemeralBuilder = func(resourceType, ...data) {$/;" f -ephemeralMapBuilder ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ephemeralMapBuilder = func() {$/;" f -ephemeralMapBuilder ./src/smart.lib.tengo /^ephemeralMapBuilder = func() {$/;" f -execInputs ./src/exec/index.lib.tengo /^ execInputs := {$/;" c -execRefs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^ execRefs := {}$/;" c -exportFile ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/file.lib.tengo /^exportFile := func(blob) {$/;" f -exportFile ./src/file.lib.tengo /^exportFile := func(blob) {$/;" f -exportFrame ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.lib.tengo /^exportFrame := func(pf) {$/;" f -exportFrame ./src/pframes/index.lib.tengo /^exportFrame := func(pf) {$/;" f -exportPColumnData ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.export-pcolumn.lib.tengo /^exportPColumnData := func(data) {$/;" f -exportPColumnData ./src/pframes/export-pcolumn.lib.tengo /^exportPColumnData := func(data) {$/;" f -exports ./src/workflow/test/exports.wf1.tpl.tengo /^ exports := {}$/;" c -ext ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/path.lib.tengo /^ ext := ""$/;" c -ext ./src/path.lib.tengo /^ ext := ""$/;" c -extraInputs ./src/pframes/aggregate.tpl.tengo /^ extraInputs := {}$/;" c -fRules ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^ fRules := {}$/;" c -fRules ./src/workdir/save.lib.tengo /^ fRules := {}$/;" c -fail ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^fail := func(keyPath, msg, ...args) {$/;" f -fail ./src/validation.lib.tengo /^fail := func(keyPath, msg, ...args) {$/;" f -field ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^field = func(f) {$/;" f -field ./src/smart.lib.tengo /^field = func(f) {$/;" f -fieldId ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/ll.lib.tengo /^fieldId := func(resourceId, fieldName) {$/;" f -fieldId ./src/ll.lib.tengo /^fieldId := func(resourceId, fieldName) {$/;" f -fileSets ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^ fileSets := {}$/;" c -fileSets ./src/workdir/index.lib.tengo /^ fileSets := {}$/;" c -fileSetsContent ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^ fileSetsContent := {}$/;" c -fileSetsContent ./src/workdir/index.lib.tengo /^ fileSetsContent := {}$/;" c -fileSetsContentMatch ./src/workdir/save.tpl.tengo /^ fileSetsContentMatch := {}$/;" c -fileSetsContentResult ./src/workdir/save.tpl.tengo /^ fileSetsContentResult := {}$/;" c -fileSetsContentToSave ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ fileSetsContentToSave := {}$/;" c -fileSetsContentToSave ./src/exec/index.lib.tengo /^ fileSetsContentToSave := {}$/;" c -fileSetsMatch ./src/workdir/save.tpl.tengo /^ fileSetsMatch := {}$/;" c -fileSetsResult ./src/workdir/save.tpl.tengo /^ fileSetsResult := {}$/;" c -fileSetsToSave ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ fileSetsToSave := {}$/;" c -fileSetsToSave ./src/exec/index.lib.tengo /^ fileSetsToSave := {}$/;" c -filepathCanonize ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/ll.lib.tengo /^filepathCanonize := func(...elem) {$/;" f -filepathCanonize ./src/ll.lib.tengo /^filepathCanonize := func(...elem) {$/;" f -filepathJoin ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/ll.lib.tengo /^filepathJoin := func(...elems) {$/;" f -filepathJoin ./src/ll.lib.tengo /^filepathJoin := func(...elems) {$/;" f -filepathRegexpJoin ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/ll.lib.tengo /^filepathRegexpJoin := func(...elems) {$/;" f -filepathRegexpJoin ./src/ll.lib.tengo /^filepathRegexpJoin := func(...elems) {$/;" f -files ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^ files := {}$/;" c -files ./src/workdir/index.lib.tengo /^ files := {}$/;" c -filesContent ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^ filesContent := {}$/;" c -filesContent ./src/workdir/index.lib.tengo /^ filesContent := {}$/;" c -filesContentToSave ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ filesContentToSave := {}$/;" c -filesContentToSave ./src/exec/index.lib.tengo /^ filesContentToSave := {}$/;" c -filesInWd ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.proc.lib.tengo /^ filesInWd: func() {$/;" f -filesInWd ./src/workdir/proc.lib.tengo /^ filesInWd: func() {$/;" f -filesToAdd ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ filesToAdd := {}$/;" c -filesToAdd ./src/exec/index.lib.tengo /^ filesToAdd := {}$/;" c -filesToSave ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ filesToSave := {}$/;" c -filesToSave ./src/exec/index.lib.tengo /^ filesToSave := {}$/;" c -filesToStream ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ filesToStream := {}$/;" c -filesToStream ./src/exec/index.lib.tengo /^ filesToStream := {}$/;" c -filesToWrite ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ filesToWrite := {}$/;" c -filesToWrite ./src/exec/index.lib.tengo /^ filesToWrite := {}$/;" c -filter ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/maps.lib.tengo /^filter := func(map, predicateFn) {$/;" f -filter ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/slices.lib.tengo /^filter := func(slice, predicateFn) {$/;" f -filter ./src/maps.lib.tengo /^filter := func(map, predicateFn) {$/;" f -filter ./src/slices.lib.tengo /^filter := func(slice, predicateFn) {$/;" f -filterKeys ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/maps.lib.tengo /^filterKeys := func(map, predicateFnK) {$/;" f -filterKeys ./src/maps.lib.tengo /^filterKeys := func(map, predicateFnK) {$/;" f -filterKeysValues ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/maps.lib.tengo /^filterKeysValues := func(map, predicateFnK, predicateFnV) {$/;" f -filterKeysValues ./src/maps.lib.tengo /^filterKeysValues := func(map, predicateFnK, predicateFnV) {$/;" f -filterValues ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/maps.lib.tengo /^filterValues := func(map, predicateFnV) {$/;" f -filterValues ./src/maps.lib.tengo /^filterValues := func(map, predicateFnV) {$/;" f -findElement ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/slices.lib.tengo /^findElement := func(slice, element) {$/;" f -findElement ./src/slices.lib.tengo /^findElement := func(slice, element) {$/;" f -fromMapKeys ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/sets.lib.tengo /^fromMapKeys := func(map) {$/;" f -fromMapKeys ./src/sets.lib.tengo /^fromMapKeys := func(map) {$/;" f -fromSet ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/slices.lib.tengo /^fromSet := func(set) {$/;" f -fromSet ./src/slices.lib.tengo /^fromSet := func(set) {$/;" f -fromSlice ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/sets.lib.tengo /^fromSlice := func(slice) {$/;" f -fromSlice ./src/sets.lib.tengo /^fromSlice := func(slice) {$/;" f -fromStrict ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/ll.lib.tengo /^fromStrict := func(r) {$/;" f -fromStrict ./src/ll.lib.tengo /^fromStrict := func(r) {$/;" f -get ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ get: func(name) {$/;" f -get ./src/exec/package.lib.tengo /^get := func(registryName, pkgName) {$/;" f -get ./src/smart.lib.tengo /^ get: func(name) {$/;" f -getAxesSpec ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.xsv.lib.tengo /^getAxesSpec := func(spec) {$/;" f -getAxesSpec ./src/pframes/xsv.lib.tengo /^getAxesSpec := func(spec) {$/;" f -getBasenameDirs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/path.lib.tengo /^getBasenameDirs := func(path, ...sep) {$/;" f -getBasenameDirs ./src/path.lib.tengo /^getBasenameDirs := func(path, ...sep) {$/;" f -getColumn ./src/pframes/export-pframe.tpl.tengo /^ getColumn := func(name) {$/;" f -getColumnSpec ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.xsv.lib.tengo /^getColumnSpec := func(axesSpec, col) {$/;" f -getColumnSpec ./src/pframes/xsv.lib.tengo /^getColumnSpec := func(axesSpec, col) {$/;" f -getContentSaveRule ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^getContentSaveRule := func(fileName) {$/;" f -getContentSaveRule ./src/workdir/save.lib.tengo /^getContentSaveRule := func(fileName) {$/;" f -getCtx ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/ll.lib.tengo /^getCtx := func() {$/;" f -getCtx ./src/ll.lib.tengo /^getCtx := func() {$/;" f -getCurrentTemplateRenderer ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/ll.lib.tengo /^getCurrentTemplateRenderer := func() {$/;" f -getCurrentTemplateRenderer ./src/ll.lib.tengo /^getCurrentTemplateRenderer := func() {$/;" f -getData ./src/smart.lib.tengo /^ getData: func() {$/;" f -getDataAsJson ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ getDataAsJson: func() {$/;" f -getDataAsJson ./src/smart.lib.tengo /^ getDataAsJson: func() {$/;" f -getError ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ getError: func() {$/;" f -getError ./src/smart.lib.tengo /^ getError: func() {$/;" f -getExecutorsList ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/ll.lib.tengo /^getExecutorsList := func() {$/;" f -getExecutorsList ./src/ll.lib.tengo /^getExecutorsList := func() {$/;" f -getExtension ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/path.lib.tengo /^getExtension := func(path, ...sep) {$/;" f -getExtension ./src/path.lib.tengo /^getExtension := func(path, ...sep) {$/;" f -getField ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ getField: func(name) {$/;" f -getField ./src/smart.lib.tengo /^ getField: func(name) {$/;" f -getFile ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ getFile: func(fileName) {$/;" f -getFile ./src/exec/index.lib.tengo /^ getFile: func(fileName) {$/;" f -getFile ./src/exec/package.lib.tengo /^ getFile: func(fileName) {$/;" f -getFileContent ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ getFileContent: func(fileName) {$/;" f -getFileContent ./src/exec/index.lib.tengo /^ getFileContent: func(fileName) {$/;" f -getFileContent ./src/exec/package.lib.tengo /^ getFileContent: func(fileName) {$/;" f -getFileSaveRule ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^getFileSaveRule := func(fileName) {$/;" f -getFileSaveRule ./src/workdir/save.lib.tengo /^getFileSaveRule := func(fileName) {$/;" f -getFileSet ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ getFileSet: func(fileSetName) {$/;" f -getFileSet ./src/exec/index.lib.tengo /^ getFileSet: func(fileSetName) {$/;" f -getFileSetContent ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ getFileSetContent: func(fileSetName) {$/;" f -getFileSetContent ./src/exec/index.lib.tengo /^ getFileSetContent: func(fileSetName) {$/;" f -getFileStream ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ getFileStream: func(fileName) {$/;" f -getFileStream ./src/exec/index.lib.tengo /^ getFileStream: func(fileName) {$/;" f -getFutureField ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ getFutureField: func(name, fieldType) {$/;" f -getFutureField ./src/smart.lib.tengo /^ getFutureField: func(name, fieldType) {$/;" f -getFutureInputField ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ getFutureInputField: func(name) {$/;" f -getFutureInputField ./src/smart.lib.tengo /^ getFutureInputField: func(name) {$/;" f -getFutureOutputField ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ getFutureOutputField: func(name) {$/;" f -getFutureOutputField ./src/smart.lib.tengo /^ getFutureOutputField: func(name) {$/;" f -getKeys ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/maps.lib.tengo /^getKeys := func(map) {$/;" f -getKeys ./src/maps.lib.tengo /^getKeys := func(map) {$/;" f -getOps ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.xsv.lib.tengo /^getOps := func(...ops) {$/;" f -getOps ./src/pframes/xsv.lib.tengo /^getOps := func(...ops) {$/;" f -getOutputField ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ getOutputField: func(name) {$/;" f -getOutputField ./src/tpl/index.lib.tengo /^ getOutputField: func(name) {$/;" f -getProcessorResult ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ getProcessorResult: func(procName) {$/;" f -getProcessorResult ./src/exec/index.lib.tengo /^ getProcessorResult: func(procName) {$/;" f -getProgress ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^ getProgress: func() {$/;" f -getProgress ./src/workdir/save.lib.tengo /^ getProgress: func() {$/;" f -getSavedFile ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^ getSavedFile: func(fName) {$/;" f -getSavedFile ./src/workdir/save.lib.tengo /^ getSavedFile: func(fName) {$/;" f -getSavedFileContent ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^ getSavedFileContent: func(fName) {$/;" f -getSavedFileContent ./src/workdir/save.lib.tengo /^ getSavedFileContent: func(fName) {$/;" f -getSavedFiles ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^ getSavedFiles: func() {$/;" f -getSavedFiles ./src/workdir/save.lib.tengo /^ getSavedFiles: func() {$/;" f -getSavedFilesContent ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^ getSavedFilesContent: func() {$/;" f -getSavedFilesContent ./src/workdir/save.lib.tengo /^ getSavedFilesContent: func() {$/;" f -getStderrFile ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ getStderrFile: func() {$/;" f -getStderrFile ./src/exec/index.lib.tengo /^ getStderrFile: func() {$/;" f -getStderrFileContent ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ getStderrFileContent: func() {$/;" f -getStderrFileContent ./src/exec/index.lib.tengo /^ getStderrFileContent: func() {$/;" f -getStderrStream ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ getStderrStream: func() {$/;" f -getStderrStream ./src/exec/index.lib.tengo /^ getStderrStream: func() {$/;" f -getStdoutFile ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ getStdoutFile: func() {$/;" f -getStdoutFile ./src/exec/index.lib.tengo /^ getStdoutFile: func() {$/;" f -getStdoutFileContent ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ getStdoutFileContent: func() {$/;" f -getStdoutFileContent ./src/exec/index.lib.tengo /^ getStdoutFileContent: func() {$/;" f -getStdoutStream ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ getStdoutStream: func() {$/;" f -getStdoutStream ./src/exec/index.lib.tengo /^ getStdoutStream: func() {$/;" f -getValue ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ getValue: func() {$/;" f -getValue ./src/smart.lib.tengo /^ getValue: func() {$/;" f -getValueAsJson ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ getValueAsJson: func() {$/;" f -getValueAsJson ./src/smart.lib.tengo /^ getValueAsJson: func() {$/;" f -getWorkdirAfter ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^ getWorkdirAfter: func() {$/;" f -getWorkdirAfter ./src/workdir/save.lib.tengo /^ getWorkdirAfter: func() {$/;" f -groups ./src/pframes/aggregate.tpl.tengo /^ groups := {}$/;" c -hasElement ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/sets.lib.tengo /^hasElement := func(set, element) {$/;" f -hasElement ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/slices.lib.tengo /^hasElement := func(slice, element) {$/;" f -hasElement ./src/sets.lib.tengo /^hasElement := func(set, element) {$/;" f -hasElement ./src/slices.lib.tengo /^hasElement := func(slice, element) {$/;" f -hasError ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ hasError: func() {$/;" f -hasError ./src/smart.lib.tengo /^ hasError: func() {$/;" f -hasField ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ hasField: func(name) {$/;" f -hasField ./src/smart.lib.tengo /^ hasField: func(name) {$/;" f -hasInput ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ hasInput: func(name) {$/;" f -hasInput ./src/tpl/index.lib.tengo /^ hasInput: func(name) {$/;" f -hasInputErrors ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ hasInputErrors: func() {$/;" f -hasInputErrors ./src/smart.lib.tengo /^ hasInputErrors: func() {$/;" f -hasInputField ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ hasInputField: func(name) {$/;" f -hasInputField ./src/smart.lib.tengo /^ hasInputField: func(name) {$/;" f -hasOutputField ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ hasOutputField: func(name) {$/;" f -hasOutputField ./src/smart.lib.tengo /^ hasOutputField: func(name) {$/;" f -importFile ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/file.lib.tengo /^importFile := func(importFileHandle) {$/;" f -importFile ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.xsv.lib.tengo /^importFile := func(xsvFile, xsvType, spec, ...ops) {$/;" f -importFile ./src/file.lib.tengo /^importFile := func(importFileHandle) {$/;" f -importFile ./src/pframes/xsv.lib.tengo /^importFile := func(xsvFile, xsvType, spec, ...ops) {$/;" f -importFileMap ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.xsv.lib.tengo /^importFileMap := func(xsvMap, xsvType, spec, ...ops) {$/;" f -importFileMap ./src/pframes/xsv.lib.tengo /^importFileMap := func(xsvMap, xsvType, spec, ...ops) {$/;" f -importSoftware ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/assets.lib.tengo /^importSoftware := func(swName) {$/;" f -importSoftware ./src/assets.lib.tengo /^importSoftware := func(swName) {$/;" f -importTemplate ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/assets.lib.tengo /^importTemplate := func(tplName) {$/;" f -importTemplate ./src/assets.lib.tengo /^importTemplate := func(tplName) {$/;" f -inHeavyQueue ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ inHeavyQueue: func() {$/;" f -inHeavyQueue ./src/exec/index.lib.tengo /^ inHeavyQueue: func() {$/;" f -inQueue ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^ inQueue: func(queueName) {$/;" f -inQueue ./src/exec/runcmd.lib.tengo /^ inQueue: func(queueName) {$/;" f -inUiQueue ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ inUiQueue: func() {$/;" f -inUiQueue ./src/exec/index.lib.tengo /^ inUiQueue: func() {$/;" f -info ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ info: func() {$/;" f -info ./src/smart.lib.tengo /^ info: func() {$/;" f -inherit ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/oop.lib.tengo /^inherit := func(super, self) {$/;" f -inherit ./src/oop.lib.tengo /^inherit := func(super, self) {$/;" f -inputs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ inputs: func() {$/;" f -inputs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ inputs: func() {$/;" f -inputs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^ inputs := {$/;" c -inputs ./src/smart.lib.tengo /^ inputs: func() {$/;" f -inputs ./src/tpl/index.lib.tengo /^ inputs: func() {$/;" f -inputs ./src/workdir/index.lib.tengo /^ inputs := {$/;" c -install ./src/exec/package.lib.tengo /^install := func(archive) {$/;" f -isAnyMapResource ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^isAnyMapResource := func(r) {$/;" f -isAnyMapResource ./src/smart.lib.tengo /^isAnyMapResource := func(r) {$/;" f -isEphMapResource ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^isEphMapResource := func(r) {$/;" f -isEphMapResource ./src/smart.lib.tengo /^isEphMapResource := func(r) {$/;" f -isEphemeral ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ isEphemeral: func() {$/;" f -isEphemeral ./src/tpl/index.lib.tengo /^ isEphemeral: func() {$/;" f -isErrorSet ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ isErrorSet: func() {$/;" f -isErrorSet ./src/smart.lib.tengo /^ isErrorSet: func() {$/;" f -isFail ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^isFail := func(r) {$/;" f -isFail ./src/validation.lib.tengo /^isFail := func(r) {$/;" f -isField ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^isField := func(f) {$/;" f -isField ./src/smart.lib.tengo /^isField := func(f) {$/;" f -isFieldId ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^isFieldId := func(val) {$/;" f -isFieldId ./src/smart.lib.tengo /^isFieldId := func(val) {$/;" f -isInitializing ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/ll.lib.tengo /^isInitializing := func() {$/;" f -isInitializing ./src/ll.lib.tengo /^isInitializing := func() {$/;" f -isJsonResource ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^isJsonResource := func(r) {$/;" f -isJsonResource ./src/smart.lib.tengo /^isJsonResource := func(r) {$/;" f -isLockedEphMapResource ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^isLockedEphMapResource := func(r) {$/;" f -isLockedEphMapResource ./src/smart.lib.tengo /^isLockedEphMapResource := func(r) {$/;" f -isMap ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/ll.lib.tengo /^isMap := func(obj) {$/;" f -isMap ./src/ll.lib.tengo /^isMap := func(obj) {$/;" f -isMapResource ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^isMapResource := func(r) {$/;" f -isMapResource ./src/smart.lib.tengo /^isMapResource := func(r) {$/;" f -isNR ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.bquery.lib.tengo /^ isNR := func(r) {$/;" f -isNR ./src/workflow/bquery.lib.tengo /^ isNR := func(r) {$/;" f -isReady ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ isReady: func() {$/;" f -isReady ./src/smart.lib.tengo /^ isReady: func() {$/;" f -isReference ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^isReference := func(f) {$/;" f -isReference ./src/smart.lib.tengo /^isReference := func(f) {$/;" f -isResource ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^isResource := func(f) {$/;" f -isResource ./src/smart.lib.tengo /^isResource := func(f) {$/;" f -isSet ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ isSet: func() {$/;" f -isSet ./src/smart.lib.tengo /^ isSet: func() {$/;" f -isSoftwareInfo ./src/assets.lib.tengo /^isSoftwareInfo := func(toCheck) {$/;" f -isStrict ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/ll.lib.tengo /^isStrict := func(obj) {$/;" f -isStrict ./src/ll.lib.tengo /^isStrict := func(obj) {$/;" f -isSuccess ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^isSuccess := func(r) {$/;" f -isSuccess ./src/validation.lib.tengo /^isSuccess := func(r) {$/;" f -isValid ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^isValid := func(js, schema) {$/;" f -isValid ./src/validation.lib.tengo /^isValid := func(js, schema) {$/;" f -isValueSet ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ isValueSet: func() {$/;" f -isValueSet ./src/smart.lib.tengo /^ isValueSet: func() {$/;" f -join ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/path.lib.tengo /^join := func(...elems) {$/;" f -join ./src/path.lib.tengo /^join := func(...elems) {$/;" f -js ./src/validation.test.tengo /^ js := {$/;" c -key ./src/tpl/test/json-keys.tpl.tengo /^key := "{\\"a\\":\\"b\\"}"$/;" c -kvGet ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ kvGet: func(key) {$/;" f -kvGet ./src/smart.lib.tengo /^ kvGet: func(key) {$/;" f -kvGetAsJson ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ kvGetAsJson: func(key) {$/;" f -kvGetAsJson ./src/smart.lib.tengo /^ kvGetAsJson: func(key) {$/;" f -kvGetAsString ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ kvGetAsString: func(key) {$/;" f -kvGetAsString ./src/smart.lib.tengo /^ kvGetAsString: func(key) {$/;" f -kvSet ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ kvSet: func(key, value) {$/;" f -kvSet ./src/smart.lib.tengo /^ kvSet: func(key, value) {$/;" f -kvSetJson ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ kvSetJson: func(key, value) {$/;" f -kvSetJson ./src/smart.lib.tengo /^ kvSetJson: func(key, value) {$/;" f -length ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/slices.lib.tengo /^length := func(slice) {$/;" f -length ./src/slices.lib.tengo /^length := func(slice) {$/;" f -load ./src/exec/package.lib.tengo /^ load: func() {$/;" f -loadAssetContent ./src/exec/package.lib.tengo /^loadAssetContent := func(pkg, assetPath) {$/;" f -loadAssetFile ./src/exec/package.lib.tengo /^loadAssetFile := func(pkg, assetPath) {$/;" f -localDescriptorScheme ./src/exec/package.lib.tengo /^localDescriptorScheme := {$/;" c -lock ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ lock: func() {$/;" f -lock ./src/smart.lib.tengo /^ lock: func() {$/;" f -lockAndBuild ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ lockAndBuild: func() {$/;" f -lockAndBuild ./src/smart.lib.tengo /^ lockAndBuild: func() {$/;" f -lockInputs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ lockInputs: func() {$/;" f -lockInputs ./src/smart.lib.tengo /^ lockInputs: func() {$/;" f -lockInputsAndBuild ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ lockInputsAndBuild: func() {$/;" f -lockInputsAndBuild ./src/smart.lib.tengo /^ lockInputsAndBuild: func() {$/;" f -lockOutputs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ lockOutputs: func() {$/;" f -lockOutputs ./src/smart.lib.tengo /^ lockOutputs: func() {$/;" f -lockOutputsAndBuild ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ lockOutputsAndBuild: func() {$/;" f -lockOutputsAndBuild ./src/smart.lib.tengo /^ lockOutputsAndBuild: func() {$/;" f -map ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/maps.lib.tengo /^map := func(map, fn) {$/;" f -map ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/sets.lib.tengo /^map := func(set, fn) {$/;" f -map ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/slices.lib.tengo /^map := func(slice, fn) {$/;" f -map ./src/maps.lib.tengo /^map := func(map, fn) {$/;" f -map ./src/sets.lib.tengo /^map := func(set, fn) {$/;" f -map ./src/slices.lib.tengo /^map := func(slice, fn) {$/;" f -mapBuilder ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^mapBuilder = func() {$/;" f -mapBuilder ./src/smart.lib.tengo /^mapBuilder = func() {$/;" f -mapKeys ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/maps.lib.tengo /^mapKeys := func(map, fnK) {$/;" f -mapKeys ./src/maps.lib.tengo /^mapKeys := func(map, fnK) {$/;" f -mapValues ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/maps.lib.tengo /^mapValues := func(map, fnV) {$/;" f -mapValues ./src/maps.lib.tengo /^mapValues := func(map, fnV) {$/;" f -matcher ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.state-await.lib.tengo /^ matcher = func(field) {$/;" f -matcher ./src/tpl/state-await.lib.tengo /^ matcher = func(field) {$/;" f -mkDir ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ mkDir: func(dir) {$/;" f -mkDir ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^ mkDir: func(dir) {$/;" f -mkDir ./src/exec/index.lib.tengo /^ mkDir: func(dir) {$/;" f -mkDir ./src/workdir/index.lib.tengo /^ mkDir: func(dir) {$/;" f -msg ./src/validation.lib.tengo /^ msg := "JSON validation error"$/;" c -nErrorLines ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ nErrorLines: func(lines) {$/;" f -nErrorLines ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^ nErrorLines: func(number) {$/;" f -nErrorLines ./src/exec/index.lib.tengo /^ nErrorLines: func(lines) {$/;" f -nErrorLines ./src/exec/runcmd.lib.tengo /^ nErrorLines: func(number) {$/;" f -name ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ name: func() {$/;" f -name ./src/smart.lib.tengo /^ name: func() {$/;" f -newM ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/maps.lib.tengo /^ newM := {}$/;" c -newM ./src/maps.lib.tengo /^ newM := {}$/;" c -newPrevSubscriptions ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.state-await.lib.tengo /^ newPrevSubscriptions := {}$/;" c -newPrevSubscriptions ./src/tpl/state-await.lib.tengo /^ newPrevSubscriptions := {}$/;" c -o ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.xsv.lib.tengo /^ o := { dataOnly: false, splitDataAndSpec: false }$/;" c -o ./src/pframes/xsv.lib.tengo /^ o := { dataOnly: false, splitDataAndSpec: false }$/;" c -ops ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^ ops := {}$/;" c -ops ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.bquery.lib.tengo /^ ops := {}$/;" c -ops ./src/test/resolve/wf_no_res.tpl.tengo /^ ops := {$/;" c -ops ./src/validation.lib.tengo /^ ops := {}$/;" c -ops ./src/workflow/bquery.lib.tengo /^ ops := {}$/;" c -ops ./src/workflow/test/exports.wf2.tpl.tengo /^ ops := {$/;" c -options ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^ options := {$/;" c -options ./src/exec/runcmd.lib.tengo /^ options := {$/;" c -output ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/render.lib.tengo /^ output: func(name, ...cache) {$/;" f -output ./src/render.lib.tengo /^ output: func(name, ...cache) {$/;" f -outputMaps ./src/pframes/aggregate.tpl.tengo /^ outputMaps := {}$/;" c -outputs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ outputs: func() {$/;" f -outputs ./src/pframes/import-dir.tpl.tengo /^ outputs := {}$/;" c -outputs ./src/smart.lib.tengo /^ outputs: func() {$/;" f -outputs ./src/test/import-template/workflow.tpl.tengo /^ outputs := {$/;" c -outputs ./src/workflow/test/exports.wf1.tpl.tengo /^ outputs := {}$/;" c -package ./src/exec/package.lib.tengo /^ package: func() {$/;" f -packagesMap ./src/exec/runenv.lib.tengo /^ packagesMap := {}$/;" c -panic ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/ll.lib.tengo /^panic := func(msg, ...args) {$/;" f -panic ./src/ll.lib.tengo /^panic := func(msg, ...args) {$/;" f -parse ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.bquery.lib.tengo /^ parse: func(resource, parser) {$/;" f -parse ./src/workflow/bquery.lib.tengo /^ parse: func(resource, parser) {$/;" f -parseUrl ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/ll.lib.tengo /^parseUrl := func(url) {$/;" f -parseUrl ./src/ll.lib.tengo /^parseUrl := func(url) {$/;" f -prefixed ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.lib.tengo /^ prefixed := {}$/;" c -prefixed ./src/workflow/index.lib.tengo /^ prefixed := {}$/;" c -prepare ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ prepare : func(codeFn) {$/;" f -prepare ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.lib.tengo /^prepare := func(cb) {$/;" f -prepare ./src/tpl/index.lib.tengo /^ prepare : func(codeFn) {$/;" f -prepare ./src/workflow/index.lib.tengo /^prepare := func(cb) {$/;" f -preparedMapResource ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ preparedMapResource: func() {$/;" f -preparedMapResource ./src/tpl/index.lib.tengo /^ preparedMapResource: func() {$/;" f -preps ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.proc.lib.tengo /^ preps := {}$/;" c -preps ./src/workdir/proc.lib.tengo /^ preps := {}$/;" c -print ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/ll.lib.tengo /^print := func(txt, ...args) {$/;" f -print ./src/ll.lib.tengo /^print := func(txt, ...args) {$/;" f -printErrStreamToStdout ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ printErrStreamToStdout: func() {$/;" f -printErrStreamToStdout ./src/exec/index.lib.tengo /^ printErrStreamToStdout: func() {$/;" f -proc ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.proc.lib.tengo /^proc := func() {$/;" f -proc ./src/workdir/proc.lib.tengo /^proc := func() {$/;" f -processWorkdir ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ processWorkdir: func(name, tpl, tplArgs) {$/;" f -processWorkdir ./src/exec/index.lib.tengo /^ processWorkdir: func(name, tpl, tplArgs) {$/;" f -pssKey ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.state-await.lib.tengo /^ pssKey := "await:" + string(rootField.id.ResourceID) + ":" + rootField.id.Name$/;" c -pssKey ./src/tpl/state-await.lib.tengo /^ pssKey := "await:" + string(rootField.id.ResourceID) + ":" + rootField.id.Name$/;" c -purifySpec ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.xsv.lib.tengo /^purifySpec := func(spec) {$/;" f -purifySpec ./src/pframes/xsv.lib.tengo /^purifySpec := func(spec) {$/;" f -pyVenvInputs ./src/exec/runenv.lib.tengo /^ pyVenvInputs := {$/;" c -pythonVenv ./src/exec/runenv.lib.tengo /^pythonVenv := func() {$/;" f -pythonVenvInputSchema ./src/exec/runenv.lib.tengo /^pythonVenvInputSchema := {$/;" c -query ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.lib.tengo /^query := func(spec, ...options) {$/;" f -query ./src/workflow/index.lib.tengo /^query := func(spec, ...options) {$/;" f -query ./src/workflow/test/exports.wf2.tpl.tengo /^ query := {$/;" c -queue ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^ queue := ""$/;" c -queue ./src/exec/runcmd.lib.tengo /^ queue := ""$/;" c -r ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.bquery.lib.tengo /^ r := {$/;" c -r ./src/workdir/save.tpl.tengo /^ r := {}$/;" c -r ./src/workflow/bquery.lib.tengo /^ r := {$/;" c -rData ./src/pframes/import-dir.tpl.tengo /^ rData := { partitionKeyLength: dInfo.partitionKeyLength }$/;" c -rawInputs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ rawInputs: func() {$/;" f -rawInputs ./src/tpl/index.lib.tengo /^ rawInputs: func() {$/;" f -readFiles ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.proc.lib.tengo /^ readFiles: func(cb) {$/;" f -readFiles ./src/workdir/proc.lib.tengo /^ readFiles: func(cb) {$/;" f -reduce ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/slices.lib.tengo /^reduce := func(slice, fn) {$/;" f -reduce ./src/slices.lib.tengo /^reduce := func(slice, fn) {$/;" f -ref ./src/exec/runcmd.lib.tengo /^ ref: func(refKey, ref) {$/;" f -refSchema ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^refSchema := {$/;" c -refSchema ./src/validation.lib.tengo /^refSchema := {$/;" c -reference ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^reference := func(elem, keyPath, stack) {$/;" f -reference ./src/validation.lib.tengo /^reference := func(elem, keyPath, stack) {$/;" f -refs ./src/exec/runcmd.lib.tengo /^ refs := {}$/;" c -regexpJoin ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/path.lib.tengo /^regexpJoin := func(...elems) {$/;" f -regexpJoin ./src/path.lib.tengo /^regexpJoin := func(...elems) {$/;" f -registerUnmarshaller ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ registerUnmarshaller: func(preproc) {$/;" f -registerUnmarshaller ./src/tpl/index.lib.tengo /^ registerUnmarshaller: func(preproc) {$/;" f -removeElement ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/slices.lib.tengo /^removeElement := func(slice, i) {$/;" f -removeElement ./src/slices.lib.tengo /^removeElement := func(slice, i) {$/;" f -renderInputs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.ll.lib.tengo /^ renderInputs := {$/;" c -renderInputs ./src/pframes/aggregate.tpl.tengo /^ renderInputs := {}$/;" c -renderInputs ./src/pframes/ll.lib.tengo /^ renderInputs := {$/;" c -renderPrepare ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ renderPrepare: func() {$/;" f -renderPrepare ./src/tpl/index.lib.tengo /^ renderPrepare: func() {$/;" f -renderer ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ renderer: func() {$/;" f -renderer ./src/tpl/index.lib.tengo /^ renderer: func() {$/;" f -res ./src/tpl/test/await-state-wildcard.tpl.tengo /^ res := ""$/;" c -resolve ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.bquery.lib.tengo /^resolve := func(ref, ctx, ...options) {$/;" f -resolve ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.lib.tengo /^resolve := func(ref, ...options) {$/;" f -resolve ./src/workflow/bquery.lib.tengo /^resolve := func(ref, ctx, ...options) {$/;" f -resolve ./src/workflow/index.lib.tengo /^resolve := func(ref, ...options) {$/;" f -resource ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ resource: func() {$/;" f -resource ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^resource = func(r) {$/;" f -resource ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^resource := func(...args) {$/;" f -resource ./src/smart.lib.tengo /^ resource: func() {$/;" f -resource ./src/smart.lib.tengo /^resource = func(r) {$/;" f -resource ./src/validation.lib.tengo /^resource := func(...args) {$/;" f -resourceBuilder ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^resourceBuilder = func(r) {$/;" f -resourceBuilder ./src/smart.lib.tengo /^resourceBuilder = func(r) {$/;" f -resourceType ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^resourceType := func(rt) {$/;" f -resourceType ./src/validation.lib.tengo /^resourceType := func(rt) {$/;" f -resourceTypesEqual ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^resourceTypesEqual := func(rType1, rType2) {$/;" f -resourceTypesEqual ./src/smart.lib.tengo /^resourceTypesEqual := func(rType1, rType2) {$/;" f -result ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.xsv.lib.tengo /^ result := {}$/;" c -result ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ result := {}$/;" c -result ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.bquery.lib.tengo /^ result := {$/;" c -result ./src/exec/test/run/cat_on_file.tpl.tengo /^ result := {$/;" c -result ./src/exec/test/run/cat_on_value.tpl.tengo /^ result := {$/;" c -result ./src/exec/test/run/echo_to_stream.tpl.tengo /^ result := {$/;" c -result ./src/exec/test/run/echo_to_value.tpl.tengo /^ result := {$/;" c -result ./src/exec/test/run/fake_java.tpl.tengo /^ result := {$/;" c -result ./src/exec/test/run/fake_python.tpl.tengo /^ result := {$/;" c -result ./src/exec/test/run/hello_go.tpl.tengo /^ result := {$/;" c -result ./src/exec/test/software-info.tpl.tengo /^ result := {$/;" c -result ./src/pframes/export-multiple-pcolumns.tpl.tengo /^ result := {}$/;" c -result ./src/pframes/import-xsv-map.tpl.tengo /^ result := {}$/;" c -result ./src/pframes/import-xsv-map.tpl.tengo /^ result := {}$/;" c -result ./src/pframes/xsv.lib.tengo /^ result := {}$/;" c -result ./src/test/import-template/pure-template.tpl.tengo /^ result := {$/;" c -result ./src/test/resolve/eph-template.tpl.tengo /^ result := {$/;" c -result ./src/test/resolve/pure-template.tpl.tengo /^ result := {$/;" c -result ./src/tpl/index.lib.tengo /^ result := {}$/;" c -result ./src/tpl/test/map-outputs.tpl.tengo /^ result := {$/;" c -result ./src/tpl/test/simple1.tpl.tengo /^ result := {$/;" c -result ./src/workflow/bquery.lib.tengo /^ result := {$/;" c -resultUnmarshaller ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.bquery.lib.tengo /^resultUnmarshaller := func() {$/;" f -resultUnmarshaller ./src/workflow/bquery.lib.tengo /^resultUnmarshaller := func() {$/;" f -results ./src/tpl/test/json-keys.tpl.tengo /^ results := {}$/;" c -routeDelegate ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ routeDelegate: func(tpl, extraInputs, outputs) {$/;" f -routeDelegate ./src/tpl/index.lib.tengo /^ routeDelegate: func(tpl, extraInputs, outputs) {$/;" f -routeEph ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ routeEph: func(bodyFn) {$/;" f -routeEph ./src/tpl/index.lib.tengo /^ routeEph: func(bodyFn) {$/;" f -routePure ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ routePure: func(bodyFn){$/;" f -routePure ./src/tpl/index.lib.tengo /^ routePure: func(bodyFn){$/;" f -run ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ run: func() {$/;" f -run ./src/exec/index.lib.tengo /^ run: func() {$/;" f -runEnv ./src/exec/runenv.lib.tengo /^ runEnv: func() {$/;" f -runEnvDescriptor ./src/exec/runenv.lib.tengo /^ runEnvDescriptor: func(descriptor) {$/;" f -runEnvDescriptorScheme ./src/exec/package.lib.tengo /^runEnvDescriptorScheme := {$/;" c -safeAppend ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/slices.lib.tengo /^safeAppend := func(slice, ...toAppend) {$/;" f -safeAppend ./src/slices.lib.tengo /^safeAppend := func(slice, ...toAppend) {$/;" f -save ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^save := func(workdir) {$/;" f -save ./src/workdir/index.lib.tengo /^save := func(workdir) {$/;" f -saveBuilder ./src/exec/runenv.lib.tengo /^saveBuilder := func(wd) {$/;" f -saveFile ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ saveFile: func(fileName) {$/;" f -saveFile ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^ saveFile: func(fileName) {$/;" f -saveFile ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.proc.lib.tengo /^ saveFile: func(fName) {$/;" f -saveFile ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^ saveFile: func(fName) {$/;" f -saveFile ./src/exec/index.lib.tengo /^ saveFile: func(fileName) {$/;" f -saveFile ./src/exec/package.lib.tengo /^ saveFile: func(path) {$/;" f -saveFile ./src/workdir/index.lib.tengo /^ saveFile: func(fileName) {$/;" f -saveFile ./src/workdir/proc.lib.tengo /^ saveFile: func(fName) {$/;" f -saveFile ./src/workdir/save.lib.tengo /^ saveFile: func(fName) {$/;" f -saveFileContent ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ saveFileContent: func(fileName) {$/;" f -saveFileContent ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^ saveFileContent: func(fileName) {$/;" f -saveFileContent ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.proc.lib.tengo /^ saveFileContent: func(fName) {$/;" f -saveFileContent ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.save.lib.tengo /^ saveFileContent: func(fName) {$/;" f -saveFileContent ./src/exec/index.lib.tengo /^ saveFileContent: func(fileName) {$/;" f -saveFileContent ./src/exec/package.lib.tengo /^ saveFileContent: func(path) {$/;" f -saveFileContent ./src/workdir/index.lib.tengo /^ saveFileContent: func(fileName) {$/;" f -saveFileContent ./src/workdir/proc.lib.tengo /^ saveFileContent: func(fName) {$/;" f -saveFileContent ./src/workdir/save.lib.tengo /^ saveFileContent: func(fName) {$/;" f -saveFileSet ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ saveFileSet: func(name, regex) {$/;" f -saveFileSet ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^ saveFileSet: func(name, regex) {$/;" f -saveFileSet ./src/exec/index.lib.tengo /^ saveFileSet: func(name, regex) {$/;" f -saveFileSet ./src/workdir/index.lib.tengo /^ saveFileSet: func(name, regex) {$/;" f -saveFileSetContent ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ saveFileSetContent: func(name, regex) {$/;" f -saveFileSetContent ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^ saveFileSetContent: func(name, regex) {$/;" f -saveFileSetContent ./src/exec/index.lib.tengo /^ saveFileSetContent: func(name, regex) {$/;" f -saveFileSetContent ./src/workdir/index.lib.tengo /^ saveFileSetContent: func(name, regex) {$/;" f -saveFiles ./src/exec/package.lib.tengo /^ saveFiles: func(paths) {$/;" f -saveFilesContent ./src/exec/package.lib.tengo /^ saveFilesContent: func(paths) {$/;" f -saveStderrContent ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ saveStderrContent: func() {$/;" f -saveStderrContent ./src/exec/index.lib.tengo /^ saveStderrContent: func() {$/;" f -saveStdoutContent ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ saveStdoutContent: func() {$/;" f -saveStdoutContent ./src/exec/index.lib.tengo /^ saveStdoutContent: func() {$/;" f -schema ./src/validation.test.tengo /^ schema := {$/;" c -schemaRules ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^ schemaRules := {}$/;" c -schemaRules ./src/validation.lib.tengo /^ schemaRules := {}$/;" c -schemaTags ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^ schemaTags := {}$/;" c -schemaTags ./src/validation.lib.tengo /^ schemaTags := {}$/;" c -self ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ self := func(resource) { return _unmarshal(resource, preprocessors) }$/;" f -self ./src/tpl/index.lib.tengo /^ self := func(resource) { return _unmarshal(resource, preprocessors) }$/;" f -set ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/sets.lib.tengo /^ set := {}$/;" c -set ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ set: func(reference) {$/;" f -set ./src/sets.lib.tengo /^ set := {}$/;" c -set ./src/smart.lib.tengo /^ set: func(reference) {$/;" f -setJson ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ setJson: func(value) {$/;" f -setJson ./src/smart.lib.tengo /^ setJson: func(value) {$/;" f -setMap ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ setMap: func(keyToValue) {$/;" f -setMap ./src/smart.lib.tengo /^ setMap: func(keyToValue) {$/;" f -setOutputs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ setOutputs : func(resultMap) {$/;" f -setOutputs ./src/tpl/index.lib.tengo /^ setOutputs : func(resultMap) {$/;" f -setPreRun ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.lib.tengo /^setPreRun := func(tplId) {$/;" f -setPreRun ./src/workflow/index.lib.tengo /^setPreRun := func(tplId) {$/;" f -setRefOrJson ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^ setRefOrJson: func(refOrJson) {$/;" f -setRefOrJson ./src/smart.lib.tengo /^ setRefOrJson: func(refOrJson) {$/;" f -slice ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/slices.lib.tengo /^slice := func(array, from, to) {$/;" f -slice ./src/slices.lib.tengo /^slice := func(array, from, to) {$/;" f -software ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ software: func(software) {$/;" f -software ./src/exec/index.lib.tengo /^ software: func(sw) {$/;" f -software ./src/exec/runenv.lib.tengo /^ software: func(pkgRef) {$/;" f -softwareInfoScheme ./src/exec/package.lib.tengo /^softwareInfoScheme := {$/;" c -sortByFn ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/slices.lib.tengo /^sortByFn := func(notSortedSlice, fn) {$/;" f -sortByFn ./src/slices.lib.tengo /^sortByFn := func(notSortedSlice, fn) {$/;" f -spec ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.xsv.lib.tengo /^ spec := {$/;" c -spec ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.bquery.lib.tengo /^ spec := {$/;" c -spec ./src/pframes/xsv.lib.tengo /^ spec := {$/;" c -spec ./src/workflow/bquery.lib.tengo /^ spec := {$/;" c -split ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/path.lib.tengo /^split := func(path, ...sep) {$/;" f -split ./src/path.lib.tengo /^split := func(path, ...sep) {$/;" f -stderr ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ stderr := "stderr.txt"$/;" c -stderr ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^ stderr: func(fileName) {$/;" f -stderr ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^ stderr := "stderr.txt"$/;" c -stderr ./src/exec/index.lib.tengo /^ stderr := "stderr.txt"$/;" c -stderr ./src/exec/runcmd.lib.tengo /^ stderr: func(fileName) {$/;" f -stderr ./src/exec/runcmd.lib.tengo /^ stderr := "stderr.txt"$/;" c -stderrFileName ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ stderrFileName: func(fileName) {$/;" f -stderrFileName ./src/exec/index.lib.tengo /^ stderrFileName: func(fileName) {$/;" f -stdout ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ stdout := "stdout.txt"$/;" c -stdout ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^ stdout: func(fileName) {$/;" f -stdout ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.runcmd.lib.tengo /^ stdout := "stdout.txt"$/;" c -stdout ./src/exec/index.lib.tengo /^ stdout := "stdout.txt"$/;" c -stdout ./src/exec/runcmd.lib.tengo /^ stdout: func(fileName) {$/;" f -stdout ./src/exec/runcmd.lib.tengo /^ stdout := "stdout.txt"$/;" c -stdoutFileName ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ stdoutFileName: func(fileName) {$/;" f -stdoutFileName ./src/exec/index.lib.tengo /^ stdoutFileName: func(fileName) {$/;" f -streamFile ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ streamFile: func(fileName) {$/;" f -streamFile ./src/exec/index.lib.tengo /^ streamFile: func(fileName) {$/;" f -structBuilder ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/smart.lib.tengo /^structBuilder = func(resourceType, ...data) {$/;" f -structBuilder ./src/smart.lib.tengo /^structBuilder = func(resourceType, ...data) {$/;" f -subscriptions ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.state-await.lib.tengo /^ subscriptions := {}$/;" c -subscriptions ./src/tpl/state-await.lib.tengo /^ subscriptions := {}$/;" c -substRules ./src/exec/runcmd.lib.tengo /^ substRules := {}$/;" c -substitutionRule ./src/exec/runcmd.lib.tengo /^ substitutionRule: func(varName, refKey) {$/;" f -substitutionRules ./src/exec/runcmd.lib.tengo /^ substitutionRules: func(rules) {$/;" f -success ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^success := { result: true }$/;" c -success ./src/validation.lib.tengo /^success := { result: true }$/;" c -tags ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/validation.lib.tengo /^ tags := {}$/;" c -tags ./src/validation.lib.tengo /^ tags := {}$/;" c -template ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ template: func() {$/;" f -template ./src/tpl/index.lib.tengo /^ template: func() {$/;" f -toSlice ./src/sets.lib.tengo /^toSlice := func(set) {$/;" f -toStrict ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/ll.lib.tengo /^toStrict := func(r) {$/;" f -toStrict ./src/ll.lib.tengo /^toStrict := func(v) {$/;" f -toolset ./src/exec/runenv.lib.tengo /^ toolset := "pip"$/;" c -tpl ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^tpl := func() {$/;" f -tpl ./src/tpl/index.lib.tengo /^tpl := func() {$/;" f -tplInputs ./src/exec/exec.tpl.tengo /^ tplInputs := {$/;" c -tplOutputs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ tplOutputs := {}$/;" c -tplOutputs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.lib.tengo /^ tplOutputs := {}$/;" c -tplOutputs ./src/tpl/index.lib.tengo /^ tplOutputs := {}$/;" c -tplOutputs ./src/workflow/index.lib.tengo /^ tplOutputs := {}$/;" c -trimPrefix ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/path.lib.tengo /^trimPrefix := func(path, prefix) {$/;" f -trimPrefix ./src/path.lib.tengo /^trimPrefix := func(path, prefix) {$/;" f -use ./src/exec/package.lib.tengo /^use := func(settings) {$/;" f -useToolset ./src/exec/runenv.lib.tengo /^ useToolset: func(name) {$/;" f -validateArgs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workflow.lib.tengo /^validateArgs := func(argsSchema) {$/;" f -validateArgs ./src/workflow/index.lib.tengo /^validateArgs := func(argsSchema) {$/;" f -validateInputs ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/tpl.lib.tengo /^ validateInputs: func(schema) {$/;" f -validateInputs ./src/tpl/index.lib.tengo /^ validateInputs: func(schema) {$/;" f -values ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^ values := {}$/;" c -values ./src/workdir/index.lib.tengo /^ values := {}$/;" c -venv ./src/exec/runenv.lib.tengo /^ venv: func() {$/;" f -wdAfterReadFiles ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.proc.lib.tengo /^ wdAfterReadFiles: func() {$/;" f -wdAfterReadFiles ./src/workdir/proc.lib.tengo /^ wdAfterReadFiles: func() {$/;" f -wdBefore ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.proc.lib.tengo /^ wdBefore: func() {$/;" f -wdBefore ./src/workdir/proc.lib.tengo /^ wdBefore: func() {$/;" f -wdFinalBuilder ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.proc.lib.tengo /^ wdFinalBuilder: func() {$/;" f -wdFinalBuilder ./src/workdir/proc.lib.tengo /^ wdFinalBuilder: func() {$/;" f -wdProcessors ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ wdProcessors := {}$/;" c -wdProcessors ./src/exec/index.lib.tengo /^ wdProcessors := {}$/;" c -wdProcessorsResults ./src/exec/exec.tpl.tengo /^ wdProcessorsResults := {}$/;" c -workdir ./src/exec/runenv.lib.tengo /^ workdir: func() {$/;" f -writeFile ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/exec.lib.tengo /^ writeFile: func(fileName, data) {$/;" f -writeFile ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^ writeFile: func(fileName, contentRef) {$/;" f -writeFile ./src/exec/index.lib.tengo /^ writeFile: func(fileName, data) {$/;" f -writeFile ./src/workdir/index.lib.tengo /^ writeFile: func(fileName, contentRef) {$/;" f -writeFiles ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/workdir.lib.tengo /^ writeFiles: func(contentRefMap) {$/;" f -writeFiles ./src/workdir/index.lib.tengo /^ writeFiles: func(contentRefMap) {$/;" f -xsvColumnId ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.util.lib.tengo /^xsvColumnId := func(c) {$/;" f -xsvColumnId ./src/pframes/util.lib.tengo /^xsvColumnId := func(c) {$/;" f -xsvFileName ./node_modules/@milaboratory/tengo-sdk/dist/tengo/lib/pframes.xsv.lib.tengo /^ xsvFileName := "file." + xsvType$/;" c -xsvFileName ./src/pframes/xsv.lib.tengo /^ xsvFileName := "file." + xsvType$/;" c diff --git a/sdk/workflow-tengo/create_tags.sh b/sdk/workflow-tengo/create_tags.sh deleted file mode 100755 index 68e3441325..0000000000 --- a/sdk/workflow-tengo/create_tags.sh +++ /dev/null @@ -1,48 +0,0 @@ -#/usr/bin/env bash - -# The script creates ctags, install them -# with `brew install universal-ctags`. -# For vscode, you should also install ctags extension. -# -# Usage for vscode: ./create_tags.sh -# Usage for emacs: ./create_tags.sh TAGS true -e - -# turn on for debug -set -o nounset -set -o errexit - -# This turns on `**` functionality in glob patterns -shopt -s globstar - -# the name of the file -tags_file_name=${1:-.tags} - -# should create tags from .. (if true) or from . (if false) -if [[ "${2:-false}" == "true" ]]; then - from_parent_root=.. -else - from_parent_root=. -fi; - -# -e for emacs, nothing for vscode -other_args=${3:-} - -echo -echo -echo Create ctags file \""${tags_file_name}"\" from this root dir: \""${from_parent_root}"\", Additional args: ${other_args} -echo - -# see https://docs.ctags.io/en/latest/man/ctags-optlib.7.html#perl-pod -ctags -f "${tags_file_name}" ${other_args} \ - --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 \ - ${from_parent_root}/**/src/**/*.tengo \ - ${from_parent_root}/**/node_modules/@milaboratory/**/*.tengo \ - 2>/dev/null - -echo Done. diff --git a/sdk/workflow-tengo/package.json b/sdk/workflow-tengo/package.json index 99569d26fb..32255f3ff1 100644 --- a/sdk/workflow-tengo/package.json +++ b/sdk/workflow-tengo/package.json @@ -17,12 +17,11 @@ ], "scripts": { "type-check": "pl-tengo check", - "build": "rm -rf dist && pl-tengo check && pl-tengo build", - "test": "pl-tengo test", + "build": "rm -rf dist && pl-tengo check && pl-tengo build --tags-file=../../../.tags", + "tengo-test": "rm -rf dist && pl-tengo check && pl-tengo build --tags-file=../../../.tags && pl-tengo test", + "test": "rm -rf dist && pl-tengo check && pl-tengo build --tags-file=../../../.tags && pl-tengo test", "format": "/usr/bin/env emacs --quick --script ./format.el", - "format-stdin": "/usr/bin/env emacs --quick --script ./format-stdin.el", - "vscode-tags": "./create_tags.sh .tags false", - "emacs-tags": "./create_tags.sh ../TAGS false -e" + "format-stdin": "/usr/bin/env emacs --quick --script ./format-stdin.el" }, "dependencies": { "@milaboratories/software-pframes-conv": "catalog:" diff --git a/sdk/workflow-tengo/src/exec/index.lib.tengo b/sdk/workflow-tengo/src/exec/index.lib.tengo index 4fd7a6321b..931e5f4c1d 100644 --- a/sdk/workflow-tengo/src/exec/index.lib.tengo +++ b/sdk/workflow-tengo/src/exec/index.lib.tengo @@ -29,13 +29,18 @@ builder := func() { soft := undefined cmd := undefined args := [] - entrypointSet := false + entrypointSet := false assertEntrypointNotSet := func() { ll.assert(!entrypointSet, "either a command with arguments or a software were already set.") } + built := false + assertNotBuilt := func() { + ll.assert(!built, "exec.builder was already built") + } + envs := {} secrets := {} // { "env_name": "{secrets.secret_name}", ... } queue := _HEAVY_QUEUE @@ -77,6 +82,7 @@ builder := func() { */ cmd: func(commandName) { assertEntrypointNotSet() + assertNotBuilt() cmd = commandName entrypointSet = true @@ -90,6 +96,7 @@ builder := func() { */ software: func(sw) { assertEntrypointNotSet() + assertNotBuilt() ll.assert(assets.isSoftwareInfo(sw), "exec.builder.software: parameter is not a software info. Provide the value obtained from ll.importSoftware() here" ) @@ -105,6 +112,7 @@ builder := func() { * @param arg: string - the argument to add. */ arg: func(arg) { + assertNotBuilt() args = append(args, arg) return self }, @@ -116,6 +124,7 @@ builder := func() { * @param value: string - the value of the environment variable. */ env: func(name, value) { + assertNotBuilt() validation.assertJsonSchema([name, value], ["string"]) envs[name] = value return self @@ -127,6 +136,7 @@ builder := func() { * @param envMap: map[string]string - a map of environment variables. */ envMap: func(envMap) { + assertNotBuilt() enum.each(envMap, self.env) return self }, @@ -147,6 +157,7 @@ builder := func() { * Sets the execution queue to the heavy queue. */ inHeavyQueue: func() { + assertNotBuilt() queue = _HEAVY_QUEUE return self }, @@ -155,6 +166,7 @@ builder := func() { * Sets the execution queue to the UI tasks queue. */ inUiQueue: func() { + assertNotBuilt() queue = _UI_TASKS_QUEUE return self }, @@ -165,6 +177,7 @@ builder := func() { * @param time: duration - the cache time from 'times' library. */ cache: func(time) { + assertNotBuilt() ll.assert( is_int(time), "cache time must be an integer. " + @@ -179,6 +192,7 @@ builder := func() { * @param lines: number - the number of error lines. */ nErrorLines: func(lines) { + assertNotBuilt() ll.assert( is_int(lines) && lines >= 0, "lines must be integer") @@ -194,6 +208,8 @@ builder := func() { * @param file: reference - a resource id of the file or a field that points to it. */ addFile: func(fileName, file) { + assertNotBuilt() + fileName = path.canonize(fileName) filesToAdd[fileName] = file return self @@ -205,6 +221,7 @@ builder := func() { * @param filesMap: map[string]reference - a map of file names to files' references. */ addFiles: func(filesMap) { + assertNotBuilt() enum.each(filesMap, self.addFile) return self }, @@ -217,6 +234,8 @@ builder := func() { * a resource from which data we create a file. */ writeFile: func(fileName, data) { + assertNotBuilt() + validation.assertJsonSchema(data, ["or", "string", "bytes", @@ -235,6 +254,7 @@ builder := func() { * @param dir: string - the directory to create. */ mkDir: func(dir) { + assertNotBuilt() dir = path.canonize(dir) dirsToCreate = sets.add(dirsToCreate, dir) return self @@ -246,6 +266,7 @@ builder := func() { * @param fileName: string - the name of the output file. */ saveFile: func(fileName) { + assertNotBuilt() fileName = path.canonize(fileName) sets.add(filesToSave, fileName) return self @@ -257,6 +278,7 @@ builder := func() { * @param fileName: string - the name of the output value. */ saveFileContent: func(fileName) { + assertNotBuilt() fileName = path.canonize(fileName) sets.add(filesContentToSave, fileName) return self @@ -269,6 +291,7 @@ builder := func() { * @param regex: string - regex pattern */ saveFileSet: func(name, regex) { + assertNotBuilt() fileSetsToSave[name] = regex return self }, @@ -277,6 +300,7 @@ builder := func() { * Run specified */ processWorkdir: func(name, tpl, tplArgs) { + assertNotBuilt() wdProcessors[name] = { tpl: tpl, tplArgs: tplArgs @@ -291,6 +315,7 @@ builder := func() { * @param regex: string - regex pattern */ saveFileSetContent: func(name, regex) { + assertNotBuilt() fileSetsContentToSave[name] = regex return self }, @@ -301,6 +326,7 @@ builder := func() { * @param fileName: string - the name of the file to stream. */ streamFile: func(fileName) { + assertNotBuilt() fileName = path.canonize(fileName) sets.add(filesToStream, fileName) @@ -311,6 +337,7 @@ builder := func() { * Set stdout file name */ stdoutFileName: func(fileName) { + assertNotBuilt() fileName = path.canonize(fileName) stdout = fileName return self @@ -320,6 +347,7 @@ builder := func() { * Set stderr file name */ stderrFileName: func(fileName) { + assertNotBuilt() fileName = path.canonize(fileName) stderr = fileName return self @@ -329,6 +357,7 @@ builder := func() { * Sets stdout to be captured as a value resource. */ saveStdoutContent: func() { + assertNotBuilt() stdoutToValue = true return self }, @@ -337,6 +366,7 @@ builder := func() { * Sets stderr to be captured as a value resource. */ saveStderrContent: func() { + assertNotBuilt() stderrToValue = true return self }, @@ -345,6 +375,7 @@ builder := func() { * Redirects stderr output to stdout. */ printErrStreamToStdout: func() { + assertNotBuilt() stderrToStdout = true return self }, @@ -355,6 +386,9 @@ builder := func() { * @return A map containing the execution results. */ run: func() { + assertNotBuilt() + built = true + if stderrToStdout { stderr = stdout } diff --git a/sdk/workflow-tengo/src/exec/internal.lib.tengo b/sdk/workflow-tengo/src/exec/internal.lib.tengo index b9252cb588..7db923565e 100644 --- a/sdk/workflow-tengo/src/exec/internal.lib.tengo +++ b/sdk/workflow-tengo/src/exec/internal.lib.tengo @@ -134,7 +134,9 @@ _binPackageCallOptions := func(runOptions, variables, descriptor, softPackage) { cmd := _newArg(true, descriptor.cmd[0]) - for arg in splice(descriptor.cmd, 1) { + // copy makes the array mutable, splice could not work otherwise. + descriptorCmd := copy(descriptor.cmd) + for arg in splice(descriptorCmd, 1) { args = append(args, _newArg(true, arg)) } for arg in runOptions.args { diff --git a/sdk/workflow-tengo/src/ll.lib.tengo b/sdk/workflow-tengo/src/ll.lib.tengo index 0df37488e5..0b09f13f5d 100644 --- a/sdk/workflow-tengo/src/ll.lib.tengo +++ b/sdk/workflow-tengo/src/ll.lib.tengo @@ -55,6 +55,16 @@ isMap := func(obj) { return is_map(obj) || is_immutable_map(obj) || isStrict(obj) } +/** + * Checks whether the given object is an array or a immutable array. + * + * @param obj any + * @return bool whether obj is any kind of array object (array/immutable array) + */ +isArray := func(obj) { + return is_array(obj) || is_immutable_array(obj) +} + /** * Converts 'strict' map into a normal one * @@ -63,7 +73,7 @@ isMap := func(obj) { * @return map: std map */ fromStrict := func(r) { - if is_map(r) { + if is_map(r) || is_immutable_map(r) { return r } @@ -101,7 +111,7 @@ toStrict := func(v) { return v } - if(!is_map(v)) { + if(!is_map(v) && !is_immutable_map(v)) { panic("toStrict(): is not a map", v) } return plapi.mapToStrict(v) @@ -217,6 +227,7 @@ export toStrict({ assert: assert, isStrict: isStrict, isMap: isMap, + isArray: isArray, fromStrict: fromStrict, ensureNonStrict: ensureNonStrict, toStrict: toStrict, diff --git a/sdk/workflow-tengo/src/pframes/aggregate.tpl.tengo b/sdk/workflow-tengo/src/pframes/aggregate.tpl.tengo index 8ce34f875a..bc43f8cdd4 100644 --- a/sdk/workflow-tengo/src/pframes/aggregate.tpl.tengo +++ b/sdk/workflow-tengo/src/pframes/aggregate.tpl.tengo @@ -25,7 +25,7 @@ self.body(func(inputs) { ll.panic("Params is not defined") } - if !is_map(params) { + if !ll.isMap(params) { ll.panic("Params have wrong type, or nor ready yet: %v", params) } @@ -33,7 +33,7 @@ self.body(func(inputs) { eph := params.eph outputs := params.outputs - if !is_array(outputs) || len(outputs) == 0 { + if !ll.isArray(outputs) || len(outputs) == 0 { ll.panic("Absent, empty or malformed outputs list: %v", params) } @@ -108,7 +108,7 @@ self.body(func(inputs) { outputMaps := {} for output in outputs { - if !is_map(output) { + if !ll.isMap(output) { ll.panic("malformed output: %v", output) } if output.type == "Resource" { @@ -160,8 +160,8 @@ self.body(func(inputs) { path = [output.name] } outputMaps[output.name]. - createInputField(sGroupKey). - set(renderResult.output(path[0]).getFutureInputField(path[1:])) + createInputField(sGroupKey). + set(renderResult.output(path[0]).getFutureInputField(path[1:])) } } diff --git a/sdk/workflow-tengo/src/pframes/index.lib.tengo b/sdk/workflow-tengo/src/pframes/index.lib.tengo index b17251463e..76a5ee91e7 100644 --- a/sdk/workflow-tengo/src/pframes/index.lib.tengo +++ b/sdk/workflow-tengo/src/pframes/index.lib.tengo @@ -15,70 +15,70 @@ constants := import(":pframes.constants") * downloaded from the UI side. */ exportFrame := func(pf) { - return render.createEphemeral(assets.importTemplate(":pframes.export-pframe"), { pf: pf }).output("result") + return render.createEphemeral(assets.importTemplate(":pframes.export-pframe"), { pf: pf }).output("result") } /** * Export single PColumn data */ exportColumnData := func(data) { - return render.createEphemeral(assets.importTemplate(":pframes.export-single-pcolumn"), { data: data }).output("result") + return render.createEphemeral(assets.importTemplate(":pframes.export-single-pcolumn"), { data: data }).output("result") } -/** +/** * Creates a builder for p-frame resource. */ pFrameBuilder := func() { - r := smart.structBuilder(constants.RTYPE_P_FRAME) + r := smart.structBuilder(constants.RTYPE_P_FRAME) - self := undefined - self = ll.toStrict(oop.inherit(r, { + self := undefined + self = ll.toStrict(oop.inherit(r, { - add: func(column, spec, data) { - if (!is_undefined(spec)) { - r.createInputField(column + ".spec").setRefOrJson(spec) - } - if (!is_undefined(data)) { - r.createInputField(column + ".data").setRefOrJson(data) - } - return self - }, + add: func(column, spec, data) { + if (!is_undefined(spec)) { + r.createInputField(column + ".spec").setRefOrJson(spec) + } + if (!is_undefined(data)) { + r.createInputField(column + ".data").setRefOrJson(data) + } + return self + }, - build: func() { - return r.lockAndBuild() - } - })) - return self + build: func() { + return r.lockAndBuild() + } + })) + return self } -/** +/** * Creates a builder for a resource map p-column's data. */ pColumnResourceMapDataBuilder := func(keyLength) { - r := smart.structBuilder( + r := smart.structBuilder( constants.RTYPE_P_COLUMN_DATA_RESOURCE_MAP, json.encode({ keyLength: 1 }) ) - self := undefined - self = ll.toStrict(oop.inherit(r, { + self := undefined + self = ll.toStrict(oop.inherit(r, { - add: func(key, data) { - ll.assert(is_array(key), "key must be an array, got ", key) - r.createInputField(json.encode(key)).setRefOrJson(data) - return self - }, + add: func(key, data) { + ll.assert(ll.isArray(key), "key must be an array, got ", key) + r.createInputField(json.encode(key)).setRefOrJson(data) + return self + }, - build: func() { - return r.lockAndBuild() - } - })) - return self + build: func() { + return r.lockAndBuild() + } + })) + return self } export ll.toStrict({ - exportFrame: exportFrame, - pFrameBuilder: pFrameBuilder, - exportColumnData: exportColumnData, - pColumnResourceMapDataBuilder: pColumnResourceMapDataBuilder + exportFrame: exportFrame, + pFrameBuilder: pFrameBuilder, + exportColumnData: exportColumnData, + pColumnResourceMapDataBuilder: pColumnResourceMapDataBuilder }) diff --git a/sdk/workflow-tengo/src/pframes/util.lib.tengo b/sdk/workflow-tengo/src/pframes/util.lib.tengo index 3843372d14..30343e1135 100644 --- a/sdk/workflow-tengo/src/pframes/util.lib.tengo +++ b/sdk/workflow-tengo/src/pframes/util.lib.tengo @@ -220,7 +220,7 @@ decomposePfconvCfg := func(cfg, ...ops) { columnsSpec := {} - for column in cfg.columns { + for column in copy(cfg.columns) { id := xsvColumnId(column) ll.assert(is_undefined(columnsSpec[id]), "repeated column spec id in pfconv cfg: %v", id) columnsSpec[id] = column.spec diff --git a/sdk/workflow-tengo/src/slices.lib.tengo b/sdk/workflow-tengo/src/slices.lib.tengo index 8c1ed1405f..d86edef10b 100644 --- a/sdk/workflow-tengo/src/slices.lib.tengo +++ b/sdk/workflow-tengo/src/slices.lib.tengo @@ -73,6 +73,23 @@ findElement := func(slice, element) { return -1 } +/** + * Returns an index of an element that satisfies a predicate. + * + * @param slice: []any + * @param fn: func(any) bool + * @return index: int - index of the element or -1 + */ +findElementBy := func(slice, fn) { + for i, elem in slice { + if fn(elem) { + return i + } + } + + return -1 +} + /** * Returns a boolean of whether an element is in a slice. * @@ -84,6 +101,17 @@ hasElement := func(slice, element) { return findElement(slice, element) != -1 } +/** + * Same as hasElement but gets an arbitrary predicate. + * + * @param slice: []any + * @param fn: func(any) bool + * @return found: bool + */ +hasElementBy := func(slice, fn) { + return findElementBy(slice, fn) != -1 +} + /** * Removes an element from the slice * @@ -191,7 +219,9 @@ export ll.toStrict({ length: length, safeAppend: safeAppend, findElement: findElement, + findElementBy: findElementBy, hasElement: hasElement, + hasElementBy: hasElementBy, removeElement: removeElement, filter: filter, map: map, diff --git a/sdk/workflow-tengo/src/smart.lib.tengo b/sdk/workflow-tengo/src/smart.lib.tengo index 484f67b780..0b740f1c7b 100644 --- a/sdk/workflow-tengo/src/smart.lib.tengo +++ b/sdk/workflow-tengo/src/smart.lib.tengo @@ -6,6 +6,7 @@ tx := import("tx") ll := import(":ll") oop := import(":oop") maps := import(":maps") +slices := import(":slices") json := import("json") constants := import(":constants") @@ -172,6 +173,83 @@ isJsonResource := func(r) { return isResource(r) && r.info().Type.Name == constants.RTYPE_JSON.Name } +resourceTypesEqual := func(rType1, rType2) { + return rType1.Name == rType2.Name && rType1.Version == rType2.Version +} + +////////////////// map cache //////////////////////////////// + +/** + * A cache of maps to resources that these maps were got from. + * In case we pass the map as-is from inputs to outputs in the template, + * we should not recreate the whole map, we should pass the original resource. + * It helps to save the topology of this workflow which leads to a better deduplication in pl-core. + * + * The cache here implemented as a slice of pairs [map, resource] - + * The cache is not a map because + * maps do not accept arbitrary objects as keys, only strings and ints. + * And map to string 1 to 1 conversion is hard in tengo due to irregular encoding in jsons. + * Performance-wise, usually it is up to 20 maps per template run, + * so it can be faster than calculate a hash of the key (and it's much simpler). + * + * @param getStateFn: func() -> a map with a key that points to a cache. + * Use ll.getCtx here for storing a global cache. + * Also, set up a hook _cacheMap.close() for clearing ll.context before exit. + */ +_cacheMap := func(getStateFn) { + ll.assert(ll.isMap(getStateFn()), "state must be a map, got %v", getStateFn()) + + _ctxKey := "smart/cacheKey" + + _getMapToResource := func() { + state := getStateFn() + if is_undefined(state[_ctxKey]) { + state[_ctxKey] = [] + } + + return state[_ctxKey] + } + + self := undefined + self = { + /** Sets an association between a map and a resource. */ + set: func(m, res) { + state := getStateFn() + state[_ctxKey] = append(_getMapToResource(), [m, res]) + }, + + /** Returns a resource by a map value. */ + get: func(m) { + for _, pair in _getMapToResource() { + if pair[0] == m { + return pair[1] + } + } + return undefined + }, + + /** Deletes a state before exiting, or else it will be stored between restarts. */ + close: func() { + delete(getStateFn(), _ctxKey) + }, + + /** Debug function that returns a printable representation of state. */ + info: func() { + return slices.map( + _getMapToResource(), + func(mr) { return [mr[0], mr[1].info()] } + ) + } + } + + return ll.toStrict(self) +} + +/** A la singleton instance that access a global context */ +cacheMap := func() { return _cacheMap(ll.getCtx) } + +/////////////////////////// marshal and unmarshal trees /////////////////////// + // deep check whether map has resources somewhere inside _hasReferenceValues := func(object) { if isReference(object) { @@ -183,7 +261,7 @@ _hasReferenceValues := func(object) { return true } } - } else if is_array(object) { + } else if ll.isArray(object) { for v in object { if _hasReferenceValues(v) { return true @@ -197,11 +275,17 @@ _hasReferenceValues := func(object) { * Convert given object to resource. If object is a true json, then * a simple Json resource will be created, otherwise a resource map. */ -_toRefOrJson := func(object) { +_marshalToRefOrJson := func(object) { if isReference(object) { // first check is reference since resource/field will return true on ll.isMap return object } else if ll.isMap(object) { + res := cacheMap().get(object) + if !is_undefined(res) { + // if it was passed as-is, then don't create new object, + // pass an old one for saving topology (which leads to better deduplication). + return res + } // just json if there are no nested resources if !_hasReferenceValues(object) { @@ -210,11 +294,11 @@ _toRefOrJson := func(object) { mb := mapBuilder() for k, v in object { - mb.add(k, _toRefOrJson(v)) + mb.add(k, _marshalToRefOrJson(v)) } return mb.build() - } else if is_array(object) { + } else if ll.isArray(object) { // assert we are not having refs inside ll.assert(!_hasReferenceValues(object), "array can't contain references") @@ -225,16 +309,83 @@ _toRefOrJson := func(object) { } } -resourceTypesEqual := func(rType1, rType2) { - return rType1.Name == rType2.Name && rType1.Version == rType2.Version +/** + * Unmarshal resource according by: + * - converting all json resources (potentially nested) into a tengo objects (maps, arrays, strings etc) + * - converting all pl.maps (resource maps) into tengo maps + * + * @param resource: smart resource to unmarshal + * @param preprocessors: input preprocessors + * @return object: unmarshaled resource + */ +unmarshal := func(resource, preprocessors) { + ll.assert(isResource(resource), "expected resource, found ", resource) + + // instance of this + self := func(resource) { return unmarshal(resource, preprocessors) } + + // try preprocessors first + for preproc in preprocessors { + if preproc.canParse(resource) { + return preproc.parse(resource, self) + } + } + + if isReference(resource) && resource.hasError() { + ll.panic("input resource has errors: ", resource, resource.getError()) + } + + if isJsonResource(resource) || resource.checkResourceType(constants.RTYPE_BOBJECT_SPEC) { + + // parse json data of the resource + return resource.getDataAsJson() + + } else if isMapResource(resource) || isLockedEphMapResource(resource) { + + // unmarshal map + result := {} + for field, value in resource.inputs() { + if value.isErrorSet() { + ll.panic("input %v field has error: %v", field, field.getError().getDataAsJson().message) + } else if value.isSet() { + result[field] = unmarshal(value.getValue(), preprocessors) + } else { + result[field] = value + } + } + cacheMap().set(result, resource) + + return result + } else { + // nothing todo + return resource + } +} + +/** + * Makes a json primitive object deeply immutable. + * This assumes that all objects that are not maps nor arrays are immutable. + * + * @param obj: any - any primitive json object + */ +immutablify := func(obj) { + if is_array(obj) { + return immutable(slices.map(obj, immutablify)) + } + if is_map(obj) { + return immutable(maps.mapValues(obj, immutablify)) + } + + return obj } ////////////////// implementation /////////////////////////// /** - * @param r either resource id or resource info + * @param r: either resource id or resource info + * @param fromWhatFieldID: field ID | nothing - what field the resource was got from. */ -resource = func(r) { +resource = func(r, ...fromWhatFieldID) { self := undefined strictSelf := undefined @@ -242,6 +393,11 @@ resource = func(r) { return r } + _fromFieldID := undefined + if !is_undefined(fromWhatFieldID) && len(fromWhatFieldID) == 1 { + _fromFieldID = fromWhatFieldID[0] + } + id := ll.isStrict(r) ? r.ID : r if !is_int(id) { @@ -442,7 +598,7 @@ resource = func(r) { * @return field: smart field */ getFutureInputField: func(nameOrPath) { - if is_array(nameOrPath) { + if ll.isArray(nameOrPath) { current := strictSelf for name in nameOrPath { current = current.getFutureField(name, "input") @@ -534,6 +690,21 @@ resource = func(r) { */ kvSetJson: func(key, value) { self.kvSet(key, json.encode(value)) + }, + + /** + * Returns a field from which this resource was got from. + * If the client wants to set this resource to some field, + * it should be set to the field we got the resource from + * so that the topology will be stored in pl-core (which leads to better deduplication). + * + * @return fromWhatField: field | undefined + */ + getFromField: func() { + if is_undefined(_fromFieldID) { + return undefined + } + return field(_fromFieldID) } } @@ -619,14 +790,14 @@ field = func(f) { ll.assert(self.isSet(), "field value is not set; ", self.name()) - return resource(self.info().Value) + return resource(self.info().Value, self.id) }, /** * Returns a smart.Resource object from the resolved field error */ getError: func() { - return resource(self.info().Error) + return resource(self.info().Error, self.id) }, /** @@ -655,7 +826,12 @@ field = func(f) { set: func(reference) { ll.assert(!self.isSet(), "field ", self.name(), " is already set") - if isResource(reference) { + if isResource(reference) && isField(reference.getFromField()) { + // Special case: if the resource was got from the field's getValue, + // then we sets this field to the resource's field for saving + // the topology in pl-core. + tx.setFieldToField(self.id, reference.getFromField().id) + } else if isResource(reference) { tx.setFieldToResource(self.id, reference.id) } else if isField(reference) { tx.setFieldToField(self.id, reference.id) @@ -674,7 +850,7 @@ field = func(f) { if is_undefined(refOrJson) { ll.panic("attempt to assign undefined value to field %v", self.name()) } - self.set(_toRefOrJson(refOrJson)) + self.set(_marshalToRefOrJson(refOrJson)) }, /** @@ -702,7 +878,7 @@ field = func(f) { * @return field: smart field */ getFutureInputField: func(nameOrPath) { - if is_array(nameOrPath) { + if ll.isArray(nameOrPath) { current := strictSelf for name in nameOrPath { current = current.getFutureField(name, "input") @@ -864,7 +1040,7 @@ structBuilder = func(resourceType, ...data) { /** * @param isEph: is ephemeral map */ -_mapBuilder := func(isEph) { +mapBuilderUniversal := func(isEph) { builder := isEph ? ephemeralBuilder(constants.RTYPE_MAP_EPH) : structBuilder(constants.RTYPE_MAP) // ensure no outputs will be created builder.lockOutputs() @@ -923,11 +1099,11 @@ _mapBuilder := func(isEph) { } mapBuilder = func() { - return _mapBuilder(false) + return mapBuilderUniversal(false) } ephemeralMapBuilder = func() { - return _mapBuilder(true) + return mapBuilderUniversal(true) } ephemeralBuilder = func(resourceType, ...data) { @@ -995,11 +1171,19 @@ export ll.toStrict({ structBuilder: structBuilder, mapBuilder: mapBuilder, ephemeralMapBuilder: ephemeralMapBuilder, + mapBuilderUniversal: mapBuilderUniversal, ephemeralBuilder: ephemeralBuilder, createValueResource: createValueResource, createJsonResource: createJsonResource, createMapResourceWithType: createMapResourceWithType, createMapResource: createMapResource, createBinaryMapResource: createBinaryMapResource, - createBlobMapResource: createBlobMapResource + createBlobMapResource: createBlobMapResource, + + unmarshal: unmarshal, + immutablify: immutablify, + + cacheMap: cacheMap, + _hasReferenceValues: _hasReferenceValues, // exclusively for tests + _cacheMap: _cacheMap // exclusively for tests }) diff --git a/sdk/workflow-tengo/src/smart.test.tengo b/sdk/workflow-tengo/src/smart.test.tengo new file mode 100644 index 0000000000..34d5225d72 --- /dev/null +++ b/sdk/workflow-tengo/src/smart.test.tengo @@ -0,0 +1,39 @@ +ll := import(":ll") +smart := import(":smart") + +assert := func(got, want) { + ll.assert(got == want, "got: %#v, want: %#v", got, want) +} + +TestHasReferencedValues := func() { + assert(smart._hasReferenceValues({ + a: 5, + b: [1, 2, 3, smart.resource(5)] + }), true) + + assert(smart._hasReferenceValues({ + a: 5, + b: { c: 2, d: smart.resource(5) } + }), true) + +} + +TestCacheMap := func() { + state := {} + cache := smart._cacheMap(func() { return state }) + + m := immutable({ a: 1, b: 2 }) + + // assert that the map can be found by reference + cache.set(m, 42) + assert(cache.get(m), 42) + + // assert that the map will be found by value + assert(cache.get(immutable({ a: 1, b: 2 })), 42) + + // assert that non-immutable maps will be found by value as well + assert(cache.get({ a: 1, b: 2 }), 42) + + // assert that nothing will be found for another map + assert(cache.get({ a: 2, b: 1 }), undefined) +} diff --git a/sdk/workflow-tengo/src/tpl/index.lib.tengo b/sdk/workflow-tengo/src/tpl/index.lib.tengo index 43d4e51028..ca956d4e6d 100644 --- a/sdk/workflow-tengo/src/tpl/index.lib.tengo +++ b/sdk/workflow-tengo/src/tpl/index.lib.tengo @@ -6,62 +6,75 @@ render := import(":render") smart := import(":smart") sets := import(":sets") maps := import(":maps") +slices := import(":slices") tplutil := import(":tpl.util") constants := import(":constants") stateAwait := import(":tpl.state-await") validation := import(":validation") +//////////////// prepared inputs //////////////////////// + /** - * Unmarshal resource according by: - * - converting all json resources (potentially nested) into a tengo objects (maps) - * - converting all pl.maps (resource maps) into tengo maps + * If we have prepared inputs, flatten them. * - * @param resource: smart resource to unmarshal - * @param preprocessors: input preprocessors - * @return object: unmarshaled resource + * @param inputs: map[string]any - unmarshaled inputs. */ -_unmarshal := func(resource, preprocessors) { - ll.assert(smart.isResource(resource), "expected resource, found ", resource) - - // instance of this - self := func(resource) { return _unmarshal(resource, preprocessors) } - - // try preprocessors first - for preproc in preprocessors { - if preproc.canParse(resource) { - return preproc.parse(resource, self) +_flattenPrepareInputs := func(inputs) { + pp := inputs[tplutil.PREPARE_MAP_FIELD_NAME] + if !is_undefined(pp) { + delete(inputs, tplutil.PREPARE_MAP_FIELD_NAME) + for k, v in pp { + ll.assert(is_undefined(inputs[k]), k, " key already exists in inputs map") + inputs[k] = v } } - if smart.isReference(resource) && resource.hasError() { - ll.panic("input resource has errors: ", resource, resource.getError()) - } + return inputs +} - if smart.isJsonResource(resource) || resource.checkResourceType(constants.RTYPE_BOBJECT_SPEC) { +/** + * Has renderer prepare inputs or not. + * + * @param renderer: smart resource + * @return hasPreparedInputs: bool + */ +_hasPrepared := func(renderer) { + return renderer.get(tplutil.INPUTS_MAP_FIELD).hasField(tplutil.PREPARE_MAP_FIELD_NAME) +} - // parse json data of the resource - return resource.getDataAsJson() - } else if smart.isMapResource(resource) || smart.isLockedEphMapResource(resource) { +/** + * Get a prepared map of inputs. + * True means we are in the inner render cycle, when all "to be prepared" fields are passed + * already to inputs and no need to call prepare callbacks again. + * + * @param renderer: smart resource + */ +_preparedMap := func(renderer) { + if _hasPrepared(renderer) { + return renderer.get(tplutil.INPUTS_MAP_FIELD).get(tplutil.PREPARE_MAP_FIELD_NAME) + } - // unmarshal map - result := {} - for field, value in resource.inputs() { - if value.isErrorSet() { - ll.panic("input %v field has error: %v", field, field.getError().getDataAsJson().message) - } else if value.isSet() { - result[field] = _unmarshal(value.getValue(), preprocessors) - } else { - result[field] = value - } + return undefined +} - } - return result - } else { - // nothing todo - return resource +/** + * Sets prepared inputs as a map resource to inputs. + * + * @param isEph: bool + * @param inputs: map[string]any + * @param preparedInputs: map[string]reference + */ +_setPreparedMap := func(isEph, inputs, preparedInputs) { + builder := smart.mapBuilderUniversal(isEph) + for name, ref in preparedInputs { + builder.add(name, ref) } + + inputs[tplutil.PREPARE_MAP_FIELD_NAME] = builder.build() } +/////////////////// tpl ///////////////////////////////// + /** * A wrapper object around template functionality */ @@ -74,10 +87,6 @@ tpl := func() { _isEphemeral := _rendererType.Name == constants.RTYPE_RENDER_EPH_TEMPLATE.Name - _hasPrepared := _renderer.get(tplutil.INPUTS_MAP_FIELD).hasField(tplutil.PREPARE_MAP_FIELD_NAME) - - _preparedMap := _hasPrepared ? _renderer.get(tplutil.INPUTS_MAP_FIELD).get(tplutil.PREPARE_MAP_FIELD_NAME) : undefined - _templateId := _renderer.get(tplutil.TEMPLATE_FIELD).id _stateRequests := [] @@ -118,6 +127,19 @@ tpl := func() { self._unmarshallers = append(self._unmarshallers, preproc) }, + _onBodyEnd: [], + + /** + * Register a hook that will be executed before exiting from a body. + * This hook can close or finalize resources etc. + * + * @param fn: func() - the hook that should be executed before the end of the body. + */ + registerOnBodyEnd: func(fn) { + ll.assert(is_callable(fn), "fn in on body end hooks must be a function") + self._onBodyEnd = append(self._onBodyEnd, fn) + }, + /** * @return map[string]field: - a map of inputs to the fields of the input map. */ @@ -132,19 +154,9 @@ tpl := func() { */ inputs: func() { if self._inputs == undefined { - inputs := _unmarshal(self.renderer().get(tplutil.INPUTS_MAP_FIELD), self._unmarshallers) - - // if we have prepared inputs, flatten them - pp := inputs[tplutil.PREPARE_MAP_FIELD_NAME] - if !is_undefined(pp) { - delete(inputs, tplutil.PREPARE_MAP_FIELD_NAME) - for k, v in pp { - ll.assert(is_undefined(inputs[k]), k, " key already exists in inputs map") - inputs[k] = v - } - } - - self._inputs = inputs + inputs := smart.unmarshal(self.renderer().get(tplutil.INPUTS_MAP_FIELD), self._unmarshallers) + _flattenPrepareInputs(inputs) + self._inputs = smart.immutablify(inputs) } return self._inputs }, @@ -166,7 +178,7 @@ tpl := func() { * inside. Optional for ephemeral templates. */ defineOutputs : func(...name) { - if len(name) == 1 && is_array(name[0]) { + if len(name) == 1 && ll.isArray(name[0]) { for v in name[0] { self.definedOutputs = append(self.definedOutputs, v) } @@ -233,13 +245,13 @@ tpl := func() { * True means we are in the inner render cycle, when all "to be prepared" fields are passed * already to inputs and no need to call prepare callbacks again. */ - ignorePrepare: _hasPrepared, + ignorePrepare: _hasPrepared(_renderer), /** * Resource map with the resources passed */ preparedMapResource: func() { - return _preparedMap + return _preparedMap(_renderer) }, /** @@ -271,42 +283,29 @@ tpl := func() { ll.assert(!self.ignorePrepare, "expected !ignorePrepare") inputs := self.inputs() - - // create new inputs map newInputs := copy(inputs) - // build a prepare map - builder := undefined - if self.isEphemeral() { - builder = smart.ephemeralMapBuilder() - } else { - builder = smart.mapBuilder() - } - // validate inputs first if needed self._validateInputs() - for cb in self.prepareQueue { + preparedInputs := {} + for _, cb in self.prepareQueue { // run callback r := cb(inputs) - ll.assert(is_map(r), "expected map, got ", r) + ll.assert(ll.isMap(r), "expected map, got ", r) for name, ref in r { ll.assert(smart.isReference(ref), "expected reference, got ", ref) ll.assert(is_undefined(newInputs[name]), "prepare name is already in use: ", name) - - builder.add(name, ref) + preparedInputs[name] = ref } } - newInputs[tplutil.PREPARE_MAP_FIELD_NAME] = builder.build() + + _setPreparedMap(self.isEphemeral(), newInputs, preparedInputs) // re-render self - renderer := undefined - if self.isEphemeral() { - renderer = render.createEphemeral(self.template(), newInputs) - } else { - renderer = render.create(self.template(), newInputs) - } + renderer := render.createUniversal(self.template(), self.isEphemeral(), newInputs) + // set outputs for output in self.definedOutputs { self.getOutputField(output).set(renderer.output(output)) @@ -369,12 +368,14 @@ tpl := func() { */ body: func(bodyFn){ if self.isEphemeral() { - self.routeEph(bodyFn) } else { - self.routePure(bodyFn) } + + for _, fn in self._onBodyEnd { + fn() + } }, /** @@ -421,7 +422,7 @@ tpl := func() { outputsWithValues = sets.add(outputsWithValues, _delegatedOutputs...) ll.assert(sets.fromSlice(self.definedOutputs) == outputsWithValues, - "tpl.body() callback must return the same list of outputs as were given to 'defineOutputs()'. Want %s, got %s", + "tpl.body() callback must return the same list of outputs as were given to 'defineOutputs()'. Want %s, got %s", self.definedOutputs, sets.toSlice(outputsWithValues)) // set result to self outputs @@ -442,7 +443,7 @@ tpl := func() { }] } - if _hasPrepared { + if _hasPrepared(_renderer) { _stateRequests = append(_stateRequests, { path: [tplutil.PREPARE_MAP_FIELD_NAME], state: "ResourceReady" @@ -487,7 +488,7 @@ tpl := func() { * @param extraInputs: map - additional inputs to pass to the template * @param outputs: array - array of expected outputs to save */ - routeDelegate: func(tpl, extraInputs, outputs) { + delegate: func(tpl, extraInputs, outputs) { _delegatedOutputs = outputs inputs := self.rawInputs() @@ -495,12 +496,7 @@ tpl := func() { inputs[k] = v } - renderer := undefined - if self.isEphemeral() { - renderer = render.createEphemeral(tpl, inputs) - } else { - renderer = render.create(tpl, inputs) - } + renderer := render.createUniversal(tpl, self.isEphemeral(), inputs) tplOutputs := {} for o in outputs { @@ -519,6 +515,9 @@ tpl := func() { */ instance := tpl() +// close the cache at the end of the body execution +instance.registerOnBodyEnd(smart.cacheMap().close) + export ll.toStrict({ renderer : instance.renderer, registerUnmarshaller : instance.registerUnmarshaller, @@ -528,7 +527,7 @@ export ll.toStrict({ defineOutputs : instance.defineOutputs, prepare : instance.prepare, awaitState : instance.awaitState, - delegate : instance.routeDelegate, + delegate : instance.delegate, validateInputs : instance.validateInputs, body : instance.body, template : instance.template diff --git a/sdk/workflow-tengo/src/tpl/state-await.lib.tengo b/sdk/workflow-tengo/src/tpl/state-await.lib.tengo index 03a733a727..df74e8dbd0 100644 --- a/sdk/workflow-tengo/src/tpl/state-await.lib.tengo +++ b/sdk/workflow-tengo/src/tpl/state-await.lib.tengo @@ -58,7 +58,7 @@ awaitOneState := func(field, path, state) { } } return awaitOneState(nextField, rPath, state) - } else if is_map(step) { + } else if ll.isMap(step) { if is_undefined(step.wildcard) == is_undefined(step.match) { ll.panic("Unknown step structure: %v", step) } @@ -67,7 +67,7 @@ awaitOneState := func(field, path, state) { if !is_undefined(step.wildcard) { if step.wildcard != "*" { - ll.panic("Complex wildcards are not supported, use { match: \"{regexp}\" }: %v", step.wildcard) + ll.panic("Complex wildcards are not supported, use { match: \"{ regexp }\" }: %v", step.wildcard) } matcher = func(field) { return true @@ -204,7 +204,7 @@ await := func(rootField, ctxStorageResource, requests) { } for _, request in requests { - if !is_map(request) || !is_array(request.path) || !is_string(request.state) { + if !ll.isMap(request) || !ll.isArray(request.path) || !is_string(request.state) { ll.panic("Malformed state await request: %v", request) } res := awaitOneState(rootField, request.path, request.state) diff --git a/sdk/workflow-tengo/src/validation.lib.tengo b/sdk/workflow-tengo/src/validation.lib.tengo index 47b5c6bcae..44ecd63b34 100644 --- a/sdk/workflow-tengo/src/validation.lib.tengo +++ b/sdk/workflow-tengo/src/validation.lib.tengo @@ -192,7 +192,7 @@ _validateJson := func(js, schema, keyPath, ...stack) { // if the schema is an array with "or" at the beginning, // we should check if the element is succeed with // any of the following elements. - if is_array(schema) && len(schema) > 0 && schema[0] == "or" { + if ll.isArray(schema) && len(schema) > 0 && schema[0] == "or" { for i, elem in schema[1:] { r := _validateJson(js, elem, keyPath, stack...) if isSuccess(r) { @@ -206,8 +206,8 @@ _validateJson := func(js, schema, keyPath, ...stack) { // if the schema is an array, then check that every // element of the json has the schema that is the first element // of the schema. - if is_array(schema) { - if !is_array(js) { + if ll.isArray(schema) { + if !ll.isArray(js) { return fail(keyPath, "js %q must be array", js) } diff --git a/sdk/workflow-tengo/src/workdir/proc.lib.tengo b/sdk/workflow-tengo/src/workdir/proc.lib.tengo index 3e3840f6c7..676651173e 100644 --- a/sdk/workflow-tengo/src/workdir/proc.lib.tengo +++ b/sdk/workflow-tengo/src/workdir/proc.lib.tengo @@ -2,6 +2,7 @@ tpl := import(":tpl") ll := import(":ll") +smart := import(":smart") wdSave := import(":workdir.save") // the template has a defined outputs @@ -68,9 +69,11 @@ proc := func() { */ readFiles: func(cb) { tpl.prepare(func(inputs){ - inputs.files = self.filesInWd() + newInputs := copy(inputs) // make newInputs mutable + newInputs.files = self.filesInWd() + // key -> file name - files := cb(inputs) + files := cb(newInputs) wdBuilder := wdSave.builder(self.wdBefore()) for _, fName in files { @@ -131,9 +134,9 @@ proc := func() { */ body: func(cb) { tpl.body(func(inputs) { - - inputs.files = self.filesInWd() - result := cb(inputs) + newInputs := copy(inputs) // make them mutable + newInputs.files = self.filesInWd() + result := cb(smart.immutablify(newInputs)) wd := self.wdFinalBuilder().build() return { diff --git a/sdk/workflow-tengo/src/workflow/bquery.lib.tengo b/sdk/workflow-tengo/src/workflow/bquery.lib.tengo index a59f480e46..c9e0148dc8 100644 --- a/sdk/workflow-tengo/src/workflow/bquery.lib.tengo +++ b/sdk/workflow-tengo/src/workflow/bquery.lib.tengo @@ -36,7 +36,7 @@ _DEFAULT_OPTIONS := { * @param spec: query spec * @param ctx: results pool (context) to query * @param options: an options map - * @return result: a list of {ref: spec: data:} objects (data will be absent if not requested) + * @return result: a list of { ref: spec: data: } objects (data will be absent if not requested) */ create := func(spec, ctx, ...options) { @@ -98,7 +98,7 @@ create := func(spec, ctx, ...options) { } /** - * Inputs preprocessor used to convert query result into array of {ref: spec: data:} objects + * Inputs preprocessor used to convert query result into array of { ref: spec: data: } objects */ resultUnmarshaller := func() { return { @@ -138,7 +138,7 @@ resultUnmarshaller := func() { } } - return result + return immutable(result) } else { // format list of results @@ -169,7 +169,7 @@ resultUnmarshaller := func() { result = result[0] } - return result + return immutable(result) } } } @@ -178,9 +178,9 @@ resultUnmarshaller := func() { /** * Query results pool to find spec & data for a given ref. * - * @param ref: a ref object ({blockId: name:}) + * @param ref: a ref object ({ blockId: name: }) * @param ctx: results pool (context) to query - * @return result: a {ref: spec: data:} object + * @return result: a { ref: spec: data: } object */ resolve := func(ref, ctx, ...options) { diff --git a/sdk/workflow-tengo/src/workflow/index.lib.tengo b/sdk/workflow-tengo/src/workflow/index.lib.tengo index 98ba75bd75..4770906def 100644 --- a/sdk/workflow-tengo/src/workflow/index.lib.tengo +++ b/sdk/workflow-tengo/src/workflow/index.lib.tengo @@ -62,8 +62,8 @@ args := func() { // template inputs inputs := self.inputs() - // original args from inputs - _args = inputs.args + // original args from inputs, but mutable + _args = copy(inputs.args) if is_undefined(_args) || smart.isReference(_args) { ll.panic("Unexpected args type: %v", _args) } @@ -81,6 +81,9 @@ args := func() { } } } + + _args = smart.immutablify(_args) + return _args } @@ -190,7 +193,7 @@ _buildOutputs := func(results) { * Query results pool. * * @param spec: query spec - * @return result: an array of {ref: spec: data:} objects (data will be absent if not requested) + * @return result: an array of { ref: spec: data: } objects (data will be absent if not requested) */ query := func(spec, ...options) { return bquery.create(spec, _parentContext(), options...) @@ -199,8 +202,8 @@ query := func(spec, ...options) { /** * Query results pool to find spec & data for a given ref. * - * @param ref: a ref object ({blockId: name:}) - * @return result: a {ref: spec: data:} object + * @param ref: a ref object ({ blockId: name: }) + * @return result: a { ref: spec: data: } object */ resolve := func(ref, ...options) { r := bquery.resolve(ref, _parentContext(), options...) diff --git a/tests/workflow-tengo/package.json b/tests/workflow-tengo/package.json index 1661ef1b94..cfe0f3804c 100644 --- a/tests/workflow-tengo/package.json +++ b/tests/workflow-tengo/package.json @@ -17,15 +17,14 @@ "build": "rm -rf dist && pl-tengo build", "test": "vitest", "format": "/usr/bin/env emacs --quick --script ./format.el", - "format-stdin": "/usr/bin/env emacs --quick --script ./format-stdin.el", - "vscode-tags": "./create_tags.sh .tags false", - "emacs-tags": "./create_tags.sh ../TAGS false -e" + "format-stdin": "/usr/bin/env emacs --quick --script ./format-stdin.el" }, "devDependencies": { "@milaboratories/platforma-build-configs": "workspace:*", "@platforma-sdk/workflow-tengo": "workspace:*", "@platforma-sdk/tengo-builder": "workspace:*", "@milaboratories/pl-middle-layer": "workspace:*", + "@milaboratories/pl-tree": "workspace:*", "@platforma-sdk/test": "workspace:*", "@milaboratories/software-pframes-conv": "catalog:", "@milaboratories/software-small-binaries": "catalog:", diff --git a/tests/workflow-tengo/src/pframes/test/agg_body_pure.tpl.tengo b/tests/workflow-tengo/src/pframes/test/agg_body_pure.tpl.tengo index f2368d7f5e..236884552f 100644 --- a/tests/workflow-tengo/src/pframes/test/agg_body_pure.tpl.tengo +++ b/tests/workflow-tengo/src/pframes/test/agg_body_pure.tpl.tengo @@ -16,7 +16,7 @@ self.body(func(inputs) { base := inputs.base nested := bool(inputs.nested) - if !is_array(key) { + if !ll.isArray(key) { ll.panic("key is not an array: %v", key) } diff --git a/tests/workflow-tengo/src/test/smart/map_was_referenced_by_field.tpl.tengo b/tests/workflow-tengo/src/test/smart/map_was_referenced_by_field.tpl.tengo new file mode 100644 index 0000000000..0d186cad9d --- /dev/null +++ b/tests/workflow-tengo/src/test/smart/map_was_referenced_by_field.tpl.tengo @@ -0,0 +1,18 @@ +// map was referenced by field. + +smart := import("@platforma-sdk/workflow-tengo:smart") +self := import("@platforma-sdk/workflow-tengo:tpl") +ll := import("@platforma-sdk/workflow-tengo:ll") + +self.defineOutputs(["outputMap", "outputFromCache", "outputField"]) + +self.body(func(inputs) { + res := inputs.mapResource + cachedRes := smart.cacheMap().get(res) + + return { + outputMap: res, + outputFromCache: cachedRes, + outputField: cachedRes.gotFromField() + } +}) diff --git a/tests/workflow-tengo/src/test/smart/referenced_by_field.test.ts b/tests/workflow-tengo/src/test/smart/referenced_by_field.test.ts new file mode 100644 index 0000000000..b42b35ee23 --- /dev/null +++ b/tests/workflow-tengo/src/test/smart/referenced_by_field.test.ts @@ -0,0 +1,54 @@ +import { field, Pl, PlResourceEntry, resourceType } from '@milaboratories/pl-middle-layer'; +import { tplTest } from '@platforma-sdk/test'; +import { PlTreeNodeAccessor } from '@milaboratories/pl-tree'; + +tplTest('should get the resource by a field it was got from', async ({ helper, expect }) => { + const result = await helper.renderTemplate( + false, + 'test.smart.resource_was_referenced_by_field', + ["outputRes", "outputField"], + (tx) => { + const res = tx.createStruct( + resourceType('TestNotExistingType1', '1'), + JSON.stringify(42), + ); + tx.lockInputs(res); + return { res }; + } + ); + + const resResult = result.computeOutput('outputRes', (a) => a?.getDataAsJson()); + const fieldResult = result.computeOutput('outputField', (a) => a?.getDataAsJson()); + + expect(await resResult.awaitStableValue()).eq(42); + expect(await fieldResult.awaitStableValue()).eq(42); +}); + +tplTest('should get the map by a field and from a cache', async ({ helper, expect }) => { + const result = await helper.renderTemplate( + false, + 'test.smart.map_was_referenced_by_field', + ["outputMap", "outputFromCache", "outputField"], + (tx) => { + const map = tx.createStruct(Pl.StdMap); + const answer = tx.createValue(Pl.JsonObject, JSON.stringify(42)); + tx.createField(field(map, 'answer'), 'Input', answer); + tx.lockInputs(map); + + return { + mapResource: map + } + } + ); + + const getFromMap = (a?: PlTreeNodeAccessor) => + a?.getField('answer')?.value?.getDataAsJson() + + const mapResult = result.computeOutput('outputMap', getFromMap); + const cacheResult = result.computeOutput('outputFromCache', getFromMap); + const fieldResult = result.computeOutput('outputField', getFromMap); + + expect(await mapResult.awaitStableValue()).eq(42); + expect(await cacheResult.awaitStableValue()).eq(42); + expect(await fieldResult.awaitStableValue()).eq(42); +}); diff --git a/tests/workflow-tengo/src/test/smart/resource_was_referenced_by_field.tpl.tengo b/tests/workflow-tengo/src/test/smart/resource_was_referenced_by_field.tpl.tengo new file mode 100644 index 0000000000..5a4fffef0a --- /dev/null +++ b/tests/workflow-tengo/src/test/smart/resource_was_referenced_by_field.tpl.tengo @@ -0,0 +1,19 @@ +// resource was referenced by field. + +self := import("@platforma-sdk/workflow-tengo:tpl") +smart := import("@platforma-sdk/workflow-tengo:smart") +ll := import("@platforma-sdk/workflow-tengo:ll") + +self.defineOutputs(["outputRes", "outputField"]) + +// In the body, res from inputs will be created +// with a reference to a field it was got from. +self.body(func(inputs) { + res := inputs.res + + // outputRes should set the field. + return { + outputRes: res, + outputField: res.gotFromField() + } +})