@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 +4 -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 +100 -0
- package/dist/inferLanguages.js.map +1 -0
- package/package.json +2 -2
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
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 @@
|
|
|
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.
|
|
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.
|
|
18
|
+
"@lionweb/core": "0.6.3",
|
|
19
19
|
"littoral-templates": "0.2.2",
|
|
20
20
|
"nanoid": "4.0.2"
|
|
21
21
|
},
|