@lionweb/core 0.6.0-beta.2 → 0.6.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 +6 -1
- package/dist/deserializer.d.ts.map +1 -1
- package/dist/deserializer.js +15 -10
- package/dist/deserializer.js.map +1 -1
- 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/symbol-table.d.ts +44 -0
- package/dist/symbol-table.d.ts.map +1 -0
- package/dist/symbol-table.js +61 -0
- package/dist/symbol-table.js.map +1 -0
- package/package.json +5 -5
- package/build.sh +0 -6
package/README.md
CHANGED
|
@@ -25,6 +25,11 @@ The following is a list of links to potential starting points:
|
|
|
25
25
|
|
|
26
26
|
## Changelog
|
|
27
27
|
|
|
28
|
+
### 0.6.0
|
|
29
|
+
|
|
30
|
+
* Introduce a type `SymbolTable` to encapsulate lookup of languages' entities and their features.
|
|
31
|
+
* Provide a naive and a memoising implementation of the `SymbolTable` abstraction, and use the latter in the deserializer to make that (a bit) more performant.
|
|
32
|
+
|
|
28
33
|
### 0.5.0
|
|
29
34
|
|
|
30
35
|
This is the first version corresponding to a release of LionWeb (version: 2023.1) as a whole.
|
|
@@ -63,6 +68,6 @@ No changelog has been kept for previous versions, regardless of whether these we
|
|
|
63
68
|
Build it from source as follows:
|
|
64
69
|
|
|
65
70
|
```shell
|
|
66
|
-
|
|
71
|
+
npm run build
|
|
67
72
|
```
|
|
68
73
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deserializer.d.ts","sourceRoot":"","sources":["../src/deserializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,IAAI,EAAC,MAAM,YAAY,CAAA;AACnC,OAAO,EAAoC,kBAAkB,EAAiB,MAAM,oBAAoB,CAAA;AACxG,OAAO,EAAC,mBAAmB,EAAC,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"deserializer.d.ts","sourceRoot":"","sources":["../src/deserializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,IAAI,EAAC,MAAM,YAAY,CAAA;AACnC,OAAO,EAAoC,kBAAkB,EAAiB,MAAM,oBAAoB,CAAA;AACxG,OAAO,EAAC,mBAAmB,EAAC,MAAM,aAAa,CAAA;AAE/C,OAAO,EAAuC,QAAQ,EAAqC,MAAM,eAAe,CAAA;AAkBhH;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,wCACL,kBAAkB,2DAE3B,QAAQ,EAAE,kBAEL,IAAI,EAAE,SAmJzB,CAAA"}
|
package/dist/deserializer.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { currentSerializationFormatVersion } from "./serialization.js";
|
|
2
|
+
import { MemoisingSymbolTable } from "./symbol-table.js";
|
|
2
3
|
import { Classifier, Containment, Enumeration, PrimitiveType, Property, Reference } from "./m3/types.js";
|
|
3
4
|
import { allFeaturesOf } from "./m3/functions.js";
|
|
4
5
|
import { deserializeBuiltin } from "./m3/builtins.js";
|
|
@@ -29,7 +30,7 @@ dependentNodes
|
|
|
29
30
|
if (serializationChunk.serializationFormatVersion !== currentSerializationFormatVersion) {
|
|
30
31
|
throw new Error(`can't deserialize from serialization format other than version "${currentSerializationFormatVersion}"`);
|
|
31
32
|
}
|
|
32
|
-
const
|
|
33
|
+
const symbolTable = new MemoisingSymbolTable(languages);
|
|
33
34
|
const { nodes: serializedNodes } = serializationChunk;
|
|
34
35
|
const serializedRootNodes = serializedNodes.filter(({ parent }) => parent === null);
|
|
35
36
|
if (serializedRootNodes.length === 0) {
|
|
@@ -55,12 +56,8 @@ dependentNodes
|
|
|
55
56
|
* Instantiates a {@link Node} from its {@link SerializedNode serialization}.
|
|
56
57
|
*/
|
|
57
58
|
const instantiate = ({ id, classifier: classifierMetaPointer, properties, containments, references, annotations }, parent) => {
|
|
58
|
-
const classifier =
|
|
59
|
-
|
|
60
|
-
&& element.key === classifierMetaPointer.key
|
|
61
|
-
&& element.language.key === classifierMetaPointer.language
|
|
62
|
-
&& element.language.version === classifierMetaPointer.version);
|
|
63
|
-
if (classifier === undefined) {
|
|
59
|
+
const classifier = symbolTable.entityMatching(classifierMetaPointer);
|
|
60
|
+
if (classifier === undefined || !(classifier instanceof Classifier)) {
|
|
64
61
|
throw new Error(`can't deserialize a node having a classifier with key "${classifierMetaPointer.key}"`);
|
|
65
62
|
}
|
|
66
63
|
const allFeatures = allFeaturesOf(classifier);
|
|
@@ -101,12 +98,18 @@ dependentNodes
|
|
|
101
98
|
if (feature.multiple) {
|
|
102
99
|
childIds
|
|
103
100
|
.forEach((childId) => {
|
|
104
|
-
|
|
101
|
+
if (childId in serializedNodeById) {
|
|
102
|
+
instantiationFacade.setFeatureValue(node, feature, instantiateMemoised(serializedNodeById[childId], node));
|
|
103
|
+
}
|
|
105
104
|
});
|
|
106
105
|
}
|
|
107
106
|
else {
|
|
108
107
|
if (childIds.length > 0) {
|
|
109
|
-
|
|
108
|
+
// just set the 1st one:
|
|
109
|
+
const firstChildId = childIds[0];
|
|
110
|
+
if (firstChildId in serializedNodeById) {
|
|
111
|
+
instantiationFacade.setFeatureValue(node, feature, instantiateMemoised(serializedNodeById[firstChildId], node));
|
|
112
|
+
}
|
|
110
113
|
}
|
|
111
114
|
}
|
|
112
115
|
}
|
|
@@ -117,7 +120,9 @@ dependentNodes
|
|
|
117
120
|
.map((refId) => [node, feature, refId])));
|
|
118
121
|
}
|
|
119
122
|
});
|
|
120
|
-
node.annotations = annotations
|
|
123
|
+
node.annotations = annotations
|
|
124
|
+
.filter((annotationId) => annotationId in serializedNodeById)
|
|
125
|
+
.map((annotationId) => instantiateMemoised(serializedNodeById[annotationId]));
|
|
121
126
|
return node;
|
|
122
127
|
};
|
|
123
128
|
const rootNodes = serializedRootNodes.map((serializedRootNode) => instantiateMemoised(serializedRootNode));
|
package/dist/deserializer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deserializer.js","sourceRoot":"","sources":["../src/deserializer.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,iCAAiC,EAAqC,MAAM,oBAAoB,CAAA;AAExG,OAAO,
|
|
1
|
+
{"version":3,"file":"deserializer.js","sourceRoot":"","sources":["../src/deserializer.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export * from "./functions.js";
|
|
|
5
5
|
export * from "./references.js";
|
|
6
6
|
export * from "./serializer.js";
|
|
7
7
|
export * from "./serialization.js";
|
|
8
|
+
export * from "./symbol-table.js";
|
|
8
9
|
export * from "./types.js";
|
|
9
10
|
export * from "./utils/index.js";
|
|
10
11
|
export * from "./version.js";
|
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,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -5,6 +5,7 @@ export * from "./functions.js";
|
|
|
5
5
|
export * from "./references.js";
|
|
6
6
|
export * from "./serializer.js";
|
|
7
7
|
export * from "./serialization.js";
|
|
8
|
+
export * from "./symbol-table.js";
|
|
8
9
|
export * from "./types.js";
|
|
9
10
|
export * from "./utils/index.js";
|
|
10
11
|
export * from "./version.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Feature, Language, LanguageEntity } from "./m3/index.js";
|
|
2
|
+
import { MetaPointer } from "./serialization.js";
|
|
3
|
+
/**
|
|
4
|
+
* Interface for objects that can look up within languages, based on given {@link MetaPointer meta pointers}.
|
|
5
|
+
* This is meant to be able to properly encapsulate performance optimizations, also outside of the context
|
|
6
|
+
* of deserialization.
|
|
7
|
+
*/
|
|
8
|
+
interface SymbolTable {
|
|
9
|
+
/**
|
|
10
|
+
*
|
|
11
|
+
* Looks up the {@link LanguageEntity}, as pointed to by the given {@link MetaPointer},
|
|
12
|
+
* or {@code undefined} if it couldn't be found.
|
|
13
|
+
*/
|
|
14
|
+
entityMatching(entityMetaPointer: MetaPointer): LanguageEntity | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Looks up the {@link Feature}, as pointed to by the {@link MetaPointer} given second,
|
|
17
|
+
* as a feature of the {@link Classifier}, as pointed to by the {@link MetaPointer} given first,
|
|
18
|
+
* or {@code undefined} it it couldn't be found.
|
|
19
|
+
* <em>Note</em> that the {@code language} and {@code version} values of both {@link MetaPointer}-typed arguments should coincide,
|
|
20
|
+
* although this is typically not checked!
|
|
21
|
+
*/
|
|
22
|
+
featureMatching(entityMetaPointer: MetaPointer, featureMetaPointer: MetaPointer): Feature | undefined;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Naive, non-performant implementation of {@link SymbolTable}.
|
|
26
|
+
*/
|
|
27
|
+
declare class NaiveSymbolTable implements SymbolTable {
|
|
28
|
+
private readonly languages;
|
|
29
|
+
constructor(languages: Language[]);
|
|
30
|
+
private languageMatching;
|
|
31
|
+
entityMatching(entityMetaPointer: MetaPointer): LanguageEntity | undefined;
|
|
32
|
+
featureMatching(classifierMetaPointer: MetaPointer, featureMetaPointer: MetaPointer): Feature | undefined;
|
|
33
|
+
}
|
|
34
|
+
declare class MemoisingSymbolTable implements SymbolTable {
|
|
35
|
+
private readonly languages;
|
|
36
|
+
constructor(languages: Language[]);
|
|
37
|
+
private readonly languageKey2version2entityKey2entityInfo;
|
|
38
|
+
private entityInfoMatching;
|
|
39
|
+
entityMatching(entityMetaPointer: MetaPointer): LanguageEntity | undefined;
|
|
40
|
+
featureMatching(classifierMetaPointer: MetaPointer, featureMetaPointer: MetaPointer): Feature | undefined;
|
|
41
|
+
}
|
|
42
|
+
export type { SymbolTable };
|
|
43
|
+
export { MemoisingSymbolTable, NaiveSymbolTable };
|
|
44
|
+
//# sourceMappingURL=symbol-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbol-table.d.ts","sourceRoot":"","sources":["../src/symbol-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAC,MAAM,eAAe,CAAA;AAC1F,OAAO,EAAC,WAAW,EAAC,MAAM,oBAAoB,CAAA;AAG9C;;;;GAIG;AACH,UAAU,WAAW;IAEjB;;;;OAIG;IACH,cAAc,CAAC,iBAAiB,EAAE,WAAW,GAAG,cAAc,GAAG,SAAS,CAAA;IAE1E;;;;;;OAMG;IACH,eAAe,CAAC,iBAAiB,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS,CAAA;CAExG;AAGD;;GAEG;AACH,cAAM,gBAAiB,YAAW,WAAW;IAEzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAE1B,SAAS,EAAE,QAAQ,EAAE;IAIjC,OAAO,CAAC,gBAAgB;IAOxB,cAAc,CAAC,iBAAiB,EAAE,WAAW,GAAG,cAAc,GAAG,SAAS;IAM1E,eAAe,CAAC,qBAAqB,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS;CAS5G;AAmBD,cAAM,oBAAqB,YAAW,WAAW;IAE7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAE1B,SAAS,EAAE,QAAQ,EAAE;IAGjC,OAAO,CAAC,QAAQ,CAAC,wCAAwC,CAA0G;IAEnK,OAAO,CAAC,kBAAkB;IAoB1B,cAAc,CAAC,iBAAiB,EAAE,WAAW,GAAG,cAAc,GAAG,SAAS;IAI1E,eAAe,CAAC,qBAAqB,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS;CAY5G;AAGD,YAAY,EACR,WAAW,EACd,CAAA;AAED,OAAO,EACH,oBAAoB,EACpB,gBAAgB,EACnB,CAAA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { allFeaturesOf, Classifier } from "./m3/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Naive, non-performant implementation of {@link SymbolTable}.
|
|
4
|
+
*/
|
|
5
|
+
class NaiveSymbolTable {
|
|
6
|
+
constructor(languages) {
|
|
7
|
+
this.languages = languages;
|
|
8
|
+
}
|
|
9
|
+
languageMatching(metaPointer) {
|
|
10
|
+
return this.languages.find((language) => language.key === metaPointer.language
|
|
11
|
+
&& language.version === metaPointer.version);
|
|
12
|
+
}
|
|
13
|
+
entityMatching(entityMetaPointer) {
|
|
14
|
+
return this.languageMatching(entityMetaPointer)
|
|
15
|
+
?.entities
|
|
16
|
+
.find((entity) => entity.key === entityMetaPointer.key);
|
|
17
|
+
}
|
|
18
|
+
featureMatching(classifierMetaPointer, featureMetaPointer) {
|
|
19
|
+
const classifier = this.entityMatching(classifierMetaPointer);
|
|
20
|
+
if (classifier === undefined || !(classifier instanceof Classifier)) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
const allFeatures = allFeaturesOf(classifier);
|
|
24
|
+
return allFeatures.find((feature) => feature.key === featureMetaPointer.key);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const lazyMapGet = (map, key, createThunk) => {
|
|
28
|
+
if (key in map) {
|
|
29
|
+
return map[key];
|
|
30
|
+
}
|
|
31
|
+
const value = createThunk();
|
|
32
|
+
map[key] = value;
|
|
33
|
+
return value;
|
|
34
|
+
};
|
|
35
|
+
class MemoisingSymbolTable {
|
|
36
|
+
constructor(languages) {
|
|
37
|
+
this.languageKey2version2entityKey2entityInfo = {};
|
|
38
|
+
this.languages = languages;
|
|
39
|
+
}
|
|
40
|
+
entityInfoMatching(entityMetaPointer) {
|
|
41
|
+
return lazyMapGet(lazyMapGet(lazyMapGet(this.languageKey2version2entityKey2entityInfo, entityMetaPointer.language, () => ({})), entityMetaPointer.version, () => ({})), entityMetaPointer.key, () => {
|
|
42
|
+
const entity = this.languages.find((language) => language.key === entityMetaPointer.language
|
|
43
|
+
&& language.version === entityMetaPointer.version)
|
|
44
|
+
?.entities
|
|
45
|
+
.find((entity) => entity.key === entityMetaPointer.key);
|
|
46
|
+
return entity && { entity, allFeatures: entity instanceof Classifier ? allFeaturesOf(entity) : [], featureKey2feature: {} };
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
entityMatching(entityMetaPointer) {
|
|
50
|
+
return this.entityInfoMatching(entityMetaPointer)?.entity;
|
|
51
|
+
}
|
|
52
|
+
featureMatching(classifierMetaPointer, featureMetaPointer) {
|
|
53
|
+
const entityInfo = this.entityInfoMatching(classifierMetaPointer);
|
|
54
|
+
if (entityInfo === undefined || !(entityInfo.entity instanceof Classifier)) {
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
return lazyMapGet(entityInfo.featureKey2feature, featureMetaPointer.key, () => entityInfo.allFeatures.find((feature) => feature.key === featureMetaPointer.key));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export { MemoisingSymbolTable, NaiveSymbolTable };
|
|
61
|
+
//# sourceMappingURL=symbol-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbol-table.js","sourceRoot":"","sources":["../src/symbol-table.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lionweb/core",
|
|
3
|
-
"version": "0.6.0
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "LionWeb core for {Java|Type}Script",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
"bugs": {
|
|
15
15
|
"url": "https://github.com/LionWeb-io/lionweb-typescript/issues"
|
|
16
16
|
},
|
|
17
|
-
"devDependencies": {
|
|
18
|
-
"typescript": "5.3.3"
|
|
19
|
-
},
|
|
20
17
|
"scripts": {
|
|
21
|
-
"
|
|
18
|
+
"clean": "rm -rf dist/ lionweb-core-*.tgz",
|
|
19
|
+
"build": "tsc",
|
|
20
|
+
"lint": "eslint src",
|
|
21
|
+
"release": "npm publish"
|
|
22
22
|
}
|
|
23
23
|
}
|