@monoes/monodesign 1.2.20 → 1.2.22

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 (85) hide show
  1. package/README.md +2 -2
  2. package/cli/engine/design-system-checks.mjs +381 -0
  3. package/cli/engine/design-system-parse.mjs +433 -0
  4. package/cli/engine/design-system.mjs +20 -736
  5. package/cli/engine/engines/regex/detect-text-matchers.mjs +371 -0
  6. package/cli/engine/engines/regex/detect-text-run.mjs +186 -0
  7. package/cli/engine/engines/regex/detect-text.mjs +11 -523
  8. package/cli/engine/engines/static-html/css-cascade-color.mjs +219 -0
  9. package/cli/engine/engines/static-html/css-cascade-static-data.mjs +138 -0
  10. package/cli/engine/engines/static-html/css-cascade-static-dom.mjs +132 -0
  11. package/cli/engine/engines/static-html/css-cascade-static-parse.mjs +393 -0
  12. package/cli/engine/engines/static-html/css-cascade.mjs +24 -837
  13. package/cli/lib/monodesign-config-consent.mjs +93 -0
  14. package/cli/lib/monodesign-config-core.mjs +37 -0
  15. package/cli/lib/monodesign-config-detection.mjs +133 -0
  16. package/cli/lib/monodesign-config-filter.mjs +198 -0
  17. package/cli/lib/monodesign-config-ignore-value.mjs +212 -0
  18. package/cli/lib/monodesign-config.mjs +21 -623
  19. package/package.json +2 -2
  20. package/skill/scripts/context-fields.mjs +65 -0
  21. package/skill/scripts/context-resolve.mjs +425 -0
  22. package/skill/scripts/context-update.mjs +151 -0
  23. package/skill/scripts/context-utils.mjs +68 -0
  24. package/skill/scripts/context-workspace.mjs +245 -0
  25. package/skill/scripts/context.mjs +17 -891
  26. package/skill/scripts/hook-admin-config.mjs +152 -0
  27. package/skill/scripts/hook-admin-ignore.mjs +131 -0
  28. package/skill/scripts/hook-admin-manifest.mjs +292 -0
  29. package/skill/scripts/hook-admin.mjs +8 -541
  30. package/skill/scripts/hook-lib-cache.mjs +145 -0
  31. package/skill/scripts/hook-lib-config.mjs +292 -0
  32. package/skill/scripts/hook-lib-detector.mjs +72 -0
  33. package/skill/scripts/hook-lib-events.mjs +182 -0
  34. package/skill/scripts/hook-lib-findings.mjs +201 -0
  35. package/skill/scripts/hook-lib-ignore.mjs +205 -0
  36. package/skill/scripts/hook-lib-render.mjs +273 -0
  37. package/skill/scripts/hook-lib-run.mjs +281 -0
  38. package/skill/scripts/hook-lib-scan-targets.mjs +128 -0
  39. package/skill/scripts/hook-lib.mjs +71 -1747
  40. package/skill/scripts/lib/design-parser-colors.mjs +182 -0
  41. package/skill/scripts/lib/design-parser-extract.mjs +333 -0
  42. package/skill/scripts/lib/design-parser-sections.mjs +214 -0
  43. package/skill/scripts/lib/design-parser-yaml.mjs +135 -0
  44. package/skill/scripts/lib/design-parser.mjs +10 -783
  45. package/skill/scripts/live/manual-apply-chunk.mjs +151 -0
  46. package/skill/scripts/live/manual-apply-compact.mjs +122 -0
  47. package/skill/scripts/live/manual-apply-evidence.mjs +115 -0
  48. package/skill/scripts/live/manual-apply-log.mjs +179 -0
  49. package/skill/scripts/live/manual-apply-transaction.mjs +122 -0
  50. package/skill/scripts/live/manual-apply.mjs +65 -640
  51. package/skill/scripts/live/svelte-component-accept.mjs +248 -0
  52. package/skill/scripts/live/svelte-component-css.mjs +230 -0
  53. package/skill/scripts/live/svelte-component-markup.mjs +104 -0
  54. package/skill/scripts/live/svelte-component-scaffold.mjs +118 -0
  55. package/skill/scripts/live/svelte-component-session.mjs +158 -0
  56. package/skill/scripts/live/svelte-component.mjs +32 -792
  57. package/skill/scripts/live-accept-mutate.mjs +152 -0
  58. package/skill/scripts/live-accept-parse.mjs +370 -0
  59. package/skill/scripts/live-accept-scrub.mjs +59 -0
  60. package/skill/scripts/live-accept-search.mjs +58 -0
  61. package/skill/scripts/live-accept.mjs +15 -631
  62. package/skill/scripts/live-commit-manual-edits-paths.mjs +27 -0
  63. package/skill/scripts/live-commit-manual-edits-repair.mjs +166 -0
  64. package/skill/scripts/live-commit-manual-edits-rollback.mjs +231 -0
  65. package/skill/scripts/live-commit-manual-edits-utils.mjs +167 -0
  66. package/skill/scripts/live-commit-manual-edits-verify.mjs +356 -0
  67. package/skill/scripts/live-commit-manual-edits.mjs +24 -881
  68. package/skill/scripts/live-copy-edit-agent.mjs +16 -551
  69. package/skill/scripts/live-copy-edit-compact.mjs +137 -0
  70. package/skill/scripts/live-copy-edit-post-apply.mjs +175 -0
  71. package/skill/scripts/live-copy-edit-runners.mjs +297 -0
  72. package/skill/scripts/live-inject-csp.mjs +132 -0
  73. package/skill/scripts/live-inject-files.mjs +229 -0
  74. package/skill/scripts/live-inject-tag.mjs +114 -0
  75. package/skill/scripts/live-inject.mjs +13 -440
  76. package/skill/scripts/live-server-poll.mjs +232 -0
  77. package/skill/scripts/live-server-routes.mjs +449 -0
  78. package/skill/scripts/live-server-state.mjs +361 -0
  79. package/skill/scripts/live-server.mjs +10 -946
  80. package/skill/scripts/live-wrap-css.mjs +132 -0
  81. package/skill/scripts/live-wrap-manual-edit.mjs +153 -0
  82. package/skill/scripts/live-wrap-search.mjs +247 -0
  83. package/skill/scripts/live-wrap.mjs +21 -484
  84. package/skill/scripts/palette-seeds.mjs +401 -0
  85. package/skill/scripts/palette.mjs +1 -395
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Component-session lifecycle for live/svelte-component.mjs: where a
3
+ * session's scaffolded variants and manifest live on disk, finding/reading a
4
+ * manifest, removing sessions, and the deferred-accept queue used when an
5
+ * accept can't be applied synchronously (e.g. the live server restarts).
6
+ *
7
+ * Split out of live/svelte-component.mjs. See that file for context.
8
+ */
9
+ import { createHash } from 'node:crypto';
10
+ import fs from 'node:fs';
11
+ import os from 'node:os';
12
+ import path from 'node:path';
13
+ import { inlineSvelteComponentAccept } from './svelte-component-accept.mjs';
14
+
15
+ export const SVELTE_COMPONENT_ROOT = 'node_modules/.monodesign-live';
16
+ export const SVELTE_RUNTIME_FILE = `${SVELTE_COMPONENT_ROOT}/__runtime.js`;
17
+ export const DEFERRED_ACCEPTS_FILE = '.monodesign/live/deferred-svelte-component-accepts.json';
18
+
19
+
20
+ export function shouldUseSvelteComponentInjection(filePath) {
21
+ if (/^(0|false|no)$/i.test(process.env.MONODESIGN_LIVE_SVELTE_COMPONENT || '')) return false;
22
+ return path.extname(filePath).toLowerCase() === '.svelte';
23
+ }
24
+
25
+ export function componentSessionDir(id, cwd = process.cwd()) {
26
+ return path.join(cwd, SVELTE_COMPONENT_ROOT, id);
27
+ }
28
+
29
+ export function manifestPathForSession(id, cwd = process.cwd()) {
30
+ return path.join(componentSessionDir(id, cwd), 'manifest.json');
31
+ }
32
+
33
+ export function ensureRuntimeHelper(cwd = process.cwd()) {
34
+ const file = path.join(cwd, SVELTE_RUNTIME_FILE);
35
+ if (fs.existsSync(file)) return file;
36
+ fs.mkdirSync(path.dirname(file), { recursive: true });
37
+ fs.writeFileSync(file, `export { mount, unmount } from 'svelte';\n`, 'utf-8');
38
+ return file;
39
+ }
40
+
41
+ export function findSvelteComponentManifest(id, cwd = process.cwd()) {
42
+ const direct = manifestPathForSession(id, cwd);
43
+ if (fs.existsSync(direct)) {
44
+ return readManifest(direct);
45
+ }
46
+ const root = path.join(cwd, SVELTE_COMPONENT_ROOT);
47
+ if (!fs.existsSync(root)) return null;
48
+ for (const entry of fs.readdirSync(root, { withFileTypes: true })) {
49
+ if (!entry.isDirectory()) continue;
50
+ const candidate = path.join(root, entry.name, 'manifest.json');
51
+ if (!fs.existsSync(candidate)) continue;
52
+ try {
53
+ const manifest = readManifest(candidate);
54
+ if (manifest?.id === id) return { ...manifest, manifestPath: candidate };
55
+ } catch { /* skip */ }
56
+ }
57
+ return null;
58
+ }
59
+
60
+ export function readManifest(manifestPath) {
61
+ const data = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
62
+ return {
63
+ ...data,
64
+ manifestPath,
65
+ };
66
+ }
67
+
68
+ export function resolveSourceFile(sourceFile, cwd = process.cwd()) {
69
+ if (!sourceFile || path.isAbsolute(sourceFile)) {
70
+ throw new Error('Invalid svelte-component source file');
71
+ }
72
+ const full = path.resolve(cwd, sourceFile);
73
+ const rel = path.relative(cwd, full).split(path.sep).join('/');
74
+ if (!rel || rel.startsWith('..') || path.isAbsolute(rel)) {
75
+ throw new Error('Svelte-component source file escapes project root');
76
+ }
77
+ if (!fs.existsSync(full)) {
78
+ throw new Error(`Svelte-component source file not found: ${sourceFile}`);
79
+ }
80
+ return full;
81
+ }
82
+
83
+ export function removeSvelteComponentSession(id, cwd = process.cwd()) {
84
+ const dir = componentSessionDir(id, cwd);
85
+ try {
86
+ fs.rmSync(dir, { recursive: true, force: true });
87
+ } catch { /* non-fatal */ }
88
+ }
89
+
90
+ export function removeAllSvelteComponentSessions(cwd = process.cwd()) {
91
+ const root = path.join(cwd, SVELTE_COMPONENT_ROOT);
92
+ if (!fs.existsSync(root)) return;
93
+ for (const entry of fs.readdirSync(root, { withFileTypes: true })) {
94
+ if (!entry.isDirectory()) continue;
95
+ if (entry.name.startsWith('__')) continue;
96
+ try {
97
+ fs.rmSync(path.join(root, entry.name), { recursive: true, force: true });
98
+ } catch { /* non-fatal */ }
99
+ }
100
+ }
101
+
102
+ export function deferredAcceptsPath(cwd = process.cwd()) {
103
+ const key = createHash('sha1').update(path.resolve(cwd)).digest('hex').slice(0, 16);
104
+ return path.join(os.tmpdir(), 'monodesign-live', key, 'deferred-svelte-component-accepts.json');
105
+ }
106
+
107
+ export function readDeferredAccepts(cwd = process.cwd()) {
108
+ const file = deferredAcceptsPath(cwd);
109
+ try {
110
+ return JSON.parse(fs.readFileSync(file, 'utf-8'));
111
+ } catch {
112
+ return { accepts: [] };
113
+ }
114
+ }
115
+
116
+ export function writeDeferredAccept(entry, cwd = process.cwd()) {
117
+ const file = deferredAcceptsPath(cwd);
118
+ fs.mkdirSync(path.dirname(file), { recursive: true });
119
+ const data = readDeferredAccepts(cwd);
120
+ data.accepts = (data.accepts || []).filter((item) => item.id !== entry.id);
121
+ data.accepts.push({ ...entry, createdAt: new Date().toISOString() });
122
+ fs.writeFileSync(file, `${JSON.stringify(data, null, 2)}\n`, 'utf-8');
123
+ }
124
+
125
+ export function applyDeferredSvelteComponentAccepts(cwd = process.cwd()) {
126
+ const file = deferredAcceptsPath(cwd);
127
+ const data = readDeferredAccepts(cwd);
128
+ const pending = Array.isArray(data.accepts) ? data.accepts : [];
129
+ const results = [];
130
+ const remaining = [];
131
+ for (const entry of pending) {
132
+ try {
133
+ const manifest = findSvelteComponentManifest(entry.id, cwd);
134
+ if (!manifest) {
135
+ results.push({ id: entry.id, ok: false, error: 'manifest not found' });
136
+ remaining.push(entry);
137
+ continue;
138
+ }
139
+ const result = inlineSvelteComponentAccept(
140
+ manifest,
141
+ entry.variantNum,
142
+ entry.paramValues || null,
143
+ cwd,
144
+ );
145
+ results.push({ id: entry.id, ok: result.handled !== false, result });
146
+ if (result.handled === false) remaining.push(entry);
147
+ } catch (err) {
148
+ results.push({ id: entry.id, ok: false, error: err.message });
149
+ remaining.push(entry);
150
+ }
151
+ }
152
+ if (remaining.length > 0) {
153
+ fs.writeFileSync(file, `${JSON.stringify({ accepts: remaining }, null, 2)}\n`, 'utf-8');
154
+ } else {
155
+ try { fs.rmSync(file, { force: true }); } catch {}
156
+ }
157
+ return { applied: results.filter((r) => r.ok).length, failed: results.filter((r) => !r.ok).length, results };
158
+ }