@jbrowse/mobx-state-tree 5.6.0 → 5.6.2

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 (96) hide show
  1. package/README.md +18 -0
  2. package/dist/core/action.d.ts +1 -1
  3. package/dist/core/action.js +228 -0
  4. package/dist/core/action.js.map +1 -1
  5. package/dist/core/actionContext.js +42 -0
  6. package/dist/core/actionContext.js.map +1 -1
  7. package/dist/core/flow.d.ts +1 -1
  8. package/dist/core/flow.js +180 -0
  9. package/dist/core/flow.js.map +1 -1
  10. package/dist/core/json-patch.js +133 -0
  11. package/dist/core/json-patch.js.map +1 -1
  12. package/dist/core/mst-operations.js +885 -0
  13. package/dist/core/mst-operations.js.map +1 -1
  14. package/dist/core/node/BaseNode.js +152 -0
  15. package/dist/core/node/BaseNode.js.map +1 -1
  16. package/dist/core/node/Hook.js +15 -0
  17. package/dist/core/node/Hook.js.map +1 -1
  18. package/dist/core/node/create-node.js +41 -0
  19. package/dist/core/node/create-node.js.map +1 -1
  20. package/dist/core/node/identifier-cache.js +115 -0
  21. package/dist/core/node/identifier-cache.js.map +1 -1
  22. package/dist/core/node/livelinessChecking.js +38 -0
  23. package/dist/core/node/livelinessChecking.js.map +1 -1
  24. package/dist/core/node/node-utils.js +165 -0
  25. package/dist/core/node/node-utils.js.map +1 -1
  26. package/dist/core/node/object-node.js +545 -0
  27. package/dist/core/node/object-node.js.map +1 -1
  28. package/dist/core/node/scalar-node.js +89 -0
  29. package/dist/core/node/scalar-node.js.map +1 -1
  30. package/dist/core/process.d.ts +1 -1
  31. package/dist/core/process.js +39 -0
  32. package/dist/core/process.js.map +1 -1
  33. package/dist/core/type/type-checker.js +154 -0
  34. package/dist/core/type/type-checker.js.map +1 -1
  35. package/dist/core/type/type.d.ts +1 -1
  36. package/dist/core/type/type.js +251 -0
  37. package/dist/core/type/type.js.map +1 -1
  38. package/dist/index.js +85 -0
  39. package/dist/index.js.map +1 -1
  40. package/dist/internal.js +60 -0
  41. package/dist/internal.js.map +1 -1
  42. package/dist/middlewares/create-action-tracking-middleware.js +81 -0
  43. package/dist/middlewares/create-action-tracking-middleware.js.map +1 -1
  44. package/dist/middlewares/createActionTrackingMiddleware2.js +133 -0
  45. package/dist/middlewares/createActionTrackingMiddleware2.js.map +1 -1
  46. package/dist/middlewares/on-action.js +215 -0
  47. package/dist/middlewares/on-action.js.map +1 -1
  48. package/dist/mobx-state-tree.js +83 -6867
  49. package/dist/mobx-state-tree.module.js +83 -6789
  50. package/dist/types/complex-types/array.d.ts +1 -1
  51. package/dist/types/complex-types/array.js +352 -0
  52. package/dist/types/complex-types/array.js.map +1 -1
  53. package/dist/types/complex-types/map.d.ts +1 -1
  54. package/dist/types/complex-types/map.js +361 -0
  55. package/dist/types/complex-types/map.js.map +1 -1
  56. package/dist/types/complex-types/model.js +477 -0
  57. package/dist/types/complex-types/model.js.map +1 -1
  58. package/dist/types/index.js +38 -0
  59. package/dist/types/index.js.map +1 -1
  60. package/dist/types/primitives.js +182 -0
  61. package/dist/types/primitives.js.map +1 -1
  62. package/dist/types/utility-types/custom.js +110 -0
  63. package/dist/types/utility-types/custom.js.map +1 -1
  64. package/dist/types/utility-types/enumeration.js +34 -0
  65. package/dist/types/utility-types/enumeration.js.map +1 -1
  66. package/dist/types/utility-types/frozen.js +97 -0
  67. package/dist/types/utility-types/frozen.js.map +1 -1
  68. package/dist/types/utility-types/identifier.js +129 -0
  69. package/dist/types/utility-types/identifier.js.map +1 -1
  70. package/dist/types/utility-types/late.js +109 -0
  71. package/dist/types/utility-types/late.js.map +1 -1
  72. package/dist/types/utility-types/lazy.js +76 -0
  73. package/dist/types/utility-types/lazy.js.map +1 -1
  74. package/dist/types/utility-types/literal.js +63 -0
  75. package/dist/types/utility-types/literal.js.map +1 -1
  76. package/dist/types/utility-types/maybe.js +30 -0
  77. package/dist/types/utility-types/maybe.js.map +1 -1
  78. package/dist/types/utility-types/optional.js +140 -0
  79. package/dist/types/utility-types/optional.js.map +1 -1
  80. package/dist/types/utility-types/reference.d.ts +2 -2
  81. package/dist/types/utility-types/reference.js +392 -0
  82. package/dist/types/utility-types/reference.js.map +1 -1
  83. package/dist/types/utility-types/refinement.js +85 -0
  84. package/dist/types/utility-types/refinement.js.map +1 -1
  85. package/dist/types/utility-types/resilient.js +120 -0
  86. package/dist/types/utility-types/resilient.js.map +1 -1
  87. package/dist/types/utility-types/snapshotProcessor.js +161 -0
  88. package/dist/types/utility-types/snapshotProcessor.js.map +1 -1
  89. package/dist/types/utility-types/union.d.ts +1 -0
  90. package/dist/types/utility-types/union.js +245 -0
  91. package/dist/types/utility-types/union.js.map +1 -1
  92. package/dist/utils.js +483 -0
  93. package/dist/utils.js.map +1 -1
  94. package/package.json +25 -24
  95. package/changelog.md +0 -677
  96. package/dist/mobx-state-tree.umd.js +0 -6873
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DatePrimitive = exports.undefinedType = exports.nullType = exports.boolean = exports.finite = exports.float = exports.integer = exports.number = exports.string = exports.CoreType = void 0;
4
+ exports.getPrimitiveFactoryFromValue = getPrimitiveFactoryFromValue;
5
+ exports.isPrimitiveType = isPrimitiveType;
6
+ const internal_ts_1 = require("../internal.js");
7
+ // TODO: implement CoreType using types.custom ?
8
+ /**
9
+ * @internal
10
+ * @hidden
11
+ */
12
+ class CoreType extends internal_ts_1.SimpleType {
13
+ flags;
14
+ checker;
15
+ initializer;
16
+ constructor(name, flags, checker, initializer = internal_ts_1.identity) {
17
+ super(name);
18
+ this.flags = flags;
19
+ this.checker = checker;
20
+ this.initializer = initializer;
21
+ this.flags = flags;
22
+ }
23
+ describe() {
24
+ return this.name;
25
+ }
26
+ instantiate(parent, subpath, environment, initialValue) {
27
+ return (0, internal_ts_1.createScalarNode)(this, parent, subpath, environment, initialValue);
28
+ }
29
+ createNewInstance(snapshot) {
30
+ return this.initializer(snapshot);
31
+ }
32
+ isValidSnapshot(value, context) {
33
+ if ((0, internal_ts_1.isPrimitive)(value) && this.checker(value)) {
34
+ return (0, internal_ts_1.typeCheckSuccess)();
35
+ }
36
+ const typeName = this.name === "Date" ? "Date or a unix milliseconds timestamp" : this.name;
37
+ return (0, internal_ts_1.typeCheckFailure)(context, value, `Value is not a ${typeName}`);
38
+ }
39
+ }
40
+ exports.CoreType = CoreType;
41
+ /**
42
+ * `types.string` - Creates a type that can only contain a string value.
43
+ * This type is used for string values by default
44
+ *
45
+ * Example:
46
+ * ```ts
47
+ * const Person = types.model({
48
+ * firstName: types.string,
49
+ * lastName: "Doe"
50
+ * })
51
+ * ```
52
+ */
53
+ // tslint:disable-next-line:variable-name
54
+ exports.string = new CoreType("string", internal_ts_1.TypeFlags.String, v => typeof v === "string");
55
+ /**
56
+ * `types.number` - Creates a type that can only contain a numeric value.
57
+ * This type is used for numeric values by default
58
+ *
59
+ * Example:
60
+ * ```ts
61
+ * const Vector = types.model({
62
+ * x: types.number,
63
+ * y: 1.5
64
+ * })
65
+ * ```
66
+ */
67
+ // tslint:disable-next-line:variable-name
68
+ exports.number = new CoreType("number", internal_ts_1.TypeFlags.Number, v => typeof v === "number");
69
+ /**
70
+ * `types.integer` - Creates a type that can only contain an integer value.
71
+ *
72
+ * Example:
73
+ * ```ts
74
+ * const Size = types.model({
75
+ * width: types.integer,
76
+ * height: 10
77
+ * })
78
+ * ```
79
+ */
80
+ // tslint:disable-next-line:variable-name
81
+ exports.integer = new CoreType("integer", internal_ts_1.TypeFlags.Integer, v => (0, internal_ts_1.isInteger)(v));
82
+ /**
83
+ * `types.float` - Creates a type that can only contain an float value.
84
+ *
85
+ * Example:
86
+ * ```ts
87
+ * const Size = types.model({
88
+ * width: types.float,
89
+ * height: 10
90
+ * })
91
+ * ```
92
+ */
93
+ // tslint:disable-next-line:variable-name
94
+ exports.float = new CoreType("float", internal_ts_1.TypeFlags.Float, v => (0, internal_ts_1.isFloat)(v));
95
+ /**
96
+ * `types.finite` - Creates a type that can only contain an finite value.
97
+ *
98
+ * Example:
99
+ * ```ts
100
+ * const Size = types.model({
101
+ * width: types.finite,
102
+ * height: 10
103
+ * })
104
+ * ```
105
+ */
106
+ // tslint:disable-next-line:variable-name
107
+ exports.finite = new CoreType("finite", internal_ts_1.TypeFlags.Finite, v => (0, internal_ts_1.isFinite)(v));
108
+ /**
109
+ * `types.boolean` - Creates a type that can only contain a boolean value.
110
+ * This type is used for boolean values by default
111
+ *
112
+ * Example:
113
+ * ```ts
114
+ * const Thing = types.model({
115
+ * isCool: types.boolean,
116
+ * isAwesome: false
117
+ * })
118
+ * ```
119
+ */
120
+ // tslint:disable-next-line:variable-name
121
+ exports.boolean = new CoreType("boolean", internal_ts_1.TypeFlags.Boolean, v => typeof v === "boolean");
122
+ /**
123
+ * `types.null` - The type of the value `null`
124
+ */
125
+ exports.nullType = new CoreType("null", internal_ts_1.TypeFlags.Null, v => v === null);
126
+ /**
127
+ * `types.undefined` - The type of the value `undefined`
128
+ */
129
+ exports.undefinedType = new CoreType("undefined", internal_ts_1.TypeFlags.Undefined, v => v === undefined);
130
+ const _DatePrimitive = new CoreType("Date", internal_ts_1.TypeFlags.Date, v => typeof v === "number" || v instanceof Date, v => (v instanceof Date ? v : new Date(v)));
131
+ _DatePrimitive.getSnapshot = function (node) {
132
+ return node.storedValue.getTime();
133
+ };
134
+ /**
135
+ * `types.Date` - Creates a type that can only contain a javascript Date value.
136
+ *
137
+ * Example:
138
+ * ```ts
139
+ * const LogLine = types.model({
140
+ * timestamp: types.Date,
141
+ * })
142
+ *
143
+ * LogLine.create({ timestamp: new Date() })
144
+ * ```
145
+ */
146
+ exports.DatePrimitive = _DatePrimitive;
147
+ /**
148
+ * @internal
149
+ * @hidden
150
+ */
151
+ function getPrimitiveFactoryFromValue(value) {
152
+ switch (typeof value) {
153
+ case "string":
154
+ return exports.string;
155
+ case "number":
156
+ return exports.number; // In the future, isInteger(value) ? integer : number would be interesting, but would be too breaking for now
157
+ case "boolean":
158
+ return exports.boolean;
159
+ case "object":
160
+ if (value instanceof Date) {
161
+ return exports.DatePrimitive;
162
+ }
163
+ }
164
+ throw (0, internal_ts_1.fail)("Cannot determine primitive type from value " + value);
165
+ }
166
+ /**
167
+ * Returns if a given value represents a primitive type.
168
+ *
169
+ * @param type
170
+ * @returns
171
+ */
172
+ function isPrimitiveType(type) {
173
+ return ((0, internal_ts_1.isType)(type) &&
174
+ (type.flags &
175
+ (internal_ts_1.TypeFlags.String |
176
+ internal_ts_1.TypeFlags.Number |
177
+ internal_ts_1.TypeFlags.Integer |
178
+ internal_ts_1.TypeFlags.Boolean |
179
+ internal_ts_1.TypeFlags.Date)) >
180
+ 0);
181
+ }
182
+ //# sourceMappingURL=primitives.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/types/primitives.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/types/primitives.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CustomType = void 0;
4
+ exports.custom = custom;
5
+ const internal_ts_1 = require("../../internal.js");
6
+ /**
7
+ * `types.custom` - Creates a custom type. Custom types can be used for arbitrary immutable values, that have a serializable representation. For example, to create your own Date representation, Decimal type etc.
8
+ *
9
+ * The signature of the options is:
10
+ * ```ts
11
+ * export interface CustomTypeOptions<S, T> {
12
+ * // Friendly name
13
+ * name: string
14
+ * // given a serialized value and environment, how to turn it into the target type
15
+ * fromSnapshot(snapshot: S, env: any): T
16
+ * // return the serialization of the current value
17
+ * toSnapshot(value: T): S
18
+ * // if true, this is a converted value, if false, it's a snapshot
19
+ * isTargetType(value: T | S): value is T
20
+ * // a non empty string is assumed to be a validation error
21
+ * getValidationMessage?(snapshot: S): string
22
+ * }
23
+ * ```
24
+ *
25
+ * Example:
26
+ * ```ts
27
+ * const DecimalPrimitive = types.custom<string, Decimal>({
28
+ * name: "Decimal",
29
+ * fromSnapshot(value: string) {
30
+ * return new Decimal(value)
31
+ * },
32
+ * toSnapshot(value: Decimal) {
33
+ * return value.toString()
34
+ * },
35
+ * isTargetType(value: string | Decimal): boolean {
36
+ * return value instanceof Decimal
37
+ * },
38
+ * getValidationMessage(value: string): string {
39
+ * if (/^-?\d+\.\d+$/.test(value)) return "" // OK
40
+ * return `'${value}' doesn't look like a valid decimal number`
41
+ * }
42
+ * })
43
+ *
44
+ * const Wallet = types.model({
45
+ * balance: DecimalPrimitive
46
+ * })
47
+ * ```
48
+ *
49
+ * @param options
50
+ * @returns
51
+ */
52
+ function custom(options) {
53
+ return new CustomType(options);
54
+ }
55
+ /**
56
+ * @internal
57
+ * @hidden
58
+ */
59
+ class CustomType extends internal_ts_1.SimpleType {
60
+ options;
61
+ flags = internal_ts_1.TypeFlags.Custom;
62
+ constructor(options) {
63
+ super(options.name);
64
+ this.options = options;
65
+ }
66
+ describe() {
67
+ return this.name;
68
+ }
69
+ isValidSnapshot(value, context) {
70
+ if (this.options.isTargetType(value)) {
71
+ return (0, internal_ts_1.typeCheckSuccess)();
72
+ }
73
+ const typeError = this.options.getValidationMessage(value);
74
+ if (typeError) {
75
+ return (0, internal_ts_1.typeCheckFailure)(context, value, `Invalid value for type '${this.name}': ${typeError}`);
76
+ }
77
+ return (0, internal_ts_1.typeCheckSuccess)();
78
+ }
79
+ getSnapshot(node) {
80
+ return this.options.toSnapshot(node.storedValue);
81
+ }
82
+ instantiate(parent, subpath, environment, initialValue) {
83
+ const valueToStore = this.options.isTargetType(initialValue)
84
+ ? initialValue
85
+ : this.options.fromSnapshot(initialValue, parent && parent.root.environment);
86
+ return (0, internal_ts_1.createScalarNode)(this, parent, subpath, environment, valueToStore);
87
+ }
88
+ reconcile(current, value, parent, subpath) {
89
+ const isSnapshot = !this.options.isTargetType(value);
90
+ // in theory customs use scalar nodes which cannot be detached, but still...
91
+ if (!current.isDetaching) {
92
+ const unchanged = current.type === this &&
93
+ (isSnapshot
94
+ ? value === current.snapshot
95
+ : value === current.storedValue);
96
+ if (unchanged) {
97
+ current.setParent(parent, subpath);
98
+ return current;
99
+ }
100
+ }
101
+ const valueToStore = isSnapshot
102
+ ? this.options.fromSnapshot(value, parent.root.environment)
103
+ : value;
104
+ const newNode = this.instantiate(parent, subpath, undefined, valueToStore);
105
+ current.die(); // noop if detaching
106
+ return newNode;
107
+ }
108
+ }
109
+ exports.CustomType = CustomType;
110
+ //# sourceMappingURL=custom.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"custom.js","sourceRoot":"","sources":["../../../src/types/utility-types/custom.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"custom.js","sourceRoot":"","sources":["../../../src/types/utility-types/custom.ts"],"names":[],"mappings":";;;AAyEA,wBAIC;AA7ED,mDAU0B;AAiB1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,SAAgB,MAAM,CACpB,OAAgC;IAEhC,OAAO,IAAI,UAAU,CAAO,OAAO,CAAC,CAAA;AACtC,CAAC;AAED;;;GAGG;AACH,MAAa,UAAiB,SAAQ,wBAAuB;IAG5B;IAFtB,KAAK,GAAG,uBAAS,CAAC,MAAM,CAAA;IAEjC,YAA+B,OAAgC;QAC7D,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QADU,YAAO,GAAP,OAAO,CAAyB;IAE/D,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED,eAAe,CACb,KAAgB,EAChB,OAA2B;QAE3B,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO,IAAA,8BAAgB,GAAE,CAAA;QAC3B,CAAC;QAED,MAAM,SAAS,GAAW,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAU,CAAC,CAAA;QACvE,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,IAAA,8BAAgB,EACrB,OAAO,EACP,KAAK,EACL,2BAA2B,IAAI,CAAC,IAAI,MAAM,SAAS,EAAE,CACtD,CAAA;QACH,CAAC;QACD,OAAO,IAAA,8BAAgB,GAAE,CAAA;IAC3B,CAAC;IAED,WAAW,CAAC,IAAe;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAClD,CAAC;IAED,WAAW,CACT,MAA4B,EAC5B,OAAe,EACf,WAAgB,EAChB,YAAmB;QAEnB,MAAM,YAAY,GAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC;YAC7D,CAAC,CAAE,YAAkB;YACrB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CACvB,YAAiB,EACjB,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAClC,CAAA;QACL,OAAO,IAAA,8BAAgB,EAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;IAC3E,CAAC;IAED,SAAS,CACP,OAAkB,EAClB,KAAY,EACZ,MAAqB,EACrB,OAAe;QAEf,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;QACpD,4EAA4E;QAC5E,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACzB,MAAM,SAAS,GACb,OAAO,CAAC,IAAI,KAAK,IAAI;gBACrB,CAAC,UAAU;oBACT,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,QAAQ;oBAC5B,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;YACpC,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;gBAClC,OAAO,OAAO,CAAA;YAChB,CAAC;QACH,CAAC;QACD,MAAM,YAAY,GAAM,UAAU;YAChC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAU,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;YAChE,CAAC,CAAE,KAAW,CAAA;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,CAAA;QAC1E,OAAO,CAAC,GAAG,EAAE,CAAA,CAAC,oBAAoB;QAClC,OAAO,OAAO,CAAA;IAChB,CAAC;CACF;AA3ED,gCA2EC"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.enumeration = enumeration;
4
+ const internal_ts_1 = require("../../internal.js");
5
+ /**
6
+ * `types.enumeration` - Can be used to create an string based enumeration.
7
+ * (note: this methods is just sugar for a union of string literals)
8
+ *
9
+ * Example:
10
+ * ```ts
11
+ * const TrafficLight = types.model({
12
+ * color: types.enumeration("Color", ["Red", "Orange", "Green"])
13
+ * })
14
+ * ```
15
+ *
16
+ * @param name descriptive name of the enumeration (optional)
17
+ * @param options possible values this enumeration can have
18
+ * @returns
19
+ */
20
+ function enumeration(name, options) {
21
+ const realOptions = typeof name === "string" ? options : name;
22
+ // check all options
23
+ if ((0, internal_ts_1.devMode)()) {
24
+ realOptions.forEach((option, i) => {
25
+ (0, internal_ts_1.assertIsString)(option, i + 1);
26
+ });
27
+ }
28
+ const type = (0, internal_ts_1.union)(...realOptions.map(option => (0, internal_ts_1.literal)("" + option)));
29
+ if (typeof name === "string") {
30
+ type.name = name;
31
+ }
32
+ return type;
33
+ }
34
+ //# sourceMappingURL=enumeration.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"enumeration.js","sourceRoot":"","sources":["../../../src/types/utility-types/enumeration.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,OAAO,EACP,OAAO,EACP,KAAK,EACN,MAAM,mBAAmB,CAAA;AAkB1B;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,WAAW,CACzB,IAAuB,EACvB,OAAa;IAEb,MAAM,WAAW,GAAa,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAQ,CAAC,CAAC,CAAC,IAAI,CAAA;IACxE,oBAAoB;IACpB,IAAI,OAAO,EAAE,EAAE,CAAC;QACd,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAChC,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QAC/B,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACtE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
1
+ {"version":3,"file":"enumeration.js","sourceRoot":"","sources":["../../../src/types/utility-types/enumeration.ts"],"names":[],"mappings":";;AAuCA,kCAgBC;AAvDD,mDAM0B;AAkB1B;;;;;;;;;;;;;;GAcG;AACH,SAAgB,WAAW,CACzB,IAAuB,EACvB,OAAa;IAEb,MAAM,WAAW,GAAa,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAQ,CAAC,CAAC,CAAC,IAAI,CAAA;IACxE,oBAAoB;IACpB,IAAI,IAAA,qBAAO,GAAE,EAAE,CAAC;QACd,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAChC,IAAA,4BAAc,EAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QAC/B,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,IAAA,mBAAK,EAAC,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAA,qBAAO,EAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACtE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Frozen = void 0;
4
+ exports.frozen = frozen;
5
+ exports.isFrozenType = isFrozenType;
6
+ const internal_ts_1 = require("../../internal.js");
7
+ /**
8
+ * @internal
9
+ * @hidden
10
+ */
11
+ class Frozen extends internal_ts_1.SimpleType {
12
+ subType;
13
+ flags = internal_ts_1.TypeFlags.Frozen;
14
+ constructor(subType) {
15
+ super(subType ? `frozen(${subType.name})` : "frozen");
16
+ this.subType = subType;
17
+ }
18
+ describe() {
19
+ return "<any immutable value>";
20
+ }
21
+ instantiate(parent, subpath, environment, value) {
22
+ // create the node
23
+ return (0, internal_ts_1.createScalarNode)(this, parent, subpath, environment, (0, internal_ts_1.deepFreeze)(value));
24
+ }
25
+ isValidSnapshot(value, context) {
26
+ if (!(0, internal_ts_1.isSerializable)(value)) {
27
+ return (0, internal_ts_1.typeCheckFailure)(context, value, "Value is not serializable and cannot be frozen");
28
+ }
29
+ if (this.subType) {
30
+ return this.subType.validate(value, context);
31
+ }
32
+ return (0, internal_ts_1.typeCheckSuccess)();
33
+ }
34
+ }
35
+ exports.Frozen = Frozen;
36
+ const untypedFrozenInstance = new Frozen();
37
+ /**
38
+ * `types.frozen` - Frozen can be used to store any value that is serializable in itself (that is valid JSON).
39
+ * Frozen values need to be immutable or treated as if immutable. They need be serializable as well.
40
+ * Values stored in frozen will snapshotted as-is by MST, and internal changes will not be tracked.
41
+ *
42
+ * This is useful to store complex, but immutable values like vectors etc. It can form a powerful bridge to parts of your application that should be immutable, or that assume data to be immutable.
43
+ *
44
+ * Note: if you want to store free-form state that is mutable, or not serializeable, consider using volatile state instead.
45
+ *
46
+ * Frozen properties can be defined in three different ways
47
+ * 1. `types.frozen(SubType)` - provide a valid MST type and frozen will check if the provided data conforms the snapshot for that type
48
+ * 2. `types.frozen({ someDefaultValue: true})` - provide a primitive value, object or array, and MST will infer the type from that object, and also make it the default value for the field
49
+ * 3. `types.frozen<TypeScriptType>()` - provide a typescript type, to help in strongly typing the field (design time only)
50
+ *
51
+ * Example:
52
+ * ```ts
53
+ * const GameCharacter = types.model({
54
+ * name: string,
55
+ * location: types.frozen({ x: 0, y: 0})
56
+ * })
57
+ *
58
+ * const hero = GameCharacter.create({
59
+ * name: "Mario",
60
+ * location: { x: 7, y: 4 }
61
+ * })
62
+ *
63
+ * hero.location = { x: 10, y: 2 } // OK
64
+ * hero.location.x = 7 // Not ok!
65
+ * ```
66
+ *
67
+ * ```ts
68
+ * type Point = { x: number, y: number }
69
+ * const Mouse = types.model({
70
+ * loc: types.frozen<Point>()
71
+ * })
72
+ * ```
73
+ *
74
+ * @param defaultValueOrType
75
+ * @returns
76
+ */
77
+ function frozen(arg) {
78
+ if (arguments.length === 0) {
79
+ return untypedFrozenInstance;
80
+ }
81
+ else if ((0, internal_ts_1.isType)(arg)) {
82
+ return new Frozen(arg);
83
+ }
84
+ else {
85
+ return (0, internal_ts_1.optional)(untypedFrozenInstance, arg);
86
+ }
87
+ }
88
+ /**
89
+ * Returns if a given value represents a frozen type.
90
+ *
91
+ * @param type
92
+ * @returns
93
+ */
94
+ function isFrozenType(type) {
95
+ return (0, internal_ts_1.isType)(type) && (type.flags & internal_ts_1.TypeFlags.Frozen) > 0;
96
+ }
97
+ //# sourceMappingURL=frozen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"frozen.js","sourceRoot":"","sources":["../../../src/types/utility-types/frozen.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,MAAM,EACN,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,mBAAmB,CAAA;AAE1B;;;GAGG;AACH,MAAM,OAAO,MAAU,SAAQ,UAAmB;IAG5B;IAFpB,KAAK,GAAG,SAAS,CAAC,MAAM,CAAA;IAExB,YAAoB,OAAkB;QACpC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;QADnC,YAAO,GAAP,OAAO,CAAW;IAEtC,CAAC;IAED,QAAQ;QACN,OAAO,uBAAuB,CAAA;IAChC,CAAC;IAED,WAAW,CACT,MAA4B,EAC5B,OAAe,EACf,WAAgB,EAChB,KAAgB;QAEhB,kBAAkB;QAClB,OAAO,gBAAgB,CACrB,IAAI,EACJ,MAAM,EACN,OAAO,EACP,WAAW,EACX,UAAU,CAAC,KAAK,CAAC,CAClB,CAAA;IACH,CAAC;IAED,eAAe,CACb,KAAgB,EAChB,OAA2B;QAE3B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,gBAAgB,CACrB,OAAO,EACP,KAAK,EACL,gDAAgD,CACjD,CAAA;QACH,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC9C,CAAC;QACD,OAAO,gBAAgB,EAAE,CAAA;IAC3B,CAAC;CACF;AAED,MAAM,qBAAqB,GAAG,IAAI,MAAM,EAAE,CAAA;AAK1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,UAAU,MAAM,CAAC,GAAS;IAC9B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,qBAAqB,CAAA;IAC9B,CAAC;SAAM,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;SAAM,CAAC;QACN,OAAO,QAAQ,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAA;IAC7C,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAQ;IAER,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAC5D,CAAC"}
1
+ {"version":3,"file":"frozen.js","sourceRoot":"","sources":["../../../src/types/utility-types/frozen.ts"],"names":[],"mappings":";;;AA+GA,wBAQC;AAQD,oCAIC;AAnID,mDAe0B;AAE1B;;;GAGG;AACH,MAAa,MAAU,SAAQ,wBAAmB;IAG5B;IAFpB,KAAK,GAAG,uBAAS,CAAC,MAAM,CAAA;IAExB,YAAoB,OAAkB;QACpC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;QADnC,YAAO,GAAP,OAAO,CAAW;IAEtC,CAAC;IAED,QAAQ;QACN,OAAO,uBAAuB,CAAA;IAChC,CAAC;IAED,WAAW,CACT,MAA4B,EAC5B,OAAe,EACf,WAAgB,EAChB,KAAgB;QAEhB,kBAAkB;QAClB,OAAO,IAAA,8BAAgB,EACrB,IAAI,EACJ,MAAM,EACN,OAAO,EACP,WAAW,EACX,IAAA,wBAAU,EAAC,KAAK,CAAC,CAClB,CAAA;IACH,CAAC;IAED,eAAe,CACb,KAAgB,EAChB,OAA2B;QAE3B,IAAI,CAAC,IAAA,4BAAc,EAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAA,8BAAgB,EACrB,OAAO,EACP,KAAK,EACL,gDAAgD,CACjD,CAAA;QACH,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC9C,CAAC;QACD,OAAO,IAAA,8BAAgB,GAAE,CAAA;IAC3B,CAAC;CACF;AA3CD,wBA2CC;AAED,MAAM,qBAAqB,GAAG,IAAI,MAAM,EAAE,CAAA;AAK1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,SAAgB,MAAM,CAAC,GAAS;IAC9B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,qBAAqB,CAAA;IAC9B,CAAC;SAAM,IAAI,IAAA,oBAAM,EAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;SAAM,CAAC;QACN,OAAO,IAAA,sBAAQ,EAAC,qBAAqB,EAAE,GAAG,CAAC,CAAA;IAC7C,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,YAAY,CAC1B,IAAQ;IAER,OAAO,IAAA,oBAAM,EAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,uBAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAC5D,CAAC"}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.identifierNumber = exports.identifier = exports.IdentifierNumberType = exports.IdentifierType = void 0;
4
+ exports.isIdentifierType = isIdentifierType;
5
+ exports.normalizeIdentifier = normalizeIdentifier;
6
+ exports.isValidIdentifier = isValidIdentifier;
7
+ exports.assertIsValidIdentifier = assertIsValidIdentifier;
8
+ const internal_ts_1 = require("../../internal.js");
9
+ class BaseIdentifierType extends internal_ts_1.SimpleType {
10
+ validType;
11
+ flags = internal_ts_1.TypeFlags.Identifier;
12
+ constructor(name, validType) {
13
+ super(name);
14
+ this.validType = validType;
15
+ }
16
+ instantiate(parent, subpath, environment, initialValue) {
17
+ if (!parent || !(parent.type instanceof internal_ts_1.ModelType)) {
18
+ throw (0, internal_ts_1.fail)(`Identifier types can only be instantiated as direct child of a model type`);
19
+ }
20
+ return (0, internal_ts_1.createScalarNode)(this, parent, subpath, environment, initialValue);
21
+ }
22
+ reconcile(current, newValue, parent, subpath) {
23
+ // we don't consider detaching here since identifier are scalar nodes, and scalar nodes cannot be detached
24
+ if (current.storedValue !== newValue) {
25
+ throw (0, internal_ts_1.fail)(`Tried to change identifier from '${current.storedValue}' to '${newValue}'. Changing identifiers is not allowed.`);
26
+ }
27
+ current.setParent(parent, subpath);
28
+ return current;
29
+ }
30
+ isValidSnapshot(value, context) {
31
+ if (typeof value !== this.validType) {
32
+ return (0, internal_ts_1.typeCheckFailure)(context, value, `Value is not a valid ${this.describe()}, expected a ${this.validType}`);
33
+ }
34
+ return (0, internal_ts_1.typeCheckSuccess)();
35
+ }
36
+ }
37
+ /**
38
+ * @internal
39
+ * @hidden
40
+ */
41
+ class IdentifierType extends BaseIdentifierType {
42
+ flags = internal_ts_1.TypeFlags.Identifier;
43
+ constructor() {
44
+ super(`identifier`, "string");
45
+ }
46
+ describe() {
47
+ return `identifier`;
48
+ }
49
+ }
50
+ exports.IdentifierType = IdentifierType;
51
+ /**
52
+ * @internal
53
+ * @hidden
54
+ */
55
+ class IdentifierNumberType extends BaseIdentifierType {
56
+ constructor() {
57
+ super("identifierNumber", "number");
58
+ }
59
+ getSnapshot(node) {
60
+ return node.storedValue;
61
+ }
62
+ describe() {
63
+ return `identifierNumber`;
64
+ }
65
+ }
66
+ exports.IdentifierNumberType = IdentifierNumberType;
67
+ /**
68
+ * `types.identifier` - Identifiers are used to make references, lifecycle events and reconciling works.
69
+ * Inside a state tree, for each type can exist only one instance for each given identifier.
70
+ * For example there couldn't be 2 instances of user with id 1. If you need more, consider using references.
71
+ * Identifier can be used only as type property of a model.
72
+ * This type accepts as parameter the value type of the identifier field that can be either string or number.
73
+ *
74
+ * Example:
75
+ * ```ts
76
+ * const Todo = types.model("Todo", {
77
+ * id: types.identifier,
78
+ * title: types.string
79
+ * })
80
+ * ```
81
+ *
82
+ * @returns
83
+ */
84
+ exports.identifier = new IdentifierType();
85
+ /**
86
+ * `types.identifierNumber` - Similar to `types.identifier`. This one will serialize from / to a number when applying snapshots
87
+ *
88
+ * Example:
89
+ * ```ts
90
+ * const Todo = types.model("Todo", {
91
+ * id: types.identifierNumber,
92
+ * title: types.string
93
+ * })
94
+ * ```
95
+ *
96
+ * @returns
97
+ */
98
+ exports.identifierNumber = new IdentifierNumberType();
99
+ /**
100
+ * Returns if a given value represents an identifier type.
101
+ *
102
+ * @param type
103
+ * @returns
104
+ */
105
+ function isIdentifierType(type) {
106
+ return (0, internal_ts_1.isType)(type) && (type.flags & internal_ts_1.TypeFlags.Identifier) > 0;
107
+ }
108
+ /**
109
+ * @internal
110
+ * @hidden
111
+ */
112
+ function normalizeIdentifier(id) {
113
+ return "" + id;
114
+ }
115
+ /**
116
+ * @internal
117
+ * @hidden
118
+ */
119
+ function isValidIdentifier(id) {
120
+ return typeof id === "string" || typeof id === "number";
121
+ }
122
+ /**
123
+ * @internal
124
+ * @hidden
125
+ */
126
+ function assertIsValidIdentifier(id, argNumber) {
127
+ (0, internal_ts_1.assertArg)(id, isValidIdentifier, "string or number (identifier)", argNumber);
128
+ }
129
+ //# sourceMappingURL=identifier.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"identifier.js","sourceRoot":"","sources":["../../../src/types/utility-types/identifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"identifier.js","sourceRoot":"","sources":["../../../src/types/utility-types/identifier.ts"],"names":[],"mappings":"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"}