@pwfabric/authoring 1.0.0-rc.0 → 1.0.0-rc.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.
- package/README.md +42 -5
- package/dist/define-block.d.ts +3 -4
- package/dist/define-block.js.map +1 -1
- package/dist/define-factory.d.ts +0 -1
- package/dist/define-factory.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.js.map +1 -1
- package/dist/registry.d.ts +0 -1
- package/dist/registry.js.map +1 -1
- package/dist/types.d.ts +14 -5
- package/dist/types.js.map +1 -1
- package/dist/validation.d.ts +0 -1
- package/dist/validation.js.map +1 -1
- package/package.json +27 -21
- package/dist/define-block.d.ts.map +0 -1
- package/dist/define-factory.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/registry.d.ts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/validation.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -1,14 +1,51 @@
|
|
|
1
1
|
# @pwfabric/authoring
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
What you write a pwpack with: `defineBlock()`, `defineFactory()` and
|
|
4
|
+
`defineCapability()`, plus the block registry and prop validation. A block's
|
|
5
|
+
props are inferred from its zod schema. It re-exports `@pwfabric/runtime`.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
4
8
|
|
|
5
9
|
```bash
|
|
6
|
-
pnpm add @pwfabric/authoring
|
|
10
|
+
pnpm add @pwfabric/authoring@rc @pwfabric/runtime@rc @pwfabric/contracts@rc zod@3 react react-dom
|
|
11
|
+
pnpm add -D typescript @types/react
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
ESM only: import it from an ES module (`"type": "module"` or `.mjs`). Node 22+. Peer: `react` 19.
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
import { defineBlock } from '@pwfabric/authoring'
|
|
18
|
+
import { z } from 'zod'
|
|
19
|
+
|
|
20
|
+
export const Quote = defineBlock({
|
|
21
|
+
type: 'customer-quote',
|
|
22
|
+
name: 'Customer quote',
|
|
23
|
+
schema: z.object({ quote: z.string(), author: z.string() }),
|
|
24
|
+
defaultProps: { quote: 'A great product to work with.', author: 'Jane Doe' },
|
|
25
|
+
component: ({ props }) => <blockquote>{props.quote} — {props.author}</blockquote>,
|
|
26
|
+
})
|
|
7
27
|
```
|
|
8
28
|
|
|
9
|
-
|
|
10
|
-
|
|
29
|
+
## Main exports
|
|
30
|
+
|
|
31
|
+
| Export | What it is |
|
|
32
|
+
|--------|------------|
|
|
33
|
+
| `defineBlock`, `validateBlockDefinition`, `createBlockInstance`, `isCustomBlockDefinition` | Blocks — see [defineBlock()](https://pwfabric.com/authoring/define-block) |
|
|
34
|
+
| `defineFactory`, `composeFactoryOutputs`, `wrapInContainer` | Factories — see [defineFactory()](https://pwfabric.com/authoring/define-factory) |
|
|
35
|
+
| `defineCapability`, `CapabilityBuilder` | Capabilities — see [defineCapability()](https://pwfabric.com/authoring/define-capability) |
|
|
36
|
+
| `CustomBlockRegistry`, `createCustomBlockRegistry`, `mergeRegistries` | Block registries |
|
|
37
|
+
| `validateProps`, `validateBlock`, `validateBlockTree`, `formatValidationErrors` | Validation |
|
|
38
|
+
| `CustomBlockOptions`, `SchemaProps`, `CustomBlockDefinition`, `InferBlockProps`, … | Types |
|
|
39
|
+
| everything from `@pwfabric/runtime` | Re-exported |
|
|
40
|
+
|
|
41
|
+
## Entry points
|
|
42
|
+
|
|
43
|
+
| Import | Contents |
|
|
44
|
+
|--------|----------|
|
|
45
|
+
| `@pwfabric/authoring` | Everything above (the only entry point) |
|
|
11
46
|
|
|
12
47
|
## Licence
|
|
13
48
|
|
|
14
|
-
Apache-2.0 — see `LICENSE`.
|
|
49
|
+
Apache-2.0 — see `LICENSE`. No additional conditions, patent grant included. See [licensing](https://pwfabric.com/licence).
|
|
50
|
+
|
|
51
|
+
Part of [PWFabric](https://pwfabric.com) — the engine that renders an app. Source: [github.com/pwfabric/pwfabric](https://github.com/pwfabric/pwfabric).
|
package/dist/define-block.d.ts
CHANGED
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
* })
|
|
20
20
|
* ```
|
|
21
21
|
*/
|
|
22
|
-
import { type
|
|
23
|
-
import type { CustomBlockOptions, CustomBlockDefinition } from './types.js';
|
|
22
|
+
import { type ZodTypeAny } from 'zod';
|
|
23
|
+
import type { CustomBlockOptions, CustomBlockDefinition, SchemaProps } from './types.js';
|
|
24
24
|
/**
|
|
25
25
|
* Define a custom block with type-safe Zod schema validation
|
|
26
26
|
*
|
|
@@ -66,7 +66,7 @@ import type { CustomBlockOptions, CustomBlockDefinition } from './types.js';
|
|
|
66
66
|
* })
|
|
67
67
|
* ```
|
|
68
68
|
*/
|
|
69
|
-
export declare function defineBlock<
|
|
69
|
+
export declare function defineBlock<TSchema extends ZodTypeAny>(options: CustomBlockOptions<TSchema>): CustomBlockDefinition<SchemaProps<TSchema>>;
|
|
70
70
|
/** A reported issue from {@link validateBlockDefinition}. */
|
|
71
71
|
export interface BlockDefinitionIssue {
|
|
72
72
|
field: 'type' | 'name';
|
|
@@ -109,4 +109,3 @@ export declare function createBlockInstance<TProps extends Record<string, unknow
|
|
|
109
109
|
props: TProps;
|
|
110
110
|
children?: typeof children;
|
|
111
111
|
};
|
|
112
|
-
//# sourceMappingURL=define-block.d.ts.map
|
package/dist/define-block.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define-block.js","sourceRoot":"","sources":["../src/define-block.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"define-block.js","sourceRoot":"","sources":["../src/define-block.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * defineBlock API\n *\n * Create type-safe custom block definitions with Zod schemas.\n *\n * @module @pwfabric/authoring/define-block\n *\n * @example\n * ```typescript\n * import { defineBlock } from '@pwfabric/authoring'\n * import { z } from 'zod'\n *\n * export const MyBlock = defineBlock({\n * type: 'my-block',\n * name: 'My Block',\n * schema: z.object({ title: z.string() }),\n * defaultProps: { title: 'Default' },\n * component: ({ props }) => <div>{props.title}</div>\n * })\n * ```\n */\n\nimport { z, type ZodSchema, type ZodTypeAny } from 'zod'\nimport { createElement, type ReactNode } from 'react'\nimport type { CustomBlockOptions, CustomBlockDefinition, SchemaProps } from './types.js'\n\n// ============================================================\n// VALIDATION\n// ============================================================\n\n/**\n * Validate block type identifier\n *\n * Must be kebab-case, 2-50 characters, start with letter.\n */\nfunction validateBlockType(type: string): void {\n if (typeof type !== 'string') {\n throw new Error('Block type must be a string')\n }\n\n if (type.length < 2 || type.length > 50) {\n throw new Error('Block type must be 2-50 characters')\n }\n\n const kebabCaseRegex = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/\n if (!kebabCaseRegex.test(type)) {\n throw new Error(\n `Block type \"${type}\" must be kebab-case (lowercase letters, numbers, hyphens, starting with a letter)`\n )\n }\n\n // Reserved types (core block types)\n const reservedTypes = [\n 'container',\n 'grid',\n 'text',\n 'heading',\n 'button',\n 'image',\n 'form',\n 'input',\n 'link',\n 'icon',\n 'badge',\n 'code',\n 'divider',\n 'list',\n 'table',\n 'avatar',\n 'tooltip',\n 'accordion',\n 'tabs',\n 'dropdown',\n 'modal',\n ]\n\n if (reservedTypes.includes(type)) {\n throw new Error(`Block type \"${type}\" is reserved. Use a unique type for custom blocks.`)\n }\n}\n\n/**\n * field-severity policy — `name` is a COSMETIC display label, NOT the\n * block's identity. It must never be a hard/fatal error: coerce a missing or\n * invalid name to the block `type` and warn. (`type` is the identity and stays\n * HARD — see validateBlockType.) This is the runtime SOFT half of the end-to-end\n * stitch; the authoring/install GATE applies the same policy via\n * validateBlockDefinition() below. Matches the already-tolerant render meta path\n * (installed-block-meta.descriptorToSnapshot), removing the \"valid-but-not-\n * renderable\" divergence where this throw crashed a block at render.\n */\nfunction coerceBlockName(name: unknown, type: string): string {\n if (typeof name === 'string' && name.length >= 1 && name.length <= 100) {\n return name\n }\n console.warn(\n `[pwfabric] block \"${type}\": invalid name (${typeof name}) — falling back to type. ` +\n `Names are cosmetic; fix at authoring, never fatal at render.`\n )\n return type\n}\n\n/**\n * Warn (never throw) when defaultProps don't satisfy the schema.\n * the renderer degrades, it does not crash. A mismatch is an authoring defect\n * to flag, not a render-time fatality (the registry already falls back to\n * defaultProps on a failed parse).\n */\nfunction warnOnSchemaMismatch(\n type: string,\n schema: ZodSchema<unknown>,\n defaultProps: Record<string, unknown>\n): void {\n const result = schema.safeParse(defaultProps)\n if (!result.success) {\n const errors = result.error.errors.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ')\n console.warn(`[pwfabric] block \"${type}\": defaultProps do not match schema (${errors}). Fix at authoring.`)\n }\n}\n\n/**\n * render-degrade fallback: a block whose `component` is missing must\n * not white-screen the canvas. Render a visible placeholder instead of throwing.\n */\nfunction placeholderComponent(type: string): () => ReactNode {\n return function MissingBlock(): ReactNode {\n return createElement(\n 'div',\n {\n 'data-pw-placeholder': type,\n style: {\n padding: '8px 12px',\n border: '1px dashed #c0392b',\n borderRadius: '6px',\n color: '#c0392b',\n font: '12px system-ui, sans-serif',\n },\n },\n `Block \"${type}\" has no component`\n )\n }\n}\n\n// ============================================================\n// DEFINE BLOCK\n// ============================================================\n\n/**\n * Define a custom block with type-safe Zod schema validation\n *\n * Creates a reusable block definition that can be registered with\n * CustomBlockRegistry and used with SurfaceRenderer.\n *\n * @param options - Block definition options\n * @returns A frozen, type-safe custom block definition\n *\n * @example\n * ```typescript\n * import { defineBlock } from '@pwfabric/authoring'\n * import { z } from 'zod'\n *\n * // Define a pricing card block\n * const PricingCard = defineBlock({\n * type: 'pricing-card',\n * name: 'Pricing Card',\n * category: 'content',\n * schema: z.object({\n * title: z.string(),\n * price: z.number(),\n * currency: z.string().default('USD'),\n * features: z.array(z.string()),\n * highlighted: z.boolean().default(false),\n * }),\n * defaultProps: {\n * title: 'Basic Plan',\n * price: 9.99,\n * currency: 'USD',\n * features: ['Feature 1', 'Feature 2'],\n * highlighted: false,\n * },\n * component: ({ props }) => (\n * <div className={props.highlighted ? 'highlighted' : ''}>\n * <h3>{props.title}</h3>\n * <p>{props.currency} {props.price}</p>\n * <ul>\n * {props.features.map((f, i) => <li key={i}>{f}</li>)}\n * </ul>\n * </div>\n * ),\n * })\n * ```\n */\nexport function defineBlock<TSchema extends ZodTypeAny>(\n options: CustomBlockOptions<TSchema>\n): CustomBlockDefinition<SchemaProps<TSchema>> {\n type TProps = SchemaProps<TSchema>\n // the renderer DEGRADES, it never throws. `type` is the identity\n // → HARD (throws). Every other required field falls back + warns so a single\n // malformed block can't white-screen the canvas. The authoring/publish gate is\n // where these are rejected early; render stays graceful.\n validateBlockType(options.type)\n const safeName = coerceBlockName(options.name, options.type)\n\n // schema — missing → passthrough (props pass through unvalidated) + warn.\n let schema = options.schema as ZodSchema<TProps> | undefined\n if (!schema) {\n console.warn(\n `[pwfabric] block \"${options.type}\": no schema — using a passthrough (props unvalidated). ` +\n `Add a schema at authoring; this is degraded render, not a fix.`\n )\n schema = z.object({}).passthrough() as unknown as ZodSchema<TProps>\n }\n\n // defaultProps — missing → {} + warn.\n let defaultProps = options.defaultProps\n if (!defaultProps) {\n console.warn(`[pwfabric] block \"${options.type}\": no defaultProps — using {}.`)\n defaultProps = {} as TProps\n }\n\n // component — missing → visible placeholder + warn (not a thrown white-screen).\n let component = options.component\n if (typeof component !== 'function') {\n console.warn(`[pwfabric] block \"${options.type}\": no component — rendering a placeholder.`)\n component = placeholderComponent(options.type) as typeof options.component\n }\n\n // Defaults vs schema: warn, never throw.\n warnOnSchemaMismatch(options.type, schema, defaultProps)\n\n // Build the definition with defaults\n const definition = {\n type: options.type,\n name: safeName,\n category: options.category ?? 'content',\n icon: options.icon ?? '◆',\n schema,\n defaultProps,\n canHaveChildren: options.canHaveChildren ?? false,\n component,\n // Only include optional properties if they're defined\n ...(options.allowedChildren !== undefined && { allowedChildren: options.allowedChildren }),\n ...(options.allowedParents !== undefined && { allowedParents: options.allowedParents }),\n ...(options.traits !== undefined && { traits: options.traits }),\n ...(options.allowedChildTraits !== undefined && {\n allowedChildTraits: options.allowedChildTraits,\n }),\n ...(options.maxInstances !== undefined && { maxInstances: options.maxInstances }),\n } as CustomBlockDefinition<TProps>\n\n // Return a frozen definition to prevent mutations\n return Object.freeze(definition)\n}\n\n// ============================================================\n// DEFINITION GATE (single-source field policy)\n// ============================================================\n\n/** A reported issue from {@link validateBlockDefinition}. */\nexport interface BlockDefinitionIssue {\n field: 'type' | 'name'\n code: string\n severity: 'error' | 'warning'\n message: string\n}\n\n/**\n * Single source of truth for block-definition field severity, used by\n * the AUTHORING / INSTALL gate (packaging, manifest validation, host\n * install). Non-throwing reporter — the SAME stitch defineBlock applies at\n * runtime, surfaced as structured issues so callers can REJECT identity\n * problems (`type`, severity=error) and merely WARN on cosmetic ones (`name`,\n * severity=warning). Keeping this the one place the policy lives is what makes\n * the treatment identical end-to-end (authoring → install → runtime → render).\n */\nexport function validateBlockDefinition(options: { type?: unknown; name?: unknown }): BlockDefinitionIssue[] {\n const issues: BlockDefinitionIssue[] = []\n // type — block IDENTITY → HARD (error). Mirrors validateBlockType's rules.\n const t = options.type\n if (typeof t !== 'string') {\n issues.push({ field: 'type', code: 'BLOCK_TYPE_NOT_STRING', severity: 'error', message: 'Block type must be a string' })\n } else if (t.length < 2 || t.length > 50) {\n issues.push({ field: 'type', code: 'BLOCK_TYPE_LENGTH', severity: 'error', message: 'Block type must be 2-50 characters' })\n } else if (!/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/.test(t)) {\n issues.push({ field: 'type', code: 'BLOCK_TYPE_FORMAT', severity: 'error', message: `Block type \"${t}\" must be kebab-case` })\n }\n // name — cosmetic label → SOFT (warning). Never blocks; coerced to type at runtime.\n const n = options.name\n if (typeof n !== 'string' || n.length < 1 || n.length > 100) {\n issues.push({ field: 'name', code: 'BLOCK_NAME_INVALID', severity: 'warning', message: 'Block name should be a 1-100 char string; falls back to type' })\n }\n return issues\n}\n\n// ============================================================\n// UTILITY FUNCTIONS\n// ============================================================\n\n/**\n * Check if a value is a custom block definition\n */\nexport function isCustomBlockDefinition(value: unknown): value is CustomBlockDefinition {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const def = value as Partial<CustomBlockDefinition>\n return (\n typeof def.type === 'string' &&\n typeof def.name === 'string' &&\n typeof def.category === 'string' &&\n typeof def.schema === 'object' &&\n typeof def.defaultProps === 'object' &&\n typeof def.component === 'function'\n )\n}\n\n/**\n * Create a block instance from a custom block definition\n *\n * @param definition - The block definition\n * @param id - Unique block ID\n * @param props - Optional props override (merged with defaults)\n * @param children - Optional children blocks\n */\nexport function createBlockInstance<TProps extends Record<string, unknown>>(\n definition: CustomBlockDefinition<TProps>,\n id: string,\n props?: Partial<TProps>,\n children?: readonly { id: string; type: string; props: Record<string, unknown> }[]\n): { id: string; type: string; props: TProps; children?: typeof children } {\n const mergedProps = {\n ...definition.defaultProps,\n ...props,\n } as TProps\n\n // Validate merged props\n const result = definition.schema.safeParse(mergedProps)\n if (!result.success) {\n const errors = result.error.errors.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ')\n throw new Error(`Invalid block props: ${errors}`)\n }\n\n const instance: { id: string; type: string; props: TProps; children?: typeof children } = {\n id,\n type: definition.type,\n props: result.data as TProps,\n }\n\n if (children && children.length > 0) {\n if (!definition.canHaveChildren) {\n throw new Error(`Block type \"${definition.type}\" cannot have children`)\n }\n instance.children = children\n }\n\n return instance\n}\n"]}
|
package/dist/define-factory.d.ts
CHANGED
|
@@ -111,4 +111,3 @@ export declare function composeFactoryOutputs(...factories: readonly (readonly B
|
|
|
111
111
|
* @returns Single container block with children
|
|
112
112
|
*/
|
|
113
113
|
export declare function wrapInContainer(blocks: readonly Block[], containerProps?: Record<string, unknown>): Block;
|
|
114
|
-
//# sourceMappingURL=define-factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define-factory.js","sourceRoot":"","sources":["../src/define-factory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"define-factory.js","sourceRoot":"","sources":["../src/define-factory.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * defineFactory API\n *\n * Create factory functions that generate block compositions.\n *\n * @module @pwfabric/authoring/define-factory\n *\n * @example\n * ```typescript\n * import { defineFactory } from '@pwfabric/authoring'\n * import { z } from 'zod'\n *\n * const MyPageFactory = defineFactory({\n * id: 'my-page',\n * name: 'My Page Factory',\n * configSchema: z.object({\n * title: z.string(),\n * subtitle: z.string().optional(),\n * }),\n * build: (config) => [\n * { type: 'heading', props: { text: config.title, level: 'h1' } },\n * { type: 'text', props: { content: config.subtitle ?? '' } },\n * ]\n * })\n * ```\n */\n\nimport type { ZodSchema } from 'zod'\nimport type { Block } from '@pwfabric/core'\nimport { DEFAULT_BLOCK_LAYOUT } from '@pwfabric/core'\nimport { blockRegistry } from '@pwfabric/runtime/blocks'\nimport type {\n FactoryOptions,\n FactoryDefinition,\n FactoryConfig,\n FactoryValidationResult,\n FactoryValidationError,\n BlockSpec,\n} from './types.js'\n\n// ============================================================\n// ID GENERATION\n// ============================================================\n\nlet idCounter = 0\n\n/**\n * Generate a unique block ID\n */\nfunction generateBlockId(type: string): string {\n idCounter += 1\n return `${type}-${idCounter}-${Date.now().toString(36)}`\n}\n\n/**\n * Reset the ID counter (useful for testing)\n */\nexport function resetIdCounter(): void {\n idCounter = 0\n}\n\n// ============================================================\n// VALIDATION\n// ============================================================\n\n/**\n * Validate factory identifier\n */\nfunction validateFactoryId(id: string): void {\n if (typeof id !== 'string') {\n throw new Error('Factory id must be a string')\n }\n\n if (id.length < 2 || id.length > 50) {\n throw new Error('Factory id must be 2-50 characters')\n }\n\n const kebabCaseRegex = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/\n if (!kebabCaseRegex.test(id)) {\n throw new Error(\n `Factory id \"${id}\" must be kebab-case (lowercase letters, numbers, hyphens, starting with a letter)`\n )\n }\n}\n\n/**\n * Validate factory config against schema\n */\nfunction validateConfig<TConfig extends FactoryConfig>(\n config: unknown,\n schema?: ZodSchema<TConfig>\n): FactoryValidationResult<TConfig> {\n if (!schema) {\n // No schema, accept any config\n return {\n valid: true,\n config: config as TConfig,\n }\n }\n\n const result = schema.safeParse(config)\n if (result.success) {\n return {\n valid: true,\n config: result.data,\n }\n }\n\n const errors: FactoryValidationError[] = result.error.errors.map((e) => ({\n path: e.path.join('.'),\n message: e.message,\n }))\n\n return {\n valid: false,\n errors,\n }\n}\n\n// ============================================================\n// BLOCK SPEC TO BLOCK\n// ============================================================\n\n/**\n * Convert a BlockSpec (without id) to a Block (with id)\n */\nfunction specToBlock(spec: BlockSpec): Block {\n const block: Block = {\n id: generateBlockId(spec.type),\n type: spec.type,\n props: spec.props,\n layout: blockRegistry.get(spec.type)?.defaultLayout ?? DEFAULT_BLOCK_LAYOUT,\n }\n\n if (spec.children && spec.children.length > 0) {\n return {\n ...block,\n children: spec.children.map(specToBlock),\n }\n }\n\n return block\n}\n\n// ============================================================\n// DEFINE FACTORY\n// ============================================================\n\n/**\n * Define a factory function that generates block compositions\n *\n * Factories allow you to create reusable block patterns that can be\n * customized with configuration. They automatically generate unique\n * block IDs and validate configuration against an optional schema.\n *\n * @param options - Factory definition options\n * @returns A frozen factory definition\n *\n * @example\n * ```typescript\n * import { defineFactory } from '@pwfabric/authoring'\n * import { z } from 'zod'\n *\n * // Define a pricing section factory\n * const PricingSectionFactory = defineFactory({\n * id: 'pricing-section',\n * name: 'Pricing Section',\n * description: 'Create a pricing section with multiple tiers',\n * configSchema: z.object({\n * title: z.string(),\n * tiers: z.array(z.object({\n * name: z.string(),\n * price: z.number(),\n * features: z.array(z.string()),\n * })),\n * }),\n * build: (config) => [\n * {\n * type: 'container',\n * props: { direction: 'column', gap: 32 },\n * children: [\n * { type: 'heading', props: { text: config.title, level: 'h2' } },\n * {\n * type: 'grid',\n * props: { columns: config.tiers.length },\n * children: config.tiers.map((tier) => ({\n * type: 'pricing-card',\n * props: {\n * title: tier.name,\n * price: tier.price,\n * features: tier.features,\n * },\n * })),\n * },\n * ],\n * },\n * ],\n * })\n *\n * // Use the factory\n * const blocks = PricingSectionFactory.build({\n * title: 'Choose Your Plan',\n * tiers: [\n * { name: 'Basic', price: 9, features: ['Feature 1'] },\n * { name: 'Pro', price: 29, features: ['Feature 1', 'Feature 2'] },\n * ],\n * })\n * ```\n */\nexport function defineFactory<TConfig extends FactoryConfig = FactoryConfig>(\n options: FactoryOptions<TConfig>\n): FactoryDefinition<TConfig> {\n // Validate required fields\n validateFactoryId(options.id)\n\n if (typeof options.build !== 'function') {\n throw new Error('Factory build function is required')\n }\n\n // Create the build wrapper that converts specs to blocks\n const buildWithIds = (config: TConfig): readonly Block[] => {\n const specs = options.build(config)\n return specs.map(specToBlock)\n }\n\n // Create the validation function\n const validateConfigFn = (config: unknown): FactoryValidationResult<TConfig> => {\n return validateConfig(config, options.configSchema)\n }\n\n const definition = {\n id: options.id,\n name: options.name ?? options.id,\n description: options.description ?? '',\n build: buildWithIds,\n validateConfig: validateConfigFn,\n // Only include configSchema if it's defined\n ...(options.configSchema !== undefined && { configSchema: options.configSchema }),\n } as FactoryDefinition<TConfig>\n\n return Object.freeze(definition)\n}\n\n// ============================================================\n// UTILITY FUNCTIONS\n// ============================================================\n\n/**\n * Check if a value is a factory definition\n */\nexport function isFactoryDefinition(value: unknown): value is FactoryDefinition {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const def = value as Partial<FactoryDefinition>\n return (\n typeof def.id === 'string' &&\n typeof def.name === 'string' &&\n typeof def.build === 'function' &&\n typeof def.validateConfig === 'function'\n )\n}\n\n/**\n * Compose multiple factory outputs into a single block array\n *\n * @param factories - Array of factory output block arrays\n * @returns Combined block array\n */\nexport function composeFactoryOutputs(\n ...factories: readonly (readonly Block[])[]\n): readonly Block[] {\n return factories.flat()\n}\n\n/**\n * Wrap factory output in a container block\n *\n * @param blocks - Factory output blocks\n * @param containerProps - Props for the wrapper container\n * @returns Single container block with children\n */\nexport function wrapInContainer(\n blocks: readonly Block[],\n containerProps: Record<string, unknown> = {}\n): Block {\n return {\n id: generateBlockId('container'),\n type: 'container',\n props: {\n direction: 'column',\n gap: 24,\n ...containerProps,\n },\n layout: blockRegistry.get('container')?.defaultLayout ?? DEFAULT_BLOCK_LAYOUT,\n children: [...blocks],\n }\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
* ```
|
|
30
30
|
*/
|
|
31
31
|
export * from '@pwfabric/runtime';
|
|
32
|
-
export type { CustomBlockOptions, CustomBlockComponentProps, CustomBlockComponent, CustomBlockContext, CustomBlockDefinition, FactoryConfig, BlockSpec, FactoryOptions, FactoryDefinition, FactoryValidationResult, FactoryValidationError, ICustomBlockRegistry, BlockValidationResult, BlockValidationError, PropsValidationResult, InferBlockProps, InferFactoryConfig, InferSchemaProps, } from './types.js';
|
|
32
|
+
export type { CustomBlockOptions, SchemaProps, CustomBlockComponentProps, CustomBlockComponent, CustomBlockContext, CustomBlockDefinition, FactoryConfig, BlockSpec, FactoryOptions, FactoryDefinition, FactoryValidationResult, FactoryValidationError, ICustomBlockRegistry, BlockValidationResult, BlockValidationError, PropsValidationResult, InferBlockProps, InferFactoryConfig, InferSchemaProps, } from './types.js';
|
|
33
33
|
export { defineBlock, isCustomBlockDefinition, createBlockInstance } from './define-block.js';
|
|
34
34
|
export { validateBlockDefinition } from './define-block.js';
|
|
35
35
|
export type { BlockDefinitionIssue } from './define-block.js';
|
|
@@ -37,4 +37,3 @@ export { defineFactory, isFactoryDefinition, composeFactoryOutputs, wrapInContai
|
|
|
37
37
|
export { CapabilityBuilder, defineCapability } from '@pwfabric/contracts';
|
|
38
38
|
export { CustomBlockRegistry, createCustomBlockRegistry, getCustomBlockRegistry, resetGlobalRegistry, mergeRegistries, mergeWithBaseComponents, } from './registry.js';
|
|
39
39
|
export { validateProps, validatePropsWithDefaults, validateBlock, validateBlockTree, createBlockValidator, createPropsValidator, formatValidationErrors, hasErrors, isBlock, isBlockArray, } from './validation.js';
|
|
40
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,wDAAwD;AACxD,cAAc,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,wDAAwD;AACxD,cAAc,mBAAmB,CAAA;AAqCjC,+DAA+D;AAC/D,mBAAmB;AACnB,+DAA+D;AAE/D,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC7F,2DAA2D;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAG3D,+DAA+D;AAC/D,qBAAqB;AACrB,+DAA+D;AAE/D,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,cAAc,GACf,MAAM,qBAAqB,CAAA;AAE5B,+DAA+D;AAC/D,wBAAwB;AACxB,+DAA+D;AAE/D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEzE,+DAA+D;AAC/D,eAAe;AACf,+DAA+D;AAE/D,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,uBAAuB,GACxB,MAAM,eAAe,CAAA;AAEtB,+DAA+D;AAC/D,iBAAiB;AACjB,+DAA+D;AAE/D,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,SAAS,EACT,OAAO,EACP,YAAY,GACb,MAAM,iBAAiB,CAAA","sourcesContent":["/**\n * @pwfabric/authoring\n *\n * The surface a pack author writes against: define a block, compose a factory,\n * declare a capability, register and validate what you built.\n *\n * It holds no HTTP client: talking to a hosting service is that service's\n * own package. The scaffolding templates in the authoring tooling emit\n * `import { defineBlock } from ...`, so this is the module name a third-party\n * author reads first.\n *\n * @module @pwfabric/authoring\n *\n * @example\n * ```typescript\n * import { defineBlock, createCustomBlockRegistry } from '@pwfabric/authoring'\n * import { z } from 'zod'\n *\n * const MyBlock = defineBlock({\n * type: 'my-block',\n * name: 'My Block',\n * schema: z.object({ title: z.string() }),\n * defaultProps: { title: 'Default' },\n * component: ({ props }) => <div>{props.title}</div>\n * })\n *\n * const registry = createCustomBlockRegistry()\n * registry.register(MyBlock)\n * ```\n */\n\n// Re-export runtime (which includes core and contracts)\nexport * from '@pwfabric/runtime'\n\n// ============================================================\n// TYPES\n// ============================================================\n\nexport type {\n // Custom block types\n CustomBlockOptions,\n SchemaProps,\n CustomBlockComponentProps,\n CustomBlockComponent,\n CustomBlockContext,\n CustomBlockDefinition,\n\n // Factory types\n FactoryConfig,\n BlockSpec,\n FactoryOptions,\n FactoryDefinition,\n FactoryValidationResult,\n FactoryValidationError,\n\n // Registry types\n ICustomBlockRegistry,\n\n // Validation types\n BlockValidationResult,\n BlockValidationError,\n PropsValidationResult,\n\n // Utility types\n InferBlockProps,\n InferFactoryConfig,\n InferSchemaProps,\n} from './types.js'\n\n// ============================================================\n// DEFINE BLOCK API\n// ============================================================\n\nexport { defineBlock, isCustomBlockDefinition, createBlockInstance } from './define-block.js'\n// single-source field-severity gate for authoring/install.\nexport { validateBlockDefinition } from './define-block.js'\nexport type { BlockDefinitionIssue } from './define-block.js'\n\n// ============================================================\n// DEFINE FACTORY API\n// ============================================================\n\nexport {\n defineFactory,\n isFactoryDefinition,\n composeFactoryOutputs,\n wrapInContainer,\n resetIdCounter,\n} from './define-factory.js'\n\n// ============================================================\n// DEFINE CAPABILITY API\n// ============================================================\n\nexport { CapabilityBuilder, defineCapability } from '@pwfabric/contracts'\n\n// ============================================================\n// REGISTRY API\n// ============================================================\n\nexport {\n CustomBlockRegistry,\n createCustomBlockRegistry,\n getCustomBlockRegistry,\n resetGlobalRegistry,\n mergeRegistries,\n mergeWithBaseComponents,\n} from './registry.js'\n\n// ============================================================\n// VALIDATION API\n// ============================================================\n\nexport {\n validateProps,\n validatePropsWithDefaults,\n validateBlock,\n validateBlockTree,\n createBlockValidator,\n createPropsValidator,\n formatValidationErrors,\n hasErrors,\n isBlock,\n isBlockArray,\n} from './validation.js'\n"]}
|
package/dist/registry.d.ts
CHANGED
|
@@ -162,4 +162,3 @@ export declare function mergeRegistries(...registries: readonly CustomBlockRegis
|
|
|
162
162
|
* @returns A merged BlockComponentRegistry
|
|
163
163
|
*/
|
|
164
164
|
export declare function mergeWithBaseComponents(baseComponents: BlockComponentRegistry, customRegistry: CustomBlockRegistry): BlockComponentRegistry;
|
|
165
|
-
//# sourceMappingURL=registry.d.ts.map
|
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * CustomBlockRegistry\n *\n * Registry for managing custom block definitions.\n *\n * @module @pwfabric/authoring/registry\n *\n * @example\n * ```typescript\n * import { createCustomBlockRegistry, defineBlock } from '@pwfabric/authoring'\n * import { z } from 'zod'\n *\n * const registry = createCustomBlockRegistry()\n *\n * const MyBlock = defineBlock({\n * type: 'my-block',\n * name: 'My Block',\n * schema: z.object({ title: z.string() }),\n * defaultProps: { title: 'Default' },\n * component: ({ props }) => <div>{props.title}</div>\n * })\n *\n * registry.register(MyBlock)\n *\n * // Use with SurfaceRenderer\n * <SurfaceRenderer components={registry.getComponents()} />\n * ```\n */\n\nimport type { BlockCategory, Block } from '@pwfabric/core'\nimport type { BlockComponentRegistry } from '@pwfabric/runtime'\nimport type {\n CustomBlockDefinition,\n ICustomBlockRegistry,\n CustomBlockComponentProps,\n CustomBlockContext,\n} from './types.js'\nimport { createElement, type ReactNode } from 'react'\n\n// ============================================================\n// CUSTOM BLOCK REGISTRY\n// ============================================================\n\n/**\n * CustomBlockRegistry\n *\n * Manages registration and retrieval of custom block definitions.\n * Provides a bridge between custom block definitions and the\n * SurfaceRenderer component registry.\n */\nexport class CustomBlockRegistry implements ICustomBlockRegistry {\n private readonly definitions = new Map<string, CustomBlockDefinition>()\n\n /**\n * Register a custom block definition\n *\n * @param definition - The custom block definition to register\n * @throws Error if block type already registered\n */\n register<TProps extends Record<string, unknown>>(\n definition: CustomBlockDefinition<TProps>\n ): void {\n if (this.definitions.has(definition.type)) {\n throw new Error(`Block type \"${definition.type}\" is already registered`)\n }\n this.definitions.set(definition.type, definition as CustomBlockDefinition)\n }\n\n /**\n * Register multiple custom block definitions\n *\n * @param definitions - Array of custom block definitions\n */\n registerMany(definitions: readonly CustomBlockDefinition[]): void {\n for (const definition of definitions) {\n this.register(definition)\n }\n }\n\n /**\n * Get a custom block definition by type\n *\n * @param type - Block type identifier\n * @returns The block definition or undefined\n */\n get(type: string): CustomBlockDefinition | undefined {\n return this.definitions.get(type)\n }\n\n /**\n * Check if a block type is registered\n *\n * @param type - Block type identifier\n * @returns True if registered\n */\n has(type: string): boolean {\n return this.definitions.has(type)\n }\n\n /**\n * Get all registered custom block definitions\n *\n * @returns Array of all block definitions\n */\n list(): readonly CustomBlockDefinition[] {\n return Array.from(this.definitions.values())\n }\n\n /**\n * Get block definitions by category\n *\n * @param category - Block category\n * @returns Array of block definitions in category\n */\n getByCategory(category: BlockCategory): readonly CustomBlockDefinition[] {\n return this.list().filter((def) => def.category === category)\n }\n\n /**\n * Get all registered block types\n *\n * @returns Array of block type identifiers\n */\n types(): readonly string[] {\n return Array.from(this.definitions.keys())\n }\n\n /**\n * Unregister a custom block\n *\n * @param type - Block type identifier\n * @returns True if block was unregistered\n */\n unregister(type: string): boolean {\n return this.definitions.delete(type)\n }\n\n /**\n * Clear all registrations\n */\n clear(): void {\n this.definitions.clear()\n }\n\n /**\n * Get number of registered blocks\n */\n get size(): number {\n return this.definitions.size\n }\n\n /**\n * Get a component registry for use with SurfaceRenderer\n *\n * This method creates a BlockComponentRegistry that can be passed\n * to the SurfaceRenderer's `components` prop to enable rendering\n * of custom blocks.\n *\n * @returns BlockComponentRegistry with all registered custom blocks\n *\n * @example\n * ```typescript\n * import { SurfaceRenderer } from '@pwfabric/runtime'\n *\n * const registry = createCustomBlockRegistry()\n * registry.register(MyCustomBlock)\n *\n * // Pass to SurfaceRenderer\n * <SurfaceRenderer\n * surface={mySurface}\n * components={registry.getComponents()}\n * />\n * ```\n */\n getComponents(): BlockComponentRegistry {\n const components: BlockComponentRegistry = {}\n\n for (const definition of this.definitions.values()) {\n components[definition.type] = createBlockComponentWrapper(definition)\n }\n\n return components\n }\n}\n\n/**\n * Create a wrapper component that adapts CustomBlockComponent to BlockComponent\n *\n * This bridges the gap between the SDK's CustomBlockComponent interface\n * and the runtime's BlockComponent interface.\n */\n/**\n * Map runtime BlockContext to SDK CustomBlockContext\n *\n * Narrows the full runtime context to only what custom block authors need.\n * Excludes: capabilities, imageAdapter, basePath (platform internals).\n */\nfunction mapToCustomBlockContext(runtimeContext: unknown): CustomBlockContext | undefined {\n if (!runtimeContext || typeof runtimeContext !== 'object') return undefined\n\n const ctx = runtimeContext as Record<string, unknown>\n return {\n theme: (ctx.theme as 'light' | 'dark') ?? 'light',\n viewport: (ctx.viewport as string) ?? 'lg',\n onEvent:\n typeof ctx.onEvent === 'function'\n ? (event: { type: string; blockId?: string; payload?: unknown }) => {\n ;(ctx.onEvent as (e: unknown) => void)(event)\n }\n : undefined,\n }\n}\n\nfunction createBlockComponentWrapper(\n definition: CustomBlockDefinition\n): (props: {\n block: Block\n props: Record<string, unknown>\n children?: ReactNode\n context: unknown\n}) => ReactNode {\n return function WrappedComponent({\n block,\n props: rawProps,\n children,\n context,\n }: {\n block: Block\n props: Record<string, unknown>\n children?: ReactNode\n context: unknown\n }): ReactNode {\n // Validate and apply defaults using the schema\n const result = definition.schema.safeParse(rawProps)\n const validatedProps = result.success ? result.data : definition.defaultProps\n\n // Map runtime context to custom block context\n const customContext = mapToCustomBlockContext(context)\n\n // Create the custom block component props\n const customProps: CustomBlockComponentProps = {\n props: validatedProps,\n blockId: block.id,\n children,\n context: customContext,\n }\n\n // Render using the custom component\n return createElement(\n definition.component as React.ComponentType<CustomBlockComponentProps>,\n customProps\n )\n }\n}\n\n// ============================================================\n// FACTORY FUNCTIONS\n// ============================================================\n\n/**\n * Create a new CustomBlockRegistry\n *\n * @returns A new CustomBlockRegistry instance\n *\n * @example\n * ```typescript\n * const registry = createCustomBlockRegistry()\n * registry.register(MyBlock)\n * ```\n */\nexport function createCustomBlockRegistry(): CustomBlockRegistry {\n return new CustomBlockRegistry()\n}\n\n/**\n * Get a singleton instance of CustomBlockRegistry\n *\n * Use this when you want a shared registry across your application.\n * For isolated registries (e.g., in tests), use `createCustomBlockRegistry()`.\n */\nlet globalRegistry: CustomBlockRegistry | null = null\n\nexport function getCustomBlockRegistry(): CustomBlockRegistry {\n if (!globalRegistry) {\n globalRegistry = new CustomBlockRegistry()\n }\n return globalRegistry\n}\n\n/**\n * Reset the global registry\n *\n * Useful for testing or when you need to clear all registrations.\n */\nexport function resetGlobalRegistry(): void {\n globalRegistry = null\n}\n\n// ============================================================\n// MERGE UTILITIES\n// ============================================================\n\n/**\n * Merge multiple custom block registries into one\n *\n * @param registries - Registries to merge\n * @returns A new registry containing all blocks from input registries\n * @throws Error if there are duplicate block types\n */\nexport function mergeRegistries(\n ...registries: readonly CustomBlockRegistry[]\n): CustomBlockRegistry {\n const merged = new CustomBlockRegistry()\n\n for (const registry of registries) {\n for (const definition of registry.list()) {\n merged.register(definition)\n }\n }\n\n return merged\n}\n\n/**\n * Merge a custom block registry with a base BlockComponentRegistry\n *\n * This is useful when you want to extend the default block components\n * with custom blocks.\n *\n * @param baseComponents - The base component registry (e.g., defaultBlockComponents)\n * @param customRegistry - The custom block registry\n * @returns A merged BlockComponentRegistry\n */\nexport function mergeWithBaseComponents(\n baseComponents: BlockComponentRegistry,\n customRegistry: CustomBlockRegistry\n): BlockComponentRegistry {\n return {\n ...baseComponents,\n ...customRegistry.getComponents(),\n }\n}\n"]}
|
package/dist/types.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @module @pwfabric/authoring/types
|
|
7
7
|
*/
|
|
8
|
-
import type { ZodSchema,
|
|
8
|
+
import type { ZodSchema, ZodTypeAny, output as ZodOutput } from 'zod';
|
|
9
9
|
import type { Block, BlockCategory } from '@pwfabric/core';
|
|
10
10
|
import type { BlockComponentRegistry } from '@pwfabric/runtime';
|
|
11
11
|
import type { ReactNode } from 'react';
|
|
@@ -14,7 +14,13 @@ import type { ReactNode } from 'react';
|
|
|
14
14
|
*
|
|
15
15
|
* Used with `defineBlock()` to create a type-safe custom block.
|
|
16
16
|
*/
|
|
17
|
-
export
|
|
17
|
+
export type SchemaProps<TSchema extends ZodTypeAny> = ZodOutput<TSchema> extends Record<string, unknown> ? ZodOutput<TSchema> : Record<string, unknown>;
|
|
18
|
+
/**
|
|
19
|
+
* Options for `defineBlock()`. The block's props are the schema's output
|
|
20
|
+
* (`SchemaProps<TSchema>`): they are inferred from `schema` alone, and
|
|
21
|
+
* `defaultProps` and `component` are checked against them.
|
|
22
|
+
*/
|
|
23
|
+
export interface CustomBlockOptions<TSchema extends ZodTypeAny = ZodTypeAny, TProps extends Record<string, unknown> = SchemaProps<TSchema>> {
|
|
18
24
|
/** Unique block type identifier (kebab-case) */
|
|
19
25
|
readonly type: string;
|
|
20
26
|
/** Human-readable display name */
|
|
@@ -25,7 +31,11 @@ export interface CustomBlockOptions<TProps extends Record<string, unknown> = Rec
|
|
|
25
31
|
readonly icon?: string;
|
|
26
32
|
/** Zod schema for props validation */
|
|
27
33
|
readonly schema: TSchema;
|
|
28
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Default props for new instances. Checked against the schema, never used to
|
|
36
|
+
* infer the props: a field the schema marks optional stays optional even when
|
|
37
|
+
* it has a default here.
|
|
38
|
+
*/
|
|
29
39
|
readonly defaultProps: TProps;
|
|
30
40
|
/** Whether this block can contain children */
|
|
31
41
|
readonly canHaveChildren?: boolean;
|
|
@@ -39,7 +49,7 @@ export interface CustomBlockOptions<TProps extends Record<string, unknown> = Rec
|
|
|
39
49
|
readonly allowedChildTraits?: readonly string[];
|
|
40
50
|
/** Maximum instances allowed in a surface */
|
|
41
51
|
readonly maxInstances?: number;
|
|
42
|
-
/** React component to render this block */
|
|
52
|
+
/** React component to render this block; its props are the schema's output. */
|
|
43
53
|
readonly component: CustomBlockComponent<TProps>;
|
|
44
54
|
}
|
|
45
55
|
/**
|
|
@@ -269,4 +279,3 @@ export type InferFactoryConfig<T> = T extends FactoryDefinition<infer TConfig> ?
|
|
|
269
279
|
* Infer props type from a Zod schema
|
|
270
280
|
*/
|
|
271
281
|
export type InferSchemaProps<T> = T extends ZodSchema<infer TOutput> ? TOutput : never;
|
|
272
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG","sourcesContent":["/**\n * @pwfabric/authoring Type Definitions\n *\n * Core type definitions for the Custom Block SDK.\n *\n * @module @pwfabric/authoring/types\n */\n\nimport type { ZodSchema, ZodTypeAny, output as ZodOutput } from 'zod'\nimport type { Block, BlockCategory } from '@pwfabric/core'\nimport type { BlockComponentRegistry } from '@pwfabric/runtime'\nimport type { ReactNode } from 'react'\n\n// ============================================================\n// CUSTOM BLOCK DEFINITION\n// ============================================================\n\n/**\n * Custom block definition options\n *\n * Used with `defineBlock()` to create a type-safe custom block.\n */\nexport type SchemaProps<TSchema extends ZodTypeAny> =\n ZodOutput<TSchema> extends Record<string, unknown> ? ZodOutput<TSchema> : Record<string, unknown>\n\n/**\n * Options for `defineBlock()`. The block's props are the schema's output\n * (`SchemaProps<TSchema>`): they are inferred from `schema` alone, and\n * `defaultProps` and `component` are checked against them.\n */\nexport interface CustomBlockOptions<\n TSchema extends ZodTypeAny = ZodTypeAny,\n TProps extends Record<string, unknown> = SchemaProps<TSchema>,\n> {\n /** Unique block type identifier (kebab-case) */\n readonly type: string\n\n /** Human-readable display name */\n readonly name: string\n\n /** Block category for grouping */\n readonly category?: BlockCategory\n\n /** Icon character or identifier */\n readonly icon?: string\n\n /** Zod schema for props validation */\n readonly schema: TSchema\n\n /**\n * Default props for new instances. Checked against the schema, never used to\n * infer the props: a field the schema marks optional stays optional even when\n * it has a default here.\n */\n readonly defaultProps: TProps\n\n /** Whether this block can contain children */\n readonly canHaveChildren?: boolean\n\n /** Restrict which block types can be children */\n readonly allowedChildren?: readonly string[]\n\n /** Restrict which block types can be parents */\n readonly allowedParents?: readonly string[]\n\n /** open trait vocabulary this block carries (kebab-case). */\n readonly traits?: readonly string[]\n\n /** children must carry ANY of these traits (containers only). */\n readonly allowedChildTraits?: readonly string[]\n\n /** Maximum instances allowed in a surface */\n readonly maxInstances?: number\n\n /** React component to render this block; its props are the schema's output. */\n readonly component: CustomBlockComponent<TProps>\n}\n\n/**\n * Custom block context\n *\n * Narrowed view of the runtime BlockContext for custom block authors.\n * Excludes platform internals (capabilities, imageAdapter, basePath).\n */\nexport interface CustomBlockContext {\n /** Current theme */\n readonly theme: 'light' | 'dark'\n /** Current viewport breakpoint */\n readonly viewport: string\n /** Event handler for block-level events */\n readonly onEvent?:\n | ((event: { type: string; blockId?: string; payload?: unknown }) => void)\n | undefined\n}\n\n/**\n * Custom block component props\n */\nexport interface CustomBlockComponentProps<TProps = Record<string, unknown>> {\n /** The resolved, type-safe props */\n readonly props: TProps\n /** Block ID */\n readonly blockId: string\n /** Rendered children (for container blocks) */\n readonly children?: ReactNode\n /** Runtime context (theme, viewport, events) */\n readonly context?: CustomBlockContext | undefined\n}\n\n/**\n * Custom block component type\n */\nexport type CustomBlockComponent<TProps = Record<string, unknown>> = (\n props: CustomBlockComponentProps<TProps>\n) => ReactNode\n\n/**\n * Custom block definition (result of defineBlock)\n *\n * Contains both the block metadata and the component for rendering.\n */\nexport interface CustomBlockDefinition<\n TProps extends Record<string, unknown> = Record<string, unknown>,\n> {\n /** Unique block type identifier */\n readonly type: string\n\n /** Human-readable display name */\n readonly name: string\n\n /** Block category */\n readonly category: BlockCategory\n\n /** Icon character or identifier */\n readonly icon: string\n\n /** Zod schema for validation */\n readonly schema: ZodSchema<TProps>\n\n /** Default props */\n readonly defaultProps: TProps\n\n /** Whether this block can contain children */\n readonly canHaveChildren: boolean\n\n /** Allowed child block types */\n readonly allowedChildren?: readonly string[]\n\n /** Allowed parent block types */\n readonly allowedParents?: readonly string[]\n\n /** open trait vocabulary this block carries (kebab-case). */\n readonly traits?: readonly string[]\n\n /** children must carry ANY of these traits (containers only). */\n readonly allowedChildTraits?: readonly string[]\n\n /** Maximum instances */\n readonly maxInstances?: number\n\n /** React component */\n readonly component: CustomBlockComponent<TProps>\n}\n\n// ============================================================\n// FACTORY DEFINITION\n// ============================================================\n\n/**\n * Factory configuration input\n *\n * Passed to the build function to customize the generated blocks.\n */\nexport type FactoryConfig = Record<string, unknown>\n\n/**\n * Block specification for factory output\n *\n * Simplified block definition without requiring an id (auto-generated).\n */\nexport interface BlockSpec {\n /** Block type */\n readonly type: string\n /** Block props */\n readonly props: Record<string, unknown>\n /** Nested children */\n readonly children?: readonly BlockSpec[]\n}\n\n/**\n * Factory definition options\n *\n * Used with `defineFactory()` to create a factory function.\n */\nexport interface FactoryOptions<TConfig extends FactoryConfig = FactoryConfig> {\n /** Unique factory identifier (kebab-case) */\n readonly id: string\n\n /** Human-readable factory name */\n readonly name?: string\n\n /** Factory description */\n readonly description?: string\n\n /** Optional Zod schema for config validation */\n readonly configSchema?: ZodSchema<TConfig>\n\n /** Build function that returns block specifications */\n readonly build: (config: TConfig) => readonly BlockSpec[]\n}\n\n/**\n * Factory definition (result of defineFactory)\n */\nexport interface FactoryDefinition<TConfig extends FactoryConfig = FactoryConfig> {\n /** Factory identifier */\n readonly id: string\n\n /** Factory name */\n readonly name: string\n\n /** Factory description */\n readonly description: string\n\n /** Config schema (if provided) */\n readonly configSchema?: ZodSchema<TConfig>\n\n /** Build function */\n readonly build: (config: TConfig) => readonly Block[]\n\n /** Validate config against schema (if provided) */\n readonly validateConfig: (config: unknown) => FactoryValidationResult<TConfig>\n}\n\n/**\n * Factory validation result\n */\nexport interface FactoryValidationResult<TConfig = FactoryConfig> {\n /** Whether validation passed */\n readonly valid: boolean\n /** Validated config (if valid) */\n readonly config?: TConfig\n /** Validation errors (if invalid) */\n readonly errors?: readonly FactoryValidationError[]\n}\n\n/**\n * Factory validation error\n */\nexport interface FactoryValidationError {\n /** Error path in the config */\n readonly path: string\n /** Error message */\n readonly message: string\n}\n\n// ============================================================\n// REGISTRY TYPES\n// ============================================================\n\n/**\n * Custom block registry interface\n */\nexport interface ICustomBlockRegistry {\n /**\n * Register a custom block definition\n */\n register<TProps extends Record<string, unknown>>(definition: CustomBlockDefinition<TProps>): void\n\n /**\n * Get a custom block definition by type\n */\n get(type: string): CustomBlockDefinition | undefined\n\n /**\n * Check if a block type is registered\n */\n has(type: string): boolean\n\n /**\n * Get all registered custom block definitions\n */\n list(): readonly CustomBlockDefinition[]\n\n /**\n * Get block definitions by category\n */\n getByCategory(category: BlockCategory): readonly CustomBlockDefinition[]\n\n /**\n * Get all registered block types\n */\n types(): readonly string[]\n\n /**\n * Unregister a custom block\n */\n unregister(type: string): boolean\n\n /**\n * Clear all registrations\n */\n clear(): void\n\n /**\n * Get a component registry for use with SurfaceRenderer\n */\n getComponents(): BlockComponentRegistry\n}\n\n// ============================================================\n// VALIDATION TYPES\n// ============================================================\n\n/**\n * Block validation result\n */\nexport interface BlockValidationResult {\n /** Whether the block is valid */\n readonly valid: boolean\n /** The validated block (with defaults applied) */\n readonly block?: Block\n /** Validation errors */\n readonly errors: readonly BlockValidationError[]\n}\n\n/**\n * Block validation error\n */\nexport interface BlockValidationError {\n /** Error code */\n readonly code: string\n /** Error message */\n readonly message: string\n /** Path to the invalid property */\n readonly path?: string\n}\n\n/**\n * Props validation result\n */\nexport interface PropsValidationResult<TProps = Record<string, unknown>> {\n /** Whether the props are valid */\n readonly valid: boolean\n /** The validated props (with defaults applied) */\n readonly props?: TProps\n /** Validation errors */\n readonly errors: readonly BlockValidationError[]\n}\n\n// ============================================================\n// UTILITY TYPES\n// ============================================================\n\n/**\n * Infer props type from a custom block definition\n */\nexport type InferBlockProps<T> = T extends CustomBlockDefinition<infer TProps> ? TProps : never\n\n/**\n * Infer config type from a factory definition\n */\nexport type InferFactoryConfig<T> = T extends FactoryDefinition<infer TConfig> ? TConfig : never\n\n/**\n * Infer props type from a Zod schema\n */\nexport type InferSchemaProps<T> = T extends ZodSchema<infer TOutput> ? TOutput : never\n"]}
|
package/dist/validation.d.ts
CHANGED
package/dist/validation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Validation Utilities\n *\n * Schema validation utilities for custom blocks.\n *\n * @module @pwfabric/authoring/validation\n */\n\nimport type { ZodSchema } from 'zod'\nimport type { Block } from '@pwfabric/core'\nimport type {\n CustomBlockDefinition,\n BlockValidationResult,\n BlockValidationError,\n PropsValidationResult,\n ICustomBlockRegistry,\n} from './types.js'\n\n// ============================================================\n// PROPS VALIDATION\n// ============================================================\n\n/**\n * Validate props against a Zod schema\n *\n * @param props - The props to validate\n * @param schema - The Zod schema to validate against\n * @returns Validation result with validated props or errors\n */\nexport function validateProps<TProps extends Record<string, unknown>>(\n props: unknown,\n schema: ZodSchema<TProps>\n): PropsValidationResult<TProps> {\n const result = schema.safeParse(props)\n\n if (result.success) {\n return {\n valid: true,\n props: result.data,\n errors: [],\n }\n }\n\n const errors: BlockValidationError[] = result.error.errors.map((e) => ({\n code: 'VALIDATION_ERROR',\n message: e.message,\n path: e.path.join('.'),\n }))\n\n return {\n valid: false,\n errors,\n }\n}\n\n/**\n * Validate props with defaults applied\n *\n * If validation fails, returns the default props.\n *\n * @param props - The props to validate\n * @param schema - The Zod schema\n * @param defaultProps - Default props to use if validation fails\n * @returns Validated props or defaults\n */\nexport function validatePropsWithDefaults<TProps extends Record<string, unknown>>(\n props: unknown,\n schema: ZodSchema<TProps>,\n defaultProps: TProps\n): TProps {\n const result = schema.safeParse(props)\n return result.success ? result.data : defaultProps\n}\n\n// ============================================================\n// BLOCK VALIDATION\n// ============================================================\n\n/**\n * Validate a block against its definition\n *\n * @param block - The block to validate\n * @param definition - The block definition\n * @returns Validation result\n */\nexport function validateBlock<TProps extends Record<string, unknown>>(\n block: Block,\n definition: CustomBlockDefinition<TProps>\n): BlockValidationResult {\n const errors: BlockValidationError[] = []\n\n // Validate type matches\n if (block.type !== definition.type) {\n errors.push({\n code: 'TYPE_MISMATCH',\n message: `Expected block type \"${definition.type}\", got \"${block.type}\"`,\n })\n return { valid: false, errors }\n }\n\n // Validate props\n const propsResult = validateProps(block.props, definition.schema)\n if (!propsResult.valid) {\n errors.push(...propsResult.errors)\n }\n\n // Validate children constraints\n if (block.children && block.children.length > 0) {\n if (!definition.canHaveChildren) {\n errors.push({\n code: 'CHILDREN_NOT_ALLOWED',\n message: `Block type \"${definition.type}\" cannot have children`,\n })\n }\n\n if (definition.allowedChildren && definition.allowedChildren.length > 0) {\n for (const child of block.children) {\n if (!definition.allowedChildren.includes(child.type)) {\n errors.push({\n code: 'INVALID_CHILD_TYPE',\n message: `Block type \"${child.type}\" is not allowed as a child of \"${definition.type}\"`,\n path: `children.${child.id}`,\n })\n }\n }\n }\n }\n\n if (errors.length > 0) {\n return { valid: false, errors }\n }\n\n return {\n valid: true,\n block: {\n ...block,\n props: propsResult.props ?? block.props,\n },\n errors: [],\n }\n}\n\n/**\n * Validate a block tree against a registry of definitions\n *\n * Recursively validates all blocks in the tree.\n *\n * @param blocks - The blocks to validate\n * @param registry - The block registry\n * @returns Array of validation errors (empty if all valid)\n */\nexport function validateBlockTree(\n blocks: readonly Block[],\n registry: ICustomBlockRegistry\n): readonly BlockValidationError[] {\n const errors: BlockValidationError[] = []\n\n function validateRecursive(block: Block, path: string): void {\n const definition = registry.get(block.type)\n\n if (!definition) {\n // Not a custom block, skip validation\n // (could be a built-in block type)\n if (block.children) {\n block.children.forEach((child: Block, index: number) => {\n validateRecursive(child, `${path}.children[${index}]`)\n })\n }\n return\n }\n\n const result = validateBlock(block, definition)\n if (!result.valid) {\n errors.push(\n ...result.errors.map((e) => ({\n ...e,\n path: e.path ? `${path}.${e.path}` : path,\n }))\n )\n }\n\n if (block.children) {\n block.children.forEach((child: Block, index: number) => {\n validateRecursive(child, `${path}.children[${index}]`)\n })\n }\n }\n\n blocks.forEach((block, index) => {\n validateRecursive(block, `blocks[${index}]`)\n })\n\n return errors\n}\n\n// ============================================================\n// SCHEMA UTILITIES\n// ============================================================\n\n/**\n * Create a validation function for a specific block type\n *\n * @param definition - The block definition\n * @returns A validation function\n */\nexport function createBlockValidator<TProps extends Record<string, unknown>>(\n definition: CustomBlockDefinition<TProps>\n): (block: Block) => BlockValidationResult {\n return (block: Block) => validateBlock(block, definition)\n}\n\n/**\n * Create a props validation function for a specific schema\n *\n * @param schema - The Zod schema\n * @returns A validation function\n */\nexport function createPropsValidator<TProps extends Record<string, unknown>>(\n schema: ZodSchema<TProps>\n): (props: unknown) => PropsValidationResult<TProps> {\n return (props: unknown) => validateProps(props, schema)\n}\n\n// ============================================================\n// ERROR FORMATTING\n// ============================================================\n\n/**\n * Format validation errors as a human-readable string\n *\n * @param errors - The validation errors\n * @returns Formatted error string\n */\nexport function formatValidationErrors(errors: readonly BlockValidationError[]): string {\n if (errors.length === 0) {\n return 'No errors'\n }\n\n return errors\n .map((e) => {\n const path = e.path ? ` at ${e.path}` : ''\n return `[${e.code}]${path}: ${e.message}`\n })\n .join('\\n')\n}\n\n/**\n * Check if a validation result has errors\n */\nexport function hasErrors(result: BlockValidationResult | PropsValidationResult): boolean {\n return !result.valid && result.errors.length > 0\n}\n\n// ============================================================\n// TYPE GUARDS\n// ============================================================\n\n/**\n * Check if a value is a valid Block\n */\nexport function isBlock(value: unknown): value is Block {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const block = value as Partial<Block>\n return (\n typeof block.id === 'string' &&\n typeof block.type === 'string' &&\n typeof block.props === 'object'\n )\n}\n\n/**\n * Check if a value is a valid Block array\n */\nexport function isBlockArray(value: unknown): value is Block[] {\n return Array.isArray(value) && value.every(isBlock)\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,14 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pwfabric/authoring",
|
|
3
|
-
"version": "1.0.0-rc.
|
|
3
|
+
"version": "1.0.0-rc.1",
|
|
4
4
|
"description": "Authoring surface for PWFabric — define blocks, factories and capabilities",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"author": "PhiMajor Solutions",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/pwfabric/pwfabric.git",
|
|
11
|
+
"directory": "packages/authoring"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://github.com/pwfabric/pwfabric#readme",
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/pwfabric/pwfabric/issues"
|
|
16
|
+
},
|
|
6
17
|
"main": "./dist/index.js",
|
|
7
18
|
"types": "./dist/index.d.ts",
|
|
8
19
|
"exports": {
|
|
9
20
|
".": {
|
|
10
21
|
"types": "./dist/index.d.ts",
|
|
11
|
-
"import": "./dist/index.js"
|
|
22
|
+
"import": "./dist/index.js",
|
|
23
|
+
"default": "./dist/index.js"
|
|
12
24
|
}
|
|
13
25
|
},
|
|
14
26
|
"files": [
|
|
@@ -16,36 +28,30 @@
|
|
|
16
28
|
"LICENSE",
|
|
17
29
|
"README.md"
|
|
18
30
|
],
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=22"
|
|
33
|
+
},
|
|
19
34
|
"dependencies": {
|
|
20
|
-
"
|
|
21
|
-
"@pwfabric/
|
|
22
|
-
"@pwfabric/runtime": "1.0.0-rc.
|
|
23
|
-
"@pwfabric/core": "1.0.0-rc.0"
|
|
35
|
+
"@pwfabric/contracts": "1.0.0-rc.1",
|
|
36
|
+
"@pwfabric/core": "1.0.0-rc.1",
|
|
37
|
+
"@pwfabric/runtime": "1.0.0-rc.1"
|
|
24
38
|
},
|
|
25
39
|
"peerDependencies": {
|
|
26
|
-
"react": "^19.0.0"
|
|
27
|
-
|
|
28
|
-
"publishConfig": {
|
|
29
|
-
"access": "public"
|
|
40
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
41
|
+
"zod": "^3.23.0"
|
|
30
42
|
},
|
|
31
43
|
"devDependencies": {
|
|
32
44
|
"@types/node": "^22.0.0",
|
|
33
45
|
"@types/react": "^19.0.0",
|
|
34
46
|
"@vitest/coverage-v8": "^2.1.9",
|
|
47
|
+
"react": "^19.0.0",
|
|
35
48
|
"typescript": "^5.4.0",
|
|
36
|
-
"vitest": "^2.0.0"
|
|
37
|
-
|
|
38
|
-
"repository": {
|
|
39
|
-
"type": "git",
|
|
40
|
-
"url": "https://github.com/pwfabric/pwfabric",
|
|
41
|
-
"directory": "packages/authoring"
|
|
49
|
+
"vitest": "^2.0.0",
|
|
50
|
+
"zod": "^3.25.76"
|
|
42
51
|
},
|
|
43
|
-
"
|
|
44
|
-
|
|
45
|
-
"url": "https://github.com/pwfabric/pwfabric/issues"
|
|
52
|
+
"publishConfig": {
|
|
53
|
+
"access": "public"
|
|
46
54
|
},
|
|
47
|
-
"license": "Apache-2.0",
|
|
48
|
-
"author": "PhiMajor Solutions",
|
|
49
55
|
"scripts": {
|
|
50
56
|
"build": "rm -rf dist tsconfig.tsbuildinfo && tsc",
|
|
51
57
|
"dev": "tsc --watch",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"define-block.d.ts","sourceRoot":"","sources":["../src/define-block.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAK,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,KAAK,CAAA;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AA2H3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,WAAW,CACzB,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,OAAO,SAAS,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,EAC1E,OAAO,EAAE,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAyD7E;AAMD,6DAA6D;AAC7D,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,oBAAoB,EAAE,CAiB3G;AAMD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,qBAAqB,CActF;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxE,UAAU,EAAE,qBAAqB,CAAC,MAAM,CAAC,EACzC,EAAE,EAAE,MAAM,EACV,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EACvB,QAAQ,CAAC,EAAE,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EAAE,GACjF;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,QAAQ,CAAA;CAAE,CA2BzE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"define-factory.d.ts","sourceRoot":"","sources":["../src/define-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAG3C,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,aAAa,EAId,MAAM,YAAY,CAAA;AAgBnB;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAyFD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,wBAAgB,aAAa,CAAC,OAAO,SAAS,aAAa,GAAG,aAAa,EACzE,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,GAC/B,iBAAiB,CAAC,OAAO,CAAC,CA8B5B;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAY9E;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,SAAS,EAAE,SAAS,CAAC,SAAS,KAAK,EAAE,CAAC,EAAE,GAC1C,SAAS,KAAK,EAAE,CAElB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,cAAc,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAC3C,KAAK,CAYP"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,cAAc,mBAAmB,CAAA;AAMjC,YAAY,EAEV,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EAGrB,aAAa,EACb,SAAS,EACT,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EAGtB,oBAAoB,EAGpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EAGrB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,YAAY,CAAA;AAMnB,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAE7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAM7D,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,cAAc,GACf,MAAM,qBAAqB,CAAA;AAM5B,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAMzE,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,uBAAuB,GACxB,MAAM,eAAe,CAAA;AAMtB,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,SAAS,EACT,OAAO,EACP,YAAY,GACb,MAAM,iBAAiB,CAAA"}
|
package/dist/registry.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAS,MAAM,gBAAgB,CAAA;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EAGrB,MAAM,YAAY,CAAA;AAOnB;;;;;;GAMG;AACH,qBAAa,mBAAoB,YAAW,oBAAoB;IAC9D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2C;IAEvE;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7C,UAAU,EAAE,qBAAqB,CAAC,MAAM,CAAC,GACxC,IAAI;IAOP;;;;OAIG;IACH,YAAY,CAAC,WAAW,EAAE,SAAS,qBAAqB,EAAE,GAAG,IAAI;IAMjE;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAIpD;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;;;OAIG;IACH,IAAI,IAAI,SAAS,qBAAqB,EAAE;IAIxC;;;;;OAKG;IACH,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,SAAS,qBAAqB,EAAE;IAIxE;;;;OAIG;IACH,KAAK,IAAI,SAAS,MAAM,EAAE;IAI1B;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,aAAa,IAAI,sBAAsB;CASxC;AA4ED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,IAAI,mBAAmB,CAE/D;AAUD,wBAAgB,sBAAsB,IAAI,mBAAmB,CAK5D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAMD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,GAAG,UAAU,EAAE,SAAS,mBAAmB,EAAE,GAC5C,mBAAmB,CAUrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,sBAAsB,EACtC,cAAc,EAAE,mBAAmB,GAClC,sBAAsB,CAKxB"}
|
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/validation.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AACpC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,YAAY,CAAA;AAMnB;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GACxB,qBAAqB,CAAC,MAAM,CAAC,CAqB/B;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9E,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,EACzB,YAAY,EAAE,MAAM,GACnB,MAAM,CAGR;AAMD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,qBAAqB,CAAC,MAAM,CAAC,GACxC,qBAAqB,CAoDvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,QAAQ,EAAE,oBAAoB,GAC7B,SAAS,oBAAoB,EAAE,CAuCjC;AAMD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzE,UAAU,EAAE,qBAAqB,CAAC,MAAM,CAAC,GACxC,CAAC,KAAK,EAAE,KAAK,KAAK,qBAAqB,CAEzC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GACxB,CAAC,KAAK,EAAE,OAAO,KAAK,qBAAqB,CAAC,MAAM,CAAC,CAEnD;AAMD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,GAAG,MAAM,CAWtF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,qBAAqB,GAAG,qBAAqB,GAAG,OAAO,CAExF;AAMD;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAWtD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,EAAE,CAE7D"}
|