@instantdb/platform 0.22.157 → 0.22.158

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.
@@ -1,17 +1,17 @@
1
1
 
2
- > @instantdb/platform@0.22.157 build /home/runner/work/instant/instant/client/packages/platform
2
+ > @instantdb/platform@0.22.158 build /home/runner/work/instant/instant/client/packages/platform
3
3
  > rm -rf dist; npm run build:tshy && npm run build:standalone && npm run check-exports
4
4
 
5
5
  npm warn Unknown env config "verify-deps-before-run". This will stop working in the next major version of npm.
6
6
  npm warn Unknown user config "always-auth". This will stop working in the next major version of npm.
7
7
 
8
- > @instantdb/platform@0.22.157 build:tshy
8
+ > @instantdb/platform@0.22.158 build:tshy
9
9
  > tshy
10
10
 
11
11
  npm warn Unknown env config "verify-deps-before-run". This will stop working in the next major version of npm.
12
12
  npm warn Unknown user config "always-auth". This will stop working in the next major version of npm.
13
13
 
14
- > @instantdb/platform@0.22.157 build:standalone
14
+ > @instantdb/platform@0.22.158 build:standalone
15
15
  > vite build
16
16
 
17
17
  vite v5.4.14 building for production...
@@ -19,17 +19,17 @@ transforming...
19
19
  ✓ 80 modules transformed.
20
20
  rendering chunks...
21
21
  computing gzip size...
22
- dist/standalone/index.umd.cjs 354.59 kB │ gzip: 96.96 kB
23
- dist/standalone/index.js 462.95 kB │ gzip: 109.37 kB
24
- ✓ built in 3.17s
22
+ dist/standalone/index.umd.cjs 354.70 kB │ gzip: 96.99 kB
23
+ dist/standalone/index.js 463.09 kB │ gzip: 109.41 kB
24
+ ✓ built in 2.99s
25
25
  npm warn Unknown env config "verify-deps-before-run". This will stop working in the next major version of npm.
26
26
  npm warn Unknown user config "always-auth". This will stop working in the next major version of npm.
27
27
 
28
- > @instantdb/platform@0.22.157 check-exports
28
+ > @instantdb/platform@0.22.158 check-exports
29
29
  > attw --pack .
30
30
 
31
31
 
32
- @instantdb/platform v0.22.157
32
+ @instantdb/platform v0.22.158
33
33
 
34
34
  Build tools:
35
35
  - @arethetypeswrong/cli@^0.17.4
@@ -484,6 +484,117 @@ test('update link delete cascade', async () => {
484
484
  expect((result[0] as any).partialAttr['on-delete']).toBe('cascade');
485
485
  });
486
486
 
487
+ test('make link required', async () => {
488
+ const result = await diffSchemas(
489
+ i.schema({
490
+ entities: {
491
+ albums: i.entity({
492
+ name: i.string(),
493
+ }),
494
+ songs: i.entity({
495
+ name: i.string(),
496
+ }),
497
+ },
498
+ links: {
499
+ songAlbum: {
500
+ forward: { on: 'albums', has: 'many', label: 'songs' },
501
+ reverse: { on: 'songs', has: 'one', label: 'albums' },
502
+ },
503
+ },
504
+ }),
505
+ i.schema({
506
+ entities: {
507
+ albums: i.entity({
508
+ name: i.string(),
509
+ }),
510
+ songs: i.entity({
511
+ name: i.string(),
512
+ }),
513
+ },
514
+ links: {
515
+ songAlbum: {
516
+ forward: {
517
+ on: 'albums',
518
+ has: 'many',
519
+ label: 'songs',
520
+ required: true,
521
+ },
522
+ reverse: { on: 'songs', has: 'one', label: 'albums' },
523
+ },
524
+ },
525
+ }),
526
+ createChooser([]),
527
+ systemCatalogIdentNames,
528
+ );
529
+
530
+ expectTxType(result, 'required', 1);
531
+ const found = result.find(
532
+ (tx) =>
533
+ tx.type === 'required' &&
534
+ tx.identifier.namespace === 'albums' &&
535
+ tx.identifier.attrName === 'songs',
536
+ );
537
+ expect(found).toBeDefined();
538
+ });
539
+
540
+ test('make link optional', async () => {
541
+ const result = await diffSchemas(
542
+ i.schema({
543
+ entities: {
544
+ albums: i.entity({
545
+ name: i.string(),
546
+ }),
547
+ songs: i.entity({
548
+ name: i.string(),
549
+ }),
550
+ },
551
+ links: {
552
+ songAlbum: {
553
+ forward: {
554
+ on: 'albums',
555
+ has: 'many',
556
+ label: 'songs',
557
+ required: true,
558
+ },
559
+ reverse: { on: 'songs', has: 'one', label: 'albums' },
560
+ },
561
+ },
562
+ }),
563
+ i.schema({
564
+ entities: {
565
+ albums: i.entity({
566
+ name: i.string(),
567
+ }),
568
+ songs: i.entity({
569
+ name: i.string(),
570
+ }),
571
+ },
572
+ links: {
573
+ songAlbum: {
574
+ forward: {
575
+ on: 'albums',
576
+ has: 'many',
577
+ label: 'songs',
578
+ required: false,
579
+ },
580
+ reverse: { on: 'songs', has: 'one', label: 'albums' },
581
+ },
582
+ },
583
+ }),
584
+ createChooser([]),
585
+ systemCatalogIdentNames,
586
+ );
587
+
588
+ expectTxType(result, 'remove-required', 1);
589
+ const found = result.find(
590
+ (tx) =>
591
+ tx.type === 'remove-required' &&
592
+ tx.identifier.namespace === 'albums' &&
593
+ tx.identifier.attrName === 'songs',
594
+ );
595
+ expect(found).toBeDefined();
596
+ });
597
+
487
598
  test('system catalog attrs are ignored when adding entities', async () => {
488
599
  const result = await diffSchemas(
489
600
  i.schema({
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/migrations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/migrations.ts"],"names":[],"mappings":"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"}
@@ -428,8 +428,10 @@ const compareLinks = (identity, oldLink, newLink) => {
428
428
  const results = [];
429
429
  const oldRelationship = `${oldLink.forward.has}-${oldLink.reverse.has}`;
430
430
  const { cardinality: oldCardinal, 'unique?': oldUnique } = relationships_ts_1.relationshipConstraints[oldRelationship];
431
+ const oldRequired = !!oldLink.forward.required;
431
432
  const newRelationship = `${newLink.forward.has}-${newLink.reverse.has}`;
432
433
  const { cardinality: newCardinal, 'unique?': newUnique } = relationships_ts_1.relationshipConstraints[newRelationship];
434
+ const newRequired = !!newLink.forward.required;
433
435
  if (!oldUnique && newUnique) {
434
436
  results.push({
435
437
  type: 'unique',
@@ -442,6 +444,12 @@ const compareLinks = (identity, oldLink, newLink) => {
442
444
  identifier: identity,
443
445
  });
444
446
  }
447
+ if (newRequired !== oldRequired) {
448
+ results.push({
449
+ type: newRequired ? 'required' : 'remove-required',
450
+ identifier: identity,
451
+ });
452
+ }
445
453
  if (oldLink.reverse.onDelete !== newLink.reverse.onDelete ||
446
454
  oldLink.forward.onDelete !== newLink.forward.onDelete ||
447
455
  oldCardinal !== newCardinal) {
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/migrations.ts"],"names":[],"mappings":";;;AA60BA,0DAiEC;AA94BD,0CAQyB;AAEzB,2DAA6E;AAC7E,yDAAgF;AA0DhF,MAAM,uBAAuB,GAAG,CAC9B,KAAiB,EACjB,aAA8B,EACf,EAAE;IACjB,MAAM,KAAK,GACT,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,OAAO,CACL,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS;YAC/C,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,CAC/C,CAAC;IACJ,CAAC,CAAC,IAAI,IAAI,CAAC;IACb,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,YAAY,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAA2B,CAC5D,EAAE,EACF,QAAQ,EACR,EAAE;IACF,MAAM,KAAK,GAAG,uBAAuB,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC/D,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,EAAE;QACnB,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,CAAC;KAC9C,CAAC;AACJ,CAAC,CAAC;AAEF,uEAAuE;AACvE,+CAA+C;AAC/C,MAAM,UAAU,GAA0B;IACxC,KAAK,EAAE,6BAA6B;IACpC,MAAM,EAAE,6BAA6B;IACrC,QAAQ,EAAE,6BAA6B;IACvC,cAAc,EAAE,6BAA6B;IAC7C,eAAe,EAAE,6BAA6B;IAC9C,iBAAiB,EAAE,6BAA6B;IAEhD,aAAa,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;QAChC,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACjE,OAAO,KAAK,CAAC,EAAE,CAAC;IAClB,CAAC;IACD,aAAa,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;QAChC,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACjE,OAAO;YACL,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,kBAAkB,EAAE,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;gBACtD,CAAC,CAAC;oBACE,KAAK,CAAC,EAAE;oBACR,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,SAAS;oBAC9C,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,QAAQ;iBAC9C;gBACH,CAAC,CAAC,SAAS;YACb,kBAAkB,EAAE,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;gBACtD,CAAC,CAAC;oBACE,KAAK,CAAC,EAAE;oBACR,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,SAAS;oBAC9C,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,QAAQ;iBAC9C;gBACH,CAAC,CAAC,SAAS;YACb,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;gBAC1C,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;gBACjC,CAAC,CAAC,SAAS;YAEb,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;gBACxC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;gBAC/B,CAAC,CAAC,SAAS;YACb,mBAAmB,EAAE,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC;gBACxD,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC;gBACvC,CAAC,CAAC,SAAS;SACd,CAAC;IACJ,CAAC;IACD,UAAU,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,IAAA,SAAE,GAAE,CAAC;QACpB,MAAM,eAAe,GAA6B;YAChD,MAAM;YACN,IAAI,CAAC,UAAU,CAAC,SAAS;YACzB,IAAI,CAAC,UAAU,CAAC,QAAQ;SACzB,CAAC;QAEF,MAAM,KAAK,GAAe,EAAE,CAAC;QAE7B,mEAAmE;QACnE,KAAK,CAAC,IAAI,CAAC;YACT,UAAU;YACV;gBACE,kBAAkB,EAAE,eAAe;gBACnC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,CAAC;oBAC1C,CAAC,CAAC;wBACE,IAAA,SAAE,GAAE;wBACJ,IAAI,CAAC,kBAAkB,CAAC,CAAC,SAAS;wBAClC,IAAI,CAAC,kBAAkB,CAAC,CAAC,QAAQ;qBAClC;oBACH,CAAC,CAAC,IAAI;gBACR,gBAAgB,EAAE,IAAI;gBACtB,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC;gBAChC,EAAE,EAAE,MAAM;gBACV,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,KAAK;gBAClB,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,MAAM;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC;gBAC9B,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,CAAC;gBAC9C,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,CAAC;aAC/C;SACF,CAAC,CAAC;QAEH,4DAA4D;QAC5D,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ;gBACR;oBACE,SAAS,EAAE,MAAM;oBACjB,kBAAkB,EAAE,eAAe;iBACpC;aACF,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC;gBACT,UAAU;gBACV;oBACE,SAAS,EAAE,MAAM;oBACjB,kBAAkB,EAAE,eAAe;iBACpC;aACF,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC;gBACT,OAAO;gBACP;oBACE,SAAS,EAAE,MAAM;oBACjB,kBAAkB,EAAE,eAAe;iBACpC;aACF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IACD,kBAAkB,EAAE,6BAA6B;IACjD,iBAAiB,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;QACpC,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACjE,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,EAAE;YACnB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,CAAC;YAC9C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,CAAC;SAC9C,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,SAAS,mBAAmB,CAC1B,uBAAoD,EACpD,UAAkB,EAClB,QAAgB;IAEhB,OAAO,CAAC,CAAC,uBAAuB,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9D,CAAC;AAEM,MAAM,cAAc,GAAG,CAC5B,GAAkB,EAClB,aAA8B,EAClB,EAAE;IACd,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACjB,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,SAAS,GAAG,SAAS,CAAC,EAAS,EAAE,aAAa,CAAC,CAAC;QACtD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAa,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AArBW,QAAA,cAAc,kBAqBzB;AAwBK,MAAM,WAAW,GAAG,KAAK,EAC9B,SAA0C,EAC1C,SAA0C,EAC1C,SAAkC,EAClC,uBAAoD,EAC5B,EAAE;IAC1B,MAAM,YAAY,GAAkB,EAAE,CAAC;IAEvC,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC;IACvC,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC;IAEvC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEhD,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAC9C,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CACzC,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,kBAAkB,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC9D,IAAI,mBAAmB,CAAC,uBAAuB,EAAE,UAAU,EAAE,QAAQ,CAAC;gBACpE,OAAO;YACT,YAAY,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,aAAa;gBACnB,UAAU,EAAE;oBACV,QAAQ;oBACR,SAAS,EAAE,UAAU;iBACtB;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,IAAI,mBAAmB,CAAC,uBAAuB,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;YACnE,SAAS;QACX,CAAC;QACD,YAAY,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE;gBACV,QAAQ,EAAE,IAAI;gBACd,SAAS,EAAE,UAAU;aACtB;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAC5C,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CACzC,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,gBAAgB,EAAE,CAAC;QAC1C,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;YACpE,YAAY,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,UAAU;gBAChB,kBAAkB,EAAE;oBAClB,SAAS,EAAE,UAAU;oBACrB,QAAQ,EAAE,IAAI;iBACf;gBACD,UAAU,EAAE;oBACV,QAAQ,EAAE,IAAI;oBACd,SAAS,EAAE,UAAU;iBACtB;gBACD,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,IAAI;gBACjB,WAAW,EAAE,KAAK;gBAClB,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,MAAM;aACrB,CAAC,CAAC;QACL,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,IAAI,mBAAmB,CAAC,uBAAuB,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACvE,SAAS;YACX,CAAC;YACD,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC7D,YAAY,CAAC,IAAI,CAAC,IAAA,sCAAkB,EAAC,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACtD,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC9B,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,gBAAgB,EAAE,CAAC;QAC1C,kBAAkB;QAClB,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CACnE,CAAC,KAAK,EAAE,EAAE;YACR,IAAI,mBAAmB,CAAC,uBAAuB,EAAE,UAAU,EAAE,KAAK,CAAC;gBACjE,OAAO,KAAK,CAAC;YAEf,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAChC,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,CAC9B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO,CAAC,cAAc,CAAC;QACzB,CAAC,CACF,CAAC;QACF,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CACrE,CAAC,KAAK,EAAE,EAAE;YACR,IAAI,mBAAmB,CAAC,uBAAuB,EAAE,UAAU,EAAE,KAAK,CAAC;gBACjE,OAAO,KAAK,CAAC;YAEf,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAChC,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,CAC9B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO,CAAC,cAAc,CAAC;QACzB,CAAC,CACF,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC,WAAW,EACX,aAAa,EACb,SAAS,EACT;YACE,IAAI,EAAE,WAAW;YACjB,UAAU,EAAE,UAAU;SACvB,CACF,CAAC;QAEF,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CACxE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CACtE,CAAC;QAEF,gBAAgB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YACrC,IAAI,mBAAmB,CAAC,uBAAuB,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;gBACxE,OAAO;YACT,CAAC;YACD,YAAY,CAAC,IAAI,CACf,GAAG,IAAA,oBAAY,EACb;gBACE,QAAQ,EAAE,SAAS;gBACnB,SAAS,EAAE,UAAU;aACtB,EACD,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EACxC,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CACzC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACpC,YAAY,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,aAAa;gBACnB,UAAU,EAAE;oBACV,QAAQ;oBACR,SAAS,EAAE,UAAU;iBACtB;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;YACvC,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,KAAK,CACvD,WAAW,CACD,CAAC;YACb,YAAY,CAAC,IAAI,CACf,IAAA,sCAAkB,EAAC,YAAY,EAAE,UAAU,EAAE,WAAW,CAAC,CAC1D,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACnC,YAAY,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,aAAa;gBACnB,UAAU,EAAE;oBACV,QAAQ,EAAE,OAAO,CAAC,IAAI;oBACtB,SAAS,EAAE,UAAU;iBACtB;gBACD,WAAW,EAAE;oBACX,YAAY,EAAE,MAAM;oBACpB,WAAW,EAAE,KAAK;oBAClB,kBAAkB,EAAE;wBAClB,QAAQ,EAAE,OAAO,CAAC,EAAE;wBACpB,SAAS,EAAE,UAAU;qBACtB;iBACF;aACF,CAAC,CAAC;YAEH,YAAY,CAAC,IAAI,CACf,GAAG,IAAA,oBAAY,EACb;gBACE,QAAQ,EAAE,OAAO,CAAC,IAAI;gBACtB,SAAS,EAAE,UAAU;aACtB,EACD,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAC3C,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAC1C,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAe,CAAC,MAAM,CACnE,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,mBAAmB,CAClB,uBAAuB,EACvB,IAAI,CAAC,OAAO,CAAC,EAAE,EACf,IAAI,CAAC,OAAO,CAAC,KAAK,CACnB,CACJ,CAAC;IACF,MAAM,QAAQ,GAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAe,CAAC,MAAM,CACnE,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,mBAAmB,CAClB,uBAAuB,EACvB,IAAI,CAAC,OAAO,CAAC,EAAE,EACf,IAAI,CAAC,OAAO,CAAC,KAAK,CACnB,CACJ,CAAC;IAEF,0EAA0E;IAC1E,MAAM,aAAa,GAAG,CAAC,IAAa,EAAE,EAAE,CACtC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;IAC5C,MAAM,kBAAkB,GAAG,CAAC,IAAa,EAAE,EAAE,CAC3C,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAExF,MAAM,aAAa,GAAG,IAAI,GAAG,EAAqB,CAAC;IACnD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAqB,CAAC;IAEnD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;QAC1B,GAAG,aAAa,CAAC,IAAI,EAAE;QACvB,GAAG,aAAa,CAAC,IAAI,EAAE;KACxB,CAAC,CAAC;IAEH,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,eAAe,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACzD,MAAM,eAAe,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAEzD,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACjD,kBAAkB,CAAC,IAAI,CAAC,CACzB,CAAC;QACF,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACjD,kBAAkB,CAAC,IAAI,CAAC,CACzB,CAAC;QAEF,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAC1C,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAChD,CAAC;QAEF,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAC5C,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAChD,CAAC;QAEF,MAAM,oBAAoB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC7D,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACjC,CAAC;QAEF,oBAAoB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACxC,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,QAAQ,CAC1C,CAAC;YACF,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,QAAQ,CAC1C,CAAC;YACF,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;gBAAE,OAAO;YACjC,YAAY,CAAC,IAAI,CACf,GAAG,IAAA,oBAAY,EACb;gBACE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC7B,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;aAChC,EACD,OAAO,EACP,OAAO,CACR,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT;YACE,IAAI,EAAE,MAAM;YACZ,iBAAiB,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;YACjD,iBAAiB,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;SAClD,CACF,CAAC;QAEF,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACpC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,QAAQ,CAC1C,CAAC;YACF,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,YAAY,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,aAAa;gBACnB,UAAU,EAAE;oBACV,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;oBAC5B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;iBAC3B;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACpC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,QAAQ,CAC1C,CAAC;YACF,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,YAAY,CAAC,IAAI,CAAC,IAAA,sCAAkB,EAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACnC,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAC9C,CAAC;YACF,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,EAAE,CAC5C,CAAC;YACF,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;gBAAE,OAAO;YAEjC,YAAY,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,aAAa;gBACnB,UAAU,EAAE;oBACV,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;oBAC/B,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;iBAC9B;gBACD,WAAW,EAAE;oBACX,YAAY,EAAE,KAAK;oBACnB,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;oBAC3D,kBAAkB,EAAE;wBAClB,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;wBAC/B,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;qBAC9B;oBACD,kBAAkB,EAAE;wBAClB,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;wBAC/B,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;qBAC9B;iBACF;aACF,CAAC,CAAC;YACH,YAAY,CAAC,IAAI,CACf,GAAG,IAAA,oBAAY,EACb;gBACE,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;gBAC/B,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;aAC9B,EACD,OAAO,EACP,OAAO,CACR,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AA1VW,QAAA,WAAW,eA0VtB;AAOK,MAAM,YAAY,GAAG,CAC1B,QAAoB,EACpB,OAAgB,EAChB,OAAgB,EACD,EAAE;IACjB,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,CAA8B,IAAO,EAAE,EAAE;QACxD,OAAO,CAAC,IAAI,CAAC;YACX,IAAI;YACJ,UAAU,EAAE,QAAQ;SACrB,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,mCAAmC;IACnC,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI;QAC3D,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEpB,qCAAqC;IACrC,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK;QAC3D,QAAQ,CAAC,cAAc,CAAC,CAAC;IAE3B,kCAAkC;IAClC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI;QACnE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAErB,sCAAsC;IACtC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK;QACnE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAE5B,oCAAoC;IACpC,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI;QACzD,QAAQ,CAAC,UAAU,CAAC,CAAC;IAEvB,wCAAwC;IACxC,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK;QACzD,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAE9B,iDAAiD;IACjD,IAAI,OAAO,CAAC,SAAS,KAAK,MAAM,IAAI,OAAO,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,kBAAkB;YACxB,UAAU,EAAE,QAAQ;SACrB,CAAC,CAAC;IACL,CAAC;SAAM,IACL,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS;QACvC,OAAO,CAAC,SAAS,KAAK,MAAM,EAC5B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,iBAAiB;YACvB,UAAU,EAAE,QAAQ;YACpB,mBAAmB,EAAE,OAAO,CAAC,SAAS;SACvC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAvDW,QAAA,YAAY,gBAuDvB;AAEK,MAAM,YAAY,GAAG,CAC1B,QAAoB,EACpB,OAAgB,EAChB,OAAgB,EACD,EAAE;IACjB,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,MAAM,eAAe,GACnB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,EAAuB,CAAC;IACvE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,GACtD,0CAAuB,CAAC,eAAe,CAAC,CAAC;IAE3C,MAAM,eAAe,GACnB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,EAAuB,CAAC;IACvE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,GACtD,0CAAuB,CAAC,eAAe,CAAC,CAAC;IAE3C,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,QAAQ;SACrB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,eAAe;YACrB,UAAU,EAAE,QAAQ;SACrB,CAAC,CAAC;IACL,CAAC;IAED,IACE,OAAO,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ;QACrD,OAAO,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ;QACrD,WAAW,KAAK,WAAW,EAC3B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,QAAQ;YACpB,WAAW,EAAE;gBACX,YAAY,EAAE,KAAK;gBACnB,mBAAmB,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;gBAC7C,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;gBACrC,WAAW,EAAE,WAAW;aACzB;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AA/CW,QAAA,YAAY,gBA+CvB;AAEK,MAAM,kBAAkB,GAAG,CAChC,IAA6B,EACA,EAAE;IAC/B,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AALW,QAAA,kBAAkB,sBAK7B;AAQF,MAAM,cAAc,GAAG,KAAK,EAC1B,QAAa,EACb,YAAiB,EACjB,SAA6B,EAC7B,SAAe,EAQd,EAAE;IACH,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvD,OAAO;YACL,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAIR,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC9C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,WAAW,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;IAEpC,GAAG,CAAC;QACF,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,OAAO,GAA0B,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YAC5D,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,MAAM,UAAU,GAAgC,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;QAEtE,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QAC7D,IAAI,IAAA,0BAAkB,EAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;gBAC1B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;YACD,OAAO,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACnD,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QACD,KAAK,IAAI,CAAC,CAAC;IACb,CAAC,QAAQ,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE;IAElC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAaF,SAAS,oBAAoB,CAAC,MAAc;IAC1C,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9D,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,wBAAwB,MAAM,qDAAqD;YACjF,0BAA0B,CAC7B,CAAC;IACJ,CAAC;AACH,CAAC;AAED,qCAAqC;AACrC,SAAS,mBAAmB,CAAC,OAAwB;IACnD,4CAA4C;IAC5C,yEAAyE;IACzE,yBAAyB;IACzB,MAAM,SAAS,GAAwB,IAAI,GAAG,EAAE,CAAC;IACjD,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,2BAA2B,SAAS,kDAAkD;gBACpF,kFAAkF,CACrF,CAAC;QACJ,CAAC;QACD,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC3B,oBAAoB,CAAC,EAAE,CAAC,CAAC;QACzB,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,SAAgB,uBAAuB,CAAC,OAAwB;IAC9D,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAA4B,KAAK,WAC7C,OAAe,EACf,UAAiD,EACjD,SAAc;QAEd,IAAI,WAAW,GAAa,EAAE,CAAC;QAC/B,IAAI,SAAS,EAAE,IAAI,KAAK,WAAW,IAAI,SAAS,EAAE,UAAU,EAAE,CAAC;YAC7D,WAAW,GAAG,CAAC,GAAG,SAAS,CAAC,UAAU,IAAI,OAAO,EAAE,CAAC,CAAC;QACvD,CAAC;aAAM,IAAI,SAAS,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;YACtC,yCAAyC;YACzC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACnC,WAAW,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,+DAA+D;QAC/D,IAAI,QAAQ,GAAkB,IAAI,CAAC;QACnC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9B,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;gBAC7C,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,SAAS,CAAC;YACd,IAAI,SAAS,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;gBACpC,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC5C,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACvC,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;gBAChE,CAAC,CAAC,CAAC;gBAEH,IAAI,YAAY,EAAE,CAAC;oBACjB,SAAS;wBACP,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;gBACxE,CAAC;qBAAM,CAAC;oBACN,OAAO,OAAO,CAAC;gBACjB,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBACxC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC7B,OAAO,IAAI,KAAK,SAAS,CAAC;gBAC5B,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACrB,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;gBACjC,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,CAAC;YAEH,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;gBAC1B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["import {\n DataAttrDef,\n id,\n InstantDBAttr,\n InstantDBAttrOnDelete,\n InstantDBCheckedDataType,\n InstantSchemaDef,\n LinkDef,\n} from '@instantdb/core';\nimport { PlanStep } from './api.ts';\nimport { attrDefToNewAttrTx, linkDefToNewAttrTx } from './migrationUtils.ts';\nimport { relationshipConstraints, RelationshipKinds } from './relationships.ts';\n\nexport type Identifier = {\n namespace: string;\n attrName: string;\n};\n\ntype AttrWithIdentifier = {\n 'value-type': 'blob' | 'ref';\n cardinality?: 'many' | 'one';\n 'forward-identity'?: Identifier;\n 'reverse-identity'?: Identifier | null;\n 'on-delete'?: InstantDBAttrOnDelete | null | undefined;\n 'on-delete-reverse'?: InstantDBAttrOnDelete | null | undefined;\n};\n\nexport type MigrationTxTypes = {\n 'delete-attr': { identifier: Identifier };\n 'update-attr': { identifier: Identifier; partialAttr: AttrWithIdentifier };\n 'add-attr': {\n identifier: Identifier;\n 'unique?': boolean;\n 'index?': boolean;\n 'required?': boolean;\n 'reverse-identity'?: Identifier | null;\n 'forward-identity': Identifier;\n cardinality: 'many' | 'one';\n 'value-type': 'blob' | 'ref';\n 'on-delete'?: InstantDBAttrOnDelete | null;\n 'on-delete-reverse'?: InstantDBAttrOnDelete | null;\n 'checked-data-type'?: InstantDBCheckedDataType | null;\n };\n index: { identifier: Identifier };\n 'remove-index': { identifier: Identifier };\n unique: { identifier: Identifier };\n 'remove-unique': { identifier: Identifier };\n required: { identifier: Identifier };\n 'remove-required': { identifier: Identifier };\n 'check-data-type': {\n identifier: Identifier;\n 'checked-data-type': InstantDBCheckedDataType;\n };\n 'remove-data-type': { identifier: Identifier };\n};\n\ntype JobMigrationTypes =\n | 'index'\n | 'remove-index'\n | 'remove-unique'\n | 'remove-required'\n | 'unique'\n | 'remove-data-type'\n | 'required';\n\ntype PlanStepMap = {\n [K in PlanStep as K[0]]: K[1];\n};\n\nconst getExistingAttrThrowing = (\n ident: Identifier,\n existingAttrs: InstantDBAttr[],\n): InstantDBAttr => {\n const found =\n existingAttrs.find((attr) => {\n return (\n attr['forward-identity'][1] === ident.namespace &&\n attr['forward-identity'][2] === ident.attrName\n );\n }) || null;\n if (!found) {\n throw new Error(`Attribute ${ident.namespace}.${ident.attrName} not found`);\n }\n return found;\n};\n\nconst convertSimpleConstraintUpdate: ConvertPlanStepFn<any> = (\n tx,\n existing,\n) => {\n const found = getExistingAttrThrowing(tx.identifier, existing);\n return {\n 'attr-id': found.id,\n 'forward-identity': found['forward-identity'],\n };\n};\n\n// converts migration operations from Identifier (namespace/name) based\n// into transaction steps that use database ids\nconst CONVERTERS: AllConvertPlanStepFns = {\n index: convertSimpleConstraintUpdate,\n unique: convertSimpleConstraintUpdate,\n required: convertSimpleConstraintUpdate,\n 'remove-index': convertSimpleConstraintUpdate,\n 'remove-unique': convertSimpleConstraintUpdate,\n 'remove-required': convertSimpleConstraintUpdate,\n\n 'delete-attr': (from, existing) => {\n const found = getExistingAttrThrowing(from.identifier, existing);\n return found.id;\n },\n 'update-attr': (from, existing) => {\n const found = getExistingAttrThrowing(from.identifier, existing);\n return {\n id: found.id,\n 'forward-identity': from.partialAttr['forward-identity']\n ? [\n found.id,\n from.partialAttr['forward-identity'].namespace,\n from.partialAttr['forward-identity'].attrName,\n ]\n : undefined,\n 'reverse-identity': from.partialAttr['reverse-identity']\n ? [\n found.id,\n from.partialAttr['reverse-identity'].namespace,\n from.partialAttr['reverse-identity'].attrName,\n ]\n : undefined,\n cardinality: from.partialAttr['cardinality']\n ? from.partialAttr['cardinality']\n : undefined,\n\n 'on-delete': from.partialAttr['on-delete']\n ? from.partialAttr['on-delete']\n : undefined,\n 'on-delete-reverse': from.partialAttr['on-delete-reverse']\n ? from.partialAttr['on-delete-reverse']\n : undefined,\n };\n },\n 'add-attr': (from, _existing) => {\n const attrId = id();\n const forwardIdentity: [string, string, string] = [\n attrId,\n from.identifier.namespace,\n from.identifier.attrName,\n ];\n\n const steps: PlanStep[] = [];\n\n // First, create the attribute without unique, required, or indexed\n steps.push([\n 'add-attr',\n {\n 'forward-identity': forwardIdentity,\n 'reverse-identity': from['reverse-identity']\n ? [\n id(),\n from['reverse-identity'].namespace,\n from['reverse-identity'].attrName,\n ]\n : null,\n 'inferred-types': null,\n 'value-type': from['value-type'],\n id: attrId,\n cardinality: from.cardinality,\n 'index?': false,\n 'required?': false,\n 'unique?': false,\n catalog: 'user',\n 'on-delete': from['on-delete'],\n 'on-delete-reverse': from['on-delete-reverse'],\n 'checked-data-type': from['checked-data-type'],\n },\n ]);\n\n // Then add separate steps for unique, required, and indexed\n if (from['unique?']) {\n steps.push([\n 'unique',\n {\n 'attr-id': attrId,\n 'forward-identity': forwardIdentity,\n },\n ]);\n }\n\n if (from['required?']) {\n steps.push([\n 'required',\n {\n 'attr-id': attrId,\n 'forward-identity': forwardIdentity,\n },\n ]);\n }\n\n if (from['index?']) {\n steps.push([\n 'index',\n {\n 'attr-id': attrId,\n 'forward-identity': forwardIdentity,\n },\n ]);\n }\n\n return steps;\n },\n 'remove-data-type': convertSimpleConstraintUpdate,\n 'check-data-type': (from, existing) => {\n const found = getExistingAttrThrowing(from.identifier, existing);\n return {\n 'attr-id': found.id,\n 'checked-data-type': from['checked-data-type'],\n 'forward-identity': found['forward-identity'],\n };\n },\n};\n\nfunction isSystemCatalogAttr(\n systemCatalogIdentNames: Record<string, Set<string>>,\n entityName: string,\n attrName: string,\n): boolean {\n return !!systemCatalogIdentNames[entityName]?.has(attrName);\n}\n\nexport const convertTxSteps = (\n txs: MigrationTx[],\n existingAttrs: InstantDBAttr[],\n): PlanStep[] => {\n if (!existingAttrs) {\n throw new Error('Existing attributes are required');\n }\n const result: PlanStep[] = [];\n txs.forEach((tx) => {\n const converter = CONVERTERS[tx.type];\n if (!converter) {\n throw new Error(`Unknown transaction type: ${tx.type}`);\n }\n const converted = converter(tx as any, existingAttrs);\n if (Array.isArray(converted)) {\n result.push(...converted);\n } else {\n result.push([tx.type, converted] as PlanStep);\n }\n });\n return result;\n};\n\ntype ConvertPlanStepFn<T extends keyof MigrationTxTypes> = (\n from: MigrationTxTypes[T],\n existingAttrs: InstantDBAttr[],\n) => PlanStepMap[T] | PlanStep[];\n\ntype AllConvertPlanStepFns = {\n [K in keyof MigrationTxTypes]: ConvertPlanStepFn<K>;\n};\n\nexport type MigrationTx = {\n [K in keyof MigrationTxTypes]: {\n type: K;\n } & MigrationTxTypes[K];\n}[keyof MigrationTxTypes];\n\nexport type MigrationTxSpecific<T extends keyof MigrationTxTypes> = {\n type: T;\n} & MigrationTxTypes[T];\n\nexport type AnyLink = LinkDef<any, any, any, any, any, any, any>;\nexport type AnyBlob = DataAttrDef<any, any, any>;\n\nexport const diffSchemas = async (\n oldSchema: InstantSchemaDef<any, any, any>,\n newSchema: InstantSchemaDef<any, any, any>,\n resolveFn: RenameResolveFn<string>,\n systemCatalogIdentNames: Record<string, Set<string>>,\n): Promise<MigrationTx[]> => {\n const transactions: MigrationTx[] = [];\n\n const oldEntities = oldSchema.entities;\n const newEntities = newSchema.entities;\n\n const oldEntityNames = Object.keys(oldEntities);\n const newEntityNames = Object.keys(newEntities);\n\n const deletedEntityNames = oldEntityNames.filter(\n (name) => !newEntityNames.includes(name),\n );\n\n for (const entityName of deletedEntityNames) {\n Object.keys(oldEntities[entityName].attrs).forEach((attrName) => {\n if (isSystemCatalogAttr(systemCatalogIdentNames, entityName, attrName))\n return;\n transactions.push({\n type: 'delete-attr',\n identifier: {\n attrName,\n namespace: entityName,\n },\n });\n });\n if (isSystemCatalogAttr(systemCatalogIdentNames, entityName, 'id')) {\n continue;\n }\n transactions.push({\n type: 'delete-attr',\n identifier: {\n attrName: 'id',\n namespace: entityName,\n },\n });\n }\n\n const addedEntityNames = newEntityNames.filter(\n (name) => !oldEntityNames.includes(name),\n );\n\n for (const entityName of addedEntityNames) {\n if (!isSystemCatalogAttr(systemCatalogIdentNames, entityName, 'id')) {\n transactions.push({\n type: 'add-attr',\n 'forward-identity': {\n namespace: entityName,\n attrName: 'id',\n },\n identifier: {\n attrName: 'id',\n namespace: entityName,\n },\n 'index?': false,\n 'required?': true,\n cardinality: 'one',\n 'unique?': true,\n 'value-type': 'blob',\n });\n }\n\n for (const attrName of Object.keys(newEntities[entityName].attrs)) {\n if (isSystemCatalogAttr(systemCatalogIdentNames, entityName, attrName)) {\n continue;\n }\n const attrInSchema = newEntities[entityName].attrs[attrName];\n transactions.push(attrDefToNewAttrTx(attrInSchema, entityName, attrName));\n }\n }\n\n const innerEntityNames = oldEntityNames.filter((name) =>\n newEntityNames.includes(name),\n );\n\n for (const entityName of innerEntityNames) {\n // BLOB ATTRIBUTES\n const addedFields = Object.keys(newEntities[entityName].attrs).filter(\n (field) => {\n if (isSystemCatalogAttr(systemCatalogIdentNames, entityName, field))\n return false;\n\n const oldEntityHasIt = Object.keys(\n oldEntities[entityName].attrs,\n ).includes(field);\n return !oldEntityHasIt;\n },\n );\n const removedFields = Object.keys(oldEntities[entityName].attrs).filter(\n (field) => {\n if (isSystemCatalogAttr(systemCatalogIdentNames, entityName, field))\n return false;\n\n const newEntityHasIt = Object.keys(\n newEntities[entityName].attrs,\n ).includes(field);\n return !newEntityHasIt;\n },\n );\n\n const resolved = await resolveRenames(\n addedFields,\n removedFields,\n resolveFn,\n {\n type: 'attribute',\n entityName: entityName,\n },\n );\n\n const consistentFields = Object.keys(oldEntities[entityName].attrs).filter(\n (field) => Object.keys(newEntities[entityName].attrs).includes(field),\n );\n\n consistentFields.forEach((fieldName) => {\n if (isSystemCatalogAttr(systemCatalogIdentNames, entityName, fieldName)) {\n return;\n }\n transactions.push(\n ...compareBlobs(\n {\n attrName: fieldName,\n namespace: entityName,\n },\n oldEntities[entityName].attrs[fieldName],\n newEntities[entityName].attrs[fieldName],\n ),\n );\n });\n\n resolved.deleted.forEach((attrName) => {\n transactions.push({\n type: 'delete-attr',\n identifier: {\n attrName,\n namespace: entityName,\n },\n });\n });\n\n resolved.created.forEach((createdName) => {\n const attrInSchema = newSchema.entities[entityName].attrs[\n createdName\n ] as AnyBlob;\n transactions.push(\n attrDefToNewAttrTx(attrInSchema, entityName, createdName),\n );\n });\n\n resolved.renamed.forEach((renamed) => {\n transactions.push({\n type: 'update-attr',\n identifier: {\n attrName: renamed.from,\n namespace: entityName,\n },\n partialAttr: {\n 'value-type': 'blob',\n cardinality: 'one',\n 'forward-identity': {\n attrName: renamed.to,\n namespace: entityName,\n },\n },\n });\n\n transactions.push(\n ...compareBlobs(\n {\n attrName: renamed.from,\n namespace: entityName,\n },\n oldEntities[entityName].attrs[renamed.from],\n newEntities[entityName].attrs[renamed.to],\n ),\n );\n });\n }\n\n const oldLinks = (Object.values(oldSchema.links) as AnyLink[]).filter(\n (link) =>\n !isSystemCatalogAttr(\n systemCatalogIdentNames,\n link.forward.on,\n link.forward.label,\n ),\n );\n const newLinks = (Object.values(newSchema.links) as AnyLink[]).filter(\n (link) =>\n !isSystemCatalogAttr(\n systemCatalogIdentNames,\n link.forward.on,\n link.forward.label,\n ),\n );\n\n // Group links by their forward namespace-label combination for comparison\n const createLinkKey = (link: AnyLink) =>\n `${link.forward.on}<->${link.reverse.on}`;\n const createLinkIdentity = (link: AnyLink) =>\n `${link.forward.on}.${link.forward.label}<->${link.reverse.on}.${link.reverse.label}`;\n\n const newLinksByKey = new Map<string, AnyLink[]>();\n const oldLinksByKey = new Map<string, AnyLink[]>();\n\n for (const link of newLinks) {\n const key = createLinkKey(link);\n const links = newLinksByKey.get(key) || [];\n links.push(link);\n newLinksByKey.set(key, links);\n }\n\n for (const link of oldLinks) {\n const key = createLinkKey(link);\n const links = oldLinksByKey.get(key) || [];\n links.push(link);\n oldLinksByKey.set(key, links);\n }\n\n const allLinkKeys = new Set([\n ...oldLinksByKey.keys(),\n ...newLinksByKey.keys(),\n ]);\n\n for (const linkKey of allLinkKeys) {\n const oldLinksInGroup = oldLinksByKey.get(linkKey) || [];\n const newLinksInGroup = newLinksByKey.get(linkKey) || [];\n\n const oldIdentities = oldLinksInGroup.map((link) =>\n createLinkIdentity(link),\n );\n const newIdentities = newLinksInGroup.map((link) =>\n createLinkIdentity(link),\n );\n\n const addedIdentities = newIdentities.filter(\n (identity) => !oldIdentities.includes(identity),\n );\n\n const removedIdentities = oldIdentities.filter(\n (identity) => !newIdentities.includes(identity),\n );\n\n const consistentIdentities = oldIdentities.filter((identity) =>\n newIdentities.includes(identity),\n );\n\n consistentIdentities.forEach((identity) => {\n const oldLink = oldLinksInGroup.find(\n (l) => createLinkIdentity(l) === identity,\n );\n const newLink = newLinksInGroup.find(\n (l) => createLinkIdentity(l) === identity,\n );\n if (!oldLink || !newLink) return;\n transactions.push(\n ...compareLinks(\n {\n namespace: oldLink.forward.on,\n attrName: oldLink.forward.label,\n },\n oldLink,\n newLink,\n ),\n );\n });\n\n const resolved = await resolveRenames(\n addedIdentities,\n removedIdentities,\n resolveFn,\n {\n type: 'link',\n forwardEntityName: oldLinksInGroup[0]?.forward.on,\n reverseEntityName: oldLinksInGroup[0]?.reverse.on,\n },\n );\n\n resolved.deleted.forEach((identity) => {\n const link = oldLinksInGroup.find(\n (l) => createLinkIdentity(l) === identity,\n );\n if (!link) return;\n transactions.push({\n type: 'delete-attr',\n identifier: {\n attrName: link.forward.label,\n namespace: link.forward.on,\n },\n });\n });\n\n resolved.created.forEach((identity) => {\n const link = newLinksInGroup.find(\n (l) => createLinkIdentity(l) === identity,\n );\n if (!link) return;\n transactions.push(linkDefToNewAttrTx(link));\n });\n\n resolved.renamed.forEach((renamed) => {\n const oldLink = oldLinksInGroup.find(\n (l) => createLinkIdentity(l) === renamed.from,\n );\n const newLink = newLinksInGroup.find(\n (l) => createLinkIdentity(l) === renamed.to,\n );\n if (!oldLink || !newLink) return;\n\n transactions.push({\n type: 'update-attr',\n identifier: {\n attrName: oldLink.forward.label,\n namespace: oldLink.forward.on,\n },\n partialAttr: {\n 'value-type': 'ref',\n cardinality: newLink.forward.has === 'one' ? 'one' : 'many',\n 'forward-identity': {\n attrName: newLink.forward.label,\n namespace: newLink.forward.on,\n },\n 'reverse-identity': {\n attrName: newLink.reverse.label,\n namespace: newLink.reverse.on,\n },\n },\n });\n transactions.push(\n ...compareLinks(\n {\n attrName: oldLink.forward.label,\n namespace: oldLink.forward.on,\n },\n oldLink,\n newLink,\n ),\n );\n });\n }\n\n return transactions;\n};\n\nexport interface RenamePromptItem<T> {\n from: T;\n to: T;\n}\n\nexport const compareBlobs = (\n identity: Identifier,\n oldBlob: AnyBlob,\n newBlob: AnyBlob,\n): MigrationTx[] => {\n const results: MigrationTx[] = [];\n const sendType = <T extends JobMigrationTypes>(type: T) => {\n results.push({\n type,\n identifier: identity,\n });\n };\n\n // check if index needs to be added\n if (oldBlob.isIndexed === false && newBlob.isIndexed === true)\n sendType('index');\n\n // check if index needs to be removed\n if (oldBlob.isIndexed === true && newBlob.isIndexed === false)\n sendType('remove-index');\n\n // check if needs to become unique\n if (oldBlob.config.unique === false && newBlob.config.unique === true)\n sendType('unique');\n\n // check if needs to become non-unique\n if (oldBlob.config.unique === true && newBlob.config.unique === false)\n sendType('remove-unique');\n\n // check if needs to become required\n if (oldBlob.required === false && newBlob.required === true)\n sendType('required');\n\n // check if needs to become non-required\n if (oldBlob.required === true && newBlob.required === false)\n sendType('remove-required');\n\n // check if data type needs to be changed / added\n if (oldBlob.valueType !== 'json' && newBlob.valueType === 'json') {\n results.push({\n type: 'remove-data-type',\n identifier: identity,\n });\n } else if (\n oldBlob.valueType !== newBlob.valueType &&\n newBlob.valueType !== 'json'\n ) {\n results.push({\n type: 'check-data-type',\n identifier: identity,\n 'checked-data-type': newBlob.valueType,\n });\n }\n\n return results;\n};\n\nexport const compareLinks = (\n identity: Identifier,\n oldLink: AnyLink,\n newLink: AnyLink,\n): MigrationTx[] => {\n const results: MigrationTx[] = [];\n const oldRelationship =\n `${oldLink.forward.has}-${oldLink.reverse.has}` as RelationshipKinds;\n const { cardinality: oldCardinal, 'unique?': oldUnique } =\n relationshipConstraints[oldRelationship];\n\n const newRelationship =\n `${newLink.forward.has}-${newLink.reverse.has}` as RelationshipKinds;\n const { cardinality: newCardinal, 'unique?': newUnique } =\n relationshipConstraints[newRelationship];\n\n if (!oldUnique && newUnique) {\n results.push({\n type: 'unique',\n identifier: identity,\n });\n }\n if (!newUnique && newUnique !== oldUnique) {\n results.push({\n type: 'remove-unique',\n identifier: identity,\n });\n }\n\n if (\n oldLink.reverse.onDelete !== newLink.reverse.onDelete ||\n oldLink.forward.onDelete !== newLink.forward.onDelete ||\n oldCardinal !== newCardinal\n ) {\n results.push({\n type: 'update-attr',\n identifier: identity,\n partialAttr: {\n 'value-type': 'ref',\n 'on-delete-reverse': newLink.reverse.onDelete,\n 'on-delete': newLink.forward.onDelete,\n cardinality: newCardinal,\n },\n });\n }\n\n return results;\n};\n\nexport const isRenamePromptItem = <T>(\n item: RenamePromptItem<T> | T,\n): item is RenamePromptItem<T> => {\n if (typeof item === 'object') return true;\n return false;\n};\n\nexport type RenameResolveFn<T> = (\n created: T,\n promptData: (RenamePromptItem<T> | T)[],\n extraInfo?: any,\n) => Promise<T | RenamePromptItem<T>>;\n\nconst resolveRenames = async <T>(\n newItems: T[],\n missingItems: T[],\n resolveFn: RenameResolveFn<T>,\n extraInfo?: any,\n): Promise<{\n created: T[];\n deleted: T[];\n renamed: {\n from: T;\n to: T;\n }[];\n}> => {\n if (missingItems.length === 0 || newItems.length === 0) {\n return {\n created: newItems,\n deleted: missingItems,\n renamed: [],\n };\n }\n\n const result: {\n created: T[];\n renamed: { from: T; to: T }[];\n deleted: T[];\n } = { created: [], renamed: [], deleted: [] };\n let index = 0;\n let leftMissing = [...missingItems];\n\n do {\n const created = newItems[index];\n const renames: RenamePromptItem<T>[] = leftMissing.map((it) => {\n return { from: it, to: created };\n });\n const promptData: (RenamePromptItem<T> | T)[] = [created, ...renames];\n\n const data = await resolveFn(created, promptData, extraInfo);\n if (isRenamePromptItem(data)) {\n if (data.from !== data.to) {\n result.renamed.push(data);\n }\n delete leftMissing[leftMissing.indexOf(data.from)];\n leftMissing = leftMissing.filter(Boolean);\n } else {\n result.created.push(created);\n }\n index += 1;\n } while (index < newItems.length);\n\n result.deleted.push(...leftMissing);\n return result;\n};\n\n/**\n * a `rename command` lets us know your intent to rename a particular entity\n *\n * The format is `from:to`, where `from` and `to` are lookups.\n *\n * For example, to rename `posts.name` to `posts.title`, a command could\n * look like:\n *\n * `posts.name:posts.title`\n */\nexport type RenameCommand = `${string}.${string}:${string}.${string}`;\nfunction validateRenameLookup(lookup: string) {\n const [etype, label] = lookup.split('.').map((x) => x.trim());\n if (!etype || !label) {\n throw new Error(\n `Invalid lookup. Got '${lookup}'. We expect a pattern like 'entityname.columname;.` +\n 'For example: posts.title',\n );\n }\n}\n\n// RenameMap goes from `to` -> `from`\nfunction parseRenameCommands(renames: RenameCommand[]): Map<string, string> {\n // Parse rename options: format is \"from:to\"\n // note that it saves backwards since we will be testing against the base\n // case of a created attr\n const renameMap: Map<string, string> = new Map();\n for (const renameStr of renames) {\n let [from, to] = renameStr.split(':').map((x) => x.trim());\n if (!from || !to) {\n throw new Error(\n `Invalid rename command: ${renameStr}. We could not parse a distinct 'from' and 'to'.` +\n \" The structure should look like 'from:to'. For example: 'posts.name:posts.title'\",\n );\n }\n validateRenameLookup(from);\n validateRenameLookup(to);\n renameMap.set(to.trim(), from.trim());\n }\n return renameMap;\n}\n\n/**\n * Given a list of RenameCommands, builds a cusotm `resolveFn` for\n * `diffSchemas`, which automatically resolves rename conflicts with these commands.\n */\nexport function buildAutoRenameSelector(renames: RenameCommand[]) {\n const renameMap = parseRenameCommands(renames);\n\n const renameFn: RenameResolveFn<string> = async function (\n created: string,\n promptData: (RenamePromptItem<string> | string)[],\n extraInfo: any,\n ): Promise<string | RenamePromptItem<string>> {\n let lookupNames: string[] = [];\n if (extraInfo?.type === 'attribute' && extraInfo?.entityName) {\n lookupNames = [`${extraInfo.entityName}.${created}`];\n } else if (extraInfo?.type === 'link') {\n // Extract both forward and reverse parts\n const parts = created.split('<->');\n lookupNames = [parts[0], parts[1]];\n } else {\n return created;\n }\n\n // Try to find a match in the rename map using the lookup names\n let fromAttr: string | null = null;\n for (const lookupName of lookupNames) {\n if (renameMap.has(lookupName)) {\n fromAttr = renameMap.get(lookupName) || null;\n break;\n }\n }\n\n if (fromAttr) {\n let fromValue;\n if (extraInfo?.type === 'attribute') {\n fromValue = fromAttr.split('.').pop();\n } else {\n const matchingItem = promptData.find((item) => {\n const itemStr = typeof item === 'string' ? item : item.from;\n const itemParts = itemStr.split('<->');\n return itemParts[0] === fromAttr || itemParts[1] === fromAttr;\n });\n\n if (matchingItem) {\n fromValue =\n typeof matchingItem === 'string' ? matchingItem : matchingItem.from;\n } else {\n return created;\n }\n }\n\n const hasMatch = promptData.some((item) => {\n if (typeof item === 'string') {\n return item === fromValue;\n } else if (item.from) {\n return item.from === fromValue;\n }\n return false;\n });\n\n if (fromValue && hasMatch) {\n return { from: fromValue, to: created };\n }\n }\n\n return created;\n };\n\n return renameFn;\n}\n"]}
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/migrations.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DataAttrDef,\n id,\n InstantDBAttr,\n InstantDBAttrOnDelete,\n InstantDBCheckedDataType,\n InstantSchemaDef,\n LinkDef,\n} from '@instantdb/core';\nimport { PlanStep } from './api.ts';\nimport { attrDefToNewAttrTx, linkDefToNewAttrTx } from './migrationUtils.ts';\nimport { relationshipConstraints, RelationshipKinds } from './relationships.ts';\n\nexport type Identifier = {\n namespace: string;\n attrName: string;\n};\n\ntype AttrWithIdentifier = {\n 'value-type': 'blob' | 'ref';\n cardinality?: 'many' | 'one';\n 'forward-identity'?: Identifier;\n 'reverse-identity'?: Identifier | null;\n 'on-delete'?: InstantDBAttrOnDelete | null | undefined;\n 'on-delete-reverse'?: InstantDBAttrOnDelete | null | undefined;\n};\n\nexport type MigrationTxTypes = {\n 'delete-attr': { identifier: Identifier };\n 'update-attr': { identifier: Identifier; partialAttr: AttrWithIdentifier };\n 'add-attr': {\n identifier: Identifier;\n 'unique?': boolean;\n 'index?': boolean;\n 'required?': boolean;\n 'reverse-identity'?: Identifier | null;\n 'forward-identity': Identifier;\n cardinality: 'many' | 'one';\n 'value-type': 'blob' | 'ref';\n 'on-delete'?: InstantDBAttrOnDelete | null;\n 'on-delete-reverse'?: InstantDBAttrOnDelete | null;\n 'checked-data-type'?: InstantDBCheckedDataType | null;\n };\n index: { identifier: Identifier };\n 'remove-index': { identifier: Identifier };\n unique: { identifier: Identifier };\n 'remove-unique': { identifier: Identifier };\n required: { identifier: Identifier };\n 'remove-required': { identifier: Identifier };\n 'check-data-type': {\n identifier: Identifier;\n 'checked-data-type': InstantDBCheckedDataType;\n };\n 'remove-data-type': { identifier: Identifier };\n};\n\ntype JobMigrationTypes =\n | 'index'\n | 'remove-index'\n | 'remove-unique'\n | 'remove-required'\n | 'unique'\n | 'remove-data-type'\n | 'required';\n\ntype PlanStepMap = {\n [K in PlanStep as K[0]]: K[1];\n};\n\nconst getExistingAttrThrowing = (\n ident: Identifier,\n existingAttrs: InstantDBAttr[],\n): InstantDBAttr => {\n const found =\n existingAttrs.find((attr) => {\n return (\n attr['forward-identity'][1] === ident.namespace &&\n attr['forward-identity'][2] === ident.attrName\n );\n }) || null;\n if (!found) {\n throw new Error(`Attribute ${ident.namespace}.${ident.attrName} not found`);\n }\n return found;\n};\n\nconst convertSimpleConstraintUpdate: ConvertPlanStepFn<any> = (\n tx,\n existing,\n) => {\n const found = getExistingAttrThrowing(tx.identifier, existing);\n return {\n 'attr-id': found.id,\n 'forward-identity': found['forward-identity'],\n };\n};\n\n// converts migration operations from Identifier (namespace/name) based\n// into transaction steps that use database ids\nconst CONVERTERS: AllConvertPlanStepFns = {\n index: convertSimpleConstraintUpdate,\n unique: convertSimpleConstraintUpdate,\n required: convertSimpleConstraintUpdate,\n 'remove-index': convertSimpleConstraintUpdate,\n 'remove-unique': convertSimpleConstraintUpdate,\n 'remove-required': convertSimpleConstraintUpdate,\n\n 'delete-attr': (from, existing) => {\n const found = getExistingAttrThrowing(from.identifier, existing);\n return found.id;\n },\n 'update-attr': (from, existing) => {\n const found = getExistingAttrThrowing(from.identifier, existing);\n return {\n id: found.id,\n 'forward-identity': from.partialAttr['forward-identity']\n ? [\n found.id,\n from.partialAttr['forward-identity'].namespace,\n from.partialAttr['forward-identity'].attrName,\n ]\n : undefined,\n 'reverse-identity': from.partialAttr['reverse-identity']\n ? [\n found.id,\n from.partialAttr['reverse-identity'].namespace,\n from.partialAttr['reverse-identity'].attrName,\n ]\n : undefined,\n cardinality: from.partialAttr['cardinality']\n ? from.partialAttr['cardinality']\n : undefined,\n\n 'on-delete': from.partialAttr['on-delete']\n ? from.partialAttr['on-delete']\n : undefined,\n 'on-delete-reverse': from.partialAttr['on-delete-reverse']\n ? from.partialAttr['on-delete-reverse']\n : undefined,\n };\n },\n 'add-attr': (from, _existing) => {\n const attrId = id();\n const forwardIdentity: [string, string, string] = [\n attrId,\n from.identifier.namespace,\n from.identifier.attrName,\n ];\n\n const steps: PlanStep[] = [];\n\n // First, create the attribute without unique, required, or indexed\n steps.push([\n 'add-attr',\n {\n 'forward-identity': forwardIdentity,\n 'reverse-identity': from['reverse-identity']\n ? [\n id(),\n from['reverse-identity'].namespace,\n from['reverse-identity'].attrName,\n ]\n : null,\n 'inferred-types': null,\n 'value-type': from['value-type'],\n id: attrId,\n cardinality: from.cardinality,\n 'index?': false,\n 'required?': false,\n 'unique?': false,\n catalog: 'user',\n 'on-delete': from['on-delete'],\n 'on-delete-reverse': from['on-delete-reverse'],\n 'checked-data-type': from['checked-data-type'],\n },\n ]);\n\n // Then add separate steps for unique, required, and indexed\n if (from['unique?']) {\n steps.push([\n 'unique',\n {\n 'attr-id': attrId,\n 'forward-identity': forwardIdentity,\n },\n ]);\n }\n\n if (from['required?']) {\n steps.push([\n 'required',\n {\n 'attr-id': attrId,\n 'forward-identity': forwardIdentity,\n },\n ]);\n }\n\n if (from['index?']) {\n steps.push([\n 'index',\n {\n 'attr-id': attrId,\n 'forward-identity': forwardIdentity,\n },\n ]);\n }\n\n return steps;\n },\n 'remove-data-type': convertSimpleConstraintUpdate,\n 'check-data-type': (from, existing) => {\n const found = getExistingAttrThrowing(from.identifier, existing);\n return {\n 'attr-id': found.id,\n 'checked-data-type': from['checked-data-type'],\n 'forward-identity': found['forward-identity'],\n };\n },\n};\n\nfunction isSystemCatalogAttr(\n systemCatalogIdentNames: Record<string, Set<string>>,\n entityName: string,\n attrName: string,\n): boolean {\n return !!systemCatalogIdentNames[entityName]?.has(attrName);\n}\n\nexport const convertTxSteps = (\n txs: MigrationTx[],\n existingAttrs: InstantDBAttr[],\n): PlanStep[] => {\n if (!existingAttrs) {\n throw new Error('Existing attributes are required');\n }\n const result: PlanStep[] = [];\n txs.forEach((tx) => {\n const converter = CONVERTERS[tx.type];\n if (!converter) {\n throw new Error(`Unknown transaction type: ${tx.type}`);\n }\n const converted = converter(tx as any, existingAttrs);\n if (Array.isArray(converted)) {\n result.push(...converted);\n } else {\n result.push([tx.type, converted] as PlanStep);\n }\n });\n return result;\n};\n\ntype ConvertPlanStepFn<T extends keyof MigrationTxTypes> = (\n from: MigrationTxTypes[T],\n existingAttrs: InstantDBAttr[],\n) => PlanStepMap[T] | PlanStep[];\n\ntype AllConvertPlanStepFns = {\n [K in keyof MigrationTxTypes]: ConvertPlanStepFn<K>;\n};\n\nexport type MigrationTx = {\n [K in keyof MigrationTxTypes]: {\n type: K;\n } & MigrationTxTypes[K];\n}[keyof MigrationTxTypes];\n\nexport type MigrationTxSpecific<T extends keyof MigrationTxTypes> = {\n type: T;\n} & MigrationTxTypes[T];\n\nexport type AnyLink = LinkDef<any, any, any, any, any, any, any>;\nexport type AnyBlob = DataAttrDef<any, any, any>;\n\nexport const diffSchemas = async (\n oldSchema: InstantSchemaDef<any, any, any>,\n newSchema: InstantSchemaDef<any, any, any>,\n resolveFn: RenameResolveFn<string>,\n systemCatalogIdentNames: Record<string, Set<string>>,\n): Promise<MigrationTx[]> => {\n const transactions: MigrationTx[] = [];\n\n const oldEntities = oldSchema.entities;\n const newEntities = newSchema.entities;\n\n const oldEntityNames = Object.keys(oldEntities);\n const newEntityNames = Object.keys(newEntities);\n\n const deletedEntityNames = oldEntityNames.filter(\n (name) => !newEntityNames.includes(name),\n );\n\n for (const entityName of deletedEntityNames) {\n Object.keys(oldEntities[entityName].attrs).forEach((attrName) => {\n if (isSystemCatalogAttr(systemCatalogIdentNames, entityName, attrName))\n return;\n transactions.push({\n type: 'delete-attr',\n identifier: {\n attrName,\n namespace: entityName,\n },\n });\n });\n if (isSystemCatalogAttr(systemCatalogIdentNames, entityName, 'id')) {\n continue;\n }\n transactions.push({\n type: 'delete-attr',\n identifier: {\n attrName: 'id',\n namespace: entityName,\n },\n });\n }\n\n const addedEntityNames = newEntityNames.filter(\n (name) => !oldEntityNames.includes(name),\n );\n\n for (const entityName of addedEntityNames) {\n if (!isSystemCatalogAttr(systemCatalogIdentNames, entityName, 'id')) {\n transactions.push({\n type: 'add-attr',\n 'forward-identity': {\n namespace: entityName,\n attrName: 'id',\n },\n identifier: {\n attrName: 'id',\n namespace: entityName,\n },\n 'index?': false,\n 'required?': true,\n cardinality: 'one',\n 'unique?': true,\n 'value-type': 'blob',\n });\n }\n\n for (const attrName of Object.keys(newEntities[entityName].attrs)) {\n if (isSystemCatalogAttr(systemCatalogIdentNames, entityName, attrName)) {\n continue;\n }\n const attrInSchema = newEntities[entityName].attrs[attrName];\n transactions.push(attrDefToNewAttrTx(attrInSchema, entityName, attrName));\n }\n }\n\n const innerEntityNames = oldEntityNames.filter((name) =>\n newEntityNames.includes(name),\n );\n\n for (const entityName of innerEntityNames) {\n // BLOB ATTRIBUTES\n const addedFields = Object.keys(newEntities[entityName].attrs).filter(\n (field) => {\n if (isSystemCatalogAttr(systemCatalogIdentNames, entityName, field))\n return false;\n\n const oldEntityHasIt = Object.keys(\n oldEntities[entityName].attrs,\n ).includes(field);\n return !oldEntityHasIt;\n },\n );\n const removedFields = Object.keys(oldEntities[entityName].attrs).filter(\n (field) => {\n if (isSystemCatalogAttr(systemCatalogIdentNames, entityName, field))\n return false;\n\n const newEntityHasIt = Object.keys(\n newEntities[entityName].attrs,\n ).includes(field);\n return !newEntityHasIt;\n },\n );\n\n const resolved = await resolveRenames(\n addedFields,\n removedFields,\n resolveFn,\n {\n type: 'attribute',\n entityName: entityName,\n },\n );\n\n const consistentFields = Object.keys(oldEntities[entityName].attrs).filter(\n (field) => Object.keys(newEntities[entityName].attrs).includes(field),\n );\n\n consistentFields.forEach((fieldName) => {\n if (isSystemCatalogAttr(systemCatalogIdentNames, entityName, fieldName)) {\n return;\n }\n transactions.push(\n ...compareBlobs(\n {\n attrName: fieldName,\n namespace: entityName,\n },\n oldEntities[entityName].attrs[fieldName],\n newEntities[entityName].attrs[fieldName],\n ),\n );\n });\n\n resolved.deleted.forEach((attrName) => {\n transactions.push({\n type: 'delete-attr',\n identifier: {\n attrName,\n namespace: entityName,\n },\n });\n });\n\n resolved.created.forEach((createdName) => {\n const attrInSchema = newSchema.entities[entityName].attrs[\n createdName\n ] as AnyBlob;\n transactions.push(\n attrDefToNewAttrTx(attrInSchema, entityName, createdName),\n );\n });\n\n resolved.renamed.forEach((renamed) => {\n transactions.push({\n type: 'update-attr',\n identifier: {\n attrName: renamed.from,\n namespace: entityName,\n },\n partialAttr: {\n 'value-type': 'blob',\n cardinality: 'one',\n 'forward-identity': {\n attrName: renamed.to,\n namespace: entityName,\n },\n },\n });\n\n transactions.push(\n ...compareBlobs(\n {\n attrName: renamed.from,\n namespace: entityName,\n },\n oldEntities[entityName].attrs[renamed.from],\n newEntities[entityName].attrs[renamed.to],\n ),\n );\n });\n }\n\n const oldLinks = (Object.values(oldSchema.links) as AnyLink[]).filter(\n (link) =>\n !isSystemCatalogAttr(\n systemCatalogIdentNames,\n link.forward.on,\n link.forward.label,\n ),\n );\n const newLinks = (Object.values(newSchema.links) as AnyLink[]).filter(\n (link) =>\n !isSystemCatalogAttr(\n systemCatalogIdentNames,\n link.forward.on,\n link.forward.label,\n ),\n );\n\n // Group links by their forward namespace-label combination for comparison\n const createLinkKey = (link: AnyLink) =>\n `${link.forward.on}<->${link.reverse.on}`;\n const createLinkIdentity = (link: AnyLink) =>\n `${link.forward.on}.${link.forward.label}<->${link.reverse.on}.${link.reverse.label}`;\n\n const newLinksByKey = new Map<string, AnyLink[]>();\n const oldLinksByKey = new Map<string, AnyLink[]>();\n\n for (const link of newLinks) {\n const key = createLinkKey(link);\n const links = newLinksByKey.get(key) || [];\n links.push(link);\n newLinksByKey.set(key, links);\n }\n\n for (const link of oldLinks) {\n const key = createLinkKey(link);\n const links = oldLinksByKey.get(key) || [];\n links.push(link);\n oldLinksByKey.set(key, links);\n }\n\n const allLinkKeys = new Set([\n ...oldLinksByKey.keys(),\n ...newLinksByKey.keys(),\n ]);\n\n for (const linkKey of allLinkKeys) {\n const oldLinksInGroup = oldLinksByKey.get(linkKey) || [];\n const newLinksInGroup = newLinksByKey.get(linkKey) || [];\n\n const oldIdentities = oldLinksInGroup.map((link) =>\n createLinkIdentity(link),\n );\n const newIdentities = newLinksInGroup.map((link) =>\n createLinkIdentity(link),\n );\n\n const addedIdentities = newIdentities.filter(\n (identity) => !oldIdentities.includes(identity),\n );\n\n const removedIdentities = oldIdentities.filter(\n (identity) => !newIdentities.includes(identity),\n );\n\n const consistentIdentities = oldIdentities.filter((identity) =>\n newIdentities.includes(identity),\n );\n\n consistentIdentities.forEach((identity) => {\n const oldLink = oldLinksInGroup.find(\n (l) => createLinkIdentity(l) === identity,\n );\n const newLink = newLinksInGroup.find(\n (l) => createLinkIdentity(l) === identity,\n );\n if (!oldLink || !newLink) return;\n transactions.push(\n ...compareLinks(\n {\n namespace: oldLink.forward.on,\n attrName: oldLink.forward.label,\n },\n oldLink,\n newLink,\n ),\n );\n });\n\n const resolved = await resolveRenames(\n addedIdentities,\n removedIdentities,\n resolveFn,\n {\n type: 'link',\n forwardEntityName: oldLinksInGroup[0]?.forward.on,\n reverseEntityName: oldLinksInGroup[0]?.reverse.on,\n },\n );\n\n resolved.deleted.forEach((identity) => {\n const link = oldLinksInGroup.find(\n (l) => createLinkIdentity(l) === identity,\n );\n if (!link) return;\n transactions.push({\n type: 'delete-attr',\n identifier: {\n attrName: link.forward.label,\n namespace: link.forward.on,\n },\n });\n });\n\n resolved.created.forEach((identity) => {\n const link = newLinksInGroup.find(\n (l) => createLinkIdentity(l) === identity,\n );\n if (!link) return;\n transactions.push(linkDefToNewAttrTx(link));\n });\n\n resolved.renamed.forEach((renamed) => {\n const oldLink = oldLinksInGroup.find(\n (l) => createLinkIdentity(l) === renamed.from,\n );\n const newLink = newLinksInGroup.find(\n (l) => createLinkIdentity(l) === renamed.to,\n );\n if (!oldLink || !newLink) return;\n\n transactions.push({\n type: 'update-attr',\n identifier: {\n attrName: oldLink.forward.label,\n namespace: oldLink.forward.on,\n },\n partialAttr: {\n 'value-type': 'ref',\n cardinality: newLink.forward.has === 'one' ? 'one' : 'many',\n 'forward-identity': {\n attrName: newLink.forward.label,\n namespace: newLink.forward.on,\n },\n 'reverse-identity': {\n attrName: newLink.reverse.label,\n namespace: newLink.reverse.on,\n },\n },\n });\n transactions.push(\n ...compareLinks(\n {\n attrName: oldLink.forward.label,\n namespace: oldLink.forward.on,\n },\n oldLink,\n newLink,\n ),\n );\n });\n }\n\n return transactions;\n};\n\nexport interface RenamePromptItem<T> {\n from: T;\n to: T;\n}\n\nexport const compareBlobs = (\n identity: Identifier,\n oldBlob: AnyBlob,\n newBlob: AnyBlob,\n): MigrationTx[] => {\n const results: MigrationTx[] = [];\n const sendType = <T extends JobMigrationTypes>(type: T) => {\n results.push({\n type,\n identifier: identity,\n });\n };\n\n // check if index needs to be added\n if (oldBlob.isIndexed === false && newBlob.isIndexed === true)\n sendType('index');\n\n // check if index needs to be removed\n if (oldBlob.isIndexed === true && newBlob.isIndexed === false)\n sendType('remove-index');\n\n // check if needs to become unique\n if (oldBlob.config.unique === false && newBlob.config.unique === true)\n sendType('unique');\n\n // check if needs to become non-unique\n if (oldBlob.config.unique === true && newBlob.config.unique === false)\n sendType('remove-unique');\n\n // check if needs to become required\n if (oldBlob.required === false && newBlob.required === true)\n sendType('required');\n\n // check if needs to become non-required\n if (oldBlob.required === true && newBlob.required === false)\n sendType('remove-required');\n\n // check if data type needs to be changed / added\n if (oldBlob.valueType !== 'json' && newBlob.valueType === 'json') {\n results.push({\n type: 'remove-data-type',\n identifier: identity,\n });\n } else if (\n oldBlob.valueType !== newBlob.valueType &&\n newBlob.valueType !== 'json'\n ) {\n results.push({\n type: 'check-data-type',\n identifier: identity,\n 'checked-data-type': newBlob.valueType,\n });\n }\n\n return results;\n};\n\nexport const compareLinks = (\n identity: Identifier,\n oldLink: AnyLink,\n newLink: AnyLink,\n): MigrationTx[] => {\n const results: MigrationTx[] = [];\n const oldRelationship =\n `${oldLink.forward.has}-${oldLink.reverse.has}` as RelationshipKinds;\n const { cardinality: oldCardinal, 'unique?': oldUnique } =\n relationshipConstraints[oldRelationship];\n const oldRequired = !!oldLink.forward.required;\n\n const newRelationship =\n `${newLink.forward.has}-${newLink.reverse.has}` as RelationshipKinds;\n const { cardinality: newCardinal, 'unique?': newUnique } =\n relationshipConstraints[newRelationship];\n const newRequired = !!newLink.forward.required;\n\n if (!oldUnique && newUnique) {\n results.push({\n type: 'unique',\n identifier: identity,\n });\n }\n if (!newUnique && newUnique !== oldUnique) {\n results.push({\n type: 'remove-unique',\n identifier: identity,\n });\n }\n\n if (newRequired !== oldRequired) {\n results.push({\n type: newRequired ? 'required' : 'remove-required',\n identifier: identity,\n });\n }\n\n if (\n oldLink.reverse.onDelete !== newLink.reverse.onDelete ||\n oldLink.forward.onDelete !== newLink.forward.onDelete ||\n oldCardinal !== newCardinal\n ) {\n results.push({\n type: 'update-attr',\n identifier: identity,\n partialAttr: {\n 'value-type': 'ref',\n 'on-delete-reverse': newLink.reverse.onDelete,\n 'on-delete': newLink.forward.onDelete,\n cardinality: newCardinal,\n },\n });\n }\n\n return results;\n};\n\nexport const isRenamePromptItem = <T>(\n item: RenamePromptItem<T> | T,\n): item is RenamePromptItem<T> => {\n if (typeof item === 'object') return true;\n return false;\n};\n\nexport type RenameResolveFn<T> = (\n created: T,\n promptData: (RenamePromptItem<T> | T)[],\n extraInfo?: any,\n) => Promise<T | RenamePromptItem<T>>;\n\nconst resolveRenames = async <T>(\n newItems: T[],\n missingItems: T[],\n resolveFn: RenameResolveFn<T>,\n extraInfo?: any,\n): Promise<{\n created: T[];\n deleted: T[];\n renamed: {\n from: T;\n to: T;\n }[];\n}> => {\n if (missingItems.length === 0 || newItems.length === 0) {\n return {\n created: newItems,\n deleted: missingItems,\n renamed: [],\n };\n }\n\n const result: {\n created: T[];\n renamed: { from: T; to: T }[];\n deleted: T[];\n } = { created: [], renamed: [], deleted: [] };\n let index = 0;\n let leftMissing = [...missingItems];\n\n do {\n const created = newItems[index];\n const renames: RenamePromptItem<T>[] = leftMissing.map((it) => {\n return { from: it, to: created };\n });\n const promptData: (RenamePromptItem<T> | T)[] = [created, ...renames];\n\n const data = await resolveFn(created, promptData, extraInfo);\n if (isRenamePromptItem(data)) {\n if (data.from !== data.to) {\n result.renamed.push(data);\n }\n delete leftMissing[leftMissing.indexOf(data.from)];\n leftMissing = leftMissing.filter(Boolean);\n } else {\n result.created.push(created);\n }\n index += 1;\n } while (index < newItems.length);\n\n result.deleted.push(...leftMissing);\n return result;\n};\n\n/**\n * a `rename command` lets us know your intent to rename a particular entity\n *\n * The format is `from:to`, where `from` and `to` are lookups.\n *\n * For example, to rename `posts.name` to `posts.title`, a command could\n * look like:\n *\n * `posts.name:posts.title`\n */\nexport type RenameCommand = `${string}.${string}:${string}.${string}`;\nfunction validateRenameLookup(lookup: string) {\n const [etype, label] = lookup.split('.').map((x) => x.trim());\n if (!etype || !label) {\n throw new Error(\n `Invalid lookup. Got '${lookup}'. We expect a pattern like 'entityname.columname;.` +\n 'For example: posts.title',\n );\n }\n}\n\n// RenameMap goes from `to` -> `from`\nfunction parseRenameCommands(renames: RenameCommand[]): Map<string, string> {\n // Parse rename options: format is \"from:to\"\n // note that it saves backwards since we will be testing against the base\n // case of a created attr\n const renameMap: Map<string, string> = new Map();\n for (const renameStr of renames) {\n let [from, to] = renameStr.split(':').map((x) => x.trim());\n if (!from || !to) {\n throw new Error(\n `Invalid rename command: ${renameStr}. We could not parse a distinct 'from' and 'to'.` +\n \" The structure should look like 'from:to'. For example: 'posts.name:posts.title'\",\n );\n }\n validateRenameLookup(from);\n validateRenameLookup(to);\n renameMap.set(to.trim(), from.trim());\n }\n return renameMap;\n}\n\n/**\n * Given a list of RenameCommands, builds a cusotm `resolveFn` for\n * `diffSchemas`, which automatically resolves rename conflicts with these commands.\n */\nexport function buildAutoRenameSelector(renames: RenameCommand[]) {\n const renameMap = parseRenameCommands(renames);\n\n const renameFn: RenameResolveFn<string> = async function (\n created: string,\n promptData: (RenamePromptItem<string> | string)[],\n extraInfo: any,\n ): Promise<string | RenamePromptItem<string>> {\n let lookupNames: string[] = [];\n if (extraInfo?.type === 'attribute' && extraInfo?.entityName) {\n lookupNames = [`${extraInfo.entityName}.${created}`];\n } else if (extraInfo?.type === 'link') {\n // Extract both forward and reverse parts\n const parts = created.split('<->');\n lookupNames = [parts[0], parts[1]];\n } else {\n return created;\n }\n\n // Try to find a match in the rename map using the lookup names\n let fromAttr: string | null = null;\n for (const lookupName of lookupNames) {\n if (renameMap.has(lookupName)) {\n fromAttr = renameMap.get(lookupName) || null;\n break;\n }\n }\n\n if (fromAttr) {\n let fromValue;\n if (extraInfo?.type === 'attribute') {\n fromValue = fromAttr.split('.').pop();\n } else {\n const matchingItem = promptData.find((item) => {\n const itemStr = typeof item === 'string' ? item : item.from;\n const itemParts = itemStr.split('<->');\n return itemParts[0] === fromAttr || itemParts[1] === fromAttr;\n });\n\n if (matchingItem) {\n fromValue =\n typeof matchingItem === 'string' ? matchingItem : matchingItem.from;\n } else {\n return created;\n }\n }\n\n const hasMatch = promptData.some((item) => {\n if (typeof item === 'string') {\n return item === fromValue;\n } else if (item.from) {\n return item.from === fromValue;\n }\n return false;\n });\n\n if (fromValue && hasMatch) {\n return { from: fromValue, to: created };\n }\n }\n\n return created;\n };\n\n return renameFn;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/migrations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/migrations.ts"],"names":[],"mappings":"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"}
@@ -421,8 +421,10 @@ export const compareLinks = (identity, oldLink, newLink) => {
421
421
  const results = [];
422
422
  const oldRelationship = `${oldLink.forward.has}-${oldLink.reverse.has}`;
423
423
  const { cardinality: oldCardinal, 'unique?': oldUnique } = relationshipConstraints[oldRelationship];
424
+ const oldRequired = !!oldLink.forward.required;
424
425
  const newRelationship = `${newLink.forward.has}-${newLink.reverse.has}`;
425
426
  const { cardinality: newCardinal, 'unique?': newUnique } = relationshipConstraints[newRelationship];
427
+ const newRequired = !!newLink.forward.required;
426
428
  if (!oldUnique && newUnique) {
427
429
  results.push({
428
430
  type: 'unique',
@@ -435,6 +437,12 @@ export const compareLinks = (identity, oldLink, newLink) => {
435
437
  identifier: identity,
436
438
  });
437
439
  }
440
+ if (newRequired !== oldRequired) {
441
+ results.push({
442
+ type: newRequired ? 'required' : 'remove-required',
443
+ identifier: identity,
444
+ });
445
+ }
438
446
  if (oldLink.reverse.onDelete !== newLink.reverse.onDelete ||
439
447
  oldLink.forward.onDelete !== newLink.forward.onDelete ||
440
448
  oldCardinal !== newCardinal) {