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.
Files changed (175) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +968 -92
  3. package/dist/commands/add.d.ts +5 -0
  4. package/dist/commands/add.d.ts.map +1 -1
  5. package/dist/commands/add.js +303 -7
  6. package/dist/commands/add.js.map +1 -1
  7. package/dist/commands/convert.d.ts +8 -0
  8. package/dist/commands/convert.d.ts.map +1 -0
  9. package/dist/commands/convert.js +146 -0
  10. package/dist/commands/convert.js.map +1 -0
  11. package/dist/commands/info.d.ts +8 -0
  12. package/dist/commands/info.d.ts.map +1 -0
  13. package/dist/commands/info.js +66 -0
  14. package/dist/commands/info.js.map +1 -0
  15. package/dist/commands/init.d.ts +5 -0
  16. package/dist/commands/init.d.ts.map +1 -1
  17. package/dist/commands/init.js +9 -3
  18. package/dist/commands/init.js.map +1 -1
  19. package/dist/commands/install.d.ts +5 -0
  20. package/dist/commands/install.d.ts.map +1 -1
  21. package/dist/commands/install.js +24 -4
  22. package/dist/commands/install.js.map +1 -1
  23. package/dist/commands/list.d.ts +5 -0
  24. package/dist/commands/list.d.ts.map +1 -1
  25. package/dist/commands/list.js +72 -7
  26. package/dist/commands/list.js.map +1 -1
  27. package/dist/commands/login.d.ts +8 -0
  28. package/dist/commands/login.d.ts.map +1 -0
  29. package/dist/commands/login.js +158 -0
  30. package/dist/commands/login.js.map +1 -0
  31. package/dist/commands/logout.d.ts +8 -0
  32. package/dist/commands/logout.d.ts.map +1 -0
  33. package/dist/commands/logout.js +51 -0
  34. package/dist/commands/logout.js.map +1 -0
  35. package/dist/commands/outdated.d.ts +23 -0
  36. package/dist/commands/outdated.d.ts.map +1 -0
  37. package/dist/commands/outdated.js +268 -0
  38. package/dist/commands/outdated.js.map +1 -0
  39. package/dist/commands/publish.d.ts +8 -0
  40. package/dist/commands/publish.d.ts.map +1 -0
  41. package/dist/commands/publish.js +198 -0
  42. package/dist/commands/publish.js.map +1 -0
  43. package/dist/commands/remove.d.ts +5 -0
  44. package/dist/commands/remove.d.ts.map +1 -1
  45. package/dist/commands/remove.js +52 -11
  46. package/dist/commands/remove.js.map +1 -1
  47. package/dist/commands/search.d.ts +8 -0
  48. package/dist/commands/search.d.ts.map +1 -0
  49. package/dist/commands/search.js +60 -0
  50. package/dist/commands/search.js.map +1 -0
  51. package/dist/commands/update.d.ts +8 -0
  52. package/dist/commands/update.d.ts.map +1 -0
  53. package/dist/commands/update.js +369 -0
  54. package/dist/commands/update.js.map +1 -0
  55. package/dist/commands/whoami.d.ts +8 -0
  56. package/dist/commands/whoami.d.ts.map +1 -0
  57. package/dist/commands/whoami.js +58 -0
  58. package/dist/commands/whoami.js.map +1 -0
  59. package/dist/converters/base-converter.d.ts +89 -0
  60. package/dist/converters/base-converter.d.ts.map +1 -0
  61. package/dist/converters/base-converter.js +249 -0
  62. package/dist/converters/base-converter.js.map +1 -0
  63. package/dist/converters/continue-converter.d.ts +53 -0
  64. package/dist/converters/continue-converter.d.ts.map +1 -0
  65. package/dist/converters/continue-converter.js +243 -0
  66. package/dist/converters/continue-converter.js.map +1 -0
  67. package/dist/converters/cursor-converter.d.ts +70 -0
  68. package/dist/converters/cursor-converter.d.ts.map +1 -0
  69. package/dist/converters/cursor-converter.js +272 -0
  70. package/dist/converters/cursor-converter.js.map +1 -0
  71. package/dist/index.js +35 -4
  72. package/dist/index.js.map +1 -1
  73. package/dist/services/config-manager.d.ts +128 -10
  74. package/dist/services/config-manager.d.ts.map +1 -1
  75. package/dist/services/config-manager.js +189 -18
  76. package/dist/services/config-manager.js.map +1 -1
  77. package/dist/services/converter.d.ts +53 -0
  78. package/dist/services/converter.d.ts.map +1 -0
  79. package/dist/services/converter.js +185 -0
  80. package/dist/services/converter.js.map +1 -0
  81. package/dist/services/craft-wrapper.d.ts +108 -0
  82. package/dist/services/craft-wrapper.d.ts.map +1 -0
  83. package/dist/services/craft-wrapper.js +268 -0
  84. package/dist/services/craft-wrapper.js.map +1 -0
  85. package/dist/services/git-resolver.d.ts +9 -3
  86. package/dist/services/git-resolver.d.ts.map +1 -1
  87. package/dist/services/git-resolver.js +35 -10
  88. package/dist/services/git-resolver.js.map +1 -1
  89. package/dist/services/installer.d.ts +51 -1
  90. package/dist/services/installer.d.ts.map +1 -1
  91. package/dist/services/installer.js +245 -14
  92. package/dist/services/installer.js.map +1 -1
  93. package/dist/services/plugin-resolver.d.ts +80 -0
  94. package/dist/services/plugin-resolver.d.ts.map +1 -0
  95. package/dist/services/plugin-resolver.js +182 -0
  96. package/dist/services/plugin-resolver.js.map +1 -0
  97. package/dist/services/registry-client.d.ts +132 -5
  98. package/dist/services/registry-client.d.ts.map +1 -1
  99. package/dist/services/registry-client.js +239 -34
  100. package/dist/services/registry-client.js.map +1 -1
  101. package/dist/services/settings-manager.d.ts +151 -0
  102. package/dist/services/settings-manager.d.ts.map +1 -0
  103. package/dist/services/settings-manager.js +333 -0
  104. package/dist/services/settings-manager.js.map +1 -0
  105. package/dist/types/claude-settings.d.ts +155 -0
  106. package/dist/types/claude-settings.d.ts.map +1 -0
  107. package/dist/types/claude-settings.js +20 -0
  108. package/dist/types/claude-settings.js.map +1 -0
  109. package/dist/types/converter.d.ts +98 -0
  110. package/dist/types/converter.d.ts.map +1 -0
  111. package/dist/types/converter.js +6 -0
  112. package/dist/types/converter.js.map +1 -0
  113. package/dist/types/craftdesk-json.d.ts +63 -3
  114. package/dist/types/craftdesk-json.d.ts.map +1 -1
  115. package/dist/types/craftdesk-lock.d.ts +62 -1
  116. package/dist/types/craftdesk-lock.d.ts.map +1 -1
  117. package/dist/utils/crypto.d.ts +23 -0
  118. package/dist/utils/crypto.d.ts.map +1 -0
  119. package/dist/utils/crypto.js +52 -0
  120. package/dist/utils/crypto.js.map +1 -0
  121. package/dist/utils/file-system.d.ts +43 -0
  122. package/dist/utils/file-system.d.ts.map +1 -1
  123. package/dist/utils/file-system.js +45 -2
  124. package/dist/utils/file-system.js.map +1 -1
  125. package/dist/utils/logger.d.ts +75 -0
  126. package/dist/utils/logger.d.ts.map +1 -1
  127. package/dist/utils/logger.js +76 -1
  128. package/dist/utils/logger.js.map +1 -1
  129. package/dist/utils/version-utils.d.ts +63 -0
  130. package/dist/utils/version-utils.d.ts.map +1 -0
  131. package/dist/utils/version-utils.js +130 -0
  132. package/dist/utils/version-utils.js.map +1 -0
  133. package/package.json +36 -9
  134. package/.claude/settings.local.json +0 -17
  135. package/.github/workflows/ci.yml +0 -94
  136. package/API.md +0 -414
  137. package/TESTING.md +0 -263
  138. package/dist/commands/config.d.ts +0 -3
  139. package/dist/commands/config.d.ts.map +0 -1
  140. package/dist/commands/config.js +0 -56
  141. package/dist/commands/config.js.map +0 -1
  142. package/dist/types/config.d.ts +0 -17
  143. package/dist/types/config.d.ts.map +0 -1
  144. package/dist/types/config.js +0 -3
  145. package/dist/types/config.js.map +0 -1
  146. package/docs/DEPENDENCY_RESOLUTION.md +0 -237
  147. package/examples/craftdesk-all-sources.json +0 -79
  148. package/examples/craftdesk-git-monorepo.json +0 -41
  149. package/examples/craftdesk-multi-registry.json +0 -40
  150. package/examples/craftdesk-with-registries.json +0 -49
  151. package/examples/simple-craftdesk.json +0 -10
  152. package/src/commands/add.ts +0 -314
  153. package/src/commands/init.ts +0 -55
  154. package/src/commands/install.ts +0 -126
  155. package/src/commands/list.ts +0 -126
  156. package/src/commands/remove.ts +0 -82
  157. package/src/index.ts +0 -56
  158. package/src/services/config-manager.ts +0 -150
  159. package/src/services/git-resolver.ts +0 -370
  160. package/src/services/installer.ts +0 -314
  161. package/src/services/registry-client.ts +0 -163
  162. package/src/types/craftdesk-json.ts +0 -53
  163. package/src/types/craftdesk-lock.ts +0 -38
  164. package/src/utils/file-system.ts +0 -55
  165. package/src/utils/logger.ts +0 -82
  166. package/tests/fixtures/craftdesk-git.json +0 -17
  167. package/tests/fixtures/craftdesk.json +0 -15
  168. package/tests/helpers/test-utils.ts +0 -60
  169. package/tests/integration/init-command.test.ts +0 -70
  170. package/tests/integration/list-command.test.ts +0 -77
  171. package/tests/unit/config-manager.test.ts +0 -228
  172. package/tests/unit/git-resolver.test.ts +0 -303
  173. package/tests/unit/installer.test.ts +0 -105
  174. package/tsconfig.json +0 -20
  175. 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":";;;AAQA;;;GAGG;AACH,MAAsB,aAAa;IACvB,OAAO,CAAoB;IAErC,YAAY,OAA0B;QACpC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAgBD;;;;;OAKG;IACH,KAAK,CAAC,qBAAqB,CAAC,KAAmB;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,IAAI,CAAC;YACH,mCAAmC;YACnC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,MAAM,CAAC,IAAI,CACT,eAAe,KAAK,CAAC,IAAI,0BAA0B,QAAQ,CAAC,YAAY,WAAW;oBACnF,oBAAoB,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACzD,CAAC;gBACF,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,EAAE;oBACT,MAAM;oBACN,QAAQ;oBACR,YAAY,EAAE,QAAQ;oBACtB,YAAY,EAAE,QAAQ,CAAC,YAAY;iBACpC,CAAC;YACJ,CAAC;YAED,qBAAqB;YACrB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAExC,kBAAkB;YAClB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,QAAQ,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YACvD,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,KAAK;gBACL,MAAM;gBACN,QAAQ;gBACR,YAAY,EAAE,QAAQ;gBACtB,YAAY,EAAE,QAAQ,CAAC,YAAY;aACpC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,sBAAsB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5F,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,EAAE;gBACT,MAAM;gBACN,QAAQ;gBACR,YAAY,EAAE,QAAQ;gBACtB,YAAY,EAAE,QAAQ,CAAC,YAAY;aACpC,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACO,eAAe,CAAC,QAAgB;QACxC,MAAM,QAAQ,GAAqE,EAAE,CAAC;QACtF,MAAM,cAAc,GAAG,2BAA2B,CAAC;QACnD,IAAI,KAAK,CAAC;QAEV,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACxD,QAAQ,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS;gBAC/B,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBACrB,WAAW,EAAE,SAAS;aACvB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;OAMG;IACO,cAAc,CAAC,QAAgB,EAAE,cAAsB;QAC/D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,YAAY,GAAa,EAAE,CAAC;QAChC,IAAI,YAAY,GAAkB,IAAI,CAAC;QAEvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAErD,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACrC,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAErC,IAAI,CAAC,SAAS,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC7C,2BAA2B;oBAC3B,SAAS,GAAG,IAAI,CAAC;oBACjB,YAAY,GAAG,KAAK,CAAC;oBACrB,SAAS,CAAC,mCAAmC;gBAC/C,CAAC;qBAAM,IAAI,SAAS,IAAI,YAAY,KAAK,IAAI,IAAI,KAAK,IAAI,YAAY,EAAE,CAAC;oBACvE,6DAA6D;oBAC7D,MAAM;gBACR,CAAC;YACH,CAAC;YAED,IAAI,SAAS,EAAE,CAAC;gBACd,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,CAAC;IAED;;;;;OAKG;IACO,kBAAkB,CAAC,QAAgB;QAC3C,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,cAAc,GAAkB,IAAI,CAAC;QACzC,IAAI,YAAY,GAAa,EAAE,CAAC;QAChC,IAAI,YAAY,GAAkB,IAAI,CAAC;QAEvC,8BAA8B;QAC9B,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC;YACvE,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;gBACpB,UAAU,GAAG,QAAQ,GAAG,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAErD,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACrC,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAErC,wBAAwB;gBACxB,IAAI,cAAc,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9C,QAAQ,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5D,CAAC;gBAED,wEAAwE;gBACxE,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;oBAChB,cAAc,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;oBAClF,YAAY,GAAG,EAAE,CAAC;oBAClB,YAAY,GAAG,KAAK,CAAC;gBACvB,CAAC;qBAAM,IAAI,cAAc,IAAI,YAAY,KAAK,IAAI,IAAI,KAAK,GAAG,YAAY,EAAE,CAAC;oBAC3E,sDAAsD;oBACtD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;iBAAM,IAAI,cAAc,EAAE,CAAC;gBAC1B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,IAAI,cAAc,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,QAAQ,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5D,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;;OAOG;IACO,aAAa,CAAC,QAAgB,EAAE,UAA2C,EAAE;QACrF,IAAI,OAAO,GAAG,QAAQ,CAAC;QAEvB,qBAAqB;QACrB,IAAI,OAAO,CAAC,iBAAiB,KAAK,KAAK,EAAE,CAAC;YACxC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,kBAAkB;QAClB,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAEzB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACO,oBAAoB,CAAC,QAAgC;QAC7D,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,oBAAoB,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAE7F,IAAI,oBAAoB,EAAE,CAAC;YACzB,wBAAwB;YACxB,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBAC3D,IAAI,KAAK,EAAE,CAAC;oBACV,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC7C,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;oBACpD,IAAI,OAAO,EAAE,CAAC;wBACZ,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC1B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACO,eAAe,CAAC,QAAgC;QACxD,MAAM,QAAQ,GAAiD,EAAE,CAAC;QAClE,MAAM,eAAe,GAAG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAEzF,IAAI,eAAe,EAAE,CAAC;YACpB,qCAAqC;YACrC,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,cAAc,GAAkB,IAAI,CAAC;YAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;oBAClE,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC5E,CAAC;qBAAM,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;oBAC7F,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBAC1E,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC;oBACrD,cAAc,GAAG,IAAI,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,gBAAgB,CAAC;IACvE,CAAC;CACF;AA5RD,sCA4RC"}
@@ -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"}