mythik-cli 0.1.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 (128) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +4 -0
  3. package/README.md +71 -0
  4. package/dist/api.d.ts +22 -0
  5. package/dist/api.d.ts.map +1 -0
  6. package/dist/api.js +17 -0
  7. package/dist/api.js.map +1 -0
  8. package/dist/cli.d.ts +3 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +519 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/commands/contract.d.ts +12 -0
  13. package/dist/commands/contract.d.ts.map +1 -0
  14. package/dist/commands/contract.js +133 -0
  15. package/dist/commands/contract.js.map +1 -0
  16. package/dist/commands/delete.d.ts +9 -0
  17. package/dist/commands/delete.d.ts.map +1 -0
  18. package/dist/commands/delete.js +46 -0
  19. package/dist/commands/delete.js.map +1 -0
  20. package/dist/commands/diff.d.ts +11 -0
  21. package/dist/commands/diff.d.ts.map +1 -0
  22. package/dist/commands/diff.js +49 -0
  23. package/dist/commands/diff.js.map +1 -0
  24. package/dist/commands/docs.d.ts +15 -0
  25. package/dist/commands/docs.d.ts.map +1 -0
  26. package/dist/commands/docs.js +117 -0
  27. package/dist/commands/docs.js.map +1 -0
  28. package/dist/commands/elements.d.ts +9 -0
  29. package/dist/commands/elements.d.ts.map +1 -0
  30. package/dist/commands/elements.js +48 -0
  31. package/dist/commands/elements.js.map +1 -0
  32. package/dist/commands/envs.d.ts +11 -0
  33. package/dist/commands/envs.d.ts.map +1 -0
  34. package/dist/commands/envs.js +54 -0
  35. package/dist/commands/envs.js.map +1 -0
  36. package/dist/commands/history.d.ts +10 -0
  37. package/dist/commands/history.d.ts.map +1 -0
  38. package/dist/commands/history.js +67 -0
  39. package/dist/commands/history.js.map +1 -0
  40. package/dist/commands/init.d.ts +9 -0
  41. package/dist/commands/init.d.ts.map +1 -0
  42. package/dist/commands/init.js +120 -0
  43. package/dist/commands/init.js.map +1 -0
  44. package/dist/commands/lint.d.ts +9 -0
  45. package/dist/commands/lint.d.ts.map +1 -0
  46. package/dist/commands/lint.js +15 -0
  47. package/dist/commands/lint.js.map +1 -0
  48. package/dist/commands/manifest.d.ts +11 -0
  49. package/dist/commands/manifest.d.ts.map +1 -0
  50. package/dist/commands/manifest.js +48 -0
  51. package/dist/commands/manifest.js.map +1 -0
  52. package/dist/commands/patch.d.ts +12 -0
  53. package/dist/commands/patch.d.ts.map +1 -0
  54. package/dist/commands/patch.js +103 -0
  55. package/dist/commands/patch.js.map +1 -0
  56. package/dist/commands/promote.d.ts +15 -0
  57. package/dist/commands/promote.d.ts.map +1 -0
  58. package/dist/commands/promote.js +83 -0
  59. package/dist/commands/promote.js.map +1 -0
  60. package/dist/commands/pull.d.ts +9 -0
  61. package/dist/commands/pull.d.ts.map +1 -0
  62. package/dist/commands/pull.js +36 -0
  63. package/dist/commands/pull.js.map +1 -0
  64. package/dist/commands/push-bulk.d.ts +11 -0
  65. package/dist/commands/push-bulk.d.ts.map +1 -0
  66. package/dist/commands/push-bulk.js +112 -0
  67. package/dist/commands/push-bulk.js.map +1 -0
  68. package/dist/commands/push.d.ts +19 -0
  69. package/dist/commands/push.d.ts.map +1 -0
  70. package/dist/commands/push.js +102 -0
  71. package/dist/commands/push.js.map +1 -0
  72. package/dist/commands/rollback.d.ts +13 -0
  73. package/dist/commands/rollback.d.ts.map +1 -0
  74. package/dist/commands/rollback.js +78 -0
  75. package/dist/commands/rollback.js.map +1 -0
  76. package/dist/commands/tokens.d.ts +8 -0
  77. package/dist/commands/tokens.d.ts.map +1 -0
  78. package/dist/commands/tokens.js +63 -0
  79. package/dist/commands/tokens.js.map +1 -0
  80. package/dist/commands/validate.d.ts +8 -0
  81. package/dist/commands/validate.d.ts.map +1 -0
  82. package/dist/commands/validate.js +60 -0
  83. package/dist/commands/validate.js.map +1 -0
  84. package/dist/config.d.ts +27 -0
  85. package/dist/config.d.ts.map +1 -0
  86. package/dist/config.js +112 -0
  87. package/dist/config.js.map +1 -0
  88. package/dist/input-resolver.d.ts +22 -0
  89. package/dist/input-resolver.d.ts.map +1 -0
  90. package/dist/input-resolver.js +55 -0
  91. package/dist/input-resolver.js.map +1 -0
  92. package/dist/levenshtein.d.ts +2 -0
  93. package/dist/levenshtein.d.ts.map +1 -0
  94. package/dist/levenshtein.js +2 -0
  95. package/dist/levenshtein.js.map +1 -0
  96. package/dist/lint/code-rules.d.ts +30 -0
  97. package/dist/lint/code-rules.d.ts.map +1 -0
  98. package/dist/lint/code-rules.js +81 -0
  99. package/dist/lint/code-rules.js.map +1 -0
  100. package/dist/lint/format.d.ts +12 -0
  101. package/dist/lint/format.d.ts.map +1 -0
  102. package/dist/lint/format.js +68 -0
  103. package/dist/lint/format.js.map +1 -0
  104. package/dist/lint/orchestrator.d.ts +17 -0
  105. package/dist/lint/orchestrator.d.ts.map +1 -0
  106. package/dist/lint/orchestrator.js +124 -0
  107. package/dist/lint/orchestrator.js.map +1 -0
  108. package/dist/lint/spec-discovery.d.ts +14 -0
  109. package/dist/lint/spec-discovery.d.ts.map +1 -0
  110. package/dist/lint/spec-discovery.js +72 -0
  111. package/dist/lint/spec-discovery.js.map +1 -0
  112. package/dist/lint/types.d.ts +72 -0
  113. package/dist/lint/types.d.ts.map +1 -0
  114. package/dist/lint/types.js +28 -0
  115. package/dist/lint/types.js.map +1 -0
  116. package/dist/output.d.ts +16 -0
  117. package/dist/output.d.ts.map +1 -0
  118. package/dist/output.js +91 -0
  119. package/dist/output.js.map +1 -0
  120. package/dist/stores/resolver.d.ts +12 -0
  121. package/dist/stores/resolver.d.ts.map +1 -0
  122. package/dist/stores/resolver.js +54 -0
  123. package/dist/stores/resolver.js.map +1 -0
  124. package/dist/toon.d.ts +12 -0
  125. package/dist/toon.d.ts.map +1 -0
  126. package/dist/toon.js +27 -0
  127. package/dist/toon.js.map +1 -0
  128. package/package.json +65 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-bulk.d.ts","sourceRoot":"","sources":["../../src/commands/push-bulk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAKxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAuBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CA6GnG"}
@@ -0,0 +1,112 @@
1
+ import { readdir, readFile, stat } from 'node:fs/promises';
2
+ import { join, basename, extname } from 'node:path';
3
+ import { runPush } from './push.js';
4
+ import { formatSuccess, formatError, formatJson, formatWarning } from '../output.js';
5
+ export async function runPushBulk(dirPath, options) {
6
+ let entries;
7
+ try {
8
+ const stats = await stat(dirPath);
9
+ if (!stats.isDirectory()) {
10
+ return errorResult(`"${dirPath}" is not a directory.`, options.json);
11
+ }
12
+ entries = await readdir(dirPath);
13
+ }
14
+ catch (err) {
15
+ return errorResult(`Could not read directory "${dirPath}": ${err.message}`, options.json);
16
+ }
17
+ const jsonFiles = entries.filter((name) => extname(name) === '.json').sort();
18
+ if (jsonFiles.length === 0) {
19
+ return errorResult(`No *.json files found in "${dirPath}".`, options.json);
20
+ }
21
+ const results = [];
22
+ for (const filename of jsonFiles) {
23
+ const id = basename(filename, '.json');
24
+ const filePath = join(dirPath, filename);
25
+ let input;
26
+ try {
27
+ input = (await readFile(filePath, 'utf-8')).trim();
28
+ }
29
+ catch (err) {
30
+ results.push({
31
+ id,
32
+ success: false,
33
+ errors: [{ message: `Could not read file: ${err.message}` }],
34
+ warnings: [],
35
+ elementCount: 0,
36
+ created: false,
37
+ });
38
+ continue;
39
+ }
40
+ // Force per-spec JSON to extract structured shape
41
+ const pushResult = await runPush(id, input, {
42
+ store: options.store,
43
+ json: true,
44
+ force: options.force,
45
+ author: options.author,
46
+ description: options.description,
47
+ });
48
+ let parsed;
49
+ try {
50
+ parsed = JSON.parse(pushResult.output);
51
+ }
52
+ catch {
53
+ parsed = { success: false, errors: [{ message: 'Internal: failed to parse runPush output' }] };
54
+ }
55
+ // success+errors[] are validation errors saved-with-warnings (push.ts:91-93 path).
56
+ // success+warnings[] are prop warnings (push.ts:94 path, added in this Item).
57
+ // failure+errors[] are reject errors.
58
+ const errMessages = parsed.errors ?? [];
59
+ const warnMessages = parsed.warnings ?? [];
60
+ const validationAsWarnings = parsed.success === true ? errMessages : [];
61
+ const validationAsErrors = parsed.success === true ? [] : errMessages;
62
+ results.push({
63
+ id,
64
+ success: parsed.success === true,
65
+ errors: validationAsErrors,
66
+ warnings: [...validationAsWarnings, ...warnMessages],
67
+ elementCount: parsed.elementCount ?? 0,
68
+ created: parsed.created ?? false,
69
+ });
70
+ }
71
+ const summary = {
72
+ total: results.length,
73
+ saved: results.filter((r) => r.success).length,
74
+ rejected: results.filter((r) => !r.success).length,
75
+ warningsCount: results.filter((r) => r.warnings.length > 0).length,
76
+ };
77
+ const exitCode = summary.rejected > 0 ? 1 : 0;
78
+ if (options.json) {
79
+ const body = { summary, results };
80
+ return { output: formatJson(body), exitCode };
81
+ }
82
+ // Text output
83
+ const lines = [];
84
+ for (const r of results) {
85
+ if (r.success && r.warnings.length === 0) {
86
+ lines.push(formatSuccess(`${r.id} (${r.elementCount} elements, ${r.created ? 'new' : 'overwritten'})`));
87
+ }
88
+ else if (r.success && r.warnings.length > 0) {
89
+ lines.push(formatWarning(`${r.id} (${r.elementCount} elements, ${r.created ? 'new' : 'overwritten'}) — ${r.warnings.length} warning${r.warnings.length !== 1 ? 's' : ''}:`));
90
+ for (const w of r.warnings) {
91
+ lines.push(` ${w.path ?? ''}: ${w.message}`.trimStart());
92
+ }
93
+ }
94
+ else {
95
+ lines.push(formatError({ what: `${r.id} — ${r.errors.length} error${r.errors.length !== 1 ? 's' : ''}`, why: r.errors.map((e) => `${e.path ? e.path + ': ' : ''}${e.message}`).join('; ') }));
96
+ }
97
+ }
98
+ lines.push('');
99
+ const summaryParts = [];
100
+ summaryParts.push(`${summary.saved} saved${summary.warningsCount > 0 ? ` (${summary.warningsCount} with warnings)` : ''}`);
101
+ if (summary.rejected > 0)
102
+ summaryParts.push(`${summary.rejected} rejected`);
103
+ lines.push(`${summary.total} specs processed: ${summaryParts.join(', ')}`);
104
+ return { output: lines.join('\n'), exitCode };
105
+ }
106
+ function errorResult(message, json) {
107
+ if (json) {
108
+ return { output: formatJson({ error: message }), exitCode: 1 };
109
+ }
110
+ return { output: formatError({ what: 'Bulk push failed', why: message }), exitCode: 1 };
111
+ }
112
+ //# sourceMappingURL=push-bulk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-bulk.js","sourceRoot":"","sources":["../../src/commands/push-bulk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { SpecStore, ValidationError } from 'mythik';
2
+ import type { CommandResult } from './manifest.js';
3
+ export interface PushOptions {
4
+ store: SpecStore;
5
+ json: boolean;
6
+ force: boolean;
7
+ author?: string;
8
+ description?: string;
9
+ }
10
+ export interface PushResult {
11
+ success: boolean;
12
+ manifest: string;
13
+ errors?: ValidationError[];
14
+ warnings?: ValidationError[];
15
+ elementCount: number;
16
+ created: boolean;
17
+ }
18
+ export declare function runPush(screenId: string, input: string, options: PushOptions): Promise<CommandResult>;
19
+ //# sourceMappingURL=push.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAsB,MAAM,QAAQ,CAAC;AAI7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAsG3G"}
@@ -0,0 +1,102 @@
1
+ import { getDocumentHandler, PRIMITIVE_PROP_SCHEMAS } from 'mythik';
2
+ import { formatSuccess, formatError, formatJson, formatWarning, colorizeManifest, formatSuggestedFixes } from '../output.js';
3
+ import { autoparse } from '../toon.js';
4
+ export async function runPush(screenId, input, options) {
5
+ let doc;
6
+ try {
7
+ doc = autoparse(input);
8
+ }
9
+ catch {
10
+ const message = 'Invalid spec input — must be valid JSON or TOON';
11
+ if (options.json) {
12
+ return { output: formatJson({ error: message }), exitCode: 1 };
13
+ }
14
+ return { output: formatError({ what: 'Parse error', why: message }), exitCode: 1 };
15
+ }
16
+ let handler;
17
+ try {
18
+ handler = getDocumentHandler(doc);
19
+ }
20
+ catch {
21
+ const message = 'Unknown document type. Expected screen spec (root + elements) or app spec (type: "app").';
22
+ if (options.json) {
23
+ return { output: formatJson({ error: message }), exitCode: 1 };
24
+ }
25
+ return { output: formatError({ what: 'Invalid document', why: message }), exitCode: 1 };
26
+ }
27
+ let exists = false;
28
+ try {
29
+ const screens = await options.store.list();
30
+ exists = screens.includes(screenId);
31
+ }
32
+ catch { /* treat as new */ }
33
+ const validation = handler.validate(doc, { propSchemas: PRIMITIVE_PROP_SCHEMAS });
34
+ const elementCount = handler.countElements(doc);
35
+ let manifest = '';
36
+ try {
37
+ manifest = handler.generateManifest(doc);
38
+ }
39
+ catch { /* best effort */ }
40
+ const hasErrors = !validation.valid;
41
+ // Existing + invalid + no force → reject
42
+ if (hasErrors && exists && !options.force) {
43
+ const result = {
44
+ success: false, manifest, errors: validation.errors, elementCount, created: false,
45
+ };
46
+ if (options.json) {
47
+ return { output: formatJson(result), exitCode: 1 };
48
+ }
49
+ return {
50
+ output: formatError({
51
+ what: `Rejected — "${screenId}" has ${validation.errors.length} validation error${validation.errors.length !== 1 ? 's' : ''}`,
52
+ why: formatSuggestedFixes(validation.errors, screenId),
53
+ fix: 'Fix the errors and re-push, or use --force to overwrite',
54
+ }),
55
+ exitCode: 1,
56
+ };
57
+ }
58
+ // Save — use versioned save if store supports it and author is provided
59
+ const isVersioned = 'saveVersion' in options.store && typeof options.store.saveVersion === 'function';
60
+ if (isVersioned && options.author) {
61
+ await options.store.saveVersion(screenId, doc, {
62
+ author: options.author,
63
+ source: 'push',
64
+ description: options.description,
65
+ });
66
+ }
67
+ else {
68
+ await options.store.save(screenId, doc);
69
+ }
70
+ const created = !exists;
71
+ const result = {
72
+ success: true, manifest, elementCount, created,
73
+ ...(hasErrors ? { errors: validation.errors } : {}),
74
+ ...(validation.warnings?.length ? { warnings: validation.warnings } : {}),
75
+ };
76
+ if (options.json) {
77
+ return { output: formatJson(result), exitCode: 0 };
78
+ }
79
+ if (hasErrors) {
80
+ return {
81
+ output: [
82
+ formatWarning(`Saved "${screenId}" with ${validation.errors.length} validation error${validation.errors.length !== 1 ? 's' : ''} (${elementCount} elements, ${created ? 'new' : 'overwritten'})`),
83
+ '',
84
+ formatSuggestedFixes(validation.errors, screenId),
85
+ ].join('\n'),
86
+ exitCode: 0,
87
+ };
88
+ }
89
+ const warningLines = validation.warnings?.length
90
+ ? [formatWarning(`${validation.warnings.length} prop warning${validation.warnings.length !== 1 ? 's' : ''}:`), formatSuggestedFixes(validation.warnings, screenId), '']
91
+ : [];
92
+ return {
93
+ output: [
94
+ formatSuccess(`Saved "${screenId}" (${elementCount} elements, ${created ? 'new' : 'overwritten'})`),
95
+ '',
96
+ ...warningLines,
97
+ colorizeManifest(manifest),
98
+ ].join('\n'),
99
+ exitCode: 0,
100
+ };
101
+ }
102
+ //# sourceMappingURL=push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { VersionedSpecStore, EnvironmentStore } from 'mythik';
2
+ import type { CommandResult } from './manifest.js';
3
+ export interface RollbackCommandOptions {
4
+ store: VersionedSpecStore;
5
+ envStore: EnvironmentStore;
6
+ toVersion: number;
7
+ confirm: boolean;
8
+ json: boolean;
9
+ author: string;
10
+ description?: string;
11
+ }
12
+ export declare function runRollbackCommand(specId: string, options: RollbackCommandOptions): Promise<CommandResult>;
13
+ //# sourceMappingURL=rollback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/commands/rollback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAGnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,aAAa,CAAC,CAkFhH"}
@@ -0,0 +1,78 @@
1
+ import { computeRollbackImpact, executeRollback } from 'mythik';
2
+ import { formatSuccess, formatError, formatJson } from '../output.js';
3
+ export async function runRollbackCommand(specId, options) {
4
+ try {
5
+ const currentVersion = await options.store.currentVersion(specId);
6
+ if (currentVersion === 0) {
7
+ return {
8
+ output: options.json
9
+ ? formatJson({ error: `No version history for "${specId}"` })
10
+ : formatError({ what: 'No history', why: `Spec "${specId}" has no versions` }),
11
+ exitCode: 1,
12
+ };
13
+ }
14
+ const impact = await computeRollbackImpact({
15
+ specId,
16
+ fromVersion: currentVersion,
17
+ toVersion: options.toVersion,
18
+ store: options.store,
19
+ envStore: options.envStore,
20
+ });
21
+ if (!options.confirm) {
22
+ if (options.json) {
23
+ return { output: formatJson({ preview: true, fromVersion: currentVersion, toVersion: options.toVersion, impact }), exitCode: 0 };
24
+ }
25
+ const lines = [];
26
+ lines.push(`Rollback: ${specId} v${currentVersion} → v${options.toVersion}`);
27
+ lines.push('');
28
+ if (impact.lostChanges.length > 0) {
29
+ lines.push(' CHANGES THAT WILL BE LOST:');
30
+ for (const lc of impact.lostChanges) {
31
+ const icon = lc.change.kind.includes('added') ? '+' : lc.change.kind.includes('removed') ? '-' : '~';
32
+ lines.push(` ${icon} ${lc.change.detail} (${lc.author})`);
33
+ }
34
+ lines.push('');
35
+ }
36
+ if (impact.affectedEnvironments.length > 0) {
37
+ lines.push(' ENVIRONMENTS:');
38
+ for (const env of impact.affectedEnvironments) {
39
+ const status = env.affected ? 'affected' : 'not affected';
40
+ lines.push(` ${env.name}: v${env.currentVersion} → ${status}`);
41
+ }
42
+ lines.push('');
43
+ }
44
+ lines.push(' Preview only. Run with --confirm to execute.');
45
+ return { output: lines.join('\n'), exitCode: 0 };
46
+ }
47
+ const result = await executeRollback({
48
+ specId,
49
+ toVersion: options.toVersion,
50
+ store: options.store,
51
+ envStore: options.envStore,
52
+ author: options.author,
53
+ description: options.description,
54
+ });
55
+ if (!result.success) {
56
+ return {
57
+ output: options.json
58
+ ? formatJson(result)
59
+ : formatError({ what: 'Rollback failed', why: result.errors?.[0]?.message ?? 'Unknown error' }),
60
+ exitCode: 1,
61
+ };
62
+ }
63
+ return {
64
+ output: options.json
65
+ ? formatJson(result)
66
+ : formatSuccess(`Rolled back ${specId} v${result.fromVersion} → v${result.toVersion} (created v${result.newVersion})`),
67
+ exitCode: 0,
68
+ };
69
+ }
70
+ catch (err) {
71
+ const message = err.message;
72
+ return {
73
+ output: options.json ? formatJson({ error: message }) : formatError({ what: 'Rollback failed', why: message }),
74
+ exitCode: 1,
75
+ };
76
+ }
77
+ }
78
+ //# sourceMappingURL=rollback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/commands/rollback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { CommandResult } from './manifest.js';
2
+ export interface TokensResolveOptions {
3
+ dna?: string;
4
+ tokens?: string;
5
+ json: boolean;
6
+ }
7
+ export declare function runTokensResolve(options: TokensResolveOptions): Promise<CommandResult>;
8
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/commands/tokens.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAoE5F"}
@@ -0,0 +1,63 @@
1
+ import { resolveDeepTokens } from 'mythik';
2
+ import { formatSuccess, formatError, formatJson } from '../output.js';
3
+ export async function runTokensResolve(options) {
4
+ try {
5
+ let tokens;
6
+ if (options.dna) {
7
+ const dna = JSON.parse(options.dna);
8
+ tokens = { dna };
9
+ }
10
+ else if (options.tokens) {
11
+ tokens = JSON.parse(options.tokens);
12
+ }
13
+ const resolved = resolveDeepTokens(tokens);
14
+ // Remove modes and components for cleaner output
15
+ const output = { ...resolved };
16
+ delete output.modes;
17
+ delete output.components;
18
+ if (options.json) {
19
+ return { output: formatJson(output), exitCode: 0 };
20
+ }
21
+ // Pretty print sections
22
+ const lines = [];
23
+ const colors = output.colors;
24
+ lines.push(formatSuccess('Colors:'));
25
+ for (const [k, v] of Object.entries(colors)) {
26
+ lines.push(` ${k}: ${v}`);
27
+ }
28
+ const shape = output.shape;
29
+ lines.push('\n' + formatSuccess('Shape:'));
30
+ for (const [k, v] of Object.entries(shape.radius)) {
31
+ lines.push(` radius.${k}: ${v}`);
32
+ }
33
+ const typo = output.typography;
34
+ lines.push('\n' + formatSuccess('Typography:'));
35
+ const families = typo.fontFamily;
36
+ for (const [k, v] of Object.entries(families)) {
37
+ lines.push(` fontFamily.${k}: ${v}`);
38
+ }
39
+ const scale = typo.scale;
40
+ for (const [k, v] of Object.entries(scale)) {
41
+ lines.push(` scale.${k}: ${v.fontSize}/${v.lineHeight}`);
42
+ }
43
+ const spacing = output.spacing;
44
+ lines.push('\n' + formatSuccess('Spacing:'));
45
+ lines.push(` unit: ${spacing.unit}`);
46
+ for (const [k, v] of Object.entries(spacing.scale)) {
47
+ lines.push(` scale.${k}: ${v}`);
48
+ }
49
+ const motion = output.motion;
50
+ lines.push('\n' + formatSuccess('Motion:'));
51
+ for (const [k, v] of Object.entries(motion.duration)) {
52
+ lines.push(` duration.${k}: ${v}ms`);
53
+ }
54
+ for (const [k, v] of Object.entries(motion.easing)) {
55
+ lines.push(` easing.${k}: ${v}`);
56
+ }
57
+ return { output: lines.join('\n'), exitCode: 0 };
58
+ }
59
+ catch (err) {
60
+ return { output: formatError({ what: 'Token resolution failed', why: err.message }), exitCode: 1 };
61
+ }
62
+ }
63
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/commands/tokens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { SpecStore } from 'mythik';
2
+ import type { CommandResult } from './manifest.js';
3
+ export interface ValidateOptions {
4
+ store: SpecStore;
5
+ json: boolean;
6
+ }
7
+ export declare function runValidate(screenId: string, options: ValidateOptions): Promise<CommandResult>;
8
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAKnD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CA2DpG"}
@@ -0,0 +1,60 @@
1
+ import { getDocumentHandler, PRIMITIVE_PROP_SCHEMAS } from 'mythik';
2
+ import { formatSuccess, formatError, formatJson, formatWarning, formatSuggestedFixes } from '../output.js';
3
+ /** Primitives that accept className for CSS hover/active/focus. Matches mythik-react's CSS_HOVER_SUPPORTED. */
4
+ const CSS_HOVER_TYPES = new Set(['box', 'text', 'stack', 'grid', 'scroll', 'button', 'touchable', 'table']);
5
+ export async function runValidate(screenId, options) {
6
+ try {
7
+ const doc = await options.store.load(screenId);
8
+ const handler = getDocumentHandler(doc);
9
+ const elementCount = handler.countElements(doc);
10
+ const result = handler.validate(doc, { cssHoverTypes: CSS_HOVER_TYPES, propSchemas: PRIMITIVE_PROP_SCHEMAS });
11
+ // ApiSpec lintWarnings (additive field on SpecValidationResult — Item I)
12
+ const apiLintWarnings = result.lintWarnings;
13
+ const hasApiLintWarnings = Array.isArray(apiLintWarnings) && apiLintWarnings.length > 0;
14
+ if (options.json) {
15
+ return {
16
+ output: formatJson({
17
+ valid: result.valid,
18
+ elementCount,
19
+ errors: result.errors,
20
+ ...(hasApiLintWarnings ? { lintWarnings: apiLintWarnings } : {}),
21
+ }),
22
+ exitCode: result.valid ? 0 : 1,
23
+ };
24
+ }
25
+ if (result.valid) {
26
+ const warningLines = result.warnings?.length
27
+ ? ['\n', formatWarning(`${result.warnings.length} prop warning${result.warnings.length !== 1 ? 's' : ''}:`), formatSuggestedFixes(result.warnings, screenId)]
28
+ : [];
29
+ const lintLines = hasApiLintWarnings
30
+ ? ['\n', formatWarning(`${apiLintWarnings.length} lint warning${apiLintWarnings.length !== 1 ? 's' : ''}:`), formatSuggestedFixes(apiLintWarnings, screenId)]
31
+ : [];
32
+ return {
33
+ output: [formatSuccess(`Valid — ${elementCount} elements, 0 errors`), ...warningLines, ...lintLines].join('\n'),
34
+ exitCode: 0,
35
+ };
36
+ }
37
+ return {
38
+ output: formatError({
39
+ what: `Invalid — ${result.errors.length} error${result.errors.length !== 1 ? 's' : ''}`,
40
+ why: formatSuggestedFixes(result.errors, screenId),
41
+ }),
42
+ exitCode: 1,
43
+ };
44
+ }
45
+ catch (err) {
46
+ const message = err.message;
47
+ if (options.json) {
48
+ return { output: formatJson({ error: message }), exitCode: 1 };
49
+ }
50
+ return {
51
+ output: formatError({
52
+ what: `Screen "${screenId}" not found`,
53
+ why: message,
54
+ fix: 'Check the screen ID and try again',
55
+ }),
56
+ exitCode: 1,
57
+ };
58
+ }
59
+ }
60
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export interface MythikConfig {
2
+ store: string;
3
+ supabase?: {
4
+ url: string;
5
+ apiKey: string;
6
+ table?: string;
7
+ };
8
+ file?: {
9
+ dir: string;
10
+ };
11
+ sqlserver?: {
12
+ server: string;
13
+ database: string;
14
+ user?: string;
15
+ password?: string;
16
+ port?: number;
17
+ trustedConnection?: boolean;
18
+ table?: string;
19
+ };
20
+ }
21
+ export interface LoadConfigOptions {
22
+ cwd?: string;
23
+ flags?: Record<string, string>;
24
+ }
25
+ export declare function loadConfig(options?: LoadConfigOptions): MythikConfig;
26
+ export declare function resolveEnvVars(config: MythikConfig): MythikConfig;
27
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,IAAI,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACvB,SAAS,CAAC,EAAE;QACV,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,YAAY,CAsCxE;AAkDD,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAkBjE"}