craftdesk 0.2.0 → 0.4.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.
- package/CHANGELOG.md +57 -0
- package/README.md +968 -92
- package/dist/commands/add.d.ts +5 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +303 -7
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/convert.d.ts +8 -0
- package/dist/commands/convert.d.ts.map +1 -0
- package/dist/commands/convert.js +146 -0
- package/dist/commands/convert.js.map +1 -0
- package/dist/commands/info.d.ts +8 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +66 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +9 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.d.ts +5 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +24 -4
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/list.d.ts +5 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +72 -7
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/login.d.ts +8 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +158 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +8 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +51 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/outdated.d.ts +23 -0
- package/dist/commands/outdated.d.ts.map +1 -0
- package/dist/commands/outdated.js +268 -0
- package/dist/commands/outdated.js.map +1 -0
- package/dist/commands/publish.d.ts +8 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +198 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/remove.d.ts +5 -0
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +52 -11
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/search.d.ts +8 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +60 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/update.d.ts +8 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +369 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/whoami.d.ts +8 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +58 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/converters/base-converter.d.ts +89 -0
- package/dist/converters/base-converter.d.ts.map +1 -0
- package/dist/converters/base-converter.js +249 -0
- package/dist/converters/base-converter.js.map +1 -0
- package/dist/converters/continue-converter.d.ts +53 -0
- package/dist/converters/continue-converter.d.ts.map +1 -0
- package/dist/converters/continue-converter.js +243 -0
- package/dist/converters/continue-converter.js.map +1 -0
- package/dist/converters/cursor-converter.d.ts +70 -0
- package/dist/converters/cursor-converter.d.ts.map +1 -0
- package/dist/converters/cursor-converter.js +272 -0
- package/dist/converters/cursor-converter.js.map +1 -0
- package/dist/index.js +35 -4
- package/dist/index.js.map +1 -1
- package/dist/services/config-manager.d.ts +128 -10
- package/dist/services/config-manager.d.ts.map +1 -1
- package/dist/services/config-manager.js +189 -18
- package/dist/services/config-manager.js.map +1 -1
- package/dist/services/converter.d.ts +53 -0
- package/dist/services/converter.d.ts.map +1 -0
- package/dist/services/converter.js +185 -0
- package/dist/services/converter.js.map +1 -0
- package/dist/services/craft-wrapper.d.ts +108 -0
- package/dist/services/craft-wrapper.d.ts.map +1 -0
- package/dist/services/craft-wrapper.js +268 -0
- package/dist/services/craft-wrapper.js.map +1 -0
- package/dist/services/git-resolver.d.ts +9 -3
- package/dist/services/git-resolver.d.ts.map +1 -1
- package/dist/services/git-resolver.js +35 -10
- package/dist/services/git-resolver.js.map +1 -1
- package/dist/services/installer.d.ts +51 -1
- package/dist/services/installer.d.ts.map +1 -1
- package/dist/services/installer.js +245 -14
- package/dist/services/installer.js.map +1 -1
- package/dist/services/plugin-resolver.d.ts +80 -0
- package/dist/services/plugin-resolver.d.ts.map +1 -0
- package/dist/services/plugin-resolver.js +182 -0
- package/dist/services/plugin-resolver.js.map +1 -0
- package/dist/services/registry-client.d.ts +132 -5
- package/dist/services/registry-client.d.ts.map +1 -1
- package/dist/services/registry-client.js +239 -34
- package/dist/services/registry-client.js.map +1 -1
- package/dist/services/settings-manager.d.ts +151 -0
- package/dist/services/settings-manager.d.ts.map +1 -0
- package/dist/services/settings-manager.js +333 -0
- package/dist/services/settings-manager.js.map +1 -0
- package/dist/types/claude-settings.d.ts +155 -0
- package/dist/types/claude-settings.d.ts.map +1 -0
- package/dist/types/claude-settings.js +20 -0
- package/dist/types/claude-settings.js.map +1 -0
- package/dist/types/converter.d.ts +98 -0
- package/dist/types/converter.d.ts.map +1 -0
- package/dist/types/converter.js +6 -0
- package/dist/types/converter.js.map +1 -0
- package/dist/types/craftdesk-json.d.ts +63 -3
- package/dist/types/craftdesk-json.d.ts.map +1 -1
- package/dist/types/craftdesk-lock.d.ts +62 -1
- package/dist/types/craftdesk-lock.d.ts.map +1 -1
- package/dist/utils/crypto.d.ts +23 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +52 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/file-system.d.ts +43 -0
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +45 -2
- package/dist/utils/file-system.js.map +1 -1
- package/dist/utils/logger.d.ts +75 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +76 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/version-utils.d.ts +63 -0
- package/dist/utils/version-utils.d.ts.map +1 -0
- package/dist/utils/version-utils.js +130 -0
- package/dist/utils/version-utils.js.map +1 -0
- package/package.json +36 -9
- package/.claude/settings.local.json +0 -17
- package/.github/workflows/ci.yml +0 -94
- package/API.md +0 -414
- package/TESTING.md +0 -263
- package/dist/commands/config.d.ts +0 -3
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js +0 -56
- package/dist/commands/config.js.map +0 -1
- package/dist/types/config.d.ts +0 -17
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/config.js +0 -3
- package/dist/types/config.js.map +0 -1
- package/docs/DEPENDENCY_RESOLUTION.md +0 -237
- package/examples/craftdesk-all-sources.json +0 -79
- package/examples/craftdesk-git-monorepo.json +0 -41
- package/examples/craftdesk-multi-registry.json +0 -40
- package/examples/craftdesk-with-registries.json +0 -49
- package/examples/simple-craftdesk.json +0 -10
- package/src/commands/add.ts +0 -314
- package/src/commands/init.ts +0 -55
- package/src/commands/install.ts +0 -126
- package/src/commands/list.ts +0 -126
- package/src/commands/remove.ts +0 -82
- package/src/index.ts +0 -56
- package/src/services/config-manager.ts +0 -150
- package/src/services/git-resolver.ts +0 -370
- package/src/services/installer.ts +0 -314
- package/src/services/registry-client.ts +0 -163
- package/src/types/craftdesk-json.ts +0 -53
- package/src/types/craftdesk-lock.ts +0 -38
- package/src/utils/file-system.ts +0 -55
- package/src/utils/logger.ts +0 -82
- package/tests/fixtures/craftdesk-git.json +0 -17
- package/tests/fixtures/craftdesk.json +0 -15
- package/tests/helpers/test-utils.ts +0 -60
- package/tests/integration/init-command.test.ts +0 -70
- package/tests/integration/list-command.test.ts +0 -77
- package/tests/unit/config-manager.test.ts +0 -228
- package/tests/unit/git-resolver.test.ts +0 -303
- package/tests/unit/installer.test.ts +0 -105
- package/tsconfig.json +0 -20
- package/vitest.config.ts +0 -29
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createWhoamiCommand = createWhoamiCommand;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const config_manager_1 = require("../services/config-manager");
|
|
6
|
+
const registry_client_1 = require("../services/registry-client");
|
|
7
|
+
const logger_1 = require("../utils/logger");
|
|
8
|
+
/**
|
|
9
|
+
* Creates the whoami command for displaying the currently authenticated user.
|
|
10
|
+
*
|
|
11
|
+
* @returns The configured Commander command instance
|
|
12
|
+
*/
|
|
13
|
+
function createWhoamiCommand() {
|
|
14
|
+
return new commander_1.Command('whoami')
|
|
15
|
+
.description('Display the currently logged in user')
|
|
16
|
+
.option('--registry <url>', 'Registry URL to check')
|
|
17
|
+
.action(async (options) => {
|
|
18
|
+
await whoamiCommand(options);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
async function whoamiCommand(options) {
|
|
22
|
+
try {
|
|
23
|
+
// 1. Get registry URL
|
|
24
|
+
const registryUrl = options.registry || await config_manager_1.configManager.getDefaultRegistry();
|
|
25
|
+
if (!registryUrl) {
|
|
26
|
+
logger_1.logger.error('No registry configured.');
|
|
27
|
+
logger_1.logger.info('Either specify --registry <url> or add a default registry to craftdesk.json');
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
// 2. Get token from config
|
|
31
|
+
const token = await config_manager_1.configManager.getAuthToken(registryUrl);
|
|
32
|
+
if (!token) {
|
|
33
|
+
logger_1.logger.info('Not logged in');
|
|
34
|
+
logger_1.logger.info(`Run "craftdesk login --registry ${registryUrl}" to authenticate`);
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
// 3. Verify token and get user info
|
|
38
|
+
const userInfo = await registry_client_1.registryClient.verifyToken(registryUrl, token);
|
|
39
|
+
// 4. Display user info
|
|
40
|
+
logger_1.logger.log(userInfo.username);
|
|
41
|
+
if (userInfo.organization) {
|
|
42
|
+
logger_1.logger.info(`Organization: ${userInfo.organization}`);
|
|
43
|
+
}
|
|
44
|
+
logger_1.logger.info(`Registry: ${registryUrl}`);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
48
|
+
if (message.includes('Invalid') || message.includes('expired')) {
|
|
49
|
+
logger_1.logger.error('Token is invalid or expired');
|
|
50
|
+
logger_1.logger.info('Run "craftdesk login" to re-authenticate');
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
logger_1.logger.error(message);
|
|
54
|
+
}
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=whoami.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":";;AAcA,kDAOC;AArBD,yCAAoC;AACpC,+DAA2D;AAC3D,iEAA6D;AAC7D,4CAAyC;AAMzC;;;;GAIG;AACH,SAAgB,mBAAmB;IACjC,OAAO,IAAI,mBAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,OAAsB,EAAE,EAAE;QACvC,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAsB;IACjD,IAAI,CAAC;QACH,sBAAsB;QACtB,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,8BAAa,CAAC,kBAAkB,EAAE,CAAC;QAEjF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,eAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACxC,eAAM,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;YAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,2BAA2B;QAC3B,MAAM,KAAK,GAAG,MAAM,8BAAa,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAE5D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,eAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC7B,eAAM,CAAC,IAAI,CAAC,mCAAmC,WAAW,mBAAmB,CAAC,CAAC;YAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,oCAAoC;QACpC,MAAM,QAAQ,GAAG,MAAM,gCAAc,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAEtE,uBAAuB;QACvB,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE9B,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC1B,eAAM,CAAC,IAAI,CAAC,iBAAiB,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,eAAM,CAAC,IAAI,CAAC,aAAa,WAAW,EAAE,CAAC,CAAC;IAE1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/D,eAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC5C,eAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,eAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { CraftContent, ConvertedContent, ConversionOptions, ConversionResult, ConverterMetadata } from '../types/converter';
|
|
2
|
+
/**
|
|
3
|
+
* Base class for format converters
|
|
4
|
+
* Provides common functionality for converting CraftDesk crafts to other formats
|
|
5
|
+
*/
|
|
6
|
+
export declare abstract class BaseConverter {
|
|
7
|
+
protected options: ConversionOptions;
|
|
8
|
+
constructor(options: ConversionOptions);
|
|
9
|
+
/**
|
|
10
|
+
* Get metadata about this converter
|
|
11
|
+
*/
|
|
12
|
+
abstract getMetadata(): ConverterMetadata;
|
|
13
|
+
/**
|
|
14
|
+
* Convert craft to target format
|
|
15
|
+
* Subclasses must implement this method
|
|
16
|
+
*
|
|
17
|
+
* @param craft - The craft content to convert
|
|
18
|
+
* @returns Array of converted file contents
|
|
19
|
+
*/
|
|
20
|
+
abstract convert(craft: CraftContent): Promise<ConvertedContent[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Perform the full conversion with validation and error handling
|
|
23
|
+
*
|
|
24
|
+
* @param craft - The craft content to convert
|
|
25
|
+
* @returns Conversion result with success status and any errors
|
|
26
|
+
*/
|
|
27
|
+
convertWithValidation(craft: CraftContent): Promise<ConversionResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Extract code examples from markdown content
|
|
30
|
+
*
|
|
31
|
+
* @param markdown - Markdown content to parse
|
|
32
|
+
* @returns Array of code examples with optional language and description
|
|
33
|
+
*/
|
|
34
|
+
protected extractExamples(markdown: string): Array<{
|
|
35
|
+
language?: string;
|
|
36
|
+
code: string;
|
|
37
|
+
description?: string;
|
|
38
|
+
}>;
|
|
39
|
+
/**
|
|
40
|
+
* Extract a section from markdown by heading
|
|
41
|
+
*
|
|
42
|
+
* @param markdown - Markdown content to parse
|
|
43
|
+
* @param headingPattern - Regular expression to match section heading
|
|
44
|
+
* @returns Section content or undefined if not found
|
|
45
|
+
*/
|
|
46
|
+
protected extractSection(markdown: string, headingPattern: RegExp): string | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Extract all sections from markdown
|
|
49
|
+
*
|
|
50
|
+
* @param markdown - Markdown content to parse
|
|
51
|
+
* @returns Record of section names to content
|
|
52
|
+
*/
|
|
53
|
+
protected extractAllSections(markdown: string): Record<string, string>;
|
|
54
|
+
/**
|
|
55
|
+
* Clean markdown content by removing certain elements
|
|
56
|
+
*
|
|
57
|
+
* @param markdown - Markdown content to clean
|
|
58
|
+
* @param options - Cleaning options
|
|
59
|
+
* @param options.removeFrontmatter - Whether to remove YAML frontmatter
|
|
60
|
+
* @returns Cleaned markdown content
|
|
61
|
+
*/
|
|
62
|
+
protected cleanMarkdown(markdown: string, options?: {
|
|
63
|
+
removeFrontmatter?: boolean;
|
|
64
|
+
}): string;
|
|
65
|
+
/**
|
|
66
|
+
* Extract best practices from content
|
|
67
|
+
*
|
|
68
|
+
* @param sections - Parsed markdown sections
|
|
69
|
+
* @returns Array of best practice strings
|
|
70
|
+
*/
|
|
71
|
+
protected extractBestPractices(sections: Record<string, string>): string[];
|
|
72
|
+
/**
|
|
73
|
+
* Extract common pitfalls/mistakes from content
|
|
74
|
+
*
|
|
75
|
+
* @param sections - Parsed markdown sections
|
|
76
|
+
* @returns Array of pitfalls with mistake and solution
|
|
77
|
+
*/
|
|
78
|
+
protected extractPitfalls(sections: Record<string, string>): Array<{
|
|
79
|
+
mistake: string;
|
|
80
|
+
solution: string;
|
|
81
|
+
}>;
|
|
82
|
+
/**
|
|
83
|
+
* Get default output directory for this converter
|
|
84
|
+
*
|
|
85
|
+
* @returns Default output directory path
|
|
86
|
+
*/
|
|
87
|
+
getDefaultOutputDir(): string;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=base-converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-converter.d.ts","sourceRoot":"","sources":["../../src/converters/base-converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AACH,8BAAsB,aAAa;IACjC,SAAS,CAAC,OAAO,EAAE,iBAAiB,CAAC;gBAEzB,OAAO,EAAE,iBAAiB;IAItC;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,iBAAiB;IAEzC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAElE;;;;;OAKG;IACG,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmD3E;;;;;OAKG;IACH,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAgB7G;;;;;;OAMG;IACH,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAgCtF;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAmDtE;;;;;;;OAOG;IACH,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,MAAM;IAchG;;;;;OAKG;IACH,SAAS,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE;IAuB1E;;;;;OAKG;IACH,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAuBzG;;;;OAIG;IACH,mBAAmB,IAAI,MAAM;CAG9B"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseConverter = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Base class for format converters
|
|
6
|
+
* Provides common functionality for converting CraftDesk crafts to other formats
|
|
7
|
+
*/
|
|
8
|
+
class BaseConverter {
|
|
9
|
+
options;
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.options = options;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Perform the full conversion with validation and error handling
|
|
15
|
+
*
|
|
16
|
+
* @param craft - The craft content to convert
|
|
17
|
+
* @returns Conversion result with success status and any errors
|
|
18
|
+
*/
|
|
19
|
+
async convertWithValidation(craft) {
|
|
20
|
+
const metadata = this.getMetadata();
|
|
21
|
+
const errors = [];
|
|
22
|
+
const warnings = [];
|
|
23
|
+
try {
|
|
24
|
+
// Validate craft type is supported
|
|
25
|
+
if (!metadata.supportedTypes.includes(craft.type)) {
|
|
26
|
+
errors.push(`Craft type '${craft.type}' is not supported for ${metadata.targetFormat} format. ` +
|
|
27
|
+
`Supported types: ${metadata.supportedTypes.join(', ')}`);
|
|
28
|
+
return {
|
|
29
|
+
success: false,
|
|
30
|
+
files: [],
|
|
31
|
+
errors,
|
|
32
|
+
warnings,
|
|
33
|
+
sourceFormat: 'claude',
|
|
34
|
+
targetFormat: metadata.targetFormat
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
// Perform conversion
|
|
38
|
+
const files = await this.convert(craft);
|
|
39
|
+
// Validate output
|
|
40
|
+
if (files.length === 0) {
|
|
41
|
+
warnings.push('Conversion produced no output files');
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
success: true,
|
|
45
|
+
files,
|
|
46
|
+
errors,
|
|
47
|
+
warnings,
|
|
48
|
+
sourceFormat: 'claude',
|
|
49
|
+
targetFormat: metadata.targetFormat
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
errors.push(`Conversion failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
54
|
+
return {
|
|
55
|
+
success: false,
|
|
56
|
+
files: [],
|
|
57
|
+
errors,
|
|
58
|
+
warnings,
|
|
59
|
+
sourceFormat: 'claude',
|
|
60
|
+
targetFormat: metadata.targetFormat
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Extract code examples from markdown content
|
|
66
|
+
*
|
|
67
|
+
* @param markdown - Markdown content to parse
|
|
68
|
+
* @returns Array of code examples with optional language and description
|
|
69
|
+
*/
|
|
70
|
+
extractExamples(markdown) {
|
|
71
|
+
const examples = [];
|
|
72
|
+
const codeBlockRegex = /```(\w+)?\n([\s\S]*?)```/g;
|
|
73
|
+
let match;
|
|
74
|
+
while ((match = codeBlockRegex.exec(markdown)) !== null) {
|
|
75
|
+
examples.push({
|
|
76
|
+
language: match[1] || undefined,
|
|
77
|
+
code: match[2].trim(),
|
|
78
|
+
description: undefined
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return examples;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Extract a section from markdown by heading
|
|
85
|
+
*
|
|
86
|
+
* @param markdown - Markdown content to parse
|
|
87
|
+
* @param headingPattern - Regular expression to match section heading
|
|
88
|
+
* @returns Section content or undefined if not found
|
|
89
|
+
*/
|
|
90
|
+
extractSection(markdown, headingPattern) {
|
|
91
|
+
const lines = markdown.split('\n');
|
|
92
|
+
let inSection = false;
|
|
93
|
+
let sectionLines = [];
|
|
94
|
+
let sectionLevel = null;
|
|
95
|
+
for (const line of lines) {
|
|
96
|
+
const headingMatch = line.match(/^(#{1,6})\s+(.+)$/);
|
|
97
|
+
if (headingMatch) {
|
|
98
|
+
const level = headingMatch[1].length;
|
|
99
|
+
const title = headingMatch[2].trim();
|
|
100
|
+
if (!inSection && headingPattern.test(title)) {
|
|
101
|
+
// Found the target section
|
|
102
|
+
inSection = true;
|
|
103
|
+
sectionLevel = level;
|
|
104
|
+
continue; // Don't include the heading itself
|
|
105
|
+
}
|
|
106
|
+
else if (inSection && sectionLevel !== null && level <= sectionLevel) {
|
|
107
|
+
// Reached a heading at same or higher level - end of section
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (inSection) {
|
|
112
|
+
sectionLines.push(line);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return sectionLines.length > 0 ? sectionLines.join('\n').trim() : undefined;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Extract all sections from markdown
|
|
119
|
+
*
|
|
120
|
+
* @param markdown - Markdown content to parse
|
|
121
|
+
* @returns Record of section names to content
|
|
122
|
+
*/
|
|
123
|
+
extractAllSections(markdown) {
|
|
124
|
+
const sections = {};
|
|
125
|
+
const lines = markdown.split('\n');
|
|
126
|
+
let currentSection = null;
|
|
127
|
+
let currentLines = [];
|
|
128
|
+
let currentLevel = null;
|
|
129
|
+
// Skip frontmatter if present
|
|
130
|
+
let startIndex = 0;
|
|
131
|
+
if (lines[0] === '---') {
|
|
132
|
+
const endIndex = lines.findIndex((line, i) => i > 0 && line === '---');
|
|
133
|
+
if (endIndex !== -1) {
|
|
134
|
+
startIndex = endIndex + 1;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
for (let i = startIndex; i < lines.length; i++) {
|
|
138
|
+
const line = lines[i];
|
|
139
|
+
const headingMatch = line.match(/^(#{1,6})\s+(.+)$/);
|
|
140
|
+
if (headingMatch) {
|
|
141
|
+
const level = headingMatch[1].length;
|
|
142
|
+
const title = headingMatch[2].trim();
|
|
143
|
+
// Save previous section
|
|
144
|
+
if (currentSection && currentLines.length > 0) {
|
|
145
|
+
sections[currentSection] = currentLines.join('\n').trim();
|
|
146
|
+
}
|
|
147
|
+
// Start new section (only for level 2 headings to avoid nesting issues)
|
|
148
|
+
if (level === 2) {
|
|
149
|
+
currentSection = title.toLowerCase().replace(/[^\w\s]/g, '').replace(/\s+/g, '-');
|
|
150
|
+
currentLines = [];
|
|
151
|
+
currentLevel = level;
|
|
152
|
+
}
|
|
153
|
+
else if (currentSection && currentLevel !== null && level > currentLevel) {
|
|
154
|
+
// This is a subsection, include it in current section
|
|
155
|
+
currentLines.push(line);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else if (currentSection) {
|
|
159
|
+
currentLines.push(line);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Save last section
|
|
163
|
+
if (currentSection && currentLines.length > 0) {
|
|
164
|
+
sections[currentSection] = currentLines.join('\n').trim();
|
|
165
|
+
}
|
|
166
|
+
return sections;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Clean markdown content by removing certain elements
|
|
170
|
+
*
|
|
171
|
+
* @param markdown - Markdown content to clean
|
|
172
|
+
* @param options - Cleaning options
|
|
173
|
+
* @param options.removeFrontmatter - Whether to remove YAML frontmatter
|
|
174
|
+
* @returns Cleaned markdown content
|
|
175
|
+
*/
|
|
176
|
+
cleanMarkdown(markdown, options = {}) {
|
|
177
|
+
let cleaned = markdown;
|
|
178
|
+
// Remove frontmatter
|
|
179
|
+
if (options.removeFrontmatter !== false) {
|
|
180
|
+
cleaned = cleaned.replace(/^---\n[\s\S]*?\n---\n/, '');
|
|
181
|
+
}
|
|
182
|
+
// Trim whitespace
|
|
183
|
+
cleaned = cleaned.trim();
|
|
184
|
+
return cleaned;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Extract best practices from content
|
|
188
|
+
*
|
|
189
|
+
* @param sections - Parsed markdown sections
|
|
190
|
+
* @returns Array of best practice strings
|
|
191
|
+
*/
|
|
192
|
+
extractBestPractices(sections) {
|
|
193
|
+
const practices = [];
|
|
194
|
+
const bestPracticesSection = sections['best-practices'] || sections['production-tips'] || '';
|
|
195
|
+
if (bestPracticesSection) {
|
|
196
|
+
// Extract bullet points
|
|
197
|
+
const lines = bestPracticesSection.split('\n');
|
|
198
|
+
for (const line of lines) {
|
|
199
|
+
const match = line.match(/^[\s-]*\*\*(.+?)\*\*:?\s*(.+)$/);
|
|
200
|
+
if (match) {
|
|
201
|
+
practices.push(`${match[1]}: ${match[2]}`);
|
|
202
|
+
}
|
|
203
|
+
else if (line.trim().startsWith('-') || line.trim().startsWith('*')) {
|
|
204
|
+
const cleaned = line.trim().replace(/^[-*]\s*/, '');
|
|
205
|
+
if (cleaned) {
|
|
206
|
+
practices.push(cleaned);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return practices;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Extract common pitfalls/mistakes from content
|
|
215
|
+
*
|
|
216
|
+
* @param sections - Parsed markdown sections
|
|
217
|
+
* @returns Array of pitfalls with mistake and solution
|
|
218
|
+
*/
|
|
219
|
+
extractPitfalls(sections) {
|
|
220
|
+
const pitfalls = [];
|
|
221
|
+
const pitfallsSection = sections['common-pitfalls'] || sections['common-mistakes'] || '';
|
|
222
|
+
if (pitfallsSection) {
|
|
223
|
+
// Look for mistake/solution patterns
|
|
224
|
+
const lines = pitfallsSection.split('\n');
|
|
225
|
+
let currentMistake = null;
|
|
226
|
+
for (const line of lines) {
|
|
227
|
+
if (line.includes('❌') || line.toLowerCase().includes('mistake:')) {
|
|
228
|
+
currentMistake = line.replace(/^[\s-]*[❌*-]\s*/, '').replace(/\*\*/g, '');
|
|
229
|
+
}
|
|
230
|
+
else if (currentMistake && (line.includes('✓') || line.toLowerCase().includes('instead:'))) {
|
|
231
|
+
const solution = line.replace(/^[\s-]*[✓*-]\s*/, '').replace(/\*\*/g, '');
|
|
232
|
+
pitfalls.push({ mistake: currentMistake, solution });
|
|
233
|
+
currentMistake = null;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return pitfalls;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Get default output directory for this converter
|
|
241
|
+
*
|
|
242
|
+
* @returns Default output directory path
|
|
243
|
+
*/
|
|
244
|
+
getDefaultOutputDir() {
|
|
245
|
+
return this.options.outputDir || this.getMetadata().defaultOutputDir;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
exports.BaseConverter = BaseConverter;
|
|
249
|
+
//# sourceMappingURL=base-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-converter.js","sourceRoot":"","sources":["../../src/converters/base-converter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { BaseConverter } from './base-converter';
|
|
2
|
+
import type { CraftContent, ConvertedContent, ConverterMetadata } from '../types/converter';
|
|
3
|
+
/**
|
|
4
|
+
* Converts CraftDesk crafts to Continue.dev prompt format
|
|
5
|
+
* https://docs.continue.dev/customize/deep-dives/prompts
|
|
6
|
+
*/
|
|
7
|
+
export declare class ContinueConverter extends BaseConverter {
|
|
8
|
+
/**
|
|
9
|
+
* Get converter metadata
|
|
10
|
+
*
|
|
11
|
+
* @returns Converter metadata
|
|
12
|
+
*/
|
|
13
|
+
getMetadata(): ConverterMetadata;
|
|
14
|
+
/**
|
|
15
|
+
* Convert craft to Continue.dev format
|
|
16
|
+
*
|
|
17
|
+
* @param craft - Craft content to convert
|
|
18
|
+
* @returns Array of converted files (prompt + rule)
|
|
19
|
+
*/
|
|
20
|
+
convert(craft: CraftContent): Promise<ConvertedContent[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Build Continue.dev prompt file content
|
|
23
|
+
*
|
|
24
|
+
* @param craft - Craft content
|
|
25
|
+
* @param sections - Parsed markdown sections
|
|
26
|
+
* @returns Formatted Continue prompt file content
|
|
27
|
+
*/
|
|
28
|
+
private buildContinuePrompt;
|
|
29
|
+
/**
|
|
30
|
+
* Build Continue.dev rule file content
|
|
31
|
+
* Rules are applied automatically, prompts are invoked manually
|
|
32
|
+
*
|
|
33
|
+
* @param craft - Craft content
|
|
34
|
+
* @param sections - Parsed markdown sections
|
|
35
|
+
* @returns Formatted Continue rule file content
|
|
36
|
+
*/
|
|
37
|
+
private buildContinueRule;
|
|
38
|
+
/**
|
|
39
|
+
* Format craft name for Continue (camelCase for name field)
|
|
40
|
+
*
|
|
41
|
+
* @param name - Craft name in kebab-case
|
|
42
|
+
* @returns Formatted name in camelCase
|
|
43
|
+
*/
|
|
44
|
+
private formatName;
|
|
45
|
+
/**
|
|
46
|
+
* Format craft name into readable title
|
|
47
|
+
*
|
|
48
|
+
* @param name - Craft name in kebab-case
|
|
49
|
+
* @returns Formatted title with capitalized words
|
|
50
|
+
*/
|
|
51
|
+
private formatTitle;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=continue-converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continue-converter.d.ts","sourceRoot":"","sources":["../../src/converters/continue-converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5F;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;IAClD;;;;OAIG;IACH,WAAW,IAAI,iBAAiB;IAUhC;;;;;OAKG;IACG,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA8B/D;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAsH3B;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;IAqDzB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAKlB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;CAMpB"}
|