@@ -167,7 +167,7 @@ export function createSentenceElementRange(
167167 ranges : [
168168 ...sentenceStructureData . ranges ,
169169 {
170- kind : "sentence-element" ,
170+ kind : "core- sentence-element" ,
171171 type : input . type ,
172172 id : rangeId ,
173173 startWordIndex : input . startWordIndex ,
@@ -248,53 +248,6 @@ export function createSentenceStructureRange(
248248 throw newSentenceStructureData . error ;
249249}
250250
251- export function _createRelationRange (
252- sentenceStructureData : SentenceStructureData ,
253- input : {
254- startWordIndex : number ;
255- endWordIndex : number ;
256- } ,
257- ) : Result < {
258- newSentenceStructureData : SentenceStructureData ;
259- rangeId : string ;
260- } > {
261- const rangeId = crypto . randomUUID ( ) ;
262- const newSentenceStructureData = SentenceStructureDataSchema . safeParse ( {
263- ...sentenceStructureData ,
264- ranges : [
265- ...sentenceStructureData . ranges ,
266- {
267- kind : "relation" ,
268- type : "relation" ,
269- id : rangeId ,
270- startWordIndex : input . startWordIndex ,
271- endWordIndex : input . endWordIndex ,
272- } ,
273- ] ,
274- } satisfies SentenceStructureData ) ;
275-
276- if ( newSentenceStructureData . success ) {
277- return {
278- success : true ,
279- data : {
280- newSentenceStructureData : newSentenceStructureData . data ,
281- rangeId,
282- } ,
283- } ;
284- }
285- const errorMessage =
286- newSentenceStructureData . error . issues . find (
287- ( issue ) => issue . code === "custom" ,
288- ) ?. message ?? null ;
289- if ( errorMessage ) {
290- return {
291- success : false ,
292- message : errorMessage ,
293- } ;
294- }
295- throw newSentenceStructureData . error ;
296- }
297-
298251export function findRangeById (
299252 sentenceStructureData : SentenceStructureData ,
300253 input : { rangeId : string } ,
@@ -366,10 +319,10 @@ export function createRelation(
366319 toRange : { startWordIndex : number ; endWordIndex : number } ;
367320 } ,
368321) : Result < { newSentenceStructureData : SentenceStructureData } > {
369- const fromRangeResult : Result < {
322+ const fromRangeResult : {
370323 newSentenceStructureData : SentenceStructureData ;
371324 rangeId : string ;
372- } > = ( ( ) => {
325+ } = ( ( ) => {
373326 const existingFromRange = findRangeByStartAndEndWordIndex (
374327 sentenceStructureData ,
375328 {
@@ -379,74 +332,99 @@ export function createRelation(
379332 ) ;
380333 if ( existingFromRange ) {
381334 return {
382- success : true ,
383- data : {
384- newSentenceStructureData : sentenceStructureData ,
385- rangeId : existingFromRange . id ,
386- } ,
335+ newSentenceStructureData : sentenceStructureData ,
336+ rangeId : existingFromRange . id ,
387337 } ;
388338 }
389- return _createRelationRange ( sentenceStructureData , {
390- startWordIndex : input . fromRange . startWordIndex ,
391- endWordIndex : input . fromRange . endWordIndex ,
392- } ) ;
393- } ) ( ) ;
394- if ( ! fromRangeResult . success ) {
339+
340+ const rangeId = crypto . randomUUID ( ) ;
341+ const newSentenceStructureData : SentenceStructureData = {
342+ ...sentenceStructureData ,
343+ ranges : [
344+ ...sentenceStructureData . ranges ,
345+ {
346+ kind : "relation" ,
347+ type : "relation" ,
348+ id : rangeId ,
349+ startWordIndex : input . fromRange . startWordIndex ,
350+ endWordIndex : input . fromRange . endWordIndex ,
351+ } ,
352+ ] ,
353+ } ;
395354 return {
396- success : false ,
397- message : fromRangeResult . message ,
355+ newSentenceStructureData ,
356+ rangeId ,
398357 } ;
399- }
358+ } ) ( ) ;
400359
401- const toRangeResult : Result < {
360+ const toRangeResult : {
402361 newSentenceStructureData : SentenceStructureData ;
403362 rangeId : string ;
404- } > = ( ( ) => {
363+ } = ( ( ) => {
405364 const existingToRange = findRangeByStartAndEndWordIndex (
406- fromRangeResult . data . newSentenceStructureData ,
365+ fromRangeResult . newSentenceStructureData ,
407366 {
408367 startWordIndex : input . toRange . startWordIndex ,
409368 endWordIndex : input . toRange . endWordIndex ,
410369 } ,
411370 ) ;
412371 if ( existingToRange ) {
413372 return {
414- success : true ,
415- data : {
416- newSentenceStructureData :
417- fromRangeResult . data . newSentenceStructureData ,
418- rangeId : existingToRange . id ,
419- } ,
373+ newSentenceStructureData : fromRangeResult . newSentenceStructureData ,
374+ rangeId : existingToRange . id ,
420375 } ;
421376 }
422- return _createRelationRange ( fromRangeResult . data . newSentenceStructureData , {
423- startWordIndex : input . toRange . startWordIndex ,
424- endWordIndex : input . toRange . endWordIndex ,
425- } ) ;
377+
378+ const rangeId = crypto . randomUUID ( ) ;
379+ const newSentenceStructureData : SentenceStructureData = {
380+ ...fromRangeResult . newSentenceStructureData ,
381+ ranges : [
382+ ...fromRangeResult . newSentenceStructureData . ranges ,
383+ {
384+ kind : "relation" ,
385+ type : "relation" ,
386+ id : rangeId ,
387+ startWordIndex : input . toRange . startWordIndex ,
388+ endWordIndex : input . toRange . endWordIndex ,
389+ } ,
390+ ] ,
391+ } ;
392+ return {
393+ newSentenceStructureData,
394+ rangeId,
395+ } ;
426396 } ) ( ) ;
427- if ( ! toRangeResult . success ) {
397+
398+ const newSentenceStructureData = SentenceStructureDataSchema . safeParse ( {
399+ ...toRangeResult . newSentenceStructureData ,
400+ relations : [
401+ ...toRangeResult . newSentenceStructureData . relations ,
402+ {
403+ id : crypto . randomUUID ( ) ,
404+ fromRangeId : fromRangeResult . rangeId ,
405+ toRangeId : toRangeResult . rangeId ,
406+ } ,
407+ ] ,
408+ } satisfies SentenceStructureData ) ;
409+ if ( newSentenceStructureData . success ) {
410+ return {
411+ success : true ,
412+ data : {
413+ newSentenceStructureData : newSentenceStructureData . data ,
414+ } ,
415+ } ;
416+ }
417+ const errorMessage =
418+ newSentenceStructureData . error . issues . find (
419+ ( issue ) => issue . code === "custom" ,
420+ ) ?. message ?? null ;
421+ if ( errorMessage ) {
428422 return {
429423 success : false ,
430- message : toRangeResult . message ,
424+ message : errorMessage ,
431425 } ;
432426 }
433-
434- return {
435- success : true ,
436- data : {
437- newSentenceStructureData : SentenceStructureDataSchema . parse ( {
438- ...toRangeResult . data . newSentenceStructureData ,
439- relations : [
440- ...toRangeResult . data . newSentenceStructureData . relations ,
441- {
442- id : crypto . randomUUID ( ) ,
443- fromRangeId : fromRangeResult . data . rangeId ,
444- toRangeId : toRangeResult . data . rangeId ,
445- } ,
446- ] ,
447- } satisfies SentenceStructureData ) ,
448- } ,
449- } ;
427+ throw newSentenceStructureData . error ;
450428}
451429
452430export function findRelationById (
@@ -466,6 +444,15 @@ export function deleteRelation(
466444) : SentenceStructureData {
467445 return SentenceStructureDataSchema . parse ( {
468446 ...sentenceStructureData ,
447+ ranges : sentenceStructureData . ranges . filter (
448+ ( range ) =>
449+ range . kind !== "relation" ||
450+ sentenceStructureData . relations . some (
451+ ( relation ) =>
452+ relation . fromRangeId !== range . id &&
453+ relation . toRangeId !== range . id ,
454+ ) ,
455+ ) ,
469456 relations : sentenceStructureData . relations . filter (
470457 ( relation ) => relation . id !== input . relationId ,
471458 ) ,
0 commit comments