@platforma-open/milaboratories.immune-assay-data.workflow 1.8.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
   WARN  Issue while reading "/home/runner/work/immune-assay-data/immune-assay-data/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
2
2
 
3
- > @platforma-open/milaboratories.immune-assay-data.workflow@1.8.0 build /home/runner/work/immune-assay-data/immune-assay-data/workflow
3
+ > @platforma-open/milaboratories.immune-assay-data.workflow@1.9.0 build /home/runner/work/immune-assay-data/immune-assay-data/workflow
4
4
  > rm -rf dist && pl-tengo check && pl-tengo build
5
5
 
6
6
  Processing "src/analysis.tpl.tengo"...
@@ -9,6 +9,7 @@ Processing "src/check-content-empty.tpl.tengo"...
9
9
  Processing "src/extract-unique-values.tpl.tengo"...
10
10
  Processing "src/get-unique-values.tpl.tengo"...
11
11
  Processing "src/main.tpl.tengo"...
12
+ Processing "src/prerun.tpl.tengo"...
12
13
  Processing "src/process-outputs.tpl.tengo"...
13
14
  Processing "src/run-alignment.tpl.tengo"...
14
15
  No syntax errors found.
@@ -17,6 +18,7 @@ No syntax errors found.
17
18
  info: - writing /home/runner/work/immune-assay-data/immune-assay-data/workflow/dist/tengo/tpl/check-content-empty.plj.gz
18
19
  info: - writing /home/runner/work/immune-assay-data/immune-assay-data/workflow/dist/tengo/tpl/extract-unique-values.plj.gz
19
20
  info: - writing /home/runner/work/immune-assay-data/immune-assay-data/workflow/dist/tengo/tpl/get-unique-values.plj.gz
21
+ info: - writing /home/runner/work/immune-assay-data/immune-assay-data/workflow/dist/tengo/tpl/prerun.plj.gz
20
22
  info: - writing /home/runner/work/immune-assay-data/immune-assay-data/workflow/dist/tengo/tpl/process-outputs.plj.gz
21
23
  info: - writing /home/runner/work/immune-assay-data/immune-assay-data/workflow/dist/tengo/tpl/run-alignment.plj.gz
22
24
  info: - writing /home/runner/work/immune-assay-data/immune-assay-data/workflow/dist/tengo/tpl/analysis.plj.gz
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @platforma-open/milaboratories.immune-assay-data.workflow
2
2
 
3
+ ## 1.9.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 4a7083b: Fix assay file import to support remote (non-local) files
8
+
9
+ Previously, column detection used `lsDriver.getLocalFileContent()` which only works for locally-mounted files. Files from remote storages would silently fail, leaving the block unconfigurable.
10
+
11
+ Now uses a prerun workflow step to import the file and expose it as a blob, and `ReactiveFileContent` in the UI to read it via `blobDriver` — the same pattern used by samples-and-data. This works for both local and remote files.
12
+
13
+ ## 1.8.1
14
+
15
+ ### Patch Changes
16
+
17
+ - 36ed105: Improve empty input detection
18
+ - Updated dependencies [36ed105]
19
+ - @platforma-open/milaboratories.immune-assay-data.check-content-empty@1.0.1
20
+
3
21
  ## 1.8.0
4
22
 
5
23
  ### Minor Changes
package/dist/index.cjs CHANGED
@@ -3,6 +3,7 @@ module.exports = { Templates: {
3
3
  'check-content-empty': { type: 'from-file', path: require.resolve('./tengo/tpl/check-content-empty.plj.gz') },
4
4
  'extract-unique-values': { type: 'from-file', path: require.resolve('./tengo/tpl/extract-unique-values.plj.gz') },
5
5
  'get-unique-values': { type: 'from-file', path: require.resolve('./tengo/tpl/get-unique-values.plj.gz') },
6
+ 'prerun': { type: 'from-file', path: require.resolve('./tengo/tpl/prerun.plj.gz') },
6
7
  'process-outputs': { type: 'from-file', path: require.resolve('./tengo/tpl/process-outputs.plj.gz') },
7
8
  'run-alignment': { type: 'from-file', path: require.resolve('./tengo/tpl/run-alignment.plj.gz') },
8
9
  'analysis': { type: 'from-file', path: require.resolve('./tengo/tpl/analysis.plj.gz') },
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  declare type TemplateFromFile = { readonly type: "from-file"; readonly path: string; };
2
- declare type TplName = "build-outputs" | "check-content-empty" | "extract-unique-values" | "get-unique-values" | "process-outputs" | "run-alignment" | "analysis" | "main";
2
+ declare type TplName = "build-outputs" | "check-content-empty" | "extract-unique-values" | "get-unique-values" | "prerun" | "process-outputs" | "run-alignment" | "analysis" | "main";
3
3
  declare const Templates: Record<TplName, TemplateFromFile>;
4
4
  export { Templates };
package/dist/index.js CHANGED
@@ -4,6 +4,7 @@ export const Templates = {
4
4
  'check-content-empty': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/check-content-empty.plj.gz') },
5
5
  'extract-unique-values': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/extract-unique-values.plj.gz') },
6
6
  'get-unique-values': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/get-unique-values.plj.gz') },
7
+ 'prerun': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/prerun.plj.gz') },
7
8
  'process-outputs': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/process-outputs.plj.gz') },
8
9
  'run-alignment': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/run-alignment.plj.gz') },
9
10
  'analysis': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/analysis.plj.gz') },
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,19 +1,20 @@
1
1
  {
2
2
  "name": "@platforma-open/milaboratories.immune-assay-data.workflow",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "type": "module",
5
5
  "description": "Tengo-based template",
6
6
  "dependencies": {
7
- "@platforma-sdk/workflow-tengo": "5.9.1",
7
+ "@platforma-sdk/workflow-tengo": "5.10.1",
8
8
  "@platforma-open/soedinglab.software-mmseqs2": "1.18.3",
9
- "@platforma-open/milaboratories.immune-assay-data.add-header": "1.1.3",
10
9
  "@platforma-open/milaboratories.immune-assay-data.prepare-fasta": "1.1.3",
11
10
  "@platforma-open/milaboratories.immune-assay-data.coverage-mode-calc": "1.2.0",
11
+ "@platforma-open/milaboratories.immune-assay-data.add-header": "1.1.3",
12
12
  "@platforma-open/milaboratories.immune-assay-data.fasta-to-tsv": "1.1.3",
13
+ "@platforma-open/milaboratories.immune-assay-data.check-content-empty": "1.0.1",
13
14
  "@platforma-open/milaboratories.immune-assay-data.xlsx-to-csv": "1.1.0"
14
15
  },
15
16
  "devDependencies": {
16
- "@platforma-sdk/tengo-builder": "2.4.27"
17
+ "@platforma-sdk/tengo-builder": "2.4.30"
17
18
  },
18
19
  "scripts": {
19
20
  "build": "rm -rf dist && pl-tengo check && pl-tengo build",
@@ -12,6 +12,7 @@ fastaToTsvSw := assets.importSoftware("@platforma-open/milaboratories.immune-ass
12
12
  addHeaderSw := assets.importSoftware("@platforma-open/milaboratories.immune-assay-data.add-header:main")
13
13
  covModeCalcSw := assets.importSoftware("@platforma-open/milaboratories.immune-assay-data.coverage-mode-calc:main")
14
14
  xlsxToCsvSw := assets.importSoftware("@platforma-open/milaboratories.immune-assay-data.xlsx-to-csv:main")
15
+ checkContentEmptySw := assets.importSoftware("@platforma-open/milaboratories.immune-assay-data.check-content-empty:main")
15
16
 
16
17
  runAlignmentTpl := assets.importTemplate(":run-alignment")
17
18
  checkContentEmptyTpl := assets.importTemplate(":check-content-empty")
@@ -274,16 +275,24 @@ self.body(func(args) {
274
275
  arg("-o").arg("results_with_header.tsv").
275
276
  addFile("results.tsv", mmseqsOutput).
276
277
  saveFile("results_with_header.tsv").
277
- saveFileContent("results_with_header.tsv").
278
278
  run()
279
279
 
280
280
  mmseqsResultTsv := addHeaderRun.getFile("results_with_header.tsv")
281
- mmseqsResultContent := addHeaderRun.getFileContent("results_with_header.tsv")
282
281
 
283
- // Use subtemplate to check if file is empty
282
+ // Check if results are empty (only header line or nothing)
283
+ checkResultsRun := exec.builder().
284
+ software(checkContentEmptySw).
285
+ arg("-i").arg("input.file").
286
+ arg("-n").arg("2"). // Require at least 2 non-empty lines (header + 1 data line)
287
+ addFile("input.file", mmseqsResultTsv).
288
+ saveStdoutContent().
289
+ mem("8GiB").
290
+ cpu(1).
291
+ inLightQueue().
292
+ run()
293
+
284
294
  checkResult := render.create(checkContentEmptyTpl, {
285
- content: mmseqsResultContent,
286
- mode: "headerOnly"
295
+ content: checkResultsRun.getStdoutContent()
287
296
  })
288
297
  emptyResults := checkResult.output("result")
289
298
 
@@ -4,18 +4,6 @@ text := import("text")
4
4
  self.defineOutputs("result")
5
5
 
6
6
  self.body(func(args) {
7
- content := string(args.content.getData())
8
- mode := args.mode
9
-
10
- isEmpty := false
11
- if mode == "raw" {
12
- // No header line (e.g. FASTA): empty content means no data
13
- isEmpty = text.trim_space(content) == ""
14
- } else if mode == "headerOnly" {
15
- // File has a header line (e.g. TSV with added header): empty means <= 1 line
16
- lines := text.split(text.trim_space(content), "\n")
17
- isEmpty = len(lines) <= 1
18
- }
19
-
20
- return { result: isEmpty }
7
+ // 'content' is the stdout of the check-software (already a "true"/"false" string)
8
+ return { result: text.trim_space(string(args.content.getData())) == "true" }
21
9
  })
@@ -11,11 +11,15 @@ text := import("text")
11
11
  render := import("@platforma-sdk/workflow-tengo:render")
12
12
  strings := import("@platforma-sdk/workflow-tengo:strings")
13
13
 
14
+ prerunTpl := assets.importTemplate(":prerun")
14
15
  analysisTpl := assets.importTemplate(":analysis")
15
16
  processOutputsTpl := assets.importTemplate(":process-outputs")
16
17
  checkContentEmptyTpl := assets.importTemplate(":check-content-empty")
17
18
 
19
+ wf.setPreRun(prerunTpl)
20
+
18
21
  prepareFastaSw := assets.importSoftware("@platforma-open/milaboratories.immune-assay-data.prepare-fasta:main")
22
+ checkContentEmptySw := assets.importSoftware("@platforma-open/milaboratories.immune-assay-data.check-content-empty:main")
19
23
 
20
24
  wf.prepare(func(args){
21
25
  bundleBuilder := wf.createPBundleBuilder()
@@ -103,15 +107,23 @@ wf.body(func(args) {
103
107
  arg("--seq_col").arg("sequence").
104
108
  arg("--id_col").arg("seqId").
105
109
  saveFile("output.fasta").
106
- saveFileContent("output.fasta").
107
110
  run()
108
111
  clonesFasta := clonesFastaRun.getFile("output.fasta")
109
- clonesFastaContent := clonesFastaRun.getFileContent("output.fasta")
110
112
 
111
113
  // Check if clones are empty before running mmseqs2
114
+ checkClonesRun := exec.builder().
115
+ software(checkContentEmptySw).
116
+ arg("-i").arg("input.file").
117
+ arg("-n").arg("1").
118
+ addFile("input.file", clonesFasta).
119
+ saveStdoutContent().
120
+ mem("8GiB").
121
+ cpu(1).
122
+ inLightQueue().
123
+ run()
124
+
112
125
  checkClonesResult := render.create(checkContentEmptyTpl, {
113
- content: clonesFastaContent,
114
- mode: "raw"
126
+ content: checkClonesRun.getStdoutContent()
115
127
  })
116
128
  emptyClonesInput := checkClonesResult.output("result")
117
129
 
@@ -0,0 +1,17 @@
1
+ wf := import("@platforma-sdk/workflow-tengo:workflow")
2
+ file := import("@platforma-sdk/workflow-tengo:file")
3
+
4
+ wf.body(func(args) {
5
+ if is_undefined(args.fileHandle) {
6
+ return { outputs: {}, exports: {} }
7
+ }
8
+
9
+ importedFile := file.importFile(args.fileHandle)
10
+
11
+ return {
12
+ outputs: {
13
+ assayFile: file.exportFile(importedFile.file)
14
+ },
15
+ exports: {}
16
+ }
17
+ })