Skip to content

Commit

Permalink
Add sources to data transformation addon.
Browse files Browse the repository at this point in the history
Signed-off-by: Dariy Miseldzhani <[email protected]>
  • Loading branch information
Dariy Miseldzhani committed Feb 10, 2025
1 parent 67b2202 commit 4e6bc51
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { PolicyComponentsUtils } from '../policy-components-utils.js';
import { IPolicyAddonBlock, IPolicyDocument } from '../policy-engine.interface.js';
import { IPolicyAddonBlock, IPolicyCalculateBlock, IPolicyDocument } from '../policy-engine.interface.js';
import { ChildrenType, ControlType } from '../interfaces/block-about.js';
import { PolicyUser } from '../policy-user.js';
import { fileURLToPath } from 'url';
Expand All @@ -26,15 +26,19 @@ const filename = fileURLToPath(import.meta.url);
variables: []
})
export class DataTransformationAddon {
async getTransformedData(transformationBlock: IPolicyAddonBlock,user: PolicyUser, data: any) {
async getTransformedData(transformationBlock: IPolicyAddonBlock, user: PolicyUser, data: any) {
return new Promise<IPolicyDocument | IPolicyDocument[]>(async (resolve, reject) => {
const importCode = `const [done, user, documents] = arguments;\r\n`;
const importCode = `const [done, user, documents, sources] = arguments;\r\n`;
const expression = transformationBlock.options.expression || '';

const sources: IPolicyDocument[] = await this.getSources(user) || [];

const worker = new Worker(path.join(path.dirname(filename), '..', 'helpers', 'data-transformation-addon-worker.js'), {
workerData: {
execFunc: `${importCode}${expression}`,
user,
documents: data,
sources,
},
});

Expand Down Expand Up @@ -63,10 +67,24 @@ export class DataTransformationAddon {

async getData(user: PolicyUser, uuid: string, queryParams: any) {
const ref = PolicyComponentsUtils.GetBlockRef<IPolicyAddonBlock>(this);
const parentBlock:IPolicyAddonBlock = ref.parent as IPolicyAddonBlock;
if(parentBlock) {
const parentBlock: IPolicyAddonBlock = ref.parent as IPolicyAddonBlock;
if (parentBlock) {
const parentData = await parentBlock.getData(user, uuid, queryParams);
return await this.getTransformedData(ref, user, parentData.data);
}
}

protected async getSources(user: PolicyUser): Promise<any[]> {
const data = [];
const ref = PolicyComponentsUtils.GetBlockRef<IPolicyCalculateBlock>(this);
for (const child of ref.children) {
if (child.blockClassName === 'SourceAddon') {
const childData = await (child as IPolicyAddonBlock).getFromSource(user, null);
for (const item of childData) {
data.push(item);
}
}
}
return data;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,11 @@ function execute(): void {
const done = (result, final = true) => {
parentPort.postMessage({result, final});
}
const { execFunc, user, documents } = workerData;

const { execFunc, user, documents, sources } = workerData;

const func = Function(execFunc);
func.apply(documents, [done, user, documents, mathjs, formulajs]);
func.apply(documents, [done, user, documents, sources, mathjs, formulajs]);
}

execute();

0 comments on commit 4e6bc51

Please sign in to comment.