@lionweb/utilities 0.6.2 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -22,6 +22,10 @@ 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
+
25
29
  ### 0.6.2
26
30
 
27
31
  * 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 function inferLanguagesFromChunk(chunk: SerializationChunk): Language[];
3
+ export declare function 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,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,kBAAkB,GAAG,QAAQ,EAAE,CAmG7E;AAUD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,UASnD"}
@@ -0,0 +1,100 @@
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 function inferLanguagesFromChunk(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 = getLanguage(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
+ function getLanguage(languages, languageName) {
79
+ const language = languages.get(languageName);
80
+ if (language === undefined) {
81
+ throw new Error(`Language '${languageName} is not exist in the languages section`);
82
+ }
83
+ return language;
84
+ }
85
+ export function 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
+ function isBoolean(value) {
95
+ return value === "true" || value === "false";
96
+ }
97
+ function isNumeric(value) {
98
+ return !isNaN(parseFloat(value));
99
+ }
100
+ //# sourceMappingURL=inferLanguages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inferLanguages.js","sourceRoot":"","sources":["../src/inferLanguages.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lionweb/utilities",
3
- "version": "0.6.2",
3
+ "version": "0.6.3",
4
4
  "description": "LionWeb utilities",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -15,7 +15,7 @@
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.3",
19
19
  "littoral-templates": "0.2.2",
20
20
  "nanoid": "4.0.2"
21
21
  },