@hpcc-js/marshaller 3.3.2 → 3.4.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.cjs","names":[],"sources":["../src/__package__.ts","../src/ddl2/activities/activity.ts","../src/ddl2/activities/datasource.ts","../src/ddl2/activities/form.ts","../src/ddl2/activities/databomb.ts","../src/ddl2/activities/wuresult.ts","../src/ddl2/activities/logicalfile.ts","../src/ddl2/activities/rest.ts","../src/ddl2/activities/roxie.ts","../src/ddl2/activities/dspicker.ts","../src/ddl2/activities/filter.ts","../src/ddl2/activities/groupby.ts","../src/ddl2/activities/limit.ts","../src/ddl2/activities/project.ts","../src/ddl2/activities/sort.ts","../src/ddl2/activities/hipiepipeline.ts","../src/ddl2/activities/nullview.ts","../src/ddl2/model/vizChartPanel.ts","../src/ddl2/model/visualization.ts","../src/ddl2/model/element.ts","../node_modules/d3-fetch/src/text.js","../src/ddl2/PopupManager.ts","../src/ddl2/dashboardDockPanel.ts","../src/ddl2/dashboardGrid.ts","../src/ddl2/ddl.ts","../src/ddl2/javascriptadapter.ts","../src/ddl2/dashboard.ts","../src/ddl2/ddleditor.ts","../src/ddl2/graphadapter.ts","../src/ddl2/dsTable.ts","../src/ddl2/dvTable.ts","../src/ddl2/pipelinePanel.ts","../src/dashy.ts"],"sourcesContent":["export const PKG_NAME = \"__PACKAGE_NAME__\";\nexport const PKG_VERSION = \"__PACKAGE_VERSION__\";\nexport const BUILD_VERSION = \"__BUILD_VERSION__\";\n","import { IMonitorHandle, PropertyExt } from \"@hpcc-js/common\";\nimport { IField as WsEclField } from \"@hpcc-js/comms\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { hashSum, update } from \"@hpcc-js/util\";\n\nexport function stringify(obj_from_json) {\n if (Array.isArray(obj_from_json)) {\n // not an object, stringify using native function\n return \"[\" + obj_from_json.map(stringify).join(\", \") + \"]\";\n }\n if (typeof obj_from_json !== \"object\" || obj_from_json === null || obj_from_json === undefined) {\n // not an object, stringify using native function\n return JSON.stringify(obj_from_json);\n }\n // Implements recursive object serialization according to JSON spec\n // but without quotes around the keys.\n const props = Object\n .keys(obj_from_json)\n .map(key => `${key}: ${stringify(obj_from_json[key])}`)\n .join(\", \");\n return `{ ${props} }`;\n}\n\nexport function schemaType2IFieldType(type): \"boolean\" | \"number\" | \"number64\" | \"range\" | \"string\" {\n switch (type) {\n case \"boolean\":\n return \"boolean\";\n case \"xs:byte\":\n case \"xs:double\":\n case \"xs:decimal\":\n case \"xs:float\":\n case \"xs:int\":\n case \"xs:short\":\n case \"xs:unsignedInt\":\n case \"xs:unsignedShort\":\n case \"xs:unsignedByte\":\n case \"number\":\n return \"number\";\n case \"xs:integer\":\n case \"xs:long\":\n case \"xs:negativeInteger\":\n case \"xs:nonNegativeInteger\":\n case \"xs:nonPositiveInteger\":\n case \"xs:positiveInteger\":\n case \"xs:unsignedLong\":\n return \"number64\";\n case \"string\":\n return \"string\";\n case \"range\":\n return \"range\";\n }\n return \"string\";\n}\n\nexport function schemaRow2IField(row: any): DDL2.IField {\n if (row._children && row._children.length) {\n return {\n type: \"dataset\",\n id: row.name,\n children: row._children.map(schemaRow2IField)\n };\n } else {\n return {\n id: row.name,\n type: schemaType2IFieldType(row.type)\n };\n }\n}\n\nexport function wsEclSchemaRow2IField(row: WsEclField): DDL2.IField {\n return row;\n}\n\nexport type ReferencedFields = {\n inputs: { [activityID: string]: string[] },\n outputs: { [activityID: string]: string[] }\n};\n\nexport interface IActivityError {\n source: string;\n msg: string;\n hint: string;\n}\n\n/*\nexport const ROW_ID = \"__##__\"; // TODO: Should be Symbol\nexport function rowID(row: Readonly<object>): undefined | number {\n return row[ROW_ID] || row[\"__lparam\"];\n}\n*/\n\nexport abstract class Activity extends PropertyExt {\n private _sourceActivity: Activity;\n\n fixInt64(data) {\n if (!data || data.length === 0) return [];\n const int64Fields = this.outFields().filter(field => {\n switch (field.type) {\n case \"number\":\n // Test actual data for integer64 cases.\n return typeof data[0][field.id] !== \"number\";\n case \"number64\":\n return true;\n }\n return false;\n });\n if (int64Fields.length) {\n return data.map(row => {\n for (const int64Field of int64Fields) {\n row[int64Field.id] = +row[int64Field.id];\n }\n return row;\n });\n }\n return data;\n }\n\n sourceActivity(): Activity;\n sourceActivity(_: Activity): this;\n sourceActivity(_?: Activity): Activity | this {\n if (!arguments.length) return this._sourceActivity;\n this._sourceActivity = _;\n return this;\n }\n\n hash(more: object = {}): string {\n return hashSum({\n ...more\n });\n }\n\n refreshMeta(): Promise<void> {\n return this._sourceActivity ? this._sourceActivity.refreshMeta() : Promise.resolve();\n }\n\n exists(): boolean {\n return true;\n }\n\n validate(): IActivityError[] {\n return [];\n }\n\n label(): string {\n return this.id();\n }\n\n updatedBy(): string[] {\n return [];\n }\n\n private _emptyFields: ReadonlyArray<DDL2.IField> = [];\n inFields(): ReadonlyArray<DDL2.IField> {\n return this._sourceActivity ? this._sourceActivity.outFields() : this._emptyFields;\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n return () => inFields;\n }\n\n outFields(): ReadonlyArray<DDL2.IField> {\n return this.computeFields(this.inFields())();\n }\n\n localFields(): DDL2.IField[] {\n const inFieldIDs = this.inFields().map(field => field.id);\n return this.outFields().filter(field => inFieldIDs.indexOf(field.id) < 0);\n }\n\n fieldOrigin(fieldID: string): Activity | null {\n if (this.localFields().filter(field => field.id === fieldID).length) {\n return this;\n } else if (this.sourceActivity()) {\n return this.sourceActivity().fieldOrigin(fieldID);\n }\n return null;\n }\n\n resolveFields(refs: ReferencedFields, fieldIDs: string[]) {\n for (const fieldID of fieldIDs) {\n const fieldOrigin = this.fieldOrigin(fieldID);\n if (fieldOrigin) {\n if (!refs.outputs[fieldOrigin.id()]) {\n refs.outputs[fieldOrigin.id()] = [];\n }\n if (refs.outputs[fieldOrigin.id()].indexOf(fieldID) < 0) {\n refs.outputs[fieldOrigin.id()].push(fieldID);\n }\n }\n }\n }\n\n resolveInFields(refs: ReferencedFields, fieldIDs: string[]) {\n return this._sourceActivity && this._sourceActivity.resolveFields(refs, fieldIDs);\n }\n\n referencedFields(refs: ReferencedFields): void {\n this._sourceActivity?.referencedFields(refs);\n }\n\n exec(): Promise<void> {\n return this._sourceActivity ? this._sourceActivity.exec() : Promise.resolve();\n }\n\n _emptyData: ReadonlyArray<object> = [];\n inData(): ReadonlyArray<object> {\n return this._sourceActivity ? this._sourceActivity.outData() || this._emptyData : this._emptyData;\n }\n\n computeData(): ReadonlyArray<object> {\n return this.inData();\n }\n\n private _prevDataHash: string = \"\";\n private _prevInData: ReadonlyArray<object> = [];\n private _prevData: ReadonlyArray<object> = [];\n private cachedComputeData(inData: ReadonlyArray<object>): ReadonlyArray<object> {\n const hash = this.hash();\n if (this._prevDataHash !== hash || this._prevInData !== inData) {\n this._prevDataHash = hash;\n this._prevInData = inData;\n this._prevData = update(this._prevData, this.computeData());\n }\n return this._prevData;\n }\n\n outData(): ReadonlyArray<object> {\n return this.cachedComputeData(this.inData());\n }\n}\n\nexport class ActivityArray extends Activity {\n private _activities: Activity[] = [];\n\n activities(): Activity[];\n activities(_: Activity[]): this;\n activities(_?: Activity[]): Activity[] | this {\n if (!arguments.length) return this._activities;\n this._activities = _;\n return this;\n }\n}\nActivityArray.prototype._class += \" ActivityArray\";\n\nexport class ActivityPipeline extends ActivityArray {\n\n activities(): Activity[];\n activities(_: Activity[]): this;\n activities(_?: Activity[]): Activity[] | this {\n if (!arguments.length) return super.activities();\n super.activities(_);\n let prevActivity: Activity;\n for (const activity of _) {\n if (prevActivity) {\n activity.sourceActivity(prevActivity);\n }\n prevActivity = activity;\n }\n return this;\n }\n\n first(): Activity {\n const retVal = this.activities();\n return retVal[0];\n }\n\n last(): Activity | null {\n const retVal = this.activities();\n return retVal[retVal.length - 1];\n }\n\n protected calcUpdatedGraph(activity: Activity): Array<{ from: string, to: Activity }> {\n return activity.updatedBy().map(source => {\n return {\n from: source,\n to: activity\n };\n });\n }\n\n updatedByGraph(): Array<{ from: string, to: Activity }> {\n let retVal: Array<{ from: string, to: Activity }> = [];\n for (const activity of this.activities()) {\n retVal = retVal.concat(this.calcUpdatedGraph(activity));\n }\n return retVal;\n }\n\n fetch(from: number = 0, count: number = Number.MAX_VALUE): Promise<ReadonlyArray<object>> {\n return this.exec().then(() => {\n const data = this.outData();\n if (from === 0 && data.length <= count) {\n return data;\n }\n return data.slice(from, from + count);\n });\n }\n\n // Activity overrides ---\n hash(more: { [key: string]: any } = {}): string {\n return hashSum({\n activities: [this.activities().map(activity => activity.hash())],\n ...more\n });\n }\n\n refreshMeta(): Promise<void> {\n return this.last().refreshMeta();\n }\n\n updatedBy(): string[] {\n let retVal: string[] = [];\n for (const activity of this.activities()) {\n retVal = retVal.concat(activity.updatedBy());\n }\n return retVal;\n }\n\n inFields(): ReadonlyArray<DDL2.IField> {\n return this.first().inFields();\n }\n\n outFields(): ReadonlyArray<DDL2.IField> {\n return this.last().outFields();\n }\n\n localFields(): DDL2.IField[] {\n return this.last().localFields();\n }\n\n fieldOrigin(fieldID: string): Activity | null {\n return this.last().fieldOrigin(fieldID);\n }\n\n referencedFields(refs: ReferencedFields) {\n this.last().referencedFields(refs);\n }\n\n resolveInFields(refs: ReferencedFields, fieldIDs: string[]) {\n this.last().resolveInFields(refs, fieldIDs);\n }\n\n resolveFields(refs: ReferencedFields, fieldIDs: string[]) {\n this.last().resolveFields(refs, fieldIDs);\n }\n\n exec(): Promise<void> {\n return this.last().exec();\n }\n\n outData(): ReadonlyArray<object> {\n return this.last().outData();\n }\n}\nActivityPipeline.prototype._class += \" ActivitySequence\";\n\nexport class ActivitySelection extends ActivityArray {\n private _selection: Activity;\n private _monitorHandle: IMonitorHandle;\n\n selection(): Activity;\n selection(_: Activity): this;\n selection(_?: Activity): Activity | this {\n if (_ === undefined) return this._selection;\n if (this._monitorHandle) {\n this._monitorHandle.remove();\n }\n this._selection = _;\n this._monitorHandle = _.monitor((id, newVal, oldVal) => {\n this.broadcast(id, newVal, oldVal, _);\n });\n return this;\n }\n\n // Activity overrides ---\n hash(more: { [key: string]: any } = {}): string {\n return hashSum({\n selection: this.selection().hash(),\n ...more\n });\n }\n\n label(): string {\n return this.selection().label();\n }\n\n refreshMeta(): Promise<void> {\n return this.selection().refreshMeta();\n }\n\n updatedBy(): string[] {\n return this.selection().updatedBy();\n }\n\n inFields(): ReadonlyArray<DDL2.IField> {\n return this.selection().inFields();\n }\n\n outFields(): ReadonlyArray<DDL2.IField> {\n return this.selection().outFields();\n }\n\n localFields(): DDL2.IField[] {\n return this.selection().localFields();\n }\n\n fieldOrigin(fieldID: string): Activity | null {\n return this.selection().fieldOrigin(fieldID);\n }\n\n referencedFields(refs: ReferencedFields) {\n this.selection().referencedFields(refs);\n }\n\n resolveInFields(refs: ReferencedFields, fieldIDs: string[]) {\n this.selection().resolveInFields(refs, fieldIDs);\n }\n\n resolveFields(refs: ReferencedFields, fieldIDs: string[]) {\n this.selection().resolveFields(refs, fieldIDs);\n }\n\n exec(): Promise<void> {\n return this.selection().exec();\n }\n\n outData(): ReadonlyArray<object> {\n return this.selection().outData();\n }\n}\nActivitySelection.prototype._class += \" ActivitySelection\";\n","import { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { Activity } from \"./activity.ts\";\nimport { Databomb } from \"./databomb.ts\";\nimport { Form } from \"./form.ts\";\nimport { LogicalFile } from \"./logicalfile.ts\";\nimport { RestResult, RestService } from \"./rest.ts\";\nimport { RoxieResult, RoxieService } from \"./roxie.ts\";\nimport { WU, WUResult } from \"./wuresult.ts\";\n\nlet datasourceID = 0;\nexport class Datasource extends Activity {\n\n constructor() {\n super();\n this._id = `ds_${++datasourceID}`;\n }\n}\n\nexport type DatasourceRefType = Databomb | Form | LogicalFile | RoxieResult | WUResult | RestResult;\nexport type DatasourceType = Databomb | Form | LogicalFile | RoxieService | WU | RestService;\n\nexport class DatasourceRef extends Activity {\n _origDatasource;\n declare _datasource: DatasourceRefType;\n\n constructor() {\n super();\n }\n\n hash(more: { [key: string]: any } = {}): string {\n return super.hash({\n datasource: this._datasource ? this._datasource.hash(more) : undefined,\n ...more\n });\n }\n\n toDDL(): DDL2.IDatabombRef {\n return {\n id: this.datasource().id()\n };\n }\n}\nDatasourceRef.prototype._class += \" DatasourceRef\";\n\nexport interface DatasourceRef {\n datasource(): DatasourceRefType;\n datasource(_: DatasourceRefType): this;\n}\n\nDatasourceRef.prototype.publish(\"datasource\", null, \"widget\", \"Datasource Reference\", null, { internal: true });\n\nDatasourceRef.prototype._origDatasource = DatasourceRef.prototype.datasource;\nDatasourceRef.prototype.datasource = function (this: DatasourceRef, _?) {\n const retVal = DatasourceRef.prototype._origDatasource.apply(this, arguments);\n if (_ !== undefined) {\n this.sourceActivity(_);\n }\n return retVal;\n};","import { PropertyExt } from \"@hpcc-js/common\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { Datasource } from \"./datasource.ts\";\n\ntype IField = DDL2.IFieldBoolean | DDL2.IFieldNumber | DDL2.IFieldString | DDL2.IFieldDataset;\n\nexport class FormField extends PropertyExt {\n protected _owner: Form;\n\n disableChildField(): boolean {\n return this.type() !== \"dataset\";\n }\n\n constructor() {\n super();\n }\n\n toDDL(): IField {\n return {\n type: this.type(),\n id: this.fieldID(),\n default: this.default(),\n children: this.type() === \"dataset\" ? this.childFields().map(cf => cf.toDDL()) : undefined\n } as IField;\n }\n\n fromDDL(ddl: IField): this {\n return this\n .type(ddl.type)\n .fieldID(ddl.id)\n .default(ddl.default)\n .childFields(ddl.type === \"dataset\" && ddl.children ? ddl.children.map(FormField.fromDDL) : [])\n ;\n }\n\n static fromDDL(ddl: IField): FormField {\n return new FormField().fromDDL(ddl);\n }\n\n owner(): Form;\n owner(_: Form): this;\n owner(_?: Form): Form | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.type() && !!this.fieldID();\n }\n\n coerceFunc(): (cell: any) => boolean | number | string {\n switch (this.type()) {\n case \"boolean\":\n return cell => !!cell;\n case \"number\":\n return cell => +cell;\n case \"string\":\n return cell => \"\" + cell;\n }\n return cell => cell;\n }\n\n calcValue() {\n return this.value_exists() ? this.value() : this.default();\n }\n}\n\nexport class Form extends Datasource {\n\n constructor() {\n super();\n }\n\n toDDL(): DDL2.IForm {\n return {\n type: \"form\",\n id: this.id(),\n fields: this.validFields().map(f => f.toDDL())\n };\n }\n\n fromDDL(ddl: DDL2.IForm, skipID = false): this {\n (skipID ? this : this.id(ddl.id))\n .formFields(ddl.fields.map(FormField.fromDDL))\n ;\n return this;\n }\n\n static fromDDL(ddl: DDL2.IForm, skipID = false): Form {\n return new Form().fromDDL(ddl, skipID);\n }\n\n validFields(): FormField[] {\n return this.formFields().filter(f => f.valid());\n }\n\n hash(more: object = {}): string {\n return super.hash({\n ddl: this.toDDL(),\n ...more\n });\n }\n\n refreshMeta(): Promise<void> {\n return Promise.resolve();\n }\n\n label(): string {\n return \"Form\";\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n const retVal: DDL2.IField[] = this.validFields().map(f => f.toDDL());\n return () => retVal;\n }\n\n exec(): Promise<void> {\n return Promise.resolve();\n }\n\n computeData(): ReadonlyArray<object> {\n const retVal = {};\n this.validFields().forEach(f => {\n retVal[f.fieldID()] = f.calcValue();\n });\n return [retVal];\n }\n\n // ===\n total(): number {\n return 1;\n }\n}\nForm.prototype._class += \" Form\";\n\nexport interface FormField {\n type(): \"boolean\" | \"number\" | \"string\" | \"dataset\";\n type(_: \"boolean\" | \"number\" | \"string\" | \"dataset\"): this;\n fieldID(): string;\n fieldID(_: string): this;\n default(): boolean | number | string | any[];\n default(_: boolean | number | string | any[]): this;\n value(): boolean | number | string;\n value(_: boolean | number | string): this;\n value_exists(): boolean;\n childFields(): FormField[];\n childFields(_: FormField[]): this;\n}\n\nexport interface Form {\n formFields(): FormField[];\n formFields(_: FormField[]): this;\n}\n\nFormField.prototype.publish(\"type\", \"string\", \"set\", \"FormField Type\", [\"boolean\", \"number\", \"string\", \"dataset\"]);\nFormField.prototype.publish(\"fieldID\", \"\", \"string\", \"FormField Label\");\nFormField.prototype.publish(\"default\", null, \"any\", \"Default Value\", null, { optional: true });\nFormField.prototype.publish(\"value\", null, \"any\", \"Default Value\", null, { optional: true });\nFormField.prototype.publish(\"childFields\", [], \"propertyArray\", \"Child Fields\", null, { autoExpand: FormField, disable: (w: FormField) => w.disableChildField() });\n\nForm.prototype.publish(\"formFields\", [], \"propertyArray\", \"Multi Fields\", null, { autoExpand: FormField });","import { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { IDatasource } from \"@hpcc-js/dgrid\";\nimport { isArray } from \"@hpcc-js/util\";\nimport { csvParse as d3CsvParse, tsvParse as d3TsvParse } from \"d3-dsv\";\nimport { Activity } from \"./activity.ts\";\nimport { Datasource } from \"./datasource.ts\";\nimport { FormField } from \"./form.ts\";\n\nfunction fieldType(field: any): DDL2.IFieldType {\n if (isArray(field)) {\n return \"dataset\";\n }\n const type = typeof field;\n switch (type) {\n case \"boolean\":\n case \"number\":\n case \"string\":\n case \"object\":\n return type;\n }\n return \"string\";\n}\n\nexport function rowToFields(row: object, _jsonData): DDL2.IField[] {\n // TODO: This heuristic will fail if there are empty nested rows in the first row...\n const retVal: DDL2.IField[] = [];\n for (const key in row) {\n const field = {\n type: fieldType(row[key]),\n id: key\n } as DDL2.IField;\n switch (field.type) {\n case \"object\":\n for (const row of _jsonData) {\n let found = false;\n for (const _childKey in row[key]) {\n const rowFields = rowToFields(row[key], [row[key]]);\n field.fields = {};\n if (rowFields.length) {\n rowFields.forEach(rf => field.fields[rf.id] = rf);\n found = true;\n }\n break;\n }\n if (found) break;\n }\n break;\n case \"dataset\":\n for (const row of _jsonData) {\n if (row[key] && row[key].length) {\n field.children = rowToFields(row[key][0], row[key]);\n break;\n }\n }\n break;\n }\n retVal.push(field);\n }\n return retVal;\n}\n\nexport class Databomb extends Datasource {\n\n private _jsonData: ReadonlyArray<object> = [];\n\n constructor() {\n super();\n }\n\n toDDL(skipPayload: boolean = false): DDL2.IDatabomb {\n return {\n type: \"databomb\",\n id: this.id(),\n format: this.format(),\n payload: skipPayload ? undefined : this.payload(),\n fields: this.validFields().map(f => f.toDDL())\n };\n }\n\n fromDDL(ddl: DDL2.IDatabomb, skipID = false): this {\n (skipID ? this : this.id(ddl.id))\n .format(ddl.format)\n .payload(ddl.payload)\n .databombFields(ddl.fields.map(FormField.fromDDL))\n ;\n return this;\n }\n\n static fromDDL(ddl: DDL2.IDatabomb, skipID = false): Databomb {\n return new Databomb().fromDDL(ddl, skipID);\n }\n\n validFields(): FormField[] {\n return this.databombFields().filter(f => f.valid());\n }\n\n updateJsonData() {\n try {\n switch (this.format()) {\n case \"csv\":\n this._jsonData = d3CsvParse(this.payload());\n break;\n case \"tsv\":\n this._jsonData = d3TsvParse(this.payload());\n break;\n case \"json\":\n default:\n this._jsonData = JSON.parse(this.payload());\n break;\n }\n this.databombFields(this.preCalcFields().map(FormField.fromDDL));\n } catch (e) {\n this.databombFields([]);\n this._jsonData = [];\n }\n }\n\n hash(more: object): string {\n return super.hash({\n ddl: this.toDDL(true),\n ...more\n }) + this.payload();\n }\n\n refreshMeta(): Promise<void> {\n return Promise.resolve();\n }\n\n label(): string {\n return \"Databomb\";\n }\n\n private preCalcFields(): DDL2.IField[] {\n if (this._jsonData.length === 0) return [];\n return rowToFields(this._jsonData[0], this._jsonData);\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n return () => this.validFields().map(f => f.toDDL());\n }\n\n exec(): Promise<void> {\n return Promise.resolve();\n }\n\n computeData(): ReadonlyArray<object> {\n const coarceFuncMap = {};\n this.validFields().forEach(field => {\n coarceFuncMap[field.fieldID()] = field.coerceFunc();\n });\n return this._jsonData.map(row => {\n const retVal = {};\n for (const key in coarceFuncMap) {\n retVal[key] = coarceFuncMap[key](row[key]);\n }\n return retVal;\n });\n }\n\n // ===\n total(): number {\n return this._jsonData.length;\n }\n}\nDatabomb.prototype._class += \" Databomb\";\n\nexport interface Databomb {\n format(): \"json\" | \"csv\" | \"tsv\";\n format(_: \"json\" | \"csv\" | \"tsv\"): this;\n payload(): string;\n payload(_: string): this;\n databombFields(): FormField[];\n databombFields(_: FormField[]): this;\n}\n\nDatabomb.prototype.publish(\"format\", \"json\", \"set\", \"Databomb Format\", [\"json\", \"csv\", \"tsv\"]);\nDatabomb.prototype.publish(\"payload\", \"\", \"string\", \"Databomb array\", null, { multiline: true });\nDatabomb.prototype.publish(\"databombFields\", [], \"propertyArray\", \"Multi Fields\", null, { autoExpand: FormField });\n\nconst payloadFormat = Databomb.prototype.format;\nDatabomb.prototype.format = function (this: Databomb, _?) {\n const retVal = payloadFormat.apply(this, arguments);\n if (arguments.length) {\n this.updateJsonData();\n }\n return retVal;\n};\n\nconst databombPayloadOrig = Databomb.prototype.payload;\nDatabomb.prototype.payload = function (this: Databomb, _?) {\n const retVal = databombPayloadOrig.apply(this, arguments);\n if (arguments.length) {\n this.updateJsonData();\n }\n return retVal;\n};\n\nexport const emptyDatabomb = new Databomb().id(\"Empty\").payload(\"[]\");\n\nexport class DatasourceAdapt implements IDatasource {\n private _activity: Activity;\n\n constructor(activity: Activity) {\n this._activity = activity || emptyDatabomb;\n }\n\n exec(): Promise<void> {\n return this._activity.refreshMeta().then(() => {\n return this._activity.exec();\n });\n }\n\n id(): string {\n return this._activity.id();\n }\n hash(more: { [key: string]: any } = {}): string {\n return this._activity.hash(more);\n }\n label(): string {\n return this._activity.label();\n }\n outFields(): DDL2.IField[] {\n return this._activity && this._activity.outFields ? this._activity.outFields() as DDL2.IField[] : [];\n }\n total(): number {\n return this._activity ? this._activity.outData().length : 0;\n }\n fetch(from: number, count: number): Promise<ReadonlyArray<object>> {\n return this.exec().then(() => {\n const data = this._activity.outData();\n if (from === 0 && data.length <= count) {\n return Promise.resolve(data);\n }\n return Promise.resolve(data.slice(from, from + count));\n });\n }\n}\n","import { Result, Workunit, XSDXMLNode } from \"@hpcc-js/comms\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { AsyncOrderedQueue, debounce, hashSum } from \"@hpcc-js/util\";\nimport { ElementContainer } from \"../model/element.ts\";\nimport { schemaRow2IField } from \"./activity.ts\";\nimport { Datasource, DatasourceRef } from \"./datasource.ts\";\n\nexport abstract class ESPResult extends Datasource {\n protected _result: Result;\n protected _schema: XSDXMLNode[] = [];\n protected _meta: DDL2.IField[] = [];\n protected _total: number;\n private _data: ReadonlyArray<object> = [];\n\n constructor(protected _ec: ElementContainer) {\n super();\n this\n .samples(this._ec.samples())\n .sampleSize(this._ec.sampleSize())\n ;\n }\n\n hash(more: object = {}): string {\n return hashSum({\n samples: this.samples(),\n sampleSize: this.sampleSize(),\n ...more\n });\n }\n\n abstract _createResult(): Result;\n\n _prevMetaHash: string;\n refreshMetaPromise: Promise<void>;\n refreshMeta(): Promise<void> {\n if (this._prevMetaHash !== this.hash()) {\n this._prevMetaHash = this.hash();\n delete this.refreshMetaPromise;\n }\n if (!this.refreshMetaPromise) {\n this.refreshMetaPromise = super.refreshMeta().then(() => {\n this._result = this._createResult();\n if (this._result) {\n return this._result.refresh();\n }\n throw new Error(\"No valid result\");\n }).then(result => {\n this._total = result.Total;\n this._schema = result.fields();\n this._meta = this._meta && this._meta.length ? this._meta : this._schema.map(schemaRow2IField);\n }).catch(e => {\n this._total = 0;\n this._schema = [];\n this._meta = [];\n });\n }\n return this.refreshMetaPromise;\n }\n\n responseFields(): DDL2.IField[];\n responseFields(_: DDL2.IField[]): this;\n responseFields(_?: DDL2.IField[]): ReadonlyArray<DDL2.IField> | this {\n if (!arguments.length) return this._meta;\n this._meta = _;\n this.refreshMeta();\n return this;\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n return () => this.responseFields();\n }\n\n exec(): Promise<void> {\n return this._exec();\n }\n\n private _prevExecHash: string;\n private _exec = debounce((): Promise<void> => {\n if (this._prevExecHash !== this.hash()) {\n this._prevExecHash = this.hash();\n return super.exec().then(() => {\n return this.sample();\n }).then(response => {\n this._data = this.fixInt64(response);\n }).catch(e => {\n this._data = [];\n });\n } else {\n return Promise.resolve();\n }\n });\n\n inData(): ReadonlyArray<object> {\n return this._data;\n }\n\n computeData(): ReadonlyArray<object> {\n return this._data;\n }\n\n total(): number {\n return this._total;\n }\n\n // ---\n async fetch(from: number, count: number): Promise<any[]> {\n if (count > this.samples() * this.sampleSize()) {\n return this.sample();\n }\n return this._fetch(from, count);\n }\n\n private _fetchQ = new AsyncOrderedQueue();\n private _fetch(from: number, count: number): Promise<any[]> {\n return this._fetchQ.push(\n this._result ? this._result\n .fetchRows(from, count)\n .catch(e => {\n return [];\n }) :\n Promise.resolve([])\n );\n }\n\n private sample = debounce((samples: number = this.samples(), sampleSize: number = this.sampleSize()): Promise<any[]> => {\n const pages: Array<Promise<any[]>> = [];\n if (samples * sampleSize >= this.total()) {\n pages.push(this._fetch(0, this.total()));\n } else {\n const lastPage = this.total() - sampleSize;\n for (let i = 0; i < samples; ++i) {\n pages.push(this._fetch(Math.floor(i * lastPage / samples), sampleSize));\n }\n }\n return Promise.all(pages).then(responses => {\n let retVal2: any[] = [];\n for (const response of responses) {\n retVal2 = retVal2.concat(response);\n }\n return retVal2;\n });\n });\n}\nESPResult.prototype._class += \" ESPResult\";\n\nexport interface ESPResult {\n samples(): number;\n samples(_: number): this;\n sampleSize(): number;\n sampleSize(_: number): this;\n}\n\nexport class WUResult extends ESPResult {\n\n _origWu;\n _origResultName;\n\n declare _wu: WU;\n declare _resultName: string;\n\n constructor(_ec: ElementContainer) {\n super(_ec);\n this._wu = new WU(this._ec);\n }\n\n url(): string {\n return this._wu.url();\n }\n\n wuid(): string {\n return this._wu.wuid();\n }\n\n toDDL(): DDL2.IWUResult {\n return {\n type: \"wuresult\",\n id: this.id(),\n url: this._wu.url(),\n wuid: this.wuid(),\n outputs: {\n [this.resultName()]: {\n fields: this.responseFields()\n }\n }\n };\n }\n\n fromDDL(ddl: DDL2.IWUResult, skipID = false): this {\n if (ddl.outputs[this.resultName()]) {\n return this.responseFields(ddl.outputs[this.resultName()].fields);\n }\n return this;\n }\n\n static fromDDL(ec: ElementContainer, ddl: DDL2.IWUResult, wu: WU, resultName: string, skipID = false): WUResult {\n return new WUResult(ec)\n .wu(wu)\n .resultName(resultName)\n .fromDDL(ddl)\n ;\n }\n\n _createResult(): Result {\n if (this._wu.url() && this.wuid() && this.resultName()) {\n return Result.attach({ baseUrl: this._wu.url(), hookSend: this._ec.hookSend() }, this.wuid(), this.resultName());\n }\n return undefined;\n }\n\n sourceHash(): string {\n return super.hash({\n wuid: this.wuid()\n });\n }\n\n hash(more: object): string {\n return super.hash({\n ddl: this.toDDL()\n });\n }\n\n label(): string {\n return `${this.wuid()}\\n${this.resultName()}`;\n }\n}\nWUResult.prototype._class += \" WUResult\";\n\nexport interface WUResult {\n wu(): WU;\n wu(_: WU): this;\n resultName(): string;\n resultName(_: string): this;\n}\n\nexport class WU extends Datasource {\n _origUrl;\n _origWuid;\n\n protected _workunit: Workunit;\n protected _outputs: { [id: string]: WUResult } = {};\n\n constructor(private _ec: ElementContainer) {\n super();\n }\n\n toDDL(): DDL2.IWUResult {\n const ddlOutputs: DDL2.OutputDict = {};\n for (const resultName in this._outputs) {\n ddlOutputs[resultName] = {\n fields: this._outputs[resultName].responseFields()\n };\n }\n return {\n type: \"wuresult\",\n id: this.id(),\n url: this.url(),\n wuid: this.wuid(),\n outputs: ddlOutputs\n };\n }\n\n fromDDL(ddl: DDL2.IWUResult, skipID = false): this {\n (skipID ? this : this.id(ddl.id))\n .url(ddl.url)\n .wuid(ddl.wuid)\n ;\n const wuResults: { [id: string]: WUResult } = {};\n for (const resultName in ddl.outputs) {\n wuResults[resultName] = WUResult.fromDDL(this._ec, ddl, this, resultName);\n }\n this._outputs = wuResults;\n return this;\n }\n\n static fromDDL(elementContainer: ElementContainer, ddl: DDL2.IWUResult, skipID = false): WU {\n return new WU(elementContainer).fromDDL(ddl, skipID);\n }\n\n hash(): string {\n return hashSum({\n url: this.url(),\n wuid: this.wuid()\n });\n }\n\n label(): string {\n return this.wuid();\n }\n\n outputs(): WUResult[] {\n const retVal = [];\n for (const resultName in this._outputs) {\n retVal.push(this._outputs[resultName]);\n }\n return retVal;\n }\n\n outputDDL(): DDL2.OutputDict {\n const retVal: DDL2.OutputDict = {};\n for (const resultName in this._outputs) {\n retVal[resultName] = {\n fields: this._outputs[resultName].outFields() as DDL2.IField[]\n };\n }\n return retVal;\n }\n\n output(id: string): WUResult {\n return this._outputs[id];\n }\n\n private _prevSourceHash: string;\n private refreshMetaPromise: Promise<void>;\n private _resultNames: string[] = [];\n refreshMeta(): Promise<void> {\n if (!this.url() || !this.wuid()) {\n return Promise.resolve();\n }\n if (this._prevSourceHash !== this.hash()) {\n this._prevSourceHash = this.hash();\n delete this.refreshMetaPromise;\n }\n if (!this.refreshMetaPromise) {\n this.refreshMetaPromise = super.refreshMeta().then(() => {\n this._workunit = Workunit.attach({ baseUrl: this.url(), hookSend: this._ec.hookSend() }, this.wuid());\n return this._workunit.fetchResults();\n }).then(results => {\n this._resultNames = results.map(r => r.Name);\n }).catch(e => {\n });\n }\n return this.refreshMetaPromise;\n }\n\n resultNames(): string[] {\n return this._resultNames;\n }\n}\nWU.prototype._class += \" WU\";\n\nexport interface WU {\n url(): string;\n url(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n}\n\nexport class WUResultRef extends DatasourceRef {\n\n datasource(): WUResult;\n datasource(_: WUResult): this;\n datasource(_?: WUResult): this | WUResult {\n return super.datasource.apply(this, arguments);\n }\n\n resultName(): string;\n resultName(_: string): this;\n resultName(_?: string): string | this {\n if (!arguments.length) return this.datasource().resultName();\n this.datasource().resultName(_);\n return this;\n }\n\n toDDL(): DDL2.IWUResultRef {\n return {\n id: this.datasource().wu().id(),\n output: this.resultName()\n };\n }\n}\nWUResultRef.prototype._class += \" WUResultRef\";\n\nESPResult.prototype.publish(\"samples\", 10, \"number\", \"Number of samples\");\nESPResult.prototype.publish(\"sampleSize\", 100, \"number\", \"Sample size\");\n\nWUResult.prototype.publish(\"wu\", null, \"widget\", \"Workunit\");\nWUResult.prototype.publish(\"resultName\", \"\", \"set\", \"Result Name\", function (this: WUResult): string[] {\n return this._wu !== undefined ? this._wu.resultNames() : [];\n});\n\nWUResult.prototype._origWu = WUResult.prototype.wu;\nWUResult.prototype.wu = function (this: WUResult, _?) {\n const retVal = WUResult.prototype._origWu.apply(this, arguments);\n if (_ !== undefined) {\n this._wu.refreshMeta();\n }\n return retVal;\n};\n\nWUResult.prototype._origResultName = WUResult.prototype.resultName;\nWUResult.prototype.resultName = function (this: WUResult, _?) {\n const prev = this._resultName;\n const retVal = WUResult.prototype._origResultName.apply(this, arguments);\n if (_ !== undefined && prev !== _) {\n this.responseFields([]);\n }\n return retVal;\n};\n\nWU.prototype.publish(\"url\", \"\", \"string\", \"ESP Url (http://x.x.x.x:8010)\");\nWU.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\n\nWU.prototype._origUrl = WU.prototype.url;\nWU.prototype.url = function (this: WU, _?) {\n const retVal = WU.prototype._origUrl.apply(this, arguments);\n if (_ !== undefined) {\n this.refreshMeta();\n }\n return retVal;\n};\n\nWU.prototype._origWuid = WU.prototype.wuid;\nWU.prototype.wuid = function (this: WU, _?) {\n const retVal = WU.prototype._origWuid.apply(this, arguments);\n if (_ !== undefined) {\n this.refreshMeta();\n }\n return retVal;\n};","import { Result } from \"@hpcc-js/comms\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { ElementContainer } from \"../model/element.ts\";\nimport { ESPResult } from \"./wuresult.ts\";\n\nexport class LogicalFile extends ESPResult {\n\n constructor(_ec: ElementContainer) {\n super(_ec);\n }\n\n toDDL(): DDL2.ILogicalFile {\n return {\n type: \"logicalfile\",\n id: this.id(),\n url: this.url(),\n logicalFile: this.logicalFile(),\n fields: this.responseFields()\n };\n }\n\n fromDDL(ddl: DDL2.ILogicalFile, skipID = false): this {\n (skipID ? this : this.id(ddl.id))\n .url(ddl.url)\n .logicalFile(ddl.logicalFile)\n ;\n return this;\n }\n\n static fromDDL(ec: ElementContainer, ddl: DDL2.ILogicalFile, skipID = false): LogicalFile {\n return new LogicalFile(ec).fromDDL(ddl, skipID);\n }\n\n _createResult(): Result {\n return Result.attachLogicalFile({ baseUrl: this.url(), hookSend: this._ec.hookSend() }, this.nodeGroup(), this.logicalFile());\n }\n\n sourceHash(): string {\n return super.hash({\n logicalFile: this.logicalFile()\n });\n }\n\n hash(more: object): string {\n return super.hash({\n ddl: this.toDDL()\n });\n }\n\n label(): string {\n return `${this.logicalFile()}`;\n }\n}\nLogicalFile.prototype._class += \" LogicalFile\";\n\nexport interface LogicalFile {\n url(): string;\n url(_: string): this;\n nodeGroup(): string;\n nodeGroup(_: string): this;\n logicalFile(): string;\n logicalFile(_: string): this;\n}\nLogicalFile.prototype.publish(\"url\", \"\", \"string\", \"ESP Url (http://x.x.x.x:8010)\");\nLogicalFile.prototype.publish(\"nodeGroup\", \"\", \"string\", \"Node Group\");\nLogicalFile.prototype.publish(\"logicalFile\", \"\", \"string\", \"Logical File Name\");","import { PropertyExt } from \"@hpcc-js/common\";\nimport { createConnection } from \"@hpcc-js/comms\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { AsyncOrderedQueue, compare, hashSum } from \"@hpcc-js/util\";\nimport { Element, ElementContainer } from \"../model/element.ts\";\nimport { IActivityError, ReferencedFields } from \"./activity.ts\";\nimport { rowToFields } from \"./databomb.ts\";\nimport { Datasource, DatasourceRef } from \"./datasource.ts\";\n\nexport class RestField extends PropertyExt {\n protected _owner: RestService;\n\n constructor() {\n super();\n }\n\n toDDL(): DDL2.IFieldString {\n return {\n type: \"string\",\n id: this.fieldID()\n };\n }\n\n fromDDL(ddl: DDL2.IFieldString): this {\n return this\n .fieldID(ddl.id)\n ;\n }\n\n static fromDDL(ddl: DDL2.IFieldString): RestField {\n return new RestField().fromDDL(ddl);\n }\n\n owner(): RestService;\n owner(_: RestService): this;\n owner(_?: RestService): RestService | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.fieldID();\n }\n}\n\nexport class RestService extends Datasource {\n\n private _responseFields: { [outputID: string]: DDL2.IField[] } = {};\n\n constructor(readonly _ec: ElementContainer) {\n super();\n }\n\n toDDL(): DDL2.IRestService {\n return {\n type: \"rest\",\n id: this.id(),\n url: this.url(),\n action: this.action(),\n mode: this.mode(),\n inputs: this.validRequestFields().map(rf => rf.toDDL()),\n outputs: this.outputDDL()\n };\n }\n\n fromDDL(ddl: DDL2.IRestService, skipID = false): this {\n (skipID ? this : this.id(ddl.id))\n .url(ddl.url)\n .action(ddl.action)\n .mode(ddl.mode || \"get\")\n .requestFields(ddl.inputs.map(RestField.fromDDL))\n ;\n for (const key in ddl.outputs) {\n this.responseFields(key, ddl.outputs[key].fields);\n }\n return this;\n }\n\n static fromDDL(ec: ElementContainer, ddl: DDL2.IRestService, skipID = false): RestService {\n return new RestService(ec).fromDDL(ddl, skipID);\n }\n\n hash(more: object = {}): string {\n return hashSum({\n url: this.url(),\n action: this.action(),\n mode: this.mode(),\n ...more\n });\n }\n\n label(): string {\n return this.action();\n }\n\n responseFields(resultName: string): DDL2.IField[];\n responseFields(resultName: string, _: DDL2.IField[]): this;\n responseFields(resultName: string, _?: DDL2.IField[]): DDL2.IField[] | this {\n if (arguments.length === 1) return this._responseFields[resultName] || [];\n this._responseFields[resultName] = _;\n return this;\n }\n\n validRequestFields(): RestField[] {\n return this.requestFields().filter(f => f.valid());\n }\n\n private _prevRequestHash;\n private _prevPromise;\n private _submitQ = new AsyncOrderedQueue();\n submit(request: { [key: string]: any }): Promise<{ [key: string]: any }> {\n const requestHash = hashSum(request);\n if (!this._prevPromise || this._prevRequestHash !== requestHash) {\n this._prevRequestHash = requestHash;\n const conn = createConnection({ baseUrl: this.url(), type: this.mode() });\n this._prevPromise = this._submitQ.push(conn.send(this.action(), request));\n }\n return this._prevPromise;\n }\n\n resultNames(): string[] {\n const retVal: string[] = [];\n for (const key in this._responseFields) {\n retVal.push(key);\n }\n return retVal;\n }\n\n outputDDL(): DDL2.OutputDict {\n const retVal: DDL2.OutputDict = {};\n this.resultNames().forEach(resultName => {\n retVal[resultName] = {\n fields: this._responseFields[resultName]\n };\n });\n return retVal;\n }\n}\nRestService.prototype._class += \" RestService\";\n\nexport class RestResult extends Datasource {\n\n _origService;\n\n declare _service: RestService;\n\n constructor(private _ec: ElementContainer) {\n super();\n this._service = new RestService(this._ec);\n }\n\n validRequestFields(): RestField[] {\n return this.service().validRequestFields();\n }\n\n toDDL(): DDL2.IRestService {\n return this.service().toDDL();\n }\n\n fromDDL(ddl: DDL2.IRestService): this {\n this.service().fromDDL(ddl);\n return this;\n }\n\n static fromDDL(ec: ElementContainer, rs: RestService, resultName: string): RestResult {\n return new RestResult(ec)\n .id(`${rs.id()}_${resultName}`)\n .service(rs)\n .resultName(resultName)\n ;\n }\n\n serviceID(): string {\n return `${this.service().url()}/${this.service().action()}}`;\n }\n\n sourceHash(): string {\n return this.service().hash();\n }\n\n requestFields(): DDL2.IField[] {\n return this.service().requestFields().map(rf => rf.toDDL());\n }\n\n responseFields(): DDL2.IField[];\n responseFields(_: DDL2.IField[]): this;\n responseFields(_?: DDL2.IField[]): this | DDL2.IField[] {\n if (!arguments.length) return this.service().responseFields(this.resultName());\n this.service().responseFields(this.resultName(), _);\n return this;\n }\n\n hash(more: object = {}): string {\n return hashSum({\n source: this.sourceHash(),\n resultName: this.resultName(),\n ...more\n });\n }\n\n label(): string {\n return `${this.service().label()}\\n${this.resultName()}`;\n }\n\n private _jsonData: object[] = [];\n private jsonDataFields(): DDL2.IField[] {\n if (!this._jsonData || !this._jsonData.length) return [];\n const retVal = rowToFields(this._jsonData[0], this._jsonData);\n this.responseFields(retVal);\n return retVal;\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n return () => this.jsonDataFields();\n }\n\n computeData(): ReadonlyArray<object> {\n return this._jsonData;\n }\n\n submit(request: { [key: string]: any }): Promise<{ [key: string]: any }> {\n return this.service().submit(request).then(response => {\n const resultName = this.resultName();\n const resultFields = resultName ? resultName.split(\".\") : [];\n for (const field of resultFields) {\n response = (response || {})[field];\n }\n this._jsonData = response as object[];\n return response;\n });\n }\n\n formatRequest() {\n const request = {};\n this.service().validRequestFields().forEach(f => {\n request[f.fieldID()] = \"\";\n });\n return request;\n }\n\n exec(): Promise<void> {\n return this.submit(this.formatRequest()).then(response => { });\n }\n}\nRestResult.prototype._class += \" RestResult\";\n\nexport class Param extends PropertyExt {\n\n validate(prefix: string): IActivityError[] {\n const retVal: IActivityError[] = [];\n if (!this.source_valid()) {\n retVal.push({\n source: `${prefix}.source.${this.source()}`,\n msg: `Invalid source: \"${this.source()}\"`,\n hint: `expected: ${JSON.stringify(this.visualizationIDs())}`\n });\n }\n if (!this.remoteField_valid()) {\n retVal.push({\n source: `${prefix}.remoteField`,\n msg: `Invalid remoteField: \"${this.remoteField()}\"`,\n hint: `expected: ${JSON.stringify(this.sourceOutFields())}`\n });\n }\n if (!this.value_valid()) {\n retVal.push({\n source: `${prefix}.value`,\n msg: `Invalid value: \"${this.value()}\"`,\n hint: \"expected: any value.\"\n });\n }\n return retVal;\n }\n\n constructor(private _ec: ElementContainer) {\n super();\n }\n\n toDDL(): DDL2.IRequestField {\n return {\n source: this.source(),\n remoteFieldID: this.remoteField(),\n localFieldID: this.localField(),\n value: this.value()\n };\n }\n\n fromDDL(ddl: DDL2.IRequestField): this {\n return this\n .source(ddl.source)\n .remoteField(ddl.remoteFieldID)\n .localField(ddl.localFieldID)\n .value(ddl.value)\n ;\n }\n\n static fromDDL(ec: ElementContainer, ddl: DDL2.IRequestField): Param {\n return new Param(ec).fromDDL(ddl);\n }\n\n hash() {\n return hashSum({\n label: this.localField(),\n source: this.source(),\n sourceField: this.remoteField()\n });\n }\n\n visualizationIDs() {\n return this._ec.elementIDs();\n }\n\n sourceFields() {\n return this.sourceOutFields().map(field => field.id);\n }\n\n sourceViz(): Element {\n return this._ec.element(this.source());\n }\n\n sourceOutFields(): ReadonlyArray<DDL2.IField> {\n return this.sourceViz().hipiePipeline().selectionFields();\n }\n\n sourceSelection(): any[] {\n return this.sourceViz().selection();\n }\n\n calcValue(): Array<string | number | boolean> {\n if (this.source_exists() && this.remoteField_exists()) {\n const sourceSelection = this.sourceSelection();\n return sourceSelection.map(row => row[this.remoteField()]);\n } else if (this.value_exists()) {\n return [this.value()];\n }\n return [\"\"];\n }\n\n exists(): boolean {\n return this.localField_exists() && ((this.source_exists() && this.remoteField_exists()) || this.value_exists());\n }\n}\nParam.prototype._class += \" Param\";\n\nexport class RestResultRef extends DatasourceRef {\n\n serviceID(): string {\n return this.datasource().serviceID();\n }\n\n private _data: ReadonlyArray<object> = [];\n\n datasource(): RestResult;\n datasource(_: RestResult): this;\n datasource(_?: RestResult): this | RestResult {\n return super.datasource.apply(this, arguments);\n }\n\n url(): string {\n return this.datasource().service().url();\n }\n\n action(): string {\n return this.datasource().service().action();\n }\n\n resultName(): string {\n return this.datasource().resultName();\n }\n\n validate(): IActivityError[] {\n let retVal: IActivityError[] = [];\n for (const filter of this.validParams()) {\n retVal = retVal.concat(filter.validate(\"request\"));\n }\n return retVal;\n }\n\n constructor(private _ec: ElementContainer) {\n super();\n }\n\n toDDL(): DDL2.IRoxieServiceRef {\n return {\n id: this.datasource().service().id(),\n output: this.resultName(),\n request: this.validParams().map((vp): DDL2.IRequestField => {\n return {\n source: vp.source(),\n remoteFieldID: vp.remoteField(),\n localFieldID: vp.localField(),\n value: vp.value()\n };\n })\n };\n }\n\n sourceHash(): string {\n return this.datasource().hash();\n }\n\n requestFieldRefs(): DDL2.IRequestField[];\n requestFieldRefs(_: DDL2.IRequestField[]): this;\n requestFieldRefs(_?: DDL2.IRequestField[]): DDL2.IRequestField[] | this {\n if (!arguments.length) return this.validParams().map(param => param.toDDL());\n this.request(_.map(fc => Param.fromDDL(this._ec, fc)));\n return this;\n }\n\n requestFields(): DDL2.IField[] {\n return this.datasource().requestFields();\n }\n\n responseFields(): DDL2.IField[] {\n return this.datasource().responseFields();\n }\n\n hash(): string {\n return this.datasource().hash({\n resultName: this.resultName(),\n request: this.formatRequest()\n });\n }\n\n label(): string {\n return `${this.datasource().label()}\\n${this.datasource().resultName()}`;\n }\n\n elementIDs() {\n return this._ec.elementIDs();\n }\n\n element(source) {\n return this._ec.element(source);\n }\n\n referencedFields(refs: ReferencedFields): void {\n super.referencedFields(refs);\n const localFieldIDs: string[] = [];\n for (const param of this.validParams()) {\n const filterSource = param.sourceViz().hipiePipeline();\n if (!refs.inputs[this.id()]) {\n refs.inputs[this.id()] = [];\n }\n refs.inputs[this.id()].push(param.localField());\n filterSource.resolveFields(refs, [param.remoteField()]);\n }\n super.resolveFields(refs, localFieldIDs);\n }\n\n validParams() {\n return this.request().filter(param => param.exists());\n }\n\n refreshMeta(): Promise<void> {\n return this.datasource().refreshMeta().then(() => {\n const oldParams = this.request();\n const diffs = compare(oldParams.map(p => p.localField()), this.datasource().validRequestFields().map(ff => ff.fieldID()));\n const newParams = oldParams.filter(op => diffs.update.indexOf(op.localField()) >= 0);\n this.request(newParams.concat(diffs.enter.map(label => new Param(this._ec).localField(label))));\n });\n }\n\n updatedBy(): string[] {\n return this.validParams().map(param => param.source());\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n return this.datasource().computeFields(inFields);\n }\n\n formatRequest(): { [key: string]: any } {\n const request = this.datasource().formatRequest();\n this.request().forEach(f => {\n if (request[f.localField()] !== undefined) {\n request[f.localField()] = f.calcValue() || request[f.localField()];\n }\n });\n return request;\n }\n\n private _prevRequestHash;\n private _prevRequestPromise;\n exec(): Promise<void> {\n const request = this.formatRequest();\n const requestHash = hashSum({ hash: this.hash(), request });\n if (this._prevRequestHash !== requestHash) {\n this._prevRequestHash = requestHash;\n this._prevRequestPromise = this.datasource().submit(request).then((response: { [key: string]: any }) => {\n this._data = this.fixInt64(response);\n return this._data;\n });\n }\n return this._prevRequestPromise;\n }\n\n inData(): ReadonlyArray<object> {\n return this._data;\n }\n\n computeData(): ReadonlyArray<object> {\n return this._data;\n }\n}\nRestResultRef.prototype._class += \" RestResultRef\";\n\nexport interface RestField {\n fieldID(): string;\n fieldID(_: string): this;\n}\n\nRestField.prototype.publish(\"fieldID\", \"\", \"string\", \"RestField Label\");\n\nexport interface RestService {\n url(): string;\n url(_: string): this;\n action(): string;\n action(_: string): this;\n mode(): \"get\" | \"post\";\n mode(_: \"get\" | \"post\"): this;\n requestFields(): RestField[];\n requestFields(_: RestField[]): this;\n}\n\nRestService.prototype.publish(\"url\", \"\", \"string\", \"REST Url\");\nRestService.prototype.publish(\"action\", \"\", \"string\", \"Query Set\");\nRestService.prototype.publish(\"mode\", \"get\", \"set\", \"Request mode\", [\"get\", \"post\"]);\nRestService.prototype.publish(\"requestFields\", [], \"propertyArray\", \"Multi Fields\", null, { autoExpand: RestField });\n\nexport interface RestResult {\n service(): RestService;\n service(_: RestService): this;\n resultName(): string;\n resultName(_: string): this;\n}\n\nRestResult.prototype.publish(\"service\", null, \"widget\", \"Rest service\");\nRestResult.prototype.publish(\"resultName\", \"\", \"string\", \"Result Name\");\n\nRestResult.prototype._origService = RestResult.prototype.service;\nRestResult.prototype.service = function (this: RestResult, _?) {\n const retVal = RestResult.prototype._origService.apply(this, arguments);\n if (_ !== undefined) {\n this._service.refreshMeta();\n }\n return retVal;\n};\n\nexport interface Param {\n localField(): string;\n localField(_: string): this;\n localField_exists(): boolean;\n source(): string;\n source(_: string): this;\n source_exists(): boolean;\n source_valid(): boolean;\n source_disabled(): boolean;\n remoteField(): string;\n remoteField(_: string): this;\n remoteField_exists(): boolean;\n remoteField_valid(): boolean;\n remoteField_disabled(): boolean;\n value(): string;\n value(_: string): this;\n value_exists(): boolean;\n value_valid(): boolean;\n value_disabled(): boolean;\n}\n\nParam.prototype.publish(\"localField\", null, \"string\", \"Label\");\nParam.prototype.publish(\"source\", null, \"set\", \"Activity\", function (this: Param) { return this.visualizationIDs(); }, {\n optional: true,\n disable: (w: Param): boolean => w.value_exists(),\n validate: (w: Param): boolean => w.source_disabled() || w.visualizationIDs().indexOf(w.source()) >= 0\n});\nParam.prototype.publish(\"remoteField\", null, \"set\", \"Source Field\", function (this: Param) { return this.sourceFields(); }, {\n optional: true,\n disable: (w: Param): boolean => !w.source_exists() || w.value_exists(),\n validate: (w: Param): boolean => w.remoteField_disabled() || w.sourceFields().indexOf(w.remoteField()) >= 0\n});\nParam.prototype.publish(\"value\", null, \"string\", \"Static Value\", null, {\n optional: true,\n disable: (w: Param): boolean => w.source_exists(),\n validate: (w: Param): boolean => w.value_disabled() || w.value_exists()\n});\n\nexport interface RestResultRef {\n request(): Param[];\n request(_: Param[]): this;\n}\n\nRestResultRef.prototype.publish(\"request\", [], \"propertyArray\", \"Request Fields\");\n","import { Query as CommsQuery } from \"@hpcc-js/comms\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { AsyncOrderedQueue, compare, hashSum } from \"@hpcc-js/util\";\nimport { ElementContainer } from \"../model/element.ts\";\nimport { IActivityError, ReferencedFields } from \"./activity.ts\";\nimport { Datasource, DatasourceRef } from \"./datasource.ts\";\nimport { Param } from \"./rest.ts\";\n\nfunction parseUrl(_: string): { url: string, querySet: string, queryID: string } {\n // \"http://10.241.100.157:8002/WsEcl/submit/query/roxie/carmigjx_govbisgsavi.Ins4621360_Service_00000006/json\",\n const parts = _.split(\"/WsEcl/submit/query/\");\n if (parts.length < 2) throw new Error(`Invalid roxie URL: ${_}`);\n const urlParts = parts[0].split(\":\");\n if (urlParts.length < 3) throw new Error(`Invalid roxie URL: ${_}`);\n const roxieParts = parts[1].split(\"/\");\n if (roxieParts.length < 2) throw new Error(`Invalid roxie URL: ${_}`);\n return {\n url: `${urlParts[0]}:${urlParts[1]}:${urlParts[2] === \"18002\" ? \"18010\" : \"8010\"}`,\n querySet: roxieParts[0],\n queryID: roxieParts[1]\n };\n}\n\nfunction isHipieRequest(requestField: string): boolean {\n return requestField.length >= 8 && requestField.indexOf(\"_changed\") === requestField.length - 8;\n}\n\nfunction isHipieResponse(resultName: string): boolean {\n return (resultName.length >= 8 && resultName.indexOf(\"_changed\") === resultName.length - 8) ||\n ([\"HIPIE_DDL\", \"HIPIE_DDLGLOBALS\", \"hipieversion\"].indexOf(resultName) >= 0)\n ;\n}\n\nexport class RoxieService extends Datasource {\n private _query: CommsQuery;\n private _requestFields: DDL2.IField[];\n private _responseFields: { [outputID: string]: DDL2.IField[] } = {};\n private _type: \"roxie\" | \"hipie\" = \"roxie\";\n\n constructor(private _ec: ElementContainer) {\n super();\n }\n\n toDDL(): DDL2.IRoxieService | DDL2.IHipieService {\n return {\n type: this._type,\n id: this.id(),\n url: this.url(),\n querySet: this.querySet(),\n queryID: this.queryID(),\n inputs: this.requestFields(),\n outputs: this.outputDDL()\n };\n }\n\n fromDDL(ddl: DDL2.IRoxieService | DDL2.IHipieService, skipID = false): this {\n this._type = ddl.type;\n (skipID ? this : this.id(ddl.id))\n .url(ddl.url)\n .querySet(ddl.querySet)\n .queryID(ddl.queryID)\n ;\n if (ddl.inputs && ddl.inputs.length) {\n this.requestFields(ddl.inputs);\n }\n for (const key in ddl.outputs) {\n this.responseFields(key, ddl.outputs[key].fields);\n }\n return this;\n }\n\n static fromDDL(ec: ElementContainer, ddl: DDL2.IRoxieService | DDL2.IHipieService, skipID = false): RoxieService {\n return new RoxieService(ec).fromDDL(ddl, skipID);\n }\n\n hash(more: object = {}): string {\n return hashSum({\n url: this.url(),\n querySet: this.querySet(),\n queryId: this.queryID(),\n ignoreHipieRequest: this.ignoreHipieRequest(),\n ignoreHipieResponse: this.ignoreHipieResponse(),\n ...more\n });\n }\n\n label(): string {\n return this.queryID();\n }\n\n private _prevSourceHash: string;\n private refreshMetaPromise: Promise<void>;\n refreshMeta(): Promise<void> {\n if (this._prevSourceHash !== this.hash()) {\n this._prevSourceHash = this.hash();\n delete this.refreshMetaPromise;\n }\n if (!this.refreshMetaPromise) {\n const hasMeta = !!this._requestFields;\n this.refreshMetaPromise = new Promise<CommsQuery>((resolve, reject) => {\n const query = CommsQuery.attach({ baseUrl: this.url(), hookSend: this._ec.hookSend() }, this.querySet(), this.queryID());\n if (!hasMeta || this.ignoreHipieRequest() || this.ignoreHipieResponse()) {\n resolve(query.refresh());\n }\n resolve(query);\n }).then((query) => {\n this._query = query;\n if (!hasMeta || this.ignoreHipieRequest()) {\n this._requestFields = query.requestFields().filter(row => this._type === \"roxie\" || !isHipieRequest(row.id));\n }\n if (!hasMeta || this.ignoreHipieResponse()) {\n query.resultNames().filter(resultName => this._type === \"roxie\" || !isHipieResponse(resultName)).forEach(resultName => {\n this._responseFields[resultName] = query.resultFields(resultName);\n });\n }\n });\n }\n return this.refreshMetaPromise;\n }\n\n requestFields(): DDL2.IField[];\n requestFields(_: DDL2.IField[]): this;\n requestFields(_?: DDL2.IField[]): DDL2.IField[] | this {\n if (!arguments.length) return this._requestFields || [];\n this._requestFields = _;\n return this;\n }\n\n responseFields(resultName: string): DDL2.IField[];\n responseFields(resultName: string, _: DDL2.IField[]): this;\n responseFields(resultName: string, _?: DDL2.IField[]): DDL2.IField[] | this {\n if (arguments.length === 1) return this._responseFields[resultName] || [];\n this._responseFields[resultName] = _;\n return this;\n }\n\n private _prevRequestHash;\n private _prevPromise;\n private _submitQ = new AsyncOrderedQueue();\n submit(request: { [key: string]: any }): Promise<{ [key: string]: any }> {\n const requestHash = hashSum(request);\n if (!this._prevPromise || this._prevRequestHash !== requestHash) {\n this._prevRequestHash = requestHash;\n this._prevPromise = this._submitQ.push(this._query.submit(request));\n }\n return this._prevPromise;\n }\n\n resultNames(): string[] {\n const retVal: string[] = [];\n for (const key in this._responseFields) {\n retVal.push(key);\n }\n return retVal;\n }\n\n outputDDL(): DDL2.OutputDict {\n const retVal: DDL2.OutputDict = {};\n this.resultNames().forEach(resultName => {\n retVal[resultName] = {\n fields: this._responseFields[resultName]\n };\n });\n return retVal;\n }\n}\nRoxieService.prototype._class += \" RoxieService\";\n\nexport interface RoxieService {\n url(): string;\n url(_: string): this;\n querySet(): string;\n querySet(_: string): this;\n queryID(): string;\n queryID(_: string): this;\n ignoreHipieRequest(): boolean;\n ignoreHipieRequest(_: boolean): this;\n ignoreHipieResponse(): boolean;\n ignoreHipieResponse(_: boolean): this;\n}\n\nRoxieService.prototype.publish(\"url\", \"\", \"string\", \"ESP Url (http://x.x.x.x:8002)\");\nRoxieService.prototype.publish(\"querySet\", \"\", \"string\", \"Query Set\");\nRoxieService.prototype.publish(\"queryID\", \"\", \"string\", \"Query ID\");\nRoxieService.prototype.publish(\"ignoreHipieRequest\", false, \"boolean\", \"Ignore provided DDL request\");\nRoxieService.prototype.publish(\"ignoreHipieResponse\", false, \"boolean\", \"Ignore provided DDL response\");\n\nexport class RoxieResult extends Datasource {\n\n _origService;\n\n declare _service: RoxieService;\n\n constructor(private _ec: ElementContainer) {\n super();\n this._service = new RoxieService(this._ec);\n }\n\n toDDL(): DDL2.IRoxieService | DDL2.IHipieService {\n return this.service().toDDL();\n }\n\n fromDDL(ddl: DDL2.IRoxieService): this {\n this.service().fromDDL(ddl);\n return this;\n }\n\n static fromDDL(ec: ElementContainer, rs: RoxieService, resultName: string): RoxieResult {\n return new RoxieResult(ec)\n .id(`${rs.id()}_${resultName}`)\n .service(rs)\n .resultName(resultName)\n ;\n }\n\n serviceID(): string {\n return `${this.service().url()}/${this.service().querySet()}/${this.service().queryID()}`;\n }\n\n sourceHash(): string {\n return this.service().hash();\n }\n\n requestFields(): DDL2.IField[] {\n return this.service().requestFields();\n }\n\n responseFields(): DDL2.IField[];\n responseFields(_: DDL2.IField[]): this;\n responseFields(_?: DDL2.IField[]): this | DDL2.IField[] {\n if (!arguments.length) return this.service().responseFields(this.resultName());\n this.service().responseFields(this.resultName(), _);\n return this;\n }\n\n hash(more: object = {}): string {\n return hashSum({\n source: this.sourceHash(),\n resultName: this.resultName(),\n ...more\n });\n }\n\n label(): string {\n return `${this.service().label()}\\n${this.resultName()}`;\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n return () => this.service().responseFields(this.resultName());\n }\n\n refreshMeta(): Promise<void> {\n return this.service().refreshMeta();\n }\n\n submit(request: { [key: string]: any }): Promise<{ [key: string]: any }> {\n return this.service().submit(request);\n }\n}\nRoxieResult.prototype._class += \" RoxieResult\";\n\nexport interface RoxieResult {\n service(): RoxieService;\n service(_: RoxieService): this;\n resultName(): string;\n resultName(_: string): this;\n}\n\nRoxieResult.prototype.publish(\"service\", null, \"widget\", \"Roxie service\");\nRoxieResult.prototype.publish(\"resultName\", \"\", \"set\", \"Result Name\", function (this: RoxieResult): string[] {\n return this._service !== undefined ? this._service.resultNames() : [];\n});\n\nRoxieResult.prototype._origService = RoxieResult.prototype.service;\nRoxieResult.prototype.service = function (this: RoxieResult, _?) {\n const retVal = RoxieResult.prototype._origService.apply(this, arguments);\n if (_ !== undefined) {\n this._service.refreshMeta();\n }\n return retVal;\n};\n\nexport class RoxieResultRef extends DatasourceRef {\n\n serviceID(): string {\n return this.datasource().serviceID();\n }\n\n private _data: ReadonlyArray<object> = [];\n\n datasource(): RoxieResult;\n datasource(_: RoxieResult): this;\n datasource(_?: RoxieResult): this | RoxieResult {\n return super.datasource.apply(this, arguments);\n }\n\n url(): string {\n return this.datasource().service().url();\n }\n\n querySet(): string {\n return this.datasource().service().querySet();\n }\n\n queryID(): string {\n return this.datasource().service().queryID();\n }\n\n resultName(): string {\n return this.datasource().resultName();\n }\n\n validate(): IActivityError[] {\n let retVal: IActivityError[] = [];\n for (const filter of this.validParams()) {\n retVal = retVal.concat(filter.validate(\"request\"));\n }\n return retVal;\n }\n\n constructor(private _ec: ElementContainer) {\n super();\n }\n\n toDDL(): DDL2.IRoxieServiceRef {\n return {\n id: this.datasource().service().id(),\n output: this.resultName(),\n request: this.validParams().map((vp): DDL2.IRequestField => {\n return {\n source: vp.source(),\n remoteFieldID: vp.remoteField(),\n localFieldID: vp.localField(),\n value: vp.value()\n };\n })\n };\n }\n\n sourceHash(): string {\n return this.datasource().hash();\n }\n\n requestFieldRefs(): DDL2.IRequestField[];\n requestFieldRefs(_: DDL2.IRequestField[]): this;\n requestFieldRefs(_?: DDL2.IRequestField[]): DDL2.IRequestField[] | this {\n if (!arguments.length) return this.validParams().map(param => param.toDDL());\n this.request(_.map(fc => Param.fromDDL(this._ec, fc)));\n return this;\n }\n\n requestFields(): DDL2.IField[] {\n return this.datasource().requestFields();\n }\n\n responseFields(): DDL2.IField[] {\n return this.datasource().responseFields();\n }\n\n hash(): string {\n return this.datasource().hash({\n resultName: this.resultName(),\n params: this.request().map(param => param.hash()),\n request: this.formatRequest()\n });\n }\n\n label(): string {\n return `${this.datasource().label()}\\n${this.datasource().resultName()}`;\n }\n\n elementIDs() {\n return this._ec.elementIDs();\n }\n\n element(source) {\n return this._ec.element(source);\n }\n\n referencedFields(refs: ReferencedFields): void {\n super.referencedFields(refs);\n const localFieldIDs: string[] = [];\n for (const param of this.validParams()) {\n localFieldIDs.push(param.localField());\n const filterSource = param.sourceViz().hipiePipeline();\n if (!refs.inputs[this.id()]) {\n refs.inputs[this.id()] = [];\n }\n refs.inputs[this.id()].push(param.localField());\n filterSource.resolveFields(refs, [param.remoteField()]);\n }\n super.resolveFields(refs, localFieldIDs);\n }\n\n validParams() {\n return this.request().filter(param => param.exists());\n }\n\n refreshMeta(): Promise<void> {\n return this.datasource().refreshMeta().then(() => {\n const oldParams = this.request();\n const diffs = compare(oldParams.map(p => p.localField()), this.datasource().requestFields().map(ff => ff.id));\n const newParams = oldParams.filter(op => diffs.update.indexOf(op.localField()) >= 0);\n this.request(newParams.concat(diffs.enter.map(label => new Param(this._ec).localField(label))));\n });\n }\n\n updatedBy(): string[] {\n return this.validParams().map(param => param.source());\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n return () => this.datasource().responseFields();\n }\n\n formatRequest(): { [key: string]: any } {\n const request: { [key: string]: any } = {};\n let hasRequest = false;\n const fields = this.datasource().requestFields();\n for (const param of this.validParams()) {\n const _value = param.calcValue();\n const field = fields.filter(row => row.id === param.localField())[0];\n let value;\n if (field.type === \"set\") {\n value = {\n Item: _value\n };\n } else {\n value = _value[0];\n }\n if (value !== undefined) {\n request[param.localField()] = value;\n }\n hasRequest = true;\n }\n if (!hasRequest) {\n request.refresh = true;\n }\n return request;\n }\n\n private _prevRequestHash;\n private _prevRequestPromise;\n exec(): Promise<void> {\n return super.exec().then(() => {\n const request = this.formatRequest();\n const requestHash = hashSum({ hash: this.hash(), request });\n if (this._prevRequestHash !== requestHash) {\n this._prevRequestHash = requestHash;\n this._prevRequestPromise = this.datasource().submit(request).then((response: { [key: string]: any }) => {\n const resultName = this.datasource().resultName();\n let result = response[resultName];\n if (!result) {\n // See: https://track.hpccsystems.com/browse/HPCC-21176 ---\n // \"Result 1\" => \"result_1\"\n result = response[resultName.toLowerCase().replace(/ /g, \"_\")];\n }\n return this.fixInt64(result);\n });\n }\n return this._prevRequestPromise;\n }).then(data => {\n this._data = data;\n });\n }\n\n inData(): ReadonlyArray<object> {\n return this._data;\n }\n\n computeData(): ReadonlyArray<object> {\n return this._data;\n }\n}\nRoxieResultRef.prototype._class += \" RoxieResultRef\";\n\nexport interface RoxieResultRef {\n request(): Param[];\n request(_: Param[]): this;\n}\n\nRoxieResultRef.prototype.publish(\"request\", [], \"propertyArray\", \"Request Fields\");\n\nexport class HipieResultRef extends RoxieResultRef {\n\n fullUrl(_: string): this {\n const info = parseUrl(_);\n this.datasource().service().url(info.url);\n this.datasource().service().querySet(info.querySet);\n this.datasource().service().queryID(info.queryID);\n return this;\n }\n\n formatRequest(): { [key: string]: any } {\n const _request = super.formatRequest();\n const request: { [key: string]: any } = {};\n for (const key in _request) {\n request[key] = _request[key];\n request[`${key}_changed`] = true;\n }\n return request;\n }\n}\nHipieResultRef.prototype._class += \" HipieResultRef\";","import { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { ElementContainer } from \"../model/element.ts\";\nimport { ActivitySelection, IActivityError } from \"./activity.ts\";\nimport { Databomb, emptyDatabomb } from \"./databomb.ts\";\nimport { DatasourceRef, DatasourceRefType } from \"./datasource.ts\";\nimport { Form } from \"./form.ts\";\nimport { LogicalFile } from \"./logicalfile.ts\";\nimport { RestResult, RestResultRef } from \"./rest.ts\";\nimport { HipieResultRef, RoxieResult, RoxieService } from \"./roxie.ts\";\nimport { WUResult, WUResultRef } from \"./wuresult.ts\";\n\nlet dsPickerID = 0;\nexport class DSPicker extends ActivitySelection {\n private _nullDatasource = emptyDatabomb;\n\n _origDatasourceID;\n _origDatasourceRef;\n\n declare _datasourceID: string; // DDL2.IDatasourceType;\n declare _datasourceRef: DatasourceRef;\n\n datasource(): DatasourceRefType {\n return this.datasourceRef().datasource();\n }\n\n refreshRef(id: string) {\n const ds: DatasourceRefType = this._ec.datasource(id);\n if (ds instanceof Databomb) {\n this.selection(new DatasourceRef().datasource(ds));\n } else if (ds instanceof Form) {\n this.selection(new DatasourceRef().datasource(ds));\n } else if (ds instanceof LogicalFile) {\n this.selection(new DatasourceRef().datasource(ds));\n } else if (ds instanceof RoxieService) {\n this.selection(new DatasourceRef().datasource(ds));\n } else if (ds instanceof WUResult) {\n this.selection(new WUResultRef().datasource(ds));\n } else if (ds instanceof RoxieResult) {\n this.selection(new HipieResultRef(this._ec).datasource(ds));\n } else if (ds instanceof RestResult) {\n this.selection(new RestResultRef(this._ec).datasource(ds));\n }\n }\n\n selection(): DatasourceRef;\n selection(_: DatasourceRef): this;\n selection(_?: DatasourceRef): DatasourceRef | this {\n const retVal = super.selection.apply(this, arguments);\n if (!arguments.length) return retVal || this._nullDatasource;\n if (this._datasourceID !== _.datasource().id()) {\n this._datasourceID = _.datasource().id();\n }\n return this;\n }\n\n validate(): IActivityError[] {\n return this.selection().validate();\n }\n\n constructor(private _ec: ElementContainer) {\n super();\n this._id = `ds_${++dsPickerID}`;\n const ds = this._ec.datasources()[0];\n this.datasourceID(ds.id());\n }\n\n toDDL(): DDL2.IDatasourceRef {\n return {\n ...this.datasourceRef().toDDL(),\n id: this.datasourceID()\n };\n }\n\n // Activity overrides ---\n hash(more: { [key: string]: any } = {}): string {\n return super.hash({\n ...more\n });\n }\n\n datasourceIDs() {\n return this._ec.datasources().map(ds => {\n return {\n value: ds.id(),\n text: `${ds.label()} ${ds.id() !== ds.label() ? ` (${ds.id()})` : \"\"}`\n };\n });\n }\n}\nDSPicker.prototype._class += \" DSPicker\";\n\nexport interface DSPicker {\n datasourceID(): string;\n datasourceID(_: string): this;\n datasourceRef(): DatasourceRef;\n datasourceRef(_: DatasourceRef): this;\n}\n\nDSPicker.prototype.publish(\"datasourceID\", \"\", \"set\", \"Activity\", function (this: DSPicker) { return this.datasourceIDs(); }, { optional: false });\nDSPicker.prototype.publish(\"datasourceRef\", \"\", \"widget\", \"Activity\");\n\nDSPicker.prototype._origDatasourceID = DSPicker.prototype.datasourceID;\nDSPicker.prototype.datasourceID = function (this: DSPicker, _?) {\n const prev = this._datasourceID;\n const retVal = DSPicker.prototype._origDatasourceID.apply(this, arguments);\n if (_ !== undefined && prev !== _) {\n this.refreshRef(_);\n }\n return retVal;\n};\n\nDSPicker.prototype._origDatasourceRef = DSPicker.prototype.datasourceRef;\nDSPicker.prototype.datasourceRef = function (this: DSPicker, _?) {\n return ActivitySelection.prototype.selection.apply(this, arguments);\n};","import { PropertyExt } from \"@hpcc-js/common\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { Element, ElementContainer } from \"../model/element.ts\";\nimport { Activity, IActivityError, ReferencedFields } from \"./activity.ts\";\n\nfunction createFilter(condition: DDL2.IMappingConditionType, lf: string, val: string | number): (localRow: any) => boolean {\n const isString = typeof val === \"string\";\n switch (condition) {\n case \"==\":\n return (localRow) => isString && typeof localRow[lf] === \"string\" ? localRow[lf].trim() === val : localRow[lf] === val;\n case \"!=\":\n return (localRow) => isString && typeof localRow[lf] === \"string\" ? localRow[lf].trim() !== val : localRow[lf] !== val;\n case \"<\":\n return (localRow) => localRow[lf] < val;\n case \"<=\":\n return (localRow) => localRow[lf] <= val;\n case \">\":\n return (localRow) => localRow[lf] > val;\n case \">=\":\n return (localRow) => localRow[lf] >= val;\n default:\n throw new Error(`Unknown filter condition: ${condition}`);\n }\n}\n\nexport class ColumnMapping extends PropertyExt {\n private _owner: RemoteFilter;\n\n validate(prefix: string): IActivityError[] {\n const retVal: IActivityError[] = [];\n if (!this.remoteField_valid()) {\n retVal.push({\n source: `${prefix}.remoteField`,\n msg: `Invalid remoteField: \"${this.remoteField()}\"`,\n hint: `expected: ${JSON.stringify(this.sourceOutFields())}`\n });\n }\n if (!this.localField_valid()) {\n retVal.push({\n source: `${prefix}.localField`,\n msg: `Invalid localField: \"${this.localField()}\"`,\n hint: `expected: ${JSON.stringify(this.localFields())}`\n });\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n owner(): RemoteFilter;\n owner(_: RemoteFilter): this;\n owner(_?: RemoteFilter): RemoteFilter | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return this.localField_exists() || this.remoteField_exists();\n }\n\n toDDL(): DDL2.IMapping {\n return {\n remoteFieldID: this.remoteField(),\n localFieldID: this.localField(),\n condition: this.condition(),\n nullable: this.nullable()\n };\n }\n\n fromDDL(ddl: DDL2.IMapping): this {\n return this\n .remoteField(ddl.remoteFieldID)\n .localField(ddl.localFieldID)\n .condition(ddl.condition)\n .nullable(ddl.nullable)\n ;\n }\n\n static fromDDL(ddl: DDL2.IMapping): ColumnMapping {\n return new ColumnMapping().fromDDL(ddl);\n }\n\n hash() {\n return hashSum({\n remoteField: this.remoteField(),\n localField: this.localField(),\n condition: this.condition(),\n nullable: this.nullable()\n });\n }\n\n localFields(): string[] {\n return this._owner.inFields().map(field => field.id);\n }\n\n sourceOutFields(): string[] {\n return this._owner.sourceOutFields().map(field => field.id);\n }\n\n remoteValues(filterSelection: any[]): Array<number | string> {\n const rf = this.remoteField();\n return filterSelection.map(sel => {\n const retVal = sel[rf];\n if (typeof retVal === \"string\") {\n return retVal.trim();\n }\n return retVal;\n });\n }\n\n createFilterDescription(filterSelection: any[]): string {\n switch (this.condition()) {\n case \"in\":\n case \"range\":\n return `${this.localField()} ${this.condition()} [${this.remoteValues(filterSelection).join(\", \")}]`;\n default:\n return `${this.localField()} ${this.condition()} ${this.remoteValues(filterSelection)[0]}`;\n }\n }\n\n createFilter(filterSelection: any[]): (localRow: any) => boolean {\n const lf = this.localField();\n const fsArr = this.remoteValues(filterSelection);\n switch (this.condition()) {\n case \"range\":\n if (this.nullable() && (fsArr.length < 2 || fsArr[0] === fsArr[1])) {\n return (localRow) => true;\n }\n return (localRow) => localRow[lf] >= fsArr[0] && localRow[lf] <= fsArr[1];\n case \"in\":\n if (this.nullable() && fsArr.length === 0) {\n return (localRow) => true;\n }\n return (localRow) => fsArr.some(fs => typeof localRow[lf] === \"string\" ? localRow[lf].trim() === fs : localRow[lf] === fs);\n default:\n const fs0 = fsArr[0];\n if (this.nullable() && (fs0 === undefined || fs0 === null || fs0 === \"\")) {\n return (localRow) => true;\n }\n return createFilter(this.condition(), lf, fs0);\n }\n }\n}\nColumnMapping.prototype._class += \" ColumnMapping\";\n\nexport interface ColumnMapping {\n remoteField(): string;\n remoteField(_: string): this;\n remoteField_exists(): boolean;\n remoteField_valid(): boolean;\n localField(): string;\n localField(_: string): this;\n localField_exists(): boolean;\n localField_valid(): boolean;\n condition(): DDL2.IMappingConditionType;\n condition(_: DDL2.IMappingConditionType): this;\n nullable(): boolean;\n nullable(_: boolean): this;\n}\n\nexport class RemoteFilter extends PropertyExt {\n private _owner: Filters;\n\n validate(prefix: string): IActivityError[] {\n let retVal: IActivityError[] = [];\n if (!this.source_valid()) {\n retVal.push({\n source: `${prefix}.source.${this.source()}`,\n msg: `Invalid source: \"${this.source()}\"`,\n hint: `expected: ${JSON.stringify(this.visualizationIDs())}`\n });\n }\n if (this.source_exists() && this.validMappings().length === 0) {\n retVal.push({\n source: `${prefix}.source.${this.source()}`,\n msg: `Invalid mappings: \"${this.source()}\"`,\n hint: \"expected minimum of 1 mapping\"\n });\n }\n for (const mapping of this.validMappings()) {\n retVal = retVal.concat(mapping.validate(`${prefix}.${this.source()}.mappings`));\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n owner(): Filters;\n owner(_: Filters): this;\n owner(_?: Filters): Filters | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.source() && this.validMappings().length > 0;\n }\n\n toDDL(): DDL2.IFilterCondition {\n return {\n viewID: this.source(),\n mappings: this.ddlMappings()\n };\n }\n\n fromDDL(ddl: DDL2.IFilterCondition): this {\n return this\n .source(ddl.viewID)\n .ddlMappings(ddl.mappings)\n ;\n }\n\n static fromDDL(ddl: DDL2.IFilterCondition): RemoteFilter {\n return new RemoteFilter().fromDDL(ddl);\n }\n\n ddlMappings(): DDL2.IMapping[];\n ddlMappings(_: DDL2.IMapping[]): this;\n ddlMappings(_?: DDL2.IMapping[]): DDL2.IMapping[] | this {\n if (!arguments.length) return this.validMappings().map(mapping => mapping.toDDL());\n this.mappings(_.map(mapping => ColumnMapping.fromDDL(mapping)));\n return this;\n }\n\n visualizationIDs() {\n return this._owner.visualizationIDs();\n }\n\n hash(): string {\n return hashSum({\n source: this.source(),\n mappings: this.validMappings().map(mapping => mapping.hash()),\n selection: this.sourceSelection()\n });\n }\n\n validMappings(): ColumnMapping[] {\n return this.mappings().filter(mapping => mapping.valid());\n }\n\n appendMappings(mappings: Array<{ remoteField: string, localField: string, condition: DDL2.IMappingConditionType }>): this {\n for (const mapping of mappings) {\n this.mappings().push(new ColumnMapping()\n .owner(this)\n .remoteField(mapping.remoteField)\n .localField(mapping.localField)\n .condition(mapping.condition)\n );\n }\n return this;\n }\n\n inFields(): ReadonlyArray<DDL2.IField> {\n return this._owner.inFields();\n }\n\n sourceViz(): Element {\n return this._owner.visualization(this.source());\n }\n\n sourceOutFields(): ReadonlyArray<DDL2.IField> {\n return this.sourceViz().hipiePipeline().selectionFields();\n }\n\n sourceSelection(): any[] {\n return this.sourceViz().selection();\n }\n\n createFilter(): (localRow: any) => boolean {\n const selection = this.sourceSelection();\n const mappingFilters = this.validMappings().map(mapping => mapping.createFilter(selection));\n return (row: object): boolean => mappingFilters.every(mappingFilter => mappingFilter(row));\n }\n\n createFilterDescription(): string {\n const selection = this.sourceSelection();\n const mappingFilterDescs = this.validMappings().map(mapping => mapping.createFilterDescription(selection));\n return mappingFilterDescs.join(\", \");\n }\n}\nRemoteFilter.prototype._class += \" Filter\";\n\nexport interface RemoteFilter {\n source(): string;\n source(_: string): this;\n source_exists(): boolean;\n source_valid(): boolean;\n mappings(): ColumnMapping[];\n mappings(_: ColumnMapping[]): this;\n}\n\nexport class StaticFilter extends PropertyExt {\n private _owner: Filters;\n\n validate(prefix: string): IActivityError[] {\n const retVal: IActivityError[] = [];\n if (!this.localField_valid()) {\n retVal.push({\n source: `${prefix}.localField`,\n msg: `Invalid localField: \"${this.localField()}\"`,\n hint: `expected: ${JSON.stringify(this.localFields())}`\n });\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n owner(): Filters;\n owner(_: Filters): this;\n owner(_?: Filters): Filters | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n coerceValue(): string | number;\n coerceValue(_: string | number): this;\n coerceValue(_?: string | number): string | number | this {\n if (arguments.length === 0) {\n switch (this.valueType()) {\n case \"number\":\n return +this.value();\n case \"string\":\n default:\n return \"\" + this.value();\n }\n }\n this.value(_);\n if (typeof _ === \"number\") {\n this.valueType(\"number\");\n } else {\n this.valueType(\"string\");\n }\n return this;\n }\n\n valid(): boolean {\n return this.localField_exists() && this.value_exists();\n }\n\n toDDL(): DDL2.IFilterStaticCondition {\n return {\n localFieldID: this.localField(),\n condition: this.condition(),\n value: this.coerceValue()\n };\n }\n\n fromDDL(ddl: DDL2.IFilterStaticCondition): this {\n return this\n .localField(ddl.localFieldID)\n .condition(ddl.condition)\n .coerceValue(ddl.value)\n ;\n }\n\n static fromDDL(ddl: DDL2.IFilterStaticCondition): StaticFilter {\n return new StaticFilter().fromDDL(ddl);\n }\n\n hash() {\n return hashSum({\n localField: this.localField(),\n condition: this.condition(),\n value: this.value(),\n valueType: this.valueType()\n });\n }\n\n localFields(): string[] {\n return this._owner.inFields().map(field => field.id);\n }\n\n createFilterDescription(): string {\n return `${this.localField()} ${this.condition()} ${this.coerceValue()}`;\n }\n\n createFilter(): (localRow: any) => boolean {\n return createFilter(this.condition(), this.localField(), this.coerceValue());\n }\n}\nStaticFilter.prototype._class += \" StaticFilter\";\n\nexport interface StaticFilter {\n localField(): string;\n localField(_: string): this;\n localField_exists(): boolean;\n localField_valid(): boolean;\n condition(): DDL2.IMappingConditionType;\n condition(_: DDL2.IMappingConditionType): this;\n value(): string | number | boolean;\n value(_: string | number | boolean): this;\n value_exists(): boolean;\n value_valid(): boolean;\n valueType(): \"number\" | \"string\";\n valueType(_: \"number\" | \"string\"): this;\n}\n\ntype FilterT = RemoteFilter | StaticFilter;\n\nexport class Filters extends Activity {\n static Filter = RemoteFilter;\n static Mapping = ColumnMapping;\n\n validate(): IActivityError[] {\n let retVal: IActivityError[] = [];\n for (const filter of this.validFilters()) {\n retVal = retVal.concat(filter.validate(\"filter\"));\n }\n return retVal;\n }\n\n constructor(private _ec: ElementContainer) {\n super();\n }\n\n toDDL(): DDL2.IFilter {\n return {\n type: \"filter\",\n conditions: this.conditions()\n };\n }\n\n fromDDL(ddl: DDL2.IFilter): this {\n return this\n .conditions(ddl.conditions)\n ;\n }\n\n static fromDDL(ec: ElementContainer, ddl: DDL2.IFilter): Filters {\n return new Filters(ec).fromDDL(ddl);\n }\n\n conditions(): DDL2.FilterCondition[];\n conditions(_: DDL2.FilterCondition[]): this;\n conditions(_?: DDL2.FilterCondition[]): DDL2.FilterCondition[] | this {\n if (!arguments.length) return this.validFilters().map(filter => filter.toDDL());\n const remoteFilters: RemoteFilter[] = [];\n const staticFilters: StaticFilter[] = [];\n _.forEach(fc => {\n if (DDL2.isIFilterCondition(fc)) {\n remoteFilters.push(RemoteFilter.fromDDL(fc));\n } else {\n staticFilters.push(StaticFilter.fromDDL(fc));\n }\n });\n this.remoteFilter(remoteFilters);\n this.staticFilter(staticFilters);\n return this;\n }\n\n visualizationIDs(): string[] {\n return this._ec.elementIDs();\n }\n\n visualization(sourceID: string | PropertyExt): Element {\n return this._ec.element(sourceID);\n }\n\n // Activity overrides ---\n hash(): string {\n return hashSum(this.validFilters().map(f => {\n return {\n filter: f.hash()\n };\n }));\n }\n\n exists(): boolean {\n return this.validFilters().length > 0;\n }\n\n updatedBy(): string[] {\n return this.validRemoteFilters().map(filter => filter.source());\n }\n\n referencedFields(refs: ReferencedFields): void {\n super.referencedFields(refs);\n const localFieldIDs: string[] = [];\n for (const filter of this.validRemoteFilters()) {\n const filterSource = filter.sourceViz().hipiePipeline();\n const remoteFieldIDs: string[] = [];\n for (const mapping of filter.validMappings()) {\n localFieldIDs.push(mapping.localField());\n remoteFieldIDs.push(mapping.remoteField());\n }\n filterSource.resolveFields(refs, remoteFieldIDs);\n }\n super.resolveInFields(refs, localFieldIDs);\n }\n\n exec(): Promise<void> {\n return super.exec();\n }\n\n computeData(): ReadonlyArray<object> {\n const data = super.computeData();\n if (data.length === 0 || !this.exists()) return data;\n const filters = this.validFilters().map(filter => filter.createFilter());\n return data.filter(row => {\n return filters.every(filter => filter(row));\n });\n }\n\n // --- --- ---\n validRemoteFilters(): RemoteFilter[] {\n return this.remoteFilter().filter(filter => filter.valid());\n }\n\n validStaticFilters(): StaticFilter[] {\n return this.staticFilter().filter(filter => filter.valid());\n }\n\n validFilters(): FilterT[] {\n return [...this.validRemoteFilters(), ...this.validStaticFilters()];\n }\n}\nFilters.prototype._class += \" Filters\";\n\nexport interface Filters {\n remoteFilter(): RemoteFilter[];\n remoteFilter(_: RemoteFilter[]): this;\n staticFilter(): StaticFilter[];\n staticFilter(_: StaticFilter[]): this;\n}\n\nColumnMapping.prototype.publish(\"remoteField\", null, \"set\", \"Filter Fields\", function (this: ColumnMapping) { return this.sourceOutFields(); }, {\n optional: true,\n disable: (w: ColumnMapping): boolean => !w[\"_owner\"].source(),\n validate: (w: ColumnMapping): boolean => w.sourceOutFields().indexOf(w.remoteField()) >= 0\n});\nColumnMapping.prototype.publish(\"localField\", null, \"set\", \"Local Fields\", function (this: ColumnMapping) { return this.localFields(); }, {\n optional: true,\n disable: (w: ColumnMapping): boolean => !w[\"_owner\"].source(),\n validate: (w: ColumnMapping): boolean => w.localFields().indexOf(w.localField()) >= 0\n});\nColumnMapping.prototype.publish(\"condition\", \"==\", \"set\", \"Filter Fields\", [\"==\", \"!=\", \">\", \">=\", \"<\", \"<=\", \"range\", \"in\"]);\nColumnMapping.prototype.publish(\"nullable\", false, \"boolean\", \"Ignore null filters\");\n\nRemoteFilter.prototype.publish(\"source\", null, \"set\", \"Activity\", function (this: RemoteFilter) { return this.visualizationIDs(); }, {\n optional: true,\n validate: (w: RemoteFilter): boolean => w.visualizationIDs().indexOf(w.source()) >= 0\n});\nRemoteFilter.prototype.publish(\"mappings\", [], \"propertyArray\", \"Mappings\", null, { autoExpand: ColumnMapping });\n\nStaticFilter.prototype.publish(\"localField\", null, \"set\", \"Local Fields\", function (this: ColumnMapping) { return this.localFields(); }, {\n optional: true,\n validate: (w: StaticFilter): boolean => w.localFields().indexOf(w.localField()) >= 0\n});\nStaticFilter.prototype.publish(\"condition\", \"==\", \"set\", \"Filter Fields\", [\"==\", \"!=\", \">\", \">=\", \"<\", \"<=\"]);\nStaticFilter.prototype.publish(\"value\", \"\", \"any\", \"Static Value\");\nStaticFilter.prototype.publish(\"valueType\", \"number\", \"set\", \"Static Value Type\", [\"number\", \"string\"]);\n\nFilters.prototype.publish(\"remoteFilter\", [], \"propertyArray\", \"Remote Filter\", null, { autoExpand: RemoteFilter });\nFilters.prototype.publish(\"staticFilter\", [], \"propertyArray\", \"Static Filter\", null, { autoExpand: StaticFilter });","import { PropertyExt } from \"@hpcc-js/common\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { deviation as d3Deviation, max as d3Max, mean as d3Mean, median as d3Median, min as d3Min, sum as d3Sum, variance as d3Variance } from \"d3-array\";\nimport { nest as d3Nest } from \"d3-collection\";\nimport { Activity, IActivityError, ReferencedFields } from \"./activity.ts\";\n\nexport class GroupByColumn extends PropertyExt {\n private _owner: GroupBy;\n\n validate(prefix: string): IActivityError[] {\n const retVal: IActivityError[] = [];\n if (!this.label_valid()) {\n retVal.push({\n source: `${prefix}.label`,\n msg: `Invalid label: \"${this.label()}\"`,\n hint: `expected ${JSON.stringify(this.columns())}`\n });\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n owner(): GroupBy;\n owner(_: GroupBy): this;\n owner(_?: GroupBy): GroupBy | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.label();\n }\n\n toDDL(): string {\n return this.label();\n }\n\n fromDDL(label: string): this {\n return this\n .label(label)\n ;\n }\n\n static fromDDL(label: string): GroupByColumn {\n return new GroupByColumn().fromDDL(label);\n }\n\n hash(): string {\n return hashSum(this.label());\n }\n\n columns() {\n return this._owner.inFieldIDs();\n }\n}\nGroupByColumn.prototype._class += \" GroupByColumn\";\n\nexport interface GroupByColumn {\n label(): string;\n label(_: string): this;\n label_valid(): boolean;\n}\n\n// ===========================================================================\nexport type AggrFuncCallback = (item: any) => number;\nexport type AggrFunc = (leaves: any[], callback: AggrFuncCallback) => number;\nfunction localCount(leaves: any[], callback: AggrFuncCallback): number {\n return leaves.length;\n}\n\nconst d3Aggr: { [key: string]: AggrFunc } = {\n count: localCount,\n min: d3Min,\n max: d3Max,\n mean: d3Mean,\n median: d3Median,\n variance: d3Variance,\n deviation: d3Deviation,\n sum: d3Sum\n};\n\nexport type AggregateType = \"count\" | \"min\" | \"max\" | \"sum\" | \"mean\" | \"median\" | \"variance\" | \"deviation\";\nexport class AggregateField extends PropertyExt {\n private _owner: GroupBy;\n\n disableAggrColumn(): boolean {\n return !this.fieldID() || !this.aggrType() || this.aggrType() === \"count\";\n }\n\n disableBaseCountColumn(): boolean {\n return !this.fieldID() || !this.aggrType() || this.aggrType() !== \"mean\";\n }\n\n validate(prefix: string): IActivityError[] {\n const retVal: IActivityError[] = [];\n if (!this.aggrColumn_valid()) {\n retVal.push({\n source: `${prefix}.${this.fieldID()}.aggrColumn`,\n msg: `Invalid aggrColumn: \"${this.aggrColumn()}\"`,\n hint: `expected ${JSON.stringify(this.columns())}`\n });\n }\n if (!this.baseCountColumn_valid()) {\n retVal.push({\n source: `${prefix}.${this.fieldID()}.aggrColumn`,\n msg: `Invalid baseCountColumn: \"${this.baseCountColumn()}\"`,\n hint: `expected ${JSON.stringify(this.columns())}`\n });\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n owner(): GroupBy;\n owner(_: GroupBy): this;\n owner(_?: GroupBy): GroupBy | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.fieldID();\n }\n\n toDDL(): DDL2.IAggregate | DDL2.ICount {\n if (this.aggrType() === \"count\") {\n return {\n fieldID: this.fieldID(),\n type: \"count\"\n };\n }\n return {\n fieldID: this.fieldID(),\n type: this.aggrType() as DDL2.IAggregateType,\n inFieldID: this.aggrColumn(),\n baseCountFieldID: this.baseCountColumn()\n };\n }\n\n fromDDL(ddl: DDL2.IAggregate | DDL2.ICount): this {\n const retVal = this\n .fieldID(ddl.fieldID)\n .aggrType(ddl.type)\n ;\n if (ddl.type !== \"count\") {\n retVal.aggrColumn(ddl.inFieldID);\n retVal.baseCountColumn(ddl.baseCountFieldID);\n }\n return retVal;\n }\n\n static fromDDL(ddl: DDL2.IAggregate | DDL2.ICount): AggregateField {\n return new AggregateField().fromDDL(ddl);\n }\n\n hash(): string {\n return hashSum({\n label: this.fieldID(),\n aggrType: this.aggrType(),\n aggrColumn: this.aggrColumn()\n });\n }\n\n columns() {\n return this._owner.inFieldIDs();\n }\n\n hasColumn() {\n return this.columns().length;\n }\n\n aggregate(values: Array<{ [key: string]: any }>) {\n return d3Aggr[this.aggrType() as string](values, leaf => +leaf[this.aggrColumn()]);\n }\n\n aggrFunc(): (leaves: any[]) => number {\n const aggrFunc = d3Aggr[this.aggrType() as string];\n const aggrColumn = this.aggrColumn();\n const baseCountColumn = this.baseCountColumn();\n if (baseCountColumn) {\n return (values: any[]) => {\n return aggrFunc(values, leaf => +leaf[aggrColumn] / +leaf[baseCountColumn]);\n };\n } else {\n return (values: any[]) => {\n return aggrFunc(values, leaf => +leaf[aggrColumn]);\n };\n }\n }\n}\nAggregateField.prototype._class += \" AggregateField\";\n\nexport interface AggregateField {\n fieldID(): string;\n fieldID(_: string): this;\n aggrType(): AggregateType;\n aggrType(_: AggregateType): this;\n aggrColumn(): string;\n aggrColumn(_: string): this;\n aggrColumn_valid(): boolean;\n baseCountColumn(): string;\n baseCountColumn(_: string): this;\n baseCountColumn_valid(): boolean;\n}\n\n// ===========================================================================\nexport class GroupBy extends Activity {\n\n validate(): IActivityError[] {\n let retVal: IActivityError[] = [];\n for (const gbColumn of this.validGroupBy()) {\n retVal = retVal.concat(gbColumn.validate(\"GroupBy.column\"));\n }\n for (const cfs of this.validComputedFields()) {\n retVal = retVal.concat(cfs.validate(\"GroupBy.computedFields\"));\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n toDDL(): DDL2.IGroupBy {\n return {\n type: \"groupby\",\n groupByIDs: this.fieldIDs(),\n aggregates: this.aggregates()\n };\n }\n\n fromDDL(ddl: DDL2.IGroupBy): this {\n return this\n .fieldIDs(ddl.groupByIDs)\n .aggregates(ddl.aggregates)\n ;\n }\n\n static fromDDL(ddl: DDL2.IGroupBy): GroupBy {\n return new GroupBy().fromDDL(ddl);\n }\n\n fieldIDs(): string[];\n fieldIDs(_: string[]): this;\n fieldIDs(_?: string[]): string[] | this {\n if (!arguments.length) return this.validGroupBy().map(gb => gb.toDDL());\n this.column(_.map(fieldID => GroupByColumn.fromDDL(fieldID)));\n return this;\n }\n\n aggregates(): DDL2.AggregateType[];\n aggregates(_: DDL2.AggregateType[]): this;\n aggregates(_?: DDL2.AggregateType[]): DDL2.AggregateType[] | this {\n if (!arguments.length) return this.validComputedFields().map(cf => cf.toDDL());\n this.computedFields(_.map(aggrType => AggregateField.fromDDL(aggrType)));\n return this;\n }\n\n // Activity\n hash(): string {\n return hashSum({\n groupBy: this.column().map(gb => gb.hash()),\n computedFields: this.computedFields().map(cf => cf.hash())\n });\n }\n\n appendGroupBys(columns: [{ field: string }]): this {\n for (const column of columns) {\n this.column().push(new GroupByColumn()\n .owner(this)\n .label(column.field)\n );\n }\n return this;\n }\n\n validGroupBy(): GroupByColumn[] {\n return this.column().filter(groupBy => groupBy.valid());\n }\n\n exists(): boolean {\n return this.validGroupBy().length > 0;\n }\n\n inFieldIDs(): string[] {\n return this.inFields().map(field => field.id);\n }\n\n field(fieldID: string): DDL2.IField | null {\n for (const field of this.inFields()) {\n if (field.id === fieldID) {\n return field;\n }\n }\n return null;\n }\n\n appendComputedFields(aggregateFields: [{ label: string, type: AggregateType, column?: string }]): this {\n for (const aggregateField of aggregateFields) {\n const aggrField = new AggregateField()\n .owner(this)\n .fieldID(aggregateField.label)\n .aggrType(aggregateField.type)\n ;\n if (aggregateField.column !== void 0) {\n aggrField.aggrColumn(aggregateField.column);\n }\n this.computedFields().push(aggrField);\n }\n return this;\n }\n\n validComputedFields() {\n return this.computedFields().filter(computedField => computedField.valid());\n }\n\n hasComputedFields(): boolean {\n return this.validComputedFields().length > 0;\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n if (!this.exists()) return super.computeFields(inFields);\n const retVal: DDL2.IField[] = [];\n const groups: GroupByColumn[] = this.validGroupBy();\n for (const groupBy of groups) {\n const groupByField = this.field(groupBy.label());\n const field = {\n type: groupByField ? groupByField.type : \"string\",\n id: groupBy.label()\n } as DDL2.IField;\n retVal.push(field);\n }\n for (const cf of this.computedFields()) {\n if (cf.fieldID()) {\n const computedField: DDL2.IField = {\n id: cf.fieldID(),\n type: \"number\"\n };\n retVal.push(computedField);\n }\n }\n if (this.details()) {\n let detailsTarget: DDL2.IField[] = retVal;\n if (this.exists()) {\n const rows: DDL2.IField = {\n id: \"values\",\n type: \"dataset\",\n children: []\n };\n retVal.push(rows);\n detailsTarget = rows.children;\n }\n const columns = groups.map(groupBy => groupBy.label());\n detailsTarget.push(...this.inFields().filter(field => {\n return this.fullDetails() || columns.indexOf(field.id) < 0;\n }));\n }\n return () => retVal;\n }\n\n referencedFields(refs: ReferencedFields): void {\n super.referencedFields(refs);\n const fieldIDs: string[] = [];\n for (const gb of this.validGroupBy()) {\n fieldIDs.push(gb.label());\n }\n for (const cf of this.validComputedFields()) {\n if (cf.aggrColumn()) {\n fieldIDs.push(cf.aggrColumn());\n }\n }\n super.resolveInFields(refs, fieldIDs);\n }\n\n computeData(): ReadonlyArray<object> {\n const data = super.computeData();\n if (data.length === 0 || !this.exists()) return data;\n const columnLabels: string[] = this.validGroupBy().map(gb => gb.label());\n const computedFields = this.validComputedFields().map(cf => {\n return { label: cf.fieldID(), aggrFunc: cf.aggrFunc() };\n });\n const retVal = d3Nest()\n .key((row: { [key: string]: any }) => {\n let key = \"\";\n for (const groupByLabel of columnLabels) {\n key += \":\" + row[groupByLabel];\n }\n return key;\n })\n .entries(data as object[]).map(_row => {\n const row: {\n [key: string]: any\n } = _row;\n delete row.key;\n for (const groupByLabel of columnLabels) {\n row[groupByLabel] = row.values[0][groupByLabel];\n }\n for (const cf of computedFields) {\n row[cf.label] = cf.aggrFunc(row.values);\n }\n return row;\n })\n ;\n const outFields = this.outFields();\n return retVal.map(row => {\n const retVal = {};\n for (const field of outFields) {\n retVal[field.id] = row[field.id];\n }\n return retVal;\n });\n }\n}\nGroupBy.prototype._class += \" GroupBy\";\n\nexport interface GroupBy {\n column(): GroupByColumn[];\n column(_: GroupByColumn[]): this;\n computedFields(): AggregateField[];\n computedFields(_: AggregateField[]): this;\n details(): boolean;\n details(_: boolean): this;\n fullDetails(): boolean;\n fullDetails(_: boolean): this;\n}\n\nGroupByColumn.prototype.publish(\"label\", undefined, \"set\", \"Field\", function (this: GroupByColumn) { return this.columns(); }, {\n optional: true,\n validate: (w: GroupByColumn): boolean => w.columns().indexOf(w.label()) >= 0\n });\n\nAggregateField.prototype.publish(\"fieldID\", null, \"string\", \"new Field ID\", null, { optional: true, disable: (w: AggregateField) => !w.hasColumn() });\nAggregateField.prototype.publish(\"aggrType\", \"count\", \"set\", \"Aggregation Type\", [\"count\", \"min\", \"max\", \"sum\", \"mean\", \"median\", \"variance\", \"deviation\"], { optional: true, disable: (w: AggregateField) => !w.fieldID() });\nAggregateField.prototype.publish(\"aggrColumn\", null, \"set\", \"Aggregation Field\", function (this: AggregateField) { return this.columns(); }, {\n optional: true,\n disable: (w: AggregateField) => w.disableAggrColumn(),\n validate: (w: AggregateField): boolean => w.columns().indexOf(w.aggrColumn()) >= 0\n });\nAggregateField.prototype.publish(\"baseCountColumn\", null, \"set\", \"Base Count Field\", function (this: AggregateField) { return this.columns(); }, {\n optional: true,\n disable: (w: AggregateField) => w.disableBaseCountColumn(),\n validate: (w: AggregateField): boolean => w.columns().indexOf(w.baseCountColumn()) >= 0\n });\n\nGroupBy.prototype.publish(\"column\", [], \"propertyArray\", \"Source Columns\", null, { autoExpand: GroupByColumn });\nGroupBy.prototype.publish(\"computedFields\", [], \"propertyArray\", \"Computed Fields\", null, { autoExpand: AggregateField });\nGroupBy.prototype.publish(\"details\", false, \"boolean\", \"Show details\");\nGroupBy.prototype.publish(\"fullDetails\", false, \"boolean\", \"Show groupBy fileds in details\");","import { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { Activity } from \"./activity.ts\";\n\nexport class Limit extends Activity {\n\n constructor() {\n super();\n }\n\n toDDL(): DDL2.ILimit {\n return {\n type: \"limit\",\n limit: this.rows()\n };\n }\n\n fromDDL(ddl: DDL2.ILimit): this {\n return this\n .rows(ddl.limit)\n ;\n }\n\n static fromDDL(ddl: DDL2.ILimit): Limit {\n return new Limit().fromDDL(ddl);\n }\n\n hash(): string {\n return hashSum({\n limit: this.rows()\n });\n }\n\n exists(): boolean {\n return this.rows_exists() && this.rows() > 0;\n }\n\n computeData(): ReadonlyArray<object> {\n const data = super.computeData();\n if (data.length === 0 || !this.exists()) return data;\n return data.slice(0, Math.min(this.rows(), data.length));\n }\n}\nLimit.prototype._class += \" Limit\";\n\nexport interface Limit {\n rows(): number | undefined;\n rows(_: number | undefined): this;\n rows_exists(): boolean;\n}\nLimit.prototype.publish(\"rows\", undefined, \"number\", \"Limit output\");","import { PropertyExt, Utility } from \"@hpcc-js/common\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { hashSum, isArray } from \"@hpcc-js/util\";\nimport { Activity, IActivityError, ReferencedFields } from \"./activity.ts\";\n\nexport class ComputedMapping extends PropertyExt {\n protected _owner: ComputedField;\n\n validate(prefix: string): IActivityError[] {\n const retVal: IActivityError[] = [];\n if (!this.value_valid()) {\n retVal.push({\n source: `${prefix}.value`,\n msg: `Invalid value: \"${this.value()}\"`,\n hint: 'expected: \"any\"'\n });\n }\n if (!this.newValue_valid()) {\n retVal.push({\n source: `${prefix}.newValue`,\n msg: `Invalid value: \"${this.newValue()}\"`,\n hint: 'expected: \"any\"'\n });\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n owner(): ComputedField;\n owner(_: ComputedField): this;\n owner(_?: ComputedField): ComputedField | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.value() && !!this.newValue();\n }\n\n toDDL(): DDL2.IMapMapping {\n return {\n value: this.value(),\n newValue: this.newValue()\n };\n }\n\n fromDDL(ddl: DDL2.IMapMapping): this {\n return this\n .value(ddl.value)\n .newValue(ddl.newValue)\n ;\n }\n\n static fromDDL(ddl: DDL2.IMapMapping): ComputedMapping {\n return new ComputedMapping().fromDDL(ddl);\n }\n}\nComputedMapping.prototype._class += \" ComputedMapping\";\n\nexport interface ComputedMapping {\n value(): any;\n value(_: any): this;\n value_valid(): boolean;\n newValue(): any;\n newValue(_: any): this;\n newValue_valid(): boolean;\n}\n\nexport type ComputedType = \"=\" | \"*\" | \"/\" | \"+\" | \"-\" | \"scale\" | \"template\" | \"map\";\n\nexport interface IComputedFieldOwner extends PropertyExt {\n fieldIDs(): string[];\n field(fieldID: string): DDL2.IField | null;\n}\n\nexport class ComputedField extends PropertyExt {\n private _owner: IComputedFieldOwner;\n\n disableColumn1(): boolean {\n return !this.label() || [\"=\", \"*\", \"/\", \"+\", \"-\", \"scale\", \"map\"].indexOf(this.type()) < 0;\n }\n\n disableColumn2(): boolean {\n return !this.label() || [\"*\", \"/\", \"+\", \"-\"].indexOf(this.type()) < 0;\n }\n\n disableMapping(): boolean {\n return !this.label() || [\"map\"].indexOf(this.type()) < 0;\n }\n\n disableChildField(): boolean {\n return !this.hasChildren();\n }\n\n validate(prefix: string): IActivityError[] {\n const retVal: IActivityError[] = [];\n if (!this.column1_valid()) {\n retVal.push({\n source: `${prefix}.${this.label()}`,\n msg: `Invalid column1: \"${this.column1()}\"`,\n hint: `expected: ${JSON.stringify(this.columns())}`\n });\n }\n if (!this.column2_valid()) {\n retVal.push({\n source: `${prefix}.${this.label()}`,\n msg: `Invalid column2: \"${this.column2()}\"`,\n hint: `expected: ${JSON.stringify(this.columns())}`\n });\n }\n if (!this.disableMapping()) {\n this.validComputedMappings().forEach(cm => cm.validate(`${prefix}.mapping`));\n }\n if (!this.disableChildField()) {\n this.validChildFields().forEach(cf => cf.validate(`${prefix}.childField`));\n }\n return retVal;\n }\n\n hasChildren() {\n if (!this.label()) return false;\n if (this.type() !== \"=\") return false;\n if (!this.column1()) return false;\n const field = (this._owner as ProjectBase).field(this.column1());\n if (field && field.type === \"dataset\" && field.children) {\n return true;\n }\n return false;\n }\n\n children(): DDL2.IField[] {\n const field = (this._owner as ProjectBase).field(this.column1());\n if (field && field.type === \"dataset\") {\n return field.children;\n }\n return [];\n }\n\n constructor() {\n super();\n }\n\n owner(): IComputedFieldOwner;\n owner(_: IComputedFieldOwner): this;\n owner(_?: IComputedFieldOwner): IComputedFieldOwner | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.label();\n }\n\n validComputedMappings(): ComputedMapping[] {\n return this.mapping().filter(cf => cf.valid());\n }\n\n validChildFields() {\n return this.childField().filter(cf => cf.valid());\n }\n\n hasChildFields() {\n return this.validChildFields().length;\n }\n\n toDDL(): DDL2.MultiTransformationType {\n switch (this.type()) {\n case \"scale\":\n return {\n fieldID: this.label(),\n type: \"scale\",\n sourceFieldID: this.column1(),\n factor: this.constValue()\n };\n case \"template\":\n return {\n fieldID: this.label(),\n type: \"template\",\n template: this.template()\n };\n case \"=\":\n const transformations = this.validChildFields().map(cf => cf.toDDL());\n return {\n fieldID: this.label(),\n type: \"=\",\n sourceFieldID: this.column1(),\n transformations: transformations.length ? transformations : undefined\n };\n case \"map\":\n return {\n fieldID: this.label(),\n type: \"map\",\n sourceFieldID: this.column1(),\n default: this.default(),\n mappings: this.validComputedMappings().map(cm => cm.toDDL())\n };\n default:\n return {\n fieldID: this.label(),\n type: this.type() as DDL2.ICalculatedType,\n sourceFieldID1: this.column1(),\n sourceFieldID2: this.column2()\n };\n }\n }\n\n fromDDL(ddl: DDL2.MultiTransformationType): this {\n const retVal = this\n .label(ddl.fieldID)\n .type(ddl.type)\n ;\n switch (ddl.type) {\n case \"scale\":\n retVal\n .column1(ddl.sourceFieldID)\n .constValue(ddl.factor)\n ;\n break;\n case \"template\":\n retVal\n .template(ddl.template)\n ;\n break;\n case \"=\":\n retVal\n .column1(ddl.sourceFieldID)\n .childField(ddl.transformations ? ddl.transformations.map(transformation => ComputedField.fromDDL(transformation)) : [])\n ;\n break;\n case \"map\":\n retVal\n .column1(ddl.sourceFieldID)\n .default(ddl.default)\n .mapping(ddl.mappings ? ddl.mappings.map(mapping => ComputedMapping.fromDDL(mapping)) : [])\n ;\n break;\n default:\n retVal\n .column1(ddl.sourceFieldID1)\n .column2(ddl.sourceFieldID2)\n ;\n }\n return retVal;\n }\n\n static fromDDL(ddl: DDL2.MultiTransformationType): ComputedField {\n return new ComputedField().fromDDL(ddl);\n }\n\n hash(): string {\n return hashSum(this.toDDL());\n }\n\n columns(): string[] {\n return this._owner.fieldIDs();\n }\n\n computedField(): DDL2.IField {\n switch (this.type()) {\n case \"=\":\n let validChildFields = this.validChildFields();\n if (validChildFields.length === 0 && this.hasChildren()) {\n // Has children but no mappings - include all children by default...\n validChildFields = this.children().map((child: DDL2.IField) => {\n return new ComputedField()\n .owner(this)\n .label(child.id)\n .type(\"=\")\n .column1(child.id)\n ;\n });\n }\n return {\n ...this._owner.field(this.column1()),\n id: this.label(),\n children: validChildFields.length ? validChildFields.map(cf => cf.computedField()) : undefined\n } as DDL2.IField;\n case \"*\":\n case \"/\":\n case \"+\":\n case \"-\":\n case \"scale\":\n return { id: this.label(), type: \"number\" };\n case \"template\":\n return { id: this.label(), type: \"string\" };\n case \"map\":\n return { id: this.label(), type: \"object\" } as DDL2.IFieldObject;\n }\n return { id: this.label(), type: \"string\" };\n }\n\n projection(trim: boolean): (row: object) => object {\n const hasComputedFields = this.hasChildFields();\n const computedFields = this.validChildFields().map(cf => {\n return {\n label: cf.label(),\n func: cf.computeFunc(trim)\n };\n });\n return (row: object) => {\n const retVal = trim && hasComputedFields ? {} : { ...row };\n for (const cf of computedFields) {\n retVal[cf.label] = cf.func(row);\n }\n if (trim && hasComputedFields) {\n retVal[\"__lparam\"] = row;\n }\n return retVal;\n };\n }\n\n computeFunc(trim: boolean): (row: any) => any {\n const column1 = this.column1();\n const column2 = this.column2();\n switch (this.type()) {\n case \"=\":\n if (this.hasChildFields()) {\n return (row: object) => {\n // TODO Move to function factory ---\n const r = row[column1].Row && isArray(row[column1].Row) ? row[column1].Row : row[column1];\n return r.map(this.projection(trim));\n };\n }\n return (row: object) => {\n return row[column1];\n };\n case \"*\":\n return (row: any) => {\n return +row[column1] * +row[column2];\n };\n case \"/\":\n return (row: any) => {\n return +row[column1] / +row[column2];\n };\n case \"+\":\n return (row: any) => {\n return +row[column1] + +row[column2];\n };\n case \"-\":\n return (row: any) => {\n return +row[column1] - +row[column2];\n };\n case \"scale\":\n const constValue = this.constValue();\n return (row: any) => {\n return +row[column1] * constValue;\n };\n case \"template\":\n const template = this.template();\n return (row: any) => {\n return Utility.template(template, row);\n };\n case \"map\":\n const defValue = this.default();\n const mappings = {};\n for (const mapping of this.mapping()) {\n mappings[mapping.value()] = mapping.newValue();\n }\n return (row: any) => {\n return mappings[row[column1]] || defValue;\n };\n default:\n return (row: any) => {\n return row[column1];\n };\n }\n }\n\n // IComputedFieldOwner ---\n fieldIDs(): string[] {\n const field = (this._owner as ProjectBase).field(this.column1());\n if (field) {\n switch (field.type) {\n case \"dataset\":\n return field.children.map(field => field.id);\n case \"object\":\n return Object.keys(field.fields);\n }\n }\n return [];\n }\n\n field(fieldID: string): DDL2.IField | undefined {\n const field = (this._owner as ProjectBase).field(this.column1());\n if (field) {\n switch (field.type) {\n case \"dataset\":\n for (const f of field.children) {\n if (f.id === fieldID) {\n return f;\n }\n }\n break;\n case \"object\":\n return field.fields[fieldID];\n }\n }\n return undefined;\n }\n}\nComputedField.prototype._class += \" ComputedField\";\n\nexport interface ComputedField {\n label(): string;\n label(_: string): this;\n type(): ComputedType;\n type(_: ComputedType): this;\n column1(): string;\n column1(_: string): this;\n column1_valid(): boolean;\n column2(): string;\n column2(_: string): this;\n column2_valid(): boolean;\n constValue(): number;\n constValue(_: number): this;\n template(): string;\n template(_: string): this;\n default(): any;\n default(_: any): this;\n mapping(): ComputedMapping[];\n mapping(_: ComputedMapping[]): this;\n childField(): ComputedField[];\n childField(_: ComputedField[]): this;\n}\n\n// ===========================================================================\nexport class MultiField extends PropertyExt implements IComputedFieldOwner {\n private _owner: IComputedFieldOwner;\n\n constructor() {\n super();\n }\n\n hash() {\n return hashSum(this.toDDL());\n }\n\n owner(): IComputedFieldOwner;\n owner(_: IComputedFieldOwner): this;\n owner(_?: IComputedFieldOwner): IComputedFieldOwner | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.label() && this.validMultiFields().length > 0;\n }\n\n validate(prefix: string): IActivityError[] {\n let retVal: IActivityError[] = [];\n for (const cf of this.validMultiFields()) {\n retVal = retVal.concat(cf.validate(`${prefix}.computedFields`));\n }\n return retVal;\n }\n\n toDDL(): DDL2.IMulti {\n return {\n fieldID: this.label(),\n type: \"multi\",\n transformations: this.transformations()\n };\n }\n\n fromDDL(ddl: DDL2.IMulti): this {\n return this\n .label(ddl.fieldID)\n .transformations(ddl.transformations)\n ;\n }\n\n static fromDDL(ddl: DDL2.IMulti): MultiField {\n return new MultiField().fromDDL(ddl);\n }\n\n validMultiFields(): ComputedField[] {\n return this.multiFields().filter(computedField => computedField.valid());\n }\n\n transformations(): DDL2.MultiTransformationType[];\n transformations(_: DDL2.MultiTransformationType[]): this;\n transformations(_?: DDL2.MultiTransformationType[]): DDL2.MultiTransformationType[] | this {\n if (!arguments.length) return this.validMultiFields().map(cf => cf.toDDL());\n this.multiFields(_.map(transformation => ComputedField.fromDDL(transformation)));\n return this;\n }\n\n // IComputedFieldOwner ---\n fieldIDs(): string[] {\n return this._owner.fieldIDs();\n }\n\n field(fieldID: string): DDL2.IField | null {\n return this._owner.field(fieldID);\n }\n}\nMultiField.prototype._class += \" MultiField\";\n\nexport interface MultiField {\n label(): string;\n label(_: string): this;\n multiFields(): ComputedField[];\n multiFields(_: ComputedField[]): this;\n}\n\n// ===========================================================================\nexport class ProjectBase extends Activity {\n static ComputedField = ComputedField;\n\n _includeLParam = false;\n _trim = false;\n\n validate(): IActivityError[] {\n let retVal: IActivityError[] = [];\n for (const cf of this.validComputedFields()) {\n retVal = retVal.concat(cf.validate(`${this.classID()}.computedFields`));\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n transformations(): DDL2.ProjectTransformationType[];\n transformations(_: DDL2.ProjectTransformationType[]): this;\n transformations(_?: DDL2.ProjectTransformationType[]): DDL2.ProjectTransformationType[] | this {\n if (!arguments.length) return this.validComputedFields().map(cf => cf.toDDL());\n this.computedFields(_.map(transformation => {\n switch (transformation.type) {\n case \"multi\":\n return MultiField.fromDDL(transformation);\n default:\n return ComputedField.fromDDL(transformation);\n }\n }));\n return this;\n }\n\n exists(): boolean {\n return this.validComputedFields().length > 0;\n }\n\n // IComputedFieldOwner ---\n fieldIDs(): string[] {\n return this.inFields().map(field => field.id);\n }\n\n field(fieldID: string): DDL2.IField | null {\n for (const field of this.inFields()) {\n if (field.id === fieldID) {\n return field;\n }\n }\n return null;\n }\n // ---\n\n clearComputedFields() {\n this.computedFields([]);\n }\n\n appendComputedFields(computedFields: [{ label: string, type: ComputedType, column?: string }]): this {\n for (const aggregateField of computedFields) {\n const aggrField = new ComputedField()\n .owner(this)\n .label(aggregateField.label)\n .type(aggregateField.type)\n ;\n if (aggregateField.column !== void 0) {\n aggrField.column1(aggregateField.column);\n }\n this.computedFields().push(aggrField);\n }\n return this;\n }\n\n validComputedFields() {\n return this.computedFields().filter(computedField => computedField.valid());\n }\n\n hasComputedFields() {\n return this.validComputedFields().length;\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n if (!this.exists()) return super.computeFields(inFields);\n let retVal: DDL2.IField[] = [];\n const retValMap: { [key: string]: boolean } = {};\n for (const cf of this.validComputedFields()) {\n if (cf instanceof MultiField) {\n for (const cf2 of cf.validMultiFields()) {\n const computedField = cf2.computedField();\n retVal.push(computedField);\n retValMap[computedField.id] = true;\n }\n } else {\n const computedField = cf.computedField();\n retVal.push(computedField);\n retValMap[computedField.id] = true;\n }\n }\n if (this._trim && this.hasComputedFields()) {\n if (this._includeLParam) {\n const computedField = {\n id: \"__lparam\",\n type: \"object\"\n } as DDL2.IField;\n retVal.push(computedField);\n retValMap[computedField.id] = true;\n }\n } else {\n retVal = retVal.concat(inFields.filter(field => !retValMap[field.id]));\n }\n return () => retVal;\n }\n\n referencedFields(refs: ReferencedFields): void {\n super.referencedFields(refs);\n const fieldIDs: string[] = [];\n for (const cf of this.validComputedFields()) {\n if (cf instanceof MultiField) {\n for (const cf2 of cf.validMultiFields()) {\n fieldIDs.push(cf2.column1());\n if (cf2.column2()) {\n fieldIDs.push(cf2.column2());\n }\n }\n } else {\n if (cf.type() === \"template\") {\n for (const fieldID of Utility.templateFields(cf.template())) {\n fieldIDs.push(fieldID);\n }\n } else {\n fieldIDs.push(cf.column1());\n if (cf.column2()) {\n fieldIDs.push(cf.column2());\n }\n }\n }\n }\n super.resolveInFields(refs, fieldIDs);\n }\n\n projection(): (row: object) => object {\n const trim = this._trim;\n const hasComputedFields = this.hasComputedFields();\n const computedFields = [];\n for (const cf of this.validComputedFields()) {\n if (cf instanceof MultiField) {\n for (const cf2 of cf.validMultiFields()) {\n computedFields.push({\n label: cf2.label(),\n func: cf2.computeFunc(trim)\n });\n }\n } else {\n computedFields.push({\n label: cf.label(),\n func: cf.computeFunc(trim)\n });\n }\n }\n return (row: object) => {\n const retVal = trim && hasComputedFields ? {} : { ...row };\n for (const cf of computedFields) {\n retVal[cf.label] = cf.func(row);\n }\n if (trim && hasComputedFields) {\n if (this._includeLParam) {\n retVal[\"__lparam\"] = row;\n }\n }\n return retVal;\n };\n }\n\n computeData(): ReadonlyArray<object> {\n const data = super.computeData();\n if (data.length === 0 || !this.exists()) return data;\n return data.map(this.projection());\n }\n}\n\nexport class Project extends ProjectBase {\n\n toDDL(): DDL2.IProject {\n return {\n type: \"project\",\n transformations: this.transformations()\n };\n }\n\n fromDDL(ddl: DDL2.IProject): this {\n return this.transformations(ddl.transformations);\n }\n\n static fromDDL(ddl: DDL2.IProject): Project {\n return new Project().fromDDL(ddl);\n }\n\n hash(more: object = {}): string {\n return super.hash({\n ddl: this.toDDL(),\n ...more\n });\n }\n}\nProject.prototype._class += \" Project\";\n\nexport class Mappings extends ProjectBase {\n\n constructor() {\n super();\n this._trim = true;\n this._includeLParam = true;\n }\n\n toDDL(): DDL2.IMappings {\n return {\n type: \"mappings\",\n transformations: this.transformations()\n };\n }\n\n fromDDL(_ddl: DDL2.IMappings): this {\n const ddl = _ddl || { transformations: [] };\n return this\n .transformations(ddl.transformations)\n ;\n }\n\n static fromDDL(ddl: DDL2.IMappings): Mappings {\n return new Mappings().fromDDL(ddl);\n }\n\n hash(more: object = {}): string {\n return super.hash({\n ddl: this.toDDL(),\n ...more\n });\n }\n\n referencedFields(refs: ReferencedFields): void {\n if (this.hasComputedFields()) {\n return super.referencedFields(refs);\n }\n this.resolveInFields(refs, this.inFields().filter(f => f.id !== \"__lparam\").map(f => f.id));\n }\n}\nMappings.prototype._class += \" Mappings\";\n\nComputedMapping.prototype.publish(\"value\", null, \"any\", \"Compare Value\", undefined, {\n validate: (w: ComputedMapping): boolean => (!w.value() && !w.newValue()) || (!!w.value() && !!w.newValue())\n});\nComputedMapping.prototype.publish(\"newValue\", null, \"any\", \"New Value\", undefined, {\n validate: (w: ComputedMapping): boolean => (!w.value() && !w.newValue()) || (!!w.value() && !!w.newValue())\n});\n\nComputedField.prototype.publish(\"label\", null, \"string\", \"Label\", null, { optional: true });\nComputedField.prototype.publish(\"type\", \"mapping\", \"set\", \"Project type\", [\"=\", \"*\", \"/\", \"+\", \"-\", \"scale\", \"template\", \"map\"], { optional: true, disable: w => !w.label() });\nComputedField.prototype.publish(\"column1\", null, \"set\", \"Param 1\", function (this: ComputedField) { return this.columns(); }, {\n optional: true,\n disable: (w: ComputedField) => w.disableColumn1(),\n validate: (w: ComputedField): boolean => w.columns().indexOf(w.column1()) >= 0\n});\nComputedField.prototype.publish(\"column2\", null, \"set\", \"Param 2\", function (this: ComputedField) { return this.columns(); }, {\n optional: true,\n disable: (w: ComputedField) => w.disableColumn2(),\n validate: (w: ComputedField): boolean => w.columns().indexOf(w.column2()) >= 0\n});\nComputedField.prototype.publish(\"constValue\", null, \"number\", \"Const value\", null, { optional: true, disable: (w: ComputedField) => !w.label() || [\"scale\"].indexOf(w.type()) < 0 });\nComputedField.prototype.publish(\"template\", null, \"string\", \"template\", null, { optional: true, disable: (w: ComputedField) => !w.label() || [\"template\"].indexOf(w.type()) < 0 });\nComputedField.prototype.publish(\"default\", null, \"any\", \"Default Value\", null, { optional: true, disable: (w: ComputedField) => !w.label() || [\"map\"].indexOf(w.type()) < 0 });\nComputedField.prototype.publish(\"mapping\", [], \"propertyArray\", \"Mapped Values\", null, { autoExpand: ComputedMapping, disable: (w: ComputedField) => w.disableMapping() });\nComputedField.prototype.publish(\"childField\", [], \"propertyArray\", \"Child Fields\", null, { autoExpand: ComputedField, disable: (w: ComputedField) => w.disableChildField() });\n\nMultiField.prototype.publish(\"label\", \"\", \"string\", \"Label\");\nMultiField.prototype.publish(\"multiFields\", [], \"propertyArray\", \"Multi Fields\", null, { autoExpand: ComputedField });\n\nexport interface ProjectBase {\n computedFields(): Array<ComputedField | MultiField>;\n computedFields(_: Array<ComputedField | MultiField>): this;\n}\n\nProjectBase.prototype.publish(\"computedFields\", [], \"propertyArray\", \"Computed Fields\", null, { autoExpand: ComputedField });","import { PropertyExt } from \"@hpcc-js/common\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { ascending as d3Ascending, descending as d3Descending } from \"d3-array\";\nimport { Activity, IActivityError, ReferencedFields } from \"./activity.ts\";\n\nexport class SortColumn extends PropertyExt {\n private _owner: Sort;\n\n validate(prefix: string): IActivityError[] {\n const retVal: IActivityError[] = [];\n if (!this.fieldID_valid()) {\n retVal.push({\n source: `${prefix}.fieldID`,\n msg: `Invalid fieldID: ${this.fieldID()}`,\n hint: `expected ${JSON.stringify(this.fieldIDs())}`\n });\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n owner(): Sort;\n owner(_: Sort): this;\n owner(_?: Sort): Sort | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.fieldID();\n }\n\n toDDL(): DDL2.ISortCondition {\n return {\n fieldID: this.fieldID(),\n descending: this.descending()\n };\n }\n\n fromDDL(ddl: DDL2.ISortCondition): this {\n return this\n .fieldID(ddl.fieldID)\n .descending(ddl.descending)\n ;\n }\n\n static fromDDL(ddl: DDL2.ISortCondition): SortColumn {\n return new SortColumn().fromDDL(ddl);\n }\n\n hash(): string {\n return hashSum({\n sortColumn: this.fieldID(),\n descending: this.descending()\n });\n }\n\n fieldIDs() {\n return this._owner.fieldIDs();\n }\n\n field(id: string): DDL2.IField | undefined {\n return this._owner.inFields().filter(field =>\n field.id === id\n )[0];\n }\n}\nSortColumn.prototype._class += \" SortColumn\";\n\nexport interface SortColumn {\n fieldID(): string;\n fieldID(_: string): this;\n fieldID_valid(): boolean;\n descending(): boolean;\n descending(_: boolean): this;\n}\n\n// ===========================================================================\nexport class Sort extends Activity {\n static Column = SortColumn;\n\n validate(): IActivityError[] {\n let retVal: IActivityError[] = [];\n for (const sb of this.validSortBy()) {\n retVal = retVal.concat(sb.validate(\"Sort.column\"));\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n toDDL(): DDL2.ISort {\n return {\n type: \"sort\",\n conditions: this.conditions()\n };\n }\n\n fromDDL(ddl: DDL2.ISort): this {\n this.conditions(ddl.conditions);\n return this;\n }\n\n static fromDDL(ddl: DDL2.ISort) {\n return new Sort().fromDDL(ddl);\n }\n\n conditions(): DDL2.ISortCondition[];\n conditions(_: DDL2.ISortCondition[]): this;\n conditions(_?: DDL2.ISortCondition[]): DDL2.ISortCondition[] | this {\n if (!arguments.length) return this.validSortBy().map(column => column.toDDL());\n this.column(_.map(condition => SortColumn.fromDDL(condition)));\n return this;\n }\n\n // Activitiy ---\n hash(): string {\n return hashSum({\n Sort: this.column().map(sb => sb.hash())\n });\n }\n\n referencedFields(refs: ReferencedFields): void {\n super.referencedFields(refs);\n super.resolveInFields(refs, this.validSortBy().map(sortBy => sortBy.fieldID()));\n }\n\n validSortBy(): SortColumn[] {\n return this.column().filter(sortBy => sortBy.fieldID());\n }\n\n exists(): boolean {\n return this.validSortBy().length > 0;\n }\n\n fieldIDs(): string[] {\n return this.inFields().map(field => field.id);\n }\n\n computeData(): ReadonlyArray<object> {\n const data = super.computeData();\n const sortByArr: Array<{ compare: (l, r) => number, id: string }> = [];\n for (const sortBy of this.validSortBy()) {\n sortByArr.push({\n compare: sortBy.descending() ? d3Descending : d3Ascending,\n id: sortBy.fieldID()\n });\n }\n\n if (sortByArr.length) {\n return [...data].sort((l: any, r: any) => {\n for (const item of sortByArr) {\n const retVal2 = item.compare(l[item.id], r[item.id]);\n if (retVal2 !== 0) {\n return retVal2;\n }\n }\n return 0;\n });\n\n }\n return data;\n }\n}\nSort.prototype._class += \" Sort\";\n\nexport interface Sort {\n column(): SortColumn[];\n column(_: SortColumn[]): this;\n}\n\nSortColumn.prototype.publish(\"fieldID\", null, \"set\", \"Sort Field\", function (this: SortColumn) { return this.fieldIDs(); }, {\n optional: true,\n validate: (w: SortColumn): boolean => w.fieldIDs().indexOf(w.fieldID()) >= 0\n });\nSortColumn.prototype.publish(\"descending\", false, \"boolean\", \"Sort Field\");\n\nSort.prototype.publish(\"column\", [], \"propertyArray\", \"Source Columns\", null, { autoExpand: SortColumn });","import { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { ElementContainer } from \"../model/element.ts\";\nimport { Activity, ActivityPipeline } from \"./activity.ts\";\nimport { DatasourceRefType } from \"./datasource.ts\";\nimport { DSPicker } from \"./dspicker.ts\";\nimport { Filters } from \"./filter.ts\";\nimport { GroupBy } from \"./groupby.ts\";\nimport { Limit } from \"./limit.ts\";\nimport { Project } from \"./project.ts\";\nimport { Sort } from \"./sort.ts\";\n\nexport class HipiePipeline extends ActivityPipeline {\n\n _origDatasource;\n _origFilters;\n _origProject;\n _origGroupBy;\n _origSort;\n _origLimit;\n\n declare _datasource: DSPicker | DatasourceRefType;\n declare _filters: Filters;\n declare _project: Project;\n declare _groupBy: GroupBy;\n declare _sort: Sort;\n declare _limit: Limit;\n\n constructor(private _ec: ElementContainer, viewID: string) {\n super();\n this._id = viewID;\n this._datasource = new DSPicker(this._ec);\n this._filters = new Filters(this._ec);\n this._project = new Project();\n this._groupBy = new GroupBy();\n this._sort = new Sort();\n this._limit = new Limit();\n this.updateSequence();\n }\n\n activities(): Activity[];\n activities(_: Activity[]): this;\n activities(_?: Activity[]): Activity[] | this {\n const retVal = super.activities.apply(this, arguments);\n return retVal;\n }\n\n private updateSequence() {\n this.activities([\n this.datasource() as Activity,\n this.filters(),\n this.project(),\n this.groupBy(),\n this.sort(),\n this.limit()\n ]);\n }\n\n selectionFields(): ReadonlyArray<DDL2.IField> {\n return this.last().outFields();\n }\n}\n\nexport interface HipiePipeline {\n datasource(): DSPicker | DatasourceRefType;\n datasource(_: DSPicker | DatasourceRefType): this;\n filters(): Filters;\n filters(_: Filters): this;\n project(): Project;\n project(_: Project): this;\n groupBy(): GroupBy;\n groupBy(_: GroupBy): this;\n sort(): Sort;\n sort(_: Sort): this;\n limit(): Limit;\n limit(_: Limit): this;\n}\n\nHipiePipeline.prototype.publish(\"datasource\", null, \"widget\", \"Data Source 2\");\nHipiePipeline.prototype.publish(\"filters\", null, \"widget\", \"Client Filters\");\nHipiePipeline.prototype.publish(\"project\", null, \"widget\", \"Project\");\nHipiePipeline.prototype.publish(\"groupBy\", null, \"widget\", \"Group By\");\nHipiePipeline.prototype.publish(\"sort\", null, \"widget\", \"Sort\");\nHipiePipeline.prototype.publish(\"limit\", null, \"widget\", \"Limit output\");\n\nfunction wrapHipiePipelineProperty(prop: string) {\n const origKey = `_orig${prop.charAt(0).toUpperCase() + prop.slice(1)}`;\n HipiePipeline.prototype[origKey] = HipiePipeline.prototype[prop];\n HipiePipeline.prototype[prop] = function (_?) {\n const retVal = HipiePipeline.prototype[origKey].apply(this, arguments);\n if (_ !== undefined) {\n this.updateSequence();\n }\n return retVal;\n };\n}\nwrapHipiePipelineProperty(\"datasource\");\nwrapHipiePipelineProperty(\"filters\");\nwrapHipiePipelineProperty(\"project\");\nwrapHipiePipelineProperty(\"groupBy\");\nwrapHipiePipelineProperty(\"sort\");\nwrapHipiePipelineProperty(\"limit\");","import { HipiePipeline } from \"./hipiepipeline.ts\";\n\nexport class NullView extends HipiePipeline {\n hash(): string {\n return super.hash();\n }\n\n _fetch(from: number, count: number): Promise<any[]> {\n return Promise.resolve([]);\n }\n}\nNullView.prototype._class += \" NullView\";\n","import { Spacer, ToggleButton, Widget } from \"@hpcc-js/common\";\nimport { ChartPanel, Modal } from \"@hpcc-js/layout\";\n\nexport interface IVizPopupPanelOwner {\n vizActivation(viz);\n}\n\nexport class VizPopupPanel extends Modal {\n\n private _owner: IVizPopupPanelOwner;\n private _ownerLParam;\n\n constructor(owner: IVizPopupPanelOwner, ownerLParam) {\n super();\n this._owner = owner;\n this._ownerLParam = ownerLParam;\n this._drawStartPos = \"origin\";\n this.visible(false);\n this.minHeight_default(\"240px\");\n this.minWidth_default(\"320px\");\n this.overflowY_default(\"hidden\");\n }\n\n private _host: VizChartPanel;\n host(_?: VizChartPanel): VizChartPanel | this {\n if (!arguments.length) return this._host;\n if (this._host && this._host !== _) {\n this._host._togglePopup\n .selected(false)\n .render()\n ;\n }\n this._host = _;\n this._owner.vizActivation(this._ownerLParam);\n return this;\n }\n\n enter(domNode, element) {\n domNode.parentElement.style.position = \"absolute\";\n const widgetTitle = (this.widget() as ChartPanel).title();\n if (widgetTitle) {\n this.title(widgetTitle);\n (this.widget() as ChartPanel).titleVisible(false);\n }\n super.enter(domNode, element);\n }\n\n update(domNode, element) {\n this.fixedTop(this._pos.y + \"px\");\n this.fixedLeft(this._pos.x + \"px\");\n super.update(domNode, element);\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n const widgetTitle = (this.widget() as ChartPanel).title();\n if (widgetTitle) {\n (this.widget() as ChartPanel).titleVisible(true);\n }\n }\n\n closeModal() {\n super.closeModal();\n if (this._host) {\n this._host._togglePopup\n .selected(false)\n .render()\n ;\n }\n }\n}\nVizPopupPanel.prototype._class += \" marshaller_VizPopupPanel\";\n\nexport interface VizPopupPanel {\n widget(_: Widget): this;\n widget(): Widget;\n widget_exists(): boolean;\n minHeight_default(_: string);\n minWidth_default(_: string);\n overflowY_default(_: string);\n}\n\n// ===========================================================================\n\nexport interface VizChartPanel {\n}\n\nexport class VizChartPanel extends ChartPanel {\n\n private _popup: VizPopupPanel;\n _togglePopup = new ToggleButton().faChar(\"fa-filter\").tooltip(\"Filter\")\n .on(\"click\", () => {\n this._popup.host(this);\n const dp = this.locateClosestAncestor([\"marshaller_DashboardDockPanel\", \"marshaller_DashboardGrid\"]);\n const dpBBox = dp.getBBox(true);\n const cp = this._popup.widget() as VizChartPanel;\n const tbBBox = this._togglePopup.getBBox();\n this._popup\n .pos({\n x: -dpBBox.x + tbBBox.x + tbBBox.width - cp.minWidth(),\n y: -dpBBox.y + tbBBox.y + tbBBox.height\n })\n .resize({ width: cp.minWidth(), height: cp.minHeight() })\n .visible(this._togglePopup.selected())\n .render((popup: any) => {\n const widgetSelector = \"#\" + popup.id() + \" .layout_Carousel .common_Widget\";\n const node = popup.element().node();\n if (node) {\n const { height, width } = node.querySelector(widgetSelector).getBoundingClientRect();\n popup.resizeBodySync(width, height);\n }\n })\n ;\n });\n\n private _origButtons: Widget[];\n private _filterButtons: Widget[];\n\n constructor() {\n super();\n\n this._origButtons = this.buttons();\n this._filterButtons = [this._togglePopup, new Spacer(), ...this._origButtons];\n }\n\n popup(_?: VizPopupPanel): VizPopupPanel | this {\n if (!arguments.length) return this._popup;\n this._popup = _;\n if (!this._popup) {\n this._togglePopup.selected(false);\n }\n this.buttons(this._popup ? this._filterButtons : this._origButtons);\n return this;\n }\n}\nVizChartPanel.prototype._class += \" marshaller_VizChartPanel\";\n\nexport interface VizChartPanel {\n minWidth(): number;\n minWidth(_: number): this;\n minWidth(_: number): this;\n minWidth_exists(): boolean;\n minHeight(): number;\n minHeight(_: number): this;\n minHeight_exists(): boolean;\n}\nVizChartPanel.prototype.publish(\"descriptionTemplate\", \"\", \"string\");\nVizChartPanel.prototype.publish(\"minWidth\", 320, \"number\", \"Min Width\");\nVizChartPanel.prototype.publish(\"minHeight\", 240, \"number\", \"Min Height\");\n","import { Area, Bar, Bubble, Column, Contour, HexBin, Line, Pie, Radar, RadialBar, Scatter, Step, WordCloud } from \"@hpcc-js/chart\";\nimport { Database, EntityRectList, InputField, PropertyExt, Widget } from \"@hpcc-js/common\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { Table } from \"@hpcc-js/dgrid\";\nimport { FieldForm } from \"@hpcc-js/form\";\nimport { AdjacencyGraph, DataGraph } from \"@hpcc-js/graph\";\nimport { ChoroplethCounties, ChoroplethStates, Leaflet } from \"@hpcc-js/map\";\nimport { isArray } from \"@hpcc-js/util\";\nimport { HipiePipeline } from \"../activities/hipiepipeline.ts\";\nimport { ComputedField, Mappings, MultiField } from \"../activities/project.ts\";\nimport { ElementContainer } from \"./element.ts\";\nimport { VizChartPanel } from \"./vizChartPanel.ts\";\n\nexport type VizType = \"Table\" | \"FieldForm\" |\n \"Area\" | \"Bubble\" | \"Bar\" | \"Column\" | \"Contour\" | \"HexBin\" | \"Line\" | \"Pie\" | \"WordCloud\" | \"Radar\" | \"RadialBar\" | \"Scatter\" | \"Step\" |\n \"USCountiesChoropleth\" | \"USStatesChoropleth\" | \"ClusterPins\" |\n \"EntityRectList\" | \"AdjacencyGraph\" | \"DataGraph\";\nconst VizTypeMap: { [key: string]: new (...args: any[]) => object } = {\n Table, FieldForm,\n Area, Bubble, Bar, Column, Contour, HexBin, Line, Pie, Radar, RadialBar, Scatter, Step, WordCloud,\n USCountiesChoropleth: ChoroplethCounties, USStatesChoropleth: ChoroplethStates, ClusterPins: Leaflet.ClusterPins,\n EntityRectList, AdjacencyGraph, DataGraph\n};\nexport const VizTypeSet = [];\nfor (const key in VizTypeMap) {\n VizTypeSet.push(key);\n}\n\nfunction typeClass(type: VizType): any {\n const retVal = VizTypeMap[type];\n return retVal || Table;\n}\n\nfunction typeNew(type: VizType): Widget {\n const ChartClass = VizTypeMap[type];\n const retVal = new (ChartClass || Table)() as Widget;\n\n // Override default properties as needed ---\n if (retVal instanceof FieldForm) {\n retVal\n .validate(false)\n .allowEmptyRequest(true)\n ;\n } else if (retVal instanceof AdjacencyGraph) {\n retVal\n .uidColumn(\"uid\")\n .labelColumn(\"label\")\n .iconColumn(\"icon\")\n .linksColumn(\"links\")\n .linkUidColumn(\"uid\")\n .linkLabelColumn(\"label\")\n ;\n }\n return retVal;\n}\n\nfunction typeInputs(type: VizType): InputField[] {\n return typeClass(type).__inputs || [];\n}\n\nexport class Visualization extends PropertyExt {\n\n _origVisibility;\n _origChartType;\n _origChartPanel;\n\n declare _visibility: DDL2.VisibilityType;\n declare _chartType: VizType;\n declare _chartPanel: VizChartPanel;\n\n protected _hipiePipeline: HipiePipeline;\n constructor(protected _ec: ElementContainer, hipiePipeline: HipiePipeline) {\n super();\n this._hipiePipeline = hipiePipeline;\n this.mappings(new Mappings());\n this.chartPanel(new VizChartPanel());\n this.typeChanged();\n }\n\n visualizationIDs(): string[] {\n return this._ec.elementIDs().filter(id => id !== this.id());\n }\n\n _prevChartType;\n typeChanged() {\n if (this._prevChartType !== this._chartType) {\n this._prevChartType = this._chartType;\n this.refreshMappings();\n const chart = typeNew(this._chartType);\n this.chartPanel().widget(chart);\n }\n }\n\n properties(): DDL2.IWidgetProperties;\n properties(_: DDL2.IWidgetProperties): this;\n properties(_?: DDL2.IWidgetProperties): DDL2.IWidgetProperties | this {\n if (!arguments.length) return this.chartPanel().serialize();\n this.chartPanel().deserialize(_);\n\n return this;\n }\n\n refreshMappings(): this {\n const mappings = this.mappings();\n mappings.sourceActivity(this._hipiePipeline);\n const cfs = mappings.validComputedFields();\n const inFields = mappings.inFields();\n const taken = {};\n mappings.computedFields(typeInputs(this._chartType).map((input, idx) => {\n let retVal: MultiField | ComputedField = cfs[idx];\n if (retVal) {\n if (retVal instanceof MultiField) {\n } else {\n retVal.label(input.id);\n }\n } else {\n if (input.multi) {\n retVal = new MultiField()\n .owner(mappings)\n .label(input.id)\n ;\n const computedFields: ComputedField[] = [];\n for (const inField of inFields) {\n if ((input.type === \"any\" || input.type === inField.type) && !taken[inField.id]) {\n taken[inField.id] = true;\n computedFields.push(new ComputedField()\n .label(inField.id)\n .type(\"=\")\n .column1(inField.id)\n );\n }\n }\n retVal.multiFields(computedFields);\n } else {\n retVal = new ComputedField()\n .owner(mappings)\n .label(input.id)\n .type(\"=\")\n ;\n for (const inField of inFields) {\n if ((input.type === \"any\" || input.type === inField.type) && !taken[inField.id]) {\n taken[inField.id] = true;\n retVal.column1(inField.id);\n break;\n }\n }\n }\n }\n return retVal;\n }));\n return this;\n }\n\n _prevFields: ReadonlyArray<DDL2.IField> = [];\n _prevLinkFields: ReadonlyArray<DDL2.IField> = [];\n _prevData: ReadonlyArray<object> = [];\n refreshData(): Promise<void> {\n const mappings = this.mappings();\n\n const fields = mappings.outFields();\n const dbFields = this.toDBFields(fields);\n let linkFields: ReadonlyArray<DDL2.IField>;\n let dbLinkFields = [];\n const se = this._ec.element(this.secondaryDataviewID());\n if (se) {\n linkFields = se.mappings().outFields();\n dbLinkFields = this.toDBFields(linkFields);\n }\n\n const fieldsChanged = this._prevFields !== fields || this._prevLinkFields !== linkFields;\n if (fieldsChanged) {\n this._prevFields = fields;\n if (this.chartType() === \"DataGraph\") {\n const dataGraph = this.chartPanel().widget() as DataGraph;\n dataGraph.vertexColumns(dbFields.map(f => f.label()));\n dataGraph.edgeColumns(dbLinkFields.map(f => f.label()));\n } else {\n this.chartPanel().fields(dbFields.filter(f => f.id() !== \"__lparam\"));\n }\n } else {\n console.warn(`***${this.id()} Immutable Fields***`);\n }\n\n const data = mappings.outData();\n const dataChanged = this._prevData !== data;\n if (dataChanged) {\n this._prevData = data;\n const mappedData = this.toDBData(dbFields, data);\n if (this.chartType() === \"DataGraph\") {\n const dataGraph = this.chartPanel().widget() as DataGraph;\n dataGraph.vertices(mappedData);\n if (se) {\n const linkData = se.mappings().outData();\n const mappedLinkData = this.toDBData(dbLinkFields, linkData);\n dataGraph.edges(mappedLinkData);\n }\n } else {\n this.chartPanel().data(mappedData);\n }\n } else {\n console.warn(`${this.id()} Immutable Data!`);\n }\n\n if (fieldsChanged || dataChanged) {\n return this.chartPanel().renderPromise().then(() => { });\n }\n return Promise.resolve();\n }\n\n private fieldTypeTodbFieldType(type: DDL2.IFieldType): Database.FieldType {\n switch (type) {\n case \"dataset\":\n return \"nested\";\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n default:\n return \"string\";\n }\n }\n\n toDBFields(fields: ReadonlyArray<DDL2.IField>): Database.Field[] {\n const retVal: Database.Field[] = [];\n for (const field of fields || []) {\n const f = new Database.Field()\n .type(this.fieldTypeTodbFieldType(field.type))\n .id(field.id)\n .label(field.id)\n ;\n switch (field.type) {\n case \"dataset\":\n f.children(this.toDBFields(field.children));\n break;\n case \"object\":\n // TODO: For __lparam we should do nothing - not 100% if that is correct for \"real\" data (we don't really support \"object\" anyway)?\n break;\n }\n retVal.push(f);\n }\n return retVal;\n }\n\n toDBData(fields: Database.Field[], data: ReadonlyArray<object> | Readonly<object>) {\n const _data: ReadonlyArray<object> = isArray(data) ? data : [data];\n return _data.map((row: any) => {\n const retVal = [];\n for (const field of fields) {\n if (field.type() === \"nested\") {\n retVal.push(this.toDBData(field.children() as Database.Field[], row[field.id()].Row || row[field.id()]));\n } else {\n retVal.push(row[field.label()]);\n }\n }\n return retVal;\n });\n }\n\n exec(): Promise<void[]> {\n const promises = [];\n if (this.secondaryDataviewID_exists()) {\n const secondaryElementID = this.secondaryDataviewID();\n const secondaryElement = this._ec.element(secondaryElementID);\n if (secondaryElement) {\n promises.push(secondaryElement.visualization().exec());\n }\n }\n\n const mappings = this.mappings();\n mappings.sourceActivity(this._hipiePipeline);\n promises.push(mappings.refreshMeta().then(() => {\n return mappings.exec();\n }));\n\n return Promise.all(promises);\n }\n\n refresh(): Promise<void> {\n if (this.chartPanel().startProgress) {\n this.chartPanel().startProgress();\n }\n return this.exec().then(() => {\n if (this.chartPanel().finishProgress) {\n this.chartPanel().finishProgress();\n }\n return this.refreshData();\n });\n }\n\n // Events ---\n click(row: any, col: string, sel: boolean, more?) {\n }\n\n vertex_click(row: any, col: string, sel: boolean) {\n }\n}\nVisualization.prototype._class += \" Visualization\";\n\nexport interface Visualization {\n title(): string;\n title(_: string): this;\n description(): string;\n description(_: string): this;\n visibility(): DDL2.VisibilityType;\n visibility(_: DDL2.VisibilityType): this;\n chartType(): VizType;\n chartType(_: VizType, props?: { [prop: string]: any }): this;\n secondaryDataviewID(): string;\n secondaryDataviewID(_: string): this;\n secondaryDataviewID_exists(): boolean;\n secondaryDataviewID_valid(): boolean;\n mappings(): Mappings;\n mappings(_: Mappings): this;\n chartPanel(): VizChartPanel;\n chartPanel(_: VizChartPanel): this;\n}\n\nVisualization.prototype.publishProxy(\"title\", \"_chartPanel\");\nVisualization.prototype.publishProxy(\"description\", \"_chartPanel\");\nVisualization.prototype.publish(\"visibility\", DDL2.VisibilitySet[0], \"set\", \"Type\", DDL2.VisibilitySet);\nVisualization.prototype.publish(\"chartType\", \"Table\", \"set\", \"Type\", VizTypeSet);\nVisualization.prototype.publish(\"secondaryDataviewID\", null, \"set\", \"Secondary Data View (e.g. graph edges)\", function (this: Visualization) { return this.visualizationIDs(); }, { optional: true });\nVisualization.prototype.publish(\"mappings\", null, \"widget\", \"Mappings\", undefined, { render: false, internal: true });\nVisualization.prototype.publish(\"chartPanel\", [], \"widget\", \"Widget\");\n\nVisualization.prototype._origVisibility = Visualization.prototype.visibility;\nVisualization.prototype.visibility = function (this: Visualization, _?) {\n const prev = this._visibility;\n const retVal = Visualization.prototype._origVisibility.apply(this, arguments);\n if (_ !== undefined && prev !== _) {\n this.chartPanel().target(null);\n }\n return retVal;\n};\n\nVisualization.prototype._origChartType = Visualization.prototype.chartType;\nVisualization.prototype.chartType = function (this: Visualization, _?, props?) {\n if (_ !== undefined && VizTypeSet.indexOf(_) === -1) {\n _ = \"Table\";\n }\n const retVal = Visualization.prototype._origChartType.apply(this, arguments);\n if (_ !== undefined) {\n this.typeChanged();\n if (props) {\n const widget = this.chartPanel().widget();\n for (const prop in props) {\n if (typeof widget[prop] === \"function\") {\n widget[prop](props[prop]);\n }\n }\n }\n }\n return retVal;\n};\n\nVisualization.prototype._origChartPanel = Visualization.prototype.chartPanel;\nVisualization.prototype.chartPanel = function (this: Visualization, _?) {\n const retVal = Visualization.prototype._origChartPanel.apply(this, arguments);\n if (_ !== undefined) {\n this._chartPanel\n .on(\"click\", (row: any, col: string, sel: boolean, more) => this.click(row, col, sel, more))\n .on(\"vertex_click\", (row: any, col: string, sel: boolean) => this.vertex_click(row, col, sel))\n ;\n for (const key in VizTypeMap) {\n if (this._chartPanel.widget() instanceof VizTypeMap[key]) {\n this._chartType = key as VizType;\n break;\n }\n }\n }\n return retVal;\n};","import { PropertyExt, Widget } from \"@hpcc-js/common\";\nimport { IOptionsSend } from \"@hpcc-js/comms\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { find, hashSum, isArray } from \"@hpcc-js/util\";\nimport { Activity, IActivityError } from \"../activities/activity.ts\";\nimport { emptyDatabomb } from \"../activities/databomb.ts\";\nimport { DatasourceRefType } from \"../activities/datasource.ts\";\nimport { HipiePipeline } from \"../activities/hipiepipeline.ts\";\nimport { Mappings } from \"../activities/project.ts\";\nimport { Visualization } from \"./visualization.ts\";\nimport { VizChartPanel } from \"./vizChartPanel.ts\";\n\nexport class State extends PropertyExt {\n\n constructor() {\n super();\n this.selection([]);\n }\n\n set(_: Array<{ [key: string]: any }>): boolean {\n const currSelHash = hashSum(this.selection());\n const newSelHash = hashSum(_);\n if (currSelHash !== newSelHash) {\n this.selection(_);\n return true;\n }\n return false;\n }\n\n removeInvalid(data: ReadonlyArray<object>): boolean {\n const currSelection = this.selection();\n const newSelection: object[] = [];\n for (const selRow of currSelection) {\n if (find(data, (row: { [key: string]: any }, index): boolean => {\n for (const column in selRow) {\n if (selRow[column] !== row[column]) {\n return false;\n }\n }\n return true;\n })) {\n newSelection.push(selRow);\n }\n }\n if (newSelection.length !== currSelection.length) {\n this.selection(newSelection);\n return true;\n }\n return false;\n }\n}\nState.prototype._class += \" State\";\nexport interface State {\n selection(): Array<{ [key: string]: any }>;\n selection(_: Array<{ [key: string]: any }>): this;\n}\nState.prototype.publish(\"selection\", [], \"array\", \"State\");\n\nlet vizID = 0;\nexport class Element extends PropertyExt {\n private _vizChartPanel: Visualization;\n\n _origVisualization;\n\n declare _visualization: Visualization;\n\n constructor(private _ec: ElementContainer) {\n super();\n while (true) {\n vizID++;\n this._id = `e_${vizID}`;\n if (!this._ec.elementExists(this._id)) {\n break;\n }\n }\n const view = new HipiePipeline(this._ec, this._id);\n this.hipiePipeline(view);\n this._vizChartPanel = new Visualization(this._ec, this.hipiePipeline())\n .id(`viz_${vizID}`)\n .title(`Element ${vizID}`)\n ;\n this._vizChartPanel.chartPanel().id(`cp_${vizID}`);\n this.visualization(this._vizChartPanel);\n this.state(new State());\n }\n\n id(): string;\n id(_: string): this;\n id(_?: string): string | this {\n const retVal = super.id.apply(this, arguments);\n if (arguments.length) {\n this._vizChartPanel.id(_);\n }\n return retVal;\n }\n\n chartType(): string {\n return this._vizChartPanel.chartType();\n }\n\n chartPanel(): VizChartPanel;\n chartPanel(_: VizChartPanel): this;\n chartPanel(_?: VizChartPanel): VizChartPanel | this {\n if (!arguments.length) return this._vizChartPanel.chartPanel();\n this._vizChartPanel.chartPanel(_);\n return this;\n }\n\n chart(): Widget {\n return this._vizChartPanel.chartPanel().widget();\n }\n\n mappings(): Mappings;\n mappings(_: Mappings): this;\n mappings(_?: Mappings): Mappings | this {\n if (!arguments.length) return this._vizChartPanel.mappings();\n this._vizChartPanel.mappings(_);\n return this;\n }\n\n pipeline(activities: Activity[]): this {\n this.hipiePipeline()\n .activities(activities)\n ;\n return this;\n }\n\n updatedBy(): string[] {\n const retVal = this.hipiePipeline().updatedBy();\n if (this.visualization().secondaryDataviewID_exists()) {\n retVal.push(this.visualization().secondaryDataviewID());\n }\n return retVal;\n }\n\n dataProps(): PropertyExt {\n return this.hipiePipeline();\n }\n\n vizProps(): Widget {\n return this.visualization().chartPanel();\n }\n\n stateProps(): PropertyExt {\n return this.state();\n }\n\n private _errors: IElementError[] = [];\n errors(): IElementError[] {\n return this._errors;\n }\n\n validate(): IElementError[] {\n if (!this._initialized) {\n return [];\n }\n this._errors = [];\n const pipeline = this.hipiePipeline();\n for (const activity of [...pipeline.activities(), this.mappings()]) {\n for (const error of activity.validate()) {\n this._errors.push({\n elementID: this.id(),\n ...error\n });\n }\n }\n return this._errors;\n }\n\n private _initialized = false;\n refresh(): Promise<void> {\n const filters = this.hipiePipeline().filters().validFilters();\n const desc: string[] = filters.map(f => f.createFilterDescription());\n this.visualization().chartPanel().description(desc.join(\", \"));\n return this.visualization().refresh().then(() => {\n this._initialized = true;\n const data = this.hipiePipeline().outData();\n if (this.visualization().chartType() === \"FieldForm\") {\n if (this.state().set([...data])) {\n this.selectionChanged();\n }\n } else {\n if (this.state().removeInvalid(data)) {\n this.selectionChanged();\n }\n }\n });\n }\n\n // Selection ---\n selection(): object[];\n selection(_: object[]): this;\n selection(_?: object[]): object[] | this {\n if (!arguments.length) return this.state().selection();\n this.state().selection(_);\n this.selectionChanged();\n return this;\n }\n\n // Events ---\n selectionChanged() {\n const promises: Array<Promise<void>> = [];\n for (const filteredViz of this._ec.filteredBy(this.id())) {\n promises.push(filteredViz.refresh());\n }\n Promise.all(promises).then(() => {\n this._ec.vizStateChanged(this);\n });\n }\n\n monitor(func: (id: string, newVal: any, oldVal: any, source: PropertyExt) => void): { remove: () => void; } {\n return this.hipiePipeline().monitor(func);\n }\n}\nElement.prototype._class += \" Viz\";\n\nexport interface Element {\n hipiePipeline(): HipiePipeline;\n hipiePipeline(_: HipiePipeline): this;\n visualization(): Visualization;\n visualization(_: Visualization): this;\n state(): State;\n state(_: State): this;\n}\n\nElement.prototype.publish(\"hipiePipeline\", null, \"widget\", \"Data View\");\nElement.prototype.publish(\"visualization\", null, \"widget\", \"Visualization\");\nElement.prototype.publish(\"state\", null, \"widget\", \"State\");\n\nElement.prototype._origVisualization = Element.prototype.visualization;\nElement.prototype.visualization = function (this: Element, _?) {\n const retVal = Element.prototype._origVisualization.apply(this, arguments);\n if (_ !== undefined) {\n this._visualization\n .on(\"click\", (_row: object | object[], col: string, sel: boolean, more?) => {\n if (more && more.selection) {\n this.selection(sel ? more.selection.map(r => r.__lparam || r) : []);\n } else {\n const row: any[] = isArray(_row) ? _row : [_row];\n this.selection(sel ? row.map(r => r.__lparam || r) : []);\n }\n })\n .on(\"vertex_click\", (_row: object | object[], col: string, sel: boolean) => {\n const row: any[] = isArray(_row) ? _row : [_row];\n this.selection(sel ? row.map(r => r.__lparam || r) : []);\n })\n ;\n }\n return retVal;\n};\n\nexport interface IPersist {\n ddl: DDL2.Schema;\n layout: any;\n}\n\nexport interface IElementError extends IActivityError {\n elementID: string;\n}\n\nexport class ElementContainer extends PropertyExt {\n\n private _nullElement;\n\n private _datasources: DatasourceRefType[] = [emptyDatabomb];\n private _elements: Element[] = [];\n\n constructor() {\n super();\n this.clear();\n this._nullElement = new Element(this);\n }\n\n clear(eid?: string) {\n this._datasources = eid === undefined ? [emptyDatabomb] : this._datasources;\n this._elements = eid === undefined ? [] : this._elements.filter(d => d.id() !== eid);\n }\n\n private _hookSend: IOptionsSend;\n hookSend(): IOptionsSend;\n hookSend(_: IOptionsSend): this;\n hookSend(_?: IOptionsSend): IOptionsSend | this {\n if (!arguments.length) return this._hookSend;\n this._hookSend = _;\n return this;\n }\n\n datasources(): DatasourceRefType[];\n datasources(_: DatasourceRefType[]): this;\n datasources(_?: DatasourceRefType[]): DatasourceRefType[] | this {\n if (!arguments.length) return this._datasources;\n this._datasources = _;\n return this;\n }\n\n datasource(id): DatasourceRefType {\n return this._datasources.filter(ds => ds.id() === id)[0];\n }\n\n appendDatasource(ds: DatasourceRefType): this {\n this._datasources.push(ds);\n return this;\n }\n\n removeDatasource(ds: DatasourceRefType): this {\n this._datasources = this._datasources.filter(row => row !== ds);\n return this;\n }\n\n elements(): Element[] {\n return [...this._elements];\n }\n\n element(w: string | PropertyExt | VizChartPanel): Element {\n let retVal: Element[];\n if (typeof w === \"string\") {\n retVal = this._elements.filter(viz => viz.id() === w);\n } else if (w instanceof VizChartPanel) {\n retVal = this._elements.filter(v => v.chartPanel() === w);\n } else {\n retVal = this._elements.filter(v => v.vizProps() === w);\n }\n if (retVal.length) {\n return retVal[0];\n }\n return this._nullElement;\n }\n\n elementExists(w: string | PropertyExt): boolean {\n return this.element(w) !== this._nullElement;\n }\n\n elementIDs() {\n return this._elements.map(viz => viz.id());\n }\n\n append(element: Element): this {\n this._elements.push(element);\n return this;\n }\n\n filteredBy(elemID: string): Element[] {\n return this._elements.filter(otherViz => {\n const filterIDs = otherViz.updatedBy();\n return filterIDs.indexOf(elemID) >= 0;\n });\n }\n\n views(): HipiePipeline[] {\n return this._elements.map(viz => viz.hipiePipeline());\n }\n\n view(id: string): HipiePipeline | undefined {\n return this.views().filter(view => view.id() === id)[0];\n }\n\n normalizePersist(seri: any): { [key: string]: { [key: string]: any } } {\n const ret = {};\n seri.__properties.content.map((n) => {\n const _is_MegaChart = !!n.__properties.widget.__properties.chart;\n const _cell = n;\n const _panel = n.__properties.widget;\n const _widget = _is_MegaChart ? n.__properties.widget.__properties.chart : n.__properties.widget.__properties.widget;\n const _id = n.__properties.widget.__id ? n.__properties.widget.__id : n.__properties.widget.__properties.widget.__id;\n ret[_id] = {\n id: _id,\n package: _widget.__class.split(\"_\")[0],\n object: _widget.__class.split(\"_\")[1],\n cell: _get_params(_cell, [\"chart\", \"widget\", \"fields\"]),\n panel: _get_params(_panel, [\"chart\", \"widget\", \"fields\"]),\n widget: _get_params(_widget, [\"fields\"])\n };\n });\n return ret;\n function _get_params(_o, exclude_list) {\n const ret = {};\n Object.keys(_o.__properties)\n .filter(n => exclude_list.indexOf(n) === -1)\n .forEach(n => ret[n] = _o.__properties[n]);\n return ret;\n }\n }\n\n validate(): IElementError[] {\n let retVal: IElementError[] = [];\n this._elements.forEach(elem => {\n retVal = retVal.concat(elem.validate());\n });\n return retVal;\n }\n\n refresh(): Promise<this> {\n return Promise.all(this.elements().map(element => element.refresh())).then(() => {\n return this;\n });\n }\n\n // Events ---\n vizStateChanged(viz: Element) {\n }\n}\nElementContainer.prototype._class += \" dashboard_ElementContainer\";\n\nexport interface ElementContainer {\n samples(): number;\n samples(_: number): this;\n sampleSize(): number;\n sampleSize(_: number): this;\n}\n\nElementContainer.prototype.publish(\"samples\", 10, \"number\", \"Number of samples\");\nElementContainer.prototype.publish(\"sampleSize\", 100, \"number\", \"Sample size\");","function responseText(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.text();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseText);\n}\n","import { IMonitorHandle, Widget } from \"@hpcc-js/common\";\nimport { compare } from \"@hpcc-js/util\";\nimport { ElementContainer } from \"./model/element.ts\";\nimport { IVizPopupPanelOwner, VizChartPanel, VizPopupPanel } from \"./model/vizChartPanel.ts\";\n\nexport class PopupManager extends Widget implements IVizPopupPanelOwner {\n protected _ec: ElementContainer;\n protected _popups: VizPopupPanel[] = [];\n protected _popupIdx: {\n [id: string]: {\n panel: VizPopupPanel,\n monitorHandle: IMonitorHandle\n }\n } = {};\n\n popupPanels(): VizPopupPanel[] {\n if (!this._popups) this._popups = [];\n if (!this._popupIdx) this._popupIdx = {};\n return this._popups;\n }\n\n popupChartPanels(): VizChartPanel[] {\n return this.popupPanels().map(p => p.widget() as VizChartPanel);\n }\n\n addPopup(cp: VizChartPanel) {\n const elem = this._ec.element(cp);\n const targetNode = this.element().node();\n const pp = new VizPopupPanel(this, elem)\n .target(targetNode)\n .widget(cp)\n .relativeTargetId(this.id())\n .size({\n width: cp.minWidth(),\n height: cp.minHeight()\n });\n this._popups.push(pp);\n this._popupIdx[cp.id()] = {\n panel: pp,\n monitorHandle: cp.monitor((id) => {\n switch (id) {\n case \"minWidth\":\n case \"minHeight\":\n pp\n .resize({ width: cp.minWidth(), height: cp.minHeight() })\n .render()\n ;\n break;\n }\n })\n };\n this._ec.filteredBy(elem.id()).forEach(otherElem => {\n otherElem.visualization().chartPanel().popup(pp);\n });\n }\n\n removePopup(cp: VizChartPanel) {\n const elem = this._ec.element(cp);\n this._ec.filteredBy(elem.id()).forEach(otherElem => {\n otherElem.visualization().chartPanel().popup(null);\n });\n this._popupIdx[cp.id()].panel.target(null);\n this._popupIdx[cp.id()].monitorHandle.remove();\n cp.target(null);\n delete this._popupIdx[cp.id()];\n this._popups = this._popups.filter(p => p.widget() !== cp);\n }\n\n syncPopups() {\n const prevPopups = this.popupChartPanels();\n const diffPopups = compare(prevPopups, this._ec.elements()\n .filter(e => e.visualization().visibility() === \"flyout\")\n .map((elem: any) => elem.visualization().chartPanel()))\n ;\n\n for (const w of diffPopups.exit) {\n this.removePopup(w);\n }\n\n for (const w of diffPopups.enter) {\n this.addPopup(w);\n }\n\n return this;\n }\n\n vizActivation() {\n }\n}\n","import { Widget } from \"@hpcc-js/common\";\nimport { DockPanel, IClosable, WidgetAdapter } from \"@hpcc-js/phosphor\";\nimport { compare } from \"@hpcc-js/util\";\nimport { select as d3Select } from \"d3-selection\";\nimport { Element, ElementContainer } from \"./model/element.ts\";\nimport { IVizPopupPanelOwner } from \"./model/vizChartPanel.ts\";\nimport { PopupManager } from \"./PopupManager.ts\";\n\nexport class DashboardDockPanel extends DockPanel implements IClosable, IVizPopupPanelOwner {\n\n constructor(private _ec: ElementContainer) {\n super();\n\n }\n\n tabTitle(element: Element): string {\n if (this.hideSingleTabs()) {\n return element.visualization().title ? element.visualization().title() : element.visualization().id();\n }\n return element.id();\n }\n\n titleClassed(wa: WidgetAdapter, classID: string, include: boolean) {\n let classes = wa.title.className.split(\" \");\n if (include && classes.indexOf(classID) < 0) {\n classes.push(classID);\n } else if (!include && classes.indexOf(classID) > 0) {\n classes = classes.filter(c => c !== classID);\n }\n wa.title.className = classes.join(\" \");\n }\n\n updateTitle(w: Widget) {\n const wa: WidgetAdapter = this.getWidgetAdapter(w);\n const element: Element = this._ec.element(w);\n const errors = element.validate();\n wa.title.label = this.tabTitle(element);\n this.titleClassed(wa, \"error\", errors.length > 0);\n wa.title.caption = errors.map(err => `${err.source}: ${err.msg}`).join(\"\\n\");\n }\n\n activate(element: Element) {\n const wa = this.getWidgetAdapter(element.visualization().chartPanel());\n if (wa) {\n wa.activate();\n }\n }\n\n syncMinSize(w: any): boolean {\n if (w.minWidth_exists() || w.minHeight_exists()) {\n const wa = this.getWidgetAdapter(w);\n d3Select(wa.node)\n .style(\"min-width\", `${w.minWidth()}px`)\n .style(\"min-height\", `${w.minHeight()}px`)\n ;\n return true;\n }\n return false;\n }\n\n syncWidgets() {\n const prevWidgets = this.widgets();\n const diffWidgets = compare(prevWidgets, this._ec.elements().filter(e => e.visualization().visibility() === \"normal\").map(viz => viz.visualization().chartPanel()));\n\n let refit = false;\n for (const w of diffWidgets.exit) {\n this.removeWidget(w);\n }\n\n for (const w of diffWidgets.enter) {\n const element: Element = this._ec.element(w);\n this.addWidget(w, this.tabTitle(element), \"split-bottom\", undefined, this.hideSingleTabs() ? undefined : this);\n refit = this.syncMinSize(w) || refit; // ensure syncMinSize is called\n }\n\n for (const w of diffWidgets.update) {\n this.updateTitle(w);\n refit = this.syncMinSize(w) || refit; // ensure syncMinSize is called\n }\n\n if (refit) {\n this.refit();\n }\n\n return this;\n }\n\n // Events ---\n childActivation(w: Widget, wa: WidgetAdapter) {\n super.childActivation(w, wa);\n this.vizActivation(this._ec.element(w));\n for (const wa2 of this.widgetAdapters()) {\n if (wa2 === wa) {\n wa2.addClass(\"active\");\n this.titleClassed(wa2, \"active\", true);\n wa2.title.iconClass = \"active\";\n } else {\n wa2.removeClass(\"active\");\n this.titleClassed(wa2, \"active\", false);\n wa2.title.iconClass = \"\";\n }\n }\n }\n\n vizActivation(viz: Element) {\n }\n\n // IClosable ---\n canClose(w: Widget, wa: WidgetAdapter): boolean {\n const id = this._ec.element(w).id();\n const retVal = window.confirm(`Remove Widget \"${id}\"?`);\n if (retVal) {\n this._ec.clear(id);\n this.syncWidgets();\n this.vizActivation(undefined);\n }\n return retVal;\n }\n\n syncPopups() { }\n}\nDashboardDockPanel.prototype._class += \" marshaller_DashboardDockPanel\";\nDashboardDockPanel.prototype.mixin(PopupManager);\n","import { Widget } from \"@hpcc-js/common\";\nimport { Cell, Grid } from \"@hpcc-js/layout\";\nimport { IClosable, WidgetAdapter } from \"@hpcc-js/phosphor\";\nimport { compare } from \"@hpcc-js/util\";\nimport { IDockPanel } from \"./dashboard.ts\";\nimport { Element, ElementContainer } from \"./model/element.ts\";\nimport { IVizPopupPanelOwner } from \"./model/vizChartPanel.ts\";\nimport { PopupManager } from \"./PopupManager.ts\";\n\nexport class DashboardGrid extends Grid implements IClosable, IVizPopupPanelOwner, IDockPanel {\n private _layoutCache = [];\n constructor(private _ec: ElementContainer) {\n super();\n\n this.designMode(false);\n this.surfacePadding(\"0\");\n this.surfaceBorderWidth(0);\n }\n updateGrid(resize, transitionDuration: number = 0, _noRender: boolean = false) {\n super.updateGrid(resize, transitionDuration, _noRender);\n this._layoutCache = this.content().map(cellWidget => {\n return {\n id: cellWidget.widget().id(),\n position: [\n cellWidget.gridCol(),\n cellWidget.gridRow(),\n cellWidget.gridColSpan(),\n cellWidget.gridRowSpan()\n ]\n };\n });\n }\n layoutObj(_: object | null): this {\n if (_) {\n if ((_ as any).main) {\n const convertedLayout = ddl2_layout(_, 10, 10);\n this._layoutCache = convertedLayout;\n } else if (_ instanceof Array) {\n this._layoutCache = _;\n }\n }\n return this;\n\n function ddl2_layout(layoutObject, rows, cols) {\n const ret = [];\n dive(layoutObject.main, 0, 0, rows, cols);\n return ret;\n function dive(o, x, y, w, h) {\n if (o.children) {\n if (o.type === \"split-area\") {\n if (o.orientation === \"horizontal\") {\n o.children.forEach((child, i) => {\n const _w = o.sizes[i] * w;\n const _h = h;\n const _x = i === 0 ? x : x + o.sizes[0] * w;\n const _y = y;\n dive(o.children[i], _x, _y, _w, _h);\n });\n } else if (o.orientation === \"vertical\") {\n o.children.forEach((child, i) => {\n const _w = w;\n const _h = o.sizes[i] * h;\n const _x = x;\n const _y = i === 0 ? y : y + o.sizes[0] * h;\n dive(o.children[i], _x, _y, _w, _h);\n });\n } else {\n console.error(\"wtf\");\n }\n } else if (o.type === \"tab-area\") {\n o.children.forEach((child, i) => {\n const _w = w;\n const _h = o.sizes[i] * h;\n const _x = x;\n const _y = i === 0 ? y : y + o.sizes[0] * h;\n dive(o.children[i], _x, _y, _w, _h);\n });\n }\n } else {\n ret.push([x, y, w, h].map(Math.round));\n }\n }\n }\n }\n layout() {\n return this._layoutCache;\n }\n widgets() {\n return this.content().map(c => c.widget());\n }\n hideSingleTabs() {\n return true;\n }\n getWidgetAdapter() {\n }\n\n tabTitle(element: Element): string {\n if (this.hideSingleTabs()) {\n return element.visualization().title ? element.visualization().title() : element.visualization().id();\n }\n return element.id();\n }\n\n updateTitle(w: Widget) {\n const cell: Cell = this.getWidgetCell(w.id());\n const element: Element = this._ec.element(w);\n const tabTitle = this.tabTitle(element);\n (cell.widget() as any)\n .title(tabTitle)\n ;\n }\n\n activate(element: Element) {\n }\n\n removeWidget(w: Widget) {\n const cell = this.getWidgetCell(w.id());\n this.clearContent(cell);\n }\n\n syncMinSize(w: any): boolean {\n if (w.minWidth_exists() || w.minHeight_exists()) {\n const cell: Cell = this.getWidgetCell(w.id());\n cell.element()\n .style(\"min-width\", `${w.minWidth()}px`)\n .style(\"min-height\", `${w.minHeight()}px`)\n ;\n return true;\n }\n return false;\n }\n\n syncWidgets() {\n const prevWidgets = this.widgets();\n const diffWidgets = compare(prevWidgets, this._ec.elements().filter(e => e.visualization().visibility() === \"normal\").map(viz => viz.visualization().chartPanel()));\n\n for (const w of diffWidgets.exit) {\n this.removeWidget(w);\n }\n let maxX = 0;\n let maxY = 0;\n const no_layout_added = [];\n for (const widget of diffWidgets.enter) {\n const element: Element = this._ec.element(widget);\n const i = this.content().length;\n if (this._layoutCache && this._layoutCache[i]) {\n const layout = (this._layoutCache as any).find(n => n.id === widget.id());\n if (layout) {\n const [x, y, w, h] = layout.position;\n this.setContent(y, x, element.visualization().chartPanel(), \"\", h, w);\n if (x + w > maxX) maxX = x + w;\n if (y + h > maxY) maxY = y + h;\n } else {\n no_layout_added.push(element.visualization().chartPanel());\n }\n } else {\n no_layout_added.push(element.visualization().chartPanel());\n }\n }\n let freeRow = this.content().reduce((prev, curr) => Math.max(prev, curr.gridRow() + curr.gridRowSpan()), 0);\n no_layout_added.forEach(cp => {\n this.setContent(freeRow, 0, cp, \"\", 3, 3);\n freeRow += 3;\n });\n for (const w of diffWidgets.update) {\n this.updateTitle(w);\n }\n return this;\n }\n\n // Events ---\n childActivation(w: Widget, wa?: WidgetAdapter) {\n this.vizActivation(this._ec.element(w));\n }\n\n postSelectionChange() {\n super.postSelectionChange();\n const selected = this._selectionBag.get();\n if (selected.length > 0) {\n this.childActivation(selected[0].widget.widget());\n }\n }\n\n vizActivation(viz: Element) {\n }\n\n // IClosable ---\n canClose(w: Widget, wa: WidgetAdapter): boolean {\n const id = this._ec.element(w).id();\n const retVal = window.confirm(`Remove Widget \"${id}\"?`);\n if (retVal) {\n this._ec.clear(id);\n this.syncWidgets();\n this.vizActivation(undefined);\n }\n return retVal;\n }\n\n syncPopups() { }\n}\nDashboardGrid.prototype._class += \" marshaller_DashboardGrid\";\nDashboardGrid.prototype.mixin(PopupManager);\n","import { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { scopedLogger } from \"@hpcc-js/util\";\nimport { BUILD_VERSION, PKG_NAME, PKG_VERSION } from \"../__package__.ts\";\nimport { ActivityPipeline, ReferencedFields } from \"./activities/activity.ts\";\nimport { Databomb } from \"./activities/databomb.ts\";\nimport { DatasourceRef, DatasourceRefType, DatasourceType } from \"./activities/datasource.ts\";\nimport { DSPicker } from \"./activities/dspicker.ts\";\nimport { Filters } from \"./activities/filter.ts\";\nimport { Form } from \"./activities/form.ts\";\nimport { GroupBy } from \"./activities/groupby.ts\";\nimport { Limit } from \"./activities/limit.ts\";\nimport { LogicalFile } from \"./activities/logicalfile.ts\";\nimport { Mappings, Project } from \"./activities/project.ts\";\nimport { Param, RestResult, RestResultRef, RestService } from \"./activities/rest.ts\";\nimport { HipieResultRef, RoxieResult, RoxieResultRef, RoxieService } from \"./activities/roxie.ts\";\nimport { Sort } from \"./activities/sort.ts\";\nimport { WU, WUResult, WUResultRef } from \"./activities/wuresult.ts\";\nimport { Dashboard } from \"./dashboard.ts\";\nimport { Element, ElementContainer } from \"./model/element.ts\";\nimport { Visualization } from \"./model/visualization.ts\";\n\nconst logger = scopedLogger(\"marshaller/ddl2/ddl\");\n\ntype DatasourceRefTypeMap = { [key: string]: { refType: DatasourceRefType, ref: DatasourceRef } };\ntype ServerRefTypeMap = { [key: string]: { ds: DatasourceType, result: DatasourceRefTypeMap } };\n\nclass DDLDatasourceAdapter {\n private _dsDedup: ServerRefTypeMap;\n\n constructor() {\n }\n\n clear() {\n this._dsDedup = {};\n }\n\n id(dsT: DatasourceType): string {\n if (dsT instanceof WU) {\n return `${dsT.url()}/${dsT.wuid()}`;\n } else if (dsT instanceof RoxieService) {\n return `${dsT.url()}/${dsT.querySet()}/${dsT.queryID()}`;\n } else if (dsT instanceof RestService) {\n return `${dsT.url()}/${dsT.action()}`;\n }\n return dsT.id();\n }\n\n _resolveID(dsT: DatasourceType): string {\n return this._dsDedup[this.id(dsT)].ds.id();\n }\n\n resolveID(dsRef: DatasourceRef): string | undefined {\n if (dsRef instanceof WUResultRef) {\n return this._resolveID(dsRef.datasource().wu());\n } else if (dsRef instanceof RoxieResultRef) {\n return this._resolveID(dsRef.datasource().service());\n } else if (dsRef instanceof HipieResultRef) {\n return this._resolveID(dsRef.datasource().service());\n } else if (dsRef instanceof RestResultRef) {\n return this._resolveID(dsRef.datasource().service());\n }\n }\n\n append(pDS: DSPicker | DatasourceRefType) {\n const refType: DatasourceRefType = pDS instanceof DSPicker ? pDS.datasource() : pDS;\n const ref: DatasourceRef = pDS instanceof DSPicker ? pDS.datasourceRef() : undefined;\n const dsTID = refType.id();\n const ds: DatasourceType = refType instanceof WUResult ? refType.wu() : refType instanceof RoxieResult ? refType.service() : refType instanceof RestResult ? refType.service() : refType;\n const dsID = this.id(ds);\n if (!this._dsDedup[dsID]) {\n this._dsDedup[dsID] = {\n ds,\n result: {}\n };\n }\n if (!this._dsDedup[dsID].result[dsTID]) {\n this._dsDedup[dsID].result[dsTID] = {\n refType,\n ref\n };\n }\n }\n\n getAll(): DDL2.DatasourceType[] {\n const retVal: DDL2.DatasourceType[] = [];\n for (const key in this._dsDedup) {\n const ddl = this._dsDedup[key].ds.toDDL();\n\n // Inputs ---\n if (ddl.type === \"roxie\" || ddl.type === \"hipie\" || ddl.type === \"rest\") {\n const inputs: { [fieldID: string]: DDL2.IField } = {};\n for (const key2 in this._dsDedup[key].result) {\n const ddl2 = this._dsDedup[key].result[key2].refType.toDDL();\n const refs: ReferencedFields = {\n inputs: {},\n outputs: {}\n };\n this._dsDedup[key].result[key2].ref.referencedFields(refs);\n for (const inElementID in refs.inputs) {\n refs.inputs[inElementID].forEach(fieldID => {\n inputs[fieldID] = (ddl2 as any).inputs.filter(row => row.id === fieldID)[0];\n });\n }\n }\n ddl.inputs = [];\n for (const key in inputs) {\n ddl.inputs.push(inputs[key]);\n }\n }\n\n // Outputs ---\n if (ddl.type === \"wuresult\" || ddl.type === \"roxie\" || ddl.type === \"hipie\" || ddl.type === \"rest\") {\n const outputs: { [fieldID: string]: DDL2.IOutput } = {};\n for (const key2 in this._dsDedup[key].result) {\n const ddl2 = this._dsDedup[key].result[key2].refType.toDDL();\n if (ddl2.type === \"wuresult\" || ddl2.type === \"roxie\" || ddl2.type === \"hipie\" || ddl2.type === \"rest\") {\n for (const outputID in ddl2.outputs) {\n outputs[outputID] = ddl2.outputs[outputID];\n }\n }\n }\n ddl.outputs = {};\n for (const key in outputs) {\n ddl.outputs[key] = outputs[key];\n }\n }\n retVal.push(ddl);\n }\n return retVal;\n }\n}\n\nexport class DDLAdapter {\n private _dashboard: Dashboard;\n private _ec: ElementContainer;\n private _dsWriteDedup: DDLDatasourceAdapter = new DDLDatasourceAdapter();\n private _dsReadDedup: { [id: string]: WU | RoxieService | RestService } = {};\n\n constructor(dashboard: Dashboard) {\n this._dashboard = dashboard;\n this._ec = this._dashboard.elementContainer();\n }\n\n writeDatasources(): DDL2.DatasourceType[] {\n for (const viz of this._ec.elements()) {\n this._dsWriteDedup.append(viz.hipiePipeline().datasource());\n }\n return this._dsWriteDedup.getAll();\n }\n\n writeFilters(filters: Filters): DDL2.IFilter {\n if (!filters.exists()) return undefined;\n return filters.toDDL();\n }\n\n readFilters(ddlFilter: DDL2.IFilter, ec: ElementContainer): Filters {\n return Filters.fromDDL(ec, ddlFilter);\n }\n\n writeProject(project: Project): DDL2.IProject {\n if (!project.exists()) return undefined;\n return project.toDDL();\n }\n\n readProject(ddlProject: DDL2.IProject): Project {\n return Project.fromDDL(ddlProject);\n }\n\n writeMappings(mappings: Mappings): DDL2.IMappings {\n if (!mappings.exists()) return { type: \"mappings\", transformations: [] };\n return mappings.toDDL();\n }\n\n readMappings(ddlProject: DDL2.IMappings): Mappings {\n return Mappings.fromDDL(ddlProject);\n }\n\n writeGroupBy(gb: GroupBy): DDL2.IGroupBy {\n if (!gb.exists()) return undefined;\n return gb.toDDL();\n }\n\n readGroupBy(ddlGB: DDL2.IGroupBy): GroupBy {\n return GroupBy.fromDDL(ddlGB);\n }\n\n writeSort(sort: Sort): DDL2.ISort {\n if (!sort.exists()) return undefined;\n return sort.toDDL();\n }\n\n readSort(ddlSort: DDL2.ISort): Sort {\n return Sort.fromDDL(ddlSort);\n }\n\n writeLimit(limit: Limit): DDL2.ILimit {\n if (!limit.exists()) return undefined;\n return limit.toDDL();\n }\n\n readLimit(ddlLimit: DDL2.ILimit): Limit {\n return Limit.fromDDL(ddlLimit);\n }\n\n readDatasourceRef(ddlDSRef: DDL2.IDatasourceRef, dsPicker: DSPicker, elementContainer: ElementContainer): this {\n if (DDL2.isWUResultRef(ddlDSRef)) {\n const wu = this._dsReadDedup[ddlDSRef.id] as WU;\n dsPicker.datasourceID(wu.output(ddlDSRef.output).id());\n } else if (DDL2.isRoxieServiceRef(ddlDSRef)) {\n dsPicker.datasourceID(`${ddlDSRef.id}_${ddlDSRef.output}`);\n const dsRef = dsPicker.datasourceRef() as RoxieResultRef | RestResultRef;\n dsRef\n .request(ddlDSRef.request.map(rf => {\n return Param.fromDDL(this._ec, rf);\n }))\n ;\n } else {\n dsPicker.datasourceID(ddlDSRef.id);\n }\n return this;\n }\n\n writeActivities(view: ActivityPipeline): DDL2.ActivityType[] {\n return view.activities().map(activity => {\n if (activity instanceof Filters) {\n return this.writeFilters(activity);\n } else if (activity instanceof Project) {\n return this.writeProject(activity);\n } else if (activity instanceof GroupBy) {\n return this.writeGroupBy(activity);\n } else if (activity instanceof Sort) {\n return this.writeSort(activity);\n } else if (activity instanceof Limit) {\n return this.writeLimit(activity);\n } else if (activity instanceof Mappings) {\n return this.writeMappings(activity);\n } else if (activity instanceof DSPicker) {\n // Fall through ---\n } else {\n logger.warning(`Unknown activity type: ${activity.classID()}`);\n }\n }).filter(activity => !!activity);\n }\n\n writeVisualization(visualization: Visualization): DDL2.IVisualization {\n return {\n id: visualization.chartPanel().id(),\n title: visualization.title(),\n description: visualization.description(),\n visibility: visualization.visibility(),\n chartType: visualization.chartType(),\n __class: visualization.chartPanel().widget().classID(),\n mappings: this.writeMappings(visualization.mappings()),\n properties: visualization.properties()\n };\n }\n\n readVisualization(ddlViz: DDL2.IVisualization, visualization: Visualization): this {\n const mappings = this.readMappings(ddlViz.mappings);\n visualization.chartPanel().id(ddlViz.id);\n visualization\n .title(ddlViz.title)\n .description(ddlViz.description)\n .visibility(ddlViz.visibility)\n .chartType(ddlViz.chartType as any)\n .properties(ddlViz.properties)\n .mappings(mappings)\n ;\n return this;\n }\n\n writeViewDatasource(dsRef: DatasourceRef) {\n const retVal = dsRef.toDDL();\n retVal.id = this._dsWriteDedup.resolveID(dsRef) || retVal.id;\n return retVal;\n }\n\n writeDDLViews(): DDL2.IView[] {\n // Gather referenced fields ---\n const refFields: ReferencedFields = { inputs: {}, outputs: {} };\n for (const element of this._ec.elements()) {\n element.visualization().mappings().referencedFields(refFields);\n }\n\n return this._ec.elements().map(element => {\n const view = element.hipiePipeline();\n const dsPicker = view.datasource();\n if (dsPicker instanceof DSPicker) {\n const dsRef = dsPicker.datasourceRef();\n const retVal = {\n id: element.id(),\n datasource: this.writeViewDatasource(dsRef),\n activities: this.writeActivities(view),\n visualization: this.writeVisualization(element.visualization())\n };\n return retVal;\n }\n throw new Error(\"Missing DSPicker?\");\n });\n }\n\n writeProperties(): DDL2.IProperties {\n return {\n name: PKG_NAME,\n version: PKG_VERSION,\n buildVersion: BUILD_VERSION,\n layout: this._dashboard.layout() as any\n };\n }\n\n readDDLViews(ddlViews: DDL2.IView[]) {\n for (const ddlView of ddlViews) {\n const element = new Element(this._ec).id(ddlView.id);\n this._ec.append(element);\n const hipiePipeline = element.hipiePipeline();\n this.readDatasourceRef(ddlView.datasource, hipiePipeline.datasource() as DSPicker, this._ec);\n for (const activity of ddlView.activities) {\n if (DDL2.isProjectActivity(activity)) {\n const project = this.readProject(activity);\n hipiePipeline.project(project);\n }\n if (DDL2.isFilterActivity(activity)) {\n const filters = this.readFilters(activity, this._ec);\n hipiePipeline.filters(filters);\n }\n if (DDL2.isGroupByActivity(activity)) {\n const groupBy = this.readGroupBy(activity);\n hipiePipeline.groupBy(groupBy);\n }\n if (DDL2.isSortActivity(activity)) {\n const sort = this.readSort(activity);\n hipiePipeline.sort(sort);\n }\n if (DDL2.isLimitActivity(activity)) {\n const limit = this.readLimit(activity);\n hipiePipeline.limit(limit);\n }\n }\n this.readVisualization(ddlView.visualization, element.visualization());\n }\n }\n\n readProperties(properties: DDL2.IProperties) {\n if (properties && properties.layout) {\n this._dashboard.layoutObj(properties.layout as object);\n }\n }\n\n write(): DDL2.Schema {\n this._dsWriteDedup.clear();\n const retVal: DDL2.Schema = {\n version: \"2.2.1\",\n createdBy: {\n name: PKG_NAME,\n version: PKG_VERSION\n },\n datasources: this.writeDatasources(),\n dataviews: this.writeDDLViews(),\n properties: this.writeProperties(),\n hipieProperties: this._dashboard.hipieProps()\n };\n return retVal;\n }\n\n read(ddl: DDL2.Schema) {\n this._dsWriteDedup.clear();\n for (const ddlDS of ddl.datasources) {\n switch (ddlDS.type) {\n case \"databomb\":\n this._ec.appendDatasource(Databomb.fromDDL(ddlDS));\n break;\n case \"form\":\n this._ec.appendDatasource(Form.fromDDL(ddlDS));\n break;\n case \"logicalfile\":\n this._ec.appendDatasource(LogicalFile.fromDDL(this._ec, ddlDS));\n break;\n case \"wuresult\":\n const wu = WU.fromDDL(this._ec, ddlDS);\n this._dsReadDedup[wu.id()] = wu;\n for (const resultName in ddlDS.outputs) {\n this._ec.appendDatasource(wu.output(resultName));\n }\n break;\n case \"roxie\":\n case \"hipie\":\n const rs = RoxieService.fromDDL(this._ec, ddlDS);\n this._dsReadDedup[rs.id()] = rs;\n for (const resultName in ddlDS.outputs) {\n this._ec.appendDatasource(RoxieResult.fromDDL(this._ec, rs, resultName));\n }\n break;\n case \"rest\":\n const rs2 = RestService.fromDDL(this._ec, ddlDS);\n this._dsReadDedup[rs2.id()] = rs2;\n for (const resultName in ddlDS.outputs) {\n this._ec.appendDatasource(RestResult.fromDDL(this._ec, rs2, resultName));\n }\n break;\n default:\n logger.warning(`Unknown ddl datasource type: ${(ddlDS as any).type} `);\n }\n }\n this.readDDLViews(ddl.dataviews);\n this.readProperties(ddl.properties);\n this._dashboard.hipieProps(ddl.hipieProperties);\n }\n}\n","import { PropertyExt } from \"@hpcc-js/common\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { classID2Meta, ClassMeta, isArray } from \"@hpcc-js/util\";\nimport { Activity, stringify } from \"./activities/activity.ts\";\nimport { Dashboard } from \"./dashboard.ts\";\nimport { DDLAdapter } from \"./ddl.ts\";\nimport { ElementContainer } from \"./model/element.ts\";\n\ntype WidgetImport = { [moduleID: string]: { [classID: string]: boolean } };\n\nclass Imports {\n _moduleMap: WidgetImport = {};\n\n append(widgetMeta: ClassMeta) {\n if (!this._moduleMap[widgetMeta.module]) {\n this._moduleMap[widgetMeta.module] = {};\n }\n this._moduleMap[widgetMeta.module][widgetMeta.class] = true;\n }\n\n write(): string {\n const importJS: string[] = [];\n for (const moduleID in this._moduleMap) {\n const classIDs: string[] = [];\n for (const classID in this._moduleMap[moduleID]) {\n classIDs.push(classID);\n }\n classIDs.sort();\n importJS.push(`import { ${classIDs.join(\", \")} } from \"${moduleID}\";`);\n }\n return importJS.join(\"\\n\");\n }\n}\n\nexport function createProps(pe: PropertyExt): { [key: string]: any } {\n const retVal: { [key: string]: any } = {};\n for (const meta of pe.publishedProperties()) {\n if (pe[meta.id + \"_modified\"]() && meta.id !== \"fields\") {\n const val = pe[meta.id]();\n switch (meta.type) {\n case \"propertyArray\":\n const serialization = val.map(createProps);\n if (serialization) {\n retVal[meta.id] = serialization;\n }\n break;\n default:\n retVal[meta.id] = val;\n }\n }\n }\n return retVal;\n}\n\nexport class JavaScriptAdapter {\n private _dashboard: Dashboard;\n private _ec: ElementContainer;\n private _ddlAdapter: DDLAdapter;\n private _ddlSchema: DDL2.Schema;\n\n constructor(dashboard: Dashboard) {\n this._dashboard = dashboard;\n this._ec = this._dashboard.elementContainer();\n this._ddlAdapter = new DDLAdapter(this._dashboard);\n this._ddlSchema = this._ddlAdapter.write();\n }\n\n createProps(prefix: string, pe: PropertyExt, postfix: string = \"\"): string[] {\n let retVal: string[] = [];\n for (const meta of pe.publishedProperties()) {\n if ((pe as any)[meta.id + \"_exists\"]()) {\n switch (meta.type) {\n case \"string\":\n case \"set\":\n retVal.push(`${prefix}.${meta.id}(\"${(pe as any)[meta.id]()}\")${postfix};`);\n break;\n case \"number\":\n case \"boolean\":\n retVal.push(`${prefix}.${meta.id}(${(pe as any)[meta.id]()})${postfix};`);\n break;\n case \"widget\":\n retVal = retVal.concat(this.createProps(`${prefix}.${meta.id}()`, (pe as any)[meta.id]()));\n break;\n case \"propertyArray\":\n if (meta.ext)\n retVal.push(`${prefix}.${meta.id}([${(pe as any)[meta.id]()}])${postfix};`);\n break;\n default:\n break;\n }\n }\n }\n return retVal;\n }\n\n writeMeta(dsDetails: Activity) {\n return \"\";\n }\n\n private safeID(id: string): string {\n if (!id) return id;\n return id.replace(/ /g, \"_\").replace(/\\./g, \"_\");\n }\n\n private datasourceRefID(view: DDL2.IView): string {\n const datasourceRef = view.datasource;\n if (DDL2.isRoxieServiceRef(datasourceRef)) {\n return `${this.safeID(datasourceRef.id)}_${this.safeID(datasourceRef.output)}_${this.safeID(view.id)}`;\n } else if (DDL2.isWUResultRef(datasourceRef)) {\n return `${this.safeID(datasourceRef.id)}_${this.safeID(datasourceRef.output)}`;\n }\n return `${this.safeID(datasourceRef.id)}`;\n }\n\n _dedup: { [key: string]: boolean } = {};\n private writeDatasource(view: DDL2.IView): string[] {\n const datasourceRef = view.datasource;\n const retVal: string[] = [];\n const datasource = this._ddlSchema.datasources.filter(ds => ds.id === datasourceRef.id)[0];\n const outputID = (datasourceRef as any).output;\n const id = this.datasourceRefID(view);\n if (!this._dedup[id]) {\n this._dedup[id] = true;\n switch (datasource.type) {\n case \"wuresult\":\n const wuID = this.safeID(view.datasource.id);\n if (!this._dedup[wuID]) {\n this._dedup[wuID] = true;\n retVal.push(` export const ${wuID} = new marshaller.WU()\n .url(\"${datasource.url}\")\n .wuid(\"${datasource.wuid}\")\n ;`);\n }\n retVal.push(` export const ${id} = new marshaller.WUResult()\n .wu(${wuID})\n .resultName(\"${outputID}\")\n .responseFields(${stringify(datasource.outputs[outputID].fields)})\n ;`);\n break;\n case \"logicalfile\":\n retVal.push(` export const ${id} = new marshaller.LogicalFile()\n .url(\"${datasource.url}\")\n .logicalFile(\"${datasource.logicalFile}\")\n .responseFields(${stringify(datasource.fields)})\n ;`);\n break;\n case \"hipie\":\n case \"roxie\":\n const serviceID = this.safeID(view.datasource.id);\n if (!this._dedup[serviceID]) {\n this._dedup[serviceID] = true;\n retVal.push(` export const ${serviceID} = new marshaller.RoxieService(ec)\n .url(\"${datasource.url}\")\n .querySet(\"${datasource.querySet}\")\n .queryID(\"${datasource.queryID}\")\n .requestFields(${stringify(datasource.inputs)})\n ;`);\n }\n const resultID = serviceID + \"_\" + this.safeID(outputID);\n if (!this._dedup[resultID]) {\n this._dedup[resultID] = true;\n retVal.push(` export const ${resultID} = new marshaller.RoxieResult(ec)\n .service(${serviceID})\n .resultName(\"${outputID}\")\n .responseFields(${stringify(datasource.outputs[outputID].fields)})\n ;`);\n }\n retVal.push(` export const ${id} = new marshaller.HipieResultRef(ec)\n .datasource(${resultID})\n .requestFieldRefs(${stringify((datasourceRef as DDL2.IRoxieServiceRef).request)})\n ;`);\n break;\n case \"databomb\":\n {\n retVal.push(` export const ${id} = new marshaller.Databomb()\n .format(\"${datasource.format}\")\n .payload(${JSON.stringify(datasource.payload)})\n ;`);\n }\n break;\n case \"form\":\n {\n const fromFields: string[] = [];\n for (const field of datasource.fields) {\n fromFields.push(`new marshaller.FormField().fieldID(\"${field.id}\").default(\"${field.default || \"\"}\")`);\n }\n retVal.push(` export const ${id} = new marshaller.Form()\n .formFields([\n ${fromFields.join(\",\\n \")}\n ])\n ;`);\n }\n break;\n }\n }\n return retVal;\n }\n\n private writeActivity(activity: DDL2.ActivityType): string {\n switch (activity.type) {\n case \"filter\":\n return `new marshaller.Filters(ec).conditions(${stringify(activity.conditions)})`;\n case \"project\":\n return `new marshaller.Project().transformations(${stringify(activity.transformations)})`;\n case \"groupby\":\n return `new marshaller.GroupBy().fieldIDs(${JSON.stringify(activity.groupByIDs)}).aggregates(${stringify(activity.aggregates)})`;\n case \"sort\":\n return `new marshaller.Sort().conditions(${stringify(activity.conditions)})`;\n case \"limit\":\n return `new marshaller.Limit().rows(${activity.limit})`;\n case \"mappings\":\n return `new marshaller.Mappings().transformations(${stringify(activity.transformations)})`;\n }\n }\n\n writeWidgetProps(pe: PropertyExt): string[] {\n const retVal: string[] = [];\n for (const meta of pe.publishedProperties()) {\n if ((pe as any)[meta.id + \"_modified\"]() && meta.id !== \"fields\") {\n retVal.push(`.${meta.id}(${JSON.stringify((pe as any)[meta.id]())})`);\n }\n }\n return retVal;\n }\n\n private joinWithPrefix(props: DDL2.IWidgetProperties, imports: Imports, joinStr: string, postFix: string): string {\n let retVal: string = \"\";\n let meta: ClassMeta;\n if (props.__class) {\n meta = classID2Meta(props.__class);\n imports.append(meta);\n retVal += `new ${meta.class}()`;\n }\n for (const prop in props) {\n if (prop === \"__class\") {\n } else if (isArray(props[prop])) {\n const arr = `${(props[prop] as any[]).map(item => this.joinWithPrefix(item, imports, joinStr + \" \", \"\")).join(`,${joinStr} `)}`;\n if (arr) {\n retVal += `${joinStr} .${prop}([${joinStr} ${arr}${joinStr} ])${postFix}`;\n }\n } else {\n retVal += `${joinStr} .${prop}(${JSON.stringify(props[prop])})${postFix}`;\n }\n }\n return retVal;\n }\n\n private writeWidget(dataview: DDL2.IView, imports: Imports): string {\n return ` export const ${dataview.visualization.id} = new marshaller.VizChartPanel()\n .id(\"${dataview.visualization.id}\")\n .title(\"${dataview.visualization.title}\")\n .widget(${this.joinWithPrefix(dataview.visualization.properties[\"widget\"] as any, imports, \"\\n \", \"\")})\n ;`;\n }\n\n private writeElement(dataview: DDL2.IView) {\n const activities: string[] = [`data.${this.datasourceRefID(dataview)}`];\n for (const activity of dataview.activities) {\n activities.push(this.writeActivity(activity));\n }\n const updates: string[] = [];\n for (const filteredViz of this._ec.filteredBy(dataview.id)) {\n updates.push(`${filteredViz.id()}.refresh();`);\n }\n return `\nconst ${dataview.id} = new marshaller.Element(ec)\n .id(\"${dataview.id}\")\n .pipeline([\n ${activities.join(\",\\n \")}\n ])\n .mappings(new marshaller.Mappings().transformations(${stringify(dataview.visualization.mappings.transformations)}))\n .chartPanel(viz.${dataview.visualization.id})\n .on(\"selectionChanged\", () => {\n ${updates.join(\"\\n \")}\n }, true)\n ;\n${dataview.id}.visualization()\n .visibility(\"${dataview.visualization.visibility}\")\n .secondaryDataviewID(\"${dataview.visualization.secondaryDataviewID || \"\"}\")\n ;\nec.append(${dataview.id});\n`;\n }\n\n private writeDatasources(): string[] {\n let retVal: string[] = [];\n for (const dataview of this._ddlSchema.dataviews) {\n retVal = retVal.concat(this.writeDatasource(dataview));\n }\n return retVal;\n }\n\n private writeWidgets(): { widgetImports: string, widgetDefs: string } {\n const jsDef: string[] = [];\n const imports = new Imports();\n for (const dataview of this._ddlSchema.dataviews) {\n jsDef.push(this.writeWidget(dataview, imports));\n }\n return {\n widgetImports: imports.write(),\n widgetDefs: jsDef.join(\"\\n\\n\")\n };\n }\n\n private writeElements(): string {\n let retVal = \"\";\n for (const dataview of this._ddlSchema.dataviews) {\n retVal += this.writeElement(dataview);\n }\n return retVal;\n }\n\n createJavaScript(): string {\n const widgets = this.writeWidgets();\n\n return `\\\n${widgets.widgetImports}\nimport * as marshaller from \"@hpcc-js/marshaller\";\n\n// Dashboard Element Container (Model) ---\nconst ec = new marshaller.ElementContainer();\n\nnamespace data {\n${this.writeDatasources().join(\"\\n\")}\n}\n\nnamespace viz {\n${widgets.widgetDefs}\n}\n\n// Dashboard Elements (Controller) ---\n${this.writeElements().trim()}\n\nec.refresh();\n\n// Optional ---\nconst errors = ec.validate();\nfor (const error of errors) {\n console.error(error.elementID + \" (\" + error.source + \"): \" + error.msg);\n}\n\nexport const dashboard = new marshaller.Dashboard(ec)\n .target(\"placeholder\")\n .titleVisible(false)\n .hideSingleTabs(true)\n .layoutObj(${stringify(this._dashboard.layout())})\n .render()\n ;\n\n// @ts-ignore\nconst ddl = ${JSON.stringify(this._ddlSchema)};\n`;\n }\n}\n","import { Button, Spacer, ToggleButton, Widget } from \"@hpcc-js/common\";\nimport { DDL1, DDL2, isDDL2Schema, upgrade } from \"@hpcc-js/ddl-shim\";\nimport { ChartPanel } from \"@hpcc-js/layout\";\nimport { text as d3Text } from \"d3-fetch\";\nimport { Activity } from \"./activities/activity.ts\";\nimport { Databomb } from \"./activities/databomb.ts\";\nimport { DSPicker } from \"./activities/dspicker.ts\";\nimport { Filters } from \"./activities/filter.ts\";\nimport { Form, FormField } from \"./activities/form.ts\";\nimport { GroupBy } from \"./activities/groupby.ts\";\nimport { Limit } from \"./activities/limit.ts\";\nimport { Project } from \"./activities/project.ts\";\nimport { Sort } from \"./activities/sort.ts\";\nimport { DashboardDockPanel } from \"./dashboardDockPanel.ts\";\nimport { DashboardGrid } from \"./dashboardGrid.ts\";\nimport { DDLAdapter } from \"./ddl.ts\";\nimport { JavaScriptAdapter } from \"./javascriptadapter.ts\";\nimport { Element, ElementContainer } from \"./model/element.ts\";\n\nimport \"../../src/ddl2/dashboard.css\";\n\nexport interface IDockPanel {\n layoutObj(_: object | null): this;\n layout();\n widgets();\n activate(element: Element);\n hideSingleTabs(bool?: boolean);\n syncWidgets();\n syncPopups();\n}\n\nexport class Dashboard extends ChartPanel {\n\n private _dockPanel: IDockPanel;\n\n private _designModeButton = new ToggleButton().faChar(\"fa-object-group\").tooltip(\"Design Mode...\")\n .selected(true)\n .on(\"click\", () => {\n if (this._dockPanel instanceof DashboardGrid) {\n this._dockPanel\n .designMode(this._designModeButton.selected())\n .lazyRender()\n ;\n }\n });\n\n private _addButton = new Button().faChar(\"fa-plus\").tooltip(\"Add...\")\n .on(\"click\", () => {\n const newElem = new Element(this._ec);\n this._ec.append(newElem);\n this.renderPromise().then(() => {\n newElem.refresh().then(() => {\n this.activate(newElem);\n });\n });\n });\n\n private _removeButton = new Button().faChar(\"fa-minus\").tooltip(\"Remove...\")\n .enabled(false)\n .on(\"click\", () => {\n const elem = this._prevActive;\n if (elem && window.confirm(`Remove Widget \"${elem.id()}\"?`)) {\n this._ec.clear(elem.id());\n this.renderPromise().then(() => {\n this.vizActivation(undefined);\n });\n }\n });\n\n private _reloadButton = new Button().faChar(\"fa-refresh\").tooltip(\"Reload...\")\n .on(\"click\", () => {\n const json = this.save();\n this._ec.clear();\n this.vizActivation(undefined);\n this.renderPromise().then(() => {\n this.restore(json);\n this.renderPromise().then(() => {\n this._ec.refresh().then(() => {\n });\n });\n });\n });\n\n private _addSamples = new Button().faChar(\"fa-database\").tooltip(\"Add Samples\")\n .on(\"click\", () => {\n Promise.all([\n d3Text(\"https://raw.githubusercontent.com/hpcc-systems/Visualization/candidate-2.x.x/utils/data/data/airports.csv\"),\n d3Text(\"https://raw.githubusercontent.com/hpcc-systems/Visualization/candidate-2.x.x/utils/data/data/carriers.csv\"),\n d3Text(\"https://raw.githubusercontent.com/hpcc-systems/Visualization/candidate-2.x.x/utils/data/data/stats.csv\")\n ]).then(([airports, carriers, stats]) => {\n const popupElement = this.addForm(\"popup\", {\n type: \"form\",\n id: \"global_filter\",\n fields: [{\n type: \"string\",\n id: \"Airport\"\n }, {\n type: \"string\",\n id: \"Airline\"\n }]\n });\n popupElement.visualization()\n .title(\"Global Filter\")\n .visibility(\"flyout\")\n .chartType(\"FieldForm\")\n ;\n const airportsElement = this.addDatabomb(\"airports\", airports, \"csv\",\n [\n new FormField().fieldID(\"code\").type(\"string\"),\n new FormField().fieldID(\"name\").type(\"string\"),\n new FormField().fieldID(\"count\").type(\"number\")\n ],\n new Filters(this._ec).remoteFilter([\n new Filters.Filter().source(popupElement.id()).mappings([new Filters.Mapping().remoteField(\"Airport\").localField(\"code\").nullable(true)])\n ]),\n new Sort().column([new Sort.Column().fieldID(\"count\").descending(true)])\n );\n airportsElement.chartPanel().title(\"Airports\");\n const carrierElement = this.addDatabomb(\"carriers\", carriers, \"csv\",\n [\n new FormField().fieldID(\"code\").type(\"string\"),\n new FormField().fieldID(\"name\").type(\"string\"),\n new FormField().fieldID(\"count\").type(\"number\")\n ],\n new Filters(this._ec).remoteFilter([\n new Filters.Filter().source(popupElement.id()).mappings([new Filters.Mapping().remoteField(\"Airline\").localField(\"code\").nullable(true)])\n ]),\n new Sort().column([new Sort.Column().fieldID(\"count\").descending(true)])\n );\n carrierElement.chartPanel().title(\"Airlines\");\n const statsElement = this.addDatabomb(\"stats\", stats, \"csv\",\n [],\n new Filters(this._ec).remoteFilter([\n new Filters.Filter().source(airportsElement.id()).mappings([new Filters.Mapping().remoteField(\"code\").localField(\"airport\")]),\n new Filters.Filter().source(carrierElement.id()).mappings([new Filters.Mapping().remoteField(\"code\").localField(\"carrier\").nullable(true)])\n ]));\n statsElement.chartPanel().title(\"Stats\");\n return Promise.all([\n popupElement.refresh(),\n airportsElement.refresh(),\n carrierElement.refresh(),\n statsElement.refresh()\n ]);\n }).then(() => {\n this.render();\n });\n });\n\n addDatabomb(label: string, payload: string, format: \"csv\" | \"tsv\" | \"json\" = \"csv\", databombFields: FormField[], ...activities: Activity[]): Element {\n const databomb = new Databomb().id(label).format(format).payload(payload);\n if (databombFields.length > 0) {\n databomb.databombFields(databombFields);\n }\n this._ec.appendDatasource(databomb);\n const newElem = new Element(this._ec);\n const ds = newElem.hipiePipeline().datasource();\n if (ds instanceof DSPicker) {\n ds.datasourceID(databomb.id());\n }\n for (const activity of activities) {\n if (activity instanceof Filters) {\n newElem.hipiePipeline().filters(activity);\n } else if (activity instanceof Project) {\n newElem.hipiePipeline().project(activity);\n } else if (activity instanceof GroupBy) {\n newElem.hipiePipeline().groupBy(activity);\n } else if (activity instanceof Sort) {\n newElem.hipiePipeline().sort(activity);\n } else if (activity instanceof Limit) {\n newElem.hipiePipeline().limit(activity);\n }\n }\n this._ec.append(newElem);\n return newElem;\n }\n\n addForm(label: string, ddl: DDL2.IForm): Element {\n const databomb = new Form().id(label).fromDDL(ddl);\n this._ec.appendDatasource(databomb);\n const newElem = new Element(this._ec);\n const ds = newElem.hipiePipeline().datasource();\n if (ds instanceof DSPicker) {\n ds.datasourceID(databomb.id());\n }\n this._ec.append(newElem);\n return newElem;\n }\n\n static create(target: string, ddl: DDL2.Schema): Promise<Dashboard> {\n return new Promise((resolve, reject) => {\n const ec = new ElementContainer();\n const dashboard = new Dashboard(ec)\n .target(target)\n .hideSingleTabs(true)\n .titleVisible(false)\n .restore(ddl)\n .render(w => {\n ec.refresh().then(() => {\n resolve(dashboard);\n });\n });\n });\n }\n\n constructor(private _ec: ElementContainer) {\n super();\n this._ec.on(\"vizStateChanged\", (viz) => {\n this.vizStateChanged(viz);\n });\n this.buttons([this._designModeButton, new Spacer(), this._addButton, this._removeButton, new Spacer(), this._reloadButton, new Spacer(), this._addSamples]);\n this.ensureDockPanel(\"dock\");\n }\n\n ensureDockPanel(mode: \"dock\" | \"grid\" = \"dock\") {\n if ((mode === \"dock\" && !(this._dockPanel instanceof DashboardDockPanel)) || (mode === \"grid\" && !(this._dockPanel instanceof DashboardGrid))) {\n this._dockPanel = (mode === \"dock\" ? new DashboardDockPanel(this._ec) : new DashboardGrid(this._ec).designMode(this.titleVisible()))\n .on(\"vizActivation\", (elem: Element) => {\n this.vizActivation(elem);\n })\n ;\n this.widget(this._dockPanel as any);\n }\n }\n\n elementContainer(): ElementContainer {\n return this._ec;\n }\n\n private _hipieProps;\n hipieProps(): DDL2.IProperties;\n hipieProps(_: DDL2.IProperties): this;\n hipieProps(_?: DDL2.IProperties): DDL2.IProperties | this {\n if (!arguments.length) return this._hipieProps;\n this._hipieProps = _;\n return this;\n }\n\n ddl(): DDL2.Schema;\n ddl(_: DDL2.Schema): this;\n ddl(_?: DDL2.Schema): DDL2.Schema | this {\n const ddlAdapter = new DDLAdapter(this);\n if (!arguments.length) return ddlAdapter.write();\n this._ec.clear();\n ddlAdapter.read(_);\n return this;\n }\n\n // Used to delay load a layout after a render...\n layoutObj(_: object | null): this {\n this._dockPanel.layoutObj(_);\n return this;\n }\n\n save(): DDL2.Schema {\n const ddlAdapter = new DDLAdapter(this);\n return ddlAdapter.write();\n }\n\n serializeDDL(): string {\n return JSON.stringify(this.save());\n }\n\n deserializeDDL(json: string): this {\n return this.restore(JSON.parse(json) as DDL2.Schema);\n }\n\n restore(_: DDL2.Schema, render: boolean = false): this {\n this.ensureDockPanel(_ && _.properties && _.properties.layout instanceof Array ? \"grid\" : \"dock\");\n this._ec.clear();\n const ddlAdapter = new DDLAdapter(this);\n ddlAdapter.read(_);\n if (render) {\n this.renderPromise().then(() => {\n this._ec.refresh();\n });\n }\n return this;\n }\n\n importDDL(ddl: DDL1.DDLSchema | DDL2.Schema, baseUrl?: string, wuid?: string, dermatologyJson: object = {}): this {\n const ddl2: DDL2.Schema = isDDL2Schema(ddl) ? ddl : upgrade(ddl, baseUrl, wuid, true, dermatologyJson);\n return this.restore(ddl2, true);\n }\n\n javascript(): string {\n const jsAdapter = new JavaScriptAdapter(this);\n return jsAdapter.createJavaScript();\n }\n\n layout() {\n return this._dockPanel.layout();\n }\n\n widgets(): Widget[] {\n return this._dockPanel.widgets();\n }\n\n activate(element: Element) {\n this._dockPanel.activate(element);\n }\n\n hideSingleTabs(): boolean;\n hideSingleTabs(_: boolean): this;\n hideSingleTabs(_?: boolean): boolean | this {\n if (!arguments.length) return this._dockPanel.hideSingleTabs();\n this._dockPanel.hideSingleTabs(_);\n return this;\n }\n\n updateButtonState() {\n this._designModeButton.enabled(this._dockPanel instanceof DashboardGrid).render();\n this._removeButton.enabled(this._prevActive !== undefined).render();\n }\n\n update(domNode: HTMLElement, element) {\n this._dockPanel.syncWidgets();\n super.update(domNode, element);\n this.updateButtonState();\n }\n\n private _prevActive: Element;\n vizActivation(viz: Element) {\n this._prevActive = viz;\n this._removeButton.enabled(viz !== undefined).render();\n }\n\n vizStateChanged(viz: Element) {\n }\n\n render(callback?): this {\n this._dockPanel.syncPopups();\n return super.render(w => {\n if (callback) {\n callback(w);\n }\n });\n }\n}\nDashboard.prototype._class += \" dashboard_dashboard\";\n","import { JSONEditor } from \"@hpcc-js/codemirror\";\nimport { DDL2, validate2 } from \"@hpcc-js/ddl-shim\";\nimport { Table } from \"@hpcc-js/dgrid\";\nimport { SplitPanel } from \"@hpcc-js/phosphor\";\n\nimport \"../../src/ddl2/ddleditor.css\";\n\nexport class DDLEditor extends SplitPanel {\n summary: string = \"0 Errors\";\n _ddlEditor = new JSONEditor().on(\"changes\", (changes) => {\n this.checkSyntax();\n });\n _errorTable = new Table()\n .columns([\"dataPath\", \"keyword\", \"message\", \"params\"])\n ;\n\n ddl(): object;\n ddl(_: object): this;\n ddl(_?: object): object | this {\n if (!arguments.length) return this._ddlEditor.json();\n this._ddlEditor.json(_);\n this.checkSyntax();\n return this;\n }\n\n checkSyntax() {\n try {\n const json = this.ddl();\n try {\n const { success, errors } = validate2(json as DDL2.Schema);\n if (success) {\n this._errorTable.data([]);\n } else {\n this._errorTable.data(errors.map(error => [error.instancePath, error.keyword, error.message, JSON.stringify(error.params)]));\n }\n } catch (e) {\n this._errorTable.data([[\"\", \"Validation Failed\", \"\", \"\"]]);\n }\n } catch (e) {\n this._errorTable.data([[\"ALL\", \"Invalid JSON\", \"\", \"\"]]);\n }\n if (this._renderCount) {\n this._errorTable.lazyRender();\n }\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this\n .addWidget(this._ddlEditor)\n .addWidget(this._errorTable)\n ;\n }\n\n update(domNode, _element) {\n super.update(domNode, _element);\n }\n\n}\nDDLEditor.prototype._class += \" codemirror_DDLEditor\";\n","import { Widget } from \"@hpcc-js/common\";\nimport { Edge, IGraphData, Lineage, Subgraph, Vertex } from \"@hpcc-js/graph\";\nimport { Activity } from \"./activities/activity.ts\";\nimport { Databomb } from \"./activities/databomb.ts\";\nimport { DSPicker } from \"./activities/dspicker.ts\";\nimport { Form } from \"./activities/form.ts\";\nimport { LogicalFile } from \"./activities/logicalfile.ts\";\nimport { RestResult, RestResultRef } from \"./activities/rest.ts\";\nimport { RoxieResult, RoxieResultRef } from \"./activities/roxie.ts\";\nimport { WUResult } from \"./activities/wuresult.ts\";\nimport { Element, ElementContainer, State } from \"./model/element.ts\";\nimport { Visualization } from \"./model/visualization.ts\";\nimport { VizChartPanel } from \"./model/vizChartPanel.ts\";\n\nexport interface VertexData {\n view?: Element;\n activity?: Activity;\n visualization?: Visualization;\n chartPanel?: VizChartPanel;\n state?: State;\n}\n\nexport class GraphAdapter {\n private subgraphMap: { [key: string]: Subgraph } = {};\n private vertexMap: { [key: string]: Vertex } = {};\n private edgeMap: { [key: string]: Edge } = {};\n private hierarchy: Lineage[] = [];\n private vertices: Widget[] = [];\n private edges: Edge[] = [];\n\n constructor(private _ec: ElementContainer) {\n }\n\n clear() {\n this.subgraphMap = {};\n this.vertexMap = {};\n this.edgeMap = {};\n\n this.hierarchy = [];\n this.vertices = [];\n this.edges = [];\n }\n\n createSubgraph(id: string, label: string, data?: VertexData): Subgraph {\n let retVal: Subgraph = this.subgraphMap[id];\n if (!retVal) {\n retVal = new Subgraph()\n // .classed({ subgraph: true })\n // .showIcon(false)\n .columns([\"DS\"])\n .data([[data]])\n ;\n this.subgraphMap[id] = retVal;\n }\n this.vertices.push(retVal);\n retVal.title(`${label}`);\n retVal.getBBox(true);\n return retVal;\n }\n\n createVertex(id: string, label: string, data?: VertexData, tooltip: string = \"\", fillColor: string = \"#dcf1ff\"): Vertex {\n let retVal: Vertex = this.vertexMap[id];\n if (!retVal) {\n retVal = new Vertex()\n .columns([\"DS\"])\n .data([[data]])\n .icon_diameter(0)\n ;\n this.vertexMap[id] = retVal;\n }\n this.vertices.push(retVal);\n retVal\n .textbox_shape_colorFill(fillColor)\n .text(tooltip ? `${label}\\n${tooltip}` : `${label}`)\n .tooltip(tooltip)\n ;\n retVal.getBBox(true);\n return retVal;\n }\n\n createEdge(sourceID: string, targetID: string) {\n const edgeID = `${sourceID}->${targetID}`;\n let retVal = this.edgeMap[edgeID];\n if (!retVal) {\n retVal = new Edge()\n .sourceVertex(this.vertexMap[sourceID])\n .targetVertex(this.vertexMap[targetID])\n ;\n this.edgeMap[edgeID] = retVal;\n }\n this.edges.push(retVal);\n return retVal;\n }\n\n createDatasource(dsDetails: Activity): string {\n if (dsDetails instanceof DSPicker) {\n dsDetails = dsDetails.selection().datasource();\n }\n if (dsDetails instanceof WUResult) {\n const serverID = `${dsDetails.url()}`;\n const server: Subgraph = this.createSubgraph(serverID, `${serverID}`);\n const wuID = `${dsDetails.url()}/${dsDetails.wuid()}`;\n const wu: Subgraph = this.createSubgraph(wuID, `${dsDetails.wuid()}`);\n this.hierarchy.push({ parent: server, child: wu });\n const resultID = `${wuID}/${dsDetails.resultName()}`;\n const result: Vertex = this.createVertex(resultID, dsDetails.resultName(), { activity: dsDetails });\n this.hierarchy.push({ parent: wu, child: result });\n return resultID;\n } else if (dsDetails instanceof LogicalFile) {\n const serverID = `${dsDetails.url()}`;\n const server: Subgraph = this.createSubgraph(serverID, `${serverID}`);\n const lfID = `${serverID}/${dsDetails.logicalFile()}`;\n const lf: Vertex = this.createVertex(lfID, dsDetails.logicalFile(), { activity: dsDetails });\n this.hierarchy.push({ parent: server, child: lf });\n return lfID;\n } else if (dsDetails instanceof RoxieResultRef) {\n const serverID = `${dsDetails.url()}`;\n const server: Subgraph = this.createSubgraph(serverID, `${serverID}`);\n const surfaceID = dsDetails.serviceID(); // `${dsDetails.url()}/${dsDetails.querySet()}`;\n const surface: Subgraph = this.createSubgraph(surfaceID, dsDetails.querySet());\n this.hierarchy.push({ parent: server, child: surface });\n const roxieID = surfaceID;\n this.hierarchy.push({\n parent: surface,\n child: this.createVertex(roxieID, dsDetails.queryID())\n });\n const roxieResultID = `${surfaceID}/${dsDetails.resultName()}`;\n this.hierarchy.push({\n parent: surface,\n child: this.createVertex(roxieResultID, dsDetails.resultName(), { activity: dsDetails })\n });\n this.createEdge(roxieID, roxieResultID);\n return roxieResultID;\n } else if (dsDetails instanceof RoxieResult) {\n const serverID = `${dsDetails.service().url()}`;\n const server: Subgraph = this.createSubgraph(serverID, `${serverID}`);\n const querySetID = dsDetails.serviceID();\n const querySet: Subgraph = this.createSubgraph(querySetID, dsDetails.service().querySet());\n this.hierarchy.push({ parent: server, child: querySet });\n const queryID = `${querySetID}/${dsDetails.service().queryID()}`;\n const query: Subgraph = this.createSubgraph(queryID, dsDetails.service().queryID());\n this.hierarchy.push({ parent: querySet, child: query });\n const resultID = `${queryID}/${dsDetails.resultName()}`;\n this.hierarchy.push({\n parent: query,\n child: this.createVertex(resultID, dsDetails.resultName(), { activity: dsDetails })\n });\n this.createEdge(queryID, resultID);\n return resultID;\n } else if (dsDetails instanceof RestResultRef) {\n const serverID = `${dsDetails.url()}`;\n const server: Subgraph = this.createSubgraph(serverID, `${serverID}`);\n const surfaceID = dsDetails.serviceID();\n const surface: Subgraph = this.createSubgraph(surfaceID, dsDetails.action());\n this.hierarchy.push({ parent: server, child: surface });\n const roxieID = surfaceID;\n this.hierarchy.push({\n parent: surface,\n child: this.createVertex(roxieID, dsDetails.action())\n });\n const roxieResultID = `${surfaceID}/${dsDetails.resultName()}`;\n this.hierarchy.push({\n parent: surface,\n child: this.createVertex(roxieResultID, dsDetails.resultName(), { activity: dsDetails })\n });\n this.createEdge(roxieID, roxieResultID);\n return roxieResultID;\n } else if (dsDetails instanceof RestResult) {\n const serverID = `${dsDetails.service().url()}`;\n const server: Subgraph = this.createSubgraph(serverID, `${serverID}`);\n const serviceID = dsDetails.serviceID();\n const actionID = `${serverID}/${dsDetails.service().action()}`;\n const action: Subgraph = this.createSubgraph(serviceID, dsDetails.service().action());\n this.hierarchy.push({ parent: server, child: action });\n const resultID = `${actionID}/${dsDetails.resultName()}`;\n this.hierarchy.push({\n parent: action,\n child: this.createVertex(resultID, dsDetails.resultName(), { activity: dsDetails })\n });\n this.createEdge(actionID, resultID);\n return resultID;\n } else if (dsDetails instanceof Form) {\n const id = dsDetails.hash();\n this.createVertex(id, dsDetails.label(), { activity: dsDetails });\n return id;\n } else if (dsDetails instanceof Databomb) {\n const id = dsDetails.id();\n this.createVertex(id, dsDetails.label(), { activity: dsDetails });\n return id;\n } else {\n const id = dsDetails.hash();\n this.createVertex(id, dsDetails.label(), { activity: dsDetails });\n return id;\n }\n }\n\n createActivity(sourceID: string, view: Element, activity: Activity, label?: string): string {\n const surface: Subgraph = this.createSubgraph(view.id(), `${view.id()}`, { view });\n let fillColor = null;\n let tooltip = \"\";\n if (activity.exists()) {\n const errors = activity.validate();\n if (errors.length) {\n fillColor = \"pink\";\n tooltip = errors.map(error => `${error.source}: ${error.msg}`).join(\"\\n\");\n }\n } else {\n fillColor = \"lightgrey\";\n }\n const vertex: Vertex = this.createVertex(activity.id(), label || `${activity.classID()}`, { view, activity }, tooltip, fillColor);\n if (sourceID) {\n this.createEdge(sourceID, activity.id());\n }\n this.hierarchy.push({ parent: surface, child: vertex });\n return activity.id();\n }\n\n createGraph(): IGraphData {\n this.hierarchy = [];\n this.vertices = [];\n this.edges = [];\n\n this._ec.elements().forEach(e => {\n this.createDatasource(e.hipiePipeline().datasource());\n });\n\n const lastID: { [key: string]: string } = {};\n for (const view of this._ec.elements()) {\n const pipeline = view.hipiePipeline();\n let prevID = this.createDatasource(pipeline.datasource());\n for (const activity of pipeline.activities()) {\n prevID = this.createActivity(prevID, view, activity);\n }\n const visualization = view.visualization();\n const mappings = visualization.mappings();\n const mappingVertexID = this.createActivity(prevID, view, mappings, \"Mappings\");\n const vizSubgraphID = `${visualization.id()}-sg`;\n const surface: Subgraph = this.createSubgraph(vizSubgraphID, \"Visualization\", { visualization });\n this.hierarchy.push({\n parent: this.subgraphMap[view.id()],\n child: surface\n });\n this.hierarchy.push({\n parent: surface,\n child: this.vertexMap[mappings.id()]\n });\n const vizVertexID = `${visualization.id()}-viz`;\n const widgetVertex: Vertex = this.createVertex(vizVertexID, visualization.chartPanel().widget().classID(), { view, chartPanel: visualization.chartPanel() });\n this.createEdge(mappingVertexID, vizVertexID);\n this.hierarchy.push({\n parent: surface,\n child: widgetVertex\n });\n const stateVertexID = `${visualization.id()}-state`;\n const stateVertex: Vertex = this.createVertex(stateVertexID, \"Selection\", { view, state: view.state() });\n this.createEdge(vizVertexID, stateVertexID)\n .weight(10)\n .strokeDasharray(\"1,5\")\n .text(\"updates\")\n ;\n this.createEdge(prevID, stateVertexID);\n this.hierarchy.push({\n parent: this.subgraphMap[view.id()],\n child: stateVertex\n });\n prevID = stateVertexID;\n lastID[pipeline.id()] = prevID;\n }\n\n // Mapping Secondary Sources ---\n for (const view of this._ec.elements()) {\n const visualization = view.visualization();\n const secondaryElement = this._ec.element(visualization.secondaryDataviewID());\n if (secondaryElement) {\n const mappings = secondaryElement.visualization().mappings();\n this.createEdge(mappings.id(), `${visualization.id()}-viz`);\n }\n }\n\n for (const viz of this._ec.elements()) {\n const view = viz.hipiePipeline();\n for (const updateInfo of view.updatedByGraph()) {\n this.createEdge(lastID[this._ec.element(updateInfo.from).hipiePipeline().id()], updateInfo.to.id())\n .weight(10)\n .strokeDasharray(\"1,5\")\n .text(\"updates\")\n ;\n }\n }\n\n return {\n vertices: this.vertices,\n edges: this.edges,\n hierarchy: this.hierarchy\n };\n }\n}\n","import { Button, Spacer } from \"@hpcc-js/common\";\nimport { Table } from \"@hpcc-js/dgrid\";\nimport { ChartPanel } from \"@hpcc-js/layout\";\nimport { CommandRegistry, ContextMenu } from \"@hpcc-js/phosphor\";\nimport { text as d3Text } from \"d3-fetch\";\nimport { Databomb } from \"./activities/databomb.ts\";\nimport { DatasourceRefType } from \"./activities/datasource.ts\";\nimport { DSPicker } from \"./activities/dspicker.ts\";\nimport { Form, FormField } from \"./activities/form.ts\";\nimport { LogicalFile } from \"./activities/logicalfile.ts\";\nimport { RestField, RestResult, RestService } from \"./activities/rest.ts\";\nimport { RoxieResult, RoxieService } from \"./activities/roxie.ts\";\nimport { WU, WUResult } from \"./activities/wuresult.ts\";\nimport { ElementContainer } from \"./model/element.ts\";\n\nexport class DSTable extends ChartPanel {\n\n private _addButton = new Button().faChar(\"fa-plus\").tooltip(\"Add...\")\n .on(\"click\", () => {\n const node = this._addButton.element().node();\n const rect = node.getBoundingClientRect();\n if (this._contextMenu.open({\n target: node,\n currentTarget: node,\n clientX: rect.left,\n clientY: rect.bottom\n })) {\n }\n });\n\n private _removeButton = new Button().faChar(\"fa-minus\").tooltip(\"Remove...\")\n .enabled(false)\n .on(\"click\", () => {\n this.remove();\n });\n\n private _cloneButton = new Button().faChar(\"fa-clone\").tooltip(\"Clone...\")\n .enabled(false)\n .on(\"click\", () => {\n if (this._selectedDS2) {\n if (this._selectedDS2 instanceof Databomb) {\n this.add(Databomb.fromDDL(this._selectedDS2.toDDL(), true));\n } else if (this._selectedDS2 instanceof Form) {\n this.add(Form.fromDDL(this._selectedDS2.toDDL(), true));\n } else if (this._selectedDS2 instanceof LogicalFile) {\n this.add(LogicalFile.fromDDL(this._ec, this._selectedDS2.toDDL(), true));\n } else if (this._selectedDS2 instanceof RestResult) {\n this.add(new RestResult(this._ec)\n .service(RestService.fromDDL(this._ec, this._selectedDS2.service().toDDL(), true))\n .resultName(this._selectedDS2.resultName())\n );\n } else if (this._selectedDS2 instanceof WUResult) {\n this.add(new WUResult(this._ec)\n .wu(WU.fromDDL(this._ec, this._selectedDS2.wu().toDDL(), true))\n .resultName(this._selectedDS2.resultName())\n );\n } else if (this._selectedDS2 instanceof RoxieResult) {\n this.add(new RoxieResult(this._ec)\n .service(RoxieService.fromDDL(this._ec, this._selectedDS2.service().toDDL(), true))\n .resultName(this._selectedDS2.resultName())\n );\n } else {\n console.warn(\"Unknown datasoure type\");\n }\n }\n });\n\n private _addSamples = new Button().faChar(\"fa-database\").tooltip(\"Add Samples\")\n .on(\"click\", () => {\n d3Text(\"https://raw.githubusercontent.com/hpcc-systems/Visualization/candidate-2.x.x/utils/data/data/airports.csv\").then(csv => {\n this.add(new Databomb().format(\"csv\").payload(csv));\n });\n d3Text(\"https://raw.githubusercontent.com/hpcc-systems/Visualization/candidate-2.x.x/utils/data/data/carriers.csv\").then(csv => {\n this.add(new Databomb().format(\"csv\").payload(csv));\n });\n d3Text(\"https://raw.githubusercontent.com/hpcc-systems/Visualization/candidate-2.x.x/utils/data/data/stats.csv\").then(csv => {\n this.add(new Databomb().format(\"csv\").payload(csv));\n });\n this.add(new RestResult(this._ec)\n .service(new RestService(this._ec)\n .url(\"https://cmsapi.pulselive.com/\")\n .action(\"rugby/rankings/mru\")\n .requestFields([\n new RestField().fieldID(\"xxx\"),\n new RestField().fieldID(\"date\")\n ]))\n .resultName(\"entries\")\n );\n this.add(new WUResult(this._ec)\n .wu(new WU(this._ec).url(\"http://localhost:8010\").wuid(\"W20190802-112509\"))\n .resultName(\"Result 1\")\n );\n this.add(new LogicalFile(this._ec)\n .url(\"http://localhost:8010\")\n .logicalFile(\"progguide::exampledata::peopleaccts\")\n );\n this.add(new LogicalFile(this._ec)\n .url(\"http://localhost:8010\")\n .logicalFile(\"progguide::exampledata::people\")\n );\n const vmRoxie = new RoxieService(this._ec)\n .url(\"http://localhost:8002\")\n .querySet(\"roxie\")\n .queryID(\"peopleaccounts\")\n ;\n this.add(new RoxieResult(this._ec)\n .service(vmRoxie)\n .resultName(\"Accounts\")\n );\n this.add(new Form()\n .formFields([\n new FormField().type(\"number\").fieldID(\"id\").value(8),\n new FormField().fieldID(\"first_name\").value(\"John\"),\n new FormField().fieldID(\"last_name\").value(\"Doe\"),\n new FormField().fieldID(\"gender\").default(\"M\"),\n new FormField().type(\"number\").fieldID(\"age\")\n ])\n );\n this.render();\n });\n\n private _dstable = new Table();\n private _selectedDS;\n private _selectedDS2;\n\n private _contextMenu;\n\n constructor(private _ec: ElementContainer) {\n super();\n this\n .buttons([this._addButton, this._removeButton, new Spacer(), this._cloneButton, new Spacer(), this._addSamples])\n .widget(this._dstable)\n .columns([\"ID\", \"Type\", \"References\"])\n .on(\"click\", (row, col, sel) => {\n this._selectedDS2 = row.__lparam;\n if (sel && row.References === 0 && row.ID !== \"Empty\") {\n this._selectedDS = row.__lparam;\n } else {\n delete this._selectedDS;\n }\n this._removeButton.enabled(this._selectedDS !== undefined).render();\n this._cloneButton.enabled(this._selectedDS2 !== undefined).render();\n })\n ;\n\n this.initMenu();\n }\n\n initMenu() {\n const commands = new CommandRegistry();\n\n // Dashboard Commands ---\n commands.addCommand(\"add_wu_result\", {\n label: \"Workunit Result\",\n execute: () => {\n this.add(new WUResult(this._ec));\n }\n });\n\n commands.addCommand(\"add_logicalfile\", {\n label: \"Logical File\",\n execute: () => {\n this.add(new LogicalFile(this._ec));\n }\n });\n\n commands.addCommand(\"add_roxie\", {\n label: \"Roxie Service\",\n execute: () => {\n this.add(new RoxieResult(this._ec));\n }\n });\n\n commands.addCommand(\"add_rest\", {\n label: \"Rest\",\n execute: () => {\n this.add(new RestResult(this._ec));\n }\n });\n\n commands.addCommand(\"add_databomb\", {\n label: \"Databomb\",\n execute: () => {\n this.add(new Databomb());\n }\n });\n\n commands.addCommand(\"add_form\", {\n label: \"Form\",\n execute: () => {\n this.add(new Form());\n }\n });\n\n this._contextMenu = new ContextMenu({ commands });\n this._contextMenu.addItem({ command: \"add_wu_result\", selector: \".common_Button\" });\n this._contextMenu.addItem({ command: \"add_logicalfile\", selector: \".common_Button\" });\n this._contextMenu.addItem({ command: \"add_roxie\", selector: \".common_Button\" });\n this._contextMenu.addItem({ command: \"add_rest\", selector: \".common_Button\" });\n this._contextMenu.addItem({ command: \"add_databomb\", selector: \".common_Button\" });\n this._contextMenu.addItem({ command: \"add_form\", selector: \".common_Button\" });\n }\n\n add(ds: DatasourceRefType) {\n this._ec.appendDatasource(ds);\n this.render();\n }\n\n remove() {\n if (this._selectedDS) {\n this._ec.removeDatasource(this._selectedDS);\n this.render();\n }\n }\n\n private _prevDataID;\n render(callback?) {\n const refs = {};\n this._ec.elements().forEach(e => {\n let ds = e.hipiePipeline().datasource();\n if (ds instanceof DSPicker) {\n ds = ds.datasource();\n }\n if (refs[ds.id()] === undefined) {\n refs[ds.id()] = 0;\n }\n refs[ds.id()]++;\n });\n const data = this._ec.datasources().filter(ds => ds.id() !== \"Empty\").map(ds => {\n if (refs[ds.id()] === undefined) {\n refs[ds.id()] = 0;\n }\n return [ds.id(), ds.classID(), refs[ds.id()] || 0, ds];\n });\n const dataID = JSON.stringify(refs);\n if (this._prevDataID !== dataID) {\n this._prevDataID = dataID;\n this.data(data);\n }\n return super.render(callback);\n }\n}\n","import { Table } from \"@hpcc-js/dgrid\";\nimport { ChartPanel } from \"@hpcc-js/layout\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { ElementContainer } from \"./model/element.ts\";\n\nexport class DVTable extends ChartPanel {\n\n private _dvtable = new Table();\n\n constructor(private _ec: ElementContainer) {\n super();\n this\n .titleVisible(false)\n .widget(this._dvtable)\n .columns([\"ID\", \"Title\"])\n ;\n }\n\n private _prevDataID;\n render(callback?) {\n const data = this._ec.elements().map(elem => {\n return [elem.id(), elem.visualization().title(), elem];\n });\n const dataID = hashSum(data.map(row => row[0]));\n if (this._prevDataID !== dataID) {\n this._prevDataID = dataID;\n this.data(data);\n }\n return super.render(callback);\n }\n}\n","import { JSONEditor } from \"@hpcc-js/codemirror\";\nimport { Button, PropertyExt, SelectionBar, SelectionButton, Spacer } from \"@hpcc-js/common\";\nimport { DatasourceTable } from \"@hpcc-js/dgrid\";\nimport { ChartPanel } from \"@hpcc-js/layout\";\nimport { PropertyEditor } from \"@hpcc-js/other\";\nimport { SplitPanel, TabPanel } from \"@hpcc-js/phosphor\";\nimport { Activity } from \"./activities/activity.ts\";\nimport { DatasourceAdapt } from \"./activities/databomb.ts\";\nimport { Datasource } from \"./activities/datasource.ts\";\nimport { DSPicker } from \"./activities/dspicker.ts\";\nimport { Filters } from \"./activities/filter.ts\";\nimport { GroupBy } from \"./activities/groupby.ts\";\nimport { Limit } from \"./activities/limit.ts\";\nimport { Mappings, Project } from \"./activities/project.ts\";\nimport { Sort } from \"./activities/sort.ts\";\nimport { Element as ModelElement, IElementError, State } from \"./model/element.ts\";\nimport { Visualization } from \"./model/visualization.ts\";\n\nimport \"../../src/ddl2/pipelinePanel.css\";\n\nclass PipelineSelectionButton extends SelectionButton {\n\n _label: string;\n label(): string;\n label(_: string): this;\n label(_?: string): string | this {\n if (!arguments.length) return this._label;\n this._label = _;\n this.tooltip(_);\n return this;\n }\n\n _elementErrors: IElementError[] = [];\n errors(): IElementError[];\n errors(_: IElementError[]): this;\n errors(_?: IElementError[]): IElementError[] | this {\n if (!arguments.length) return this._elementErrors;\n this._elementErrors = _;\n this.classed(\"error\", _.length > 0);\n // this.element().classed(\"error\", _.length > 0);\n if (_.length) {\n this.tooltip(_.map(err => {\n const errSourceParts = err.source.split(\".\");\n errSourceParts.splice(0, 1);\n return `${errSourceParts.join(\".\")}: ${err.msg}`;\n }).join(\"\\n\"));\n } else {\n this.tooltip(this._label);\n }\n this.render();\n return this;\n }\n}\n\nclass PipelinePanel extends ChartPanel {\n _owner: PipelineSplitPanel;\n\n datasource = new PipelineSelectionButton().faChar(\"fa-database\").label(\"Datasource\").selected(true);\n filter = new PipelineSelectionButton().faChar(\"fa-filter\").label(\"Filter\");\n project = new PipelineSelectionButton().faChar(\"fa-random\").label(\"Project\");\n groupBy = new PipelineSelectionButton().faChar(\"fa-object-group\").label(\"Group By\");\n sort = new PipelineSelectionButton().faChar(\"fa-sort-alpha-asc\").label(\"Sort\");\n limit = new PipelineSelectionButton().faChar(\"fa-list-ol\").label(\"Limit\");\n mappings = new PipelineSelectionButton().faChar(\"fa-random\").label(\"Mappings\");\n chartPanel = new PipelineSelectionButton().faChar(\"fa-area-chart\").label(\"Visualization\");\n state = new PipelineSelectionButton().faChar(\"fa-check-square-o\").label(\"State\");\n debug = new PipelineSelectionButton().faChar(\"fa-bug\").label(\"Debug\");\n all = new PipelineSelectionButton().faChar(\"fa-list\").label(\"All\");\n\n _propEditor: PropertyEditor = new PropertyEditor()\n .show_header(false)\n .show_settings(false)\n .showFields(false)\n ;\n\n private _buttons = [\n this.datasource,\n this.filter,\n this.project,\n this.groupBy,\n this.sort,\n this.limit,\n new Spacer(),\n this.mappings,\n this.chartPanel,\n new Spacer(),\n this.state,\n this.debug,\n new Spacer(),\n this.all\n ];\n _pipelineButton: PipelineSelectionButton = this.datasource;\n private _pipelineSelection = new SelectionBar()\n .buttons(this._buttons).on(\"selected\", sb => {\n this._pipelineButton = sb;\n this.title(sb.label()).render();\n });\n\n constructor(owner: PipelineSplitPanel) {\n super();\n this._owner = owner;\n this.buttons([this._pipelineSelection]);\n this.title(this.datasource.label());\n super.widget(this._propEditor);\n this._propEditor.monitor((id: string, newValue: any, oldValue: any, source: PropertyExt) => {\n if (source !== this._propEditor) {\n this.propChanged(id, newValue, oldValue, source);\n this.updateState();\n }\n });\n }\n\n selectionButtons(): PipelineSelectionButton[] {\n return this._pipelineSelection.buttons().filter(b => b instanceof PipelineSelectionButton) as PipelineSelectionButton[];\n }\n\n private _propExt: PropertyExt;\n propExt(): PropertyExt;\n propExt(_: PropertyExt): this;\n propExt(_?: PropertyExt): PropertyExt | this {\n if (!arguments.length) return this._propExt;\n this._propExt = _;\n return this;\n }\n\n private peAsDatasource(): Datasource {\n if (this._propExt instanceof Datasource) {\n return this._propExt;\n } else if (this._propExt instanceof DSPicker) {\n return this._propExt;\n } else if (this._propExt instanceof ModelElement) {\n return this._propExt.hipiePipeline().datasource();\n }\n }\n\n private peAsFilter(): Filters {\n if (this._propExt instanceof Filters) {\n return this._propExt;\n } else if (this._propExt instanceof ModelElement) {\n return this._propExt.hipiePipeline().filters();\n }\n }\n\n private peAsProject(): Project {\n if (this._propExt instanceof Project) {\n return this._propExt;\n } else if (this._propExt instanceof ModelElement) {\n return this._propExt.hipiePipeline().project();\n }\n }\n\n private peAsGroupBy(): GroupBy {\n if (this._propExt instanceof GroupBy) {\n return this._propExt;\n } else if (this._propExt instanceof ModelElement) {\n return this._propExt.hipiePipeline().groupBy();\n }\n }\n\n private peAsSort(): Sort {\n if (this._propExt instanceof Sort) {\n return this._propExt;\n } else if (this._propExt instanceof ModelElement) {\n return this._propExt.hipiePipeline().sort();\n }\n }\n\n private peAsLimit(): Limit {\n if (this._propExt instanceof Limit) {\n return this._propExt;\n } else if (this._propExt instanceof ModelElement) {\n return this._propExt.hipiePipeline().limit();\n }\n }\n\n private peAsMappings(): Mappings {\n if (this._propExt instanceof Mappings) {\n return this._propExt;\n } else if (this._propExt instanceof ModelElement) {\n return this._propExt.visualization().mappings();\n } else if (this._propExt instanceof Visualization) {\n return this._propExt.mappings();\n }\n }\n\n private peAsChartPanel(): ChartPanel | Visualization {\n if (this._propExt instanceof ChartPanel) {\n return this._propExt;\n } else if (this._propExt instanceof Visualization) {\n return this._propExt;\n } else if (this._propExt instanceof ModelElement) {\n return this._propExt.visualization();\n }\n }\n\n private peAsState(): State {\n if (this._propExt instanceof State) {\n return this._propExt;\n } else if (this._propExt instanceof ModelElement) {\n return this._propExt.state();\n }\n }\n\n selectionButton(): PipelineSelectionButton {\n if (this._pipelineButton && this._pipelineButton.enabled()) {\n return this._pipelineButton;\n }\n for (const pb of this.selectionButtons()) {\n if (pb.enabled()) {\n pb.selected(true);\n return pb;\n }\n }\n return undefined;\n }\n\n _prevPropExt: PropertyExt;\n _prevPipelineButton: SelectionButton;\n update(domNode, element) {\n super.update(domNode, element);\n this.updateState();\n const pipelineButton = this.selectionButton();\n if (this._prevPropExt !== this._propExt || this._prevPipelineButton !== pipelineButton) {\n this._prevPropExt = this._propExt;\n this._prevPipelineButton = pipelineButton;\n if (this._propExt && pipelineButton) {\n switch (pipelineButton) {\n case this.datasource:\n this._propEditor.widget(this.peAsDatasource());\n break;\n case this.filter:\n this._propEditor.widget(this.peAsFilter());\n break;\n case this.project:\n this._propEditor.widget(this.peAsProject());\n break;\n case this.groupBy:\n this._propEditor.widget(this.peAsGroupBy());\n break;\n case this.sort:\n this._propEditor.widget(this.peAsSort());\n break;\n case this.limit:\n this._propEditor.widget(this.peAsLimit());\n break;\n case this.mappings:\n this._propEditor.widget(this.peAsMappings());\n break;\n case this.chartPanel:\n this._propEditor.widget(this.peAsChartPanel());\n break;\n case this.state:\n this._propEditor.widget(this.peAsState());\n break;\n case this.all:\n this._propEditor.widget(this._propExt);\n break;\n }\n } else {\n this._propEditor.widget(undefined);\n }\n this._owner.loadPreview(this._propEditor.widget());\n }\n }\n\n updateButtonState(pe, sb) {\n sb.enabled(!!pe);\n sb.errors(!!pe && pe.validate() || []);\n }\n\n updateState() {\n this.selectionButtons().forEach(sb => {\n if (sb instanceof PipelineSelectionButton) {\n if (this.disableActivities().indexOf(sb.label()) >= 0) {\n this.updateButtonState(undefined, sb);\n return;\n }\n }\n\n switch (sb) {\n case this.datasource:\n this.updateButtonState(this.peAsDatasource(), sb);\n break;\n case this.filter:\n this.updateButtonState(this.peAsFilter(), sb);\n break;\n case this.project:\n this.updateButtonState(this.peAsProject(), sb);\n break;\n case this.groupBy:\n this.updateButtonState(this.peAsGroupBy(), sb);\n break;\n case this.sort:\n this.updateButtonState(this.peAsSort(), sb);\n break;\n case this.limit:\n this.updateButtonState(this.peAsLimit(), sb);\n break;\n case this.mappings:\n this.updateButtonState(this.peAsMappings(), sb);\n break;\n case this.chartPanel:\n const cp = this.peAsChartPanel();\n sb.enabled(!!cp);\n break;\n case this.state:\n const st = this.peAsState();\n sb.enabled(!!st);\n break;\n case this.debug:\n sb.enabled(false);\n break;\n case this.all:\n sb.enabled(!!this._propExt);\n break;\n }\n if (sb.selected()) {\n this.title(sb.enabled() ? sb.label() : \"\");\n }\n });\n }\n\n // Events ---\n propChanged(id: string, newValue: any, oldValue: any, source: PropertyExt) {\n }\n}\nPipelinePanel.prototype._class += \" marshaller_PipelinePanel\";\n\ninterface PipelinePanel {\n disableActivities(): string[];\n disableActivities(_: string[]): this;\n}\n\nclass DDLPreview extends ChartPanel {\n\n private _save = new Button().faChar(\"fa-save\").tooltip(\"Save\")\n .on(\"click\", () => {\n const activity = this.activity();\n if (activity && (activity as any).fromDDL) {\n (activity as any).fromDDL(this._jsonEditor.json());\n }\n this.updateToolbar();\n });\n\n private _reset = new Button().faChar(\"fa-undo\").tooltip(\"Reset\")\n .on(\"click\", () => {\n this._jsonEditor\n .text(this.jsonText())\n .lazyRender()\n ;\n this.updateToolbar();\n });\n\n private _jsonEditor = new JSONEditor()\n .on(\"changes\", (changes: object[]) => {\n this.updateToolbar();\n });\n\n constructor() {\n super();\n this._titleBar.buttons([this._save, this._reset]);\n this.widget(this._jsonEditor);\n }\n\n private _activity: PropertyExt;\n activity(_: PropertyExt): this;\n activity(): PropertyExt;\n activity(_?: PropertyExt): PropertyExt | this {\n if (_ === void 0) return this._activity;\n if (this._activity !== _) {\n this._activity = _;\n delete this._prevJson;\n }\n return this;\n }\n\n jsonText(): string {\n const activity = this.activity();\n return activity && (activity as any).toDDL ? JSON.stringify((activity as any).toDDL(), undefined, 4) : \"\";\n }\n\n private _prevJson: string;\n update(domNode, element) {\n super.update(domNode, element);\n const json = this.jsonText();\n const editorJson = this._jsonEditor.text();\n if ((this._prevJson === undefined || this._prevJson === editorJson) && this._prevJson !== json) {\n this._prevJson = json;\n this._jsonEditor.text(json);\n }\n this.updateToolbar();\n }\n\n updateToolbar() {\n const activity = this.activity() as any;\n const json = this.jsonText();\n const editorJson = this._jsonEditor.text();\n this._save.enabled(activity && activity.fromDDL && json !== editorJson).lazyRender();\n this._reset.enabled(json !== editorJson).lazyRender();\n }\n}\n\nexport class PipelineSplitPanel extends SplitPanel {\n private _rhsPropsPanel = new PipelinePanel(this).on(\"propChanged\", (id: string, newValue: any, oldValue: any, source: PropertyExt) => {\n this.propChanged(id, newValue, oldValue, source);\n });\n private _previewPanel = new TabPanel();\n private _rhsDDLPreview = new DDLPreview();\n private _rhsDataPreview = new DatasourceTable().pagination(true);\n\n constructor() {\n super();\n this._previewPanel\n .addWidget(this._rhsDataPreview, \"Data\")\n .addWidget(this._rhsDDLPreview, \"DDL\")\n ;\n this\n .addWidget(this._rhsPropsPanel)\n .addWidget(this._previewPanel)\n ;\n }\n\n loadDataProps(pe: PropertyExt) {\n this._rhsPropsPanel\n .propExt(pe)\n .render()\n ;\n }\n\n loadPreview(activity: undefined | PropertyExt) {\n activity = activity instanceof Visualization ? activity.mappings() : activity;\n this._rhsDataPreview\n .datasource(new DatasourceAdapt(activity instanceof Activity ? activity : undefined))\n .lazyRender()\n ;\n this._rhsDDLPreview\n .activity(activity) // instanceof DSPicker ? activity.datasourceRef() : activity)\n .lazyRender()\n ;\n }\n\n refreshPreview() {\n const ds = this._rhsDataPreview.datasource() as DatasourceAdapt;\n if (ds) {\n ds.exec().then(() => {\n this._rhsDataPreview\n .invalidate()\n .lazyRender()\n ;\n this._rhsDDLPreview\n .lazyRender()\n ;\n });\n } else {\n this._rhsDDLPreview\n .lazyRender()\n ;\n }\n }\n\n // Events ---\n propChanged(id: string, newValue: any, oldValue: any, source: PropertyExt) {\n }\n}\n\nexport interface PipelineSplitPanel {\n disableActivities(): string[];\n disableActivities(_: string[]): this;\n}\n\nPipelinePanel.prototype.publish(\"disableActivities\", [], \"array\", \"Disabled pipeline items\");\n\nPipelineSplitPanel.prototype.publishProxy(\"disableActivities\", \"_rhsPropsPanel\");","import { JSEditor, JSONEditor } from \"@hpcc-js/codemirror\";\nimport { Button, PropertyExt, Utility, Widget } from \"@hpcc-js/common\";\nimport { DDL1, DDL2, ddl2Schema, isDDL2Schema, upgrade } from \"@hpcc-js/ddl-shim\";\nimport { Graph } from \"@hpcc-js/graph\";\nimport { ChartPanel } from \"@hpcc-js/layout\";\nimport { CommandPalette, CommandRegistry, ContextMenu, SplitPanel, TabPanel, WidgetAdapter } from \"@hpcc-js/phosphor\";\nimport { scopedLogger } from \"@hpcc-js/util\";\nimport { Activity } from \"./ddl2/activities/activity.ts\";\nimport { Databomb } from \"./ddl2/activities/databomb.ts\";\nimport { DSPicker } from \"./ddl2/activities/dspicker.ts\";\nimport { Dashboard } from \"./ddl2/dashboard.ts\";\nimport { DSTable } from \"./ddl2/dsTable.ts\";\nimport { DVTable } from \"./ddl2/dvTable.ts\";\nimport { GraphAdapter, VertexData } from \"./ddl2/graphadapter.ts\";\nimport { Element, ElementContainer, State } from \"./ddl2/model/element.ts\";\nimport { Visualization } from \"./ddl2/model/visualization.ts\";\nimport { VizChartPanel } from \"./ddl2/model/vizChartPanel.ts\";\nimport { PipelineSplitPanel } from \"./ddl2/pipelinePanel.ts\";\n\nconst logger = scopedLogger(\"marshaller/dashy\");\n\nimport \"../src/dashy.css\";\n\nexport type FocusType = Element | Activity | Visualization | VizChartPanel | State | undefined;\n\nclass DDLPreview extends ChartPanel {\n\n private _save = new Button().faChar(\"fa-save\").tooltip(\"Save\")\n .on(\"click\", () => {\n const obj = JSON.parse(this._jsonEditor.text());\n this._dashy.importDDL(obj);\n this.updateToolbar();\n });\n\n private _reset = new Button().faChar(\"fa-undo\").tooltip(\"Reset\")\n .on(\"click\", () => {\n this._jsonEditor\n .text(this._ddl)\n .lazyRender()\n ;\n this.updateToolbar();\n });\n\n private _jsonEditor = new JSONEditor()\n .on(\"changes\", (changes: object[]) => {\n this.updateToolbar();\n });\n\n constructor(private _dashy: Dashy) {\n super();\n this._titleBar.buttons([this._save, this._reset]);\n this.widget(this._jsonEditor);\n }\n\n private _ddl;\n ddl(_: DDL2.Schema): this {\n this._ddl = JSON.stringify(_, undefined, 4);\n return this;\n }\n\n private _prevJson: string;\n update(domNode, element) {\n super.update(domNode, element);\n if (this._prevJson !== this._ddl) {\n this._prevJson = this._ddl;\n this._jsonEditor.text(this._ddl);\n }\n this.updateToolbar();\n }\n\n updateToolbar() {\n const editorJson = this._jsonEditor.text();\n this._save.enabled(this._ddl !== editorJson).lazyRender();\n this._reset.enabled(this._ddl !== editorJson).lazyRender();\n }\n}\n\nexport class Dashy extends SplitPanel {\n\n private _elementContainer: ElementContainer = new ElementContainer();\n\n private _lhsSheet = new TabPanel();\n private _lhsDashboard: Dashboard = new Dashboard(this._elementContainer)\n .on(\"vizActivation\", (elem: Element, wa: WidgetAdapter) => {\n this.focus(this._lhsDashboard, elem);\n })\n .on(\"vizStateChanged\", (elem: Element) => {\n for (const filteredViz of this._elementContainer.filteredBy(elem.id())) {\n if (this.focus() === filteredViz) {\n this._rhsSplitView.refreshPreview();\n }\n }\n })\n ;\n private _lhsDataviews: DVTable = new DVTable(this._elementContainer)\n .on(\"click\", (row: any, col: string, sel: boolean, ext: any) => {\n this.focus(this._lhsDataviews, row.__lparam);\n this._rhsSplitView.refreshPreview();\n })\n ;\n private _lhsDatasources: DSTable = new DSTable(this._elementContainer)\n .on(\"click\", (row: any, col: string, sel: boolean, ext: any) => {\n this.focus(this._lhsDatasources, row.__lparam);\n this._rhsSplitView.refreshPreview();\n })\n ;\n private _graphAdapter = new GraphAdapter(this._elementContainer);\n private _lhsPipeline: Graph = new Graph()\n .layout(\"Hierarchy\")\n .allowDragging(false)\n .applyScaleOnLayout(true)\n .on(\"vertex_click\", (row: any, col: string, sel: boolean, ext: any) => {\n const obj: VertexData = row.__lparam[0] || {};\n this.focus(this._lhsPipeline, obj.state || obj.chartPanel || obj.visualization || obj.activity || obj.view);\n })\n .on(\"vertex_contextmenu\", (row: any, col: string, sel: boolean, ext: any) => {\n })\n ;\n private _lhsDebugSheet = new TabPanel();\n private _lhsDebugDDLEditor = new DDLPreview(this);\n private _lhsDebugDDLSchema = new JSONEditor().json(ddl2Schema);\n private _lhsDebugJSEditor = new JSEditor();\n private _lhsDebugCloneEC: ElementContainer = new ElementContainer();\n private _lhsDebugClone: Dashboard = new Dashboard(this._lhsDebugCloneEC).hideSingleTabs(true).titleVisible(false);\n private _lhsDebugDDLv1 = new JSONEditor();\n private _lhsDebugDDLv2 = new JSONEditor();\n\n private _rhsSplitView = new PipelineSplitPanel();\n\n private _fileOpen;\n\n static create(target: string, ddl?: DDL1.DDLSchema | DDL2.Schema, baseUrl?: string, wuid?: string): Promise<Dashy> {\n return new Promise((resolve, reject) => {\n const dashy = new Dashy()\n .target(target)\n .render((w: Dashy) => {\n if (ddl) {\n w.importDDL(ddl, baseUrl, wuid).then(() => {\n resolve(dashy);\n });\n } else {\n resolve(dashy);\n }\n });\n });\n }\n\n constructor() {\n super(\"horizontal\");\n }\n\n elementContainer(): ElementContainer {\n return this._elementContainer;\n }\n\n clear(): Promise<void> {\n this._lhsDebugSheet.removeWidget(this._lhsDebugDDLv1);\n this._lhsDebugSheet.removeWidget(this._lhsDebugDDLv2);\n this._elementContainer.clear();\n this._graphAdapter.clear();\n this.focus(this._lhsDashboard, undefined);\n return this.loadDashboard().then(() => {\n return this._elementContainer.refresh();\n }).then(ec => {\n return;\n });\n }\n\n save(): DDL2.Schema {\n return this._lhsDashboard.save();\n }\n\n serializeDDL(): string {\n return JSON.stringify(this.save());\n }\n\n deserializeDDL(json: string): Promise<void> {\n return this.restore(JSON.parse(json) as DDL2.Schema);\n }\n\n restore(json: DDL2.Schema): Promise<void> {\n this._lhsSheet.active(this._lhsDashboard);\n return this.clear().then(() => {\n this._lhsDashboard.restore(json);\n this._lhsDataviews.render();\n this._lhsDatasources.render();\n return this._lhsDashboard.renderPromise().then(() => {\n const elements = this._elementContainer.elements();\n if (elements.length) {\n this._lhsDashboard.activate(elements[0]);\n }\n return this._elementContainer.refresh();\n }).then(() => {\n let hasError = false;\n for (const error of this._elementContainer.validate()) {\n hasError = true;\n logger.warning(error.elementID + \" (\" + error.source + \"): \" + error.msg);\n }\n if (hasError) {\n // Re-render to highlight errrors ---\n this._lhsDashboard.renderPromise();\n }\n });\n });\n }\n\n importDDL(ddl: DDL1.DDLSchema | DDL2.Schema, baseUrl?: string, wuid?: string, dermatologyJson: object = {}): Promise<void> {\n const ddl2: DDL2.Schema = isDDL2Schema(ddl) ? ddl : upgrade(ddl, baseUrl, wuid, true, dermatologyJson);\n const retVal = this.restore(ddl2);\n if (isDDL2Schema(ddl)) {\n this._lhsDebugDDLv2.json(ddl2);\n this._lhsDebugSheet\n .addWidget(this._lhsDebugDDLv2, \"orig v2\")\n ;\n } else {\n this._lhsDebugDDLv1.json(ddl);\n this._lhsDebugDDLv2.json(ddl2);\n this._lhsDebugSheet\n .addWidget(this._lhsDebugDDLv1, \"v1\")\n .addWidget(this._lhsDebugDDLv2, \"v1 -> v2\")\n ;\n }\n return retVal;\n }\n\n activeLHS(): Widget {\n let retVal = this._lhsSheet.active();\n if (retVal === this._lhsDebugSheet) {\n retVal = this._lhsDebugSheet.active();\n }\n return retVal;\n }\n\n activeRHS(): Widget {\n return this._rhsSplitView;\n }\n\n private _currSelection: { [sourceID: string]: FocusType } = {};\n\n private focusAsElement(): Element | undefined {\n const currSelection = this.focus();\n return currSelection instanceof Element ? currSelection : undefined;\n }\n\n private focus(): FocusType;\n private focus(source: Widget, item: FocusType): this;\n private focus(source?: Widget, item?: FocusType): FocusType | this {\n if (!arguments.length) return this._currSelection[this.activeLHS().id()];\n if (this._currSelection[source.id()] !== item) {\n this._currSelection[source.id()] = item;\n this.loadRHSSplit();\n }\n return this;\n }\n\n loadRHSSplit() {\n this._rhsSplitView.loadDataProps(this.focus());\n }\n\n loadDataviews(): Promise<Widget | undefined> {\n if (this.activeLHS() === this._lhsDataviews) {\n return this._lhsDataviews.renderPromise();\n }\n return Promise.resolve(undefined);\n }\n\n loadDatasources(): Promise<Widget | undefined> {\n if (this.activeLHS() === this._lhsDatasources) {\n return this._lhsDatasources.renderPromise();\n }\n return Promise.resolve(undefined);\n }\n\n loadDashboard(): Promise<Widget | undefined> {\n if (this.activeLHS() === this._lhsDashboard) {\n this._elementContainer.validate();\n return this._lhsDashboard.renderPromise();\n }\n return Promise.resolve(undefined);\n }\n\n loadGraph() {\n this._lhsPipeline\n .data({ ...this._graphAdapter.createGraph() }, true)\n ;\n if (this.activeLHS() === this._lhsPipeline) {\n this._lhsPipeline\n .lazyRender()\n ;\n }\n }\n\n loadDDL() {\n this._lhsDebugDDLEditor\n .ddl(this._lhsDashboard.ddl())\n ;\n if (this.activeLHS() === this._lhsDebugDDLEditor) {\n this._lhsDebugDDLEditor\n .lazyRender()\n ;\n }\n }\n\n loadJavaScript() {\n this._lhsDebugJSEditor\n .javascript(this._lhsDashboard.javascript())\n ;\n if (this.activeLHS() === this._lhsDebugJSEditor) {\n this._lhsDebugJSEditor\n .lazyRender()\n ;\n }\n }\n\n loadClone() {\n const json = this.save();\n this._lhsDebugCloneEC.clear();\n this._lhsDebugClone.renderPromise().then(() => {\n this._lhsDebugClone.restore(json);\n this._lhsDebugClone.renderPromise().then(() => {\n return this._lhsDebugCloneEC.refresh();\n }).then(() => {\n for (const error of this._lhsDebugCloneEC.validate()) {\n logger.warning(error.elementID + \" (\" + error.source + \"): \" + error.msg);\n }\n });\n });\n }\n\n initMenu() {\n const commands = new CommandRegistry();\n\n // Dashboard Commands ---\n commands.addCommand(\"dash_add\", {\n label: \"Add View\",\n execute: () => {\n const newElem = new Element(this._elementContainer);\n this._elementContainer.append(newElem);\n this.loadDashboard().then(() => {\n newElem.refresh().then(() => {\n this._lhsDashboard.activate(newElem);\n });\n });\n }\n });\n\n commands.addCommand(\"dash_clear\", {\n label: \"Clear\",\n execute: () => {\n this.clear();\n }\n });\n\n commands.addCommand(\"dash_save\", {\n label: \"Save\",\n execute: () => {\n const text = JSON.stringify(this.save(), null, \" \");\n Utility.downloadString(\"JSON\", text, \"dashy\");\n }\n });\n\n commands.addCommand(\"dash_load\", {\n label: \"Open\",\n execute: () => {\n this._fileOpen.property(\"accept\", \".dashy,.json\");\n this._fileOpen.node().click();\n }\n });\n\n // Model Commands ---\n const palette = new CommandPalette({ commands });\n palette.addItem({ command: \"addWUResult\", category: \"Notebook\" });\n palette.addItem({ command: \"addView\", category: \"Notebook\" });\n palette.addItem({ command: \"remove\", category: \"Notebook\" });\n palette.id = \"palette\";\n\n const contextMenu = new ContextMenu({ commands });\n\n contextMenu.addItem({ command: \"dash_add\", selector: `#${this._lhsDashboard.id()}` });\n contextMenu.addItem({ command: \"dash_clear\", selector: `#${this._lhsDashboard.id()}` });\n contextMenu.addItem({ type: \"separator\", selector: `#${this._lhsDashboard.id()}` });\n\n contextMenu.addItem({ command: \"dash_load\", selector: `#${this.id()}` });\n contextMenu.addItem({ command: \"dash_save\", selector: `#${this.id()}` });\n\n document.addEventListener(\"contextmenu\", (event: MouseEvent) => {\n if (contextMenu.open(event)) {\n event.preventDefault();\n }\n });\n }\n\n addDatabomb(label: string, payload: string, format: \"csv\" | \"tsv\" | \"json\") {\n const databomb = new Databomb().id(label).format(format).payload(payload);\n this._elementContainer.appendDatasource(databomb);\n const newElem = new Element(this._elementContainer);\n const ds = newElem.hipiePipeline().datasource();\n if (ds instanceof DSPicker) {\n ds.datasourceID(databomb.id());\n }\n this._elementContainer.append(newElem);\n this.loadDashboard().then(() => {\n newElem.refresh().then(() => {\n this._lhsDashboard.activate(newElem);\n });\n });\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this\n .addWidget(this._lhsSheet)\n .addWidget(this._rhsSplitView)\n ;\n this._lhsSheet\n .addWidget(this._lhsDashboard, \"Dashboard\")\n .addWidget(this._lhsDataviews, \"Dataviews\")\n .addWidget(this._lhsDatasources, \"Datasources\")\n .addWidget(this._lhsPipeline, \"Pipeline\")\n .addWidget(this._lhsDebugSheet, \"Debug\")\n .on(\"childActivation\", (w: Widget) => {\n switch (w) {\n case this._lhsDataviews:\n this.loadRHSSplit();\n break;\n case this._lhsDatasources:\n this.loadRHSSplit();\n break;\n case this._lhsDashboard:\n this.loadRHSSplit();\n break;\n case this._lhsPipeline:\n this.loadRHSSplit();\n this.loadGraph();\n break;\n case this._lhsDebugSheet:\n this._lhsDebugSheet.childActivation(this._lhsDebugSheet.active());\n break;\n }\n })\n ;\n this._lhsDebugSheet\n .addWidget(this._lhsDebugDDLEditor, \"v2\")\n .addWidget(this._lhsDebugDDLSchema, \"Schema\")\n .addWidget(this._lhsDebugJSEditor, \"TS\")\n .addWidget(this._lhsDebugClone, \"Clone\")\n .on(\"childActivation\", (w: Widget) => {\n switch (w) {\n case this._lhsDebugDDLEditor:\n this.loadRHSSplit();\n this.loadDDL();\n break;\n case this._lhsDebugJSEditor:\n this.loadRHSSplit();\n this.loadJavaScript();\n break;\n case this._lhsDebugClone:\n this.loadClone();\n break;\n }\n })\n ;\n\n this.initMenu();\n this._rhsSplitView.on(\"propChanged\", (id: string, newValue: any, oldValue: any, source: PropertyExt) => {\n const currElement = this.focusAsElement();\n if (currElement) {\n currElement.refresh().then(() => {\n this._rhsSplitView.refreshPreview();\n });\n } else {\n this._rhsSplitView.refreshPreview();\n }\n switch (this.activeLHS()) {\n case this._lhsDashboard:\n this.loadDashboard();\n break;\n case this._lhsDatasources:\n this._elementContainer.refresh();\n break;\n case this._lhsPipeline:\n this.loadGraph();\n break;\n case this._lhsDebugDDLEditor:\n this.loadDDL();\n break;\n case this._lhsDebugClone:\n this.loadClone();\n break;\n }\n });\n\n const context = this;\n this._fileOpen = element.append(\"input\")\n .attr(\"type\", \"file\")\n .property(\"accept\", \".dashy,.json\")\n .style(\"display\", \"none\")\n .on(\"change\", function () {\n const i = 0;\n const f = this.files[i];\n while (f) {\n const reader = new FileReader();\n reader.onload = (function (theFile) {\n return function (e) {\n try {\n const result = Array.isArray(e.target.result) ? e.target.result[0] : e.target.result;\n const json = JSON.parse(result);\n context.importDDL(json);\n } catch (ex) {\n alert(\"ex when trying to parse json = \" + ex);\n }\n };\n })(f);\n reader.readAsText(f);\n break;\n }\n })\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n }\n}\nDashy.prototype._class += \" composite_Dashy\";\n\nexport interface Dashy {\n disableActivities(): string[];\n disableActivities(_: string[]): this;\n}\nDashy.prototype.publishProxy(\"disableActivities\", \"_rhsSplitView\");"],"x_google_ignoreList":[20],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.cjs","names":[],"sources":["../src/__package__.ts","../src/ddl2/activities/activity.ts","../src/ddl2/activities/datasource.ts","../src/ddl2/activities/form.ts","../src/ddl2/activities/databomb.ts","../src/ddl2/activities/wuresult.ts","../src/ddl2/activities/logicalfile.ts","../src/ddl2/activities/rest.ts","../src/ddl2/activities/roxie.ts","../src/ddl2/activities/dspicker.ts","../src/ddl2/activities/filter.ts","../src/ddl2/activities/groupby.ts","../src/ddl2/activities/limit.ts","../src/ddl2/activities/project.ts","../src/ddl2/activities/sort.ts","../src/ddl2/activities/hipiepipeline.ts","../src/ddl2/activities/nullview.ts","../src/ddl2/model/vizChartPanel.ts","../src/ddl2/model/visualization.ts","../src/ddl2/model/element.ts","../node_modules/d3-fetch/src/text.js","../src/ddl2/PopupManager.ts","../src/ddl2/dashboardDockPanel.ts","../src/ddl2/dashboardGrid.ts","../src/ddl2/ddl.ts","../src/ddl2/javascriptadapter.ts","../src/ddl2/dashboard.ts","../src/ddl2/ddleditor.ts","../src/ddl2/graphadapter.ts","../src/ddl2/dsTable.ts","../src/ddl2/dvTable.ts","../src/ddl2/pipelinePanel.ts","../src/dashy.ts"],"sourcesContent":["export const PKG_NAME = \"__PACKAGE_NAME__\";\nexport const PKG_VERSION = \"__PACKAGE_VERSION__\";\nexport const BUILD_VERSION = \"__BUILD_VERSION__\";\n","import { IMonitorHandle, PropertyExt } from \"@hpcc-js/common\";\nimport { IField as WsEclField } from \"@hpcc-js/comms\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { hashSum, update } from \"@hpcc-js/util\";\n\nexport function stringify(obj_from_json) {\n if (Array.isArray(obj_from_json)) {\n // not an object, stringify using native function\n return \"[\" + obj_from_json.map(stringify).join(\", \") + \"]\";\n }\n if (typeof obj_from_json !== \"object\" || obj_from_json === null || obj_from_json === undefined) {\n // not an object, stringify using native function\n return JSON.stringify(obj_from_json);\n }\n // Implements recursive object serialization according to JSON spec\n // but without quotes around the keys.\n const props = Object\n .keys(obj_from_json)\n .map(key => `${key}: ${stringify(obj_from_json[key])}`)\n .join(\", \");\n return `{ ${props} }`;\n}\n\nexport function schemaType2IFieldType(type): \"boolean\" | \"number\" | \"number64\" | \"range\" | \"string\" {\n switch (type) {\n case \"boolean\":\n return \"boolean\";\n case \"xs:byte\":\n case \"xs:double\":\n case \"xs:decimal\":\n case \"xs:float\":\n case \"xs:int\":\n case \"xs:short\":\n case \"xs:unsignedInt\":\n case \"xs:unsignedShort\":\n case \"xs:unsignedByte\":\n case \"number\":\n return \"number\";\n case \"xs:integer\":\n case \"xs:long\":\n case \"xs:negativeInteger\":\n case \"xs:nonNegativeInteger\":\n case \"xs:nonPositiveInteger\":\n case \"xs:positiveInteger\":\n case \"xs:unsignedLong\":\n return \"number64\";\n case \"string\":\n return \"string\";\n case \"range\":\n return \"range\";\n }\n return \"string\";\n}\n\nexport function schemaRow2IField(row: any): DDL2.IField {\n if (row._children && row._children.length) {\n return {\n type: \"dataset\",\n id: row.name,\n children: row._children.map(schemaRow2IField)\n };\n } else {\n return {\n id: row.name,\n type: schemaType2IFieldType(row.type)\n };\n }\n}\n\nexport function wsEclSchemaRow2IField(row: WsEclField): DDL2.IField {\n return row;\n}\n\nexport type ReferencedFields = {\n inputs: { [activityID: string]: string[] },\n outputs: { [activityID: string]: string[] }\n};\n\nexport interface IActivityError {\n source: string;\n msg: string;\n hint: string;\n}\n\n/*\nexport const ROW_ID = \"__##__\"; // TODO: Should be Symbol\nexport function rowID(row: Readonly<object>): undefined | number {\n return row[ROW_ID] || row[\"__lparam\"];\n}\n*/\n\nexport abstract class Activity extends PropertyExt {\n private _sourceActivity: Activity;\n\n fixInt64(data) {\n if (!data || data.length === 0) return [];\n const int64Fields = this.outFields().filter(field => {\n switch (field.type) {\n case \"number\":\n // Test actual data for integer64 cases.\n return typeof data[0][field.id] !== \"number\";\n case \"number64\":\n return true;\n }\n return false;\n });\n if (int64Fields.length) {\n return data.map(row => {\n for (const int64Field of int64Fields) {\n row[int64Field.id] = +row[int64Field.id];\n }\n return row;\n });\n }\n return data;\n }\n\n sourceActivity(): Activity;\n sourceActivity(_: Activity): this;\n sourceActivity(_?: Activity): Activity | this {\n if (!arguments.length) return this._sourceActivity;\n this._sourceActivity = _;\n return this;\n }\n\n hash(more: object = {}): string {\n return hashSum({\n ...more\n });\n }\n\n refreshMeta(): Promise<void> {\n return this._sourceActivity ? this._sourceActivity.refreshMeta() : Promise.resolve();\n }\n\n exists(): boolean {\n return true;\n }\n\n validate(): IActivityError[] {\n return [];\n }\n\n label(): string {\n return this.id();\n }\n\n updatedBy(): string[] {\n return [];\n }\n\n private _emptyFields: ReadonlyArray<DDL2.IField> = [];\n inFields(): ReadonlyArray<DDL2.IField> {\n return this._sourceActivity ? this._sourceActivity.outFields() : this._emptyFields;\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n return () => inFields;\n }\n\n outFields(): ReadonlyArray<DDL2.IField> {\n return this.computeFields(this.inFields())();\n }\n\n localFields(): DDL2.IField[] {\n const inFieldIDs = this.inFields().map(field => field.id);\n return this.outFields().filter(field => inFieldIDs.indexOf(field.id) < 0);\n }\n\n fieldOrigin(fieldID: string): Activity | null {\n if (this.localFields().filter(field => field.id === fieldID).length) {\n return this;\n } else if (this.sourceActivity()) {\n return this.sourceActivity().fieldOrigin(fieldID);\n }\n return null;\n }\n\n resolveFields(refs: ReferencedFields, fieldIDs: string[]) {\n for (const fieldID of fieldIDs) {\n const fieldOrigin = this.fieldOrigin(fieldID);\n if (fieldOrigin) {\n if (!refs.outputs[fieldOrigin.id()]) {\n refs.outputs[fieldOrigin.id()] = [];\n }\n if (refs.outputs[fieldOrigin.id()].indexOf(fieldID) < 0) {\n refs.outputs[fieldOrigin.id()].push(fieldID);\n }\n }\n }\n }\n\n resolveInFields(refs: ReferencedFields, fieldIDs: string[]) {\n return this._sourceActivity && this._sourceActivity.resolveFields(refs, fieldIDs);\n }\n\n referencedFields(refs: ReferencedFields): void {\n this._sourceActivity?.referencedFields(refs);\n }\n\n exec(): Promise<void> {\n return this._sourceActivity ? this._sourceActivity.exec() : Promise.resolve();\n }\n\n _emptyData: ReadonlyArray<object> = [];\n inData(): ReadonlyArray<object> {\n return this._sourceActivity ? this._sourceActivity.outData() || this._emptyData : this._emptyData;\n }\n\n computeData(): ReadonlyArray<object> {\n return this.inData();\n }\n\n private _prevDataHash: string = \"\";\n private _prevInData: ReadonlyArray<object> = [];\n private _prevData: ReadonlyArray<object> = [];\n private cachedComputeData(inData: ReadonlyArray<object>): ReadonlyArray<object> {\n const hash = this.hash();\n if (this._prevDataHash !== hash || this._prevInData !== inData) {\n this._prevDataHash = hash;\n this._prevInData = inData;\n this._prevData = update(this._prevData, this.computeData());\n }\n return this._prevData;\n }\n\n outData(): ReadonlyArray<object> {\n return this.cachedComputeData(this.inData());\n }\n}\n\nexport class ActivityArray extends Activity {\n private _activities: Activity[] = [];\n\n activities(): Activity[];\n activities(_: Activity[]): this;\n activities(_?: Activity[]): Activity[] | this {\n if (!arguments.length) return this._activities;\n this._activities = _;\n return this;\n }\n}\nActivityArray.prototype._class += \" ActivityArray\";\n\nexport class ActivityPipeline extends ActivityArray {\n\n activities(): Activity[];\n activities(_: Activity[]): this;\n activities(_?: Activity[]): Activity[] | this {\n if (!arguments.length) return super.activities();\n super.activities(_);\n let prevActivity: Activity;\n for (const activity of _) {\n if (prevActivity) {\n activity.sourceActivity(prevActivity);\n }\n prevActivity = activity;\n }\n return this;\n }\n\n first(): Activity {\n const retVal = this.activities();\n return retVal[0];\n }\n\n last(): Activity | null {\n const retVal = this.activities();\n return retVal[retVal.length - 1];\n }\n\n protected calcUpdatedGraph(activity: Activity): Array<{ from: string, to: Activity }> {\n return activity.updatedBy().map(source => {\n return {\n from: source,\n to: activity\n };\n });\n }\n\n updatedByGraph(): Array<{ from: string, to: Activity }> {\n let retVal: Array<{ from: string, to: Activity }> = [];\n for (const activity of this.activities()) {\n retVal = retVal.concat(this.calcUpdatedGraph(activity));\n }\n return retVal;\n }\n\n fetch(from: number = 0, count: number = Number.MAX_VALUE): Promise<ReadonlyArray<object>> {\n return this.exec().then(() => {\n const data = this.outData();\n if (from === 0 && data.length <= count) {\n return data;\n }\n return data.slice(from, from + count);\n });\n }\n\n // Activity overrides ---\n hash(more: { [key: string]: any } = {}): string {\n return hashSum({\n activities: [this.activities().map(activity => activity.hash())],\n ...more\n });\n }\n\n refreshMeta(): Promise<void> {\n return this.last().refreshMeta();\n }\n\n updatedBy(): string[] {\n let retVal: string[] = [];\n for (const activity of this.activities()) {\n retVal = retVal.concat(activity.updatedBy());\n }\n return retVal;\n }\n\n inFields(): ReadonlyArray<DDL2.IField> {\n return this.first().inFields();\n }\n\n outFields(): ReadonlyArray<DDL2.IField> {\n return this.last().outFields();\n }\n\n localFields(): DDL2.IField[] {\n return this.last().localFields();\n }\n\n fieldOrigin(fieldID: string): Activity | null {\n return this.last().fieldOrigin(fieldID);\n }\n\n referencedFields(refs: ReferencedFields) {\n this.last().referencedFields(refs);\n }\n\n resolveInFields(refs: ReferencedFields, fieldIDs: string[]) {\n this.last().resolveInFields(refs, fieldIDs);\n }\n\n resolveFields(refs: ReferencedFields, fieldIDs: string[]) {\n this.last().resolveFields(refs, fieldIDs);\n }\n\n exec(): Promise<void> {\n return this.last().exec();\n }\n\n outData(): ReadonlyArray<object> {\n return this.last().outData();\n }\n}\nActivityPipeline.prototype._class += \" ActivitySequence\";\n\nexport class ActivitySelection extends ActivityArray {\n private _selection: Activity;\n private _monitorHandle: IMonitorHandle;\n\n selection(): Activity;\n selection(_: Activity): this;\n selection(_?: Activity): Activity | this {\n if (_ === undefined) return this._selection;\n if (this._monitorHandle) {\n this._monitorHandle.remove();\n }\n this._selection = _;\n this._monitorHandle = _.monitor((id, newVal, oldVal) => {\n this.broadcast(id, newVal, oldVal, _);\n });\n return this;\n }\n\n // Activity overrides ---\n hash(more: { [key: string]: any } = {}): string {\n return hashSum({\n selection: this.selection().hash(),\n ...more\n });\n }\n\n label(): string {\n return this.selection().label();\n }\n\n refreshMeta(): Promise<void> {\n return this.selection().refreshMeta();\n }\n\n updatedBy(): string[] {\n return this.selection().updatedBy();\n }\n\n inFields(): ReadonlyArray<DDL2.IField> {\n return this.selection().inFields();\n }\n\n outFields(): ReadonlyArray<DDL2.IField> {\n return this.selection().outFields();\n }\n\n localFields(): DDL2.IField[] {\n return this.selection().localFields();\n }\n\n fieldOrigin(fieldID: string): Activity | null {\n return this.selection().fieldOrigin(fieldID);\n }\n\n referencedFields(refs: ReferencedFields) {\n this.selection().referencedFields(refs);\n }\n\n resolveInFields(refs: ReferencedFields, fieldIDs: string[]) {\n this.selection().resolveInFields(refs, fieldIDs);\n }\n\n resolveFields(refs: ReferencedFields, fieldIDs: string[]) {\n this.selection().resolveFields(refs, fieldIDs);\n }\n\n exec(): Promise<void> {\n return this.selection().exec();\n }\n\n outData(): ReadonlyArray<object> {\n return this.selection().outData();\n }\n}\nActivitySelection.prototype._class += \" ActivitySelection\";\n","import { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { Activity } from \"./activity.ts\";\nimport { Databomb } from \"./databomb.ts\";\nimport { Form } from \"./form.ts\";\nimport { LogicalFile } from \"./logicalfile.ts\";\nimport { RestResult, RestService } from \"./rest.ts\";\nimport { RoxieResult, RoxieService } from \"./roxie.ts\";\nimport { WU, WUResult } from \"./wuresult.ts\";\n\nlet datasourceID = 0;\nexport class Datasource extends Activity {\n\n constructor() {\n super();\n this._id = `ds_${++datasourceID}`;\n }\n}\n\nexport type DatasourceRefType = Databomb | Form | LogicalFile | RoxieResult | WUResult | RestResult;\nexport type DatasourceType = Databomb | Form | LogicalFile | RoxieService | WU | RestService;\n\nexport class DatasourceRef extends Activity {\n _origDatasource;\n declare _datasource: DatasourceRefType;\n\n constructor() {\n super();\n }\n\n hash(more: { [key: string]: any } = {}): string {\n return super.hash({\n datasource: this._datasource ? this._datasource.hash(more) : undefined,\n ...more\n });\n }\n\n toDDL(): DDL2.IDatabombRef {\n return {\n id: this.datasource().id()\n };\n }\n}\nDatasourceRef.prototype._class += \" DatasourceRef\";\n\nexport interface DatasourceRef {\n datasource(): DatasourceRefType;\n datasource(_: DatasourceRefType): this;\n}\n\nDatasourceRef.prototype.publish(\"datasource\", null, \"widget\", \"Datasource Reference\", null, { internal: true });\n\nDatasourceRef.prototype._origDatasource = DatasourceRef.prototype.datasource;\nDatasourceRef.prototype.datasource = function (this: DatasourceRef, _?) {\n const retVal = DatasourceRef.prototype._origDatasource.apply(this, arguments);\n if (_ !== undefined) {\n this.sourceActivity(_);\n }\n return retVal;\n};","import { PropertyExt } from \"@hpcc-js/common\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { Datasource } from \"./datasource.ts\";\n\ntype IField = DDL2.IFieldBoolean | DDL2.IFieldNumber | DDL2.IFieldString | DDL2.IFieldDataset;\n\nexport class FormField extends PropertyExt {\n protected _owner: Form;\n\n disableChildField(): boolean {\n return this.type() !== \"dataset\";\n }\n\n constructor() {\n super();\n }\n\n toDDL(): IField {\n return {\n type: this.type(),\n id: this.fieldID(),\n default: this.default(),\n children: this.type() === \"dataset\" ? this.childFields().map(cf => cf.toDDL()) : undefined\n } as IField;\n }\n\n fromDDL(ddl: IField): this {\n return this\n .type(ddl.type)\n .fieldID(ddl.id)\n .default(ddl.default)\n .childFields(ddl.type === \"dataset\" && ddl.children ? ddl.children.map(FormField.fromDDL) : [])\n ;\n }\n\n static fromDDL(ddl: IField): FormField {\n return new FormField().fromDDL(ddl);\n }\n\n owner(): Form;\n owner(_: Form): this;\n owner(_?: Form): Form | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.type() && !!this.fieldID();\n }\n\n coerceFunc(): (cell: any) => boolean | number | string {\n switch (this.type()) {\n case \"boolean\":\n return cell => !!cell;\n case \"number\":\n return cell => +cell;\n case \"string\":\n return cell => \"\" + cell;\n }\n return cell => cell;\n }\n\n calcValue() {\n return this.value_exists() ? this.value() : this.default();\n }\n}\n\nexport class Form extends Datasource {\n\n constructor() {\n super();\n }\n\n toDDL(): DDL2.IForm {\n return {\n type: \"form\",\n id: this.id(),\n fields: this.validFields().map(f => f.toDDL())\n };\n }\n\n fromDDL(ddl: DDL2.IForm, skipID = false): this {\n (skipID ? this : this.id(ddl.id))\n .formFields(ddl.fields.map(FormField.fromDDL))\n ;\n return this;\n }\n\n static fromDDL(ddl: DDL2.IForm, skipID = false): Form {\n return new Form().fromDDL(ddl, skipID);\n }\n\n validFields(): FormField[] {\n return this.formFields().filter(f => f.valid());\n }\n\n hash(more: object = {}): string {\n return super.hash({\n ddl: this.toDDL(),\n ...more\n });\n }\n\n refreshMeta(): Promise<void> {\n return Promise.resolve();\n }\n\n label(): string {\n return \"Form\";\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n const retVal: DDL2.IField[] = this.validFields().map(f => f.toDDL());\n return () => retVal;\n }\n\n exec(): Promise<void> {\n return Promise.resolve();\n }\n\n computeData(): ReadonlyArray<object> {\n const retVal = {};\n this.validFields().forEach(f => {\n retVal[f.fieldID()] = f.calcValue();\n });\n return [retVal];\n }\n\n // ===\n total(): number {\n return 1;\n }\n}\nForm.prototype._class += \" Form\";\n\nexport interface FormField {\n type(): \"boolean\" | \"number\" | \"string\" | \"dataset\";\n type(_: \"boolean\" | \"number\" | \"string\" | \"dataset\"): this;\n fieldID(): string;\n fieldID(_: string): this;\n default(): boolean | number | string | any[];\n default(_: boolean | number | string | any[]): this;\n value(): boolean | number | string;\n value(_: boolean | number | string): this;\n value_exists(): boolean;\n childFields(): FormField[];\n childFields(_: FormField[]): this;\n}\n\nexport interface Form {\n formFields(): FormField[];\n formFields(_: FormField[]): this;\n}\n\nFormField.prototype.publish(\"type\", \"string\", \"set\", \"FormField Type\", [\"boolean\", \"number\", \"string\", \"dataset\"]);\nFormField.prototype.publish(\"fieldID\", \"\", \"string\", \"FormField Label\");\nFormField.prototype.publish(\"default\", null, \"any\", \"Default Value\", null, { optional: true });\nFormField.prototype.publish(\"value\", null, \"any\", \"Default Value\", null, { optional: true });\nFormField.prototype.publish(\"childFields\", [], \"propertyArray\", \"Child Fields\", null, { autoExpand: FormField, disable: (w: FormField) => w.disableChildField() });\n\nForm.prototype.publish(\"formFields\", [], \"propertyArray\", \"Multi Fields\", null, { autoExpand: FormField });","import { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { IDatasource } from \"@hpcc-js/dgrid\";\nimport { isArray } from \"@hpcc-js/util\";\nimport { csvParse as d3CsvParse, tsvParse as d3TsvParse } from \"d3-dsv\";\nimport { Activity } from \"./activity.ts\";\nimport { Datasource } from \"./datasource.ts\";\nimport { FormField } from \"./form.ts\";\n\nfunction fieldType(field: any): DDL2.IFieldType {\n if (isArray(field)) {\n return \"dataset\";\n }\n const type = typeof field;\n switch (type) {\n case \"boolean\":\n case \"number\":\n case \"string\":\n case \"object\":\n return type;\n }\n return \"string\";\n}\n\nexport function rowToFields(row: object, _jsonData): DDL2.IField[] {\n // TODO: This heuristic will fail if there are empty nested rows in the first row...\n const retVal: DDL2.IField[] = [];\n for (const key in row) {\n const field = {\n type: fieldType(row[key]),\n id: key\n } as DDL2.IField;\n switch (field.type) {\n case \"object\":\n for (const row of _jsonData) {\n let found = false;\n for (const _childKey in row[key]) {\n const rowFields = rowToFields(row[key], [row[key]]);\n field.fields = {};\n if (rowFields.length) {\n rowFields.forEach(rf => field.fields[rf.id] = rf);\n found = true;\n }\n break;\n }\n if (found) break;\n }\n break;\n case \"dataset\":\n for (const row of _jsonData) {\n if (row[key] && row[key].length) {\n field.children = rowToFields(row[key][0], row[key]);\n break;\n }\n }\n break;\n }\n retVal.push(field);\n }\n return retVal;\n}\n\nexport class Databomb extends Datasource {\n\n private _jsonData: ReadonlyArray<object> = [];\n\n constructor() {\n super();\n }\n\n toDDL(skipPayload: boolean = false): DDL2.IDatabomb {\n return {\n type: \"databomb\",\n id: this.id(),\n format: this.format(),\n payload: skipPayload ? undefined : this.payload(),\n fields: this.validFields().map(f => f.toDDL())\n };\n }\n\n fromDDL(ddl: DDL2.IDatabomb, skipID = false): this {\n (skipID ? this : this.id(ddl.id))\n .format(ddl.format)\n .payload(ddl.payload)\n .databombFields(ddl.fields.map(FormField.fromDDL))\n ;\n return this;\n }\n\n static fromDDL(ddl: DDL2.IDatabomb, skipID = false): Databomb {\n return new Databomb().fromDDL(ddl, skipID);\n }\n\n validFields(): FormField[] {\n return this.databombFields().filter(f => f.valid());\n }\n\n updateJsonData() {\n try {\n switch (this.format()) {\n case \"csv\":\n this._jsonData = d3CsvParse(this.payload());\n break;\n case \"tsv\":\n this._jsonData = d3TsvParse(this.payload());\n break;\n case \"json\":\n default:\n this._jsonData = JSON.parse(this.payload());\n break;\n }\n this.databombFields(this.preCalcFields().map(FormField.fromDDL));\n } catch (e) {\n this.databombFields([]);\n this._jsonData = [];\n }\n }\n\n hash(more: object): string {\n return super.hash({\n ddl: this.toDDL(true),\n ...more\n }) + this.payload();\n }\n\n refreshMeta(): Promise<void> {\n return Promise.resolve();\n }\n\n label(): string {\n return \"Databomb\";\n }\n\n private preCalcFields(): DDL2.IField[] {\n if (this._jsonData.length === 0) return [];\n return rowToFields(this._jsonData[0], this._jsonData);\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n return () => this.validFields().map(f => f.toDDL());\n }\n\n exec(): Promise<void> {\n return Promise.resolve();\n }\n\n computeData(): ReadonlyArray<object> {\n const coarceFuncMap = {};\n this.validFields().forEach(field => {\n coarceFuncMap[field.fieldID()] = field.coerceFunc();\n });\n return this._jsonData.map(row => {\n const retVal = {};\n for (const key in coarceFuncMap) {\n retVal[key] = coarceFuncMap[key](row[key]);\n }\n return retVal;\n });\n }\n\n // ===\n total(): number {\n return this._jsonData.length;\n }\n}\nDatabomb.prototype._class += \" Databomb\";\n\nexport interface Databomb {\n format(): \"json\" | \"csv\" | \"tsv\";\n format(_: \"json\" | \"csv\" | \"tsv\"): this;\n payload(): string;\n payload(_: string): this;\n databombFields(): FormField[];\n databombFields(_: FormField[]): this;\n}\n\nDatabomb.prototype.publish(\"format\", \"json\", \"set\", \"Databomb Format\", [\"json\", \"csv\", \"tsv\"]);\nDatabomb.prototype.publish(\"payload\", \"\", \"string\", \"Databomb array\", null, { multiline: true });\nDatabomb.prototype.publish(\"databombFields\", [], \"propertyArray\", \"Multi Fields\", null, { autoExpand: FormField });\n\nconst payloadFormat = Databomb.prototype.format;\nDatabomb.prototype.format = function (this: Databomb, _?) {\n const retVal = payloadFormat.apply(this, arguments);\n if (arguments.length) {\n this.updateJsonData();\n }\n return retVal;\n};\n\nconst databombPayloadOrig = Databomb.prototype.payload;\nDatabomb.prototype.payload = function (this: Databomb, _?) {\n const retVal = databombPayloadOrig.apply(this, arguments);\n if (arguments.length) {\n this.updateJsonData();\n }\n return retVal;\n};\n\nexport const emptyDatabomb = new Databomb().id(\"Empty\").payload(\"[]\");\n\nexport class DatasourceAdapt implements IDatasource {\n private _activity: Activity;\n\n constructor(activity: Activity) {\n this._activity = activity || emptyDatabomb;\n }\n\n exec(): Promise<void> {\n return this._activity.refreshMeta().then(() => {\n return this._activity.exec();\n });\n }\n\n id(): string {\n return this._activity.id();\n }\n hash(more: { [key: string]: any } = {}): string {\n return this._activity.hash(more);\n }\n label(): string {\n return this._activity.label();\n }\n outFields(): DDL2.IField[] {\n return this._activity && this._activity.outFields ? this._activity.outFields() as DDL2.IField[] : [];\n }\n total(): number {\n return this._activity ? this._activity.outData().length : 0;\n }\n fetch(from: number, count: number): Promise<ReadonlyArray<object>> {\n return this.exec().then(() => {\n const data = this._activity.outData();\n if (from === 0 && data.length <= count) {\n return Promise.resolve(data);\n }\n return Promise.resolve(data.slice(from, from + count));\n });\n }\n}\n","import { Result, Workunit, XSDXMLNode } from \"@hpcc-js/comms\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { AsyncOrderedQueue, debounce, hashSum } from \"@hpcc-js/util\";\nimport { ElementContainer } from \"../model/element.ts\";\nimport { schemaRow2IField } from \"./activity.ts\";\nimport { Datasource, DatasourceRef } from \"./datasource.ts\";\n\nexport abstract class ESPResult extends Datasource {\n protected _result: Result;\n protected _schema: XSDXMLNode[] = [];\n protected _meta: DDL2.IField[] = [];\n protected _total: number;\n private _data: ReadonlyArray<object> = [];\n\n constructor(protected _ec: ElementContainer) {\n super();\n this\n .samples(this._ec.samples())\n .sampleSize(this._ec.sampleSize())\n ;\n }\n\n hash(more: object = {}): string {\n return hashSum({\n samples: this.samples(),\n sampleSize: this.sampleSize(),\n ...more\n });\n }\n\n abstract _createResult(): Result;\n\n _prevMetaHash: string;\n refreshMetaPromise: Promise<void>;\n refreshMeta(): Promise<void> {\n if (this._prevMetaHash !== this.hash()) {\n this._prevMetaHash = this.hash();\n delete this.refreshMetaPromise;\n }\n if (!this.refreshMetaPromise) {\n this.refreshMetaPromise = super.refreshMeta().then(() => {\n this._result = this._createResult();\n if (this._result) {\n return this._result.refresh();\n }\n throw new Error(\"No valid result\");\n }).then(result => {\n this._total = result.Total;\n this._schema = result.fields();\n this._meta = this._meta && this._meta.length ? this._meta : this._schema.map(schemaRow2IField);\n }).catch(e => {\n this._total = 0;\n this._schema = [];\n this._meta = [];\n });\n }\n return this.refreshMetaPromise;\n }\n\n responseFields(): DDL2.IField[];\n responseFields(_: DDL2.IField[]): this;\n responseFields(_?: DDL2.IField[]): ReadonlyArray<DDL2.IField> | this {\n if (!arguments.length) return this._meta;\n this._meta = _;\n this.refreshMeta();\n return this;\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n return () => this.responseFields();\n }\n\n exec(): Promise<void> {\n return this._exec();\n }\n\n private _prevExecHash: string;\n private _exec = debounce((): Promise<void> => {\n if (this._prevExecHash !== this.hash()) {\n this._prevExecHash = this.hash();\n return super.exec().then(() => {\n return this.sample();\n }).then(response => {\n this._data = this.fixInt64(response);\n }).catch(e => {\n this._data = [];\n });\n } else {\n return Promise.resolve();\n }\n });\n\n inData(): ReadonlyArray<object> {\n return this._data;\n }\n\n computeData(): ReadonlyArray<object> {\n return this._data;\n }\n\n total(): number {\n return this._total;\n }\n\n // ---\n async fetch(from: number, count: number): Promise<any[]> {\n if (count > this.samples() * this.sampleSize()) {\n return this.sample();\n }\n return this._fetch(from, count);\n }\n\n private _fetchQ = new AsyncOrderedQueue();\n private _fetch(from: number, count: number): Promise<any[]> {\n return this._fetchQ.push(\n this._result ? this._result\n .fetchRows(from, count)\n .catch(e => {\n return [];\n }) :\n Promise.resolve([])\n );\n }\n\n private sample = debounce((samples: number = this.samples(), sampleSize: number = this.sampleSize()): Promise<any[]> => {\n const pages: Array<Promise<any[]>> = [];\n if (samples * sampleSize >= this.total()) {\n pages.push(this._fetch(0, this.total()));\n } else {\n const lastPage = this.total() - sampleSize;\n for (let i = 0; i < samples; ++i) {\n pages.push(this._fetch(Math.floor(i * lastPage / samples), sampleSize));\n }\n }\n return Promise.all(pages).then(responses => {\n let retVal2: any[] = [];\n for (const response of responses) {\n retVal2 = retVal2.concat(response);\n }\n return retVal2;\n });\n });\n}\nESPResult.prototype._class += \" ESPResult\";\n\nexport interface ESPResult {\n samples(): number;\n samples(_: number): this;\n sampleSize(): number;\n sampleSize(_: number): this;\n}\n\nexport class WUResult extends ESPResult {\n\n _origWu;\n _origResultName;\n\n declare _wu: WU;\n declare _resultName: string;\n\n constructor(_ec: ElementContainer) {\n super(_ec);\n this._wu = new WU(this._ec);\n }\n\n url(): string {\n return this._wu.url();\n }\n\n wuid(): string {\n return this._wu.wuid();\n }\n\n toDDL(): DDL2.IWUResult {\n return {\n type: \"wuresult\",\n id: this.id(),\n url: this._wu.url(),\n wuid: this.wuid(),\n outputs: {\n [this.resultName()]: {\n fields: this.responseFields()\n }\n }\n };\n }\n\n fromDDL(ddl: DDL2.IWUResult, skipID = false): this {\n if (ddl.outputs[this.resultName()]) {\n return this.responseFields(ddl.outputs[this.resultName()].fields);\n }\n return this;\n }\n\n static fromDDL(ec: ElementContainer, ddl: DDL2.IWUResult, wu: WU, resultName: string, skipID = false): WUResult {\n return new WUResult(ec)\n .wu(wu)\n .resultName(resultName)\n .fromDDL(ddl)\n ;\n }\n\n _createResult(): Result {\n if (this._wu.url() && this.wuid() && this.resultName()) {\n return Result.attach({ baseUrl: this._wu.url(), hookSend: this._ec.hookSend() }, this.wuid(), this.resultName());\n }\n return undefined;\n }\n\n sourceHash(): string {\n return super.hash({\n wuid: this.wuid()\n });\n }\n\n hash(more: object): string {\n return super.hash({\n ddl: this.toDDL()\n });\n }\n\n label(): string {\n return `${this.wuid()}\\n${this.resultName()}`;\n }\n}\nWUResult.prototype._class += \" WUResult\";\n\nexport interface WUResult {\n wu(): WU;\n wu(_: WU): this;\n resultName(): string;\n resultName(_: string): this;\n}\n\nexport class WU extends Datasource {\n _origUrl;\n _origWuid;\n\n protected _workunit: Workunit;\n protected _outputs: { [id: string]: WUResult } = {};\n\n constructor(private _ec: ElementContainer) {\n super();\n }\n\n toDDL(): DDL2.IWUResult {\n const ddlOutputs: DDL2.OutputDict = {};\n for (const resultName in this._outputs) {\n ddlOutputs[resultName] = {\n fields: this._outputs[resultName].responseFields()\n };\n }\n return {\n type: \"wuresult\",\n id: this.id(),\n url: this.url(),\n wuid: this.wuid(),\n outputs: ddlOutputs\n };\n }\n\n fromDDL(ddl: DDL2.IWUResult, skipID = false): this {\n (skipID ? this : this.id(ddl.id))\n .url(ddl.url)\n .wuid(ddl.wuid)\n ;\n const wuResults: { [id: string]: WUResult } = {};\n for (const resultName in ddl.outputs) {\n wuResults[resultName] = WUResult.fromDDL(this._ec, ddl, this, resultName);\n }\n this._outputs = wuResults;\n return this;\n }\n\n static fromDDL(elementContainer: ElementContainer, ddl: DDL2.IWUResult, skipID = false): WU {\n return new WU(elementContainer).fromDDL(ddl, skipID);\n }\n\n hash(): string {\n return hashSum({\n url: this.url(),\n wuid: this.wuid()\n });\n }\n\n label(): string {\n return this.wuid();\n }\n\n outputs(): WUResult[] {\n const retVal = [];\n for (const resultName in this._outputs) {\n retVal.push(this._outputs[resultName]);\n }\n return retVal;\n }\n\n outputDDL(): DDL2.OutputDict {\n const retVal: DDL2.OutputDict = {};\n for (const resultName in this._outputs) {\n retVal[resultName] = {\n fields: this._outputs[resultName].outFields() as DDL2.IField[]\n };\n }\n return retVal;\n }\n\n output(id: string): WUResult {\n return this._outputs[id];\n }\n\n private _prevSourceHash: string;\n private refreshMetaPromise: Promise<void>;\n private _resultNames: string[] = [];\n refreshMeta(): Promise<void> {\n if (!this.url() || !this.wuid()) {\n return Promise.resolve();\n }\n if (this._prevSourceHash !== this.hash()) {\n this._prevSourceHash = this.hash();\n delete this.refreshMetaPromise;\n }\n if (!this.refreshMetaPromise) {\n this.refreshMetaPromise = super.refreshMeta().then(() => {\n this._workunit = Workunit.attach({ baseUrl: this.url(), hookSend: this._ec.hookSend() }, this.wuid());\n return this._workunit.fetchResults();\n }).then(results => {\n this._resultNames = results.map(r => r.Name);\n }).catch(e => {\n });\n }\n return this.refreshMetaPromise;\n }\n\n resultNames(): string[] {\n return this._resultNames;\n }\n}\nWU.prototype._class += \" WU\";\n\nexport interface WU {\n url(): string;\n url(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n}\n\nexport class WUResultRef extends DatasourceRef {\n\n datasource(): WUResult;\n datasource(_: WUResult): this;\n datasource(_?: WUResult): this | WUResult {\n return super.datasource.apply(this, arguments);\n }\n\n resultName(): string;\n resultName(_: string): this;\n resultName(_?: string): string | this {\n if (!arguments.length) return this.datasource().resultName();\n this.datasource().resultName(_);\n return this;\n }\n\n toDDL(): DDL2.IWUResultRef {\n return {\n id: this.datasource().wu().id(),\n output: this.resultName()\n };\n }\n}\nWUResultRef.prototype._class += \" WUResultRef\";\n\nESPResult.prototype.publish(\"samples\", 10, \"number\", \"Number of samples\");\nESPResult.prototype.publish(\"sampleSize\", 100, \"number\", \"Sample size\");\n\nWUResult.prototype.publish(\"wu\", null, \"widget\", \"Workunit\");\nWUResult.prototype.publish(\"resultName\", \"\", \"set\", \"Result Name\", function (this: WUResult): string[] {\n return this._wu !== undefined ? this._wu.resultNames() : [];\n});\n\nWUResult.prototype._origWu = WUResult.prototype.wu;\nWUResult.prototype.wu = function (this: WUResult, _?) {\n const retVal = WUResult.prototype._origWu.apply(this, arguments);\n if (_ !== undefined) {\n this._wu.refreshMeta();\n }\n return retVal;\n};\n\nWUResult.prototype._origResultName = WUResult.prototype.resultName;\nWUResult.prototype.resultName = function (this: WUResult, _?) {\n const prev = this._resultName;\n const retVal = WUResult.prototype._origResultName.apply(this, arguments);\n if (_ !== undefined && prev !== _) {\n this.responseFields([]);\n }\n return retVal;\n};\n\nWU.prototype.publish(\"url\", \"\", \"string\", \"ESP Url (http://x.x.x.x:8010)\");\nWU.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\n\nWU.prototype._origUrl = WU.prototype.url;\nWU.prototype.url = function (this: WU, _?) {\n const retVal = WU.prototype._origUrl.apply(this, arguments);\n if (_ !== undefined) {\n this.refreshMeta();\n }\n return retVal;\n};\n\nWU.prototype._origWuid = WU.prototype.wuid;\nWU.prototype.wuid = function (this: WU, _?) {\n const retVal = WU.prototype._origWuid.apply(this, arguments);\n if (_ !== undefined) {\n this.refreshMeta();\n }\n return retVal;\n};","import { Result } from \"@hpcc-js/comms\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { ElementContainer } from \"../model/element.ts\";\nimport { ESPResult } from \"./wuresult.ts\";\n\nexport class LogicalFile extends ESPResult {\n\n constructor(_ec: ElementContainer) {\n super(_ec);\n }\n\n toDDL(): DDL2.ILogicalFile {\n return {\n type: \"logicalfile\",\n id: this.id(),\n url: this.url(),\n logicalFile: this.logicalFile(),\n fields: this.responseFields()\n };\n }\n\n fromDDL(ddl: DDL2.ILogicalFile, skipID = false): this {\n (skipID ? this : this.id(ddl.id))\n .url(ddl.url)\n .logicalFile(ddl.logicalFile)\n ;\n return this;\n }\n\n static fromDDL(ec: ElementContainer, ddl: DDL2.ILogicalFile, skipID = false): LogicalFile {\n return new LogicalFile(ec).fromDDL(ddl, skipID);\n }\n\n _createResult(): Result {\n return Result.attachLogicalFile({ baseUrl: this.url(), hookSend: this._ec.hookSend() }, this.nodeGroup(), this.logicalFile());\n }\n\n sourceHash(): string {\n return super.hash({\n logicalFile: this.logicalFile()\n });\n }\n\n hash(more: object): string {\n return super.hash({\n ddl: this.toDDL()\n });\n }\n\n label(): string {\n return `${this.logicalFile()}`;\n }\n}\nLogicalFile.prototype._class += \" LogicalFile\";\n\nexport interface LogicalFile {\n url(): string;\n url(_: string): this;\n nodeGroup(): string;\n nodeGroup(_: string): this;\n logicalFile(): string;\n logicalFile(_: string): this;\n}\nLogicalFile.prototype.publish(\"url\", \"\", \"string\", \"ESP Url (http://x.x.x.x:8010)\");\nLogicalFile.prototype.publish(\"nodeGroup\", \"\", \"string\", \"Node Group\");\nLogicalFile.prototype.publish(\"logicalFile\", \"\", \"string\", \"Logical File Name\");","import { PropertyExt } from \"@hpcc-js/common\";\nimport { createConnection } from \"@hpcc-js/comms\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { AsyncOrderedQueue, compare, hashSum } from \"@hpcc-js/util\";\nimport { Element, ElementContainer } from \"../model/element.ts\";\nimport { IActivityError, ReferencedFields } from \"./activity.ts\";\nimport { rowToFields } from \"./databomb.ts\";\nimport { Datasource, DatasourceRef } from \"./datasource.ts\";\n\nexport class RestField extends PropertyExt {\n protected _owner: RestService;\n\n constructor() {\n super();\n }\n\n toDDL(): DDL2.IFieldString {\n return {\n type: \"string\",\n id: this.fieldID()\n };\n }\n\n fromDDL(ddl: DDL2.IFieldString): this {\n return this\n .fieldID(ddl.id)\n ;\n }\n\n static fromDDL(ddl: DDL2.IFieldString): RestField {\n return new RestField().fromDDL(ddl);\n }\n\n owner(): RestService;\n owner(_: RestService): this;\n owner(_?: RestService): RestService | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.fieldID();\n }\n}\n\nexport class RestService extends Datasource {\n\n private _responseFields: { [outputID: string]: DDL2.IField[] } = {};\n\n constructor(readonly _ec: ElementContainer) {\n super();\n }\n\n toDDL(): DDL2.IRestService {\n return {\n type: \"rest\",\n id: this.id(),\n url: this.url(),\n action: this.action(),\n mode: this.mode(),\n inputs: this.validRequestFields().map(rf => rf.toDDL()),\n outputs: this.outputDDL()\n };\n }\n\n fromDDL(ddl: DDL2.IRestService, skipID = false): this {\n (skipID ? this : this.id(ddl.id))\n .url(ddl.url)\n .action(ddl.action)\n .mode(ddl.mode || \"get\")\n .requestFields(ddl.inputs.map(RestField.fromDDL))\n ;\n for (const key in ddl.outputs) {\n this.responseFields(key, ddl.outputs[key].fields);\n }\n return this;\n }\n\n static fromDDL(ec: ElementContainer, ddl: DDL2.IRestService, skipID = false): RestService {\n return new RestService(ec).fromDDL(ddl, skipID);\n }\n\n hash(more: object = {}): string {\n return hashSum({\n url: this.url(),\n action: this.action(),\n mode: this.mode(),\n ...more\n });\n }\n\n label(): string {\n return this.action();\n }\n\n responseFields(resultName: string): DDL2.IField[];\n responseFields(resultName: string, _: DDL2.IField[]): this;\n responseFields(resultName: string, _?: DDL2.IField[]): DDL2.IField[] | this {\n if (arguments.length === 1) return this._responseFields[resultName] || [];\n this._responseFields[resultName] = _;\n return this;\n }\n\n validRequestFields(): RestField[] {\n return this.requestFields().filter(f => f.valid());\n }\n\n private _prevRequestHash;\n private _prevPromise;\n private _submitQ = new AsyncOrderedQueue();\n submit(request: { [key: string]: any }): Promise<{ [key: string]: any }> {\n const requestHash = hashSum(request);\n if (!this._prevPromise || this._prevRequestHash !== requestHash) {\n this._prevRequestHash = requestHash;\n const conn = createConnection({ baseUrl: this.url(), type: this.mode() });\n this._prevPromise = this._submitQ.push(conn.send(this.action(), request));\n }\n return this._prevPromise;\n }\n\n resultNames(): string[] {\n const retVal: string[] = [];\n for (const key in this._responseFields) {\n retVal.push(key);\n }\n return retVal;\n }\n\n outputDDL(): DDL2.OutputDict {\n const retVal: DDL2.OutputDict = {};\n this.resultNames().forEach(resultName => {\n retVal[resultName] = {\n fields: this._responseFields[resultName]\n };\n });\n return retVal;\n }\n}\nRestService.prototype._class += \" RestService\";\n\nexport class RestResult extends Datasource {\n\n _origService;\n\n declare _service: RestService;\n\n constructor(private _ec: ElementContainer) {\n super();\n this._service = new RestService(this._ec);\n }\n\n validRequestFields(): RestField[] {\n return this.service().validRequestFields();\n }\n\n toDDL(): DDL2.IRestService {\n return this.service().toDDL();\n }\n\n fromDDL(ddl: DDL2.IRestService): this {\n this.service().fromDDL(ddl);\n return this;\n }\n\n static fromDDL(ec: ElementContainer, rs: RestService, resultName: string): RestResult {\n return new RestResult(ec)\n .id(`${rs.id()}_${resultName}`)\n .service(rs)\n .resultName(resultName)\n ;\n }\n\n serviceID(): string {\n return `${this.service().url()}/${this.service().action()}}`;\n }\n\n sourceHash(): string {\n return this.service().hash();\n }\n\n requestFields(): DDL2.IField[] {\n return this.service().requestFields().map(rf => rf.toDDL());\n }\n\n responseFields(): DDL2.IField[];\n responseFields(_: DDL2.IField[]): this;\n responseFields(_?: DDL2.IField[]): this | DDL2.IField[] {\n if (!arguments.length) return this.service().responseFields(this.resultName());\n this.service().responseFields(this.resultName(), _);\n return this;\n }\n\n hash(more: object = {}): string {\n return hashSum({\n source: this.sourceHash(),\n resultName: this.resultName(),\n ...more\n });\n }\n\n label(): string {\n return `${this.service().label()}\\n${this.resultName()}`;\n }\n\n private _jsonData: object[] = [];\n private jsonDataFields(): DDL2.IField[] {\n if (!this._jsonData || !this._jsonData.length) return [];\n const retVal = rowToFields(this._jsonData[0], this._jsonData);\n this.responseFields(retVal);\n return retVal;\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n return () => this.jsonDataFields();\n }\n\n computeData(): ReadonlyArray<object> {\n return this._jsonData;\n }\n\n submit(request: { [key: string]: any }): Promise<{ [key: string]: any }> {\n return this.service().submit(request).then(response => {\n const resultName = this.resultName();\n const resultFields = resultName ? resultName.split(\".\") : [];\n for (const field of resultFields) {\n response = (response || {})[field];\n }\n this._jsonData = response as object[];\n return response;\n });\n }\n\n formatRequest() {\n const request = {};\n this.service().validRequestFields().forEach(f => {\n request[f.fieldID()] = \"\";\n });\n return request;\n }\n\n exec(): Promise<void> {\n return this.submit(this.formatRequest()).then(response => { });\n }\n}\nRestResult.prototype._class += \" RestResult\";\n\nexport class Param extends PropertyExt {\n\n validate(prefix: string): IActivityError[] {\n const retVal: IActivityError[] = [];\n if (!this.source_valid()) {\n retVal.push({\n source: `${prefix}.source.${this.source()}`,\n msg: `Invalid source: \"${this.source()}\"`,\n hint: `expected: ${JSON.stringify(this.visualizationIDs())}`\n });\n }\n if (!this.remoteField_valid()) {\n retVal.push({\n source: `${prefix}.remoteField`,\n msg: `Invalid remoteField: \"${this.remoteField()}\"`,\n hint: `expected: ${JSON.stringify(this.sourceOutFields())}`\n });\n }\n if (!this.value_valid()) {\n retVal.push({\n source: `${prefix}.value`,\n msg: `Invalid value: \"${this.value()}\"`,\n hint: \"expected: any value.\"\n });\n }\n return retVal;\n }\n\n constructor(private _ec: ElementContainer) {\n super();\n }\n\n toDDL(): DDL2.IRequestField {\n return {\n source: this.source(),\n remoteFieldID: this.remoteField(),\n localFieldID: this.localField(),\n value: this.value()\n };\n }\n\n fromDDL(ddl: DDL2.IRequestField): this {\n return this\n .source(ddl.source)\n .remoteField(ddl.remoteFieldID)\n .localField(ddl.localFieldID)\n .value(ddl.value)\n ;\n }\n\n static fromDDL(ec: ElementContainer, ddl: DDL2.IRequestField): Param {\n return new Param(ec).fromDDL(ddl);\n }\n\n hash() {\n return hashSum({\n label: this.localField(),\n source: this.source(),\n sourceField: this.remoteField()\n });\n }\n\n visualizationIDs() {\n return this._ec.elementIDs();\n }\n\n sourceFields() {\n return this.sourceOutFields().map(field => field.id);\n }\n\n sourceViz(): Element {\n return this._ec.element(this.source());\n }\n\n sourceOutFields(): ReadonlyArray<DDL2.IField> {\n return this.sourceViz().hipiePipeline().selectionFields();\n }\n\n sourceSelection(): any[] {\n return this.sourceViz().selection();\n }\n\n calcValue(): Array<string | number | boolean> {\n if (this.source_exists() && this.remoteField_exists()) {\n const sourceSelection = this.sourceSelection();\n return sourceSelection.map(row => row[this.remoteField()]);\n } else if (this.value_exists()) {\n return [this.value()];\n }\n return [\"\"];\n }\n\n exists(): boolean {\n return this.localField_exists() && ((this.source_exists() && this.remoteField_exists()) || this.value_exists());\n }\n}\nParam.prototype._class += \" Param\";\n\nexport class RestResultRef extends DatasourceRef {\n\n serviceID(): string {\n return this.datasource().serviceID();\n }\n\n private _data: ReadonlyArray<object> = [];\n\n datasource(): RestResult;\n datasource(_: RestResult): this;\n datasource(_?: RestResult): this | RestResult {\n return super.datasource.apply(this, arguments);\n }\n\n url(): string {\n return this.datasource().service().url();\n }\n\n action(): string {\n return this.datasource().service().action();\n }\n\n resultName(): string {\n return this.datasource().resultName();\n }\n\n validate(): IActivityError[] {\n let retVal: IActivityError[] = [];\n for (const filter of this.validParams()) {\n retVal = retVal.concat(filter.validate(\"request\"));\n }\n return retVal;\n }\n\n constructor(private _ec: ElementContainer) {\n super();\n }\n\n toDDL(): DDL2.IRoxieServiceRef {\n return {\n id: this.datasource().service().id(),\n output: this.resultName(),\n request: this.validParams().map((vp): DDL2.IRequestField => {\n return {\n source: vp.source(),\n remoteFieldID: vp.remoteField(),\n localFieldID: vp.localField(),\n value: vp.value()\n };\n })\n };\n }\n\n sourceHash(): string {\n return this.datasource().hash();\n }\n\n requestFieldRefs(): DDL2.IRequestField[];\n requestFieldRefs(_: DDL2.IRequestField[]): this;\n requestFieldRefs(_?: DDL2.IRequestField[]): DDL2.IRequestField[] | this {\n if (!arguments.length) return this.validParams().map(param => param.toDDL());\n this.request(_.map(fc => Param.fromDDL(this._ec, fc)));\n return this;\n }\n\n requestFields(): DDL2.IField[] {\n return this.datasource().requestFields();\n }\n\n responseFields(): DDL2.IField[] {\n return this.datasource().responseFields();\n }\n\n hash(): string {\n return this.datasource().hash({\n resultName: this.resultName(),\n request: this.formatRequest()\n });\n }\n\n label(): string {\n return `${this.datasource().label()}\\n${this.datasource().resultName()}`;\n }\n\n elementIDs() {\n return this._ec.elementIDs();\n }\n\n element(source) {\n return this._ec.element(source);\n }\n\n referencedFields(refs: ReferencedFields): void {\n super.referencedFields(refs);\n const localFieldIDs: string[] = [];\n for (const param of this.validParams()) {\n const filterSource = param.sourceViz().hipiePipeline();\n if (!refs.inputs[this.id()]) {\n refs.inputs[this.id()] = [];\n }\n refs.inputs[this.id()].push(param.localField());\n filterSource.resolveFields(refs, [param.remoteField()]);\n }\n super.resolveFields(refs, localFieldIDs);\n }\n\n validParams() {\n return this.request().filter(param => param.exists());\n }\n\n refreshMeta(): Promise<void> {\n return this.datasource().refreshMeta().then(() => {\n const oldParams = this.request();\n const diffs = compare(oldParams.map(p => p.localField()), this.datasource().validRequestFields().map(ff => ff.fieldID()));\n const newParams = oldParams.filter(op => diffs.update.indexOf(op.localField()) >= 0);\n this.request(newParams.concat(diffs.enter.map(label => new Param(this._ec).localField(label))));\n });\n }\n\n updatedBy(): string[] {\n return this.validParams().map(param => param.source());\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n return this.datasource().computeFields(inFields);\n }\n\n formatRequest(): { [key: string]: any } {\n const request = this.datasource().formatRequest();\n this.request().forEach(f => {\n if (request[f.localField()] !== undefined) {\n request[f.localField()] = f.calcValue() || request[f.localField()];\n }\n });\n return request;\n }\n\n private _prevRequestHash;\n private _prevRequestPromise;\n exec(): Promise<void> {\n const request = this.formatRequest();\n const requestHash = hashSum({ hash: this.hash(), request });\n if (this._prevRequestHash !== requestHash) {\n this._prevRequestHash = requestHash;\n this._prevRequestPromise = this.datasource().submit(request).then((response: { [key: string]: any }) => {\n this._data = this.fixInt64(response);\n return this._data;\n });\n }\n return this._prevRequestPromise;\n }\n\n inData(): ReadonlyArray<object> {\n return this._data;\n }\n\n computeData(): ReadonlyArray<object> {\n return this._data;\n }\n}\nRestResultRef.prototype._class += \" RestResultRef\";\n\nexport interface RestField {\n fieldID(): string;\n fieldID(_: string): this;\n}\n\nRestField.prototype.publish(\"fieldID\", \"\", \"string\", \"RestField Label\");\n\nexport interface RestService {\n url(): string;\n url(_: string): this;\n action(): string;\n action(_: string): this;\n mode(): \"get\" | \"post\";\n mode(_: \"get\" | \"post\"): this;\n requestFields(): RestField[];\n requestFields(_: RestField[]): this;\n}\n\nRestService.prototype.publish(\"url\", \"\", \"string\", \"REST Url\");\nRestService.prototype.publish(\"action\", \"\", \"string\", \"Query Set\");\nRestService.prototype.publish(\"mode\", \"get\", \"set\", \"Request mode\", [\"get\", \"post\"]);\nRestService.prototype.publish(\"requestFields\", [], \"propertyArray\", \"Multi Fields\", null, { autoExpand: RestField });\n\nexport interface RestResult {\n service(): RestService;\n service(_: RestService): this;\n resultName(): string;\n resultName(_: string): this;\n}\n\nRestResult.prototype.publish(\"service\", null, \"widget\", \"Rest service\");\nRestResult.prototype.publish(\"resultName\", \"\", \"string\", \"Result Name\");\n\nRestResult.prototype._origService = RestResult.prototype.service;\nRestResult.prototype.service = function (this: RestResult, _?) {\n const retVal = RestResult.prototype._origService.apply(this, arguments);\n if (_ !== undefined) {\n this._service.refreshMeta();\n }\n return retVal;\n};\n\nexport interface Param {\n localField(): string;\n localField(_: string): this;\n localField_exists(): boolean;\n source(): string;\n source(_: string): this;\n source_exists(): boolean;\n source_valid(): boolean;\n source_disabled(): boolean;\n remoteField(): string;\n remoteField(_: string): this;\n remoteField_exists(): boolean;\n remoteField_valid(): boolean;\n remoteField_disabled(): boolean;\n value(): string;\n value(_: string): this;\n value_exists(): boolean;\n value_valid(): boolean;\n value_disabled(): boolean;\n}\n\nParam.prototype.publish(\"localField\", null, \"string\", \"Label\");\nParam.prototype.publish(\"source\", null, \"set\", \"Activity\", function (this: Param) { return this.visualizationIDs(); }, {\n optional: true,\n disable: (w: Param): boolean => w.value_exists(),\n validate: (w: Param): boolean => w.source_disabled() || w.visualizationIDs().indexOf(w.source()) >= 0\n});\nParam.prototype.publish(\"remoteField\", null, \"set\", \"Source Field\", function (this: Param) { return this.sourceFields(); }, {\n optional: true,\n disable: (w: Param): boolean => !w.source_exists() || w.value_exists(),\n validate: (w: Param): boolean => w.remoteField_disabled() || w.sourceFields().indexOf(w.remoteField()) >= 0\n});\nParam.prototype.publish(\"value\", null, \"string\", \"Static Value\", null, {\n optional: true,\n disable: (w: Param): boolean => w.source_exists(),\n validate: (w: Param): boolean => w.value_disabled() || w.value_exists()\n});\n\nexport interface RestResultRef {\n request(): Param[];\n request(_: Param[]): this;\n}\n\nRestResultRef.prototype.publish(\"request\", [], \"propertyArray\", \"Request Fields\");\n","import { Query as CommsQuery } from \"@hpcc-js/comms\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { AsyncOrderedQueue, compare, hashSum } from \"@hpcc-js/util\";\nimport { ElementContainer } from \"../model/element.ts\";\nimport { IActivityError, ReferencedFields } from \"./activity.ts\";\nimport { Datasource, DatasourceRef } from \"./datasource.ts\";\nimport { Param } from \"./rest.ts\";\n\nfunction parseUrl(_: string): { url: string, querySet: string, queryID: string } {\n // \"http://10.241.100.157:8002/WsEcl/submit/query/roxie/carmigjx_govbisgsavi.Ins4621360_Service_00000006/json\",\n const parts = _.split(\"/WsEcl/submit/query/\");\n if (parts.length < 2) throw new Error(`Invalid roxie URL: ${_}`);\n const urlParts = parts[0].split(\":\");\n if (urlParts.length < 3) throw new Error(`Invalid roxie URL: ${_}`);\n const roxieParts = parts[1].split(\"/\");\n if (roxieParts.length < 2) throw new Error(`Invalid roxie URL: ${_}`);\n return {\n url: `${urlParts[0]}:${urlParts[1]}:${urlParts[2] === \"18002\" ? \"18010\" : \"8010\"}`,\n querySet: roxieParts[0],\n queryID: roxieParts[1]\n };\n}\n\nfunction isHipieRequest(requestField: string): boolean {\n return requestField.length >= 8 && requestField.indexOf(\"_changed\") === requestField.length - 8;\n}\n\nfunction isHipieResponse(resultName: string): boolean {\n return (resultName.length >= 8 && resultName.indexOf(\"_changed\") === resultName.length - 8) ||\n ([\"HIPIE_DDL\", \"HIPIE_DDLGLOBALS\", \"hipieversion\"].indexOf(resultName) >= 0)\n ;\n}\n\nexport class RoxieService extends Datasource {\n private _query: CommsQuery;\n private _requestFields: DDL2.IField[];\n private _responseFields: { [outputID: string]: DDL2.IField[] } = {};\n private _type: \"roxie\" | \"hipie\" = \"roxie\";\n\n constructor(private _ec: ElementContainer) {\n super();\n }\n\n toDDL(): DDL2.IRoxieService | DDL2.IHipieService {\n return {\n type: this._type,\n id: this.id(),\n url: this.url(),\n querySet: this.querySet(),\n queryID: this.queryID(),\n inputs: this.requestFields(),\n outputs: this.outputDDL()\n };\n }\n\n fromDDL(ddl: DDL2.IRoxieService | DDL2.IHipieService, skipID = false): this {\n this._type = ddl.type;\n (skipID ? this : this.id(ddl.id))\n .url(ddl.url)\n .querySet(ddl.querySet)\n .queryID(ddl.queryID)\n ;\n if (ddl.inputs && ddl.inputs.length) {\n this.requestFields(ddl.inputs);\n }\n for (const key in ddl.outputs) {\n this.responseFields(key, ddl.outputs[key].fields);\n }\n return this;\n }\n\n static fromDDL(ec: ElementContainer, ddl: DDL2.IRoxieService | DDL2.IHipieService, skipID = false): RoxieService {\n return new RoxieService(ec).fromDDL(ddl, skipID);\n }\n\n hash(more: object = {}): string {\n return hashSum({\n url: this.url(),\n querySet: this.querySet(),\n queryId: this.queryID(),\n ignoreHipieRequest: this.ignoreHipieRequest(),\n ignoreHipieResponse: this.ignoreHipieResponse(),\n ...more\n });\n }\n\n label(): string {\n return this.queryID();\n }\n\n private _prevSourceHash: string;\n private refreshMetaPromise: Promise<void>;\n refreshMeta(): Promise<void> {\n if (this._prevSourceHash !== this.hash()) {\n this._prevSourceHash = this.hash();\n delete this.refreshMetaPromise;\n }\n if (!this.refreshMetaPromise) {\n const hasMeta = !!this._requestFields;\n this.refreshMetaPromise = new Promise<CommsQuery>((resolve, reject) => {\n const query = CommsQuery.attach({ baseUrl: this.url(), hookSend: this._ec.hookSend() }, this.querySet(), this.queryID());\n if (!hasMeta || this.ignoreHipieRequest() || this.ignoreHipieResponse()) {\n resolve(query.refresh());\n }\n resolve(query);\n }).then((query) => {\n this._query = query;\n if (!hasMeta || this.ignoreHipieRequest()) {\n this._requestFields = query.requestFields().filter(row => this._type === \"roxie\" || !isHipieRequest(row.id));\n }\n if (!hasMeta || this.ignoreHipieResponse()) {\n query.resultNames().filter(resultName => this._type === \"roxie\" || !isHipieResponse(resultName)).forEach(resultName => {\n this._responseFields[resultName] = query.resultFields(resultName);\n });\n }\n });\n }\n return this.refreshMetaPromise;\n }\n\n requestFields(): DDL2.IField[];\n requestFields(_: DDL2.IField[]): this;\n requestFields(_?: DDL2.IField[]): DDL2.IField[] | this {\n if (!arguments.length) return this._requestFields || [];\n this._requestFields = _;\n return this;\n }\n\n responseFields(resultName: string): DDL2.IField[];\n responseFields(resultName: string, _: DDL2.IField[]): this;\n responseFields(resultName: string, _?: DDL2.IField[]): DDL2.IField[] | this {\n if (arguments.length === 1) return this._responseFields[resultName] || [];\n this._responseFields[resultName] = _;\n return this;\n }\n\n private _prevRequestHash;\n private _prevPromise;\n private _submitQ = new AsyncOrderedQueue();\n submit(request: { [key: string]: any }): Promise<{ [key: string]: any }> {\n const requestHash = hashSum(request);\n if (!this._prevPromise || this._prevRequestHash !== requestHash) {\n this._prevRequestHash = requestHash;\n this._prevPromise = this._submitQ.push(this._query.submit(request));\n }\n return this._prevPromise;\n }\n\n resultNames(): string[] {\n const retVal: string[] = [];\n for (const key in this._responseFields) {\n retVal.push(key);\n }\n return retVal;\n }\n\n outputDDL(): DDL2.OutputDict {\n const retVal: DDL2.OutputDict = {};\n this.resultNames().forEach(resultName => {\n retVal[resultName] = {\n fields: this._responseFields[resultName]\n };\n });\n return retVal;\n }\n}\nRoxieService.prototype._class += \" RoxieService\";\n\nexport interface RoxieService {\n url(): string;\n url(_: string): this;\n querySet(): string;\n querySet(_: string): this;\n queryID(): string;\n queryID(_: string): this;\n ignoreHipieRequest(): boolean;\n ignoreHipieRequest(_: boolean): this;\n ignoreHipieResponse(): boolean;\n ignoreHipieResponse(_: boolean): this;\n}\n\nRoxieService.prototype.publish(\"url\", \"\", \"string\", \"ESP Url (http://x.x.x.x:8002)\");\nRoxieService.prototype.publish(\"querySet\", \"\", \"string\", \"Query Set\");\nRoxieService.prototype.publish(\"queryID\", \"\", \"string\", \"Query ID\");\nRoxieService.prototype.publish(\"ignoreHipieRequest\", false, \"boolean\", \"Ignore provided DDL request\");\nRoxieService.prototype.publish(\"ignoreHipieResponse\", false, \"boolean\", \"Ignore provided DDL response\");\n\nexport class RoxieResult extends Datasource {\n\n _origService;\n\n declare _service: RoxieService;\n\n constructor(private _ec: ElementContainer) {\n super();\n this._service = new RoxieService(this._ec);\n }\n\n toDDL(): DDL2.IRoxieService | DDL2.IHipieService {\n return this.service().toDDL();\n }\n\n fromDDL(ddl: DDL2.IRoxieService): this {\n this.service().fromDDL(ddl);\n return this;\n }\n\n static fromDDL(ec: ElementContainer, rs: RoxieService, resultName: string): RoxieResult {\n return new RoxieResult(ec)\n .id(`${rs.id()}_${resultName}`)\n .service(rs)\n .resultName(resultName)\n ;\n }\n\n serviceID(): string {\n return `${this.service().url()}/${this.service().querySet()}/${this.service().queryID()}`;\n }\n\n sourceHash(): string {\n return this.service().hash();\n }\n\n requestFields(): DDL2.IField[] {\n return this.service().requestFields();\n }\n\n responseFields(): DDL2.IField[];\n responseFields(_: DDL2.IField[]): this;\n responseFields(_?: DDL2.IField[]): this | DDL2.IField[] {\n if (!arguments.length) return this.service().responseFields(this.resultName());\n this.service().responseFields(this.resultName(), _);\n return this;\n }\n\n hash(more: object = {}): string {\n return hashSum({\n source: this.sourceHash(),\n resultName: this.resultName(),\n ...more\n });\n }\n\n label(): string {\n return `${this.service().label()}\\n${this.resultName()}`;\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n return () => this.service().responseFields(this.resultName());\n }\n\n refreshMeta(): Promise<void> {\n return this.service().refreshMeta();\n }\n\n submit(request: { [key: string]: any }): Promise<{ [key: string]: any }> {\n return this.service().submit(request);\n }\n}\nRoxieResult.prototype._class += \" RoxieResult\";\n\nexport interface RoxieResult {\n service(): RoxieService;\n service(_: RoxieService): this;\n resultName(): string;\n resultName(_: string): this;\n}\n\nRoxieResult.prototype.publish(\"service\", null, \"widget\", \"Roxie service\");\nRoxieResult.prototype.publish(\"resultName\", \"\", \"set\", \"Result Name\", function (this: RoxieResult): string[] {\n return this._service !== undefined ? this._service.resultNames() : [];\n});\n\nRoxieResult.prototype._origService = RoxieResult.prototype.service;\nRoxieResult.prototype.service = function (this: RoxieResult, _?) {\n const retVal = RoxieResult.prototype._origService.apply(this, arguments);\n if (_ !== undefined) {\n this._service.refreshMeta();\n }\n return retVal;\n};\n\nexport class RoxieResultRef extends DatasourceRef {\n\n serviceID(): string {\n return this.datasource().serviceID();\n }\n\n private _data: ReadonlyArray<object> = [];\n\n datasource(): RoxieResult;\n datasource(_: RoxieResult): this;\n datasource(_?: RoxieResult): this | RoxieResult {\n return super.datasource.apply(this, arguments);\n }\n\n url(): string {\n return this.datasource().service().url();\n }\n\n querySet(): string {\n return this.datasource().service().querySet();\n }\n\n queryID(): string {\n return this.datasource().service().queryID();\n }\n\n resultName(): string {\n return this.datasource().resultName();\n }\n\n validate(): IActivityError[] {\n let retVal: IActivityError[] = [];\n for (const filter of this.validParams()) {\n retVal = retVal.concat(filter.validate(\"request\"));\n }\n return retVal;\n }\n\n constructor(private _ec: ElementContainer) {\n super();\n }\n\n toDDL(): DDL2.IRoxieServiceRef {\n return {\n id: this.datasource().service().id(),\n output: this.resultName(),\n request: this.validParams().map((vp): DDL2.IRequestField => {\n return {\n source: vp.source(),\n remoteFieldID: vp.remoteField(),\n localFieldID: vp.localField(),\n value: vp.value()\n };\n })\n };\n }\n\n sourceHash(): string {\n return this.datasource().hash();\n }\n\n requestFieldRefs(): DDL2.IRequestField[];\n requestFieldRefs(_: DDL2.IRequestField[]): this;\n requestFieldRefs(_?: DDL2.IRequestField[]): DDL2.IRequestField[] | this {\n if (!arguments.length) return this.validParams().map(param => param.toDDL());\n this.request(_.map(fc => Param.fromDDL(this._ec, fc)));\n return this;\n }\n\n requestFields(): DDL2.IField[] {\n return this.datasource().requestFields();\n }\n\n responseFields(): DDL2.IField[] {\n return this.datasource().responseFields();\n }\n\n hash(): string {\n return this.datasource().hash({\n resultName: this.resultName(),\n params: this.request().map(param => param.hash()),\n request: this.formatRequest()\n });\n }\n\n label(): string {\n return `${this.datasource().label()}\\n${this.datasource().resultName()}`;\n }\n\n elementIDs() {\n return this._ec.elementIDs();\n }\n\n element(source) {\n return this._ec.element(source);\n }\n\n referencedFields(refs: ReferencedFields): void {\n super.referencedFields(refs);\n const localFieldIDs: string[] = [];\n for (const param of this.validParams()) {\n localFieldIDs.push(param.localField());\n const filterSource = param.sourceViz().hipiePipeline();\n if (!refs.inputs[this.id()]) {\n refs.inputs[this.id()] = [];\n }\n refs.inputs[this.id()].push(param.localField());\n filterSource.resolveFields(refs, [param.remoteField()]);\n }\n super.resolveFields(refs, localFieldIDs);\n }\n\n validParams() {\n return this.request().filter(param => param.exists());\n }\n\n refreshMeta(): Promise<void> {\n return this.datasource().refreshMeta().then(() => {\n const oldParams = this.request();\n const diffs = compare(oldParams.map(p => p.localField()), this.datasource().requestFields().map(ff => ff.id));\n const newParams = oldParams.filter(op => diffs.update.indexOf(op.localField()) >= 0);\n this.request(newParams.concat(diffs.enter.map(label => new Param(this._ec).localField(label))));\n });\n }\n\n updatedBy(): string[] {\n return this.validParams().map(param => param.source());\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n return () => this.datasource().responseFields();\n }\n\n formatRequest(): { [key: string]: any } {\n const request: { [key: string]: any } = {};\n let hasRequest = false;\n const fields = this.datasource().requestFields();\n for (const param of this.validParams()) {\n const _value = param.calcValue();\n const field = fields.filter(row => row.id === param.localField())[0];\n let value;\n if (field.type === \"set\") {\n value = {\n Item: _value\n };\n } else {\n value = _value[0];\n }\n if (value !== undefined) {\n request[param.localField()] = value;\n }\n hasRequest = true;\n }\n if (!hasRequest) {\n request.refresh = true;\n }\n return request;\n }\n\n private _prevRequestHash;\n private _prevRequestPromise;\n exec(): Promise<void> {\n return super.exec().then(() => {\n const request = this.formatRequest();\n const requestHash = hashSum({ hash: this.hash(), request });\n if (this._prevRequestHash !== requestHash) {\n this._prevRequestHash = requestHash;\n this._prevRequestPromise = this.datasource().submit(request).then((response: { [key: string]: any }) => {\n const resultName = this.datasource().resultName();\n let result = response[resultName];\n if (!result) {\n // See: https://track.hpccsystems.com/browse/HPCC-21176 ---\n // \"Result 1\" => \"result_1\"\n result = response[resultName.toLowerCase().replace(/ /g, \"_\")];\n }\n return this.fixInt64(result);\n });\n }\n return this._prevRequestPromise;\n }).then(data => {\n this._data = data;\n });\n }\n\n inData(): ReadonlyArray<object> {\n return this._data;\n }\n\n computeData(): ReadonlyArray<object> {\n return this._data;\n }\n}\nRoxieResultRef.prototype._class += \" RoxieResultRef\";\n\nexport interface RoxieResultRef {\n request(): Param[];\n request(_: Param[]): this;\n}\n\nRoxieResultRef.prototype.publish(\"request\", [], \"propertyArray\", \"Request Fields\");\n\nexport class HipieResultRef extends RoxieResultRef {\n\n fullUrl(_: string): this {\n const info = parseUrl(_);\n this.datasource().service().url(info.url);\n this.datasource().service().querySet(info.querySet);\n this.datasource().service().queryID(info.queryID);\n return this;\n }\n\n formatRequest(): { [key: string]: any } {\n const _request = super.formatRequest();\n const request: { [key: string]: any } = {};\n for (const key in _request) {\n request[key] = _request[key];\n request[`${key}_changed`] = true;\n }\n return request;\n }\n}\nHipieResultRef.prototype._class += \" HipieResultRef\";","import { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { ElementContainer } from \"../model/element.ts\";\nimport { ActivitySelection, IActivityError } from \"./activity.ts\";\nimport { Databomb, emptyDatabomb } from \"./databomb.ts\";\nimport { DatasourceRef, DatasourceRefType } from \"./datasource.ts\";\nimport { Form } from \"./form.ts\";\nimport { LogicalFile } from \"./logicalfile.ts\";\nimport { RestResult, RestResultRef } from \"./rest.ts\";\nimport { HipieResultRef, RoxieResult, RoxieService } from \"./roxie.ts\";\nimport { WUResult, WUResultRef } from \"./wuresult.ts\";\n\nlet dsPickerID = 0;\nexport class DSPicker extends ActivitySelection {\n private _nullDatasource = emptyDatabomb;\n\n _origDatasourceID;\n _origDatasourceRef;\n\n declare _datasourceID: string; // DDL2.IDatasourceType;\n declare _datasourceRef: DatasourceRef;\n\n datasource(): DatasourceRefType {\n return this.datasourceRef().datasource();\n }\n\n refreshRef(id: string) {\n const ds: DatasourceRefType = this._ec.datasource(id);\n if (ds instanceof Databomb) {\n this.selection(new DatasourceRef().datasource(ds));\n } else if (ds instanceof Form) {\n this.selection(new DatasourceRef().datasource(ds));\n } else if (ds instanceof LogicalFile) {\n this.selection(new DatasourceRef().datasource(ds));\n } else if (ds instanceof RoxieService) {\n this.selection(new DatasourceRef().datasource(ds));\n } else if (ds instanceof WUResult) {\n this.selection(new WUResultRef().datasource(ds));\n } else if (ds instanceof RoxieResult) {\n this.selection(new HipieResultRef(this._ec).datasource(ds));\n } else if (ds instanceof RestResult) {\n this.selection(new RestResultRef(this._ec).datasource(ds));\n }\n }\n\n selection(): DatasourceRef;\n selection(_: DatasourceRef): this;\n selection(_?: DatasourceRef): DatasourceRef | this {\n const retVal = super.selection.apply(this, arguments);\n if (!arguments.length) return retVal || this._nullDatasource;\n if (this._datasourceID !== _.datasource().id()) {\n this._datasourceID = _.datasource().id();\n }\n return this;\n }\n\n validate(): IActivityError[] {\n return this.selection().validate();\n }\n\n constructor(private _ec: ElementContainer) {\n super();\n this._id = `ds_${++dsPickerID}`;\n const ds = this._ec.datasources()[0];\n this.datasourceID(ds.id());\n }\n\n toDDL(): DDL2.IDatasourceRef {\n return {\n ...this.datasourceRef().toDDL(),\n id: this.datasourceID()\n };\n }\n\n // Activity overrides ---\n hash(more: { [key: string]: any } = {}): string {\n return super.hash({\n ...more\n });\n }\n\n datasourceIDs() {\n return this._ec.datasources().map(ds => {\n return {\n value: ds.id(),\n text: `${ds.label()} ${ds.id() !== ds.label() ? ` (${ds.id()})` : \"\"}`\n };\n });\n }\n}\nDSPicker.prototype._class += \" DSPicker\";\n\nexport interface DSPicker {\n datasourceID(): string;\n datasourceID(_: string): this;\n datasourceRef(): DatasourceRef;\n datasourceRef(_: DatasourceRef): this;\n}\n\nDSPicker.prototype.publish(\"datasourceID\", \"\", \"set\", \"Activity\", function (this: DSPicker) { return this.datasourceIDs(); }, { optional: false });\nDSPicker.prototype.publish(\"datasourceRef\", \"\", \"widget\", \"Activity\");\n\nDSPicker.prototype._origDatasourceID = DSPicker.prototype.datasourceID;\nDSPicker.prototype.datasourceID = function (this: DSPicker, _?) {\n const prev = this._datasourceID;\n const retVal = DSPicker.prototype._origDatasourceID.apply(this, arguments);\n if (_ !== undefined && prev !== _) {\n this.refreshRef(_);\n }\n return retVal;\n};\n\nDSPicker.prototype._origDatasourceRef = DSPicker.prototype.datasourceRef;\nDSPicker.prototype.datasourceRef = function (this: DSPicker, _?) {\n return ActivitySelection.prototype.selection.apply(this, arguments);\n};","import { PropertyExt } from \"@hpcc-js/common\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { Element, ElementContainer } from \"../model/element.ts\";\nimport { Activity, IActivityError, ReferencedFields } from \"./activity.ts\";\n\nfunction createFilter(condition: DDL2.IMappingConditionType, lf: string, val: string | number): (localRow: any) => boolean {\n const isString = typeof val === \"string\";\n switch (condition) {\n case \"==\":\n return (localRow) => isString && typeof localRow[lf] === \"string\" ? localRow[lf].trim() === val : localRow[lf] === val;\n case \"!=\":\n return (localRow) => isString && typeof localRow[lf] === \"string\" ? localRow[lf].trim() !== val : localRow[lf] !== val;\n case \"<\":\n return (localRow) => localRow[lf] < val;\n case \"<=\":\n return (localRow) => localRow[lf] <= val;\n case \">\":\n return (localRow) => localRow[lf] > val;\n case \">=\":\n return (localRow) => localRow[lf] >= val;\n default:\n throw new Error(`Unknown filter condition: ${condition}`);\n }\n}\n\nexport class ColumnMapping extends PropertyExt {\n private _owner: RemoteFilter;\n\n validate(prefix: string): IActivityError[] {\n const retVal: IActivityError[] = [];\n if (!this.remoteField_valid()) {\n retVal.push({\n source: `${prefix}.remoteField`,\n msg: `Invalid remoteField: \"${this.remoteField()}\"`,\n hint: `expected: ${JSON.stringify(this.sourceOutFields())}`\n });\n }\n if (!this.localField_valid()) {\n retVal.push({\n source: `${prefix}.localField`,\n msg: `Invalid localField: \"${this.localField()}\"`,\n hint: `expected: ${JSON.stringify(this.localFields())}`\n });\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n owner(): RemoteFilter;\n owner(_: RemoteFilter): this;\n owner(_?: RemoteFilter): RemoteFilter | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return this.localField_exists() || this.remoteField_exists();\n }\n\n toDDL(): DDL2.IMapping {\n return {\n remoteFieldID: this.remoteField(),\n localFieldID: this.localField(),\n condition: this.condition(),\n nullable: this.nullable()\n };\n }\n\n fromDDL(ddl: DDL2.IMapping): this {\n return this\n .remoteField(ddl.remoteFieldID)\n .localField(ddl.localFieldID)\n .condition(ddl.condition)\n .nullable(ddl.nullable)\n ;\n }\n\n static fromDDL(ddl: DDL2.IMapping): ColumnMapping {\n return new ColumnMapping().fromDDL(ddl);\n }\n\n hash() {\n return hashSum({\n remoteField: this.remoteField(),\n localField: this.localField(),\n condition: this.condition(),\n nullable: this.nullable()\n });\n }\n\n localFields(): string[] {\n return this._owner.inFields().map(field => field.id);\n }\n\n sourceOutFields(): string[] {\n return this._owner.sourceOutFields().map(field => field.id);\n }\n\n remoteValues(filterSelection: any[]): Array<number | string> {\n const rf = this.remoteField();\n return filterSelection.map(sel => {\n const retVal = sel[rf];\n if (typeof retVal === \"string\") {\n return retVal.trim();\n }\n return retVal;\n });\n }\n\n createFilterDescription(filterSelection: any[]): string {\n switch (this.condition()) {\n case \"in\":\n case \"range\":\n return `${this.localField()} ${this.condition()} [${this.remoteValues(filterSelection).join(\", \")}]`;\n default:\n return `${this.localField()} ${this.condition()} ${this.remoteValues(filterSelection)[0]}`;\n }\n }\n\n createFilter(filterSelection: any[]): (localRow: any) => boolean {\n const lf = this.localField();\n const fsArr = this.remoteValues(filterSelection);\n switch (this.condition()) {\n case \"range\":\n if (this.nullable() && (fsArr.length < 2 || fsArr[0] === fsArr[1])) {\n return (localRow) => true;\n }\n return (localRow) => localRow[lf] >= fsArr[0] && localRow[lf] <= fsArr[1];\n case \"in\":\n if (this.nullable() && fsArr.length === 0) {\n return (localRow) => true;\n }\n return (localRow) => fsArr.some(fs => typeof localRow[lf] === \"string\" ? localRow[lf].trim() === fs : localRow[lf] === fs);\n default:\n const fs0 = fsArr[0];\n if (this.nullable() && (fs0 === undefined || fs0 === null || fs0 === \"\")) {\n return (localRow) => true;\n }\n return createFilter(this.condition(), lf, fs0);\n }\n }\n}\nColumnMapping.prototype._class += \" ColumnMapping\";\n\nexport interface ColumnMapping {\n remoteField(): string;\n remoteField(_: string): this;\n remoteField_exists(): boolean;\n remoteField_valid(): boolean;\n localField(): string;\n localField(_: string): this;\n localField_exists(): boolean;\n localField_valid(): boolean;\n condition(): DDL2.IMappingConditionType;\n condition(_: DDL2.IMappingConditionType): this;\n nullable(): boolean;\n nullable(_: boolean): this;\n}\n\nexport class RemoteFilter extends PropertyExt {\n private _owner: Filters;\n\n validate(prefix: string): IActivityError[] {\n let retVal: IActivityError[] = [];\n if (!this.source_valid()) {\n retVal.push({\n source: `${prefix}.source.${this.source()}`,\n msg: `Invalid source: \"${this.source()}\"`,\n hint: `expected: ${JSON.stringify(this.visualizationIDs())}`\n });\n }\n if (this.source_exists() && this.validMappings().length === 0) {\n retVal.push({\n source: `${prefix}.source.${this.source()}`,\n msg: `Invalid mappings: \"${this.source()}\"`,\n hint: \"expected minimum of 1 mapping\"\n });\n }\n for (const mapping of this.validMappings()) {\n retVal = retVal.concat(mapping.validate(`${prefix}.${this.source()}.mappings`));\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n owner(): Filters;\n owner(_: Filters): this;\n owner(_?: Filters): Filters | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.source() && this.validMappings().length > 0;\n }\n\n toDDL(): DDL2.IFilterCondition {\n return {\n viewID: this.source(),\n mappings: this.ddlMappings()\n };\n }\n\n fromDDL(ddl: DDL2.IFilterCondition): this {\n return this\n .source(ddl.viewID)\n .ddlMappings(ddl.mappings)\n ;\n }\n\n static fromDDL(ddl: DDL2.IFilterCondition): RemoteFilter {\n return new RemoteFilter().fromDDL(ddl);\n }\n\n ddlMappings(): DDL2.IMapping[];\n ddlMappings(_: DDL2.IMapping[]): this;\n ddlMappings(_?: DDL2.IMapping[]): DDL2.IMapping[] | this {\n if (!arguments.length) return this.validMappings().map(mapping => mapping.toDDL());\n this.mappings(_.map(mapping => ColumnMapping.fromDDL(mapping)));\n return this;\n }\n\n visualizationIDs() {\n return this._owner.visualizationIDs();\n }\n\n hash(): string {\n return hashSum({\n source: this.source(),\n mappings: this.validMappings().map(mapping => mapping.hash()),\n selection: this.sourceSelection()\n });\n }\n\n validMappings(): ColumnMapping[] {\n return this.mappings().filter(mapping => mapping.valid());\n }\n\n appendMappings(mappings: Array<{ remoteField: string, localField: string, condition: DDL2.IMappingConditionType }>): this {\n for (const mapping of mappings) {\n this.mappings().push(new ColumnMapping()\n .owner(this)\n .remoteField(mapping.remoteField)\n .localField(mapping.localField)\n .condition(mapping.condition)\n );\n }\n return this;\n }\n\n inFields(): ReadonlyArray<DDL2.IField> {\n return this._owner.inFields();\n }\n\n sourceViz(): Element {\n return this._owner.visualization(this.source());\n }\n\n sourceOutFields(): ReadonlyArray<DDL2.IField> {\n return this.sourceViz().hipiePipeline().selectionFields();\n }\n\n sourceSelection(): any[] {\n return this.sourceViz().selection();\n }\n\n createFilter(): (localRow: any) => boolean {\n const selection = this.sourceSelection();\n const mappingFilters = this.validMappings().map(mapping => mapping.createFilter(selection));\n return (row: object): boolean => mappingFilters.every(mappingFilter => mappingFilter(row));\n }\n\n createFilterDescription(): string {\n const selection = this.sourceSelection();\n const mappingFilterDescs = this.validMappings().map(mapping => mapping.createFilterDescription(selection));\n return mappingFilterDescs.join(\", \");\n }\n}\nRemoteFilter.prototype._class += \" Filter\";\n\nexport interface RemoteFilter {\n source(): string;\n source(_: string): this;\n source_exists(): boolean;\n source_valid(): boolean;\n mappings(): ColumnMapping[];\n mappings(_: ColumnMapping[]): this;\n}\n\nexport class StaticFilter extends PropertyExt {\n private _owner: Filters;\n\n validate(prefix: string): IActivityError[] {\n const retVal: IActivityError[] = [];\n if (!this.localField_valid()) {\n retVal.push({\n source: `${prefix}.localField`,\n msg: `Invalid localField: \"${this.localField()}\"`,\n hint: `expected: ${JSON.stringify(this.localFields())}`\n });\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n owner(): Filters;\n owner(_: Filters): this;\n owner(_?: Filters): Filters | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n coerceValue(): string | number;\n coerceValue(_: string | number): this;\n coerceValue(_?: string | number): string | number | this {\n if (arguments.length === 0) {\n switch (this.valueType()) {\n case \"number\":\n return +this.value();\n case \"string\":\n default:\n return \"\" + this.value();\n }\n }\n this.value(_);\n if (typeof _ === \"number\") {\n this.valueType(\"number\");\n } else {\n this.valueType(\"string\");\n }\n return this;\n }\n\n valid(): boolean {\n return this.localField_exists() && this.value_exists();\n }\n\n toDDL(): DDL2.IFilterStaticCondition {\n return {\n localFieldID: this.localField(),\n condition: this.condition(),\n value: this.coerceValue()\n };\n }\n\n fromDDL(ddl: DDL2.IFilterStaticCondition): this {\n return this\n .localField(ddl.localFieldID)\n .condition(ddl.condition)\n .coerceValue(ddl.value)\n ;\n }\n\n static fromDDL(ddl: DDL2.IFilterStaticCondition): StaticFilter {\n return new StaticFilter().fromDDL(ddl);\n }\n\n hash() {\n return hashSum({\n localField: this.localField(),\n condition: this.condition(),\n value: this.value(),\n valueType: this.valueType()\n });\n }\n\n localFields(): string[] {\n return this._owner.inFields().map(field => field.id);\n }\n\n createFilterDescription(): string {\n return `${this.localField()} ${this.condition()} ${this.coerceValue()}`;\n }\n\n createFilter(): (localRow: any) => boolean {\n return createFilter(this.condition(), this.localField(), this.coerceValue());\n }\n}\nStaticFilter.prototype._class += \" StaticFilter\";\n\nexport interface StaticFilter {\n localField(): string;\n localField(_: string): this;\n localField_exists(): boolean;\n localField_valid(): boolean;\n condition(): DDL2.IMappingConditionType;\n condition(_: DDL2.IMappingConditionType): this;\n value(): string | number | boolean;\n value(_: string | number | boolean): this;\n value_exists(): boolean;\n value_valid(): boolean;\n valueType(): \"number\" | \"string\";\n valueType(_: \"number\" | \"string\"): this;\n}\n\ntype FilterT = RemoteFilter | StaticFilter;\n\nexport class Filters extends Activity {\n static Filter = RemoteFilter;\n static Mapping = ColumnMapping;\n\n validate(): IActivityError[] {\n let retVal: IActivityError[] = [];\n for (const filter of this.validFilters()) {\n retVal = retVal.concat(filter.validate(\"filter\"));\n }\n return retVal;\n }\n\n constructor(private _ec: ElementContainer) {\n super();\n }\n\n toDDL(): DDL2.IFilter {\n return {\n type: \"filter\",\n conditions: this.conditions()\n };\n }\n\n fromDDL(ddl: DDL2.IFilter): this {\n return this\n .conditions(ddl.conditions)\n ;\n }\n\n static fromDDL(ec: ElementContainer, ddl: DDL2.IFilter): Filters {\n return new Filters(ec).fromDDL(ddl);\n }\n\n conditions(): DDL2.FilterCondition[];\n conditions(_: DDL2.FilterCondition[]): this;\n conditions(_?: DDL2.FilterCondition[]): DDL2.FilterCondition[] | this {\n if (!arguments.length) return this.validFilters().map(filter => filter.toDDL());\n const remoteFilters: RemoteFilter[] = [];\n const staticFilters: StaticFilter[] = [];\n _.forEach(fc => {\n if (DDL2.isIFilterCondition(fc)) {\n remoteFilters.push(RemoteFilter.fromDDL(fc));\n } else {\n staticFilters.push(StaticFilter.fromDDL(fc));\n }\n });\n this.remoteFilter(remoteFilters);\n this.staticFilter(staticFilters);\n return this;\n }\n\n visualizationIDs(): string[] {\n return this._ec.elementIDs();\n }\n\n visualization(sourceID: string | PropertyExt): Element {\n return this._ec.element(sourceID);\n }\n\n // Activity overrides ---\n hash(): string {\n return hashSum(this.validFilters().map(f => {\n return {\n filter: f.hash()\n };\n }));\n }\n\n exists(): boolean {\n return this.validFilters().length > 0;\n }\n\n updatedBy(): string[] {\n return this.validRemoteFilters().map(filter => filter.source());\n }\n\n referencedFields(refs: ReferencedFields): void {\n super.referencedFields(refs);\n const localFieldIDs: string[] = [];\n for (const filter of this.validRemoteFilters()) {\n const filterSource = filter.sourceViz().hipiePipeline();\n const remoteFieldIDs: string[] = [];\n for (const mapping of filter.validMappings()) {\n localFieldIDs.push(mapping.localField());\n remoteFieldIDs.push(mapping.remoteField());\n }\n filterSource.resolveFields(refs, remoteFieldIDs);\n }\n super.resolveInFields(refs, localFieldIDs);\n }\n\n exec(): Promise<void> {\n return super.exec();\n }\n\n computeData(): ReadonlyArray<object> {\n const data = super.computeData();\n if (data.length === 0 || !this.exists()) return data;\n const filters = this.validFilters().map(filter => filter.createFilter());\n return data.filter(row => {\n return filters.every(filter => filter(row));\n });\n }\n\n // --- --- ---\n validRemoteFilters(): RemoteFilter[] {\n return this.remoteFilter().filter(filter => filter.valid());\n }\n\n validStaticFilters(): StaticFilter[] {\n return this.staticFilter().filter(filter => filter.valid());\n }\n\n validFilters(): FilterT[] {\n return [...this.validRemoteFilters(), ...this.validStaticFilters()];\n }\n}\nFilters.prototype._class += \" Filters\";\n\nexport interface Filters {\n remoteFilter(): RemoteFilter[];\n remoteFilter(_: RemoteFilter[]): this;\n staticFilter(): StaticFilter[];\n staticFilter(_: StaticFilter[]): this;\n}\n\nColumnMapping.prototype.publish(\"remoteField\", null, \"set\", \"Filter Fields\", function (this: ColumnMapping) { return this.sourceOutFields(); }, {\n optional: true,\n disable: (w: ColumnMapping): boolean => !w[\"_owner\"].source(),\n validate: (w: ColumnMapping): boolean => w.sourceOutFields().indexOf(w.remoteField()) >= 0\n});\nColumnMapping.prototype.publish(\"localField\", null, \"set\", \"Local Fields\", function (this: ColumnMapping) { return this.localFields(); }, {\n optional: true,\n disable: (w: ColumnMapping): boolean => !w[\"_owner\"].source(),\n validate: (w: ColumnMapping): boolean => w.localFields().indexOf(w.localField()) >= 0\n});\nColumnMapping.prototype.publish(\"condition\", \"==\", \"set\", \"Filter Fields\", [\"==\", \"!=\", \">\", \">=\", \"<\", \"<=\", \"range\", \"in\"]);\nColumnMapping.prototype.publish(\"nullable\", false, \"boolean\", \"Ignore null filters\");\n\nRemoteFilter.prototype.publish(\"source\", null, \"set\", \"Activity\", function (this: RemoteFilter) { return this.visualizationIDs(); }, {\n optional: true,\n validate: (w: RemoteFilter): boolean => w.visualizationIDs().indexOf(w.source()) >= 0\n});\nRemoteFilter.prototype.publish(\"mappings\", [], \"propertyArray\", \"Mappings\", null, { autoExpand: ColumnMapping });\n\nStaticFilter.prototype.publish(\"localField\", null, \"set\", \"Local Fields\", function (this: ColumnMapping) { return this.localFields(); }, {\n optional: true,\n validate: (w: StaticFilter): boolean => w.localFields().indexOf(w.localField()) >= 0\n});\nStaticFilter.prototype.publish(\"condition\", \"==\", \"set\", \"Filter Fields\", [\"==\", \"!=\", \">\", \">=\", \"<\", \"<=\"]);\nStaticFilter.prototype.publish(\"value\", \"\", \"any\", \"Static Value\");\nStaticFilter.prototype.publish(\"valueType\", \"number\", \"set\", \"Static Value Type\", [\"number\", \"string\"]);\n\nFilters.prototype.publish(\"remoteFilter\", [], \"propertyArray\", \"Remote Filter\", null, { autoExpand: RemoteFilter });\nFilters.prototype.publish(\"staticFilter\", [], \"propertyArray\", \"Static Filter\", null, { autoExpand: StaticFilter });","import { PropertyExt } from \"@hpcc-js/common\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { deviation as d3Deviation, max as d3Max, mean as d3Mean, median as d3Median, min as d3Min, sum as d3Sum, variance as d3Variance } from \"d3-array\";\nimport { nest as d3Nest } from \"d3-collection\";\nimport { Activity, IActivityError, ReferencedFields } from \"./activity.ts\";\n\nexport class GroupByColumn extends PropertyExt {\n private _owner: GroupBy;\n\n validate(prefix: string): IActivityError[] {\n const retVal: IActivityError[] = [];\n if (!this.label_valid()) {\n retVal.push({\n source: `${prefix}.label`,\n msg: `Invalid label: \"${this.label()}\"`,\n hint: `expected ${JSON.stringify(this.columns())}`\n });\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n owner(): GroupBy;\n owner(_: GroupBy): this;\n owner(_?: GroupBy): GroupBy | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.label();\n }\n\n toDDL(): string {\n return this.label();\n }\n\n fromDDL(label: string): this {\n return this\n .label(label)\n ;\n }\n\n static fromDDL(label: string): GroupByColumn {\n return new GroupByColumn().fromDDL(label);\n }\n\n hash(): string {\n return hashSum(this.label());\n }\n\n columns() {\n return this._owner.inFieldIDs();\n }\n}\nGroupByColumn.prototype._class += \" GroupByColumn\";\n\nexport interface GroupByColumn {\n label(): string;\n label(_: string): this;\n label_valid(): boolean;\n}\n\n// ===========================================================================\nexport type AggrFuncCallback = (item: any) => number;\nexport type AggrFunc = (leaves: any[], callback: AggrFuncCallback) => number;\nfunction localCount(leaves: any[], callback: AggrFuncCallback): number {\n return leaves.length;\n}\n\nconst d3Aggr: { [key: string]: AggrFunc } = {\n count: localCount,\n min: d3Min,\n max: d3Max,\n mean: d3Mean,\n median: d3Median,\n variance: d3Variance,\n deviation: d3Deviation,\n sum: d3Sum\n};\n\nexport type AggregateType = \"count\" | \"min\" | \"max\" | \"sum\" | \"mean\" | \"median\" | \"variance\" | \"deviation\";\nexport class AggregateField extends PropertyExt {\n private _owner: GroupBy;\n\n disableAggrColumn(): boolean {\n return !this.fieldID() || !this.aggrType() || this.aggrType() === \"count\";\n }\n\n disableBaseCountColumn(): boolean {\n return !this.fieldID() || !this.aggrType() || this.aggrType() !== \"mean\";\n }\n\n validate(prefix: string): IActivityError[] {\n const retVal: IActivityError[] = [];\n if (!this.aggrColumn_valid()) {\n retVal.push({\n source: `${prefix}.${this.fieldID()}.aggrColumn`,\n msg: `Invalid aggrColumn: \"${this.aggrColumn()}\"`,\n hint: `expected ${JSON.stringify(this.columns())}`\n });\n }\n if (!this.baseCountColumn_valid()) {\n retVal.push({\n source: `${prefix}.${this.fieldID()}.aggrColumn`,\n msg: `Invalid baseCountColumn: \"${this.baseCountColumn()}\"`,\n hint: `expected ${JSON.stringify(this.columns())}`\n });\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n owner(): GroupBy;\n owner(_: GroupBy): this;\n owner(_?: GroupBy): GroupBy | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.fieldID();\n }\n\n toDDL(): DDL2.IAggregate | DDL2.ICount {\n if (this.aggrType() === \"count\") {\n return {\n fieldID: this.fieldID(),\n type: \"count\"\n };\n }\n return {\n fieldID: this.fieldID(),\n type: this.aggrType() as DDL2.IAggregateType,\n inFieldID: this.aggrColumn(),\n baseCountFieldID: this.baseCountColumn()\n };\n }\n\n fromDDL(ddl: DDL2.IAggregate | DDL2.ICount): this {\n const retVal = this\n .fieldID(ddl.fieldID)\n .aggrType(ddl.type)\n ;\n if (ddl.type !== \"count\") {\n retVal.aggrColumn(ddl.inFieldID);\n retVal.baseCountColumn(ddl.baseCountFieldID);\n }\n return retVal;\n }\n\n static fromDDL(ddl: DDL2.IAggregate | DDL2.ICount): AggregateField {\n return new AggregateField().fromDDL(ddl);\n }\n\n hash(): string {\n return hashSum({\n label: this.fieldID(),\n aggrType: this.aggrType(),\n aggrColumn: this.aggrColumn()\n });\n }\n\n columns() {\n return this._owner.inFieldIDs();\n }\n\n hasColumn() {\n return this.columns().length;\n }\n\n aggregate(values: Array<{ [key: string]: any }>) {\n return d3Aggr[this.aggrType() as string](values, leaf => +leaf[this.aggrColumn()]);\n }\n\n aggrFunc(): (leaves: any[]) => number {\n const aggrFunc = d3Aggr[this.aggrType() as string];\n const aggrColumn = this.aggrColumn();\n const baseCountColumn = this.baseCountColumn();\n if (baseCountColumn) {\n return (values: any[]) => {\n return aggrFunc(values, leaf => +leaf[aggrColumn] / +leaf[baseCountColumn]);\n };\n } else {\n return (values: any[]) => {\n return aggrFunc(values, leaf => +leaf[aggrColumn]);\n };\n }\n }\n}\nAggregateField.prototype._class += \" AggregateField\";\n\nexport interface AggregateField {\n fieldID(): string;\n fieldID(_: string): this;\n aggrType(): AggregateType;\n aggrType(_: AggregateType): this;\n aggrColumn(): string;\n aggrColumn(_: string): this;\n aggrColumn_valid(): boolean;\n baseCountColumn(): string;\n baseCountColumn(_: string): this;\n baseCountColumn_valid(): boolean;\n}\n\n// ===========================================================================\nexport class GroupBy extends Activity {\n\n validate(): IActivityError[] {\n let retVal: IActivityError[] = [];\n for (const gbColumn of this.validGroupBy()) {\n retVal = retVal.concat(gbColumn.validate(\"GroupBy.column\"));\n }\n for (const cfs of this.validComputedFields()) {\n retVal = retVal.concat(cfs.validate(\"GroupBy.computedFields\"));\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n toDDL(): DDL2.IGroupBy {\n return {\n type: \"groupby\",\n groupByIDs: this.fieldIDs(),\n aggregates: this.aggregates()\n };\n }\n\n fromDDL(ddl: DDL2.IGroupBy): this {\n return this\n .fieldIDs(ddl.groupByIDs)\n .aggregates(ddl.aggregates)\n ;\n }\n\n static fromDDL(ddl: DDL2.IGroupBy): GroupBy {\n return new GroupBy().fromDDL(ddl);\n }\n\n fieldIDs(): string[];\n fieldIDs(_: string[]): this;\n fieldIDs(_?: string[]): string[] | this {\n if (!arguments.length) return this.validGroupBy().map(gb => gb.toDDL());\n this.column(_.map(fieldID => GroupByColumn.fromDDL(fieldID)));\n return this;\n }\n\n aggregates(): DDL2.AggregateType[];\n aggregates(_: DDL2.AggregateType[]): this;\n aggregates(_?: DDL2.AggregateType[]): DDL2.AggregateType[] | this {\n if (!arguments.length) return this.validComputedFields().map(cf => cf.toDDL());\n this.computedFields(_.map(aggrType => AggregateField.fromDDL(aggrType)));\n return this;\n }\n\n // Activity\n hash(): string {\n return hashSum({\n groupBy: this.column().map(gb => gb.hash()),\n computedFields: this.computedFields().map(cf => cf.hash())\n });\n }\n\n appendGroupBys(columns: [{ field: string }]): this {\n for (const column of columns) {\n this.column().push(new GroupByColumn()\n .owner(this)\n .label(column.field)\n );\n }\n return this;\n }\n\n validGroupBy(): GroupByColumn[] {\n return this.column().filter(groupBy => groupBy.valid());\n }\n\n exists(): boolean {\n return this.validGroupBy().length > 0;\n }\n\n inFieldIDs(): string[] {\n return this.inFields().map(field => field.id);\n }\n\n field(fieldID: string): DDL2.IField | null {\n for (const field of this.inFields()) {\n if (field.id === fieldID) {\n return field;\n }\n }\n return null;\n }\n\n appendComputedFields(aggregateFields: [{ label: string, type: AggregateType, column?: string }]): this {\n for (const aggregateField of aggregateFields) {\n const aggrField = new AggregateField()\n .owner(this)\n .fieldID(aggregateField.label)\n .aggrType(aggregateField.type)\n ;\n if (aggregateField.column !== void 0) {\n aggrField.aggrColumn(aggregateField.column);\n }\n this.computedFields().push(aggrField);\n }\n return this;\n }\n\n validComputedFields() {\n return this.computedFields().filter(computedField => computedField.valid());\n }\n\n hasComputedFields(): boolean {\n return this.validComputedFields().length > 0;\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n if (!this.exists()) return super.computeFields(inFields);\n const retVal: DDL2.IField[] = [];\n const groups: GroupByColumn[] = this.validGroupBy();\n for (const groupBy of groups) {\n const groupByField = this.field(groupBy.label());\n const field = {\n type: groupByField ? groupByField.type : \"string\",\n id: groupBy.label()\n } as DDL2.IField;\n retVal.push(field);\n }\n for (const cf of this.computedFields()) {\n if (cf.fieldID()) {\n const computedField: DDL2.IField = {\n id: cf.fieldID(),\n type: \"number\"\n };\n retVal.push(computedField);\n }\n }\n if (this.details()) {\n let detailsTarget: DDL2.IField[] = retVal;\n if (this.exists()) {\n const rows: DDL2.IField = {\n id: \"values\",\n type: \"dataset\",\n children: []\n };\n retVal.push(rows);\n detailsTarget = rows.children;\n }\n const columns = groups.map(groupBy => groupBy.label());\n detailsTarget.push(...this.inFields().filter(field => {\n return this.fullDetails() || columns.indexOf(field.id) < 0;\n }));\n }\n return () => retVal;\n }\n\n referencedFields(refs: ReferencedFields): void {\n super.referencedFields(refs);\n const fieldIDs: string[] = [];\n for (const gb of this.validGroupBy()) {\n fieldIDs.push(gb.label());\n }\n for (const cf of this.validComputedFields()) {\n if (cf.aggrColumn()) {\n fieldIDs.push(cf.aggrColumn());\n }\n }\n super.resolveInFields(refs, fieldIDs);\n }\n\n computeData(): ReadonlyArray<object> {\n const data = super.computeData();\n if (data.length === 0 || !this.exists()) return data;\n const columnLabels: string[] = this.validGroupBy().map(gb => gb.label());\n const computedFields = this.validComputedFields().map(cf => {\n return { label: cf.fieldID(), aggrFunc: cf.aggrFunc() };\n });\n const retVal = d3Nest()\n .key((row: { [key: string]: any }) => {\n let key = \"\";\n for (const groupByLabel of columnLabels) {\n key += \":\" + row[groupByLabel];\n }\n return key;\n })\n .entries(data as object[]).map(_row => {\n const row: {\n [key: string]: any\n } = _row;\n delete row.key;\n for (const groupByLabel of columnLabels) {\n row[groupByLabel] = row.values[0][groupByLabel];\n }\n for (const cf of computedFields) {\n row[cf.label] = cf.aggrFunc(row.values);\n }\n return row;\n })\n ;\n const outFields = this.outFields();\n return retVal.map(row => {\n const retVal = {};\n for (const field of outFields) {\n retVal[field.id] = row[field.id];\n }\n return retVal;\n });\n }\n}\nGroupBy.prototype._class += \" GroupBy\";\n\nexport interface GroupBy {\n column(): GroupByColumn[];\n column(_: GroupByColumn[]): this;\n computedFields(): AggregateField[];\n computedFields(_: AggregateField[]): this;\n details(): boolean;\n details(_: boolean): this;\n fullDetails(): boolean;\n fullDetails(_: boolean): this;\n}\n\nGroupByColumn.prototype.publish(\"label\", undefined, \"set\", \"Field\", function (this: GroupByColumn) { return this.columns(); }, {\n optional: true,\n validate: (w: GroupByColumn): boolean => w.columns().indexOf(w.label()) >= 0\n });\n\nAggregateField.prototype.publish(\"fieldID\", null, \"string\", \"new Field ID\", null, { optional: true, disable: (w: AggregateField) => !w.hasColumn() });\nAggregateField.prototype.publish(\"aggrType\", \"count\", \"set\", \"Aggregation Type\", [\"count\", \"min\", \"max\", \"sum\", \"mean\", \"median\", \"variance\", \"deviation\"], { optional: true, disable: (w: AggregateField) => !w.fieldID() });\nAggregateField.prototype.publish(\"aggrColumn\", null, \"set\", \"Aggregation Field\", function (this: AggregateField) { return this.columns(); }, {\n optional: true,\n disable: (w: AggregateField) => w.disableAggrColumn(),\n validate: (w: AggregateField): boolean => w.columns().indexOf(w.aggrColumn()) >= 0\n });\nAggregateField.prototype.publish(\"baseCountColumn\", null, \"set\", \"Base Count Field\", function (this: AggregateField) { return this.columns(); }, {\n optional: true,\n disable: (w: AggregateField) => w.disableBaseCountColumn(),\n validate: (w: AggregateField): boolean => w.columns().indexOf(w.baseCountColumn()) >= 0\n });\n\nGroupBy.prototype.publish(\"column\", [], \"propertyArray\", \"Source Columns\", null, { autoExpand: GroupByColumn });\nGroupBy.prototype.publish(\"computedFields\", [], \"propertyArray\", \"Computed Fields\", null, { autoExpand: AggregateField });\nGroupBy.prototype.publish(\"details\", false, \"boolean\", \"Show details\");\nGroupBy.prototype.publish(\"fullDetails\", false, \"boolean\", \"Show groupBy fileds in details\");","import { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { Activity } from \"./activity.ts\";\n\nexport class Limit extends Activity {\n\n constructor() {\n super();\n }\n\n toDDL(): DDL2.ILimit {\n return {\n type: \"limit\",\n limit: this.rows()\n };\n }\n\n fromDDL(ddl: DDL2.ILimit): this {\n return this\n .rows(ddl.limit)\n ;\n }\n\n static fromDDL(ddl: DDL2.ILimit): Limit {\n return new Limit().fromDDL(ddl);\n }\n\n hash(): string {\n return hashSum({\n limit: this.rows()\n });\n }\n\n exists(): boolean {\n return this.rows_exists() && this.rows() > 0;\n }\n\n computeData(): ReadonlyArray<object> {\n const data = super.computeData();\n if (data.length === 0 || !this.exists()) return data;\n return data.slice(0, Math.min(this.rows(), data.length));\n }\n}\nLimit.prototype._class += \" Limit\";\n\nexport interface Limit {\n rows(): number | undefined;\n rows(_: number | undefined): this;\n rows_exists(): boolean;\n}\nLimit.prototype.publish(\"rows\", undefined, \"number\", \"Limit output\");","import { PropertyExt, Utility } from \"@hpcc-js/common\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { hashSum, isArray } from \"@hpcc-js/util\";\nimport { Activity, IActivityError, ReferencedFields } from \"./activity.ts\";\n\nexport class ComputedMapping extends PropertyExt {\n protected _owner: ComputedField;\n\n validate(prefix: string): IActivityError[] {\n const retVal: IActivityError[] = [];\n if (!this.value_valid()) {\n retVal.push({\n source: `${prefix}.value`,\n msg: `Invalid value: \"${this.value()}\"`,\n hint: 'expected: \"any\"'\n });\n }\n if (!this.newValue_valid()) {\n retVal.push({\n source: `${prefix}.newValue`,\n msg: `Invalid value: \"${this.newValue()}\"`,\n hint: 'expected: \"any\"'\n });\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n owner(): ComputedField;\n owner(_: ComputedField): this;\n owner(_?: ComputedField): ComputedField | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.value() && !!this.newValue();\n }\n\n toDDL(): DDL2.IMapMapping {\n return {\n value: this.value(),\n newValue: this.newValue()\n };\n }\n\n fromDDL(ddl: DDL2.IMapMapping): this {\n return this\n .value(ddl.value)\n .newValue(ddl.newValue)\n ;\n }\n\n static fromDDL(ddl: DDL2.IMapMapping): ComputedMapping {\n return new ComputedMapping().fromDDL(ddl);\n }\n}\nComputedMapping.prototype._class += \" ComputedMapping\";\n\nexport interface ComputedMapping {\n value(): any;\n value(_: any): this;\n value_valid(): boolean;\n newValue(): any;\n newValue(_: any): this;\n newValue_valid(): boolean;\n}\n\nexport type ComputedType = \"=\" | \"*\" | \"/\" | \"+\" | \"-\" | \"scale\" | \"template\" | \"map\";\n\nexport interface IComputedFieldOwner extends PropertyExt {\n fieldIDs(): string[];\n field(fieldID: string): DDL2.IField | null;\n}\n\nexport class ComputedField extends PropertyExt {\n private _owner: IComputedFieldOwner;\n\n disableColumn1(): boolean {\n return !this.label() || [\"=\", \"*\", \"/\", \"+\", \"-\", \"scale\", \"map\"].indexOf(this.type()) < 0;\n }\n\n disableColumn2(): boolean {\n return !this.label() || [\"*\", \"/\", \"+\", \"-\"].indexOf(this.type()) < 0;\n }\n\n disableMapping(): boolean {\n return !this.label() || [\"map\"].indexOf(this.type()) < 0;\n }\n\n disableChildField(): boolean {\n return !this.hasChildren();\n }\n\n validate(prefix: string): IActivityError[] {\n const retVal: IActivityError[] = [];\n if (!this.column1_valid()) {\n retVal.push({\n source: `${prefix}.${this.label()}`,\n msg: `Invalid column1: \"${this.column1()}\"`,\n hint: `expected: ${JSON.stringify(this.columns())}`\n });\n }\n if (!this.column2_valid()) {\n retVal.push({\n source: `${prefix}.${this.label()}`,\n msg: `Invalid column2: \"${this.column2()}\"`,\n hint: `expected: ${JSON.stringify(this.columns())}`\n });\n }\n if (!this.disableMapping()) {\n this.validComputedMappings().forEach(cm => cm.validate(`${prefix}.mapping`));\n }\n if (!this.disableChildField()) {\n this.validChildFields().forEach(cf => cf.validate(`${prefix}.childField`));\n }\n return retVal;\n }\n\n hasChildren() {\n if (!this.label()) return false;\n if (this.type() !== \"=\") return false;\n if (!this.column1()) return false;\n const field = (this._owner as ProjectBase).field(this.column1());\n if (field && field.type === \"dataset\" && field.children) {\n return true;\n }\n return false;\n }\n\n children(): DDL2.IField[] {\n const field = (this._owner as ProjectBase).field(this.column1());\n if (field && field.type === \"dataset\") {\n return field.children;\n }\n return [];\n }\n\n constructor() {\n super();\n }\n\n owner(): IComputedFieldOwner;\n owner(_: IComputedFieldOwner): this;\n owner(_?: IComputedFieldOwner): IComputedFieldOwner | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.label();\n }\n\n validComputedMappings(): ComputedMapping[] {\n return this.mapping().filter(cf => cf.valid());\n }\n\n validChildFields() {\n return this.childField().filter(cf => cf.valid());\n }\n\n hasChildFields() {\n return this.validChildFields().length;\n }\n\n toDDL(): DDL2.MultiTransformationType {\n switch (this.type()) {\n case \"scale\":\n return {\n fieldID: this.label(),\n type: \"scale\",\n sourceFieldID: this.column1(),\n factor: this.constValue()\n };\n case \"template\":\n return {\n fieldID: this.label(),\n type: \"template\",\n template: this.template()\n };\n case \"=\":\n const transformations = this.validChildFields().map(cf => cf.toDDL());\n return {\n fieldID: this.label(),\n type: \"=\",\n sourceFieldID: this.column1(),\n transformations: transformations.length ? transformations : undefined\n };\n case \"map\":\n return {\n fieldID: this.label(),\n type: \"map\",\n sourceFieldID: this.column1(),\n default: this.default(),\n mappings: this.validComputedMappings().map(cm => cm.toDDL())\n };\n default:\n return {\n fieldID: this.label(),\n type: this.type() as DDL2.ICalculatedType,\n sourceFieldID1: this.column1(),\n sourceFieldID2: this.column2()\n };\n }\n }\n\n fromDDL(ddl: DDL2.MultiTransformationType): this {\n const retVal = this\n .label(ddl.fieldID)\n .type(ddl.type)\n ;\n switch (ddl.type) {\n case \"scale\":\n retVal\n .column1(ddl.sourceFieldID)\n .constValue(ddl.factor)\n ;\n break;\n case \"template\":\n retVal\n .template(ddl.template)\n ;\n break;\n case \"=\":\n retVal\n .column1(ddl.sourceFieldID)\n .childField(ddl.transformations ? ddl.transformations.map(transformation => ComputedField.fromDDL(transformation)) : [])\n ;\n break;\n case \"map\":\n retVal\n .column1(ddl.sourceFieldID)\n .default(ddl.default)\n .mapping(ddl.mappings ? ddl.mappings.map(mapping => ComputedMapping.fromDDL(mapping)) : [])\n ;\n break;\n default:\n retVal\n .column1(ddl.sourceFieldID1)\n .column2(ddl.sourceFieldID2)\n ;\n }\n return retVal;\n }\n\n static fromDDL(ddl: DDL2.MultiTransformationType): ComputedField {\n return new ComputedField().fromDDL(ddl);\n }\n\n hash(): string {\n return hashSum(this.toDDL());\n }\n\n columns(): string[] {\n return this._owner.fieldIDs();\n }\n\n computedField(): DDL2.IField {\n switch (this.type()) {\n case \"=\":\n let validChildFields = this.validChildFields();\n if (validChildFields.length === 0 && this.hasChildren()) {\n // Has children but no mappings - include all children by default...\n validChildFields = this.children().map((child: DDL2.IField) => {\n return new ComputedField()\n .owner(this)\n .label(child.id)\n .type(\"=\")\n .column1(child.id)\n ;\n });\n }\n return {\n ...this._owner.field(this.column1()),\n id: this.label(),\n children: validChildFields.length ? validChildFields.map(cf => cf.computedField()) : undefined\n } as DDL2.IField;\n case \"*\":\n case \"/\":\n case \"+\":\n case \"-\":\n case \"scale\":\n return { id: this.label(), type: \"number\" };\n case \"template\":\n return { id: this.label(), type: \"string\" };\n case \"map\":\n return { id: this.label(), type: \"object\" } as DDL2.IFieldObject;\n }\n return { id: this.label(), type: \"string\" };\n }\n\n projection(trim: boolean): (row: object) => object {\n const hasComputedFields = this.hasChildFields();\n const computedFields = this.validChildFields().map(cf => {\n return {\n label: cf.label(),\n func: cf.computeFunc(trim)\n };\n });\n return (row: object) => {\n const retVal = trim && hasComputedFields ? {} : { ...row };\n for (const cf of computedFields) {\n retVal[cf.label] = cf.func(row);\n }\n if (trim && hasComputedFields) {\n retVal[\"__lparam\"] = row;\n }\n return retVal;\n };\n }\n\n computeFunc(trim: boolean): (row: any) => any {\n const column1 = this.column1();\n const column2 = this.column2();\n switch (this.type()) {\n case \"=\":\n if (this.hasChildFields()) {\n return (row: object) => {\n // TODO Move to function factory ---\n const r = row[column1].Row && isArray(row[column1].Row) ? row[column1].Row : row[column1];\n return r.map(this.projection(trim));\n };\n }\n return (row: object) => {\n return row[column1];\n };\n case \"*\":\n return (row: any) => {\n return +row[column1] * +row[column2];\n };\n case \"/\":\n return (row: any) => {\n return +row[column1] / +row[column2];\n };\n case \"+\":\n return (row: any) => {\n return +row[column1] + +row[column2];\n };\n case \"-\":\n return (row: any) => {\n return +row[column1] - +row[column2];\n };\n case \"scale\":\n const constValue = this.constValue();\n return (row: any) => {\n return +row[column1] * constValue;\n };\n case \"template\":\n const template = this.template();\n return (row: any) => {\n return Utility.template(template, row);\n };\n case \"map\":\n const defValue = this.default();\n const mappings = {};\n for (const mapping of this.mapping()) {\n mappings[mapping.value()] = mapping.newValue();\n }\n return (row: any) => {\n return mappings[row[column1]] || defValue;\n };\n default:\n return (row: any) => {\n return row[column1];\n };\n }\n }\n\n // IComputedFieldOwner ---\n fieldIDs(): string[] {\n const field = (this._owner as ProjectBase).field(this.column1());\n if (field) {\n switch (field.type) {\n case \"dataset\":\n return field.children.map(field => field.id);\n case \"object\":\n return Object.keys(field.fields);\n }\n }\n return [];\n }\n\n field(fieldID: string): DDL2.IField | undefined {\n const field = (this._owner as ProjectBase).field(this.column1());\n if (field) {\n switch (field.type) {\n case \"dataset\":\n for (const f of field.children) {\n if (f.id === fieldID) {\n return f;\n }\n }\n break;\n case \"object\":\n return field.fields[fieldID];\n }\n }\n return undefined;\n }\n}\nComputedField.prototype._class += \" ComputedField\";\n\nexport interface ComputedField {\n label(): string;\n label(_: string): this;\n type(): ComputedType;\n type(_: ComputedType): this;\n column1(): string;\n column1(_: string): this;\n column1_valid(): boolean;\n column2(): string;\n column2(_: string): this;\n column2_valid(): boolean;\n constValue(): number;\n constValue(_: number): this;\n template(): string;\n template(_: string): this;\n default(): any;\n default(_: any): this;\n mapping(): ComputedMapping[];\n mapping(_: ComputedMapping[]): this;\n childField(): ComputedField[];\n childField(_: ComputedField[]): this;\n}\n\n// ===========================================================================\nexport class MultiField extends PropertyExt implements IComputedFieldOwner {\n private _owner: IComputedFieldOwner;\n\n constructor() {\n super();\n }\n\n hash() {\n return hashSum(this.toDDL());\n }\n\n owner(): IComputedFieldOwner;\n owner(_: IComputedFieldOwner): this;\n owner(_?: IComputedFieldOwner): IComputedFieldOwner | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.label() && this.validMultiFields().length > 0;\n }\n\n validate(prefix: string): IActivityError[] {\n let retVal: IActivityError[] = [];\n for (const cf of this.validMultiFields()) {\n retVal = retVal.concat(cf.validate(`${prefix}.computedFields`));\n }\n return retVal;\n }\n\n toDDL(): DDL2.IMulti {\n return {\n fieldID: this.label(),\n type: \"multi\",\n transformations: this.transformations()\n };\n }\n\n fromDDL(ddl: DDL2.IMulti): this {\n return this\n .label(ddl.fieldID)\n .transformations(ddl.transformations)\n ;\n }\n\n static fromDDL(ddl: DDL2.IMulti): MultiField {\n return new MultiField().fromDDL(ddl);\n }\n\n validMultiFields(): ComputedField[] {\n return this.multiFields().filter(computedField => computedField.valid());\n }\n\n transformations(): DDL2.MultiTransformationType[];\n transformations(_: DDL2.MultiTransformationType[]): this;\n transformations(_?: DDL2.MultiTransformationType[]): DDL2.MultiTransformationType[] | this {\n if (!arguments.length) return this.validMultiFields().map(cf => cf.toDDL());\n this.multiFields(_.map(transformation => ComputedField.fromDDL(transformation)));\n return this;\n }\n\n // IComputedFieldOwner ---\n fieldIDs(): string[] {\n return this._owner.fieldIDs();\n }\n\n field(fieldID: string): DDL2.IField | null {\n return this._owner.field(fieldID);\n }\n}\nMultiField.prototype._class += \" MultiField\";\n\nexport interface MultiField {\n label(): string;\n label(_: string): this;\n multiFields(): ComputedField[];\n multiFields(_: ComputedField[]): this;\n}\n\n// ===========================================================================\nexport class ProjectBase extends Activity {\n static ComputedField = ComputedField;\n\n _includeLParam = false;\n _trim = false;\n\n validate(): IActivityError[] {\n let retVal: IActivityError[] = [];\n for (const cf of this.validComputedFields()) {\n retVal = retVal.concat(cf.validate(`${this.classID()}.computedFields`));\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n transformations(): DDL2.ProjectTransformationType[];\n transformations(_: DDL2.ProjectTransformationType[]): this;\n transformations(_?: DDL2.ProjectTransformationType[]): DDL2.ProjectTransformationType[] | this {\n if (!arguments.length) return this.validComputedFields().map(cf => cf.toDDL());\n this.computedFields(_.map(transformation => {\n switch (transformation.type) {\n case \"multi\":\n return MultiField.fromDDL(transformation);\n default:\n return ComputedField.fromDDL(transformation);\n }\n }));\n return this;\n }\n\n exists(): boolean {\n return this.validComputedFields().length > 0;\n }\n\n // IComputedFieldOwner ---\n fieldIDs(): string[] {\n return this.inFields().map(field => field.id);\n }\n\n field(fieldID: string): DDL2.IField | null {\n for (const field of this.inFields()) {\n if (field.id === fieldID) {\n return field;\n }\n }\n return null;\n }\n // ---\n\n clearComputedFields() {\n this.computedFields([]);\n }\n\n appendComputedFields(computedFields: [{ label: string, type: ComputedType, column?: string }]): this {\n for (const aggregateField of computedFields) {\n const aggrField = new ComputedField()\n .owner(this)\n .label(aggregateField.label)\n .type(aggregateField.type)\n ;\n if (aggregateField.column !== void 0) {\n aggrField.column1(aggregateField.column);\n }\n this.computedFields().push(aggrField);\n }\n return this;\n }\n\n validComputedFields() {\n return this.computedFields().filter(computedField => computedField.valid());\n }\n\n hasComputedFields() {\n return this.validComputedFields().length;\n }\n\n computeFields(inFields: ReadonlyArray<DDL2.IField>): () => ReadonlyArray<DDL2.IField> {\n if (!this.exists()) return super.computeFields(inFields);\n let retVal: DDL2.IField[] = [];\n const retValMap: { [key: string]: boolean } = {};\n for (const cf of this.validComputedFields()) {\n if (cf instanceof MultiField) {\n for (const cf2 of cf.validMultiFields()) {\n const computedField = cf2.computedField();\n retVal.push(computedField);\n retValMap[computedField.id] = true;\n }\n } else {\n const computedField = cf.computedField();\n retVal.push(computedField);\n retValMap[computedField.id] = true;\n }\n }\n if (this._trim && this.hasComputedFields()) {\n if (this._includeLParam) {\n const computedField = {\n id: \"__lparam\",\n type: \"object\"\n } as DDL2.IField;\n retVal.push(computedField);\n retValMap[computedField.id] = true;\n }\n } else {\n retVal = retVal.concat(inFields.filter(field => !retValMap[field.id]));\n }\n return () => retVal;\n }\n\n referencedFields(refs: ReferencedFields): void {\n super.referencedFields(refs);\n const fieldIDs: string[] = [];\n for (const cf of this.validComputedFields()) {\n if (cf instanceof MultiField) {\n for (const cf2 of cf.validMultiFields()) {\n fieldIDs.push(cf2.column1());\n if (cf2.column2()) {\n fieldIDs.push(cf2.column2());\n }\n }\n } else {\n if (cf.type() === \"template\") {\n for (const fieldID of Utility.templateFields(cf.template())) {\n fieldIDs.push(fieldID);\n }\n } else {\n fieldIDs.push(cf.column1());\n if (cf.column2()) {\n fieldIDs.push(cf.column2());\n }\n }\n }\n }\n super.resolveInFields(refs, fieldIDs);\n }\n\n projection(): (row: object) => object {\n const trim = this._trim;\n const hasComputedFields = this.hasComputedFields();\n const computedFields = [];\n for (const cf of this.validComputedFields()) {\n if (cf instanceof MultiField) {\n for (const cf2 of cf.validMultiFields()) {\n computedFields.push({\n label: cf2.label(),\n func: cf2.computeFunc(trim)\n });\n }\n } else {\n computedFields.push({\n label: cf.label(),\n func: cf.computeFunc(trim)\n });\n }\n }\n return (row: object) => {\n const retVal = trim && hasComputedFields ? {} : { ...row };\n for (const cf of computedFields) {\n retVal[cf.label] = cf.func(row);\n }\n if (trim && hasComputedFields) {\n if (this._includeLParam) {\n retVal[\"__lparam\"] = row;\n }\n }\n return retVal;\n };\n }\n\n computeData(): ReadonlyArray<object> {\n const data = super.computeData();\n if (data.length === 0 || !this.exists()) return data;\n return data.map(this.projection());\n }\n}\n\nexport class Project extends ProjectBase {\n\n toDDL(): DDL2.IProject {\n return {\n type: \"project\",\n transformations: this.transformations()\n };\n }\n\n fromDDL(ddl: DDL2.IProject): this {\n return this.transformations(ddl.transformations);\n }\n\n static fromDDL(ddl: DDL2.IProject): Project {\n return new Project().fromDDL(ddl);\n }\n\n hash(more: object = {}): string {\n return super.hash({\n ddl: this.toDDL(),\n ...more\n });\n }\n}\nProject.prototype._class += \" Project\";\n\nexport class Mappings extends ProjectBase {\n\n constructor() {\n super();\n this._trim = true;\n this._includeLParam = true;\n }\n\n toDDL(): DDL2.IMappings {\n return {\n type: \"mappings\",\n transformations: this.transformations()\n };\n }\n\n fromDDL(_ddl: DDL2.IMappings): this {\n const ddl = _ddl || { transformations: [] };\n return this\n .transformations(ddl.transformations)\n ;\n }\n\n static fromDDL(ddl: DDL2.IMappings): Mappings {\n return new Mappings().fromDDL(ddl);\n }\n\n hash(more: object = {}): string {\n return super.hash({\n ddl: this.toDDL(),\n ...more\n });\n }\n\n referencedFields(refs: ReferencedFields): void {\n if (this.hasComputedFields()) {\n return super.referencedFields(refs);\n }\n this.resolveInFields(refs, this.inFields().filter(f => f.id !== \"__lparam\").map(f => f.id));\n }\n}\nMappings.prototype._class += \" Mappings\";\n\nComputedMapping.prototype.publish(\"value\", null, \"any\", \"Compare Value\", undefined, {\n validate: (w: ComputedMapping): boolean => (!w.value() && !w.newValue()) || (!!w.value() && !!w.newValue())\n});\nComputedMapping.prototype.publish(\"newValue\", null, \"any\", \"New Value\", undefined, {\n validate: (w: ComputedMapping): boolean => (!w.value() && !w.newValue()) || (!!w.value() && !!w.newValue())\n});\n\nComputedField.prototype.publish(\"label\", null, \"string\", \"Label\", null, { optional: true });\nComputedField.prototype.publish(\"type\", \"mapping\", \"set\", \"Project type\", [\"=\", \"*\", \"/\", \"+\", \"-\", \"scale\", \"template\", \"map\"], { optional: true, disable: w => !w.label() });\nComputedField.prototype.publish(\"column1\", null, \"set\", \"Param 1\", function (this: ComputedField) { return this.columns(); }, {\n optional: true,\n disable: (w: ComputedField) => w.disableColumn1(),\n validate: (w: ComputedField): boolean => w.columns().indexOf(w.column1()) >= 0\n});\nComputedField.prototype.publish(\"column2\", null, \"set\", \"Param 2\", function (this: ComputedField) { return this.columns(); }, {\n optional: true,\n disable: (w: ComputedField) => w.disableColumn2(),\n validate: (w: ComputedField): boolean => w.columns().indexOf(w.column2()) >= 0\n});\nComputedField.prototype.publish(\"constValue\", null, \"number\", \"Const value\", null, { optional: true, disable: (w: ComputedField) => !w.label() || [\"scale\"].indexOf(w.type()) < 0 });\nComputedField.prototype.publish(\"template\", null, \"string\", \"template\", null, { optional: true, disable: (w: ComputedField) => !w.label() || [\"template\"].indexOf(w.type()) < 0 });\nComputedField.prototype.publish(\"default\", null, \"any\", \"Default Value\", null, { optional: true, disable: (w: ComputedField) => !w.label() || [\"map\"].indexOf(w.type()) < 0 });\nComputedField.prototype.publish(\"mapping\", [], \"propertyArray\", \"Mapped Values\", null, { autoExpand: ComputedMapping, disable: (w: ComputedField) => w.disableMapping() });\nComputedField.prototype.publish(\"childField\", [], \"propertyArray\", \"Child Fields\", null, { autoExpand: ComputedField, disable: (w: ComputedField) => w.disableChildField() });\n\nMultiField.prototype.publish(\"label\", \"\", \"string\", \"Label\");\nMultiField.prototype.publish(\"multiFields\", [], \"propertyArray\", \"Multi Fields\", null, { autoExpand: ComputedField });\n\nexport interface ProjectBase {\n computedFields(): Array<ComputedField | MultiField>;\n computedFields(_: Array<ComputedField | MultiField>): this;\n}\n\nProjectBase.prototype.publish(\"computedFields\", [], \"propertyArray\", \"Computed Fields\", null, { autoExpand: ComputedField });","import { PropertyExt } from \"@hpcc-js/common\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { ascending as d3Ascending, descending as d3Descending } from \"d3-array\";\nimport { Activity, IActivityError, ReferencedFields } from \"./activity.ts\";\n\nexport class SortColumn extends PropertyExt {\n private _owner: Sort;\n\n validate(prefix: string): IActivityError[] {\n const retVal: IActivityError[] = [];\n if (!this.fieldID_valid()) {\n retVal.push({\n source: `${prefix}.fieldID`,\n msg: `Invalid fieldID: ${this.fieldID()}`,\n hint: `expected ${JSON.stringify(this.fieldIDs())}`\n });\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n owner(): Sort;\n owner(_: Sort): this;\n owner(_?: Sort): Sort | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.fieldID();\n }\n\n toDDL(): DDL2.ISortCondition {\n return {\n fieldID: this.fieldID(),\n descending: this.descending()\n };\n }\n\n fromDDL(ddl: DDL2.ISortCondition): this {\n return this\n .fieldID(ddl.fieldID)\n .descending(ddl.descending)\n ;\n }\n\n static fromDDL(ddl: DDL2.ISortCondition): SortColumn {\n return new SortColumn().fromDDL(ddl);\n }\n\n hash(): string {\n return hashSum({\n sortColumn: this.fieldID(),\n descending: this.descending()\n });\n }\n\n fieldIDs() {\n return this._owner.fieldIDs();\n }\n\n field(id: string): DDL2.IField | undefined {\n return this._owner.inFields().filter(field =>\n field.id === id\n )[0];\n }\n}\nSortColumn.prototype._class += \" SortColumn\";\n\nexport interface SortColumn {\n fieldID(): string;\n fieldID(_: string): this;\n fieldID_valid(): boolean;\n descending(): boolean;\n descending(_: boolean): this;\n}\n\n// ===========================================================================\nexport class Sort extends Activity {\n static Column = SortColumn;\n\n validate(): IActivityError[] {\n let retVal: IActivityError[] = [];\n for (const sb of this.validSortBy()) {\n retVal = retVal.concat(sb.validate(\"Sort.column\"));\n }\n return retVal;\n }\n\n constructor() {\n super();\n }\n\n toDDL(): DDL2.ISort {\n return {\n type: \"sort\",\n conditions: this.conditions()\n };\n }\n\n fromDDL(ddl: DDL2.ISort): this {\n this.conditions(ddl.conditions);\n return this;\n }\n\n static fromDDL(ddl: DDL2.ISort) {\n return new Sort().fromDDL(ddl);\n }\n\n conditions(): DDL2.ISortCondition[];\n conditions(_: DDL2.ISortCondition[]): this;\n conditions(_?: DDL2.ISortCondition[]): DDL2.ISortCondition[] | this {\n if (!arguments.length) return this.validSortBy().map(column => column.toDDL());\n this.column(_.map(condition => SortColumn.fromDDL(condition)));\n return this;\n }\n\n // Activitiy ---\n hash(): string {\n return hashSum({\n Sort: this.column().map(sb => sb.hash())\n });\n }\n\n referencedFields(refs: ReferencedFields): void {\n super.referencedFields(refs);\n super.resolveInFields(refs, this.validSortBy().map(sortBy => sortBy.fieldID()));\n }\n\n validSortBy(): SortColumn[] {\n return this.column().filter(sortBy => sortBy.fieldID());\n }\n\n exists(): boolean {\n return this.validSortBy().length > 0;\n }\n\n fieldIDs(): string[] {\n return this.inFields().map(field => field.id);\n }\n\n computeData(): ReadonlyArray<object> {\n const data = super.computeData();\n const sortByArr: Array<{ compare: (l, r) => number, id: string }> = [];\n for (const sortBy of this.validSortBy()) {\n sortByArr.push({\n compare: sortBy.descending() ? d3Descending : d3Ascending,\n id: sortBy.fieldID()\n });\n }\n\n if (sortByArr.length) {\n return [...data].sort((l: any, r: any) => {\n for (const item of sortByArr) {\n const retVal2 = item.compare(l[item.id], r[item.id]);\n if (retVal2 !== 0) {\n return retVal2;\n }\n }\n return 0;\n });\n\n }\n return data;\n }\n}\nSort.prototype._class += \" Sort\";\n\nexport interface Sort {\n column(): SortColumn[];\n column(_: SortColumn[]): this;\n}\n\nSortColumn.prototype.publish(\"fieldID\", null, \"set\", \"Sort Field\", function (this: SortColumn) { return this.fieldIDs(); }, {\n optional: true,\n validate: (w: SortColumn): boolean => w.fieldIDs().indexOf(w.fieldID()) >= 0\n });\nSortColumn.prototype.publish(\"descending\", false, \"boolean\", \"Sort Field\");\n\nSort.prototype.publish(\"column\", [], \"propertyArray\", \"Source Columns\", null, { autoExpand: SortColumn });","import { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { ElementContainer } from \"../model/element.ts\";\nimport { Activity, ActivityPipeline } from \"./activity.ts\";\nimport { DatasourceRefType } from \"./datasource.ts\";\nimport { DSPicker } from \"./dspicker.ts\";\nimport { Filters } from \"./filter.ts\";\nimport { GroupBy } from \"./groupby.ts\";\nimport { Limit } from \"./limit.ts\";\nimport { Project } from \"./project.ts\";\nimport { Sort } from \"./sort.ts\";\n\nexport class HipiePipeline extends ActivityPipeline {\n\n _origDatasource;\n _origFilters;\n _origProject;\n _origGroupBy;\n _origSort;\n _origLimit;\n\n declare _datasource: DSPicker | DatasourceRefType;\n declare _filters: Filters;\n declare _project: Project;\n declare _groupBy: GroupBy;\n declare _sort: Sort;\n declare _limit: Limit;\n\n constructor(private _ec: ElementContainer, viewID: string) {\n super();\n this._id = viewID;\n this._datasource = new DSPicker(this._ec);\n this._filters = new Filters(this._ec);\n this._project = new Project();\n this._groupBy = new GroupBy();\n this._sort = new Sort();\n this._limit = new Limit();\n this.updateSequence();\n }\n\n activities(): Activity[];\n activities(_: Activity[]): this;\n activities(_?: Activity[]): Activity[] | this {\n const retVal = super.activities.apply(this, arguments);\n return retVal;\n }\n\n private updateSequence() {\n this.activities([\n this.datasource() as Activity,\n this.filters(),\n this.project(),\n this.groupBy(),\n this.sort(),\n this.limit()\n ]);\n }\n\n selectionFields(): ReadonlyArray<DDL2.IField> {\n return this.last().outFields();\n }\n}\n\nexport interface HipiePipeline {\n datasource(): DSPicker | DatasourceRefType;\n datasource(_: DSPicker | DatasourceRefType): this;\n filters(): Filters;\n filters(_: Filters): this;\n project(): Project;\n project(_: Project): this;\n groupBy(): GroupBy;\n groupBy(_: GroupBy): this;\n sort(): Sort;\n sort(_: Sort): this;\n limit(): Limit;\n limit(_: Limit): this;\n}\n\nHipiePipeline.prototype.publish(\"datasource\", null, \"widget\", \"Data Source 2\");\nHipiePipeline.prototype.publish(\"filters\", null, \"widget\", \"Client Filters\");\nHipiePipeline.prototype.publish(\"project\", null, \"widget\", \"Project\");\nHipiePipeline.prototype.publish(\"groupBy\", null, \"widget\", \"Group By\");\nHipiePipeline.prototype.publish(\"sort\", null, \"widget\", \"Sort\");\nHipiePipeline.prototype.publish(\"limit\", null, \"widget\", \"Limit output\");\n\nfunction wrapHipiePipelineProperty(prop: string) {\n const origKey = `_orig${prop.charAt(0).toUpperCase() + prop.slice(1)}`;\n HipiePipeline.prototype[origKey] = HipiePipeline.prototype[prop];\n HipiePipeline.prototype[prop] = function (_?) {\n const retVal = HipiePipeline.prototype[origKey].apply(this, arguments);\n if (_ !== undefined) {\n this.updateSequence();\n }\n return retVal;\n };\n}\nwrapHipiePipelineProperty(\"datasource\");\nwrapHipiePipelineProperty(\"filters\");\nwrapHipiePipelineProperty(\"project\");\nwrapHipiePipelineProperty(\"groupBy\");\nwrapHipiePipelineProperty(\"sort\");\nwrapHipiePipelineProperty(\"limit\");","import { HipiePipeline } from \"./hipiepipeline.ts\";\n\nexport class NullView extends HipiePipeline {\n hash(): string {\n return super.hash();\n }\n\n _fetch(from: number, count: number): Promise<any[]> {\n return Promise.resolve([]);\n }\n}\nNullView.prototype._class += \" NullView\";\n","import { Spacer, ToggleButton, Widget } from \"@hpcc-js/common\";\nimport { ChartPanel, Modal } from \"@hpcc-js/layout\";\n\nexport interface IVizPopupPanelOwner {\n vizActivation(viz);\n}\n\nexport class VizPopupPanel extends Modal {\n\n private _owner: IVizPopupPanelOwner;\n private _ownerLParam;\n\n constructor(owner: IVizPopupPanelOwner, ownerLParam) {\n super();\n this._owner = owner;\n this._ownerLParam = ownerLParam;\n this._drawStartPos = \"origin\";\n this.visible(false);\n this.minHeight_default(\"240px\");\n this.minWidth_default(\"320px\");\n this.overflowY_default(\"hidden\");\n }\n\n private _host: VizChartPanel;\n host(_?: VizChartPanel): VizChartPanel | this {\n if (!arguments.length) return this._host;\n if (this._host && this._host !== _) {\n this._host._togglePopup\n .selected(false)\n .render()\n ;\n }\n this._host = _;\n this._owner.vizActivation(this._ownerLParam);\n return this;\n }\n\n enter(domNode, element) {\n domNode.parentElement.style.position = \"absolute\";\n const widgetTitle = (this.widget() as ChartPanel).title();\n if (widgetTitle) {\n this.title(widgetTitle);\n (this.widget() as ChartPanel).titleVisible(false);\n }\n super.enter(domNode, element);\n }\n\n update(domNode, element) {\n this.fixedTop(this._pos.y + \"px\");\n this.fixedLeft(this._pos.x + \"px\");\n super.update(domNode, element);\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n const widgetTitle = (this.widget() as ChartPanel).title();\n if (widgetTitle) {\n (this.widget() as ChartPanel).titleVisible(true);\n }\n }\n\n closeModal() {\n super.closeModal();\n if (this._host) {\n this._host._togglePopup\n .selected(false)\n .render()\n ;\n }\n }\n}\nVizPopupPanel.prototype._class += \" marshaller_VizPopupPanel\";\n\nexport interface VizPopupPanel {\n widget(_: Widget): this;\n widget(): Widget;\n widget_exists(): boolean;\n minHeight_default(_: string);\n minWidth_default(_: string);\n overflowY_default(_: string);\n}\n\n// ===========================================================================\n\nexport interface VizChartPanel {\n}\n\nexport class VizChartPanel extends ChartPanel {\n\n private _popup: VizPopupPanel;\n _togglePopup = new ToggleButton().faChar(\"fa-filter\").tooltip(\"Filter\")\n .on(\"click\", () => {\n this._popup.host(this);\n const dp = this.locateClosestAncestor([\"marshaller_DashboardDockPanel\", \"marshaller_DashboardGrid\"]);\n const dpBBox = dp.getBBox(true);\n const cp = this._popup.widget() as VizChartPanel;\n const tbBBox = this._togglePopup.getBBox();\n this._popup\n .pos({\n x: -dpBBox.x + tbBBox.x + tbBBox.width - cp.minWidth(),\n y: -dpBBox.y + tbBBox.y + tbBBox.height\n })\n .resize({ width: cp.minWidth(), height: cp.minHeight() })\n .visible(this._togglePopup.selected())\n .render((popup: any) => {\n const widgetSelector = \"#\" + popup.id() + \" .layout_Carousel .common_Widget\";\n const node = popup.element().node();\n if (node) {\n const { height, width } = node.querySelector(widgetSelector).getBoundingClientRect();\n popup.resizeBodySync(width, height);\n }\n })\n ;\n });\n\n private _origButtons: Widget[];\n private _filterButtons: Widget[];\n\n constructor() {\n super();\n\n this._origButtons = this.buttons();\n this._filterButtons = [this._togglePopup, new Spacer(), ...this._origButtons];\n }\n\n popup(_?: VizPopupPanel): VizPopupPanel | this {\n if (!arguments.length) return this._popup;\n this._popup = _;\n if (!this._popup) {\n this._togglePopup.selected(false);\n }\n this.buttons(this._popup ? this._filterButtons : this._origButtons);\n return this;\n }\n}\nVizChartPanel.prototype._class += \" marshaller_VizChartPanel\";\n\nexport interface VizChartPanel {\n minWidth(): number;\n minWidth(_: number): this;\n minWidth(_: number): this;\n minWidth_exists(): boolean;\n minHeight(): number;\n minHeight(_: number): this;\n minHeight_exists(): boolean;\n}\nVizChartPanel.prototype.publish(\"descriptionTemplate\", \"\", \"string\");\nVizChartPanel.prototype.publish(\"minWidth\", 320, \"number\", \"Min Width\");\nVizChartPanel.prototype.publish(\"minHeight\", 240, \"number\", \"Min Height\");\n","import { Area, Bar, Bubble, Column, Contour, HexBin, Line, Pie, Radar, RadialBar, Scatter, Step, WordCloud } from \"@hpcc-js/chart\";\nimport { Database, EntityRectList, InputField, PropertyExt, Widget } from \"@hpcc-js/common\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { Table } from \"@hpcc-js/dgrid\";\nimport { FieldForm } from \"@hpcc-js/form\";\nimport { AdjacencyGraph, DataGraph } from \"@hpcc-js/graph\";\nimport { ChoroplethCounties, ChoroplethStates, Leaflet } from \"@hpcc-js/map\";\nimport { isArray } from \"@hpcc-js/util\";\nimport { HipiePipeline } from \"../activities/hipiepipeline.ts\";\nimport { ComputedField, Mappings, MultiField } from \"../activities/project.ts\";\nimport { ElementContainer } from \"./element.ts\";\nimport { VizChartPanel } from \"./vizChartPanel.ts\";\n\nexport type VizType = \"Table\" | \"FieldForm\" |\n \"Area\" | \"Bubble\" | \"Bar\" | \"Column\" | \"Contour\" | \"HexBin\" | \"Line\" | \"Pie\" | \"WordCloud\" | \"Radar\" | \"RadialBar\" | \"Scatter\" | \"Step\" |\n \"USCountiesChoropleth\" | \"USStatesChoropleth\" | \"ClusterPins\" |\n \"EntityRectList\" | \"AdjacencyGraph\" | \"DataGraph\";\nconst VizTypeMap: { [key: string]: new (...args: any[]) => object } = {\n Table, FieldForm,\n Area, Bubble, Bar, Column, Contour, HexBin, Line, Pie, Radar, RadialBar, Scatter, Step, WordCloud,\n USCountiesChoropleth: ChoroplethCounties, USStatesChoropleth: ChoroplethStates, ClusterPins: Leaflet.ClusterPins,\n EntityRectList, AdjacencyGraph, DataGraph\n};\nexport const VizTypeSet = [];\nfor (const key in VizTypeMap) {\n VizTypeSet.push(key);\n}\n\nfunction typeClass(type: VizType): any {\n const retVal = VizTypeMap[type];\n return retVal || Table;\n}\n\nfunction typeNew(type: VizType): Widget {\n const ChartClass = VizTypeMap[type];\n const retVal = new (ChartClass || Table)() as Widget;\n\n // Override default properties as needed ---\n if (retVal instanceof FieldForm) {\n retVal\n .validate(false)\n .allowEmptyRequest(true)\n ;\n } else if (retVal instanceof AdjacencyGraph) {\n retVal\n .uidColumn(\"uid\")\n .labelColumn(\"label\")\n .iconColumn(\"icon\")\n .linksColumn(\"links\")\n .linkUidColumn(\"uid\")\n .linkLabelColumn(\"label\")\n ;\n }\n return retVal;\n}\n\nfunction typeInputs(type: VizType): InputField[] {\n return typeClass(type).__inputs || [];\n}\n\nexport class Visualization extends PropertyExt {\n\n _origVisibility;\n _origChartType;\n _origChartPanel;\n\n declare _visibility: DDL2.VisibilityType;\n declare _chartType: VizType;\n declare _chartPanel: VizChartPanel;\n\n protected _hipiePipeline: HipiePipeline;\n constructor(protected _ec: ElementContainer, hipiePipeline: HipiePipeline) {\n super();\n this._hipiePipeline = hipiePipeline;\n this.mappings(new Mappings());\n this.chartPanel(new VizChartPanel());\n this.typeChanged();\n }\n\n visualizationIDs(): string[] {\n return this._ec.elementIDs().filter(id => id !== this.id());\n }\n\n _prevChartType;\n typeChanged() {\n if (this._prevChartType !== this._chartType) {\n this._prevChartType = this._chartType;\n this.refreshMappings();\n const chart = typeNew(this._chartType);\n this.chartPanel().widget(chart);\n }\n }\n\n properties(): DDL2.IWidgetProperties;\n properties(_: DDL2.IWidgetProperties): this;\n properties(_?: DDL2.IWidgetProperties): DDL2.IWidgetProperties | this {\n if (!arguments.length) return this.chartPanel().serialize();\n this.chartPanel().deserialize(_);\n\n return this;\n }\n\n refreshMappings(): this {\n const mappings = this.mappings();\n mappings.sourceActivity(this._hipiePipeline);\n const cfs = mappings.validComputedFields();\n const inFields = mappings.inFields();\n const taken = {};\n mappings.computedFields(typeInputs(this._chartType).map((input, idx) => {\n let retVal: MultiField | ComputedField = cfs[idx];\n if (retVal) {\n if (retVal instanceof MultiField) {\n } else {\n retVal.label(input.id);\n }\n } else {\n if (input.multi) {\n retVal = new MultiField()\n .owner(mappings)\n .label(input.id)\n ;\n const computedFields: ComputedField[] = [];\n for (const inField of inFields) {\n if ((input.type === \"any\" || input.type === inField.type) && !taken[inField.id]) {\n taken[inField.id] = true;\n computedFields.push(new ComputedField()\n .label(inField.id)\n .type(\"=\")\n .column1(inField.id)\n );\n }\n }\n retVal.multiFields(computedFields);\n } else {\n retVal = new ComputedField()\n .owner(mappings)\n .label(input.id)\n .type(\"=\")\n ;\n for (const inField of inFields) {\n if ((input.type === \"any\" || input.type === inField.type) && !taken[inField.id]) {\n taken[inField.id] = true;\n retVal.column1(inField.id);\n break;\n }\n }\n }\n }\n return retVal;\n }));\n return this;\n }\n\n _prevFields: ReadonlyArray<DDL2.IField> = [];\n _prevLinkFields: ReadonlyArray<DDL2.IField> = [];\n _prevData: ReadonlyArray<object> = [];\n refreshData(): Promise<void> {\n const mappings = this.mappings();\n\n const fields = mappings.outFields();\n const dbFields = this.toDBFields(fields);\n let linkFields: ReadonlyArray<DDL2.IField>;\n let dbLinkFields = [];\n const se = this._ec.element(this.secondaryDataviewID());\n if (se) {\n linkFields = se.mappings().outFields();\n dbLinkFields = this.toDBFields(linkFields);\n }\n\n const fieldsChanged = this._prevFields !== fields || this._prevLinkFields !== linkFields;\n if (fieldsChanged) {\n this._prevFields = fields;\n if (this.chartType() === \"DataGraph\") {\n const dataGraph = this.chartPanel().widget() as DataGraph;\n dataGraph.vertexColumns(dbFields.map(f => f.label()));\n dataGraph.edgeColumns(dbLinkFields.map(f => f.label()));\n } else {\n this.chartPanel().fields(dbFields.filter(f => f.id() !== \"__lparam\"));\n }\n } else {\n console.warn(`***${this.id()} Immutable Fields***`);\n }\n\n const data = mappings.outData();\n const dataChanged = this._prevData !== data;\n if (dataChanged) {\n this._prevData = data;\n const mappedData = this.toDBData(dbFields, data);\n if (this.chartType() === \"DataGraph\") {\n const dataGraph = this.chartPanel().widget() as DataGraph;\n dataGraph.vertices(mappedData);\n if (se) {\n const linkData = se.mappings().outData();\n const mappedLinkData = this.toDBData(dbLinkFields, linkData);\n dataGraph.edges(mappedLinkData);\n }\n } else {\n this.chartPanel().data(mappedData);\n }\n } else {\n console.warn(`${this.id()} Immutable Data!`);\n }\n\n if (fieldsChanged || dataChanged) {\n return this.chartPanel().renderPromise().then(() => { });\n }\n return Promise.resolve();\n }\n\n private fieldTypeTodbFieldType(type: DDL2.IFieldType): Database.FieldType {\n switch (type) {\n case \"dataset\":\n return \"nested\";\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n default:\n return \"string\";\n }\n }\n\n toDBFields(fields: ReadonlyArray<DDL2.IField>): Database.Field[] {\n const retVal: Database.Field[] = [];\n for (const field of fields || []) {\n const f = new Database.Field()\n .type(this.fieldTypeTodbFieldType(field.type))\n .id(field.id)\n .label(field.id)\n ;\n switch (field.type) {\n case \"dataset\":\n f.children(this.toDBFields(field.children));\n break;\n case \"object\":\n // TODO: For __lparam we should do nothing - not 100% if that is correct for \"real\" data (we don't really support \"object\" anyway)?\n break;\n }\n retVal.push(f);\n }\n return retVal;\n }\n\n toDBData(fields: Database.Field[], data: ReadonlyArray<object> | Readonly<object>) {\n const _data: ReadonlyArray<object> = isArray(data) ? data : [data];\n return _data.map((row: any) => {\n const retVal = [];\n for (const field of fields) {\n if (field.type() === \"nested\") {\n retVal.push(this.toDBData(field.children() as Database.Field[], row[field.id()].Row || row[field.id()]));\n } else {\n retVal.push(row[field.label()]);\n }\n }\n return retVal;\n });\n }\n\n exec(): Promise<void[]> {\n const promises = [];\n if (this.secondaryDataviewID_exists()) {\n const secondaryElementID = this.secondaryDataviewID();\n const secondaryElement = this._ec.element(secondaryElementID);\n if (secondaryElement) {\n promises.push(secondaryElement.visualization().exec());\n }\n }\n\n const mappings = this.mappings();\n mappings.sourceActivity(this._hipiePipeline);\n promises.push(mappings.refreshMeta().then(() => {\n return mappings.exec();\n }));\n\n return Promise.all(promises);\n }\n\n refresh(): Promise<void> {\n if (this.chartPanel().startProgress) {\n this.chartPanel().startProgress();\n }\n return this.exec().then(() => {\n if (this.chartPanel().finishProgress) {\n this.chartPanel().finishProgress();\n }\n return this.refreshData();\n });\n }\n\n // Events ---\n click(row: any, col: string, sel: boolean, more?) {\n }\n\n vertex_click(row: any, col: string, sel: boolean) {\n }\n}\nVisualization.prototype._class += \" Visualization\";\n\nexport interface Visualization {\n title(): string;\n title(_: string): this;\n description(): string;\n description(_: string): this;\n visibility(): DDL2.VisibilityType;\n visibility(_: DDL2.VisibilityType): this;\n chartType(): VizType;\n chartType(_: VizType, props?: { [prop: string]: any }): this;\n secondaryDataviewID(): string;\n secondaryDataviewID(_: string): this;\n secondaryDataviewID_exists(): boolean;\n secondaryDataviewID_valid(): boolean;\n mappings(): Mappings;\n mappings(_: Mappings): this;\n chartPanel(): VizChartPanel;\n chartPanel(_: VizChartPanel): this;\n}\n\nVisualization.prototype.publishProxy(\"title\", \"_chartPanel\");\nVisualization.prototype.publishProxy(\"description\", \"_chartPanel\");\nVisualization.prototype.publish(\"visibility\", DDL2.VisibilitySet[0], \"set\", \"Type\", DDL2.VisibilitySet);\nVisualization.prototype.publish(\"chartType\", \"Table\", \"set\", \"Type\", VizTypeSet);\nVisualization.prototype.publish(\"secondaryDataviewID\", null, \"set\", \"Secondary Data View (e.g. graph edges)\", function (this: Visualization) { return this.visualizationIDs(); }, { optional: true });\nVisualization.prototype.publish(\"mappings\", null, \"widget\", \"Mappings\", undefined, { render: false, internal: true });\nVisualization.prototype.publish(\"chartPanel\", [], \"widget\", \"Widget\");\n\nVisualization.prototype._origVisibility = Visualization.prototype.visibility;\nVisualization.prototype.visibility = function (this: Visualization, _?) {\n const prev = this._visibility;\n const retVal = Visualization.prototype._origVisibility.apply(this, arguments);\n if (_ !== undefined && prev !== _) {\n this.chartPanel().target(null);\n }\n return retVal;\n};\n\nVisualization.prototype._origChartType = Visualization.prototype.chartType;\nVisualization.prototype.chartType = function (this: Visualization, _?, props?) {\n if (_ !== undefined && VizTypeSet.indexOf(_) === -1) {\n _ = \"Table\";\n }\n const retVal = Visualization.prototype._origChartType.apply(this, arguments);\n if (_ !== undefined) {\n this.typeChanged();\n if (props) {\n const widget = this.chartPanel().widget();\n for (const prop in props) {\n if (typeof widget[prop] === \"function\") {\n widget[prop](props[prop]);\n }\n }\n }\n }\n return retVal;\n};\n\nVisualization.prototype._origChartPanel = Visualization.prototype.chartPanel;\nVisualization.prototype.chartPanel = function (this: Visualization, _?) {\n const retVal = Visualization.prototype._origChartPanel.apply(this, arguments);\n if (_ !== undefined) {\n this._chartPanel\n .on(\"click\", (row: any, col: string, sel: boolean, more) => this.click(row, col, sel, more))\n .on(\"vertex_click\", (row: any, col: string, sel: boolean) => this.vertex_click(row, col, sel))\n ;\n for (const key in VizTypeMap) {\n if (this._chartPanel.widget() instanceof VizTypeMap[key]) {\n this._chartType = key as VizType;\n break;\n }\n }\n }\n return retVal;\n};","import { PropertyExt, Widget } from \"@hpcc-js/common\";\nimport { IOptionsSend } from \"@hpcc-js/comms\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { find, hashSum, isArray } from \"@hpcc-js/util\";\nimport { Activity, IActivityError } from \"../activities/activity.ts\";\nimport { emptyDatabomb } from \"../activities/databomb.ts\";\nimport { DatasourceRefType } from \"../activities/datasource.ts\";\nimport { HipiePipeline } from \"../activities/hipiepipeline.ts\";\nimport { Mappings } from \"../activities/project.ts\";\nimport { Visualization } from \"./visualization.ts\";\nimport { VizChartPanel } from \"./vizChartPanel.ts\";\n\nexport class State extends PropertyExt {\n\n constructor() {\n super();\n this.selection([]);\n }\n\n set(_: Array<{ [key: string]: any }>): boolean {\n const currSelHash = hashSum(this.selection());\n const newSelHash = hashSum(_);\n if (currSelHash !== newSelHash) {\n this.selection(_);\n return true;\n }\n return false;\n }\n\n removeInvalid(data: ReadonlyArray<object>): boolean {\n const currSelection = this.selection();\n const newSelection: object[] = [];\n for (const selRow of currSelection) {\n if (find(data, (row: { [key: string]: any }, index): boolean => {\n for (const column in selRow) {\n if (selRow[column] !== row[column]) {\n return false;\n }\n }\n return true;\n })) {\n newSelection.push(selRow);\n }\n }\n if (newSelection.length !== currSelection.length) {\n this.selection(newSelection);\n return true;\n }\n return false;\n }\n}\nState.prototype._class += \" State\";\nexport interface State {\n selection(): Array<{ [key: string]: any }>;\n selection(_: Array<{ [key: string]: any }>): this;\n}\nState.prototype.publish(\"selection\", [], \"array\", \"State\");\n\nlet vizID = 0;\nexport class Element extends PropertyExt {\n private _vizChartPanel: Visualization;\n\n _origVisualization;\n\n declare _visualization: Visualization;\n\n constructor(private _ec: ElementContainer) {\n super();\n while (true) {\n vizID++;\n this._id = `e_${vizID}`;\n if (!this._ec.elementExists(this._id)) {\n break;\n }\n }\n const view = new HipiePipeline(this._ec, this._id);\n this.hipiePipeline(view);\n this._vizChartPanel = new Visualization(this._ec, this.hipiePipeline())\n .id(`viz_${vizID}`)\n .title(`Element ${vizID}`)\n ;\n this._vizChartPanel.chartPanel().id(`cp_${vizID}`);\n this.visualization(this._vizChartPanel);\n this.state(new State());\n }\n\n id(): string;\n id(_: string): this;\n id(_?: string): string | this {\n const retVal = super.id.apply(this, arguments);\n if (arguments.length) {\n this._vizChartPanel.id(_);\n }\n return retVal;\n }\n\n chartType(): string {\n return this._vizChartPanel.chartType();\n }\n\n chartPanel(): VizChartPanel;\n chartPanel(_: VizChartPanel): this;\n chartPanel(_?: VizChartPanel): VizChartPanel | this {\n if (!arguments.length) return this._vizChartPanel.chartPanel();\n this._vizChartPanel.chartPanel(_);\n return this;\n }\n\n chart(): Widget {\n return this._vizChartPanel.chartPanel().widget();\n }\n\n mappings(): Mappings;\n mappings(_: Mappings): this;\n mappings(_?: Mappings): Mappings | this {\n if (!arguments.length) return this._vizChartPanel.mappings();\n this._vizChartPanel.mappings(_);\n return this;\n }\n\n pipeline(activities: Activity[]): this {\n this.hipiePipeline()\n .activities(activities)\n ;\n return this;\n }\n\n updatedBy(): string[] {\n const retVal = this.hipiePipeline().updatedBy();\n if (this.visualization().secondaryDataviewID_exists()) {\n retVal.push(this.visualization().secondaryDataviewID());\n }\n return retVal;\n }\n\n dataProps(): PropertyExt {\n return this.hipiePipeline();\n }\n\n vizProps(): Widget {\n return this.visualization().chartPanel();\n }\n\n stateProps(): PropertyExt {\n return this.state();\n }\n\n private _errors: IElementError[] = [];\n errors(): IElementError[] {\n return this._errors;\n }\n\n validate(): IElementError[] {\n if (!this._initialized) {\n return [];\n }\n this._errors = [];\n const pipeline = this.hipiePipeline();\n for (const activity of [...pipeline.activities(), this.mappings()]) {\n for (const error of activity.validate()) {\n this._errors.push({\n elementID: this.id(),\n ...error\n });\n }\n }\n return this._errors;\n }\n\n private _initialized = false;\n refresh(): Promise<void> {\n const filters = this.hipiePipeline().filters().validFilters();\n const desc: string[] = filters.map(f => f.createFilterDescription());\n this.visualization().chartPanel().description(desc.join(\", \"));\n return this.visualization().refresh().then(() => {\n this._initialized = true;\n const data = this.hipiePipeline().outData();\n if (this.visualization().chartType() === \"FieldForm\") {\n if (this.state().set([...data])) {\n this.selectionChanged();\n }\n } else {\n if (this.state().removeInvalid(data)) {\n this.selectionChanged();\n }\n }\n });\n }\n\n // Selection ---\n selection(): object[];\n selection(_: object[]): this;\n selection(_?: object[]): object[] | this {\n if (!arguments.length) return this.state().selection();\n this.state().selection(_);\n this.selectionChanged();\n return this;\n }\n\n // Events ---\n selectionChanged() {\n const promises: Array<Promise<void>> = [];\n for (const filteredViz of this._ec.filteredBy(this.id())) {\n promises.push(filteredViz.refresh());\n }\n Promise.all(promises).then(() => {\n this._ec.vizStateChanged(this);\n });\n }\n\n monitor(func: (id: string, newVal: any, oldVal: any, source: PropertyExt) => void): { remove: () => void; } {\n return this.hipiePipeline().monitor(func);\n }\n}\nElement.prototype._class += \" Viz\";\n\nexport interface Element {\n hipiePipeline(): HipiePipeline;\n hipiePipeline(_: HipiePipeline): this;\n visualization(): Visualization;\n visualization(_: Visualization): this;\n state(): State;\n state(_: State): this;\n}\n\nElement.prototype.publish(\"hipiePipeline\", null, \"widget\", \"Data View\");\nElement.prototype.publish(\"visualization\", null, \"widget\", \"Visualization\");\nElement.prototype.publish(\"state\", null, \"widget\", \"State\");\n\nElement.prototype._origVisualization = Element.prototype.visualization;\nElement.prototype.visualization = function (this: Element, _?) {\n const retVal = Element.prototype._origVisualization.apply(this, arguments);\n if (_ !== undefined) {\n this._visualization\n .on(\"click\", (_row: object | object[], col: string, sel: boolean, more?) => {\n if (more && more.selection) {\n this.selection(sel ? more.selection.map(r => r.__lparam || r) : []);\n } else {\n const row: any[] = isArray(_row) ? _row : [_row];\n this.selection(sel ? row.map(r => r.__lparam || r) : []);\n }\n })\n .on(\"vertex_click\", (_row: object | object[], col: string, sel: boolean) => {\n const row: any[] = isArray(_row) ? _row : [_row];\n this.selection(sel ? row.map(r => r.__lparam || r) : []);\n })\n ;\n }\n return retVal;\n};\n\nexport interface IPersist {\n ddl: DDL2.Schema;\n layout: any;\n}\n\nexport interface IElementError extends IActivityError {\n elementID: string;\n}\n\nexport class ElementContainer extends PropertyExt {\n\n private _nullElement;\n\n private _datasources: DatasourceRefType[] = [emptyDatabomb];\n private _elements: Element[] = [];\n\n constructor() {\n super();\n this.clear();\n this._nullElement = new Element(this);\n }\n\n clear(eid?: string) {\n this._datasources = eid === undefined ? [emptyDatabomb] : this._datasources;\n this._elements = eid === undefined ? [] : this._elements.filter(d => d.id() !== eid);\n }\n\n private _hookSend: IOptionsSend;\n hookSend(): IOptionsSend;\n hookSend(_: IOptionsSend): this;\n hookSend(_?: IOptionsSend): IOptionsSend | this {\n if (!arguments.length) return this._hookSend;\n this._hookSend = _;\n return this;\n }\n\n datasources(): DatasourceRefType[];\n datasources(_: DatasourceRefType[]): this;\n datasources(_?: DatasourceRefType[]): DatasourceRefType[] | this {\n if (!arguments.length) return this._datasources;\n this._datasources = _;\n return this;\n }\n\n datasource(id): DatasourceRefType {\n return this._datasources.filter(ds => ds.id() === id)[0];\n }\n\n appendDatasource(ds: DatasourceRefType): this {\n this._datasources.push(ds);\n return this;\n }\n\n removeDatasource(ds: DatasourceRefType): this {\n this._datasources = this._datasources.filter(row => row !== ds);\n return this;\n }\n\n elements(): Element[] {\n return [...this._elements];\n }\n\n element(w: string | PropertyExt | VizChartPanel): Element {\n let retVal: Element[];\n if (typeof w === \"string\") {\n retVal = this._elements.filter(viz => viz.id() === w);\n } else if (w instanceof VizChartPanel) {\n retVal = this._elements.filter(v => v.chartPanel() === w);\n } else {\n retVal = this._elements.filter(v => v.vizProps() === w);\n }\n if (retVal.length) {\n return retVal[0];\n }\n return this._nullElement;\n }\n\n elementExists(w: string | PropertyExt): boolean {\n return this.element(w) !== this._nullElement;\n }\n\n elementIDs() {\n return this._elements.map(viz => viz.id());\n }\n\n append(element: Element): this {\n this._elements.push(element);\n return this;\n }\n\n filteredBy(elemID: string): Element[] {\n return this._elements.filter(otherViz => {\n const filterIDs = otherViz.updatedBy();\n return filterIDs.indexOf(elemID) >= 0;\n });\n }\n\n views(): HipiePipeline[] {\n return this._elements.map(viz => viz.hipiePipeline());\n }\n\n view(id: string): HipiePipeline | undefined {\n return this.views().filter(view => view.id() === id)[0];\n }\n\n normalizePersist(seri: any): { [key: string]: { [key: string]: any } } {\n const ret = {};\n seri.__properties.content.map((n) => {\n const _is_MegaChart = !!n.__properties.widget.__properties.chart;\n const _cell = n;\n const _panel = n.__properties.widget;\n const _widget = _is_MegaChart ? n.__properties.widget.__properties.chart : n.__properties.widget.__properties.widget;\n const _id = n.__properties.widget.__id ? n.__properties.widget.__id : n.__properties.widget.__properties.widget.__id;\n ret[_id] = {\n id: _id,\n package: _widget.__class.split(\"_\")[0],\n object: _widget.__class.split(\"_\")[1],\n cell: _get_params(_cell, [\"chart\", \"widget\", \"fields\"]),\n panel: _get_params(_panel, [\"chart\", \"widget\", \"fields\"]),\n widget: _get_params(_widget, [\"fields\"])\n };\n });\n return ret;\n function _get_params(_o, exclude_list) {\n const ret = {};\n Object.keys(_o.__properties)\n .filter(n => exclude_list.indexOf(n) === -1)\n .forEach(n => ret[n] = _o.__properties[n]);\n return ret;\n }\n }\n\n validate(): IElementError[] {\n let retVal: IElementError[] = [];\n this._elements.forEach(elem => {\n retVal = retVal.concat(elem.validate());\n });\n return retVal;\n }\n\n refresh(): Promise<this> {\n return Promise.all(this.elements().map(element => element.refresh())).then(() => {\n return this;\n });\n }\n\n // Events ---\n vizStateChanged(viz: Element) {\n }\n}\nElementContainer.prototype._class += \" dashboard_ElementContainer\";\n\nexport interface ElementContainer {\n samples(): number;\n samples(_: number): this;\n sampleSize(): number;\n sampleSize(_: number): this;\n}\n\nElementContainer.prototype.publish(\"samples\", 10, \"number\", \"Number of samples\");\nElementContainer.prototype.publish(\"sampleSize\", 100, \"number\", \"Sample size\");","function responseText(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.text();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseText);\n}\n","import { IMonitorHandle, Widget } from \"@hpcc-js/common\";\nimport { compare } from \"@hpcc-js/util\";\nimport { ElementContainer } from \"./model/element.ts\";\nimport { IVizPopupPanelOwner, VizChartPanel, VizPopupPanel } from \"./model/vizChartPanel.ts\";\n\nexport class PopupManager extends Widget implements IVizPopupPanelOwner {\n protected _ec: ElementContainer;\n protected _popups: VizPopupPanel[] = [];\n protected _popupIdx: {\n [id: string]: {\n panel: VizPopupPanel,\n monitorHandle: IMonitorHandle\n }\n } = {};\n\n popupPanels(): VizPopupPanel[] {\n if (!this._popups) this._popups = [];\n if (!this._popupIdx) this._popupIdx = {};\n return this._popups;\n }\n\n popupChartPanels(): VizChartPanel[] {\n return this.popupPanels().map(p => p.widget() as VizChartPanel);\n }\n\n addPopup(cp: VizChartPanel) {\n const elem = this._ec.element(cp);\n const targetNode = this.element().node();\n const pp = new VizPopupPanel(this, elem)\n .target(targetNode)\n .widget(cp)\n .relativeTargetId(this.id())\n .size({\n width: cp.minWidth(),\n height: cp.minHeight()\n });\n this._popups.push(pp);\n this._popupIdx[cp.id()] = {\n panel: pp,\n monitorHandle: cp.monitor((id) => {\n switch (id) {\n case \"minWidth\":\n case \"minHeight\":\n pp\n .resize({ width: cp.minWidth(), height: cp.minHeight() })\n .render()\n ;\n break;\n }\n })\n };\n this._ec.filteredBy(elem.id()).forEach(otherElem => {\n otherElem.visualization().chartPanel().popup(pp);\n });\n }\n\n removePopup(cp: VizChartPanel) {\n const elem = this._ec.element(cp);\n this._ec.filteredBy(elem.id()).forEach(otherElem => {\n otherElem.visualization().chartPanel().popup(null);\n });\n this._popupIdx[cp.id()].panel.target(null);\n this._popupIdx[cp.id()].monitorHandle.remove();\n cp.target(null);\n delete this._popupIdx[cp.id()];\n this._popups = this._popups.filter(p => p.widget() !== cp);\n }\n\n syncPopups() {\n const prevPopups = this.popupChartPanels();\n const diffPopups = compare(prevPopups, this._ec.elements()\n .filter(e => e.visualization().visibility() === \"flyout\")\n .map((elem: any) => elem.visualization().chartPanel()))\n ;\n\n for (const w of diffPopups.exit) {\n this.removePopup(w);\n }\n\n for (const w of diffPopups.enter) {\n this.addPopup(w);\n }\n\n return this;\n }\n\n vizActivation() {\n }\n}\n","import { Widget } from \"@hpcc-js/common\";\nimport { DockPanel, IClosable, WidgetAdapter } from \"@hpcc-js/phosphor\";\nimport { compare } from \"@hpcc-js/util\";\nimport { select as d3Select } from \"d3-selection\";\nimport { Element, ElementContainer } from \"./model/element.ts\";\nimport { IVizPopupPanelOwner } from \"./model/vizChartPanel.ts\";\nimport { PopupManager } from \"./PopupManager.ts\";\n\nexport class DashboardDockPanel extends DockPanel implements IClosable, IVizPopupPanelOwner {\n\n constructor(private _ec: ElementContainer) {\n super();\n\n }\n\n tabTitle(element: Element): string {\n if (this.hideSingleTabs()) {\n return element.visualization().title ? element.visualization().title() : element.visualization().id();\n }\n return element.id();\n }\n\n titleClassed(wa: WidgetAdapter, classID: string, include: boolean) {\n let classes = wa.title.className.split(\" \");\n if (include && classes.indexOf(classID) < 0) {\n classes.push(classID);\n } else if (!include && classes.indexOf(classID) > 0) {\n classes = classes.filter(c => c !== classID);\n }\n wa.title.className = classes.join(\" \");\n }\n\n updateTitle(w: Widget) {\n const wa: WidgetAdapter = this.getWidgetAdapter(w);\n const element: Element = this._ec.element(w);\n const errors = element.validate();\n wa.title.label = this.tabTitle(element);\n this.titleClassed(wa, \"error\", errors.length > 0);\n wa.title.caption = errors.map(err => `${err.source}: ${err.msg}`).join(\"\\n\");\n }\n\n activate(element: Element) {\n const wa = this.getWidgetAdapter(element.visualization().chartPanel());\n if (wa) {\n wa.activate();\n }\n }\n\n syncMinSize(w: any): boolean {\n if (w.minWidth_exists() || w.minHeight_exists()) {\n const wa = this.getWidgetAdapter(w);\n d3Select(wa.node)\n .style(\"min-width\", `${w.minWidth()}px`)\n .style(\"min-height\", `${w.minHeight()}px`)\n ;\n return true;\n }\n return false;\n }\n\n syncWidgets() {\n const prevWidgets = this.widgets();\n const diffWidgets = compare(prevWidgets, this._ec.elements().filter(e => e.visualization().visibility() === \"normal\").map(viz => viz.visualization().chartPanel()));\n\n let refit = false;\n for (const w of diffWidgets.exit) {\n this.removeWidget(w);\n }\n\n for (const w of diffWidgets.enter) {\n const element: Element = this._ec.element(w);\n this.addWidget(w, this.tabTitle(element), \"split-bottom\", undefined, this.hideSingleTabs() ? undefined : this);\n refit = this.syncMinSize(w) || refit; // ensure syncMinSize is called\n }\n\n for (const w of diffWidgets.update) {\n this.updateTitle(w);\n refit = this.syncMinSize(w) || refit; // ensure syncMinSize is called\n }\n\n if (refit) {\n this.refit();\n }\n\n return this;\n }\n\n // Events ---\n childActivation(w: Widget, wa: WidgetAdapter) {\n super.childActivation(w, wa);\n this.vizActivation(this._ec.element(w));\n for (const wa2 of this.widgetAdapters()) {\n if (wa2 === wa) {\n wa2.addClass(\"active\");\n this.titleClassed(wa2, \"active\", true);\n wa2.title.iconClass = \"active\";\n } else {\n wa2.removeClass(\"active\");\n this.titleClassed(wa2, \"active\", false);\n wa2.title.iconClass = \"\";\n }\n }\n }\n\n vizActivation(viz: Element) {\n }\n\n // IClosable ---\n canClose(w: Widget, wa: WidgetAdapter): boolean {\n const id = this._ec.element(w).id();\n const retVal = window.confirm(`Remove Widget \"${id}\"?`);\n if (retVal) {\n this._ec.clear(id);\n this.syncWidgets();\n this.vizActivation(undefined);\n }\n return retVal;\n }\n\n syncPopups() { }\n}\nDashboardDockPanel.prototype._class += \" marshaller_DashboardDockPanel\";\nDashboardDockPanel.prototype.mixin(PopupManager);\n","import { Widget } from \"@hpcc-js/common\";\nimport { Cell, Grid } from \"@hpcc-js/layout\";\nimport { IClosable, WidgetAdapter } from \"@hpcc-js/phosphor\";\nimport { compare } from \"@hpcc-js/util\";\nimport { IDockPanel } from \"./dashboard.ts\";\nimport { Element, ElementContainer } from \"./model/element.ts\";\nimport { IVizPopupPanelOwner } from \"./model/vizChartPanel.ts\";\nimport { PopupManager } from \"./PopupManager.ts\";\n\nexport class DashboardGrid extends Grid implements IClosable, IVizPopupPanelOwner, IDockPanel {\n private _layoutCache = [];\n constructor(private _ec: ElementContainer) {\n super();\n\n this.designMode(false);\n this.surfacePadding(\"0\");\n this.surfaceBorderWidth(0);\n }\n updateGrid(resize, transitionDuration: number = 0, _noRender: boolean = false) {\n super.updateGrid(resize, transitionDuration, _noRender);\n this._layoutCache = this.content().map(cellWidget => {\n return {\n id: cellWidget.widget().id(),\n position: [\n cellWidget.gridCol(),\n cellWidget.gridRow(),\n cellWidget.gridColSpan(),\n cellWidget.gridRowSpan()\n ]\n };\n });\n }\n layoutObj(_: object | null): this {\n if (_) {\n if ((_ as any).main) {\n const convertedLayout = ddl2_layout(_, 10, 10);\n this._layoutCache = convertedLayout;\n } else if (_ instanceof Array) {\n this._layoutCache = _;\n }\n }\n return this;\n\n function ddl2_layout(layoutObject, rows, cols) {\n const ret = [];\n dive(layoutObject.main, 0, 0, rows, cols);\n return ret;\n function dive(o, x, y, w, h) {\n if (o.children) {\n if (o.type === \"split-area\") {\n if (o.orientation === \"horizontal\") {\n o.children.forEach((child, i) => {\n const _w = o.sizes[i] * w;\n const _h = h;\n const _x = i === 0 ? x : x + o.sizes[0] * w;\n const _y = y;\n dive(o.children[i], _x, _y, _w, _h);\n });\n } else if (o.orientation === \"vertical\") {\n o.children.forEach((child, i) => {\n const _w = w;\n const _h = o.sizes[i] * h;\n const _x = x;\n const _y = i === 0 ? y : y + o.sizes[0] * h;\n dive(o.children[i], _x, _y, _w, _h);\n });\n } else {\n console.error(\"wtf\");\n }\n } else if (o.type === \"tab-area\") {\n o.children.forEach((child, i) => {\n const _w = w;\n const _h = o.sizes[i] * h;\n const _x = x;\n const _y = i === 0 ? y : y + o.sizes[0] * h;\n dive(o.children[i], _x, _y, _w, _h);\n });\n }\n } else {\n ret.push([x, y, w, h].map(Math.round));\n }\n }\n }\n }\n layout() {\n return this._layoutCache;\n }\n widgets() {\n return this.content().map(c => c.widget());\n }\n hideSingleTabs() {\n return true;\n }\n getWidgetAdapter() {\n }\n\n tabTitle(element: Element): string {\n if (this.hideSingleTabs()) {\n return element.visualization().title ? element.visualization().title() : element.visualization().id();\n }\n return element.id();\n }\n\n updateTitle(w: Widget) {\n const cell: Cell = this.getWidgetCell(w.id());\n const element: Element = this._ec.element(w);\n const tabTitle = this.tabTitle(element);\n (cell.widget() as any)\n .title(tabTitle)\n ;\n }\n\n activate(element: Element) {\n }\n\n removeWidget(w: Widget) {\n const cell = this.getWidgetCell(w.id());\n this.clearContent(cell);\n }\n\n syncMinSize(w: any): boolean {\n if (w.minWidth_exists() || w.minHeight_exists()) {\n const cell: Cell = this.getWidgetCell(w.id());\n cell.element()\n .style(\"min-width\", `${w.minWidth()}px`)\n .style(\"min-height\", `${w.minHeight()}px`)\n ;\n return true;\n }\n return false;\n }\n\n syncWidgets() {\n const prevWidgets = this.widgets();\n const diffWidgets = compare(prevWidgets, this._ec.elements().filter(e => e.visualization().visibility() === \"normal\").map(viz => viz.visualization().chartPanel()));\n\n for (const w of diffWidgets.exit) {\n this.removeWidget(w);\n }\n let maxX = 0;\n let maxY = 0;\n const no_layout_added = [];\n for (const widget of diffWidgets.enter) {\n const element: Element = this._ec.element(widget);\n const i = this.content().length;\n if (this._layoutCache && this._layoutCache[i]) {\n const layout = (this._layoutCache as any).find(n => n.id === widget.id());\n if (layout) {\n const [x, y, w, h] = layout.position;\n this.setContent(y, x, element.visualization().chartPanel(), \"\", h, w);\n if (x + w > maxX) maxX = x + w;\n if (y + h > maxY) maxY = y + h;\n } else {\n no_layout_added.push(element.visualization().chartPanel());\n }\n } else {\n no_layout_added.push(element.visualization().chartPanel());\n }\n }\n let freeRow = this.content().reduce((prev, curr) => Math.max(prev, curr.gridRow() + curr.gridRowSpan()), 0);\n no_layout_added.forEach(cp => {\n this.setContent(freeRow, 0, cp, \"\", 3, 3);\n freeRow += 3;\n });\n for (const w of diffWidgets.update) {\n this.updateTitle(w);\n }\n return this;\n }\n\n // Events ---\n childActivation(w: Widget, wa?: WidgetAdapter) {\n this.vizActivation(this._ec.element(w));\n }\n\n postSelectionChange() {\n super.postSelectionChange();\n const selected = this._selectionBag.get();\n if (selected.length > 0) {\n this.childActivation(selected[0].widget.widget());\n }\n }\n\n vizActivation(viz: Element) {\n }\n\n // IClosable ---\n canClose(w: Widget, wa: WidgetAdapter): boolean {\n const id = this._ec.element(w).id();\n const retVal = window.confirm(`Remove Widget \"${id}\"?`);\n if (retVal) {\n this._ec.clear(id);\n this.syncWidgets();\n this.vizActivation(undefined);\n }\n return retVal;\n }\n\n syncPopups() { }\n}\nDashboardGrid.prototype._class += \" marshaller_DashboardGrid\";\nDashboardGrid.prototype.mixin(PopupManager);\n","import { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { scopedLogger } from \"@hpcc-js/util\";\nimport { BUILD_VERSION, PKG_NAME, PKG_VERSION } from \"../__package__.ts\";\nimport { ActivityPipeline, ReferencedFields } from \"./activities/activity.ts\";\nimport { Databomb } from \"./activities/databomb.ts\";\nimport { DatasourceRef, DatasourceRefType, DatasourceType } from \"./activities/datasource.ts\";\nimport { DSPicker } from \"./activities/dspicker.ts\";\nimport { Filters } from \"./activities/filter.ts\";\nimport { Form } from \"./activities/form.ts\";\nimport { GroupBy } from \"./activities/groupby.ts\";\nimport { Limit } from \"./activities/limit.ts\";\nimport { LogicalFile } from \"./activities/logicalfile.ts\";\nimport { Mappings, Project } from \"./activities/project.ts\";\nimport { Param, RestResult, RestResultRef, RestService } from \"./activities/rest.ts\";\nimport { HipieResultRef, RoxieResult, RoxieResultRef, RoxieService } from \"./activities/roxie.ts\";\nimport { Sort } from \"./activities/sort.ts\";\nimport { WU, WUResult, WUResultRef } from \"./activities/wuresult.ts\";\nimport { Dashboard } from \"./dashboard.ts\";\nimport { Element, ElementContainer } from \"./model/element.ts\";\nimport { Visualization } from \"./model/visualization.ts\";\n\nconst logger = scopedLogger(\"marshaller/ddl2/ddl\");\n\ntype DatasourceRefTypeMap = { [key: string]: { refType: DatasourceRefType, ref: DatasourceRef } };\ntype ServerRefTypeMap = { [key: string]: { ds: DatasourceType, result: DatasourceRefTypeMap } };\n\nclass DDLDatasourceAdapter {\n private _dsDedup: ServerRefTypeMap;\n\n constructor() {\n }\n\n clear() {\n this._dsDedup = {};\n }\n\n id(dsT: DatasourceType): string {\n if (dsT instanceof WU) {\n return `${dsT.url()}/${dsT.wuid()}`;\n } else if (dsT instanceof RoxieService) {\n return `${dsT.url()}/${dsT.querySet()}/${dsT.queryID()}`;\n } else if (dsT instanceof RestService) {\n return `${dsT.url()}/${dsT.action()}`;\n }\n return dsT.id();\n }\n\n _resolveID(dsT: DatasourceType): string {\n return this._dsDedup[this.id(dsT)].ds.id();\n }\n\n resolveID(dsRef: DatasourceRef): string | undefined {\n if (dsRef instanceof WUResultRef) {\n return this._resolveID(dsRef.datasource().wu());\n } else if (dsRef instanceof RoxieResultRef) {\n return this._resolveID(dsRef.datasource().service());\n } else if (dsRef instanceof HipieResultRef) {\n return this._resolveID(dsRef.datasource().service());\n } else if (dsRef instanceof RestResultRef) {\n return this._resolveID(dsRef.datasource().service());\n }\n }\n\n append(pDS: DSPicker | DatasourceRefType) {\n const refType: DatasourceRefType = pDS instanceof DSPicker ? pDS.datasource() : pDS;\n const ref: DatasourceRef = pDS instanceof DSPicker ? pDS.datasourceRef() : undefined;\n const dsTID = refType.id();\n const ds: DatasourceType = refType instanceof WUResult ? refType.wu() : refType instanceof RoxieResult ? refType.service() : refType instanceof RestResult ? refType.service() : refType;\n const dsID = this.id(ds);\n if (!this._dsDedup[dsID]) {\n this._dsDedup[dsID] = {\n ds,\n result: {}\n };\n }\n if (!this._dsDedup[dsID].result[dsTID]) {\n this._dsDedup[dsID].result[dsTID] = {\n refType,\n ref\n };\n }\n }\n\n getAll(): DDL2.DatasourceType[] {\n const retVal: DDL2.DatasourceType[] = [];\n for (const key in this._dsDedup) {\n const ddl = this._dsDedup[key].ds.toDDL();\n\n // Inputs ---\n if (ddl.type === \"roxie\" || ddl.type === \"hipie\" || ddl.type === \"rest\") {\n const inputs: { [fieldID: string]: DDL2.IField } = {};\n for (const key2 in this._dsDedup[key].result) {\n const ddl2 = this._dsDedup[key].result[key2].refType.toDDL();\n const refs: ReferencedFields = {\n inputs: {},\n outputs: {}\n };\n this._dsDedup[key].result[key2].ref.referencedFields(refs);\n for (const inElementID in refs.inputs) {\n refs.inputs[inElementID].forEach(fieldID => {\n inputs[fieldID] = (ddl2 as any).inputs.filter(row => row.id === fieldID)[0];\n });\n }\n }\n ddl.inputs = [];\n for (const key in inputs) {\n ddl.inputs.push(inputs[key]);\n }\n }\n\n // Outputs ---\n if (ddl.type === \"wuresult\" || ddl.type === \"roxie\" || ddl.type === \"hipie\" || ddl.type === \"rest\") {\n const outputs: { [fieldID: string]: DDL2.IOutput } = {};\n for (const key2 in this._dsDedup[key].result) {\n const ddl2 = this._dsDedup[key].result[key2].refType.toDDL();\n if (ddl2.type === \"wuresult\" || ddl2.type === \"roxie\" || ddl2.type === \"hipie\" || ddl2.type === \"rest\") {\n for (const outputID in ddl2.outputs) {\n outputs[outputID] = ddl2.outputs[outputID];\n }\n }\n }\n ddl.outputs = {};\n for (const key in outputs) {\n ddl.outputs[key] = outputs[key];\n }\n }\n retVal.push(ddl);\n }\n return retVal;\n }\n}\n\nexport class DDLAdapter {\n private _dashboard: Dashboard;\n private _ec: ElementContainer;\n private _dsWriteDedup: DDLDatasourceAdapter = new DDLDatasourceAdapter();\n private _dsReadDedup: { [id: string]: WU | RoxieService | RestService } = {};\n\n constructor(dashboard: Dashboard) {\n this._dashboard = dashboard;\n this._ec = this._dashboard.elementContainer();\n }\n\n writeDatasources(): DDL2.DatasourceType[] {\n for (const viz of this._ec.elements()) {\n this._dsWriteDedup.append(viz.hipiePipeline().datasource());\n }\n return this._dsWriteDedup.getAll();\n }\n\n writeFilters(filters: Filters): DDL2.IFilter {\n if (!filters.exists()) return undefined;\n return filters.toDDL();\n }\n\n readFilters(ddlFilter: DDL2.IFilter, ec: ElementContainer): Filters {\n return Filters.fromDDL(ec, ddlFilter);\n }\n\n writeProject(project: Project): DDL2.IProject {\n if (!project.exists()) return undefined;\n return project.toDDL();\n }\n\n readProject(ddlProject: DDL2.IProject): Project {\n return Project.fromDDL(ddlProject);\n }\n\n writeMappings(mappings: Mappings): DDL2.IMappings {\n if (!mappings.exists()) return { type: \"mappings\", transformations: [] };\n return mappings.toDDL();\n }\n\n readMappings(ddlProject: DDL2.IMappings): Mappings {\n return Mappings.fromDDL(ddlProject);\n }\n\n writeGroupBy(gb: GroupBy): DDL2.IGroupBy {\n if (!gb.exists()) return undefined;\n return gb.toDDL();\n }\n\n readGroupBy(ddlGB: DDL2.IGroupBy): GroupBy {\n return GroupBy.fromDDL(ddlGB);\n }\n\n writeSort(sort: Sort): DDL2.ISort {\n if (!sort.exists()) return undefined;\n return sort.toDDL();\n }\n\n readSort(ddlSort: DDL2.ISort): Sort {\n return Sort.fromDDL(ddlSort);\n }\n\n writeLimit(limit: Limit): DDL2.ILimit {\n if (!limit.exists()) return undefined;\n return limit.toDDL();\n }\n\n readLimit(ddlLimit: DDL2.ILimit): Limit {\n return Limit.fromDDL(ddlLimit);\n }\n\n readDatasourceRef(ddlDSRef: DDL2.IDatasourceRef, dsPicker: DSPicker, elementContainer: ElementContainer): this {\n if (DDL2.isWUResultRef(ddlDSRef)) {\n const wu = this._dsReadDedup[ddlDSRef.id] as WU;\n dsPicker.datasourceID(wu.output(ddlDSRef.output).id());\n } else if (DDL2.isRoxieServiceRef(ddlDSRef)) {\n dsPicker.datasourceID(`${ddlDSRef.id}_${ddlDSRef.output}`);\n const dsRef = dsPicker.datasourceRef() as RoxieResultRef | RestResultRef;\n dsRef\n .request(ddlDSRef.request.map(rf => {\n return Param.fromDDL(this._ec, rf);\n }))\n ;\n } else {\n dsPicker.datasourceID(ddlDSRef.id);\n }\n return this;\n }\n\n writeActivities(view: ActivityPipeline): DDL2.ActivityType[] {\n return view.activities().map(activity => {\n if (activity instanceof Filters) {\n return this.writeFilters(activity);\n } else if (activity instanceof Project) {\n return this.writeProject(activity);\n } else if (activity instanceof GroupBy) {\n return this.writeGroupBy(activity);\n } else if (activity instanceof Sort) {\n return this.writeSort(activity);\n } else if (activity instanceof Limit) {\n return this.writeLimit(activity);\n } else if (activity instanceof Mappings) {\n return this.writeMappings(activity);\n } else if (activity instanceof DSPicker) {\n // Fall through ---\n } else {\n logger.warning(`Unknown activity type: ${activity.classID()}`);\n }\n }).filter(activity => !!activity);\n }\n\n writeVisualization(visualization: Visualization): DDL2.IVisualization {\n return {\n id: visualization.chartPanel().id(),\n title: visualization.title(),\n description: visualization.description(),\n visibility: visualization.visibility(),\n chartType: visualization.chartType(),\n __class: visualization.chartPanel().widget().classID(),\n mappings: this.writeMappings(visualization.mappings()),\n properties: visualization.properties()\n };\n }\n\n readVisualization(ddlViz: DDL2.IVisualization, visualization: Visualization): this {\n const mappings = this.readMappings(ddlViz.mappings);\n visualization.chartPanel().id(ddlViz.id);\n visualization\n .title(ddlViz.title)\n .description(ddlViz.description)\n .visibility(ddlViz.visibility)\n .chartType(ddlViz.chartType as any)\n .properties(ddlViz.properties)\n .mappings(mappings)\n ;\n return this;\n }\n\n writeViewDatasource(dsRef: DatasourceRef) {\n const retVal = dsRef.toDDL();\n retVal.id = this._dsWriteDedup.resolveID(dsRef) || retVal.id;\n return retVal;\n }\n\n writeDDLViews(): DDL2.IView[] {\n // Gather referenced fields ---\n const refFields: ReferencedFields = { inputs: {}, outputs: {} };\n for (const element of this._ec.elements()) {\n element.visualization().mappings().referencedFields(refFields);\n }\n\n return this._ec.elements().map(element => {\n const view = element.hipiePipeline();\n const dsPicker = view.datasource();\n if (dsPicker instanceof DSPicker) {\n const dsRef = dsPicker.datasourceRef();\n const retVal = {\n id: element.id(),\n datasource: this.writeViewDatasource(dsRef),\n activities: this.writeActivities(view),\n visualization: this.writeVisualization(element.visualization())\n };\n return retVal;\n }\n throw new Error(\"Missing DSPicker?\");\n });\n }\n\n writeProperties(): DDL2.IProperties {\n return {\n name: PKG_NAME,\n version: PKG_VERSION,\n buildVersion: BUILD_VERSION,\n layout: this._dashboard.layout() as any\n };\n }\n\n readDDLViews(ddlViews: DDL2.IView[]) {\n for (const ddlView of ddlViews) {\n const element = new Element(this._ec).id(ddlView.id);\n this._ec.append(element);\n const hipiePipeline = element.hipiePipeline();\n this.readDatasourceRef(ddlView.datasource, hipiePipeline.datasource() as DSPicker, this._ec);\n for (const activity of ddlView.activities) {\n if (DDL2.isProjectActivity(activity)) {\n const project = this.readProject(activity);\n hipiePipeline.project(project);\n }\n if (DDL2.isFilterActivity(activity)) {\n const filters = this.readFilters(activity, this._ec);\n hipiePipeline.filters(filters);\n }\n if (DDL2.isGroupByActivity(activity)) {\n const groupBy = this.readGroupBy(activity);\n hipiePipeline.groupBy(groupBy);\n }\n if (DDL2.isSortActivity(activity)) {\n const sort = this.readSort(activity);\n hipiePipeline.sort(sort);\n }\n if (DDL2.isLimitActivity(activity)) {\n const limit = this.readLimit(activity);\n hipiePipeline.limit(limit);\n }\n }\n this.readVisualization(ddlView.visualization, element.visualization());\n }\n }\n\n readProperties(properties: DDL2.IProperties) {\n if (properties && properties.layout) {\n this._dashboard.layoutObj(properties.layout as object);\n }\n }\n\n write(): DDL2.Schema {\n this._dsWriteDedup.clear();\n const retVal: DDL2.Schema = {\n version: \"2.2.1\",\n createdBy: {\n name: PKG_NAME,\n version: PKG_VERSION\n },\n datasources: this.writeDatasources(),\n dataviews: this.writeDDLViews(),\n properties: this.writeProperties(),\n hipieProperties: this._dashboard.hipieProps()\n };\n return retVal;\n }\n\n read(ddl: DDL2.Schema) {\n this._dsWriteDedup.clear();\n for (const ddlDS of ddl.datasources) {\n switch (ddlDS.type) {\n case \"databomb\":\n this._ec.appendDatasource(Databomb.fromDDL(ddlDS));\n break;\n case \"form\":\n this._ec.appendDatasource(Form.fromDDL(ddlDS));\n break;\n case \"logicalfile\":\n this._ec.appendDatasource(LogicalFile.fromDDL(this._ec, ddlDS));\n break;\n case \"wuresult\":\n const wu = WU.fromDDL(this._ec, ddlDS);\n this._dsReadDedup[wu.id()] = wu;\n for (const resultName in ddlDS.outputs) {\n this._ec.appendDatasource(wu.output(resultName));\n }\n break;\n case \"roxie\":\n case \"hipie\":\n const rs = RoxieService.fromDDL(this._ec, ddlDS);\n this._dsReadDedup[rs.id()] = rs;\n for (const resultName in ddlDS.outputs) {\n this._ec.appendDatasource(RoxieResult.fromDDL(this._ec, rs, resultName));\n }\n break;\n case \"rest\":\n const rs2 = RestService.fromDDL(this._ec, ddlDS);\n this._dsReadDedup[rs2.id()] = rs2;\n for (const resultName in ddlDS.outputs) {\n this._ec.appendDatasource(RestResult.fromDDL(this._ec, rs2, resultName));\n }\n break;\n default:\n logger.warning(`Unknown ddl datasource type: ${(ddlDS as any).type} `);\n }\n }\n this.readDDLViews(ddl.dataviews);\n this.readProperties(ddl.properties);\n this._dashboard.hipieProps(ddl.hipieProperties);\n }\n}\n","import { PropertyExt } from \"@hpcc-js/common\";\nimport { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { classID2Meta, ClassMeta, isArray } from \"@hpcc-js/util\";\nimport { Activity, stringify } from \"./activities/activity.ts\";\nimport { Dashboard } from \"./dashboard.ts\";\nimport { DDLAdapter } from \"./ddl.ts\";\nimport { ElementContainer } from \"./model/element.ts\";\n\ntype WidgetImport = { [moduleID: string]: { [classID: string]: boolean } };\n\nclass Imports {\n _moduleMap: WidgetImport = {};\n\n append(widgetMeta: ClassMeta) {\n if (!this._moduleMap[widgetMeta.module]) {\n this._moduleMap[widgetMeta.module] = {};\n }\n this._moduleMap[widgetMeta.module][widgetMeta.class] = true;\n }\n\n write(): string {\n const importJS: string[] = [];\n for (const moduleID in this._moduleMap) {\n const classIDs: string[] = [];\n for (const classID in this._moduleMap[moduleID]) {\n classIDs.push(classID);\n }\n classIDs.sort();\n importJS.push(`import { ${classIDs.join(\", \")} } from \"${moduleID}\";`);\n }\n return importJS.join(\"\\n\");\n }\n}\n\nexport function createProps(pe: PropertyExt): { [key: string]: any } {\n const retVal: { [key: string]: any } = {};\n for (const meta of pe.publishedProperties()) {\n if (pe[meta.id + \"_modified\"]() && meta.id !== \"fields\") {\n const val = pe[meta.id]();\n switch (meta.type) {\n case \"propertyArray\":\n const serialization = val.map(createProps);\n if (serialization) {\n retVal[meta.id] = serialization;\n }\n break;\n default:\n retVal[meta.id] = val;\n }\n }\n }\n return retVal;\n}\n\nexport class JavaScriptAdapter {\n private _dashboard: Dashboard;\n private _ec: ElementContainer;\n private _ddlAdapter: DDLAdapter;\n private _ddlSchema: DDL2.Schema;\n\n constructor(dashboard: Dashboard) {\n this._dashboard = dashboard;\n this._ec = this._dashboard.elementContainer();\n this._ddlAdapter = new DDLAdapter(this._dashboard);\n this._ddlSchema = this._ddlAdapter.write();\n }\n\n createProps(prefix: string, pe: PropertyExt, postfix: string = \"\"): string[] {\n let retVal: string[] = [];\n for (const meta of pe.publishedProperties()) {\n if ((pe as any)[meta.id + \"_exists\"]()) {\n switch (meta.type) {\n case \"string\":\n case \"set\":\n retVal.push(`${prefix}.${meta.id}(\"${(pe as any)[meta.id]()}\")${postfix};`);\n break;\n case \"number\":\n case \"boolean\":\n retVal.push(`${prefix}.${meta.id}(${(pe as any)[meta.id]()})${postfix};`);\n break;\n case \"widget\":\n retVal = retVal.concat(this.createProps(`${prefix}.${meta.id}()`, (pe as any)[meta.id]()));\n break;\n case \"propertyArray\":\n if (meta.ext)\n retVal.push(`${prefix}.${meta.id}([${(pe as any)[meta.id]()}])${postfix};`);\n break;\n default:\n break;\n }\n }\n }\n return retVal;\n }\n\n writeMeta(dsDetails: Activity) {\n return \"\";\n }\n\n private safeID(id: string): string {\n if (!id) return id;\n return id.replace(/ /g, \"_\").replace(/\\./g, \"_\");\n }\n\n private datasourceRefID(view: DDL2.IView): string {\n const datasourceRef = view.datasource;\n if (DDL2.isRoxieServiceRef(datasourceRef)) {\n return `${this.safeID(datasourceRef.id)}_${this.safeID(datasourceRef.output)}_${this.safeID(view.id)}`;\n } else if (DDL2.isWUResultRef(datasourceRef)) {\n return `${this.safeID(datasourceRef.id)}_${this.safeID(datasourceRef.output)}`;\n }\n return `${this.safeID(datasourceRef.id)}`;\n }\n\n _dedup: { [key: string]: boolean } = {};\n private writeDatasource(view: DDL2.IView): string[] {\n const datasourceRef = view.datasource;\n const retVal: string[] = [];\n const datasource = this._ddlSchema.datasources.filter(ds => ds.id === datasourceRef.id)[0];\n const outputID = (datasourceRef as any).output;\n const id = this.datasourceRefID(view);\n if (!this._dedup[id]) {\n this._dedup[id] = true;\n switch (datasource.type) {\n case \"wuresult\":\n const wuID = this.safeID(view.datasource.id);\n if (!this._dedup[wuID]) {\n this._dedup[wuID] = true;\n retVal.push(` export const ${wuID} = new marshaller.WU()\n .url(\"${datasource.url}\")\n .wuid(\"${datasource.wuid}\")\n ;`);\n }\n retVal.push(` export const ${id} = new marshaller.WUResult()\n .wu(${wuID})\n .resultName(\"${outputID}\")\n .responseFields(${stringify(datasource.outputs[outputID].fields)})\n ;`);\n break;\n case \"logicalfile\":\n retVal.push(` export const ${id} = new marshaller.LogicalFile()\n .url(\"${datasource.url}\")\n .logicalFile(\"${datasource.logicalFile}\")\n .responseFields(${stringify(datasource.fields)})\n ;`);\n break;\n case \"hipie\":\n case \"roxie\":\n const serviceID = this.safeID(view.datasource.id);\n if (!this._dedup[serviceID]) {\n this._dedup[serviceID] = true;\n retVal.push(` export const ${serviceID} = new marshaller.RoxieService(ec)\n .url(\"${datasource.url}\")\n .querySet(\"${datasource.querySet}\")\n .queryID(\"${datasource.queryID}\")\n .requestFields(${stringify(datasource.inputs)})\n ;`);\n }\n const resultID = serviceID + \"_\" + this.safeID(outputID);\n if (!this._dedup[resultID]) {\n this._dedup[resultID] = true;\n retVal.push(` export const ${resultID} = new marshaller.RoxieResult(ec)\n .service(${serviceID})\n .resultName(\"${outputID}\")\n .responseFields(${stringify(datasource.outputs[outputID].fields)})\n ;`);\n }\n retVal.push(` export const ${id} = new marshaller.HipieResultRef(ec)\n .datasource(${resultID})\n .requestFieldRefs(${stringify((datasourceRef as DDL2.IRoxieServiceRef).request)})\n ;`);\n break;\n case \"databomb\":\n {\n retVal.push(` export const ${id} = new marshaller.Databomb()\n .format(\"${datasource.format}\")\n .payload(${JSON.stringify(datasource.payload)})\n ;`);\n }\n break;\n case \"form\":\n {\n const fromFields: string[] = [];\n for (const field of datasource.fields) {\n fromFields.push(`new marshaller.FormField().fieldID(\"${field.id}\").default(\"${field.default || \"\"}\")`);\n }\n retVal.push(` export const ${id} = new marshaller.Form()\n .formFields([\n ${fromFields.join(\",\\n \")}\n ])\n ;`);\n }\n break;\n }\n }\n return retVal;\n }\n\n private writeActivity(activity: DDL2.ActivityType): string {\n switch (activity.type) {\n case \"filter\":\n return `new marshaller.Filters(ec).conditions(${stringify(activity.conditions)})`;\n case \"project\":\n return `new marshaller.Project().transformations(${stringify(activity.transformations)})`;\n case \"groupby\":\n return `new marshaller.GroupBy().fieldIDs(${JSON.stringify(activity.groupByIDs)}).aggregates(${stringify(activity.aggregates)})`;\n case \"sort\":\n return `new marshaller.Sort().conditions(${stringify(activity.conditions)})`;\n case \"limit\":\n return `new marshaller.Limit().rows(${activity.limit})`;\n case \"mappings\":\n return `new marshaller.Mappings().transformations(${stringify(activity.transformations)})`;\n }\n }\n\n writeWidgetProps(pe: PropertyExt): string[] {\n const retVal: string[] = [];\n for (const meta of pe.publishedProperties()) {\n if ((pe as any)[meta.id + \"_modified\"]() && meta.id !== \"fields\") {\n retVal.push(`.${meta.id}(${JSON.stringify((pe as any)[meta.id]())})`);\n }\n }\n return retVal;\n }\n\n private joinWithPrefix(props: DDL2.IWidgetProperties, imports: Imports, joinStr: string, postFix: string): string {\n let retVal: string = \"\";\n let meta: ClassMeta;\n if (props.__class) {\n meta = classID2Meta(props.__class);\n imports.append(meta);\n retVal += `new ${meta.class}()`;\n }\n for (const prop in props) {\n if (prop === \"__class\") {\n } else if (isArray(props[prop])) {\n const arr = `${(props[prop] as any[]).map(item => this.joinWithPrefix(item, imports, joinStr + \" \", \"\")).join(`,${joinStr} `)}`;\n if (arr) {\n retVal += `${joinStr} .${prop}([${joinStr} ${arr}${joinStr} ])${postFix}`;\n }\n } else {\n retVal += `${joinStr} .${prop}(${JSON.stringify(props[prop])})${postFix}`;\n }\n }\n return retVal;\n }\n\n private writeWidget(dataview: DDL2.IView, imports: Imports): string {\n return ` export const ${dataview.visualization.id} = new marshaller.VizChartPanel()\n .id(\"${dataview.visualization.id}\")\n .title(\"${dataview.visualization.title}\")\n .widget(${this.joinWithPrefix(dataview.visualization.properties[\"widget\"] as any, imports, \"\\n \", \"\")})\n ;`;\n }\n\n private writeElement(dataview: DDL2.IView) {\n const activities: string[] = [`data.${this.datasourceRefID(dataview)}`];\n for (const activity of dataview.activities) {\n activities.push(this.writeActivity(activity));\n }\n const updates: string[] = [];\n for (const filteredViz of this._ec.filteredBy(dataview.id)) {\n updates.push(`${filteredViz.id()}.refresh();`);\n }\n return `\nconst ${dataview.id} = new marshaller.Element(ec)\n .id(\"${dataview.id}\")\n .pipeline([\n ${activities.join(\",\\n \")}\n ])\n .mappings(new marshaller.Mappings().transformations(${stringify(dataview.visualization.mappings.transformations)}))\n .chartPanel(viz.${dataview.visualization.id})\n .on(\"selectionChanged\", () => {\n ${updates.join(\"\\n \")}\n }, true)\n ;\n${dataview.id}.visualization()\n .visibility(\"${dataview.visualization.visibility}\")\n .secondaryDataviewID(\"${dataview.visualization.secondaryDataviewID || \"\"}\")\n ;\nec.append(${dataview.id});\n`;\n }\n\n private writeDatasources(): string[] {\n let retVal: string[] = [];\n for (const dataview of this._ddlSchema.dataviews) {\n retVal = retVal.concat(this.writeDatasource(dataview));\n }\n return retVal;\n }\n\n private writeWidgets(): { widgetImports: string, widgetDefs: string } {\n const jsDef: string[] = [];\n const imports = new Imports();\n for (const dataview of this._ddlSchema.dataviews) {\n jsDef.push(this.writeWidget(dataview, imports));\n }\n return {\n widgetImports: imports.write(),\n widgetDefs: jsDef.join(\"\\n\\n\")\n };\n }\n\n private writeElements(): string {\n let retVal = \"\";\n for (const dataview of this._ddlSchema.dataviews) {\n retVal += this.writeElement(dataview);\n }\n return retVal;\n }\n\n createJavaScript(): string {\n const widgets = this.writeWidgets();\n\n return `\\\n${widgets.widgetImports}\nimport * as marshaller from \"@hpcc-js/marshaller\";\n\n// Dashboard Element Container (Model) ---\nconst ec = new marshaller.ElementContainer();\n\nnamespace data {\n${this.writeDatasources().join(\"\\n\")}\n}\n\nnamespace viz {\n${widgets.widgetDefs}\n}\n\n// Dashboard Elements (Controller) ---\n${this.writeElements().trim()}\n\nec.refresh();\n\n// Optional ---\nconst errors = ec.validate();\nfor (const error of errors) {\n console.error(error.elementID + \" (\" + error.source + \"): \" + error.msg);\n}\n\nexport const dashboard = new marshaller.Dashboard(ec)\n .target(\"placeholder\")\n .titleVisible(false)\n .hideSingleTabs(true)\n .layoutObj(${stringify(this._dashboard.layout())})\n .render()\n ;\n\n// @ts-ignore\nconst ddl = ${JSON.stringify(this._ddlSchema)};\n`;\n }\n}\n","import { Button, Spacer, ToggleButton, Widget } from \"@hpcc-js/common\";\nimport { DDL1, DDL2, isDDL2Schema, upgrade } from \"@hpcc-js/ddl-shim\";\nimport { ChartPanel } from \"@hpcc-js/layout\";\nimport { text as d3Text } from \"d3-fetch\";\nimport { Activity } from \"./activities/activity.ts\";\nimport { Databomb } from \"./activities/databomb.ts\";\nimport { DSPicker } from \"./activities/dspicker.ts\";\nimport { Filters } from \"./activities/filter.ts\";\nimport { Form, FormField } from \"./activities/form.ts\";\nimport { GroupBy } from \"./activities/groupby.ts\";\nimport { Limit } from \"./activities/limit.ts\";\nimport { Project } from \"./activities/project.ts\";\nimport { Sort } from \"./activities/sort.ts\";\nimport { DashboardDockPanel } from \"./dashboardDockPanel.ts\";\nimport { DashboardGrid } from \"./dashboardGrid.ts\";\nimport { DDLAdapter } from \"./ddl.ts\";\nimport { JavaScriptAdapter } from \"./javascriptadapter.ts\";\nimport { Element, ElementContainer } from \"./model/element.ts\";\n\nimport \"../../src/ddl2/dashboard.css\";\n\nexport interface IDockPanel {\n layoutObj(_: object | null): this;\n layout();\n widgets();\n activate(element: Element);\n hideSingleTabs(bool?: boolean);\n syncWidgets();\n syncPopups();\n}\n\nexport class Dashboard extends ChartPanel {\n\n private _dockPanel: IDockPanel;\n\n private _designModeButton = new ToggleButton().faChar(\"fa-object-group\").tooltip(\"Design Mode...\")\n .selected(true)\n .on(\"click\", () => {\n if (this._dockPanel instanceof DashboardGrid) {\n this._dockPanel\n .designMode(this._designModeButton.selected())\n .lazyRender()\n ;\n }\n });\n\n private _addButton = new Button().faChar(\"fa-plus\").tooltip(\"Add...\")\n .on(\"click\", () => {\n const newElem = new Element(this._ec);\n this._ec.append(newElem);\n this.renderPromise().then(() => {\n newElem.refresh().then(() => {\n this.activate(newElem);\n });\n });\n });\n\n private _removeButton = new Button().faChar(\"fa-minus\").tooltip(\"Remove...\")\n .enabled(false)\n .on(\"click\", () => {\n const elem = this._prevActive;\n if (elem && window.confirm(`Remove Widget \"${elem.id()}\"?`)) {\n this._ec.clear(elem.id());\n this.renderPromise().then(() => {\n this.vizActivation(undefined);\n });\n }\n });\n\n private _reloadButton = new Button().faChar(\"fa-refresh\").tooltip(\"Reload...\")\n .on(\"click\", () => {\n const json = this.save();\n this._ec.clear();\n this.vizActivation(undefined);\n this.renderPromise().then(() => {\n this.restore(json);\n this.renderPromise().then(() => {\n this._ec.refresh().then(() => {\n });\n });\n });\n });\n\n private _addSamples = new Button().faChar(\"fa-database\").tooltip(\"Add Samples\")\n .on(\"click\", () => {\n Promise.all([\n d3Text(\"https://raw.githubusercontent.com/hpcc-systems/Visualization/candidate-2.x.x/utils/data/data/airports.csv\"),\n d3Text(\"https://raw.githubusercontent.com/hpcc-systems/Visualization/candidate-2.x.x/utils/data/data/carriers.csv\"),\n d3Text(\"https://raw.githubusercontent.com/hpcc-systems/Visualization/candidate-2.x.x/utils/data/data/stats.csv\")\n ]).then(([airports, carriers, stats]) => {\n const popupElement = this.addForm(\"popup\", {\n type: \"form\",\n id: \"global_filter\",\n fields: [{\n type: \"string\",\n id: \"Airport\"\n }, {\n type: \"string\",\n id: \"Airline\"\n }]\n });\n popupElement.visualization()\n .title(\"Global Filter\")\n .visibility(\"flyout\")\n .chartType(\"FieldForm\")\n ;\n const airportsElement = this.addDatabomb(\"airports\", airports, \"csv\",\n [\n new FormField().fieldID(\"code\").type(\"string\"),\n new FormField().fieldID(\"name\").type(\"string\"),\n new FormField().fieldID(\"count\").type(\"number\")\n ],\n new Filters(this._ec).remoteFilter([\n new Filters.Filter().source(popupElement.id()).mappings([new Filters.Mapping().remoteField(\"Airport\").localField(\"code\").nullable(true)])\n ]),\n new Sort().column([new Sort.Column().fieldID(\"count\").descending(true)])\n );\n airportsElement.chartPanel().title(\"Airports\");\n const carrierElement = this.addDatabomb(\"carriers\", carriers, \"csv\",\n [\n new FormField().fieldID(\"code\").type(\"string\"),\n new FormField().fieldID(\"name\").type(\"string\"),\n new FormField().fieldID(\"count\").type(\"number\")\n ],\n new Filters(this._ec).remoteFilter([\n new Filters.Filter().source(popupElement.id()).mappings([new Filters.Mapping().remoteField(\"Airline\").localField(\"code\").nullable(true)])\n ]),\n new Sort().column([new Sort.Column().fieldID(\"count\").descending(true)])\n );\n carrierElement.chartPanel().title(\"Airlines\");\n const statsElement = this.addDatabomb(\"stats\", stats, \"csv\",\n [],\n new Filters(this._ec).remoteFilter([\n new Filters.Filter().source(airportsElement.id()).mappings([new Filters.Mapping().remoteField(\"code\").localField(\"airport\")]),\n new Filters.Filter().source(carrierElement.id()).mappings([new Filters.Mapping().remoteField(\"code\").localField(\"carrier\").nullable(true)])\n ]));\n statsElement.chartPanel().title(\"Stats\");\n return Promise.all([\n popupElement.refresh(),\n airportsElement.refresh(),\n carrierElement.refresh(),\n statsElement.refresh()\n ]);\n }).then(() => {\n this.render();\n });\n });\n\n addDatabomb(label: string, payload: string, format: \"csv\" | \"tsv\" | \"json\" = \"csv\", databombFields: FormField[], ...activities: Activity[]): Element {\n const databomb = new Databomb().id(label).format(format).payload(payload);\n if (databombFields.length > 0) {\n databomb.databombFields(databombFields);\n }\n this._ec.appendDatasource(databomb);\n const newElem = new Element(this._ec);\n const ds = newElem.hipiePipeline().datasource();\n if (ds instanceof DSPicker) {\n ds.datasourceID(databomb.id());\n }\n for (const activity of activities) {\n if (activity instanceof Filters) {\n newElem.hipiePipeline().filters(activity);\n } else if (activity instanceof Project) {\n newElem.hipiePipeline().project(activity);\n } else if (activity instanceof GroupBy) {\n newElem.hipiePipeline().groupBy(activity);\n } else if (activity instanceof Sort) {\n newElem.hipiePipeline().sort(activity);\n } else if (activity instanceof Limit) {\n newElem.hipiePipeline().limit(activity);\n }\n }\n this._ec.append(newElem);\n return newElem;\n }\n\n addForm(label: string, ddl: DDL2.IForm): Element {\n const databomb = new Form().id(label).fromDDL(ddl);\n this._ec.appendDatasource(databomb);\n const newElem = new Element(this._ec);\n const ds = newElem.hipiePipeline().datasource();\n if (ds instanceof DSPicker) {\n ds.datasourceID(databomb.id());\n }\n this._ec.append(newElem);\n return newElem;\n }\n\n static create(target: string, ddl: DDL2.Schema): Promise<Dashboard> {\n return new Promise((resolve, reject) => {\n const ec = new ElementContainer();\n const dashboard = new Dashboard(ec)\n .target(target)\n .hideSingleTabs(true)\n .titleVisible(false)\n .restore(ddl)\n .render(w => {\n ec.refresh().then(() => {\n resolve(dashboard);\n });\n });\n });\n }\n\n constructor(private _ec: ElementContainer) {\n super();\n this._ec.on(\"vizStateChanged\", (viz) => {\n this.vizStateChanged(viz);\n });\n this.buttons([this._designModeButton, new Spacer(), this._addButton, this._removeButton, new Spacer(), this._reloadButton, new Spacer(), this._addSamples]);\n this.ensureDockPanel(\"dock\");\n }\n\n ensureDockPanel(mode: \"dock\" | \"grid\" = \"dock\") {\n if ((mode === \"dock\" && !(this._dockPanel instanceof DashboardDockPanel)) || (mode === \"grid\" && !(this._dockPanel instanceof DashboardGrid))) {\n this._dockPanel = (mode === \"dock\" ? new DashboardDockPanel(this._ec) : new DashboardGrid(this._ec).designMode(this.titleVisible()))\n .on(\"vizActivation\", (elem: Element) => {\n this.vizActivation(elem);\n })\n ;\n this.widget(this._dockPanel as any);\n }\n }\n\n elementContainer(): ElementContainer {\n return this._ec;\n }\n\n private _hipieProps;\n hipieProps(): DDL2.IProperties;\n hipieProps(_: DDL2.IProperties): this;\n hipieProps(_?: DDL2.IProperties): DDL2.IProperties | this {\n if (!arguments.length) return this._hipieProps;\n this._hipieProps = _;\n return this;\n }\n\n ddl(): DDL2.Schema;\n ddl(_: DDL2.Schema): this;\n ddl(_?: DDL2.Schema): DDL2.Schema | this {\n const ddlAdapter = new DDLAdapter(this);\n if (!arguments.length) return ddlAdapter.write();\n this._ec.clear();\n ddlAdapter.read(_);\n return this;\n }\n\n // Used to delay load a layout after a render...\n layoutObj(_: object | null): this {\n this._dockPanel.layoutObj(_);\n return this;\n }\n\n save(): DDL2.Schema {\n const ddlAdapter = new DDLAdapter(this);\n return ddlAdapter.write();\n }\n\n serializeDDL(): string {\n return JSON.stringify(this.save());\n }\n\n deserializeDDL(json: string): this {\n return this.restore(JSON.parse(json) as DDL2.Schema);\n }\n\n restore(_: DDL2.Schema, render: boolean = false): this {\n this.ensureDockPanel(_ && _.properties && _.properties.layout instanceof Array ? \"grid\" : \"dock\");\n this._ec.clear();\n const ddlAdapter = new DDLAdapter(this);\n ddlAdapter.read(_);\n if (render) {\n this.renderPromise().then(() => {\n this._ec.refresh();\n });\n }\n return this;\n }\n\n importDDL(ddl: DDL1.DDLSchema | DDL2.Schema, baseUrl?: string, wuid?: string, dermatologyJson: object = {}): this {\n const ddl2: DDL2.Schema = isDDL2Schema(ddl) ? ddl : upgrade(ddl, baseUrl, wuid, true, dermatologyJson);\n return this.restore(ddl2, true);\n }\n\n javascript(): string {\n const jsAdapter = new JavaScriptAdapter(this);\n return jsAdapter.createJavaScript();\n }\n\n layout() {\n return this._dockPanel.layout();\n }\n\n widgets(): Widget[] {\n return this._dockPanel.widgets();\n }\n\n activate(element: Element) {\n this._dockPanel.activate(element);\n }\n\n hideSingleTabs(): boolean;\n hideSingleTabs(_: boolean): this;\n hideSingleTabs(_?: boolean): boolean | this {\n if (!arguments.length) return this._dockPanel.hideSingleTabs();\n this._dockPanel.hideSingleTabs(_);\n return this;\n }\n\n updateButtonState() {\n this._designModeButton.enabled(this._dockPanel instanceof DashboardGrid).render();\n this._removeButton.enabled(this._prevActive !== undefined).render();\n }\n\n update(domNode: HTMLElement, element) {\n this._dockPanel.syncWidgets();\n super.update(domNode, element);\n this.updateButtonState();\n }\n\n private _prevActive: Element;\n vizActivation(viz: Element) {\n this._prevActive = viz;\n this._removeButton.enabled(viz !== undefined).render();\n }\n\n vizStateChanged(viz: Element) {\n }\n\n render(callback?): this {\n this._dockPanel.syncPopups();\n return super.render(w => {\n if (callback) {\n callback(w);\n }\n });\n }\n}\nDashboard.prototype._class += \" dashboard_dashboard\";\n","import { JSONEditor } from \"@hpcc-js/codemirror\";\nimport { DDL2, validate2 } from \"@hpcc-js/ddl-shim\";\nimport { Table } from \"@hpcc-js/dgrid\";\nimport { SplitPanel } from \"@hpcc-js/phosphor\";\n\nimport \"../../src/ddl2/ddleditor.css\";\n\nexport class DDLEditor extends SplitPanel {\n summary: string = \"0 Errors\";\n _ddlEditor = new JSONEditor().on(\"changes\", (changes) => {\n this.checkSyntax();\n });\n _errorTable = new Table()\n .columns([\"dataPath\", \"keyword\", \"message\", \"params\"])\n ;\n\n ddl(): object;\n ddl(_: object): this;\n ddl(_?: object): object | this {\n if (!arguments.length) return this._ddlEditor.json();\n this._ddlEditor.json(_);\n this.checkSyntax();\n return this;\n }\n\n checkSyntax() {\n try {\n const json = this.ddl();\n try {\n const { success, errors } = validate2(json as DDL2.Schema);\n if (success) {\n this._errorTable.data([]);\n } else {\n this._errorTable.data(errors.map(error => [error.instancePath, error.keyword, error.message, JSON.stringify(error.params)]));\n }\n } catch (e) {\n this._errorTable.data([[\"\", \"Validation Failed\", \"\", \"\"]]);\n }\n } catch (e) {\n this._errorTable.data([[\"ALL\", \"Invalid JSON\", \"\", \"\"]]);\n }\n if (this._renderCount) {\n this._errorTable.lazyRender();\n }\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this\n .addWidget(this._ddlEditor)\n .addWidget(this._errorTable)\n ;\n }\n\n update(domNode, _element) {\n super.update(domNode, _element);\n }\n\n}\nDDLEditor.prototype._class += \" codemirror_DDLEditor\";\n","import { Widget } from \"@hpcc-js/common\";\nimport { Edge, IGraphData, Lineage, Subgraph, Vertex } from \"@hpcc-js/graph\";\nimport { Activity } from \"./activities/activity.ts\";\nimport { Databomb } from \"./activities/databomb.ts\";\nimport { DSPicker } from \"./activities/dspicker.ts\";\nimport { Form } from \"./activities/form.ts\";\nimport { LogicalFile } from \"./activities/logicalfile.ts\";\nimport { RestResult, RestResultRef } from \"./activities/rest.ts\";\nimport { RoxieResult, RoxieResultRef } from \"./activities/roxie.ts\";\nimport { WUResult } from \"./activities/wuresult.ts\";\nimport { Element, ElementContainer, State } from \"./model/element.ts\";\nimport { Visualization } from \"./model/visualization.ts\";\nimport { VizChartPanel } from \"./model/vizChartPanel.ts\";\n\nexport interface VertexData {\n view?: Element;\n activity?: Activity;\n visualization?: Visualization;\n chartPanel?: VizChartPanel;\n state?: State;\n}\n\nexport class GraphAdapter {\n private subgraphMap: { [key: string]: Subgraph } = {};\n private vertexMap: { [key: string]: Vertex } = {};\n private edgeMap: { [key: string]: Edge } = {};\n private hierarchy: Lineage[] = [];\n private vertices: Widget[] = [];\n private edges: Edge[] = [];\n\n constructor(private _ec: ElementContainer) {\n }\n\n clear() {\n this.subgraphMap = {};\n this.vertexMap = {};\n this.edgeMap = {};\n\n this.hierarchy = [];\n this.vertices = [];\n this.edges = [];\n }\n\n createSubgraph(id: string, label: string, data?: VertexData): Subgraph {\n let retVal: Subgraph = this.subgraphMap[id];\n if (!retVal) {\n retVal = new Subgraph()\n // .classed({ subgraph: true })\n // .showIcon(false)\n .columns([\"DS\"])\n .data([[data]])\n ;\n this.subgraphMap[id] = retVal;\n }\n this.vertices.push(retVal);\n retVal.title(`${label}`);\n retVal.getBBox(true);\n return retVal;\n }\n\n createVertex(id: string, label: string, data?: VertexData, tooltip: string = \"\", fillColor: string = \"#dcf1ff\"): Vertex {\n let retVal: Vertex = this.vertexMap[id];\n if (!retVal) {\n retVal = new Vertex()\n .columns([\"DS\"])\n .data([[data]])\n .icon_diameter(0)\n ;\n this.vertexMap[id] = retVal;\n }\n this.vertices.push(retVal);\n retVal\n .textbox_shape_colorFill(fillColor)\n .text(tooltip ? `${label}\\n${tooltip}` : `${label}`)\n .tooltip(tooltip)\n ;\n retVal.getBBox(true);\n return retVal;\n }\n\n createEdge(sourceID: string, targetID: string) {\n const edgeID = `${sourceID}->${targetID}`;\n let retVal = this.edgeMap[edgeID];\n if (!retVal) {\n retVal = new Edge()\n .sourceVertex(this.vertexMap[sourceID])\n .targetVertex(this.vertexMap[targetID])\n ;\n this.edgeMap[edgeID] = retVal;\n }\n this.edges.push(retVal);\n return retVal;\n }\n\n createDatasource(dsDetails: Activity): string {\n if (dsDetails instanceof DSPicker) {\n dsDetails = dsDetails.selection().datasource();\n }\n if (dsDetails instanceof WUResult) {\n const serverID = `${dsDetails.url()}`;\n const server: Subgraph = this.createSubgraph(serverID, `${serverID}`);\n const wuID = `${dsDetails.url()}/${dsDetails.wuid()}`;\n const wu: Subgraph = this.createSubgraph(wuID, `${dsDetails.wuid()}`);\n this.hierarchy.push({ parent: server, child: wu });\n const resultID = `${wuID}/${dsDetails.resultName()}`;\n const result: Vertex = this.createVertex(resultID, dsDetails.resultName(), { activity: dsDetails });\n this.hierarchy.push({ parent: wu, child: result });\n return resultID;\n } else if (dsDetails instanceof LogicalFile) {\n const serverID = `${dsDetails.url()}`;\n const server: Subgraph = this.createSubgraph(serverID, `${serverID}`);\n const lfID = `${serverID}/${dsDetails.logicalFile()}`;\n const lf: Vertex = this.createVertex(lfID, dsDetails.logicalFile(), { activity: dsDetails });\n this.hierarchy.push({ parent: server, child: lf });\n return lfID;\n } else if (dsDetails instanceof RoxieResultRef) {\n const serverID = `${dsDetails.url()}`;\n const server: Subgraph = this.createSubgraph(serverID, `${serverID}`);\n const surfaceID = dsDetails.serviceID(); // `${dsDetails.url()}/${dsDetails.querySet()}`;\n const surface: Subgraph = this.createSubgraph(surfaceID, dsDetails.querySet());\n this.hierarchy.push({ parent: server, child: surface });\n const roxieID = surfaceID;\n this.hierarchy.push({\n parent: surface,\n child: this.createVertex(roxieID, dsDetails.queryID())\n });\n const roxieResultID = `${surfaceID}/${dsDetails.resultName()}`;\n this.hierarchy.push({\n parent: surface,\n child: this.createVertex(roxieResultID, dsDetails.resultName(), { activity: dsDetails })\n });\n this.createEdge(roxieID, roxieResultID);\n return roxieResultID;\n } else if (dsDetails instanceof RoxieResult) {\n const serverID = `${dsDetails.service().url()}`;\n const server: Subgraph = this.createSubgraph(serverID, `${serverID}`);\n const querySetID = dsDetails.serviceID();\n const querySet: Subgraph = this.createSubgraph(querySetID, dsDetails.service().querySet());\n this.hierarchy.push({ parent: server, child: querySet });\n const queryID = `${querySetID}/${dsDetails.service().queryID()}`;\n const query: Subgraph = this.createSubgraph(queryID, dsDetails.service().queryID());\n this.hierarchy.push({ parent: querySet, child: query });\n const resultID = `${queryID}/${dsDetails.resultName()}`;\n this.hierarchy.push({\n parent: query,\n child: this.createVertex(resultID, dsDetails.resultName(), { activity: dsDetails })\n });\n this.createEdge(queryID, resultID);\n return resultID;\n } else if (dsDetails instanceof RestResultRef) {\n const serverID = `${dsDetails.url()}`;\n const server: Subgraph = this.createSubgraph(serverID, `${serverID}`);\n const surfaceID = dsDetails.serviceID();\n const surface: Subgraph = this.createSubgraph(surfaceID, dsDetails.action());\n this.hierarchy.push({ parent: server, child: surface });\n const roxieID = surfaceID;\n this.hierarchy.push({\n parent: surface,\n child: this.createVertex(roxieID, dsDetails.action())\n });\n const roxieResultID = `${surfaceID}/${dsDetails.resultName()}`;\n this.hierarchy.push({\n parent: surface,\n child: this.createVertex(roxieResultID, dsDetails.resultName(), { activity: dsDetails })\n });\n this.createEdge(roxieID, roxieResultID);\n return roxieResultID;\n } else if (dsDetails instanceof RestResult) {\n const serverID = `${dsDetails.service().url()}`;\n const server: Subgraph = this.createSubgraph(serverID, `${serverID}`);\n const serviceID = dsDetails.serviceID();\n const actionID = `${serverID}/${dsDetails.service().action()}`;\n const action: Subgraph = this.createSubgraph(serviceID, dsDetails.service().action());\n this.hierarchy.push({ parent: server, child: action });\n const resultID = `${actionID}/${dsDetails.resultName()}`;\n this.hierarchy.push({\n parent: action,\n child: this.createVertex(resultID, dsDetails.resultName(), { activity: dsDetails })\n });\n this.createEdge(actionID, resultID);\n return resultID;\n } else if (dsDetails instanceof Form) {\n const id = dsDetails.hash();\n this.createVertex(id, dsDetails.label(), { activity: dsDetails });\n return id;\n } else if (dsDetails instanceof Databomb) {\n const id = dsDetails.id();\n this.createVertex(id, dsDetails.label(), { activity: dsDetails });\n return id;\n } else {\n const id = dsDetails.hash();\n this.createVertex(id, dsDetails.label(), { activity: dsDetails });\n return id;\n }\n }\n\n createActivity(sourceID: string, view: Element, activity: Activity, label?: string): string {\n const surface: Subgraph = this.createSubgraph(view.id(), `${view.id()}`, { view });\n let fillColor = null;\n let tooltip = \"\";\n if (activity.exists()) {\n const errors = activity.validate();\n if (errors.length) {\n fillColor = \"pink\";\n tooltip = errors.map(error => `${error.source}: ${error.msg}`).join(\"\\n\");\n }\n } else {\n fillColor = \"lightgrey\";\n }\n const vertex: Vertex = this.createVertex(activity.id(), label || `${activity.classID()}`, { view, activity }, tooltip, fillColor);\n if (sourceID) {\n this.createEdge(sourceID, activity.id());\n }\n this.hierarchy.push({ parent: surface, child: vertex });\n return activity.id();\n }\n\n createGraph(): IGraphData {\n this.hierarchy = [];\n this.vertices = [];\n this.edges = [];\n\n this._ec.elements().forEach(e => {\n this.createDatasource(e.hipiePipeline().datasource());\n });\n\n const lastID: { [key: string]: string } = {};\n for (const view of this._ec.elements()) {\n const pipeline = view.hipiePipeline();\n let prevID = this.createDatasource(pipeline.datasource());\n for (const activity of pipeline.activities()) {\n prevID = this.createActivity(prevID, view, activity);\n }\n const visualization = view.visualization();\n const mappings = visualization.mappings();\n const mappingVertexID = this.createActivity(prevID, view, mappings, \"Mappings\");\n const vizSubgraphID = `${visualization.id()}-sg`;\n const surface: Subgraph = this.createSubgraph(vizSubgraphID, \"Visualization\", { visualization });\n this.hierarchy.push({\n parent: this.subgraphMap[view.id()],\n child: surface\n });\n this.hierarchy.push({\n parent: surface,\n child: this.vertexMap[mappings.id()]\n });\n const vizVertexID = `${visualization.id()}-viz`;\n const widgetVertex: Vertex = this.createVertex(vizVertexID, visualization.chartPanel().widget().classID(), { view, chartPanel: visualization.chartPanel() });\n this.createEdge(mappingVertexID, vizVertexID);\n this.hierarchy.push({\n parent: surface,\n child: widgetVertex\n });\n const stateVertexID = `${visualization.id()}-state`;\n const stateVertex: Vertex = this.createVertex(stateVertexID, \"Selection\", { view, state: view.state() });\n this.createEdge(vizVertexID, stateVertexID)\n .weight(10)\n .strokeDasharray(\"1,5\")\n .text(\"updates\")\n ;\n this.createEdge(prevID, stateVertexID);\n this.hierarchy.push({\n parent: this.subgraphMap[view.id()],\n child: stateVertex\n });\n prevID = stateVertexID;\n lastID[pipeline.id()] = prevID;\n }\n\n // Mapping Secondary Sources ---\n for (const view of this._ec.elements()) {\n const visualization = view.visualization();\n const secondaryElement = this._ec.element(visualization.secondaryDataviewID());\n if (secondaryElement) {\n const mappings = secondaryElement.visualization().mappings();\n this.createEdge(mappings.id(), `${visualization.id()}-viz`);\n }\n }\n\n for (const viz of this._ec.elements()) {\n const view = viz.hipiePipeline();\n for (const updateInfo of view.updatedByGraph()) {\n this.createEdge(lastID[this._ec.element(updateInfo.from).hipiePipeline().id()], updateInfo.to.id())\n .weight(10)\n .strokeDasharray(\"1,5\")\n .text(\"updates\")\n ;\n }\n }\n\n return {\n vertices: this.vertices,\n edges: this.edges,\n hierarchy: this.hierarchy\n };\n }\n}\n","import { Button, Spacer } from \"@hpcc-js/common\";\nimport { Table } from \"@hpcc-js/dgrid\";\nimport { ChartPanel } from \"@hpcc-js/layout\";\nimport { CommandRegistry, ContextMenu } from \"@hpcc-js/phosphor\";\nimport { text as d3Text } from \"d3-fetch\";\nimport { Databomb } from \"./activities/databomb.ts\";\nimport { DatasourceRefType } from \"./activities/datasource.ts\";\nimport { DSPicker } from \"./activities/dspicker.ts\";\nimport { Form, FormField } from \"./activities/form.ts\";\nimport { LogicalFile } from \"./activities/logicalfile.ts\";\nimport { RestField, RestResult, RestService } from \"./activities/rest.ts\";\nimport { RoxieResult, RoxieService } from \"./activities/roxie.ts\";\nimport { WU, WUResult } from \"./activities/wuresult.ts\";\nimport { ElementContainer } from \"./model/element.ts\";\n\nexport class DSTable extends ChartPanel {\n\n private _addButton = new Button().faChar(\"fa-plus\").tooltip(\"Add...\")\n .on(\"click\", () => {\n const node = this._addButton.element().node();\n const rect = node.getBoundingClientRect();\n if (this._contextMenu.open({\n target: node,\n currentTarget: node,\n clientX: rect.left,\n clientY: rect.bottom\n })) {\n }\n });\n\n private _removeButton = new Button().faChar(\"fa-minus\").tooltip(\"Remove...\")\n .enabled(false)\n .on(\"click\", () => {\n this.remove();\n });\n\n private _cloneButton = new Button().faChar(\"fa-clone\").tooltip(\"Clone...\")\n .enabled(false)\n .on(\"click\", () => {\n if (this._selectedDS2) {\n if (this._selectedDS2 instanceof Databomb) {\n this.add(Databomb.fromDDL(this._selectedDS2.toDDL(), true));\n } else if (this._selectedDS2 instanceof Form) {\n this.add(Form.fromDDL(this._selectedDS2.toDDL(), true));\n } else if (this._selectedDS2 instanceof LogicalFile) {\n this.add(LogicalFile.fromDDL(this._ec, this._selectedDS2.toDDL(), true));\n } else if (this._selectedDS2 instanceof RestResult) {\n this.add(new RestResult(this._ec)\n .service(RestService.fromDDL(this._ec, this._selectedDS2.service().toDDL(), true))\n .resultName(this._selectedDS2.resultName())\n );\n } else if (this._selectedDS2 instanceof WUResult) {\n this.add(new WUResult(this._ec)\n .wu(WU.fromDDL(this._ec, this._selectedDS2.wu().toDDL(), true))\n .resultName(this._selectedDS2.resultName())\n );\n } else if (this._selectedDS2 instanceof RoxieResult) {\n this.add(new RoxieResult(this._ec)\n .service(RoxieService.fromDDL(this._ec, this._selectedDS2.service().toDDL(), true))\n .resultName(this._selectedDS2.resultName())\n );\n } else {\n console.warn(\"Unknown datasoure type\");\n }\n }\n });\n\n private _addSamples = new Button().faChar(\"fa-database\").tooltip(\"Add Samples\")\n .on(\"click\", () => {\n d3Text(\"https://raw.githubusercontent.com/hpcc-systems/Visualization/candidate-2.x.x/utils/data/data/airports.csv\").then(csv => {\n this.add(new Databomb().format(\"csv\").payload(csv));\n });\n d3Text(\"https://raw.githubusercontent.com/hpcc-systems/Visualization/candidate-2.x.x/utils/data/data/carriers.csv\").then(csv => {\n this.add(new Databomb().format(\"csv\").payload(csv));\n });\n d3Text(\"https://raw.githubusercontent.com/hpcc-systems/Visualization/candidate-2.x.x/utils/data/data/stats.csv\").then(csv => {\n this.add(new Databomb().format(\"csv\").payload(csv));\n });\n this.add(new RestResult(this._ec)\n .service(new RestService(this._ec)\n .url(\"https://cmsapi.pulselive.com/\")\n .action(\"rugby/rankings/mru\")\n .requestFields([\n new RestField().fieldID(\"xxx\"),\n new RestField().fieldID(\"date\")\n ]))\n .resultName(\"entries\")\n );\n this.add(new WUResult(this._ec)\n .wu(new WU(this._ec).url(\"http://localhost:8010\").wuid(\"W20190802-112509\"))\n .resultName(\"Result 1\")\n );\n this.add(new LogicalFile(this._ec)\n .url(\"http://localhost:8010\")\n .logicalFile(\"progguide::exampledata::peopleaccts\")\n );\n this.add(new LogicalFile(this._ec)\n .url(\"http://localhost:8010\")\n .logicalFile(\"progguide::exampledata::people\")\n );\n const vmRoxie = new RoxieService(this._ec)\n .url(\"http://localhost:8002\")\n .querySet(\"roxie\")\n .queryID(\"peopleaccounts\")\n ;\n this.add(new RoxieResult(this._ec)\n .service(vmRoxie)\n .resultName(\"Accounts\")\n );\n this.add(new Form()\n .formFields([\n new FormField().type(\"number\").fieldID(\"id\").value(8),\n new FormField().fieldID(\"first_name\").value(\"John\"),\n new FormField().fieldID(\"last_name\").value(\"Doe\"),\n new FormField().fieldID(\"gender\").default(\"M\"),\n new FormField().type(\"number\").fieldID(\"age\")\n ])\n );\n this.render();\n });\n\n private _dstable = new Table();\n private _selectedDS;\n private _selectedDS2;\n\n private _contextMenu;\n\n constructor(private _ec: ElementContainer) {\n super();\n this\n .buttons([this._addButton, this._removeButton, new Spacer(), this._cloneButton, new Spacer(), this._addSamples])\n .widget(this._dstable)\n .columns([\"ID\", \"Type\", \"References\"])\n .on(\"click\", (row, col, sel) => {\n this._selectedDS2 = row.__lparam;\n if (sel && row.References === 0 && row.ID !== \"Empty\") {\n this._selectedDS = row.__lparam;\n } else {\n delete this._selectedDS;\n }\n this._removeButton.enabled(this._selectedDS !== undefined).render();\n this._cloneButton.enabled(this._selectedDS2 !== undefined).render();\n })\n ;\n\n this.initMenu();\n }\n\n initMenu() {\n const commands = new CommandRegistry();\n\n // Dashboard Commands ---\n commands.addCommand(\"add_wu_result\", {\n label: \"Workunit Result\",\n execute: () => {\n this.add(new WUResult(this._ec));\n }\n });\n\n commands.addCommand(\"add_logicalfile\", {\n label: \"Logical File\",\n execute: () => {\n this.add(new LogicalFile(this._ec));\n }\n });\n\n commands.addCommand(\"add_roxie\", {\n label: \"Roxie Service\",\n execute: () => {\n this.add(new RoxieResult(this._ec));\n }\n });\n\n commands.addCommand(\"add_rest\", {\n label: \"Rest\",\n execute: () => {\n this.add(new RestResult(this._ec));\n }\n });\n\n commands.addCommand(\"add_databomb\", {\n label: \"Databomb\",\n execute: () => {\n this.add(new Databomb());\n }\n });\n\n commands.addCommand(\"add_form\", {\n label: \"Form\",\n execute: () => {\n this.add(new Form());\n }\n });\n\n this._contextMenu = new ContextMenu({ commands });\n this._contextMenu.addItem({ command: \"add_wu_result\", selector: \".common_Button\" });\n this._contextMenu.addItem({ command: \"add_logicalfile\", selector: \".common_Button\" });\n this._contextMenu.addItem({ command: \"add_roxie\", selector: \".common_Button\" });\n this._contextMenu.addItem({ command: \"add_rest\", selector: \".common_Button\" });\n this._contextMenu.addItem({ command: \"add_databomb\", selector: \".common_Button\" });\n this._contextMenu.addItem({ command: \"add_form\", selector: \".common_Button\" });\n }\n\n add(ds: DatasourceRefType) {\n this._ec.appendDatasource(ds);\n this.render();\n }\n\n remove() {\n if (this._selectedDS) {\n this._ec.removeDatasource(this._selectedDS);\n this.render();\n }\n }\n\n private _prevDataID;\n render(callback?) {\n const refs = {};\n this._ec.elements().forEach(e => {\n let ds = e.hipiePipeline().datasource();\n if (ds instanceof DSPicker) {\n ds = ds.datasource();\n }\n if (refs[ds.id()] === undefined) {\n refs[ds.id()] = 0;\n }\n refs[ds.id()]++;\n });\n const data = this._ec.datasources().filter(ds => ds.id() !== \"Empty\").map(ds => {\n if (refs[ds.id()] === undefined) {\n refs[ds.id()] = 0;\n }\n return [ds.id(), ds.classID(), refs[ds.id()] || 0, ds];\n });\n const dataID = JSON.stringify(refs);\n if (this._prevDataID !== dataID) {\n this._prevDataID = dataID;\n this.data(data);\n }\n return super.render(callback);\n }\n}\n","import { Table } from \"@hpcc-js/dgrid\";\nimport { ChartPanel } from \"@hpcc-js/layout\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { ElementContainer } from \"./model/element.ts\";\n\nexport class DVTable extends ChartPanel {\n\n private _dvtable = new Table();\n\n constructor(private _ec: ElementContainer) {\n super();\n this\n .titleVisible(false)\n .widget(this._dvtable)\n .columns([\"ID\", \"Title\"])\n ;\n }\n\n private _prevDataID;\n render(callback?) {\n const data = this._ec.elements().map(elem => {\n return [elem.id(), elem.visualization().title(), elem];\n });\n const dataID = hashSum(data.map(row => row[0]));\n if (this._prevDataID !== dataID) {\n this._prevDataID = dataID;\n this.data(data);\n }\n return super.render(callback);\n }\n}\n","import { JSONEditor } from \"@hpcc-js/codemirror\";\nimport { Button, PropertyExt, SelectionBar, SelectionButton, Spacer } from \"@hpcc-js/common\";\nimport { DatasourceTable } from \"@hpcc-js/dgrid\";\nimport { ChartPanel } from \"@hpcc-js/layout\";\nimport { PropertyEditor } from \"@hpcc-js/other\";\nimport { SplitPanel, TabPanel } from \"@hpcc-js/phosphor\";\nimport { Activity } from \"./activities/activity.ts\";\nimport { DatasourceAdapt } from \"./activities/databomb.ts\";\nimport { Datasource } from \"./activities/datasource.ts\";\nimport { DSPicker } from \"./activities/dspicker.ts\";\nimport { Filters } from \"./activities/filter.ts\";\nimport { GroupBy } from \"./activities/groupby.ts\";\nimport { Limit } from \"./activities/limit.ts\";\nimport { Mappings, Project } from \"./activities/project.ts\";\nimport { Sort } from \"./activities/sort.ts\";\nimport { Element as ModelElement, IElementError, State } from \"./model/element.ts\";\nimport { Visualization } from \"./model/visualization.ts\";\n\nimport \"../../src/ddl2/pipelinePanel.css\";\n\nclass PipelineSelectionButton extends SelectionButton {\n\n _label: string;\n label(): string;\n label(_: string): this;\n label(_?: string): string | this {\n if (!arguments.length) return this._label;\n this._label = _;\n this.tooltip(_);\n return this;\n }\n\n _elementErrors: IElementError[] = [];\n errors(): IElementError[];\n errors(_: IElementError[]): this;\n errors(_?: IElementError[]): IElementError[] | this {\n if (!arguments.length) return this._elementErrors;\n this._elementErrors = _;\n this.classed(\"error\", _.length > 0);\n // this.element().classed(\"error\", _.length > 0);\n if (_.length) {\n this.tooltip(_.map(err => {\n const errSourceParts = err.source.split(\".\");\n errSourceParts.splice(0, 1);\n return `${errSourceParts.join(\".\")}: ${err.msg}`;\n }).join(\"\\n\"));\n } else {\n this.tooltip(this._label);\n }\n this.render();\n return this;\n }\n}\n\nclass PipelinePanel extends ChartPanel {\n _owner: PipelineSplitPanel;\n\n datasource = new PipelineSelectionButton().faChar(\"fa-database\").label(\"Datasource\").selected(true);\n filter = new PipelineSelectionButton().faChar(\"fa-filter\").label(\"Filter\");\n project = new PipelineSelectionButton().faChar(\"fa-random\").label(\"Project\");\n groupBy = new PipelineSelectionButton().faChar(\"fa-object-group\").label(\"Group By\");\n sort = new PipelineSelectionButton().faChar(\"fa-sort-alpha-asc\").label(\"Sort\");\n limit = new PipelineSelectionButton().faChar(\"fa-list-ol\").label(\"Limit\");\n mappings = new PipelineSelectionButton().faChar(\"fa-random\").label(\"Mappings\");\n chartPanel = new PipelineSelectionButton().faChar(\"fa-area-chart\").label(\"Visualization\");\n state = new PipelineSelectionButton().faChar(\"fa-check-square-o\").label(\"State\");\n debug = new PipelineSelectionButton().faChar(\"fa-bug\").label(\"Debug\");\n all = new PipelineSelectionButton().faChar(\"fa-list\").label(\"All\");\n\n _propEditor: PropertyEditor = new PropertyEditor()\n .show_header(false)\n .show_settings(false)\n .showFields(false)\n ;\n\n private _buttons = [\n this.datasource,\n this.filter,\n this.project,\n this.groupBy,\n this.sort,\n this.limit,\n new Spacer(),\n this.mappings,\n this.chartPanel,\n new Spacer(),\n this.state,\n this.debug,\n new Spacer(),\n this.all\n ];\n _pipelineButton: PipelineSelectionButton = this.datasource;\n private _pipelineSelection = new SelectionBar()\n .buttons(this._buttons).on(\"selected\", sb => {\n this._pipelineButton = sb;\n this.title(sb.label()).render();\n });\n\n constructor(owner: PipelineSplitPanel) {\n super();\n this._owner = owner;\n this.buttons([this._pipelineSelection]);\n this.title(this.datasource.label());\n super.widget(this._propEditor);\n this._propEditor.monitor((id: string, newValue: any, oldValue: any, source: PropertyExt) => {\n if (source !== this._propEditor) {\n this.propChanged(id, newValue, oldValue, source);\n this.updateState();\n }\n });\n }\n\n selectionButtons(): PipelineSelectionButton[] {\n return this._pipelineSelection.buttons().filter(b => b instanceof PipelineSelectionButton) as PipelineSelectionButton[];\n }\n\n private _propExt: PropertyExt;\n propExt(): PropertyExt;\n propExt(_: PropertyExt): this;\n propExt(_?: PropertyExt): PropertyExt | this {\n if (!arguments.length) return this._propExt;\n this._propExt = _;\n return this;\n }\n\n private peAsDatasource(): Datasource {\n if (this._propExt instanceof Datasource) {\n return this._propExt;\n } else if (this._propExt instanceof DSPicker) {\n return this._propExt;\n } else if (this._propExt instanceof ModelElement) {\n return this._propExt.hipiePipeline().datasource();\n }\n }\n\n private peAsFilter(): Filters {\n if (this._propExt instanceof Filters) {\n return this._propExt;\n } else if (this._propExt instanceof ModelElement) {\n return this._propExt.hipiePipeline().filters();\n }\n }\n\n private peAsProject(): Project {\n if (this._propExt instanceof Project) {\n return this._propExt;\n } else if (this._propExt instanceof ModelElement) {\n return this._propExt.hipiePipeline().project();\n }\n }\n\n private peAsGroupBy(): GroupBy {\n if (this._propExt instanceof GroupBy) {\n return this._propExt;\n } else if (this._propExt instanceof ModelElement) {\n return this._propExt.hipiePipeline().groupBy();\n }\n }\n\n private peAsSort(): Sort {\n if (this._propExt instanceof Sort) {\n return this._propExt;\n } else if (this._propExt instanceof ModelElement) {\n return this._propExt.hipiePipeline().sort();\n }\n }\n\n private peAsLimit(): Limit {\n if (this._propExt instanceof Limit) {\n return this._propExt;\n } else if (this._propExt instanceof ModelElement) {\n return this._propExt.hipiePipeline().limit();\n }\n }\n\n private peAsMappings(): Mappings {\n if (this._propExt instanceof Mappings) {\n return this._propExt;\n } else if (this._propExt instanceof ModelElement) {\n return this._propExt.visualization().mappings();\n } else if (this._propExt instanceof Visualization) {\n return this._propExt.mappings();\n }\n }\n\n private peAsChartPanel(): ChartPanel | Visualization {\n if (this._propExt instanceof ChartPanel) {\n return this._propExt;\n } else if (this._propExt instanceof Visualization) {\n return this._propExt;\n } else if (this._propExt instanceof ModelElement) {\n return this._propExt.visualization();\n }\n }\n\n private peAsState(): State {\n if (this._propExt instanceof State) {\n return this._propExt;\n } else if (this._propExt instanceof ModelElement) {\n return this._propExt.state();\n }\n }\n\n selectionButton(): PipelineSelectionButton {\n if (this._pipelineButton && this._pipelineButton.enabled()) {\n return this._pipelineButton;\n }\n for (const pb of this.selectionButtons()) {\n if (pb.enabled()) {\n pb.selected(true);\n return pb;\n }\n }\n return undefined;\n }\n\n _prevPropExt: PropertyExt;\n _prevPipelineButton: SelectionButton;\n update(domNode, element) {\n super.update(domNode, element);\n this.updateState();\n const pipelineButton = this.selectionButton();\n if (this._prevPropExt !== this._propExt || this._prevPipelineButton !== pipelineButton) {\n this._prevPropExt = this._propExt;\n this._prevPipelineButton = pipelineButton;\n if (this._propExt && pipelineButton) {\n switch (pipelineButton) {\n case this.datasource:\n this._propEditor.widget(this.peAsDatasource());\n break;\n case this.filter:\n this._propEditor.widget(this.peAsFilter());\n break;\n case this.project:\n this._propEditor.widget(this.peAsProject());\n break;\n case this.groupBy:\n this._propEditor.widget(this.peAsGroupBy());\n break;\n case this.sort:\n this._propEditor.widget(this.peAsSort());\n break;\n case this.limit:\n this._propEditor.widget(this.peAsLimit());\n break;\n case this.mappings:\n this._propEditor.widget(this.peAsMappings());\n break;\n case this.chartPanel:\n this._propEditor.widget(this.peAsChartPanel());\n break;\n case this.state:\n this._propEditor.widget(this.peAsState());\n break;\n case this.all:\n this._propEditor.widget(this._propExt);\n break;\n }\n } else {\n this._propEditor.widget(undefined);\n }\n this._owner.loadPreview(this._propEditor.widget());\n }\n }\n\n updateButtonState(pe, sb) {\n sb.enabled(!!pe);\n sb.errors(!!pe && pe.validate() || []);\n }\n\n updateState() {\n this.selectionButtons().forEach(sb => {\n if (sb instanceof PipelineSelectionButton) {\n if (this.disableActivities().indexOf(sb.label()) >= 0) {\n this.updateButtonState(undefined, sb);\n return;\n }\n }\n\n switch (sb) {\n case this.datasource:\n this.updateButtonState(this.peAsDatasource(), sb);\n break;\n case this.filter:\n this.updateButtonState(this.peAsFilter(), sb);\n break;\n case this.project:\n this.updateButtonState(this.peAsProject(), sb);\n break;\n case this.groupBy:\n this.updateButtonState(this.peAsGroupBy(), sb);\n break;\n case this.sort:\n this.updateButtonState(this.peAsSort(), sb);\n break;\n case this.limit:\n this.updateButtonState(this.peAsLimit(), sb);\n break;\n case this.mappings:\n this.updateButtonState(this.peAsMappings(), sb);\n break;\n case this.chartPanel:\n const cp = this.peAsChartPanel();\n sb.enabled(!!cp);\n break;\n case this.state:\n const st = this.peAsState();\n sb.enabled(!!st);\n break;\n case this.debug:\n sb.enabled(false);\n break;\n case this.all:\n sb.enabled(!!this._propExt);\n break;\n }\n if (sb.selected()) {\n this.title(sb.enabled() ? sb.label() : \"\");\n }\n });\n }\n\n // Events ---\n propChanged(id: string, newValue: any, oldValue: any, source: PropertyExt) {\n }\n}\nPipelinePanel.prototype._class += \" marshaller_PipelinePanel\";\n\ninterface PipelinePanel {\n disableActivities(): string[];\n disableActivities(_: string[]): this;\n}\n\nclass DDLPreview extends ChartPanel {\n\n private _save = new Button().faChar(\"fa-save\").tooltip(\"Save\")\n .on(\"click\", () => {\n const activity = this.activity();\n if (activity && (activity as any).fromDDL) {\n (activity as any).fromDDL(this._jsonEditor.json());\n }\n this.updateToolbar();\n });\n\n private _reset = new Button().faChar(\"fa-undo\").tooltip(\"Reset\")\n .on(\"click\", () => {\n this._jsonEditor\n .text(this.jsonText())\n .lazyRender()\n ;\n this.updateToolbar();\n });\n\n private _jsonEditor = new JSONEditor()\n .on(\"changes\", (changes: object[]) => {\n this.updateToolbar();\n });\n\n constructor() {\n super();\n this._titleBar.buttons([this._save, this._reset]);\n this.widget(this._jsonEditor);\n }\n\n private _activity: PropertyExt;\n activity(_: PropertyExt): this;\n activity(): PropertyExt;\n activity(_?: PropertyExt): PropertyExt | this {\n if (_ === void 0) return this._activity;\n if (this._activity !== _) {\n this._activity = _;\n delete this._prevJson;\n }\n return this;\n }\n\n jsonText(): string {\n const activity = this.activity();\n return activity && (activity as any).toDDL ? JSON.stringify((activity as any).toDDL(), undefined, 4) : \"\";\n }\n\n private _prevJson: string;\n update(domNode, element) {\n super.update(domNode, element);\n const json = this.jsonText();\n const editorJson = this._jsonEditor.text();\n if ((this._prevJson === undefined || this._prevJson === editorJson) && this._prevJson !== json) {\n this._prevJson = json;\n this._jsonEditor.text(json);\n }\n this.updateToolbar();\n }\n\n updateToolbar() {\n const activity = this.activity() as any;\n const json = this.jsonText();\n const editorJson = this._jsonEditor.text();\n this._save.enabled(activity && activity.fromDDL && json !== editorJson).lazyRender();\n this._reset.enabled(json !== editorJson).lazyRender();\n }\n}\n\nexport class PipelineSplitPanel extends SplitPanel {\n private _rhsPropsPanel = new PipelinePanel(this).on(\"propChanged\", (id: string, newValue: any, oldValue: any, source: PropertyExt) => {\n this.propChanged(id, newValue, oldValue, source);\n });\n private _previewPanel = new TabPanel();\n private _rhsDDLPreview = new DDLPreview();\n private _rhsDataPreview = new DatasourceTable().pagination(true);\n\n constructor() {\n super();\n this._previewPanel\n .addWidget(this._rhsDataPreview, \"Data\")\n .addWidget(this._rhsDDLPreview, \"DDL\")\n ;\n this\n .addWidget(this._rhsPropsPanel)\n .addWidget(this._previewPanel)\n ;\n }\n\n loadDataProps(pe: PropertyExt) {\n this._rhsPropsPanel\n .propExt(pe)\n .render()\n ;\n }\n\n loadPreview(activity: undefined | PropertyExt) {\n activity = activity instanceof Visualization ? activity.mappings() : activity;\n this._rhsDataPreview\n .datasource(new DatasourceAdapt(activity instanceof Activity ? activity : undefined))\n .lazyRender()\n ;\n this._rhsDDLPreview\n .activity(activity) // instanceof DSPicker ? activity.datasourceRef() : activity)\n .lazyRender()\n ;\n }\n\n refreshPreview() {\n const ds = this._rhsDataPreview.datasource() as DatasourceAdapt;\n if (ds) {\n ds.exec().then(() => {\n this._rhsDataPreview\n .invalidate()\n .lazyRender()\n ;\n this._rhsDDLPreview\n .lazyRender()\n ;\n });\n } else {\n this._rhsDDLPreview\n .lazyRender()\n ;\n }\n }\n\n // Events ---\n propChanged(id: string, newValue: any, oldValue: any, source: PropertyExt) {\n }\n}\n\nexport interface PipelineSplitPanel {\n disableActivities(): string[];\n disableActivities(_: string[]): this;\n}\n\nPipelinePanel.prototype.publish(\"disableActivities\", [], \"array\", \"Disabled pipeline items\");\n\nPipelineSplitPanel.prototype.publishProxy(\"disableActivities\", \"_rhsPropsPanel\");","import { JSEditor, JSONEditor } from \"@hpcc-js/codemirror\";\nimport { Button, PropertyExt, Utility, Widget } from \"@hpcc-js/common\";\nimport { DDL1, DDL2, ddl2Schema, isDDL2Schema, upgrade } from \"@hpcc-js/ddl-shim\";\nimport { Graph } from \"@hpcc-js/graph\";\nimport { ChartPanel } from \"@hpcc-js/layout\";\nimport { CommandPalette, CommandRegistry, ContextMenu, SplitPanel, TabPanel, WidgetAdapter } from \"@hpcc-js/phosphor\";\nimport { scopedLogger } from \"@hpcc-js/util\";\nimport { Activity } from \"./ddl2/activities/activity.ts\";\nimport { Databomb } from \"./ddl2/activities/databomb.ts\";\nimport { DSPicker } from \"./ddl2/activities/dspicker.ts\";\nimport { Dashboard } from \"./ddl2/dashboard.ts\";\nimport { DSTable } from \"./ddl2/dsTable.ts\";\nimport { DVTable } from \"./ddl2/dvTable.ts\";\nimport { GraphAdapter, VertexData } from \"./ddl2/graphadapter.ts\";\nimport { Element, ElementContainer, State } from \"./ddl2/model/element.ts\";\nimport { Visualization } from \"./ddl2/model/visualization.ts\";\nimport { VizChartPanel } from \"./ddl2/model/vizChartPanel.ts\";\nimport { PipelineSplitPanel } from \"./ddl2/pipelinePanel.ts\";\n\nconst logger = scopedLogger(\"marshaller/dashy\");\n\nimport \"../src/dashy.css\";\n\nexport type FocusType = Element | Activity | Visualization | VizChartPanel | State | undefined;\n\nclass DDLPreview extends ChartPanel {\n\n private _save = new Button().faChar(\"fa-save\").tooltip(\"Save\")\n .on(\"click\", () => {\n const obj = JSON.parse(this._jsonEditor.text());\n this._dashy.importDDL(obj);\n this.updateToolbar();\n });\n\n private _reset = new Button().faChar(\"fa-undo\").tooltip(\"Reset\")\n .on(\"click\", () => {\n this._jsonEditor\n .text(this._ddl)\n .lazyRender()\n ;\n this.updateToolbar();\n });\n\n private _jsonEditor = new JSONEditor()\n .on(\"changes\", (changes: object[]) => {\n this.updateToolbar();\n });\n\n constructor(private _dashy: Dashy) {\n super();\n this._titleBar.buttons([this._save, this._reset]);\n this.widget(this._jsonEditor);\n }\n\n private _ddl;\n ddl(_: DDL2.Schema): this {\n this._ddl = JSON.stringify(_, undefined, 4);\n return this;\n }\n\n private _prevJson: string;\n update(domNode, element) {\n super.update(domNode, element);\n if (this._prevJson !== this._ddl) {\n this._prevJson = this._ddl;\n this._jsonEditor.text(this._ddl);\n }\n this.updateToolbar();\n }\n\n updateToolbar() {\n const editorJson = this._jsonEditor.text();\n this._save.enabled(this._ddl !== editorJson).lazyRender();\n this._reset.enabled(this._ddl !== editorJson).lazyRender();\n }\n}\n\nexport class Dashy extends SplitPanel {\n\n private _elementContainer: ElementContainer = new ElementContainer();\n\n private _lhsSheet = new TabPanel();\n private _lhsDashboard: Dashboard = new Dashboard(this._elementContainer)\n .on(\"vizActivation\", (elem: Element, wa: WidgetAdapter) => {\n this.focus(this._lhsDashboard, elem);\n })\n .on(\"vizStateChanged\", (elem: Element) => {\n for (const filteredViz of this._elementContainer.filteredBy(elem.id())) {\n if (this.focus() === filteredViz) {\n this._rhsSplitView.refreshPreview();\n }\n }\n })\n ;\n private _lhsDataviews: DVTable = new DVTable(this._elementContainer)\n .on(\"click\", (row: any, col: string, sel: boolean, ext: any) => {\n this.focus(this._lhsDataviews, row.__lparam);\n this._rhsSplitView.refreshPreview();\n })\n ;\n private _lhsDatasources: DSTable = new DSTable(this._elementContainer)\n .on(\"click\", (row: any, col: string, sel: boolean, ext: any) => {\n this.focus(this._lhsDatasources, row.__lparam);\n this._rhsSplitView.refreshPreview();\n })\n ;\n private _graphAdapter = new GraphAdapter(this._elementContainer);\n private _lhsPipeline: Graph = new Graph()\n .layout(\"Hierarchy\")\n .allowDragging(false)\n .applyScaleOnLayout(true)\n .on(\"vertex_click\", (row: any, col: string, sel: boolean, ext: any) => {\n const obj: VertexData = row.__lparam[0] || {};\n this.focus(this._lhsPipeline, obj.state || obj.chartPanel || obj.visualization || obj.activity || obj.view);\n })\n .on(\"vertex_contextmenu\", (row: any, col: string, sel: boolean, ext: any) => {\n })\n ;\n private _lhsDebugSheet = new TabPanel();\n private _lhsDebugDDLEditor = new DDLPreview(this);\n private _lhsDebugDDLSchema = new JSONEditor().json(ddl2Schema);\n private _lhsDebugJSEditor = new JSEditor();\n private _lhsDebugCloneEC: ElementContainer = new ElementContainer();\n private _lhsDebugClone: Dashboard = new Dashboard(this._lhsDebugCloneEC).hideSingleTabs(true).titleVisible(false);\n private _lhsDebugDDLv1 = new JSONEditor();\n private _lhsDebugDDLv2 = new JSONEditor();\n\n private _rhsSplitView = new PipelineSplitPanel();\n\n private _fileOpen;\n\n static create(target: string, ddl?: DDL1.DDLSchema | DDL2.Schema, baseUrl?: string, wuid?: string): Promise<Dashy> {\n return new Promise((resolve, reject) => {\n const dashy = new Dashy()\n .target(target)\n .render((w: Dashy) => {\n if (ddl) {\n w.importDDL(ddl, baseUrl, wuid).then(() => {\n resolve(dashy);\n });\n } else {\n resolve(dashy);\n }\n });\n });\n }\n\n constructor() {\n super(\"horizontal\");\n }\n\n elementContainer(): ElementContainer {\n return this._elementContainer;\n }\n\n clear(): Promise<void> {\n this._lhsDebugSheet.removeWidget(this._lhsDebugDDLv1);\n this._lhsDebugSheet.removeWidget(this._lhsDebugDDLv2);\n this._elementContainer.clear();\n this._graphAdapter.clear();\n this.focus(this._lhsDashboard, undefined);\n return this.loadDashboard().then(() => {\n return this._elementContainer.refresh();\n }).then(ec => {\n return;\n });\n }\n\n save(): DDL2.Schema {\n return this._lhsDashboard.save();\n }\n\n serializeDDL(): string {\n return JSON.stringify(this.save());\n }\n\n deserializeDDL(json: string): Promise<void> {\n return this.restore(JSON.parse(json) as DDL2.Schema);\n }\n\n restore(json: DDL2.Schema): Promise<void> {\n this._lhsSheet.active(this._lhsDashboard);\n return this.clear().then(() => {\n this._lhsDashboard.restore(json);\n this._lhsDataviews.render();\n this._lhsDatasources.render();\n return this._lhsDashboard.renderPromise().then(() => {\n const elements = this._elementContainer.elements();\n if (elements.length) {\n this._lhsDashboard.activate(elements[0]);\n }\n return this._elementContainer.refresh();\n }).then(() => {\n let hasError = false;\n for (const error of this._elementContainer.validate()) {\n hasError = true;\n logger.warning(error.elementID + \" (\" + error.source + \"): \" + error.msg);\n }\n if (hasError) {\n // Re-render to highlight errrors ---\n this._lhsDashboard.renderPromise();\n }\n });\n });\n }\n\n importDDL(ddl: DDL1.DDLSchema | DDL2.Schema, baseUrl?: string, wuid?: string, dermatologyJson: object = {}): Promise<void> {\n const ddl2: DDL2.Schema = isDDL2Schema(ddl) ? ddl : upgrade(ddl, baseUrl, wuid, true, dermatologyJson);\n const retVal = this.restore(ddl2);\n if (isDDL2Schema(ddl)) {\n this._lhsDebugDDLv2.json(ddl2);\n this._lhsDebugSheet\n .addWidget(this._lhsDebugDDLv2, \"orig v2\")\n ;\n } else {\n this._lhsDebugDDLv1.json(ddl);\n this._lhsDebugDDLv2.json(ddl2);\n this._lhsDebugSheet\n .addWidget(this._lhsDebugDDLv1, \"v1\")\n .addWidget(this._lhsDebugDDLv2, \"v1 -> v2\")\n ;\n }\n return retVal;\n }\n\n activeLHS(): Widget {\n let retVal = this._lhsSheet.active();\n if (retVal === this._lhsDebugSheet) {\n retVal = this._lhsDebugSheet.active();\n }\n return retVal;\n }\n\n activeRHS(): Widget {\n return this._rhsSplitView;\n }\n\n private _currSelection: { [sourceID: string]: FocusType } = {};\n\n private focusAsElement(): Element | undefined {\n const currSelection = this.focus();\n return currSelection instanceof Element ? currSelection : undefined;\n }\n\n private focus(): FocusType;\n private focus(source: Widget, item: FocusType): this;\n private focus(source?: Widget, item?: FocusType): FocusType | this {\n if (!arguments.length) return this._currSelection[this.activeLHS().id()];\n if (this._currSelection[source.id()] !== item) {\n this._currSelection[source.id()] = item;\n this.loadRHSSplit();\n }\n return this;\n }\n\n loadRHSSplit() {\n this._rhsSplitView.loadDataProps(this.focus());\n }\n\n loadDataviews(): Promise<Widget | undefined> {\n if (this.activeLHS() === this._lhsDataviews) {\n return this._lhsDataviews.renderPromise();\n }\n return Promise.resolve(undefined);\n }\n\n loadDatasources(): Promise<Widget | undefined> {\n if (this.activeLHS() === this._lhsDatasources) {\n return this._lhsDatasources.renderPromise();\n }\n return Promise.resolve(undefined);\n }\n\n loadDashboard(): Promise<Widget | undefined> {\n if (this.activeLHS() === this._lhsDashboard) {\n this._elementContainer.validate();\n return this._lhsDashboard.renderPromise();\n }\n return Promise.resolve(undefined);\n }\n\n loadGraph() {\n this._lhsPipeline\n .data({ ...this._graphAdapter.createGraph() }, true)\n ;\n if (this.activeLHS() === this._lhsPipeline) {\n this._lhsPipeline\n .lazyRender()\n ;\n }\n }\n\n loadDDL() {\n this._lhsDebugDDLEditor\n .ddl(this._lhsDashboard.ddl())\n ;\n if (this.activeLHS() === this._lhsDebugDDLEditor) {\n this._lhsDebugDDLEditor\n .lazyRender()\n ;\n }\n }\n\n loadJavaScript() {\n this._lhsDebugJSEditor\n .javascript(this._lhsDashboard.javascript())\n ;\n if (this.activeLHS() === this._lhsDebugJSEditor) {\n this._lhsDebugJSEditor\n .lazyRender()\n ;\n }\n }\n\n loadClone() {\n const json = this.save();\n this._lhsDebugCloneEC.clear();\n this._lhsDebugClone.renderPromise().then(() => {\n this._lhsDebugClone.restore(json);\n this._lhsDebugClone.renderPromise().then(() => {\n return this._lhsDebugCloneEC.refresh();\n }).then(() => {\n for (const error of this._lhsDebugCloneEC.validate()) {\n logger.warning(error.elementID + \" (\" + error.source + \"): \" + error.msg);\n }\n });\n });\n }\n\n initMenu() {\n const commands = new CommandRegistry();\n\n // Dashboard Commands ---\n commands.addCommand(\"dash_add\", {\n label: \"Add View\",\n execute: () => {\n const newElem = new Element(this._elementContainer);\n this._elementContainer.append(newElem);\n this.loadDashboard().then(() => {\n newElem.refresh().then(() => {\n this._lhsDashboard.activate(newElem);\n });\n });\n }\n });\n\n commands.addCommand(\"dash_clear\", {\n label: \"Clear\",\n execute: () => {\n this.clear();\n }\n });\n\n commands.addCommand(\"dash_save\", {\n label: \"Save\",\n execute: () => {\n const text = JSON.stringify(this.save(), null, \" \");\n Utility.downloadString(\"JSON\", text, \"dashy\");\n }\n });\n\n commands.addCommand(\"dash_load\", {\n label: \"Open\",\n execute: () => {\n this._fileOpen.property(\"accept\", \".dashy,.json\");\n this._fileOpen.node().click();\n }\n });\n\n // Model Commands ---\n const palette = new CommandPalette({ commands });\n palette.addItem({ command: \"addWUResult\", category: \"Notebook\" });\n palette.addItem({ command: \"addView\", category: \"Notebook\" });\n palette.addItem({ command: \"remove\", category: \"Notebook\" });\n palette.id = \"palette\";\n\n const contextMenu = new ContextMenu({ commands });\n\n contextMenu.addItem({ command: \"dash_add\", selector: `#${this._lhsDashboard.id()}` });\n contextMenu.addItem({ command: \"dash_clear\", selector: `#${this._lhsDashboard.id()}` });\n contextMenu.addItem({ type: \"separator\", selector: `#${this._lhsDashboard.id()}` });\n\n contextMenu.addItem({ command: \"dash_load\", selector: `#${this.id()}` });\n contextMenu.addItem({ command: \"dash_save\", selector: `#${this.id()}` });\n\n document.addEventListener(\"contextmenu\", (event: MouseEvent) => {\n if (contextMenu.open(event)) {\n event.preventDefault();\n }\n });\n }\n\n addDatabomb(label: string, payload: string, format: \"csv\" | \"tsv\" | \"json\") {\n const databomb = new Databomb().id(label).format(format).payload(payload);\n this._elementContainer.appendDatasource(databomb);\n const newElem = new Element(this._elementContainer);\n const ds = newElem.hipiePipeline().datasource();\n if (ds instanceof DSPicker) {\n ds.datasourceID(databomb.id());\n }\n this._elementContainer.append(newElem);\n this.loadDashboard().then(() => {\n newElem.refresh().then(() => {\n this._lhsDashboard.activate(newElem);\n });\n });\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this\n .addWidget(this._lhsSheet)\n .addWidget(this._rhsSplitView)\n ;\n this._lhsSheet\n .addWidget(this._lhsDashboard, \"Dashboard\")\n .addWidget(this._lhsDataviews, \"Dataviews\")\n .addWidget(this._lhsDatasources, \"Datasources\")\n .addWidget(this._lhsPipeline, \"Pipeline\")\n .addWidget(this._lhsDebugSheet, \"Debug\")\n .on(\"childActivation\", (w: Widget) => {\n switch (w) {\n case this._lhsDataviews:\n this.loadRHSSplit();\n break;\n case this._lhsDatasources:\n this.loadRHSSplit();\n break;\n case this._lhsDashboard:\n this.loadRHSSplit();\n break;\n case this._lhsPipeline:\n this.loadRHSSplit();\n this.loadGraph();\n break;\n case this._lhsDebugSheet:\n const w = this._lhsDebugSheet.active();\n const wa = this._lhsDebugSheet.getWidgetAdapter(w);\n this._lhsDebugSheet.childActivation(w, wa);\n break;\n }\n })\n ;\n this._lhsDebugSheet\n .addWidget(this._lhsDebugDDLEditor, \"v2\")\n .addWidget(this._lhsDebugDDLSchema, \"Schema\")\n .addWidget(this._lhsDebugJSEditor, \"TS\")\n .addWidget(this._lhsDebugClone, \"Clone\")\n .on(\"childActivation\", (w: Widget) => {\n switch (w) {\n case this._lhsDebugDDLEditor:\n this.loadRHSSplit();\n this.loadDDL();\n break;\n case this._lhsDebugJSEditor:\n this.loadRHSSplit();\n this.loadJavaScript();\n break;\n case this._lhsDebugClone:\n this.loadClone();\n break;\n }\n })\n ;\n\n this.initMenu();\n this._rhsSplitView.on(\"propChanged\", (id: string, newValue: any, oldValue: any, source: PropertyExt) => {\n const currElement = this.focusAsElement();\n if (currElement) {\n currElement.refresh().then(() => {\n this._rhsSplitView.refreshPreview();\n });\n } else {\n this._rhsSplitView.refreshPreview();\n }\n switch (this.activeLHS()) {\n case this._lhsDashboard:\n this.loadDashboard();\n break;\n case this._lhsDatasources:\n this._elementContainer.refresh();\n break;\n case this._lhsPipeline:\n this.loadGraph();\n break;\n case this._lhsDebugDDLEditor:\n this.loadDDL();\n break;\n case this._lhsDebugClone:\n this.loadClone();\n break;\n }\n });\n\n const context = this;\n this._fileOpen = element.append(\"input\")\n .attr(\"type\", \"file\")\n .property(\"accept\", \".dashy,.json\")\n .style(\"display\", \"none\")\n .on(\"change\", function () {\n const i = 0;\n const f = this.files[i];\n while (f) {\n const reader = new FileReader();\n reader.onload = (function (theFile) {\n return function (e) {\n try {\n const result = Array.isArray(e.target.result) ? e.target.result[0] : e.target.result;\n const json = JSON.parse(result);\n context.importDDL(json);\n } catch (ex) {\n alert(\"ex when trying to parse json = \" + ex);\n }\n };\n })(f);\n reader.readAsText(f);\n break;\n }\n })\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n }\n}\nDashy.prototype._class += \" composite_Dashy\";\n\nexport interface Dashy {\n disableActivities(): string[];\n disableActivities(_: string[]): this;\n}\nDashy.prototype.publishProxy(\"disableActivities\", \"_rhsSplitView\");"],"x_google_ignoreList":[20],"mappings":"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"}