@datagrok-libraries/utils 0.1.2 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +39 -0
- package/package.json +12 -4
- package/src/array-utils.d.ts.map +1 -1
- package/src/array-utils.js +2 -3
- package/src/bit-array.d.ts.map +1 -1
- package/src/bit-array.js +57 -112
- package/src/computation-view.d.ts +70 -0
- package/src/computation-view.d.ts.map +1 -0
- package/src/computation-view.js +135 -0
- package/src/function-view.d.ts +37 -0
- package/src/function-view.d.ts.map +1 -0
- package/src/function-view.js +271 -0
- package/src/random.d.ts.map +1 -1
- package/src/random.js +1 -1
- package/src/similarity-metrics.d.ts +3 -70
- package/src/similarity-metrics.d.ts.map +1 -1
- package/src/similarity-metrics.js +21 -80
- package/src/test.d.ts +1 -0
- package/src/test.d.ts.map +1 -1
- package/src/test.js +2 -1
- package/src/type-declarations.d.ts.map +1 -1
- package/src/type-declarations.js +1 -1
- package/src/vector-operations.d.ts +0 -2
- package/src/vector-operations.d.ts.map +1 -1
- package/src/vector-operations.js +19 -29
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import * as rxjs from 'rxjs';
|
|
2
|
+
import * as DG from 'datagrok-api/dg';
|
|
3
|
+
import { FuncCall } from 'datagrok-api/dg';
|
|
4
|
+
import { FunctionView } from './function-view';
|
|
5
|
+
/**
|
|
6
|
+
* Base class for handling Compute models (see https://github.com/datagrok-ai/public/blob/master/help/compute/compute.md).
|
|
7
|
+
* In most cases, the computation is a simple {@link Func}
|
|
8
|
+
* Extend it in cases where a behavior or UI not supported by the {@link FunctionView} is needed.
|
|
9
|
+
*
|
|
10
|
+
* It provides the following functionality out-of-the-box, where each section could be customized:
|
|
11
|
+
* - a structured way to represent input and output parameters: {@link parameters}
|
|
12
|
+
* - generic way to generate UI for inputs, outputs, and interactivity (running the model, etc)
|
|
13
|
+
* - persisting historical results to the db (via {@link parameters})
|
|
14
|
+
* - export (to Excel and PDF): {@link export}
|
|
15
|
+
* - easy loading of historical runs
|
|
16
|
+
* - routing
|
|
17
|
+
* - entering the real, measured (as opposed to predicted) values manually
|
|
18
|
+
* - notifications for changing inputs, completion of computations, etc: {@link onInputChanged}
|
|
19
|
+
* */
|
|
20
|
+
export declare class ComputationView extends FunctionView {
|
|
21
|
+
lastCall?: DG.FuncCall;
|
|
22
|
+
_inputFields: Map<string, DG.InputBase>;
|
|
23
|
+
onViewInitialized: rxjs.Subject<void>;
|
|
24
|
+
onInputChanged: rxjs.Subject<void>;
|
|
25
|
+
onComputationStarted: rxjs.Subject<FuncCall>;
|
|
26
|
+
onComputationCompleted: rxjs.Subject<FuncCall>;
|
|
27
|
+
onComputationSucceeded: rxjs.Subject<FuncCall>;
|
|
28
|
+
onComputationError: rxjs.Subject<FuncCall>;
|
|
29
|
+
constructor(func: DG.Func);
|
|
30
|
+
/** All inputs that are bound to fields */
|
|
31
|
+
get inputFields(): Map<string, DG.InputBase>;
|
|
32
|
+
/** Saves the computation results to the historical results, returns its id. See also {@link loadRun}. */
|
|
33
|
+
saveRun(call: FuncCall): Promise<string>;
|
|
34
|
+
/** Loads the specified historical results. See also {@link saveRun}. */
|
|
35
|
+
loadRun(runId: string): Promise<void>;
|
|
36
|
+
/** The actual computation function. */
|
|
37
|
+
compute(call: FuncCall): Promise<void>;
|
|
38
|
+
/** Maps inputs to parameters, computes, and maps output parameters to the UI. */
|
|
39
|
+
run(): Promise<void>;
|
|
40
|
+
/** Override to provide custom initialization. {@link onViewInitialized} gets fired after that. */
|
|
41
|
+
init(func: DG.Func): Promise<void>;
|
|
42
|
+
/** Override to customize top menu*/
|
|
43
|
+
initTopMenu(menu: DG.Menu): void;
|
|
44
|
+
/** Override to customize ribbon panels */
|
|
45
|
+
initRibbonPanels(): void;
|
|
46
|
+
/** Builds the complete view. Override it if completely custom implementation is needed,
|
|
47
|
+
* otherwise consider overriding {@link buildInputBlock} and/or {@link buildOutputBlock} */
|
|
48
|
+
build(): HTMLElement;
|
|
49
|
+
/** Override to build completely custom input block (the one with inputs, usually on the left).
|
|
50
|
+
* If only specific field, consider overriding {@link buildCustomInputs}. */
|
|
51
|
+
buildInputBlock(): HTMLElement;
|
|
52
|
+
/** Custom inputs for the specified fields. Inputs for these fields will not be created by {@link buildInputBlock}. */
|
|
53
|
+
buildCustomInputs(): Map<String, DG.InputBase>;
|
|
54
|
+
/** Override to create output block. */
|
|
55
|
+
buildOutputBlock(): HTMLElement;
|
|
56
|
+
/** Override to create a custom input control. */
|
|
57
|
+
buildRibbonPanel(): HTMLElement;
|
|
58
|
+
/** Creates function parameters based on the data entered by the user. */
|
|
59
|
+
inputFieldsToParameters(call: FuncCall): void;
|
|
60
|
+
/** Visualizes computation results */
|
|
61
|
+
outputParametersToView(call: FuncCall): void;
|
|
62
|
+
/** Override to provide custom computation error handling. */
|
|
63
|
+
processComputationError(call: FuncCall): void;
|
|
64
|
+
/** Override to provide supported export formats.
|
|
65
|
+
* These formats are available under the "Export" popup on the ribbon panel. */
|
|
66
|
+
get supportedExportFormats(): string[];
|
|
67
|
+
/** Override to provide custom export. */
|
|
68
|
+
export(format: string): Promise<Blob>;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=computation-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computation-view.d.ts","sourceRoot":"","sources":["computation-view.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAY,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;;;;;;KAcK;AACL,qBAAa,eAAgB,SAAQ,YAAY;IAE/C,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC;IACvB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,CAAmC;IAE1E,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAsB;IAC3D,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAsB;IACxD,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAsB;IAClE,sBAAsB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAsB;IACpE,sBAAsB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAsB;IACpE,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAsB;gBAEpD,IAAI,EAAE,EAAE,CAAC,IAAI;IAYzB,0CAA0C;IAC1C,IAAI,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,CAA8B;IAE1E,yGAAyG;IACnG,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAE9C,wEAAwE;IAClE,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAE3C,uCAAuC;IACjC,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAE5C,iFAAiF;IAC3E,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAc1B,kGAAkG;IAC5F,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAExC,oCAAoC;IACpC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;IAMzB,0CAA0C;IAC1C,gBAAgB;IAWhB;+FAC2F;IAC3F,KAAK,IAAI,WAAW;IAEpB;gFAC4E;IAC5E,eAAe,IAAI,WAAW;IAI9B,sHAAsH;IACtH,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC;IAE9C,uCAAuC;IACvC,gBAAgB,IAAI,WAAW;IAE/B,iDAAiD;IACjD,gBAAgB,IAAI,WAAW;IAK/B,yEAAyE;IACzE,uBAAuB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAE7C,qCAAqC;IACrC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAE5C,6DAA6D;IAC7D,uBAAuB,CAAC,IAAI,EAAE,QAAQ;IAEtC;mFAC+E;IAC/E,IAAI,sBAAsB,IAAI,MAAM,EAAE,CAAoC;IAE1E,yCAAyC;IACnC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAK5C"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
import * as grok from 'datagrok-api/grok';
|
|
12
|
+
import * as rxjs from 'rxjs';
|
|
13
|
+
import * as ui from 'datagrok-api/ui';
|
|
14
|
+
import * as DG from 'datagrok-api/dg';
|
|
15
|
+
import { FunctionView } from './function-view';
|
|
16
|
+
/**
|
|
17
|
+
* Base class for handling Compute models (see https://github.com/datagrok-ai/public/blob/master/help/compute/compute.md).
|
|
18
|
+
* In most cases, the computation is a simple {@link Func}
|
|
19
|
+
* Extend it in cases where a behavior or UI not supported by the {@link FunctionView} is needed.
|
|
20
|
+
*
|
|
21
|
+
* It provides the following functionality out-of-the-box, where each section could be customized:
|
|
22
|
+
* - a structured way to represent input and output parameters: {@link parameters}
|
|
23
|
+
* - generic way to generate UI for inputs, outputs, and interactivity (running the model, etc)
|
|
24
|
+
* - persisting historical results to the db (via {@link parameters})
|
|
25
|
+
* - export (to Excel and PDF): {@link export}
|
|
26
|
+
* - easy loading of historical runs
|
|
27
|
+
* - routing
|
|
28
|
+
* - entering the real, measured (as opposed to predicted) values manually
|
|
29
|
+
* - notifications for changing inputs, completion of computations, etc: {@link onInputChanged}
|
|
30
|
+
* */
|
|
31
|
+
export class ComputationView extends FunctionView {
|
|
32
|
+
constructor(func) {
|
|
33
|
+
super(func);
|
|
34
|
+
this._inputFields = new Map();
|
|
35
|
+
this.onViewInitialized = new rxjs.Subject();
|
|
36
|
+
this.onInputChanged = new rxjs.Subject();
|
|
37
|
+
this.onComputationStarted = new rxjs.Subject();
|
|
38
|
+
this.onComputationCompleted = new rxjs.Subject();
|
|
39
|
+
this.onComputationSucceeded = new rxjs.Subject();
|
|
40
|
+
this.onComputationError = new rxjs.Subject();
|
|
41
|
+
if (func != null)
|
|
42
|
+
this.init(func).then((_) => {
|
|
43
|
+
this.root.appendChild(this.build());
|
|
44
|
+
this.initTopMenu(this.ribbonMenu);
|
|
45
|
+
this.initRibbonPanels();
|
|
46
|
+
return this.onViewInitialized.next();
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/** All inputs that are bound to fields */
|
|
50
|
+
get inputFields() { return this._inputFields; }
|
|
51
|
+
/** Saves the computation results to the historical results, returns its id. See also {@link loadRun}. */
|
|
52
|
+
saveRun(call) {
|
|
53
|
+
return __awaiter(this, void 0, void 0, function* () { return 'xxx'; /* await grok.dapi.functions.calls.save(call);*/ });
|
|
54
|
+
}
|
|
55
|
+
/** Loads the specified historical results. See also {@link saveRun}. */
|
|
56
|
+
loadRun(runId) {
|
|
57
|
+
return __awaiter(this, void 0, void 0, function* () { });
|
|
58
|
+
}
|
|
59
|
+
/** The actual computation function. */
|
|
60
|
+
compute(call) {
|
|
61
|
+
return __awaiter(this, void 0, void 0, function* () { yield call.call(); });
|
|
62
|
+
}
|
|
63
|
+
/** Maps inputs to parameters, computes, and maps output parameters to the UI. */
|
|
64
|
+
run() {
|
|
65
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
66
|
+
this.lastCall = this.call.clone();
|
|
67
|
+
this.inputFieldsToParameters(this.lastCall);
|
|
68
|
+
try {
|
|
69
|
+
yield this.compute(this.lastCall);
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
this.onComputationError.next(this.lastCall);
|
|
73
|
+
}
|
|
74
|
+
this.outputParametersToView(this.lastCall);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/** Override to provide custom initialization. {@link onViewInitialized} gets fired after that. */
|
|
78
|
+
init(func) {
|
|
79
|
+
const _super = Object.create(null, {
|
|
80
|
+
init: { get: () => super.init }
|
|
81
|
+
});
|
|
82
|
+
return __awaiter(this, void 0, void 0, function* () { yield _super.init.call(this, func); });
|
|
83
|
+
}
|
|
84
|
+
/** Override to customize top menu*/
|
|
85
|
+
initTopMenu(menu) {
|
|
86
|
+
menu
|
|
87
|
+
.group(this.func.friendlyName)
|
|
88
|
+
.item('Run', () => this.run());
|
|
89
|
+
}
|
|
90
|
+
/** Override to customize ribbon panels */
|
|
91
|
+
initRibbonPanels() {
|
|
92
|
+
this.setRibbonPanels([[
|
|
93
|
+
ui.bigButton('RUN', () => this.run()),
|
|
94
|
+
ui.comboPopup(ui.icons.save(null, 'Export'), this.supportedExportFormats, (format) => __awaiter(this, void 0, void 0, function* () { return DG.Utils.download('output.csv', yield this.export(format)); })),
|
|
95
|
+
]]);
|
|
96
|
+
}
|
|
97
|
+
/** Builds the complete view. Override it if completely custom implementation is needed,
|
|
98
|
+
* otherwise consider overriding {@link buildInputBlock} and/or {@link buildOutputBlock} */
|
|
99
|
+
build() { return ui.splitH([this.buildInputBlock(), this.buildOutputBlock()]); }
|
|
100
|
+
/** Override to build completely custom input block (the one with inputs, usually on the left).
|
|
101
|
+
* If only specific field, consider overriding {@link buildCustomInputs}. */
|
|
102
|
+
buildInputBlock() {
|
|
103
|
+
return super.buildInputBlock();
|
|
104
|
+
}
|
|
105
|
+
/** Custom inputs for the specified fields. Inputs for these fields will not be created by {@link buildInputBlock}. */
|
|
106
|
+
buildCustomInputs() { return new Map(); }
|
|
107
|
+
/** Override to create output block. */
|
|
108
|
+
buildOutputBlock() { return super.buildOutputBlock(); }
|
|
109
|
+
/** Override to create a custom input control. */
|
|
110
|
+
buildRibbonPanel() {
|
|
111
|
+
return ui.divH([
|
|
112
|
+
ui.button('RUN', () => { }),
|
|
113
|
+
ui.comboPopup('Export', this.supportedExportFormats, (format) => this.export(format))
|
|
114
|
+
]);
|
|
115
|
+
}
|
|
116
|
+
/** Creates function parameters based on the data entered by the user. */
|
|
117
|
+
inputFieldsToParameters(call) { super.inputFieldsToParameters(call); }
|
|
118
|
+
/** Visualizes computation results */
|
|
119
|
+
outputParametersToView(call) { super.outputParametersToView(call); }
|
|
120
|
+
/** Override to provide custom computation error handling. */
|
|
121
|
+
processComputationError(call) { grok.shell.error(call.errorMessage); }
|
|
122
|
+
/** Override to provide supported export formats.
|
|
123
|
+
* These formats are available under the "Export" popup on the ribbon panel. */
|
|
124
|
+
get supportedExportFormats() { return ['Excel', 'PDF', 'CSV']; }
|
|
125
|
+
/** Override to provide custom export. */
|
|
126
|
+
export(format) {
|
|
127
|
+
var _a;
|
|
128
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
129
|
+
if (format == 'CSV')
|
|
130
|
+
return new Blob([((_a = this.lastCall) === null || _a === void 0 ? void 0 : _a.getOutputParamValue()).toCsv()]);
|
|
131
|
+
throw `Format "${format}" is not supported.`;
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0YXRpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbXB1dGF0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9COzs7Ozs7Ozs7O0FBRXBCLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3Qzs7Ozs7Ozs7Ozs7Ozs7S0FjSztBQUNMLE1BQU0sT0FBTyxlQUFnQixTQUFRLFlBQVk7SUFZL0MsWUFBWSxJQUFhO1FBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQVZkLGlCQUFZLEdBQThCLElBQUksR0FBRyxFQUF3QixDQUFDO1FBRTFFLHNCQUFpQixHQUF1QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzRCxtQkFBYyxHQUF1QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4RCx5QkFBb0IsR0FBMkIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEUsMkJBQXNCLEdBQTJCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BFLDJCQUFzQixHQUEyQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwRSx1QkFBa0IsR0FBMkIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFLOUQsSUFBSSxJQUFJLElBQUksSUFBSTtZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUks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Iiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyByeGpzIGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQge0RhdGFGcmFtZSwgRnVuY0NhbGx9IGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQge0Z1bmN0aW9uVmlld30gZnJvbSAnLi9mdW5jdGlvbi12aWV3JztcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBoYW5kbGluZyBDb21wdXRlIG1vZGVscyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRhZ3Jvay1haS9wdWJsaWMvYmxvYi9tYXN0ZXIvaGVscC9jb21wdXRlL2NvbXB1dGUubWQpLlxuICogSW4gbW9zdCBjYXNlcywgdGhlIGNvbXB1dGF0aW9uIGlzIGEgc2ltcGxlIHtAbGluayBGdW5jfVxuICogRXh0ZW5kIGl0IGluIGNhc2VzIHdoZXJlIGEgYmVoYXZpb3Igb3IgVUkgbm90IHN1cHBvcnRlZCBieSB0aGUge0BsaW5rIEZ1bmN0aW9uVmlld30gaXMgbmVlZGVkLlxuICpcbiAqIEl0IHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbGl0eSBvdXQtb2YtdGhlLWJveCwgd2hlcmUgZWFjaCBzZWN0aW9uIGNvdWxkIGJlIGN1c3RvbWl6ZWQ6XG4gKiAtIGEgc3RydWN0dXJlZCB3YXkgdG8gcmVwcmVzZW50IGlucHV0IGFuZCBvdXRwdXQgcGFyYW1ldGVyczoge0BsaW5rIHBhcmFtZXRlcnN9XG4gKiAtIGdlbmVyaWMgd2F5IHRvIGdlbmVyYXRlIFVJIGZvciBpbnB1dHMsIG91dHB1dHMsIGFuZCBpbnRlcmFjdGl2aXR5IChydW5uaW5nIHRoZSBtb2RlbCwgZXRjKVxuICogICAtIHBlcnNpc3RpbmcgaGlzdG9yaWNhbCByZXN1bHRzIHRvIHRoZSBkYiAodmlhIHtAbGluayBwYXJhbWV0ZXJzfSlcbiAqIC0gZXhwb3J0ICh0byBFeGNlbCBhbmQgUERGKToge0BsaW5rIGV4cG9ydH1cbiAqIC0gZWFzeSBsb2FkaW5nIG9mIGhpc3RvcmljYWwgcnVuc1xuICogLSByb3V0aW5nXG4gKiAtIGVudGVyaW5nIHRoZSByZWFsLCBtZWFzdXJlZCAoYXMgb3Bwb3NlZCB0byBwcmVkaWN0ZWQpIHZhbHVlcyBtYW51YWxseVxuICogLSBub3RpZmljYXRpb25zIGZvciBjaGFuZ2luZyBpbnB1dHMsIGNvbXBsZXRpb24gb2YgY29tcHV0YXRpb25zLCBldGM6IHtAbGluayBvbklucHV0Q2hhbmdlZH1cbiAqICovXG5leHBvcnQgY2xhc3MgQ29tcHV0YXRpb25WaWV3IGV4dGVuZHMgRnVuY3Rpb25WaWV3IHtcblxuICBsYXN0Q2FsbD86IERHLkZ1bmNDYWxsO1xuICBfaW5wdXRGaWVsZHM6IE1hcDxzdHJpbmcsIERHLklucHV0QmFzZT4gPSBuZXcgTWFwPHN0cmluZywgREcuSW5wdXRCYXNlPigpO1xuXG4gIG9uVmlld0luaXRpYWxpemVkOiByeGpzLlN1YmplY3Q8dm9pZD4gPSBuZXcgcnhqcy5TdWJqZWN0KCk7XG4gIG9uSW5wdXRDaGFuZ2VkOiByeGpzLlN1YmplY3Q8dm9pZD4gPSBuZXcgcnhqcy5TdWJqZWN0KCk7XG4gIG9uQ29tcHV0YXRpb25TdGFydGVkOiByeGpzLlN1YmplY3Q8RnVuY0NhbGw+ID0gbmV3IHJ4anMuU3ViamVjdCgpO1xuICBvbkNvbXB1dGF0aW9uQ29tcGxldGVkOiByeGpzLlN1YmplY3Q8RnVuY0NhbGw+ID0gbmV3IHJ4anMuU3ViamVjdCgpO1xuICBvbkNvbXB1dGF0aW9uU3VjY2VlZGVkOiByeGpzLlN1YmplY3Q8RnVuY0NhbGw+ID0gbmV3IHJ4anMuU3ViamVjdCgpO1xuICBvbkNvbXB1dGF0aW9uRXJyb3I6IHJ4anMuU3ViamVjdDxGdW5jQ2FsbD4gPSBuZXcgcnhqcy5TdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoZnVuYzogREcuRnVuYykge1xuICAgIHN1cGVyKGZ1bmMpO1xuXG4gICAgaWYgKGZ1bmMgIT0gbnVsbClcbiAgICAgIHRoaXMuaW5pdChmdW5jKS50aGVuKChfKSA9PiB7XG4gICAgICAgIHRoaXMucm9vdC5hcHBlbmRDaGlsZCh0aGlzLmJ1aWxkKCkpO1xuICAgICAgICB0aGlzLmluaXRUb3BNZW51KHRoaXMucmliYm9uTWVudSk7XG4gICAgICAgIHRoaXMuaW5pdFJpYmJvblBhbmVscygpO1xuICAgICAgICByZXR1cm4gdGhpcy5vblZpZXdJbml0aWFsaXplZC5uZXh0KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKiBBbGwgaW5wdXRzIHRoYXQgYXJlIGJvdW5kIHRvIGZpZWxkcyAqL1xuICBnZXQgaW5wdXRGaWVsZHMoKTogTWFwPHN0cmluZywgREcuSW5wdXRCYXNlPiB7IHJldHVybiB0aGlzLl9pbnB1dEZpZWxkczsgfVxuXG4gIC8qKiBTYXZlcyB0aGUgY29tcHV0YXRpb24gcmVzdWx0cyB0byB0aGUgaGlzdG9yaWNhbCByZXN1bHRzLCByZXR1cm5zIGl0cyBpZC4gU2VlIGFsc28ge0BsaW5rIGxvYWRSdW59LiAqL1xuICBhc3luYyBzYXZlUnVuKGNhbGw6IEZ1bmNDYWxsKTogUHJvbWlzZTxzdHJpbmc+IHsgcmV0dXJuICd4eHgnOyAvKiBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUoY2FsbCk7Ki8gfVxuXG4gIC8qKiBMb2FkcyB0aGUgc3BlY2lmaWVkIGhpc3RvcmljYWwgcmVzdWx0cy4gU2VlIGFsc28ge0BsaW5rIHNhdmVSdW59LiAqL1xuICBhc3luYyBsb2FkUnVuKHJ1bklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHsgLyogYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5maW5kKGNhbGwuaWQpOyovfVxuXG4gIC8qKiBUaGUgYWN0dWFsIGNvbXB1dGF0aW9uIGZ1bmN0aW9uLiAqL1xuICBhc3luYyBjb21wdXRlKGNhbGw6IEZ1bmNDYWxsKTogUHJvbWlzZTx2b2lkPiB7IGF3YWl0IGNhbGwuY2FsbCgpOyB9XG5cbiAgLyoqIE1hcHMgaW5wdXRzIHRvIHBhcmFtZXRlcnMsIGNvbXB1dGVzLCBhbmQgbWFwcyBvdXRwdXQgcGFyYW1ldGVycyB0byB0aGUgVUkuICovXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxhc3RDYWxsID0gdGhpcy5jYWxsIS5jbG9uZSgpO1xuICAgIHRoaXMuaW5wdXRGaWVsZHNUb1BhcmFtZXRlcnModGhpcy5sYXN0Q2FsbCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jb21wdXRlKHRoaXMubGFzdENhbGwpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5vbkNvbXB1dGF0aW9uRXJyb3IubmV4dCh0aGlzLmxhc3RDYWxsKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dHB1dFBhcmFtZXRlcnNUb1ZpZXcodGhpcy5sYXN0Q2FsbCk7XG4gIH1cblxuICAvKiogT3ZlcnJpZGUgdG8gcHJvdmlkZSBjdXN0b20gaW5pdGlhbGl6YXRpb24uIHtAbGluayBvblZpZXdJbml0aWFsaXplZH0gZ2V0cyBmaXJlZCBhZnRlciB0aGF0LiAqL1xuICBhc3luYyBpbml0KGZ1bmM6IERHLkZ1bmMpOiBQcm9taXNlPHZvaWQ+IHsgYXdhaXQgc3VwZXIuaW5pdChmdW5jKTsgfVxuXG4gIC8qKiBPdmVycmlkZSB0byBjdXN0b21pemUgdG9wIG1lbnUqL1xuICBpbml0VG9wTWVudShtZW51OiBERy5NZW51KSB7XG4gICAgbWVudVxuICAgICAgLmdyb3VwKHRoaXMuZnVuYy5mcmllbmRseU5hbWUpXG4gICAgICAuaXRlbSgnUnVuJywgKCkgPT4gdGhpcy5ydW4oKSk7XG4gIH1cblxuICAvKiogT3ZlcnJpZGUgdG8gY3VzdG9taXplIHJpYmJvbiBwYW5lbHMgKi9cbiAgaW5pdFJpYmJvblBhbmVscygpIHtcbiAgICB0aGlzLnNldFJpYmJvblBhbmVscyhbW1xuICAgICAgdWkuYmlnQnV0dG9uKCdSVU4nLCAoKSA9PiB0aGlzLnJ1bigpKSxcbiAgICAgIHVpLmNvbWJvUG9wdXAoXG4gICAgICAgIHVpLmljb25zLnNhdmUobnVsbCwgJ0V4cG9ydCcpLFxuICAgICAgICB0aGlzLnN1cHBvcnRlZEV4cG9ydEZvcm1hdHMsXG4gICAgICAgIGFzeW5jIChmb3JtYXQpID0+IERHLlV0aWxzLmRvd25sb2FkKCdvdXRwdXQuY3N2JywgYXdhaXQgdGhpcy5leHBvcnQoZm9ybWF0KSksXG4gICAgICApLFxuICAgIF1dKTtcbiAgfVxuXG4gIC8qKiBCdWlsZHMgdGhlIGNvbXBsZXRlIHZpZXcuIE92ZXJyaWRlIGl0IGlmIGNvbXBsZXRlbHkgY3VzdG9tIGltcGxlbWVudGF0aW9uIGlzIG5lZWRlZCxcbiAgICogb3RoZXJ3aXNlIGNvbnNpZGVyIG92ZXJyaWRpbmcge0BsaW5rIGJ1aWxkSW5wdXRCbG9ja30gYW5kL29yIHtAbGluayBidWlsZE91dHB1dEJsb2NrfSAqL1xuICBidWlsZCgpOiBIVE1MRWxlbWVudCB7cmV0dXJuIHVpLnNwbGl0SChbdGhpcy5idWlsZElucHV0QmxvY2soKSwgdGhpcy5idWlsZE91dHB1dEJsb2NrKCldKTt9XG5cbiAgLyoqIE92ZXJyaWRlIHRvIGJ1aWxkIGNvbXBsZXRlbHkgY3VzdG9tIGlucHV0IGJsb2NrICh0aGUgb25lIHdpdGggaW5wdXRzLCB1c3VhbGx5IG9uIHRoZSBsZWZ0KS5cbiAgICogSWYgb25seSBzcGVjaWZpYyBmaWVsZCwgY29uc2lkZXIgb3ZlcnJpZGluZyB7QGxpbmsgYnVpbGRDdXN0b21JbnB1dHN9LiAqL1xuICBidWlsZElucHV0QmxvY2soKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiBzdXBlci5idWlsZElucHV0QmxvY2soKTtcbiAgfVxuXG4gIC8qKiBDdXN0b20gaW5wdXRzIGZvciB0aGUgc3BlY2lmaWVkIGZpZWxkcy4gSW5wdXRzIGZvciB0aGVzZSBmaWVsZHMgd2lsbCBub3QgYmUgY3JlYXRlZCBieSB7QGxpbmsgYnVpbGRJbnB1dEJsb2NrfS4gKi9cbiAgYnVpbGRDdXN0b21JbnB1dHMoKTogTWFwPFN0cmluZywgREcuSW5wdXRCYXNlPiB7IHJldHVybiBuZXcgTWFwKCk7IH1cblxuICAvKiogT3ZlcnJpZGUgdG8gY3JlYXRlIG91dHB1dCBibG9jay4gKi9cbiAgYnVpbGRPdXRwdXRCbG9jaygpOiBIVE1MRWxlbWVudCB7IHJldHVybiBzdXBlci5idWlsZE91dHB1dEJsb2NrKCk7IH1cblxuICAvKiogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIGlucHV0IGNvbnRyb2wuICovXG4gIGJ1aWxkUmliYm9uUGFuZWwoKTogSFRNTEVsZW1lbnQgeyByZXR1cm4gdWkuZGl2SChbXG4gICAgdWkuYnV0dG9uKCdSVU4nLCAoKSA9PiB7fSksXG4gICAgdWkuY29tYm9Qb3B1cCgnRXhwb3J0JywgdGhpcy5zdXBwb3J0ZWRFeHBvcnRGb3JtYXRzLCAoZm9ybWF0KSA9PiB0aGlzLmV4cG9ydChmb3JtYXQpKV0pO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgZnVuY3Rpb24gcGFyYW1ldGVycyBiYXNlZCBvbiB0aGUgZGF0YSBlbnRlcmVkIGJ5IHRoZSB1c2VyLiAqL1xuICBpbnB1dEZpZWxkc1RvUGFyYW1ldGVycyhjYWxsOiBGdW5jQ2FsbCk6IHZvaWQgeyBzdXBlci5pbnB1dEZpZWxkc1RvUGFyYW1ldGVycyhjYWxsKTsgfVxuXG4gIC8qKiBWaXN1YWxpemVzIGNvbXB1dGF0aW9uIHJlc3VsdHMgKi9cbiAgb3V0cHV0UGFyYW1ldGVyc1RvVmlldyhjYWxsOiBGdW5jQ2FsbCk6IHZvaWQgeyBzdXBlci5vdXRwdXRQYXJhbWV0ZXJzVG9WaWV3KGNhbGwpOyB9XG5cbiAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgY3VzdG9tIGNvbXB1dGF0aW9uIGVycm9yIGhhbmRsaW5nLiAqL1xuICBwcm9jZXNzQ29tcHV0YXRpb25FcnJvcihjYWxsOiBGdW5jQ2FsbCkgeyBncm9rLnNoZWxsLmVycm9yKGNhbGwuZXJyb3JNZXNzYWdlISk7ICB9XG5cbiAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgc3VwcG9ydGVkIGV4cG9ydCBmb3JtYXRzLlxuICAgKiBUaGVzZSBmb3JtYXRzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIFwiRXhwb3J0XCIgcG9wdXAgb24gdGhlIHJpYmJvbiBwYW5lbC4gKi9cbiAgZ2V0IHN1cHBvcnRlZEV4cG9ydEZvcm1hdHMoKTogc3RyaW5nW10geyByZXR1cm4gWydFeGNlbCcsICdQREYnLCAnQ1NWJ107IH1cblxuICAvKiogT3ZlcnJpZGUgdG8gcHJvdmlkZSBjdXN0b20gZXhwb3J0LiAqL1xuICBhc3luYyBleHBvcnQoZm9ybWF0OiBzdHJpbmcpOiBQcm9taXNlPEJsb2I+IHtcbiAgICBpZiAoZm9ybWF0ID09ICdDU1YnKVxuICAgICAgcmV0dXJuIG5ldyBCbG9iKFsodGhpcy5sYXN0Q2FsbD8uZ2V0T3V0cHV0UGFyYW1WYWx1ZSgpIGFzIERhdGFGcmFtZSkudG9Dc3YoKV0pO1xuICAgIHRocm93IGBGb3JtYXQgXCIke2Zvcm1hdH1cIiBpcyBub3Qgc3VwcG9ydGVkLmA7XG4gIH1cbn0iXX0=
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as DG from 'datagrok-api/dg';
|
|
2
|
+
export declare class FunctionView extends DG.ViewBase {
|
|
3
|
+
constructor(func: DG.Func);
|
|
4
|
+
private _type;
|
|
5
|
+
get type(): string;
|
|
6
|
+
func: DG.Func;
|
|
7
|
+
readonly context: DG.Context;
|
|
8
|
+
call?: DG.FuncCall;
|
|
9
|
+
lastCall?: DG.FuncCall;
|
|
10
|
+
_inputFields: Map<string, DG.InputBase>;
|
|
11
|
+
init(func: DG.Func): Promise<void>;
|
|
12
|
+
build(): HTMLElement;
|
|
13
|
+
buildInputBlock(): HTMLElement;
|
|
14
|
+
buildOutputBlock(): HTMLElement;
|
|
15
|
+
clearResults(clearTabs?: boolean, showOutput?: boolean): void;
|
|
16
|
+
inputFieldsToParameters(call: DG.FuncCall): void;
|
|
17
|
+
run(): Promise<void>;
|
|
18
|
+
compute(call: DG.FuncCall): Promise<void>;
|
|
19
|
+
outputParametersToView(call: DG.FuncCall): void;
|
|
20
|
+
renderRunSection(call: DG.FuncCall): HTMLElement;
|
|
21
|
+
showInputs: boolean;
|
|
22
|
+
singleDfParam: boolean;
|
|
23
|
+
paramViewers: Map<string, DG.Viewer[]>;
|
|
24
|
+
resultsTabControl: DG.TabControl | undefined;
|
|
25
|
+
resultTabs: Map<String, HTMLElement>;
|
|
26
|
+
resultsDiv: HTMLElement;
|
|
27
|
+
controlsRoot: HTMLDivElement;
|
|
28
|
+
resultsRoot: HTMLDivElement;
|
|
29
|
+
inputsDiv: HTMLDivElement;
|
|
30
|
+
appendResultDataFrame(param: DG.FuncCallParam, options?: {
|
|
31
|
+
caption?: string;
|
|
32
|
+
category?: string;
|
|
33
|
+
height?: number;
|
|
34
|
+
}): void;
|
|
35
|
+
_appendResultElement(d: HTMLElement, category?: string): void;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=function-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function-view.d.ts","sourceRoot":"","sources":["function-view.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,qBAAa,YAAa,SAAQ,EAAE,CAAC,QAAQ;gBAC/B,IAAI,EAAE,EAAE,CAAC,IAAI;IAUzB,OAAO,CAAC,KAAK,CAAsB;IACnC,IAAW,IAAI,IAAI,MAAM,CAExB;IACM,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC;IACnB,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC;IAC9B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,CAAmC;IAEpE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;IAoDxB,KAAK,IAAI,WAAW;IAEpB,eAAe,IAAI,WAAW;IAO9B,gBAAgB,IAAI,WAAW;IAM/B,YAAY,CAAC,SAAS,GAAE,OAAc,EAAE,UAAU,GAAE,OAAc;IAgClE,uBAAuB,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI;IAE1C,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAapB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,sBAAsB,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI;IAS/C,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,WAAW;IAehD,UAAU,EAAE,OAAO,CAAS;IAC5B,aAAa,EAAE,OAAO,CAAS;IAC/B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAa;IACnD,iBAAiB,EAAE,EAAE,CAAC,UAAU,GAAG,SAAS,CAAC;IAC7C,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAa;IACjD,UAAU,EAAE,WAAW,CAAqC;IAC5D,YAAY,EAAE,cAAc,CAAY;IACxC,WAAW,EAAE,cAAc,CAAY;IACvC,SAAS,EAAE,cAAc,CAAqC;IAE9D,qBAAqB,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAC;IAwGhH,oBAAoB,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,MAAM;CAMvD"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import wu from 'wu';
|
|
11
|
+
import $ from 'cash-dom';
|
|
12
|
+
import * as grok from 'datagrok-api/grok';
|
|
13
|
+
import * as ui from 'datagrok-api/ui';
|
|
14
|
+
import * as DG from 'datagrok-api/dg';
|
|
15
|
+
export class FunctionView extends DG.ViewBase {
|
|
16
|
+
constructor(func) {
|
|
17
|
+
super();
|
|
18
|
+
this._type = 'function';
|
|
19
|
+
this._inputFields = new Map();
|
|
20
|
+
this.showInputs = false;
|
|
21
|
+
this.singleDfParam = false;
|
|
22
|
+
this.paramViewers = new Map();
|
|
23
|
+
this.resultTabs = new Map();
|
|
24
|
+
this.resultsDiv = ui.panel([], 'grok-func-results');
|
|
25
|
+
this.controlsRoot = ui.box();
|
|
26
|
+
this.resultsRoot = ui.box();
|
|
27
|
+
this.inputsDiv = ui.panel([], 'grok-func-results');
|
|
28
|
+
this.func = func;
|
|
29
|
+
this.context = DG.Context.cloneDefault();
|
|
30
|
+
this.controlsRoot.style.maxWidth = '370px';
|
|
31
|
+
this.box = true;
|
|
32
|
+
if (func != null)
|
|
33
|
+
this.init(func).then((r) => { });
|
|
34
|
+
}
|
|
35
|
+
get type() {
|
|
36
|
+
return this._type;
|
|
37
|
+
}
|
|
38
|
+
init(func) {
|
|
39
|
+
var _a, _b;
|
|
40
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
(_a = this.func) !== null && _a !== void 0 ? _a : (this.func = func);
|
|
42
|
+
/*
|
|
43
|
+
var meta = EntityMeta.forEntity(f);
|
|
44
|
+
func = await meta.refresh(f);
|
|
45
|
+
*/
|
|
46
|
+
(_b = this.call) !== null && _b !== void 0 ? _b : (this.call = this.func.prepare());
|
|
47
|
+
this.call.aux['view'] = this;
|
|
48
|
+
this.call.context = this.context;
|
|
49
|
+
this.singleDfParam = wu(this.func.outputs).filter((p) => p.propertyType == DG.TYPE.DATA_FRAME)
|
|
50
|
+
.toArray().length == 1;
|
|
51
|
+
//var fullRunSection = div();
|
|
52
|
+
//var fullDiv = div('ui-panel', [getFullSection(func, call, fullRunSection)]);
|
|
53
|
+
//htmlSetDisplay(fullDiv, false);
|
|
54
|
+
for (const inParam of wu(this.call.inputParams.values())
|
|
55
|
+
.filter((p) => p.property.propertyType == DG.TYPE.DATA_FRAME && p.property.options['viewer'] != null)) {
|
|
56
|
+
this.showInputs = true;
|
|
57
|
+
const self = this;
|
|
58
|
+
this.subs.push(inParam.onChanged.subscribe(function (param) {
|
|
59
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
60
|
+
self.clearResults(true, false);
|
|
61
|
+
param.processOutput();
|
|
62
|
+
self.appendResultDataFrame(param, { height: (self.singleDfParam && !grok.shell.windows.presentationMode) ? 600 : 400,
|
|
63
|
+
category: 'INPUT' });
|
|
64
|
+
});
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
//this.controlsRoot.appendChild(fullDiv);
|
|
68
|
+
/*advancedModeSwitch.onChanged.listen((_) {
|
|
69
|
+
if (advancedModeSwitch.value)
|
|
70
|
+
fullRunSection.append(runSection);
|
|
71
|
+
else
|
|
72
|
+
funcDiv.append(runSection);
|
|
73
|
+
htmlSetDisplay(fullDiv, advancedModeSwitch.value);
|
|
74
|
+
htmlSetDisplay(funcDiv, !advancedModeSwitch.value);
|
|
75
|
+
});*/
|
|
76
|
+
//setRibbon();
|
|
77
|
+
this.root.appendChild(this.build());
|
|
78
|
+
/*
|
|
79
|
+
Routing.setPath(this.path, f.name, true);
|
|
80
|
+
*/
|
|
81
|
+
this.name = this.func.friendlyName;
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
build() { return ui.splitH([this.buildInputBlock(), this.buildOutputBlock()]); }
|
|
85
|
+
buildInputBlock() {
|
|
86
|
+
const funcDiv = ui.div([this.renderRunSection(this.call)], 'ui-div');
|
|
87
|
+
this.controlsRoot.innerHTML = '';
|
|
88
|
+
this.controlsRoot.appendChild(funcDiv);
|
|
89
|
+
return this.controlsRoot;
|
|
90
|
+
}
|
|
91
|
+
buildOutputBlock() {
|
|
92
|
+
this.resultsRoot.innerHTML = '';
|
|
93
|
+
this.resultsRoot.appendChild(this.resultsDiv);
|
|
94
|
+
return this.resultsRoot;
|
|
95
|
+
}
|
|
96
|
+
clearResults(clearTabs = true, showOutput = true) {
|
|
97
|
+
const categories = [];
|
|
98
|
+
// resultTabs.clear();
|
|
99
|
+
if (this.showInputs) {
|
|
100
|
+
categories.push('INPUT');
|
|
101
|
+
this.resultTabs.set('INPUT', this.inputsDiv);
|
|
102
|
+
}
|
|
103
|
+
for (const p of this.func.outputs) {
|
|
104
|
+
if (categories.includes(p.category))
|
|
105
|
+
continue;
|
|
106
|
+
categories.push(p.category);
|
|
107
|
+
}
|
|
108
|
+
if (clearTabs && (categories.length > 1 || (categories.length == 1 && categories[0] != 'Misc'))) {
|
|
109
|
+
this.resultsTabControl = DG.TabControl.create();
|
|
110
|
+
for (const c of categories) {
|
|
111
|
+
if (!this.resultTabs.has(c))
|
|
112
|
+
this.resultTabs.set(c, ui.div([], 'ui-panel,grok-func-results'));
|
|
113
|
+
let name = c;
|
|
114
|
+
if (this.showInputs && categories.length == 2 && c == 'Misc')
|
|
115
|
+
name = 'OUTPUT';
|
|
116
|
+
this.resultsTabControl.addPane(name, () => { var _a; return (_a = this.resultTabs.get(c)) !== null && _a !== void 0 ? _a : ui.div(); });
|
|
117
|
+
}
|
|
118
|
+
if (categories.length > 1 && this.showInputs && showOutput)
|
|
119
|
+
this.resultsTabControl.currentPane = this.resultsTabControl.panes[1];
|
|
120
|
+
this.resultsDiv = this.resultsTabControl.root;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
this.resultsDiv = ui.panel([], 'grok-func-results');
|
|
124
|
+
this.resultsTabControl = undefined;
|
|
125
|
+
}
|
|
126
|
+
this.buildOutputBlock();
|
|
127
|
+
}
|
|
128
|
+
inputFieldsToParameters(call) { }
|
|
129
|
+
run() {
|
|
130
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
131
|
+
this.lastCall = this.call.clone();
|
|
132
|
+
this.inputFieldsToParameters(this.lastCall);
|
|
133
|
+
try {
|
|
134
|
+
yield this.compute(this.lastCall);
|
|
135
|
+
}
|
|
136
|
+
catch (e) {
|
|
137
|
+
// this.onComputationError.next(this.lastCall);
|
|
138
|
+
}
|
|
139
|
+
this.outputParametersToView(this.lastCall);
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
compute(call) {
|
|
143
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
144
|
+
yield call.call(true, undefined, { processed: true });
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
outputParametersToView(call) {
|
|
148
|
+
this.clearResults(false, true);
|
|
149
|
+
for (const [, p] of call.outputParams) {
|
|
150
|
+
p.processOutput();
|
|
151
|
+
if (p.property.propertyType == DG.TYPE.DATA_FRAME && p.value != null)
|
|
152
|
+
this.appendResultDataFrame(p, { caption: p.property.name, category: p.property.category });
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
renderRunSection(call) {
|
|
156
|
+
return ui.wait(() => __awaiter(this, void 0, void 0, function* () {
|
|
157
|
+
const runButton = ui.bigButton('Run', () => __awaiter(this, void 0, void 0, function* () {
|
|
158
|
+
call.aux['view'] = this.dart;
|
|
159
|
+
yield this.run();
|
|
160
|
+
}));
|
|
161
|
+
const editor = ui.div();
|
|
162
|
+
const inputs = yield call.buildEditor(editor, { condensed: true });
|
|
163
|
+
editor.appendChild(ui.buttonsInput([runButton]));
|
|
164
|
+
for (const input of inputs)
|
|
165
|
+
this._inputFields.set(input.property.name, input);
|
|
166
|
+
return editor;
|
|
167
|
+
}));
|
|
168
|
+
}
|
|
169
|
+
appendResultDataFrame(param, options) {
|
|
170
|
+
var _a, _b, _c, _d, _e;
|
|
171
|
+
const df = param.value;
|
|
172
|
+
console.log('dataframe', df);
|
|
173
|
+
let caption = options === null || options === void 0 ? void 0 : options.caption;
|
|
174
|
+
let height = (_a = options === null || options === void 0 ? void 0 : options.height) !== null && _a !== void 0 ? _a : 400;
|
|
175
|
+
const viewers = (_b = param.aux['viewers']) !== null && _b !== void 0 ? _b : [];
|
|
176
|
+
caption !== null && caption !== void 0 ? caption : (caption = (_d = (_c = param.aux['viewerTitle']) !== null && _c !== void 0 ? _c : ((this.singleDfParam && viewers.length == 1) ? '' : param.property.caption)) !== null && _d !== void 0 ? _d : '');
|
|
177
|
+
let existingViewers = this.paramViewers.get(param.name);
|
|
178
|
+
if (existingViewers != null) {
|
|
179
|
+
for (const v of existingViewers)
|
|
180
|
+
v.dataFrame = df;
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
existingViewers !== null && existingViewers !== void 0 ? existingViewers : (existingViewers = []);
|
|
184
|
+
this.paramViewers.set(param.name, existingViewers);
|
|
185
|
+
if (viewers.length == 0)
|
|
186
|
+
viewers.push(df.plot.grid());
|
|
187
|
+
const hideList = [];
|
|
188
|
+
let blocks = 0;
|
|
189
|
+
let blockSize = 0;
|
|
190
|
+
const gridWrapper = ui.block([]);
|
|
191
|
+
const gridSwitch = !wu(viewers).some((v) => v.type == 'Grid');
|
|
192
|
+
$(gridWrapper).hide();
|
|
193
|
+
const getHeader = (sw) => {
|
|
194
|
+
var _a;
|
|
195
|
+
const s = (_a = caption !== null && caption !== void 0 ? caption : df.name) !== null && _a !== void 0 ? _a : '';
|
|
196
|
+
const header = ui.div([], 'grok-func-results-header');
|
|
197
|
+
if (s != '') {
|
|
198
|
+
const h = ui.h1(s);
|
|
199
|
+
ui.Tooltip.bind(h, () => s);
|
|
200
|
+
header.appendChild(h);
|
|
201
|
+
}
|
|
202
|
+
if (gridSwitch) {
|
|
203
|
+
const icon = ui.iconSvg('table', (e) => {
|
|
204
|
+
e.stopPropagation();
|
|
205
|
+
ui.setDisplayAll(hideList, !sw);
|
|
206
|
+
ui.setDisplay(gridWrapper, sw);
|
|
207
|
+
gridWrapper.classList.add(`ui-block-${blockSize}`);
|
|
208
|
+
}, 'Show grid');
|
|
209
|
+
if (!sw)
|
|
210
|
+
icon.classList.add('active');
|
|
211
|
+
header.appendChild(icon);
|
|
212
|
+
}
|
|
213
|
+
if (!grok.shell.tables.includes(df)) {
|
|
214
|
+
header.appendChild(ui.icons.add((e) => {
|
|
215
|
+
e.stopPropagation();
|
|
216
|
+
const v = grok.shell.addTableView(df);
|
|
217
|
+
(() => __awaiter(this, void 0, void 0, function* () {
|
|
218
|
+
for (const viewer of viewers) {
|
|
219
|
+
if (viewer.type != 'Grid') {
|
|
220
|
+
const newViewer = yield df.plot.fromType(viewer.type);
|
|
221
|
+
newViewer.setOptions(viewer.getOptions());
|
|
222
|
+
v.addViewer(newViewer);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}))();
|
|
226
|
+
}, 'Add to workspace'));
|
|
227
|
+
}
|
|
228
|
+
return header;
|
|
229
|
+
};
|
|
230
|
+
if (gridSwitch) {
|
|
231
|
+
gridWrapper.appendChild(getHeader(false));
|
|
232
|
+
const grid = df.plot.grid();
|
|
233
|
+
grid.root.style.height = `${height}px`;
|
|
234
|
+
gridWrapper.appendChild(grid.root);
|
|
235
|
+
existingViewers.push(grid);
|
|
236
|
+
}
|
|
237
|
+
let header = getHeader(true);
|
|
238
|
+
this._appendResultElement(gridWrapper, options === null || options === void 0 ? void 0 : options.category);
|
|
239
|
+
for (const viewer of viewers) {
|
|
240
|
+
if ((viewer === null || viewer === void 0 ? void 0 : viewer.tags) == null)
|
|
241
|
+
continue;
|
|
242
|
+
existingViewers.push(viewer);
|
|
243
|
+
const block = (_e = viewer.tags['.block-size']) !== null && _e !== void 0 ? _e : 100;
|
|
244
|
+
const wrapper = ui.block([], `ui-block-${block}`);
|
|
245
|
+
if (blocks + block <= 100) {
|
|
246
|
+
hideList.push(wrapper);
|
|
247
|
+
blockSize += block;
|
|
248
|
+
}
|
|
249
|
+
blocks += block;
|
|
250
|
+
wrapper.appendChild(header);
|
|
251
|
+
header = ui.div([], 'grok-func-results-header');
|
|
252
|
+
wrapper.appendChild(viewer.root);
|
|
253
|
+
if (viewer.type == 'grid') {
|
|
254
|
+
// @ts-ignore
|
|
255
|
+
const totalHeight = viewer.getOptions()['rowHeight'] *
|
|
256
|
+
(viewer.dataFrame.rowCount + 1);
|
|
257
|
+
if (totalHeight < height)
|
|
258
|
+
height = totalHeight;
|
|
259
|
+
}
|
|
260
|
+
viewer.root.style.height = `${height}px`;
|
|
261
|
+
this._appendResultElement(wrapper, options === null || options === void 0 ? void 0 : options.category);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
_appendResultElement(d, category) {
|
|
265
|
+
if (category != null && this.resultsTabControl != undefined && this.resultTabs.get(category) != null)
|
|
266
|
+
this.resultTabs.get(category).appendChild(d);
|
|
267
|
+
else
|
|
268
|
+
this.resultsDiv.appendChild(d);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZ1bmN0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sQ0FBQyxNQUFNLFVBQVUsQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0QyxNQUFNLE9BQU8sWUFBYSxTQUFRLEVBQUUsQ0FBQyxRQUFRO0lBQzNDLFlBQVksSUFBYTtRQUN2QixLQUFLLEVBQUUsQ0FBQztRQVNGLFVBQUssR0FBVyxVQUFVLENBQUM7UUFRbkMsaUJBQVksR0FBOEIsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFnSjFFLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsaUJBQVksR0FBNkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVuRCxlQUFVLEdBQTZCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakQsZUFBVSxHQUFnQixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQzVELGlCQUFZLEdBQW1CLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QyxnQkFBVyxHQUFtQixFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkMsY0FBUyxHQUFtQixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBeEs1RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLFlBQVksQ0FB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aEQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRTtnQkFDekIsYUFBYTtnQkFDYixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDO29CQUNsRCxDQUFDLE1BQU0sQ0FBQyxTQUFVLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLFdBQVcsR0FBRyxNQUFNO29CQUN0QixNQUFNLEdBQUcsV0FBVyxDQUFDO2FBQ3hCO1lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUM7WUFDekMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsUUFBUSxDQUFDLENBQUM7U0FDdkQ7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsQ0FBYyxFQUFFLFFBQWlCO1FBQ3BELElBQUksUUFBUSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUk7WUFDbEcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUU5QyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgd3UgZnJvbSAnd3UnO1xuaW1wb3J0ICQgZnJvbSAnY2FzaC1kb20nO1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcblxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uVmlldyBleHRlbmRzIERHLlZpZXdCYXNlIHtcbiAgY29uc3RydWN0b3IoZnVuYzogREcuRnVuYykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5mdW5jID0gZnVuYztcbiAgICB0aGlzLmNvbnRleHQgPSBERy5Db250ZXh0LmNsb25lRGVmYXVsdCgpO1xuICAgIHRoaXMuY29udHJvbHNSb290LnN0eWxlLm1heFdpZHRoID0gJzM3MHB4JztcbiAgICB0aGlzLmJveCA9IHRydWU7XG4gICAgaWYgKGZ1bmMgIT0gbnVsbClcbiAgICAgIHRoaXMuaW5pdChmdW5jKS50aGVuKChyKSA9PiB7fSk7XG4gIH1cblxuICBwcml2YXRlIF90eXBlOiBzdHJpbmcgPSAnZnVuY3Rpb24nO1xuICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuICBwdWJsaWMgZnVuYzogREcuRnVuYztcbiAgcmVhZG9ubHkgY29udGV4dDogREcuQ29udGV4dDtcbiAgcHVibGljIGNhbGw/OiBERy5GdW5jQ2FsbDtcbiAgcHVibGljIGxhc3RDYWxsPzogREcuRnVuY0NhbGw7XG4gIF9pbnB1dEZpZWxkczogTWFwPHN0cmluZywgREcuSW5wdXRCYXNlPiA9IG5ldyBNYXA8c3RyaW5nLCBERy5JbnB1dEJhc2U+KCk7XG5cbiAgYXN5bmMgaW5pdChmdW5jOiBERy5GdW5jKSB7XG4gICAgdGhpcy5mdW5jID8/PSBmdW5jO1xuICAgIC8qXG4gICAgICB2YXIgbWV0YSA9IEVudGl0eU1ldGEuZm9yRW50aXR5KGYpO1xuICAgICAgZnVuYyA9IGF3YWl0IG1ldGEucmVmcmVzaChmKTtcbiAgICAqL1xuXG4gICAgdGhpcy5jYWxsID8/PSB0aGlzLmZ1bmMucHJlcGFyZSgpO1xuICAgIHRoaXMuY2FsbC5hdXhbJ3ZpZXcnXSA9IHRoaXM7XG4gICAgdGhpcy5jYWxsLmNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLnNpbmdsZURmUGFyYW0gPSB3dSh0aGlzLmZ1bmMub3V0cHV0cykuZmlsdGVyKChwKSA9PiBwLnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUpXG4gICAgICAudG9BcnJheSgpLmxlbmd0aCA9PSAxO1xuICAgIC8vdmFyIGZ1bGxSdW5TZWN0aW9uID0gZGl2KCk7XG4gICAgLy92YXIgZnVsbERpdiA9IGRpdigndWktcGFuZWwnLCBbZ2V0RnVsbFNlY3Rpb24oZnVuYywgY2FsbCwgZnVsbFJ1blNlY3Rpb24pXSk7XG4gICAgLy9odG1sU2V0RGlzcGxheShmdWxsRGl2LCBmYWxzZSk7XG5cbiAgICBmb3IgKGNvbnN0IGluUGFyYW0gb2Ygd3UodGhpcy5jYWxsLmlucHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKHA6IERHLkZ1bmNDYWxsUGFyYW0pID0+XG4gICAgICAgIHAucHJvcGVydHkucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBwLnByb3BlcnR5Lm9wdGlvbnNbJ3ZpZXdlciddICE9IG51bGwpKSB7XG4gICAgICB0aGlzLnNob3dJbnB1dHMgPSB0cnVlO1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnN1YnMucHVzaChpblBhcmFtLm9uQ2hhbmdlZC5zdWJzY3JpYmUoYXN5bmMgZnVuY3Rpb24ocGFyYW06IERHLkZ1bmNDYWxsUGFyYW0pIHtcbiAgICAgICAgc2VsZi5jbGVhclJlc3VsdHModHJ1ZSwgZmFsc2UpO1xuICAgICAgICBwYXJhbS5wcm9jZXNzT3V0cHV0KCk7XG5cbiAgICAgICAgc2VsZi5hcHBlbmRSZXN1bHREYXRhRnJhbWUocGFyYW0sXG4gICAgICAgICAge2hlaWdodDogKHNlbGYuc2luZ2xlRGZQYXJhbSAmJiAhZ3Jvay5zaGVsbC53aW5kb3dzLnByZXNlbnRhdGlvbk1vZGUpID8gNjAwIDogNDAwLFxuICAgICAgICAgICAgY2F0ZWdvcnk6ICdJTlBVVCd9KTtcbiAgICAgIH0pKTtcbiAgICB9XG5cblxuICAgIC8vdGhpcy5jb250cm9sc1Jvb3QuYXBwZW5kQ2hpbGQoZnVsbERpdik7XG5cbiAgICAvKmFkdmFuY2VkTW9kZVN3aXRjaC5vbkNoYW5nZWQubGlzdGVuKChfKSB7XG4gICAgICBpZiAoYWR2YW5jZWRNb2RlU3dpdGNoLnZhbHVlKVxuICAgICAgICBmdWxsUnVuU2VjdGlvbi5hcHBlbmQocnVuU2VjdGlvbik7XG4gICAgICBlbHNlXG4gICAgICAgIGZ1bmNEaXYuYXBwZW5kKHJ1blNlY3Rpb24pO1xuICAgICAgaHRtbFNldERpc3BsYXkoZnVsbERpdiwgYWR2YW5jZWRNb2RlU3dpdGNoLnZhbHVlKTtcbiAgICAgIGh0bWxTZXREaXNwbGF5KGZ1bmNEaXYsICFhZHZhbmNlZE1vZGVTd2l0Y2gudmFsdWUpO1xuICAgIH0pOyovXG4gICAgLy9zZXRSaWJib24oKTtcbiAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5idWlsZCgpKTtcbiAgICAvKlxuICAgIFJvdXRpbmcuc2V0UGF0aCh0aGlzLnBhdGgsIGYubmFtZSwgdHJ1ZSk7XG4gICAgKi9cblxuICAgIHRoaXMubmFtZSA9IHRoaXMuZnVuYy5mcmllbmRseU5hbWU7XG4gIH1cblxuICBidWlsZCgpOiBIVE1MRWxlbWVudCB7cmV0dXJuIHVpLnNwbGl0SChbdGhpcy5idWlsZElucHV0QmxvY2soKSwgdGhpcy5idWlsZE91dHB1dEJsb2NrKCldKTt9XG5cbiAgYnVpbGRJbnB1dEJsb2NrKCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBmdW5jRGl2ID0gdWkuZGl2KFt0aGlzLnJlbmRlclJ1blNlY3Rpb24odGhpcy5jYWxsISldLCAndWktZGl2Jyk7XG4gICAgdGhpcy5jb250cm9sc1Jvb3QuaW5uZXJIVE1MID0gJyc7XG4gICAgdGhpcy5jb250cm9sc1Jvb3QuYXBwZW5kQ2hpbGQoZnVuY0Rpdik7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbHNSb290O1xuICB9XG5cbiAgYnVpbGRPdXRwdXRCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgdGhpcy5yZXN1bHRzUm9vdC5pbm5lckhUTUwgPSAnJztcbiAgICB0aGlzLnJlc3VsdHNSb290LmFwcGVuZENoaWxkKHRoaXMucmVzdWx0c0Rpdik7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0c1Jvb3Q7XG4gIH1cblxuICBjbGVhclJlc3VsdHMoY2xlYXJUYWJzOiBib29sZWFuID0gdHJ1ZSwgc2hvd091dHB1dDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBjYXRlZ29yaWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIC8vICByZXN1bHRUYWJzLmNsZWFyKCk7XG4gICAgaWYgKHRoaXMuc2hvd0lucHV0cykge1xuICAgICAgY2F0ZWdvcmllcy5wdXNoKCdJTlBVVCcpO1xuICAgICAgdGhpcy5yZXN1bHRUYWJzLnNldCgnSU5QVVQnLCB0aGlzLmlucHV0c0Rpdik7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLmZ1bmMub3V0cHV0cykge1xuICAgICAgaWYgKGNhdGVnb3JpZXMuaW5jbHVkZXMocC5jYXRlZ29yeSkpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgY2F0ZWdvcmllcy5wdXNoKHAuY2F0ZWdvcnkpO1xuICAgIH1cbiAgICBpZiAoY2xlYXJUYWJzICYmIChjYXRlZ29yaWVzLmxlbmd0aCA+IDEgfHwgKGNhdGVnb3JpZXMubGVuZ3RoID09IDEgJiYgY2F0ZWdvcmllc1swXSAhPSAnTWlzYycpKSkge1xuICAgICAgdGhpcy5yZXN1bHRzVGFiQ29udHJvbCA9IERHLlRhYkNvbnRyb2wuY3JlYXRlKCk7XG4gICAgICBmb3IgKGNvbnN0IGMgb2YgY2F0ZWdvcmllcykge1xuICAgICAgICBpZiAoIXRoaXMucmVzdWx0VGFicy5oYXMoYykpXG4gICAgICAgICAgdGhpcy5yZXN1bHRUYWJzLnNldChjLCB1aS5kaXYoW10sICd1aS1wYW5lbCxncm9rLWZ1bmMtcmVzdWx0cycpKTtcbiAgICAgICAgbGV0IG5hbWUgPSBjO1xuICAgICAgICBpZiAodGhpcy5zaG93SW5wdXRzICYmIGNhdGVnb3JpZXMubGVuZ3RoID09IDIgJiYgYyA9PSAnTWlzYycpXG4gICAgICAgICAgbmFtZSA9ICdPVVRQVVQnO1xuICAgICAgICB0aGlzLnJlc3VsdHNUYWJDb250cm9sLmFkZFBhbmUobmFtZSwgKCkgPT4gdGhpcy5yZXN1bHRUYWJzLmdldChjKSA/PyB1aS5kaXYoKSk7XG4gICAgICB9XG4gICAgICBpZiAoY2F0ZWdvcmllcy5sZW5ndGggPiAxICYmIHRoaXMuc2hvd0lucHV0cyAmJiBzaG93T3V0cHV0KVxuICAgICAgICB0aGlzLnJlc3VsdHNUYWJDb250cm9sLmN1cnJlbnRQYW5lID0gdGhpcy5yZXN1bHRzVGFiQ29udHJvbC5wYW5lc1sxXTtcbiAgICAgIHRoaXMucmVzdWx0c0RpdiA9IHRoaXMucmVzdWx0c1RhYkNvbnRyb2wucm9vdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXN1bHRzRGl2ID0gdWkucGFuZWwoW10sICdncm9rLWZ1bmMtcmVzdWx0cycpO1xuICAgICAgdGhpcy5yZXN1bHRzVGFiQ29udHJvbCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5idWlsZE91dHB1dEJsb2NrKCk7XG4gIH1cblxuICBpbnB1dEZpZWxkc1RvUGFyYW1ldGVycyhjYWxsOiBERy5GdW5jQ2FsbCk6IHZvaWQgeyB9XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubGFzdENhbGwgPSB0aGlzLmNhbGwhLmNsb25lKCk7XG4gICAgdGhpcy5pbnB1dEZpZWxkc1RvUGFyYW1ldGVycyh0aGlzLmxhc3RDYWxsKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbXB1dGUodGhpcy5sYXN0Q2FsbCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gdGhpcy5vbkNvbXB1dGF0aW9uRXJyb3IubmV4dCh0aGlzLmxhc3RDYWxsKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dHB1dFBhcmFtZXRlcnNUb1ZpZXcodGhpcy5sYXN0Q2FsbCk7XG4gIH1cblxuICBhc3luYyBjb21wdXRlKGNhbGw6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgY2FsbC5jYWxsKHRydWUsIHVuZGVmaW5lZCwge3Byb2Nlc3NlZDogdHJ1ZX0pO1xuICB9XG5cbiAgb3V0cHV0UGFyYW1ldGVyc1RvVmlldyhjYWxsOiBERy5GdW5jQ2FsbCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJSZXN1bHRzKGZhbHNlLCB0cnVlKTtcbiAgICBmb3IgKGNvbnN0IFssIHBdIG9mIGNhbGwub3V0cHV0UGFyYW1zKSB7XG4gICAgICBwLnByb2Nlc3NPdXRwdXQoKTtcbiAgICAgIGlmIChwLnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUgJiYgcC52YWx1ZSAhPSBudWxsKVxuICAgICAgICB0aGlzLmFwcGVuZFJlc3VsdERhdGFGcmFtZShwLCB7Y2FwdGlvbjogcC5wcm9wZXJ0eS5uYW1lLCBjYXRlZ29yeTogcC5wcm9wZXJ0eS5jYXRlZ29yeX0pO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlclJ1blNlY3Rpb24oY2FsbDogREcuRnVuY0NhbGwpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcnVuQnV0dG9uID0gdWkuYmlnQnV0dG9uKCdSdW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNhbGwuYXV4Wyd2aWV3J10gPSB0aGlzLmRhcnQ7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuKCk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVkaXRvciA9IHVpLmRpdigpO1xuICAgICAgY29uc3QgaW5wdXRzOiBERy5JbnB1dEJhc2VbXSA9IGF3YWl0IGNhbGwuYnVpbGRFZGl0b3IoZWRpdG9yLCB7Y29uZGVuc2VkOiB0cnVlfSk7XG4gICAgICBlZGl0b3IuYXBwZW5kQ2hpbGQodWkuYnV0dG9uc0lucHV0KFtydW5CdXR0b25dKSk7XG4gICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cylcbiAgICAgICAgdGhpcy5faW5wdXRGaWVsZHMuc2V0KGlucHV0LnByb3BlcnR5Lm5hbWUsIGlucHV0KTtcbiAgICAgIHJldHVybiBlZGl0b3I7XG4gICAgfSk7XG4gIH1cblxuICBzaG93SW5wdXRzOiBib29sZWFuID0gZmFsc2U7XG4gIHNpbmdsZURmUGFyYW06IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGFyYW1WaWV3ZXJzOiBNYXA8c3RyaW5nLCBERy5WaWV3ZXJbXT4gPSBuZXcgTWFwKCk7XG4gIHJlc3VsdHNUYWJDb250cm9sOiBERy5UYWJDb250cm9sIHwgdW5kZWZpbmVkO1xuICByZXN1bHRUYWJzOiBNYXA8U3RyaW5nLCBIVE1MRWxlbWVudD4gPSBuZXcgTWFwKCk7XG4gIHJlc3VsdHNEaXY6IEhUTUxFbGVtZW50ID0gdWkucGFuZWwoW10sICdncm9rLWZ1bmMtcmVzdWx0cycpO1xuICBjb250cm9sc1Jvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkuYm94KCk7XG4gIHJlc3VsdHNSb290OiBIVE1MRGl2RWxlbWVudCA9IHVpLmJveCgpO1xuICBpbnB1dHNEaXY6IEhUTUxEaXZFbGVtZW50ID0gdWkucGFuZWwoW10sICdncm9rLWZ1bmMtcmVzdWx0cycpO1xuXG4gIGFwcGVuZFJlc3VsdERhdGFGcmFtZShwYXJhbTogREcuRnVuY0NhbGxQYXJhbSwgb3B0aW9ucz86IHsgY2FwdGlvbj86IHN0cmluZywgY2F0ZWdvcnk/OiBzdHJpbmcsIGhlaWdodD86IG51bWJlcn0pIHtcbiAgICBjb25zdCBkZiA9IHBhcmFtLnZhbHVlO1xuICAgIGNvbnNvbGUubG9nKCdkYXRhZnJhbWUnLCBkZik7XG4gICAgbGV0IGNhcHRpb24gPSBvcHRpb25zPy5jYXB0aW9uO1xuICAgIGxldCBoZWlnaHQgPSBvcHRpb25zPy5oZWlnaHQgPz8gNDAwO1xuICAgIGNvbnN0IHZpZXdlcnM6IERHLlZpZXdlcltdID0gcGFyYW0uYXV4Wyd2aWV3ZXJzJ10gPz8gW107XG4gICAgY2FwdGlvbiA/Pz0gcGFyYW0uYXV4Wyd2aWV3ZXJUaXRsZSddID8/XG4gICAgICAoKHRoaXMuc2luZ2xlRGZQYXJhbSAmJiB2aWV3ZXJzLmxlbmd0aCA9PSAxKSA/ICcnIDogcGFyYW0ucHJvcGVydHkuY2FwdGlvbikgPz8gJyc7XG4gICAgbGV0IGV4aXN0aW5nVmlld2VyczogREcuVmlld2VyW10gfCB1bmRlZmluZWQgPSB0aGlzLnBhcmFtVmlld2Vycy5nZXQocGFyYW0ubmFtZSk7XG4gICAgaWYgKGV4aXN0aW5nVmlld2VycyAhPSBudWxsKSB7XG4gICAgICBmb3IgKGNvbnN0IHYgb2YgZXhpc3RpbmdWaWV3ZXJzKVxuICAgICAgICB2LmRhdGFGcmFtZSA9IGRmO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV4aXN0aW5nVmlld2VycyA/Pz0gW107XG4gICAgdGhpcy5wYXJhbVZpZXdlcnMuc2V0KHBhcmFtLm5hbWUsIGV4aXN0aW5nVmlld2Vycyk7XG4gICAgaWYgKHZpZXdlcnMubGVuZ3RoID09IDApXG4gICAgICB2aWV3ZXJzLnB1c2goZGYucGxvdC5ncmlkKCkpO1xuXG4gICAgY29uc3QgaGlkZUxpc3Q6IEhUTUxFbGVtZW50W10gPSBbXTtcbiAgICBsZXQgYmxvY2tzOiBudW1iZXIgPSAwO1xuICAgIGxldCBibG9ja1NpemU6IG51bWJlciA9IDA7XG4gICAgY29uc3QgZ3JpZFdyYXBwZXIgPSB1aS5ibG9jayhbXSk7XG5cbiAgICBjb25zdCBncmlkU3dpdGNoID0gIXd1KHZpZXdlcnMpLnNvbWUoKHY6IERHLlZpZXdlcikgPT4gdi50eXBlID09ICdHcmlkJyk7XG4gICAgJChncmlkV3JhcHBlcikuaGlkZSgpO1xuXG4gICAgY29uc3QgZ2V0SGVhZGVyID0gKHN3OiBib29sZWFuKSA9PiB7XG4gICAgICBjb25zdCBzID0gY2FwdGlvbiA/PyBkZi5uYW1lID8/ICcnO1xuICAgICAgY29uc3QgaGVhZGVyID0gdWkuZGl2KFtdLCAnZ3Jvay1mdW5jLXJlc3VsdHMtaGVhZGVyJyk7XG4gICAgICBpZiAocyAhPSAnJykge1xuICAgICAgICBjb25zdCBoID0gdWkuaDEocyk7XG4gICAgICAgIHVpLlRvb2x0aXAuYmluZChoLCAoKSA9PiBzKTtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGgpO1xuICAgICAgfVxuICAgICAgaWYgKGdyaWRTd2l0Y2gpIHtcbiAgICAgICAgY29uc3QgaWNvbiA9IHVpLmljb25TdmcoJ3RhYmxlJywgKGUpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHVpLnNldERpc3BsYXlBbGwoaGlkZUxpc3QsICFzdyk7XG4gICAgICAgICAgdWkuc2V0RGlzcGxheShncmlkV3JhcHBlciwgc3cpO1xuICAgICAgICAgIGdyaWRXcmFwcGVyLmNsYXNzTGlzdC5hZGQoYHVpLWJsb2NrLSR7YmxvY2tTaXplfWApO1xuICAgICAgICB9XG4gICAgICAgICwgJ1Nob3cgZ3JpZCcpO1xuICAgICAgICBpZiAoIXN3KVxuICAgICAgICAgIGljb24uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChpY29uKTtcbiAgICAgIH1cbiAgICAgIGlmICghZ3Jvay5zaGVsbC50YWJsZXMuaW5jbHVkZXMoZGYpKSB7XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZCh1aS5pY29ucy5hZGQoKGU6IGFueSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgY29uc3QgdiA9IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KGRmKTtcbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCB2aWV3ZXIgb2Ygdmlld2Vycykge1xuICAgICAgICAgICAgICBpZiAodmlld2VyLnR5cGUgIT0gJ0dyaWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Vmlld2VyID0gYXdhaXQgZGYucGxvdC5mcm9tVHlwZSh2aWV3ZXIudHlwZSkgYXMgREcuVmlld2VyO1xuICAgICAgICAgICAgICAgIG5ld1ZpZXdlci5zZXRPcHRpb25zKHZpZXdlci5nZXRPcHRpb25zKCkpO1xuICAgICAgICAgICAgICAgIHYuYWRkVmlld2VyKG5ld1ZpZXdlcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSgpO1xuICAgICAgICB9LFxuICAgICAgICAnQWRkIHRvIHdvcmtzcGFjZScsXG4gICAgICAgICkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhlYWRlcjtcbiAgICB9O1xuXG4gICAgaWYgKGdyaWRTd2l0Y2gpIHtcbiAgICAgIGdyaWRXcmFwcGVyLmFwcGVuZENoaWxkKGdldEhlYWRlcihmYWxzZSkpO1xuICAgICAgY29uc3QgZ3JpZCA9IGRmLnBsb3QuZ3JpZCgpO1xuICAgICAgZ3JpZC5yb290LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgICBncmlkV3JhcHBlci5hcHBlbmRDaGlsZChncmlkLnJvb3QpO1xuICAgICAgZXhpc3RpbmdWaWV3ZXJzLnB1c2goZ3JpZCk7XG4gICAgfVxuXG4gICAgbGV0IGhlYWRlciA9IGdldEhlYWRlcih0cnVlKTtcbiAgICB0aGlzLl9hcHBlbmRSZXN1bHRFbGVtZW50KGdyaWRXcmFwcGVyLCBvcHRpb25zPy5jYXRlZ29yeSk7XG4gICAgZm9yIChjb25zdCB2aWV3ZXIgb2Ygdmlld2Vycykge1xuICAgICAgaWYgKHZpZXdlcj8udGFncyA9PSBudWxsKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGV4aXN0aW5nVmlld2Vycy5wdXNoKHZpZXdlcik7XG4gICAgICBjb25zdCBibG9jayA9IHZpZXdlci50YWdzWycuYmxvY2stc2l6ZSddID8/IDEwMDtcbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1aS5ibG9jayhbXSwgYHVpLWJsb2NrLSR7YmxvY2t9YCk7XG4gICAgICBpZiAoYmxvY2tzICsgYmxvY2sgPD0gMTAwKSB7XG4gICAgICAgIGhpZGVMaXN0LnB1c2god3JhcHBlcik7XG4gICAgICAgIGJsb2NrU2l6ZSArPSBibG9jaztcbiAgICAgIH1cbiAgICAgIGJsb2NrcyArPSBibG9jaztcbiAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoaGVhZGVyKTtcbiAgICAgIGhlYWRlciA9IHVpLmRpdihbXSwgJ2dyb2stZnVuYy1yZXN1bHRzLWhlYWRlcicpO1xuICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZCh2aWV3ZXIucm9vdCk7XG4gICAgICBpZiAodmlld2VyLnR5cGUgPT0gJ2dyaWQnKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgY29uc3QgdG90YWxIZWlnaHQgPSB2aWV3ZXIuZ2V0T3B0aW9ucygpWydyb3dIZWlnaHQnXSAqXG4gICAgICAgICAgKHZpZXdlci5kYXRhRnJhbWUhLnJvd0NvdW50ICsgMSk7XG4gICAgICAgIGlmICh0b3RhbEhlaWdodCA8IGhlaWdodClcbiAgICAgICAgICBoZWlnaHQgPSB0b3RhbEhlaWdodDtcbiAgICAgIH1cbiAgICAgIHZpZXdlci5yb290LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgICB0aGlzLl9hcHBlbmRSZXN1bHRFbGVtZW50KHdyYXBwZXIsIG9wdGlvbnM/LmNhdGVnb3J5KTtcbiAgICB9XG4gIH1cblxuICBfYXBwZW5kUmVzdWx0RWxlbWVudChkOiBIVE1MRWxlbWVudCwgY2F0ZWdvcnk/OiBzdHJpbmcpIHtcbiAgICBpZiAoY2F0ZWdvcnkgIT0gbnVsbCAmJiB0aGlzLnJlc3VsdHNUYWJDb250cm9sICE9IHVuZGVmaW5lZCAmJiB0aGlzLnJlc3VsdFRhYnMuZ2V0KGNhdGVnb3J5KSAhPSBudWxsKVxuICAgICAgdGhpcy5yZXN1bHRUYWJzLmdldChjYXRlZ29yeSkhLmFwcGVuZENoaWxkKGQpO1xuICAgIGVsc2VcbiAgICAgIHRoaXMucmVzdWx0c0Rpdi5hcHBlbmRDaGlsZChkKTtcbiAgfVxufVxuIl19
|
package/src/random.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"random.d.ts","sourceRoot":"","sources":["random.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"random.d.ts","sourceRoot":"","sources":["random.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C"}
|
package/src/random.js
CHANGED
|
@@ -18,4 +18,4 @@ export function randomFloat(range) {
|
|
|
18
18
|
export function randomInt(range) {
|
|
19
19
|
return Math.floor(randomFloat(range));
|
|
20
20
|
}
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmFuZG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBYTtJQUN2QyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDL0IsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBYTtJQUNyQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVzIHNpbmdsZSByYW5kb20gZmxvYXQgZnJvbSAwIHRvIHJhbmdlLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7bnVtYmVyfSByYW5nZSBNYXggZ2VuZXJhdGluZyB2YWx1ZS5cbiAqIEByZXR1cm4ge251bWJlcn0gQSByYW5kb20gZmxvYXQgZ2VuZXJhdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tRmxvYXQocmFuZ2U6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLnJhbmRvbSgpICogcmFuZ2U7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHNpbmdsZSByYW5kb20gaW50ZWdlciBmcm9tIDAgdG8gcmFuZ2UuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtudW1iZXJ9IHJhbmdlIE1heCBnZW5lcmF0aW5nIHZhbHVlLlxuICogQHJldHVybiB7bnVtYmVyfSBBIHJhbmRvbSBpbnRlZ2VyIGdlbmVyYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbUludChyYW5nZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IocmFuZG9tRmxvYXQocmFuZ2UpKTtcbn1cbiJdfQ==
|