geo-semantic-layer 2.0.1

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.
@@ -0,0 +1,402 @@
1
+ import { z } from 'zod';
2
+
3
+ // src/core/schemas/organization.ts
4
+ var PostalAddressSchema = z.object({
5
+ "@type": z.literal("PostalAddress").default("PostalAddress"),
6
+ streetAddress: z.string().optional(),
7
+ addressLocality: z.string().optional(),
8
+ addressRegion: z.string().optional(),
9
+ postalCode: z.string().optional(),
10
+ addressCountry: z.string().length(2).optional()
11
+ // ISO 3166-1 alpha-2
12
+ });
13
+ var ContactPointSchema = z.object({
14
+ "@type": z.literal("ContactPoint").default("ContactPoint"),
15
+ telephone: z.string().optional(),
16
+ email: z.string().email().optional(),
17
+ contactType: z.enum(["customer service", "technical support", "sales", "billing"]).optional(),
18
+ areaServed: z.string().optional(),
19
+ availableLanguage: z.array(z.string()).optional()
20
+ });
21
+ var OrganizationSchema = z.object({
22
+ "@context": z.literal("https://schema.org").default("https://schema.org"),
23
+ "@type": z.literal("Organization").default("Organization"),
24
+ // Required fields
25
+ name: z.string().min(1, "Organization name is required"),
26
+ url: z.string().url("Must be a valid URL"),
27
+ // Recommended fields
28
+ logo: z.string().url("Logo must be a valid URL").optional(),
29
+ image: z.string().url("Image must be a valid URL").optional(),
30
+ description: z.string().min(10, "Description should be at least 10 characters").optional(),
31
+ /**
32
+ * CRITICAL for GEO: Entity disambiguation
33
+ * Should include at least one social profile or authority ID (Wikidata, Wikipedia, etc.)
34
+ */
35
+ sameAs: z.array(z.string().url()).min(1, "At least one sameAs URL is required for entity disambiguation").describe("Social profiles, Wikidata ID, Wikipedia URL for entity disambiguation"),
36
+ // Contact information
37
+ email: z.string().email().optional(),
38
+ telephone: z.string().optional(),
39
+ address: PostalAddressSchema.optional(),
40
+ contactPoint: z.union([ContactPointSchema, z.array(ContactPointSchema)]).optional(),
41
+ // Additional information
42
+ alternateName: z.string().optional(),
43
+ foundingDate: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Must be in YYYY-MM-DD format").optional(),
44
+ founder: z.array(z.string()).optional(),
45
+ // Relationships
46
+ parentOrganization: z.string().optional(),
47
+ subOrganization: z.array(z.string()).optional()
48
+ });
49
+ var PersonSchema = z.object({
50
+ "@context": z.literal("https://schema.org").default("https://schema.org"),
51
+ "@type": z.literal("Person").default("Person"),
52
+ // Required fields
53
+ name: z.string().min(1, "Person name is required"),
54
+ url: z.string().url("Must be a valid URL").optional(),
55
+ // Recommended fields
56
+ image: z.string().url("Image must be a valid URL").optional(),
57
+ description: z.string().min(10, "Description should be at least 10 characters").optional(),
58
+ /**
59
+ * CRITICAL for GEO: Entity disambiguation
60
+ * Should include social profiles, Wikidata ID, Wikipedia URL, etc.
61
+ */
62
+ sameAs: z.array(z.string().url()).min(1, "At least one sameAs URL is required for entity disambiguation").describe("Social profiles, Wikidata ID, Wikipedia URL for entity disambiguation"),
63
+ // Contact information
64
+ email: z.string().email().optional(),
65
+ telephone: z.string().optional(),
66
+ address: PostalAddressSchema.optional(),
67
+ // Professional information
68
+ jobTitle: z.string().optional(),
69
+ worksFor: z.object({
70
+ "@type": z.literal("Organization"),
71
+ name: z.string(),
72
+ url: z.string().url().optional()
73
+ }).optional(),
74
+ // Additional information
75
+ alternateName: z.string().optional(),
76
+ birthDate: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Must be in YYYY-MM-DD format").optional(),
77
+ nationality: z.string().optional(),
78
+ // Relationships
79
+ colleague: z.array(z.string()).optional(),
80
+ alumniOf: z.string().optional()
81
+ });
82
+ var OfferSchema = z.object({
83
+ "@type": z.literal("Offer").default("Offer"),
84
+ price: z.union([z.string(), z.number()]),
85
+ priceCurrency: z.string().length(3),
86
+ // ISO 4217 currency code
87
+ availability: z.string().url().optional().describe("e.g., https://schema.org/InStock"),
88
+ url: z.string().url().optional(),
89
+ priceValidUntil: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
90
+ seller: z.object({
91
+ "@type": z.literal("Organization"),
92
+ name: z.string()
93
+ }).optional()
94
+ });
95
+ var AggregateRatingSchema = z.object({
96
+ "@type": z.literal("AggregateRating").default("AggregateRating"),
97
+ ratingValue: z.union([z.string(), z.number()]),
98
+ reviewCount: z.number().int().positive(),
99
+ bestRating: z.union([z.string(), z.number()]).optional().default(5),
100
+ worstRating: z.union([z.string(), z.number()]).optional().default(1)
101
+ });
102
+ var ReviewSchema = z.object({
103
+ "@type": z.literal("Review").default("Review"),
104
+ author: z.object({
105
+ "@type": z.literal("Person"),
106
+ name: z.string()
107
+ }),
108
+ datePublished: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
109
+ reviewBody: z.string().min(10),
110
+ reviewRating: z.object({
111
+ "@type": z.literal("Rating"),
112
+ ratingValue: z.union([z.string(), z.number()]),
113
+ bestRating: z.union([z.string(), z.number()]).optional().default(5)
114
+ })
115
+ });
116
+ var ProductSchema = z.object({
117
+ "@context": z.literal("https://schema.org").default("https://schema.org"),
118
+ "@type": z.literal("Product").default("Product"),
119
+ // Required fields
120
+ name: z.string().min(1, "Product name is required"),
121
+ // Recommended fields
122
+ image: z.union([z.string().url(), z.array(z.string().url())]).optional(),
123
+ description: z.string().min(10, "Description should be at least 10 characters").optional(),
124
+ // SKU or other identifiers
125
+ sku: z.string().optional(),
126
+ gtin: z.string().optional(),
127
+ gtin8: z.string().optional(),
128
+ gtin12: z.string().optional(),
129
+ gtin13: z.string().optional(),
130
+ gtin14: z.string().optional(),
131
+ mpn: z.string().optional(),
132
+ // Brand
133
+ brand: z.object({
134
+ "@type": z.literal("Brand"),
135
+ name: z.string()
136
+ }).optional(),
137
+ // Offers (pricing)
138
+ offers: z.union([OfferSchema, z.array(OfferSchema)]).optional(),
139
+ // Ratings and Reviews
140
+ aggregateRating: AggregateRatingSchema.optional(),
141
+ review: z.union([ReviewSchema, z.array(ReviewSchema)]).optional(),
142
+ // Additional information
143
+ category: z.string().optional(),
144
+ color: z.union([z.string(), z.array(z.string())]).optional(),
145
+ material: z.string().optional(),
146
+ manufacturer: z.object({
147
+ "@type": z.literal("Organization"),
148
+ name: z.string()
149
+ }).optional()
150
+ });
151
+ var ArticleSchema = z.object({
152
+ "@context": z.literal("https://schema.org").default("https://schema.org"),
153
+ "@type": z.enum(["Article", "NewsArticle", "BlogPosting", "TechArticle"]).default("Article"),
154
+ // Required fields
155
+ headline: z.string().min(1).max(110, "Headline should be less than 110 characters for optimal SEO"),
156
+ image: z.union([z.string().url(), z.array(z.string().url())]),
157
+ // Recommended fields
158
+ author: z.union([
159
+ z.object({
160
+ "@type": z.enum(["Person", "Organization"]),
161
+ name: z.string(),
162
+ url: z.string().url().optional()
163
+ }),
164
+ z.array(
165
+ z.object({
166
+ "@type": z.enum(["Person", "Organization"]),
167
+ name: z.string(),
168
+ url: z.string().url().optional()
169
+ })
170
+ )
171
+ ]).describe("Author(s) of the article"),
172
+ datePublished: z.string().regex(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}Z)?$/, "Must be ISO 8601 format"),
173
+ dateModified: z.string().regex(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}Z)?$/, "Must be ISO 8601 format").optional(),
174
+ // Publisher (recommended for Google News)
175
+ publisher: z.object({
176
+ "@type": z.literal("Organization"),
177
+ name: z.string(),
178
+ logo: z.object({
179
+ "@type": z.literal("ImageObject"),
180
+ url: z.string().url(),
181
+ width: z.number().optional(),
182
+ height: z.number().optional()
183
+ }).optional()
184
+ }).optional(),
185
+ // Content
186
+ description: z.string().min(10).optional(),
187
+ articleBody: z.string().min(50, "Article body should be at least 50 characters").optional(),
188
+ wordCount: z.number().int().positive().optional(),
189
+ // Additional metadata
190
+ url: z.string().url().optional(),
191
+ mainEntityOfPage: z.string().url().optional(),
192
+ keywords: z.union([z.string(), z.array(z.string())]).optional(),
193
+ articleSection: z.string().optional(),
194
+ inLanguage: z.string().optional()
195
+ });
196
+ var BlogPostingSchema = ArticleSchema.extend({
197
+ "@type": z.literal("BlogPosting").default("BlogPosting")
198
+ });
199
+ var NewsArticleSchema = ArticleSchema.extend({
200
+ "@type": z.literal("NewsArticle").default("NewsArticle"),
201
+ dateline: z.string().optional()
202
+ });
203
+ var QuestionSchema = z.object({
204
+ "@type": z.literal("Question").default("Question"),
205
+ name: z.string().min(1, "Question text is required"),
206
+ acceptedAnswer: z.object({
207
+ "@type": z.literal("Answer").default("Answer"),
208
+ text: z.string().min(1, "Answer text is required")
209
+ })
210
+ });
211
+ var FAQPageSchema = z.object({
212
+ "@context": z.literal("https://schema.org").default("https://schema.org"),
213
+ "@type": z.literal("FAQPage").default("FAQPage"),
214
+ mainEntity: z.array(QuestionSchema).min(1, "At least one question is required for FAQ").describe("Array of questions and answers")
215
+ });
216
+ var ListItemSchema = z.object({
217
+ "@type": z.literal("ListItem").default("ListItem"),
218
+ position: z.number().int().positive(),
219
+ name: z.string().min(1),
220
+ item: z.string().url().optional()
221
+ });
222
+ var BreadcrumbListSchema = z.object({
223
+ "@context": z.literal("https://schema.org").default("https://schema.org"),
224
+ "@type": z.literal("BreadcrumbList").default("BreadcrumbList"),
225
+ itemListElement: z.array(ListItemSchema).min(2, "Breadcrumb list must have at least 2 items").describe("Ordered list of breadcrumb items")
226
+ });
227
+ var WebPageSchema = z.object({
228
+ "@context": z.literal("https://schema.org").default("https://schema.org"),
229
+ "@type": z.literal("WebPage").default("WebPage"),
230
+ name: z.string().min(1),
231
+ description: z.string().min(10).optional(),
232
+ url: z.string().url(),
233
+ // Optional fields
234
+ inLanguage: z.string().optional(),
235
+ isPartOf: z.object({
236
+ "@type": z.literal("WebSite"),
237
+ name: z.string(),
238
+ url: z.string().url()
239
+ }).optional(),
240
+ breadcrumb: z.object({
241
+ "@type": z.literal("BreadcrumbList")
242
+ }).optional(),
243
+ datePublished: z.string().regex(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}Z)?$/).optional(),
244
+ dateModified: z.string().regex(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}Z)?$/).optional(),
245
+ author: z.object({
246
+ "@type": z.enum(["Person", "Organization"]),
247
+ name: z.string()
248
+ }).optional()
249
+ });
250
+ var OpenGraphSchema = z.object({
251
+ title: z.string().min(1).max(60, "Title should be less than 60 characters for optimal display"),
252
+ description: z.string().min(1).max(160, "Description should be less than 160 characters"),
253
+ url: z.string().url(),
254
+ type: z.enum(["website", "article", "product", "book", "profile", "music", "video"]).default("website"),
255
+ image: z.string().url(),
256
+ imageAlt: z.string().optional(),
257
+ siteName: z.string().optional(),
258
+ locale: z.string().default("en_US"),
259
+ // Article-specific
260
+ publishedTime: z.string().optional(),
261
+ modifiedTime: z.string().optional(),
262
+ author: z.string().optional(),
263
+ section: z.string().optional(),
264
+ tags: z.array(z.string()).optional(),
265
+ // Product-specific
266
+ price: z.union([z.string(), z.number()]).optional(),
267
+ currency: z.string().length(3).optional()
268
+ });
269
+ var TwitterCardSchema = z.object({
270
+ card: z.enum(["summary", "summary_large_image", "app", "player"]).default("summary_large_image"),
271
+ site: z.string().optional(),
272
+ // @username
273
+ creator: z.string().optional(),
274
+ // @username
275
+ title: z.string().min(1).max(70, "Twitter title should be less than 70 characters"),
276
+ description: z.string().min(1).max(200, "Twitter description should be less than 200 characters"),
277
+ image: z.string().url(),
278
+ imageAlt: z.string().optional()
279
+ });
280
+ var GeoCoordinatesSchema = z.object({
281
+ "@type": z.literal("GeoCoordinates").default("GeoCoordinates"),
282
+ latitude: z.number().min(-90).max(90),
283
+ longitude: z.number().min(-180).max(180)
284
+ });
285
+ var OpeningHoursSchema = z.object({
286
+ "@type": z.literal("OpeningHoursSpecification").default("OpeningHoursSpecification"),
287
+ dayOfWeek: z.union([
288
+ z.enum(["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]),
289
+ z.array(z.enum(["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]))
290
+ ]),
291
+ opens: z.string().regex(/^([01]\d|2[0-3]):([0-5]\d)$/, "Must be in HH:MM format"),
292
+ closes: z.string().regex(/^([01]\d|2[0-3]):([0-5]\d)$/, "Must be in HH:MM format")
293
+ });
294
+ var LocalBusinessSchema = z.object({
295
+ "@context": z.literal("https://schema.org").default("https://schema.org"),
296
+ "@type": z.string().default("LocalBusiness"),
297
+ // Can be Restaurant, Store, etc.
298
+ // Required
299
+ name: z.string().min(1, "Business name is required"),
300
+ image: z.union([z.string().url(), z.array(z.string().url())]),
301
+ address: PostalAddressSchema,
302
+ // Recommended
303
+ "@id": z.string().url().optional(),
304
+ url: z.string().url().optional(),
305
+ telephone: z.string().optional(),
306
+ priceRange: z.string().optional(),
307
+ // e.g., "$$"
308
+ // Location
309
+ geo: GeoCoordinatesSchema.optional(),
310
+ // Opening hours
311
+ openingHoursSpecification: z.union([
312
+ OpeningHoursSchema,
313
+ z.array(OpeningHoursSchema)
314
+ ]).optional(),
315
+ // Ratings
316
+ aggregateRating: z.object({
317
+ "@type": z.literal("AggregateRating"),
318
+ ratingValue: z.union([z.string(), z.number()]),
319
+ reviewCount: z.number().int().positive()
320
+ }).optional(),
321
+ // Additional info
322
+ description: z.string().min(10).optional(),
323
+ servesCuisine: z.union([z.string(), z.array(z.string())]).optional(),
324
+ // For restaurants
325
+ menu: z.string().url().optional(),
326
+ // For restaurants
327
+ acceptsReservations: z.union([z.boolean(), z.string()]).optional(),
328
+ paymentAccepted: z.string().optional()
329
+ });
330
+ var PlaceSchema = z.object({
331
+ "@type": z.literal("Place").default("Place"),
332
+ name: z.string(),
333
+ address: z.union([
334
+ z.string(),
335
+ z.object({
336
+ "@type": z.literal("PostalAddress"),
337
+ streetAddress: z.string().optional(),
338
+ addressLocality: z.string().optional(),
339
+ addressRegion: z.string().optional(),
340
+ postalCode: z.string().optional(),
341
+ addressCountry: z.string().optional()
342
+ })
343
+ ]).optional()
344
+ });
345
+ var EventOfferSchema = z.object({
346
+ "@type": z.literal("Offer").default("Offer"),
347
+ url: z.string().url().optional(),
348
+ price: z.union([z.string(), z.number()]),
349
+ priceCurrency: z.string().length(3),
350
+ availability: z.string().url().optional(),
351
+ validFrom: z.string().optional()
352
+ });
353
+ var EventSchema = z.object({
354
+ "@context": z.literal("https://schema.org").default("https://schema.org"),
355
+ "@type": z.enum(["Event", "MusicEvent", "BusinessEvent", "SportsEvent", "TheaterEvent", "EducationEvent"]).default("Event"),
356
+ // Required
357
+ name: z.string().min(1, "Event name is required"),
358
+ startDate: z.string().regex(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}[+-]\d{2}:\d{2})?$/, "Must be ISO 8601 format"),
359
+ // Recommended
360
+ endDate: z.string().regex(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}[+-]\d{2}:\d{2})?$/, "Must be ISO 8601 format").optional(),
361
+ eventStatus: z.enum([
362
+ "https://schema.org/EventScheduled",
363
+ "https://schema.org/EventCancelled",
364
+ "https://schema.org/EventMovedOnline",
365
+ "https://schema.org/EventPostponed",
366
+ "https://schema.org/EventRescheduled"
367
+ ]).optional(),
368
+ eventAttendanceMode: z.enum([
369
+ "https://schema.org/OfflineEventAttendanceMode",
370
+ "https://schema.org/OnlineEventAttendanceMode",
371
+ "https://schema.org/MixedEventAttendanceMode"
372
+ ]).optional(),
373
+ location: z.union([PlaceSchema, z.string().url()]).optional(),
374
+ // Can be Place or VirtualLocation URL
375
+ image: z.union([z.string().url(), z.array(z.string().url())]).optional(),
376
+ description: z.string().min(10).optional(),
377
+ // Organizer
378
+ organizer: z.object({
379
+ "@type": z.enum(["Organization", "Person"]),
380
+ name: z.string(),
381
+ url: z.string().url().optional()
382
+ }).optional(),
383
+ // Performer
384
+ performer: z.union([
385
+ z.object({
386
+ "@type": z.enum(["Person", "PerformingGroup"]),
387
+ name: z.string()
388
+ }),
389
+ z.array(z.object({
390
+ "@type": z.enum(["Person", "PerformingGroup"]),
391
+ name: z.string()
392
+ }))
393
+ ]).optional(),
394
+ // Offers (tickets)
395
+ offers: z.union([EventOfferSchema, z.array(EventOfferSchema)]).optional(),
396
+ // Additional
397
+ url: z.string().url().optional()
398
+ });
399
+
400
+ export { AggregateRatingSchema, ArticleSchema, BlogPostingSchema, BreadcrumbListSchema, ContactPointSchema, EventOfferSchema, EventSchema, FAQPageSchema, GeoCoordinatesSchema, ListItemSchema, LocalBusinessSchema, NewsArticleSchema, OfferSchema, OpenGraphSchema, OpeningHoursSchema, OrganizationSchema, PersonSchema, PlaceSchema, PostalAddressSchema, ProductSchema, QuestionSchema, ReviewSchema, TwitterCardSchema, WebPageSchema };
401
+ //# sourceMappingURL=index.js.map
402
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/schemas/organization.ts","../../src/core/schemas/person.ts","../../src/core/schemas/product.ts","../../src/core/schemas/article.ts","../../src/core/schemas/faq.ts","../../src/core/schemas/breadcrumb.ts","../../src/core/schemas/webpage.ts","../../src/core/schemas/opengraph.ts","../../src/core/schemas/localbusiness.ts","../../src/core/schemas/event.ts"],"names":["z"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Zod schema validation for Schema.org Organization type\n * @module schemas/organization\n */\n\nimport { z } from 'zod';\n\n/**\n * Schema.org PostalAddress validation schema\n */\nexport const PostalAddressSchema = z.object({\n '@type': z.literal('PostalAddress').default('PostalAddress'),\n streetAddress: z.string().optional(),\n addressLocality: z.string().optional(),\n addressRegion: z.string().optional(),\n postalCode: z.string().optional(),\n addressCountry: z.string().length(2).optional(), // ISO 3166-1 alpha-2\n});\n\n/**\n * Schema.org ContactPoint validation schema\n */\nexport const ContactPointSchema = z.object({\n '@type': z.literal('ContactPoint').default('ContactPoint'),\n telephone: z.string().optional(),\n email: z.string().email().optional(),\n contactType: z\n .enum(['customer service', 'technical support', 'sales', 'billing'])\n .optional(),\n areaServed: z.string().optional(),\n availableLanguage: z.array(z.string()).optional(),\n});\n\n/**\n * Schema.org Organization validation schema\n *\n * @see https://schema.org/Organization\n * @see https://developers.google.com/search/docs/appearance/structured-data/organization\n */\nexport const OrganizationSchema = z.object({\n '@context': z.literal('https://schema.org').default('https://schema.org'),\n '@type': z.literal('Organization').default('Organization'),\n\n // Required fields\n name: z.string().min(1, 'Organization name is required'),\n url: z.string().url('Must be a valid URL'),\n\n // Recommended fields\n logo: z.string().url('Logo must be a valid URL').optional(),\n image: z.string().url('Image must be a valid URL').optional(),\n description: z.string().min(10, 'Description should be at least 10 characters').optional(),\n\n /**\n * CRITICAL for GEO: Entity disambiguation\n * Should include at least one social profile or authority ID (Wikidata, Wikipedia, etc.)\n */\n sameAs: z\n .array(z.string().url())\n .min(1, 'At least one sameAs URL is required for entity disambiguation')\n .describe('Social profiles, Wikidata ID, Wikipedia URL for entity disambiguation'),\n\n // Contact information\n email: z.string().email().optional(),\n telephone: z.string().optional(),\n address: PostalAddressSchema.optional(),\n contactPoint: z.union([ContactPointSchema, z.array(ContactPointSchema)]).optional(),\n\n // Additional information\n alternateName: z.string().optional(),\n foundingDate: z.string().regex(/^\\d{4}-\\d{2}-\\d{2}$/, 'Must be in YYYY-MM-DD format').optional(),\n founder: z.array(z.string()).optional(),\n\n // Relationships\n parentOrganization: z.string().optional(),\n subOrganization: z.array(z.string()).optional(),\n});\n\n/**\n * TypeScript type inferred from Zod schema\n */\nexport type Organization = z.infer<typeof OrganizationSchema>;\n\n/**\n * Input type for creating Organization schema (before defaults are applied)\n */\nexport type OrganizationInput = z.input<typeof OrganizationSchema>;\n","/**\n * Zod schema validation for Schema.org Person type\n * @module schemas/person\n */\n\nimport { z } from 'zod';\n\nimport { PostalAddressSchema } from './organization.js';\n\n/**\n * Schema.org Person validation schema\n *\n * @see https://schema.org/Person\n * @see https://developers.google.com/search/docs/appearance/structured-data/person\n */\nexport const PersonSchema = z.object({\n '@context': z.literal('https://schema.org').default('https://schema.org'),\n '@type': z.literal('Person').default('Person'),\n\n // Required fields\n name: z.string().min(1, 'Person name is required'),\n url: z.string().url('Must be a valid URL').optional(),\n\n // Recommended fields\n image: z.string().url('Image must be a valid URL').optional(),\n description: z.string().min(10, 'Description should be at least 10 characters').optional(),\n\n /**\n * CRITICAL for GEO: Entity disambiguation\n * Should include social profiles, Wikidata ID, Wikipedia URL, etc.\n */\n sameAs: z\n .array(z.string().url())\n .min(1, 'At least one sameAs URL is required for entity disambiguation')\n .describe('Social profiles, Wikidata ID, Wikipedia URL for entity disambiguation'),\n\n // Contact information\n email: z.string().email().optional(),\n telephone: z.string().optional(),\n address: PostalAddressSchema.optional(),\n\n // Professional information\n jobTitle: z.string().optional(),\n worksFor: z\n .object({\n '@type': z.literal('Organization'),\n name: z.string(),\n url: z.string().url().optional(),\n })\n .optional(),\n\n // Additional information\n alternateName: z.string().optional(),\n birthDate: z.string().regex(/^\\d{4}-\\d{2}-\\d{2}$/, 'Must be in YYYY-MM-DD format').optional(),\n nationality: z.string().optional(),\n\n // Relationships\n colleague: z.array(z.string()).optional(),\n alumniOf: z.string().optional(),\n});\n\n/**\n * TypeScript type inferred from Zod schema\n */\nexport type Person = z.infer<typeof PersonSchema>;\n\n/**\n * Input type for creating Person schema (before defaults are applied)\n */\nexport type PersonInput = z.input<typeof PersonSchema>;\n","/**\n * Zod schema validation for Schema.org Product type\n * @module schemas/product\n */\n\nimport { z } from 'zod';\n\n/**\n * Schema.org Offer validation schema\n */\nexport const OfferSchema = z.object({\n '@type': z.literal('Offer').default('Offer'),\n price: z.union([z.string(), z.number()]),\n priceCurrency: z.string().length(3), // ISO 4217 currency code\n availability: z\n .string()\n .url()\n .optional()\n .describe('e.g., https://schema.org/InStock'),\n url: z.string().url().optional(),\n priceValidUntil: z.string().regex(/^\\d{4}-\\d{2}-\\d{2}$/).optional(),\n seller: z\n .object({\n '@type': z.literal('Organization'),\n name: z.string(),\n })\n .optional(),\n});\n\n/**\n * Schema.org AggregateRating validation schema\n */\nexport const AggregateRatingSchema = z.object({\n '@type': z.literal('AggregateRating').default('AggregateRating'),\n ratingValue: z.union([z.string(), z.number()]),\n reviewCount: z.number().int().positive(),\n bestRating: z.union([z.string(), z.number()]).optional().default(5),\n worstRating: z.union([z.string(), z.number()]).optional().default(1),\n});\n\n/**\n * Schema.org Review validation schema\n */\nexport const ReviewSchema = z.object({\n '@type': z.literal('Review').default('Review'),\n author: z.object({\n '@type': z.literal('Person'),\n name: z.string(),\n }),\n datePublished: z.string().regex(/^\\d{4}-\\d{2}-\\d{2}$/),\n reviewBody: z.string().min(10),\n reviewRating: z.object({\n '@type': z.literal('Rating'),\n ratingValue: z.union([z.string(), z.number()]),\n bestRating: z.union([z.string(), z.number()]).optional().default(5),\n }),\n});\n\n/**\n * Schema.org Product validation schema\n *\n * @see https://schema.org/Product\n * @see https://developers.google.com/search/docs/appearance/structured-data/product\n */\nexport const ProductSchema = z.object({\n '@context': z.literal('https://schema.org').default('https://schema.org'),\n '@type': z.literal('Product').default('Product'),\n\n // Required fields\n name: z.string().min(1, 'Product name is required'),\n\n // Recommended fields\n image: z.union([z.string().url(), z.array(z.string().url())]).optional(),\n description: z.string().min(10, 'Description should be at least 10 characters').optional(),\n\n // SKU or other identifiers\n sku: z.string().optional(),\n gtin: z.string().optional(),\n gtin8: z.string().optional(),\n gtin12: z.string().optional(),\n gtin13: z.string().optional(),\n gtin14: z.string().optional(),\n mpn: z.string().optional(),\n\n // Brand\n brand: z\n .object({\n '@type': z.literal('Brand'),\n name: z.string(),\n })\n .optional(),\n\n // Offers (pricing)\n offers: z.union([OfferSchema, z.array(OfferSchema)]).optional(),\n\n // Ratings and Reviews\n aggregateRating: AggregateRatingSchema.optional(),\n review: z.union([ReviewSchema, z.array(ReviewSchema)]).optional(),\n\n // Additional information\n category: z.string().optional(),\n color: z.union([z.string(), z.array(z.string())]).optional(),\n material: z.string().optional(),\n manufacturer: z\n .object({\n '@type': z.literal('Organization'),\n name: z.string(),\n })\n .optional(),\n});\n\n/**\n * TypeScript type inferred from Zod schema\n */\nexport type Product = z.infer<typeof ProductSchema>;\n\n/**\n * Input type for creating Product schema (before defaults are applied)\n */\nexport type ProductInput = z.input<typeof ProductSchema>;\n\nexport type Offer = z.infer<typeof OfferSchema>;\nexport type AggregateRating = z.infer<typeof AggregateRatingSchema>;\nexport type Review = z.infer<typeof ReviewSchema>;\n","/**\n * Zod schema validation for Schema.org Article type\n * @module schemas/article\n */\n\nimport { z } from 'zod';\n\n/**\n * Schema.org Article validation schema\n *\n * @see https://schema.org/Article\n * @see https://developers.google.com/search/docs/appearance/structured-data/article\n */\nexport const ArticleSchema = z.object({\n '@context': z.literal('https://schema.org').default('https://schema.org'),\n '@type': z\n .enum(['Article', 'NewsArticle', 'BlogPosting', 'TechArticle'])\n .default('Article'),\n\n // Required fields\n headline: z\n .string()\n .min(1)\n .max(110, 'Headline should be less than 110 characters for optimal SEO'),\n image: z.union([z.string().url(), z.array(z.string().url())]),\n\n // Recommended fields\n author: z\n .union([\n z.object({\n '@type': z.enum(['Person', 'Organization']),\n name: z.string(),\n url: z.string().url().optional(),\n }),\n z.array(\n z.object({\n '@type': z.enum(['Person', 'Organization']),\n name: z.string(),\n url: z.string().url().optional(),\n })\n ),\n ])\n .describe('Author(s) of the article'),\n\n datePublished: z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}Z)?$/, 'Must be ISO 8601 format'),\n\n dateModified: z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}Z)?$/, 'Must be ISO 8601 format')\n .optional(),\n\n // Publisher (recommended for Google News)\n publisher: z\n .object({\n '@type': z.literal('Organization'),\n name: z.string(),\n logo: z\n .object({\n '@type': z.literal('ImageObject'),\n url: z.string().url(),\n width: z.number().optional(),\n height: z.number().optional(),\n })\n .optional(),\n })\n .optional(),\n\n // Content\n description: z.string().min(10).optional(),\n articleBody: z.string().min(50, 'Article body should be at least 50 characters').optional(),\n wordCount: z.number().int().positive().optional(),\n\n // Additional metadata\n url: z.string().url().optional(),\n mainEntityOfPage: z.string().url().optional(),\n keywords: z.union([z.string(), z.array(z.string())]).optional(),\n articleSection: z.string().optional(),\n inLanguage: z.string().optional(),\n});\n\n/**\n * Schema.org BlogPosting validation schema (extends Article)\n */\nexport const BlogPostingSchema = ArticleSchema.extend({\n '@type': z.literal('BlogPosting').default('BlogPosting'),\n});\n\n/**\n * Schema.org NewsArticle validation schema (extends Article)\n */\nexport const NewsArticleSchema = ArticleSchema.extend({\n '@type': z.literal('NewsArticle').default('NewsArticle'),\n dateline: z.string().optional(),\n});\n\n/**\n * TypeScript types inferred from Zod schemas\n */\nexport type Article = z.infer<typeof ArticleSchema>;\nexport type ArticleInput = z.input<typeof ArticleSchema>;\nexport type BlogPosting = z.infer<typeof BlogPostingSchema>;\nexport type NewsArticle = z.infer<typeof NewsArticleSchema>;\n","/**\n * Zod schema validation for Schema.org FAQPage type\n * @module schemas/faq\n */\n\nimport { z } from 'zod';\n\n/**\n * Schema.org Question validation schema\n */\nexport const QuestionSchema = z.object({\n '@type': z.literal('Question').default('Question'),\n name: z.string().min(1, 'Question text is required'),\n acceptedAnswer: z.object({\n '@type': z.literal('Answer').default('Answer'),\n text: z.string().min(1, 'Answer text is required'),\n }),\n});\n\n/**\n * Schema.org FAQPage validation schema\n *\n * @see https://schema.org/FAQPage\n * @see https://developers.google.com/search/docs/appearance/structured-data/faqpage\n */\nexport const FAQPageSchema = z.object({\n '@context': z.literal('https://schema.org').default('https://schema.org'),\n '@type': z.literal('FAQPage').default('FAQPage'),\n\n mainEntity: z\n .array(QuestionSchema)\n .min(1, 'At least one question is required for FAQ')\n .describe('Array of questions and answers'),\n});\n\n/**\n * TypeScript types inferred from Zod schemas\n */\nexport type Question = z.infer<typeof QuestionSchema>;\nexport type FAQPage = z.infer<typeof FAQPageSchema>;\nexport type FAQPageInput = z.input<typeof FAQPageSchema>;\n","/**\n * Zod schema validation for Schema.org BreadcrumbList type\n * @module schemas/breadcrumb\n */\n\nimport { z } from 'zod';\n\n/**\n * Schema.org ListItem validation schema\n */\nexport const ListItemSchema = z.object({\n '@type': z.literal('ListItem').default('ListItem'),\n position: z.number().int().positive(),\n name: z.string().min(1),\n item: z.string().url().optional(),\n});\n\n/**\n * Schema.org BreadcrumbList validation schema\n *\n * @see https://schema.org/BreadcrumbList\n * @see https://developers.google.com/search/docs/appearance/structured-data/breadcrumb\n */\nexport const BreadcrumbListSchema = z.object({\n '@context': z.literal('https://schema.org').default('https://schema.org'),\n '@type': z.literal('BreadcrumbList').default('BreadcrumbList'),\n\n itemListElement: z\n .array(ListItemSchema)\n .min(2, 'Breadcrumb list must have at least 2 items')\n .describe('Ordered list of breadcrumb items'),\n});\n\n/**\n * TypeScript types inferred from Zod schemas\n */\nexport type ListItem = z.infer<typeof ListItemSchema>;\nexport type BreadcrumbList = z.infer<typeof BreadcrumbListSchema>;\nexport type BreadcrumbListInput = z.input<typeof BreadcrumbListSchema>;\n","/**\n * Zod schema validation for Schema.org WebPage type\n * @module schemas/webpage\n */\n\nimport { z } from 'zod';\n\n/**\n * Schema.org WebPage validation schema\n *\n * @see https://schema.org/WebPage\n */\nexport const WebPageSchema = z.object({\n '@context': z.literal('https://schema.org').default('https://schema.org'),\n '@type': z.literal('WebPage').default('WebPage'),\n\n name: z.string().min(1),\n description: z.string().min(10).optional(),\n url: z.string().url(),\n\n // Optional fields\n inLanguage: z.string().optional(),\n isPartOf: z\n .object({\n '@type': z.literal('WebSite'),\n name: z.string(),\n url: z.string().url(),\n })\n .optional(),\n breadcrumb: z\n .object({\n '@type': z.literal('BreadcrumbList'),\n })\n .optional(),\n datePublished: z.string().regex(/^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}Z)?$/).optional(),\n dateModified: z.string().regex(/^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}Z)?$/).optional(),\n author: z\n .object({\n '@type': z.enum(['Person', 'Organization']),\n name: z.string(),\n })\n .optional(),\n});\n\n/**\n * TypeScript types inferred from Zod schemas\n */\nexport type WebPage = z.infer<typeof WebPageSchema>;\nexport type WebPageInput = z.input<typeof WebPageSchema>;\n","/**\n * OpenGraph and Twitter Cards metadata generation\n * @module schemas/opengraph\n */\n\nimport { z } from 'zod';\n\n/**\n * OpenGraph meta tag schema\n */\nexport const OpenGraphSchema = z.object({\n title: z.string().min(1).max(60, 'Title should be less than 60 characters for optimal display'),\n description: z.string().min(1).max(160, 'Description should be less than 160 characters'),\n url: z.string().url(),\n type: z.enum(['website', 'article', 'product', 'book', 'profile', 'music', 'video']).default('website'),\n image: z.string().url(),\n imageAlt: z.string().optional(),\n siteName: z.string().optional(),\n locale: z.string().default('en_US'),\n\n // Article-specific\n publishedTime: z.string().optional(),\n modifiedTime: z.string().optional(),\n author: z.string().optional(),\n section: z.string().optional(),\n tags: z.array(z.string()).optional(),\n\n // Product-specific\n price: z.union([z.string(), z.number()]).optional(),\n currency: z.string().length(3).optional(),\n});\n\n/**\n * Twitter Card meta tag schema\n */\nexport const TwitterCardSchema = z.object({\n card: z.enum(['summary', 'summary_large_image', 'app', 'player']).default('summary_large_image'),\n site: z.string().optional(), // @username\n creator: z.string().optional(), // @username\n title: z.string().min(1).max(70, 'Twitter title should be less than 70 characters'),\n description: z.string().min(1).max(200, 'Twitter description should be less than 200 characters'),\n image: z.string().url(),\n imageAlt: z.string().optional(),\n});\n\n/**\n * TypeScript types\n */\nexport type OpenGraph = z.infer<typeof OpenGraphSchema>;\nexport type TwitterCard = z.infer<typeof TwitterCardSchema>;\nexport type OpenGraphInput = z.input<typeof OpenGraphSchema>;\nexport type TwitterCardInput = z.input<typeof TwitterCardSchema>;\n","/**\n * Zod schema validation for Schema.org LocalBusiness type\n * @module schemas/localbusiness\n */\n\nimport { z } from 'zod';\nimport { PostalAddressSchema } from './organization.js';\n\n/**\n * Geographic coordinates schema\n */\nexport const GeoCoordinatesSchema = z.object({\n '@type': z.literal('GeoCoordinates').default('GeoCoordinates'),\n latitude: z.number().min(-90).max(90),\n longitude: z.number().min(-180).max(180),\n});\n\n/**\n * Opening hours specification schema\n */\nexport const OpeningHoursSchema = z.object({\n '@type': z.literal('OpeningHoursSpecification').default('OpeningHoursSpecification'),\n dayOfWeek: z.union([\n z.enum(['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']),\n z.array(z.enum(['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'])),\n ]),\n opens: z.string().regex(/^([01]\\d|2[0-3]):([0-5]\\d)$/, 'Must be in HH:MM format'),\n closes: z.string().regex(/^([01]\\d|2[0-3]):([0-5]\\d)$/, 'Must be in HH:MM format'),\n});\n\n/**\n * Schema.org LocalBusiness validation schema\n *\n * @see https://schema.org/LocalBusiness\n * @see https://developers.google.com/search/docs/appearance/structured-data/local-business\n */\nexport const LocalBusinessSchema = z.object({\n '@context': z.literal('https://schema.org').default('https://schema.org'),\n '@type': z.string().default('LocalBusiness'), // Can be Restaurant, Store, etc.\n\n // Required\n name: z.string().min(1, 'Business name is required'),\n image: z.union([z.string().url(), z.array(z.string().url())]),\n address: PostalAddressSchema,\n\n // Recommended\n '@id': z.string().url().optional(),\n url: z.string().url().optional(),\n telephone: z.string().optional(),\n priceRange: z.string().optional(), // e.g., \"$$\"\n\n // Location\n geo: GeoCoordinatesSchema.optional(),\n\n // Opening hours\n openingHoursSpecification: z.union([\n OpeningHoursSchema,\n z.array(OpeningHoursSchema),\n ]).optional(),\n\n // Ratings\n aggregateRating: z.object({\n '@type': z.literal('AggregateRating'),\n ratingValue: z.union([z.string(), z.number()]),\n reviewCount: z.number().int().positive(),\n }).optional(),\n\n // Additional info\n description: z.string().min(10).optional(),\n servesCuisine: z.union([z.string(), z.array(z.string())]).optional(), // For restaurants\n menu: z.string().url().optional(), // For restaurants\n acceptsReservations: z.union([z.boolean(), z.string()]).optional(),\n paymentAccepted: z.string().optional(),\n});\n\n/**\n * TypeScript types\n */\nexport type LocalBusiness = z.infer<typeof LocalBusinessSchema>;\nexport type LocalBusinessInput = z.input<typeof LocalBusinessSchema>;\nexport type GeoCoordinates = z.infer<typeof GeoCoordinatesSchema>;\nexport type OpeningHours = z.infer<typeof OpeningHoursSchema>;\n","/**\n * Zod schema validation for Schema.org Event type\n * @module schemas/event\n */\n\nimport { z } from 'zod';\n\n/**\n * Schema.org Place (for event location)\n */\nexport const PlaceSchema = z.object({\n '@type': z.literal('Place').default('Place'),\n name: z.string(),\n address: z.union([\n z.string(),\n z.object({\n '@type': z.literal('PostalAddress'),\n streetAddress: z.string().optional(),\n addressLocality: z.string().optional(),\n addressRegion: z.string().optional(),\n postalCode: z.string().optional(),\n addressCountry: z.string().optional(),\n }),\n ]).optional(),\n});\n\n/**\n * Schema.org Offer (for event tickets)\n */\nexport const EventOfferSchema = z.object({\n '@type': z.literal('Offer').default('Offer'),\n url: z.string().url().optional(),\n price: z.union([z.string(), z.number()]),\n priceCurrency: z.string().length(3),\n availability: z.string().url().optional(),\n validFrom: z.string().optional(),\n});\n\n/**\n * Schema.org Event validation schema\n *\n * @see https://schema.org/Event\n * @see https://developers.google.com/search/docs/appearance/structured-data/event\n */\nexport const EventSchema = z.object({\n '@context': z.literal('https://schema.org').default('https://schema.org'),\n '@type': z.enum(['Event', 'MusicEvent', 'BusinessEvent', 'SportsEvent', 'TheaterEvent', 'EducationEvent']).default('Event'),\n\n // Required\n name: z.string().min(1, 'Event name is required'),\n startDate: z.string().regex(/^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}[+-]\\d{2}:\\d{2})?$/, 'Must be ISO 8601 format'),\n\n // Recommended\n endDate: z.string().regex(/^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}[+-]\\d{2}:\\d{2})?$/, 'Must be ISO 8601 format').optional(),\n eventStatus: z.enum([\n 'https://schema.org/EventScheduled',\n 'https://schema.org/EventCancelled',\n 'https://schema.org/EventMovedOnline',\n 'https://schema.org/EventPostponed',\n 'https://schema.org/EventRescheduled',\n ]).optional(),\n eventAttendanceMode: z.enum([\n 'https://schema.org/OfflineEventAttendanceMode',\n 'https://schema.org/OnlineEventAttendanceMode',\n 'https://schema.org/MixedEventAttendanceMode',\n ]).optional(),\n\n location: z.union([PlaceSchema, z.string().url()]).optional(), // Can be Place or VirtualLocation URL\n\n image: z.union([z.string().url(), z.array(z.string().url())]).optional(),\n description: z.string().min(10).optional(),\n\n // Organizer\n organizer: z.object({\n '@type': z.enum(['Organization', 'Person']),\n name: z.string(),\n url: z.string().url().optional(),\n }).optional(),\n\n // Performer\n performer: z.union([\n z.object({\n '@type': z.enum(['Person', 'PerformingGroup']),\n name: z.string(),\n }),\n z.array(z.object({\n '@type': z.enum(['Person', 'PerformingGroup']),\n name: z.string(),\n })),\n ]).optional(),\n\n // Offers (tickets)\n offers: z.union([EventOfferSchema, z.array(EventOfferSchema)]).optional(),\n\n // Additional\n url: z.string().url().optional(),\n});\n\n/**\n * TypeScript types\n */\nexport type Event = z.infer<typeof EventSchema>;\nexport type EventInput = z.input<typeof EventSchema>;\nexport type Place = z.infer<typeof PlaceSchema>;\nexport type EventOffer = z.infer<typeof EventOfferSchema>;\n"]}
package/package.json ADDED
@@ -0,0 +1,97 @@
1
+ {
2
+ "name": "geo-semantic-layer",
3
+ "version": "2.0.1",
4
+ "description": "Framework-agnostic TypeScript library for Generative Engine Optimization (GEO) and structured data automation. Pure functions for JSON-LD generation.",
5
+ "keywords": [
6
+ "seo",
7
+ "geo",
8
+ "generative-engine-optimization",
9
+ "json-ld",
10
+ "schema.org",
11
+ "structured-data",
12
+ "typescript",
13
+ "framework-agnostic",
14
+ "metadata",
15
+ "semantic-web",
16
+ "knowledge-graph",
17
+ "ai",
18
+ "llm",
19
+ "chatgpt",
20
+ "perplexity",
21
+ "universal",
22
+ "zero-dependencies"
23
+ ],
24
+ "homepage": "https://github.com/bdovenbird/semantic-layer#readme",
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "https://github.com/bdovenbird/semantic-layer.git"
28
+ },
29
+ "license": "MIT",
30
+ "author": "Rafael Calderón (BDOvenbird Engineering)",
31
+ "type": "module",
32
+ "exports": {
33
+ ".": {
34
+ "import": "./dist/index.js",
35
+ "types": "./dist/index.d.ts"
36
+ },
37
+ "./schemas": {
38
+ "import": "./dist/schemas/index.js",
39
+ "types": "./dist/schemas/index.d.ts"
40
+ },
41
+ "./generators": {
42
+ "import": "./dist/generators/index.js",
43
+ "types": "./dist/generators/index.d.ts"
44
+ },
45
+ "./geo": {
46
+ "import": "./dist/geo/index.js",
47
+ "types": "./dist/geo/index.d.ts"
48
+ }
49
+ },
50
+ "main": "./dist/index.js",
51
+ "module": "./dist/index.js",
52
+ "types": "./dist/index.d.ts",
53
+ "files": [
54
+ "dist",
55
+ "README.md",
56
+ "CHANGELOG.md",
57
+ "LICENSE"
58
+ ],
59
+ "scripts": {
60
+ "build": "tsup",
61
+ "dev": "tsup --watch",
62
+ "clean": "rm -rf dist *.tsbuildinfo",
63
+ "test": "vitest run",
64
+ "test:watch": "vitest",
65
+ "test:coverage": "vitest run --coverage",
66
+ "typecheck": "tsc --noEmit",
67
+ "lint": "eslint --cache --cache-location ./node_modules/.cache/eslint .",
68
+ "lint:fix": "eslint --cache --cache-location ./node_modules/.cache/eslint . --fix",
69
+ "format": "prettier --write \"**/*.{ts,md,json}\"",
70
+ "format:check": "prettier --check \"**/*.{ts,md,json}\"",
71
+ "prepublishOnly": "npm run build"
72
+ },
73
+ "dependencies": {
74
+ "zod": "^3.22.4"
75
+ },
76
+ "devDependencies": {
77
+ "@types/node": "^20.11.5",
78
+ "@typescript-eslint/eslint-plugin": "^6.19.0",
79
+ "@typescript-eslint/parser": "^6.19.0",
80
+ "@vitest/coverage-v8": "^1.2.1",
81
+ "@vitest/ui": "^1.2.1",
82
+ "eslint": "^8.56.0",
83
+ "eslint-config-prettier": "^9.1.0",
84
+ "eslint-plugin-import": "^2.29.1",
85
+ "prettier": "^3.2.4",
86
+ "tsup": "^8.0.1",
87
+ "typescript": "^5.7.2",
88
+ "vite": "^5.0.12",
89
+ "vitest": "^1.2.1"
90
+ },
91
+ "publishConfig": {
92
+ "access": "public"
93
+ },
94
+ "engines": {
95
+ "node": ">=18.0.0"
96
+ }
97
+ }