@promptlycms/prompts 0.4.0 → 0.4.1-canary.8df0df3
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 +18 -0
- package/dist/cli.js +37 -8
- package/dist/index.cjs +7 -0
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +7 -0
- package/dist/schema.d.cts +1 -1
- package/dist/schema.d.ts +1 -1
- package/dist/{types-DIVyjOlH.d.cts → types-uh2qV9-f.d.cts} +6 -2
- package/dist/{types-DIVyjOlH.d.ts → types-uh2qV9-f.d.ts} +6 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -180,6 +180,24 @@ const [first, second] = await promptly.getComposers([
|
|
|
180
180
|
]);
|
|
181
181
|
```
|
|
182
182
|
|
|
183
|
+
### HTML blocks
|
|
184
|
+
|
|
185
|
+
Composers can contain raw HTML blocks (for vendor-specific markup like MSO conditional comments in transactional emails). These surface as a distinct `html_block` segment type:
|
|
186
|
+
|
|
187
|
+
```typescript
|
|
188
|
+
const composer = await promptly.getComposer('my-email-composer', {
|
|
189
|
+
input: { country: 'United Kingdom' },
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
for (const segment of composer.segments) {
|
|
193
|
+
if (segment.type === 'html_block') {
|
|
194
|
+
console.log(segment.html); // raw HTML, byte-exact
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Variable references inside an `html_block` (e.g. `<span data-variable-ref data-field-path="country">`) are interpolated normally during `formatComposer()` / `compose()`. Embedded prompt references inside an `html_block` are passed through opaquely — they aren't resolved as named prompts.
|
|
200
|
+
|
|
183
201
|
## Model auto-detection
|
|
184
202
|
|
|
185
203
|
The SDK automatically resolves models configured in the CMS to the correct AI SDK provider based on the model name prefix:
|
package/dist/cli.js
CHANGED
|
@@ -86,6 +86,28 @@ var extractTemplateVariables = (text) => {
|
|
|
86
86
|
}
|
|
87
87
|
return [...vars];
|
|
88
88
|
};
|
|
89
|
+
var extractStaticSegmentVariables = (content) => {
|
|
90
|
+
const vars = /* @__PURE__ */ new Set();
|
|
91
|
+
const varRefRegex = /<span[^>]*\sdata-variable-ref(?:="[^"]*")?[^>]*\sdata-field-path="([^"]+)"[^>]*><\/span>/g;
|
|
92
|
+
const varRefAltRegex = /<span[^>]*\sdata-field-path="([^"]+)"[^>]*\sdata-variable-ref(?:="[^"]*")?[^>]*><\/span>/g;
|
|
93
|
+
const mustacheRegex = /\{\{(\w[\w.]*)\}\}/g;
|
|
94
|
+
for (const match of content.matchAll(varRefRegex)) {
|
|
95
|
+
if (match[1]) {
|
|
96
|
+
vars.add(match[1]);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
for (const match of content.matchAll(varRefAltRegex)) {
|
|
100
|
+
if (match[1]) {
|
|
101
|
+
vars.add(match[1]);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
for (const match of content.matchAll(mustacheRegex)) {
|
|
105
|
+
if (match[1]) {
|
|
106
|
+
vars.add(match[1]);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return [...vars];
|
|
110
|
+
};
|
|
89
111
|
var fetchAllPrompts = async (apiKey, baseUrl) => {
|
|
90
112
|
const url = new URL("/prompts", baseUrl ?? DEFAULT_BASE_URL);
|
|
91
113
|
url.searchParams.set("include_versions", "true");
|
|
@@ -115,14 +137,21 @@ var fetchAllComposers = async (apiKey, baseUrl) => {
|
|
|
115
137
|
var extractComposerVariables = (composer) => {
|
|
116
138
|
const vars = /* @__PURE__ */ new Set();
|
|
117
139
|
for (const segment of composer.segments) {
|
|
118
|
-
if (segment.type
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
140
|
+
if (segment.type === "prompt") {
|
|
141
|
+
if (!segment.userMessage) {
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
for (const v of extractTemplateVariables(segment.userMessage)) {
|
|
145
|
+
vars.add(v);
|
|
146
|
+
}
|
|
147
|
+
} else if (segment.type === "static") {
|
|
148
|
+
for (const v of extractStaticSegmentVariables(segment.content)) {
|
|
149
|
+
vars.add(v);
|
|
150
|
+
}
|
|
151
|
+
} else if (segment.type === "html_block") {
|
|
152
|
+
for (const v of extractStaticSegmentVariables(segment.html)) {
|
|
153
|
+
vars.add(v);
|
|
154
|
+
}
|
|
126
155
|
}
|
|
127
156
|
}
|
|
128
157
|
return [...vars];
|
package/dist/index.cjs
CHANGED
|
@@ -275,6 +275,13 @@ var createPromptlyClient = (config) => {
|
|
|
275
275
|
});
|
|
276
276
|
continue;
|
|
277
277
|
}
|
|
278
|
+
if (segment.type === "html_block") {
|
|
279
|
+
processedSegments.push({
|
|
280
|
+
type: "static",
|
|
281
|
+
content: interpolateStaticSegment(segment.html, input)
|
|
282
|
+
});
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
278
285
|
const camelName = toCamelCase(segment.promptName);
|
|
279
286
|
if (!promptsByName.has(camelName)) {
|
|
280
287
|
const segmentConfig = segment.config;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { P as PromptlyClientConfig, a as PromptlyClient, E as ErrorCode } from './types-
|
|
2
|
-
export { C as ComposerConfig, b as ComposerFormatFn, c as ComposerGenerateFn, d as
|
|
1
|
+
import { P as PromptlyClientConfig, a as PromptlyClient, E as ErrorCode } from './types-uh2qV9-f.cjs';
|
|
2
|
+
export { C as ComposerConfig, b as ComposerFormatFn, c as ComposerGenerateFn, d as ComposerHtmlBlockSegment, e as ComposerId, f as ComposerInputFor, g as ComposerPrompt, h as ComposerPromptMap, i as ComposerPromptNamesFor, j as ComposerPromptSegment, k as ComposerRequest, l as ComposerResponse, m as ComposerResult, n as ComposerSegment, o as ComposerStaticSegment, p as ComposerVariableMap, q as ComposerVersion, r as ErrorResponse, F as FormatInput, G as GetComposerOptions, s as GetOptions, t as PromptConfig, u as PromptId, v as PromptMessage, w as PromptRequest, x as PromptResponse, y as PromptResult, z as PromptVariableMap, A as PromptVersion, B as PublishedVersion, S as SchemaField, D as SchemaFieldParams, V as ValidationRule } from './types-uh2qV9-f.cjs';
|
|
3
3
|
import 'ai';
|
|
4
4
|
|
|
5
5
|
declare const getSdkModelId: (modelId: string) => string;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { P as PromptlyClientConfig, a as PromptlyClient, E as ErrorCode } from './types-
|
|
2
|
-
export { C as ComposerConfig, b as ComposerFormatFn, c as ComposerGenerateFn, d as
|
|
1
|
+
import { P as PromptlyClientConfig, a as PromptlyClient, E as ErrorCode } from './types-uh2qV9-f.js';
|
|
2
|
+
export { C as ComposerConfig, b as ComposerFormatFn, c as ComposerGenerateFn, d as ComposerHtmlBlockSegment, e as ComposerId, f as ComposerInputFor, g as ComposerPrompt, h as ComposerPromptMap, i as ComposerPromptNamesFor, j as ComposerPromptSegment, k as ComposerRequest, l as ComposerResponse, m as ComposerResult, n as ComposerSegment, o as ComposerStaticSegment, p as ComposerVariableMap, q as ComposerVersion, r as ErrorResponse, F as FormatInput, G as GetComposerOptions, s as GetOptions, t as PromptConfig, u as PromptId, v as PromptMessage, w as PromptRequest, x as PromptResponse, y as PromptResult, z as PromptVariableMap, A as PromptVersion, B as PublishedVersion, S as SchemaField, D as SchemaFieldParams, V as ValidationRule } from './types-uh2qV9-f.js';
|
|
3
3
|
import 'ai';
|
|
4
4
|
|
|
5
5
|
declare const getSdkModelId: (modelId: string) => string;
|
package/dist/index.js
CHANGED
|
@@ -234,6 +234,13 @@ var createPromptlyClient = (config) => {
|
|
|
234
234
|
});
|
|
235
235
|
continue;
|
|
236
236
|
}
|
|
237
|
+
if (segment.type === "html_block") {
|
|
238
|
+
processedSegments.push({
|
|
239
|
+
type: "static",
|
|
240
|
+
content: interpolateStaticSegment(segment.html, input)
|
|
241
|
+
});
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
237
244
|
const camelName = toCamelCase(segment.promptName);
|
|
238
245
|
if (!promptsByName.has(camelName)) {
|
|
239
246
|
const segmentConfig = segment.config;
|
package/dist/schema.d.cts
CHANGED
package/dist/schema.d.ts
CHANGED
|
@@ -108,7 +108,11 @@ type ComposerPromptSegment = {
|
|
|
108
108
|
userMessage: string | null;
|
|
109
109
|
config: Record<string, unknown>;
|
|
110
110
|
};
|
|
111
|
-
type
|
|
111
|
+
type ComposerHtmlBlockSegment = {
|
|
112
|
+
type: 'html_block';
|
|
113
|
+
html: string;
|
|
114
|
+
};
|
|
115
|
+
type ComposerSegment = ComposerStaticSegment | ComposerPromptSegment | ComposerHtmlBlockSegment;
|
|
112
116
|
type ComposerConfig = {
|
|
113
117
|
schema: SchemaField[];
|
|
114
118
|
inputData: unknown;
|
|
@@ -195,4 +199,4 @@ type PromptlyClient = {
|
|
|
195
199
|
getComposers: <const T extends readonly ComposerRequest[]>(entries: T) => Promise<GetComposersResults<T>>;
|
|
196
200
|
};
|
|
197
201
|
|
|
198
|
-
export type {
|
|
202
|
+
export type { PromptVersion as A, PublishedVersion as B, ComposerConfig as C, SchemaFieldParams as D, ErrorCode as E, FormatInput as F, GetComposerOptions as G, PromptlyClientConfig as P, SchemaField as S, ValidationRule as V, PromptlyClient as a, ComposerFormatFn as b, ComposerGenerateFn as c, ComposerHtmlBlockSegment as d, ComposerId as e, ComposerInputFor as f, ComposerPrompt as g, ComposerPromptMap as h, ComposerPromptNamesFor as i, ComposerPromptSegment as j, ComposerRequest as k, ComposerResponse as l, ComposerResult as m, ComposerSegment as n, ComposerStaticSegment as o, ComposerVariableMap as p, ComposerVersion as q, ErrorResponse as r, GetOptions as s, PromptConfig as t, PromptId as u, PromptMessage as v, PromptRequest as w, PromptResponse as x, PromptResult as y, PromptVariableMap as z };
|
|
@@ -108,7 +108,11 @@ type ComposerPromptSegment = {
|
|
|
108
108
|
userMessage: string | null;
|
|
109
109
|
config: Record<string, unknown>;
|
|
110
110
|
};
|
|
111
|
-
type
|
|
111
|
+
type ComposerHtmlBlockSegment = {
|
|
112
|
+
type: 'html_block';
|
|
113
|
+
html: string;
|
|
114
|
+
};
|
|
115
|
+
type ComposerSegment = ComposerStaticSegment | ComposerPromptSegment | ComposerHtmlBlockSegment;
|
|
112
116
|
type ComposerConfig = {
|
|
113
117
|
schema: SchemaField[];
|
|
114
118
|
inputData: unknown;
|
|
@@ -195,4 +199,4 @@ type PromptlyClient = {
|
|
|
195
199
|
getComposers: <const T extends readonly ComposerRequest[]>(entries: T) => Promise<GetComposersResults<T>>;
|
|
196
200
|
};
|
|
197
201
|
|
|
198
|
-
export type {
|
|
202
|
+
export type { PromptVersion as A, PublishedVersion as B, ComposerConfig as C, SchemaFieldParams as D, ErrorCode as E, FormatInput as F, GetComposerOptions as G, PromptlyClientConfig as P, SchemaField as S, ValidationRule as V, PromptlyClient as a, ComposerFormatFn as b, ComposerGenerateFn as c, ComposerHtmlBlockSegment as d, ComposerId as e, ComposerInputFor as f, ComposerPrompt as g, ComposerPromptMap as h, ComposerPromptNamesFor as i, ComposerPromptSegment as j, ComposerRequest as k, ComposerResponse as l, ComposerResult as m, ComposerSegment as n, ComposerStaticSegment as o, ComposerVariableMap as p, ComposerVersion as q, ErrorResponse as r, GetOptions as s, PromptConfig as t, PromptId as u, PromptMessage as v, PromptRequest as w, PromptResponse as x, PromptResult as y, PromptVariableMap as z };
|