From 6f7e9bf110f330280c679c3a3ba43708f7a19c17 Mon Sep 17 00:00:00 2001 From: Dmitry Bolotin Date: Mon, 2 Sep 2024 19:27:31 +0200 Subject: [PATCH] wip --- .gitignore | 1 + model/src/index.ts | 21 ++- pnpm-lock.yaml | 184 ++++++++++----------------- pnpm-workspace.yaml | 10 +- test/.gitignore | 1 - test/src/wf.test.ts | 4 +- workflow/package.json | 8 +- workflow/src/main.tpl.tengo | 3 +- workflow/src/mixcr-analyze.tpl.tengo | 13 +- workflow/src/test/columns.test.ts | 3 + workflow/test_config.json | 5 + workflow/tsconfig.json | 16 +++ workflow/vitest.config.mts | 9 ++ 13 files changed, 146 insertions(+), 132 deletions(-) delete mode 100644 test/.gitignore create mode 100644 workflow/src/test/columns.test.ts create mode 100644 workflow/test_config.json create mode 100644 workflow/tsconfig.json create mode 100644 workflow/vitest.config.mts diff --git a/.gitignore b/.gitignore index f8a56fa..d5d8062 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ dist/ block-pack/ dev/ work/ +.test_auth.json diff --git a/model/src/index.ts b/model/src/index.ts index 537597e..878a1ec 100644 --- a/model/src/index.ts +++ b/model/src/index.ts @@ -2,6 +2,7 @@ import { BlockModel, InferHrefType, Option, + isPColumn, isPColumnSpec, type InferOutputsType } from '@milaboratory/sdk-ui'; @@ -32,11 +33,21 @@ export const platforma = BlockModel.create('Heavy') ) ) - .output('clones', (ctx) => - parseResourceMap(ctx.outputs?.resolve({ field: 'clones', assertFieldType: 'Input' }), (acc) => - acc.listInputFields() - ) - ) + .output('clones', (ctx) => { + // const collection = ctx.outputs + // ?.resolve({ field: 'clones', assertFieldType: 'Input' }) + // ?.parsePObjectCollection(); + // if (collection === undefined) return undefined; + // // if (collection === undefined || !collection.isComplete) return undefined; + // const pColumns = Object.entries(collection) + // .map(([id, obj]) => obj) + // .filter(isPColumn); + // return ctx.createPFrame(pColumns); + // parseResourceMap(ctx.outputs?.resolve({ field: 'clones', assertFieldType: 'Input' }), (acc) => + // acc.listInputFields() + // ) + return ctx.outputs?.resolve({ field: 'clones', assertFieldType: 'Input' })?.listInputFields(); + }) .output('inputOptions', (ctx) => { const spectFromPool = ctx.resultPool.getSpecsFromResultPool(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6318b46..f8b0995 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,8 +22,8 @@ catalogs: specifier: ^2.27.7 version: 2.27.7 '@milaboratory/helpers': - specifier: ^1.5.2 - version: 1.5.2 + specifier: ^1.5.3 + version: 1.5.3 '@milaboratory/milaboratories.samples-and-data': specifier: 1.1.5 version: 1.1.5 @@ -34,8 +34,8 @@ catalogs: specifier: ^2.1.5 version: 2.1.5 '@milaboratory/platforma-uikit': - specifier: ^1.0.30 - version: 1.0.30 + specifier: ^1.0.33 + version: 1.0.33 '@milaboratory/sdk-test': specifier: ^1.5.1 version: 1.5.1 @@ -43,11 +43,11 @@ catalogs: specifier: ^0.12.21 version: 0.12.21 '@milaboratory/sdk-vue': - specifier: ^1.0.40 - version: 1.0.40 + specifier: ^1.0.42 + version: 1.0.44 '@milaboratory/tengo-sdk': - specifier: ^1.1.6 - version: 1.1.6 + specifier: ^1.1.7 + version: 1.1.7 '@milaboratory/tengo-template-builder': specifier: ^1.13.0 version: 1.13.0 @@ -73,8 +73,8 @@ catalogs: specifier: ^3.4.38 version: 3.4.38 vue-tsc: - specifier: ^2.1.2 - version: 2.1.2 + specifier: ^2.1.4 + version: 2.1.4 zod: specifier: ^3.23.8 version: 3.23.8 @@ -163,19 +163,19 @@ importers: version: 32.1.0(typescript@5.5.4) '@milaboratory/helpers': specifier: 'catalog:' - version: 1.5.2 + version: 1.5.3 '@milaboratory/milaboratories.mixcr-clonotyping.model': specifier: workspace:* version: link:../model '@milaboratory/platforma-uikit': specifier: 'catalog:' - version: 1.0.30(typescript@5.5.4) + version: 1.0.33(typescript@5.5.4) '@milaboratory/sdk-ui': specifier: 'catalog:' version: 0.12.21 '@milaboratory/sdk-vue': specifier: 'catalog:' - version: 1.0.40(@milaboratory/helpers@1.5.2)(@milaboratory/sdk-ui@0.12.21)(typescript@5.5.4)(vue@3.4.38(typescript@5.5.4)) + version: 1.0.44(@milaboratory/helpers@1.5.3)(@milaboratory/sdk-ui@0.12.21)(typescript@5.5.4)(vue@3.4.38(typescript@5.5.4)) utility-types: specifier: 'catalog:' version: 3.11.0 @@ -197,16 +197,25 @@ importers: version: 5.4.2(@types/node@22.0.0) vue-tsc: specifier: 'catalog:' - version: 2.1.2(typescript@5.5.4) + version: 2.1.4(typescript@5.5.4) workflow: devDependencies: + '@milaboratory/sdk-test': + specifier: 'catalog:' + version: 1.5.1(@milaboratory/sdk-model@1.3.9)(@types/node@22.0.0) '@milaboratory/tengo-sdk': specifier: 'catalog:' - version: 1.1.6 + version: 1.1.7 '@milaboratory/tengo-template-builder': specifier: 'catalog:' version: 1.13.0 + typescript: + specifier: 'catalog:' + version: 5.5.4 + vitest: + specifier: 'catalog:' + version: 2.0.5(@types/node@22.0.0) packages: @@ -823,6 +832,9 @@ packages: '@milaboratory/helpers@1.5.2': resolution: {integrity: sha512-9UUACVZsUHeI4IJiRXNBgzq/3yFRXChJmr4dU8fco92jMd5tp2UziIwh/OzVrmbSMlm7dWWHXJ6dg3EYmD+qdg==, tarball: https://npm.pkg.github.com/download/@milaboratory/helpers/1.5.2/470283b6fc0544519e4c687e9b1aea6fe464300a} + '@milaboratory/helpers@1.5.3': + resolution: {integrity: sha512-NYxQidKlohXtlV/SkPe7TE2VMw21h+vouRjj6133fQMD/ttowVLQOVmQU9hC8Xx4wrby5dSPBKh/s1tgbuIB6w==, tarball: https://npm.pkg.github.com/download/@milaboratory/helpers/1.5.3/901706849014c6e7508aa8a9beea07cd5c208925} + '@milaboratory/milaboratories.samples-and-data.model@1.1.1': resolution: {integrity: sha512-ZsJpyirY9RRz1MPX7DTfWGywEdzACjass+uAm6B7TWEWeM6kb/MYRTfgElsK6OQ0WR0qJwXxrbdrrtXE8caWGg==, tarball: https://npm.pkg.github.com/download/@milaboratory/milaboratories.samples-and-data.model/1.1.1/cd217e943a323d6cdd3a6143113d5bb1a89b69ec} @@ -866,14 +878,14 @@ packages: '@milaboratory/platforma-core@0.1.5': resolution: {integrity: sha512-h9BW6SnX7zcNMrc3fl70DJuVUPTm+pn6/buKMZJypp/bV51DwT50FiAhCBklCkttwtngZqKXE0i//1H00V0qNg==, tarball: https://npm.pkg.github.com/download/@milaboratory/platforma-core/0.1.5/cc46c20f983d2c291aec707200e5ff46e082c1a6} - '@milaboratory/platforma-uikit@1.0.29': - resolution: {integrity: sha512-/804A08lL58MhoeqK3EdBS020BOKdANPsFvYQLvgSNvDu1L/4ooNyiMAuiCnuoxiOU4TQYJ8GCfvGIV0JAo5vg==, tarball: https://npm.pkg.github.com/download/@milaboratory/platforma-uikit/1.0.29/051a588e6e40fa089d0ce6425bee2efd59f17cac} - engines: {node: ^20.12.2, npm: ^10.5.2} - '@milaboratory/platforma-uikit@1.0.30': resolution: {integrity: sha512-jLbsKiE8IYeaylv0Umj5F7stXZ70kG4OJined2/2dm97j9lqAumfq1iELxrECXgc3vsDSLZAnLmGQFBQeJmszA==, tarball: https://npm.pkg.github.com/download/@milaboratory/platforma-uikit/1.0.30/f0c7138c913cc19894893002d37ce85d9ca86220} engines: {node: ^20.12.2, npm: ^10.5.2} + '@milaboratory/platforma-uikit@1.0.33': + resolution: {integrity: sha512-8Oc/SFeU7EEUXVOlPQwYlUSumPyyazhWPKRrkEKfgPh5MWG7eRAiomUHyGk683HxM9fpNke9G1TUPku8kRJu+Q==, tarball: https://npm.pkg.github.com/download/@milaboratory/platforma-uikit/1.0.33/8a3cfdd7309529035f2fdd3c66e350ec667e6207} + engines: {node: ^20.12.2, npm: ^10.5.2} + '@milaboratory/sdk-model@1.3.7': resolution: {integrity: sha512-cWrAfQHw5h7W57BpURHv5v5ni5nO1EWIYiE52pbnh5i3CT87ZLvrNLRFJTeY1tcqOnSDrkk0Mcln1Hdylo3h0Q==, tarball: https://npm.pkg.github.com/download/@milaboratory/sdk-model/1.3.7/2cae8c7bcc431adebc4337bd2402359666b55ff1} @@ -893,8 +905,15 @@ packages: '@milaboratory/sdk-ui': ^0.12.10 vue: ^3.4.31 - '@milaboratory/tengo-sdk@1.1.6': - resolution: {integrity: sha512-v0EctZc0N3f2IT/bI2Lwv4eKPi6isvWZQB5peyQYRUMg82nlH5RMDrafqAyiW2Df5w97K8JMwqr6h001oYBmyw==, tarball: https://npm.pkg.github.com/download/@milaboratory/tengo-sdk/1.1.6/329020d26ef8960abd07e0b9e6f4cd1748635788} + '@milaboratory/sdk-vue@1.0.44': + resolution: {integrity: sha512-np+kYRDcPSxWML8PHAbzS0Bo3VR4tDn3JSHk3q+z/Q9gEzUhyNs/cKgE3nnUBDjW4rhIvUawpvycQYotcZzX0w==, tarball: https://npm.pkg.github.com/download/@milaboratory/sdk-vue/1.0.44/4226dc56521b965cfce0631241dabf8825587113} + peerDependencies: + '@milaboratory/helpers': ^1.5.3 + '@milaboratory/sdk-ui': ^0.12.10 + vue: ^3.4.31 + + '@milaboratory/tengo-sdk@1.1.7': + resolution: {integrity: sha512-tpp6gGIyn0Cgr3yTo3aJAx1oUi9y8ZFIpQT4btNME2q5Ai8Mb2pUZ/HggBZ6jyfKXtyX3KoEBv/SuZmMO/ll/A==, tarball: https://npm.pkg.github.com/download/@milaboratory/tengo-sdk/1.1.7/1ff52a3446d51361cddd4dee1a096fbcde730512} '@milaboratory/tengo-template-builder@1.13.0': resolution: {integrity: sha512-xokNWyp+IWC8JLIq6yUbLW1HA+qzLs+nEELv2LtHlUoKVH1JR5ju7fj5H4OeOgP9NIvKfjyzq4VpGjNSNa92Gw==, tarball: https://npm.pkg.github.com/download/@milaboratory/tengo-template-builder/1.13.0/e866030cc9ec80cee031541aa27bfd05f10d5221} @@ -1425,8 +1444,8 @@ packages: '@vue/devtools-api@6.6.3': resolution: {integrity: sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw==} - '@vue/language-core@2.1.2': - resolution: {integrity: sha512-tt2J7C+l0J/T5PaLhJ0jvCCi0JNwu3e8azWTYxW3jmAW5B/dac0g5UxmI7l59CQgCGFotqUqI3tXjfZgoWNtog==} + '@vue/language-core@2.1.4': + resolution: {integrity: sha512-i8pfAgNjTNjabBX1xRsuV6aRw2E8bdQXwd5H8m3cUkTVJju3QN5nfdoXET0uK+yXsuloNJPzo6PXFujRRPNmMA==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -2746,68 +2765,6 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - vite@5.4.0: - resolution: {integrity: sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - vite@5.4.1: - resolution: {integrity: sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - vite@5.4.2: resolution: {integrity: sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -2872,8 +2829,8 @@ packages: peerDependencies: vue: ^3.2.0 - vue-tsc@2.1.2: - resolution: {integrity: sha512-PH1BDxWT3eaPhl73elyZj6DV0nR3K4IFoUM1sGzMXXQneovVUwHQytdSyAHiED5MtEINGSHpL/Hs9ch+c/tDTw==} + vue-tsc@2.1.4: + resolution: {integrity: sha512-XTzMXQcsixAvNbpou/9qngEsZawaiJRZH3Ja+lfgRfv2A1TJv9vnZ/Kyv7XxPqv/TaZVFSnjGpM87VbWIg6yQg==} hasBin: true peerDependencies: typescript: '>=5.0.0' @@ -3920,6 +3877,8 @@ snapshots: '@milaboratory/helpers@1.5.2': {} + '@milaboratory/helpers@1.5.3': {} + '@milaboratory/milaboratories.samples-and-data.model@1.1.1': dependencies: '@milaboratory/sdk-ui': 0.12.21 @@ -3933,7 +3892,7 @@ snapshots: '@ag-grid-community/vue3': 32.1.0(typescript@5.5.4) '@milaboratory/helpers': 1.5.2 '@milaboratory/milaboratories.samples-and-data.model': 1.1.1 - '@milaboratory/platforma-uikit': 1.0.29(typescript@5.5.4) + '@milaboratory/platforma-uikit': 1.0.30(typescript@5.5.4) '@milaboratory/sdk-ui': 0.12.21 '@milaboratory/sdk-vue': 1.0.40(@milaboratory/helpers@1.5.2)(@milaboratory/sdk-ui@0.12.21)(typescript@5.5.4)(vue@3.4.38(typescript@5.5.4)) utility-types: 3.11.0 @@ -4032,7 +3991,7 @@ snapshots: '@milaboratory/pl-middle-layer-model': 1.2.16 '@milaboratory/pl-tree': 1.3.5 '@milaboratory/sdk-ui': 0.12.21 - '@milaboratory/tengo-sdk': 1.1.6 + '@milaboratory/tengo-sdk': 1.1.7 '@milaboratory/ts-helpers': 1.0.19 canonicalize: 2.0.0 denque: 2.1.0 @@ -4062,7 +4021,7 @@ snapshots: dependencies: zod: 3.23.8 - '@milaboratory/platforma-uikit@1.0.29(typescript@5.5.4)': + '@milaboratory/platforma-uikit@1.0.30(typescript@5.5.4)': dependencies: '@milaboratory/helpers': 1.5.2 '@milaboratory/platforma-core': 0.1.5 @@ -4074,9 +4033,9 @@ snapshots: transitivePeerDependencies: - typescript - '@milaboratory/platforma-uikit@1.0.30(typescript@5.5.4)': + '@milaboratory/platforma-uikit@1.0.33(typescript@5.5.4)': dependencies: - '@milaboratory/helpers': 1.5.2 + '@milaboratory/helpers': 1.5.3 '@milaboratory/platforma-core': 0.1.5 js-yaml: 4.1.0 vue: 3.4.38(typescript@5.5.4) @@ -4137,7 +4096,18 @@ snapshots: transitivePeerDependencies: - typescript - '@milaboratory/tengo-sdk@1.1.6': {} + '@milaboratory/sdk-vue@1.0.44(@milaboratory/helpers@1.5.3)(@milaboratory/sdk-ui@0.12.21)(typescript@5.5.4)(vue@3.4.38(typescript@5.5.4))': + dependencies: + '@milaboratory/helpers': 1.5.3 + '@milaboratory/platforma-uikit': 1.0.33(typescript@5.5.4) + '@milaboratory/sdk-ui': 0.12.21 + vue: 3.4.38(typescript@5.5.4) + optionalDependencies: + '@rollup/rollup-linux-x64-gnu': 4.9.5 + transitivePeerDependencies: + - typescript + + '@milaboratory/tengo-sdk@1.1.7': {} '@milaboratory/tengo-template-builder@1.13.0': dependencies: @@ -4804,7 +4774,7 @@ snapshots: '@vue/devtools-api@6.6.3': {} - '@vue/language-core@2.1.2(typescript@5.5.4)': + '@vue/language-core@2.1.4(typescript@5.5.4)': dependencies: '@volar/language-core': 2.4.1 '@vue/compiler-dom': 3.4.38 @@ -6123,7 +6093,7 @@ snapshots: debug: 4.3.6(supports-color@8.1.1) pathe: 1.1.2 tinyrainbow: 1.2.0 - vite: 5.4.1(@types/node@22.0.0) + vite: 5.4.2(@types/node@22.0.0) transitivePeerDependencies: - '@types/node' - less @@ -6135,24 +6105,6 @@ snapshots: - supports-color - terser - vite@5.4.0(@types/node@22.0.0): - dependencies: - esbuild: 0.21.5 - postcss: 8.4.40 - rollup: 4.19.1 - optionalDependencies: - '@types/node': 22.0.0 - fsevents: 2.3.3 - - vite@5.4.1(@types/node@22.0.0): - dependencies: - esbuild: 0.21.5 - postcss: 8.4.41 - rollup: 4.19.1 - optionalDependencies: - '@types/node': 22.0.0 - fsevents: 2.3.3 - vite@5.4.2(@types/node@22.0.0): dependencies: esbuild: 0.21.5 @@ -6180,7 +6132,7 @@ snapshots: tinybench: 2.8.0 tinypool: 1.0.0 tinyrainbow: 1.2.0 - vite: 5.4.0(@types/node@22.0.0) + vite: 5.4.2(@types/node@22.0.0) vite-node: 2.0.5(@types/node@22.0.0) why-is-node-running: 2.3.0 optionalDependencies: @@ -6202,10 +6154,10 @@ snapshots: '@vue/devtools-api': 6.6.3 vue: 3.4.38(typescript@5.5.4) - vue-tsc@2.1.2(typescript@5.5.4): + vue-tsc@2.1.4(typescript@5.5.4): dependencies: '@volar/typescript': 2.4.1 - '@vue/language-core': 2.1.2(typescript@5.5.4) + '@vue/language-core': 2.1.4(typescript@5.5.4) semver: 7.6.3 typescript: 5.5.4 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 86e1c60..0dcb652 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -13,14 +13,14 @@ catalog: '@milaboratory/sdk-ui': ^0.12.21 '@milaboratory/sdk-test': ^1.5.1 - '@milaboratory/tengo-sdk': ^1.1.6 + '@milaboratory/tengo-sdk': ^1.1.7 - '@milaboratory/platforma-uikit': ^1.0.30 - '@milaboratory/sdk-vue': ^1.0.40 - '@milaboratory/helpers': ^1.5.2 + '@milaboratory/platforma-uikit': ^1.0.33 + '@milaboratory/sdk-vue': ^1.0.42 + '@milaboratory/helpers': ^1.5.3 'vue': ^3.4.38 - 'vue-tsc': ^2.1.2 + 'vue-tsc': ^2.1.4 'zod': ^3.23.8 'utility-types': ^3.11.0 diff --git a/test/.gitignore b/test/.gitignore deleted file mode 100644 index 83a7b4b..0000000 --- a/test/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.test_auth.json diff --git a/test/src/wf.test.ts b/test/src/wf.test.ts index c32bbef..6adfb33 100644 --- a/test/src/wf.test.ts +++ b/test/src/wf.test.ts @@ -44,7 +44,7 @@ blockTest( blockTest( 'simple project', - { timeout: 20000 }, + { timeout: 25000 }, async ({ rawPrj: project, ml, helpers, expect }) => { const sndBlockId = await project.addBlock('Samples & Data', samplesAndDataBlockSpec); const clonotypingBlockId = await project.addBlock('MiXCR Clonotyping', myBlockSpec); @@ -151,6 +151,8 @@ blockTest( ).toString('utf8') ); + console.dir(alignJsonReport, { depth: 5 }); + expect(alignJsonReport.aligned).toBeDefined(); expect(alignJsonReport.aligned).greaterThan(2); // console.dir(alignJsonReport, { depth: 5 }); diff --git a/workflow/package.json b/workflow/package.json index 7bac571..b01524f 100644 --- a/workflow/package.json +++ b/workflow/package.json @@ -5,10 +5,14 @@ "description": "Tengo-based template", "scripts": { "build": "node ./scripts/build-static.mjs src/pfconv_params.json src/pfconv_params.lib.tengo && rm -rf dist && pl-tengo check && pl-tengo build", - "format": "/usr/bin/env emacs --script ./format.el" + "format": "/usr/bin/env emacs --script ./format.el", + "test": "vitest" }, "devDependencies": { "@milaboratory/tengo-template-builder": "catalog:", - "@milaboratory/tengo-sdk": "catalog:" + "@milaboratory/tengo-sdk": "catalog:", + "@milaboratory/sdk-test": "catalog:", + "vitest": "catalog:", + "typescript": "catalog:" } } diff --git a/workflow/src/main.tpl.tengo b/workflow/src/main.tpl.tengo index c6b6f4a..5ce2e6e 100644 --- a/workflow/src/main.tpl.tengo +++ b/workflow/src/main.tpl.tengo @@ -54,7 +54,8 @@ wf.body(func(args) { reports: { spec: runMixcr.output("reports.spec"), data: runMixcr.output("reports.data") - } + }, + clonse: runMixcr.output("clones") } outputs := { diff --git a/workflow/src/mixcr-analyze.tpl.tengo b/workflow/src/mixcr-analyze.tpl.tengo index 21f2523..bdb31b8 100644 --- a/workflow/src/mixcr-analyze.tpl.tengo +++ b/workflow/src/mixcr-analyze.tpl.tengo @@ -42,13 +42,24 @@ self.body(func(inputs) { arg("analyze"). arg(preset) + // The following code is split into two loops to maintain correct file index ordering (R1, R2, ...) + + filesByRIndex := {} for sKey, inputFile in inputData.inputs() { key := json.decode(sKey) r := key[0] if (r[0] != 'R' && r[0] != "I") || (r[1] != '1' && r[1] != '2') || len(r) != 2 { ll.panic("malformed read index: %v", r) } - fileName := "input_" + r + "." + fileExtension + filesByRIndex[r] = inputFile + } + + for rIndex in ["I1", "I2", "R1", "R2"] { + inputFile := filesByRIndex[rIndex] + if is_undefined(inputFile) { + continue + } + fileName := "input_" + rIndex + "." + fileExtension mixcrCmdBuilder.addFile(fileName, inputFile). arg(fileName) } diff --git a/workflow/src/test/columns.test.ts b/workflow/src/test/columns.test.ts new file mode 100644 index 0000000..5ac194b --- /dev/null +++ b/workflow/src/test/columns.test.ts @@ -0,0 +1,3 @@ +import { awaitStableState, tplTest } from '@milaboratory/sdk-test'; + +tplTest('creating column lists', async ({ helper, expect }) => {}); diff --git a/workflow/test_config.json b/workflow/test_config.json new file mode 100644 index 0000000..297c77f --- /dev/null +++ b/workflow/test_config.json @@ -0,0 +1,5 @@ +{ + "address": "http://127.0.0.1:6345?tx-delay=5&force-sync=true", + "test_user": "test_user", + "test_password": "test_password" +} diff --git a/workflow/tsconfig.json b/workflow/tsconfig.json new file mode 100644 index 0000000..4593cba --- /dev/null +++ b/workflow/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "es2022", + "module": "commonjs", + "moduleResolution": "node", + "esModuleInterop": true, + "strict": true, + "outDir": "./dist", + "rootDir": "./src", + "sourceMap": true, + "declaration": true + }, + "types": [], + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/workflow/vitest.config.mts b/workflow/vitest.config.mts new file mode 100644 index 0000000..dc17fea --- /dev/null +++ b/workflow/vitest.config.mts @@ -0,0 +1,9 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + watch: false, + maxConcurrency: 3, + testTimeout: 5000 + } +});