@supatype/plugin-sdk 0.1.0-alpha.9

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/dist/loader.js ADDED
@@ -0,0 +1,282 @@
1
+ /**
2
+ * Plugin discovery and loading utilities.
3
+ *
4
+ * The plugin loader scans node_modules for packages with the `supatype-plugin`
5
+ * keyword or a `supatype` field in package.json, and auto-registers them.
6
+ */
7
+ import { PLUGIN_API_VERSION, } from "./types.js";
8
+ import { checkPluginApiVersion, } from "./define.js";
9
+ const registry = new Map();
10
+ /**
11
+ * Register a plugin definition.
12
+ */
13
+ export function registerPlugin(packageName, definition) {
14
+ const meta = definition.meta ?? {
15
+ name: packageName,
16
+ description: "",
17
+ types: [definition.__supatype],
18
+ pluginApi: PLUGIN_API_VERSION,
19
+ };
20
+ const compat = checkPluginApiVersion(meta);
21
+ const plugin = {
22
+ packageName,
23
+ meta,
24
+ definition,
25
+ status: compat.compatible ? "active" : "incompatible",
26
+ ...(compat.message !== undefined ? { incompatibleReason: compat.message } : {}),
27
+ };
28
+ // Check for conflicts
29
+ const existing = registry.get(definition.__supatype === "field"
30
+ ? `field:${definition.name}`
31
+ : definition.__supatype === "provider"
32
+ ? `provider:${definition.category}:${definition.name}`
33
+ : `${definition.__supatype}:${definition.name}`);
34
+ if (existing) {
35
+ console.warn(`[plugins] conflict: "${packageName}" and "${existing.packageName}" both define ` +
36
+ `${definition.__supatype} "${definition.name}". ` +
37
+ `Resolve in supatype.config.ts plugins array.`);
38
+ }
39
+ const key = `${definition.__supatype}:${definition.name}`;
40
+ registry.set(key, plugin);
41
+ return plugin;
42
+ }
43
+ /**
44
+ * Get all registered plugins.
45
+ */
46
+ export function getRegisteredPlugins() {
47
+ return Array.from(registry.values());
48
+ }
49
+ /**
50
+ * Get plugins by type.
51
+ */
52
+ export function getPluginsByType(type) {
53
+ return getRegisteredPlugins().filter(p => p.definition.__supatype === type);
54
+ }
55
+ /**
56
+ * Get a specific field type plugin by name.
57
+ */
58
+ export function getFieldTypePlugin(name) {
59
+ return registry.get(`field:${name}`);
60
+ }
61
+ /**
62
+ * Get a specific provider plugin by category and name.
63
+ */
64
+ export function getProviderPlugin(category, name) {
65
+ return registry.get(`provider:${category}:${name}`);
66
+ }
67
+ /**
68
+ * Clear the plugin registry (for testing).
69
+ */
70
+ export function clearPluginRegistry() {
71
+ registry.clear();
72
+ }
73
+ /**
74
+ * Check if a package.json represents a Supatype plugin.
75
+ */
76
+ export function isSupatypePlugin(pkg) {
77
+ // Has a `supatype` field in package.json
78
+ if (pkg.supatype)
79
+ return true;
80
+ // Has `supatype-plugin` keyword
81
+ if (pkg.keywords?.includes("supatype-plugin"))
82
+ return true;
83
+ return false;
84
+ }
85
+ // ─── Load order ──────────────────────────────────────────────────────────────
86
+ /**
87
+ * Sort plugins by load order: providers first, then fields & composites, then widgets.
88
+ */
89
+ export function sortByLoadOrder(plugins) {
90
+ const order = {
91
+ provider: 0,
92
+ field: 1,
93
+ composite: 2,
94
+ widget: 3,
95
+ };
96
+ return [...plugins].sort((a, b) => {
97
+ const aOrder = order[a.definition.__supatype] ?? 99;
98
+ const bOrder = order[b.definition.__supatype] ?? 99;
99
+ return aOrder - bOrder;
100
+ });
101
+ }
102
+ /**
103
+ * Detect conflicts between a set of plugin definitions.
104
+ */
105
+ export function detectConflicts(plugins) {
106
+ const seen = new Map();
107
+ const conflicts = [];
108
+ for (const p of plugins) {
109
+ const key = `${p.definition.__supatype}:${p.definition.name}`;
110
+ const existing = seen.get(key) ?? [];
111
+ existing.push(p.packageName);
112
+ seen.set(key, existing);
113
+ }
114
+ for (const [key, packages] of seen) {
115
+ if (packages.length > 1) {
116
+ const [type, name] = key.split(":", 2);
117
+ conflicts.push({
118
+ type: type,
119
+ name: name,
120
+ packages,
121
+ message: `Multiple plugins define ${type} "${name}": ${packages.join(", ")}. ` +
122
+ `Resolve by explicitly listing plugins in supatype.config.ts.`,
123
+ });
124
+ }
125
+ }
126
+ return conflicts;
127
+ }
128
+ // ─── Provider validation (Task 11) ──────────────────────────────────────────
129
+ /** Optional methods on each provider category that should trigger warnings, not errors. */
130
+ const OPTIONAL_PROVIDER_METHODS = {
131
+ commerce: ["createSubscription", "cancelSubscription", "getPortalUrl"],
132
+ tracking: ["groupIdentify", "getFeatureFlag"],
133
+ email: ["sendTemplate", "sendBatch"],
134
+ storage: [],
135
+ auth: [],
136
+ ssl: [],
137
+ ai: [],
138
+ search: [],
139
+ "push-notification": [],
140
+ };
141
+ /**
142
+ * Validate configured providers at push time.
143
+ *
144
+ * For each provider:
145
+ * - Checks the definition has a `create()` method
146
+ * - Checks required `configSchema` fields are present in the config
147
+ * - Warns about optional interface methods not implemented
148
+ */
149
+ export function validateProviders(configuredProviders) {
150
+ const warnings = [];
151
+ const errors = [];
152
+ for (const cp of configuredProviders) {
153
+ // Find matching registered provider plugin
154
+ const registered = getRegisteredPlugins().find(p => p.definition.__supatype === "provider" && p.definition.name === cp.name);
155
+ if (!registered) {
156
+ errors.push(`Provider "${cp.name}" is configured but no matching plugin is registered.`);
157
+ continue;
158
+ }
159
+ if (registered.status === "incompatible") {
160
+ errors.push(`Provider "${cp.name}" is incompatible: ${registered.incompatibleReason ?? "unknown reason"}.`);
161
+ continue;
162
+ }
163
+ const def = registered.definition;
164
+ // Check create() method
165
+ if (typeof def.create !== "function") {
166
+ errors.push(`Provider "${cp.name}" definition is missing a create() method.`);
167
+ }
168
+ // Check required configSchema fields are present in config
169
+ if (def.configSchema && cp.config) {
170
+ for (const [key, schema] of Object.entries(def.configSchema)) {
171
+ if (schema.required === true && (cp.config[key] === undefined || cp.config[key] === null)) {
172
+ errors.push(`Provider "${cp.name}" is missing required config field "${key}".`);
173
+ }
174
+ }
175
+ }
176
+ else if (def.configSchema && !cp.config) {
177
+ const requiredFields = Object.entries(def.configSchema)
178
+ .filter(([, s]) => s.required === true)
179
+ .map(([k]) => k);
180
+ if (requiredFields.length > 0) {
181
+ errors.push(`Provider "${cp.name}" has required config fields (${requiredFields.join(", ")}) but no config was provided.`);
182
+ }
183
+ }
184
+ // Warn about optional interface methods
185
+ const optionalMethods = OPTIONAL_PROVIDER_METHODS[def.category] ?? [];
186
+ if (optionalMethods.length > 0 && typeof def.create === "function") {
187
+ for (const method of optionalMethods) {
188
+ // We can only check if the create function produces an instance with
189
+ // the method at runtime, so we note the optional methods as warnings.
190
+ warnings.push(`Provider "${cp.name}" (${def.category}): optional method "${method}" may not be implemented.`);
191
+ }
192
+ }
193
+ }
194
+ return {
195
+ valid: errors.length === 0,
196
+ warnings,
197
+ errors,
198
+ };
199
+ }
200
+ // ─── Plugin field type map (Task 15) ────────────────────────────────────────
201
+ /**
202
+ * Returns a map of custom field type names to their declared `tsType` values
203
+ * from registered field type plugins. Consumed by the engine's type generator.
204
+ */
205
+ export function getPluginFieldTypeMap() {
206
+ const map = new Map();
207
+ for (const plugin of getPluginsByType("field")) {
208
+ if (plugin.status !== "active")
209
+ continue;
210
+ const def = plugin.definition;
211
+ map.set(def.name, def.tsType);
212
+ }
213
+ return map;
214
+ }
215
+ /**
216
+ * Returns a map of custom field type names to their Postgres type and optional
217
+ * constraints. Consumed by the engine's migration system.
218
+ */
219
+ export function getPluginFieldPgTypeMap() {
220
+ const map = new Map();
221
+ for (const plugin of getPluginsByType("field")) {
222
+ if (plugin.status !== "active")
223
+ continue;
224
+ const def = plugin.definition;
225
+ map.set(def.name, {
226
+ pgType: def.pgType,
227
+ ...(def.constraints !== undefined ? { constraints: def.constraints } : {}),
228
+ });
229
+ }
230
+ return map;
231
+ }
232
+ /** Built-in type-to-pgType mapping for common types. */
233
+ const BUILTIN_PG_TYPES = {
234
+ text: "TEXT",
235
+ varchar: "VARCHAR",
236
+ boolean: "BOOLEAN",
237
+ integer: "INTEGER",
238
+ bigint: "BIGINT",
239
+ float: "FLOAT8",
240
+ decimal: "NUMERIC",
241
+ json: "JSONB",
242
+ jsonb: "JSONB",
243
+ date: "DATE",
244
+ timestamp: "TIMESTAMPTZ",
245
+ uuid: "UUID",
246
+ };
247
+ /**
248
+ * Expand registered composite plugins into their concrete field definitions
249
+ * with resolved Postgres types.
250
+ *
251
+ * For each composite field, the type is resolved by:
252
+ * 1. Checking registered plugin field types (from getPluginFieldPgTypeMap)
253
+ * 2. Falling back to built-in type mappings
254
+ * 3. Defaulting to TEXT if no match is found
255
+ */
256
+ export function expandPluginComposites() {
257
+ const result = new Map();
258
+ const pluginFieldPgTypes = getPluginFieldPgTypeMap();
259
+ for (const plugin of getPluginsByType("composite")) {
260
+ if (plugin.status !== "active")
261
+ continue;
262
+ const def = plugin.definition;
263
+ const fields = def.fields.map((f) => {
264
+ // Resolve pgType: plugin fields first, then built-ins, then TEXT fallback
265
+ const pluginPg = pluginFieldPgTypes.get(f.type);
266
+ const pgType = pluginPg?.pgType ?? BUILTIN_PG_TYPES[f.type] ?? "TEXT";
267
+ return {
268
+ name: f.name,
269
+ pgType,
270
+ required: f.required === true,
271
+ ...(f.defaultValue !== undefined ? { defaultValue: f.defaultValue } : {}),
272
+ };
273
+ });
274
+ result.set(def.name, {
275
+ fields,
276
+ ...(def.installSQL !== undefined ? { installSQL: def.installSQL } : {}),
277
+ ...(def.uninstallSQL !== undefined ? { uninstallSQL: def.uninstallSQL } : {}),
278
+ });
279
+ }
280
+ return result;
281
+ }
282
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,341 @@
1
+ /**
2
+ * Core plugin system types for @supatype/plugin-sdk.
3
+ *
4
+ * Every Supatype plugin is an npm package that exports one or more of:
5
+ * - Field type definitions (defineFieldType)
6
+ * - Composite definitions (defineComposite)
7
+ * - Provider implementations (defineProvider)
8
+ * - Widget definitions (defineWidget)
9
+ */
10
+ /** Plugin API version — used for compatibility checking. */
11
+ export declare const PLUGIN_API_VERSION = 1;
12
+ export type PluginType = "field" | "composite" | "provider" | "widget";
13
+ export interface PluginMeta {
14
+ /** Plugin name (npm package name) */
15
+ name: string;
16
+ /** Human-readable description */
17
+ description: string;
18
+ /** Plugin type(s) */
19
+ types: PluginType[];
20
+ /** Plugin API version this plugin targets */
21
+ pluginApi: number;
22
+ /** Minimum compatible Supatype version (semver) */
23
+ supatypeVersion?: string | undefined;
24
+ }
25
+ export interface FieldTypeDefinition<TValue = unknown> {
26
+ /** Unique field type name (e.g., "phone", "currency", "slug") */
27
+ name: string;
28
+ /** Postgres column type (e.g., "TEXT", "JSONB", "INTEGER") */
29
+ pgType: string;
30
+ /** TypeScript type string for code generation (e.g., "string", "number", "PhoneNumber") */
31
+ tsType: string;
32
+ /** Optional default value expression */
33
+ defaultExpression?: string | undefined;
34
+ /** Validate a value — return null if valid, error message if invalid */
35
+ validate?(value: unknown): string | null;
36
+ /** Serialise a TypeScript value to a Postgres-compatible value */
37
+ serialise?(value: TValue): unknown;
38
+ /** Deserialise a Postgres value to a TypeScript value */
39
+ deserialise?(raw: unknown): TValue;
40
+ /** Supported filter operators (default: eq, neq, in) */
41
+ filterOperators?: string[] | undefined;
42
+ /** Path to React widget component (relative to plugin package root) */
43
+ widgetPath?: string | undefined;
44
+ /** Additional Postgres constraints (e.g., CHECK expressions) */
45
+ constraints?: string[] | undefined;
46
+ /** Plugin metadata */
47
+ meta?: PluginMeta | undefined;
48
+ }
49
+ export interface CompositeFieldDef {
50
+ /** Field name */
51
+ name: string;
52
+ /** Built-in or plugin field type */
53
+ type: string;
54
+ /** Whether the field is required */
55
+ required?: boolean | undefined;
56
+ /** Default value */
57
+ defaultValue?: unknown | undefined;
58
+ /** Additional field options */
59
+ options?: Record<string, unknown> | undefined;
60
+ }
61
+ export interface CompositeDefinition {
62
+ /** Unique composite name (e.g., "seo", "address", "social-links") */
63
+ name: string;
64
+ /** Human-readable label for the admin panel */
65
+ label: string;
66
+ /** Fields this composite adds to a model */
67
+ fields: CompositeFieldDef[];
68
+ /** Admin panel grouping — how fields should be displayed */
69
+ adminGroup?: {
70
+ /** Collapsible group? Default: true */
71
+ collapsible?: boolean | undefined;
72
+ /** Default collapsed state? Default: false */
73
+ defaultCollapsed?: boolean | undefined;
74
+ } | undefined;
75
+ /** SQL to execute when the composite is first applied (e.g., trigger creation) */
76
+ installSQL?: string | undefined;
77
+ /** SQL to execute when the composite is removed */
78
+ uninstallSQL?: string | undefined;
79
+ /** Plugin metadata */
80
+ meta?: PluginMeta | undefined;
81
+ }
82
+ export type ProviderCategory = "commerce" | "tracking" | "email" | "storage" | "auth" | "ssl" | "ai" | "search" | "push-notification";
83
+ export interface ProviderDefinition<TConfig = Record<string, unknown>> {
84
+ /** Unique provider name (e.g., "stripe", "posthog", "resend") */
85
+ name: string;
86
+ /** Provider category */
87
+ category: ProviderCategory;
88
+ /** Human-readable label */
89
+ label: string;
90
+ /** Configuration schema — used for validation and Studio settings UI */
91
+ configSchema: Record<string, {
92
+ type: "string" | "number" | "boolean" | "select";
93
+ label: string;
94
+ required?: boolean | undefined;
95
+ default?: unknown | undefined;
96
+ options?: string[] | undefined;
97
+ secret?: boolean | undefined;
98
+ }>;
99
+ /** Create a provider instance from config */
100
+ create(config: TConfig): unknown;
101
+ /** Plugin metadata */
102
+ meta?: PluginMeta | undefined;
103
+ }
104
+ export interface CommerceProvider {
105
+ /** Create or sync a product */
106
+ syncProduct(product: {
107
+ id: string;
108
+ name: string;
109
+ description?: string | undefined;
110
+ active: boolean;
111
+ prices: Array<{
112
+ amount: number;
113
+ currency: string;
114
+ interval?: string | undefined;
115
+ }>;
116
+ }): Promise<{
117
+ externalId: string;
118
+ }>;
119
+ /** Create a checkout session */
120
+ createCheckout(params: {
121
+ customerId?: string | undefined;
122
+ lineItems: Array<{
123
+ priceId: string;
124
+ quantity: number;
125
+ }>;
126
+ successUrl: string;
127
+ cancelUrl: string;
128
+ metadata?: Record<string, string> | undefined;
129
+ }): Promise<{
130
+ url: string;
131
+ sessionId: string;
132
+ }>;
133
+ /** Create a subscription */
134
+ createSubscription?(params: {
135
+ customerId: string;
136
+ priceId: string;
137
+ metadata?: Record<string, string> | undefined;
138
+ }): Promise<{
139
+ subscriptionId: string;
140
+ status: string;
141
+ }>;
142
+ /** Cancel a subscription */
143
+ cancelSubscription?(subscriptionId: string): Promise<void>;
144
+ /** Create a customer portal URL */
145
+ getPortalUrl?(customerId: string, returnUrl: string): Promise<string>;
146
+ /** Handle a webhook payload — returns the parsed event */
147
+ handleWebhook(payload: string, signature: string): Promise<{
148
+ type: string;
149
+ data: unknown;
150
+ }>;
151
+ }
152
+ export interface TrackingProvider {
153
+ /** Capture an event */
154
+ capture(event: {
155
+ distinctId: string;
156
+ eventName: string;
157
+ properties?: Record<string, unknown> | undefined;
158
+ timestamp?: Date | undefined;
159
+ }): Promise<void>;
160
+ /** Identify a user */
161
+ identify(params: {
162
+ distinctId: string;
163
+ properties: Record<string, unknown>;
164
+ }): Promise<void>;
165
+ /** Identify a group */
166
+ groupIdentify?(params: {
167
+ groupType: string;
168
+ groupKey: string;
169
+ properties: Record<string, unknown>;
170
+ }): Promise<void>;
171
+ /** Evaluate a feature flag */
172
+ getFeatureFlag?(params: {
173
+ key: string;
174
+ distinctId: string;
175
+ properties?: Record<string, unknown> | undefined;
176
+ }): Promise<boolean | string>;
177
+ }
178
+ export interface EmailProvider {
179
+ /** Send a single email */
180
+ send(params: {
181
+ to: string | string[];
182
+ subject: string;
183
+ html?: string | undefined;
184
+ text?: string | undefined;
185
+ from?: string | undefined;
186
+ replyTo?: string | undefined;
187
+ headers?: Record<string, string> | undefined;
188
+ }): Promise<{
189
+ messageId: string;
190
+ }>;
191
+ /** Send using a template */
192
+ sendTemplate?(params: {
193
+ to: string | string[];
194
+ templateId: string;
195
+ data: Record<string, unknown>;
196
+ from?: string | undefined;
197
+ }): Promise<{
198
+ messageId: string;
199
+ }>;
200
+ /** Send batch emails */
201
+ sendBatch?(messages: Array<{
202
+ to: string;
203
+ subject: string;
204
+ html?: string | undefined;
205
+ text?: string | undefined;
206
+ }>): Promise<{
207
+ messageIds: string[];
208
+ }>;
209
+ }
210
+ export interface StorageProvider {
211
+ /** Upload a file */
212
+ upload(params: {
213
+ bucket: string;
214
+ path: string;
215
+ body: Uint8Array | ReadableStream;
216
+ contentType?: string | undefined;
217
+ metadata?: Record<string, string> | undefined;
218
+ }): Promise<{
219
+ key: string;
220
+ size: number;
221
+ }>;
222
+ /** Download a file */
223
+ download(params: {
224
+ bucket: string;
225
+ path: string;
226
+ }): Promise<{
227
+ body: ReadableStream;
228
+ contentType: string;
229
+ size: number;
230
+ }>;
231
+ /** Delete a file */
232
+ delete(params: {
233
+ bucket: string;
234
+ path: string;
235
+ }): Promise<void>;
236
+ /** List files in a path */
237
+ list(params: {
238
+ bucket: string;
239
+ prefix?: string | undefined;
240
+ limit?: number | undefined;
241
+ cursor?: string | undefined;
242
+ }): Promise<{
243
+ items: Array<{
244
+ key: string;
245
+ size: number;
246
+ lastModified: Date;
247
+ }>;
248
+ cursor?: string | undefined;
249
+ }>;
250
+ /** Generate a pre-signed URL */
251
+ getSignedUrl(params: {
252
+ bucket: string;
253
+ path: string;
254
+ expiresIn: number;
255
+ operation?: "read" | "write" | undefined;
256
+ }): Promise<string>;
257
+ }
258
+ export interface AuthProvider {
259
+ /** Sign up with email/password */
260
+ signUp(params: {
261
+ email: string;
262
+ password: string;
263
+ metadata?: Record<string, unknown> | undefined;
264
+ }): Promise<{
265
+ userId: string;
266
+ session?: {
267
+ accessToken: string;
268
+ refreshToken: string;
269
+ } | undefined;
270
+ }>;
271
+ /** Sign in with email/password */
272
+ signIn(params: {
273
+ email: string;
274
+ password: string;
275
+ }): Promise<{
276
+ userId: string;
277
+ session: {
278
+ accessToken: string;
279
+ refreshToken: string;
280
+ };
281
+ }>;
282
+ /** Sign out */
283
+ signOut(accessToken: string): Promise<void>;
284
+ /** Refresh a session */
285
+ refreshSession(refreshToken: string): Promise<{
286
+ accessToken: string;
287
+ refreshToken: string;
288
+ }>;
289
+ /** Get user by access token */
290
+ getUser(accessToken: string): Promise<{
291
+ id: string;
292
+ email?: string | undefined;
293
+ metadata: Record<string, unknown>;
294
+ } | null>;
295
+ }
296
+ export interface SSLProvider {
297
+ /** Provision a certificate for a domain */
298
+ provision(domain: string): Promise<{
299
+ status: "provisioning" | "active" | "error";
300
+ message?: string | undefined;
301
+ }>;
302
+ /** Check certificate status */
303
+ checkStatus(domain: string): Promise<{
304
+ status: "provisioning" | "active" | "expired" | "error";
305
+ expiresAt?: Date | undefined;
306
+ }>;
307
+ /** Renew a certificate */
308
+ renew(domain: string): Promise<{
309
+ status: string;
310
+ }>;
311
+ }
312
+ export interface WidgetDefinition {
313
+ /** Unique widget name (e.g., "color-picker", "markdown-editor", "rating-stars") */
314
+ name: string;
315
+ /** Human-readable label */
316
+ label: string;
317
+ /** Compatible field types this widget can be assigned to (e.g., ["text", "varchar"]) */
318
+ compatibleTypes: string[];
319
+ /** Path to React component (relative to plugin package root) */
320
+ componentPath: string;
321
+ /** Optional widget configuration schema */
322
+ configSchema?: Record<string, {
323
+ type: "string" | "number" | "boolean" | "select";
324
+ label: string;
325
+ default?: unknown | undefined;
326
+ }> | undefined;
327
+ /** Plugin metadata */
328
+ meta?: PluginMeta | undefined;
329
+ }
330
+ /** Props passed to widget React components */
331
+ export interface WidgetProps<TValue = unknown> {
332
+ value: TValue | null;
333
+ onChange: (value: TValue | null) => void;
334
+ fieldName: string;
335
+ fieldType: string;
336
+ config: Record<string, unknown>;
337
+ errors: string[];
338
+ disabled?: boolean | undefined;
339
+ placeholder?: string | undefined;
340
+ }
341
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Core plugin system types for @supatype/plugin-sdk.
3
+ *
4
+ * Every Supatype plugin is an npm package that exports one or more of:
5
+ * - Field type definitions (defineFieldType)
6
+ * - Composite definitions (defineComposite)
7
+ * - Provider implementations (defineProvider)
8
+ * - Widget definitions (defineWidget)
9
+ */
10
+ // ─── Plugin Metadata ─────────────────────────────────────────────────────────
11
+ /** Plugin API version — used for compatibility checking. */
12
+ export const PLUGIN_API_VERSION = 1;
13
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,gFAAgF;AAEhF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAA"}