@ai-stack/payloadcms 3.0.0-beta.65.0 → 3.0.0-beta.65.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/models/anthropic/index.d.ts.map +1 -1
- package/dist/ai/models/anthropic/index.js +42 -3
- package/dist/ai/models/anthropic/index.js.map +1 -1
- package/dist/ai/models/index.d.ts.map +1 -1
- package/dist/ai/models/index.js +2 -2
- package/dist/ai/models/index.js.map +1 -1
- package/dist/ai/models/openai/index.d.ts.map +1 -1
- package/dist/ai/models/openai/index.js +0 -1
- package/dist/ai/models/openai/index.js.map +1 -1
- package/dist/ai/prompts.d.ts +6 -6
- package/dist/ai/prompts.d.ts.map +1 -1
- package/dist/ai/prompts.js +17 -15
- package/dist/ai/prompts.js.map +1 -1
- package/dist/ai/utils/generateSeedPrompt.d.ts.map +1 -1
- package/dist/ai/utils/generateSeedPrompt.js +14 -5
- package/dist/ai/utils/generateSeedPrompt.js.map +1 -1
- package/dist/collections/Instructions.js +1 -1
- package/dist/collections/Instructions.js.map +1 -1
- package/dist/defaults.d.ts +2 -1
- package/dist/defaults.d.ts.map +1 -1
- package/dist/defaults.js +2 -1
- package/dist/defaults.js.map +1 -1
- package/dist/fields/LexicalEditor/feature.server.d.ts.map +1 -1
- package/dist/fields/LexicalEditor/feature.server.js +2 -1
- package/dist/fields/LexicalEditor/feature.server.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +11 -12
- package/dist/init.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +85 -73
- package/dist/plugin.js.map +1 -1
- package/dist/ui/Actions/Actions.d.ts.map +1 -1
- package/dist/ui/Actions/Actions.js +9 -10
- package/dist/ui/Actions/Actions.js.map +1 -1
- package/dist/ui/Actions/hooks/useGenerate.d.ts.map +1 -1
- package/dist/ui/Actions/hooks/useGenerate.js +5 -6
- package/dist/ui/Actions/hooks/useGenerate.js.map +1 -1
- package/dist/utilities/isPluginActivated.d.ts +2 -0
- package/dist/utilities/isPluginActivated.d.ts.map +1 -0
- package/dist/utilities/isPluginActivated.js +5 -0
- package/dist/utilities/isPluginActivated.js.map +1 -0
- package/dist/utilities/updateFieldsConfig.js.map +1 -1
- package/package.json +28 -25
- package/dist/ui/Actions/hooks/highlight.module.scss +0 -3
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/init.ts"],"sourcesContent":["import type { Payload } from 'payload'\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../src/init.ts"],"sourcesContent":["import type { Payload } from 'payload'\n\nimport { GenerationModels } from './ai/models/index.js'\nimport { seedPrompts } from './ai/prompts.js'\nimport { generateSeedPrompt } from './ai/utils/generateSeedPrompt.js'\nimport { PLUGIN_INSTRUCTIONS_MAP_GLOBAL, PLUGIN_INSTRUCTIONS_TABLE } from './defaults.js'\n\nexport const init = async (payload: Payload, fieldSchemaPaths) => {\n payload.logger.info(`— AI Plugin: Initializing...`)\n\n const paths = Object.keys(fieldSchemaPaths)\n\n const fieldInstructionsMap = {}\n for (let i = 0; i < paths.length; i++) {\n const path = paths[i]\n const { type: fieldType, label: fieldLabel } = fieldSchemaPaths[path]\n const entry = await payload.find({\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n where: {\n 'field-type': {\n equals: fieldType,\n },\n 'schema-path': {\n equals: path,\n },\n },\n })\n\n if (!entry?.docs?.length) {\n const { prompt, system } = seedPrompts({\n fieldLabel,\n fieldSchemaPaths,\n fieldType,\n path,\n })\n const generatedPrompt = await generateSeedPrompt({\n prompt,\n system,\n })\n payload.logger.info(\n `\\nPrompt generated for \"${fieldLabel}\" field:\\nprompt: ${generatedPrompt}\\n\\n`,\n )\n const instructions = await payload.create({\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n data: {\n 'field-type': fieldType,\n 'model-id': GenerationModels.find((a) => {\n return a.fields.includes(fieldType)\n })?.id,\n prompt: generatedPrompt,\n 'schema-path': path,\n },\n })\n fieldInstructionsMap[path] = instructions.id\n } else {\n const [instructions] = entry.docs\n fieldInstructionsMap[path] = instructions.id\n }\n }\n\n payload.logger.info(\n `— AI Plugin: Enabled fieldMap: ${JSON.stringify(fieldInstructionsMap, null, 2)}`,\n )\n await payload.updateGlobal({\n slug: PLUGIN_INSTRUCTIONS_MAP_GLOBAL, // required\n data: {\n map: fieldInstructionsMap,\n },\n depth: 2,\n })\n\n payload.logger.info(`— AI Plugin: Initialized!`)\n payload.logger.info(\n '\\n\\n-AI Plugin: Example prompts are added to get you started, Now go break some code 🚀🚀🚀\\n\\n',\n )\n}\n"],"names":["GenerationModels","seedPrompts","generateSeedPrompt","PLUGIN_INSTRUCTIONS_MAP_GLOBAL","PLUGIN_INSTRUCTIONS_TABLE","init","payload","fieldSchemaPaths","logger","info","paths","Object","keys","fieldInstructionsMap","i","length","path","type","fieldType","label","fieldLabel","entry","find","collection","where","equals","docs","prompt","system","generatedPrompt","instructions","create","data","a","fields","includes","id","JSON","stringify","updateGlobal","slug","map","depth"],"mappings":"AAEA,SAASA,gBAAgB,QAAQ,uBAAsB;AACvD,SAASC,WAAW,QAAQ,kBAAiB;AAC7C,SAASC,kBAAkB,QAAQ,mCAAkC;AACrE,SAASC,8BAA8B,EAAEC,yBAAyB,QAAQ,gBAAe;AAEzF,OAAO,MAAMC,OAAO,OAAOC,SAAkBC;IAC3CD,QAAQE,MAAM,CAACC,IAAI,CAAC,CAAC,4BAA4B,CAAC;IAElD,MAAMC,QAAQC,OAAOC,IAAI,CAACL;IAE1B,MAAMM,uBAAuB,CAAC;IAC9B,IAAK,IAAIC,IAAI,GAAGA,IAAIJ,MAAMK,MAAM,EAAED,IAAK;QACrC,MAAME,OAAON,KAAK,CAACI,EAAE;QACrB,MAAM,EAAEG,MAAMC,SAAS,EAAEC,OAAOC,UAAU,EAAE,GAAGb,gBAAgB,CAACS,KAAK;QACrE,MAAMK,QAAQ,MAAMf,QAAQgB,IAAI,CAAC;YAC/BC,YAAYnB;YACZoB,OAAO;gBACL,cAAc;oBACZC,QAAQP;gBACV;gBACA,eAAe;oBACbO,QAAQT;gBACV;YACF;QACF;QAEA,IAAI,CAACK,OAAOK,MAAMX,QAAQ;YACxB,MAAM,EAAEY,MAAM,EAAEC,MAAM,EAAE,GAAG3B,YAAY;gBACrCmB;gBACAb;gBACAW;gBACAF;YACF;YACA,MAAMa,kBAAkB,MAAM3B,mBAAmB;gBAC/CyB;gBACAC;YACF;YACAtB,QAAQE,MAAM,CAACC,IAAI,CACjB,CAAC,wBAAwB,EAAEW,WAAW,kBAAkB,EAAES,gBAAgB,IAAI,CAAC;YAEjF,MAAMC,eAAe,MAAMxB,QAAQyB,MAAM,CAAC;gBACxCR,YAAYnB;gBACZ4B,MAAM;oBACJ,cAAcd;oBACd,YAAYlB,iBAAiBsB,IAAI,CAAC,CAACW;wBACjC,OAAOA,EAAEC,MAAM,CAACC,QAAQ,CAACjB;oBAC3B,IAAIkB;oBACJT,QAAQE;oBACR,eAAeb;gBACjB;YACF;YACAH,oBAAoB,CAACG,KAAK,GAAGc,aAAaM,EAAE;QAC9C,OAAO;YACL,MAAM,CAACN,aAAa,GAAGT,MAAMK,IAAI;YACjCb,oBAAoB,CAACG,KAAK,GAAGc,aAAaM,EAAE;QAC9C;IACF;IAEA9B,QAAQE,MAAM,CAACC,IAAI,CACjB,CAAC,+BAA+B,EAAE4B,KAAKC,SAAS,CAACzB,sBAAsB,MAAM,GAAG,CAAC;IAEnF,MAAMP,QAAQiC,YAAY,CAAC;QACzBC,MAAMrC;QACN6B,MAAM;YACJS,KAAK5B;QACP;QACA6B,OAAO;IACT;IAEApC,QAAQE,MAAM,CAACC,IAAI,CAAC,CAAC,yBAAyB,CAAC;IAC/CH,QAAQE,MAAM,CAACC,IAAI,CACjB;AAEJ,EAAC"}
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAKrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAY9C,QAAA,MAAM,eAAe,iBACJ,YAAY,sBACV,MAAM,KAAG,MAkGzB,CAAA;AAEH,OAAO,EAAE,eAAe,EAAE,CAAA"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,93 +1,105 @@
|
|
|
1
1
|
import { deepMerge } from 'payload/shared';
|
|
2
|
+
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
3
|
+
import { lexicalSchema } from './ai/editor/lexical.schema.js';
|
|
2
4
|
import { Instructions } from './collections/Instructions.js';
|
|
3
5
|
import { PLUGIN_INSTRUCTIONS_MAP_GLOBAL, PLUGIN_NAME } from './defaults.js';
|
|
4
6
|
import { endpoints } from './endpoints/index.js';
|
|
5
7
|
import { init } from './init.js';
|
|
6
8
|
import { InstructionsProvider } from './providers/InstructionsProvider/index.js';
|
|
7
9
|
import { translations } from './translations/index.js';
|
|
10
|
+
import { isPluginActivated } from './utilities/isPluginActivated.js';
|
|
8
11
|
import { updateFieldsConfig } from './utilities/updateFieldsConfig.js';
|
|
9
|
-
import { lexicalSchema } from './ai/editor/lexical.schema.js';
|
|
10
|
-
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
11
12
|
const payloadAiPlugin = (pluginConfig)=>(incomingConfig)=>{
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
Instructions.admin.hidden = false;
|
|
16
|
-
}
|
|
17
|
-
Instructions.admin.custom = {
|
|
18
|
-
...Instructions.admin.custom || {},
|
|
19
|
-
[PLUGIN_NAME]: {
|
|
20
|
-
editorConfig: {
|
|
21
|
-
// Used in admin client for useObject hook
|
|
22
|
-
schema: zodToJsonSchema(zodLexicalSchema)
|
|
23
|
-
}
|
|
24
|
-
}
|
|
13
|
+
const isActivated = isPluginActivated();
|
|
14
|
+
let updatedConfig = {
|
|
15
|
+
...incomingConfig
|
|
25
16
|
};
|
|
26
|
-
Instructions.custom = {
|
|
27
|
-
...Instructions.custom || {},
|
|
28
|
-
[PLUGIN_NAME]: {
|
|
29
|
-
editorConfig: {
|
|
30
|
-
// Used in textarea endpoint for llm
|
|
31
|
-
schema: zodLexicalSchema
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
const collections = [
|
|
36
|
-
...incomingConfig.collections ?? [],
|
|
37
|
-
Instructions
|
|
38
|
-
];
|
|
39
|
-
const { collections: collectionSlugs = [] } = pluginConfig;
|
|
40
17
|
let collectionsFieldPathMap = {};
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
return updatedCollectionConfig;
|
|
18
|
+
if (isActivated) {
|
|
19
|
+
// Inject editor schema to config, so that it can be accessed when /textarea endpoint will hit
|
|
20
|
+
const zodLexicalSchema = lexicalSchema(pluginConfig.editorConfig?.nodes);
|
|
21
|
+
if (pluginConfig.debugging) {
|
|
22
|
+
Instructions.admin.hidden = false;
|
|
23
|
+
}
|
|
24
|
+
Instructions.admin.custom = {
|
|
25
|
+
...Instructions.admin.custom || {},
|
|
26
|
+
[PLUGIN_NAME]: {
|
|
27
|
+
editorConfig: {
|
|
28
|
+
// Used in admin client for useObject hook
|
|
29
|
+
schema: zodToJsonSchema(zodLexicalSchema)
|
|
30
|
+
}
|
|
55
31
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
...incomingConfig.globals,
|
|
65
|
-
{
|
|
66
|
-
slug: PLUGIN_INSTRUCTIONS_MAP_GLOBAL,
|
|
67
|
-
access: {
|
|
68
|
-
read: ()=>true
|
|
69
|
-
},
|
|
70
|
-
admin: {
|
|
71
|
-
hidden: !pluginConfig.debugging
|
|
72
|
-
},
|
|
73
|
-
fields: [
|
|
74
|
-
{
|
|
75
|
-
name: 'map',
|
|
76
|
-
type: 'json'
|
|
77
|
-
}
|
|
78
|
-
]
|
|
32
|
+
};
|
|
33
|
+
Instructions.custom = {
|
|
34
|
+
...Instructions.custom || {},
|
|
35
|
+
[PLUGIN_NAME]: {
|
|
36
|
+
editorConfig: {
|
|
37
|
+
// Used in textarea endpoint for llm
|
|
38
|
+
schema: zodLexicalSchema
|
|
39
|
+
}
|
|
79
40
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
...incomingConfig.
|
|
83
|
-
|
|
84
|
-
|
|
41
|
+
};
|
|
42
|
+
const collections = [
|
|
43
|
+
...incomingConfig.collections ?? [],
|
|
44
|
+
Instructions
|
|
45
|
+
];
|
|
46
|
+
const { collections: collectionSlugs = [] } = pluginConfig;
|
|
47
|
+
incomingConfig.admin.components.providers = [
|
|
48
|
+
...incomingConfig.admin.components.providers ?? [],
|
|
49
|
+
InstructionsProvider
|
|
50
|
+
];
|
|
51
|
+
updatedConfig = {
|
|
52
|
+
...incomingConfig,
|
|
53
|
+
collections: collections.map((collection)=>{
|
|
54
|
+
if (collectionSlugs[collection.slug]) {
|
|
55
|
+
const { schemaPathMap, updatedCollectionConfig } = updateFieldsConfig(collection);
|
|
56
|
+
collectionsFieldPathMap = {
|
|
57
|
+
...collectionsFieldPathMap,
|
|
58
|
+
...schemaPathMap
|
|
59
|
+
};
|
|
60
|
+
return updatedCollectionConfig;
|
|
61
|
+
}
|
|
62
|
+
return collection;
|
|
63
|
+
}),
|
|
64
|
+
endpoints: [
|
|
65
|
+
...incomingConfig.endpoints ?? [],
|
|
66
|
+
endpoints.textarea,
|
|
67
|
+
endpoints.upload
|
|
68
|
+
],
|
|
69
|
+
globals: [
|
|
70
|
+
...incomingConfig.globals || [],
|
|
71
|
+
{
|
|
72
|
+
slug: PLUGIN_INSTRUCTIONS_MAP_GLOBAL,
|
|
73
|
+
access: {
|
|
74
|
+
read: ()=>true
|
|
75
|
+
},
|
|
76
|
+
admin: {
|
|
77
|
+
hidden: !pluginConfig.debugging
|
|
78
|
+
},
|
|
79
|
+
fields: [
|
|
80
|
+
{
|
|
81
|
+
name: 'map',
|
|
82
|
+
type: 'json'
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
i18n: {
|
|
88
|
+
...incomingConfig.i18n,
|
|
89
|
+
translations: {
|
|
90
|
+
...deepMerge(translations, incomingConfig.i18n?.translations)
|
|
91
|
+
}
|
|
85
92
|
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
93
|
+
};
|
|
94
|
+
}
|
|
88
95
|
updatedConfig.onInit = async (payload)=>{
|
|
89
96
|
if (incomingConfig.onInit) await incomingConfig.onInit(payload);
|
|
97
|
+
if (!isActivated) {
|
|
98
|
+
payload.logger.warn(`— AI Plugin: Not activated. Please verify your environment keys.`);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
90
101
|
await init(payload, collectionsFieldPathMap).catch((error)=>{
|
|
102
|
+
console.error(error);
|
|
91
103
|
payload.logger.error(`— AI Plugin: Initialization Error: ${error}`);
|
|
92
104
|
});
|
|
93
105
|
};
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["import type { Config } from 'payload'\nimport { deepMerge } from 'payload/shared'\n\nimport type { PluginConfig } from './types.js'\n\nimport { Instructions } from './collections/Instructions.js'\nimport { PLUGIN_INSTRUCTIONS_MAP_GLOBAL, PLUGIN_NAME } from './defaults.js'\nimport { endpoints } from './endpoints/index.js'\nimport { init } from './init.js'\nimport { InstructionsProvider } from './providers/InstructionsProvider/index.js'\nimport { translations } from './translations/index.js'\nimport {
|
|
1
|
+
{"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["import type { Config } from 'payload'\n\nimport { deepMerge } from 'payload/shared'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\n\nimport type { PluginConfig } from './types.js'\n\nimport { lexicalSchema } from './ai/editor/lexical.schema.js'\nimport { Instructions } from './collections/Instructions.js'\nimport { PLUGIN_INSTRUCTIONS_MAP_GLOBAL, PLUGIN_NAME } from './defaults.js'\nimport { endpoints } from './endpoints/index.js'\nimport { init } from './init.js'\nimport { InstructionsProvider } from './providers/InstructionsProvider/index.js'\nimport { translations } from './translations/index.js'\nimport { isPluginActivated } from './utilities/isPluginActivated.js'\nimport { updateFieldsConfig } from './utilities/updateFieldsConfig.js'\n\nconst payloadAiPlugin =\n (pluginConfig: PluginConfig) =>\n (incomingConfig: Config): Config => {\n const isActivated = isPluginActivated()\n let updatedConfig: Config = { ...incomingConfig }\n let collectionsFieldPathMap = {}\n\n if (isActivated) {\n // Inject editor schema to config, so that it can be accessed when /textarea endpoint will hit\n const zodLexicalSchema = lexicalSchema(pluginConfig.editorConfig?.nodes)\n\n if (pluginConfig.debugging) {\n Instructions.admin.hidden = false\n }\n\n Instructions.admin.custom = {\n ...(Instructions.admin.custom || {}),\n [PLUGIN_NAME]: {\n editorConfig: {\n // Used in admin client for useObject hook\n schema: zodToJsonSchema(zodLexicalSchema),\n },\n },\n }\n\n Instructions.custom = {\n ...(Instructions.custom || {}),\n [PLUGIN_NAME]: {\n editorConfig: {\n // Used in textarea endpoint for llm\n schema: zodLexicalSchema,\n },\n },\n }\n\n const collections = [...(incomingConfig.collections ?? []), Instructions]\n const { collections: collectionSlugs = [] } = pluginConfig\n\n incomingConfig.admin.components.providers = [\n ...(incomingConfig.admin.components.providers ?? []),\n InstructionsProvider,\n ]\n\n updatedConfig = {\n ...incomingConfig,\n collections: collections.map((collection) => {\n if (collectionSlugs[collection.slug]) {\n const { schemaPathMap, updatedCollectionConfig } = updateFieldsConfig(collection)\n collectionsFieldPathMap = {\n ...collectionsFieldPathMap,\n ...schemaPathMap,\n }\n return updatedCollectionConfig\n }\n\n return collection\n }),\n endpoints: [...(incomingConfig.endpoints ?? []), endpoints.textarea, endpoints.upload],\n globals: [\n ...incomingConfig.globals || [],\n {\n slug: PLUGIN_INSTRUCTIONS_MAP_GLOBAL,\n access: {\n read: () => true,\n },\n admin: {\n hidden: !pluginConfig.debugging,\n },\n fields: [\n {\n name: 'map',\n type: 'json',\n },\n ],\n },\n ],\n i18n: {\n ...incomingConfig.i18n,\n translations: {\n ...deepMerge(translations, incomingConfig.i18n?.translations),\n },\n },\n }\n }\n\n updatedConfig.onInit = async (payload) => {\n if (incomingConfig.onInit) await incomingConfig.onInit(payload)\n\n if (!isActivated) {\n payload.logger.warn(`— AI Plugin: Not activated. Please verify your environment keys.`)\n return\n }\n\n await init(payload, collectionsFieldPathMap).catch((error) => {\n console.error(error)\n payload.logger.error(`— AI Plugin: Initialization Error: ${error}`)\n })\n }\n\n return updatedConfig\n }\n\nexport { payloadAiPlugin }\n"],"names":["deepMerge","zodToJsonSchema","lexicalSchema","Instructions","PLUGIN_INSTRUCTIONS_MAP_GLOBAL","PLUGIN_NAME","endpoints","init","InstructionsProvider","translations","isPluginActivated","updateFieldsConfig","payloadAiPlugin","pluginConfig","incomingConfig","isActivated","updatedConfig","collectionsFieldPathMap","zodLexicalSchema","editorConfig","nodes","debugging","admin","hidden","custom","schema","collections","collectionSlugs","components","providers","map","collection","slug","schemaPathMap","updatedCollectionConfig","textarea","upload","globals","access","read","fields","name","type","i18n","onInit","payload","logger","warn","catch","error","console"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Actions.d.ts","sourceRoot":"","sources":["../../../src/ui/Actions/Actions.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Actions.d.ts","sourceRoot":"","sources":["../../../src/ui/Actions/Actions.tsx"],"names":[],"mappings":"AA6BA,eAAO,MAAM,OAAO;;;6CA6InB,CAAA"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEditorConfigContext } from '@payloadcms/richtext-lexical/client';
|
|
3
4
|
import { FieldDescription, Popup, useDocumentDrawer, useField, useFieldProps } from '@payloadcms/ui';
|
|
4
5
|
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
5
6
|
import { PLUGIN_INSTRUCTIONS_TABLE } from '../../defaults.js';
|
|
7
|
+
import { setSafeLexicalState } from '../../utilities/setSafeLexicalState.js';
|
|
6
8
|
import { PluginIcon } from '../Icons/Icons.js';
|
|
9
|
+
import { UndoRedoActions } from './UndoRedoActions.js';
|
|
7
10
|
import styles from './actions.module.scss';
|
|
8
|
-
import { useGenerate } from './hooks/useGenerate.js';
|
|
9
11
|
import { useMenu } from './hooks/menu/useMenu.js';
|
|
10
|
-
import {
|
|
11
|
-
import { useEditorConfigContext } from '@payloadcms/richtext-lexical/client';
|
|
12
|
-
import { setSafeLexicalState } from '../../utilities/setSafeLexicalState.js';
|
|
12
|
+
import { useGenerate } from './hooks/useGenerate.js';
|
|
13
13
|
function findParentWithClass(element, className) {
|
|
14
14
|
// Base case: if the element is null or we've reached the top of the DOM
|
|
15
15
|
if (!element || element === document.body) {
|
|
@@ -22,7 +22,6 @@ function findParentWithClass(element, className) {
|
|
|
22
22
|
// Recursively call the function on the parent element
|
|
23
23
|
return findParentWithClass(element.parentElement, className);
|
|
24
24
|
}
|
|
25
|
-
//TODO: Add undo/redo to the actions toolbar
|
|
26
25
|
export const Actions = ({ descriptionProps = {}, instructionId })=>{
|
|
27
26
|
const [DocumentDrawer, _, { closeDrawer, openDrawer }] = useDocumentDrawer({
|
|
28
27
|
id: instructionId,
|
|
@@ -37,7 +36,7 @@ export const Actions = ({ descriptionProps = {}, instructionId })=>{
|
|
|
37
36
|
useEffect(()=>{
|
|
38
37
|
if (!actionsRef.current) return;
|
|
39
38
|
const fieldId = `field-${pathFromContext.replace(/\./g, '__')}`;
|
|
40
|
-
|
|
39
|
+
const inputElement = document.getElementById(fieldId);
|
|
41
40
|
if (!inputElement && fieldType === 'richText') {
|
|
42
41
|
setInput(editorContainerRef.current);
|
|
43
42
|
} else {
|
|
@@ -100,6 +99,7 @@ export const Actions = ({ descriptionProps = {}, instructionId })=>{
|
|
|
100
99
|
action: 'Rephrase'
|
|
101
100
|
});
|
|
102
101
|
},
|
|
102
|
+
onSettings: openDrawer,
|
|
103
103
|
onSimplify: async ()=>{
|
|
104
104
|
console.log('Simplifying...');
|
|
105
105
|
await generate({
|
|
@@ -113,13 +113,12 @@ export const Actions = ({ descriptionProps = {}, instructionId })=>{
|
|
|
113
113
|
});
|
|
114
114
|
},
|
|
115
115
|
onTranslate: async (data)=>{
|
|
116
|
-
console.log('
|
|
116
|
+
console.log('Translating...', data);
|
|
117
117
|
await generate({
|
|
118
118
|
action: 'Translate',
|
|
119
119
|
params: data
|
|
120
120
|
});
|
|
121
|
-
}
|
|
122
|
-
onSettings: openDrawer
|
|
121
|
+
}
|
|
123
122
|
});
|
|
124
123
|
const { setValue, value } = useField({
|
|
125
124
|
path: pathFromContext
|
|
@@ -134,8 +133,8 @@ export const Actions = ({ descriptionProps = {}, instructionId })=>{
|
|
|
134
133
|
children: [
|
|
135
134
|
/*#__PURE__*/ _jsxs("label", {
|
|
136
135
|
className: `${styles.actions}`,
|
|
137
|
-
ref: actionsRef,
|
|
138
136
|
onClick: (e)=>e.preventDefault(),
|
|
137
|
+
ref: actionsRef,
|
|
139
138
|
children: [
|
|
140
139
|
/*#__PURE__*/ _jsx(DocumentDrawer, {
|
|
141
140
|
onSave: ()=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/ui/Actions/Actions.tsx"],"sourcesContent":["'use client'\n\nimport { FieldDescription, Popup, useDocumentDrawer, useField, useFieldProps } from '@payloadcms/ui'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport { PLUGIN_INSTRUCTIONS_TABLE } from '../../defaults.js'\nimport { PluginIcon } from '../Icons/Icons.js'\nimport styles from './actions.module.scss'\nimport { useGenerate } from './hooks/useGenerate.js'\n\nimport { useMenu } from './hooks/menu/useMenu.js'\nimport { UndoRedoActions } from './UndoRedoActions.js'\nimport { useEditorConfigContext } from '@payloadcms/richtext-lexical/client'\nimport { setSafeLexicalState } from '../../utilities/setSafeLexicalState.js'\n\nfunction findParentWithClass(element, className) {\n // Base case: if the element is null or we've reached the top of the DOM\n if (!element || element === document.body) {\n return null\n }\n\n // Check if the current element has the class we're looking for\n if (element.classList.contains(className)) {\n return element\n }\n\n // Recursively call the function on the parent element\n return findParentWithClass(element.parentElement, className)\n}\n\n//TODO: Add undo/redo to the actions toolbar\nexport const Actions = ({ descriptionProps = {}, instructionId }) => {\n const [DocumentDrawer, _, { closeDrawer, openDrawer }] = useDocumentDrawer({\n id: instructionId,\n collectionSlug: PLUGIN_INSTRUCTIONS_TABLE,\n })\n\n const { type: fieldType, path: pathFromContext, schemaPath } = useFieldProps()\n const { editor: lexicalEditor, editorContainerRef } = useEditorConfigContext()\n\n // Below snippet is used to show/hide the actions menu on AI enabled fields\n const [input, setInput] = useState(null)\n const actionsRef = useRef(null)\n\n // Set input element for current field\n useEffect(() => {\n if (!actionsRef.current) return\n\n const fieldId = `field-${pathFromContext.replace(/\\./g, '__')}`\n let inputElement = document.getElementById(fieldId)\n\n if (!inputElement && fieldType === 'richText') {\n setInput(editorContainerRef.current)\n } else {\n actionsRef.current.setAttribute('for', fieldId)\n setInput(inputElement)\n }\n }, [pathFromContext, schemaPath, actionsRef, editorContainerRef])\n\n // Show or hide actions menu on field\n useEffect(() => {\n if (!input || !actionsRef.current) return\n\n actionsRef.current.classList.add(styles.actions_hidden)\n input.addEventListener('click', (event) => {\n document.querySelectorAll('.ai-plugin-active')?.forEach((element) => {\n const actionElement = element.querySelector(`.${styles.actions}`)\n if (actionElement) {\n actionElement.classList.add(styles.actions_hidden)\n element.classList.remove('ai-plugin-active')\n }\n })\n\n actionsRef.current.classList.remove(styles.actions_hidden)\n const parentWithClass = findParentWithClass(event.target, 'field-type')\n parentWithClass.classList.add('ai-plugin-active')\n })\n }, [input, actionsRef])\n\n const [isProcessing, setIsProcessing] = useState(false)\n const { generate, isLoading } = useGenerate()\n\n const { ActiveComponent, Menu } = useMenu({\n onCompose: async () => {\n console.log('Composing...')\n setIsProcessing(true)\n await generate({\n action: 'Compose',\n }).finally(() => {\n setIsProcessing(false)\n })\n },\n onExpand: async () => {\n console.log('Expanding...')\n await generate({\n action: 'Expand',\n })\n },\n onProofread: async () => {\n console.log('Proofreading...')\n await generate({\n action: 'Proofread',\n })\n },\n onRephrase: async () => {\n console.log('Rephrasing...')\n await generate({\n action: 'Rephrase',\n })\n },\n onSimplify: async () => {\n console.log('Simplifying...')\n await generate({\n action: 'Simplify',\n })\n },\n onSummarize: async () => {\n console.log('Summarizing...')\n await generate({\n action: 'Summarize',\n })\n },\n onTranslate: async (data) => {\n console.log('Translate...', data)\n await generate({\n action: 'Translate',\n params: data,\n })\n },\n onSettings: openDrawer,\n })\n\n const { setValue, value } = useField<string>({\n path: pathFromContext,\n })\n\n const setIfValueIsLexicalState = useCallback((val) => {\n if (val.root && lexicalEditor) {\n setSafeLexicalState(JSON.stringify(val), lexicalEditor)\n }\n\n // DO NOT PROVIDE lexicalEditor as a dependency, it freaks out and does not update the editor after first undo/redo\n }, [])\n\n return (\n <React.Fragment>\n <label className={`${styles.actions}`} ref={actionsRef} onClick={(e) => e.preventDefault()}>\n <DocumentDrawer\n onSave={() => {\n closeDrawer()\n }}\n />\n <Popup\n button={<PluginIcon isLoading={isProcessing || isLoading} />}\n render={({ close }) => {\n return <Menu isLoading={isProcessing || isLoading} onClose={close} />\n }}\n verticalAlign=\"bottom\"\n />\n <ActiveComponent isLoading={isProcessing || isLoading} />\n <UndoRedoActions\n onChange={(val) => {\n setValue(val)\n setIfValueIsLexicalState(val)\n }}\n />\n </label>\n <div>\n <FieldDescription {...descriptionProps} />\n </div>\n </React.Fragment>\n )\n}\n"],"names":["FieldDescription","Popup","useDocumentDrawer","useField","useFieldProps","React","useCallback","useEffect","useRef","useState","PLUGIN_INSTRUCTIONS_TABLE","PluginIcon","styles","useGenerate","useMenu","UndoRedoActions","useEditorConfigContext","setSafeLexicalState","findParentWithClass","element","className","document","body","classList","contains","parentElement","Actions","descriptionProps","instructionId","DocumentDrawer","_","closeDrawer","openDrawer","id","collectionSlug","type","fieldType","path","pathFromContext","schemaPath","editor","lexicalEditor","editorContainerRef","input","setInput","actionsRef","current","fieldId","replace","inputElement","getElementById","setAttribute","add","actions_hidden","addEventListener","event","querySelectorAll","forEach","actionElement","querySelector","actions","remove","parentWithClass","target","isProcessing","setIsProcessing","generate","isLoading","ActiveComponent","Menu","onCompose","console","log","action","finally","onExpand","onProofread","onRephrase","onSimplify","onSummarize","onTranslate","data","params","onSettings","setValue","value","setIfValueIsLexicalState","val","root","JSON","stringify","Fragment","label","ref","onClick","e","preventDefault","onSave","button","render","close","onClose","verticalAlign","onChange","div"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/ui/Actions/Actions.tsx"],"sourcesContent":["'use client'\n\nimport { useEditorConfigContext } from '@payloadcms/richtext-lexical/client'\nimport { FieldDescription, Popup, useDocumentDrawer, useField, useFieldProps } from '@payloadcms/ui'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport { PLUGIN_INSTRUCTIONS_TABLE } from '../../defaults.js'\nimport { setSafeLexicalState } from '../../utilities/setSafeLexicalState.js'\nimport { PluginIcon } from '../Icons/Icons.js'\nimport { UndoRedoActions } from './UndoRedoActions.js'\nimport styles from './actions.module.scss'\nimport { useMenu } from './hooks/menu/useMenu.js'\nimport { useGenerate } from './hooks/useGenerate.js'\n\nfunction findParentWithClass(element, className) {\n // Base case: if the element is null or we've reached the top of the DOM\n if (!element || element === document.body) {\n return null\n }\n\n // Check if the current element has the class we're looking for\n if (element.classList.contains(className)) {\n return element\n }\n\n // Recursively call the function on the parent element\n return findParentWithClass(element.parentElement, className)\n}\n\nexport const Actions = ({ descriptionProps = {}, instructionId }) => {\n const [DocumentDrawer, _, { closeDrawer, openDrawer }] = useDocumentDrawer({\n id: instructionId,\n collectionSlug: PLUGIN_INSTRUCTIONS_TABLE,\n })\n\n const { type: fieldType, path: pathFromContext, schemaPath } = useFieldProps()\n const { editor: lexicalEditor, editorContainerRef } = useEditorConfigContext()\n\n // Below snippet is used to show/hide the actions menu on AI enabled fields\n const [input, setInput] = useState(null)\n const actionsRef = useRef(null)\n\n // Set input element for current field\n useEffect(() => {\n if (!actionsRef.current) return\n\n const fieldId = `field-${pathFromContext.replace(/\\./g, '__')}`\n const inputElement = document.getElementById(fieldId)\n\n if (!inputElement && fieldType === 'richText') {\n setInput(editorContainerRef.current)\n } else {\n actionsRef.current.setAttribute('for', fieldId)\n setInput(inputElement)\n }\n }, [pathFromContext, schemaPath, actionsRef, editorContainerRef])\n\n // Show or hide actions menu on field\n useEffect(() => {\n if (!input || !actionsRef.current) return\n\n actionsRef.current.classList.add(styles.actions_hidden)\n input.addEventListener('click', (event) => {\n document.querySelectorAll('.ai-plugin-active')?.forEach((element) => {\n const actionElement = element.querySelector(`.${styles.actions}`)\n if (actionElement) {\n actionElement.classList.add(styles.actions_hidden)\n element.classList.remove('ai-plugin-active')\n }\n })\n\n actionsRef.current.classList.remove(styles.actions_hidden)\n const parentWithClass = findParentWithClass(event.target, 'field-type')\n parentWithClass.classList.add('ai-plugin-active')\n })\n }, [input, actionsRef])\n\n const [isProcessing, setIsProcessing] = useState(false)\n const { generate, isLoading } = useGenerate()\n\n const { ActiveComponent, Menu } = useMenu({\n onCompose: async () => {\n console.log('Composing...')\n setIsProcessing(true)\n await generate({\n action: 'Compose',\n }).finally(() => {\n setIsProcessing(false)\n })\n },\n onExpand: async () => {\n console.log('Expanding...')\n await generate({\n action: 'Expand',\n })\n },\n onProofread: async () => {\n console.log('Proofreading...')\n await generate({\n action: 'Proofread',\n })\n },\n onRephrase: async () => {\n console.log('Rephrasing...')\n await generate({\n action: 'Rephrase',\n })\n },\n onSettings: openDrawer,\n onSimplify: async () => {\n console.log('Simplifying...')\n await generate({\n action: 'Simplify',\n })\n },\n onSummarize: async () => {\n console.log('Summarizing...')\n await generate({\n action: 'Summarize',\n })\n },\n onTranslate: async (data) => {\n console.log('Translating...', data)\n await generate({\n action: 'Translate',\n params: data,\n })\n },\n })\n\n const { setValue, value } = useField<string>({\n path: pathFromContext,\n })\n\n const setIfValueIsLexicalState = useCallback((val) => {\n if (val.root && lexicalEditor) {\n setSafeLexicalState(JSON.stringify(val), lexicalEditor)\n }\n\n // DO NOT PROVIDE lexicalEditor as a dependency, it freaks out and does not update the editor after first undo/redo\n }, [])\n\n return (\n <React.Fragment>\n <label className={`${styles.actions}`} onClick={(e) => e.preventDefault()} ref={actionsRef}>\n <DocumentDrawer\n onSave={() => {\n closeDrawer()\n }}\n />\n <Popup\n button={<PluginIcon isLoading={isProcessing || isLoading} />}\n render={({ close }) => {\n return <Menu isLoading={isProcessing || isLoading} onClose={close} />\n }}\n verticalAlign=\"bottom\"\n />\n <ActiveComponent isLoading={isProcessing || isLoading} />\n <UndoRedoActions\n onChange={(val) => {\n setValue(val)\n setIfValueIsLexicalState(val)\n }}\n />\n </label>\n <div>\n <FieldDescription {...descriptionProps} />\n </div>\n </React.Fragment>\n )\n}\n"],"names":["useEditorConfigContext","FieldDescription","Popup","useDocumentDrawer","useField","useFieldProps","React","useCallback","useEffect","useRef","useState","PLUGIN_INSTRUCTIONS_TABLE","setSafeLexicalState","PluginIcon","UndoRedoActions","styles","useMenu","useGenerate","findParentWithClass","element","className","document","body","classList","contains","parentElement","Actions","descriptionProps","instructionId","DocumentDrawer","_","closeDrawer","openDrawer","id","collectionSlug","type","fieldType","path","pathFromContext","schemaPath","editor","lexicalEditor","editorContainerRef","input","setInput","actionsRef","current","fieldId","replace","inputElement","getElementById","setAttribute","add","actions_hidden","addEventListener","event","querySelectorAll","forEach","actionElement","querySelector","actions","remove","parentWithClass","target","isProcessing","setIsProcessing","generate","isLoading","ActiveComponent","Menu","onCompose","console","log","action","finally","onExpand","onProofread","onRephrase","onSettings","onSimplify","onSummarize","onTranslate","data","params","setValue","value","setIfValueIsLexicalState","val","root","JSON","stringify","Fragment","label","onClick","e","preventDefault","ref","onSave","button","render","close","onClose","verticalAlign","onChange","div"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGenerate.d.ts","sourceRoot":"","sources":["../../../../src/ui/Actions/hooks/useGenerate.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,mBAAmB,CAAA;AAa1E,KAAK,oBAAoB,GAAG;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAGzE,eAAO,MAAM,WAAW;
|
|
1
|
+
{"version":3,"file":"useGenerate.d.ts","sourceRoot":"","sources":["../../../../src/ui/Actions/hooks/useGenerate.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,mBAAmB,CAAA;AAa1E,KAAK,oBAAoB,GAAG;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAGzE,eAAO,MAAM,WAAW;yBAqKH,oBAAoB;;CAoBxC,CAAA"}
|
|
@@ -5,14 +5,14 @@ import { useCallback, useEffect } from 'react';
|
|
|
5
5
|
import { PLUGIN_API_ENDPOINT_GENERATE, PLUGIN_API_ENDPOINT_GENERATE_UPLOAD, PLUGIN_INSTRUCTIONS_TABLE } from '../../../defaults.js';
|
|
6
6
|
import { useInstructions } from '../../../providers/InstructionsProvider/hook.js';
|
|
7
7
|
import { getFieldBySchemaPath } from '../../../utilities/getFieldBySchemaPath.js';
|
|
8
|
+
import { jsonSchemaToZod } from '../../../utilities/jsonToZod.js';
|
|
8
9
|
import { setSafeLexicalState } from '../../../utilities/setSafeLexicalState.js';
|
|
9
10
|
import { useHistory } from './useHistory.js';
|
|
10
|
-
import { jsonSchemaToZod } from '../../../utilities/jsonToZod.js';
|
|
11
11
|
//TODO: DONATION IDEA - Add a url to donate in cli when user installs the plugin and uses it for couple of times.
|
|
12
12
|
export const useGenerate = ()=>{
|
|
13
13
|
const { type, path: pathFromContext, schemaPath } = useFieldProps();
|
|
14
14
|
const editorConfigContext = useEditorConfigContext();
|
|
15
|
-
const { editor
|
|
15
|
+
const { editor } = editorConfigContext;
|
|
16
16
|
const { docConfig } = useDocumentInfo();
|
|
17
17
|
const { setValue } = useField({
|
|
18
18
|
path: pathFromContext
|
|
@@ -28,18 +28,17 @@ export const useGenerate = ()=>{
|
|
|
28
28
|
const { custom: { editorConfig } = {} } = collection.admin;
|
|
29
29
|
const { schema: DocumentSchema = {} } = editorConfig || {};
|
|
30
30
|
const zodSchema = jsonSchemaToZod(DocumentSchema);
|
|
31
|
-
const { isLoading: loadingObject,
|
|
32
|
-
object, stop, submit } = useObject({
|
|
31
|
+
const { isLoading: loadingObject, object, stop, submit } = useObject({
|
|
33
32
|
api: `/api${PLUGIN_API_ENDPOINT_GENERATE}`,
|
|
34
33
|
onError: (error)=>{
|
|
35
34
|
console.error('Error generating object:', error);
|
|
36
35
|
},
|
|
37
36
|
onFinish: (result)=>{
|
|
38
|
-
console.log('onFinish: result', result);
|
|
39
|
-
//TODO: Sometimes object is undefined?!
|
|
40
37
|
if (result.object) {
|
|
41
38
|
setHistory(result.object);
|
|
42
39
|
setValue(result.object);
|
|
40
|
+
} else {
|
|
41
|
+
console.log('onFinish: result ', result);
|
|
43
42
|
}
|
|
44
43
|
},
|
|
45
44
|
schema: zodSchema
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/ui/Actions/hooks/useGenerate.ts"],"sourcesContent":["import type { ClientCollectionConfig, UploadField } from 'payload'\n\nimport { useEditorConfigContext } from '@payloadcms/richtext-lexical/client'\nimport {\n useConfig,\n useDocumentInfo,\n useField,\n useFieldProps,\n useForm,\n useLocale,\n} from '@payloadcms/ui'\nimport { useCompletion, experimental_useObject as useObject } from 'ai/react'\nimport { useCallback, useEffect } from 'react'\n\nimport type { ActionMenuItems, GenerateTextarea } from '../../../types.js'\n\nimport {\n PLUGIN_API_ENDPOINT_GENERATE,\n PLUGIN_API_ENDPOINT_GENERATE_UPLOAD,\n PLUGIN_INSTRUCTIONS_TABLE,\n} from '../../../defaults.js'\nimport { useInstructions } from '../../../providers/InstructionsProvider/hook.js'\nimport { getFieldBySchemaPath } from '../../../utilities/getFieldBySchemaPath.js'\nimport { setSafeLexicalState } from '../../../utilities/setSafeLexicalState.js'\nimport { useHistory } from './useHistory.js'\nimport { jsonSchemaToZod } from '../../../utilities/jsonToZod.js'\n\ntype ActionCallbackParams = { action: ActionMenuItems; params?: unknown }\n\n//TODO: DONATION IDEA - Add a url to donate in cli when user installs the plugin and uses it for couple of times.\nexport const useGenerate = () => {\n const { type, path: pathFromContext, schemaPath } = useFieldProps()\n\n const editorConfigContext = useEditorConfigContext()\n const { editor, focusedEditor } = editorConfigContext\n\n const { docConfig } = useDocumentInfo()\n\n const { setValue } = useField<string>({\n path: pathFromContext,\n })\n\n const { set: setHistory } = useHistory()\n const { id: instructionId } = useInstructions({\n path: schemaPath,\n })\n\n const { getData } = useForm()\n const localFromContext = useLocale()\n const { collections } = useConfig()\n const collection = collections.find((collection) => collection.slug === PLUGIN_INSTRUCTIONS_TABLE)\n const { custom: { editorConfig } = {} } = collection.admin\n const { schema: DocumentSchema = {} } = editorConfig || {}\n const zodSchema = jsonSchemaToZod(DocumentSchema)\n\n const {\n isLoading: loadingObject,\n // @ts-ignore - Object execssivily deep issue\n object,\n stop, // TODO: Implement this function\n submit,\n } = useObject({\n api: `/api${PLUGIN_API_ENDPOINT_GENERATE}`,\n onError: (error) => {\n console.error('Error generating object:', error)\n },\n onFinish: (result) => {\n console.log('onFinish: result', result)\n //TODO: Sometimes object is undefined?!\n if (result.object) {\n setHistory(result.object)\n setValue(result.object)\n }\n },\n schema: zodSchema,\n })\n\n useEffect(() => {\n if (!object) return\n\n requestAnimationFrame(() => {\n if (!editor) {\n setValue(object)\n return\n }\n\n // Currently this is being used as setValue for RichText component does not render new changes right away.\n setSafeLexicalState(object, editor)\n })\n }, [object])\n\n const {\n complete,\n completion,\n isLoading: loadingCompletion,\n } = useCompletion({\n api: `/api${PLUGIN_API_ENDPOINT_GENERATE}`,\n onError: (error) => {\n console.error('Error generating text:', error)\n },\n onFinish: (prompt, result) => {\n setHistory(result)\n },\n streamProtocol: 'data',\n })\n\n useEffect(() => {\n if (!completion) return\n\n requestAnimationFrame(() => {\n setValue(completion)\n })\n }, [completion])\n\n const streamObject = useCallback(\n ({ action = 'Compose', params }: ActionCallbackParams) => {\n const doc = getData()\n const options = {\n action,\n actionParams: params,\n instructionId,\n }\n\n submit({\n doc,\n locale: localFromContext?.code,\n options,\n })\n },\n [getData, localFromContext?.code, instructionId],\n )\n\n const streamText = useCallback(\n async ({ action = 'Compose', params }: ActionCallbackParams) => {\n const doc = getData()\n\n const options = {\n action,\n actionParams: params,\n instructionId,\n }\n\n await complete('', {\n body: {\n doc,\n locale: localFromContext?.code,\n options,\n },\n })\n },\n [getData, localFromContext?.code, instructionId],\n )\n\n const generateUpload = useCallback(async () => {\n const doc = getData()\n\n const fieldInfo = getFieldBySchemaPath(\n docConfig as ClientCollectionConfig,\n schemaPath,\n ) as UploadField\n\n return fetch(`/api${PLUGIN_API_ENDPOINT_GENERATE_UPLOAD}`, {\n body: JSON.stringify({\n doc,\n locale: localFromContext?.code,\n options: {\n instructionId,\n uploadCollectionSlug: fieldInfo.relationTo || 'media',\n },\n } satisfies Parameters<GenerateTextarea>[0]),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n .then(async (uploadResponse) => {\n if (uploadResponse.ok) {\n const { result } = await uploadResponse.json()\n if (!result) throw new Error('generateUpload: Something went wrong')\n\n setValue(result?.id)\n setHistory(result?.id)\n } else {\n const { errors = [] } = await uploadResponse.json()\n const errStr = errors.map((error) => error.message).join(', ')\n throw new Error(errStr)\n }\n return uploadResponse\n })\n .catch((error) => {\n console.error('Error generating your upload', error)\n })\n }, [getData, localFromContext?.code, instructionId, setValue])\n\n const generate = useCallback(\n async (options?: ActionCallbackParams) => {\n if (type === 'richText') {\n return streamObject(options)\n }\n\n if (['text', 'textarea'].includes(type)) {\n return streamText(options)\n }\n\n if (type === 'upload') {\n return generateUpload()\n }\n },\n [generateUpload, streamObject, streamText, type],\n )\n\n return {\n generate,\n isLoading: loadingCompletion || loadingObject,\n }\n}\n"],"names":["useEditorConfigContext","useConfig","useDocumentInfo","useField","useFieldProps","useForm","useLocale","useCompletion","experimental_useObject","useObject","useCallback","useEffect","PLUGIN_API_ENDPOINT_GENERATE","PLUGIN_API_ENDPOINT_GENERATE_UPLOAD","PLUGIN_INSTRUCTIONS_TABLE","useInstructions","getFieldBySchemaPath","setSafeLexicalState","useHistory","jsonSchemaToZod","useGenerate","type","path","pathFromContext","schemaPath","editorConfigContext","editor","focusedEditor","docConfig","setValue","set","setHistory","id","instructionId","getData","localFromContext","collections","collection","find","slug","custom","editorConfig","admin","schema","DocumentSchema","zodSchema","isLoading","loadingObject","object","stop","submit","api","onError","error","console","onFinish","result","log","requestAnimationFrame","complete","completion","loadingCompletion","prompt","streamProtocol","streamObject","action","params","doc","options","actionParams","locale","code","streamText","body","generateUpload","fieldInfo","fetch","JSON","stringify","uploadCollectionSlug","relationTo","credentials","headers","method","then","uploadResponse","ok","json","Error","errors","errStr","map","message","join","catch","generate","includes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/ui/Actions/hooks/useGenerate.ts"],"sourcesContent":["import type { ClientCollectionConfig, UploadField } from 'payload'\n\nimport { useEditorConfigContext } from '@payloadcms/richtext-lexical/client'\nimport {\n useConfig,\n useDocumentInfo,\n useField,\n useFieldProps,\n useForm,\n useLocale,\n} from '@payloadcms/ui'\nimport { useCompletion, experimental_useObject as useObject } from 'ai/react'\nimport { useCallback, useEffect } from 'react'\n\nimport type { ActionMenuItems, GenerateTextarea } from '../../../types.js'\n\nimport {\n PLUGIN_API_ENDPOINT_GENERATE,\n PLUGIN_API_ENDPOINT_GENERATE_UPLOAD,\n PLUGIN_INSTRUCTIONS_TABLE,\n} from '../../../defaults.js'\nimport { useInstructions } from '../../../providers/InstructionsProvider/hook.js'\nimport { getFieldBySchemaPath } from '../../../utilities/getFieldBySchemaPath.js'\nimport { jsonSchemaToZod } from '../../../utilities/jsonToZod.js'\nimport { setSafeLexicalState } from '../../../utilities/setSafeLexicalState.js'\nimport { useHistory } from './useHistory.js'\n\ntype ActionCallbackParams = { action: ActionMenuItems; params?: unknown }\n\n//TODO: DONATION IDEA - Add a url to donate in cli when user installs the plugin and uses it for couple of times.\nexport const useGenerate = () => {\n const { type, path: pathFromContext, schemaPath } = useFieldProps()\n\n const editorConfigContext = useEditorConfigContext()\n const { editor } = editorConfigContext\n\n const { docConfig } = useDocumentInfo()\n\n const { setValue } = useField<string>({\n path: pathFromContext,\n })\n\n const { set: setHistory } = useHistory()\n const { id: instructionId } = useInstructions({\n path: schemaPath,\n })\n\n const { getData } = useForm()\n const localFromContext = useLocale()\n const { collections } = useConfig()\n const collection = collections.find((collection) => collection.slug === PLUGIN_INSTRUCTIONS_TABLE)\n const { custom: { editorConfig } = {} } = collection.admin\n const { schema: DocumentSchema = {} } = editorConfig || {}\n const zodSchema = jsonSchemaToZod(DocumentSchema)\n\n const {\n isLoading: loadingObject,\n object,\n stop, // TODO: Implement this function\n submit,\n } = useObject({\n api: `/api${PLUGIN_API_ENDPOINT_GENERATE}`,\n onError: (error) => {\n console.error('Error generating object:', error)\n },\n onFinish: (result) => {\n if (result.object) {\n setHistory(result.object)\n setValue(result.object)\n } else {\n console.log('onFinish: result ', result)\n }\n },\n schema: zodSchema,\n })\n\n useEffect(() => {\n if (!object) return\n\n requestAnimationFrame(() => {\n if (!editor) {\n setValue(object)\n return\n }\n\n // Currently this is being used as setValue for RichText component does not render new changes right away.\n setSafeLexicalState(object, editor)\n })\n }, [object])\n\n const {\n complete,\n completion,\n isLoading: loadingCompletion,\n } = useCompletion({\n api: `/api${PLUGIN_API_ENDPOINT_GENERATE}`,\n onError: (error) => {\n console.error('Error generating text:', error)\n },\n onFinish: (prompt, result) => {\n setHistory(result)\n },\n streamProtocol: 'data',\n })\n\n useEffect(() => {\n if (!completion) return\n\n requestAnimationFrame(() => {\n setValue(completion)\n })\n }, [completion])\n\n const streamObject = useCallback(\n ({ action = 'Compose', params }: ActionCallbackParams) => {\n const doc = getData()\n const options = {\n action,\n actionParams: params,\n instructionId,\n }\n\n submit({\n doc,\n locale: localFromContext?.code,\n options,\n })\n },\n [getData, localFromContext?.code, instructionId],\n )\n\n const streamText = useCallback(\n async ({ action = 'Compose', params }: ActionCallbackParams) => {\n const doc = getData()\n\n const options = {\n action,\n actionParams: params,\n instructionId,\n }\n\n await complete('', {\n body: {\n doc,\n locale: localFromContext?.code,\n options,\n },\n })\n },\n [getData, localFromContext?.code, instructionId],\n )\n\n const generateUpload = useCallback(async () => {\n const doc = getData()\n\n const fieldInfo = getFieldBySchemaPath(\n docConfig as ClientCollectionConfig,\n schemaPath,\n ) as UploadField\n\n return fetch(`/api${PLUGIN_API_ENDPOINT_GENERATE_UPLOAD}`, {\n body: JSON.stringify({\n doc,\n locale: localFromContext?.code,\n options: {\n instructionId,\n uploadCollectionSlug: fieldInfo.relationTo || 'media',\n },\n } satisfies Parameters<GenerateTextarea>[0]),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n .then(async (uploadResponse) => {\n if (uploadResponse.ok) {\n const { result } = await uploadResponse.json()\n if (!result) throw new Error('generateUpload: Something went wrong')\n\n setValue(result?.id)\n setHistory(result?.id)\n } else {\n const { errors = [] } = await uploadResponse.json()\n const errStr = errors.map((error) => error.message).join(', ')\n throw new Error(errStr)\n }\n return uploadResponse\n })\n .catch((error) => {\n console.error('Error generating your upload', error)\n })\n }, [getData, localFromContext?.code, instructionId, setValue])\n\n const generate = useCallback(\n async (options?: ActionCallbackParams) => {\n if (type === 'richText') {\n return streamObject(options)\n }\n\n if (['text', 'textarea'].includes(type)) {\n return streamText(options)\n }\n\n if (type === 'upload') {\n return generateUpload()\n }\n },\n [generateUpload, streamObject, streamText, type],\n )\n\n return {\n generate,\n isLoading: loadingCompletion || loadingObject,\n }\n}\n"],"names":["useEditorConfigContext","useConfig","useDocumentInfo","useField","useFieldProps","useForm","useLocale","useCompletion","experimental_useObject","useObject","useCallback","useEffect","PLUGIN_API_ENDPOINT_GENERATE","PLUGIN_API_ENDPOINT_GENERATE_UPLOAD","PLUGIN_INSTRUCTIONS_TABLE","useInstructions","getFieldBySchemaPath","jsonSchemaToZod","setSafeLexicalState","useHistory","useGenerate","type","path","pathFromContext","schemaPath","editorConfigContext","editor","docConfig","setValue","set","setHistory","id","instructionId","getData","localFromContext","collections","collection","find","slug","custom","editorConfig","admin","schema","DocumentSchema","zodSchema","isLoading","loadingObject","object","stop","submit","api","onError","error","console","onFinish","result","log","requestAnimationFrame","complete","completion","loadingCompletion","prompt","streamProtocol","streamObject","action","params","doc","options","actionParams","locale","code","streamText","body","generateUpload","fieldInfo","fetch","JSON","stringify","uploadCollectionSlug","relationTo","credentials","headers","method","then","uploadResponse","ok","json","Error","errors","errStr","map","message","join","catch","generate","includes"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isPluginActivated.d.ts","sourceRoot":"","sources":["../../src/utilities/isPluginActivated.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,cAE7B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/isPluginActivated.ts"],"sourcesContent":["export const isPluginActivated = () => {\n return process.env.OPENAI_API_KEY || process.env.ANTHROPIC_API_KEY\n}\n"],"names":["isPluginActivated","process","env","OPENAI_API_KEY","ANTHROPIC_API_KEY"],"mappings":"AAAA,OAAO,MAAMA,oBAAoB;IAC/B,OAAOC,QAAQC,GAAG,CAACC,cAAc,IAAIF,QAAQC,GAAG,CAACE,iBAAiB;AACpE,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/updateFieldsConfig.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\nimport { DescriptionField } from '../fields/DescriptionField/DescriptionField.js'\n\ninterface UpdateFieldsConfig {\n schemaPathMap: Record<string, string>\n updatedCollectionConfig: CollectionConfig\n}\n\nexport const updateFieldsConfig = (collectionConfig: CollectionConfig): UpdateFieldsConfig => {\n let schemaPathMap = {}\n function updateField(field: any, parentPath = ''): any {\n const currentPath = parentPath ? `${parentPath}.${field.name}` : field.name\n const currentSchemaPath = `${collectionConfig.slug}.${currentPath}`\n\n if (field.admin?.disabled || field.admin?.readOnly || field.admin?.hidden) {\n return field\n }\n\n // Map field path for global fieldInstructionsMap to load related instructions\n // This is done due to save extra API call to get instructions when Field components are loaded in admin\n // Doing is will only call instructions data when user clicks on settings\n if (['richText', 'text', 'textarea', 'upload'].includes(field.type)) {\n schemaPathMap = {\n ...schemaPathMap,\n [currentSchemaPath]: {\n type: field.type,\n label: field.label || field.name,\n }
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/updateFieldsConfig.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\nimport { DescriptionField } from '../fields/DescriptionField/DescriptionField.js'\n\ninterface UpdateFieldsConfig {\n schemaPathMap: Record<string, string>\n updatedCollectionConfig: CollectionConfig\n}\n\nexport const updateFieldsConfig = (collectionConfig: CollectionConfig): UpdateFieldsConfig => {\n let schemaPathMap = {}\n function updateField(field: any, parentPath = ''): any {\n const currentPath = parentPath ? `${parentPath}.${field.name}` : field.name\n const currentSchemaPath = `${collectionConfig.slug}.${currentPath}`\n\n if (field.admin?.disabled || field.admin?.readOnly || field.admin?.hidden) {\n return field\n }\n\n // Map field path for global fieldInstructionsMap to load related instructions\n // This is done due to save extra API call to get instructions when Field components are loaded in admin\n // Doing is will only call instructions data when user clicks on settings\n if (['richText', 'text', 'textarea', 'upload'].includes(field.type)) {\n schemaPathMap = {\n ...schemaPathMap,\n [currentSchemaPath]: {\n type: field.type,\n label: field.label || field.name,\n },\n }\n }\n\n // Inject AI actions, richText is not included here as it has to be explicitly defined by user\n if (['text', 'textarea', 'upload'].includes(field.type)) {\n return {\n ...field,\n admin: {\n ...field.admin,\n components: {\n ...(field.admin?.components || {}),\n // @ts-expect-error\n Description: DescriptionField({\n Description: field.admin?.components?.Description,\n }),\n },\n },\n }\n }\n\n if (field.fields) {\n return {\n ...field,\n fields: field.fields.map((subField: any) => updateField(subField, currentPath)),\n }\n }\n\n if (field.tabs) {\n return {\n ...field,\n tabs: field.tabs.map((tab: any) => ({\n ...tab,\n fields: tab.fields.map((subField: any) => updateField(subField, currentPath)),\n })),\n }\n }\n\n if (field.blocks) {\n return {\n ...field,\n blocks: field.blocks.map((block: any) => ({\n ...block,\n fields: block.fields.map((subField: any) =>\n updateField(subField, `${currentPath}.${block.slug}`),\n ),\n })),\n }\n }\n\n return field\n }\n\n const updatedCollectionConfig = {\n ...collectionConfig,\n fields: collectionConfig.fields.map((field) => updateField(field)),\n }\n\n return {\n schemaPathMap,\n updatedCollectionConfig,\n }\n}\n"],"names":["DescriptionField","updateFieldsConfig","collectionConfig","schemaPathMap","updateField","field","parentPath","currentPath","name","currentSchemaPath","slug","admin","disabled","readOnly","hidden","includes","type","label","components","Description","fields","map","subField","tabs","tab","blocks","block","updatedCollectionConfig"],"mappings":"AAEA,SAASA,gBAAgB,QAAQ,iDAAgD;AAOjF,OAAO,MAAMC,qBAAqB,CAACC;IACjC,IAAIC,gBAAgB,CAAC;IACrB,SAASC,YAAYC,KAAU,EAAEC,aAAa,EAAE;QAC9C,MAAMC,cAAcD,aAAa,CAAC,EAAEA,WAAW,CAAC,EAAED,MAAMG,IAAI,CAAC,CAAC,GAAGH,MAAMG,IAAI;QAC3E,MAAMC,oBAAoB,CAAC,EAAEP,iBAAiBQ,IAAI,CAAC,CAAC,EAAEH,YAAY,CAAC;QAEnE,IAAIF,MAAMM,KAAK,EAAEC,YAAYP,MAAMM,KAAK,EAAEE,YAAYR,MAAMM,KAAK,EAAEG,QAAQ;YACzE,OAAOT;QACT;QAEA,8EAA8E;QAC9E,wGAAwG;QACxG,yEAAyE;QACzE,IAAI;YAAC;YAAY;YAAQ;YAAY;SAAS,CAACU,QAAQ,CAACV,MAAMW,IAAI,GAAG;YACnEb,gBAAgB;gBACd,GAAGA,aAAa;gBAChB,CAACM,kBAAkB,EAAE;oBACnBO,MAAMX,MAAMW,IAAI;oBAChBC,OAAOZ,MAAMY,KAAK,IAAIZ,MAAMG,IAAI;gBAClC;YACF;QACF;QAEA,8FAA8F;QAC9F,IAAI;YAAC;YAAQ;YAAY;SAAS,CAACO,QAAQ,CAACV,MAAMW,IAAI,GAAG;YACvD,OAAO;gBACL,GAAGX,KAAK;gBACRM,OAAO;oBACL,GAAGN,MAAMM,KAAK;oBACdO,YAAY;wBACV,GAAIb,MAAMM,KAAK,EAAEO,cAAc,CAAC,CAAC;wBACjC,mBAAmB;wBACnBC,aAAanB,iBAAiB;4BAC5BmB,aAAad,MAAMM,KAAK,EAAEO,YAAYC;wBACxC;oBACF;gBACF;YACF;QACF;QAEA,IAAId,MAAMe,MAAM,EAAE;YAChB,OAAO;gBACL,GAAGf,KAAK;gBACRe,QAAQf,MAAMe,MAAM,CAACC,GAAG,CAAC,CAACC,WAAkBlB,YAAYkB,UAAUf;YACpE;QACF;QAEA,IAAIF,MAAMkB,IAAI,EAAE;YACd,OAAO;gBACL,GAAGlB,KAAK;gBACRkB,MAAMlB,MAAMkB,IAAI,CAACF,GAAG,CAAC,CAACG,MAAc,CAAA;wBAClC,GAAGA,GAAG;wBACNJ,QAAQI,IAAIJ,MAAM,CAACC,GAAG,CAAC,CAACC,WAAkBlB,YAAYkB,UAAUf;oBAClE,CAAA;YACF;QACF;QAEA,IAAIF,MAAMoB,MAAM,EAAE;YAChB,OAAO;gBACL,GAAGpB,KAAK;gBACRoB,QAAQpB,MAAMoB,MAAM,CAACJ,GAAG,CAAC,CAACK,QAAgB,CAAA;wBACxC,GAAGA,KAAK;wBACRN,QAAQM,MAAMN,MAAM,CAACC,GAAG,CAAC,CAACC,WACxBlB,YAAYkB,UAAU,CAAC,EAAEf,YAAY,CAAC,EAAEmB,MAAMhB,IAAI,CAAC,CAAC;oBAExD,CAAA;YACF;QACF;QAEA,OAAOL;IACT;IAEA,MAAMsB,0BAA0B;QAC9B,GAAGzB,gBAAgB;QACnBkB,QAAQlB,iBAAiBkB,MAAM,CAACC,GAAG,CAAC,CAAChB,QAAUD,YAAYC;IAC7D;IAEA,OAAO;QACLF;QACAwB;IACF;AACF,EAAC"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-stack/payloadcms",
|
|
3
|
-
"version": "3.0.0-beta.65.
|
|
3
|
+
"version": "3.0.0-beta.65.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"bugs": "https://github.com/ashbuilds/payload-ai/issues",
|
|
6
6
|
"repository": "https://github.com/ashbuilds/payload-ai",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"author": "ashbuilds",
|
|
9
9
|
"type": "module",
|
|
10
|
-
"main": "dist/index.js",
|
|
11
|
-
"types": "dist/index.d.ts",
|
|
12
|
-
"keywords": [
|
|
10
|
+
"main": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"plugin",
|
|
14
|
+
"text-to-speech",
|
|
15
|
+
"ai",
|
|
16
|
+
"text-generation",
|
|
17
|
+
"text-to-image",
|
|
18
|
+
"content-generation",
|
|
19
|
+
"ai-writing",
|
|
20
|
+
"payloadcms",
|
|
21
|
+
"smart-generation",
|
|
22
|
+
"ai-translate",
|
|
23
|
+
"ai-writing-tool"
|
|
24
|
+
],
|
|
13
25
|
"exports": {
|
|
14
26
|
".": {
|
|
15
27
|
"import": "./dist/index.js",
|
|
@@ -20,16 +32,6 @@
|
|
|
20
32
|
"files": [
|
|
21
33
|
"dist"
|
|
22
34
|
],
|
|
23
|
-
"scripts": {
|
|
24
|
-
"build": "pnpm build:types && pnpm build:swc",
|
|
25
|
-
"build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths --copy-files",
|
|
26
|
-
"build:dev": "pnpm build --watch",
|
|
27
|
-
"build:types": "tsc --emitDeclarationOnly",
|
|
28
|
-
"clean": "rimraf dist && rimraf tsconfig.tsbuildinfo",
|
|
29
|
-
"lint": "eslint src",
|
|
30
|
-
"lint:fix": "eslint --fix src",
|
|
31
|
-
"prepublishOnly": "pnpm clean && pnpm build"
|
|
32
|
-
},
|
|
33
35
|
"dependencies": {
|
|
34
36
|
"@ai-sdk/anthropic": "^0.0.38",
|
|
35
37
|
"@ai-sdk/openai": "^0.0.43",
|
|
@@ -88,15 +90,16 @@
|
|
|
88
90
|
"payload": "3.0.0-beta.65"
|
|
89
91
|
},
|
|
90
92
|
"publishConfig": {
|
|
91
|
-
"
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
"
|
|
93
|
+
"@ai-stack:registry": "https://registry.npmjs.org",
|
|
94
|
+
"access": "public"
|
|
95
|
+
},
|
|
96
|
+
"scripts": {
|
|
97
|
+
"build": "pnpm build:types && pnpm build:swc",
|
|
98
|
+
"build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths --copy-files",
|
|
99
|
+
"build:dev": "pnpm build --watch",
|
|
100
|
+
"build:types": "tsc --emitDeclarationOnly",
|
|
101
|
+
"clean": "rimraf dist && rimraf tsconfig.tsbuildinfo",
|
|
102
|
+
"lint": "eslint src",
|
|
103
|
+
"lint:fix": "eslint --fix src"
|
|
101
104
|
}
|
|
102
|
-
}
|
|
105
|
+
}
|