pocketbase-zod-schema 0.2.4 → 0.2.5

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/CHANGELOG.md +7 -0
  2. package/README.md +209 -24
  3. package/dist/cli/index.cjs +34 -0
  4. package/dist/cli/index.cjs.map +1 -1
  5. package/dist/cli/index.d.cts +3 -1
  6. package/dist/cli/index.d.ts +3 -1
  7. package/dist/cli/index.js +34 -0
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/cli/migrate.cjs +34 -0
  10. package/dist/cli/migrate.cjs.map +1 -1
  11. package/dist/cli/migrate.js +34 -0
  12. package/dist/cli/migrate.js.map +1 -1
  13. package/dist/cli/utils/index.d.cts +3 -1
  14. package/dist/cli/utils/index.d.ts +3 -1
  15. package/dist/fields-YjcpBXVp.d.cts +348 -0
  16. package/dist/fields-YjcpBXVp.d.ts +348 -0
  17. package/dist/index.cjs +222 -0
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.cts +2 -1
  20. package/dist/index.d.ts +2 -1
  21. package/dist/index.js +208 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/migration/analyzer.cjs +34 -0
  24. package/dist/migration/analyzer.cjs.map +1 -1
  25. package/dist/migration/analyzer.d.cts +2 -1
  26. package/dist/migration/analyzer.d.ts +2 -1
  27. package/dist/migration/analyzer.js +34 -0
  28. package/dist/migration/analyzer.js.map +1 -1
  29. package/dist/migration/diff.d.cts +3 -1
  30. package/dist/migration/diff.d.ts +3 -1
  31. package/dist/migration/generator.d.cts +3 -1
  32. package/dist/migration/generator.d.ts +3 -1
  33. package/dist/migration/index.cjs +36 -0
  34. package/dist/migration/index.cjs.map +1 -1
  35. package/dist/migration/index.d.cts +2 -1
  36. package/dist/migration/index.d.ts +2 -1
  37. package/dist/migration/index.js +35 -1
  38. package/dist/migration/index.js.map +1 -1
  39. package/dist/migration/snapshot.cjs.map +1 -1
  40. package/dist/migration/snapshot.d.cts +3 -1
  41. package/dist/migration/snapshot.d.ts +3 -1
  42. package/dist/migration/snapshot.js.map +1 -1
  43. package/dist/migration/utils/index.cjs +16 -0
  44. package/dist/migration/utils/index.cjs.map +1 -1
  45. package/dist/migration/utils/index.d.cts +2 -2
  46. package/dist/migration/utils/index.d.ts +2 -2
  47. package/dist/migration/utils/index.js +15 -1
  48. package/dist/migration/utils/index.js.map +1 -1
  49. package/dist/schema.cjs +200 -0
  50. package/dist/schema.cjs.map +1 -1
  51. package/dist/schema.d.cts +1 -0
  52. package/dist/schema.d.ts +1 -0
  53. package/dist/schema.js +186 -1
  54. package/dist/schema.js.map +1 -1
  55. package/dist/{types-z1Dkjg8m.d.ts → types-LFBGHl9Y.d.ts} +2 -2
  56. package/dist/{types-BbTgmg6H.d.cts → types-mhQXWNi3.d.cts} +2 -2
  57. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -524,6 +524,191 @@ function defineCollection(config) {
524
524
  }
525
525
  return schema.describe(JSON.stringify(metadata));
526
526
  }
527
+ var FIELD_METADATA_KEY = "__pocketbase_field__";
528
+ function extractFieldMetadata(description) {
529
+ if (!description) return null;
530
+ try {
531
+ const parsed = JSON.parse(description);
532
+ if (parsed[FIELD_METADATA_KEY]) {
533
+ return parsed[FIELD_METADATA_KEY];
534
+ }
535
+ } catch {
536
+ }
537
+ return null;
538
+ }
539
+ function BoolField() {
540
+ const metadata = {
541
+ [FIELD_METADATA_KEY]: {
542
+ type: "bool"
543
+ }
544
+ };
545
+ return zod.z.boolean().describe(JSON.stringify(metadata));
546
+ }
547
+ function NumberField(options) {
548
+ if (options?.min !== void 0 && options?.max !== void 0) {
549
+ if (options.min > options.max) {
550
+ throw new Error("NumberField: min cannot be greater than max");
551
+ }
552
+ }
553
+ let schema = zod.z.number();
554
+ if (options?.min !== void 0) {
555
+ schema = schema.min(options.min);
556
+ }
557
+ if (options?.max !== void 0) {
558
+ schema = schema.max(options.max);
559
+ }
560
+ const metadata = {
561
+ [FIELD_METADATA_KEY]: {
562
+ type: "number",
563
+ options: options || {}
564
+ }
565
+ };
566
+ return schema.describe(JSON.stringify(metadata));
567
+ }
568
+ function TextField(options) {
569
+ if (options?.min !== void 0 && options?.max !== void 0) {
570
+ if (options.min > options.max) {
571
+ throw new Error("TextField: min cannot be greater than max");
572
+ }
573
+ }
574
+ let schema = zod.z.string();
575
+ if (options?.min !== void 0) {
576
+ schema = schema.min(options.min);
577
+ }
578
+ if (options?.max !== void 0) {
579
+ schema = schema.max(options.max);
580
+ }
581
+ if (options?.pattern !== void 0) {
582
+ const pattern = options.pattern instanceof RegExp ? options.pattern : new RegExp(options.pattern);
583
+ schema = schema.regex(pattern);
584
+ }
585
+ const metadata = {
586
+ [FIELD_METADATA_KEY]: {
587
+ type: "text",
588
+ options: options || {}
589
+ }
590
+ };
591
+ return schema.describe(JSON.stringify(metadata));
592
+ }
593
+ function EmailField() {
594
+ const metadata = {
595
+ [FIELD_METADATA_KEY]: {
596
+ type: "email"
597
+ }
598
+ };
599
+ return zod.z.string().email().describe(JSON.stringify(metadata));
600
+ }
601
+ function URLField() {
602
+ const metadata = {
603
+ [FIELD_METADATA_KEY]: {
604
+ type: "url"
605
+ }
606
+ };
607
+ return zod.z.string().url().describe(JSON.stringify(metadata));
608
+ }
609
+ function EditorField() {
610
+ const metadata = {
611
+ [FIELD_METADATA_KEY]: {
612
+ type: "editor"
613
+ }
614
+ };
615
+ return zod.z.string().describe(JSON.stringify(metadata));
616
+ }
617
+ function DateField(options) {
618
+ if (options?.min !== void 0 && options?.max !== void 0) {
619
+ const minDate = typeof options.min === "string" ? new Date(options.min) : options.min;
620
+ const maxDate = typeof options.max === "string" ? new Date(options.max) : options.max;
621
+ if (minDate > maxDate) {
622
+ throw new Error("DateField: min cannot be greater than max");
623
+ }
624
+ }
625
+ const schema = zod.z.string();
626
+ const metadata = {
627
+ [FIELD_METADATA_KEY]: {
628
+ type: "date",
629
+ options: options || {}
630
+ }
631
+ };
632
+ return schema.describe(JSON.stringify(metadata));
633
+ }
634
+ function AutodateField(options) {
635
+ const schema = zod.z.string();
636
+ const metadata = {
637
+ [FIELD_METADATA_KEY]: {
638
+ type: "autodate",
639
+ options: options || {}
640
+ }
641
+ };
642
+ return schema.describe(JSON.stringify(metadata));
643
+ }
644
+ function SelectField(values, options) {
645
+ const enumSchema = zod.z.enum(values);
646
+ const metadata = {
647
+ [FIELD_METADATA_KEY]: {
648
+ type: "select",
649
+ options: {
650
+ values,
651
+ maxSelect: options?.maxSelect ?? 1
652
+ }
653
+ }
654
+ };
655
+ if (options?.maxSelect && options.maxSelect > 1) {
656
+ return zod.z.array(enumSchema).describe(JSON.stringify(metadata));
657
+ }
658
+ return enumSchema.describe(JSON.stringify(metadata));
659
+ }
660
+ function FileField(options) {
661
+ const schema = zod.z.instanceof(File);
662
+ const metadata = {
663
+ [FIELD_METADATA_KEY]: {
664
+ type: "file",
665
+ options: options || {}
666
+ }
667
+ };
668
+ return schema.describe(JSON.stringify(metadata));
669
+ }
670
+ function FilesField(options) {
671
+ if (options?.minSelect !== void 0 && options?.maxSelect !== void 0) {
672
+ if (options.minSelect > options.maxSelect) {
673
+ throw new Error("FilesField: minSelect cannot be greater than maxSelect");
674
+ }
675
+ }
676
+ let schema = zod.z.array(zod.z.instanceof(File));
677
+ if (options?.minSelect !== void 0) {
678
+ schema = schema.min(options.minSelect);
679
+ }
680
+ if (options?.maxSelect !== void 0) {
681
+ schema = schema.max(options.maxSelect);
682
+ }
683
+ const metadata = {
684
+ [FIELD_METADATA_KEY]: {
685
+ type: "file",
686
+ options: options || {}
687
+ }
688
+ };
689
+ return schema.describe(JSON.stringify(metadata));
690
+ }
691
+ function JSONField(schema) {
692
+ const baseSchema2 = schema ?? zod.z.record(zod.z.string(), zod.z.any());
693
+ const metadata = {
694
+ [FIELD_METADATA_KEY]: {
695
+ type: "json"
696
+ }
697
+ };
698
+ return baseSchema2.describe(JSON.stringify(metadata));
699
+ }
700
+ function GeoPointField() {
701
+ const schema = zod.z.object({
702
+ lon: zod.z.number(),
703
+ lat: zod.z.number()
704
+ });
705
+ const metadata = {
706
+ [FIELD_METADATA_KEY]: {
707
+ type: "geoPoint"
708
+ }
709
+ };
710
+ return schema.describe(JSON.stringify(metadata));
711
+ }
527
712
 
528
713
  // src/utils/permission-templates.ts
529
714
  var PermissionTemplates = {
@@ -2144,6 +2329,28 @@ function isAuthCollection(fields) {
2144
2329
  return hasEmail && hasPassword;
2145
2330
  }
2146
2331
  function buildFieldDefinition(fieldName, zodType) {
2332
+ const fieldMetadata = extractFieldMetadata(zodType.description);
2333
+ if (fieldMetadata) {
2334
+ const required2 = isFieldRequired(zodType);
2335
+ const fieldDef2 = {
2336
+ name: fieldName,
2337
+ type: fieldMetadata.type,
2338
+ required: required2,
2339
+ options: fieldMetadata.options
2340
+ };
2341
+ if (fieldMetadata.type === "relation") {
2342
+ const relationMetadata2 = extractRelationMetadata(zodType.description);
2343
+ if (relationMetadata2) {
2344
+ fieldDef2.relation = {
2345
+ collection: relationMetadata2.collection,
2346
+ maxSelect: relationMetadata2.maxSelect,
2347
+ minSelect: relationMetadata2.minSelect,
2348
+ cascadeDelete: relationMetadata2.cascadeDelete
2349
+ };
2350
+ }
2351
+ }
2352
+ return fieldDef2;
2353
+ }
2147
2354
  const fieldType = mapZodTypeToPocketBase(zodType, fieldName);
2148
2355
  const required = isFieldRequired(zodType);
2149
2356
  const options = extractFieldOptions(zodType);
@@ -5270,24 +5477,38 @@ async function executeStatus(options) {
5270
5477
  }
5271
5478
  }
5272
5479
 
5480
+ exports.AutodateField = AutodateField;
5273
5481
  exports.BaseMutator = BaseMutator;
5482
+ exports.BoolField = BoolField;
5274
5483
  exports.CLIUsageError = CLIUsageError;
5275
5484
  exports.ConfigurationError = ConfigurationError;
5485
+ exports.DateField = DateField;
5276
5486
  exports.DiffEngine = DiffEngine;
5487
+ exports.EditorField = EditorField;
5488
+ exports.EmailField = EmailField;
5489
+ exports.FIELD_METADATA_KEY = FIELD_METADATA_KEY;
5277
5490
  exports.FIELD_TYPE_INFO = FIELD_TYPE_INFO;
5491
+ exports.FileField = FileField;
5278
5492
  exports.FileSystemError = FileSystemError;
5493
+ exports.FilesField = FilesField;
5494
+ exports.GeoPointField = GeoPointField;
5495
+ exports.JSONField = JSONField;
5279
5496
  exports.MigrationError = MigrationError;
5280
5497
  exports.MigrationGenerationError = MigrationGenerationError;
5281
5498
  exports.MigrationGenerator = MigrationGenerator;
5499
+ exports.NumberField = NumberField;
5282
5500
  exports.POCKETBASE_FIELD_TYPES = POCKETBASE_FIELD_TYPES;
5283
5501
  exports.PermissionTemplates = PermissionTemplates;
5284
5502
  exports.RelationField = RelationField;
5285
5503
  exports.RelationsField = RelationsField;
5286
5504
  exports.SchemaAnalyzer = SchemaAnalyzer;
5287
5505
  exports.SchemaParsingError = SchemaParsingError;
5506
+ exports.SelectField = SelectField;
5288
5507
  exports.SnapshotError = SnapshotError;
5289
5508
  exports.SnapshotManager = SnapshotManager;
5290
5509
  exports.StatusEnum = StatusEnum;
5510
+ exports.TextField = TextField;
5511
+ exports.URLField = URLField;
5291
5512
  exports.aggregateChanges = aggregateChanges;
5292
5513
  exports.baseImageFileSchema = baseImageFileSchema;
5293
5514
  exports.baseSchema = baseSchema;
@@ -5315,6 +5536,7 @@ exports.editorField = editorField;
5315
5536
  exports.emailField = emailField;
5316
5537
  exports.extractComprehensiveFieldOptions = extractComprehensiveFieldOptions;
5317
5538
  exports.extractFieldDefinitions = extractFieldDefinitions;
5539
+ exports.extractFieldMetadata = extractFieldMetadata;
5318
5540
  exports.extractFieldOptions = extractFieldOptions;
5319
5541
  exports.extractIndexes = extractIndexes;
5320
5542
  exports.extractRelationMetadata = extractRelationMetadata;