@memberjunction/cli 6.1.0-edge.1 → 6.1.0-edge.3

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 (91) hide show
  1. package/LICENSE +180 -4
  2. package/README.md +1 -1
  3. package/dist/commands/artifacts/reclassify.d.ts.map +1 -1
  4. package/dist/commands/artifacts/reclassify.js +2 -1
  5. package/dist/commands/artifacts/reclassify.js.map +1 -1
  6. package/dist/commands/codegen/manifest.d.ts +14 -0
  7. package/dist/commands/codegen/manifest.d.ts.map +1 -1
  8. package/dist/commands/codegen/manifest.js +26 -7
  9. package/dist/commands/codegen/manifest.js.map +1 -1
  10. package/dist/commands/dev/index.d.ts +7 -0
  11. package/dist/commands/dev/index.d.ts.map +1 -0
  12. package/dist/commands/dev/index.js +11 -0
  13. package/dist/commands/dev/index.js.map +1 -0
  14. package/dist/commands/dev/usage.d.ts +7 -0
  15. package/dist/commands/dev/usage.d.ts.map +1 -0
  16. package/dist/commands/dev/usage.js +10 -0
  17. package/dist/commands/dev/usage.js.map +1 -0
  18. package/dist/commands/dev/workspace/clean.d.ts +27 -0
  19. package/dist/commands/dev/workspace/clean.d.ts.map +1 -0
  20. package/dist/commands/dev/workspace/clean.js +87 -0
  21. package/dist/commands/dev/workspace/clean.js.map +1 -0
  22. package/dist/commands/dev/workspace/doctor.d.ts +28 -0
  23. package/dist/commands/dev/workspace/doctor.d.ts.map +1 -0
  24. package/dist/commands/dev/workspace/doctor.js +62 -0
  25. package/dist/commands/dev/workspace/doctor.js.map +1 -0
  26. package/dist/commands/dev/workspace/index.d.ts +60 -0
  27. package/dist/commands/dev/workspace/index.d.ts.map +1 -0
  28. package/dist/commands/dev/workspace/index.js +279 -0
  29. package/dist/commands/dev/workspace/index.js.map +1 -0
  30. package/dist/commands/dev/workspace/status.d.ts +19 -0
  31. package/dist/commands/dev/workspace/status.d.ts.map +1 -0
  32. package/dist/commands/dev/workspace/status.js +46 -0
  33. package/dist/commands/dev/workspace/status.js.map +1 -0
  34. package/dist/lib/cli-plugins.d.ts.map +1 -1
  35. package/dist/lib/cli-plugins.js +5 -0
  36. package/dist/lib/cli-plugins.js.map +1 -1
  37. package/dist/lib/dev-workspace/build.d.ts +180 -0
  38. package/dist/lib/dev-workspace/build.d.ts.map +1 -0
  39. package/dist/lib/dev-workspace/build.js +570 -0
  40. package/dist/lib/dev-workspace/build.js.map +1 -0
  41. package/dist/lib/dev-workspace/clean.d.ts +40 -0
  42. package/dist/lib/dev-workspace/clean.d.ts.map +1 -0
  43. package/dist/lib/dev-workspace/clean.js +193 -0
  44. package/dist/lib/dev-workspace/clean.js.map +1 -0
  45. package/dist/lib/dev-workspace/detect.d.ts +56 -0
  46. package/dist/lib/dev-workspace/detect.d.ts.map +1 -0
  47. package/dist/lib/dev-workspace/detect.js +343 -0
  48. package/dist/lib/dev-workspace/detect.js.map +1 -0
  49. package/dist/lib/dev-workspace/dir-flag.d.ts +23 -0
  50. package/dist/lib/dev-workspace/dir-flag.d.ts.map +1 -0
  51. package/dist/lib/dev-workspace/dir-flag.js +24 -0
  52. package/dist/lib/dev-workspace/dir-flag.js.map +1 -0
  53. package/dist/lib/dev-workspace/doctor.d.ts +96 -0
  54. package/dist/lib/dev-workspace/doctor.d.ts.map +1 -0
  55. package/dist/lib/dev-workspace/doctor.js +400 -0
  56. package/dist/lib/dev-workspace/doctor.js.map +1 -0
  57. package/dist/lib/dev-workspace/lockfile.d.ts +62 -0
  58. package/dist/lib/dev-workspace/lockfile.d.ts.map +1 -0
  59. package/dist/lib/dev-workspace/lockfile.js +456 -0
  60. package/dist/lib/dev-workspace/lockfile.js.map +1 -0
  61. package/dist/lib/dev-workspace/member-installs.d.ts +35 -0
  62. package/dist/lib/dev-workspace/member-installs.d.ts.map +1 -0
  63. package/dist/lib/dev-workspace/member-installs.js +139 -0
  64. package/dist/lib/dev-workspace/member-installs.js.map +1 -0
  65. package/dist/lib/dev-workspace/pnpm.d.ts +29 -0
  66. package/dist/lib/dev-workspace/pnpm.d.ts.map +1 -0
  67. package/dist/lib/dev-workspace/pnpm.js +59 -0
  68. package/dist/lib/dev-workspace/pnpm.js.map +1 -0
  69. package/dist/lib/dev-workspace/status.d.ts +16 -0
  70. package/dist/lib/dev-workspace/status.d.ts.map +1 -0
  71. package/dist/lib/dev-workspace/status.js +185 -0
  72. package/dist/lib/dev-workspace/status.js.map +1 -0
  73. package/dist/lib/dev-workspace/types.d.ts +312 -0
  74. package/dist/lib/dev-workspace/types.d.ts.map +1 -0
  75. package/dist/lib/dev-workspace/types.js +14 -0
  76. package/dist/lib/dev-workspace/types.js.map +1 -0
  77. package/dist/lib/dev-workspace/usage.d.ts +30 -0
  78. package/dist/lib/dev-workspace/usage.d.ts.map +1 -0
  79. package/dist/lib/dev-workspace/usage.js +177 -0
  80. package/dist/lib/dev-workspace/usage.js.map +1 -0
  81. package/dist/lib/dev-workspace/write.d.ts +25 -0
  82. package/dist/lib/dev-workspace/write.d.ts.map +1 -0
  83. package/dist/lib/dev-workspace/write.js +75 -0
  84. package/dist/lib/dev-workspace/write.js.map +1 -0
  85. package/dist/light-commands.d.ts.map +1 -1
  86. package/dist/light-commands.js +7 -0
  87. package/dist/light-commands.js.map +1 -1
  88. package/dist/utils/open-app-context.js +1 -1
  89. package/dist/utils/open-app-context.js.map +1 -1
  90. package/oclif.manifest.json +3432 -3173
  91. package/package.json +22 -22
@@ -0,0 +1 @@
1
+ {"version":3,"file":"member-installs.js","sourceRoot":"","sources":["../../../src/lib/dev-workspace/member-installs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /** The stdio configurations this module uses. */
2
+ export type WorkspaceStdio = 'inherit' | ['ignore', 'pipe', 'ignore'];
3
+ /** The slice of a spawned child process this module consumes. */
4
+ export interface WorkspaceChildProcess {
5
+ stdout?: {
6
+ on(event: 'data', listener: (chunk: Buffer) => void): unknown;
7
+ } | null;
8
+ on(event: 'error', listener: (error: NodeJS.ErrnoException) => void): unknown;
9
+ on(event: 'close', listener: (code: number | null) => void): unknown;
10
+ kill(signal?: NodeJS.Signals): boolean;
11
+ }
12
+ /** Narrow structural spawn signature — node's `spawn` satisfies it; tests inject fakes. */
13
+ export type SpawnWorkspaceProcess = (command: string, args: readonly string[], options: {
14
+ cwd: string;
15
+ stdio: WorkspaceStdio;
16
+ }) => WorkspaceChildProcess;
17
+ /**
18
+ * Runs `pnpm install` at the parent directory with inherited stdio so the user
19
+ * sees pnpm's own progress output. Rejects on a non-zero exit or when pnpm
20
+ * cannot be spawned at all.
21
+ */
22
+ export declare function RunPnpmInstall(parentDir: string, spawnFn?: SpawnWorkspaceProcess): Promise<void>;
23
+ /**
24
+ * Returns the pnpm version active at the parent directory (`pnpm --version`),
25
+ * or null when pnpm is not runnable there. Never throws — status reporting must
26
+ * degrade gracefully on machines without pnpm. Bounded by a kill timeout.
27
+ */
28
+ export declare function GetPnpmVersion(parentDir: string, spawnFn?: SpawnWorkspaceProcess): Promise<string | null>;
29
+ //# sourceMappingURL=pnpm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pnpm.d.ts","sourceRoot":"","sources":["../../../src/lib/dev-workspace/pnpm.ts"],"names":[],"mappings":"AAcA,iDAAiD;AACjD,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAEtE,iEAAiE;AACjE,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE;QAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAClF,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC;IAC9E,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC;IACrE,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;CACxC;AAED,2FAA2F;AAC3F,MAAM,MAAM,qBAAqB,GAAG,CAClC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,KAC5C,qBAAqB,CAAC;AAE3B;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA6B,GAAG,OAAO,CAAC,IAAI,CAAC,CAevG;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA6B,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkBhH"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * pnpm process invocations for `mj dev workspace`.
3
+ *
4
+ * SIDE EFFECTS: spawns the `pnpm` binary. This is the only module in the
5
+ * dev-workspace feature that starts child processes. The spawner is injectable
6
+ * (narrow structural type) so tests never fork.
7
+ *
8
+ * @module lib/dev-workspace/pnpm
9
+ */
10
+ import { spawn } from 'node:child_process';
11
+ /** `pnpm --version` gets this long before we give up (milliseconds). */
12
+ const VERSION_PROBE_TIMEOUT_MS = 15_000;
13
+ /**
14
+ * Runs `pnpm install` at the parent directory with inherited stdio so the user
15
+ * sees pnpm's own progress output. Rejects on a non-zero exit or when pnpm
16
+ * cannot be spawned at all.
17
+ */
18
+ export function RunPnpmInstall(parentDir, spawnFn = spawn) {
19
+ return new Promise((resolve, reject) => {
20
+ const child = spawnFn('pnpm', ['install'], { cwd: parentDir, stdio: 'inherit' });
21
+ child.on('error', (error) => {
22
+ const hint = error.code === 'ENOENT' ? ' (pnpm not found on PATH — `corepack enable` or install pnpm 10)' : '';
23
+ reject(new Error(`Failed to run pnpm install${hint}: ${error.message}`));
24
+ });
25
+ child.on('close', (code) => {
26
+ if (code === 0) {
27
+ resolve();
28
+ }
29
+ else {
30
+ reject(new Error(`pnpm install exited with code ${code} at ${parentDir}`));
31
+ }
32
+ });
33
+ });
34
+ }
35
+ /**
36
+ * Returns the pnpm version active at the parent directory (`pnpm --version`),
37
+ * or null when pnpm is not runnable there. Never throws — status reporting must
38
+ * degrade gracefully on machines without pnpm. Bounded by a kill timeout.
39
+ */
40
+ export function GetPnpmVersion(parentDir, spawnFn = spawn) {
41
+ return new Promise((resolve) => {
42
+ const child = spawnFn('pnpm', ['--version'], { cwd: parentDir, stdio: ['ignore', 'pipe', 'ignore'] });
43
+ const timer = setTimeout(() => child.kill('SIGKILL'), VERSION_PROBE_TIMEOUT_MS);
44
+ let stdout = '';
45
+ child.stdout?.on('data', (chunk) => {
46
+ stdout += chunk.toString('utf8');
47
+ });
48
+ child.on('error', () => {
49
+ clearTimeout(timer);
50
+ resolve(null);
51
+ });
52
+ child.on('close', (code) => {
53
+ clearTimeout(timer);
54
+ const version = stdout.trim();
55
+ resolve(code === 0 && /^\d+\.\d+\.\d+/.test(version) ? version : null);
56
+ });
57
+ });
58
+ }
59
+ //# sourceMappingURL=pnpm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pnpm.js","sourceRoot":"","sources":["../../../src/lib/dev-workspace/pnpm.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,wEAAwE;AACxE,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAoBxC;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,UAAiC,KAAK;IACtF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACjF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAA4B,EAAE,EAAE;YACjD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,kEAAkE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/G,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAmB,EAAE,EAAE;YACxC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,IAAI,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,UAAiC,KAAK;IACtF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QACtG,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,wBAAwB,CAAC,CAAC;QAChF,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACrB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAmB,EAAE,EAAE;YACxC,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { DirSource, WorkspaceStatus } from './types.js';
2
+ /**
3
+ * Parses member repo names out of a generated pnpm-workspace.yaml: entries under
4
+ * `packages:` that contain no `/` are member repo roots (each member also has one
5
+ * or more `<name>/packages/...` glob lines, which are skipped). Pure.
6
+ */
7
+ export declare function ParseWorkspaceMembers(yamlText: string): string[];
8
+ /**
9
+ * Collects the full workspace status at a parent directory. `activePnpmVersion`
10
+ * comes from the caller (a spawn — see `pnpm.ts`) so this stays spawn-free, and
11
+ * `dirSource` likewise, so this module never reads argv or the environment.
12
+ */
13
+ export declare function CollectWorkspaceStatus(parentDir: string, activePnpmVersion: string | null, dirSource: DirSource): WorkspaceStatus;
14
+ /** Renders a WorkspaceStatus as the terminal report. Pure. */
15
+ export declare function RenderStatus(status: WorkspaceStatus): string;
16
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/lib/dev-workspace/status.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,SAAS,EAAyC,eAAe,EAAE,MAAM,YAAY,CAAC;AAKpG;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAehE;AAwCD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,SAAS,EAAE,SAAS,GACnB,eAAe,CAuBjB;AAyDD,8DAA8D;AAC9D,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAqB5D"}
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Workspace state reporting for `mj dev workspace status`.
3
+ *
4
+ * SIDE EFFECTS: read-only filesystem access (existence checks + file reads) via
5
+ * {@link CollectWorkspaceStatus}. The pnpm version probe is NOT run here — the
6
+ * command spawns it (see `pnpm.ts`) and passes the result in, so this module's
7
+ * process interaction stays zero. `ParseWorkspaceMembers` and `RenderStatus`
8
+ * are pure.
9
+ *
10
+ * @module lib/dev-workspace/status
11
+ */
12
+ import { existsSync, readFileSync } from 'node:fs';
13
+ import path from 'node:path';
14
+ import chalk from 'chalk';
15
+ import { SENTINEL_MARKER } from './build.js';
16
+ import { ReadSentinel } from './clean.js';
17
+ import { DetectCandidates } from './detect.js';
18
+ import { DescribeDirSource } from './dir-flag.js';
19
+ import { SENTINEL_FILE_NAME, WORKSPACE_FILE_NAMES } from './write.js';
20
+ /** Longest workspace file we will parse for members (guards against reading a rogue blob). */
21
+ const MAX_WORKSPACE_YAML_BYTES = 1_000_000;
22
+ /**
23
+ * Parses member repo names out of a generated pnpm-workspace.yaml: entries under
24
+ * `packages:` that contain no `/` are member repo roots (each member also has one
25
+ * or more `<name>/packages/...` glob lines, which are skipped). Pure.
26
+ */
27
+ export function ParseWorkspaceMembers(yamlText) {
28
+ const members = [];
29
+ let inPackages = false;
30
+ for (const rawLine of yamlText.split('\n')) {
31
+ const line = rawLine.trimEnd();
32
+ if (/^packages:\s*$/.test(line)) {
33
+ inPackages = true;
34
+ continue;
35
+ }
36
+ if (inPackages && /^\S/.test(line) && line.length > 0)
37
+ inPackages = false; // next top-level key
38
+ if (!inPackages)
39
+ continue;
40
+ const match = /^\s+-\s+'?([^'#]+?)'?\s*$/.exec(line);
41
+ if (match && !match[1].includes('/'))
42
+ members.push(match[1]);
43
+ }
44
+ return members;
45
+ }
46
+ /** Reads the parent package.json's packageManager pnpm pin, or null. */
47
+ function readPinnedPnpm(parentDir) {
48
+ const manifestPath = path.join(parentDir, 'package.json');
49
+ if (!existsSync(manifestPath))
50
+ return null;
51
+ try {
52
+ const manifest = JSON.parse(readFileSync(manifestPath, 'utf8'));
53
+ const pin = manifest.packageManager;
54
+ return pin?.startsWith('pnpm@') ? pin : null;
55
+ }
56
+ catch {
57
+ return null; // unparseable manifest is reported via the file listing, not a crash
58
+ }
59
+ }
60
+ /**
61
+ * True when a member carries its OWN install rather than the parent-linked one.
62
+ * A parent-managed workspace puts the store at the parent (`<parent>/node_modules/.pnpm`)
63
+ * and members hold only symlinks — so a member-root `.pnpm` store, or npm's
64
+ * `.package-lock.json` tree marker, proves a standalone install that forks
65
+ * resolution away from the workspace (the #3795 split-registry disease).
66
+ */
67
+ function hasStandaloneInstallMarker(memberDir) {
68
+ return (existsSync(path.join(memberDir, 'node_modules', '.pnpm')) ||
69
+ existsSync(path.join(memberDir, 'node_modules', '.package-lock.json')));
70
+ }
71
+ /** Reads workspace members from pnpm-workspace.yaml at the parent, or [] when absent. */
72
+ function readMembers(parentDir) {
73
+ const yamlPath = path.join(parentDir, 'pnpm-workspace.yaml');
74
+ if (!existsSync(yamlPath))
75
+ return [];
76
+ const raw = readFileSync(yamlPath, 'utf8');
77
+ if (raw.length > MAX_WORKSPACE_YAML_BYTES) {
78
+ throw new Error(`${yamlPath} is over ${MAX_WORKSPACE_YAML_BYTES} bytes — not a generated workspace file`);
79
+ }
80
+ return ParseWorkspaceMembers(raw);
81
+ }
82
+ /**
83
+ * Collects the full workspace status at a parent directory. `activePnpmVersion`
84
+ * comes from the caller (a spawn — see `pnpm.ts`) so this stays spawn-free, and
85
+ * `dirSource` likewise, so this module never reads argv or the environment.
86
+ */
87
+ export function CollectWorkspaceStatus(parentDir, activePnpmVersion, dirSource) {
88
+ if (!path.isAbsolute(parentDir)) {
89
+ throw new Error(`CollectWorkspaceStatus requires an absolute path, got: ${parentDir}`);
90
+ }
91
+ const members = readMembers(parentDir);
92
+ const detected = DetectCandidates(parentDir).map((c) => c.Name);
93
+ const memberSet = new Set(members);
94
+ return {
95
+ MembersWithStandaloneInstalls: members.filter((m) => hasStandaloneInstallMarker(path.join(parentDir, m))),
96
+ ParentDir: parentDir,
97
+ DirSource: dirSource,
98
+ ParentIsGitRepo: existsSync(path.join(parentDir, '.git')),
99
+ Files: WORKSPACE_FILE_NAMES.map((name) => ({ Name: name, Exists: existsSync(path.join(parentDir, name)) })),
100
+ LockfileExists: existsSync(path.join(parentDir, 'pnpm-lock.yaml')),
101
+ NodeModulesExists: existsSync(path.join(parentDir, 'node_modules')),
102
+ Members: members,
103
+ MissingMemberDirs: members.filter((m) => !existsSync(path.join(parentDir, m))),
104
+ DetectedCandidates: detected,
105
+ CandidatesNotInWorkspace: detected.filter((c) => !memberSet.has(c)),
106
+ Sentinel: ReadSentinel(parentDir),
107
+ PinnedPnpm: readPinnedPnpm(parentDir),
108
+ ActivePnpmVersion: activePnpmVersion,
109
+ };
110
+ }
111
+ /** One [x]/[ ] line. */
112
+ function checkLine(exists, label) {
113
+ return exists ? `${chalk.green('[x]')} ${label}` : `${chalk.red('[ ]')} ${label}`;
114
+ }
115
+ /** Renders the pnpm pin-vs-active comparison line. Pure. */
116
+ function renderPnpmLine(status) {
117
+ const pinned = status.PinnedPnpm ? status.PinnedPnpm.slice('pnpm@'.length) : null;
118
+ if (pinned === null)
119
+ return chalk.dim('pnpm pin: none (no generated package.json)');
120
+ if (status.ActivePnpmVersion === null)
121
+ return chalk.yellow(`pnpm pin: ${pinned} — pnpm not runnable at the parent`);
122
+ if (status.ActivePnpmVersion === pinned)
123
+ return chalk.green(`pnpm: pinned ${pinned}, active ${status.ActivePnpmVersion} — match`);
124
+ return chalk.yellow(`pnpm: pinned ${pinned}, active ${status.ActivePnpmVersion} — MISMATCH`);
125
+ }
126
+ /**
127
+ * Renders the sentinel line — whether this workspace can be proven to be the
128
+ * generator's own output, which is exactly what `clean` requires. Pure.
129
+ */
130
+ function renderSentinelLine(sentinel) {
131
+ if (sentinel.Kind === 'valid') {
132
+ const members = sentinel.Sentinel.members.join(', ') || '(none recorded)';
133
+ return chalk.green(`sentinel: ${SENTINEL_FILE_NAME} — generated by ${SENTINEL_MARKER} (members: ${members})`);
134
+ }
135
+ if (sentinel.Kind === 'invalid') {
136
+ return chalk.yellow(`sentinel: ${SENTINEL_FILE_NAME} present but not ours (${sentinel.Reason}) — clean needs --force`);
137
+ }
138
+ return chalk.dim('sentinel: none — hand-made or pre-sentinel workspace; clean needs --force');
139
+ }
140
+ /** Renders the member-vs-candidates section lines. Pure. */
141
+ function renderMemberLines(status) {
142
+ const lines = [];
143
+ if (status.Members.length === 0) {
144
+ lines.push(chalk.dim('members: none (no pnpm-workspace.yaml)'));
145
+ }
146
+ else {
147
+ lines.push(`members (${status.Members.length}): ${status.Members.join(', ')}`);
148
+ }
149
+ for (const missing of status.MissingMemberDirs) {
150
+ lines.push(chalk.red(` missing on disk: ${missing}`));
151
+ }
152
+ for (const forked of status.MembersWithStandaloneInstalls) {
153
+ lines.push(chalk.yellow(` STANDALONE INSTALL: ${forked} has its own package store — its code resolves against that store, ` +
154
+ `not this workspace (split singletons, stale deps). Fix: re-run \`dev workspace --clean-members\`.`));
155
+ }
156
+ lines.push(`detected candidates (${status.DetectedCandidates.length}): ${status.DetectedCandidates.join(', ') || '(none)'}`);
157
+ if (status.CandidatesNotInWorkspace.length > 0) {
158
+ lines.push(chalk.yellow(` not in workspace: ${status.CandidatesNotInWorkspace.join(', ')}`));
159
+ }
160
+ return lines;
161
+ }
162
+ /** Renders a WorkspaceStatus as the terminal report. Pure. */
163
+ export function RenderStatus(status) {
164
+ const lines = [
165
+ chalk.bold(`Workspace parent: ${status.ParentDir}`),
166
+ chalk.dim(` resolved from: ${DescribeDirSource(status.DirSource)}`),
167
+ ];
168
+ if (status.ParentIsGitRepo) {
169
+ lines.push(chalk.red('WARNING: this directory is a git repo root — a workspace parent must be a plain directory of sibling clones.'));
170
+ }
171
+ lines.push('');
172
+ for (const file of status.Files) {
173
+ lines.push(checkLine(file.Exists, file.Name));
174
+ }
175
+ lines.push(checkLine(status.LockfileExists, 'pnpm-lock.yaml (generated by install)'));
176
+ lines.push(checkLine(status.NodeModulesExists, 'node_modules (installed)'));
177
+ lines.push('');
178
+ lines.push(renderSentinelLine(status.Sentinel));
179
+ lines.push('');
180
+ lines.push(...renderMemberLines(status));
181
+ lines.push('');
182
+ lines.push(renderPnpmLine(status));
183
+ return lines.join('\n');
184
+ }
185
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/lib/dev-workspace/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGtE,8FAA8F;AAC9F,MAAM,wBAAwB,GAAG,SAAS,CAAC;AAE3C;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,UAAU,GAAG,IAAI,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,UAAU,GAAG,KAAK,CAAC,CAAC,qBAAqB;QAChG,IAAI,CAAC,UAAU;YAAE,SAAS;QAC1B,MAAM,KAAK,GAAG,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,wEAAwE;AACxE,SAAS,cAAc,CAAC,SAAiB;IACvC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC1D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAsB,CAAC;QACrF,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC;QACpC,OAAO,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,qEAAqE;IACpF,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,0BAA0B,CAAC,SAAiB;IACnD,OAAO,CACL,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;QACzD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAC,CACvE,CAAC;AACJ,CAAC;AAED,yFAAyF;AACzF,SAAS,WAAW,CAAC,SAAiB;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;IAC7D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3C,IAAI,GAAG,CAAC,MAAM,GAAG,wBAAwB,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,YAAY,wBAAwB,yCAAyC,CAAC,CAAC;IAC5G,CAAC;IACD,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,SAAiB,EACjB,iBAAgC,EAChC,SAAoB;IAEpB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,0DAA0D,SAAS,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO;QACL,6BAA6B,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QACzG,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,SAAS;QACpB,eAAe,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACzD,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3G,cAAc,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QAClE,iBAAiB,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QACnE,OAAO,EAAE,OAAO;QAChB,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9E,kBAAkB,EAAE,QAAQ;QAC5B,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnE,QAAQ,EAAE,YAAY,CAAC,SAAS,CAAC;QACjC,UAAU,EAAE,cAAc,CAAC,SAAS,CAAC;QACrC,iBAAiB,EAAE,iBAAiB;KACrC,CAAC;AACJ,CAAC;AAED,wBAAwB;AACxB,SAAS,SAAS,CAAC,MAAe,EAAE,KAAa;IAC/C,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;AACpF,CAAC;AAED,4DAA4D;AAC5D,SAAS,cAAc,CAAC,MAAuB;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClF,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IACpF,IAAI,MAAM,CAAC,iBAAiB,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC,aAAa,MAAM,oCAAoC,CAAC,CAAC;IACpH,IAAI,MAAM,CAAC,iBAAiB,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,gBAAgB,MAAM,YAAY,MAAM,CAAC,iBAAiB,UAAU,CAAC,CAAC;IAClI,OAAO,KAAK,CAAC,MAAM,CAAC,gBAAgB,MAAM,YAAY,MAAM,CAAC,iBAAiB,aAAa,CAAC,CAAC;AAC/F,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CAAC,QAA4B;IACtD,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC;QAC1E,OAAO,KAAK,CAAC,KAAK,CAAC,aAAa,kBAAkB,mBAAmB,eAAe,cAAc,OAAO,GAAG,CAAC,CAAC;IAChH,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC,MAAM,CAAC,aAAa,kBAAkB,0BAA0B,QAAQ,CAAC,MAAM,yBAAyB,CAAC,CAAC;IACzH,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;AAChG,CAAC;AAED,4DAA4D;AAC5D,SAAS,iBAAiB,CAAC,MAAuB;IAChD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,OAAO,CAAC,MAAM,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,6BAA6B,EAAE,CAAC;QAC1D,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,MAAM,CACV,yBAAyB,MAAM,qEAAqE;YAClG,mGAAmG,CACtG,CACF,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,wBAAwB,MAAM,CAAC,kBAAkB,CAAC,MAAM,MAAM,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;IAC7H,IAAI,MAAM,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,uBAAuB,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,YAAY,CAAC,MAAuB;IAClD,MAAM,KAAK,GAAa;QACtB,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,SAAS,EAAE,CAAC;QACnD,KAAK,CAAC,GAAG,CAAC,oBAAoB,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;KACrE,CAAC;IACF,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,8GAA8G,CAAC,CAAC,CAAC;IACxI,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,uCAAuC,CAAC,CAAC,CAAC;IACtF,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,EAAE,0BAA0B,CAAC,CAAC,CAAC;IAC5E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,312 @@
1
+ /**
2
+ * Shared types for the `mj dev workspace` generator.
3
+ *
4
+ * The generator creates the four ephemeral files that join sibling repo checkouts
5
+ * into a single pnpm workspace at their common parent directory:
6
+ * `pnpm-workspace.yaml`, `.npmrc`, `package.json`, `turbo.json`.
7
+ *
8
+ * The generated contents reproduce the manual setup this command replaces: every
9
+ * value was proven by joining these repos by hand before it was automated.
10
+ *
11
+ * @module lib/dev-workspace/types
12
+ */
13
+ /** One pnpm packageExtensions value: the sections pnpm merges into the target package's manifest. */
14
+ export interface PackageExtension {
15
+ dependencies?: Record<string, string>;
16
+ optionalDependencies?: Record<string, string>;
17
+ peerDependencies?: Record<string, string>;
18
+ peerDependenciesMeta?: Record<string, {
19
+ optional?: boolean;
20
+ }>;
21
+ }
22
+ /**
23
+ * The `pnpm` config block a member's root package.json may carry. pnpm honors
24
+ * NONE of these at a workspace member — only the workspace root's block applies
25
+ * (it warns per field, and in the field "the warning drowns") — so the generator
26
+ * must hoist them into the parent manifest or the workspace silently runs
27
+ * without the member's overrides and patches (field finding on #3795: the
28
+ * 14-member workspace ran unpatched type-graphql and lost MJ's 26 pins).
29
+ */
30
+ export interface MemberPnpmBlock {
31
+ overrides?: Record<string, string>;
32
+ /** `pkg@version` -> patch file path RELATIVE TO THE MEMBER REPO ROOT — re-rooted on hoist. */
33
+ patchedDependencies?: Record<string, string>;
34
+ packageExtensions?: Record<string, PackageExtension>;
35
+ peerDependencyRules?: {
36
+ allowedVersions?: Record<string, string>;
37
+ ignoreMissing?: string[];
38
+ };
39
+ }
40
+ /** The root-level package.json fields the workspace generator reads from member repos. */
41
+ export interface MemberPackageJson {
42
+ name?: string;
43
+ version?: string;
44
+ packageManager?: string;
45
+ dependencies?: Record<string, string>;
46
+ devDependencies?: Record<string, string>;
47
+ peerDependencies?: Record<string, string>;
48
+ pnpm?: MemberPnpmBlock;
49
+ }
50
+ /** One package.json found under a member repo's workspace globs. */
51
+ export interface MemberPackageInfo {
52
+ /** Package directory path relative to the repo root (e.g. `packages/AI/Engine`). */
53
+ RelPath: string;
54
+ PackageJson: MemberPackageJson;
55
+ }
56
+ /** One dependency resolution read from a member's committed lockfile. */
57
+ export interface ResolvedLockEntry {
58
+ Name: string;
59
+ /** Concrete resolved version (peer-suffix stripped), e.g. `1.64.1` or `2.0.0-beta.3`. */
60
+ Version: string;
61
+ /**
62
+ * For at-depth `@types/*` entries only: the package names that depend on this
63
+ * resolution, where the lockfile makes parentage derivable (npm v3 nesting
64
+ * paths; pnpm v9 snapshot dependencies). Undefined/empty = parentage unknown
65
+ * (hoisted or importer-direct) — treated as legitimate. Used to exclude
66
+ * `@types` that exist ONLY beneath registry copies of family packages: those
67
+ * graphs cannot exist in the generated workspace, where family packages are
68
+ * workspace-linked, so they are not pin authority.
69
+ */
70
+ Dependents?: string[];
71
+ }
72
+ /** A lockfile entry the pin derivation dropped — always carried to output, never silent. */
73
+ export interface LockfileSkip {
74
+ Name: string;
75
+ Version: string;
76
+ Reason: string;
77
+ }
78
+ /** Everything the generator reads from one member's committed lockfile. Pure data — no network. */
79
+ export interface MemberLockfile {
80
+ Kind: 'pnpm' | 'npm';
81
+ /** Resolved versions of every DIRECT dependency of the member's importers. */
82
+ Direct: ResolvedLockEntry[];
83
+ /** Every `@types/*` resolution at ANY depth (duplicate @types are a guaranteed nominal-type break). */
84
+ Types: ResolvedLockEntry[];
85
+ /**
86
+ * EVERY resolved `name@version` at ANY depth. Pin derivation reads this so a
87
+ * name pinned for one member's direct use also pins per-major for every OTHER
88
+ * committed major in any member's graph — a single global pin would force
89
+ * transitive consumers cross-major (review probe: MJ's graph holds chalk
90
+ * 2.4.2 / 4.1.2 / 5.3.0 / 5.6.2 simultaneously).
91
+ */
92
+ Resolutions: ResolvedLockEntry[];
93
+ Skipped: LockfileSkip[];
94
+ }
95
+ /** A committed lockfile in a format the derivation does not read — reported loudly, never a silent zero. */
96
+ export interface UnsupportedLockfile {
97
+ Kind: 'unsupported';
98
+ /** The lockfile's filename (`pnpm-lock.yaml` or `package-lock.json`). */
99
+ File: string;
100
+ /** The detected lockfileVersion, or 'unknown'. */
101
+ Version: string;
102
+ }
103
+ /** Why a sibling directory qualified as a workspace member candidate. */
104
+ export type CandidateReason = 'mj-app-json' | 'bizapps-packages' | 'mj-monorepo';
105
+ /**
106
+ * Where a member's {@link CandidateRepo.WorkspaceGlobs} came from:
107
+ * - `member-workspace-yaml` — parsed from the member's own pnpm-workspace.yaml.
108
+ * - `no-workspace-yaml` — the member has no workspace file; the proven `packages/*` default.
109
+ * - `workspace-yaml-without-packages-globs` — the member HAS a workspace file but it
110
+ * yielded no packages-rooted positive glob (unsupported shape, or a layout this
111
+ * generator excludes); the default was substituted and the command MUST warn —
112
+ * a silent fallback is the #3795 failure mode.
113
+ */
114
+ export type WorkspaceGlobsSource = 'member-workspace-yaml' | 'no-workspace-yaml' | 'workspace-yaml-without-packages-globs';
115
+ /** A sibling repo checkout that qualifies (or was explicitly included) as a workspace member. */
116
+ export interface CandidateRepo {
117
+ /** Directory basename — this is the name used in the workspace globs. */
118
+ Name: string;
119
+ /** Absolute path to the repo checkout. */
120
+ Path: string;
121
+ /** Detection reasons; empty when the repo was force-included via `--include`. */
122
+ Reasons: CandidateReason[];
123
+ RootPackageJson: MemberPackageJson;
124
+ /** Every package the member's OWN workspace globs enumerate (nested dirs included). */
125
+ Packages: MemberPackageInfo[];
126
+ /** Positive globs whose shape the expander does not support — reported by the command, never silent. */
127
+ UnsupportedGlobs: string[];
128
+ /** The member's committed lockfile data, an unsupported-format marker, or null when the repo commits none. */
129
+ Lockfile: MemberLockfile | UnsupportedLockfile | null;
130
+ /** Raw contents of the repo's root `turbo.json`, or null when absent. */
131
+ TurboJson: string | null;
132
+ /**
133
+ * The member's own workspace globs, relative to its repo root: the `packages:`
134
+ * list of its `pnpm-workspace.yaml` with positives filtered to packages-rooted
135
+ * entries and negations all kept (a `!**\/dist\/**` guard included — they only subtract),
136
+ * or `['packages/*']` when the repo has no workspace file. Never empty. The MJ
137
+ * monorepo declares 42 nested globs (`packages/AI/*`,
138
+ * `packages/Angular/Explorer/*`, ...) — assuming `packages/*` for it silently
139
+ * dropped 248 of its 307 packages from the workspace (#3795).
140
+ */
141
+ WorkspaceGlobs: string[];
142
+ /** Provenance of {@link CandidateRepo.WorkspaceGlobs}; the command warns on the fallback case. */
143
+ WorkspaceGlobsSource: WorkspaceGlobsSource;
144
+ }
145
+ /** A specifier conflict a resolver decided (never silently) — devDeps, overrides, patches, or pins. */
146
+ export interface DevDepConflict {
147
+ Package: string;
148
+ Winner: {
149
+ Repo: string;
150
+ Version: string;
151
+ };
152
+ Losers: Array<{
153
+ Repo: string;
154
+ Version: string;
155
+ }>;
156
+ }
157
+ /** A package name more than one member provides — link target becomes sort-order dependent. */
158
+ export interface DuplicateFamilyPackage {
159
+ Package: string;
160
+ Repos: string[];
161
+ }
162
+ /** Everything the parent-manifest assembly decided — the command reports ALL of it, never silently. */
163
+ export interface ParentManifestReport {
164
+ /** Lockfile-derived override entries emitted (EXACT versions; per-major `name@^N` keys for multi-major names). */
165
+ LockfilePinCount: number;
166
+ /** Same-major lockfile disagreements the highest committed exact resolution won. */
167
+ PinConflicts: DevDepConflict[];
168
+ /** Per-member lockfile entries the derivation dropped, with reasons. */
169
+ LockfileSkips: Array<{
170
+ Repo: string;
171
+ Skip: LockfileSkip;
172
+ }>;
173
+ /** Members whose committed lockfile is a format the derivation cannot read — they contribute NO pins. */
174
+ UnsupportedLockfiles: Array<{
175
+ Repo: string;
176
+ File: string;
177
+ Version: string;
178
+ }>;
179
+ /** Member `pnpm.overrides` entries hoisted into the parent. */
180
+ HoistedOverrideCount: number;
181
+ /** Conflicts among member pnpm blocks (overrides / patches / extensions / peer rules). */
182
+ BlockConflicts: DevDepConflict[];
183
+ /** Patches hoisted, with their re-rooted paths. */
184
+ Patches: Array<{
185
+ Package: string;
186
+ Path: string;
187
+ Repo: string;
188
+ }>;
189
+ /** `workspace:*` overrides emitted for member-provided package names. */
190
+ FamilyOverrideCount: number;
191
+ /** Package names provided by more than one member. */
192
+ DuplicateFamilyPackages: DuplicateFamilyPackage[];
193
+ /** `@types/*` devDependencies excluded from the union (duplicate @types = nominal-type break). */
194
+ SkippedTypesDevDeps: string[];
195
+ /** `workspace:` devDependency specifiers on packages NO member provides — dropped. */
196
+ DroppedWorkspaceDevDeps: Array<{
197
+ Package: string;
198
+ Repo: string;
199
+ }>;
200
+ /** Lockfile-derived pins displaced by an explicit member override or a family workspace:* override. */
201
+ SupersededPins: string[];
202
+ }
203
+ /** Result of building the parent `package.json`. */
204
+ export interface RootPackageJsonResult {
205
+ Content: string;
206
+ Conflicts: DevDepConflict[];
207
+ /** Which member repo (or fallback) supplied the pnpm `packageManager` pin. */
208
+ PinSource: string;
209
+ Pin: string;
210
+ /** Every absorption decision the assembly made. */
211
+ Report: ParentManifestReport;
212
+ }
213
+ /** Result of picking the parent `turbo.json`. */
214
+ export interface TurboJsonResult {
215
+ Content: string;
216
+ /** Member repo the file was copied from, or 'generator fallback'. */
217
+ Source: string;
218
+ }
219
+ /** One generated file, by name relative to the parent directory. */
220
+ export interface GeneratedFile {
221
+ Name: string;
222
+ Content: string;
223
+ }
224
+ /** Outcome of writing the generated files. */
225
+ export interface WriteResult {
226
+ Written: string[];
227
+ /** Files that existed and were saved to `<name>.bak` before overwrite (only with force). */
228
+ BackedUp: string[];
229
+ }
230
+ /**
231
+ * Contents of the `.mj-dev-workspace.json` sentinel written beside the other
232
+ * generated files. Lowercase keys: this is a JSON wire shape, not a class.
233
+ */
234
+ export interface WorkspaceSentinel {
235
+ /** Fixed marker identifying the writer — what `clean` checks before deleting. */
236
+ generatedBy: string;
237
+ /** Every file name (relative to the parent) the generator wrote, sorted. */
238
+ files: string[];
239
+ /** Member repo directory names the workspace was generated for, sorted. */
240
+ members: string[];
241
+ }
242
+ /** Outcome of reading the sentinel: ours, not there, or there but not ours. */
243
+ export type SentinelReadResult = {
244
+ Kind: 'valid';
245
+ Sentinel: WorkspaceSentinel;
246
+ } | {
247
+ Kind: 'absent';
248
+ } | {
249
+ Kind: 'invalid';
250
+ Reason: string;
251
+ };
252
+ /** One path `dev workspace clean` owns at the parent directory. */
253
+ export interface CleanTarget {
254
+ /** Path relative to the parent directory. */
255
+ Name: string;
256
+ Kind: 'file' | 'directory';
257
+ Exists: boolean;
258
+ }
259
+ /** What `dev workspace clean` would remove at a parent directory. */
260
+ export interface CleanPlan {
261
+ ParentDir: string;
262
+ /** Every owned path, in removal order (the sentinel last). */
263
+ Targets: CleanTarget[];
264
+ /** `.bak` files present at the parent — never removed, always reported. */
265
+ PreservedBackups: string[];
266
+ }
267
+ /** Outcome of executing a clean plan. */
268
+ export interface CleanResult {
269
+ Removed: string[];
270
+ /** Owned paths that were already absent — reported, never an error. */
271
+ AlreadyGone: string[];
272
+ }
273
+ /**
274
+ * Where a command's `--dir` value came from. oclif resolves flag > env > default;
275
+ * this records which of the three won so `status` can report it.
276
+ */
277
+ export type DirSource = 'flag' | 'env' | 'default';
278
+ /** Everything `dev workspace status` reports. */
279
+ export interface WorkspaceStatus {
280
+ ParentDir: string;
281
+ /** Which input supplied {@link WorkspaceStatus.ParentDir}. */
282
+ DirSource: DirSource;
283
+ /** Whether the parent dir itself looks like a git repo root (it must not). */
284
+ ParentIsGitRepo: boolean;
285
+ /** Existence of each generated file at the parent. */
286
+ Files: Array<{
287
+ Name: string;
288
+ Exists: boolean;
289
+ }>;
290
+ LockfileExists: boolean;
291
+ NodeModulesExists: boolean;
292
+ /** Member repo names parsed from pnpm-workspace.yaml (empty when the file is absent). */
293
+ Members: string[];
294
+ /** Members listed in the workspace file whose directory no longer exists. */
295
+ MissingMemberDirs: string[];
296
+ /**
297
+ * Members carrying their OWN install (a member-root `.pnpm` store or npm's
298
+ * `.package-lock.json`) — resolution forked away from the parent workspace.
299
+ */
300
+ MembersWithStandaloneInstalls: string[];
301
+ /** Candidate repo names detected on disk right now. */
302
+ DetectedCandidates: string[];
303
+ /** Detected candidates that are not members of the current workspace. */
304
+ CandidatesNotInWorkspace: string[];
305
+ /** Whether the parent carries the generator's sentinel manifest, and if not, why. */
306
+ Sentinel: SentinelReadResult;
307
+ /** The pnpm version pinned in the parent package.json (`pnpm@X.Y.Z`), or null. */
308
+ PinnedPnpm: string | null;
309
+ /** Output of `pnpm --version` at the parent, or null when pnpm was not runnable. */
310
+ ActivePnpmVersion: string | null;
311
+ }
312
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/dev-workspace/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,qGAAqG;AACrG,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC/D;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,8FAA8F;IAC9F,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACrD,mBAAmB,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAC9F;AAED,0FAA0F;AAC1F,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB;AAED,oEAAoE;AACpE,MAAM,WAAW,iBAAiB;IAChC,oFAAoF;IACpF,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,iBAAiB,CAAC;CAChC;AAED,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,yFAAyF;IACzF,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,4FAA4F;AAC5F,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,mGAAmG;AACnG,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,8EAA8E;IAC9E,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,uGAAuG;IACvG,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B;;;;;;OAMG;IACH,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,4GAA4G;AAC5G,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,aAAa,CAAC;IACpB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,yEAAyE;AACzE,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,kBAAkB,GAAG,aAAa,CAAC;AAEjF;;;;;;;;GAQG;AACH,MAAM,MAAM,oBAAoB,GAAG,uBAAuB,GAAG,mBAAmB,GAAG,uCAAuC,CAAC;AAE3H,iGAAiG;AACjG,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,eAAe,EAAE,iBAAiB,CAAC;IACnC,uFAAuF;IACvF,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,wGAAwG;IACxG,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,8GAA8G;IAC9G,QAAQ,EAAE,cAAc,GAAG,mBAAmB,GAAG,IAAI,CAAC;IACtD,yEAAyE;IACzE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;;;;;OAQG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,kGAAkG;IAClG,oBAAoB,EAAE,oBAAoB,CAAC;CAC5C;AAED,uGAAuG;AACvG,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAED,+FAA+F;AAC/F,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,uGAAuG;AACvG,MAAM,WAAW,oBAAoB;IACnC,kHAAkH;IAClH,gBAAgB,EAAE,MAAM,CAAC;IACzB,oFAAoF;IACpF,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,wEAAwE;IACxE,aAAa,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IAC3D,yGAAyG;IACzG,oBAAoB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7E,+DAA+D;IAC/D,oBAAoB,EAAE,MAAM,CAAC;IAC7B,0FAA0F;IAC1F,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,mDAAmD;IACnD,OAAO,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,yEAAyE;IACzE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sDAAsD;IACtD,uBAAuB,EAAE,sBAAsB,EAAE,CAAC;IAClD,kGAAkG;IAClG,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,sFAAsF;IACtF,uBAAuB,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClE,uGAAuG;IACvG,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,oDAAoD;AACpD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,mDAAmD;IACnD,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,oEAAoE;AACpE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,8CAA8C;AAC9C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,4FAA4F;IAC5F,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,+EAA+E;AAC/E,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,iBAAiB,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,mEAAmE;AACnE,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,qEAAqE;AACrE,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,2EAA2E;IAC3E,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,yCAAyC;AACzC,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,uEAAuE;IACvE,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;AAEnD,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,SAAS,EAAE,SAAS,CAAC;IACrB,8EAA8E;IAC9E,eAAe,EAAE,OAAO,CAAC;IACzB,sDAAsD;IACtD,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAChD,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,yFAAyF;IACzF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,6EAA6E;IAC7E,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B;;;OAGG;IACH,6BAA6B,EAAE,MAAM,EAAE,CAAC;IACxC,uDAAuD;IACvD,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,yEAAyE;IACzE,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,qFAAqF;IACrF,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,kFAAkF;IAClF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oFAAoF;IACpF,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC"}