mcp-grampsweb 1.0.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.
Files changed (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +133 -0
  3. package/dist/auth.d.ts +37 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +119 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/client.d.ts +44 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +153 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/config.d.ts +11 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +32 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/constants.d.ts +24 -0
  16. package/dist/constants.d.ts.map +1 -0
  17. package/dist/constants.js +50 -0
  18. package/dist/constants.js.map +1 -0
  19. package/dist/index.d.ts +9 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +132 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/schemas/common.d.ts +308 -0
  24. package/dist/schemas/common.d.ts.map +1 -0
  25. package/dist/schemas/common.js +120 -0
  26. package/dist/schemas/common.js.map +1 -0
  27. package/dist/schemas/entities.d.ts +1165 -0
  28. package/dist/schemas/entities.d.ts.map +1 -0
  29. package/dist/schemas/entities.js +125 -0
  30. package/dist/schemas/entities.js.map +1 -0
  31. package/dist/schemas/index.d.ts +7 -0
  32. package/dist/schemas/index.d.ts.map +1 -0
  33. package/dist/schemas/index.js +7 -0
  34. package/dist/schemas/index.js.map +1 -0
  35. package/dist/schemas/search.d.ts +47 -0
  36. package/dist/schemas/search.d.ts.map +1 -0
  37. package/dist/schemas/search.js +24 -0
  38. package/dist/schemas/search.js.map +1 -0
  39. package/dist/tools/analysis.d.ts +115 -0
  40. package/dist/tools/analysis.d.ts.map +1 -0
  41. package/dist/tools/analysis.js +387 -0
  42. package/dist/tools/analysis.js.map +1 -0
  43. package/dist/tools/create.d.ts +355 -0
  44. package/dist/tools/create.d.ts.map +1 -0
  45. package/dist/tools/create.js +547 -0
  46. package/dist/tools/create.js.map +1 -0
  47. package/dist/tools/index.d.ts +468 -0
  48. package/dist/tools/index.d.ts.map +1 -0
  49. package/dist/tools/index.js +17 -0
  50. package/dist/tools/index.js.map +1 -0
  51. package/dist/tools/search.d.ts +95 -0
  52. package/dist/tools/search.d.ts.map +1 -0
  53. package/dist/tools/search.js +161 -0
  54. package/dist/tools/search.js.map +1 -0
  55. package/dist/types.d.ts +210 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +5 -0
  58. package/dist/types.js.map +1 -0
  59. package/dist/utils/errors.d.ts +19 -0
  60. package/dist/utils/errors.d.ts.map +1 -0
  61. package/dist/utils/errors.js +48 -0
  62. package/dist/utils/errors.js.map +1 -0
  63. package/dist/utils/formatting.d.ts +60 -0
  64. package/dist/utils/formatting.d.ts.map +1 -0
  65. package/dist/utils/formatting.js +256 -0
  66. package/dist/utils/formatting.js.map +1 -0
  67. package/package.json +48 -0
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Search and retrieval tools
3
+ */
4
+ import { grampsClient } from "../client.js";
5
+ import { API_ENDPOINTS, ENTITY_ENDPOINT_MAP } from "../constants.js";
6
+ import { searchSchema, findSchema, getEntitySchema } from "../schemas/search.js";
7
+ import { formatSearchResults, formatEntity } from "../utils/formatting.js";
8
+ /**
9
+ * GQL-based search for entities
10
+ */
11
+ export async function grampsSearch(params) {
12
+ const { query, entity_type, page, pagesize } = searchSchema.parse(params);
13
+ const endpoint = ENTITY_ENDPOINT_MAP[entity_type];
14
+ if (!endpoint) {
15
+ throw new Error(`Unknown entity type: ${entity_type}`);
16
+ }
17
+ const response = await grampsClient.get(endpoint, {
18
+ gramps: query,
19
+ page,
20
+ pagesize,
21
+ });
22
+ // Format response
23
+ if (!response || (Array.isArray(response) && response.length === 0)) {
24
+ return `No ${entity_type} found matching query: ${query}`;
25
+ }
26
+ const results = (Array.isArray(response) ? response : [response]).map((obj) => ({
27
+ object_type: entity_type,
28
+ object: obj,
29
+ }));
30
+ return formatSearchResults(results);
31
+ }
32
+ /**
33
+ * Full-text search across all entities
34
+ */
35
+ export async function grampsFind(params) {
36
+ const { query, page, pagesize } = findSchema.parse(params);
37
+ const response = await grampsClient.get(API_ENDPOINTS.SEARCH, {
38
+ query,
39
+ page,
40
+ pagesize,
41
+ });
42
+ if (!response.data || response.data.length === 0) {
43
+ return `No results found for: ${query}`;
44
+ }
45
+ let result = formatSearchResults(response.data);
46
+ if (response.total_count !== undefined) {
47
+ result += `\n\nTotal results: ${response.total_count}`;
48
+ }
49
+ return result;
50
+ }
51
+ /**
52
+ * Get a specific entity by handle or ID
53
+ */
54
+ export async function grampsGet(params) {
55
+ const { entity_type, handle } = getEntitySchema.parse(params);
56
+ const endpoint = ENTITY_ENDPOINT_MAP[entity_type];
57
+ if (!endpoint) {
58
+ throw new Error(`Unknown entity type: ${entity_type}`);
59
+ }
60
+ // Try to get by handle first
61
+ try {
62
+ const response = await grampsClient.get(`${endpoint}${handle}`);
63
+ return formatEntity(response, entity_type);
64
+ }
65
+ catch (error) {
66
+ // If not found by handle, try searching by gramps_id
67
+ if (error instanceof Error && error.message.includes("404")) {
68
+ const searchResponse = await grampsClient.get(endpoint, {
69
+ gramps: `gramps_id=${handle}`,
70
+ });
71
+ if (searchResponse && searchResponse.length > 0) {
72
+ return formatEntity(searchResponse[0], entity_type);
73
+ }
74
+ }
75
+ throw error;
76
+ }
77
+ }
78
+ // Tool definitions for MCP
79
+ export const searchTools = {
80
+ gramps_search: {
81
+ name: "gramps_search",
82
+ description: "Search for Gramps entities using GQL (Gramps Query Language). " +
83
+ "Examples: 'surname=Smith', 'gender=M', 'birth.date.year>1900'. " +
84
+ "Use for structured queries on specific entity types.",
85
+ inputSchema: {
86
+ type: "object",
87
+ properties: {
88
+ query: {
89
+ type: "string",
90
+ description: "GQL query string (e.g., 'surname=Smith', 'gender=M')",
91
+ },
92
+ entity_type: {
93
+ type: "string",
94
+ enum: ["people", "families", "events", "places", "sources", "citations", "repositories", "media", "notes"],
95
+ description: "Type of entity to search",
96
+ },
97
+ page: {
98
+ type: "number",
99
+ description: "Page number (1-indexed)",
100
+ default: 1,
101
+ },
102
+ pagesize: {
103
+ type: "number",
104
+ description: "Results per page (max 100)",
105
+ default: 20,
106
+ },
107
+ },
108
+ required: ["query", "entity_type"],
109
+ },
110
+ handler: grampsSearch,
111
+ },
112
+ gramps_find: {
113
+ name: "gramps_find",
114
+ description: "Full-text search across all Gramps records. " +
115
+ "Use for finding people, places, sources, etc. by name or keyword. " +
116
+ "Returns results from all entity types.",
117
+ inputSchema: {
118
+ type: "object",
119
+ properties: {
120
+ query: {
121
+ type: "string",
122
+ description: "Full-text search query",
123
+ },
124
+ page: {
125
+ type: "number",
126
+ description: "Page number (1-indexed)",
127
+ default: 1,
128
+ },
129
+ pagesize: {
130
+ type: "number",
131
+ description: "Results per page (max 100)",
132
+ default: 20,
133
+ },
134
+ },
135
+ required: ["query"],
136
+ },
137
+ handler: grampsFind,
138
+ },
139
+ gramps_get: {
140
+ name: "gramps_get",
141
+ description: "Get full details of a specific Gramps entity by its handle or Gramps ID. " +
142
+ "Use after finding an entity with search to get complete information.",
143
+ inputSchema: {
144
+ type: "object",
145
+ properties: {
146
+ entity_type: {
147
+ type: "string",
148
+ enum: ["people", "families", "events", "places", "sources", "citations", "repositories", "media", "notes"],
149
+ description: "Type of entity to retrieve",
150
+ },
151
+ handle: {
152
+ type: "string",
153
+ description: "Entity handle or Gramps ID",
154
+ },
155
+ },
156
+ required: ["entity_type", "handle"],
157
+ },
158
+ handler: grampsGet,
159
+ },
160
+ };
161
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Gramps Web API TypeScript interfaces
3
+ */
4
+ export type EntityType = "people" | "families" | "events" | "places" | "sources" | "citations" | "repositories" | "media" | "notes";
5
+ export interface TokenResponse {
6
+ access_token: string;
7
+ token_type: string;
8
+ }
9
+ export interface JWTPayload {
10
+ exp: number;
11
+ sub?: string;
12
+ [key: string]: unknown;
13
+ }
14
+ export interface GrampsEntity {
15
+ handle: string;
16
+ gramps_id: string;
17
+ change?: number;
18
+ private?: boolean;
19
+ }
20
+ export interface PersonName {
21
+ first_name?: string;
22
+ surname?: string;
23
+ suffix?: string;
24
+ title?: string;
25
+ type?: string;
26
+ primary?: boolean;
27
+ _class?: string;
28
+ }
29
+ export interface Person extends GrampsEntity {
30
+ primary_name?: PersonName;
31
+ alternate_names?: PersonName[];
32
+ gender?: number;
33
+ birth_ref_index?: number;
34
+ death_ref_index?: number;
35
+ event_ref_list?: EventRef[];
36
+ family_list?: string[];
37
+ parent_family_list?: string[];
38
+ media_list?: MediaRef[];
39
+ citation_list?: string[];
40
+ note_list?: string[];
41
+ attribute_list?: Attribute[];
42
+ tag_list?: string[];
43
+ }
44
+ export interface Family extends GrampsEntity {
45
+ father_handle?: string;
46
+ mother_handle?: string;
47
+ child_ref_list?: ChildRef[];
48
+ type?: string;
49
+ event_ref_list?: EventRef[];
50
+ media_list?: MediaRef[];
51
+ citation_list?: string[];
52
+ note_list?: string[];
53
+ attribute_list?: Attribute[];
54
+ tag_list?: string[];
55
+ }
56
+ export interface Event extends GrampsEntity {
57
+ type?: string;
58
+ date?: DateObject;
59
+ place?: string;
60
+ description?: string;
61
+ media_list?: MediaRef[];
62
+ citation_list?: string[];
63
+ note_list?: string[];
64
+ attribute_list?: Attribute[];
65
+ tag_list?: string[];
66
+ }
67
+ export interface Place extends GrampsEntity {
68
+ title?: string;
69
+ name?: PlaceName;
70
+ alt_names?: PlaceName[];
71
+ lat?: string;
72
+ long?: string;
73
+ placeref_list?: PlaceRef[];
74
+ place_type?: string;
75
+ media_list?: MediaRef[];
76
+ citation_list?: string[];
77
+ note_list?: string[];
78
+ tag_list?: string[];
79
+ }
80
+ export interface Source extends GrampsEntity {
81
+ title?: string;
82
+ author?: string;
83
+ pubinfo?: string;
84
+ abbrev?: string;
85
+ reporef_list?: RepoRef[];
86
+ media_list?: MediaRef[];
87
+ note_list?: string[];
88
+ tag_list?: string[];
89
+ }
90
+ export interface Citation extends GrampsEntity {
91
+ source_handle?: string;
92
+ page?: string;
93
+ confidence?: number;
94
+ date?: DateObject;
95
+ media_list?: MediaRef[];
96
+ note_list?: string[];
97
+ tag_list?: string[];
98
+ }
99
+ export interface Repository extends GrampsEntity {
100
+ name?: string;
101
+ type?: string;
102
+ address_list?: Address[];
103
+ urls?: Url[];
104
+ note_list?: string[];
105
+ tag_list?: string[];
106
+ }
107
+ export interface Media extends GrampsEntity {
108
+ path?: string;
109
+ mime?: string;
110
+ desc?: string;
111
+ checksum?: string;
112
+ date?: DateObject;
113
+ citation_list?: string[];
114
+ note_list?: string[];
115
+ attribute_list?: Attribute[];
116
+ tag_list?: string[];
117
+ }
118
+ export interface Note extends GrampsEntity {
119
+ text?: string;
120
+ format?: number;
121
+ type?: string;
122
+ tag_list?: string[];
123
+ }
124
+ export interface DateObject {
125
+ _class?: string;
126
+ calendar?: number;
127
+ modifier?: number;
128
+ quality?: number;
129
+ dateval?: number[];
130
+ text?: string;
131
+ sortval?: number;
132
+ newyear?: number;
133
+ }
134
+ export interface EventRef {
135
+ ref?: string;
136
+ role?: string;
137
+ _class?: string;
138
+ }
139
+ export interface ChildRef {
140
+ ref?: string;
141
+ frel?: string;
142
+ mrel?: string;
143
+ _class?: string;
144
+ }
145
+ export interface MediaRef {
146
+ ref?: string;
147
+ rect?: number[];
148
+ _class?: string;
149
+ }
150
+ export interface PlaceName {
151
+ value?: string;
152
+ date?: DateObject;
153
+ lang?: string;
154
+ _class?: string;
155
+ }
156
+ export interface PlaceRef {
157
+ ref?: string;
158
+ date?: DateObject;
159
+ _class?: string;
160
+ }
161
+ export interface RepoRef {
162
+ ref?: string;
163
+ call_number?: string;
164
+ media_type?: string;
165
+ _class?: string;
166
+ }
167
+ export interface Attribute {
168
+ type?: string;
169
+ value?: string;
170
+ _class?: string;
171
+ }
172
+ export interface Address {
173
+ street?: string;
174
+ locality?: string;
175
+ city?: string;
176
+ county?: string;
177
+ state?: string;
178
+ country?: string;
179
+ postal?: string;
180
+ phone?: string;
181
+ _class?: string;
182
+ }
183
+ export interface Url {
184
+ path?: string;
185
+ type?: string;
186
+ desc?: string;
187
+ _class?: string;
188
+ }
189
+ export interface SearchResult {
190
+ handle: string;
191
+ gramps_id: string;
192
+ object_type: string;
193
+ object: GrampsEntity;
194
+ }
195
+ export interface TreeStats {
196
+ people: number;
197
+ families: number;
198
+ events: number;
199
+ places: number;
200
+ sources: number;
201
+ citations: number;
202
+ repositories: number;
203
+ media: number;
204
+ notes: number;
205
+ }
206
+ export interface APIErrorResponse {
207
+ detail?: string;
208
+ message?: string;
209
+ }
210
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Gramps Web API TypeScript interfaces
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Error handling utilities
3
+ */
4
+ export declare class GrampsAPIError extends Error {
5
+ readonly statusCode?: number | undefined;
6
+ readonly endpoint?: string | undefined;
7
+ constructor(message: string, statusCode?: number | undefined, endpoint?: string | undefined);
8
+ }
9
+ export declare class AuthenticationError extends GrampsAPIError {
10
+ constructor(message?: string);
11
+ }
12
+ export declare class NotFoundError extends GrampsAPIError {
13
+ constructor(entityType: string, identifier: string);
14
+ }
15
+ export declare class ValidationError extends Error {
16
+ constructor(message: string);
17
+ }
18
+ export declare function formatErrorForMCP(error: unknown): string;
19
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,cAAe,SAAQ,KAAK;aAGrB,UAAU,CAAC,EAAE,MAAM;aACnB,QAAQ,CAAC,EAAE,MAAM;gBAFjC,OAAO,EAAE,MAAM,EACC,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,QAAQ,CAAC,EAAE,MAAM,YAAA;CAKpC;AAED,qBAAa,mBAAoB,SAAQ,cAAc;gBACzC,OAAO,GAAE,MAAgC;CAItD;AAED,qBAAa,aAAc,SAAQ,cAAc;gBACnC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAInD;AAED,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAiBxD"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Error handling utilities
3
+ */
4
+ export class GrampsAPIError extends Error {
5
+ statusCode;
6
+ endpoint;
7
+ constructor(message, statusCode, endpoint) {
8
+ super(message);
9
+ this.statusCode = statusCode;
10
+ this.endpoint = endpoint;
11
+ this.name = "GrampsAPIError";
12
+ }
13
+ }
14
+ export class AuthenticationError extends GrampsAPIError {
15
+ constructor(message = "Authentication failed") {
16
+ super(message, 401);
17
+ this.name = "AuthenticationError";
18
+ }
19
+ }
20
+ export class NotFoundError extends GrampsAPIError {
21
+ constructor(entityType, identifier) {
22
+ super(`${entityType} not found: ${identifier}`, 404);
23
+ this.name = "NotFoundError";
24
+ }
25
+ }
26
+ export class ValidationError extends Error {
27
+ constructor(message) {
28
+ super(message);
29
+ this.name = "ValidationError";
30
+ }
31
+ }
32
+ export function formatErrorForMCP(error) {
33
+ if (error instanceof GrampsAPIError) {
34
+ let message = error.message;
35
+ if (error.statusCode) {
36
+ message = `[${error.statusCode}] ${message}`;
37
+ }
38
+ if (error.endpoint) {
39
+ message = `${message} (endpoint: ${error.endpoint})`;
40
+ }
41
+ return message;
42
+ }
43
+ if (error instanceof Error) {
44
+ return error.message;
45
+ }
46
+ return String(error);
47
+ }
48
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,OAAO,cAAe,SAAQ,KAAK;IAGrB;IACA;IAHlB,YACE,OAAe,EACC,UAAmB,EACnB,QAAiB;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,eAAU,GAAV,UAAU,CAAS;QACnB,aAAQ,GAAR,QAAQ,CAAS;QAGjC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,cAAc;IACrD,YAAY,UAAkB,uBAAuB;QACnD,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,cAAc;IAC/C,YAAY,UAAkB,EAAE,UAAkB;QAChD,KAAK,CAAC,GAAG,UAAU,eAAe,UAAU,EAAE,EAAE,GAAG,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACpC,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC5B,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,GAAG,IAAI,KAAK,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;QAC/C,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,GAAG,GAAG,OAAO,eAAe,KAAK,CAAC,QAAQ,GAAG,CAAC;QACvD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Response formatting utilities
3
+ */
4
+ import type { Person, Family, Event, Place, Source, Citation, Note, Media, Repository, PersonName, DateObject, GrampsEntity } from "../types.js";
5
+ /**
6
+ * Format a person name for display
7
+ */
8
+ export declare function formatPersonName(name?: PersonName): string;
9
+ /**
10
+ * Format a date object for display
11
+ */
12
+ export declare function formatDate(date?: DateObject): string;
13
+ /**
14
+ * Format a person entity for display
15
+ */
16
+ export declare function formatPerson(person: Person): string;
17
+ /**
18
+ * Format a family entity for display
19
+ */
20
+ export declare function formatFamily(family: Family): string;
21
+ /**
22
+ * Format an event entity for display
23
+ */
24
+ export declare function formatEvent(event: Event): string;
25
+ /**
26
+ * Format a place entity for display
27
+ */
28
+ export declare function formatPlace(place: Place): string;
29
+ /**
30
+ * Format a source entity for display
31
+ */
32
+ export declare function formatSource(source: Source): string;
33
+ /**
34
+ * Format a citation entity for display
35
+ */
36
+ export declare function formatCitation(citation: Citation): string;
37
+ /**
38
+ * Format a note entity for display
39
+ */
40
+ export declare function formatNote(note: Note): string;
41
+ /**
42
+ * Format a media entity for display
43
+ */
44
+ export declare function formatMedia(media: Media): string;
45
+ /**
46
+ * Format a repository entity for display
47
+ */
48
+ export declare function formatRepository(repo: Repository): string;
49
+ /**
50
+ * Format any entity based on its type
51
+ */
52
+ export declare function formatEntity(entity: GrampsEntity, type: string): string;
53
+ /**
54
+ * Format search results for display
55
+ */
56
+ export declare function formatSearchResults(results: Array<{
57
+ object_type: string;
58
+ object: GrampsEntity;
59
+ }>): string;
60
+ //# sourceMappingURL=formatting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,MAAM,EACN,KAAK,EACL,KAAK,EACL,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,UAAU,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACb,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,MAAM,CAW1D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,MAAM,CAiBpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAuBnD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAoBnD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAqBhD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAiBhD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAgBnD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CA4BzD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAiB7C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAgBhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAYzD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CA+BvE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,KAAK,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC,GAC5D,MAAM,CAaR"}