@luzzle/cli 0.0.126 → 0.0.127

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 (89) hide show
  1. package/dist/src/index.d.ts +2 -0
  2. package/dist/src/index.js +4 -0
  3. package/dist/src/index.js.map +1 -0
  4. package/dist/src/lib/cli.d.ts +2 -0
  5. package/dist/src/lib/cli.js +112 -0
  6. package/dist/src/lib/cli.js.map +1 -0
  7. package/dist/src/lib/cli.test.d.ts +1 -0
  8. package/dist/src/lib/cli.test.js +197 -0
  9. package/dist/src/lib/cli.test.js.map +1 -0
  10. package/dist/src/lib/commands/command/assistant.d.ts +11 -0
  11. package/dist/src/lib/commands/command/assistant.js +67 -0
  12. package/dist/src/lib/commands/command/assistant.js.map +1 -0
  13. package/dist/src/lib/commands/command/assistant.test.d.ts +1 -0
  14. package/dist/src/lib/commands/command/assistant.test.js +161 -0
  15. package/dist/src/lib/commands/command/assistant.test.js.map +1 -0
  16. package/dist/src/lib/commands/command/config.d.ts +8 -0
  17. package/dist/src/lib/commands/command/config.js +67 -0
  18. package/dist/src/lib/commands/command/config.js.map +1 -0
  19. package/dist/src/lib/commands/command/config.test.d.ts +1 -0
  20. package/dist/src/lib/commands/command/config.test.js +113 -0
  21. package/dist/src/lib/commands/command/config.test.js.map +1 -0
  22. package/dist/src/lib/commands/command/create.d.ts +10 -0
  23. package/dist/src/lib/commands/command/create.js +63 -0
  24. package/dist/src/lib/commands/command/create.js.map +1 -0
  25. package/dist/src/lib/commands/command/create.test.d.ts +1 -0
  26. package/dist/src/lib/commands/command/create.test.js +126 -0
  27. package/dist/src/lib/commands/command/create.test.js.map +1 -0
  28. package/dist/src/lib/commands/command/field.d.ts +10 -0
  29. package/dist/src/lib/commands/command/field.js +90 -0
  30. package/dist/src/lib/commands/command/field.js.map +1 -0
  31. package/dist/src/lib/commands/command/field.test.d.ts +1 -0
  32. package/dist/src/lib/commands/command/field.test.js +395 -0
  33. package/dist/src/lib/commands/command/field.test.js.map +1 -0
  34. package/dist/src/lib/commands/command/init.d.ts +6 -0
  35. package/dist/src/lib/commands/command/init.js +42 -0
  36. package/dist/src/lib/commands/command/init.js.map +1 -0
  37. package/dist/src/lib/commands/command/init.test.d.ts +1 -0
  38. package/dist/src/lib/commands/command/init.test.js +84 -0
  39. package/dist/src/lib/commands/command/init.test.js.map +1 -0
  40. package/dist/src/lib/commands/command/sync.d.ts +7 -0
  41. package/dist/src/lib/commands/command/sync.js +85 -0
  42. package/dist/src/lib/commands/command/sync.js.map +1 -0
  43. package/dist/src/lib/commands/command/sync.test.d.ts +1 -0
  44. package/dist/src/lib/commands/command/sync.test.js +117 -0
  45. package/dist/src/lib/commands/command/sync.test.js.map +1 -0
  46. package/dist/src/lib/commands/command/validate.d.ts +5 -0
  47. package/dist/src/lib/commands/command/validate.js +22 -0
  48. package/dist/src/lib/commands/command/validate.js.map +1 -0
  49. package/dist/src/lib/commands/command/validate.test.d.ts +1 -0
  50. package/dist/src/lib/commands/command/validate.test.js +59 -0
  51. package/dist/src/lib/commands/command/validate.test.js.map +1 -0
  52. package/dist/src/lib/commands/index.d.ts +6 -0
  53. package/dist/src/lib/commands/index.js +19 -0
  54. package/dist/src/lib/commands/index.js.map +1 -0
  55. package/dist/src/lib/commands/index.test.d.ts +1 -0
  56. package/dist/src/lib/commands/index.test.js +31 -0
  57. package/dist/src/lib/commands/index.test.js.map +1 -0
  58. package/dist/src/lib/commands/utils/context.fixtures.d.ts +23 -0
  59. package/dist/src/lib/commands/utils/context.fixtures.js +76 -0
  60. package/dist/src/lib/commands/utils/context.fixtures.js.map +1 -0
  61. package/dist/src/lib/commands/utils/pieces.d.ts +27 -0
  62. package/dist/src/lib/commands/utils/pieces.js +47 -0
  63. package/dist/src/lib/commands/utils/pieces.js.map +1 -0
  64. package/dist/src/lib/commands/utils/pieces.test.d.ts +1 -0
  65. package/dist/src/lib/commands/utils/pieces.test.js +97 -0
  66. package/dist/src/lib/commands/utils/pieces.test.js.map +1 -0
  67. package/dist/src/lib/config.d.ts +35 -0
  68. package/dist/src/lib/config.js +145 -0
  69. package/dist/src/lib/config.js.map +1 -0
  70. package/dist/src/lib/config.mock.d.ts +5 -0
  71. package/dist/src/lib/config.mock.js +10 -0
  72. package/dist/src/lib/config.mock.js.map +1 -0
  73. package/dist/src/lib/config.test.d.ts +1 -0
  74. package/dist/src/lib/config.test.js +129 -0
  75. package/dist/src/lib/config.test.js.map +1 -0
  76. package/dist/src/lib/database.mock.d.ts +22 -0
  77. package/dist/src/lib/database.mock.js +34 -0
  78. package/dist/src/lib/database.mock.js.map +1 -0
  79. package/dist/src/lib/log.d.ts +2 -0
  80. package/dist/src/lib/log.js +9 -0
  81. package/dist/src/lib/log.js.map +1 -0
  82. package/dist/src/version.d.ts +2 -0
  83. package/dist/src/version.js +2 -0
  84. package/dist/src/version.js.map +1 -0
  85. package/dist/tsconfig.tsbuildinfo +1 -0
  86. package/dist/vite.config.d.ts +2 -0
  87. package/dist/vite.config.js +38 -0
  88. package/dist/vite.config.js.map +1 -0
  89. package/package.json +2 -2
@@ -0,0 +1,395 @@
1
+ import log from '../../../lib/log.js';
2
+ import { describe, expect, test, vi, afterEach } from 'vitest';
3
+ import command from './field.js';
4
+ import yargs from 'yargs';
5
+ import { makeContext, makeMarkdownSample, makePieceMock } from '../utils/context.fixtures.js';
6
+ import { makePiecePathPositional, parsePiecePathPositionalArgv } from '../utils/pieces.js';
7
+ vi.mock('../utils/pieces.js');
8
+ vi.mock('../../../lib/log.js');
9
+ const mocks = {
10
+ logError: vi.spyOn(log, 'error'),
11
+ logInfo: vi.spyOn(log, 'info'),
12
+ parseArgs: vi.mocked(parsePiecePathPositionalArgv),
13
+ makePositional: vi.mocked(makePiecePathPositional),
14
+ getPiece: vi.fn(),
15
+ getTypes: vi.fn(),
16
+ consoleLog: vi.spyOn(console, 'log'),
17
+ };
18
+ const spies = {};
19
+ describe('lib/commands/field.ts', () => {
20
+ afterEach(() => {
21
+ Object.values(mocks).forEach((mock) => {
22
+ mock.mockReset();
23
+ });
24
+ Object.keys(spies).forEach((key) => {
25
+ spies[key].mockRestore();
26
+ delete spies[key];
27
+ });
28
+ });
29
+ test('run', async () => {
30
+ const file = 'slug';
31
+ const piece = makePieceMock();
32
+ const markdown = makeMarkdownSample();
33
+ const fields = [{ name: 'title', type: 'string' }];
34
+ const ctx = makeContext({
35
+ pieces: {
36
+ getPiece: mocks.getPiece.mockReturnValue(piece),
37
+ getTypes: mocks.getTypes.mockReturnValue([piece.type]),
38
+ },
39
+ });
40
+ spies.pieceGet = vi.spyOn(piece, 'get').mockResolvedValueOnce(markdown);
41
+ spies.pieceFields = vi.spyOn(piece, 'fields', 'get').mockReturnValue(fields);
42
+ mocks.parseArgs.mockResolvedValueOnce({ file, piece, markdown });
43
+ await command.run(ctx, { piece: file });
44
+ expect(mocks.logError).not.toHaveBeenCalledOnce();
45
+ expect(mocks.consoleLog).toHaveBeenCalledOnce();
46
+ });
47
+ test('run set field while dry run', async () => {
48
+ const file = 'slug';
49
+ const piece = makePieceMock();
50
+ const markdown = makeMarkdownSample();
51
+ const fieldname = 'title';
52
+ const value = 'new title';
53
+ const fields = [{ name: fieldname, type: 'string' }];
54
+ const ctx = makeContext({
55
+ flags: { dryRun: true },
56
+ pieces: {
57
+ getPiece: mocks.getPiece.mockReturnValue(piece),
58
+ getTypes: mocks.getTypes.mockReturnValue([piece.type]),
59
+ },
60
+ });
61
+ spies.validate = vi.spyOn(piece, 'validate').mockReturnValueOnce({ isValid: true });
62
+ spies.pieceGet = vi.spyOn(piece, 'get').mockResolvedValueOnce(markdown);
63
+ spies.pieceFields = vi.spyOn(piece, 'fields', 'get').mockReturnValue(fields);
64
+ spies.pieceSetField = vi
65
+ .spyOn(piece, 'setField')
66
+ .mockResolvedValueOnce(markdown);
67
+ spies.pieceWrite = vi.spyOn(piece, 'write').mockResolvedValueOnce();
68
+ mocks.parseArgs.mockResolvedValueOnce({ file, piece, markdown });
69
+ await command.run(ctx, {
70
+ piece: file,
71
+ field: fieldname,
72
+ value,
73
+ });
74
+ expect(spies.pieceWrite).not.toHaveBeenCalledWith(markdown);
75
+ expect(spies.validate).toHaveBeenCalledOnce();
76
+ });
77
+ test('run set invalid field while dry run', async () => {
78
+ const file = 'slug';
79
+ const piece = makePieceMock();
80
+ const markdown = makeMarkdownSample();
81
+ const fieldname = 'title';
82
+ const value = 'new title';
83
+ const fields = [{ name: fieldname, type: 'string' }];
84
+ const ctx = makeContext({
85
+ flags: { dryRun: true },
86
+ pieces: {
87
+ getPiece: mocks.getPiece.mockReturnValue(piece),
88
+ getTypes: mocks.getTypes.mockReturnValue([piece.type]),
89
+ },
90
+ });
91
+ spies.validate = vi.spyOn(piece, 'validate').mockReturnValueOnce({ isValid: false, errors: [] });
92
+ spies.pieceGet = vi.spyOn(piece, 'get').mockResolvedValueOnce(markdown);
93
+ spies.pieceFields = vi.spyOn(piece, 'fields', 'get').mockReturnValue(fields);
94
+ spies.pieceSetField = vi
95
+ .spyOn(piece, 'setField')
96
+ .mockResolvedValueOnce(markdown);
97
+ spies.pieceWrite = vi.spyOn(piece, 'write').mockResolvedValueOnce();
98
+ mocks.parseArgs.mockResolvedValueOnce({ file, piece, markdown });
99
+ await command.run(ctx, {
100
+ piece: file,
101
+ field: fieldname,
102
+ value,
103
+ });
104
+ expect(spies.pieceWrite).not.toHaveBeenCalledWith(markdown);
105
+ expect(spies.validate).toHaveBeenCalledOnce();
106
+ expect(mocks.logError).toHaveBeenCalledOnce();
107
+ });
108
+ test('run returns fieldname value', async () => {
109
+ const file = 'slug';
110
+ const piece = makePieceMock();
111
+ const markdown = makeMarkdownSample();
112
+ const fieldname = 'title';
113
+ const fields = [{ name: fieldname, type: 'string' }];
114
+ const ctx = makeContext({
115
+ pieces: {
116
+ getPiece: mocks.getPiece.mockReturnValue(piece),
117
+ getTypes: mocks.getTypes.mockReturnValue([piece.type]),
118
+ },
119
+ });
120
+ spies.pieceGet = vi.spyOn(piece, 'get').mockResolvedValueOnce(markdown);
121
+ spies.pieceFields = vi.spyOn(piece, 'fields', 'get').mockReturnValue(fields);
122
+ mocks.parseArgs.mockResolvedValueOnce({ file, markdown, piece });
123
+ await command.run(ctx, {
124
+ piece: file,
125
+ field: fieldname,
126
+ });
127
+ expect(mocks.logError).not.toHaveBeenCalledOnce();
128
+ expect(mocks.consoleLog).toHaveBeenCalledOnce();
129
+ });
130
+ test('run field set', async () => {
131
+ const file = 'slug';
132
+ const piece = makePieceMock();
133
+ const markdown = makeMarkdownSample();
134
+ const fieldname = 'title';
135
+ const value = 'new title';
136
+ const fields = [{ name: fieldname, type: 'string' }];
137
+ const ctx = makeContext({
138
+ pieces: {
139
+ getPiece: mocks.getPiece.mockReturnValue(piece),
140
+ getTypes: mocks.getTypes.mockReturnValue([piece.type]),
141
+ },
142
+ });
143
+ spies.pieceGet = vi.spyOn(piece, 'get').mockResolvedValueOnce(markdown);
144
+ spies.pieceFields = vi.spyOn(piece, 'fields', 'get').mockReturnValue(fields);
145
+ spies.pieceSetField = vi
146
+ .spyOn(piece, 'setField')
147
+ .mockResolvedValueOnce(markdown);
148
+ spies.pieceWrite = vi.spyOn(piece, 'write').mockResolvedValueOnce();
149
+ mocks.parseArgs.mockResolvedValueOnce({ file, piece, markdown });
150
+ await command.run(ctx, {
151
+ piece: file,
152
+ field: fieldname,
153
+ value,
154
+ });
155
+ expect(spies.pieceSetField).toHaveBeenCalledWith(markdown, fieldname, value);
156
+ expect(spies.pieceWrite).toHaveBeenCalledWith(markdown);
157
+ });
158
+ test('run field set by append', async () => {
159
+ const file = 'slug';
160
+ const piece = makePieceMock();
161
+ const titles = ['old title'];
162
+ const markdown = makeMarkdownSample({ frontmatter: { title: titles } });
163
+ const fieldname = 'title';
164
+ const value = 'new title';
165
+ const fields = [{ name: fieldname, type: 'array', items: { type: 'string' } }];
166
+ const ctx = makeContext({
167
+ pieces: {
168
+ getPiece: mocks.getPiece.mockReturnValue(piece),
169
+ getTypes: mocks.getTypes.mockReturnValue([piece.type]),
170
+ },
171
+ });
172
+ spies.pieceGet = vi.spyOn(piece, 'get').mockResolvedValueOnce(markdown);
173
+ spies.pieceFields = vi.spyOn(piece, 'fields', 'get').mockReturnValue(fields);
174
+ spies.pieceSetField = vi
175
+ .spyOn(piece, 'setField')
176
+ .mockResolvedValueOnce(markdown);
177
+ spies.pieceWrite = vi.spyOn(piece, 'write').mockResolvedValueOnce();
178
+ mocks.parseArgs.mockResolvedValueOnce({ file, piece, markdown });
179
+ await command.run(ctx, {
180
+ piece: file,
181
+ field: fieldname,
182
+ value,
183
+ append: true,
184
+ });
185
+ expect(spies.pieceSetField).toHaveBeenCalledWith(markdown, fieldname, [...titles, value]);
186
+ expect(spies.pieceWrite).toHaveBeenCalledWith(markdown);
187
+ });
188
+ test('run remove a field', async () => {
189
+ const file = 'slug';
190
+ const piece = makePieceMock();
191
+ const markdown = makeMarkdownSample();
192
+ const fieldname = 'title';
193
+ const fields = [{ name: fieldname, type: 'string' }];
194
+ const ctx = makeContext({
195
+ pieces: {
196
+ getPiece: mocks.getPiece.mockReturnValue(piece),
197
+ getTypes: mocks.getTypes.mockReturnValue([piece.type]),
198
+ },
199
+ });
200
+ spies.pieceGet = vi.spyOn(piece, 'get').mockResolvedValueOnce(markdown);
201
+ spies.pieceFields = vi.spyOn(piece, 'fields', 'get').mockReturnValue(fields);
202
+ spies.pieceRemoveField = vi
203
+ .spyOn(piece, 'removeField')
204
+ .mockResolvedValueOnce(markdown);
205
+ spies.pieceWrite = vi.spyOn(piece, 'write').mockResolvedValueOnce();
206
+ mocks.parseArgs.mockResolvedValueOnce({ file, piece, markdown });
207
+ await command.run(ctx, {
208
+ piece: file,
209
+ field: fieldname,
210
+ remove: true,
211
+ });
212
+ expect(spies.pieceRemoveField).toHaveBeenCalledWith(markdown, fieldname, undefined);
213
+ expect(spies.pieceWrite).toHaveBeenCalledWith(markdown);
214
+ });
215
+ test('run remove a field by value', async () => {
216
+ const file = 'slug';
217
+ const piece = makePieceMock();
218
+ const markdown = makeMarkdownSample();
219
+ const fieldname = 'title';
220
+ const value = 'nope';
221
+ const fields = [{ name: fieldname, type: 'string' }];
222
+ const ctx = makeContext({
223
+ pieces: {
224
+ getPiece: mocks.getPiece.mockReturnValue(piece),
225
+ getTypes: mocks.getTypes.mockReturnValue([piece.type]),
226
+ },
227
+ });
228
+ spies.pieceGet = vi.spyOn(piece, 'get').mockResolvedValueOnce(markdown);
229
+ spies.pieceFields = vi.spyOn(piece, 'fields', 'get').mockReturnValue(fields);
230
+ spies.pieceRemoveField = vi
231
+ .spyOn(piece, 'removeField')
232
+ .mockResolvedValueOnce(markdown);
233
+ spies.pieceWrite = vi.spyOn(piece, 'write').mockResolvedValueOnce();
234
+ mocks.parseArgs.mockResolvedValueOnce({ file, piece, markdown });
235
+ await command.run(ctx, {
236
+ piece: file,
237
+ field: fieldname,
238
+ value,
239
+ remove: true,
240
+ });
241
+ expect(spies.pieceRemoveField).toHaveBeenCalledWith(markdown, fieldname, value);
242
+ expect(spies.pieceWrite).toHaveBeenCalledWith(markdown);
243
+ });
244
+ test('run remove a field with dry run', async () => {
245
+ const file = 'slug';
246
+ const piece = makePieceMock();
247
+ const markdown = makeMarkdownSample();
248
+ const fieldname = 'title';
249
+ const fields = [{ name: fieldname, type: 'string' }];
250
+ const ctx = makeContext({
251
+ flags: { dryRun: true },
252
+ pieces: {
253
+ getPiece: mocks.getPiece.mockReturnValue(piece),
254
+ getTypes: mocks.getTypes.mockReturnValue([piece.type]),
255
+ },
256
+ });
257
+ spies.pieceGet = vi.spyOn(piece, 'get').mockResolvedValueOnce(markdown);
258
+ spies.pieceFields = vi.spyOn(piece, 'fields', 'get').mockReturnValue(fields);
259
+ spies.validate = vi.spyOn(piece, 'validate').mockReturnValueOnce({ isValid: true });
260
+ spies.pieceRemoveField = vi
261
+ .spyOn(piece, 'removeField')
262
+ .mockResolvedValueOnce(markdown);
263
+ spies.pieceWrite = vi.spyOn(piece, 'write').mockResolvedValueOnce();
264
+ mocks.parseArgs.mockResolvedValueOnce({ file, piece, markdown });
265
+ await command.run(ctx, {
266
+ piece: file,
267
+ field: fieldname,
268
+ remove: true,
269
+ });
270
+ expect(spies.pieceRemoveField).toHaveBeenCalled();
271
+ expect(spies.pieceWrite).not.toHaveBeenCalled();
272
+ });
273
+ test('run remove a field invalid with dry run', async () => {
274
+ const file = 'slug';
275
+ const piece = makePieceMock();
276
+ const markdown = makeMarkdownSample();
277
+ const fieldname = 'title';
278
+ const fields = [{ name: fieldname, type: 'string' }];
279
+ const ctx = makeContext({
280
+ flags: { dryRun: true },
281
+ pieces: {
282
+ getPiece: mocks.getPiece.mockReturnValue(piece),
283
+ getTypes: mocks.getTypes.mockReturnValue([piece.type]),
284
+ },
285
+ });
286
+ spies.pieceGet = vi.spyOn(piece, 'get').mockResolvedValueOnce(markdown);
287
+ spies.pieceFields = vi.spyOn(piece, 'fields', 'get').mockReturnValue(fields);
288
+ spies.validate = vi.spyOn(piece, 'validate').mockReturnValueOnce({ isValid: false, errors: [] });
289
+ spies.pieceRemoveField = vi
290
+ .spyOn(piece, 'removeField')
291
+ .mockResolvedValueOnce(markdown);
292
+ spies.pieceWrite = vi.spyOn(piece, 'write').mockResolvedValueOnce();
293
+ mocks.parseArgs.mockResolvedValueOnce({ file, piece, markdown });
294
+ await command.run(ctx, {
295
+ piece: file,
296
+ field: fieldname,
297
+ remove: true,
298
+ });
299
+ expect(spies.pieceRemoveField).toHaveBeenCalled();
300
+ expect(spies.pieceWrite).not.toHaveBeenCalled();
301
+ expect(mocks.logError).toHaveBeenCalled();
302
+ });
303
+ test('run fails to find fieldname', async () => {
304
+ const file = 'slug';
305
+ const piece = makePieceMock();
306
+ const markdown = makeMarkdownSample();
307
+ const fieldname = 'title';
308
+ const fields = [{ name: 'title2', type: 'string' }];
309
+ const ctx = makeContext({
310
+ pieces: {
311
+ getPiece: mocks.getPiece.mockReturnValue(piece),
312
+ getTypes: mocks.getTypes.mockReturnValue([piece.type]),
313
+ },
314
+ });
315
+ spies.pieceGet = vi.spyOn(piece, 'get').mockResolvedValueOnce(markdown);
316
+ spies.pieceFields = vi.spyOn(piece, 'fields', 'get').mockReturnValue(fields);
317
+ mocks.parseArgs.mockResolvedValueOnce({ file, piece, markdown });
318
+ await command.run(ctx, {
319
+ piece: file,
320
+ field: fieldname,
321
+ });
322
+ expect(mocks.logError).toHaveBeenCalledOnce();
323
+ });
324
+ test('run setting disallowed fields', async () => {
325
+ const file = 'slug';
326
+ const piece = makePieceMock();
327
+ const markdown = makeMarkdownSample();
328
+ const ctx = makeContext({
329
+ pieces: {
330
+ getPiece: mocks.getPiece.mockReturnValue(piece),
331
+ getTypes: mocks.getTypes.mockReturnValue([piece.type]),
332
+ },
333
+ });
334
+ spies.pieceGet = vi.spyOn(piece, 'get').mockResolvedValueOnce(markdown);
335
+ spies.pieceWrite = vi.spyOn(piece, 'write').mockResolvedValueOnce();
336
+ mocks.parseArgs.mockResolvedValueOnce({ file, piece, markdown });
337
+ await command.run(ctx, {
338
+ piece: file,
339
+ field: 'title-bad',
340
+ value: 'asf',
341
+ });
342
+ expect(mocks.logError).toHaveBeenCalledOnce();
343
+ });
344
+ test('run allows getting valid fieldnames', async () => {
345
+ const file = 'slug';
346
+ const piece = makePieceMock();
347
+ const markdown = makeMarkdownSample();
348
+ const ctx = makeContext({
349
+ pieces: {
350
+ getPiece: mocks.getPiece.mockReturnValue(piece),
351
+ },
352
+ });
353
+ spies.pieceGet = vi.spyOn(piece, 'get').mockResolvedValueOnce(markdown);
354
+ spies.pieceWrite = vi.spyOn(piece, 'write').mockResolvedValueOnce();
355
+ mocks.parseArgs.mockResolvedValueOnce({ file, piece, markdown });
356
+ await command.run(ctx, {
357
+ piece: file,
358
+ });
359
+ expect(mocks.logError).not.toHaveBeenCalledOnce();
360
+ });
361
+ test('run disallows removing without a field', async () => {
362
+ const file = 'slug';
363
+ const piece = makePieceMock();
364
+ const markdown = makeMarkdownSample();
365
+ const fieldname = 'title';
366
+ const fields = [{ name: fieldname, type: 'string' }];
367
+ const ctx = makeContext({
368
+ pieces: {
369
+ getPiece: mocks.getPiece.mockReturnValue(piece),
370
+ getTypes: mocks.getTypes.mockReturnValue([piece.type]),
371
+ },
372
+ });
373
+ spies.pieceFields = vi.spyOn(piece, 'fields', 'get').mockReturnValue(fields);
374
+ spies.pieceGet = vi.spyOn(piece, 'get').mockResolvedValueOnce(markdown);
375
+ spies.pieceWrite = vi.spyOn(piece, 'write').mockResolvedValueOnce();
376
+ mocks.parseArgs.mockResolvedValueOnce({ file, piece, markdown });
377
+ await command.run(ctx, {
378
+ piece: file,
379
+ remove: true,
380
+ field: '',
381
+ });
382
+ expect(mocks.logError).toHaveBeenCalledOnce();
383
+ });
384
+ test('builder', async () => {
385
+ const args = yargs();
386
+ mocks.makePositional.mockReturnValueOnce(args);
387
+ spies.positional = vi.spyOn(args, 'positional').mockReturnValue(args);
388
+ spies.option = vi.spyOn(args, 'option').mockReturnValue(args);
389
+ command.builder?.(args);
390
+ expect(spies.positional).toHaveBeenCalledTimes(2);
391
+ expect(spies.option).toHaveBeenCalledTimes(2);
392
+ expect(mocks.makePositional).toHaveBeenCalledOnce();
393
+ });
394
+ });
395
+ //# sourceMappingURL=field.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field.test.js","sourceRoot":"","sources":["../../../../../src/lib/commands/command/field.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Command } from '../utils/types.js';
2
+ export type InitArgv = {
3
+ dir: string;
4
+ };
5
+ declare const command: Command<InitArgv>;
6
+ export default command;
@@ -0,0 +1,42 @@
1
+ import log from '../../log.js';
2
+ import { stat } from 'fs/promises';
3
+ import { getDatabaseClient, migrate } from '@luzzle/core';
4
+ import path from 'path';
5
+ import { pathToFileURL } from 'url';
6
+ import { getDatabasePath } from '../../config.js';
7
+ const command = {
8
+ name: 'init',
9
+ command: 'init <dir>',
10
+ describe: 'initialize luzzle inside <dir>',
11
+ builder: (yargs) => {
12
+ return yargs.positional('dir', {
13
+ type: 'string',
14
+ description: 'directory for luzzle',
15
+ demandOption: 'a directory containing luzzle is required',
16
+ });
17
+ },
18
+ run: async function (ctx, args) {
19
+ const dir = args.dir;
20
+ const dirStat = await stat(args.dir).catch(() => null);
21
+ if (args.dir && !dirStat?.isDirectory()) {
22
+ throw new Error(`${args.dir} is not a folder`);
23
+ }
24
+ if (ctx.flags.dryRun === false) {
25
+ const dbPath = getDatabasePath(ctx.config);
26
+ const dirUri = pathToFileURL(path.resolve(dir));
27
+ const configPath = await stat(ctx.config.path).catch(() => null);
28
+ if (configPath === null) {
29
+ log.warn(`config file already exists at ${ctx.config.path}`);
30
+ }
31
+ ctx.config.set('directory', dirUri.href);
32
+ ctx.db = getDatabaseClient(dbPath);
33
+ await migrate(ctx.db);
34
+ log.info(`initialized config at ${ctx.config.path} and db at ${dbPath}`);
35
+ }
36
+ else {
37
+ log.info(`initialized config and db`);
38
+ }
39
+ },
40
+ };
41
+ export default command;
42
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../src/lib/commands/command/init.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,cAAc,CAAA;AAG9B,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAIjD,MAAM,OAAO,GAAsB;IAClC,IAAI,EAAE,MAAM;IAEZ,OAAO,EAAE,YAAY;IAErB,QAAQ,EAAE,gCAAgC;IAE1C,OAAO,EAAE,CAAI,KAAc,EAAE,EAAE;QAC9B,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE;YAC9B,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,sBAAsB;YACnC,YAAY,EAAE,2CAA2C;SACzD,CAAC,CAAA;IACH,CAAC;IAED,GAAG,EAAE,KAAK,WAAW,GAAG,EAAE,IAAI;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;QACpB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QAEtD,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAA;QAC/C,CAAC;QAED,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;YAC/C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;YAEhE,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACzB,GAAG,CAAC,IAAI,CAAC,iCAAiC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;YAC7D,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;YACxC,GAAG,CAAC,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAA;YAElC,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAErB,GAAG,CAAC,IAAI,CAAC,yBAAyB,GAAG,CAAC,MAAM,CAAC,IAAI,cAAc,MAAM,EAAE,CAAC,CAAA;QACzE,CAAC;aAAM,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;QACtC,CAAC;IACF,CAAC;CACD,CAAA;AAED,eAAe,OAAO,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,84 @@
1
+ import log from '../../log.js';
2
+ import { describe, expect, test, vi, afterEach } from 'vitest';
3
+ import command from './init.js';
4
+ import yargs from 'yargs';
5
+ import { makeContext } from '../utils/context.fixtures.js';
6
+ import { stat } from 'fs/promises';
7
+ import { existsSync } from 'fs';
8
+ import { getDatabaseClient, migrate } from '@luzzle/core';
9
+ import { mockConfig } from '../../config.mock.js';
10
+ import { getDatabasePath } from '../../config.js';
11
+ vi.mock('fs/promises');
12
+ vi.mock('@luzzle/core');
13
+ vi.mock('fs/promises');
14
+ vi.mock('fs');
15
+ vi.mock('../../log.js');
16
+ vi.mock('../../config.js');
17
+ const mocks = {
18
+ logWarn: vi.spyOn(log, 'warn'),
19
+ existsSync: vi.mocked(existsSync),
20
+ stat: vi.mocked(stat),
21
+ getDatabaseClient: vi.mocked(getDatabaseClient),
22
+ migrate: vi.mocked(migrate),
23
+ getDatabasePath: vi.mocked(getDatabasePath)
24
+ };
25
+ const spies = {};
26
+ describe('lib/commands/command/init', () => {
27
+ afterEach(() => {
28
+ Object.values(mocks).forEach((mock) => {
29
+ mock.mockReset();
30
+ });
31
+ Object.keys(spies).forEach((key) => {
32
+ spies[key].mockRestore();
33
+ delete spies[key];
34
+ });
35
+ });
36
+ test('run', async () => {
37
+ const config = mockConfig();
38
+ const ctx = makeContext({ config });
39
+ const dir = 'luzzle-dir';
40
+ mocks.getDatabasePath.mockReturnValueOnce(dir);
41
+ mocks.stat.mockResolvedValueOnce({ isDirectory: () => true });
42
+ mocks.stat.mockResolvedValueOnce({});
43
+ await command.run(ctx, { dir });
44
+ expect(mocks.getDatabaseClient).toHaveBeenCalledOnce();
45
+ expect(mocks.migrate).toHaveBeenCalledOnce();
46
+ });
47
+ test('run with existing config', async () => {
48
+ const config = mockConfig();
49
+ const ctx = makeContext({ config });
50
+ const dir = 'luzzle-dir';
51
+ mocks.getDatabasePath.mockReturnValueOnce(dir);
52
+ mocks.stat.mockResolvedValueOnce({ isDirectory: () => true });
53
+ mocks.stat.mockRejectedValueOnce(new Error('nope'));
54
+ await command.run(ctx, { dir });
55
+ expect(mocks.getDatabaseClient).toHaveBeenCalledOnce();
56
+ expect(mocks.migrate).toHaveBeenCalledOnce();
57
+ expect(mocks.logWarn).toHaveBeenCalledOnce();
58
+ });
59
+ test('run with dry run', async () => {
60
+ const ctx = makeContext({ flags: { dryRun: true } });
61
+ const dir = 'luzzle-dir';
62
+ mocks.getDatabasePath.mockReturnValueOnce(dir);
63
+ mocks.stat.mockResolvedValueOnce({ isDirectory: () => true });
64
+ mocks.stat.mockResolvedValueOnce({});
65
+ await command.run(ctx, { dir });
66
+ expect(mocks.getDatabaseClient).not.toHaveBeenCalledOnce();
67
+ expect(mocks.migrate).not.toHaveBeenCalledOnce();
68
+ });
69
+ test('run with invalid dir', async () => {
70
+ const ctx = makeContext();
71
+ const dir = 'luzzle-dir';
72
+ mocks.getDatabasePath.mockReturnValueOnce(dir);
73
+ mocks.stat.mockResolvedValueOnce({ isDirectory: () => false });
74
+ const run = command.run(ctx, { dir });
75
+ await expect(run).rejects.toThrow();
76
+ });
77
+ test('builder', async () => {
78
+ const args = yargs();
79
+ spies.positional = vi.spyOn(args, 'positional');
80
+ command.builder?.(args);
81
+ expect(spies.positional).toHaveBeenCalledOnce();
82
+ });
83
+ });
84
+ //# sourceMappingURL=init.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../../../../src/lib/commands/command/init.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type Command } from '../utils/types.js';
2
+ export type SyncArgv = {
3
+ force?: boolean;
4
+ prune?: boolean;
5
+ };
6
+ declare const command: Command<SyncArgv>;
7
+ export default command;