@platforma-open/milaboratories.immune-assay-data.model 1.0.1 → 1.1.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.
package/dist/index.cjs CHANGED
@@ -5,11 +5,12 @@ var model$1 = require('@platforma-sdk/model');
5
5
  // src/index.ts
6
6
  var model = model$1.BlockModel.create().withArgs({
7
7
  settings: {
8
- coverageMode: 2,
9
- // default to coverage of clone,
10
- coverageThreshold: 0.95
8
+ coverageThreshold: 0.95,
11
9
  // default value matching MMseqs2 default
12
- }
10
+ identity: 0.9,
11
+ similarityType: "alignment-score"
12
+ },
13
+ selectedColumns: []
13
14
  }).withUiState({
14
15
  title: "Immune Assay Data",
15
16
  tableState: {
@@ -82,6 +83,9 @@ var model = model$1.BlockModel.create().withArgs({
82
83
  (ctx) => ctx.outputs?.resolve("dataImportHandle")?.getImportProgress(),
83
84
  { isActive: true }
84
85
  ).output("table", (ctx) => {
86
+ if (ctx.outputs?.resolve("emptyResults")?.getDataAsJson()) {
87
+ return void 0;
88
+ }
85
89
  const cols = ctx.outputs?.resolve("table")?.getPColumns();
86
90
  if (cols === void 0)
87
91
  return void 0;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["BlockModel","createPlDataTableV2"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n ImportFileHandle,\n InferOutputsType,\n PlDataTableState,\n PlRef,\n SUniversalPColumnId,\n} from '@platforma-sdk/model';\nimport {\n BlockModel,\n createPlDataTableV2,\n} from '@platforma-sdk/model';\n\ntype Settings = {\n coverageThreshold: number; // fraction of aligned residues required\n coverageMode: 0 | 1 | 2 | 3 | 4 | 5; // MMseqs2 coverage modes\n};\n\nexport type ImportColumnInfo = {\n header: string;\n type: 'Int' | 'Double' | 'String';\n /** If this column is a sequence column, the type of the sequence */\n sequenceType?: 'nucleotide' | 'aminoacid';\n};\n\nexport type BlockArgs = {\n datasetRef?: PlRef;\n targetRef?: SUniversalPColumnId;\n fileHandle?: ImportFileHandle;\n fileExtension?: string;\n importColumns?: ImportColumnInfo[];\n sequenceColumnHeader?: string;\n settings: Settings;\n};\n\nexport type UiState = {\n title: string;\n fileImportError?: string;\n tableState: PlDataTableState;\n};\n\nexport const model = BlockModel.create()\n\n .withArgs<BlockArgs>({\n settings: {\n coverageMode: 2, // default to coverage of clone,\n coverageThreshold: 0.95, // default value matching MMseqs2 default\n },\n })\n\n .withUiState<UiState>({\n title: 'Immune Assay Data',\n tableState: {\n gridState: {},\n },\n })\n\n .argsValid((ctx) =>\n ctx.args.datasetRef !== undefined\n && ctx.args.fileHandle !== undefined\n && ctx.args.importColumns !== undefined\n && ctx.args.sequenceColumnHeader !== undefined\n && ctx.args.targetRef !== undefined\n && ctx.uiState.fileImportError === undefined,\n )\n\n .output('datasetOptions', (ctx) =>\n ctx.resultPool.getOptions([{\n axes: [\n { name: 'pl7.app/sampleId' },\n { name: 'pl7.app/vdj/clonotypeKey' },\n ],\n annotations: { 'pl7.app/isAnchor': 'true' },\n }, {\n axes: [\n { name: 'pl7.app/sampleId' },\n { name: 'pl7.app/vdj/scClonotypeKey' },\n ],\n annotations: { 'pl7.app/isAnchor': 'true' },\n }], { refsWithEnrichments: true }),\n )\n\n .output('targetOptions', (ctx) => {\n const ref = ctx.args.datasetRef;\n if (ref === undefined) return undefined;\n\n const isSingleCell = ctx.resultPool.getPColumnSpecByRef(ref)?.axesSpec[1].name === 'pl7.app/vdj/scClonotypeKey';\n const sequenceMatchers = [];\n const allowedFeatures = ['CDR1', 'CDR2', 'CDR3', 'FR1', 'FR2',\n 'FR3', 'FR4', 'VDJRegion'];\n for (const feature of allowedFeatures) {\n if (isSingleCell) {\n sequenceMatchers.push({\n axes: [{ anchor: 'main', idx: 1 }],\n name: 'pl7.app/vdj/sequence',\n domain: {\n 'pl7.app/vdj/feature': feature,\n 'pl7.app/vdj/scClonotypeChain/index': 'primary',\n },\n });\n } else {\n sequenceMatchers.push({\n axes: [{ anchor: 'main', idx: 1 }],\n name: 'pl7.app/vdj/sequence',\n domain: {\n 'pl7.app/vdj/feature': feature,\n },\n });\n }\n }\n\n return ctx.resultPool.getCanonicalOptions(\n { main: ref },\n sequenceMatchers,\n {\n ignoreMissingDomains: true,\n labelOps: {\n includeNativeLabel: true,\n },\n });\n })\n\n .output(\n 'dataImportHandle',\n (ctx) => ctx.outputs?.resolve('dataImportHandle')?.getImportProgress(),\n { isActive: true },\n )\n\n .output('table', (ctx) => {\n const cols = ctx.outputs?.resolve('table')?.getPColumns();\n if (cols === undefined)\n return undefined;\n\n return createPlDataTableV2(\n ctx,\n cols,\n (_) => true,\n ctx.uiState.tableState,\n );\n })\n\n .output('isRunning', (ctx) => ctx.outputs?.getIsReadyOrError() === false)\n\n .title((ctx) => ctx.uiState.title)\n\n .sections((_ctx) => ([\n { type: 'link', href: '/', label: 'Main' },\n ]))\n\n .done();\n\nexport type BlockOutputs = InferOutputsType<typeof model>;\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["BlockModel","createPlDataTableV2"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n ImportFileHandle,\n InferOutputsType,\n PlDataTableState,\n PlRef,\n SUniversalPColumnId,\n} from '@platforma-sdk/model';\nimport {\n BlockModel,\n createPlDataTableV2,\n} from '@platforma-sdk/model';\n\ntype Settings = {\n coverageThreshold: number; // fraction of aligned residues required\n identity: number;\n similarityType: 'sequence-identity' | 'alignment-score';\n};\n\nexport type ImportColumnInfo = {\n header: string;\n type: 'Int' | 'Double' | 'String';\n /** If this column is a sequence column, the type of the sequence */\n sequenceType?: 'nucleotide' | 'aminoacid';\n};\n\nexport type BlockArgs = {\n datasetRef?: PlRef;\n targetRef?: SUniversalPColumnId;\n fileHandle?: ImportFileHandle;\n fileExtension?: string;\n importColumns?: ImportColumnInfo[];\n sequenceColumnHeader?: string;\n selectedColumns: string[];\n settings: Settings;\n};\n\nexport type UiState = {\n title: string;\n fileImportError?: string;\n tableState: PlDataTableState;\n};\n\nexport const model = BlockModel.create()\n\n .withArgs<BlockArgs>({\n settings: {\n coverageThreshold: 0.95, // default value matching MMseqs2 default\n identity: 0.9,\n similarityType: 'alignment-score',\n },\n selectedColumns: [],\n })\n\n .withUiState<UiState>({\n title: 'Immune Assay Data',\n tableState: {\n gridState: {},\n },\n })\n\n .argsValid((ctx) =>\n ctx.args.datasetRef !== undefined\n && ctx.args.fileHandle !== undefined\n && ctx.args.importColumns !== undefined\n && ctx.args.sequenceColumnHeader !== undefined\n && ctx.args.targetRef !== undefined\n && ctx.uiState.fileImportError === undefined,\n )\n\n .output('datasetOptions', (ctx) =>\n ctx.resultPool.getOptions([{\n axes: [\n { name: 'pl7.app/sampleId' },\n { name: 'pl7.app/vdj/clonotypeKey' },\n ],\n annotations: { 'pl7.app/isAnchor': 'true' },\n }, {\n axes: [\n { name: 'pl7.app/sampleId' },\n { name: 'pl7.app/vdj/scClonotypeKey' },\n ],\n annotations: { 'pl7.app/isAnchor': 'true' },\n }], { refsWithEnrichments: true }),\n )\n\n .output('targetOptions', (ctx) => {\n const ref = ctx.args.datasetRef;\n if (ref === undefined) return undefined;\n\n const isSingleCell = ctx.resultPool.getPColumnSpecByRef(ref)?.axesSpec[1].name === 'pl7.app/vdj/scClonotypeKey';\n const sequenceMatchers = [];\n const allowedFeatures = ['CDR1', 'CDR2', 'CDR3', 'FR1', 'FR2',\n 'FR3', 'FR4', 'VDJRegion'];\n for (const feature of allowedFeatures) {\n if (isSingleCell) {\n sequenceMatchers.push({\n axes: [{ anchor: 'main', idx: 1 }],\n name: 'pl7.app/vdj/sequence',\n domain: {\n 'pl7.app/vdj/feature': feature,\n 'pl7.app/vdj/scClonotypeChain/index': 'primary',\n },\n });\n } else {\n sequenceMatchers.push({\n axes: [{ anchor: 'main', idx: 1 }],\n name: 'pl7.app/vdj/sequence',\n domain: {\n 'pl7.app/vdj/feature': feature,\n },\n });\n }\n }\n\n return ctx.resultPool.getCanonicalOptions(\n { main: ref },\n sequenceMatchers,\n {\n ignoreMissingDomains: true,\n labelOps: {\n includeNativeLabel: true,\n },\n });\n })\n\n .output(\n 'dataImportHandle',\n (ctx) => ctx.outputs?.resolve('dataImportHandle')?.getImportProgress(),\n { isActive: true },\n )\n\n .output('table', (ctx) => {\n if (ctx.outputs?.resolve('emptyResults')?.getDataAsJson<boolean>()) {\n return undefined;\n }\n const cols = ctx.outputs?.resolve('table')?.getPColumns();\n if (cols === undefined)\n return undefined;\n\n return createPlDataTableV2(\n ctx,\n cols,\n (_) => true,\n ctx.uiState.tableState,\n );\n })\n\n .output('isRunning', (ctx) => ctx.outputs?.getIsReadyOrError() === false)\n\n .title((ctx) => ctx.uiState.title)\n\n .sections((_ctx) => ([\n { type: 'link', href: '/', label: 'Main' },\n ]))\n\n .done();\n\nexport type BlockOutputs = InferOutputsType<typeof model>;\n"]}
package/dist/index.d.cts CHANGED
@@ -3,7 +3,8 @@ import { PlRef, SUniversalPColumnId, ImportFileHandle, PlDataTableState, InferOu
3
3
 
4
4
  type Settings = {
5
5
  coverageThreshold: number;
6
- coverageMode: 0 | 1 | 2 | 3 | 4 | 5;
6
+ identity: number;
7
+ similarityType: 'sequence-identity' | 'alignment-score';
7
8
  };
8
9
  type ImportColumnInfo = {
9
10
  header: string;
@@ -18,6 +19,7 @@ type BlockArgs = {
18
19
  fileExtension?: string;
19
20
  importColumns?: ImportColumnInfo[];
20
21
  sequenceColumnHeader?: string;
22
+ selectedColumns: string[];
21
23
  settings: Settings;
22
24
  };
23
25
  type UiState = {
package/dist/index.d.ts CHANGED
@@ -3,7 +3,8 @@ import { PlRef, SUniversalPColumnId, ImportFileHandle, PlDataTableState, InferOu
3
3
 
4
4
  type Settings = {
5
5
  coverageThreshold: number;
6
- coverageMode: 0 | 1 | 2 | 3 | 4 | 5;
6
+ identity: number;
7
+ similarityType: 'sequence-identity' | 'alignment-score';
7
8
  };
8
9
  type ImportColumnInfo = {
9
10
  header: string;
@@ -18,6 +19,7 @@ type BlockArgs = {
18
19
  fileExtension?: string;
19
20
  importColumns?: ImportColumnInfo[];
20
21
  sequenceColumnHeader?: string;
22
+ selectedColumns: string[];
21
23
  settings: Settings;
22
24
  };
23
25
  type UiState = {
package/dist/index.js CHANGED
@@ -3,11 +3,12 @@ import { BlockModel, createPlDataTableV2 } from '@platforma-sdk/model';
3
3
  // src/index.ts
4
4
  var model = BlockModel.create().withArgs({
5
5
  settings: {
6
- coverageMode: 2,
7
- // default to coverage of clone,
8
- coverageThreshold: 0.95
6
+ coverageThreshold: 0.95,
9
7
  // default value matching MMseqs2 default
10
- }
8
+ identity: 0.9,
9
+ similarityType: "alignment-score"
10
+ },
11
+ selectedColumns: []
11
12
  }).withUiState({
12
13
  title: "Immune Assay Data",
13
14
  tableState: {
@@ -80,6 +81,9 @@ var model = BlockModel.create().withArgs({
80
81
  (ctx) => ctx.outputs?.resolve("dataImportHandle")?.getImportProgress(),
81
82
  { isActive: true }
82
83
  ).output("table", (ctx) => {
84
+ if (ctx.outputs?.resolve("emptyResults")?.getDataAsJson()) {
85
+ return void 0;
86
+ }
83
87
  const cols = ctx.outputs?.resolve("table")?.getPColumns();
84
88
  if (cols === void 0)
85
89
  return void 0;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type {\n ImportFileHandle,\n InferOutputsType,\n PlDataTableState,\n PlRef,\n SUniversalPColumnId,\n} from '@platforma-sdk/model';\nimport {\n BlockModel,\n createPlDataTableV2,\n} from '@platforma-sdk/model';\n\ntype Settings = {\n coverageThreshold: number; // fraction of aligned residues required\n coverageMode: 0 | 1 | 2 | 3 | 4 | 5; // MMseqs2 coverage modes\n};\n\nexport type ImportColumnInfo = {\n header: string;\n type: 'Int' | 'Double' | 'String';\n /** If this column is a sequence column, the type of the sequence */\n sequenceType?: 'nucleotide' | 'aminoacid';\n};\n\nexport type BlockArgs = {\n datasetRef?: PlRef;\n targetRef?: SUniversalPColumnId;\n fileHandle?: ImportFileHandle;\n fileExtension?: string;\n importColumns?: ImportColumnInfo[];\n sequenceColumnHeader?: string;\n settings: Settings;\n};\n\nexport type UiState = {\n title: string;\n fileImportError?: string;\n tableState: PlDataTableState;\n};\n\nexport const model = BlockModel.create()\n\n .withArgs<BlockArgs>({\n settings: {\n coverageMode: 2, // default to coverage of clone,\n coverageThreshold: 0.95, // default value matching MMseqs2 default\n },\n })\n\n .withUiState<UiState>({\n title: 'Immune Assay Data',\n tableState: {\n gridState: {},\n },\n })\n\n .argsValid((ctx) =>\n ctx.args.datasetRef !== undefined\n && ctx.args.fileHandle !== undefined\n && ctx.args.importColumns !== undefined\n && ctx.args.sequenceColumnHeader !== undefined\n && ctx.args.targetRef !== undefined\n && ctx.uiState.fileImportError === undefined,\n )\n\n .output('datasetOptions', (ctx) =>\n ctx.resultPool.getOptions([{\n axes: [\n { name: 'pl7.app/sampleId' },\n { name: 'pl7.app/vdj/clonotypeKey' },\n ],\n annotations: { 'pl7.app/isAnchor': 'true' },\n }, {\n axes: [\n { name: 'pl7.app/sampleId' },\n { name: 'pl7.app/vdj/scClonotypeKey' },\n ],\n annotations: { 'pl7.app/isAnchor': 'true' },\n }], { refsWithEnrichments: true }),\n )\n\n .output('targetOptions', (ctx) => {\n const ref = ctx.args.datasetRef;\n if (ref === undefined) return undefined;\n\n const isSingleCell = ctx.resultPool.getPColumnSpecByRef(ref)?.axesSpec[1].name === 'pl7.app/vdj/scClonotypeKey';\n const sequenceMatchers = [];\n const allowedFeatures = ['CDR1', 'CDR2', 'CDR3', 'FR1', 'FR2',\n 'FR3', 'FR4', 'VDJRegion'];\n for (const feature of allowedFeatures) {\n if (isSingleCell) {\n sequenceMatchers.push({\n axes: [{ anchor: 'main', idx: 1 }],\n name: 'pl7.app/vdj/sequence',\n domain: {\n 'pl7.app/vdj/feature': feature,\n 'pl7.app/vdj/scClonotypeChain/index': 'primary',\n },\n });\n } else {\n sequenceMatchers.push({\n axes: [{ anchor: 'main', idx: 1 }],\n name: 'pl7.app/vdj/sequence',\n domain: {\n 'pl7.app/vdj/feature': feature,\n },\n });\n }\n }\n\n return ctx.resultPool.getCanonicalOptions(\n { main: ref },\n sequenceMatchers,\n {\n ignoreMissingDomains: true,\n labelOps: {\n includeNativeLabel: true,\n },\n });\n })\n\n .output(\n 'dataImportHandle',\n (ctx) => ctx.outputs?.resolve('dataImportHandle')?.getImportProgress(),\n { isActive: true },\n )\n\n .output('table', (ctx) => {\n const cols = ctx.outputs?.resolve('table')?.getPColumns();\n if (cols === undefined)\n return undefined;\n\n return createPlDataTableV2(\n ctx,\n cols,\n (_) => true,\n ctx.uiState.tableState,\n );\n })\n\n .output('isRunning', (ctx) => ctx.outputs?.getIsReadyOrError() === false)\n\n .title((ctx) => ctx.uiState.title)\n\n .sections((_ctx) => ([\n { type: 'link', href: '/', label: 'Main' },\n ]))\n\n .done();\n\nexport type BlockOutputs = InferOutputsType<typeof model>;\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type {\n ImportFileHandle,\n InferOutputsType,\n PlDataTableState,\n PlRef,\n SUniversalPColumnId,\n} from '@platforma-sdk/model';\nimport {\n BlockModel,\n createPlDataTableV2,\n} from '@platforma-sdk/model';\n\ntype Settings = {\n coverageThreshold: number; // fraction of aligned residues required\n identity: number;\n similarityType: 'sequence-identity' | 'alignment-score';\n};\n\nexport type ImportColumnInfo = {\n header: string;\n type: 'Int' | 'Double' | 'String';\n /** If this column is a sequence column, the type of the sequence */\n sequenceType?: 'nucleotide' | 'aminoacid';\n};\n\nexport type BlockArgs = {\n datasetRef?: PlRef;\n targetRef?: SUniversalPColumnId;\n fileHandle?: ImportFileHandle;\n fileExtension?: string;\n importColumns?: ImportColumnInfo[];\n sequenceColumnHeader?: string;\n selectedColumns: string[];\n settings: Settings;\n};\n\nexport type UiState = {\n title: string;\n fileImportError?: string;\n tableState: PlDataTableState;\n};\n\nexport const model = BlockModel.create()\n\n .withArgs<BlockArgs>({\n settings: {\n coverageThreshold: 0.95, // default value matching MMseqs2 default\n identity: 0.9,\n similarityType: 'alignment-score',\n },\n selectedColumns: [],\n })\n\n .withUiState<UiState>({\n title: 'Immune Assay Data',\n tableState: {\n gridState: {},\n },\n })\n\n .argsValid((ctx) =>\n ctx.args.datasetRef !== undefined\n && ctx.args.fileHandle !== undefined\n && ctx.args.importColumns !== undefined\n && ctx.args.sequenceColumnHeader !== undefined\n && ctx.args.targetRef !== undefined\n && ctx.uiState.fileImportError === undefined,\n )\n\n .output('datasetOptions', (ctx) =>\n ctx.resultPool.getOptions([{\n axes: [\n { name: 'pl7.app/sampleId' },\n { name: 'pl7.app/vdj/clonotypeKey' },\n ],\n annotations: { 'pl7.app/isAnchor': 'true' },\n }, {\n axes: [\n { name: 'pl7.app/sampleId' },\n { name: 'pl7.app/vdj/scClonotypeKey' },\n ],\n annotations: { 'pl7.app/isAnchor': 'true' },\n }], { refsWithEnrichments: true }),\n )\n\n .output('targetOptions', (ctx) => {\n const ref = ctx.args.datasetRef;\n if (ref === undefined) return undefined;\n\n const isSingleCell = ctx.resultPool.getPColumnSpecByRef(ref)?.axesSpec[1].name === 'pl7.app/vdj/scClonotypeKey';\n const sequenceMatchers = [];\n const allowedFeatures = ['CDR1', 'CDR2', 'CDR3', 'FR1', 'FR2',\n 'FR3', 'FR4', 'VDJRegion'];\n for (const feature of allowedFeatures) {\n if (isSingleCell) {\n sequenceMatchers.push({\n axes: [{ anchor: 'main', idx: 1 }],\n name: 'pl7.app/vdj/sequence',\n domain: {\n 'pl7.app/vdj/feature': feature,\n 'pl7.app/vdj/scClonotypeChain/index': 'primary',\n },\n });\n } else {\n sequenceMatchers.push({\n axes: [{ anchor: 'main', idx: 1 }],\n name: 'pl7.app/vdj/sequence',\n domain: {\n 'pl7.app/vdj/feature': feature,\n },\n });\n }\n }\n\n return ctx.resultPool.getCanonicalOptions(\n { main: ref },\n sequenceMatchers,\n {\n ignoreMissingDomains: true,\n labelOps: {\n includeNativeLabel: true,\n },\n });\n })\n\n .output(\n 'dataImportHandle',\n (ctx) => ctx.outputs?.resolve('dataImportHandle')?.getImportProgress(),\n { isActive: true },\n )\n\n .output('table', (ctx) => {\n if (ctx.outputs?.resolve('emptyResults')?.getDataAsJson<boolean>()) {\n return undefined;\n }\n const cols = ctx.outputs?.resolve('table')?.getPColumns();\n if (cols === undefined)\n return undefined;\n\n return createPlDataTableV2(\n ctx,\n cols,\n (_) => true,\n ctx.uiState.tableState,\n );\n })\n\n .output('isRunning', (ctx) => ctx.outputs?.getIsReadyOrError() === false)\n\n .title((ctx) => ctx.uiState.title)\n\n .sections((_ctx) => ([\n { type: 'link', href: '/', label: 'Main' },\n ]))\n\n .done();\n\nexport type BlockOutputs = InferOutputsType<typeof model>;\n"]}