@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,85 @@
1
+ import { selectItemAssets } from '@luzzle/core';
2
+ const command = {
3
+ name: 'sync',
4
+ command: `sync`,
5
+ describe: 'sync directory to local database',
6
+ builder: (yargs) => {
7
+ return yargs
8
+ .option('force', {
9
+ type: 'boolean',
10
+ alias: 'f',
11
+ description: 'force updates on all items',
12
+ default: false,
13
+ })
14
+ .option('prune', {
15
+ type: 'boolean',
16
+ alias: 'p',
17
+ description: 'prune unneeded assets from disk',
18
+ default: false,
19
+ });
20
+ },
21
+ run: async function (ctx, args) {
22
+ const { force, prune } = args;
23
+ const { dryRun } = ctx.flags;
24
+ const files = await ctx.pieces.getFilesIn('.', { deep: true });
25
+ const syncPiecesIterable = await ctx.pieces.sync(ctx.db, { dryRun, force });
26
+ for await (const result of syncPiecesIterable) {
27
+ if (result.error) {
28
+ ctx.log.error(`error syncing piece ${result.name}: ${result.message}`);
29
+ }
30
+ else if (result.action === 'added' || result.action === 'updated') {
31
+ ctx.log.info(`[${result.action}] piece type: ${result.name}`);
32
+ }
33
+ }
34
+ const prunePiecesIterable = await ctx.pieces.prune(ctx.db, { dryRun });
35
+ for await (const result of prunePiecesIterable) {
36
+ if (result.error) {
37
+ ctx.log.error(`error pruning piece ${result.name}: ${result.message}`);
38
+ }
39
+ else if (result.action === 'pruned') {
40
+ ctx.log.info(`[${result.action}] piece type: ${result.name}`);
41
+ }
42
+ }
43
+ for (const name of files.types) {
44
+ const piece = await ctx.pieces.getPiece(name);
45
+ const piecesOnDisk = files.pieces.filter((one) => ctx.pieces.parseFilename(one).type === name);
46
+ const isOutdated = await Promise.all(piecesOnDisk.map((file) => piece.isOutdated(file, ctx.db)));
47
+ const areOutdated = piecesOnDisk.filter((_, i) => isOutdated[i]);
48
+ const processFiles = force ? piecesOnDisk : areOutdated;
49
+ const syncPieceIterable = await piece.sync(ctx.db, processFiles, { dryRun, force });
50
+ for await (const result of syncPieceIterable) {
51
+ if (result.error) {
52
+ ctx.log.error(`error syncing piece ${result.file}: ${result.message}`);
53
+ }
54
+ else if (result.action === 'added' || result.action === 'updated') {
55
+ ctx.log.info(`[${result.action}] piece: ${result.file}`);
56
+ }
57
+ else if (result.action === 'skipped') {
58
+ ctx.log.info(`[${result.action}] piece: ${result.file}`);
59
+ }
60
+ }
61
+ const prunePieceIterable = await piece.prune(ctx.db, piecesOnDisk, { dryRun });
62
+ for await (const result of prunePieceIterable) {
63
+ if (result.error) {
64
+ ctx.log.error(`error pruning piece ${result.file}: ${result.message}`);
65
+ }
66
+ else if (result.action === 'pruned') {
67
+ ctx.log.info(`[${result.action}] piece: ${result.file}`);
68
+ }
69
+ }
70
+ }
71
+ if (prune) {
72
+ const dbAssets = await selectItemAssets(ctx.db);
73
+ const dbAssetsSet = new Set(dbAssets);
74
+ const missingAssets = files.assets.filter((asset) => !dbAssetsSet.has(asset));
75
+ for (const asset of missingAssets) {
76
+ if (!dryRun) {
77
+ await ctx.storage.delete(asset);
78
+ }
79
+ ctx.log.info(`pruned asset (disk): ${asset}`);
80
+ }
81
+ }
82
+ },
83
+ };
84
+ export default command;
85
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../../../src/lib/commands/command/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,117 @@
1
+ import { describe, expect, test, vi, afterEach } from 'vitest';
2
+ import command from './sync.js';
3
+ import yargs from 'yargs';
4
+ import { makeContext, makePieceMock } from '../utils/context.fixtures.js';
5
+ import { selectItemAssets } from '@luzzle/core';
6
+ import { Readable } from 'stream';
7
+ vi.mock('@luzzle/core');
8
+ const spies = {};
9
+ const mocks = {
10
+ selectItemAssets: vi.mocked(selectItemAssets),
11
+ };
12
+ describe('commands/command/sync.ts', () => {
13
+ afterEach(() => {
14
+ Object.values(mocks).forEach((mock) => {
15
+ mock.mockReset();
16
+ });
17
+ Object.keys(spies).forEach((key) => {
18
+ spies[key].mockRestore();
19
+ delete spies[key];
20
+ });
21
+ });
22
+ test('run', async () => {
23
+ const piece = makePieceMock();
24
+ const ctx = makeContext();
25
+ const type = piece.type;
26
+ const files = ['a', 'b', 'c'];
27
+ const dbAssets = ['a', 'b', 'c'];
28
+ const syncPieces = Readable.from([
29
+ { action: 'added', name: type },
30
+ { action: 'updated', name: type },
31
+ { action: 'skipped', name: type },
32
+ { error: true, name: type, message: 'error message' },
33
+ ]);
34
+ const prunePieces = Readable.from([
35
+ { action: 'pruned', name: type },
36
+ { error: true, name: type, message: 'error message' },
37
+ ]);
38
+ const syncPiece = Readable.from([
39
+ { action: 'added', name: 'item1' },
40
+ { action: 'updated', name: 'item2' },
41
+ { action: 'skipped', name: 'item3' },
42
+ { error: true, name: 'item4', message: 'error message' },
43
+ ]);
44
+ const prunePiece = Readable.from([
45
+ { action: 'pruned', name: 'item1' },
46
+ { error: true, name: 'item2', message: 'error message' },
47
+ ]);
48
+ spies.logInfo = vi.spyOn(ctx.log, 'info').mockResolvedValue();
49
+ spies.getFilesIn = vi.spyOn(ctx.pieces, 'getFilesIn').mockResolvedValue({
50
+ pieces: files,
51
+ assets: ['d'],
52
+ types: [type],
53
+ directories: [],
54
+ });
55
+ spies.getPiece = vi.spyOn(ctx.pieces, 'getPiece').mockResolvedValue(piece);
56
+ spies.parseFilename = vi
57
+ .spyOn(ctx.pieces, 'parseFilename')
58
+ .mockReturnValue({ type, file: '', format: 'md', slug: '' });
59
+ spies.storageDelete = vi.spyOn(ctx.storage, 'delete');
60
+ spies.pieceIsOutdated = vi.spyOn(piece, 'isOutdated').mockResolvedValue(true);
61
+ spies.piecesSync = vi.spyOn(ctx.pieces, 'sync').mockResolvedValue(syncPieces);
62
+ spies.piecesPrune = vi.spyOn(ctx.pieces, 'prune').mockResolvedValue(prunePieces);
63
+ spies.pieceSync = vi.spyOn(piece, 'sync').mockResolvedValue(syncPiece);
64
+ spies.piecePrune = vi.spyOn(piece, 'prune').mockResolvedValue(prunePiece);
65
+ mocks.selectItemAssets.mockResolvedValue(dbAssets);
66
+ await command.run(ctx, { prune: true });
67
+ expect(spies.piecesSync).toHaveBeenCalledOnce();
68
+ expect(spies.piecesPrune).toHaveBeenCalledOnce();
69
+ expect(spies.pieceSync).toHaveBeenCalledOnce();
70
+ expect(spies.piecePrune).toHaveBeenCalledOnce();
71
+ expect(spies.storageDelete).toHaveBeenCalledOnce();
72
+ });
73
+ test('run with dryRun and force', async () => {
74
+ const piece = makePieceMock();
75
+ const ctx = makeContext({ flags: { dryRun: true } });
76
+ const type = piece.type;
77
+ const files = ['a', 'b', 'c'];
78
+ const dbAssets = ['a', 'b', 'c'];
79
+ const passThrough = Readable.from([]);
80
+ spies.logInfo = vi.spyOn(ctx.log, 'info').mockResolvedValue();
81
+ spies.getFilesIn = vi.spyOn(ctx.pieces, 'getFilesIn').mockResolvedValue({
82
+ pieces: files,
83
+ assets: ['d'],
84
+ types: [type],
85
+ directories: [],
86
+ });
87
+ spies.getPiece = vi.spyOn(ctx.pieces, 'getPiece').mockResolvedValue(piece);
88
+ spies.parseFilename = vi
89
+ .spyOn(ctx.pieces, 'parseFilename')
90
+ .mockReturnValue({ type, file: '', format: 'md', slug: '' });
91
+ spies.storageDelete = vi.spyOn(ctx.storage, 'delete');
92
+ spies.pieceIsOutdated = vi.spyOn(piece, 'isOutdated').mockResolvedValue(true);
93
+ spies.piecesSync = vi.spyOn(ctx.pieces, 'sync').mockResolvedValue(passThrough);
94
+ spies.piecesPrune = vi.spyOn(ctx.pieces, 'prune').mockResolvedValue(passThrough);
95
+ spies.pieceSync = vi.spyOn(piece, 'sync').mockResolvedValue(passThrough);
96
+ spies.piecePrune = vi.spyOn(piece, 'prune').mockResolvedValue(passThrough);
97
+ mocks.selectItemAssets.mockResolvedValue(dbAssets);
98
+ await command.run(ctx, { prune: true, force: true });
99
+ expect(spies.piecesSync).toHaveBeenCalledWith(expect.anything(), { dryRun: true, force: true });
100
+ expect(spies.piecesPrune).toHaveBeenCalledWith(expect.anything(), { dryRun: true });
101
+ expect(spies.pieceSync).toHaveBeenCalledWith(expect.anything(), expect.anything(), {
102
+ dryRun: true,
103
+ force: true,
104
+ });
105
+ expect(spies.piecePrune).toHaveBeenCalledWith(expect.anything(), expect.anything(), {
106
+ dryRun: true,
107
+ });
108
+ expect(spies.storageDelete).not.toHaveBeenCalled();
109
+ });
110
+ test('builder', async () => {
111
+ const args = yargs();
112
+ spies.option = vi.spyOn(args, 'option');
113
+ command.builder?.(args);
114
+ expect(spies.option).toHaveBeenCalledTimes(2);
115
+ });
116
+ });
117
+ //# sourceMappingURL=sync.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.test.js","sourceRoot":"","sources":["../../../../../src/lib/commands/command/sync.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type Command } from '../utils/types.js';
2
+ import { PieceArgv } from '../utils/pieces.js';
3
+ export type ValidateArgv = PieceArgv;
4
+ declare const command: Command<ValidateArgv>;
5
+ export default command;
@@ -0,0 +1,22 @@
1
+ import log from '../../../lib/log.js';
2
+ import { PiecePositional, makePiecePathPositional, parsePiecePathPositionalArgv, } from '../utils/pieces.js';
3
+ const command = {
4
+ name: 'validate',
5
+ command: `validate ${PiecePositional}`,
6
+ describe: 'validate a piece',
7
+ builder: (yargs) => {
8
+ return makePiecePathPositional(yargs);
9
+ },
10
+ run: async function (ctx, args) {
11
+ const { file, markdown, piece } = await parsePiecePathPositionalArgv(ctx, args);
12
+ const validate = piece.validate(markdown);
13
+ if (validate.isValid) {
14
+ console.log(`${file} is valid`);
15
+ }
16
+ else {
17
+ log.error(`${file} has ${validate.errors.length} error(s): ${validate.errors.join(', ')}`);
18
+ }
19
+ },
20
+ };
21
+ export default command;
22
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../../../src/lib/commands/command/validate.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,qBAAqB,CAAA;AAGrC,OAAO,EAEN,eAAe,EACf,uBAAuB,EACvB,4BAA4B,GAC5B,MAAM,oBAAoB,CAAA;AAI3B,MAAM,OAAO,GAA0B;IACtC,IAAI,EAAE,UAAU;IAEhB,OAAO,EAAE,YAAY,eAAe,EAAE;IAEtC,QAAQ,EAAE,kBAAkB;IAE5B,OAAO,EAAE,CAAI,KAAc,EAAE,EAAE;QAC9B,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAA;IACtC,CAAC;IAED,GAAG,EAAE,KAAK,WAAW,GAAG,EAAE,IAAI;QAC7B,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,4BAA4B,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC/E,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAEzC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,WAAW,CAAC,CAAA;QAChC,CAAC;aAAM,CAAC;YACP,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,QAAQ,QAAQ,CAAC,MAAM,CAAC,MAAM,cAAc,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC3F,CAAC;IACF,CAAC;CACD,CAAA;AAED,eAAe,OAAO,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,59 @@
1
+ import log from '../../log.js';
2
+ import { describe, expect, test, vi, afterEach } from 'vitest';
3
+ import command from './validate.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('../../log.js');
9
+ const mocks = {
10
+ logError: vi.spyOn(log, 'error'),
11
+ logInfo: vi.spyOn(log, 'info'),
12
+ parseArgs: vi.mocked(parsePiecePathPositionalArgv),
13
+ makeCommand: vi.mocked(makePiecePathPositional),
14
+ getPiece: vi.fn(),
15
+ };
16
+ const spies = {};
17
+ describe('lib/commands/validate.ts', () => {
18
+ afterEach(() => {
19
+ Object.values(mocks).forEach((mock) => {
20
+ mock.mockReset();
21
+ });
22
+ Object.keys(spies).forEach((key) => {
23
+ spies[key].mockRestore();
24
+ delete spies[key];
25
+ });
26
+ });
27
+ test('run', async () => {
28
+ const file = `/home/user/file.md`;
29
+ const piece = makePieceMock();
30
+ const markdown = makeMarkdownSample();
31
+ const ctx = makeContext();
32
+ spies.validate = vi
33
+ .spyOn(piece, 'validate')
34
+ .mockReturnValueOnce({ isValid: true });
35
+ mocks.parseArgs.mockResolvedValueOnce({ file, markdown, piece });
36
+ await command.run(ctx, { piece: file });
37
+ expect(mocks.logError).not.toHaveBeenCalled();
38
+ });
39
+ test('run on invalid piece', async () => {
40
+ const file = `/home/user/file.md`;
41
+ const piece = makePieceMock();
42
+ const markdown = makeMarkdownSample();
43
+ const ctx = makeContext();
44
+ const errors = ['error1', 'error2'];
45
+ spies.validate = vi
46
+ .spyOn(piece, 'validate')
47
+ .mockReturnValueOnce({ isValid: false, errors });
48
+ mocks.parseArgs.mockResolvedValueOnce({ file, markdown, piece });
49
+ await command.run(ctx, { piece: file });
50
+ expect(spies.validate).toHaveBeenCalledOnce();
51
+ expect(mocks.logError).toHaveBeenCalled();
52
+ });
53
+ test('builder', async () => {
54
+ const args = yargs();
55
+ command.builder?.(args);
56
+ expect(mocks.makeCommand).toHaveBeenCalledOnce();
57
+ });
58
+ });
59
+ //# sourceMappingURL=validate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.test.js","sourceRoot":"","sources":["../../../../../src/lib/commands/command/validate.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Command, Context } from './utils/types.js';
2
+ declare function getCommands(): Promise<{
3
+ [key: string]: Command<Record<string, string | number | boolean>>;
4
+ }>;
5
+ export { type Command, type Context };
6
+ export default getCommands;
@@ -0,0 +1,19 @@
1
+ import path from 'path';
2
+ import { readdir } from 'fs/promises';
3
+ async function getCommands() {
4
+ const commandPath = path.join(path.dirname(new URL(import.meta.url).pathname), 'command');
5
+ const files = await readdir(commandPath);
6
+ const commands = {};
7
+ for (const file of files) {
8
+ if (file.endsWith('.js')) {
9
+ const name = file.replace(/\..+$/, '');
10
+ /* c8 ignore next 3 */
11
+ const ext = process.env.NODE_ENV === 'test' ? 'ts' : 'js';
12
+ const command = await import(`./command/${name}.${ext}`);
13
+ commands[name] = command.default;
14
+ }
15
+ }
16
+ return commands;
17
+ }
18
+ export default getCommands;
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,KAAK,UAAU,WAAW;IACzB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAA;IACzF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;IACxC,MAAM,QAAQ,GAA+B,EAAE,CAAA;IAE/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;YACtC,sBAAsB;YACtB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;YACzD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,aAAa,IAAI,IAAI,GAAG,EAAE,CAAC,CAAA;YACxD,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAkB,CAAA;QAC5C,CAAC;IACF,CAAC;IAED,OAAO,QAAQ,CAAA;AAChB,CAAC;AAGD,eAAe,WAAW,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,31 @@
1
+ import { describe, expect, test, vi, afterEach } from 'vitest';
2
+ import { readdir } from 'fs/promises';
3
+ import getCommands from './index.js';
4
+ vi.mock('fs/promises');
5
+ vi.mock('path');
6
+ const mocks = {
7
+ readdir: vi.mocked(readdir),
8
+ };
9
+ describe('lib/web', () => {
10
+ afterEach(() => {
11
+ Object.values(mocks).forEach((mock) => {
12
+ mock.mockReset();
13
+ });
14
+ });
15
+ test('getCommands', async () => {
16
+ mocks.readdir.mockResolvedValue([]);
17
+ const commands = await getCommands();
18
+ expect(commands).toEqual({});
19
+ });
20
+ test('getCommands no js files', async () => {
21
+ mocks.readdir.mockResolvedValue(['command1.json']);
22
+ const commands = await getCommands();
23
+ expect(commands).toEqual({});
24
+ });
25
+ test('getCommands returns field.js command', async () => {
26
+ mocks.readdir.mockResolvedValue(['field.js']);
27
+ const commands = await getCommands();
28
+ expect(commands.field.name).toBe('field');
29
+ });
30
+ });
31
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/lib/commands/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,WAAW,MAAM,YAAY,CAAA;AAGpC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;AACtB,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAEf,MAAM,KAAK,GAAG;IACb,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;CAC3B,CAAA;AAED,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACxB,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrC,IAAI,CAAC,SAAS,EAAE,CAAA;QACjB,CAAC,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QAC9B,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAA;QAEnC,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAA;QAEpC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QAC1C,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,eAAe,CAAwB,CAAC,CAAA;QAEzE,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAA;QAEpC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACvD,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAwB,CAAC,CAAA;QAEpE,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAA;QAEpC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { Piece, PieceFrontmatter, PieceMarkdown } from '@luzzle/core';
2
+ import { Command, Context } from '../index.js';
3
+ import { PieceFrontmatterSchema, LuzzleStorage } from '@luzzle/core';
4
+ declare function makeSchema(name: string, properties?: {
5
+ [key: string]: {
6
+ type?: string;
7
+ nullable?: boolean;
8
+ items?: object;
9
+ format?: string;
10
+ pattern?: string;
11
+ enum?: string[] | number[];
12
+ };
13
+ }): PieceFrontmatterSchema<{
14
+ title: string;
15
+ keywords?: string;
16
+ subtitle?: string;
17
+ }>;
18
+ declare function makeStorage(root: string): LuzzleStorage;
19
+ declare function makeContext(overrides?: Partial<Pick<Context, 'db' | 'storage'>> & DeepPartial<Omit<Context, 'db' | 'log' | 'storage'>>): Context;
20
+ declare function makeCommand<T>(name: string, run?: () => Promise<void>): Command<T>;
21
+ declare function makePieceMock(): Piece<PieceFrontmatter>;
22
+ declare function makeMarkdownSample<F extends PieceFrontmatter>(initial?: Partial<PieceMarkdown<F>>): PieceMarkdown<F>;
23
+ export { makeContext, makeCommand, makePieceMock, makeSchema, makeStorage, makeMarkdownSample };
@@ -0,0 +1,76 @@
1
+ import { Piece } from '@luzzle/core';
2
+ import { merge, omit } from 'lodash-es';
3
+ import log from '../../log.js';
4
+ import { Pieces } from '@luzzle/core';
5
+ import { vi } from 'vitest';
6
+ function makeSchema(name, properties) {
7
+ return {
8
+ type: 'object',
9
+ title: name,
10
+ properties: {
11
+ title: { type: 'string', examples: ['title'] },
12
+ keywords: { type: 'string', nullable: true },
13
+ subtitle: { type: 'string', nullable: true },
14
+ ...properties,
15
+ },
16
+ required: ['title'],
17
+ additionalProperties: true,
18
+ };
19
+ }
20
+ function makeStorage(root) {
21
+ return {
22
+ root,
23
+ type: 'fs',
24
+ parseArgPath: vi.fn(),
25
+ readFile: vi.fn(),
26
+ writeFile: vi.fn(),
27
+ getFilesIn: vi.fn(),
28
+ exists: vi.fn(),
29
+ delete: vi.fn(),
30
+ stat: vi.fn(),
31
+ createReadStream: vi.fn(),
32
+ createWriteStream: vi.fn(),
33
+ makeDirectory: vi.fn(),
34
+ };
35
+ }
36
+ function makeContext(overrides) {
37
+ const storage = overrides?.storage || makeStorage('root');
38
+ return {
39
+ db: overrides?.db || {},
40
+ ...merge({
41
+ log,
42
+ storage,
43
+ pieces: new Pieces(storage),
44
+ config: { set: () => { }, delete: () => { }, get: () => { } },
45
+ flags: {
46
+ dryRun: false,
47
+ },
48
+ }, omit(overrides, 'db')),
49
+ };
50
+ }
51
+ function makeCommand(name, run = async () => { }) {
52
+ const command = {
53
+ name,
54
+ command: `${name} [flags]`,
55
+ describe: `a test command`,
56
+ run,
57
+ };
58
+ return command;
59
+ }
60
+ function makePieceMock() {
61
+ const name = 'table';
62
+ const storage = makeStorage('root');
63
+ const schema = makeSchema(name);
64
+ return new Piece(name, storage, schema);
65
+ }
66
+ function makeMarkdownSample(initial = {}) {
67
+ return {
68
+ note: 'note',
69
+ filePath: 'path/to/file.md',
70
+ piece: 'books',
71
+ frontmatter: {},
72
+ ...initial,
73
+ };
74
+ }
75
+ export { makeContext, makeCommand, makePieceMock, makeSchema, makeStorage, makeMarkdownSample };
76
+ //# sourceMappingURL=context.fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.fixtures.js","sourceRoot":"","sources":["../../../../../src/lib/commands/utils/context.fixtures.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { Argv } from 'yargs';
2
+ import { Context } from '../index.js';
3
+ import { Piece, PieceFrontmatter, PieceMarkdown } from '@luzzle/core';
4
+ export declare const PieceDirectory: {
5
+ readonly Root: "root";
6
+ readonly Assets: "assets";
7
+ readonly Luzzle: "luzzle";
8
+ };
9
+ export type PieceDirectories = {
10
+ [key in (typeof PieceDirectory)[keyof typeof PieceDirectory]]: string;
11
+ };
12
+ export type PieceArgv = {
13
+ piece: string;
14
+ };
15
+ declare const PieceFileType = "md";
16
+ declare const PiecePositional = "[piece]";
17
+ declare function parsePieceOptionArgv(ctx: Context, args: PieceArgv): Promise<{
18
+ piece: Piece<PieceFrontmatter>;
19
+ }>;
20
+ declare function parsePiecePathPositionalArgv(ctx: Context, args: PieceArgv): Promise<{
21
+ file: string;
22
+ piece: Piece<PieceFrontmatter>;
23
+ markdown: PieceMarkdown<PieceFrontmatter>;
24
+ }>;
25
+ declare const makePieceOption: <T>(yargs: Argv<T>) => Argv<T & PieceArgv>;
26
+ declare const makePiecePathPositional: <T>(yargs: Argv<T>) => Argv<T & PieceArgv>;
27
+ export { PieceFileType, PiecePositional, parsePieceOptionArgv, parsePiecePathPositionalArgv, makePieceOption, makePiecePathPositional, };
@@ -0,0 +1,47 @@
1
+ export const PieceDirectory = {
2
+ Root: 'root',
3
+ Assets: 'assets',
4
+ Luzzle: 'luzzle',
5
+ };
6
+ const PieceFileType = 'md';
7
+ const PiecePositional = `[piece]`;
8
+ async function parsePieceOptionArgv(ctx, args) {
9
+ const piece = args.piece;
10
+ const pieceNames = await ctx.pieces.getTypes();
11
+ if (pieceNames.includes(piece)) {
12
+ return { piece: await ctx.pieces.getPiece(piece) };
13
+ }
14
+ throw new Error(`piece [${piece}] does not exist`);
15
+ }
16
+ async function parsePiecePathPositionalArgv(ctx, args) {
17
+ const file = args.piece;
18
+ const pieceNames = await ctx.pieces.getTypes();
19
+ const pieceType = ctx.pieces.parseFilename(file).type;
20
+ if (pieceNames.length === 0) {
21
+ throw new Error(`no piece types were found. please add some schemas`);
22
+ }
23
+ if (pieceType && pieceNames.includes(pieceType)) {
24
+ const piece = await ctx.pieces.getPiece(pieceType);
25
+ const filePath = ctx.storage.parseArgPath(file);
26
+ const markdown = await piece.get(filePath);
27
+ return { file, piece, markdown };
28
+ }
29
+ throw new Error(`file [${file}] is not a valid piece, use: ${pieceNames.join(', ')}`);
30
+ }
31
+ const makePieceOption = function (yargs) {
32
+ return yargs.option('piece', {
33
+ type: 'string',
34
+ alias: 'p',
35
+ description: `piece type`,
36
+ demandOption: `piece type is required`,
37
+ });
38
+ };
39
+ const makePiecePathPositional = function (yargs) {
40
+ return yargs.positional('piece', {
41
+ type: 'string',
42
+ description: `path to the piece`,
43
+ demandOption: `path to the piece is required`,
44
+ });
45
+ };
46
+ export { PieceFileType, PiecePositional, parsePieceOptionArgv, parsePiecePathPositionalArgv, makePieceOption, makePiecePathPositional, };
47
+ //# sourceMappingURL=pieces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pieces.js","sourceRoot":"","sources":["../../../../../src/lib/commands/utils/pieces.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;CACP,CAAA;AAUV,MAAM,aAAa,GAAG,IAAI,CAAA;AAC1B,MAAM,eAAe,GAAG,SAAS,CAAA;AAEjC,KAAK,UAAU,oBAAoB,CAClC,GAAY,EACZ,IAAe;IAEf,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IACxB,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;IAE9C,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAA;IACnD,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,kBAAkB,CAAC,CAAA;AACnD,CAAC;AAED,KAAK,UAAU,4BAA4B,CAC1C,GAAY,EACZ,IAAe;IAMf,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAA;IACvB,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;IAC9C,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAA;IAErD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;IACtE,CAAC;IAED,IAAI,SAAS,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAClD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QAC/C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC1C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,gCAAgC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACtF,CAAC;AAED,MAAM,eAAe,GAAG,UAAa,KAAc;IAClD,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;QAC5B,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,YAAY;QACzB,YAAY,EAAE,wBAAwB;KACtC,CAAC,CAAA;AACH,CAAC,CAAA;AAED,MAAM,uBAAuB,GAAG,UAAa,KAAc;IAC1D,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE;QAChC,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,mBAAmB;QAChC,YAAY,EAAE,+BAA+B;KAC7C,CAAC,CAAA;AACH,CAAC,CAAA;AAED,OAAO,EACN,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,4BAA4B,EAC5B,eAAe,EACf,uBAAuB,GACvB,CAAA"}
@@ -0,0 +1 @@
1
+ export {};