@lionweb/io-lionweb-mps-specific 0.7.0-alpha.5 → 0.7.0-alpha.7

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
@@ -8,8 +8,8 @@
8
8
  ](https://www.npmjs.com/package/@lionweb/io-lionweb-mps-specific)
9
9
 
10
10
  This NPM package contains an implementation of the `io.lionweb.mps.specific` language.
11
- The MPS implementation of that language is part of the `lionweb-mps` plug-in.
12
- It's used to export MPS-specific language (structure) metadata as part of LionWeb language exports from MPS (in the LionCore M3 format).
11
+ The MPS implementation of that language is part of [the `lionweb-mps` plug-in](https://github.com/LionWeb-io/lionweb-mps/tree/mps2021.3).
12
+ The annotations in this language are used to export MPS-specific language (structure) metadata as part of LionWeb language exports from MPS (in the LionCore M3 format).
13
13
  More specifically, this pertains to metadata like the *alias*, *short description*, *documentation*, etc., of a language concept.
14
14
 
15
15
  It can be added to a TypeScript codebase as follows:
@@ -18,5 +18,17 @@ It can be added to a TypeScript codebase as follows:
18
18
  $ npm add @lionweb/io-lionweb-mps-specific
19
19
  ```
20
20
 
21
- [//]: # (TODO document API)
21
+ ## API
22
+
23
+ The API consists of the following things exported from this package:
24
+
25
+ * The _implementation_ of the language consists of the following classes: `ConceptDescription`, `Deprecated`, `KeyedDescription`, `ShortDescription`, `VirtualPackage`.
26
+ Also see [this PlantUml diagram](meta/io.lionweb.mps.specific.puml) for some more information.
27
+ * The language is _defined_ through the constant `ioLionWebMpsSpecificLanguage` (of type `Language`).
28
+ Its classifiers are exported separately through the `ioLionWebMpsSpecificClassifiers` dictionary.
29
+ * The `deserializeLanguagesWithIoLionWebMpsSpecific` function deserializes a LionWeb serialization chunk as an array of `Language`s, potentially being annotated with instances of annotations from the `io.lionweb.mps.specific` language.
30
+ * The `ioLionWebMpsSpecificAnnotationsFrom` function returns the (instances of the) `io.lionweb.mps.specific` language's annotations that annotate the given language element (of type `M3Concept`).
31
+ * The `textualizationOfAnnotationsIn` function renders an textualization of all instances of `io.lionweb.mps.specific` annotations, in the given languages' tree structure.
32
+ **Note**: only language elements having annotations (at any nesting depth) are rendered.
33
+ This is useful to get a quick overview of the annotations.
22
34
 
@@ -1,7 +1,7 @@
1
- import { M3Node } from "@lionweb/core";
1
+ import { M3Concept } from "@lionweb/core";
2
2
  import { IoLionWebMpsSpecificAnnotation } from "./implementation.js";
3
3
  /**
4
4
  * @return the `io.lionweb.mps.specific` annotations present on the given node.
5
5
  */
6
- export declare const ioLionWebMpsSpecificAnnotationsFrom: (node: M3Node) => IoLionWebMpsSpecificAnnotation[];
6
+ export declare const ioLionWebMpsSpecificAnnotationsFrom: (node: M3Concept) => IoLionWebMpsSpecificAnnotation[];
7
7
  //# sourceMappingURL=annotations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../src/annotations.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAA;AAEpE;;GAEG;AACH,eAAO,MAAM,mCAAmC,SAAU,MAAM,KAAG,8BAA8B,EAGwB,CAAA"}
1
+ {"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../src/annotations.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAA;AAEpE;;GAEG;AACH,eAAO,MAAM,mCAAmC,SAAU,SAAS,KAAG,8BAA8B,EAGqB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"annotations.js","sourceRoot":"","sources":["../src/annotations.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,EAAE;AACF,iEAAiE;AACjE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AACjC,EAAE;AACF,sEAAsE;AACtE,sCAAsC;AAGtC,OAAO,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAA;AAEpE;;GAEG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,IAAY,EAAoC,EAAE,CAClG,IAAI;KACC,WAAW;KACX,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,YAAY,8BAA8B,CAAqC,CAAA"}
1
+ {"version":3,"file":"annotations.js","sourceRoot":"","sources":["../src/annotations.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,EAAE;AACF,iEAAiE;AACjE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AACjC,EAAE;AACF,sEAAsE;AACtE,sCAAsC;AAGtC,OAAO,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAA;AAEpE;;GAEG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,IAAe,EAAoC,EAAE,CACrG,IAAI;KACC,WAAW;KACX,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,YAAY,8BAA8B,CAAqC,CAAA"}
package/dist/facade.js CHANGED
@@ -14,7 +14,7 @@
14
14
  //
15
15
  // SPDX-FileCopyrightText: 2025 TRUMPF Laser SE and other contributors
16
16
  // SPDX-License-Identifier: Apache-2.0
17
- import { areSameClassifiers, areSameLanguages, lioncore, lioncoreInstantiationFacade, updateSettingsNameBased } from "@lionweb/core";
17
+ import { areSameClassifiers, areSameLanguages, lioncore, lioncoreWriter, updateSettingsNameBased } from "@lionweb/core";
18
18
  import { ioLionWebMpsSpecificClassifiers, ioLionWebMpsSpecificLanguage } from "./definition.js";
19
19
  import { ConceptDescription, Deprecated, KeyedDescription, ShortDescription, VirtualPackage } from "./implementation.js";
20
20
  const ioLionWebMpsSpecificFactory = (parent, classifier, id, propertySettings) => {
@@ -62,7 +62,7 @@ export const combinedWriter = {
62
62
  return ioLionWebMpsSpecificFactory(parent, classifier, id, propertySettings);
63
63
  }
64
64
  if (areSameLanguages(classifier.language, lioncore)) {
65
- return lioncoreInstantiationFacade.nodeFor(parent, classifier, id, propertySettings);
65
+ return lioncoreWriter.nodeFor(parent, classifier, id, propertySettings);
66
66
  }
67
67
  throw new Error(`don't know how to instantiate a ${classifier.name} from language ${classifier.language.name} (${classifier.language.key}, ${classifier.language.version})`);
68
68
  },
@@ -1 +1 @@
1
- {"version":3,"file":"facade.js","sourceRoot":"","sources":["../src/facade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"facade.js","sourceRoot":"","sources":["../src/facade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Language } from "@lionweb/core";
2
+ /**
3
+ * @return textualization of all instances of io.lionweb.mps.specific annotations, in the given languages' tree structure.
4
+ * **Note**: only language elements having annotations (at any nesting depth) are rendered.
5
+ * This is useful to get a quick overview of the annotations.
6
+ */
7
+ export declare const textualizationOfAnnotationsIn: (languages: Language[]) => string;
8
+ //# sourceMappingURL=textualizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textualizer.d.ts","sourceRoot":"","sources":["../src/textualizer.ts"],"names":[],"mappings":"AAiBA,OAAO,EAKH,QAAQ,EAKX,MAAM,eAAe,CAAA;AAsMtB;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,cAAe,QAAQ,EAAE,KAAG,MACH,CAAA"}
@@ -0,0 +1,187 @@
1
+ // Copyright 2025 TRUMPF Laser SE and other contributors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License")
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+ // SPDX-FileCopyrightText: 2025 TRUMPF Laser SE and other contributors
16
+ // SPDX-License-Identifier: Apache-2.0
17
+ import { Classifier, Enumeration, EnumerationLiteral, Feature, Language, LanguageEntity, PrimitiveType } from "@lionweb/core";
18
+ import { indent, withFirstLower } from "@lionweb/textgen-utils";
19
+ import { asString, when } from "littoral-templates";
20
+ import { ConceptDescription, Deprecated, KeyedDescription, ShortDescription, VirtualPackage } from "./implementation.js";
21
+ import { ioLionWebMpsSpecificAnnotationsFrom } from "./annotations.js";
22
+ /**
23
+ * @return human-readable text of the location/“path to” the given {@link Node node},
24
+ * which is *assumed* to be a language element – i.e., a {@link M3Concept}.
25
+ */
26
+ const pathTo = (node) => {
27
+ if (node instanceof LanguageEntity) {
28
+ return `${withFirstLower(node.metaType())} ${node.name} in ${pathTo(node.language)}`;
29
+ }
30
+ if (node instanceof EnumerationLiteral) {
31
+ return `literal ${node.name} of ${pathTo(node.enumeration)}`;
32
+ }
33
+ if (node instanceof Feature) {
34
+ return `${withFirstLower(node.metaType())} ${node.name} of ${pathTo(node.classifier)}`;
35
+ }
36
+ if (node instanceof Language) {
37
+ return `language ${node.name}`;
38
+ }
39
+ throw new Error(`don't know how to handle an instance of ${node.constructor.name}`);
40
+ };
41
+ /**
42
+ * @return a textualization of the given io.lionweb.mps.specific annotation.
43
+ */
44
+ const textualizationOfAnnotation = (annotation) => {
45
+ const textualizeProperty = (propertyName, displayName) => {
46
+ const value = annotation[propertyName];
47
+ return value === undefined
48
+ ? undefined
49
+ : `${displayName}: ${value}`;
50
+ };
51
+ const textualizePropertiesWithDisplayNames = (properties) => Object.entries(properties)
52
+ .map(([displayName, propertyName]) => textualizeProperty(propertyName, displayName))
53
+ .filter((optStr) => optStr !== undefined);
54
+ const textualizeProperties = (...propertyNames) => propertyNames
55
+ .map((propertyName) => textualizeProperty(propertyName, propertyName))
56
+ .filter((optStr) => optStr !== undefined);
57
+ if (annotation instanceof ConceptDescription) {
58
+ const fragments = textualizePropertiesWithDisplayNames({ "short description": "conceptShortDescription", "alias": "conceptAlias", "help URL": "helpUrl" });
59
+ return fragments.length === 0
60
+ ? `@ConceptDescription: (no info)`
61
+ : [
62
+ `@ConceptDescription:`,
63
+ indent(fragments)
64
+ ];
65
+ }
66
+ if (annotation instanceof Deprecated) {
67
+ const fragments = textualizeProperties("comment", "build");
68
+ return fragments.length === 0
69
+ ? `@Deprecated: (no info)`
70
+ : [
71
+ `@Deprecated:`,
72
+ indent(fragments)
73
+ ];
74
+ }
75
+ if (annotation instanceof KeyedDescription) {
76
+ const fragments = textualizeProperties("documentation");
77
+ return (fragments.length === 0 && annotation.seeAlso.length === 0)
78
+ ? `@KeyedDescription: (no info)`
79
+ : [
80
+ `@KeyedDescription: `,
81
+ indent([
82
+ fragments,
83
+ when(annotation.seeAlso.length > 0)([
84
+ `see also:`,
85
+ indent(annotation.seeAlso.map(pathTo))
86
+ ])
87
+ ])
88
+ ];
89
+ }
90
+ if (annotation instanceof ShortDescription) {
91
+ const fragments = textualizeProperties("description");
92
+ return fragments.length === 0
93
+ ? `@ShortDescription: (no info)`
94
+ : [
95
+ `@ShortDescription:`,
96
+ indent(fragments)
97
+ ];
98
+ }
99
+ if (annotation instanceof VirtualPackage) {
100
+ const fragments = textualizeProperties("name");
101
+ return fragments.length === 0
102
+ ? `@VirtualPackage: (no info)`
103
+ : [
104
+ `@VirtualPackage:`,
105
+ indent(fragments)
106
+ ];
107
+ }
108
+ throw new Error(`don't know how to handle an instance of ${annotation.constructor.name}`);
109
+ };
110
+ /**
111
+ * @return textualization of the given {@link M3Concept language element} provided it either has (1 or more) annotations itself,
112
+ * or if any of its nested language elements – i.e.: descendants – have (1 or more) annotations.
113
+ * Otherwise, it returns an empty array `[]`.
114
+ */
115
+ const textualizationOfAnnotationsInM3Concept = (node) => {
116
+ const annotations = ioLionWebMpsSpecificAnnotationsFrom(node);
117
+ if (node instanceof Classifier) {
118
+ const annotatedFeatures = node.features.flatMap((feature) => textualizationOfAnnotationsInM3Concept(feature));
119
+ return (annotations.length > 0 || annotatedFeatures.length > 0)
120
+ ? [
121
+ `${withFirstLower(node.metaType())} ${node.name}:`,
122
+ indent([
123
+ annotations.map(textualizationOfAnnotation),
124
+ annotatedFeatures
125
+ ])
126
+ ]
127
+ : [];
128
+ }
129
+ if (node instanceof Enumeration) {
130
+ const annotatedLiterals = node.literals.flatMap((literal) => textualizationOfAnnotationsInM3Concept(literal));
131
+ return (annotations.length > 0 || annotatedLiterals.length > 0)
132
+ ? [
133
+ `enumeration ${node.name}:`,
134
+ indent([
135
+ annotations.map(textualizationOfAnnotation),
136
+ annotatedLiterals
137
+ ])
138
+ ]
139
+ : [];
140
+ }
141
+ if (node instanceof EnumerationLiteral) {
142
+ return annotations.length > 0
143
+ ? [
144
+ `enumeration literal ${node.name}:`,
145
+ indent(annotations.map(textualizationOfAnnotation))
146
+ ]
147
+ : [];
148
+ }
149
+ if (node instanceof Feature) {
150
+ return annotations.length > 0
151
+ ? [
152
+ `${withFirstLower(node.metaType())} ${node.name}:`,
153
+ indent(annotations.map(textualizationOfAnnotation))
154
+ ]
155
+ : [];
156
+ }
157
+ if (node instanceof Language) {
158
+ const annotatedEntities = node.entities.flatMap((entity) => textualizationOfAnnotationsInM3Concept(entity));
159
+ return (annotations.length > 0 || annotatedEntities.length > 0)
160
+ ? [
161
+ `language ${node.name}:`,
162
+ indent([
163
+ annotations.map(textualizationOfAnnotation),
164
+ annotatedEntities
165
+ ])
166
+ ]
167
+ : [];
168
+ }
169
+ if (node instanceof PrimitiveType) {
170
+ return annotations.length > 0
171
+ ? [
172
+ `primitive type ${node.name}:`,
173
+ indent(annotations.map(textualizationOfAnnotation))
174
+ ]
175
+ : [];
176
+ }
177
+ // can't happen as node has type 'never' at this point, because of type exhaustion,
178
+ // but need to return a Template:
179
+ return [];
180
+ };
181
+ /**
182
+ * @return textualization of all instances of io.lionweb.mps.specific annotations, in the given languages' tree structure.
183
+ * **Note**: only language elements having annotations (at any nesting depth) are rendered.
184
+ * This is useful to get a quick overview of the annotations.
185
+ */
186
+ export const textualizationOfAnnotationsIn = (languages) => asString(languages.map(textualizationOfAnnotationsInM3Concept));
187
+ //# sourceMappingURL=textualizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textualizer.js","sourceRoot":"","sources":["../src/textualizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ ```mermaid
2
+ classDiagram
3
+
4
+ class ConceptDescription,<<Annotation>> ConceptDescription,ConceptDescription ..> Classifier {
5
+ +String? conceptAlias
6
+ +String? conceptShortDescription
7
+ +String? helpUrl
8
+ }
9
+
10
+ class Deprecated,<<Annotation>> Deprecated,Deprecated ..> IKeyed {
11
+ +String? comment
12
+ +String? build
13
+ }
14
+
15
+ class KeyedDescription,<<Annotation>> KeyedDescription,KeyedDescription ..> IKeyed {
16
+ +String? documentation
17
+ }
18
+
19
+ class ShortDescription,<<Annotation>> ShortDescription,ShortDescription ..> Node {
20
+ +String? description
21
+ }
22
+
23
+ class VirtualPackage
24
+ <<Annotation>> VirtualPackage
25
+ VirtualPackage ..> Node
26
+ INamed <|.. VirtualPackage
27
+
28
+
29
+
30
+
31
+ KeyedDescription "*" --> "*" Node: seeAlso
32
+
33
+
34
+
35
+ ```
@@ -0,0 +1,39 @@
1
+ @startuml
2
+ hide empty members
3
+
4
+ ' qualified name: "io.lionweb.mps.specific"
5
+
6
+
7
+ annotation ConceptDescription {
8
+ conceptAlias: String?
9
+ conceptShortDescription: String?
10
+ helpUrl: String?
11
+ }
12
+
13
+ annotation Deprecated {
14
+ comment: String?
15
+ build: String?
16
+ }
17
+
18
+ annotation KeyedDescription {
19
+ documentation: String?
20
+ }
21
+
22
+ annotation ShortDescription {
23
+ description: String?
24
+ }
25
+
26
+ annotation VirtualPackage implements INamed
27
+ VirtualPackage ..> Node
28
+
29
+
30
+
31
+ ' relations:
32
+
33
+
34
+
35
+ KeyedDescription "*" --> "*" Node: seeAlso
36
+
37
+
38
+
39
+ @enduml
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lionweb/io-lionweb-mps-specific",
3
- "version": "0.7.0-alpha.5",
3
+ "version": "0.7.0-alpha.7",
4
4
  "description": "TypeScript implementation of the io.lionweb.mps.specific language",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -15,9 +15,10 @@
15
15
  "url": "https://github.com/LionWeb-io/lionweb-typescript/issues"
16
16
  },
17
17
  "dependencies": {
18
- "@lionweb/core": "0.7.0-alpha.5",
19
- "@lionweb/json": "0.7.0-alpha.5",
20
- "@lionweb/ts-utils": "0.7.0-alpha.5",
18
+ "@lionweb/core": "0.7.0-alpha.7",
19
+ "@lionweb/json": "0.7.0-alpha.7",
20
+ "@lionweb/textgen-utils": "0.7.0-alpha.7",
21
+ "@lionweb/ts-utils": "0.7.0-alpha.7",
21
22
  "littoral-templates": "0.3.0",
22
23
  "nanoid": "5.0.9"
23
24
  },