@aaronsb/google-workspace-mcp 2.7.1 → 3.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 (142) hide show
  1. package/README.md +21 -10
  2. package/build/factory/generator.d.ts +0 -2
  3. package/build/factory/generator.js +32 -27
  4. package/build/factory/generator.js.map +1 -1
  5. package/build/factory/manifest/gmail.yaml +24 -2
  6. package/build/factory/registry.d.ts +2 -3
  7. package/build/factory/registry.js +3 -9
  8. package/build/factory/registry.js.map +1 -1
  9. package/build/index.js +27 -1
  10. package/build/index.js.map +1 -1
  11. package/build/node-floor.d.ts +16 -0
  12. package/build/node-floor.js +73 -0
  13. package/build/node-floor.js.map +1 -0
  14. package/build/services/gmail/patch.js +67 -3
  15. package/build/services/gmail/patch.js.map +1 -1
  16. package/build/version.d.ts +1 -1
  17. package/build/version.js +2 -2
  18. package/build/version.js.map +1 -1
  19. package/package.json +16 -10
  20. package/build/__helpers__/testSetup.d.ts +0 -1
  21. package/build/__helpers__/testSetup.js +0 -6
  22. package/build/__helpers__/testSetup.js.map +0 -1
  23. package/build/__tests__/accounts/credentials.test.d.ts +0 -1
  24. package/build/__tests__/accounts/credentials.test.js +0 -127
  25. package/build/__tests__/accounts/credentials.test.js.map +0 -1
  26. package/build/__tests__/accounts/oauth.test.d.ts +0 -1
  27. package/build/__tests__/accounts/oauth.test.js +0 -71
  28. package/build/__tests__/accounts/oauth.test.js.map +0 -1
  29. package/build/__tests__/accounts/registry.test.d.ts +0 -1
  30. package/build/__tests__/accounts/registry.test.js +0 -74
  31. package/build/__tests__/accounts/registry.test.js.map +0 -1
  32. package/build/__tests__/accounts/token-service.test.d.ts +0 -1
  33. package/build/__tests__/accounts/token-service.test.js +0 -126
  34. package/build/__tests__/accounts/token-service.test.js.map +0 -1
  35. package/build/__tests__/executor/errors.test.d.ts +0 -1
  36. package/build/__tests__/executor/errors.test.js +0 -42
  37. package/build/__tests__/executor/errors.test.js.map +0 -1
  38. package/build/__tests__/executor/gws.test.d.ts +0 -1
  39. package/build/__tests__/executor/gws.test.js +0 -187
  40. package/build/__tests__/executor/gws.test.js.map +0 -1
  41. package/build/__tests__/executor/paths.test.d.ts +0 -1
  42. package/build/__tests__/executor/paths.test.js +0 -60
  43. package/build/__tests__/executor/paths.test.js.map +0 -1
  44. package/build/__tests__/executor/resolve-binary.test.d.ts +0 -1
  45. package/build/__tests__/executor/resolve-binary.test.js +0 -58
  46. package/build/__tests__/executor/resolve-binary.test.js.map +0 -1
  47. package/build/__tests__/executor/workspace.test.d.ts +0 -1
  48. package/build/__tests__/executor/workspace.test.js +0 -143
  49. package/build/__tests__/executor/workspace.test.js.map +0 -1
  50. package/build/__tests__/factory/calendar-patch.test.d.ts +0 -5
  51. package/build/__tests__/factory/calendar-patch.test.js +0 -269
  52. package/build/__tests__/factory/calendar-patch.test.js.map +0 -1
  53. package/build/__tests__/factory/drive-patch.test.d.ts +0 -5
  54. package/build/__tests__/factory/drive-patch.test.js +0 -344
  55. package/build/__tests__/factory/drive-patch.test.js.map +0 -1
  56. package/build/__tests__/factory/generator.test.d.ts +0 -1
  57. package/build/__tests__/factory/generator.test.js +0 -240
  58. package/build/__tests__/factory/generator.test.js.map +0 -1
  59. package/build/__tests__/factory/patch-coverage.test.d.ts +0 -10
  60. package/build/__tests__/factory/patch-coverage.test.js +0 -182
  61. package/build/__tests__/factory/patch-coverage.test.js.map +0 -1
  62. package/build/__tests__/factory/safety.test.d.ts +0 -1
  63. package/build/__tests__/factory/safety.test.js +0 -107
  64. package/build/__tests__/factory/safety.test.js.map +0 -1
  65. package/build/__tests__/factory/sheets-patch.test.d.ts +0 -6
  66. package/build/__tests__/factory/sheets-patch.test.js +0 -498
  67. package/build/__tests__/factory/sheets-patch.test.js.map +0 -1
  68. package/build/__tests__/integration/executor.test.d.ts +0 -5
  69. package/build/__tests__/integration/executor.test.js +0 -38
  70. package/build/__tests__/integration/executor.test.js.map +0 -1
  71. package/build/__tests__/integration/handlers.test.d.ts +0 -6
  72. package/build/__tests__/integration/handlers.test.js +0 -95
  73. package/build/__tests__/integration/handlers.test.js.map +0 -1
  74. package/build/__tests__/integration/setup.d.ts +0 -19
  75. package/build/__tests__/integration/setup.js +0 -61
  76. package/build/__tests__/integration/setup.js.map +0 -1
  77. package/build/__tests__/server/formatting/html-sanitize.test.d.ts +0 -7
  78. package/build/__tests__/server/formatting/html-sanitize.test.js +0 -174
  79. package/build/__tests__/server/formatting/html-sanitize.test.js.map +0 -1
  80. package/build/__tests__/server/formatting/markdown.test.d.ts +0 -1
  81. package/build/__tests__/server/formatting/markdown.test.js +0 -259
  82. package/build/__tests__/server/formatting/markdown.test.js.map +0 -1
  83. package/build/__tests__/server/formatting/next-steps.test.d.ts +0 -1
  84. package/build/__tests__/server/formatting/next-steps.test.js +0 -42
  85. package/build/__tests__/server/formatting/next-steps.test.js.map +0 -1
  86. package/build/__tests__/server/handler.test.d.ts +0 -1
  87. package/build/__tests__/server/handler.test.js +0 -97
  88. package/build/__tests__/server/handler.test.js.map +0 -1
  89. package/build/__tests__/server/handlers/__mocks__/executor.d.ts +0 -173
  90. package/build/__tests__/server/handlers/__mocks__/executor.js +0 -135
  91. package/build/__tests__/server/handlers/__mocks__/executor.js.map +0 -1
  92. package/build/__tests__/server/handlers/accounts.test.d.ts +0 -1
  93. package/build/__tests__/server/handlers/accounts.test.js +0 -129
  94. package/build/__tests__/server/handlers/accounts.test.js.map +0 -1
  95. package/build/__tests__/server/handlers/calendar.test.d.ts +0 -1
  96. package/build/__tests__/server/handlers/calendar.test.js +0 -96
  97. package/build/__tests__/server/handlers/calendar.test.js.map +0 -1
  98. package/build/__tests__/server/handlers/drive.test.d.ts +0 -1
  99. package/build/__tests__/server/handlers/drive.test.js +0 -68
  100. package/build/__tests__/server/handlers/drive.test.js.map +0 -1
  101. package/build/__tests__/server/handlers/email.test.d.ts +0 -1
  102. package/build/__tests__/server/handlers/email.test.js +0 -99
  103. package/build/__tests__/server/handlers/email.test.js.map +0 -1
  104. package/build/__tests__/server/handlers/validate.test.d.ts +0 -1
  105. package/build/__tests__/server/handlers/validate.test.js +0 -88
  106. package/build/__tests__/server/handlers/validate.test.js.map +0 -1
  107. package/build/__tests__/server/queue.test.d.ts +0 -1
  108. package/build/__tests__/server/queue.test.js +0 -199
  109. package/build/__tests__/server/queue.test.js.map +0 -1
  110. package/build/__tests__/server/server.test.d.ts +0 -7
  111. package/build/__tests__/server/server.test.js +0 -135
  112. package/build/__tests__/server/server.test.js.map +0 -1
  113. package/build/__tests__/server/session/context.test.d.ts +0 -1
  114. package/build/__tests__/server/session/context.test.js +0 -101
  115. package/build/__tests__/server/session/context.test.js.map +0 -1
  116. package/build/__tests__/server/session/tracker.test.d.ts +0 -1
  117. package/build/__tests__/server/session/tracker.test.js +0 -146
  118. package/build/__tests__/server/session/tracker.test.js.map +0 -1
  119. package/build/__tests__/server/tools.test.d.ts +0 -1
  120. package/build/__tests__/server/tools.test.js +0 -91
  121. package/build/__tests__/server/tools.test.js.map +0 -1
  122. package/build/__tests__/services/gmail/mime.test.d.ts +0 -1
  123. package/build/__tests__/services/gmail/mime.test.js +0 -23
  124. package/build/__tests__/services/gmail/mime.test.js.map +0 -1
  125. package/build/__tests__/services/meet/patch.test.d.ts +0 -4
  126. package/build/__tests__/services/meet/patch.test.js +0 -374
  127. package/build/__tests__/services/meet/patch.test.js.map +0 -1
  128. package/build/server/scratchpad/__tests__/docs-sync-integration.test.d.ts +0 -11
  129. package/build/server/scratchpad/__tests__/docs-sync-integration.test.js +0 -187
  130. package/build/server/scratchpad/__tests__/docs-sync-integration.test.js.map +0 -1
  131. package/build/server/scratchpad/__tests__/docs-sync.test.d.ts +0 -16
  132. package/build/server/scratchpad/__tests__/docs-sync.test.js +0 -213
  133. package/build/server/scratchpad/__tests__/docs-sync.test.js.map +0 -1
  134. package/build/server/scratchpad/__tests__/json-path.test.d.ts +0 -4
  135. package/build/server/scratchpad/__tests__/json-path.test.js +0 -121
  136. package/build/server/scratchpad/__tests__/json-path.test.js.map +0 -1
  137. package/build/server/scratchpad/__tests__/manager.test.d.ts +0 -5
  138. package/build/server/scratchpad/__tests__/manager.test.js +0 -886
  139. package/build/server/scratchpad/__tests__/manager.test.js.map +0 -1
  140. package/build/server/scratchpad/__tests__/validate.test.d.ts +0 -4
  141. package/build/server/scratchpad/__tests__/validate.test.js +0 -112
  142. package/build/server/scratchpad/__tests__/validate.test.js.map +0 -1
@@ -1,213 +0,0 @@
1
- /**
2
- * Tests for docs-sync — translating a scratchpad JSON-mode mutation into
3
- * a Docs batchUpdate request. Pure translator; no API calls (mocked or
4
- * otherwise) in this file. See issue #79.
5
- */
6
- import { translateMutation, isRejection } from '../docs-sync.js';
7
- /** Minimal Docs-API-shaped JSON with one body content element. */
8
- function docWith(element, revisionId = 'rev-1') {
9
- return JSON.stringify({
10
- documentId: 'doc-1',
11
- revisionId,
12
- body: { content: [element] },
13
- });
14
- }
15
- /** Helper — a textRun element. content/startIndex/endIndex configurable. */
16
- function textRunElement(content, startIndex) {
17
- return {
18
- startIndex,
19
- endIndex: startIndex + content.length,
20
- paragraph: {
21
- elements: [
22
- { startIndex, endIndex: startIndex + content.length, textRun: { content } },
23
- ],
24
- paragraphStyle: { namedStyleType: 'NORMAL_TEXT' },
25
- },
26
- };
27
- }
28
- const TEXT_PATH = '$.body.content[0].paragraph.elements[0].textRun.content';
29
- const STYLE_PATH = '$.body.content[0].paragraph.paragraphStyle.namedStyleType';
30
- describe('translateMutation — textRun.content path', () => {
31
- it('builds deleteContentRange(start, end-1) + insertText when old content ends with \\n', () => {
32
- // Trailing newline is the paragraph break — must not delete through it,
33
- // or the paragraph itself disappears.
34
- const beforeJson = docWith(textRunElement('Hello world\n', 1)); // endIndex = 13
35
- const result = translateMutation({ op: 'set', path: TEXT_PATH, value: 'Goodbye', beforeJson }, 'rev-1');
36
- if (isRejection(result))
37
- throw new Error(`unexpected rejection: ${result.reason}`);
38
- expect(result.body.requests).toEqual([
39
- { deleteContentRange: { range: { startIndex: 1, endIndex: 12 } } }, // end - 1 = 13 - 1
40
- { insertText: { text: 'Goodbye', location: { index: 1 } } },
41
- ]);
42
- expect(result.body.writeControl).toEqual({ requiredRevisionId: 'rev-1' });
43
- });
44
- it('builds deleteContentRange(start, end) when old content has no trailing newline', () => {
45
- const beforeJson = docWith(textRunElement('inline', 5)); // endIndex = 11, no trailing \n
46
- const result = translateMutation({ op: 'set', path: TEXT_PATH, value: 'inlined', beforeJson }, 'rev-1');
47
- if (isRejection(result))
48
- throw new Error(`unexpected rejection: ${result.reason}`);
49
- expect(result.body.requests).toEqual([
50
- { deleteContentRange: { range: { startIndex: 5, endIndex: 11 } } },
51
- { insertText: { text: 'inlined', location: { index: 5 } } },
52
- ]);
53
- });
54
- it('omits deleteContentRange when the run is just a paragraph-break newline', () => {
55
- // oldContent='\n' → deleteEnd = endIndex - 1 = startIndex; nothing to delete.
56
- const beforeJson = docWith(textRunElement('\n', 7));
57
- const result = translateMutation({ op: 'set', path: TEXT_PATH, value: 'X', beforeJson }, 'rev-1');
58
- if (isRejection(result))
59
- throw new Error(`unexpected rejection: ${result.reason}`);
60
- expect(result.body.requests).toEqual([
61
- { insertText: { text: 'X', location: { index: 7 } } },
62
- ]);
63
- });
64
- it('rejects a newline in the new value (structural edit disguised as text)', () => {
65
- const beforeJson = docWith(textRunElement('Hello\n', 1));
66
- const result = translateMutation({ op: 'set', path: TEXT_PATH, value: 'line1\nline2', beforeJson }, 'rev-1');
67
- expect(isRejection(result)).toBe(true);
68
- if (isRejection(result))
69
- expect(result.reason).toMatch(/newline/);
70
- });
71
- it('rejects a non-string value', () => {
72
- const beforeJson = docWith(textRunElement('x', 1));
73
- const result = translateMutation({ op: 'set', path: TEXT_PATH, value: 42, beforeJson }, 'rev-1');
74
- expect(isRejection(result)).toBe(true);
75
- if (isRejection(result))
76
- expect(result.reason).toMatch(/string/);
77
- });
78
- it('rejects when the element has no textRun (e.g. an inline image)', () => {
79
- const beforeJson = docWith({
80
- startIndex: 1,
81
- endIndex: 2,
82
- paragraph: {
83
- elements: [{ startIndex: 1, endIndex: 2, inlineObjectElement: { objectId: 'img-1' } }],
84
- },
85
- });
86
- const result = translateMutation({ op: 'set', path: TEXT_PATH, value: 'x', beforeJson }, 'rev-1');
87
- expect(isRejection(result)).toBe(true);
88
- if (isRejection(result))
89
- expect(result.reason).toMatch(/textRun/);
90
- });
91
- });
92
- describe('translateMutation — paragraphStyle path', () => {
93
- it('builds updateParagraphStyle with the element range and the leaf field mask', () => {
94
- const beforeJson = docWith(textRunElement('Heading text\n', 1));
95
- const result = translateMutation({ op: 'set', path: STYLE_PATH, value: 'HEADING_1', beforeJson }, 'rev-1');
96
- if (isRejection(result))
97
- throw new Error(`unexpected rejection: ${result.reason}`);
98
- expect(result.body.requests).toEqual([{
99
- updateParagraphStyle: {
100
- range: { startIndex: 1, endIndex: 14 }, // 'Heading text\n'.length = 13
101
- paragraphStyle: { namedStyleType: 'HEADING_1' },
102
- fields: 'namedStyleType',
103
- },
104
- }]);
105
- expect(result.body.writeControl).toEqual({ requiredRevisionId: 'rev-1' });
106
- });
107
- it('passes the leaf field name through unchanged (alignment, direction, etc.)', () => {
108
- const beforeJson = docWith(textRunElement('x\n', 1));
109
- const result = translateMutation({ op: 'set', path: '$.body.content[0].paragraph.paragraphStyle.alignment', value: 'CENTER', beforeJson }, 'rev-1');
110
- if (isRejection(result))
111
- throw new Error(`unexpected rejection: ${result.reason}`);
112
- const r = result.body.requests[0];
113
- expect(r.updateParagraphStyle.fields).toBe('alignment');
114
- expect(r.updateParagraphStyle.paragraphStyle).toEqual({ alignment: 'CENTER' });
115
- });
116
- it('rejects when the element is not a paragraph', () => {
117
- const beforeJson = docWith({
118
- startIndex: 1, endIndex: 5,
119
- table: { rows: 1, columns: 1 },
120
- });
121
- const result = translateMutation({ op: 'set', path: STYLE_PATH, value: 'HEADING_1', beforeJson }, 'rev-1');
122
- expect(isRejection(result)).toBe(true);
123
- if (isRejection(result))
124
- expect(result.reason).toMatch(/paragraph/);
125
- });
126
- });
127
- describe('translateMutation — rejected paths and ops', () => {
128
- it('rejects an unsupported path with a guidance message', () => {
129
- const beforeJson = docWith(textRunElement('x\n', 1));
130
- const result = translateMutation({ op: 'set', path: '$.body.content[0].paragraph.elements[0].textStyle.bold', value: true, beforeJson }, 'rev-1');
131
- expect(isRejection(result)).toBe(true);
132
- if (isRejection(result)) {
133
- expect(result.reason).toMatch(/not supported/);
134
- expect(result.reason).toMatch(/markdown mode/);
135
- }
136
- });
137
- it('rejects json_delete on a docs-bound scratchpad (structural)', () => {
138
- const beforeJson = docWith(textRunElement('x\n', 1));
139
- const result = translateMutation({ op: 'delete', path: TEXT_PATH, beforeJson }, 'rev-1');
140
- expect(isRejection(result)).toBe(true);
141
- if (isRejection(result))
142
- expect(result.reason).toMatch(/structural/);
143
- });
144
- it('rejects json_insert on a docs-bound scratchpad (structural)', () => {
145
- const beforeJson = docWith(textRunElement('x\n', 1));
146
- const result = translateMutation({ op: 'insert', path: '$.body.content', value: { paragraph: {} }, beforeJson }, 'rev-1');
147
- expect(isRejection(result)).toBe(true);
148
- if (isRejection(result))
149
- expect(result.reason).toMatch(/structural/);
150
- });
151
- it('rejects when the element index is out of range', () => {
152
- const beforeJson = docWith(textRunElement('x\n', 1));
153
- const result = translateMutation({ op: 'set', path: '$.body.content[5].paragraph.elements[0].textRun.content', value: 'y', beforeJson }, 'rev-1');
154
- expect(isRejection(result)).toBe(true);
155
- if (isRejection(result))
156
- expect(result.reason).toMatch(/not found/);
157
- });
158
- it('rejects on a malformed buffer JSON (caller surfaces "fix syntax first")', () => {
159
- const result = translateMutation({ op: 'set', path: TEXT_PATH, value: 'x', beforeJson: '{ this is not valid JSON' }, 'rev-1');
160
- expect(isRejection(result)).toBe(true);
161
- if (isRejection(result))
162
- expect(result.reason).toMatch(/JSON/);
163
- });
164
- });
165
- describe('translateMutation — writeControl.requiredRevisionId', () => {
166
- it('omits writeControl when no revisionId is provided', () => {
167
- // E.g. an older import that didn't capture a revisionId. The API still
168
- // accepts the request, just without optimistic-concurrency protection.
169
- const beforeJson = docWith(textRunElement('x\n', 1));
170
- const result = translateMutation({ op: 'set', path: TEXT_PATH, value: 'y', beforeJson }, undefined);
171
- if (isRejection(result))
172
- throw new Error('unexpected rejection');
173
- expect(result.body.writeControl).toBeUndefined();
174
- });
175
- it('includes writeControl for paragraphStyle changes as well as text', () => {
176
- const beforeJson = docWith(textRunElement('x\n', 1));
177
- const text = translateMutation({ op: 'set', path: TEXT_PATH, value: 'y', beforeJson }, 'rev-42');
178
- const style = translateMutation({ op: 'set', path: STYLE_PATH, value: 'HEADING_2', beforeJson }, 'rev-42');
179
- if (isRejection(text) || isRejection(style))
180
- throw new Error('unexpected rejection');
181
- expect(text.body.writeControl).toEqual({ requiredRevisionId: 'rev-42' });
182
- expect(style.body.writeControl).toEqual({ requiredRevisionId: 'rev-42' });
183
- });
184
- });
185
- describe('translateMutation — summary', () => {
186
- it('summary names the path and (for text) the length delta', () => {
187
- const beforeJson = docWith(textRunElement('Hello\n', 1));
188
- const result = translateMutation({ op: 'set', path: TEXT_PATH, value: 'Goodbye', beforeJson }, 'rev-1');
189
- if (isRejection(result))
190
- throw new Error('unexpected rejection');
191
- expect(result.summary).toMatch(/content\[0\].elements\[0\]/);
192
- // 'Hello\n'.length = 6, 'Goodbye'.length = 7
193
- expect(result.summary).toMatch(/6 → 7/);
194
- });
195
- it('summary names the paragraphStyle field for style changes', () => {
196
- const beforeJson = docWith(textRunElement('x\n', 1));
197
- const result = translateMutation({ op: 'set', path: STYLE_PATH, value: 'HEADING_1', beforeJson }, 'rev-1');
198
- if (isRejection(result))
199
- throw new Error('unexpected rejection');
200
- expect(result.summary).toMatch(/paragraphStyle\.namedStyleType/);
201
- });
202
- });
203
- /**
204
- * Suggested next pass — handler-level integration tests that mock `execute`
205
- * to cover the API-error-preserves-buffer and success-reloads-buffer cases.
206
- * Co-located with this file would be reasonable; a separate file under the
207
- * same dir keeps the unit-vs-integration split clear.
208
- *
209
- * - API rejects (stale revisionId, structural error) → buffer preserved.
210
- * - API succeeds → reloadDocsBuffer fires, sp.lines replaced, binding
211
- * revisionId updated from the fresh response.
212
- */
213
- //# sourceMappingURL=docs-sync.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"docs-sync.test.js","sourceRoot":"","sources":["../../../../src/server/scratchpad/__tests__/docs-sync.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- /**
2
- * Tests for json-path.ts — JSON path parsing and manipulation helpers.
3
- */
4
- export {};
@@ -1,121 +0,0 @@
1
- /**
2
- * Tests for json-path.ts — JSON path parsing and manipulation helpers.
3
- */
4
- import { parsePath, getByPath, setByPath, deleteByPath } from '../json-path.js';
5
- describe('parsePath', () => {
6
- it('parses $.foo.bar into string segments', () => {
7
- expect(parsePath('$.foo.bar')).toEqual(['foo', 'bar']);
8
- });
9
- it('parses $.items[0] into mixed segments', () => {
10
- expect(parsePath('$.items[0]')).toEqual(['items', 0]);
11
- });
12
- it('returns empty array for bare $', () => {
13
- expect(parsePath('$')).toEqual([]);
14
- });
15
- it('returns empty array for empty string', () => {
16
- expect(parsePath('')).toEqual([]);
17
- });
18
- it('parses deeply nested path with mixed access', () => {
19
- expect(parsePath('$.a[1].b[2].c')).toEqual(['a', 1, 'b', 2, 'c']);
20
- });
21
- it('parses path without $ prefix', () => {
22
- expect(parsePath('foo.bar')).toEqual(['foo', 'bar']);
23
- });
24
- it('distinguishes numeric strings from indices', () => {
25
- // "01" is not a pure integer representation so stays as string
26
- expect(parsePath('$.items[01]')).toEqual(['items', '01']);
27
- });
28
- });
29
- describe('getByPath', () => {
30
- const obj = {
31
- name: 'test',
32
- nested: { deep: { value: 42 } },
33
- items: ['a', 'b', 'c'],
34
- matrix: [[1, 2], [3, 4]],
35
- };
36
- it('gets a top-level key', () => {
37
- expect(getByPath(obj, '$.name')).toBe('test');
38
- });
39
- it('gets a nested value', () => {
40
- expect(getByPath(obj, '$.nested.deep.value')).toBe(42);
41
- });
42
- it('gets an array element by index', () => {
43
- expect(getByPath(obj, '$.items[1]')).toBe('b');
44
- });
45
- it('gets nested array element', () => {
46
- expect(getByPath(obj, '$.matrix[0][1]')).toBe(2);
47
- });
48
- it('returns undefined for missing key', () => {
49
- expect(getByPath(obj, '$.missing')).toBeUndefined();
50
- });
51
- it('returns the root object for bare $', () => {
52
- expect(getByPath(obj, '$')).toBe(obj);
53
- });
54
- it('throws on non-object traversal', () => {
55
- expect(() => getByPath(obj, '$.name.child')).toThrow('cannot traverse into string');
56
- });
57
- it('throws when traversing through null', () => {
58
- const o = { a: null };
59
- expect(() => getByPath(o, '$.a.b')).toThrow('cannot traverse');
60
- });
61
- });
62
- describe('setByPath', () => {
63
- it('sets a top-level key', () => {
64
- const obj = { a: 1 };
65
- setByPath(obj, '$.b', 2);
66
- expect(obj.b).toBe(2);
67
- });
68
- it('sets a nested value', () => {
69
- const obj = { nested: { deep: { value: 0 } } };
70
- setByPath(obj, '$.nested.deep.value', 99);
71
- expect(obj.nested.deep.value).toBe(99);
72
- });
73
- it('sets an array element', () => {
74
- const obj = { items: ['a', 'b', 'c'] };
75
- setByPath(obj, '$.items[1]', 'B');
76
- expect(obj.items[1]).toBe('B');
77
- });
78
- it('creates a new key on existing object', () => {
79
- const obj = { existing: {} };
80
- setByPath(obj, '$.existing.newKey', 'hello');
81
- expect(obj.existing.newKey).toBe('hello');
82
- });
83
- it('throws on root path', () => {
84
- expect(() => setByPath({}, '$', 'nope')).toThrow('Cannot set at root path');
85
- });
86
- it('throws when traversing through non-object', () => {
87
- const obj = { a: 'string' };
88
- expect(() => setByPath(obj, '$.a.b', 1)).toThrow('parent is not an object');
89
- });
90
- });
91
- describe('deleteByPath', () => {
92
- it('deletes an object key', () => {
93
- const obj = { a: 1, b: 2 };
94
- deleteByPath(obj, '$.b');
95
- expect(obj).toEqual({ a: 1 });
96
- expect('b' in obj).toBe(false);
97
- });
98
- it('deletes an array element by index (splice)', () => {
99
- const obj = { items: [10, 20, 30] };
100
- deleteByPath(obj, '$.items[1]');
101
- expect(obj.items).toEqual([10, 30]);
102
- });
103
- it('deletes a nested key', () => {
104
- const obj = { nested: { x: 1, y: 2 } };
105
- deleteByPath(obj, '$.nested.x');
106
- expect(obj.nested).toEqual({ y: 2 });
107
- });
108
- it('throws on root path', () => {
109
- expect(() => deleteByPath({}, '$')).toThrow('Cannot delete root');
110
- });
111
- it('throws when traversing through non-object', () => {
112
- const obj = { a: 42 };
113
- expect(() => deleteByPath(obj, '$.a.b')).toThrow('parent is not an object');
114
- });
115
- it('deletes first array element', () => {
116
- const obj = { items: ['x', 'y', 'z'] };
117
- deleteByPath(obj, '$.items[0]');
118
- expect(obj.items).toEqual(['y', 'z']);
119
- });
120
- });
121
- //# sourceMappingURL=json-path.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-path.test.js","sourceRoot":"","sources":["../../../../src/server/scratchpad/__tests__/json-path.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Tests for ScratchpadManager — line-addressed content authoring buffer.
3
- * See ADR-301.
4
- */
5
- export {};