@reventlessdev/reventless-core 3.0.0-alpha.277 → 3.0.0-alpha.278

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/CHANGELOG.md CHANGED
@@ -3,6 +3,13 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # 3.0.0-alpha.278 (2026-09-25)
7
+
8
+ ### Bug Fixes
9
+
10
+ * **core:** an identity is published as a string, not a UUID ([f3781ba](https://github.com/ReventlessDev/reventless-core/commit/f3781ba5cae75f156175f649d51f32c3ca053907))
11
+
12
+
6
13
  # 3.0.0-alpha.277 (2026-09-25)
7
14
 
8
15
  **Note:** Version bump only for package @reventlessdev/reventless-core
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reventlessdev/reventless-core",
3
- "version": "3.0.0-alpha.277",
3
+ "version": "3.0.0-alpha.278",
4
4
  "description": "Core package for Reventless framework",
5
5
  "license": "Apache-2.0",
6
6
  "jest": {
@@ -29,16 +29,16 @@
29
29
  "sury": "11.0.0",
30
30
  "uuid": "^13.0.0",
31
31
  "@reventlessdev/rescript-effect": "0.1.0-alpha.34",
32
- "@reventlessdev/rescript-hash-object": "1.2.0-alpha.15",
33
32
  "@reventlessdev/rescript-fast-csv": "2.0.0-alpha.15",
34
33
  "@reventlessdev/rescript-jest": "1.0.0-alpha.11",
35
- "@reventlessdev/rescript-pulumi-pulumi": "2.3.0-alpha.22",
34
+ "@reventlessdev/rescript-hash-object": "1.2.0-alpha.15",
36
35
  "@reventlessdev/rescript-node": "2.0.0-alpha.15",
37
36
  "@reventlessdev/rescript-ssh2": "2.0.0-alpha.15",
37
+ "@reventlessdev/rescript-pulumi-pulumi": "2.3.0-alpha.22",
38
38
  "@reventlessdev/rescript-uuid": "2.0.0-alpha.1",
39
- "@reventlessdev/reventless-interop": "3.0.0-alpha.38",
39
+ "@reventlessdev/reventless-spec": "3.0.0-alpha.149",
40
40
  "@reventlessdev/reventless-infra": "3.0.0-alpha.177",
41
- "@reventlessdev/reventless-spec": "3.0.0-alpha.149"
41
+ "@reventlessdev/reventless-interop": "3.0.0-alpha.38"
42
42
  },
43
43
  "devDependencies": {
44
44
  "rescript": "12.3.1",
@@ -203,7 +203,9 @@ let rec fromSchemaType = (~inputNames: bool=false, st: SchemaType.schemaType): J
203
203
  | ScalarInt => jsonObject([("type", str("integer"))])
204
204
  | ScalarBoolean => jsonObject([("type", str("boolean"))])
205
205
  | ScalarBigInt => jsonObject([("type", str("integer"))])
206
- | EntityId => jsonObject([("type", str("string")), ("format", str("uuid"))])
206
+ // An identity is any string: `Id.Make.makeFromString` takes one, and so does the API.
207
+ // Claiming `format: uuid` made every generated form refuse an id it had not minted.
208
+ | EntityId => jsonObject([("type", str("string"))])
207
209
  | DateTime => jsonObject([("type", str("string")), ("format", str("date-time"))])
208
210
  | CalendarDate => jsonObject([("type", str("string")), ("format", str("date"))])
209
211
  | Nullable(inner) =>
@@ -193,17 +193,6 @@ function fromSchemaType(_inputNamesOpt, _st) {
193
193
  "type",
194
194
  "integer"
195
195
  ]]);
196
- case "EntityId" :
197
- return Object.fromEntries([
198
- [
199
- "type",
200
- "string"
201
- ],
202
- [
203
- "format",
204
- "uuid"
205
- ]
206
- ]);
207
196
  case "DateTime" :
208
197
  return Object.fromEntries([
209
198
  [
@@ -227,6 +216,7 @@ function fromSchemaType(_inputNamesOpt, _st) {
227
216
  ]
228
217
  ]);
229
218
  case "ScalarString" :
219
+ case "EntityId" :
230
220
  case "Unknown" :
231
221
  return Object.fromEntries([[
232
222
  "type",
@@ -1103,7 +1103,15 @@ describe("SuryToJsonSchema:", () => {
1103
1103
  },
1104
1104
  )->S.castToUnknown
1105
1105
  let json = SuryToJsonSchema.deriveObjectSchema(schema)
1106
- expect(formatOf(json, "orderId"))->toEqual(Some(JSON.Encode.string("uuid")))
1106
+ expect(
1107
+ SchemaType.fromSury(
1108
+ ~parentName="T",
1109
+ ~fieldName="orderId",
1110
+ Reventless.DcbTag.string->S.castToUnknown,
1111
+ ),
1112
+ )->toEqual(SchemaType.EntityId)
1113
+ // Published as a plain string: an identity is not a UUID.
1114
+ expect(formatOf(json, "orderId"))->toEqual(None)
1107
1115
  expect(Reventless.Reference.getTarget(schema))->toBe(None)
1108
1116
  },
1109
1117
  )
@@ -1114,7 +1122,10 @@ describe("SuryToJsonSchema:", () => {
1114
1122
  let field = Reventless.Reference.toWithoutDcbTag("Customer")
1115
1123
  let schema = S.schema(s => {"customerId": s.matches(field)})->S.castToUnknown
1116
1124
  let json = SuryToJsonSchema.deriveObjectSchema(schema)
1117
- expect(formatOf(json, "customerId"))->toEqual(Some(JSON.Encode.string("uuid")))
1125
+ expect(
1126
+ SchemaType.fromSury(~parentName="T", ~fieldName="customerId", field->S.castToUnknown),
1127
+ )->toEqual(SchemaType.EntityId)
1128
+ expect(formatOf(json, "customerId"))->toEqual(None)
1118
1129
  expect(Reventless.DcbTag.isTagged(field->S.castToUnknown))->toBe(false)
1119
1130
  },
1120
1131
  )
@@ -21,6 +21,7 @@ import * as Sensitive$Reventless from "@reventlessdev/reventless-spec/src/compon
21
21
  import * as StorageRef$Reventless from "@reventlessdev/reventless-spec/src/semantic/StorageRef.res.mjs";
22
22
  import * as CalendarDate$Reventless from "@reventlessdev/reventless-spec/src/semantic/CalendarDate.res.mjs";
23
23
  import * as FieldDefault$Reventless from "@reventlessdev/reventless-spec/src/components/FieldDefault.res.mjs";
24
+ import * as SchemaType$ReventlessCore from "../../src/components/Api/SchemaType.res.mjs";
24
25
  import * as StateAnnotations$Reventless from "@reventlessdev/reventless-spec/src/components/StateAnnotations.res.mjs";
25
26
  import * as SuryToJsonSchema$ReventlessCore from "../../src/components/Api/SuryToJsonSchema.res.mjs";
26
27
 
@@ -859,7 +860,8 @@ globalThis.describe("SuryToJsonSchema:", () => {
859
860
  orderId: s.m(DcbTag$Reventless.string)
860
861
  }));
861
862
  let json = SuryToJsonSchema$ReventlessCore.deriveObjectSchema(undefined, undefined, schema);
862
- globalThis.expect(formatOf(json, "orderId")).toEqual("uuid");
863
+ globalThis.expect(SchemaType$ReventlessCore.fromSury("T", "orderId", DcbTag$Reventless.string)).toEqual("EntityId");
864
+ globalThis.expect(formatOf(json, "orderId")).toEqual(undefined);
863
865
  globalThis.expect(Reference$Reventless.getTarget(schema)).toBe(undefined);
864
866
  });
865
867
  globalThis.test("a reference without a DCB tag is still an entity id", () => {
@@ -868,7 +870,8 @@ globalThis.describe("SuryToJsonSchema:", () => {
868
870
  customerId: s.m(field)
869
871
  }));
870
872
  let json = SuryToJsonSchema$ReventlessCore.deriveObjectSchema(undefined, undefined, schema);
871
- globalThis.expect(formatOf(json, "customerId")).toEqual("uuid");
873
+ globalThis.expect(SchemaType$ReventlessCore.fromSury("T", "customerId", field)).toEqual("EntityId");
874
+ globalThis.expect(formatOf(json, "customerId")).toEqual(undefined);
872
875
  globalThis.expect(DcbTag$Reventless.isTagged(field)).toBe(false);
873
876
  });
874
877
  globalThis.test("Reference.to_ carries both facts", () => {