From 50035787818b8443be16849b00a28df649f6b4b2 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Mon, 20 Oct 2025 13:08:20 -0700 Subject: [PATCH 01/25] Update URLResolver to reference new controller for workflow-related actions --- packages/components/releaseNotes/components.md | 4 ++++ packages/components/src/internal/url/URLResolver.ts | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/components/releaseNotes/components.md b/packages/components/releaseNotes/components.md index 7fb9a9679d..a1867e0de1 100644 --- a/packages/components/releaseNotes/components.md +++ b/packages/components/releaseNotes/components.md @@ -1,6 +1,10 @@ # @labkey/components Components, models, actions, and utility functions for LabKey applications and pages +### version TBD +*Released*: TBD +- Update URLResolver to reference new controller for workflow-related actions + ### version 6.64.3 *Released*: 13 October 2025 - Search: escape all quotes in search terms diff --git a/packages/components/src/internal/url/URLResolver.ts b/packages/components/src/internal/url/URLResolver.ts index e3f88fa276..d6aded2486 100644 --- a/packages/components/src/internal/url/URLResolver.ts +++ b/packages/components/src/internal/url/URLResolver.ts @@ -766,7 +766,7 @@ export class URLResolver { url = url.substring(0, index); } return row.set('url', this.mapURL({ url, row })); - } else if (url.indexOf('samplemanager-downloadAttachments') >= 0) { + } else if (url.indexOf('workflow-downloadAttachments') >= 0) { return row.set('url', this.mapURL({ url, row })); } else if (url.indexOf('notebook') >= 0) { return row.set('url', this.mapURL({ url, row })); From 4c32c0889352c307728598d5849c74522b08af4e Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Mon, 20 Oct 2025 13:12:22 -0700 Subject: [PATCH 02/25] @labkey/components v6.64.4-moveWorkflowCode.0 --- packages/components/package-lock.json | 4 ++-- packages/components/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/components/package-lock.json b/packages/components/package-lock.json index 9dcfae3c08..c62f4d8dee 100644 --- a/packages/components/package-lock.json +++ b/packages/components/package-lock.json @@ -1,12 +1,12 @@ { "name": "@labkey/components", - "version": "6.64.3", + "version": "6.64.4-moveWorkflowCode.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@labkey/components", - "version": "6.64.3", + "version": "6.64.4-moveWorkflowCode.0", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/packages/components/package.json b/packages/components/package.json index d843b88f24..cea2408fb5 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@labkey/components", - "version": "6.64.3", + "version": "6.64.4-moveWorkflowCode.0", "description": "Components, models, actions, and utility functions for LabKey applications and pages", "sideEffects": false, "files": [ From aacc516412d6503c105b4b3757f9821b1585755d Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Mon, 20 Oct 2025 15:41:04 -0700 Subject: [PATCH 03/25] merge from develop and update package versions --- packages/components/package-lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/components/package-lock.json b/packages/components/package-lock.json index c62f4d8dee..a0ac30620a 100644 --- a/packages/components/package-lock.json +++ b/packages/components/package-lock.json @@ -1,12 +1,12 @@ { "name": "@labkey/components", - "version": "6.64.4-moveWorkflowCode.0", + "version": "6.65.2-moveWorkflowCode.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@labkey/components", - "version": "6.64.4-moveWorkflowCode.0", + "version": "6.65.2-moveWorkflowCode.0", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", From 9f0a48d733aa62318973b5262964c01d3a93ecd4 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Wed, 22 Oct 2025 08:21:01 -0700 Subject: [PATCH 04/25] Revert URL update (for now) --- packages/components/src/internal/url/URLResolver.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/components/src/internal/url/URLResolver.ts b/packages/components/src/internal/url/URLResolver.ts index d6aded2486..e3f88fa276 100644 --- a/packages/components/src/internal/url/URLResolver.ts +++ b/packages/components/src/internal/url/URLResolver.ts @@ -766,7 +766,7 @@ export class URLResolver { url = url.substring(0, index); } return row.set('url', this.mapURL({ url, row })); - } else if (url.indexOf('workflow-downloadAttachments') >= 0) { + } else if (url.indexOf('samplemanager-downloadAttachments') >= 0) { return row.set('url', this.mapURL({ url, row })); } else if (url.indexOf('notebook') >= 0) { return row.set('url', this.mapURL({ url, row })); From bd31b1561c0ae9d5ae664ab3583af31724caffe1 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Wed, 22 Oct 2025 08:24:00 -0700 Subject: [PATCH 05/25] v6.65.2-moveWorkflowCode.1 --- packages/components/package-lock.json | 4 ++-- packages/components/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/components/package-lock.json b/packages/components/package-lock.json index a0ac30620a..3324d9de2f 100644 --- a/packages/components/package-lock.json +++ b/packages/components/package-lock.json @@ -1,12 +1,12 @@ { "name": "@labkey/components", - "version": "6.65.2-moveWorkflowCode.0", + "version": "6.65.2-moveWorkflowCode.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@labkey/components", - "version": "6.65.2-moveWorkflowCode.0", + "version": "6.65.2-moveWorkflowCode.1", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/packages/components/package.json b/packages/components/package.json index 1499be0ff1..0cb4c16c07 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@labkey/components", - "version": "6.65.2-moveWorkflowCode.0", + "version": "6.65.2-moveWorkflowCode.1", "description": "Components, models, actions, and utility functions for LabKey applications and pages", "sideEffects": false, "files": [ From 632c094c11cfff82c16759f22be6d9f95ccdff3f Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Wed, 29 Oct 2025 12:41:43 -0700 Subject: [PATCH 06/25] Merge remote-tracking branch 'origin/develop' into fb_moveWorkflowCode --- packages/components/package-lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/components/package-lock.json b/packages/components/package-lock.json index bd19e846f3..c83bd5ffee 100644 --- a/packages/components/package-lock.json +++ b/packages/components/package-lock.json @@ -1,12 +1,12 @@ { "name": "@labkey/components", - "version": "6.66.1-moveWorkflowCode.2", + "version": "6.67.2-moveWorkflowCode.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@labkey/components", - "version": "6.66.1-moveWorkflowCode.2", + "version": "6.67.2-moveWorkflowCode.2", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", From 503dd105b1fcf88f7d4efb5b937fd406fc85c58c Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Wed, 29 Oct 2025 12:50:50 -0700 Subject: [PATCH 07/25] merge from develop --- packages/components/package-lock.json | 4 ++-- packages/components/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/components/package-lock.json b/packages/components/package-lock.json index c83bd5ffee..9d2dd1455e 100644 --- a/packages/components/package-lock.json +++ b/packages/components/package-lock.json @@ -1,12 +1,12 @@ { "name": "@labkey/components", - "version": "6.67.2-moveWorkflowCode.2", + "version": "6.67.2-moveWorkflowCode.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@labkey/components", - "version": "6.67.2-moveWorkflowCode.2", + "version": "6.67.2-moveWorkflowCode.3", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/packages/components/package.json b/packages/components/package.json index 68ae415db2..38d664f4be 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@labkey/components", - "version": "6.67.2-moveWorkflowCode.2", + "version": "6.67.2-moveWorkflowCode.3", "description": "Components, models, actions, and utility functions for LabKey applications and pages", "sideEffects": false, "files": [ From 6f1b6acdedab732d43e59a8a3f59dcef40ac6805 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Fri, 7 Nov 2025 17:00:39 -0800 Subject: [PATCH 08/25] Begin addition of tables in Workflow schema --- .../src/internal/AssayDefinitionModel.ts | 3 ++- .../src/internal/components/samples/utils.tsx | 3 ++- packages/components/src/internal/schemas.ts | 19 +++++++++++++++++-- .../src/internal/url/AppURLResolver.ts | 5 +++-- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/packages/components/src/internal/AssayDefinitionModel.ts b/packages/components/src/internal/AssayDefinitionModel.ts index a073da74d5..933d65acb1 100644 --- a/packages/components/src/internal/AssayDefinitionModel.ts +++ b/packages/components/src/internal/AssayDefinitionModel.ts @@ -171,7 +171,8 @@ export class AssayDefinitionModel extends ImmutableRecord({ // 44339: the SourceSamples custom query is backed by exp.materials const isTargetAllSamples = targetSQ.isEqual(SCHEMAS.SAMPLE_MANAGEMENT.SOURCE_SAMPLES) || - targetSQ.isEqual(SCHEMAS.SAMPLE_MANAGEMENT.INPUT_SAMPLES_SQ) || + targetSQ.isEqual(SCHEMAS.WORKFLOW.INPUT_SAMPLES_SQ) || + targetSQ.isEqual(SCHEMAS.WORKFLOW.WORK_ENTITY) || (isPicklist && targetSQ.hasSchema(SCHEMAS.PICKLIST_TABLES.SCHEMA)); const findLookup = (col: QueryColumn): boolean => { if (col.isLookup()) { diff --git a/packages/components/src/internal/components/samples/utils.tsx b/packages/components/src/internal/components/samples/utils.tsx index 9a05f390eb..11ffe2bf54 100644 --- a/packages/components/src/internal/components/samples/utils.tsx +++ b/packages/components/src/internal/components/samples/utils.tsx @@ -278,7 +278,8 @@ export function isAllSamplesSchema(schemaQuery: SchemaQuery): boolean { if (lcSchemaName === SCHEMAS.SAMPLE_MANAGEMENT.SCHEMA) { return ( lcQueryName === SCHEMAS.SAMPLE_MANAGEMENT.SOURCE_SAMPLES.queryName.toLowerCase() || - lcQueryName === SCHEMAS.SAMPLE_MANAGEMENT.INPUT_SAMPLES_SQ.queryName.toLowerCase() + lcQueryName === SCHEMAS.WORKFLOW.INPUT_SAMPLES_SQ.queryName.toLowerCase() || + lcQueryName === SCHEMAS.WORKFLOW.WORK_ENTITY.queryName.toLowerCase() ); } diff --git a/packages/components/src/internal/schemas.ts b/packages/components/src/internal/schemas.ts index 47ab733e34..0db2b94791 100644 --- a/packages/components/src/internal/schemas.ts +++ b/packages/components/src/internal/schemas.ts @@ -119,10 +119,24 @@ export const SAMPLE_MANAGEMENT = { SAMPLE_TYPE_INSIGHTS: new SchemaQuery(SAMPLE_MANAGEMENT_SCHEMA, 'SampleTypeInsights'), SAMPLE_STATUS_COUNTS: new SchemaQuery(SAMPLE_MANAGEMENT_SCHEMA, 'SampleStatusCounts'), SOURCE_SAMPLES: new SchemaQuery(SAMPLE_MANAGEMENT_SCHEMA, 'SourceSamples'), - INPUT_SAMPLES_SQ: new SchemaQuery(SAMPLE_MANAGEMENT_SCHEMA, 'InputSamples'), - JOBS: new SchemaQuery(SAMPLE_MANAGEMENT_SCHEMA, 'Jobs'), }; +// WORKFLOW +export const WORKFLOW_SCHEMA = "workflow"; +export const WORKFLOW = { + SCHEMA: WORKFLOW_SCHEMA, + JOB: new SchemaQuery(WORKFLOW_SCHEMA, 'Job'), + WORK_ENTITY: new SchemaQuery(WORKFLOW_SCHEMA, 'WorkEntity'), + JOB_PRIORITY: new SchemaQuery(WORKFLOW_SCHEMA, 'WorkflowJobPriority'), + // legacy to be removed + JOB_DEFINITIONS: new SchemaQuery(SAMPLE_MANAGEMENT.SCHEMA, 'JobDefinitions'), + JOBS: new SchemaQuery(SAMPLE_MANAGEMENT.SCHEMA, 'Jobs'), + JOBS_LISTING: new SchemaQuery(SAMPLE_MANAGEMENT.SCHEMA, 'JobsListing'), + TASK_DEFINITIONS: new SchemaQuery(SAMPLE_MANAGEMENT.SCHEMA, 'TaskDefinitions'), + TASKS: new SchemaQuery(SAMPLE_MANAGEMENT.SCHEMA, 'Tasks'), + INPUT_SAMPLES_SQ: new SchemaQuery(SAMPLE_MANAGEMENT_SCHEMA, 'InputSamples'), +} + // STUDY const STUDY_SCHEMA = 'study'; export const STUDY_TABLES = { @@ -178,4 +192,5 @@ export const SCHEMAS = { PICKLIST_TABLES, PLATE_TABLES, SAMPLE_MANAGEMENT, + WORKFLOW, }; diff --git a/packages/components/src/internal/url/AppURLResolver.ts b/packages/components/src/internal/url/AppURLResolver.ts index 95cc986525..4794d686f9 100644 --- a/packages/components/src/internal/url/AppURLResolver.ts +++ b/packages/components/src/internal/url/AppURLResolver.ts @@ -16,7 +16,7 @@ import { Map } from 'immutable'; import { Filter } from '@labkey/api'; -import { SAMPLE_MANAGEMENT, SCHEMAS } from '../schemas'; +import { SCHEMAS } from '../schemas'; import { selectRows } from '../query/selectRows'; import { caseInsensitive } from '../util/utils'; @@ -100,6 +100,7 @@ export class ListResolver implements AppRouteResolver { } /** + * TODO Remove unless needed for assay run resolution * Resolves experiment runs to workflow jobs if appropriate * /rd/run/14/... -> /workflow/14/... * If this doesn't correspond to a job, the link won't resolve. @@ -129,7 +130,7 @@ export class ExperimentRunResolver implements AppRouteResolver { } try { const result = await selectRows({ - schemaQuery: SAMPLE_MANAGEMENT.JOBS, + schemaQuery: SCHEMAS.WORKFLOW.JOBS, filterArray: [Filter.create('RowId', rowId)], columns: 'RowId', }); From 6e9bbddf4e89ca5ec076aa5683a8366d13d9d63e Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Sat, 8 Nov 2025 16:12:00 -0800 Subject: [PATCH 09/25] Remove unused TASK_DEFINITIONS --- packages/components/src/internal/schemas.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/components/src/internal/schemas.ts b/packages/components/src/internal/schemas.ts index 0db2b94791..f5bd5eed3b 100644 --- a/packages/components/src/internal/schemas.ts +++ b/packages/components/src/internal/schemas.ts @@ -132,7 +132,6 @@ export const WORKFLOW = { JOB_DEFINITIONS: new SchemaQuery(SAMPLE_MANAGEMENT.SCHEMA, 'JobDefinitions'), JOBS: new SchemaQuery(SAMPLE_MANAGEMENT.SCHEMA, 'Jobs'), JOBS_LISTING: new SchemaQuery(SAMPLE_MANAGEMENT.SCHEMA, 'JobsListing'), - TASK_DEFINITIONS: new SchemaQuery(SAMPLE_MANAGEMENT.SCHEMA, 'TaskDefinitions'), TASKS: new SchemaQuery(SAMPLE_MANAGEMENT.SCHEMA, 'Tasks'), INPUT_SAMPLES_SQ: new SchemaQuery(SAMPLE_MANAGEMENT_SCHEMA, 'InputSamples'), } From c41ed386c1807e9fbe4649e1207770aac3446437 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Mon, 10 Nov 2025 10:48:56 -0800 Subject: [PATCH 10/25] Add JOB_INPUT_SAMPLES query --- packages/components/releaseNotes/components.md | 1 + packages/components/src/internal/AssayDefinitionModel.ts | 2 +- packages/components/src/internal/components/samples/utils.tsx | 2 +- packages/components/src/internal/schemas.ts | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/components/releaseNotes/components.md b/packages/components/releaseNotes/components.md index 8a6d0172ae..ee5be06bb9 100644 --- a/packages/components/releaseNotes/components.md +++ b/packages/components/releaseNotes/components.md @@ -4,6 +4,7 @@ Components, models, actions, and utility functions for LabKey applications and p ### version TBD *Released*: TBD - Update URLResolver to reference new controller for workflow-related actions +- add `WORKFLOW` schema and queries ### version 6.70.2 *Released*: 6 November 2025 diff --git a/packages/components/src/internal/AssayDefinitionModel.ts b/packages/components/src/internal/AssayDefinitionModel.ts index 933d65acb1..a12030b87b 100644 --- a/packages/components/src/internal/AssayDefinitionModel.ts +++ b/packages/components/src/internal/AssayDefinitionModel.ts @@ -172,7 +172,7 @@ export class AssayDefinitionModel extends ImmutableRecord({ const isTargetAllSamples = targetSQ.isEqual(SCHEMAS.SAMPLE_MANAGEMENT.SOURCE_SAMPLES) || targetSQ.isEqual(SCHEMAS.WORKFLOW.INPUT_SAMPLES_SQ) || - targetSQ.isEqual(SCHEMAS.WORKFLOW.WORK_ENTITY) || + targetSQ.isEqual(SCHEMAS.WORKFLOW.JOB_INPUT_SAMPLES) || (isPicklist && targetSQ.hasSchema(SCHEMAS.PICKLIST_TABLES.SCHEMA)); const findLookup = (col: QueryColumn): boolean => { if (col.isLookup()) { diff --git a/packages/components/src/internal/components/samples/utils.tsx b/packages/components/src/internal/components/samples/utils.tsx index 11ffe2bf54..8f06d7f19e 100644 --- a/packages/components/src/internal/components/samples/utils.tsx +++ b/packages/components/src/internal/components/samples/utils.tsx @@ -279,7 +279,7 @@ export function isAllSamplesSchema(schemaQuery: SchemaQuery): boolean { return ( lcQueryName === SCHEMAS.SAMPLE_MANAGEMENT.SOURCE_SAMPLES.queryName.toLowerCase() || lcQueryName === SCHEMAS.WORKFLOW.INPUT_SAMPLES_SQ.queryName.toLowerCase() || - lcQueryName === SCHEMAS.WORKFLOW.WORK_ENTITY.queryName.toLowerCase() + lcQueryName === SCHEMAS.WORKFLOW.JOB_INPUT_SAMPLES.queryName.toLowerCase() ); } diff --git a/packages/components/src/internal/schemas.ts b/packages/components/src/internal/schemas.ts index f5bd5eed3b..bad8668f06 100644 --- a/packages/components/src/internal/schemas.ts +++ b/packages/components/src/internal/schemas.ts @@ -126,8 +126,8 @@ export const WORKFLOW_SCHEMA = "workflow"; export const WORKFLOW = { SCHEMA: WORKFLOW_SCHEMA, JOB: new SchemaQuery(WORKFLOW_SCHEMA, 'Job'), - WORK_ENTITY: new SchemaQuery(WORKFLOW_SCHEMA, 'WorkEntity'), JOB_PRIORITY: new SchemaQuery(WORKFLOW_SCHEMA, 'WorkflowJobPriority'), + JOB_INPUT_SAMPLES: new SchemaQuery(WORKFLOW_SCHEMA, 'JobInputSamples'), // legacy to be removed JOB_DEFINITIONS: new SchemaQuery(SAMPLE_MANAGEMENT.SCHEMA, 'JobDefinitions'), JOBS: new SchemaQuery(SAMPLE_MANAGEMENT.SCHEMA, 'Jobs'), From 99dbc1115781cd07c2abe428be5ccec7fd02ce31 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Mon, 10 Nov 2025 10:58:34 -0800 Subject: [PATCH 11/25] @labkey/components v6.70.4-moveWorkflowCode.4 --- packages/components/package-lock.json | 4 ++-- packages/components/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/components/package-lock.json b/packages/components/package-lock.json index 080f528d25..8cddb58c22 100644 --- a/packages/components/package-lock.json +++ b/packages/components/package-lock.json @@ -1,12 +1,12 @@ { "name": "@labkey/components", - "version": "6.70.4-moveWorkflowCode.3", + "version": "6.70.4-moveWorkflowCode.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@labkey/components", - "version": "6.70.4-moveWorkflowCode.3", + "version": "6.70.4-moveWorkflowCode.4", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/packages/components/package.json b/packages/components/package.json index 9d59f55095..3dc7badb66 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@labkey/components", - "version": "6.70.4-moveWorkflowCode.3", + "version": "6.70.4-moveWorkflowCode.4", "description": "Components, models, actions, and utility functions for LabKey applications and pages", "sideEffects": false, "files": [ From 06152b38501b22ab0c1338db807b57c89bd7045a Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Mon, 10 Nov 2025 16:32:24 -0800 Subject: [PATCH 12/25] release note update --- packages/components/releaseNotes/components.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/components/releaseNotes/components.md b/packages/components/releaseNotes/components.md index ee5be06bb9..36b108deda 100644 --- a/packages/components/releaseNotes/components.md +++ b/packages/components/releaseNotes/components.md @@ -3,8 +3,9 @@ Components, models, actions, and utility functions for LabKey applications and p ### version TBD *Released*: TBD -- Update URLResolver to reference new controller for workflow-related actions -- add `WORKFLOW` schema and queries +- Updates for new Workflow implementation + - Update URLResolver to reference new controller for workflow-related actions + - add `WORKFLOW` schema and queries ### version 6.70.2 *Released*: 6 November 2025 From 6f40677ae111e9455d7e1f65f0e7a3414f041ad0 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Wed, 12 Nov 2025 08:39:32 -0800 Subject: [PATCH 13/25] Add explicit JobTemplate table --- packages/components/src/internal/schemas.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/components/src/internal/schemas.ts b/packages/components/src/internal/schemas.ts index bad8668f06..b39768a5c8 100644 --- a/packages/components/src/internal/schemas.ts +++ b/packages/components/src/internal/schemas.ts @@ -126,6 +126,7 @@ export const WORKFLOW_SCHEMA = "workflow"; export const WORKFLOW = { SCHEMA: WORKFLOW_SCHEMA, JOB: new SchemaQuery(WORKFLOW_SCHEMA, 'Job'), + JOB_TEMPLATE: new SchemaQuery(WORKFLOW_SCHEMA, 'JobTemplate'), JOB_PRIORITY: new SchemaQuery(WORKFLOW_SCHEMA, 'WorkflowJobPriority'), JOB_INPUT_SAMPLES: new SchemaQuery(WORKFLOW_SCHEMA, 'JobInputSamples'), // legacy to be removed From 56a3a608477db62b1f6619690a0b55f2d5b16038 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Wed, 12 Nov 2025 08:49:26 -0800 Subject: [PATCH 14/25] @labkey/components v6.70.4-moveWorkflowCode.5 --- packages/components/package-lock.json | 4 ++-- packages/components/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/components/package-lock.json b/packages/components/package-lock.json index 8cddb58c22..0aa6c4525d 100644 --- a/packages/components/package-lock.json +++ b/packages/components/package-lock.json @@ -1,12 +1,12 @@ { "name": "@labkey/components", - "version": "6.70.4-moveWorkflowCode.4", + "version": "6.70.4-moveWorkflowCode.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@labkey/components", - "version": "6.70.4-moveWorkflowCode.4", + "version": "6.70.4-moveWorkflowCode.5", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/packages/components/package.json b/packages/components/package.json index 3dc7badb66..8ed238e017 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@labkey/components", - "version": "6.70.4-moveWorkflowCode.4", + "version": "6.70.4-moveWorkflowCode.5", "description": "Components, models, actions, and utility functions for LabKey applications and pages", "sideEffects": false, "files": [ From 8346515413288aa075fa07a5e527dcdcca7cd60d Mon Sep 17 00:00:00 2001 From: cnathe Date: Thu, 13 Nov 2025 09:27:55 -0600 Subject: [PATCH 15/25] remove legacy job schema/query references from WORKFLOW const --- packages/components/releaseNotes/components.md | 2 +- packages/components/src/internal/AssayDefinitionModel.ts | 1 - .../components/src/internal/components/samples/utils.tsx | 1 - packages/components/src/internal/schemas.ts | 8 +------- 4 files changed, 2 insertions(+), 10 deletions(-) diff --git a/packages/components/releaseNotes/components.md b/packages/components/releaseNotes/components.md index 36b108deda..1bcadab6af 100644 --- a/packages/components/releaseNotes/components.md +++ b/packages/components/releaseNotes/components.md @@ -5,7 +5,7 @@ Components, models, actions, and utility functions for LabKey applications and p *Released*: TBD - Updates for new Workflow implementation - Update URLResolver to reference new controller for workflow-related actions - - add `WORKFLOW` schema and queries + - add `WORKFLOW` schema and queries and remove legacy job schema/query references ### version 6.70.2 *Released*: 6 November 2025 diff --git a/packages/components/src/internal/AssayDefinitionModel.ts b/packages/components/src/internal/AssayDefinitionModel.ts index a12030b87b..e6b4cec259 100644 --- a/packages/components/src/internal/AssayDefinitionModel.ts +++ b/packages/components/src/internal/AssayDefinitionModel.ts @@ -171,7 +171,6 @@ export class AssayDefinitionModel extends ImmutableRecord({ // 44339: the SourceSamples custom query is backed by exp.materials const isTargetAllSamples = targetSQ.isEqual(SCHEMAS.SAMPLE_MANAGEMENT.SOURCE_SAMPLES) || - targetSQ.isEqual(SCHEMAS.WORKFLOW.INPUT_SAMPLES_SQ) || targetSQ.isEqual(SCHEMAS.WORKFLOW.JOB_INPUT_SAMPLES) || (isPicklist && targetSQ.hasSchema(SCHEMAS.PICKLIST_TABLES.SCHEMA)); const findLookup = (col: QueryColumn): boolean => { diff --git a/packages/components/src/internal/components/samples/utils.tsx b/packages/components/src/internal/components/samples/utils.tsx index 8f06d7f19e..b7b6141172 100644 --- a/packages/components/src/internal/components/samples/utils.tsx +++ b/packages/components/src/internal/components/samples/utils.tsx @@ -278,7 +278,6 @@ export function isAllSamplesSchema(schemaQuery: SchemaQuery): boolean { if (lcSchemaName === SCHEMAS.SAMPLE_MANAGEMENT.SCHEMA) { return ( lcQueryName === SCHEMAS.SAMPLE_MANAGEMENT.SOURCE_SAMPLES.queryName.toLowerCase() || - lcQueryName === SCHEMAS.WORKFLOW.INPUT_SAMPLES_SQ.queryName.toLowerCase() || lcQueryName === SCHEMAS.WORKFLOW.JOB_INPUT_SAMPLES.queryName.toLowerCase() ); } diff --git a/packages/components/src/internal/schemas.ts b/packages/components/src/internal/schemas.ts index b39768a5c8..8574de7806 100644 --- a/packages/components/src/internal/schemas.ts +++ b/packages/components/src/internal/schemas.ts @@ -129,13 +129,7 @@ export const WORKFLOW = { JOB_TEMPLATE: new SchemaQuery(WORKFLOW_SCHEMA, 'JobTemplate'), JOB_PRIORITY: new SchemaQuery(WORKFLOW_SCHEMA, 'WorkflowJobPriority'), JOB_INPUT_SAMPLES: new SchemaQuery(WORKFLOW_SCHEMA, 'JobInputSamples'), - // legacy to be removed - JOB_DEFINITIONS: new SchemaQuery(SAMPLE_MANAGEMENT.SCHEMA, 'JobDefinitions'), - JOBS: new SchemaQuery(SAMPLE_MANAGEMENT.SCHEMA, 'Jobs'), - JOBS_LISTING: new SchemaQuery(SAMPLE_MANAGEMENT.SCHEMA, 'JobsListing'), - TASKS: new SchemaQuery(SAMPLE_MANAGEMENT.SCHEMA, 'Tasks'), - INPUT_SAMPLES_SQ: new SchemaQuery(SAMPLE_MANAGEMENT_SCHEMA, 'InputSamples'), -} +}; // STUDY const STUDY_SCHEMA = 'study'; From f70af9d6e14308873644eeb2cc0bc1812defa9e1 Mon Sep 17 00:00:00 2001 From: cnathe Date: Thu, 13 Nov 2025 10:52:54 -0600 Subject: [PATCH 16/25] remove ExperimentRunResolver --- .../components/releaseNotes/components.md | 1 + packages/components/src/index.ts | 3 +- .../src/internal/url/AppURLResolver.test.ts | 23 +------- .../src/internal/url/AppURLResolver.ts | 56 ------------------- 4 files changed, 3 insertions(+), 80 deletions(-) diff --git a/packages/components/releaseNotes/components.md b/packages/components/releaseNotes/components.md index 1bcadab6af..9649636650 100644 --- a/packages/components/releaseNotes/components.md +++ b/packages/components/releaseNotes/components.md @@ -6,6 +6,7 @@ Components, models, actions, and utility functions for LabKey applications and p - Updates for new Workflow implementation - Update URLResolver to reference new controller for workflow-related actions - add `WORKFLOW` schema and queries and remove legacy job schema/query references + - remove ExperimentRunResolver ### version 6.70.2 *Released*: 6 November 2025 diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts index 18a0c2fb25..8d2c5674e6 100644 --- a/packages/components/src/index.ts +++ b/packages/components/src/index.ts @@ -267,7 +267,7 @@ import { JavaDocsLink, SAMPLE_IMPORT_TOPIC, } from './internal/util/helpLinks'; -import { ExperimentRunResolver, ListResolver } from './internal/url/AppURLResolver'; +import { ListResolver } from './internal/url/AppURLResolver'; import { NOT_ANY_FILTER_TYPE } from './internal/url/NotAnyFilterType'; import { genCellKey, incrementRowCountMetric, parseCellKey } from './internal/components/editable/utils'; import { EditableGrid } from './internal/components/editable/EditableGrid'; @@ -1266,7 +1266,6 @@ export { ExpandableContainer, ExpandableFilterToggle, EXPERIMENT_AUDIT_EVENT, - ExperimentRunResolver, ExpirationDateColumnRenderer, EXPORT_TYPES, ExtendedMap, diff --git a/packages/components/src/internal/url/AppURLResolver.test.ts b/packages/components/src/internal/url/AppURLResolver.test.ts index 9d7f082ce8..f3d0d2f003 100644 --- a/packages/components/src/internal/url/AppURLResolver.test.ts +++ b/packages/components/src/internal/url/AppURLResolver.test.ts @@ -19,7 +19,7 @@ import { registerDefaultURLMappers } from '../test/testHelpers'; import { QueryInfo } from '../../public/QueryInfo'; -import { ExperimentRunResolver, ListResolver } from './AppURLResolver'; +import { ListResolver } from './AppURLResolver'; import { URLResolver } from './URLResolver'; import { AppURL } from './AppURL'; import { encodeListResolverPath } from './utils'; @@ -445,25 +445,4 @@ describe('App Route Resolvers', () => { }), ]); }); - - test('Should resolve /rd/run/### routes', () => { - const jobsResolver = new ExperimentRunResolver(new Set([4, 5, 10])); - - // test regex - expect(jobsResolver.matches(undefined)).toBe(false); - expect(jobsResolver.matches('/rd/samples/4')).toBe(false); - expect(jobsResolver.matches('/rd/run/b')).toBe(false); - expect(jobsResolver.matches('/a/rd/run/b')).toBe(false); - expect(jobsResolver.matches('/rd/run/4')).toBe(true); - expect(jobsResolver.matches('/rd/run/141345')).toBe(true); - - return Promise.all([ - jobsResolver.fetch(['rd', 'runs', 'notanumber']).then(result => { - expect(result).toBe(undefined); - }), - jobsResolver.fetch(['rd', 'runs', 4]).then((result: AppURL) => { - expect(result.toString()).toBe('/workflow/4'); - }), - ]); - }); }); diff --git a/packages/components/src/internal/url/AppURLResolver.ts b/packages/components/src/internal/url/AppURLResolver.ts index 4794d686f9..34367ddacb 100644 --- a/packages/components/src/internal/url/AppURLResolver.ts +++ b/packages/components/src/internal/url/AppURLResolver.ts @@ -98,59 +98,3 @@ export class ListResolver implements AppRouteResolver { return undefined; } } - -/** - * TODO Remove unless needed for assay run resolution - * Resolves experiment runs to workflow jobs if appropriate - * /rd/run/14/... -> /workflow/14/... - * If this doesn't correspond to a job, the link won't resolve. - * - * Ideally we would resolve to the original URL if it's not a job, but since that's a link out to LKS - * it's not currently supported by AppRouteResolvers. Alternatively, and perhaps more ideally, we'd resolve - * to the lineage page for a sample, but the URL here doesn't have any info about the related entity. - */ -export class ExperimentRunResolver implements AppRouteResolver { - jobs: Set; // set of rowIds that are jobs - - constructor(jobs?: Set) { - this.jobs = jobs !== undefined ? jobs : new Set(); - } - - async fetch(parts: any[]): Promise { - const rowIdIndex = 2; - const rowId = parseInt(parts[rowIdIndex], 10); - - if (isNaN(rowId)) { - // skip it - return undefined; - } - if (this.jobs.has(rowId)) { - // resolve it - return AppURL.create(WORKFLOW_KEY, rowId); - } - try { - const result = await selectRows({ - schemaQuery: SCHEMAS.WORKFLOW.JOBS, - filterArray: [Filter.create('RowId', rowId)], - columns: 'RowId', - }); - - if (result.rows.length > 0) { - // resolve it - this.jobs.add(rowId); - return AppURL.create(WORKFLOW_KEY, rowId); - } else { - return AppURL.create('rd', 'assayrun', rowId); - } - } catch (e) { - // skip it - } - - // skip it - return undefined; - } - - matches(route: string): boolean { - return /\/rd\/run\/\d+$/.test(route); - } -} From a45b6a4594325e71517cced7b88ab221ff2b1db6 Mon Sep 17 00:00:00 2001 From: cnathe Date: Thu, 13 Nov 2025 10:54:05 -0600 Subject: [PATCH 17/25] 6.70.4-moveWorkflowCode.6 --- packages/components/package-lock.json | 4 ++-- packages/components/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/components/package-lock.json b/packages/components/package-lock.json index 0aa6c4525d..084a4f2f50 100644 --- a/packages/components/package-lock.json +++ b/packages/components/package-lock.json @@ -1,12 +1,12 @@ { "name": "@labkey/components", - "version": "6.70.4-moveWorkflowCode.5", + "version": "6.70.4-moveWorkflowCode.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@labkey/components", - "version": "6.70.4-moveWorkflowCode.5", + "version": "6.70.4-moveWorkflowCode.6", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/packages/components/package.json b/packages/components/package.json index 8ed238e017..7d20c65918 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@labkey/components", - "version": "6.70.4-moveWorkflowCode.5", + "version": "6.70.4-moveWorkflowCode.6", "description": "Components, models, actions, and utility functions for LabKey applications and pages", "sideEffects": false, "files": [ From 6c4e7ba708d66d7a777fb9197a22c8b37b4e05bd Mon Sep 17 00:00:00 2001 From: cnathe Date: Fri, 14 Nov 2025 12:53:42 -0600 Subject: [PATCH 18/25] URLResolver.ts update for samplemanager-downloadAttachments -> workflow-downloadAttachments --- packages/components/src/internal/url/URLResolver.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/components/src/internal/url/URLResolver.ts b/packages/components/src/internal/url/URLResolver.ts index e3f88fa276..d6aded2486 100644 --- a/packages/components/src/internal/url/URLResolver.ts +++ b/packages/components/src/internal/url/URLResolver.ts @@ -766,7 +766,7 @@ export class URLResolver { url = url.substring(0, index); } return row.set('url', this.mapURL({ url, row })); - } else if (url.indexOf('samplemanager-downloadAttachments') >= 0) { + } else if (url.indexOf('workflow-downloadAttachments') >= 0) { return row.set('url', this.mapURL({ url, row })); } else if (url.indexOf('notebook') >= 0) { return row.set('url', this.mapURL({ url, row })); From 980131a4530f5dd9122ad12c81b427374c332a99 Mon Sep 17 00:00:00 2001 From: cnathe Date: Fri, 14 Nov 2025 12:54:44 -0600 Subject: [PATCH 19/25] 6.70.6-moveWorkflowCode.7 --- packages/components/package-lock.json | 4 ++-- packages/components/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/components/package-lock.json b/packages/components/package-lock.json index 8db635f126..ad3927d0c3 100644 --- a/packages/components/package-lock.json +++ b/packages/components/package-lock.json @@ -1,12 +1,12 @@ { "name": "@labkey/components", - "version": "6.70.6-moveWorkflowCode.6", + "version": "6.70.6-moveWorkflowCode.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@labkey/components", - "version": "6.70.6-moveWorkflowCode.6", + "version": "6.70.6-moveWorkflowCode.7", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/packages/components/package.json b/packages/components/package.json index 1dfd5a7b2b..47d86f33ac 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@labkey/components", - "version": "6.70.6-moveWorkflowCode.6", + "version": "6.70.6-moveWorkflowCode.7", "description": "Components, models, actions, and utility functions for LabKey applications and pages", "sideEffects": false, "files": [ From f076dbdc73403ed4340469a77bdfee7539a7e719 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Fri, 21 Nov 2025 08:57:13 -0800 Subject: [PATCH 20/25] workflow events have transaction ids --- .../components/src/internal/components/auditlog/constants.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/components/src/internal/components/auditlog/constants.ts b/packages/components/src/internal/components/auditlog/constants.ts index 304162451f..798e014d3e 100644 --- a/packages/components/src/internal/components/auditlog/constants.ts +++ b/packages/components/src/internal/components/auditlog/constants.ts @@ -79,6 +79,7 @@ export const ASSAY_RESULT_AUDIT_QUERY: AuditQuery = { }; export const WORKFLOW_AUDIT_QUERY: AuditQuery = { hasDetail: true, + hasTransactionId: true, label: 'Sample Workflow Events', value: 'SamplesWorkflowAuditEvent', }; From 6c41461671557b2e7a11a740e79e742dcfe701b8 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Fri, 21 Nov 2025 08:59:03 -0800 Subject: [PATCH 21/25] @labkey/components v6.72.1-moveWorkflowCode.8 --- packages/components/package-lock.json | 4 ++-- packages/components/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/components/package-lock.json b/packages/components/package-lock.json index 5c109caaf6..7e70bab9f1 100644 --- a/packages/components/package-lock.json +++ b/packages/components/package-lock.json @@ -1,12 +1,12 @@ { "name": "@labkey/components", - "version": "6.72.1-moveWorkflowCode.7", + "version": "6.72.1-moveWorkflowCode.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@labkey/components", - "version": "6.72.1-moveWorkflowCode.7", + "version": "6.72.1-moveWorkflowCode.8", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/packages/components/package.json b/packages/components/package.json index 97896df0a0..1571916faa 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@labkey/components", - "version": "6.72.1-moveWorkflowCode.7", + "version": "6.72.1-moveWorkflowCode.8", "description": "Components, models, actions, and utility functions for LabKey applications and pages", "sideEffects": false, "files": [ From 220a53b813a41f62ccab2bdcb569520536233c6c Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Mon, 24 Nov 2025 13:27:35 -0800 Subject: [PATCH 22/25] Add schema constant for workflow.Action --- packages/components/src/internal/schemas.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/components/src/internal/schemas.ts b/packages/components/src/internal/schemas.ts index 8574de7806..9d836aadb7 100644 --- a/packages/components/src/internal/schemas.ts +++ b/packages/components/src/internal/schemas.ts @@ -126,6 +126,7 @@ export const WORKFLOW_SCHEMA = "workflow"; export const WORKFLOW = { SCHEMA: WORKFLOW_SCHEMA, JOB: new SchemaQuery(WORKFLOW_SCHEMA, 'Job'), + ACTION: new SchemaQuery(WORKFLOW_SCHEMA, 'Action'), JOB_TEMPLATE: new SchemaQuery(WORKFLOW_SCHEMA, 'JobTemplate'), JOB_PRIORITY: new SchemaQuery(WORKFLOW_SCHEMA, 'WorkflowJobPriority'), JOB_INPUT_SAMPLES: new SchemaQuery(WORKFLOW_SCHEMA, 'JobInputSamples'), From 480a04a6c370025df02d6d18633894a4345d00c9 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Mon, 24 Nov 2025 13:40:55 -0800 Subject: [PATCH 23/25] v6.72.1-moveWorkflowCode.9 --- packages/components/package-lock.json | 4 ++-- packages/components/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/components/package-lock.json b/packages/components/package-lock.json index 7e70bab9f1..392d1c4d12 100644 --- a/packages/components/package-lock.json +++ b/packages/components/package-lock.json @@ -1,12 +1,12 @@ { "name": "@labkey/components", - "version": "6.72.1-moveWorkflowCode.8", + "version": "6.72.1-moveWorkflowCode.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@labkey/components", - "version": "6.72.1-moveWorkflowCode.8", + "version": "6.72.1-moveWorkflowCode.9", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/packages/components/package.json b/packages/components/package.json index 1571916faa..f0426ec325 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@labkey/components", - "version": "6.72.1-moveWorkflowCode.8", + "version": "6.72.1-moveWorkflowCode.9", "description": "Components, models, actions, and utility functions for LabKey applications and pages", "sideEffects": false, "files": [ From f5a94320b291a1fd85c8f35ecd1900821cbdacc1 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Mon, 1 Dec 2025 15:04:33 -0800 Subject: [PATCH 24/25] release date and version --- packages/components/releaseNotes/components.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/components/releaseNotes/components.md b/packages/components/releaseNotes/components.md index 574f4c45f0..7599a5435e 100644 --- a/packages/components/releaseNotes/components.md +++ b/packages/components/releaseNotes/components.md @@ -1,8 +1,8 @@ # @labkey/components Components, models, actions, and utility functions for LabKey applications and pages -### version TBD -*Released*: TBD +### version 7.0.0 +*Released*: 1 December 2025 - Updates for new Workflow implementation - Update URLResolver to reference new controller for workflow-related actions - add `WORKFLOW` schema and queries and remove legacy job schema/query references From 53a77680808b894dafc64743d6def7683c0aa1c4 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Mon, 1 Dec 2025 15:05:13 -0800 Subject: [PATCH 25/25] v7.0.0 --- packages/components/package-lock.json | 4 ++-- packages/components/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/components/package-lock.json b/packages/components/package-lock.json index 55c2da394f..23e14067d2 100644 --- a/packages/components/package-lock.json +++ b/packages/components/package-lock.json @@ -1,12 +1,12 @@ { "name": "@labkey/components", - "version": "6.72.2-moveWorkflowCode.9", + "version": "7.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@labkey/components", - "version": "6.72.2-moveWorkflowCode.9", + "version": "7.0.0", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/packages/components/package.json b/packages/components/package.json index 0ff1a6a205..cfdad4c6c6 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@labkey/components", - "version": "6.72.2-moveWorkflowCode.9", + "version": "7.0.0", "description": "Components, models, actions, and utility functions for LabKey applications and pages", "sideEffects": false, "files": [