@basementstudio/sanity-ai-image-plugin 0.0.0 → 0.1.0
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 +281 -257
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/presets/article-featured-image.d.ts +3 -0
- package/dist/presets/article-featured-image.d.ts.map +1 -0
- package/dist/presets/article-featured-image.js +17 -0
- package/dist/presets/article-featured-image.js.map +1 -0
- package/dist/server/constants.d.ts +6 -0
- package/dist/server/constants.d.ts.map +1 -0
- package/{src/server/constants.ts → dist/server/constants.js} +17 -20
- package/dist/server/constants.js.map +1 -0
- package/dist/server/handle-request.d.ts +5 -0
- package/dist/server/handle-request.d.ts.map +1 -0
- package/dist/server/handle-request.js +122 -0
- package/dist/server/handle-request.js.map +1 -0
- package/dist/server/types.d.ts +28 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +2 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server/utils.d.ts +50 -0
- package/dist/server/utils.d.ts.map +1 -0
- package/dist/server/utils.js +274 -0
- package/dist/server/utils.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +3 -0
- package/dist/server.js.map +1 -0
- package/dist/studio/components/asset-source.d.ts +4 -0
- package/dist/studio/components/asset-source.d.ts.map +1 -0
- package/dist/studio/components/asset-source.js +163 -0
- package/dist/studio/components/asset-source.js.map +1 -0
- package/dist/studio/components/generate-button-input.d.ts +8 -0
- package/dist/studio/components/generate-button-input.d.ts.map +1 -0
- package/dist/studio/components/generate-button-input.js +186 -0
- package/dist/studio/components/generate-button-input.js.map +1 -0
- package/dist/studio/components/input-router.d.ts +7 -0
- package/dist/studio/components/input-router.d.ts.map +1 -0
- package/dist/studio/components/input-router.js +21 -0
- package/dist/studio/components/input-router.js.map +1 -0
- package/dist/studio/files.d.ts +9 -0
- package/dist/studio/files.d.ts.map +1 -0
- package/dist/studio/files.js +86 -0
- package/dist/studio/files.js.map +1 -0
- package/dist/studio/plugin.d.ts +3 -0
- package/dist/studio/plugin.d.ts.map +1 -0
- package/dist/studio/plugin.js +47 -0
- package/dist/studio/plugin.js.map +1 -0
- package/dist/studio/settings/schema.d.ts +8 -0
- package/dist/studio/settings/schema.d.ts.map +1 -0
- package/dist/studio/settings/schema.js +110 -0
- package/dist/studio/settings/schema.js.map +1 -0
- package/dist/studio/settings/tool.d.ts +3 -0
- package/dist/studio/settings/tool.d.ts.map +1 -0
- package/dist/studio/settings/tool.js +292 -0
- package/dist/studio/settings/tool.js.map +1 -0
- package/dist/studio/settings-data.d.ts +24 -0
- package/dist/studio/settings-data.d.ts.map +1 -0
- package/dist/studio/settings-data.js +99 -0
- package/dist/studio/settings-data.js.map +1 -0
- package/dist/studio/shared-secret.d.ts +9 -0
- package/dist/studio/shared-secret.d.ts.map +1 -0
- package/dist/studio/shared-secret.js +37 -0
- package/dist/studio/shared-secret.js.map +1 -0
- package/dist/utils/config.d.ts +3 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +41 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/context-fields.d.ts +16 -0
- package/dist/utils/context-fields.d.ts.map +1 -0
- package/dist/utils/context-fields.js +104 -0
- package/dist/utils/context-fields.js.map +1 -0
- package/dist/utils/document-paths.d.ts +10 -0
- package/dist/utils/document-paths.d.ts.map +1 -0
- package/dist/utils/document-paths.js +33 -0
- package/dist/utils/document-paths.js.map +1 -0
- package/dist/utils/models.d.ts +22 -0
- package/dist/utils/models.d.ts.map +1 -0
- package/dist/utils/models.js +76 -0
- package/dist/utils/models.js.map +1 -0
- package/dist/utils/prompts.d.ts +2 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +7 -0
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/shared.d.ts +82 -0
- package/dist/utils/shared.d.ts.map +1 -0
- package/dist/utils/shared.js +13 -0
- package/dist/utils/shared.js.map +1 -0
- package/package.json +53 -47
- package/src/index.ts +0 -23
- package/src/presets/article-featured-image.ts +0 -23
- package/src/server/handle-request.ts +0 -207
- package/src/server/types.ts +0 -30
- package/src/server/utils.ts +0 -395
- package/src/server.ts +0 -14
- package/src/studio/components/asset-source.tsx +0 -297
- package/src/studio/components/generate-button-input.tsx +0 -380
- package/src/studio/components/input-router.tsx +0 -41
- package/src/studio/files.ts +0 -114
- package/src/studio/plugin.tsx +0 -54
- package/src/studio/settings/schema.ts +0 -122
- package/src/studio/settings/tool.tsx +0 -587
- package/src/studio/settings-data.ts +0 -172
- package/src/utils/config.ts +0 -55
- package/src/utils/context-fields.ts +0 -172
- package/src/utils/document-paths.ts +0 -51
- package/src/utils/models.ts +0 -126
- package/src/utils/prompts.ts +0 -6
- package/src/utils/shared.ts +0 -88
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { SHARED_SECRET_KEY, SHARED_SECRET_NAMESPACE, SETTINGS_TOOL_TITLE, } from "../utils/shared";
|
|
2
|
+
const STUDIO_SECRETS_DOCUMENT_TYPE = "pluginSecrets";
|
|
3
|
+
export function getSharedSecretValue(secrets) {
|
|
4
|
+
const sharedSecret = secrets?.sharedSecret;
|
|
5
|
+
if (typeof sharedSecret !== "string") {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
const normalizedSharedSecret = sharedSecret.trim();
|
|
9
|
+
return normalizedSharedSecret ? normalizedSharedSecret : null;
|
|
10
|
+
}
|
|
11
|
+
export function getMissingSharedSecretMessage() {
|
|
12
|
+
return `${SETTINGS_TOOL_TITLE} shared secret is not configured. Open the ${SETTINGS_TOOL_TITLE} settings tool and add it before generating images.`;
|
|
13
|
+
}
|
|
14
|
+
export async function saveAiImagePluginSharedSecret(client, sharedSecret) {
|
|
15
|
+
const normalizedSharedSecret = sharedSecret.trim();
|
|
16
|
+
if (!normalizedSharedSecret) {
|
|
17
|
+
throw new Error("Enter a shared secret before saving.");
|
|
18
|
+
}
|
|
19
|
+
const documentId = `secrets.${SHARED_SECRET_NAMESPACE}`;
|
|
20
|
+
await client
|
|
21
|
+
.transaction()
|
|
22
|
+
.createIfNotExists({
|
|
23
|
+
_id: documentId,
|
|
24
|
+
_type: STUDIO_SECRETS_DOCUMENT_TYPE,
|
|
25
|
+
})
|
|
26
|
+
.patch(client.patch(documentId).set({
|
|
27
|
+
secrets: {
|
|
28
|
+
[SHARED_SECRET_KEY]: normalizedSharedSecret,
|
|
29
|
+
},
|
|
30
|
+
}))
|
|
31
|
+
.commit({
|
|
32
|
+
tag: "secrets.store",
|
|
33
|
+
visibility: "sync",
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
export { SHARED_SECRET_HEADER_NAME, SHARED_SECRET_KEY, SHARED_SECRET_NAMESPACE, } from "../utils/shared";
|
|
37
|
+
//# sourceMappingURL=shared-secret.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-secret.js","sourceRoot":"","sources":["../../src/studio/shared-secret.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AAGxB,MAAM,4BAA4B,GAAG,eAAe,CAAA;AAMpD,MAAM,UAAU,oBAAoB,CAClC,OAA8B;IAE9B,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,CAAA;IAE1C,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,sBAAsB,GAAG,YAAY,CAAC,IAAI,EAAE,CAAA;IAElD,OAAO,sBAAsB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,OAAO,GAAG,mBAAmB,8CAA8C,mBAAmB,qDAAqD,CAAA;AACrJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,MAAoB,EACpB,YAAoB;IAEpB,MAAM,sBAAsB,GAAG,YAAY,CAAC,IAAI,EAAE,CAAA;IAElD,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;IACzD,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,uBAAuB,EAAE,CAAA;IAEvD,MAAM,MAAM;SACT,WAAW,EAAE;SACb,iBAAiB,CAAC;QACjB,GAAG,EAAE,UAAU;QACf,KAAK,EAAE,4BAA4B;KACpC,CAAC;SACD,KAAK,CACJ,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC;QAC3B,OAAO,EAAE;YACP,CAAC,iBAAiB,CAAC,EAAE,sBAAsB;SAC5C;KACF,CAAC,CACH;SACA,MAAM,CAAC;QACN,GAAG,EAAE,eAAe;QACpB,UAAU,EAAE,MAAM;KACnB,CAAC,CAAA;AACN,CAAC;AAED,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,UAAU,CAAA;AAEjB,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,eAAe,CA4CxE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { normalizeAllowedAiImageModels } from "./models";
|
|
2
|
+
import { DEFAULT_API_ENDPOINT, DEFAULT_ASSET_SOURCE_TARGET_ID, SETTINGS_TOOL_NAME, SETTINGS_TOOL_TITLE, } from "./shared";
|
|
3
|
+
export function normalizeOptions(options) {
|
|
4
|
+
const assetSource = options.assetSource === false ||
|
|
5
|
+
(typeof options.assetSource === "object" &&
|
|
6
|
+
options.assetSource.enabled === false)
|
|
7
|
+
? null
|
|
8
|
+
: {
|
|
9
|
+
id: typeof options.assetSource === "object"
|
|
10
|
+
? options.assetSource.id || DEFAULT_ASSET_SOURCE_TARGET_ID
|
|
11
|
+
: DEFAULT_ASSET_SOURCE_TARGET_ID,
|
|
12
|
+
type: "assetSource",
|
|
13
|
+
title: typeof options.assetSource === "object"
|
|
14
|
+
? options.assetSource.title || "Image Asset Source"
|
|
15
|
+
: "Image Asset Source",
|
|
16
|
+
...(typeof options.assetSource === "object" &&
|
|
17
|
+
options.assetSource.description
|
|
18
|
+
? { description: options.assetSource.description }
|
|
19
|
+
: {
|
|
20
|
+
description: "Adds AI Image Plugin to the image asset picker.",
|
|
21
|
+
}),
|
|
22
|
+
promptLabel: typeof options.assetSource === "object"
|
|
23
|
+
? options.assetSource.promptLabel || "Prompt"
|
|
24
|
+
: "Prompt",
|
|
25
|
+
promptPlaceholder: typeof options.assetSource === "object"
|
|
26
|
+
? options.assetSource.promptPlaceholder ||
|
|
27
|
+
"Turn these references into a clean homepage hero image with warm daylight and subtle depth."
|
|
28
|
+
: "Turn these references into a clean homepage hero image with warm daylight and subtle depth.",
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
apiEndpoint: options.apiEndpoint || DEFAULT_API_ENDPOINT,
|
|
32
|
+
apiVersion: options.apiVersion,
|
|
33
|
+
allowedModels: normalizeAllowedAiImageModels(options.allowedModels),
|
|
34
|
+
assetSourceTarget: assetSource,
|
|
35
|
+
registerSettingsSchemaType: options.settingsTool?.registerSchemaType === true,
|
|
36
|
+
settingsToolName: options.settingsTool?.name || SETTINGS_TOOL_NAME,
|
|
37
|
+
settingsToolTitle: options.settingsTool?.title || SETTINGS_TOOL_TITLE,
|
|
38
|
+
targets: options.targets || [],
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAA;AACxD,OAAO,EACL,oBAAoB,EACpB,8BAA8B,EAC9B,kBAAkB,EAClB,mBAAmB,GAGpB,MAAM,UAAU,CAAA;AAEjB,MAAM,UAAU,gBAAgB,CAAC,OAAsB;IACrD,MAAM,WAAW,GACf,OAAO,CAAC,WAAW,KAAK,KAAK;QAC7B,CAAC,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ;YACtC,OAAO,CAAC,WAAW,CAAC,OAAO,KAAK,KAAK,CAAC;QACtC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC;YACE,EAAE,EACA,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ;gBACrC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,8BAA8B;gBAC1D,CAAC,CAAC,8BAA8B;YACpC,IAAI,EAAE,aAAsB;YAC5B,KAAK,EACH,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ;gBACrC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,oBAAoB;gBACnD,CAAC,CAAC,oBAAoB;YAC1B,GAAG,CAAC,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ;gBAC3C,OAAO,CAAC,WAAW,CAAC,WAAW;gBAC7B,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE;gBAClD,CAAC,CAAC;oBACE,WAAW,EAAE,iDAAiD;iBAC/D,CAAC;YACN,WAAW,EACT,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ;gBACrC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,IAAI,QAAQ;gBAC7C,CAAC,CAAC,QAAQ;YACd,iBAAiB,EACf,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ;gBACrC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,iBAAiB;oBACrC,6FAA6F;gBAC/F,CAAC,CAAC,6FAA6F;SACpG,CAAA;IAEP,OAAO;QACL,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,oBAAoB;QACxD,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,aAAa,EAAE,6BAA6B,CAAC,OAAO,CAAC,aAAa,CAAC;QACnE,iBAAiB,EAAE,WAAW;QAC9B,0BAA0B,EACxB,OAAO,CAAC,YAAY,EAAE,kBAAkB,KAAK,IAAI;QACnD,gBAAgB,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,IAAI,kBAAkB;QAClE,iBAAiB,EAAE,OAAO,CAAC,YAAY,EAAE,KAAK,IAAI,mBAAmB;QACrE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;KAC/B,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type SelectableContextField = {
|
|
2
|
+
label: string;
|
|
3
|
+
path: string;
|
|
4
|
+
typeName: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function getSelectableContextFields(documentSchema: unknown): SelectableContextField[];
|
|
7
|
+
export declare function getDefaultSelectedContextFieldPaths(options: {
|
|
8
|
+
selectableContextFields: SelectableContextField[];
|
|
9
|
+
suggestedContextFieldPaths: string[] | undefined;
|
|
10
|
+
}): string[];
|
|
11
|
+
export declare function serializeContextFieldValue(value: unknown): string | null;
|
|
12
|
+
export declare function buildContextFieldPrompt(options: {
|
|
13
|
+
contextFieldPaths: string[];
|
|
14
|
+
documentValue: Record<string, unknown> | undefined;
|
|
15
|
+
}): string | null;
|
|
16
|
+
//# sourceMappingURL=context-fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-fields.d.ts","sourceRoot":"","sources":["../../src/utils/context-fields.ts"],"names":[],"mappings":"AA4BA,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AA6CD,wBAAgB,0BAA0B,CACxC,cAAc,EAAE,OAAO,GACtB,sBAAsB,EAAE,CAsB1B;AAED,wBAAgB,mCAAmC,CAAC,OAAO,EAAE;IAC3D,uBAAuB,EAAE,sBAAsB,EAAE,CAAA;IACjD,0BAA0B,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;CACjD,GAAG,MAAM,EAAE,CAQX;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CA8BxE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;CACnD,GAAG,MAAM,GAAG,IAAI,CAoBhB"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { getValueAtPath } from "./document-paths";
|
|
2
|
+
const SUPPORTED_CONTEXT_FIELD_TYPES = new Set([
|
|
3
|
+
"string",
|
|
4
|
+
"text",
|
|
5
|
+
"number",
|
|
6
|
+
"boolean",
|
|
7
|
+
"date",
|
|
8
|
+
"datetime",
|
|
9
|
+
"slug",
|
|
10
|
+
]);
|
|
11
|
+
function getDocumentSchemaFields(documentSchema) {
|
|
12
|
+
if (!documentSchema || typeof documentSchema !== "object") {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
const fields = documentSchema.fields;
|
|
16
|
+
return Array.isArray(fields) ? fields : [];
|
|
17
|
+
}
|
|
18
|
+
function formatFieldNameAsLabel(fieldName) {
|
|
19
|
+
const normalizedFieldName = fieldName
|
|
20
|
+
.replace(/([a-z0-9])([A-Z])/g, "$1 $2")
|
|
21
|
+
.replace(/[_-]+/g, " ")
|
|
22
|
+
.trim()
|
|
23
|
+
.replace(/\s+/g, " ");
|
|
24
|
+
if (!normalizedFieldName) {
|
|
25
|
+
return fieldName;
|
|
26
|
+
}
|
|
27
|
+
return (normalizedFieldName.charAt(0).toUpperCase() +
|
|
28
|
+
normalizedFieldName.slice(1).toLowerCase());
|
|
29
|
+
}
|
|
30
|
+
function isSimpleStringArrayField(field) {
|
|
31
|
+
if (field.type?.name !== "array" || !Array.isArray(field.type.of)) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
if (field.type.of.length === 0) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
return field.type.of.every((member) => {
|
|
38
|
+
const memberTypeName = member?.type?.name || member?.name;
|
|
39
|
+
return memberTypeName === "string";
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
export function getSelectableContextFields(documentSchema) {
|
|
43
|
+
return getDocumentSchemaFields(documentSchema).flatMap((field) => {
|
|
44
|
+
if (!field?.name || !field.type?.name) {
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
const isSupportedScalarField = SUPPORTED_CONTEXT_FIELD_TYPES.has(field.type.name);
|
|
48
|
+
if (!isSupportedScalarField && !isSimpleStringArrayField(field)) {
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
return [
|
|
52
|
+
{
|
|
53
|
+
label: field.title || formatFieldNameAsLabel(field.name),
|
|
54
|
+
path: field.name,
|
|
55
|
+
typeName: field.type.name,
|
|
56
|
+
},
|
|
57
|
+
];
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
export function getDefaultSelectedContextFieldPaths(options) {
|
|
61
|
+
const suggestedFieldPaths = new Set((options.suggestedContextFieldPaths || []).filter(Boolean));
|
|
62
|
+
return options.selectableContextFields
|
|
63
|
+
.filter((field) => suggestedFieldPaths.has(field.path))
|
|
64
|
+
.map((field) => field.path);
|
|
65
|
+
}
|
|
66
|
+
export function serializeContextFieldValue(value) {
|
|
67
|
+
if (typeof value === "string") {
|
|
68
|
+
const trimmedValue = value.trim();
|
|
69
|
+
return trimmedValue || null;
|
|
70
|
+
}
|
|
71
|
+
if (typeof value === "number" || typeof value === "boolean") {
|
|
72
|
+
return String(value);
|
|
73
|
+
}
|
|
74
|
+
if (Array.isArray(value)) {
|
|
75
|
+
const serializedValues = value
|
|
76
|
+
.map((item) => (typeof item === "string" ? item.trim() : null))
|
|
77
|
+
.filter((item) => Boolean(item));
|
|
78
|
+
return serializedValues.length > 0 ? serializedValues.join(", ") : null;
|
|
79
|
+
}
|
|
80
|
+
if (value && typeof value === "object") {
|
|
81
|
+
const currentValue = value.current;
|
|
82
|
+
if (typeof currentValue === "string") {
|
|
83
|
+
const trimmedValue = currentValue.trim();
|
|
84
|
+
return trimmedValue || null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
export function buildContextFieldPrompt(options) {
|
|
90
|
+
if (!options.documentValue || options.contextFieldPaths.length === 0) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
const promptLines = options.contextFieldPaths
|
|
94
|
+
.map((fieldPath) => {
|
|
95
|
+
const serializedValue = serializeContextFieldValue(getValueAtPath(options.documentValue, fieldPath));
|
|
96
|
+
if (!serializedValue) {
|
|
97
|
+
return `The field titled "${fieldPath}" is empty.`;
|
|
98
|
+
}
|
|
99
|
+
return `The value of field "${fieldPath}" is '${serializedValue}'.`;
|
|
100
|
+
})
|
|
101
|
+
.filter((line) => Boolean(line));
|
|
102
|
+
return promptLines.length > 0 ? promptLines.join("\n") : null;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=context-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-fields.js","sourceRoot":"","sources":["../../src/utils/context-fields.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Path } from "sanity";
|
|
2
|
+
import type { GenerateButtonTarget } from "./shared";
|
|
3
|
+
export declare function pathToFieldPath(path: Path): string;
|
|
4
|
+
export declare function getValueAtPath(value: Record<string, unknown> | undefined, path: string | undefined): unknown;
|
|
5
|
+
export declare function doesTargetMatchField(options: {
|
|
6
|
+
documentType: string | undefined;
|
|
7
|
+
path: Path;
|
|
8
|
+
target: GenerateButtonTarget;
|
|
9
|
+
}): boolean;
|
|
10
|
+
//# sourceMappingURL=document-paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-paths.d.ts","sourceRoot":"","sources":["../../src/utils/document-paths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAClC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAEpD,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAelD;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC1C,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,OAAO,CAYT;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,IAAI,EAAE,IAAI,CAAA;IACV,MAAM,EAAE,oBAAoB,CAAA;CAC7B,GAAG,OAAO,CASV"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export function pathToFieldPath(path) {
|
|
2
|
+
return path
|
|
3
|
+
.map((segment) => {
|
|
4
|
+
if (typeof segment === "string" || typeof segment === "number") {
|
|
5
|
+
return String(segment);
|
|
6
|
+
}
|
|
7
|
+
if (segment && typeof segment === "object" && "_key" in segment) {
|
|
8
|
+
return String(segment._key);
|
|
9
|
+
}
|
|
10
|
+
return "";
|
|
11
|
+
})
|
|
12
|
+
.filter(Boolean)
|
|
13
|
+
.join(".");
|
|
14
|
+
}
|
|
15
|
+
export function getValueAtPath(value, path) {
|
|
16
|
+
if (!value || !path) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
return path.split(".").reduce((currentValue, segment) => {
|
|
20
|
+
if (!currentValue || typeof currentValue !== "object") {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
return currentValue[segment];
|
|
24
|
+
}, value);
|
|
25
|
+
}
|
|
26
|
+
export function doesTargetMatchField(options) {
|
|
27
|
+
if (!options.documentType) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
return (options.documentType === options.target.documentType &&
|
|
31
|
+
pathToFieldPath(options.path) === options.target.fieldPath);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=document-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-paths.js","sourceRoot":"","sources":["../../src/utils/document-paths.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,eAAe,CAAC,IAAU;IACxC,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACf,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC/D,OAAO,MAAM,CAAC,OAAO,CAAC,CAAA;QACxB,CAAC;QAED,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;YAChE,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC7B,CAAC;QAED,OAAO,EAAE,CAAA;IACX,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAA;AACd,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAA0C,EAC1C,IAAwB;IAExB,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAU,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE;QAC/D,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YACtD,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,OAAQ,YAAwC,CAAC,OAAO,CAAC,CAAA;IAC3D,CAAC,EAAE,KAAK,CAAC,CAAA;AACX,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAIpC;IACC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,CACL,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,YAAY;QACpD,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,SAAS,CAC3D,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare const SUPPORTED_AI_IMAGE_MODELS: readonly ["gemini-2.5-flash-image", "gemini-3.1-flash-image-preview", "gpt-image-1"];
|
|
2
|
+
export type SupportedAiImageModelId = (typeof SUPPORTED_AI_IMAGE_MODELS)[number];
|
|
3
|
+
export type SupportedAiImageProvider = "google" | "openai";
|
|
4
|
+
export type SupportedAiImageModelDefinition = {
|
|
5
|
+
defaultAspectRatio?: string;
|
|
6
|
+
defaultSize?: string;
|
|
7
|
+
id: SupportedAiImageModelId;
|
|
8
|
+
provider: SupportedAiImageProvider;
|
|
9
|
+
supportsReferenceImages: boolean;
|
|
10
|
+
title: string;
|
|
11
|
+
};
|
|
12
|
+
export declare const DEFAULT_SUPPORTED_AI_IMAGE_MODEL: SupportedAiImageModelId;
|
|
13
|
+
export declare function getSupportedAiImageModelDefinition(modelId: SupportedAiImageModelId): SupportedAiImageModelDefinition;
|
|
14
|
+
export declare function getSupportedAiImageModelOptions(modelIds: readonly SupportedAiImageModelId[]): Array<{
|
|
15
|
+
title: string;
|
|
16
|
+
value: SupportedAiImageModelId;
|
|
17
|
+
}>;
|
|
18
|
+
export declare function isSupportedAiImageModelId(value: string): value is SupportedAiImageModelId;
|
|
19
|
+
export declare function normalizeAllowedAiImageModels(allowedModels?: readonly string[]): SupportedAiImageModelId[];
|
|
20
|
+
export declare function getDefaultAllowedAiImageModel(allowedModels: readonly SupportedAiImageModelId[]): SupportedAiImageModelId;
|
|
21
|
+
export declare function resolveAllowedAiImageModel(modelId: string | null | undefined, allowedModels: readonly SupportedAiImageModelId[]): SupportedAiImageModelId;
|
|
22
|
+
//# sourceMappingURL=models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/utils/models.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB,sFAI5B,CAAA;AAEV,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEhF,MAAM,MAAM,wBAAwB,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE1D,MAAM,MAAM,+BAA+B,GAAG;IAC5C,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,EAAE,EAAE,uBAAuB,CAAA;IAC3B,QAAQ,EAAE,wBAAwB,CAAA;IAClC,uBAAuB,EAAE,OAAO,CAAA;IAChC,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,eAAO,MAAM,gCAAgC,EAAE,uBACrB,CAAA;AAiC1B,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,uBAAuB,GAC/B,+BAA+B,CAEjC;AAED,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,SAAS,uBAAuB,EAAE,GAC3C,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,uBAAuB,CAAA;CAAE,CAAC,CAS1D;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,GACZ,KAAK,IAAI,uBAAuB,CAIlC;AAED,wBAAgB,6BAA6B,CAC3C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,GAChC,uBAAuB,EAAE,CA0B3B;AAED,wBAAgB,6BAA6B,CAC3C,aAAa,EAAE,SAAS,uBAAuB,EAAE,GAChD,uBAAuB,CAEzB;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,aAAa,EAAE,SAAS,uBAAuB,EAAE,GAChD,uBAAuB,CAMzB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export const SUPPORTED_AI_IMAGE_MODELS = [
|
|
2
|
+
"gemini-2.5-flash-image",
|
|
3
|
+
"gemini-3.1-flash-image-preview",
|
|
4
|
+
"gpt-image-1",
|
|
5
|
+
];
|
|
6
|
+
export const DEFAULT_SUPPORTED_AI_IMAGE_MODEL = "gemini-2.5-flash-image";
|
|
7
|
+
const SUPPORTED_AI_IMAGE_MODEL_DEFINITIONS = [
|
|
8
|
+
{
|
|
9
|
+
defaultAspectRatio: "1:1",
|
|
10
|
+
id: "gemini-2.5-flash-image",
|
|
11
|
+
provider: "google",
|
|
12
|
+
supportsReferenceImages: true,
|
|
13
|
+
title: "Google Gemini 2.5 Flash Image",
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
defaultAspectRatio: "1:1",
|
|
17
|
+
id: "gemini-3.1-flash-image-preview",
|
|
18
|
+
provider: "google",
|
|
19
|
+
supportsReferenceImages: true,
|
|
20
|
+
title: "Google Gemini 3.1 Flash Image Preview",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
defaultSize: "1024x1024",
|
|
24
|
+
id: "gpt-image-1",
|
|
25
|
+
provider: "openai",
|
|
26
|
+
supportsReferenceImages: true,
|
|
27
|
+
title: "OpenAI GPT Image 1",
|
|
28
|
+
},
|
|
29
|
+
];
|
|
30
|
+
const SUPPORTED_AI_IMAGE_MODEL_DEFINITION_MAP = Object.fromEntries(SUPPORTED_AI_IMAGE_MODEL_DEFINITIONS.map((modelDefinition) => [
|
|
31
|
+
modelDefinition.id,
|
|
32
|
+
modelDefinition,
|
|
33
|
+
]));
|
|
34
|
+
export function getSupportedAiImageModelDefinition(modelId) {
|
|
35
|
+
return SUPPORTED_AI_IMAGE_MODEL_DEFINITION_MAP[modelId];
|
|
36
|
+
}
|
|
37
|
+
export function getSupportedAiImageModelOptions(modelIds) {
|
|
38
|
+
return modelIds.map((modelId) => {
|
|
39
|
+
const modelDefinition = getSupportedAiImageModelDefinition(modelId);
|
|
40
|
+
return {
|
|
41
|
+
title: modelDefinition.title,
|
|
42
|
+
value: modelDefinition.id,
|
|
43
|
+
};
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
export function isSupportedAiImageModelId(value) {
|
|
47
|
+
return SUPPORTED_AI_IMAGE_MODELS.includes(value);
|
|
48
|
+
}
|
|
49
|
+
export function normalizeAllowedAiImageModels(allowedModels) {
|
|
50
|
+
if (!allowedModels) {
|
|
51
|
+
return [DEFAULT_SUPPORTED_AI_IMAGE_MODEL];
|
|
52
|
+
}
|
|
53
|
+
if (allowedModels.length === 0) {
|
|
54
|
+
throw new Error("AI Image Plugin requires at least one allowed model in allowedModels.");
|
|
55
|
+
}
|
|
56
|
+
const normalizedAllowedModels = [];
|
|
57
|
+
for (const allowedModel of allowedModels) {
|
|
58
|
+
if (!isSupportedAiImageModelId(allowedModel)) {
|
|
59
|
+
throw new Error(`AI Image Plugin does not support the model "${allowedModel}".`);
|
|
60
|
+
}
|
|
61
|
+
if (!normalizedAllowedModels.includes(allowedModel)) {
|
|
62
|
+
normalizedAllowedModels.push(allowedModel);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return normalizedAllowedModels;
|
|
66
|
+
}
|
|
67
|
+
export function getDefaultAllowedAiImageModel(allowedModels) {
|
|
68
|
+
return allowedModels[0] ?? DEFAULT_SUPPORTED_AI_IMAGE_MODEL;
|
|
69
|
+
}
|
|
70
|
+
export function resolveAllowedAiImageModel(modelId, allowedModels) {
|
|
71
|
+
if (modelId && allowedModels.includes(modelId)) {
|
|
72
|
+
return modelId;
|
|
73
|
+
}
|
|
74
|
+
return getDefaultAllowedAiImageModel(allowedModels);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/utils/models.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,wBAAwB;IACxB,gCAAgC;IAChC,aAAa;CACL,CAAA;AAeV,MAAM,CAAC,MAAM,gCAAgC,GAC3C,wBAAwB,CAAA;AAE1B,MAAM,oCAAoC,GAAG;IAC3C;QACE,kBAAkB,EAAE,KAAK;QACzB,EAAE,EAAE,wBAAwB;QAC5B,QAAQ,EAAE,QAAQ;QAClB,uBAAuB,EAAE,IAAI;QAC7B,KAAK,EAAE,+BAA+B;KACvC;IACD;QACE,kBAAkB,EAAE,KAAK;QACzB,EAAE,EAAE,gCAAgC;QACpC,QAAQ,EAAE,QAAQ;QAClB,uBAAuB,EAAE,IAAI;QAC7B,KAAK,EAAE,uCAAuC;KAC/C;IACD;QACE,WAAW,EAAE,WAAW;QACxB,EAAE,EAAE,aAAa;QACjB,QAAQ,EAAE,QAAQ;QAClB,uBAAuB,EAAE,IAAI;QAC7B,KAAK,EAAE,oBAAoB;KAC5B;CAC4D,CAAA;AAE/D,MAAM,uCAAuC,GAAG,MAAM,CAAC,WAAW,CAChE,oCAAoC,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC;IAC5D,eAAe,CAAC,EAAE;IAClB,eAAe;CAChB,CAAC,CACiE,CAAA;AAErE,MAAM,UAAU,kCAAkC,CAChD,OAAgC;IAEhC,OAAO,uCAAuC,CAAC,OAAO,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,QAA4C;IAE5C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,eAAe,GAAG,kCAAkC,CAAC,OAAO,CAAC,CAAA;QAEnE,OAAO;YACL,KAAK,EAAE,eAAe,CAAC,KAAK;YAC5B,KAAK,EAAE,eAAe,CAAC,EAAE;SAC1B,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,KAAa;IAEb,OACE,yBACD,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AACnB,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,aAAiC;IAEjC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,gCAAgC,CAAC,CAAA;IAC3C,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAA;IACH,CAAC;IAED,MAAM,uBAAuB,GAA8B,EAAE,CAAA;IAE7D,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QACzC,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CACb,+CAA+C,YAAY,IAAI,CAChE,CAAA;QACH,CAAC;QAED,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACpD,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,uBAAuB,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,aAAiD;IAEjD,OAAO,aAAa,CAAC,CAAC,CAAC,IAAI,gCAAgC,CAAA;AAC7D,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,OAAkC,EAClC,aAAiD;IAEjD,IAAI,OAAO,IAAI,aAAa,CAAC,QAAQ,CAAC,OAAkC,CAAC,EAAE,CAAC;QAC1E,OAAO,OAAkC,CAAA;IAC3C,CAAC;IAED,OAAO,6BAA6B,CAAC,aAAa,CAAC,CAAA;AACrD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,CAK7E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,KAAuC;IACnE,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;SAC3B,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC/C,IAAI,CAAC,MAAM,CAAC,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { SupportedAiImageModelId } from "./models";
|
|
2
|
+
export declare const SOURCE_NAME = "ai-image-plugin";
|
|
3
|
+
export declare const SOURCE_TITLE = "AI Image Plugin";
|
|
4
|
+
export declare const SETTINGS_DOCUMENT_ID = "aiImagePlugin.settings";
|
|
5
|
+
export declare const SETTINGS_SCHEMA_TYPE = "aiImagePluginSettings";
|
|
6
|
+
export declare const SETTINGS_TOOL_NAME = "ai-image-plugin-settings";
|
|
7
|
+
export declare const SETTINGS_TOOL_TITLE = "AI Image Plugin";
|
|
8
|
+
export declare const DEFAULT_API_ENDPOINT = "/api/ai-image-plugin";
|
|
9
|
+
export declare const DEFAULT_ASSET_SOURCE_TARGET_ID = "ai-image-plugin-asset-source";
|
|
10
|
+
export declare const MAX_REFERENCE_IMAGES = 5;
|
|
11
|
+
export declare const SHARED_SECRET_NAMESPACE = "ai-image-plugin";
|
|
12
|
+
export declare const SHARED_SECRET_KEY = "sharedSecret";
|
|
13
|
+
export declare const SHARED_SECRET_HEADER_NAME = "x-ai-image-plugin-secret";
|
|
14
|
+
export type StoredImage = {
|
|
15
|
+
asset?: {
|
|
16
|
+
_id?: string;
|
|
17
|
+
_ref?: string;
|
|
18
|
+
originalFilename?: string;
|
|
19
|
+
url?: string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export type SettingsTargetConfigValue = {
|
|
23
|
+
prompt?: string;
|
|
24
|
+
referenceImages?: StoredImage[];
|
|
25
|
+
targetId?: string;
|
|
26
|
+
};
|
|
27
|
+
export type SettingsValue = {
|
|
28
|
+
globalModel?: SupportedAiImageModelId;
|
|
29
|
+
globalPrompt?: string;
|
|
30
|
+
globalReferenceImages?: StoredImage[];
|
|
31
|
+
targetConfigs?: SettingsTargetConfigValue[];
|
|
32
|
+
};
|
|
33
|
+
export type GenerateButtonTarget = {
|
|
34
|
+
description?: string;
|
|
35
|
+
dialogTitle?: string;
|
|
36
|
+
documentType: string;
|
|
37
|
+
fieldPath: string;
|
|
38
|
+
id: string;
|
|
39
|
+
promptLabel?: string;
|
|
40
|
+
promptPlaceholder?: string;
|
|
41
|
+
suggestedContextFieldPaths?: string[];
|
|
42
|
+
title?: string;
|
|
43
|
+
type: "generateButton";
|
|
44
|
+
};
|
|
45
|
+
export type AssetSourceTarget = {
|
|
46
|
+
description?: string;
|
|
47
|
+
id: string;
|
|
48
|
+
promptLabel?: string;
|
|
49
|
+
promptPlaceholder?: string;
|
|
50
|
+
title?: string;
|
|
51
|
+
type: "assetSource";
|
|
52
|
+
};
|
|
53
|
+
export type PluginOptions = {
|
|
54
|
+
apiEndpoint?: string;
|
|
55
|
+
apiVersion: string;
|
|
56
|
+
allowedModels?: SupportedAiImageModelId[];
|
|
57
|
+
assetSource?: boolean | {
|
|
58
|
+
description?: string;
|
|
59
|
+
enabled?: boolean;
|
|
60
|
+
id?: string;
|
|
61
|
+
promptLabel?: string;
|
|
62
|
+
promptPlaceholder?: string;
|
|
63
|
+
title?: string;
|
|
64
|
+
};
|
|
65
|
+
settingsTool?: {
|
|
66
|
+
name?: string;
|
|
67
|
+
registerSchemaType?: boolean;
|
|
68
|
+
title?: string;
|
|
69
|
+
};
|
|
70
|
+
targets?: GenerateButtonTarget[];
|
|
71
|
+
};
|
|
72
|
+
export type ResolvedOptions = {
|
|
73
|
+
apiEndpoint: string;
|
|
74
|
+
apiVersion: string;
|
|
75
|
+
allowedModels: SupportedAiImageModelId[];
|
|
76
|
+
assetSourceTarget: AssetSourceTarget | null;
|
|
77
|
+
registerSettingsSchemaType: boolean;
|
|
78
|
+
settingsToolName: string;
|
|
79
|
+
settingsToolTitle: string;
|
|
80
|
+
targets: GenerateButtonTarget[];
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/utils/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const SOURCE_NAME = "ai-image-plugin";
|
|
2
|
+
export const SOURCE_TITLE = "AI Image Plugin";
|
|
3
|
+
export const SETTINGS_DOCUMENT_ID = "aiImagePlugin.settings";
|
|
4
|
+
export const SETTINGS_SCHEMA_TYPE = "aiImagePluginSettings";
|
|
5
|
+
export const SETTINGS_TOOL_NAME = "ai-image-plugin-settings";
|
|
6
|
+
export const SETTINGS_TOOL_TITLE = "AI Image Plugin";
|
|
7
|
+
export const DEFAULT_API_ENDPOINT = "/api/ai-image-plugin";
|
|
8
|
+
export const DEFAULT_ASSET_SOURCE_TARGET_ID = "ai-image-plugin-asset-source";
|
|
9
|
+
export const MAX_REFERENCE_IMAGES = 5;
|
|
10
|
+
export const SHARED_SECRET_NAMESPACE = "ai-image-plugin";
|
|
11
|
+
export const SHARED_SECRET_KEY = "sharedSecret";
|
|
12
|
+
export const SHARED_SECRET_HEADER_NAME = "x-ai-image-plugin-secret";
|
|
13
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/utils/shared.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,CAAA;AAC5C,MAAM,CAAC,MAAM,YAAY,GAAG,iBAAiB,CAAA;AAC7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAA;AAC5D,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,CAAA;AAC3D,MAAM,CAAC,MAAM,kBAAkB,GAAG,0BAA0B,CAAA;AAC5D,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAA;AACpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAA;AAC1D,MAAM,CAAC,MAAM,8BAA8B,GAAG,8BAA8B,CAAA;AAC5E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAA;AACrC,MAAM,CAAC,MAAM,uBAAuB,GAAG,iBAAiB,CAAA;AACxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAA;AAC/C,MAAM,CAAC,MAAM,yBAAyB,GAAG,0BAA0B,CAAA"}
|