Selaa lähdekoodia

Merge pull request #12974 from holmlund/fix/prompts-international

fix: improve international character handling in prompt commands
Tim Jaeryang Baek 3 kuukautta sitten
vanhempi
commit
6101067ea4
2 muutettua tiedostoa jossa 26 lisäystä ja 3 poistoa
  1. 12 3
      src/lib/components/workspace/Prompts/PromptEditor.svelte
  2. 14 0
      src/lib/utils/index.ts

+ 12 - 3
src/lib/components/workspace/Prompts/PromptEditor.svelte

@@ -8,6 +8,7 @@
 	import LockClosed from '$lib/components/icons/LockClosed.svelte';
 	import AccessControlModal from '../common/AccessControlModal.svelte';
 	import { user } from '$lib/stores';
+	import { slugify } from '$lib/utils';
 
 	export let onSubmit: Function;
 	export let edit = false;
@@ -25,8 +26,15 @@
 
 	let showAccessControlModal = false;
 
-	$: if (!edit) {
-		command = title !== '' ? `${title.replace(/\s+/g, '-').toLowerCase()}` : '';
+	let hasManualEdit = false;
+
+	$: if (!edit && !hasManualEdit) {
+		command = title !== '' ? slugify(title) : '';
+	}
+
+	// Track manual edits
+	function handleCommandInput(e: Event) {
+		hasManualEdit = true;
 	}
 
 	const submitHandler = async () => {
@@ -64,7 +72,7 @@
 			command = prompt.command.at(0) === '/' ? prompt.command.slice(1) : prompt.command;
 			content = prompt.content;
 
-			accessControl = prompt?.access_control ?? null;
+			accessControl = prompt?.access_control ?? {};
 		}
 	});
 </script>
@@ -125,6 +133,7 @@
 							class=" w-full bg-transparent outline-hidden"
 							placeholder={$i18n.t('Command')}
 							bind:value={command}
+							on:input={handleCommandInput}
 							required
 							disabled={edit}
 						/>

+ 14 - 0
src/lib/utils/index.ts

@@ -1302,3 +1302,17 @@ export const convertOpenApiToToolPayload = (openApiSpec) => {
 
 	return toolPayload;
 };
+
+export const slugify = (str: string): string => {
+	return str
+		// 1. Normalize: separate accented letters into base + combining marks
+		.normalize("NFD")
+		// 2. Remove all combining marks (the accents)
+		.replace(/[\u0300-\u036f]/g, "")
+		// 3. Replace any sequence of whitespace with a single hyphen
+		.replace(/\s+/g, "-")
+		// 4. Remove all characters except alphanumeric characters and hyphens
+		.replace(/[^a-zA-Z0-9-]/g, "")
+		// 5. Convert to lowercase
+		.toLowerCase();
+};