@platforma-open/milaboratories.sequence-properties.model 1.1.1 → 1.1.2

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.
package/dist/index.cjs CHANGED
@@ -27,6 +27,9 @@ const platforma = _platforma_sdk_model.BlockModelV3.create(require_dataModel.blo
27
27
  if (ctx.data.inputAnchor === void 0) return void 0;
28
28
  const ownCols = ctx.outputs?.resolve("propertiesPf")?.getPColumns();
29
29
  if (ownCols === void 0) return void 0;
30
+ const info = ctx.outputs?.resolve("info")?.getDataAsJson();
31
+ if (info === void 0) return void 0;
32
+ const tier = info.coverageTier;
30
33
  const sources = [new _platforma_sdk_model.ArrayColumnProvider(ctx.resultPool.selectColumns((spec) => !spec.annotations?.[_platforma_sdk_model.Annotation.Trace]?.includes("milaboratories.sequence-properties"))), new _platforma_sdk_model.ArrayColumnProvider(ownCols)];
31
34
  return (0, _platforma_sdk_model.createPlDataTableV3)(ctx, {
32
35
  tableState: ctx.data.tableState,
@@ -36,6 +39,22 @@ const platforma = _platforma_sdk_model.BlockModelV3.create(require_dataModel.blo
36
39
  selector: { mode: "enrichment" }
37
40
  },
38
41
  displayOptions: { visibility: [{
42
+ match: (spec) => {
43
+ if (spec.domain?.["pl7.app/vdj/scClonotypeChain/index"] === "secondary") return false;
44
+ if (spec.domain?.["pl7.app/alphabet"] !== "aminoacid") return false;
45
+ const isVdj = spec.name === "pl7.app/vdj/sequence";
46
+ const isUniversal = spec.name === "pl7.app/sequence";
47
+ if (!isVdj && !isUniversal) return false;
48
+ const feature = isVdj ? spec.domain?.["pl7.app/vdj/feature"] : spec.domain?.["pl7.app/feature"];
49
+ if (tier === "peptide") return isUniversal && feature === "peptide";
50
+ const chain = spec.domain?.["pl7.app/vdj/scClonotypeChain"];
51
+ if (chain !== void 0 && chain !== "A") return false;
52
+ if (tier === "full_chain") return feature === "VDJRegion" || feature === "VDJRegionInFrame";
53
+ if (tier === "cdr3_only" || tier === "partial") return feature === "CDR3";
54
+ return false;
55
+ },
56
+ visibility: "default"
57
+ }, {
39
58
  match: (spec) => !spec.annotations?.[_platforma_sdk_model.Annotation.Trace]?.includes("milaboratories.sequence-properties") && spec.annotations?.["pl7.app/isLinkerColumn"] !== "true",
40
59
  visibility: "optional"
41
60
  }] }
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["BlockModelV3","blockDataModel","ArrayColumnProvider","Annotation"],"sources":["../src/index.ts"],"sourcesContent":["import type { ColumnSource, InferOutputsType } from \"@platforma-sdk/model\";\nimport {\n Annotation,\n ArrayColumnProvider,\n BlockModelV3,\n createPlDataTableV3,\n} from \"@platforma-sdk/model\";\nimport { blockDataModel } from \"./dataModel\";\nimport type { BlockArgs, WorkflowInfo } from \"./types\";\n\nexport type { BlockArgs, BlockData, WorkflowInfo, WorkflowMode, WorkflowReceptor } from \"./types\";\nexport { blockDataModel } from \"./dataModel\";\n\nconst inputAnchorSpecs = [\n // Peptide mode — universal naming\n {\n axes: [{ name: \"pl7.app/sampleId\" }, { name: \"pl7.app/variantKey\" }],\n annotations: { \"pl7.app/isAnchor\": \"true\" },\n },\n // Antibody/TCR — legacy MiXCR bulk (cloneId per spec; clonotypeKey per current MiXCR output)\n {\n axes: [{ name: \"pl7.app/sampleId\" }, { name: \"pl7.app/vdj/cloneId\" }],\n annotations: { \"pl7.app/isAnchor\": \"true\" },\n },\n {\n axes: [{ name: \"pl7.app/sampleId\" }, { name: \"pl7.app/vdj/clonotypeKey\" }],\n annotations: { \"pl7.app/isAnchor\": \"true\" },\n },\n // Antibody/TCR — legacy MiXCR single-cell\n {\n axes: [{ name: \"pl7.app/sampleId\" }, { name: \"pl7.app/vdj/scClonotypeKey\" }],\n annotations: { \"pl7.app/isAnchor\": \"true\" },\n },\n];\n\nexport const platforma = BlockModelV3.create(blockDataModel)\n .args<BlockArgs>((data) => {\n if (data.inputAnchor === undefined) {\n throw new Error(\"Select an input dataset\");\n }\n return {\n inputAnchor: data.inputAnchor,\n };\n })\n .output(\"inputOptions\", (ctx) =>\n ctx.resultPool.getOptions(inputAnchorSpecs, { refsWithEnrichments: true }),\n )\n .output(\"inputSpec\", (ctx) =>\n ctx.data.inputAnchor ? ctx.resultPool.getPColumnSpecByRef(ctx.data.inputAnchor) : undefined,\n )\n .output(\"info\", (ctx) => ctx.outputs?.resolve(\"info\")?.getDataAsJson<WorkflowInfo>())\n .output(\"isRunning\", (ctx) => ctx.outputs?.getIsReadyOrError() === false)\n .output(\"processingLog\", (ctx) => ctx.outputs?.resolve(\"processingLog\")?.getLogHandle())\n .outputWithStatus(\"propertiesTable\", (ctx) => {\n if (ctx.data.inputAnchor === undefined) return undefined;\n const ownCols = ctx.outputs?.resolve(\"propertiesPf\")?.getPColumns();\n if (ownCols === undefined) return undefined;\n\n // Build sources explicitly: upstream cols from the result pool minus\n // anything traced back to this block, plus this block's own cols from\n // `propertiesPf`. The workflow also publishes `exports.properties` —\n // a blockId-stamped score-only variant for downstream consumers like\n // Lead Selection — into the result pool. Filtering by trace excludes\n // it here so score cols don't duplicate the propertiesPf variant.\n const upstreamCols = ctx.resultPool.selectColumns(\n (spec) =>\n !spec.annotations?.[Annotation.Trace]?.includes(\"milaboratories.sequence-properties\"),\n );\n const sources: ColumnSource[] = [\n new ArrayColumnProvider(upstreamCols),\n new ArrayColumnProvider(ownCols),\n ];\n\n return createPlDataTableV3(ctx, {\n tableState: ctx.data.tableState,\n columns: {\n sources,\n anchors: { main: ctx.data.inputAnchor },\n selector: { mode: \"enrichment\" },\n },\n // UX policy (not in spec): default-show only this block's columns;\n // demote upstream cols to optional to keep the table uncluttered.\n // This block's cols fall through unmatched and keep the visibility\n // stamped at workflow-time (`pl7.app/table/visibility`).\n displayOptions: {\n visibility: [\n {\n match: (spec) =>\n !spec.annotations?.[Annotation.Trace]?.includes(\n \"milaboratories.sequence-properties\",\n ) && spec.annotations?.[\"pl7.app/isLinkerColumn\"] !== \"true\",\n visibility: \"optional\",\n },\n ],\n },\n });\n })\n .title(() => \"Sequence Properties\")\n .subtitle((ctx) => ctx.data.defaultBlockLabel ?? \"\")\n .sections(() => [{ type: \"link\" as const, href: \"/\" as const, label: \"Main\" }])\n .done();\n\nexport type BlockOutputs = InferOutputsType<typeof platforma>;\n"],"mappings":";;;;AAaA,MAAM,mBAAmB;CAEvB;EACE,MAAM,CAAC,EAAE,MAAM,oBAAoB,EAAE,EAAE,MAAM,sBAAsB,CAAC;EACpE,aAAa,EAAE,oBAAoB,QAAQ;EAC5C;CAED;EACE,MAAM,CAAC,EAAE,MAAM,oBAAoB,EAAE,EAAE,MAAM,uBAAuB,CAAC;EACrE,aAAa,EAAE,oBAAoB,QAAQ;EAC5C;CACD;EACE,MAAM,CAAC,EAAE,MAAM,oBAAoB,EAAE,EAAE,MAAM,4BAA4B,CAAC;EAC1E,aAAa,EAAE,oBAAoB,QAAQ;EAC5C;CAED;EACE,MAAM,CAAC,EAAE,MAAM,oBAAoB,EAAE,EAAE,MAAM,8BAA8B,CAAC;EAC5E,aAAa,EAAE,oBAAoB,QAAQ;EAC5C;CACF;AAED,MAAa,YAAYA,qBAAAA,aAAa,OAAOC,kBAAAA,eAAe,CACzD,MAAiB,SAAS;AACzB,KAAI,KAAK,gBAAgB,KAAA,EACvB,OAAM,IAAI,MAAM,0BAA0B;AAE5C,QAAO,EACL,aAAa,KAAK,aACnB;EACD,CACD,OAAO,iBAAiB,QACvB,IAAI,WAAW,WAAW,kBAAkB,EAAE,qBAAqB,MAAM,CAAC,CAC3E,CACA,OAAO,cAAc,QACpB,IAAI,KAAK,cAAc,IAAI,WAAW,oBAAoB,IAAI,KAAK,YAAY,GAAG,KAAA,EACnF,CACA,OAAO,SAAS,QAAQ,IAAI,SAAS,QAAQ,OAAO,EAAE,eAA6B,CAAC,CACpF,OAAO,cAAc,QAAQ,IAAI,SAAS,mBAAmB,KAAK,MAAM,CACxE,OAAO,kBAAkB,QAAQ,IAAI,SAAS,QAAQ,gBAAgB,EAAE,cAAc,CAAC,CACvF,iBAAiB,oBAAoB,QAAQ;AAC5C,KAAI,IAAI,KAAK,gBAAgB,KAAA,EAAW,QAAO,KAAA;CAC/C,MAAM,UAAU,IAAI,SAAS,QAAQ,eAAe,EAAE,aAAa;AACnE,KAAI,YAAY,KAAA,EAAW,QAAO,KAAA;CAYlC,MAAM,UAA0B,CAC9B,IAAIC,qBAAAA,oBALe,IAAI,WAAW,eACjC,SACC,CAAC,KAAK,cAAcC,qBAAAA,WAAW,QAAQ,SAAS,qCAAqC,CACxF,CAEsC,EACrC,IAAID,qBAAAA,oBAAoB,QAAQ,CACjC;AAED,SAAA,GAAA,qBAAA,qBAA2B,KAAK;EAC9B,YAAY,IAAI,KAAK;EACrB,SAAS;GACP;GACA,SAAS,EAAE,MAAM,IAAI,KAAK,aAAa;GACvC,UAAU,EAAE,MAAM,cAAc;GACjC;EAKD,gBAAgB,EACd,YAAY,CACV;GACE,QAAQ,SACN,CAAC,KAAK,cAAcC,qBAAAA,WAAW,QAAQ,SACrC,qCACD,IAAI,KAAK,cAAc,8BAA8B;GACxD,YAAY;GACb,CACF,EACF;EACF,CAAC;EACF,CACD,YAAY,sBAAsB,CAClC,UAAU,QAAQ,IAAI,KAAK,qBAAqB,GAAG,CACnD,eAAe,CAAC;CAAE,MAAM;CAAiB,MAAM;CAAc,OAAO;CAAQ,CAAC,CAAC,CAC9E,MAAM"}
1
+ {"version":3,"file":"index.cjs","names":["BlockModelV3","blockDataModel","ArrayColumnProvider","Annotation"],"sources":["../src/index.ts"],"sourcesContent":["import type { ColumnSource, InferOutputsType } from \"@platforma-sdk/model\";\nimport {\n Annotation,\n ArrayColumnProvider,\n BlockModelV3,\n createPlDataTableV3,\n} from \"@platforma-sdk/model\";\nimport { blockDataModel } from \"./dataModel\";\nimport type { BlockArgs, WorkflowInfo } from \"./types\";\n\nexport type { BlockArgs, BlockData, WorkflowInfo, WorkflowMode, WorkflowReceptor } from \"./types\";\nexport { blockDataModel } from \"./dataModel\";\n\nconst inputAnchorSpecs = [\n // Peptide mode — universal naming\n {\n axes: [{ name: \"pl7.app/sampleId\" }, { name: \"pl7.app/variantKey\" }],\n annotations: { \"pl7.app/isAnchor\": \"true\" },\n },\n // Antibody/TCR — legacy MiXCR bulk (cloneId per spec; clonotypeKey per current MiXCR output)\n {\n axes: [{ name: \"pl7.app/sampleId\" }, { name: \"pl7.app/vdj/cloneId\" }],\n annotations: { \"pl7.app/isAnchor\": \"true\" },\n },\n {\n axes: [{ name: \"pl7.app/sampleId\" }, { name: \"pl7.app/vdj/clonotypeKey\" }],\n annotations: { \"pl7.app/isAnchor\": \"true\" },\n },\n // Antibody/TCR — legacy MiXCR single-cell\n {\n axes: [{ name: \"pl7.app/sampleId\" }, { name: \"pl7.app/vdj/scClonotypeKey\" }],\n annotations: { \"pl7.app/isAnchor\": \"true\" },\n },\n];\n\nexport const platforma = BlockModelV3.create(blockDataModel)\n .args<BlockArgs>((data) => {\n if (data.inputAnchor === undefined) {\n throw new Error(\"Select an input dataset\");\n }\n return {\n inputAnchor: data.inputAnchor,\n };\n })\n .output(\"inputOptions\", (ctx) =>\n ctx.resultPool.getOptions(inputAnchorSpecs, { refsWithEnrichments: true }),\n )\n .output(\"inputSpec\", (ctx) =>\n ctx.data.inputAnchor ? ctx.resultPool.getPColumnSpecByRef(ctx.data.inputAnchor) : undefined,\n )\n .output(\"info\", (ctx) => ctx.outputs?.resolve(\"info\")?.getDataAsJson<WorkflowInfo>())\n .output(\"isRunning\", (ctx) => ctx.outputs?.getIsReadyOrError() === false)\n .output(\"processingLog\", (ctx) => ctx.outputs?.resolve(\"processingLog\")?.getLogHandle())\n .outputWithStatus(\"propertiesTable\", (ctx) => {\n if (ctx.data.inputAnchor === undefined) return undefined;\n const ownCols = ctx.outputs?.resolve(\"propertiesPf\")?.getPColumns();\n if (ownCols === undefined) return undefined;\n // `coverageTier` is set in workflow/main.tpl.tengo and surfaced via the\n // `info` JSON resource. Allowed values are defined in types.ts::WorkflowInfo.\n // Gate on `info` so the table renders consistently with the chosen aa\n // column rather than briefly without it while `info` is still resolving.\n const info = ctx.outputs?.resolve(\"info\")?.getDataAsJson<WorkflowInfo>();\n if (info === undefined) return undefined;\n const tier = info.coverageTier;\n\n // Build sources explicitly: upstream cols from the result pool minus\n // anything traced back to this block, plus this block's own cols from\n // `propertiesPf`. The workflow also publishes `exports.properties` —\n // a blockId-stamped score-only variant for downstream consumers like\n // Lead Selection — into the result pool. Filtering by trace excludes\n // it here so score cols don't duplicate the propertiesPf variant.\n const upstreamCols = ctx.resultPool.selectColumns(\n (spec) =>\n !spec.annotations?.[Annotation.Trace]?.includes(\"milaboratories.sequence-properties\"),\n );\n const sources: ColumnSource[] = [\n new ArrayColumnProvider(upstreamCols),\n new ArrayColumnProvider(ownCols),\n ];\n\n return createPlDataTableV3(ctx, {\n tableState: ctx.data.tableState,\n columns: {\n sources,\n anchors: { main: ctx.data.inputAnchor },\n selector: { mode: \"enrichment\" },\n },\n // Default-visible: this block's columns + a single source amino-acid\n // sequence column matching the analysed coverage tier. Reviewer asked\n // for one sequence next to the properties full-chain VDJRegion when\n // available (it contains the CDR3); CDR3 alone when that is all the\n // input has; peptide for peptide mode. Chain A (heavy / alpha / gamma)\n // only — chain B stays available via the column picker. Other upstream\n // cols → optional. This block's cols fall through unmatched and keep\n // their workflow-time `pl7.app/table/visibility` annotation.\n displayOptions: {\n visibility: [\n {\n match: (spec) => {\n if (spec.domain?.[\"pl7.app/vdj/scClonotypeChain/index\"] === \"secondary\") {\n return false;\n }\n if (spec.domain?.[\"pl7.app/alphabet\"] !== \"aminoacid\") return false;\n\n const isVdj = spec.name === \"pl7.app/vdj/sequence\";\n const isUniversal = spec.name === \"pl7.app/sequence\";\n if (!isVdj && !isUniversal) return false;\n\n const feature = isVdj\n ? spec.domain?.[\"pl7.app/vdj/feature\"]\n : spec.domain?.[\"pl7.app/feature\"];\n\n if (tier === \"peptide\") {\n return isUniversal && feature === \"peptide\";\n }\n\n const chain = spec.domain?.[\"pl7.app/vdj/scClonotypeChain\"];\n if (chain !== undefined && chain !== \"A\") return false;\n\n if (tier === \"full_chain\") {\n return feature === \"VDJRegion\" || feature === \"VDJRegionInFrame\";\n }\n if (tier === \"cdr3_only\" || tier === \"partial\") {\n return feature === \"CDR3\";\n }\n return false;\n },\n visibility: \"default\",\n },\n {\n match: (spec) =>\n !spec.annotations?.[Annotation.Trace]?.includes(\n \"milaboratories.sequence-properties\",\n ) && spec.annotations?.[\"pl7.app/isLinkerColumn\"] !== \"true\",\n visibility: \"optional\",\n },\n ],\n },\n });\n })\n .title(() => \"Sequence Properties\")\n .subtitle((ctx) => ctx.data.defaultBlockLabel ?? \"\")\n .sections(() => [{ type: \"link\" as const, href: \"/\" as const, label: \"Main\" }])\n .done();\n\nexport type BlockOutputs = InferOutputsType<typeof platforma>;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;cAmCa,SAAA,EAAS,uBAAA,CAAA,iBAAA,yBAAA,WAAA,CAiEb,SAAA,EAjEa,SAAA,0BAAA,uBAAA;gBAAA,uBAAA,CAAA,kBAAA;IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAAA,uBAAA,CAAA,sBAAA;AAAA,KAmEV,YAAA,GAAe,gBAAA,QAAwB,SAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;cAmCa,SAAA,EAAS,uBAAA,CAAA,iBAAA,yBAAA,WAAA,CA4Gb,SAAA,EA5Ga,SAAA,0BAAA,uBAAA;gBAAA,uBAAA,CAAA,kBAAA;IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAAA,uBAAA,CAAA,sBAAA;AAAA,KA8GV,YAAA,GAAe,gBAAA,QAAwB,SAAA"}
package/dist/index.js CHANGED
@@ -26,6 +26,9 @@ const platforma = BlockModelV3.create(blockDataModel).args((data) => {
26
26
  if (ctx.data.inputAnchor === void 0) return void 0;
27
27
  const ownCols = ctx.outputs?.resolve("propertiesPf")?.getPColumns();
28
28
  if (ownCols === void 0) return void 0;
29
+ const info = ctx.outputs?.resolve("info")?.getDataAsJson();
30
+ if (info === void 0) return void 0;
31
+ const tier = info.coverageTier;
29
32
  const sources = [new ArrayColumnProvider(ctx.resultPool.selectColumns((spec) => !spec.annotations?.[Annotation.Trace]?.includes("milaboratories.sequence-properties"))), new ArrayColumnProvider(ownCols)];
30
33
  return createPlDataTableV3(ctx, {
31
34
  tableState: ctx.data.tableState,
@@ -35,6 +38,22 @@ const platforma = BlockModelV3.create(blockDataModel).args((data) => {
35
38
  selector: { mode: "enrichment" }
36
39
  },
37
40
  displayOptions: { visibility: [{
41
+ match: (spec) => {
42
+ if (spec.domain?.["pl7.app/vdj/scClonotypeChain/index"] === "secondary") return false;
43
+ if (spec.domain?.["pl7.app/alphabet"] !== "aminoacid") return false;
44
+ const isVdj = spec.name === "pl7.app/vdj/sequence";
45
+ const isUniversal = spec.name === "pl7.app/sequence";
46
+ if (!isVdj && !isUniversal) return false;
47
+ const feature = isVdj ? spec.domain?.["pl7.app/vdj/feature"] : spec.domain?.["pl7.app/feature"];
48
+ if (tier === "peptide") return isUniversal && feature === "peptide";
49
+ const chain = spec.domain?.["pl7.app/vdj/scClonotypeChain"];
50
+ if (chain !== void 0 && chain !== "A") return false;
51
+ if (tier === "full_chain") return feature === "VDJRegion" || feature === "VDJRegionInFrame";
52
+ if (tier === "cdr3_only" || tier === "partial") return feature === "CDR3";
53
+ return false;
54
+ },
55
+ visibility: "default"
56
+ }, {
38
57
  match: (spec) => !spec.annotations?.[Annotation.Trace]?.includes("milaboratories.sequence-properties") && spec.annotations?.["pl7.app/isLinkerColumn"] !== "true",
39
58
  visibility: "optional"
40
59
  }] }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type { ColumnSource, InferOutputsType } from \"@platforma-sdk/model\";\nimport {\n Annotation,\n ArrayColumnProvider,\n BlockModelV3,\n createPlDataTableV3,\n} from \"@platforma-sdk/model\";\nimport { blockDataModel } from \"./dataModel\";\nimport type { BlockArgs, WorkflowInfo } from \"./types\";\n\nexport type { BlockArgs, BlockData, WorkflowInfo, WorkflowMode, WorkflowReceptor } from \"./types\";\nexport { blockDataModel } from \"./dataModel\";\n\nconst inputAnchorSpecs = [\n // Peptide mode — universal naming\n {\n axes: [{ name: \"pl7.app/sampleId\" }, { name: \"pl7.app/variantKey\" }],\n annotations: { \"pl7.app/isAnchor\": \"true\" },\n },\n // Antibody/TCR — legacy MiXCR bulk (cloneId per spec; clonotypeKey per current MiXCR output)\n {\n axes: [{ name: \"pl7.app/sampleId\" }, { name: \"pl7.app/vdj/cloneId\" }],\n annotations: { \"pl7.app/isAnchor\": \"true\" },\n },\n {\n axes: [{ name: \"pl7.app/sampleId\" }, { name: \"pl7.app/vdj/clonotypeKey\" }],\n annotations: { \"pl7.app/isAnchor\": \"true\" },\n },\n // Antibody/TCR — legacy MiXCR single-cell\n {\n axes: [{ name: \"pl7.app/sampleId\" }, { name: \"pl7.app/vdj/scClonotypeKey\" }],\n annotations: { \"pl7.app/isAnchor\": \"true\" },\n },\n];\n\nexport const platforma = BlockModelV3.create(blockDataModel)\n .args<BlockArgs>((data) => {\n if (data.inputAnchor === undefined) {\n throw new Error(\"Select an input dataset\");\n }\n return {\n inputAnchor: data.inputAnchor,\n };\n })\n .output(\"inputOptions\", (ctx) =>\n ctx.resultPool.getOptions(inputAnchorSpecs, { refsWithEnrichments: true }),\n )\n .output(\"inputSpec\", (ctx) =>\n ctx.data.inputAnchor ? ctx.resultPool.getPColumnSpecByRef(ctx.data.inputAnchor) : undefined,\n )\n .output(\"info\", (ctx) => ctx.outputs?.resolve(\"info\")?.getDataAsJson<WorkflowInfo>())\n .output(\"isRunning\", (ctx) => ctx.outputs?.getIsReadyOrError() === false)\n .output(\"processingLog\", (ctx) => ctx.outputs?.resolve(\"processingLog\")?.getLogHandle())\n .outputWithStatus(\"propertiesTable\", (ctx) => {\n if (ctx.data.inputAnchor === undefined) return undefined;\n const ownCols = ctx.outputs?.resolve(\"propertiesPf\")?.getPColumns();\n if (ownCols === undefined) return undefined;\n\n // Build sources explicitly: upstream cols from the result pool minus\n // anything traced back to this block, plus this block's own cols from\n // `propertiesPf`. The workflow also publishes `exports.properties` —\n // a blockId-stamped score-only variant for downstream consumers like\n // Lead Selection — into the result pool. Filtering by trace excludes\n // it here so score cols don't duplicate the propertiesPf variant.\n const upstreamCols = ctx.resultPool.selectColumns(\n (spec) =>\n !spec.annotations?.[Annotation.Trace]?.includes(\"milaboratories.sequence-properties\"),\n );\n const sources: ColumnSource[] = [\n new ArrayColumnProvider(upstreamCols),\n new ArrayColumnProvider(ownCols),\n ];\n\n return createPlDataTableV3(ctx, {\n tableState: ctx.data.tableState,\n columns: {\n sources,\n anchors: { main: ctx.data.inputAnchor },\n selector: { mode: \"enrichment\" },\n },\n // UX policy (not in spec): default-show only this block's columns;\n // demote upstream cols to optional to keep the table uncluttered.\n // This block's cols fall through unmatched and keep the visibility\n // stamped at workflow-time (`pl7.app/table/visibility`).\n displayOptions: {\n visibility: [\n {\n match: (spec) =>\n !spec.annotations?.[Annotation.Trace]?.includes(\n \"milaboratories.sequence-properties\",\n ) && spec.annotations?.[\"pl7.app/isLinkerColumn\"] !== \"true\",\n visibility: \"optional\",\n },\n ],\n },\n });\n })\n .title(() => \"Sequence Properties\")\n .subtitle((ctx) => ctx.data.defaultBlockLabel ?? \"\")\n .sections(() => [{ type: \"link\" as const, href: \"/\" as const, label: \"Main\" }])\n .done();\n\nexport type BlockOutputs = InferOutputsType<typeof platforma>;\n"],"mappings":";;;AAaA,MAAM,mBAAmB;CAEvB;EACE,MAAM,CAAC,EAAE,MAAM,oBAAoB,EAAE,EAAE,MAAM,sBAAsB,CAAC;EACpE,aAAa,EAAE,oBAAoB,QAAQ;EAC5C;CAED;EACE,MAAM,CAAC,EAAE,MAAM,oBAAoB,EAAE,EAAE,MAAM,uBAAuB,CAAC;EACrE,aAAa,EAAE,oBAAoB,QAAQ;EAC5C;CACD;EACE,MAAM,CAAC,EAAE,MAAM,oBAAoB,EAAE,EAAE,MAAM,4BAA4B,CAAC;EAC1E,aAAa,EAAE,oBAAoB,QAAQ;EAC5C;CAED;EACE,MAAM,CAAC,EAAE,MAAM,oBAAoB,EAAE,EAAE,MAAM,8BAA8B,CAAC;EAC5E,aAAa,EAAE,oBAAoB,QAAQ;EAC5C;CACF;AAED,MAAa,YAAY,aAAa,OAAO,eAAe,CACzD,MAAiB,SAAS;AACzB,KAAI,KAAK,gBAAgB,KAAA,EACvB,OAAM,IAAI,MAAM,0BAA0B;AAE5C,QAAO,EACL,aAAa,KAAK,aACnB;EACD,CACD,OAAO,iBAAiB,QACvB,IAAI,WAAW,WAAW,kBAAkB,EAAE,qBAAqB,MAAM,CAAC,CAC3E,CACA,OAAO,cAAc,QACpB,IAAI,KAAK,cAAc,IAAI,WAAW,oBAAoB,IAAI,KAAK,YAAY,GAAG,KAAA,EACnF,CACA,OAAO,SAAS,QAAQ,IAAI,SAAS,QAAQ,OAAO,EAAE,eAA6B,CAAC,CACpF,OAAO,cAAc,QAAQ,IAAI,SAAS,mBAAmB,KAAK,MAAM,CACxE,OAAO,kBAAkB,QAAQ,IAAI,SAAS,QAAQ,gBAAgB,EAAE,cAAc,CAAC,CACvF,iBAAiB,oBAAoB,QAAQ;AAC5C,KAAI,IAAI,KAAK,gBAAgB,KAAA,EAAW,QAAO,KAAA;CAC/C,MAAM,UAAU,IAAI,SAAS,QAAQ,eAAe,EAAE,aAAa;AACnE,KAAI,YAAY,KAAA,EAAW,QAAO,KAAA;CAYlC,MAAM,UAA0B,CAC9B,IAAI,oBALe,IAAI,WAAW,eACjC,SACC,CAAC,KAAK,cAAc,WAAW,QAAQ,SAAS,qCAAqC,CACxF,CAEsC,EACrC,IAAI,oBAAoB,QAAQ,CACjC;AAED,QAAO,oBAAoB,KAAK;EAC9B,YAAY,IAAI,KAAK;EACrB,SAAS;GACP;GACA,SAAS,EAAE,MAAM,IAAI,KAAK,aAAa;GACvC,UAAU,EAAE,MAAM,cAAc;GACjC;EAKD,gBAAgB,EACd,YAAY,CACV;GACE,QAAQ,SACN,CAAC,KAAK,cAAc,WAAW,QAAQ,SACrC,qCACD,IAAI,KAAK,cAAc,8BAA8B;GACxD,YAAY;GACb,CACF,EACF;EACF,CAAC;EACF,CACD,YAAY,sBAAsB,CAClC,UAAU,QAAQ,IAAI,KAAK,qBAAqB,GAAG,CACnD,eAAe,CAAC;CAAE,MAAM;CAAiB,MAAM;CAAc,OAAO;CAAQ,CAAC,CAAC,CAC9E,MAAM"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type { ColumnSource, InferOutputsType } from \"@platforma-sdk/model\";\nimport {\n Annotation,\n ArrayColumnProvider,\n BlockModelV3,\n createPlDataTableV3,\n} from \"@platforma-sdk/model\";\nimport { blockDataModel } from \"./dataModel\";\nimport type { BlockArgs, WorkflowInfo } from \"./types\";\n\nexport type { BlockArgs, BlockData, WorkflowInfo, WorkflowMode, WorkflowReceptor } from \"./types\";\nexport { blockDataModel } from \"./dataModel\";\n\nconst inputAnchorSpecs = [\n // Peptide mode — universal naming\n {\n axes: [{ name: \"pl7.app/sampleId\" }, { name: \"pl7.app/variantKey\" }],\n annotations: { \"pl7.app/isAnchor\": \"true\" },\n },\n // Antibody/TCR — legacy MiXCR bulk (cloneId per spec; clonotypeKey per current MiXCR output)\n {\n axes: [{ name: \"pl7.app/sampleId\" }, { name: \"pl7.app/vdj/cloneId\" }],\n annotations: { \"pl7.app/isAnchor\": \"true\" },\n },\n {\n axes: [{ name: \"pl7.app/sampleId\" }, { name: \"pl7.app/vdj/clonotypeKey\" }],\n annotations: { \"pl7.app/isAnchor\": \"true\" },\n },\n // Antibody/TCR — legacy MiXCR single-cell\n {\n axes: [{ name: \"pl7.app/sampleId\" }, { name: \"pl7.app/vdj/scClonotypeKey\" }],\n annotations: { \"pl7.app/isAnchor\": \"true\" },\n },\n];\n\nexport const platforma = BlockModelV3.create(blockDataModel)\n .args<BlockArgs>((data) => {\n if (data.inputAnchor === undefined) {\n throw new Error(\"Select an input dataset\");\n }\n return {\n inputAnchor: data.inputAnchor,\n };\n })\n .output(\"inputOptions\", (ctx) =>\n ctx.resultPool.getOptions(inputAnchorSpecs, { refsWithEnrichments: true }),\n )\n .output(\"inputSpec\", (ctx) =>\n ctx.data.inputAnchor ? ctx.resultPool.getPColumnSpecByRef(ctx.data.inputAnchor) : undefined,\n )\n .output(\"info\", (ctx) => ctx.outputs?.resolve(\"info\")?.getDataAsJson<WorkflowInfo>())\n .output(\"isRunning\", (ctx) => ctx.outputs?.getIsReadyOrError() === false)\n .output(\"processingLog\", (ctx) => ctx.outputs?.resolve(\"processingLog\")?.getLogHandle())\n .outputWithStatus(\"propertiesTable\", (ctx) => {\n if (ctx.data.inputAnchor === undefined) return undefined;\n const ownCols = ctx.outputs?.resolve(\"propertiesPf\")?.getPColumns();\n if (ownCols === undefined) return undefined;\n // `coverageTier` is set in workflow/main.tpl.tengo and surfaced via the\n // `info` JSON resource. Allowed values are defined in types.ts::WorkflowInfo.\n // Gate on `info` so the table renders consistently with the chosen aa\n // column rather than briefly without it while `info` is still resolving.\n const info = ctx.outputs?.resolve(\"info\")?.getDataAsJson<WorkflowInfo>();\n if (info === undefined) return undefined;\n const tier = info.coverageTier;\n\n // Build sources explicitly: upstream cols from the result pool minus\n // anything traced back to this block, plus this block's own cols from\n // `propertiesPf`. The workflow also publishes `exports.properties` —\n // a blockId-stamped score-only variant for downstream consumers like\n // Lead Selection — into the result pool. Filtering by trace excludes\n // it here so score cols don't duplicate the propertiesPf variant.\n const upstreamCols = ctx.resultPool.selectColumns(\n (spec) =>\n !spec.annotations?.[Annotation.Trace]?.includes(\"milaboratories.sequence-properties\"),\n );\n const sources: ColumnSource[] = [\n new ArrayColumnProvider(upstreamCols),\n new ArrayColumnProvider(ownCols),\n ];\n\n return createPlDataTableV3(ctx, {\n tableState: ctx.data.tableState,\n columns: {\n sources,\n anchors: { main: ctx.data.inputAnchor },\n selector: { mode: \"enrichment\" },\n },\n // Default-visible: this block's columns + a single source amino-acid\n // sequence column matching the analysed coverage tier. Reviewer asked\n // for one sequence next to the properties full-chain VDJRegion when\n // available (it contains the CDR3); CDR3 alone when that is all the\n // input has; peptide for peptide mode. Chain A (heavy / alpha / gamma)\n // only — chain B stays available via the column picker. Other upstream\n // cols → optional. This block's cols fall through unmatched and keep\n // their workflow-time `pl7.app/table/visibility` annotation.\n displayOptions: {\n visibility: [\n {\n match: (spec) => {\n if (spec.domain?.[\"pl7.app/vdj/scClonotypeChain/index\"] === \"secondary\") {\n return false;\n }\n if (spec.domain?.[\"pl7.app/alphabet\"] !== \"aminoacid\") return false;\n\n const isVdj = spec.name === \"pl7.app/vdj/sequence\";\n const isUniversal = spec.name === \"pl7.app/sequence\";\n if (!isVdj && !isUniversal) return false;\n\n const feature = isVdj\n ? spec.domain?.[\"pl7.app/vdj/feature\"]\n : spec.domain?.[\"pl7.app/feature\"];\n\n if (tier === \"peptide\") {\n return isUniversal && feature === \"peptide\";\n }\n\n const chain = spec.domain?.[\"pl7.app/vdj/scClonotypeChain\"];\n if (chain !== undefined && chain !== \"A\") return false;\n\n if (tier === \"full_chain\") {\n return feature === \"VDJRegion\" || feature === \"VDJRegionInFrame\";\n }\n if (tier === \"cdr3_only\" || tier === \"partial\") {\n return feature === \"CDR3\";\n }\n return false;\n },\n visibility: \"default\",\n },\n {\n match: (spec) =>\n !spec.annotations?.[Annotation.Trace]?.includes(\n \"milaboratories.sequence-properties\",\n ) && spec.annotations?.[\"pl7.app/isLinkerColumn\"] !== \"true\",\n visibility: \"optional\",\n },\n ],\n },\n });\n })\n .title(() => \"Sequence Properties\")\n .subtitle((ctx) => ctx.data.defaultBlockLabel ?? \"\")\n .sections(() => [{ type: \"link\" as const, href: \"/\" as const, label: \"Main\" }])\n .done();\n\nexport type BlockOutputs = InferOutputsType<typeof platforma>;\n"],"mappings":"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"}