@ganju/utils 0.0.15 → 0.0.16

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 (57) hide show
  1. package/dist/constants.d.ts +23 -0
  2. package/dist/constants.d.ts.map +1 -1
  3. package/dist/constants.js +95 -8
  4. package/dist/data.d.ts +9 -0
  5. package/dist/data.d.ts.map +1 -0
  6. package/dist/data.js +78 -0
  7. package/dist/dataApi.d.ts +511 -0
  8. package/dist/dataApi.d.ts.map +1 -0
  9. package/dist/dataApi.js +355 -0
  10. package/dist/dataCompiler.d.ts +68 -0
  11. package/dist/dataCompiler.d.ts.map +1 -0
  12. package/dist/dataCompiler.js +726 -0
  13. package/dist/dataDdl.d.ts +29 -0
  14. package/dist/dataDdl.d.ts.map +1 -0
  15. package/dist/dataDdl.js +354 -0
  16. package/dist/dataEngine.d.ts +143 -0
  17. package/dist/dataEngine.d.ts.map +1 -0
  18. package/dist/dataEngine.js +2022 -0
  19. package/dist/dataIdentifiers.d.ts +8 -0
  20. package/dist/dataIdentifiers.d.ts.map +1 -0
  21. package/dist/dataIdentifiers.js +55 -0
  22. package/dist/dataImport.d.ts +77 -0
  23. package/dist/dataImport.d.ts.map +1 -0
  24. package/dist/dataImport.js +450 -0
  25. package/dist/dataRpc.d.ts +131 -0
  26. package/dist/dataRpc.d.ts.map +1 -0
  27. package/dist/dataRpc.js +2 -0
  28. package/dist/dataTypes.d.ts +157 -0
  29. package/dist/dataTypes.d.ts.map +1 -0
  30. package/dist/dataTypes.js +160 -0
  31. package/dist/index.d.ts +308 -6
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +2 -0
  34. package/dist/oauth.d.ts +14 -0
  35. package/dist/oauth.d.ts.map +1 -1
  36. package/dist/oauth.js +42 -2
  37. package/dist/resourceRerank.d.ts +3 -2
  38. package/dist/resourceRerank.d.ts.map +1 -1
  39. package/dist/resourceRerank.js +5 -2
  40. package/dist/schema.d.ts +285 -4
  41. package/dist/schema.d.ts.map +1 -1
  42. package/dist/schema.js +203 -0
  43. package/package.json +17 -2
  44. package/src/constants.ts +108 -8
  45. package/src/data.ts +74 -0
  46. package/src/dataApi.ts +428 -0
  47. package/src/dataCompiler.ts +948 -0
  48. package/src/dataDdl.ts +419 -0
  49. package/src/dataEngine.ts +2753 -0
  50. package/src/dataIdentifiers.ts +63 -0
  51. package/src/dataImport.ts +554 -0
  52. package/src/dataRpc.ts +121 -0
  53. package/src/dataTypes.ts +312 -0
  54. package/src/index.ts +4 -0
  55. package/src/oauth.ts +42 -1
  56. package/src/resourceRerank.ts +5 -2
  57. package/src/schema.ts +246 -0
package/src/schema.ts CHANGED
@@ -11,6 +11,19 @@ import {
11
11
  PARTICIPANT_DAILY_LIMIT_MAX,
12
12
  PARTICIPANT_DAILY_LIMIT_OFF
13
13
  } from './channelCustomer';
14
+ import {
15
+ DATA_ACCESS_LEVELS,
16
+ DATA_COLUMN_TYPES,
17
+ DATA_MAX_COLUMNS,
18
+ DATA_MAX_DESCRIPTION,
19
+ DATA_MAX_ENUM_VALUES,
20
+ DATA_MAX_INSERT_ROWS,
21
+ DATA_MAX_LABEL,
22
+ DATA_IMPACT_MAX_IDS,
23
+ DATA_MAX_PAGE,
24
+ DATA_MAX_WRITE_OPERATIONS,
25
+ DATA_ON_DELETE
26
+ } from './dataTypes';
14
27
 
15
28
  // A prompt title becomes a slash command; it must not collide with a command
16
29
  // the channel runner handles itself (e.g. `/link`).
@@ -511,6 +524,214 @@ const ARTIFACT_REMOVE_RESOURCE = z.object({
511
524
  organizationId: z.uuid()
512
525
  });
513
526
 
527
+ const DATA_DATABASE_GET = z.object({
528
+ projectId: z.uuid(),
529
+ userId: z.uuid(),
530
+ organizationId: z.uuid()
531
+ });
532
+
533
+ // The name is what the owner types to delete it; it defaults to the
534
+ // project's slug. `replaceDeleted` starts over while a deleted database is
535
+ // still in its grace period, giving up the chance to restore it.
536
+ const DATA_DATABASE_CREATE = DATA_DATABASE_GET.extend({
537
+ name: z.string().trim().min(1).max(100).optional(),
538
+ replaceDeleted: z.boolean().optional()
539
+ });
540
+
541
+ const DATA_DATABASE_DELETE = DATA_DATABASE_GET.extend({
542
+ confirmName: z.string().min(1)
543
+ });
544
+
545
+ // The bodies and query strings of the Data API. Each one is what a client
546
+ // sends; the route schemas below add the path's ids. The database object
547
+ // checks every rule again (names, types, relations), so these describe the
548
+ // shape and leave the meaning to it.
549
+ const DATA_IDENTIFIER = z.string().min(1).max(63);
550
+ const DATA_DEFAULT_VALUE = z.union([
551
+ z.string(),
552
+ z.number(),
553
+ z.boolean(),
554
+ z.null()
555
+ ]);
556
+ const DATA_TEXT = (max: number) => z.string().max(max).nullable().optional();
557
+
558
+ const DATA_COLUMN_INPUT = z.strictObject({
559
+ name: DATA_IDENTIFIER,
560
+ type: z.enum(DATA_COLUMN_TYPES),
561
+ label: DATA_TEXT(DATA_MAX_LABEL),
562
+ description: DATA_TEXT(DATA_MAX_DESCRIPTION),
563
+ required: z.boolean().optional(),
564
+ unique: z.boolean().optional(),
565
+ filterable: z.boolean().optional(),
566
+ searchable: z.boolean().optional(),
567
+ personal: z.boolean().optional(),
568
+ values: z.array(z.string().min(1)).max(DATA_MAX_ENUM_VALUES).optional(),
569
+ table: DATA_IDENTIFIER.optional(),
570
+ onDelete: z.enum(DATA_ON_DELETE).optional(),
571
+ min: z.number().nullable().optional(),
572
+ default: DATA_DEFAULT_VALUE.optional()
573
+ });
574
+
575
+ // The CLI's schema file holds a list of these.
576
+ const DATA_TABLE_INPUT = z.strictObject({
577
+ name: DATA_IDENTIFIER,
578
+ label: DATA_TEXT(DATA_MAX_LABEL),
579
+ description: DATA_TEXT(DATA_MAX_DESCRIPTION),
580
+ displayColumn: DATA_IDENTIFIER.nullable().optional(),
581
+ access: z.enum(DATA_ACCESS_LEVELS).optional(),
582
+ customerScoped: z.boolean().optional(),
583
+ history: z.boolean().optional(),
584
+ columns: z.array(DATA_COLUMN_INPUT).max(DATA_MAX_COLUMNS)
585
+ });
586
+
587
+ const DATA_TABLE_PATCH = DATA_TABLE_INPUT.omit({ columns: true }).partial();
588
+
589
+ // A null puts the setting back to its default.
590
+ const DATA_COLUMN_PATCH = DATA_COLUMN_INPUT.partial();
591
+
592
+ const DATA_TABLE_DROP_BODY = z.strictObject({ confirmName: z.string().min(1) });
593
+
594
+ const DATA_ROW_VALUES = z.record(z.string(), z.unknown());
595
+
596
+ // A JSON value carried in a query string, e.g. `where={"status":"open"}`.
597
+ const DATA_JSON_PARAM = z.string().transform((text, ctx) => {
598
+ try {
599
+ return JSON.parse(text) as unknown;
600
+ } catch {
601
+ ctx.addIssue({
602
+ code: 'custom',
603
+ message: 'This is JSON, e.g. {"status":"open"}'
604
+ });
605
+ return z.NEVER;
606
+ }
607
+ });
608
+
609
+ // A comma-separated list in a query string: `sort=-created_at,name`.
610
+ const DATA_LIST_PARAM = z.string().transform(text =>
611
+ text
612
+ .split(',')
613
+ .map(item => item.trim())
614
+ .filter(Boolean)
615
+ );
616
+
617
+ const DATA_ROW_LIST_QUERY = z.strictObject({
618
+ where: DATA_JSON_PARAM.optional(),
619
+ sort: DATA_LIST_PARAM.optional(),
620
+ include: DATA_LIST_PARAM.optional(),
621
+ limit: z.coerce.number().int().min(1).max(DATA_MAX_PAGE).optional(),
622
+ cursor: z.string().max(2000).optional(),
623
+ q: z.string().max(500).optional(),
624
+ timeZone: z.string().max(64).optional()
625
+ });
626
+
627
+ const DATA_ROW_GET_QUERY = DATA_ROW_LIST_QUERY.pick({
628
+ include: true,
629
+ timeZone: true
630
+ });
631
+
632
+ const DATA_ROW_CREATE_BODY = z.union([
633
+ z.strictObject({ values: DATA_ROW_VALUES }),
634
+ z.strictObject({
635
+ rows: z.array(DATA_ROW_VALUES).min(1).max(DATA_MAX_INSERT_ROWS)
636
+ })
637
+ ]);
638
+
639
+ const DATA_ROW_VERSION = z.number().int().min(1);
640
+
641
+ // `set` takes values, or relative changes such as { "stock": { "decrement": 2 } }.
642
+ const DATA_ROW_UPDATE_BODY = z.strictObject({
643
+ set: DATA_ROW_VALUES,
644
+ version: DATA_ROW_VERSION.optional()
645
+ });
646
+
647
+ const DATA_ROW_DELETE_BODY = z.strictObject({
648
+ version: DATA_ROW_VERSION.optional()
649
+ });
650
+
651
+ const DATA_ROW_ID = z.coerce.number().int().min(1);
652
+
653
+ // Without `ids`, every row of the table.
654
+ const DATA_DELETE_PREVIEW_BODY = z.strictObject({
655
+ ids: z.array(z.number().int().min(1)).min(1).max(DATA_IMPACT_MAX_IDS).optional()
656
+ });
657
+
658
+ const DATA_WRITE_TARGET = {
659
+ table: DATA_IDENTIFIER,
660
+ id: z
661
+ .union([
662
+ z.number().int().min(1),
663
+ z.strictObject({ $ref: z.number().int().min(0) })
664
+ ])
665
+ .optional(),
666
+ where: z.record(z.string(), z.unknown()).optional(),
667
+ expect: z.number().int().min(0).optional(),
668
+ version: DATA_ROW_VERSION.optional()
669
+ };
670
+
671
+ // Applied together or not at all. A later step can use an earlier insert's
672
+ // id as { "$ref": <step> }.
673
+ const DATA_WRITE_OPERATION = z.discriminatedUnion('op', [
674
+ z.strictObject({
675
+ op: z.literal('insert'),
676
+ table: DATA_IDENTIFIER,
677
+ values: DATA_ROW_VALUES.optional(),
678
+ rows: z.array(DATA_ROW_VALUES).min(1).max(DATA_MAX_INSERT_ROWS).optional()
679
+ }),
680
+ z.strictObject({
681
+ op: z.literal('update'),
682
+ ...DATA_WRITE_TARGET,
683
+ set: DATA_ROW_VALUES
684
+ }),
685
+ z.strictObject({ op: z.literal('delete'), ...DATA_WRITE_TARGET })
686
+ ]);
687
+
688
+ const DATA_WRITE_BODY = z.strictObject({
689
+ operations: z
690
+ .array(DATA_WRITE_OPERATION)
691
+ .min(1)
692
+ .max(DATA_MAX_WRITE_OPERATIONS)
693
+ });
694
+
695
+ const DATA_ROW_HISTORY_QUERY = z.strictObject({
696
+ limit: z.coerce.number().int().min(1).max(100).optional(),
697
+ cursor: z.coerce.number().int().min(1).optional(),
698
+ timeZone: z.string().max(64).optional()
699
+ });
700
+
701
+ // A time within the last 30 days, or a bookmark this API handed out (a drop,
702
+ // a type change, or the restore to undo).
703
+ const DATA_RESTORE_POINT_BODY = z.union([
704
+ z.strictObject({
705
+ timestamp: z.union([z.iso.datetime({ offset: true }), z.number().int()])
706
+ }),
707
+ z.strictObject({ bookmark: z.string().min(1).max(200) })
708
+ ]);
709
+
710
+ const DATA_EXPORT_BODY = z.strictObject({
711
+ format: z.enum(['jsonl', 'csv']).optional()
712
+ });
713
+
714
+ const DATA_EXPORT_QUERY = z.strictObject({
715
+ exportId: z.uuid().optional()
716
+ });
717
+
718
+ // Without `table`, the export's schema.json.
719
+ const DATA_EXPORT_FILE_QUERY = z.strictObject({
720
+ exportId: z.uuid(),
721
+ table: DATA_IDENTIFIER.optional()
722
+ });
723
+
724
+ const DATA_CHANGE_LIST_QUERY = z.strictObject({
725
+ limit: z.coerce.number().int().min(1).max(100).optional(),
726
+ cursor: z.uuid().optional()
727
+ });
728
+
729
+ const DATA_TABLE_PARAMS = DATA_DATABASE_GET.extend({ table: DATA_IDENTIFIER });
730
+ const DATA_COLUMN_PARAMS = DATA_TABLE_PARAMS.extend({
731
+ column: DATA_IDENTIFIER
732
+ });
733
+ const DATA_ROW_PARAMS = DATA_TABLE_PARAMS.extend({ id: DATA_ROW_ID });
734
+
514
735
  const ARTIFACT_UPLOAD_RESOURCE_FILE = z.object({
515
736
  resourceId: z.uuid(),
516
737
  projectId: z.uuid(),
@@ -1727,6 +1948,31 @@ export const Schema = {
1727
1948
  ARTIFACT_UPDATE_RESOURCE_VIEW,
1728
1949
  ARTIFACT_GET_RESOURCE,
1729
1950
  ARTIFACT_GET_RESOURCE_BY_ID,
1951
+ DATA_DATABASE_GET,
1952
+ DATA_DATABASE_CREATE,
1953
+ DATA_DATABASE_DELETE,
1954
+ DATA_COLUMN_INPUT,
1955
+ DATA_TABLE_INPUT,
1956
+ DATA_TABLE_PATCH,
1957
+ DATA_COLUMN_PATCH,
1958
+ DATA_TABLE_DROP_BODY,
1959
+ DATA_ROW_LIST_QUERY,
1960
+ DATA_ROW_GET_QUERY,
1961
+ DATA_ROW_CREATE_BODY,
1962
+ DATA_ROW_UPDATE_BODY,
1963
+ DATA_ROW_DELETE_BODY,
1964
+ DATA_DELETE_PREVIEW_BODY,
1965
+ DATA_WRITE_OPERATION,
1966
+ DATA_WRITE_BODY,
1967
+ DATA_ROW_HISTORY_QUERY,
1968
+ DATA_RESTORE_POINT_BODY,
1969
+ DATA_EXPORT_BODY,
1970
+ DATA_EXPORT_QUERY,
1971
+ DATA_EXPORT_FILE_QUERY,
1972
+ DATA_CHANGE_LIST_QUERY,
1973
+ DATA_TABLE_PARAMS,
1974
+ DATA_COLUMN_PARAMS,
1975
+ DATA_ROW_PARAMS,
1730
1976
  ARTIFACT_REMOVE_RESOURCE,
1731
1977
  ARTIFACT_UPLOAD_RESOURCE_FILE,
1732
1978
  ARTIFACT_DOWNLOAD_RESOURCE_FILE,