@lionweb/utilities 0.6.2 → 0.6.4-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/inferLanguages.d.ts +4 -0
- package/dist/inferLanguages.d.ts.map +1 -0
- package/dist/inferLanguages.js +96 -0
- package/dist/inferLanguages.js.map +1 -0
- package/dist/serialization/chunk.d.ts +22 -5
- package/dist/serialization/chunk.d.ts.map +1 -1
- package/dist/serialization/chunk.js +53 -10
- package/dist/serialization/chunk.js.map +1 -1
- package/dist/serialization/fp-helpers.d.ts +50 -0
- package/dist/serialization/fp-helpers.d.ts.map +1 -0
- package/dist/serialization/fp-helpers.js +54 -0
- package/dist/serialization/fp-helpers.js.map +1 -0
- package/dist/serialization/index.d.ts +1 -1
- package/dist/serialization/index.d.ts.map +1 -1
- package/dist/serialization/index.js +1 -1
- package/dist/serialization/index.js.map +1 -1
- package/dist/serialization/measurer.d.ts +5 -16
- package/dist/serialization/measurer.d.ts.map +1 -1
- package/dist/serialization/measurer.js +66 -20
- package/dist/serialization/measurer.js.map +1 -1
- package/dist/serialization/metric-types.d.ts +27 -0
- package/dist/serialization/metric-types.d.ts.map +1 -0
- package/dist/serialization/metric-types.js +2 -0
- package/dist/serialization/metric-types.js.map +1 -0
- package/package.json +5 -4
package/README.md
CHANGED
|
@@ -22,6 +22,15 @@ It contains utilities on top of the `core` package, such as:
|
|
|
22
22
|
|
|
23
23
|
## Changelog
|
|
24
24
|
|
|
25
|
+
### 0.6.3
|
|
26
|
+
|
|
27
|
+
* Add a `inferLanguagesFromChunk` function that infers a language from a serialization chunk.
|
|
28
|
+
* Extend the functionality of the `measure` metrics function.
|
|
29
|
+
* Renaming for consistency and clarity:
|
|
30
|
+
* `readChunk` → `readSerializationChunk`
|
|
31
|
+
* `tryLoad[All]AsLanguages` → `tryRead[All]AsLanguages`
|
|
32
|
+
* `tryReadAllAsLanguages` combines all serialization chunks (that are the result of serializing `Language`s) into one before attempting to deserialize, in order to have cross-language references resolve.
|
|
33
|
+
|
|
25
34
|
### 0.6.2
|
|
26
35
|
|
|
27
36
|
* Add a function `measure` that computes metrics on a serialization chunk.
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,0BAA0B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,0BAA0B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Language, SerializationChunk } from "@lionweb/core";
|
|
2
|
+
export declare const inferLanguagesFromSerializationChunk: (chunk: SerializationChunk) => Language[];
|
|
3
|
+
export declare const deriveLikelyPropertyName: (key: string) => string;
|
|
4
|
+
//# sourceMappingURL=inferLanguages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inferLanguages.d.ts","sourceRoot":"","sources":["../src/inferLanguages.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,QAAQ,EAIR,kBAAkB,EAMrB,MAAM,eAAe,CAAA;AAUtB,eAAO,MAAM,oCAAoC,UAAW,kBAAkB,KAAG,QAAQ,EAmGxF,CAAA;AAUD,eAAO,MAAM,wBAAwB,QAAS,MAAM,WASnD,CAAA"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { Concept, Containment, Language, Property, Reference, asArray, builtinPrimitives, chain, concatenator, lastOf } from "@lionweb/core";
|
|
2
|
+
import { hasher } from "./hashing.js";
|
|
3
|
+
const possibleKeySeparators = ["-", "_"];
|
|
4
|
+
const id = chain(concatenator("-"), hasher());
|
|
5
|
+
const key = lastOf;
|
|
6
|
+
const { stringDatatype, booleanDatatype, integerDatatype } = builtinPrimitives;
|
|
7
|
+
export const inferLanguagesFromSerializationChunk = (chunk) => {
|
|
8
|
+
const languages = new Map();
|
|
9
|
+
const concepts = new Map();
|
|
10
|
+
const links = new Array();
|
|
11
|
+
for (const chunkLanguage of chunk.languages) {
|
|
12
|
+
const languageName = chunkLanguage.key;
|
|
13
|
+
const language = new Language(languageName, chunkLanguage.version, id(languageName), key(languageName));
|
|
14
|
+
languages.set(languageName, language);
|
|
15
|
+
}
|
|
16
|
+
for (const node of chunk.nodes) {
|
|
17
|
+
const languageName = node.classifier.language;
|
|
18
|
+
const entityName = node.classifier.key;
|
|
19
|
+
const language = findLanguage(languages, languageName);
|
|
20
|
+
if (language.entities.filter(entity => entity.key === entityName).length) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
const concept = new Concept(language, entityName, key(language.name, entityName), id(language.name, entityName), false);
|
|
24
|
+
language.havingEntities(concept);
|
|
25
|
+
concepts.set(node.id, concept);
|
|
26
|
+
for (const property of node.properties) {
|
|
27
|
+
const propertyName = deriveLikelyPropertyName(property.property.key);
|
|
28
|
+
if (concept.features.filter(feature => feature.key === propertyName).length) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const feature = new Property(concept, propertyName, key(languageName, concept.name, propertyName), id(languageName, concept.name, propertyName)).havingKey(property.property.key);
|
|
32
|
+
if (isBoolean(property.value)) {
|
|
33
|
+
feature.ofType(booleanDatatype);
|
|
34
|
+
}
|
|
35
|
+
else if (isNumeric(property.value)) {
|
|
36
|
+
feature.ofType(integerDatatype);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
feature.ofType(stringDatatype);
|
|
40
|
+
}
|
|
41
|
+
concept.havingFeatures(feature);
|
|
42
|
+
}
|
|
43
|
+
for (const containment of node.containments) {
|
|
44
|
+
const containmentName = containment.containment.key;
|
|
45
|
+
if (concept.features.filter(feature => feature.key === containmentName).length) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const children = asArray(containment.children);
|
|
49
|
+
const feature = new Containment(concept, containmentName, key(languageName, concept.name, containmentName), id(languageName, concept.name, containmentName));
|
|
50
|
+
if (children.length) {
|
|
51
|
+
feature.isMultiple();
|
|
52
|
+
}
|
|
53
|
+
concept.havingFeatures(feature);
|
|
54
|
+
links.push({ link: feature, conceptId: children[0] });
|
|
55
|
+
}
|
|
56
|
+
for (const reference of node.references) {
|
|
57
|
+
const referenceName = reference.reference.key;
|
|
58
|
+
if (concept.features.filter(feature => feature.key === referenceName).length) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
const feature = new Reference(concept, referenceName, key(languageName, concept.name, referenceName), id(languageName, concept.name, referenceName));
|
|
62
|
+
concept.havingFeatures(feature);
|
|
63
|
+
const value = reference.targets[0].reference;
|
|
64
|
+
links.push({ link: feature, conceptId: value });
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
for (const link of links) {
|
|
68
|
+
const linkedConcept = concepts.get(link.conceptId);
|
|
69
|
+
if (linkedConcept) {
|
|
70
|
+
link.link.ofType(linkedConcept);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
// Containment of primitive types??
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return Array.from(languages.values());
|
|
77
|
+
};
|
|
78
|
+
const findLanguage = (languages, languageName) => {
|
|
79
|
+
const language = languages.get(languageName);
|
|
80
|
+
if (language === undefined) {
|
|
81
|
+
throw new Error(`Language '${languageName} does not exist in the languages section`);
|
|
82
|
+
}
|
|
83
|
+
return language;
|
|
84
|
+
};
|
|
85
|
+
export const deriveLikelyPropertyName = (key) => {
|
|
86
|
+
for (const separator of possibleKeySeparators) {
|
|
87
|
+
const name = key.split(separator)[2];
|
|
88
|
+
if (name) {
|
|
89
|
+
return name;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return key;
|
|
93
|
+
};
|
|
94
|
+
const isBoolean = (value) => value === "true" || value === "false";
|
|
95
|
+
const isNumeric = (value) => !isNaN(parseFloat(value));
|
|
96
|
+
//# sourceMappingURL=inferLanguages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inferLanguages.js","sourceRoot":"","sources":["../src/inferLanguages.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,27 @@
|
|
|
1
1
|
import { Language, SerializationChunk } from "@lionweb/core";
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Reads the file at the given path as a {@link SerializationChunk serialization chunk}.
|
|
4
|
+
* **Note** that it's only checked that the file exists and can be parsed as JSON,
|
|
5
|
+
* _not_ whether it satisfies the specified serialization chunk format!
|
|
6
|
+
*/
|
|
7
|
+
export declare const readSerializationChunk: (path: string) => Promise<SerializationChunk>;
|
|
8
|
+
/**
|
|
9
|
+
* @return whether the given JSON looks like the serialization of languages.
|
|
10
|
+
*/
|
|
3
11
|
export declare const looksLikeSerializedLanguages: (json: unknown) => boolean;
|
|
4
12
|
/**
|
|
5
|
-
*
|
|
6
|
-
* and
|
|
13
|
+
* Tries to read the given path as a JSON file containing the serialization of languages,
|
|
14
|
+
* and attempts to deserialize the serialization chunk when it is.
|
|
15
|
+
* If any of that fails, return an empty list.
|
|
16
|
+
*/
|
|
17
|
+
export declare const tryReadAsLanguages: (path: string) => Promise<Language[]>;
|
|
18
|
+
/**
|
|
19
|
+
* @return the combination of the given {@link SerializationChunk serialization chunks} into one.
|
|
20
|
+
*/
|
|
21
|
+
export declare const combinationOf: (serializationChunks: SerializationChunk[]) => SerializationChunk;
|
|
22
|
+
/**
|
|
23
|
+
* Tries to read all the given paths as JSON serialization chunks that are serializations of languages,
|
|
24
|
+
* and attempts to combine those chunks into one chunk, and deserializes that.
|
|
7
25
|
*/
|
|
8
|
-
export declare const
|
|
9
|
-
export declare const tryLoadAllAsLanguages: (paths: string[]) => Promise<Language[]>;
|
|
26
|
+
export declare const tryReadAllAsLanguages: (paths: string[]) => Promise<Language[]>;
|
|
10
27
|
//# sourceMappingURL=chunk.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk.d.ts","sourceRoot":"","sources":["../../src/serialization/chunk.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,QAAQ,EAER,kBAAkB,
|
|
1
|
+
{"version":3,"file":"chunk.d.ts","sourceRoot":"","sources":["../../src/serialization/chunk.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,QAAQ,EAER,kBAAkB,EAErB,MAAM,eAAe,CAAA;AAItB;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,SAAgB,MAAM,gCAOxD,CAAA;AAOD;;GAEG;AACH,eAAO,MAAM,4BAA4B,SAAU,OAAO,KAAG,OAKqC,CAAA;AAGlG;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,SAAgB,MAAM,KAAG,QAAQ,QAAQ,EAAE,CAazE,CAAA;AAiBD;;GAEG;AACH,eAAO,MAAM,aAAa,wBAAyB,kBAAkB,EAAE,KAAG,kBAKpE,CAAA;AAGN;;;GAGG;AACH,eAAO,MAAM,qBAAqB,UAAiB,MAAM,EAAE,KAAG,QAAQ,QAAQ,EAAE,CAkB/E,CAAA"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { currentSerializationFormatVersion, deserializeLanguages, lioncoreKey } from "@lionweb/core";
|
|
2
2
|
import { readFileAsJson } from "../json.js";
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Reads the file at the given path as a {@link SerializationChunk serialization chunk}.
|
|
5
|
+
* **Note** that it's only checked that the file exists and can be parsed as JSON,
|
|
6
|
+
* _not_ whether it satisfies the specified serialization chunk format!
|
|
7
|
+
*/
|
|
8
|
+
export const readSerializationChunk = async (path) => {
|
|
4
9
|
try {
|
|
5
10
|
return readFileAsJson(path);
|
|
6
11
|
}
|
|
@@ -9,24 +14,29 @@ export const readChunk = async (path) => {
|
|
|
9
14
|
throw e;
|
|
10
15
|
}
|
|
11
16
|
};
|
|
17
|
+
// TODO don't throw, but return some kind of error object (– possibly using Promise.reject)
|
|
12
18
|
const isRecord = (json) => typeof json === "object" && !Array.isArray(json);
|
|
19
|
+
/**
|
|
20
|
+
* @return whether the given JSON looks like the serialization of languages.
|
|
21
|
+
*/
|
|
13
22
|
export const looksLikeSerializedLanguages = (json) => isRecord(json)
|
|
14
23
|
&& json["serializationFormatVersion"] === currentSerializationFormatVersion
|
|
15
24
|
&& "languages" in json
|
|
16
25
|
&& Array.isArray(json["languages"])
|
|
17
26
|
&& json["languages"].some((language) => isRecord(language) && language["key"] === lioncoreKey);
|
|
18
27
|
/**
|
|
19
|
-
*
|
|
20
|
-
* and
|
|
28
|
+
* Tries to read the given path as a JSON file containing the serialization of languages,
|
|
29
|
+
* and attempts to deserialize the serialization chunk when it is.
|
|
30
|
+
* If any of that fails, return an empty list.
|
|
21
31
|
*/
|
|
22
|
-
export const
|
|
23
|
-
const
|
|
24
|
-
if (!looksLikeSerializedLanguages(
|
|
32
|
+
export const tryReadAsLanguages = async (path) => {
|
|
33
|
+
const serializationChunk = await readSerializationChunk(path);
|
|
34
|
+
if (!looksLikeSerializedLanguages(serializationChunk)) {
|
|
25
35
|
console.error(`${path} is not a valid JSON serialization chunk of LionCore languages`);
|
|
26
36
|
return [];
|
|
27
37
|
}
|
|
28
38
|
try {
|
|
29
|
-
return deserializeLanguages(
|
|
39
|
+
return deserializeLanguages(serializationChunk);
|
|
30
40
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
31
41
|
}
|
|
32
42
|
catch (e) {
|
|
@@ -34,7 +44,40 @@ export const tryLoadAsLanguages = async (path) => {
|
|
|
34
44
|
return [];
|
|
35
45
|
}
|
|
36
46
|
};
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
47
|
+
const flatMapDistinct = (tss, equalFunc) => tss.reduce((acc, ts) => [
|
|
48
|
+
...acc,
|
|
49
|
+
...(ts.filter((r) => !acc.some((l) => equalFunc(l, r))))
|
|
50
|
+
], []);
|
|
51
|
+
const areEqual = (left, right) => left.key === right.key && left.version === right.version;
|
|
52
|
+
/**
|
|
53
|
+
* @return the combination of the given {@link SerializationChunk serialization chunks} into one.
|
|
54
|
+
*/
|
|
55
|
+
export const combinationOf = (serializationChunks) => ({
|
|
56
|
+
serializationFormatVersion: currentSerializationFormatVersion,
|
|
57
|
+
languages: flatMapDistinct(serializationChunks.map(({ languages }) => languages), areEqual),
|
|
58
|
+
nodes: serializationChunks.flatMap(({ nodes }) => nodes)
|
|
59
|
+
});
|
|
60
|
+
/**
|
|
61
|
+
* Tries to read all the given paths as JSON serialization chunks that are serializations of languages,
|
|
62
|
+
* and attempts to combine those chunks into one chunk, and deserializes that.
|
|
63
|
+
*/
|
|
64
|
+
export const tryReadAllAsLanguages = async (paths) => {
|
|
65
|
+
const serializationChunks = (await Promise.all(paths.map(readSerializationChunk)))
|
|
66
|
+
.filter((serializationChunk, index) => {
|
|
67
|
+
const ok = looksLikeSerializedLanguages(serializationChunk);
|
|
68
|
+
if (!ok) {
|
|
69
|
+
const path = paths[index];
|
|
70
|
+
console.error(`${path} is not a valid JSON serialization chunk of LionCore languages`);
|
|
71
|
+
}
|
|
72
|
+
return ok;
|
|
73
|
+
});
|
|
74
|
+
try {
|
|
75
|
+
return deserializeLanguages(combinationOf(serializationChunks));
|
|
76
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
console.error(`couldn't deserialize combined JSON serialization chunk of LionCore languages: ${e.message}`);
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
};
|
|
40
83
|
//# sourceMappingURL=chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk.js","sourceRoot":"","sources":["../../src/serialization/chunk.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iCAAiC,EACjC,oBAAoB,EAEpB,WAAW,
|
|
1
|
+
{"version":3,"file":"chunk.js","sourceRoot":"","sources":["../../src/serialization/chunk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sum the given array of numbers.
|
|
3
|
+
*/
|
|
4
|
+
export declare const sumNumbers: (nums: number[]) => number;
|
|
5
|
+
export type Nested1Map<T> = Record<string, T>;
|
|
6
|
+
export type Nested2Map<T> = Record<string, Record<string, T>>;
|
|
7
|
+
export type Nested3Map<T> = Record<string, Record<string, Record<string, T>>>;
|
|
8
|
+
export declare const mapValuesMapper: <T, R>(valueMapFunc: (t: T) => R) => (map: Record<string, T>) => Record<string, R>;
|
|
9
|
+
export declare const nested2Mapper: <T, R>(valueMapFunc: (t: T) => R) => (map: Record<string, Record<string, T>>) => Record<string, Record<string, R>>;
|
|
10
|
+
export declare const nested3Mapper: <T, R>(valueMapFunc: (t: T) => R) => (map: Record<string, Record<string, Record<string, T>>>) => Record<string, Record<string, Record<string, R>>>;
|
|
11
|
+
/**
|
|
12
|
+
* Return a function that groups an array of things using a group function as a
|
|
13
|
+
* map : string (group key) → array of grouped things.
|
|
14
|
+
*/
|
|
15
|
+
export declare const grouper: <T>(key1Func: (t: T) => string) => (ts: T[]) => Nested1Map<T[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Return a function that groups an array of things using two group functions as a nested map
|
|
18
|
+
* map : string (group key 1) →
|
|
19
|
+
* map : string (group key 2) → array of grouped things.
|
|
20
|
+
*/
|
|
21
|
+
export declare const nested2Grouper: <T>(key1Func: (t: T) => string, key2Func: (t: T) => string) => (ts: T[]) => Nested2Map<T[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Return a function that groups an array of things using two group functions as a nested map
|
|
24
|
+
* map : string (group key 1) →
|
|
25
|
+
* map : string (group key 2) →
|
|
26
|
+
* map : string (group key 3) → array of grouped things.
|
|
27
|
+
*/
|
|
28
|
+
export declare const nested3Grouper: <T>(key1Func: (t: T) => string, key2Func: (t: T) => string, key3Func: (t: T) => string) => (ts: T[]) => Nested3Map<T[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Flat-maps over the values of a
|
|
31
|
+
* map : string (group key) → values
|
|
32
|
+
* using the map function, which is also provided with the keys.
|
|
33
|
+
*/
|
|
34
|
+
export declare const flatMapValues: <T, R>(map: Record<string, T>, mapFunc: (t: T, key1: string) => R) => R[];
|
|
35
|
+
/**
|
|
36
|
+
* Flat-maps over the values of a nested map
|
|
37
|
+
* map : string (group key 1) →
|
|
38
|
+
* map: string (group key 2) → values
|
|
39
|
+
* using the map function, which is also provided with the keys.
|
|
40
|
+
*/
|
|
41
|
+
export declare const nestedFlatMap2: <T, R>(nested2Map: Nested2Map<T>, map2Func: (t: T, key1: string, key2: string) => R) => R[];
|
|
42
|
+
/**
|
|
43
|
+
* Flat-maps over the values of a nested map
|
|
44
|
+
* map : string (group key 1) →
|
|
45
|
+
* map: string (group key 2) →
|
|
46
|
+
* map: string (group key 3) → values
|
|
47
|
+
* using the map function, which is also provided with the keys.
|
|
48
|
+
*/
|
|
49
|
+
export declare const nestedFlatMap3: <T, R>(nested3Map: Nested3Map<T>, map3Func: (t: T, key1: string, key2: string, key3: string) => R) => R[];
|
|
50
|
+
//# sourceMappingURL=fp-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fp-helpers.d.ts","sourceRoot":"","sources":["../../src/serialization/fp-helpers.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,UAAU,SAAU,MAAM,EAAE,KAAG,MACD,CAAA;AAG3C,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;AAC7C,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;AAC7D,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;AAG7E,eAAO,MAAM,eAAe,oFAKnB,CAAA;AAGT,eAAO,MAAM,aAAa,oHAC4B,CAAA;AAEtD,eAAO,MAAM,aAAa,oJAC0B,CAAA;AAGpD;;;GAGG;AACH,eAAO,MAAM,OAAO,0BACI,MAAM,iCAEQ,CAAA;AAEtC;;;;GAIG;AACH,eAAO,MAAM,cAAc,0BACH,MAAM,sBACN,MAAM,iCAE4C,CAAA;AAG1E;;;;;GAKG;AACH,eAAO,MAAM,cAAc,0BACH,MAAM,sBACN,MAAM,sBACN,MAAM,iCAE6D,CAAA;AAI3F;;;;GAIG;AACH,eAAO,MAAM,aAAa,uDAEA,MAAM,cAGa,CAAA;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,cAAc,2DAEA,MAAM,QAAQ,MAAM,cAKtC,CAAA;AAET;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,2DAEA,MAAM,QAAQ,MAAM,QAAQ,MAAM,cAKpD,CAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { groupBy } from "@lionweb/core";
|
|
2
|
+
/**
|
|
3
|
+
* Sum the given array of numbers.
|
|
4
|
+
*/
|
|
5
|
+
export const sumNumbers = (nums) => nums.reduce((acc, cur) => acc + cur, 0);
|
|
6
|
+
export const mapValuesMapper = (valueMapFunc) => (map) => Object.fromEntries(Object.entries(map)
|
|
7
|
+
.map(([key, value]) => [key, valueMapFunc(value)]));
|
|
8
|
+
// === mapValues(map, valueFunc)
|
|
9
|
+
export const nested2Mapper = (valueMapFunc) => mapValuesMapper(mapValuesMapper(valueMapFunc));
|
|
10
|
+
export const nested3Mapper = (valueMapFunc) => mapValuesMapper(nested2Mapper(valueMapFunc));
|
|
11
|
+
/**
|
|
12
|
+
* Return a function that groups an array of things using a group function as a
|
|
13
|
+
* map : string (group key) → array of grouped things.
|
|
14
|
+
*/
|
|
15
|
+
export const grouper = (key1Func) => (ts) => groupBy(ts, key1Func);
|
|
16
|
+
/**
|
|
17
|
+
* Return a function that groups an array of things using two group functions as a nested map
|
|
18
|
+
* map : string (group key 1) →
|
|
19
|
+
* map : string (group key 2) → array of grouped things.
|
|
20
|
+
*/
|
|
21
|
+
export const nested2Grouper = (key1Func, key2Func) => (ts) => mapValuesMapper(grouper(key2Func))(grouper(key1Func)(ts));
|
|
22
|
+
// === mapValuesMapper((vs) => groupBy(vs, key2Func))(groupBy(ts, key1Func))
|
|
23
|
+
/**
|
|
24
|
+
* Return a function that groups an array of things using two group functions as a nested map
|
|
25
|
+
* map : string (group key 1) →
|
|
26
|
+
* map : string (group key 2) →
|
|
27
|
+
* map : string (group key 3) → array of grouped things.
|
|
28
|
+
*/
|
|
29
|
+
export const nested3Grouper = (key1Func, key2Func, key3Func) => (ts) => mapValuesMapper(nested2Grouper(key2Func, key3Func))(grouper(key1Func)(ts));
|
|
30
|
+
/**
|
|
31
|
+
* Flat-maps over the values of a
|
|
32
|
+
* map : string (group key) → values
|
|
33
|
+
* using the map function, which is also provided with the keys.
|
|
34
|
+
*/
|
|
35
|
+
export const flatMapValues = (map, mapFunc) => Object.entries(map)
|
|
36
|
+
.map(([key1, t]) => mapFunc(t, key1));
|
|
37
|
+
/**
|
|
38
|
+
* Flat-maps over the values of a nested map
|
|
39
|
+
* map : string (group key 1) →
|
|
40
|
+
* map: string (group key 2) → values
|
|
41
|
+
* using the map function, which is also provided with the keys.
|
|
42
|
+
*/
|
|
43
|
+
export const nestedFlatMap2 = (nested2Map, map2Func) => Object.entries(nested2Map)
|
|
44
|
+
.flatMap(([key1, nestedMap1]) => flatMapValues(nestedMap1, (t, key2) => map2Func(t, key1, key2)));
|
|
45
|
+
/**
|
|
46
|
+
* Flat-maps over the values of a nested map
|
|
47
|
+
* map : string (group key 1) →
|
|
48
|
+
* map: string (group key 2) →
|
|
49
|
+
* map: string (group key 3) → values
|
|
50
|
+
* using the map function, which is also provided with the keys.
|
|
51
|
+
*/
|
|
52
|
+
export const nestedFlatMap3 = (nested3Map, map3Func) => Object.entries(nested3Map)
|
|
53
|
+
.flatMap(([key1, nestedMap2]) => nestedFlatMap2(nestedMap2, (t, key2, key3) => map3Func(t, key1, key2, key3)));
|
|
54
|
+
//# sourceMappingURL=fp-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fp-helpers.js","sourceRoot":"","sources":["../../src/serialization/fp-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAY,MAAM,eAAe,CAAA;AAEhD;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAc,EAAU,EAAE,CACjD,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAA;AAQ3C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAO,YAAyB,EAAE,EAAE,CAC/D,CAAC,GAAsB,EAAqB,EAAE,CAC1C,MAAM,CAAC,WAAW,CACd,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;KACd,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CACzD,CAAA;AACT,gCAAgC;AAEhC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAO,YAAyB,EAAE,EAAE,CACzD,eAAe,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAA;AAEtD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAO,YAAyB,EAAE,EAAE,CACzD,eAAe,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAA;AAGpD;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CACnB,QAA0B,EACE,EAAE,CAC9B,CAAC,EAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;AAEtC;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC1B,QAA0B,EAC1B,QAA0B,EACE,EAAE,CAC9B,CAAC,EAAO,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC1E,4EAA4E;AAE5E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC1B,QAA0B,EAC1B,QAA0B,EAC1B,QAA0B,EACE,EAAE,CAC9B,CAAC,EAAO,EAAE,EAAE,CAAC,eAAe,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAI3F;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CACzB,GAAsB,EACtB,OAAkC,EAC/B,EAAE,CACL,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;KACd,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;AAE7C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC1B,UAAyB,EACzB,QAAiD,EAC9C,EAAE,CACL,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;KACrB,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,CAC5B,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAClE,CAAA;AAET;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC1B,UAAyB,EACzB,QAA+D,EAC5D,EAAE,CACL,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;KACrB,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,CAC5B,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAC/E,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { looksLikeSerializedLanguages,
|
|
1
|
+
export { looksLikeSerializedLanguages, readSerializationChunk, tryReadAllAsLanguages, tryReadAsLanguages } from "./chunk.js";
|
|
2
2
|
export { measure } from "./measurer.js";
|
|
3
3
|
export { orderedSerializationChunk } from "./ordering.js";
|
|
4
4
|
export { sortedSerializationChunk } from "./sorting.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/serialization/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,4BAA4B,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/serialization/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,4BAA4B,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,kBAAkB,EAAC,MAAM,YAAY,CAAA;AAC1H,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAA;AACrC,OAAO,EAAC,yBAAyB,EAAC,MAAM,eAAe,CAAA;AACvD,OAAO,EAAC,wBAAwB,EAAC,MAAM,cAAc,CAAA;AACrD,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { looksLikeSerializedLanguages,
|
|
1
|
+
export { looksLikeSerializedLanguages, readSerializationChunk, tryReadAllAsLanguages, tryReadAsLanguages } from "./chunk.js";
|
|
2
2
|
export { measure } from "./measurer.js";
|
|
3
3
|
export { orderedSerializationChunk } from "./ordering.js";
|
|
4
4
|
export { sortedSerializationChunk } from "./sorting.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/serialization/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,4BAA4B,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/serialization/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,4BAA4B,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,kBAAkB,EAAC,MAAM,YAAY,CAAA;AAC1H,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAA;AACrC,OAAO,EAAC,yBAAyB,EAAC,MAAM,eAAe,CAAA;AACvD,OAAO,EAAC,wBAAwB,EAAC,MAAM,cAAc,CAAA;AACrD,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAA"}
|
|
@@ -1,21 +1,10 @@
|
|
|
1
|
-
import { Language,
|
|
2
|
-
|
|
3
|
-
key: string;
|
|
4
|
-
language: string;
|
|
5
|
-
version: string;
|
|
6
|
-
name?: string;
|
|
7
|
-
count: number;
|
|
8
|
-
};
|
|
9
|
-
type Metrics = {
|
|
10
|
-
instantiations: ClassifierInstantiationMetric[];
|
|
11
|
-
unusedConcreteConcepts: MetaPointer[];
|
|
12
|
-
};
|
|
1
|
+
import { Language, SerializationChunk } from "@lionweb/core";
|
|
2
|
+
import { Metrics } from "./metric-types.js";
|
|
13
3
|
/**
|
|
14
|
-
* Computes {@link Metrics metrics} on the given {@link SerializationChunk
|
|
4
|
+
* Computes {@link Metrics metrics} on the given {@link SerializationChunk serialization chunk}.
|
|
15
5
|
* Passing it {@link Language languages} make this language-aware:
|
|
16
|
-
* * classifier names are looked up,
|
|
17
|
-
* * unused
|
|
6
|
+
* * language and classifier names are looked up,
|
|
7
|
+
* * unused instantiable classifiers and languages without instantiations are computed as well.
|
|
18
8
|
*/
|
|
19
9
|
export declare const measure: (serializationChunk: SerializationChunk, languages: Language[]) => Metrics;
|
|
20
|
-
export {};
|
|
21
10
|
//# sourceMappingURL=measurer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"measurer.d.ts","sourceRoot":"","sources":["../../src/serialization/measurer.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"measurer.d.ts","sourceRoot":"","sources":["../../src/serialization/measurer.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,QAAQ,EAIR,kBAAkB,EAGrB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAsB,OAAO,EAAC,MAAM,mBAAmB,CAAA;AAS9D;;;;;GAKG;AACH,eAAO,MAAM,OAAO,uBAAwB,kBAAkB,aAAa,QAAQ,EAAE,KAAG,OAkGvF,CAAA"}
|
|
@@ -1,30 +1,76 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Annotation, Concept, instantiableClassifiersOf, Interface, MemoisingSymbolTable } from "@lionweb/core";
|
|
2
|
+
import { nested3Grouper, nested3Mapper, nestedFlatMap2, nestedFlatMap3, sumNumbers } from "./fp-helpers.js";
|
|
2
3
|
/**
|
|
3
|
-
* Computes {@link Metrics metrics} on the given {@link SerializationChunk
|
|
4
|
+
* Computes {@link Metrics metrics} on the given {@link SerializationChunk serialization chunk}.
|
|
4
5
|
* Passing it {@link Language languages} make this language-aware:
|
|
5
|
-
* * classifier names are looked up,
|
|
6
|
-
* * unused
|
|
6
|
+
* * language and classifier names are looked up,
|
|
7
|
+
* * unused instantiable classifiers and languages without instantiations are computed as well.
|
|
7
8
|
*/
|
|
8
9
|
export const measure = (serializationChunk, languages) => {
|
|
9
10
|
const symbolTable = new MemoisingSymbolTable(languages);
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
11
|
+
// group nodes by language key, version, and classifier key, mapped to the classifier meta-pointer and #instantiations:
|
|
12
|
+
const languageKey2version2classifierKey2info = nested3Mapper((nodes) => ({ classifier: nodes[0].classifier, instantiations: nodes.length }))(nested3Grouper(({ classifier }) => classifier.language, ({ classifier }) => classifier.version, ({ classifier }) => classifier.key)(serializationChunk.nodes));
|
|
13
|
+
const languagesWithInstantiations = nestedFlatMap2(languageKey2version2classifierKey2info, (classifierKey2info, languageKey, version) => ({
|
|
14
|
+
key: languageKey,
|
|
15
|
+
version,
|
|
16
|
+
name: symbolTable.languageMatching(languageKey, version)?.name,
|
|
17
|
+
instantiations: sumNumbers(Object.values(classifierKey2info).map((info) => info.instantiations))
|
|
18
|
+
}));
|
|
19
|
+
const metaTypeOf = (entity) => {
|
|
20
|
+
if (entity instanceof Annotation) {
|
|
21
|
+
return "annotation";
|
|
22
|
+
}
|
|
23
|
+
if (entity instanceof Concept) {
|
|
24
|
+
return "concept";
|
|
25
|
+
}
|
|
26
|
+
if (entity instanceof Interface) {
|
|
27
|
+
return "interface";
|
|
28
|
+
}
|
|
29
|
+
return undefined;
|
|
30
|
+
};
|
|
31
|
+
// map grouped nodes to info including #instantiations:
|
|
32
|
+
const instantiatedClassifiers = nestedFlatMap3(languageKey2version2classifierKey2info, (info, languageKey, version, classifierKey) => {
|
|
33
|
+
const classifier = symbolTable.entityMatching(info.classifier);
|
|
34
|
+
return ({
|
|
35
|
+
language: {
|
|
36
|
+
key: languageKey,
|
|
37
|
+
version,
|
|
38
|
+
name: symbolTable.languageMatching(languageKey, version)?.name
|
|
39
|
+
},
|
|
40
|
+
key: classifierKey,
|
|
41
|
+
name: classifier?.name,
|
|
42
|
+
metaType: metaTypeOf(classifier),
|
|
43
|
+
instantiations: info.instantiations
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
const doesLanguageHaveInstantiations = (language) => language.key in languageKey2version2classifierKey2info
|
|
47
|
+
&& language.version in languageKey2version2classifierKey2info[language.key];
|
|
48
|
+
const languagesWithoutInstantiations = serializationChunk.languages
|
|
49
|
+
.filter((language) => !doesLanguageHaveInstantiations(language))
|
|
50
|
+
.map((language) => ({
|
|
51
|
+
...language,
|
|
52
|
+
name: symbolTable.languageMatching(language.key, language.version)?.name
|
|
53
|
+
}));
|
|
54
|
+
const isClassifierUsed = (metaPointer) => metaPointer.language in languageKey2version2classifierKey2info
|
|
55
|
+
&& metaPointer.version in languageKey2version2classifierKey2info[metaPointer.language]
|
|
56
|
+
&& metaPointer.key in languageKey2version2classifierKey2info[metaPointer.language][metaPointer.version];
|
|
57
|
+
const uninstantiatedInstantiableClassifiers = languages.flatMap(instantiableClassifiersOf)
|
|
58
|
+
.map((classifier) => classifier.metaPointer())
|
|
59
|
+
.filter((metaPointer) => !isClassifierUsed(metaPointer))
|
|
60
|
+
.map((metaPointer) => ({
|
|
61
|
+
language: {
|
|
62
|
+
key: metaPointer.language,
|
|
63
|
+
version: metaPointer.version,
|
|
64
|
+
name: symbolTable.languageMatching(metaPointer.language, metaPointer.version)?.name
|
|
65
|
+
},
|
|
66
|
+
key: metaPointer.key,
|
|
67
|
+
name: symbolTable.entityMatching(metaPointer)?.name
|
|
18
68
|
}));
|
|
19
|
-
// compute all concrete concepts for the language:
|
|
20
|
-
const concreteConcepts = languages.flatMap(conceptsOf).filter((concept) => !concept.abstract);
|
|
21
|
-
const unusedConcreteConcepts = concreteConcepts
|
|
22
|
-
.map((concept) => concept.metaPointer())
|
|
23
|
-
.filter((metaPointer) => !(metaPointerAsText(metaPointer) in groupedInstantiations));
|
|
24
|
-
// return the metrics object:
|
|
25
69
|
return {
|
|
26
|
-
|
|
27
|
-
|
|
70
|
+
languagesWithInstantiations,
|
|
71
|
+
instantiatedClassifiers,
|
|
72
|
+
languagesWithoutInstantiations,
|
|
73
|
+
uninstantiatedInstantiableClassifiers
|
|
28
74
|
};
|
|
29
75
|
};
|
|
30
76
|
//# sourceMappingURL=measurer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"measurer.js","sourceRoot":"","sources":["../../src/serialization/measurer.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"measurer.js","sourceRoot":"","sources":["../../src/serialization/measurer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
type OptionallyNamed = {
|
|
2
|
+
name?: string;
|
|
3
|
+
};
|
|
4
|
+
type LanguagePointer = {
|
|
5
|
+
key: string;
|
|
6
|
+
version: string;
|
|
7
|
+
} & OptionallyNamed;
|
|
8
|
+
type ClassifierMetric = {
|
|
9
|
+
language: LanguagePointer;
|
|
10
|
+
key: string;
|
|
11
|
+
} & OptionallyNamed;
|
|
12
|
+
type ClassifierMetaTypes = "annotation" | "concept" | "interface";
|
|
13
|
+
type ClassifierInstantiationMetric = {
|
|
14
|
+
metaType?: ClassifierMetaTypes;
|
|
15
|
+
instantiations: number;
|
|
16
|
+
} & ClassifierMetric;
|
|
17
|
+
type LanguageMetric = {
|
|
18
|
+
instantiations: number;
|
|
19
|
+
} & LanguagePointer;
|
|
20
|
+
type Metrics = {
|
|
21
|
+
languagesWithInstantiations: LanguageMetric[];
|
|
22
|
+
instantiatedClassifiers: ClassifierInstantiationMetric[];
|
|
23
|
+
uninstantiatedInstantiableClassifiers: ClassifierMetric[];
|
|
24
|
+
languagesWithoutInstantiations: LanguagePointer[];
|
|
25
|
+
};
|
|
26
|
+
export type { ClassifierInstantiationMetric, ClassifierMetaTypes, LanguagePointer, Metrics };
|
|
27
|
+
//# sourceMappingURL=metric-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metric-types.d.ts","sourceRoot":"","sources":["../../src/serialization/metric-types.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,KAAK,eAAe,GAAG;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;CAClB,GAAG,eAAe,CAAA;AAEJ,KAAK,gBAAgB,GAAG;IACnC,QAAQ,EAAE,eAAe,CAAA;IACzB,GAAG,EAAE,MAAM,CAAA;CACd,GAAG,eAAe,CAAA;AAEnB,KAAK,mBAAmB,GAAG,YAAY,GAAG,SAAS,GAAG,WAAW,CAAA;AAEjE,KAAK,6BAA6B,GAAG;IACjC,QAAQ,CAAC,EAAE,mBAAmB,CAAA;IAC9B,cAAc,EAAE,MAAM,CAAA;CACzB,GAAG,gBAAgB,CAAA;AAEpB,KAAK,cAAc,GAAG;IAClB,cAAc,EAAE,MAAM,CAAA;CACzB,GAAG,eAAe,CAAA;AAGnB,KAAK,OAAO,GAAG;IACX,2BAA2B,EAAE,cAAc,EAAE,CAAA;IAC7C,uBAAuB,EAAE,6BAA6B,EAAE,CAAA;IACxD,qCAAqC,EAAE,gBAAgB,EAAE,CAAA;IACzD,8BAA8B,EAAE,eAAe,EAAE,CAAA;CACpD,CAAA;AAGD,YAAY,EACR,6BAA6B,EAC7B,mBAAmB,EACnB,eAAe,EACf,OAAO,EACV,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metric-types.js","sourceRoot":"","sources":["../../src/serialization/metric-types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lionweb/utilities",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.4-beta.0",
|
|
4
4
|
"description": "LionWeb utilities",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -15,14 +15,15 @@
|
|
|
15
15
|
"url": "https://github.com/LionWeb-io/lionweb-typescript/issues"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@lionweb/core": "0.6.
|
|
18
|
+
"@lionweb/core": "0.6.4-beta.0",
|
|
19
19
|
"littoral-templates": "0.2.2",
|
|
20
20
|
"nanoid": "4.0.2"
|
|
21
21
|
},
|
|
22
22
|
"scripts": {
|
|
23
|
-
"clean": "rm -rf dist/",
|
|
23
|
+
"clean": "rm -rf dist/ lionweb-utilities-*.tgz",
|
|
24
24
|
"build": "tsc",
|
|
25
25
|
"lint": "eslint src",
|
|
26
|
-
"release": "npm publish"
|
|
26
|
+
"release": "npm publish",
|
|
27
|
+
"release-beta": "npm publish --beta"
|
|
27
28
|
}
|
|
28
29
|
}
|