UNPKG

1.98 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6// (C) 2007-2018 GoodData Corporation
7var difference_1 = __importDefault(require("lodash/difference"));
8var map_1 = __importDefault(require("lodash/map"));
9var IDENTIFIER_REGEX = /{\S+}/g;
10function getDependencies(_a) {
11 var metricDefinition = _a.metricDefinition;
12 return (metricDefinition.expression.match(IDENTIFIER_REGEX) || []).map(function (s) {
13 return s.substring(1, s.length - 1);
14 });
15}
16function getIdentifier(_a) {
17 var metricDefinition = _a.metricDefinition;
18 return metricDefinition.identifier;
19}
20function resolvedDependencies(resolved, _a) {
21 var dependencies = _a.dependencies;
22 var identifiers = map_1.default(resolved, "identifier");
23 return difference_1.default(dependencies, identifiers).length === 0;
24}
25function scan(resolved, unresolved) {
26 for (var i = 0; i < unresolved.length; i += 1) {
27 var tested = unresolved[i];
28 if (resolvedDependencies(resolved, tested)) {
29 resolved.push(tested);
30 unresolved.splice(i, 1);
31 i -= 1;
32 }
33 }
34}
35function sort(unresolved) {
36 var resolved = [];
37 var lastLength;
38 while (unresolved.length > 0) {
39 lastLength = unresolved.length;
40 scan(resolved, unresolved);
41 if (unresolved.length === lastLength) {
42 throw new Error("Metric defintions cannot be sorted due to missing dependencies.");
43 }
44 }
45 return resolved;
46}
47function sortDefinitions(definitions) {
48 var indexed = definitions.map(function (definition) { return ({
49 definition: definition,
50 identifier: getIdentifier(definition),
51 dependencies: getDependencies(definition),
52 }); });
53 return map_1.default(sort(indexed), "definition");
54}
55exports.sortDefinitions = sortDefinitions;