@hpcc-js/marshaller 3.2.2 → 3.2.3

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","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.dataPath, 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\");"],"names":["PKG_NAME","PKG_VERSION","BUILD_VERSION","stringify","obj_from_json","Array","isArray","map","join","JSON","Object","keys","key","schemaType2IFieldType","type","schemaRow2IField","row","_children","length","id","name","children","wsEclSchemaRow2IField","__name","_Activity","PropertyExt","_sourceActivity","fixInt64","data","int64Fields","this","outFields","filter","field","int64Field","sourceActivity","_","arguments","hash","more","hashSum","refreshMeta","Promise","resolve","exists","validate","label","updatedBy","_emptyFields","inFields","computeFields","localFields","inFieldIDs","indexOf","fieldOrigin","fieldID","resolveFields","refs","fieldIDs","outputs","push","resolveInFields","referencedFields","exec","_emptyData","inData","outData","computeData","_prevDataHash","_prevInData","_prevData","cachedComputeData","update","Activity","_ActivityArray","_activities","activities","ActivityArray","prototype","_class","_ActivityPipeline","super","prevActivity","activity","first","last","retVal","calcUpdatedGraph","source","from","to","updatedByGraph","concat","fetch","count","Number","MAX_VALUE","then","slice","ActivityPipeline","_ActivitySelection","_selection","_monitorHandle","selection","remove","monitor","newVal","oldVal","broadcast","ActivitySelection","datasourceID","_Datasource","constructor","_id","Datasource","_DatasourceRef","_origDatasource","datasource","_datasource","toDDL","DatasourceRef","publish","internal","apply","_FormField","_owner","disableChildField","default","childFields","cf","fromDDL","ddl","owner","valid","coerceFunc","cell","calcValue","value_exists","value","FormField","_Form","fields","validFields","f","skipID","formFields","forEach","total","Form","fieldType","rowToFields","_jsonData","found","_childKey","rowFields","rf","optional","autoExpand","disable","w","_Databomb","skipPayload","format","payload","databombFields","updateJsonData","d3CsvParse","d3TsvParse","parse","preCalcFields","e","coarceFuncMap","Databomb","multiline","payloadFormat","databombPayloadOrig","emptyDatabomb","_DatasourceAdapt","_activity","DatasourceAdapt","_ESPResult","_ec","samples","sampleSize","_result","_schema","_meta","_total","_data","_prevMetaHash","refreshMetaPromise","_createResult","refresh","Error","result","Total","catch","responseFields","_exec","_prevExecHash","debounce","sample","response","_fetch","_fetchQ","AsyncOrderedQueue","fetchRows","pages","lastPage","i","Math","floor","all","responses","retVal2","ESPResult","_WUResult","_origWu","_origResultName","_wu","WU","url","wuid","resultName","ec","wu","Result","attach","baseUrl","hookSend","sourceHash","WUResult","_WU","_origUrl","_origWuid","_workunit","_outputs","ddlOutputs","wuResults","elementContainer","outputDDL","output","_prevSourceHash","_resultNames","Workunit","fetchResults","results","r","Name","resultNames","_WUResultRef","WUResultRef","prev","_resultName","_LogicalFile","logicalFile","attachLogicalFile","nodeGroup","LogicalFile","_RestField","RestField","_RestService","_responseFields","action","mode","inputs","validRequestFields","requestFields","_prevRequestHash","_prevPromise","_submitQ","submit","request","requestHash","conn","createConnection","send","RestService","_RestResult","_service","_origService","service","rs","serviceID","jsonDataFields","resultFields","split","formatRequest","RestResult","_Param","prefix","source_valid","msg","hint","visualizationIDs","remoteField_valid","remoteField","sourceOutFields","value_valid","remoteFieldID","localFieldID","localField","sourceField","elementIDs","sourceFields","sourceViz","element","hipiePipeline","selectionFields","sourceSelection","source_exists","remoteField_exists","localField_exists","Param","_RestResultRef","validParams","vp","requestFieldRefs","fc","param","filterSource","oldParams","diffs","compare","p","ff","newParams","op","enter","_prevRequestPromise","RestResultRef","parseUrl","parts","urlParts","roxieParts","querySet","queryID","isHipieRequest","requestField","isHipieResponse","source_disabled","remoteField_disabled","value_disabled","_RoxieService","_query","_requestFields","_type","queryId","ignoreHipieRequest","ignoreHipieResponse","hasMeta","reject","query","CommsQuery","RoxieService","_RoxieResult","RoxieResult","_RoxieResultRef","params","localFieldIDs","hasRequest","_value","Item","toLowerCase","replace","RoxieResultRef","_HipieResultRef","fullUrl","info","_request","HipieResultRef","dsPickerID","_DSPicker","ds","datasources","_nullDatasource","_origDatasourceID","_origDatasourceRef","datasourceRef","refreshRef","_datasourceID","datasourceIDs","text","DSPicker","createFilter","condition","lf","val","isString","localRow","trim","_ColumnMapping","localField_valid","nullable","remoteValues","filterSelection","sel","createFilterDescription","fsArr","some","fs","fs0","ColumnMapping","_RemoteFilter","validMappings","mapping","viewID","mappings","ddlMappings","appendMappings","visualization","mappingFilters","every","mappingFilter","RemoteFilter","_StaticFilter","coerceValue","valueType","StaticFilter","_Filters","validFilters","conditions","remoteFilters","staticFilters","DDL2","isIFilterCondition","remoteFilter","staticFilter","sourceID","validRemoteFilters","remoteFieldIDs","filters","validStaticFilters","__publicField","Filters","_GroupByColumn","label_valid","columns","GroupByColumn","localCount","leaves","callback","d3Aggr","min","d3Min","max","d3Max","mean","d3Mean","median","d3Median","variance","d3Variance","deviation","d3Deviation","sum","d3Sum","_AggregateField","disableAggrColumn","aggrType","disableBaseCountColumn","aggrColumn_valid","aggrColumn","baseCountColumn_valid","baseCountColumn","inFieldID","baseCountFieldID","hasColumn","aggregate","values","leaf","aggrFunc","AggregateField","_GroupBy","gbColumn","validGroupBy","cfs","validComputedFields","groupByIDs","aggregates","column","gb","computedFields","groupBy","appendGroupBys","appendComputedFields","aggregateFields","aggregateField","aggrField","computedField","hasComputedFields","groups","groupByField","details","detailsTarget","rows","fullDetails","columnLabels","d3Nest","groupByLabel","entries","_row","GroupBy","_Limit","limit","rows_exists","Limit","_ComputedMapping","newValue_valid","newValue","ComputedMapping","_ComputedField","disableColumn1","disableColumn2","disableMapping","hasChildren","column1_valid","column1","column2_valid","column2","validComputedMappings","cm","validChildFields","childField","hasChildFields","sourceFieldID","factor","constValue","template","transformations","sourceFieldID1","sourceFieldID2","transformation","child","projection","func","computeFunc","Row","Utility","defValue","ComputedField","_MultiField","validMultiFields","multiFields","MultiField","_ProjectBase","_includeLParam","_trim","classID","clearComputedFields","retValMap","cf2","templateFields","ProjectBase","_Project","Project","_Mappings","_ddl","Mappings","_SortColumn","fieldID_valid","descending","sortColumn","SortColumn","_Sort","sb","validSortBy","Sort","sortBy","sortByArr","d3Descending","d3Ascending","sort","l","item","_HipiePipeline","_filters","_project","_groupBy","_sort","_limit","updateSequence","_origFilters","_origProject","_origGroupBy","_origSort","_origLimit","project","HipiePipeline","wrapHipiePipelineProperty","prop","origKey","charAt","toUpperCase","_NullView","NullView","_VizPopupPanel","Modal","_ownerLParam","ownerLParam","_drawStartPos","visible","minHeight_default","minWidth_default","overflowY_default","_host","host","_togglePopup","selected","render","vizActivation","domNode","parentElement","style","position","widgetTitle","widget","title","titleVisible","fixedTop","_pos","y","fixedLeft","x","exit","closeModal","VizPopupPanel","_VizChartPanel","ChartPanel","_popup","ToggleButton","faChar","tooltip","on","dpBBox","locateClosestAncestor","getBBox","cp","tbBBox","pos","width","minWidth","height","resize","minHeight","popup","widgetSelector","node","querySelector","getBoundingClientRect","resizeBodySync","_origButtons","_filterButtons","buttons","Spacer","VizChartPanel","VizTypeMap","Table","FieldForm","Area","Bubble","Bar","Column","Contour","HexBin","Line","Pie","Radar","RadialBar","Scatter","Step","WordCloud","USCountiesChoropleth","ChoroplethCounties","USStatesChoropleth","ChoroplethStates","ClusterPins","Leaflet","EntityRectList","AdjacencyGraph","DataGraph","VizTypeSet","typeClass","typeNew","allowEmptyRequest","uidColumn","labelColumn","iconColumn","linksColumn","linkUidColumn","linkLabelColumn","typeInputs","__inputs","_Visualization","_hipiePipeline","chartPanel","typeChanged","_origVisibility","_origChartType","_origChartPanel","_prevChartType","_chartType","refreshMappings","chart","properties","deserialize","serialize","taken","input","idx","multi","inField","_prevFields","_prevLinkFields","refreshData","dbFields","toDBFields","linkFields","dbLinkFields","se","secondaryDataviewID","fieldsChanged","chartType","dataGraph","vertexColumns","edgeColumns","console","warn","dataChanged","mappedData","toDBData","vertices","linkData","mappedLinkData","edges","renderPromise","fieldTypeTodbFieldType","Database","Field","promises","secondaryDataviewID_exists","secondaryElementID","secondaryElement","startProgress","finishProgress","click","col","vertex_click","Visualization","publishProxy","VisibilitySet","visibility","_visibility","target","props","_chartPanel","_State","set","removeInvalid","currSelection","newSelection","selRow","find","index","State","vizID","_Element","elementExists","view","_vizChartPanel","state","_origVisualization","pipeline","dataProps","vizProps","stateProps","_errors","errors","_initialized","error","elementID","desc","description","selectionChanged","filteredViz","filteredBy","vizStateChanged","Element","_visualization","__lparam","_ElementContainer","_nullElement","_datasources","_elements","clear","eid","d","_hookSend","appendDatasource","removeDatasource","elements","viz","v","append","elemID","otherViz","views","normalizePersist","seri","ret","__properties","content","n","_is_MegaChart","_cell","_panel","_widget","__id","package","__class","object","_get_params","panel","_o","exclude_list","elem","ElementContainer","responseText","ok","status","statusText","d3Text","init","_PopupManager","Widget","_popups","_popupIdx","popupPanels","popupChartPanels","addPopup","targetNode","pp","relativeTargetId","size","monitorHandle","otherElem","removePopup","syncPopups","prevPopups","diffPopups","PopupManager","_DashboardDockPanel","DockPanel","tabTitle","hideSingleTabs","titleClassed","wa","include","classes","className","c","updateTitle","getWidgetAdapter","caption","err","activate","syncMinSize","minWidth_exists","minHeight_exists","d3Select","syncWidgets","prevWidgets","widgets","diffWidgets","refit","removeWidget","addWidget","childActivation","wa2","widgetAdapters","addClass","iconClass","removeClass","canClose","window","confirm","DashboardDockPanel","mixin","_DashboardGrid","Grid","designMode","surfacePadding","surfaceBorderWidth","_layoutCache","updateGrid","transitionDuration","_noRender","cellWidget","gridCol","gridRow","gridColSpan","gridRowSpan","layoutObj","main","convertedLayout","ddl2_layout","layoutObject","cols","dive","o","h","orientation","_w","sizes","_h","_x","_y","round","layout","getWidgetCell","clearContent","no_layout_added","setContent","freeRow","reduce","curr","postSelectionChange","_selectionBag","get","DashboardGrid","logger","scopedLogger","_DDLDatasourceAdapter","_dsDedup","dsT","_resolveID","resolveID","dsRef","pDS","refType","ref","dsTID","dsID","getAll","key2","ddl2","inElementID","outputID","DDLDatasourceAdapter","_DDLAdapter","_dashboard","_dsWriteDedup","_dsReadDedup","dashboard","writeDatasources","writeFilters","readFilters","ddlFilter","writeProject","readProject","ddlProject","writeMappings","readMappings","writeGroupBy","readGroupBy","ddlGB","writeSort","readSort","ddlSort","writeLimit","readLimit","ddlLimit","readDatasourceRef","ddlDSRef","dsPicker","isWUResultRef","isRoxieServiceRef","writeActivities","warning","writeVisualization","readVisualization","ddlViz","writeViewDatasource","writeDDLViews","refFields","writeProperties","version","buildVersion","readDDLViews","ddlViews","ddlView","isProjectActivity","isFilterActivity","isGroupByActivity","isSortActivity","isLimitActivity","readProperties","write","createdBy","dataviews","hipieProperties","hipieProps","read","ddlDS","rs2","DDLAdapter","_Imports","_moduleMap","widgetMeta","module","class","importJS","moduleID","classIDs","Imports","createProps","pe","meta","publishedProperties","serialization","_JavaScriptAdapter","_ddlAdapter","_ddlSchema","postfix","ext","writeMeta","dsDetails","safeID","datasourceRefID","_dedup","writeDatasource","wuID","resultID","fromFields","writeActivity","writeWidgetProps","joinWithPrefix","imports","joinStr","postFix","classID2Meta","arr","writeWidget","dataview","writeElement","updates","writeWidgets","jsDef","widgetImports","widgetDefs","writeElements","createJavaScript","JavaScriptAdapter","_Dashboard","_designModeButton","_addButton","_removeButton","_reloadButton","_addSamples","ensureDockPanel","_dockPanel","lazyRender","Button","newElem","enabled","_prevActive","json","save","restore","airports","carriers","stats","popupElement","addForm","airportsElement","addDatabomb","Filter","Mapping","carrierElement","statsElement","databomb","create","_hipieProps","ddlAdapter","serializeDDL","deserializeDDL","importDDL","dermatologyJson","isDDL2Schema","upgrade","javascript","updateButtonState","Dashboard","_DDLEditor","SplitPanel","summary","_ddlEditor","JSONEditor","changes","checkSyntax","_errorTable","success","validate2","dataPath","keyword","message","_renderCount","_element","DDLEditor","_GraphAdapter","subgraphMap","vertexMap","edgeMap","hierarchy","createSubgraph","Subgraph","createVertex","fillColor","Vertex","icon_diameter","textbox_shape_colorFill","createEdge","targetID","edgeID","Edge","sourceVertex","targetVertex","createDatasource","serverID","server","parent","lfID","surfaceID","surface","roxieID","roxieResultID","querySetID","actionID","createActivity","vertex","createGraph","lastID","prevID","mappingVertexID","vizSubgraphID","vizVertexID","widgetVertex","stateVertexID","stateVertex","weight","strokeDasharray","updateInfo","GraphAdapter","_DSTable","_cloneButton","_dstable","_selectedDS2","References","ID","_selectedDS","initMenu","rect","_contextMenu","open","currentTarget","clientX","left","clientY","bottom","add","csv","vmRoxie","commands","CommandRegistry","addCommand","execute","ContextMenu","addItem","command","selector","_prevDataID","dataID","DSTable","_DVTable","_dvtable","DVTable","_PipelineSelectionButton","SelectionButton","_label","_elementErrors","classed","errSourceParts","splice","PipelineSelectionButton","_PipelinePanel","debug","_propEditor","PropertyEditor","show_header","show_settings","showFields","_buttons","_pipelineButton","_pipelineSelection","SelectionBar","oldValue","propChanged","updateState","selectionButtons","b","_propExt","propExt","peAsDatasource","ModelElement","peAsFilter","peAsProject","peAsGroupBy","peAsSort","peAsLimit","peAsMappings","peAsChartPanel","peAsState","selectionButton","pb","_prevPropExt","_prevPipelineButton","pipelineButton","loadPreview","disableActivities","st","PipelinePanel","_a","_save","_jsonEditor","updateToolbar","_reset","jsonText","_titleBar","_prevJson","editorJson","_PipelineSplitPanel","_rhsPropsPanel","_previewPanel","TabPanel","_rhsDDLPreview","DDLPreview","_rhsDataPreview","DatasourceTable","pagination","loadDataProps","refreshPreview","invalidate","PipelineSplitPanel","_DDLPreview","_dashy","obj","_Dashy","_elementContainer","_lhsSheet","_lhsDashboard","focus","_rhsSplitView","_lhsDataviews","_lhsDatasources","_graphAdapter","_lhsPipeline","Graph","allowDragging","applyScaleOnLayout","_lhsDebugSheet","_lhsDebugDDLEditor","_lhsDebugDDLSchema","ddl2Schema","_lhsDebugJSEditor","JSEditor","_lhsDebugCloneEC","_lhsDebugClone","_lhsDebugDDLv1","_lhsDebugDDLv2","_fileOpen","dashy","loadDashboard","active","hasError","activeLHS","activeRHS","_currSelection","focusAsElement","loadRHSSplit","loadDataviews","loadDatasources","loadGraph","loadDDL","loadJavaScript","loadClone","downloadString","property","palette","CommandPalette","category","contextMenu","document","addEventListener","event","preventDefault","currElement","context","attr","files","reader","FileReader","onload","ex","alert","readAsText","Dashy"],"mappings":"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","x_google_ignoreList":[20]}
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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"}