@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 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
@@ -2,4 +2,5 @@ export * from "./hashing.js";
2
2
  export * from "./json.js";
3
3
  export * from "./m3/index.js";
4
4
  export * from "./serialization/index.js";
5
+ export * from "./inferLanguages.js";
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -2,4 +2,5 @@ export * from "./hashing.js";
2
2
  export * from "./json.js";
3
3
  export * from "./m3/index.js";
4
4
  export * from "./serialization/index.js";
5
+ export * from "./inferLanguages.js";
5
6
  //# sourceMappingURL=index.js.map
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
- export declare const readChunk: (path: string) => Promise<SerializationChunk>;
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
- * Check whether the given path exists, is a JSON file containing the serialization of languages,
6
- * and attempt to deserialize when it is. If any of that fails, return an empty list.
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 tryLoadAsLanguages: (path: string) => Promise<Language[]>;
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,EACrB,MAAM,eAAe,CAAA;AAItB,eAAO,MAAM,SAAS,SAAgB,MAAM,gCAO3C,CAAA;AAMD,eAAO,MAAM,4BAA4B,SAAU,OAAO,KAAG,OAKqC,CAAA;AAGlG;;;GAGG;AACH,eAAO,MAAM,kBAAkB,SAAgB,MAAM,KAAG,QAAQ,QAAQ,EAAE,CAazE,CAAA;AAGD,eAAO,MAAM,qBAAqB,UAAiB,MAAM,EAAE,KAAG,QAAQ,QAAQ,EAAE,CACnB,CAAA"}
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
- export const readChunk = async (path) => {
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
- * Check whether the given path exists, is a JSON file containing the serialization of languages,
20
- * and attempt to deserialize when it is. If any of that fails, return an empty list.
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 tryLoadAsLanguages = async (path) => {
23
- const chunk = await readChunk(path);
24
- if (!looksLikeSerializedLanguages(chunk)) {
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(chunk);
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
- export const tryLoadAllAsLanguages = async (paths) => (await Promise.all(paths.map(tryLoadAsLanguages))).flat();
38
- // TODO load languages “in dependency order”, i.e.: later-named languages can be dependent on earlier-named languages -- (this is a foldRight, really)
39
- // TODO make names consistent: "load" vs. "read", "chunk" vs. "serialization chunk"
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,EAEd,MAAM,eAAe,CAAA;AACtB,OAAO,EAAC,cAAc,EAAC,MAAM,YAAY,CAAA;AAGzC,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;IAC5C,IAAI,CAAC;QACD,OAAO,cAAc,CAAC,IAAI,CAAuB,CAAA;IACrD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,2BAA2B,CAAC,CAAA;QACjD,MAAM,CAAC,CAAA;IACX,CAAC;AACL,CAAC,CAAA;AAGD,MAAM,QAAQ,GAAG,CAAC,IAAa,EAAmC,EAAE,CAChE,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAEpD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,IAAa,EAAW,EAAE,CACnE,QAAQ,CAAC,IAAI,CAAC;OACX,IAAI,CAAC,4BAA4B,CAAC,KAAK,iCAAiC;OACxE,WAAW,IAAI,IAAI;OACnB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;OAChC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,CAAA;AAGlG;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,IAAY,EAAuB,EAAE;IAC1E,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAA;IACnC,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,gEAAgE,CAAC,CAAA;QACtF,OAAO,EAAE,CAAA;IACb,CAAC;IACD,IAAI,CAAC;QACD,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAA;QAC1C,8DAA8D;IAC1D,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,mEAAmE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;QACpG,OAAO,EAAE,CAAA;IACb,CAAC;AACL,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAE,KAAe,EAAuB,EAAE,CAChF,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AAC7D,uJAAuJ;AAGvJ,oFAAoF"}
1
+ {"version":3,"file":"chunk.js","sourceRoot":"","sources":["../../src/serialization/chunk.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iCAAiC,EACjC,oBAAoB,EAEpB,WAAW,EAGd,MAAM,eAAe,CAAA;AACtB,OAAO,EAAC,cAAc,EAAC,MAAM,YAAY,CAAA;AAGzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;IACzD,IAAI,CAAC;QACD,OAAO,cAAc,CAAC,IAAI,CAAuB,CAAA;IACrD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,2BAA2B,CAAC,CAAA;QACjD,MAAM,CAAC,CAAA;IACX,CAAC;AACL,CAAC,CAAA;AACD,4FAA4F;AAG5F,MAAM,QAAQ,GAAG,CAAC,IAAa,EAAmC,EAAE,CAChE,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAEpD;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,IAAa,EAAW,EAAE,CACnE,QAAQ,CAAC,IAAI,CAAC;OACX,IAAI,CAAC,4BAA4B,CAAC,KAAK,iCAAiC;OACxE,WAAW,IAAI,IAAI;OACnB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;OAChC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,CAAA;AAGlG;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,IAAY,EAAuB,EAAE;IAC1E,MAAM,kBAAkB,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,CAAA;IAC7D,IAAI,CAAC,4BAA4B,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,gEAAgE,CAAC,CAAA;QACtF,OAAO,EAAE,CAAA;IACb,CAAC;IACD,IAAI,CAAC;QACD,OAAO,oBAAoB,CAAC,kBAAkB,CAAC,CAAA;QACvD,8DAA8D;IAC1D,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,mEAAmE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;QACpG,OAAO,EAAE,CAAA;IACb,CAAC;AACL,CAAC,CAAA;AAGD,MAAM,eAAe,GAAG,CAAI,GAAY,EAAE,SAAkC,EAAE,EAAE,CAC5E,GAAG,CAAC,MAAM,CACN,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CACR;IACI,GAAG,GAAG;IACN,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3D,EACL,EAAE,CACL,CAAA;AAEL,MAAM,QAAQ,GAAG,CAAC,IAAiC,EAAE,KAAkC,EAAW,EAAE,CAChG,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAA;AAG5D;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,mBAAyC,EAAsB,EAAE,CAC3F,CAAC;IACG,0BAA0B,EAAE,iCAAiC;IAC7D,SAAS,EAAE,eAAe,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC;IAC3F,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC;CAC3D,CAAC,CAAA;AAGN;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAE,KAAe,EAAuB,EAAE;IAChF,MAAM,mBAAmB,GACrB,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;SACrD,MAAM,CAAC,CAAC,kBAAkB,EAAE,KAAK,EAAE,EAAE;QAClC,MAAM,EAAE,GAAG,4BAA4B,CAAC,kBAAkB,CAAC,CAAA;QAC3D,IAAI,CAAC,EAAE,EAAE,CAAC;YACN,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;YACzB,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,gEAAgE,CAAC,CAAA;QAC1F,CAAC;QACD,OAAO,EAAE,CAAA;IACb,CAAC,CAAC,CAAA;IACN,IAAI,CAAC;QACD,OAAO,oBAAoB,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAA;QACvE,8DAA8D;IAC1D,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,iFAAiF,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;QAC3G,OAAO,EAAE,CAAA;IACb,CAAC;AACL,CAAC,CAAA"}
@@ -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) &rarr; 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) &rarr;
19
+ * map : string (group key 2) &rarr; 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) &rarr;
25
+ * map : string (group key 2) &rarr;
26
+ * map : string (group key 3) &rarr; 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) &rarr; 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) &rarr;
38
+ * map: string (group key 2) &rarr; 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) &rarr;
45
+ * map: string (group key 2) &rarr;
46
+ * map: string (group key 3) &rarr; 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) &rarr; 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) &rarr;
19
+ * map : string (group key 2) &rarr; 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) &rarr;
26
+ * map : string (group key 2) &rarr;
27
+ * map : string (group key 3) &rarr; 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) &rarr; 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) &rarr;
40
+ * map: string (group key 2) &rarr; 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) &rarr;
48
+ * map: string (group key 2) &rarr;
49
+ * map: string (group key 3) &rarr; 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":"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"}
@@ -1,4 +1,4 @@
1
- export { looksLikeSerializedLanguages, readChunk, tryLoadAllAsLanguages, tryLoadAsLanguages } from "./chunk.js";
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,SAAS,EAAE,qBAAqB,EAAE,kBAAkB,EAAC,MAAM,YAAY,CAAA;AAC7G,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
+ {"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, readChunk, tryLoadAllAsLanguages, tryLoadAsLanguages } from "./chunk.js";
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,SAAS,EAAE,qBAAqB,EAAE,kBAAkB,EAAC,MAAM,YAAY,CAAA;AAC7G,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
+ {"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, MetaPointer, SerializationChunk } from "@lionweb/core";
2
- type ClassifierInstantiationMetric = {
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 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 concrete concepts are computed as well.
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,EAAsB,QAAQ,EAAwB,WAAW,EAAE,kBAAkB,EAAC,MAAM,eAAe,CAAA;AAGlH,KAAK,6BAA6B,GAAG;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CAEhB,CAAA;AAED,KAAK,OAAO,GAAG;IACX,cAAc,EAAE,6BAA6B,EAAE,CAAA;IAC/C,sBAAsB,EAAE,WAAW,EAAE,CAAA;CACxC,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,OAAO,uBAAwB,kBAAkB,aAAa,QAAQ,EAAE,KAAG,OA0BvF,CAAA"}
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 { conceptsOf, groupBy, MemoisingSymbolTable } from "@lionweb/core";
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 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 concrete concepts are computed as well.
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
- const metaPointerAsText = (classifier) => `${classifier.key}:${classifier.language}:${classifier.version}`;
11
- // group nodes by classifier key, language, and version:
12
- const groupedInstantiations = groupBy(serializationChunk.nodes, ({ classifier }) => metaPointerAsText(classifier));
13
- // map grouped nodes to instantiations with count:
14
- const instantiations = Object.values(groupedInstantiations).map((nodes) => ({
15
- ...nodes[0].classifier,
16
- name: symbolTable.entityMatching(nodes[0].classifier)?.name,
17
- count: nodes.length
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
- instantiations,
27
- unusedConcreteConcepts
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,EAAC,UAAU,EAAE,OAAO,EAAY,oBAAoB,EAAkC,MAAM,eAAe,CAAA;AAiBlH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,kBAAsC,EAAE,SAAqB,EAAW,EAAE;IAC9F,MAAM,WAAW,GAAG,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAA;IAEvD,MAAM,iBAAiB,GAAG,CAAC,UAAuB,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG,IAAI,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,OAAO,EAAE,CAAA;IAEvH,wDAAwD;IACxD,MAAM,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAA;IAElH,kDAAkD;IAClD,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU;QACtB,IAAI,EAAE,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI;QAC3D,KAAK,EAAE,KAAK,CAAC,MAAM;KACtB,CAAC,CAAC,CAAA;IAEH,kDAAkD;IAClD,MAAM,gBAAgB,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC7F,MAAM,sBAAsB,GAAG,gBAAgB;SAC1C,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;SACvC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAA;IAExF,6BAA6B;IAC7B,OAAO;QACH,cAAc;QACd,sBAAsB;KACzB,CAAA;AACL,CAAC,CAAA"}
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=metric-types.js.map
@@ -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.2",
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.2",
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
  }