diff --git a/src/services/airtable-field-mapper.ts b/src/services/airtable-field-mapper.ts index 18bd6c8..593d6b5 100644 --- a/src/services/airtable-field-mapper.ts +++ b/src/services/airtable-field-mapper.ts @@ -16,10 +16,10 @@ import type { FieldTypeMapper, StandardFieldType } from '../types'; // value is server-computed) but still safe to use as a filename source // because the computed value is stable and typically text-like. const FILENAME_SAFE_TYPES = [ + 'formula', + 'number', 'singleLineText', 'singleSelect', - 'number', - 'formula', ] as const; const READ_ONLY_TYPES = [ diff --git a/src/services/seatable-field-mapper.ts b/src/services/seatable-field-mapper.ts index 6e8b2e7..506e74f 100644 --- a/src/services/seatable-field-mapper.ts +++ b/src/services/seatable-field-mapper.ts @@ -18,11 +18,11 @@ import type { FieldTypeMapper, StandardFieldType } from '../types'; // `formula` appear here AND in READ_ONLY_TYPES below: they're great // stable identifiers but the sync pipeline must not push to them. const FILENAME_SAFE_TYPES = [ - 'text', - 'single-select', - 'number', 'auto-number', 'formula', + 'number', + 'single-select', + 'text', ] as const; const READ_ONLY_TYPES = [ diff --git a/src/types/field-types.types.ts b/src/types/field-types.types.ts index 2bcc3ae..5e36723 100644 --- a/src/types/field-types.types.ts +++ b/src/types/field-types.types.ts @@ -83,14 +83,16 @@ export interface FieldTypeMapper { isSubfolderSafe(providerType: string): boolean; /** - * Returns all known provider-specific types that pass `isFilenameSafe`. - * Enables UIs to enumerate the whitelist without guessing. + * Returns all known provider-specific types that pass `isFilenameSafe`, + * sorted and deduplicated. Enables UIs to enumerate the whitelist without + * guessing. */ getFilenameSafeTypes(): readonly string[]; /** - * Returns all known provider-specific types that pass `isSubfolderSafe`. - * Used by settings-tab to filter the subfolder field dropdown. + * Returns all known provider-specific types that pass `isSubfolderSafe`, + * sorted and deduplicated. Used by settings-tab to filter the subfolder + * field dropdown. */ getSubfolderSafeTypes(): readonly string[]; diff --git a/tests/services/airtable-field-mapper.test.ts b/tests/services/airtable-field-mapper.test.ts index f8de47f..9bdab4f 100644 --- a/tests/services/airtable-field-mapper.test.ts +++ b/tests/services/airtable-field-mapper.test.ts @@ -294,10 +294,10 @@ describe('airtableFieldMapper', () => { it('should return exactly the 4 filename-safe types', () => { const types = airtableFieldMapper.getFilenameSafeTypes(); expect(types).toEqual([ + 'formula', + 'number', 'singleLineText', 'singleSelect', - 'number', - 'formula', ]); }); diff --git a/tests/services/seatable-field-mapper.test.ts b/tests/services/seatable-field-mapper.test.ts index 50e4b21..9897f6c 100644 --- a/tests/services/seatable-field-mapper.test.ts +++ b/tests/services/seatable-field-mapper.test.ts @@ -252,11 +252,11 @@ describe('seatableFieldMapper', () => { it('should return exactly the 5 filename-safe types', () => { const types = seatableFieldMapper.getFilenameSafeTypes(); expect(types).toEqual([ - 'text', - 'single-select', - 'number', 'auto-number', 'formula', + 'number', + 'single-select', + 'text', ]); });