@routevn/creator-model 1.7.2 → 1.7.3

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 (2) hide show
  1. package/package.json +1 -1
  2. package/src/model.js +119 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@routevn/creator-model",
3
- "version": "1.7.2",
3
+ "version": "1.7.3",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "MIT",
package/src/model.js CHANGED
@@ -496,6 +496,15 @@ const isVariableReferenceTarget = (state, variableId) => {
496
496
  return isPlainObject(variable) && variable.type !== "folder";
497
497
  };
498
498
 
499
+ const isStringVariableReferenceTarget = (state, variableId) => {
500
+ const variable = state.variables.items[variableId];
501
+ return (
502
+ isPlainObject(variable) &&
503
+ variable.type === "variable" &&
504
+ variable.variableType === "string"
505
+ );
506
+ };
507
+
499
508
  const LAYOUT_ITEM_TARGET_SET = new Set(["item.savedAt"]);
500
509
  const LAYOUT_DIALOGUE_TARGET_SET = new Set(["dialogue.characterId"]);
501
510
  const RUNTIME_TARGET_DOT_PATTERN = /^runtime\.([A-Za-z_$][A-Za-z0-9_$]*)$/;
@@ -4254,6 +4263,7 @@ const validateCharacterItems = ({ items, path, errorFactory }) => {
4254
4263
  "tagIds",
4255
4264
  "spriteGroups",
4256
4265
  "shortcut",
4266
+ "nameVariableId",
4257
4267
  "fileId",
4258
4268
  "sprites",
4259
4269
  ],
@@ -4326,6 +4336,16 @@ const validateCharacterItems = ({ items, path, errorFactory }) => {
4326
4336
  );
4327
4337
  }
4328
4338
 
4339
+ if (
4340
+ item.nameVariableId !== undefined &&
4341
+ !isNonEmptyString(item.nameVariableId)
4342
+ ) {
4343
+ return invalidFromErrorFactory(
4344
+ errorFactory,
4345
+ `${itemPath}.nameVariableId must be a non-empty string when provided`,
4346
+ );
4347
+ }
4348
+
4329
4349
  if (item.fileId !== undefined && !isNonEmptyString(item.fileId)) {
4330
4350
  return invalidFromErrorFactory(
4331
4351
  errorFactory,
@@ -4781,6 +4801,13 @@ const applyCharacterUpdate = ({ currentItem, data }) => {
4781
4801
  }
4782
4802
  }
4783
4803
 
4804
+ if (
4805
+ Object.hasOwn(data, "nameVariableId") &&
4806
+ (data.nameVariableId === undefined || data.nameVariableId === "")
4807
+ ) {
4808
+ delete nextItem.nameVariableId;
4809
+ }
4810
+
4784
4811
  return nextItem;
4785
4812
  };
4786
4813
 
@@ -6495,6 +6522,28 @@ const validateTransformPreviewImageReferences = ({
6495
6522
  return VALID_RESULT;
6496
6523
  };
6497
6524
 
6525
+ const validateStringVariableReference = ({
6526
+ state,
6527
+ variableId,
6528
+ path,
6529
+ details = {},
6530
+ errorFactory = createPreconditionValidationError,
6531
+ }) => {
6532
+ if (variableId === undefined || variableId === null || variableId === "") {
6533
+ return VALID_RESULT;
6534
+ }
6535
+
6536
+ if (!isStringVariableReferenceTarget(state, variableId)) {
6537
+ return invalidFromErrorFactory(
6538
+ errorFactory,
6539
+ `${path} must reference an existing string variable`,
6540
+ details,
6541
+ );
6542
+ }
6543
+
6544
+ return VALID_RESULT;
6545
+ };
6546
+
6498
6547
  export const assertInvariants = ({ state }) => {
6499
6548
  if (!isPlainObject(state)) {
6500
6549
  return invalidInvariant("state must be an object");
@@ -6909,6 +6958,19 @@ export const assertInvariants = ({ state }) => {
6909
6958
  }
6910
6959
  }
6911
6960
 
6961
+ if (character.nameVariableId !== undefined) {
6962
+ const result = validateStringVariableReference({
6963
+ state,
6964
+ variableId: character.nameVariableId,
6965
+ path: "character.nameVariableId",
6966
+ details: { characterId, variableId: character.nameVariableId },
6967
+ errorFactory: createInvariantValidationError,
6968
+ });
6969
+ if (!result.valid) {
6970
+ return result;
6971
+ }
6972
+ }
6973
+
6912
6974
  {
6913
6975
  const result = validateTagIdsAgainstScope({
6914
6976
  state,
@@ -10639,6 +10701,7 @@ const validateCharacterCreateData = ({ data, errorFactory }) => {
10639
10701
  "tagIds",
10640
10702
  "spriteGroups",
10641
10703
  "shortcut",
10704
+ "nameVariableId",
10642
10705
  "fileId",
10643
10706
  "sprites",
10644
10707
  ],
@@ -10694,6 +10757,16 @@ const validateCharacterCreateData = ({ data, errorFactory }) => {
10694
10757
  );
10695
10758
  }
10696
10759
 
10760
+ if (
10761
+ data.nameVariableId !== undefined &&
10762
+ !isNonEmptyString(data.nameVariableId)
10763
+ ) {
10764
+ return invalidFromErrorFactory(
10765
+ errorFactory,
10766
+ "payload.data.nameVariableId must be a non-empty string when provided",
10767
+ );
10768
+ }
10769
+
10697
10770
  if (data.fileId !== undefined && !isNonEmptyString(data.fileId)) {
10698
10771
  return invalidFromErrorFactory(
10699
10772
  errorFactory,
@@ -10735,6 +10808,7 @@ const validateCharacterUpdateData = ({ data, errorFactory }) => {
10735
10808
  "tagIds",
10736
10809
  "spriteGroups",
10737
10810
  "shortcut",
10811
+ "nameVariableId",
10738
10812
  "fileId",
10739
10813
  ],
10740
10814
  path: "payload.data",
@@ -10773,6 +10847,17 @@ const validateCharacterUpdateData = ({ data, errorFactory }) => {
10773
10847
  );
10774
10848
  }
10775
10849
 
10850
+ if (
10851
+ data.nameVariableId !== undefined &&
10852
+ data.nameVariableId !== "" &&
10853
+ !isNonEmptyString(data.nameVariableId)
10854
+ ) {
10855
+ return invalidFromErrorFactory(
10856
+ errorFactory,
10857
+ "payload.data.nameVariableId must be a non-empty string when provided",
10858
+ );
10859
+ }
10860
+
10776
10861
  {
10777
10862
  const result = validateOptionalUniqueIdArray({
10778
10863
  value: data.tagIds,
@@ -17072,6 +17157,10 @@ const COMMAND_DEFINITIONS = [
17072
17157
  item.fileId = payload.data.fileId;
17073
17158
  }
17074
17159
 
17160
+ if (payload.data.nameVariableId !== undefined) {
17161
+ item.nameVariableId = payload.data.nameVariableId;
17162
+ }
17163
+
17075
17164
  assignOptionalTagIds({
17076
17165
  target: item,
17077
17166
  tagIds: payload.data.tagIds,
@@ -17112,6 +17201,21 @@ const COMMAND_DEFINITIONS = [
17112
17201
  }
17113
17202
  }
17114
17203
 
17204
+ {
17205
+ const result = validateStringVariableReference({
17206
+ state,
17207
+ variableId: payload.data.nameVariableId,
17208
+ path: "payload.data.nameVariableId",
17209
+ details: {
17210
+ characterId: payload.characterId,
17211
+ variableId: payload.data.nameVariableId,
17212
+ },
17213
+ });
17214
+ if (!result.valid) {
17215
+ return result;
17216
+ }
17217
+ }
17218
+
17115
17219
  {
17116
17220
  const result = validateTagIdsAgainstScope({
17117
17221
  state,
@@ -17217,6 +17321,21 @@ const COMMAND_DEFINITIONS = [
17217
17321
  return result;
17218
17322
  }
17219
17323
 
17324
+ if (Object.hasOwn(payload.data, "nameVariableId")) {
17325
+ const variableResult = validateStringVariableReference({
17326
+ state,
17327
+ variableId: payload.data.nameVariableId,
17328
+ path: "payload.data.nameVariableId",
17329
+ details: {
17330
+ characterId: payload.characterId,
17331
+ variableId: payload.data.nameVariableId,
17332
+ },
17333
+ });
17334
+ if (!variableResult.valid) {
17335
+ return variableResult;
17336
+ }
17337
+ }
17338
+
17220
17339
  {
17221
17340
  const tagResult = validateTagIdsAgainstScope({
17222
17341
  state,