@sanity/agent-directives 0.0.5 → 0.0.6

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 CHANGED
@@ -14,28 +14,42 @@ pnpm add @sanity/agent-directives
14
14
  // kit.ts
15
15
  import { createDirectiveKit } from "@sanity/agent-directives/react";
16
16
 
17
- export const { defineDirective } = createDirectiveKit({
18
- useApplication: useThreadApplication,
17
+ export const { defineDirective } = createDirectiveKit<Application>({
18
+ useApplication: (source) => useThreadApplication(source),
19
19
  });
20
20
 
21
- // Document.tsx
22
- export const Document = defineDirective("document", ({ id, application }) => {
23
- return <DocumentCard id={id} application={application} />;
24
- });
21
+ // directives/Document.tsx
22
+ export const DocumentDirective = defineDirective(
23
+ "document",
24
+ ({ id, application }) => {
25
+ return <DocumentCard id={id} application={application} />;
26
+ },
27
+ );
28
+
29
+ // directives/Changes.tsx - no application needed
30
+ export const ChangesDirective = defineDirective(
31
+ "changes",
32
+ ({ createdCount, updatedCount }) => (
33
+ <ChangesCard created={createdCount} updated={updatedCount} />
34
+ ),
35
+ { requiresContext: false },
36
+ );
25
37
 
26
38
  // AgentMessage.tsx
27
39
  import { remarkAgentDirectives } from "@sanity/agent-directives/react";
28
40
  import ReactMarkdown from "react-markdown";
29
41
 
42
+ const components = {
43
+ Document: DocumentDirective,
44
+ Changes: ChangesDirective,
45
+ // directive names are converted to PascalCase
46
+ };
47
+
30
48
  function AgentMessage({ content }: { content: string }) {
31
49
  return (
32
50
  <ReactMarkdown
33
51
  remarkPlugins={[remarkAgentDirectives]}
34
- components={{
35
- Document: DocumentDirective,
36
- Release: ReleaseDirective,
37
- // ...
38
- }}
52
+ components={components}
39
53
  >
40
54
  {content}
41
55
  </ReactMarkdown>
@@ -43,29 +57,68 @@ function AgentMessage({ content }: { content: string }) {
43
57
  }
44
58
  ```
45
59
 
46
- ## String Usage (Server-side)
60
+ ## Server-side Usage
47
61
 
48
62
  ```ts
49
63
  // kit.ts
50
- import { createDirectiveKit } from "@sanity/agent-directives/string";
64
+ import {
65
+ createDirectiveKit,
66
+ createRemarkRenderer,
67
+ } from "@sanity/agent-directives/string";
68
+
69
+ interface MyContext {
70
+ accessToken: string;
71
+ applications: Application[];
72
+ }
73
+
74
+ interface MyOutput {
75
+ text?: string;
76
+ blocks?: Block[];
77
+ }
51
78
 
52
79
  export const { defineDirective, renderDirective } = createDirectiveKit<
53
- SlackContext,
54
- SlackOutput
80
+ MyContext,
81
+ MyOutput
55
82
  >();
56
83
 
57
- // document.ts
58
- export const Document = defineDirective(
59
- "document",
60
- async ({ id, _context }) => {
61
- const doc = await fetchDocument(id, _context.accessToken);
62
- return { blocks: [linkButton(doc.title, url)] };
63
- },
84
+ export const remarkRenderDirectives = createRemarkRenderer<MyContext, Block>(
85
+ renderDirective,
64
86
  );
87
+
88
+ // directives/document.ts
89
+ defineDirective("document", async ({ props, context }) => {
90
+ const doc = await fetchDocument(props.id, context.accessToken);
91
+ return { blocks: [linkButton(doc.title, url)] };
92
+ });
93
+
94
+ // directives/changes.ts - simple text output
95
+ defineDirective("changes", ({ props }) => {
96
+ return {
97
+ text: `Created: ${props.createdCount}, Updated: ${props.updatedCount}`,
98
+ };
99
+ });
100
+
101
+ // markdown.ts
102
+ import remarkDirective from "remark-directive";
103
+
104
+ async function toMarkdown(content: string, context: MyContext) {
105
+ const collector = { blocks: [] };
106
+
107
+ const processor = unified()
108
+ .use(remarkParse)
109
+ .use(remarkDirective)
110
+ .use(remarkRenderDirectives, context, collector)
111
+ .use(remarkStringify);
112
+
113
+ const file = await processor.process(content);
114
+ return { text: String(file), blocks: collector.blocks };
115
+ }
65
116
  ```
66
117
 
67
118
  ## Formatters
68
119
 
120
+ For generating directive strings (agent backend):
121
+
69
122
  ```ts
70
123
  import { createDocumentDirective } from "@sanity/agent-directives/formatters";
71
124
 
@@ -75,23 +128,35 @@ createDocumentDirective({ id: "doc-123", type: "article" });
75
128
 
76
129
  ## Adding a New Directive
77
130
 
78
- 1. Add the schema in `src/schemas.ts`:
131
+ Edit `src/schemas.ts`:
79
132
 
80
133
  ```ts
134
+ // 1. Add schema
81
135
  export const MyDirectiveSchema = z.object({
82
136
  id: z.string(),
83
- // ... props
137
+ title: z.string().optional(),
84
138
  });
85
- ```
86
139
 
87
- 2. Add to `DirectiveSchemas`, `DIRECTIVE_NAMES`, and `DirectivePropsMap` in the same file
88
-
89
- 3. Add a formatter helper in `src/formatters.ts` (optional):
90
-
91
- ```ts
92
- export function createMyDirective(props: MyDirectiveProps): string {
93
- return formatDirective(DIRECTIVE_NAMES.my, props);
140
+ // 2. Add to DirectiveSchemas
141
+ export const DirectiveSchemas = {
142
+ // ...existing
143
+ my: MyDirectiveSchema,
144
+ } as const;
145
+
146
+ // 3. Add to DIRECTIVE_NAMES
147
+ export const DIRECTIVE_NAMES = {
148
+ // ...existing
149
+ my: "my",
150
+ } as const;
151
+
152
+ // 4. Add type
153
+ export type MyDirectiveProps = z.infer<typeof MyDirectiveSchema>;
154
+
155
+ // 5. Add to DirectivePropsMap
156
+ export interface DirectivePropsMap {
157
+ // ...existing
158
+ my: MyDirectiveProps;
94
159
  }
95
160
  ```
96
161
 
97
- 4. Consumers define their render function using `defineDirective('my', ...)`
162
+ Then define the render function in your client using `defineDirective('my', ...)`.
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { createChangesDirective, createDocumentDirective, createReleaseDirective, createResourceDirective, createSetDirective, formatDirective, } from './formatters.js';
2
- export { type ChangesDirectiveProps, ChangesDirectiveSchema, DIRECTIVE_NAMES, type DirectiveName, type DirectivePropsMap, DirectiveSchemas, type DocumentDirectiveProps, DocumentDirectiveSchema, type ReleaseDirectiveProps, ReleaseDirectiveSchema, type ResourceDirectiveProps, ResourceDirectiveSchema, type SetDirectiveProps, SetDirectiveSchema, } from './schemas.js';
1
+ export { createChangesDirective, createDocumentDirective, createReleaseDirective, createResourceDirective, createSetDirective, formatDirective, } from './lib/formatters.js';
2
+ export { type ChangesDirectiveProps, ChangesDirectiveSchema, type DefineDirectiveOptions, DIRECTIVE_NAMES, type DirectiveName, type DirectivePropsMap, DirectiveSchemas, type DocumentDirectiveProps, DocumentDirectiveSchema, type ReleaseDirectiveProps, ReleaseDirectiveSchema, type ResourceDirectiveProps, ResourceDirectiveSchema, type SetDirectiveProps, SetDirectiveSchema, } from './schemas.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,GAChB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,KAAK,qBAAqB,EAC1B,sBAAsB,EACtB,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,gBAAgB,EAChB,KAAK,sBAAsB,EAC3B,uBAAuB,EACvB,KAAK,qBAAqB,EAC1B,sBAAsB,EACtB,KAAK,sBAAsB,EAC3B,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,kBAAkB,GACnB,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,GAChB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,KAAK,qBAAqB,EAC1B,sBAAsB,EACtB,KAAK,sBAAsB,EAC3B,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,gBAAgB,EAChB,KAAK,sBAAsB,EAC3B,uBAAuB,EACvB,KAAK,qBAAqB,EAC1B,sBAAsB,EACtB,KAAK,sBAAsB,EAC3B,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,kBAAkB,GACnB,MAAM,cAAc,CAAA"}
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { createChangesDirective, createDocumentDirective, createReleaseDirective, createResourceDirective, createSetDirective, formatDirective, } from './formatters.js';
1
+ export { createChangesDirective, createDocumentDirective, createReleaseDirective, createResourceDirective, createSetDirective, formatDirective, } from './lib/formatters.js';
2
2
  export { ChangesDirectiveSchema, DIRECTIVE_NAMES, DirectiveSchemas, DocumentDirectiveSchema, ReleaseDirectiveSchema, ResourceDirectiveSchema, SetDirectiveSchema, } from './schemas.js';
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,GAChB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAEL,sBAAsB,EACtB,eAAe,EAGf,gBAAgB,EAEhB,uBAAuB,EAEvB,sBAAsB,EAEtB,uBAAuB,EAEvB,kBAAkB,GACnB,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,GAChB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAEL,sBAAsB,EAEtB,eAAe,EAGf,gBAAgB,EAEhB,uBAAuB,EAEvB,sBAAsB,EAEtB,uBAAuB,EAEvB,kBAAkB,GACnB,MAAM,cAAc,CAAA"}
@@ -1,4 +1,4 @@
1
- import { type ChangesDirectiveProps, type DirectiveName, type DocumentDirectiveProps, type ReleaseDirectiveProps, type ResourceDirectiveProps, type SetDirectiveProps } from './schemas.js';
1
+ import { type ChangesDirectiveProps, type DirectiveName, type DocumentDirectiveProps, type ReleaseDirectiveProps, type ResourceDirectiveProps, type SetDirectiveProps } from '../schemas.js';
2
2
  export declare function formatDirective(name: DirectiveName, props: Record<string, unknown>): string;
3
3
  export declare function createDocumentDirective(props: DocumentDirectiveProps): string;
4
4
  export declare function createReleaseDirective(props: ReleaseDirectiveProps): string;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAE1B,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAA;AAStB,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAG3F;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAE7E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAE3E;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAE7E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAEnE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAE3E"}
@@ -1,4 +1,4 @@
1
- import { DIRECTIVE_NAMES, } from './schemas.js';
1
+ import { DIRECTIVE_NAMES, } from '../schemas.js';
2
2
  function buildAttributes(params) {
3
3
  return Object.entries(params)
4
4
  .filter(([, value]) => value !== undefined && value !== null)
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,GAMhB,MAAM,eAAe,CAAA;AAEtB,SAAS,eAAe,CAAC,MAA+B;IACtD,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;SAC5D,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,KAAK,GAAG,CAAC;SAC1C,IAAI,CAAC,GAAG,CAAC,CAAA;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAmB,EAAE,KAA8B;IACjF,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;IACpC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAA;AACpD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAA6B;IACnE,OAAO,eAAe,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAA4B;IACjE,OAAO,eAAe,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAA6B;IACnE,OAAO,eAAe,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAwB;IACzD,OAAO,eAAe,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;AACpD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAA4B;IACjE,OAAO,eAAe,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;AACxD,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { ComponentType, ReactNode } from 'react';
2
2
  import type { Processor } from 'unified';
3
3
  import type { Node } from 'unist';
4
- import { type DirectiveName, type DirectivePropsMap } from './schemas.js';
4
+ import { type DefineDirectiveOptions, type DirectiveName, type DirectivePropsMap } from '../schemas.js';
5
5
  type DirectiveProps<T extends DirectiveName> = DirectivePropsMap[T];
6
6
  export interface NodeProps {
7
7
  node?: {
@@ -11,14 +11,7 @@ export interface NodeProps {
11
11
  export type DirectiveRenderProps<TName extends DirectiveName, TApplication = undefined, TRequiresApplication extends boolean = true> = DirectiveProps<TName> & (TRequiresApplication extends true ? TApplication extends undefined ? {} : {
12
12
  application: TApplication;
13
13
  } : {});
14
- export interface DefineDirectiveOptions {
15
- /**
16
- * Whether this directive requires application context.
17
- * If true (default), the directive will not render if application is unavailable.
18
- * If false, the directive renders without application injection.
19
- */
20
- requiresApplication?: boolean;
21
- }
14
+ export type { DefineDirectiveOptions };
22
15
  export type DirectiveComponentProps<TName extends DirectiveName> = DirectiveProps<TName> & {
23
16
  source?: string;
24
17
  } & NodeProps;
@@ -58,5 +51,4 @@ export interface DirectiveKitOptions<TApplication> {
58
51
  export declare function createDirectiveKit<TApplication = undefined>(options?: DirectiveKitOptions<TApplication>): {
59
52
  defineDirective: <TName extends DirectiveName, TRequiresApplication extends boolean = true>(name: TName, render: (props: DirectiveRenderProps<TName, TApplication, TRequiresApplication>) => ReactNode, directiveOptions?: DefineDirectiveOptions) => ComponentType<DirectiveComponentProps<TName>>;
60
53
  };
61
- export {};
62
54
  //# sourceMappingURL=react.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/lib/react.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,iBAAiB,EAEvB,MAAM,eAAe,CAAA;AAMtB,KAAK,cAAc,CAAC,CAAC,SAAS,aAAa,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAA;AAEnE,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAA;CAChD;AAED,MAAM,MAAM,oBAAoB,CAC9B,KAAK,SAAS,aAAa,EAC3B,YAAY,GAAG,SAAS,EACxB,oBAAoB,SAAS,OAAO,GAAG,IAAI,IACzC,cAAc,CAAC,KAAK,CAAC,GACvB,CAAC,oBAAoB,SAAS,IAAI,GAC9B,YAAY,SAAS,SAAS,GAC5B,EAAE,GACF;IAAE,WAAW,EAAE,YAAY,CAAA;CAAE,GAC/B,EAAE,CAAC,CAAA;AAET,YAAY,EAAE,sBAAsB,EAAE,CAAA;AAEtC,MAAM,MAAM,uBAAuB,CAAC,KAAK,SAAS,aAAa,IAAI,cAAc,CAAC,KAAK,CAAC,GAAG;IACzF,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,SAAS,CAAA;AAiKb;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,UA9HrC,IAAI,UA0InB;AAMD,MAAM,WAAW,mBAAmB,CAAC,YAAY;IAC/C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,YAAY,GAAG,SAAS,CAAA;CAC1E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,GAAG,SAAS,EACzD,OAAO,GAAE,mBAAmB,CAAC,YAAY,CAAM;sBAK7C,KAAK,SAAS,aAAa,EAC3B,oBAAoB,SAAS,OAAO,eAE9B,KAAK,UACH,CAAC,KAAK,EAAE,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,oBAAoB,CAAC,KAAK,SAAS,qBAC3E,sBAAsB,KACvC,aAAa,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;EAgCjD"}
@@ -2,7 +2,7 @@ import { pascalCase } from 'es-toolkit';
2
2
  import { directiveFromMarkdown, directiveToMarkdown } from 'mdast-util-directive';
3
3
  import { directive } from 'micromark-extension-directive';
4
4
  import { visit } from 'unist-util-visit';
5
- import { DirectiveSchemas } from './schemas.js';
5
+ import { DirectiveSchemas, } from '../schemas.js';
6
6
  const DIRECTIVE_TYPES = ['textDirective', 'leafDirective', 'containerDirective'];
7
7
  const isDirectiveNode = (node) => 'name' in node &&
8
8
  typeof node.name === 'string' &&
@@ -167,11 +167,11 @@ export function remarkAgentDirectives() {
167
167
  export function createDirectiveKit(options = {}) {
168
168
  const { useApplication } = options;
169
169
  function defineDirective(name, render, directiveOptions = {}) {
170
- const { requiresApplication = true } = directiveOptions;
170
+ const requiresContext = directiveOptions.requiresContext ?? directiveOptions.requiresApplication ?? true;
171
171
  function Directive(props) {
172
172
  const { node, source, ...rest } = props;
173
173
  const application = useApplication?.(source);
174
- if (requiresApplication && useApplication && !application)
174
+ if (requiresContext && useApplication && !application)
175
175
  return null;
176
176
  const merged = { ...(node?.properties ?? {}), ...rest };
177
177
  const schema = DirectiveSchemas[name];
@@ -182,7 +182,7 @@ export function createDirectiveKit(options = {}) {
182
182
  }
183
183
  const renderProps = {
184
184
  ...result.data,
185
- ...(requiresApplication && useApplication ? { application } : {}),
185
+ ...(requiresContext && useApplication ? { application } : {}),
186
186
  };
187
187
  return render(renderProps);
188
188
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/lib/react.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import type { Root } from 'mdast';
2
+ import { type DefineDirectiveOptions, type DirectiveName, type DirectivePropsMap } from '../schemas.js';
3
+ export type { DirectiveName };
4
+ type DirectiveProps<T extends DirectiveName> = DirectivePropsMap[T];
5
+ export interface DirectiveNode {
6
+ type: 'textDirective' | 'leafDirective' | 'containerDirective';
7
+ name: string;
8
+ attributes?: Record<string, string | null | undefined>;
9
+ children?: unknown[];
10
+ }
11
+ export interface DirectiveRenderProps<TName extends DirectiveName, TContext> {
12
+ props: DirectiveProps<TName>;
13
+ context: TContext;
14
+ children: string;
15
+ isInline: boolean;
16
+ }
17
+ export type DirectiveRenderFn<TName extends DirectiveName, TContext, TOutput> = (args: DirectiveRenderProps<TName, TContext>) => TOutput | null | Promise<TOutput | null>;
18
+ export type { DefineDirectiveOptions };
19
+ export interface RegisteredDirective<TContext, TOutput> {
20
+ name: DirectiveName;
21
+ render: DirectiveRenderFn<DirectiveName, TContext, TOutput>;
22
+ options: DefineDirectiveOptions;
23
+ }
24
+ type DirectiveRegistry<TContext, TOutput> = Record<string, RegisteredDirective<TContext, TOutput>>;
25
+ /**
26
+ * Creates a directive kit for server-side rendering.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * // kit.ts
31
+ * export const { defineDirective, renderDirective } = createDirectiveKit<
32
+ * SlackContext,
33
+ * SlackOutput
34
+ * >()
35
+ *
36
+ * // document.ts
37
+ * defineDirective('document', async ({ props, context }) => {
38
+ * const doc = await fetchDocument(props.id, context.accessToken)
39
+ * return { blocks: [linkButton(doc.title, url)] }
40
+ * })
41
+ * ```
42
+ */
43
+ export declare function createDirectiveKit<TContext, TOutput>(): {
44
+ defineDirective: <TName extends DirectiveName>(name: TName, render: DirectiveRenderFn<TName, TContext, TOutput>, options?: DefineDirectiveOptions) => RegisteredDirective<TContext, TOutput>;
45
+ renderDirective: (node: DirectiveNode, context: TContext) => Promise<TOutput | null>;
46
+ registry: DirectiveRegistry<TContext, TOutput>;
47
+ };
48
+ export interface DirectiveRenderResult<TBlock = unknown> {
49
+ text?: string;
50
+ blocks?: TBlock[];
51
+ }
52
+ export type DirectiveOutput<TBlock = unknown> = string | DirectiveRenderResult<TBlock> | null;
53
+ export declare function normalizeOutput<TBlock>(output: DirectiveOutput<TBlock>): DirectiveRenderResult<TBlock> | null;
54
+ export interface BlockCollector<TBlock = unknown> {
55
+ blocks: TBlock[];
56
+ }
57
+ type RenderFn<TContext, TOutput> = (node: DirectiveNode, context: TContext) => Promise<TOutput | null>;
58
+ /**
59
+ * Creates a remark plugin that renders directives and collects output blocks.
60
+ *
61
+ * @example
62
+ * ```ts
63
+ * const remarkRenderDirectives = createRemarkRenderer<SlackContext, SlackBlock>(renderDirective)
64
+ *
65
+ * unified()
66
+ * .use(remarkParse)
67
+ * .use(remarkDirective)
68
+ * .use(remarkRenderDirectives, context, collector)
69
+ * .use(remarkStringify)
70
+ * ```
71
+ */
72
+ export declare function createRemarkRenderer<TContext, TBlock>(renderDirective: RenderFn<TContext, DirectiveRenderResult<TBlock> | null>): (context: TContext, collector: BlockCollector<TBlock>) => (tree: Root) => Promise<void>;
73
+ //# sourceMappingURL=string.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/lib/string.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ import { visit } from 'unist-util-visit';
2
+ import { DirectiveSchemas, } from '../schemas.js';
3
+ function extractChildren(node) {
4
+ if (!node.children || !Array.isArray(node.children)) {
5
+ return '';
6
+ }
7
+ function extractText(n) {
8
+ if (!n || typeof n !== 'object')
9
+ return '';
10
+ if ('type' in n && n.type === 'text' && 'value' in n && typeof n.value === 'string') {
11
+ return n.value;
12
+ }
13
+ if ('children' in n && Array.isArray(n.children)) {
14
+ return n.children.map(extractText).join('');
15
+ }
16
+ return '';
17
+ }
18
+ return node.children.map(extractText).join('');
19
+ }
20
+ /**
21
+ * Creates a directive kit for server-side rendering.
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * // kit.ts
26
+ * export const { defineDirective, renderDirective } = createDirectiveKit<
27
+ * SlackContext,
28
+ * SlackOutput
29
+ * >()
30
+ *
31
+ * // document.ts
32
+ * defineDirective('document', async ({ props, context }) => {
33
+ * const doc = await fetchDocument(props.id, context.accessToken)
34
+ * return { blocks: [linkButton(doc.title, url)] }
35
+ * })
36
+ * ```
37
+ */
38
+ export function createDirectiveKit() {
39
+ const registry = {};
40
+ function defineDirective(name, render, options = {}) {
41
+ const directive = {
42
+ name,
43
+ render: render,
44
+ options,
45
+ };
46
+ registry[name] = directive;
47
+ return directive;
48
+ }
49
+ async function renderDirective(node, context) {
50
+ const directive = registry[node.name];
51
+ if (!directive)
52
+ return null;
53
+ const schema = DirectiveSchemas[node.name];
54
+ if (!schema)
55
+ return null;
56
+ const result = schema.safeParse(node.attributes ?? {});
57
+ if (!result.success) {
58
+ console.error(`Directive "${node.name}" validation error:`, result.error.format());
59
+ return null;
60
+ }
61
+ return directive.render({
62
+ props: result.data,
63
+ context,
64
+ children: extractChildren(node),
65
+ isInline: node.type === 'textDirective',
66
+ });
67
+ }
68
+ return { defineDirective, renderDirective, registry };
69
+ }
70
+ export function normalizeOutput(output) {
71
+ if (output === null)
72
+ return null;
73
+ if (typeof output === 'string')
74
+ return { text: output };
75
+ return output;
76
+ }
77
+ // ============================================================================
78
+ // Remark Plugin
79
+ // ============================================================================
80
+ const DIRECTIVE_TYPES = ['textDirective', 'leafDirective', 'containerDirective'];
81
+ function isDirectiveNode(node) {
82
+ return (typeof node === 'object' &&
83
+ node !== null &&
84
+ 'type' in node &&
85
+ typeof node.type === 'string' &&
86
+ DIRECTIVE_TYPES.includes(node.type) &&
87
+ 'name' in node &&
88
+ typeof node.name === 'string');
89
+ }
90
+ /**
91
+ * Creates a remark plugin that renders directives and collects output blocks.
92
+ *
93
+ * @example
94
+ * ```ts
95
+ * const remarkRenderDirectives = createRemarkRenderer<SlackContext, SlackBlock>(renderDirective)
96
+ *
97
+ * unified()
98
+ * .use(remarkParse)
99
+ * .use(remarkDirective)
100
+ * .use(remarkRenderDirectives, context, collector)
101
+ * .use(remarkStringify)
102
+ * ```
103
+ */
104
+ export function createRemarkRenderer(renderDirective) {
105
+ return function remarkRenderDirectives(context, collector) {
106
+ return async (tree) => {
107
+ const locations = [];
108
+ visit(tree, DIRECTIVE_TYPES, (node, index, parent) => {
109
+ if (!isDirectiveNode(node))
110
+ return;
111
+ if (!parent || typeof index !== 'number')
112
+ return;
113
+ locations.push({ node, index, parent });
114
+ });
115
+ const replacements = await Promise.all(locations.map(async (loc) => ({
116
+ ...loc,
117
+ output: normalizeOutput(await renderDirective(loc.node, context)),
118
+ })));
119
+ for (let i = replacements.length - 1; i >= 0; i--) {
120
+ const { node, index, parent, output } = replacements[i];
121
+ if (output?.blocks) {
122
+ collector.blocks.unshift(...output.blocks);
123
+ }
124
+ if (output?.text) {
125
+ parent.children.splice(index, 1, {
126
+ type: 'paragraph',
127
+ children: [{ type: 'text', value: output.text }],
128
+ });
129
+ continue;
130
+ }
131
+ if (node.type === 'containerDirective' && node.children && node.children.length > 0) {
132
+ const containerNode = node;
133
+ parent.children.splice(index, 1, ...containerNode.children);
134
+ continue;
135
+ }
136
+ parent.children.splice(index, 1);
137
+ }
138
+ };
139
+ };
140
+ }
141
+ //# sourceMappingURL=string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/lib/string.ts"],"names":[],"mappings":"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"}
package/dist/schemas.d.ts CHANGED
@@ -115,4 +115,13 @@ export interface DirectivePropsMap {
115
115
  set: SetDirectiveProps;
116
116
  changes: ChangesDirectiveProps;
117
117
  }
118
+ export interface DefineDirectiveOptions {
119
+ /**
120
+ * Whether this directive requires context/application to render.
121
+ * If true (default), the directive won't render without context.
122
+ */
123
+ requiresContext?: boolean;
124
+ /** @deprecated Use `requiresContext` instead */
125
+ requiresApplication?: boolean;
126
+ }
118
127
  //# sourceMappingURL=schemas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;EAIlC,CAAA;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;EAGjC,CAAA;AAEF,eAAO,MAAM,uBAAuB;;;;;;EAElC,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;;;EAE7B,CAAA;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;EAGjC,CAAA;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMnB,CAAA;AAEV,eAAO,MAAM,eAAe;;;;;;CAMlB,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAA;AAElF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAC5E,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAC1E,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAC5E,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAClE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE1E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,sBAAsB,CAAA;IAChC,OAAO,EAAE,qBAAqB,CAAA;IAC9B,QAAQ,EAAE,sBAAsB,CAAA;IAChC,GAAG,EAAE,iBAAiB,CAAA;IACtB,OAAO,EAAE,qBAAqB,CAAA;CAC/B"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;EAIlC,CAAA;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;EAGjC,CAAA;AAEF,eAAO,MAAM,uBAAuB;;;;;;EAElC,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;;;EAE7B,CAAA;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;EAGjC,CAAA;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMnB,CAAA;AAEV,eAAO,MAAM,eAAe;;;;;;CAMlB,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAA;AAElF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAC5E,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAC1E,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAC5E,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAClE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE1E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,sBAAsB,CAAA;IAChC,OAAO,EAAE,qBAAqB,CAAA;IAC9B,QAAQ,EAAE,sBAAsB,CAAA;IAChC,GAAG,EAAE,iBAAiB,CAAA;IACtB,OAAO,EAAE,qBAAqB,CAAA;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,gDAAgD;IAChD,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanity/agent-directives",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "description": "Shared directive system for Sanity Agent",
5
5
  "keywords": [
6
6
  "sanity",
@@ -20,16 +20,16 @@
20
20
  "types": "./dist/index.d.ts"
21
21
  },
22
22
  "./formatters": {
23
- "import": "./dist/formatters.js",
24
- "types": "./dist/formatters.d.ts"
23
+ "import": "./dist/lib/formatters.js",
24
+ "types": "./dist/lib/formatters.d.ts"
25
25
  },
26
26
  "./react": {
27
- "import": "./dist/react.js",
28
- "types": "./dist/react.d.ts"
27
+ "import": "./dist/lib/react.js",
28
+ "types": "./dist/lib/react.d.ts"
29
29
  },
30
30
  "./string": {
31
- "import": "./dist/string.js",
32
- "types": "./dist/string.d.ts"
31
+ "import": "./dist/lib/string.js",
32
+ "types": "./dist/lib/string.d.ts"
33
33
  }
34
34
  },
35
35
  "main": "./dist/index.js",
@@ -52,6 +52,7 @@
52
52
  "zod": "^3.25.76"
53
53
  },
54
54
  "devDependencies": {
55
+ "@types/mdast": "^4.0.4",
55
56
  "@testing-library/jest-dom": "^6.6.3",
56
57
  "@testing-library/react": "^16.0.0",
57
58
  "@types/react": "^19.0.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../src/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAE1B,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACvB,MAAM,cAAc,CAAA;AASrB,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAG3F;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAE7E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAE3E;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAE7E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAEnE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAE3E"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../src/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,GAMhB,MAAM,cAAc,CAAA;AAErB,SAAS,eAAe,CAAC,MAA+B;IACtD,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;SAC5D,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,KAAK,GAAG,CAAC;SAC1C,IAAI,CAAC,GAAG,CAAC,CAAA;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAmB,EAAE,KAA8B;IACjF,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;IACpC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAA;AACpD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAA6B;IACnE,OAAO,eAAe,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAA4B;IACjE,OAAO,eAAe,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAA6B;IACnE,OAAO,eAAe,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAwB;IACzD,OAAO,eAAe,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;AACpD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAA4B;IACjE,OAAO,eAAe,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;AACxD,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAoB,MAAM,cAAc,CAAA;AAM3F,KAAK,cAAc,CAAC,CAAC,SAAS,aAAa,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAA;AAEnE,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAA;CAChD;AAED,MAAM,MAAM,oBAAoB,CAC9B,KAAK,SAAS,aAAa,EAC3B,YAAY,GAAG,SAAS,EACxB,oBAAoB,SAAS,OAAO,GAAG,IAAI,IACzC,cAAc,CAAC,KAAK,CAAC,GACvB,CAAC,oBAAoB,SAAS,IAAI,GAC9B,YAAY,SAAS,SAAS,GAC5B,EAAE,GACF;IAAE,WAAW,EAAE,YAAY,CAAA;CAAE,GAC/B,EAAE,CAAC,CAAA;AAET,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,MAAM,uBAAuB,CAAC,KAAK,SAAS,aAAa,IAAI,cAAc,CAAC,KAAK,CAAC,GAAG;IACzF,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,SAAS,CAAA;AAiKb;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,UA9HrC,IAAI,UA0InB;AAMD,MAAM,WAAW,mBAAmB,CAAC,YAAY;IAC/C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,YAAY,GAAG,SAAS,CAAA;CAC1E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,GAAG,SAAS,EACzD,OAAO,GAAE,mBAAmB,CAAC,YAAY,CAAM;sBAK7C,KAAK,SAAS,aAAa,EAC3B,oBAAoB,SAAS,OAAO,eAE9B,KAAK,UACH,CAAC,KAAK,EAAE,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,oBAAoB,CAAC,KAAK,SAAS,qBAC3E,sBAAsB,KACvC,aAAa,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;EA+BjD"}
package/dist/react.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"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"}
package/dist/string.d.ts DELETED
@@ -1,34 +0,0 @@
1
- import { type DirectiveName, type DirectivePropsMap } from './schemas.js';
2
- export type { DirectiveName };
3
- type DirectiveProps<T extends DirectiveName> = DirectivePropsMap[T];
4
- export interface DirectiveNode {
5
- type: 'textDirective' | 'leafDirective' | 'containerDirective';
6
- name: string;
7
- attributes?: Record<string, string | null | undefined>;
8
- children?: unknown[];
9
- }
10
- export interface DirectiveBaseProps {
11
- children: string;
12
- isInline: boolean;
13
- }
14
- export type DirectiveRenderFn<TName extends DirectiveName, TContext, TOutput> = (props: DirectiveProps<TName> & DirectiveBaseProps & {
15
- _context: TContext;
16
- }) => TOutput | null | Promise<TOutput | null>;
17
- export interface StringDirective<TName extends DirectiveName, TContext, TOutput> {
18
- name: TName;
19
- render: DirectiveRenderFn<TName, TContext, TOutput>;
20
- }
21
- export type StringDirectiveRegistry<TContext, TOutput> = Record<string, StringDirective<DirectiveName, TContext, TOutput>>;
22
- export declare function createDirectiveKit<TContext = unknown, TOutput = unknown>(): {
23
- defineDirective: <TName extends DirectiveName>(name: TName, render: DirectiveRenderFn<TName, TContext, TOutput>) => StringDirective<TName, TContext, TOutput>;
24
- renderDirective: (node: DirectiveNode, context: TContext) => Promise<TOutput | null>;
25
- registry: StringDirectiveRegistry<TContext, TOutput>;
26
- };
27
- export interface DirectiveRenderResult<TBlock = unknown> {
28
- text?: string;
29
- blocks?: TBlock[];
30
- }
31
- export type DirectiveOutput<TBlock = unknown> = string | DirectiveRenderResult<TBlock> | null;
32
- export declare function hasBlocks<TBlock>(output: DirectiveOutput<TBlock>): output is DirectiveRenderResult<TBlock>;
33
- export declare function normalizeOutput<TBlock>(output: DirectiveOutput<TBlock>): DirectiveRenderResult<TBlock> | null;
34
- //# sourceMappingURL=string.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAoB,MAAM,cAAc,CAAA;AAE3F,YAAY,EAAE,aAAa,EAAE,CAAA;AAE7B,KAAK,cAAc,CAAC,CAAC,SAAS,aAAa,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAA;AAEnE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,eAAe,GAAG,eAAe,GAAG,oBAAoB,CAAA;IAC9D,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;IACtD,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,MAAM,iBAAiB,CAAC,KAAK,SAAS,aAAa,EAAE,QAAQ,EAAE,OAAO,IAAI,CAC9E,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,kBAAkB,GAAG;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,KACvE,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;AAE7C,MAAM,WAAW,eAAe,CAAC,KAAK,SAAS,aAAa,EAAE,QAAQ,EAAE,OAAO;IAC7E,IAAI,EAAE,KAAK,CAAA;IACX,MAAM,EAAE,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;CACpD;AAED,MAAM,MAAM,uBAAuB,CAAC,QAAQ,EAAE,OAAO,IAAI,MAAM,CAC7D,MAAM,EACN,eAAe,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,CAClD,CAAA;AAqBD,wBAAgB,kBAAkB,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;sBAG7C,KAAK,SAAS,aAAa,QAC5C,KAAK,UACH,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,KAClD,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC;4BAMP,aAAa,WAAW,QAAQ,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;;EAgChG;AAED,MAAM,WAAW,qBAAqB,CAAC,MAAM,GAAG,OAAO;IACrD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,MAAM,eAAe,CAAC,MAAM,GAAG,OAAO,IAAI,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;AAE7F,wBAAgB,SAAS,CAAC,MAAM,EAC9B,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,GAC9B,MAAM,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAEzC;AAED,wBAAgB,eAAe,CAAC,MAAM,EACpC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,GAC9B,qBAAqB,CAAC,MAAM,CAAC,GAAG,IAAI,CAQtC"}
package/dist/string.js DELETED
@@ -1,65 +0,0 @@
1
- import { DirectiveSchemas } from './schemas.js';
2
- function extractChildren(node) {
3
- if (!node.children || !Array.isArray(node.children)) {
4
- return '';
5
- }
6
- function extractText(n) {
7
- if (!n || typeof n !== 'object')
8
- return '';
9
- if ('type' in n && n.type === 'text' && 'value' in n && typeof n.value === 'string') {
10
- return n.value;
11
- }
12
- if ('children' in n && Array.isArray(n.children)) {
13
- return n.children.map(extractText).join('');
14
- }
15
- return '';
16
- }
17
- return node.children.map(extractText).join('');
18
- }
19
- export function createDirectiveKit() {
20
- const registry = {};
21
- function defineDirective(name, render) {
22
- const directive = { name, render };
23
- registry[name] = directive;
24
- return directive;
25
- }
26
- async function renderDirective(node, context) {
27
- const directive = registry[node.name];
28
- if (!directive)
29
- return null;
30
- const schema = DirectiveSchemas[node.name];
31
- if (!schema)
32
- return null;
33
- const rawProps = {
34
- ...node.attributes,
35
- children: extractChildren(node),
36
- isInline: node.type === 'textDirective',
37
- };
38
- const result = schema.safeParse(rawProps);
39
- if (!result.success) {
40
- console.error(`Directive "${node.name}" validation error:`, result.error.format());
41
- return null;
42
- }
43
- const props = {
44
- ...result.data,
45
- children: rawProps.children,
46
- isInline: rawProps.isInline,
47
- _context: context,
48
- };
49
- return directive.render(props);
50
- }
51
- return { defineDirective, renderDirective, registry };
52
- }
53
- export function hasBlocks(output) {
54
- return output !== null && typeof output === 'object' && 'blocks' in output;
55
- }
56
- export function normalizeOutput(output) {
57
- if (output === null) {
58
- return null;
59
- }
60
- if (typeof output === 'string') {
61
- return { text: output };
62
- }
63
- return output;
64
- }
65
- //# sourceMappingURL=string.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"string.js","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"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"}