@lionweb/core 0.8.0-beta.5 → 0.8.0-beta.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.
Files changed (128) hide show
  1. package/CHANGELOG.md +31 -5
  2. package/dist/deserializer.d.ts +10 -2
  3. package/dist/deserializer.d.ts.map +1 -1
  4. package/dist/deserializer.js +8 -7
  5. package/dist/deserializer.js.map +1 -1
  6. package/dist/dynamic-facade.d.ts +3 -3
  7. package/dist/dynamic-facade.d.ts.map +1 -1
  8. package/dist/dynamic-facade.js +4 -3
  9. package/dist/dynamic-facade.js.map +1 -1
  10. package/dist/extraction.d.ts +2 -2
  11. package/dist/extraction.d.ts.map +1 -1
  12. package/dist/extraction.js.map +1 -1
  13. package/dist/index.d.ts +0 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +0 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/m1/reference-utils.d.ts +3 -3
  18. package/dist/m1/reference-utils.d.ts.map +1 -1
  19. package/dist/m1/reference-utils.js.map +1 -1
  20. package/dist/m3/builtins-common.d.ts +70 -0
  21. package/dist/m3/builtins-common.d.ts.map +1 -0
  22. package/dist/m3/builtins-common.js +88 -0
  23. package/dist/m3/builtins-common.js.map +1 -0
  24. package/dist/m3/builtins-function.d.ts +9 -0
  25. package/dist/m3/builtins-function.d.ts.map +1 -0
  26. package/dist/m3/builtins-function.js +19 -0
  27. package/dist/m3/builtins-function.js.map +1 -0
  28. package/dist/m3/deserializer.d.ts +25 -0
  29. package/dist/m3/deserializer.d.ts.map +1 -1
  30. package/dist/m3/deserializer.js +18 -11
  31. package/dist/m3/deserializer.js.map +1 -1
  32. package/dist/m3/index.d.ts +7 -3
  33. package/dist/m3/index.d.ts.map +1 -1
  34. package/dist/m3/index.js +6 -3
  35. package/dist/m3/index.js.map +1 -1
  36. package/dist/m3/lioncore-common.d.ts +37 -0
  37. package/dist/m3/lioncore-common.d.ts.map +1 -0
  38. package/dist/m3/lioncore-common.js +10 -0
  39. package/dist/m3/lioncore-common.js.map +1 -0
  40. package/dist/m3/reading-writing.d.ts +41 -0
  41. package/dist/m3/reading-writing.d.ts.map +1 -0
  42. package/dist/m3/reading-writing.js +84 -0
  43. package/dist/m3/reading-writing.js.map +1 -0
  44. package/dist/m3/serializer.d.ts +17 -0
  45. package/dist/m3/serializer.d.ts.map +1 -1
  46. package/dist/m3/serializer.js +11 -2
  47. package/dist/m3/serializer.js.map +1 -1
  48. package/dist/m3/symbol-table.d.ts +3 -3
  49. package/dist/m3/types.d.ts +11 -15
  50. package/dist/m3/types.d.ts.map +1 -1
  51. package/dist/m3/types.js +2 -6
  52. package/dist/m3/types.js.map +1 -1
  53. package/dist/m3/version.d.ts +19 -0
  54. package/dist/m3/version.d.ts.map +1 -0
  55. package/dist/m3/version.js +19 -0
  56. package/dist/m3/version.js.map +1 -0
  57. package/dist/m3/versions/v2023_1/builtins-legacy.d.ts +44 -0
  58. package/dist/m3/versions/v2023_1/builtins-legacy.d.ts.map +1 -0
  59. package/dist/m3/{builtins.js → versions/v2023_1/builtins-legacy.js} +24 -79
  60. package/dist/m3/versions/v2023_1/builtins-legacy.js.map +1 -0
  61. package/dist/m3/versions/v2023_1/builtins.d.ts +34 -0
  62. package/dist/m3/versions/v2023_1/builtins.d.ts.map +1 -0
  63. package/dist/m3/versions/v2023_1/builtins.js +75 -0
  64. package/dist/m3/versions/v2023_1/builtins.js.map +1 -0
  65. package/dist/m3/versions/v2023_1/lioncore.d.ts +34 -0
  66. package/dist/m3/versions/v2023_1/lioncore.d.ts.map +1 -0
  67. package/dist/m3/versions/v2023_1/lioncore.js +86 -0
  68. package/dist/m3/versions/v2023_1/lioncore.js.map +1 -0
  69. package/dist/m3/versions/v2023_1/version.d.ts +6 -0
  70. package/dist/m3/versions/v2023_1/version.d.ts.map +1 -0
  71. package/dist/m3/versions/v2023_1/version.js +8 -0
  72. package/dist/m3/versions/v2023_1/version.js.map +1 -0
  73. package/dist/m3/versions.d.ts +23 -0
  74. package/dist/m3/versions.d.ts.map +1 -0
  75. package/dist/m3/versions.js +24 -0
  76. package/dist/m3/versions.js.map +1 -0
  77. package/dist/reading.d.ts +10 -6
  78. package/dist/reading.d.ts.map +1 -1
  79. package/dist/serializer.d.ts +17 -6
  80. package/dist/serializer.d.ts.map +1 -1
  81. package/dist/serializer.js +4 -5
  82. package/dist/serializer.js.map +1 -1
  83. package/dist/writing.d.ts +3 -1
  84. package/dist/writing.d.ts.map +1 -1
  85. package/dist/writing.js.map +1 -1
  86. package/package.json +3 -3
  87. package/src/deserializer.ts +18 -14
  88. package/src/dynamic-facade.ts +4 -4
  89. package/src/extraction.ts +3 -3
  90. package/src/index.ts +0 -1
  91. package/src/m1/reference-utils.ts +6 -6
  92. package/src/m3/README.md +1 -1
  93. package/src/m3/builtins-common.ts +143 -0
  94. package/src/m3/builtins-function.ts +22 -0
  95. package/src/m3/deserializer.ts +43 -14
  96. package/src/m3/index.ts +7 -3
  97. package/src/m3/lioncore-common.ts +42 -0
  98. package/src/m3/reading-writing.ts +160 -0
  99. package/src/m3/serializer.ts +25 -2
  100. package/src/m3/symbol-table.ts +3 -3
  101. package/src/m3/types.ts +12 -18
  102. package/src/m3/version.ts +23 -0
  103. package/src/m3/versions/v2023_1/builtins-legacy.ts +126 -0
  104. package/src/m3/versions/v2023_1/builtins.ts +102 -0
  105. package/src/m3/{lioncore.ts → versions/v2023_1/lioncore.ts} +53 -76
  106. package/src/m3/versions/v2023_1/version.ts +9 -0
  107. package/src/m3/versions.ts +32 -0
  108. package/src/reading.ts +10 -6
  109. package/src/serializer.ts +26 -14
  110. package/src/writing.ts +3 -1
  111. package/dist/m3/builtins.d.ts +0 -82
  112. package/dist/m3/builtins.d.ts.map +0 -1
  113. package/dist/m3/builtins.js.map +0 -1
  114. package/dist/m3/facade.d.ts +0 -17
  115. package/dist/m3/facade.d.ts.map +0 -1
  116. package/dist/m3/facade.js +0 -58
  117. package/dist/m3/facade.js.map +0 -1
  118. package/dist/m3/lioncore.d.ts +0 -41
  119. package/dist/m3/lioncore.d.ts.map +0 -1
  120. package/dist/m3/lioncore.js +0 -90
  121. package/dist/m3/lioncore.js.map +0 -1
  122. package/dist/version.d.ts +0 -5
  123. package/dist/version.d.ts.map +0 -1
  124. package/dist/version.js +0 -5
  125. package/dist/version.js.map +0 -1
  126. package/src/m3/builtins.ts +0 -198
  127. package/src/m3/facade.ts +0 -130
  128. package/src/version.ts +0 -5
@@ -2,6 +2,7 @@ import { LionWebJsonChunk } from "@lionweb/json";
2
2
  import { Reader } from "./reading.js";
3
3
  import { Node } from "./types.js";
4
4
  import { Property } from "./m3/types.js";
5
+ import { LionWebVersion } from "./m3/version.js";
5
6
  /**
6
7
  * Type definition for functions that serializes nodes as a {@link LionWebJsonChunk serialization chunk}.
7
8
  */
@@ -14,6 +15,8 @@ export interface PropertyValueSerializer {
14
15
  }
15
16
  /**
16
17
  * Misspelled alias of {@link PropertyValueSerializer}, kept for backward compatibility, and to be deprecated and removed later.
18
+ *
19
+ * @deprecated Use {@link PropertyValueSerializer} instead.
17
20
  */
18
21
  export interface PrimitiveTypeSerializer extends PropertyValueSerializer {
19
22
  }
@@ -29,11 +32,14 @@ export type SerializationOptions = Partial<{
29
32
  serializeEmptyFeatures: boolean;
30
33
  /**
31
34
  * A {@link PropertyValueSerializer} implementation.
32
- * Default = {@link builtinPropertyValueSerializer}.
35
+ * Default = the value of the `propertyValueSerializer` property of the {@link LionWebVersion version} of the LionWeb serialization format,
36
+ * configured through `SerializerConfiguration.lionWebVersion` (which itself defaults to `LionWebVersions.v2023_1`).
33
37
  */
34
38
  propertyValueSerializer: PropertyValueSerializer;
35
39
  /**
36
40
  * Misspelled alias of {@link #propertyValueSerializer}, kept for backward compatibility, and to be deprecated and removed later.
41
+ *
42
+ * @deprecated Use {@link propertyValueSerializer} instead.
37
43
  */
38
44
  primitiveTypeSerializer: PropertyValueSerializer;
39
45
  }>;
@@ -44,11 +50,16 @@ export type SerializationOptions = Partial<{
44
50
  * and `primitiveTypeSerializer` (which is a legacy alias for `propertyValueSerializer`)
45
51
  * properties are optional, with defined defaults.
46
52
  */
47
- export type SerializerConfiguration<NT extends Node> = {
53
+ export type SerializerConfiguration<NT extends Node, RT extends Node = NT> = {
48
54
  /**
49
55
  * An interface with functions to “read” – i.e., introspect – nodes.
50
56
  */
51
- reader: Reader<NT>;
57
+ reader: Reader<NT, RT>;
58
+ /**
59
+ * The version of the LionWeb serialization format to serialize in.
60
+ * Default = {@link LionWebVersions.v2023_1}.
61
+ */
62
+ lionWebVersion?: LionWebVersion;
52
63
  } & SerializationOptions;
53
64
  /**
54
65
  * @return a {@link Serializer} function that serializes the {@link Node nodes} passed to it,
@@ -57,15 +68,15 @@ export type SerializerConfiguration<NT extends Node> = {
57
68
  *
58
69
  * This is a legacy version of {@link serializerWith}, kept for backward compatibility, and to be deprecated and removed later.
59
70
  */
60
- export declare const nodeSerializer: <NT extends Node>(reader: Reader<NT>, serializationOptions?: SerializationOptions) => Serializer<NT>;
71
+ export declare const nodeSerializer: <NT extends Node, RT extends Node = NT>(reader: Reader<NT, RT>, serializationOptions?: SerializationOptions) => Serializer<NT>;
61
72
  /**
62
73
  * @return a {@link Serializer} function that serializes the {@link Node nodes} passed to it,
63
74
  * configured through a `configuration` {@link SerializerConfiguration} object.
64
75
  */
65
- export declare const serializerWith: <NT extends Node>(configuration: SerializerConfiguration<NT>) => Serializer<NT>;
76
+ export declare const serializerWith: <NT extends Node, RT extends Node = NT>(configuration: SerializerConfiguration<NT, RT>) => Serializer<NT>;
66
77
  /**
67
78
  * @return a {@link LionWebJsonChunk} of the given model (i.e., an array of {@link Node nodes} - the first argument) to the LionWeb serialization JSON format.
68
79
  * *Note:* this function will be deprecated and removed later — use {@link nodeSerializer} instead.
69
80
  */
70
- export declare const serializeNodes: <NT extends Node>(nodes: NT[], reader: Reader<NT>, propertyValueSerializerOrOptions?: PropertyValueSerializer | SerializationOptions) => LionWebJsonChunk;
81
+ export declare const serializeNodes: <NT extends Node, RT extends Node = NT>(nodes: NT[], reader: Reader<NT, RT>, propertyValueSerializerOrOptions?: PropertyValueSerializer | SerializationOptions) => LionWebJsonChunk;
71
82
  //# sourceMappingURL=serializer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../src/serializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgD,gBAAgB,EAAmB,MAAM,eAAe,CAAA;AAG/G,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGjC,OAAO,EAOH,QAAQ,EAGX,MAAM,eAAe,CAAA;AAGtB;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,EAAE,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,gBAAgB,CAAA;AAG3E;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAA;CACpE;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,uBAAuB;CAAG;AAQ3E;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC;IAEvC;;;;OAIG;IACH,sBAAsB,EAAE,OAAO,CAAA;IAE/B;;;OAGG;IACH,uBAAuB,EAAE,uBAAuB,CAAA;IAEhD;;OAEG;IACH,uBAAuB,EAAE,uBAAuB,CAAA;CAEnD,CAAC,CAAA;AAGF;;;;;;GAMG;AACH,MAAM,MAAM,uBAAuB,CAAC,EAAE,SAAS,IAAI,IAAI;IACnD;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;CACrB,GAAG,oBAAoB,CAAA;AAGxB;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,EAAE,SAAS,IAAI,EAAE,QAAQ,MAAM,CAAC,EAAE,CAAC,EAAE,uBAAuB,oBAAoB,KAAG,UAAU,CAAC,EAAE,CACxE,CAAA;AAGvD;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,EAAE,SAAS,IAAI,EAAE,eAAe,uBAAuB,CAAC,EAAE,CAAC,KAAG,UAAU,CAAC,EAAE,CA4IzG,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,EAAE,SAAS,IAAI,EAC1C,OAAO,EAAE,EAAE,EACX,QAAQ,MAAM,CAAC,EAAE,CAAC,EAClB,mCAAmC,uBAAuB,GAAG,oBAAoB,KAClF,gBAQS,CAAA"}
1
+ {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../src/serializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,gBAAgB,EAAmB,MAAM,eAAe,CAAA;AAG5E,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEjC,OAAO,EAOH,QAAQ,EAGX,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAIhD;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,EAAE,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,gBAAgB,CAAA;AAG3E;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAA;CACpE;AAED;;;;GAIG;AACH,MAAM,WAAW,uBAAwB,SAAQ,uBAAuB;CAAG;AAQ3E;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC;IAEvC;;;;OAIG;IACH,sBAAsB,EAAE,OAAO,CAAA;IAE/B;;;;OAIG;IACH,uBAAuB,EAAE,uBAAuB,CAAA;IAEhD;;;;OAIG;IACH,uBAAuB,EAAE,uBAAuB,CAAA;CAEnD,CAAC,CAAA;AAGF;;;;;;GAMG;AACH,MAAM,MAAM,uBAAuB,CAAC,EAAE,SAAS,IAAI,EAAE,EAAE,SAAS,IAAI,GAAG,EAAE,IAAI;IACzE;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IAEtB;;;OAGG;IACH,cAAc,CAAC,EAAE,cAAc,CAAA;CAClC,GAAG,oBAAoB,CAAA;AAGxB;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,EAAE,SAAS,IAAI,EAAE,EAAE,SAAS,IAAI,GAAG,EAAE,EAAE,QAAQ,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,uBAAuB,oBAAoB,KAAG,UAAU,CAAC,EAAE,CAClG,CAAA;AAGvD;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,EAAE,SAAS,IAAI,EAAE,EAAE,SAAS,IAAI,GAAG,EAAE,EAAE,eAAe,uBAAuB,CAAC,EAAE,EAAE,EAAE,CAAC,KAAG,UAAU,CAAC,EAAE,CA4InI,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,EAAE,SAAS,IAAI,EAAE,EAAE,SAAS,IAAI,GAAG,EAAE,EAChE,OAAO,EAAE,EAAE,EACX,QAAQ,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EACtB,mCAAmC,uBAAuB,GAAG,oBAAoB,KAClF,gBAQS,CAAA"}
@@ -1,9 +1,8 @@
1
- import { currentSerializationFormatVersion } from "@lionweb/json";
2
1
  import { asArray, keepDefineds, lazyMapGet, uniquesAmong } from "@lionweb/ts-utils";
3
2
  import { asIds, metaPointerFor } from "./functions.js";
4
- import { builtinPropertyValueSerializer } from "./m3/builtins.js";
5
3
  import { inheritsDirectlyFrom } from "./m3/functions.js";
6
4
  import { Containment, Enumeration, PrimitiveType, Property, Reference, simpleNameDeducer } from "./m3/types.js";
5
+ import { LionWebVersions } from "./m3/versions.js";
7
6
  const isPropertyValueSerializer = (value) => typeof value === "object" && value !== null && "serializeValue" in value && typeof value.serializeValue === "function";
8
7
  /**
9
8
  * @return a {@link Serializer} function that serializes the {@link Node nodes} passed to it,
@@ -19,7 +18,8 @@ export const nodeSerializer = (reader, serializationOptions) => serializerWith({
19
18
  */
20
19
  export const serializerWith = (configuration) => {
21
20
  const { reader } = configuration;
22
- const propertyValueSerializer = configuration.propertyValueSerializer ?? configuration.primitiveTypeSerializer ?? builtinPropertyValueSerializer;
21
+ const lionWebVersion = configuration?.lionWebVersion ?? LionWebVersions.v2023_1;
22
+ const propertyValueSerializer = configuration.propertyValueSerializer ?? configuration.primitiveTypeSerializer ?? lionWebVersion.builtinsFacade.propertyValueSerializer;
23
23
  const serializeEmptyFeatures = configuration.serializeEmptyFeatures ?? true;
24
24
  const languageKey2version2classifierKey2allFeatures = {};
25
25
  const memoisedAllFeaturesOf = (classifier) => lazyMapGet(lazyMapGet(lazyMapGet(languageKey2version2classifierKey2allFeatures, classifier.language.key, () => ({})), classifier.language.version, () => ({})), classifier.key, () => uniquesAmong(// make unique in case a feature was inherited from multiple super-classifiers
@@ -113,7 +113,6 @@ export const serializerWith = (configuration) => {
113
113
  serializedNode.references.push({
114
114
  reference: featureMetaPointer,
115
115
  targets: keepDefineds(targets) // (skip "non-connected" targets)
116
- .map(t => t)
117
116
  .map(t => ({
118
117
  resolveInfo: (reader.resolveInfoFor ? reader.resolveInfoFor(t, feature) : simpleNameDeducer(t, feature)) ?? null,
119
118
  reference: t.id
@@ -129,7 +128,7 @@ export const serializerWith = (configuration) => {
129
128
  };
130
129
  nodes.forEach(node => visit(node, undefined));
131
130
  return {
132
- serializationFormatVersion: currentSerializationFormatVersion,
131
+ serializationFormatVersion: lionWebVersion.serializationFormatVersion,
133
132
  languages: languagesUsed.map(({ key, version }) => ({ key, version })),
134
133
  nodes: serializedNodes
135
134
  };
@@ -1 +1 @@
1
- {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../src/serializer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../src/serializer.ts"],"names":[],"mappings":"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"}
package/dist/writing.d.ts CHANGED
@@ -19,7 +19,7 @@ export interface Writer<NT extends Node, PNT extends Node = NT> {
19
19
  }) => NT;
20
20
  /**
21
21
  * Sets the *single* given value of the indicated {@link Feature} on the given node.
22
- * This means adding it in case the feature is multi-valued, meaning it is a {@link Link} with {@code multiple = true}.
22
+ * This means adding it in case the feature is multi-valued, meaning it is a {@link Link} with `multiple = true`.
23
23
  */
24
24
  setFeatureValue: (node: NT, feature: Feature, value: unknown) => void;
25
25
  /**
@@ -29,6 +29,8 @@ export interface Writer<NT extends Node, PNT extends Node = NT> {
29
29
  }
30
30
  /**
31
31
  * Alias for {@link Writer}, kept for backward compatibility, and to be deprecated and removed later.
32
+ *
33
+ * @deprecated Use {@link Writer} instead.
32
34
  */
33
35
  export interface InstantiationFacade<NT extends Node, PNT extends Node = NT> extends Writer<NT, PNT> {
34
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"writing.d.ts","sourceRoot":"","sources":["../src/writing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAErD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,OAAO,EAAQ,MAAM,eAAe,CAAA;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGjC;;;;;;GAMG;AACH,MAAM,WAAW,MAAM,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,SAAS,IAAI,GAAG,EAAE;IAE1D;;;;OAIG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,GAAG,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE;QAAE,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAAA;KAAE,KAAK,EAAE,CAAA;IAGzI;;;OAGG;IACH,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAGrE;;OAEG;IACH,UAAU,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAA;CAEvD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,SAAS,IAAI,GAAG,EAAE,CAAE,SAAQ,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC;CAAG;AAGvG;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;AAqB3G;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,eAAyC,CAAA;AAE/E;;;GAGG;AACH,eAAO,MAAM,sBAAsB,iBAAyB,CAAA"}
1
+ {"version":3,"file":"writing.d.ts","sourceRoot":"","sources":["../src/writing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAErD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,OAAO,EAAQ,MAAM,eAAe,CAAA;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGjC;;;;;;GAMG;AACH,MAAM,WAAW,MAAM,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,SAAS,IAAI,GAAG,EAAE;IAE1D;;;;OAIG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,GAAG,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE;QAAE,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAAA;KAAE,KAAK,EAAE,CAAA;IAGzI;;;OAGG;IACH,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAGrE;;OAEG;IACH,UAAU,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAA;CAEvD;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,SAAS,IAAI,GAAG,EAAE,CAAE,SAAQ,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC;CAAG;AAGvG;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;AAqB3G;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,eAAyC,CAAA;AAE/E;;;GAGG;AACH,eAAO,MAAM,sBAAsB,iBAAyB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"writing.js","sourceRoot":"","sources":["../src/writing.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2C,IAAI,EAAE,MAAM,eAAe,CAAA;AA8C7E;;;;GAIG;AACH,MAAM,eAAe,GAAG,CAAC,OAAsB,EAAmB,EAAE,CAChE,CAAC,QAAiC,EAAE,OAAgB,EAAE,KAAc,EAAQ,EAAE;IAClF,8DAA8D;IACtD,MAAM,GAAG,GAAI,OAAe,CAAC,OAAO,CAAW,CAAA;IAC/C,IAAI,OAAO,YAAY,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAChC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;QACtB,CAAC;QACA,QAAQ,CAAC,GAAG,CAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5C,CAAC;SAAM,CAAC;QACJ,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACzB,CAAC;AACL,CAAC,CAAA;AAEL;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAoB,eAAe,CAAC,MAAM,CAAC,CAAA;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA"}
1
+ {"version":3,"file":"writing.js","sourceRoot":"","sources":["../src/writing.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2C,IAAI,EAAE,MAAM,eAAe,CAAA;AAgD7E;;;;GAIG;AACH,MAAM,eAAe,GAAG,CAAC,OAAsB,EAAmB,EAAE,CAChE,CAAC,QAAiC,EAAE,OAAgB,EAAE,KAAc,EAAQ,EAAE;IAClF,8DAA8D;IACtD,MAAM,GAAG,GAAI,OAAe,CAAC,OAAO,CAAW,CAAA;IAC/C,IAAI,OAAO,YAAY,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAChC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;QACtB,CAAC;QACA,QAAQ,CAAC,GAAG,CAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5C,CAAC;SAAM,CAAC;QACJ,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACzB,CAAC;AACL,CAAC,CAAA;AAEL;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAoB,eAAe,CAAC,MAAM,CAAC,CAAA;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lionweb/core",
3
- "version": "0.8.0-beta.5",
3
+ "version": "0.8.0-beta.7",
4
4
  "description": "LionWeb core for {Java|Type}Script",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -27,7 +27,7 @@
27
27
  "release": "npm publish"
28
28
  },
29
29
  "dependencies": {
30
- "@lionweb/json": "0.8.0-beta.5",
31
- "@lionweb/ts-utils": "0.8.0-beta.5"
30
+ "@lionweb/json": "0.8.0-beta.7",
31
+ "@lionweb/ts-utils": "0.8.0-beta.7"
32
32
  }
33
33
  }
@@ -1,16 +1,11 @@
1
- import {
2
- currentSerializationFormatVersion,
3
- LionWebId,
4
- LionWebJsonChunk,
5
- LionWebJsonNode,
6
- LionWebKey
7
- } from "@lionweb/json"
1
+ import { LionWebId, LionWebJsonChunk, LionWebJsonNode, LionWebKey } from "@lionweb/json"
8
2
  import { byIdMap, groupBy, keepDefineds } from "@lionweb/ts-utils"
9
3
  import { Writer } from "./writing.js"
10
4
  import { consoleProblemReporter, ProblemReporter } from "./reporter.js"
11
- import { builtinPropertyValueDeserializer } from "./m3/builtins.js"
12
5
  import { MemoisingSymbolTable } from "./m3/symbol-table.js"
13
6
  import { Classifier, Containment, Enumeration, Language, PrimitiveType, Property, Reference } from "./m3/types.js"
7
+ import { LionWebVersion } from "./m3/version.js"
8
+ import { LionWebVersions } from "./m3/versions.js"
14
9
  import { unresolved } from "./references.js"
15
10
  import { Node } from "./types.js"
16
11
 
@@ -23,6 +18,8 @@ export interface PropertyValueDeserializer {
23
18
 
24
19
  /**
25
20
  * Misspelled alias of {@link PropertyValueDeserializer}, kept for backward compatibility, and to be deprecated and removed later.
21
+ *
22
+ * @deprecated Use {@link PropertyValueDeserializer} instead.
26
23
  */
27
24
  export interface PrimitiveTypeDeserializer extends PropertyValueDeserializer {}
28
25
 
@@ -43,13 +40,18 @@ export type DeserializerConfiguration<NT extends Node> = {
43
40
  * A {@link Writer} that is used to instantiate nodes (with classifiers coming from the `languages` property) and set values on them.
44
41
  */
45
42
  writer: Writer<NT>,
43
+ /**
44
+ * The version of the LionWeb serialization format to deserialize from.
45
+ * Default = {@link LionWebVersions.v2023_1}.
46
+ */
47
+ lionWebVersion?: LionWebVersion
46
48
  /**
47
49
  * An array of {@link Language languages} that the serialization chunk is expected to conform to.
48
50
  */
49
51
  languages: Language[],
50
52
  /**
51
53
  * A deserializer for values of properties.
52
- * Default: {@link builtinPropertyValueDeserializer}.
54
+ * Default: `(lionWebVersion ?? LionWebVersions.v2023_1).builtinsFacade.propertyValueDeserializer`.
53
55
  */
54
56
  propertyValueDeserializer?: PropertyValueDeserializer,
55
57
  /**
@@ -70,14 +72,16 @@ export const deserializerWith = <NT extends Node>(configuration: DeserializerCon
70
72
  const symbolTable = new MemoisingSymbolTable(configuration.languages)
71
73
  const { writer } = configuration
72
74
 
73
- const propertyValueDeserializer = configuration.propertyValueDeserializer ?? builtinPropertyValueDeserializer
75
+ const lionWebVersion = configuration?.lionWebVersion ?? LionWebVersions.v2023_1
76
+ const propertyValueDeserializer = configuration.propertyValueDeserializer ?? lionWebVersion.builtinsFacade.propertyValueDeserializer
74
77
  const problemReporter = configuration.problemReporter ?? consoleProblemReporter
75
78
 
76
79
  return (serializationChunk, dependentNodes = []) => {
77
80
 
78
- if (serializationChunk.serializationFormatVersion !== currentSerializationFormatVersion) {
81
+ const serializationFormatVersion = lionWebVersion.serializationFormatVersion
82
+ if (serializationChunk.serializationFormatVersion !== serializationFormatVersion) {
79
83
  problemReporter.reportProblem(
80
- `can't deserialize from serialization format other than version "${currentSerializationFormatVersion}" - assuming that version`
84
+ `can't deserialize from serialization format other than version "${serializationFormatVersion}" - assuming that version`
81
85
  )
82
86
  }
83
87
 
@@ -260,7 +264,7 @@ export const deserializerWith = <NT extends Node>(configuration: DeserializerCon
260
264
  * @param writer - a {@link Writer} that is used to instantiate nodes and set values on them
261
265
  * @param languages - {@link Language languages} that the serialized model is expected to conform to
262
266
  * @param dependentNodes - a collection of nodes from dependent models against which all references in the serialized model are supposed to resolve against
263
- * @param propertyValueDeserializer - a deserializer for values of properties (by default a {@link BuiltinPropertyValueDeserializer})
267
+ * @param propertyValueDeserializer - a deserializer for values of properties (by default `LionWebVersions.v2023_1.builtinsFacade.propertyValueDeserializer`)
264
268
  * @param problemReporter - an object for reporting problems (by default a {@link consoleProblemReporter})
265
269
  *
266
270
  * This is a legacy variant of {@link deserializerWith}, kept for backward compatibility, and to be deprecated and removed later.
@@ -272,7 +276,7 @@ export const deserializeSerializationChunk = <NT extends Node>(
272
276
  // TODO facades <--> languages, so it's weird that it looks split up like this
273
277
  dependentNodes: Node[],
274
278
  // TODO (#13) see if you can turn this into [nodes: Node[], writer: Writer<Node>][] after all
275
- propertyValueDeserializer: PropertyValueDeserializer = builtinPropertyValueDeserializer,
279
+ propertyValueDeserializer: PropertyValueDeserializer = LionWebVersions.v2023_1.builtinsFacade.propertyValueDeserializer,
276
280
  problemReporter: ProblemReporter = consoleProblemReporter
277
281
  ): NT[] => deserializerWith({ writer, languages, propertyValueDeserializer, problemReporter: problemReporter })(serializationChunk, dependentNodes)
278
282
 
@@ -1,6 +1,5 @@
1
1
  import { LionWebKey } from "@lionweb/json"
2
- import { builtinFeatures } from "./m3/builtins.js"
3
- import { Classifier } from "./m3/types.js"
2
+ import { Classifier, LionWebVersions } from "./m3/index.js"
4
3
  import { Reader, ResolveInfoDeducer } from "./reading.js"
5
4
  import { Node } from "./types.js"
6
5
  import { updateSettingsKeyBased, Writer } from "./writing.js"
@@ -19,7 +18,7 @@ export type DynamicNode = Node & {
19
18
  const propertyGetterFor = (key: LionWebKey): ResolveInfoDeducer<DynamicNode> =>
20
19
  (node) =>
21
20
  (key in node.settings && typeof node.settings[key] === "string")
22
- ? node.settings[key] as string // FIXME type cast shouldn't be necessary
21
+ ? node.settings[key] as string
23
22
  : undefined
24
23
 
25
24
  /**
@@ -33,7 +32,8 @@ export const dynamicReader: Reader<DynamicNode> = ({
33
32
  enumerationLiteralFrom: (value, enumeration) =>
34
33
  enumeration.literals.find(({key}) => key === value)
35
34
  ?? null, // (undefined -> null)
36
- resolveInfoFor: propertyGetterFor(builtinFeatures.inamed_name.key)
35
+ resolveInfoFor: propertyGetterFor(LionWebVersions.v2023_1.builtinsFacade.features.inamed_name.key)
36
+ // TODO have this parametrized in the LionWeb version, instead of relying on keys not changing between versions
37
37
  })
38
38
 
39
39
  /**
package/src/extraction.ts CHANGED
@@ -13,7 +13,7 @@ export type NodesExtractor<NT extends Node> = (node: NT) => NT[]
13
13
  /**
14
14
  * @return A function that extracts the children from a given node.
15
15
  */
16
- export const childrenExtractorUsing = <NT extends Node>(reader: Reader<NT>): NodesExtractor<NT> =>
16
+ export const childrenExtractorUsing = <NT extends Node, RT extends Node = NT>(reader: Reader<NT, RT>): NodesExtractor<NT> =>
17
17
  (node: NT): NT[] => [
18
18
  ...(allFeaturesOf(reader.classifierOf(node))
19
19
  .filter(isContainment)
@@ -26,6 +26,6 @@ export const childrenExtractorUsing = <NT extends Node>(reader: Reader<NT>): Nod
26
26
  /**
27
27
  * @return a function that extracts *all* nodes from a given start node - usually a root node.
28
28
  */
29
- export const nodesExtractorUsing = <NT extends Node>(reader: Reader<NT>): NodesExtractor<NT> =>
30
- flatMapNonCyclingFollowing(trivialFlatMapper, childrenExtractorUsing<NT>(reader))
29
+ export const nodesExtractorUsing = <NT extends Node, RT extends Node = NT>(reader: Reader<NT, RT>): NodesExtractor<NT> =>
30
+ flatMapNonCyclingFollowing(trivialFlatMapper, childrenExtractorUsing<NT, RT>(reader))
31
31
 
package/src/index.ts CHANGED
@@ -7,7 +7,6 @@ export * from "./references.js"
7
7
  export * from "./reporter.js"
8
8
  export * from "./serializer.js"
9
9
  export * from "./types.js"
10
- export * from "./version.js"
11
10
  export * from "./writing.js"
12
11
  export * from "./m1/reference-utils.js"
13
12
  export * from "./m3/index.js"
@@ -29,9 +29,9 @@ export class ReferenceValue<NT extends Node> {
29
29
  * @param reader - a {@link Reader} to reflect on nodes.
30
30
  * _Note_ that it's assumed that its {@link getFeatureValue} function doesn't throw.
31
31
  */
32
- export const referenceValues = <NT extends Node>(
32
+ export const referenceValues = <NT extends Node, RT extends Node = NT>(
33
33
  scope: NT[],
34
- reader: Reader<NT>
34
+ reader: Reader<NT, RT>
35
35
  ): ReferenceValue<NT>[] => {
36
36
  const visit = (sourceNode: NT, reference: Reference): ReferenceValue<NT>[] => {
37
37
  if (reference.multiple) {
@@ -74,10 +74,10 @@ export const referenceValues = <NT extends Node>(
74
74
  * @param reader - a {@link Reader} to reflect on nodes.
75
75
  * _Note_ that it's assumed that its {@link getFeatureValue} function doesn't throw.
76
76
  */
77
- export const incomingReferences = <NT extends Node>(
77
+ export const incomingReferences = <NT extends Node, RT extends Node = NT>(
78
78
  targetNodeOrNodes: NT[] | NT,
79
79
  scope: NT[],
80
- reader: Reader<NT>
80
+ reader: Reader<NT, RT>
81
81
  ): ReferenceValue<NT>[] => {
82
82
  const targetNodes = Array.isArray(targetNodeOrNodes) ? targetNodeOrNodes : [targetNodeOrNodes]
83
83
  return referenceValues(scope, reader)
@@ -97,9 +97,9 @@ export const incomingReferences = <NT extends Node>(
97
97
  * @param reader - a {@link Reader} to reflect on nodes.
98
98
  * _Note_ that it's assumed that its {@link getFeatureValue} function doesn't throw.
99
99
  */
100
- export const referencesToOutOfScopeNodes = <NT extends Node>(
100
+ export const referencesToOutOfScopeNodes = <NT extends Node, RT extends Node = NT>(
101
101
  scope: NT[],
102
- reader: Reader<NT>
102
+ reader: Reader<NT, RT>
103
103
  ): ReferenceValue<NT>[] =>
104
104
  referenceValues(scope, reader)
105
105
  .filter((referenceValue) => scope.indexOf(referenceValue.targetNode) === -1)
package/src/m3/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  * [TypeScript type definitions](./types.ts)
7
7
  * [Factory](./factory.ts) for conveniently creating M3 instances
8
8
  * [Classifiers built in (`LionCore-builtins`) to LionCore](./builtins.ts)
9
- * [Facades specific for M3 instances](./facade.ts)
9
+ * [A reader and writer specific for M3 instances](reading-writing.ts)
10
10
  * Persistence: [serializer](./serializer.ts) and [deserializer](./deserializer.ts)
11
11
  * [Constraints checker](./constraints.ts)
12
12
  * Convenience/helper [functions](./functions.ts) defined on M3 concepts
@@ -0,0 +1,143 @@
1
+ import { StringsMapper } from "@lionweb/ts-utils"
2
+ import { PropertyValueDeserializer } from "../deserializer.js"
3
+ import { Concept, DataType, Interface, Language, PrimitiveType, Property } from "./types.js"
4
+ import { isUnresolvedReference } from "../references.js"
5
+ import { PropertyValueSerializer } from "../serializer.js"
6
+
7
+
8
+ /**
9
+ * Determines whether two data types should be structurally equal based on equality of: meta type, key, and language's key.
10
+ */
11
+ export const shouldBeIdentical = (left: DataType, right: DataType): boolean =>
12
+ left.key === right.key && left.language.key === right.language.key && left.metaType() === right.metaType()
13
+
14
+
15
+ const lookupFrom = <T>(registry: Map<DataType, T>) =>
16
+ (targetDataType: DataType) => {
17
+ for (const [dataType, t] of registry.entries()) {
18
+ if (shouldBeIdentical(targetDataType, dataType)) {
19
+ return t
20
+ }
21
+ }
22
+ return undefined
23
+ }
24
+
25
+
26
+ /**
27
+ * Type def. for functions that deserialize the value of a property of a specific type.
28
+ */
29
+ export type PropertyValueDeserializerFunction = (value: string) => unknown
30
+
31
+ /**
32
+ * @return an empty registry for populating fluently using
33
+ * `.set(<data type>, <deserializer function>)`,
34
+ * to pass to {@link propertyValueDeserializerFrom}.
35
+ */
36
+ export const newPropertyValueDeserializerRegistry = () => new Map<DataType, PropertyValueDeserializerFunction>
37
+
38
+ /**
39
+ * @return an instance of a {@link PropertyValueDeserializer} entirely driven by the passed `registry`.
40
+ */
41
+ export const propertyValueDeserializerFrom = (registry: Map<DataType, PropertyValueDeserializerFunction>): PropertyValueDeserializer => {
42
+ const byType = lookupFrom(registry)
43
+ return {
44
+ deserializeValue: (value: string | undefined, property: Property): unknown | undefined => {
45
+ if (value === undefined) {
46
+ if (property.optional) {
47
+ return undefined
48
+ }
49
+ throw new Error(`can't deserialize undefined as the value of required property "${property.name}" (on classifier "${property.classifier.name}" in language "${property.classifier.language.name}")`)
50
+ }
51
+ const { type } = property
52
+ if (isUnresolvedReference(type)) {
53
+ throw new Error(`can't deserialize property "${property.name}" (on classifier "${property.classifier.name}" in language "${property.classifier.language.name}") with unspecified type`)
54
+ }
55
+ const specificDeserializer = byType(type)
56
+ if (specificDeserializer != undefined) {
57
+ return specificDeserializer(value)
58
+ } else {
59
+ throw new Error(`can't deserialize value of property "${property.name}" (on classifier "${property.classifier.name}" in language "${property.classifier.language.name}") of type "${type!.name}": ${value}`)
60
+ }
61
+ }
62
+ }
63
+ }
64
+
65
+
66
+ /**
67
+ * Type def. for functions that serialize the value of a property of a specific type.
68
+ */
69
+ export type PropertyValueSerializerFunction = (value: unknown) => string
70
+
71
+ /**
72
+ * @return an empty registry for populating fluently using
73
+ * `.set(<data type>, <serializer function>)`,
74
+ * to pass to {@link propertyValueSerializerFrom}.
75
+ */
76
+ export const newPropertyValueSerializerRegistry = () => new Map<DataType, PropertyValueSerializerFunction>
77
+
78
+ /**
79
+ * @return an instance of a {@link PropertyValueSerializer} entirely driven by the passed `registry`.
80
+ */
81
+ export const propertyValueSerializerFrom = (registry: Map<DataType, PropertyValueSerializerFunction>): PropertyValueSerializer => {
82
+ const byType = lookupFrom(registry)
83
+ return {
84
+ serializeValue: (value: unknown | undefined, property: Property): string | null => {
85
+ if (value === undefined) {
86
+ if (property.optional) {
87
+ return null
88
+ }
89
+ throw new Error(`can't serialize undefined as the value of required property "${property.name}" (on classifier "${property.classifier.name}" in language "${property.classifier.language.name}")`)
90
+ }
91
+ const { type } = property
92
+ if (isUnresolvedReference(type)) {
93
+ throw new Error(`can't serialize property "${property.name}" (on classifier "${property.classifier.name}" in language "${property.classifier.language.name}") with unspecified type`)
94
+ }
95
+ const specificSerializer = byType(type)
96
+ if (specificSerializer != undefined) {
97
+ return specificSerializer(value)
98
+ } else {
99
+ throw new Error(`can't serialize value of property "${property.name}" (on classifier "${property.classifier.name}" in language "${property.classifier.language.name}") of type "${type!.name}": ${value}`)
100
+ }
101
+ }
102
+ }
103
+ }
104
+
105
+
106
+ /**
107
+ * The key of the LionCore language containing the built-ins.
108
+ */
109
+ export const lioncoreBuiltinsKey = "LionCore-builtins"
110
+
111
+ /**
112
+ * A function that generates IDs and keys for entities in the LionCore built-ins language.
113
+ */
114
+ export const lioncoreBuiltinsIdAndKeyGenerator: StringsMapper = (...names) =>
115
+ [lioncoreBuiltinsKey, ...names.slice(1)].join("-")
116
+
117
+
118
+ /**
119
+ * Type def. for objects that façade (a version of) the LionCore built-ins.
120
+ */
121
+ export type LionCoreBuiltinsFacade = {
122
+ language: Language
123
+ /** The default {@link PropertyValueDeserializer}. */
124
+ propertyValueDeserializer: PropertyValueDeserializer
125
+ /** The default {@link PropertyValueSerializer}. */
126
+ propertyValueSerializer: PropertyValueSerializer
127
+ classifiers: {
128
+ node: Concept
129
+ inamed: Interface
130
+ }
131
+ features: {
132
+ inamed_name: Property
133
+ }
134
+ /**
135
+ * The built-in primitive types: boolean, integer, string + legacy (in the `Record<...>` part).
136
+ */
137
+ primitiveTypes: {
138
+ booleanDataType: PrimitiveType
139
+ integerDataType: PrimitiveType
140
+ stringDataType: PrimitiveType
141
+ } & Record<string, PrimitiveType>
142
+ }
143
+
@@ -0,0 +1,22 @@
1
+ import { Classifier, Concept } from "./types.js"
2
+ import { LionWebVersion } from "./version.js"
3
+ import { LionWebVersions } from "./versions.js"
4
+
5
+ /**
6
+ * @return whether the given {@link Classifier} is the built-in `Node` {@link Concept}
7
+ * of *any* version of the LionCore builtins language,
8
+ * or of the version belonging to the designated {@link LionWebVersion}.
9
+ */
10
+ export const isBuiltinNodeConcept = (classifier: Classifier, lionWebVersion?: LionWebVersion): boolean => {
11
+ const { builtinsFacade } = lionWebVersion ?? LionWebVersions.v2023_1
12
+ return classifier instanceof Concept
13
+ && (classifier as Concept).abstract
14
+ && classifier.language.key === builtinsFacade.language.key
15
+ && (lionWebVersion === undefined || classifier.language.version === builtinsFacade.language.version)
16
+ && classifier.key === builtinsFacade.classifiers.node.key
17
+ }
18
+
19
+ /*
20
+ * NOTE: this function has to be defined in a separate file to avoid circular loading dependencies!
21
+ */
22
+
@@ -2,10 +2,43 @@ import { LionWebJsonChunk } from "@lionweb/json"
2
2
  import { deserializerWith } from "../deserializer.js"
3
3
  import { nodesExtractorUsing } from "../extraction.js"
4
4
  import { consoleProblemReporter, ProblemReporter } from "../reporter.js"
5
- import { lioncoreBuiltins } from "./builtins.js"
6
- import { lioncoreReader, lioncoreWriter } from "./facade.js"
7
- import { lioncore } from "./lioncore.js"
5
+ import { lioncoreReaderFor, lioncoreWriterFor } from "./reading-writing.js"
8
6
  import { Language } from "./types.js"
7
+ import { LionWebVersion } from "./version.js"
8
+ import { LionWebVersions } from "./versions.js"
9
+
10
+
11
+ /**
12
+ * Type def. for objects that contain all necessary data to deserialize one or more languages from a {@link LionWebJsonChunk serialization chunk}.
13
+ */
14
+ export type LanguageDeserializationData = {
15
+ serializationChunk: LionWebJsonChunk
16
+ /**
17
+ * The version of the LionWeb serialization format to deserialize from.
18
+ * Default = {@link LionWebVersions.v2023_1}.
19
+ */
20
+ lionWebVersion?: LionWebVersion
21
+ dependentLanguages?: Language[]
22
+ /**
23
+ * Default = {@link consoleProblemReporter}.
24
+ */
25
+ problemReporter?: ProblemReporter
26
+ }
27
+
28
+ /**
29
+ * @return languages serialized to the {@link LionWebJsonChunk serialization chunk} passed in the {@link LanguageDeserializationData data object}.
30
+ */
31
+ export const deserializeLanguagesFrom = ({serializationChunk, dependentLanguages, problemReporter, lionWebVersion = LionWebVersions.v2023_1}: LanguageDeserializationData): Language[] =>
32
+ deserializerWith({
33
+ writer: lioncoreWriterFor(lionWebVersion),
34
+ languages: [lionWebVersion.lioncoreFacade.language, ...(dependentLanguages ?? [])],
35
+ problemReporter: problemReporter ?? consoleProblemReporter
36
+ })(
37
+ serializationChunk,
38
+ [lionWebVersion.builtinsFacade.language, ...(dependentLanguages ?? [])].flatMap(nodesExtractorUsing(lioncoreReaderFor(lionWebVersion))),
39
+ )
40
+ .filter((rootNode) => rootNode instanceof Language)
41
+ .map((language) => (language as Language).dependingOn(...(dependentLanguages ?? [])))
9
42
 
10
43
 
11
44
  /**
@@ -13,31 +46,27 @@ import { Language } from "./types.js"
13
46
  * as an instance of the LionCore metametamodel, using {@link _M3Concept these type definitions}.
14
47
  */
15
48
  export const deserializeLanguages = (serializationChunk: LionWebJsonChunk, ...dependentLanguages: Language[]): Language[] =>
16
- deserializeLanguagesWithReporter(serializationChunk, consoleProblemReporter, ...dependentLanguages)
49
+ deserializeLanguagesFrom({ serializationChunk, dependentLanguages })
50
+
17
51
 
18
52
  /**
19
53
  * Deserializes languages that have been serialized into the LionWeb serialization JSON format
20
54
  * as an instance of the LionCore metametamodel, using {@link _M3Concept these type definitions}.
21
55
  * This function takes a {@link ProblemReporter} to be able to see what problems occurred.
56
+ *
57
+ * @deprecated Use {@link deserializeLanguagesFrom} instead.
22
58
  */
23
59
  export const deserializeLanguagesWithReporter = (
24
60
  serializationChunk: LionWebJsonChunk,
25
61
  problemReporter: ProblemReporter,
26
62
  ...dependentLanguages: Language[]
27
63
  ): Language[] =>
28
- deserializerWith({
29
- writer: lioncoreWriter,
30
- languages: [lioncore, ...dependentLanguages],
31
- problemReporter: problemReporter
32
- })(
33
- serializationChunk,
34
- [lioncoreBuiltins, ...dependentLanguages].flatMap(nodesExtractorUsing(lioncoreReader)),
35
- )
36
- .filter((rootNode) => rootNode instanceof Language)
37
- .map((language) => (language as Language).dependingOn(...dependentLanguages))
64
+ deserializeLanguagesFrom({ serializationChunk, problemReporter, dependentLanguages })
38
65
 
39
66
  /**
40
67
  * Legacy alias for {@link deserializeLanguagesWithReporter}, kept for backward compatibility, and to be deprecated and removed later.
68
+ *
69
+ * @deprecated Use {@link deserializeLanguagesFrom} instead.
41
70
  */
42
71
  export const deserializeLanguagesWithHandler = deserializeLanguagesWithReporter
43
72