counseling-schema 0.1.1 → 0.1.2

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 +1 @@
1
- {"version":3,"file":"clinic-profile.schema.d.ts","sourceRoot":"","sources":["../src/clinic-profile.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsCxB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqCpC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAIjF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAsC,CAAC;AAC7E,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
1
+ {"version":3,"file":"clinic-profile.schema.d.ts","sourceRoot":"","sources":["../src/clinic-profile.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA4ExB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMrC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAIjF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAoC,CAAC;AAC3E,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
@@ -28,7 +28,9 @@ const geoJsonPointSchema = z.object({
28
28
  ]),
29
29
  });
30
30
  // ─── Create ──────────────────────────────────────────────────────────
31
- export const createClinicProfileSchema = z.object({
31
+ // Unrefined base so the update variant can call `.partial()` — Zod v4
32
+ // throws if `.partial()` runs on an object schema carrying a `.refine()`.
33
+ const clinicProfileBaseSchema = z.object({
32
34
  clinicName: z.string().trim().min(3).max(200),
33
35
  headline: z.string().trim().min(10).max(200),
34
36
  description: z.string().trim().min(20).max(3000),
@@ -55,10 +57,11 @@ export const createClinicProfileSchema = z.object({
55
57
  open: z.string().regex(/^\d{2}:\d{2}$/),
56
58
  close: z.string().regex(/^\d{2}:\d{2}$/),
57
59
  }).optional(),
58
- }).refine((data) => data.feeRangeMin <= data.feeRangeMax, {
60
+ });
61
+ export const createClinicProfileSchema = clinicProfileBaseSchema.refine((data) => data.feeRangeMin <= data.feeRangeMax, {
59
62
  message: "Minimum fee must be less than or equal to maximum fee",
60
63
  path: ["feeRangeMin"],
61
64
  });
62
65
  // ─── Update ──────────────────────────────────────────────────────────
63
- export const updateClinicProfileSchema = createClinicProfileSchema.partial();
66
+ export const updateClinicProfileSchema = clinicProfileBaseSchema.partial();
64
67
  //# sourceMappingURL=clinic-profile.schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clinic-profile.schema.js","sourceRoot":"","sources":["../src/clinic-profile.schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { APPROACH, FACILITY, REVENUE_MODEL } from \"./enums.js\";\nimport { COUNSELING_CATEGORY, ALL_ISSUES } from \"./specializations.js\";\n\n// ─── Sub-schemas ─────────────────────────────────────────────────────\n\nconst specializationSchema = z.object({\n category: z.enum(COUNSELING_CATEGORY),\n issues: z.array(z.enum(ALL_ISSUES)).min(1).max(15),\n});\n\nconst practitionerSchema = z.object({\n name: z.string().trim().min(1).max(100),\n qualifications: z.array(z.string().trim().max(200)).max(5).optional(),\n specializations: z.array(z.string().trim().max(100)).max(10).optional(),\n experienceYears: z.number().int().min(0).max(50).optional(),\n});\n\nconst availabilitySlotSchema = z.object({\n startTime: z.string().regex(/^\\d{2}:\\d{2}$/, \"Must be HH:mm format\"),\n endTime: z.string().regex(/^\\d{2}:\\d{2}$/, \"Must be HH:mm format\"),\n});\n\nconst availabilitySchema = z.object({\n dayOfWeek: z.number().int().min(0).max(6),\n slots: z.array(availabilitySlotSchema).min(1).max(10),\n});\n\nconst geoJsonPointSchema = z.object({\n type: z.literal(\"Point\"),\n coordinates: z.tuple([\n z.number().min(-180).max(180),\n z.number().min(-90).max(90),\n ]),\n});\n\n// ─── Create ──────────────────────────────────────────────────────────\n\nexport const createClinicProfileSchema = z.object({\n clinicName: z.string().trim().min(3).max(200),\n headline: z.string().trim().min(10).max(200),\n description: z.string().trim().min(20).max(3000),\n photos: z.array(z.string().url()).min(1).max(10),\n logo: z.string().url().optional(),\n\n specializations: z.array(specializationSchema).min(1).max(12),\n approaches: z.array(z.enum(APPROACH)).max(10).optional(),\n\n practitioners: z.array(practitionerSchema).max(50).optional(),\n practitionerCount: z.number().int().min(1).max(500),\n yearEstablished: z.number().int().min(1900).max(2030).optional(),\n\n facilities: z.array(z.enum(FACILITY)).optional(),\n languages: z.array(z.string().trim().min(1).max(50)).min(1).max(10),\n\n bookingFee: z.number().int().min(100).max(5_000_000), // paise\n feeRangeMin: z.number().int().min(100).max(10_000_000), // paise — consultation fee range\n feeRangeMax: z.number().int().min(100).max(50_000_000), // paise\n revenueModel: z.enum(REVENUE_MODEL).default(\"commission\"),\n\n availability: z.array(availabilitySchema).min(1).max(7),\n\n location: geoJsonPointSchema,\n locality: z.string().trim().max(200),\n address: z.string().trim().max(500),\n city: z.string().trim().max(100),\n state: z.string().trim().max(100).optional(),\n\n operatingHours: z.object({\n open: z.string().regex(/^\\d{2}:\\d{2}$/),\n close: z.string().regex(/^\\d{2}:\\d{2}$/),\n }).optional(),\n}).refine((data) => data.feeRangeMin <= data.feeRangeMax, {\n message: \"Minimum fee must be less than or equal to maximum fee\",\n path: [\"feeRangeMin\"],\n});\n\nexport type CreateClinicProfileInput = z.infer<typeof createClinicProfileSchema>;\n\n// ─── Update ──────────────────────────────────────────────────────────\n\nexport const updateClinicProfileSchema = createClinicProfileSchema.partial();\nexport type UpdateClinicProfileInput = z.infer<typeof updateClinicProfileSchema>;\n"]}
1
+ {"version":3,"file":"clinic-profile.schema.js","sourceRoot":"","sources":["../src/clinic-profile.schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { APPROACH, FACILITY, REVENUE_MODEL } from \"./enums.js\";\nimport { COUNSELING_CATEGORY, ALL_ISSUES } from \"./specializations.js\";\n\n// ─── Sub-schemas ─────────────────────────────────────────────────────\n\nconst specializationSchema = z.object({\n category: z.enum(COUNSELING_CATEGORY),\n issues: z.array(z.enum(ALL_ISSUES)).min(1).max(15),\n});\n\nconst practitionerSchema = z.object({\n name: z.string().trim().min(1).max(100),\n qualifications: z.array(z.string().trim().max(200)).max(5).optional(),\n specializations: z.array(z.string().trim().max(100)).max(10).optional(),\n experienceYears: z.number().int().min(0).max(50).optional(),\n});\n\nconst availabilitySlotSchema = z.object({\n startTime: z.string().regex(/^\\d{2}:\\d{2}$/, \"Must be HH:mm format\"),\n endTime: z.string().regex(/^\\d{2}:\\d{2}$/, \"Must be HH:mm format\"),\n});\n\nconst availabilitySchema = z.object({\n dayOfWeek: z.number().int().min(0).max(6),\n slots: z.array(availabilitySlotSchema).min(1).max(10),\n});\n\nconst geoJsonPointSchema = z.object({\n type: z.literal(\"Point\"),\n coordinates: z.tuple([\n z.number().min(-180).max(180),\n z.number().min(-90).max(90),\n ]),\n});\n\n// ─── Create ──────────────────────────────────────────────────────────\n\n// Unrefined base so the update variant can call `.partial()` — Zod v4\n// throws if `.partial()` runs on an object schema carrying a `.refine()`.\nconst clinicProfileBaseSchema = z.object({\n clinicName: z.string().trim().min(3).max(200),\n headline: z.string().trim().min(10).max(200),\n description: z.string().trim().min(20).max(3000),\n photos: z.array(z.string().url()).min(1).max(10),\n logo: z.string().url().optional(),\n\n specializations: z.array(specializationSchema).min(1).max(12),\n approaches: z.array(z.enum(APPROACH)).max(10).optional(),\n\n practitioners: z.array(practitionerSchema).max(50).optional(),\n practitionerCount: z.number().int().min(1).max(500),\n yearEstablished: z.number().int().min(1900).max(2030).optional(),\n\n facilities: z.array(z.enum(FACILITY)).optional(),\n languages: z.array(z.string().trim().min(1).max(50)).min(1).max(10),\n\n bookingFee: z.number().int().min(100).max(5_000_000), // paise\n feeRangeMin: z.number().int().min(100).max(10_000_000), // paise — consultation fee range\n feeRangeMax: z.number().int().min(100).max(50_000_000), // paise\n revenueModel: z.enum(REVENUE_MODEL).default(\"commission\"),\n\n availability: z.array(availabilitySchema).min(1).max(7),\n\n location: geoJsonPointSchema,\n locality: z.string().trim().max(200),\n address: z.string().trim().max(500),\n city: z.string().trim().max(100),\n state: z.string().trim().max(100).optional(),\n\n operatingHours: z.object({\n open: z.string().regex(/^\\d{2}:\\d{2}$/),\n close: z.string().regex(/^\\d{2}:\\d{2}$/),\n }).optional(),\n});\n\nexport const createClinicProfileSchema = clinicProfileBaseSchema.refine(\n (data) => data.feeRangeMin <= data.feeRangeMax,\n {\n message: \"Minimum fee must be less than or equal to maximum fee\",\n path: [\"feeRangeMin\"],\n },\n);\n\nexport type CreateClinicProfileInput = z.infer<typeof createClinicProfileSchema>;\n\n// ─── Update ──────────────────────────────────────────────────────────\n\nexport const updateClinicProfileSchema = clinicProfileBaseSchema.partial();\nexport type UpdateClinicProfileInput = z.infer<typeof updateClinicProfileSchema>;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "counseling-schema",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Shared Zod schemas for the Counseling service — single source of truth for API contracts, validation, and TypeScript types.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",