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.
- package/CHANGELOG.md +7 -0
- package/README.md +209 -24
- package/dist/cli/index.cjs +34 -0
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.cts +3 -1
- package/dist/cli/index.d.ts +3 -1
- package/dist/cli/index.js +34 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/migrate.cjs +34 -0
- package/dist/cli/migrate.cjs.map +1 -1
- package/dist/cli/migrate.js +34 -0
- package/dist/cli/migrate.js.map +1 -1
- package/dist/cli/utils/index.d.cts +3 -1
- package/dist/cli/utils/index.d.ts +3 -1
- package/dist/fields-YjcpBXVp.d.cts +348 -0
- package/dist/fields-YjcpBXVp.d.ts +348 -0
- package/dist/index.cjs +222 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +208 -1
- package/dist/index.js.map +1 -1
- package/dist/migration/analyzer.cjs +34 -0
- package/dist/migration/analyzer.cjs.map +1 -1
- package/dist/migration/analyzer.d.cts +2 -1
- package/dist/migration/analyzer.d.ts +2 -1
- package/dist/migration/analyzer.js +34 -0
- package/dist/migration/analyzer.js.map +1 -1
- package/dist/migration/diff.d.cts +3 -1
- package/dist/migration/diff.d.ts +3 -1
- package/dist/migration/generator.d.cts +3 -1
- package/dist/migration/generator.d.ts +3 -1
- package/dist/migration/index.cjs +36 -0
- package/dist/migration/index.cjs.map +1 -1
- package/dist/migration/index.d.cts +2 -1
- package/dist/migration/index.d.ts +2 -1
- package/dist/migration/index.js +35 -1
- package/dist/migration/index.js.map +1 -1
- package/dist/migration/snapshot.cjs.map +1 -1
- package/dist/migration/snapshot.d.cts +3 -1
- package/dist/migration/snapshot.d.ts +3 -1
- package/dist/migration/snapshot.js.map +1 -1
- package/dist/migration/utils/index.cjs +16 -0
- package/dist/migration/utils/index.cjs.map +1 -1
- package/dist/migration/utils/index.d.cts +2 -2
- package/dist/migration/utils/index.d.ts +2 -2
- package/dist/migration/utils/index.js +15 -1
- package/dist/migration/utils/index.js.map +1 -1
- package/dist/schema.cjs +200 -0
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.d.cts +1 -0
- package/dist/schema.d.ts +1 -0
- package/dist/schema.js +186 -1
- package/dist/schema.js.map +1 -1
- package/dist/{types-z1Dkjg8m.d.ts → types-LFBGHl9Y.d.ts} +2 -2
- package/dist/{types-BbTgmg6H.d.cts → types-mhQXWNi3.d.cts} +2 -2
- 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;
|